Bug Y2K38 pada Fungsi date() PHP

Agar tidak bertele-tele, coba saja kode PHP berikut ini.

<?php
echo date('l d F Y H:i:s', strtotime('2038-02-19 3:14:07'));

Seperti yang kita tau, fungsi date() pada kode PHP di atas akan mengembalikan sebuah string waktu sesuai format ‘l d F Y H:i:s’. Harusnya pada browser akan tercetak:

Friday 19 February 2038 03:14:07

Namun jika waktu yang tercetak tidak seperti di atas, berarti aplikasi PHP Anda mempunyai kemungkinan terkena bug Y2K38.

Apa yang dimaksud bug Y2K38? Y2K38 yang disebut juga sebagai Unix Millenium Bug, dapat mempengaruhi sistem yang menggunakan 32-bit signed integer untuk merepresentasikan waktu (hari, tanggal, bulan, tahun, jam, menit, dsb). Sebagai patokan awalnya adalah Kamis, 1 Januari 1970 00:00:00 UTC dan akan berakhir pada Selasa, 19 Januari 2038 03:14:07 UTC. Jika waktu sudah melewati 19 Januari 2038 03:14:07 UTC, akan terjadi integer overflow. Semua bit sudah terpakai, kecuali bit pertama yang tidak boleh digunakan karena sebagai signed bit (0 = positif, 1 = negatif).

Kondisi signed bit yang diinkremen (ditambah dengan 1) selama proses perhitungan maju ini mengakibatkan nilainya mendadak berubah menjadi negatif, dalam kasus integer overflow ini nilainya menjadi negatif yang maksimum (angka paling kecil). Kemudian proses perhitungan maju berlanjut sampai negatif 0. Hal ini akan mengacaukan perhitungan waktu pada sistem. Gambar yang diambil dari Wikimedia ini menjelaskan dengan sempurna proses tersebut.

Bug Y2K38

Tahun 2038 masih lebih dari 20 tahun lagi, seharusnya masalah ini tidak perlu dikuatirkan. Pada tahun itu mungkin aplikasi yang Anda buat sekarang sudah usang dan tidak digunakan. Akan tetapi sebagai seorang programer yang baik sudah seharusnya memikirkan segala kemungkinan. Mungkin saja ada orang yang memakai kode yang Anda buat untuk aplikasi lain yang membutuhkan perhitungan waktu sampai 30 tahun ke depan.

Menggunakan sistem 64-bit mungkin dapat menyelamatkan Anda, karena bagaimanapun juga 64-bit signed integer jauh lebih lebar jangkauannya dibanding 32-bit signed integer. Tapi saya belum pernah mencoba sejauh itu. Alternatif lain yang lebih mudah yaitu dengan menggunakan class PHP DateTime yang diperkenalkan mulai PHP versi 5.2.

<?php
$mydate = new DateTime('2038-02-19 3:14:07');
echo $mydate -> format('l d F Y H:i:s');

Dengan menggunakan DateTime aplikasi PHP tidak terkena bug Y2K38, karena mampu menangani waktu sampai pada 31 Desember 9999! Mungkin Anda berniat mewariskan kode ini untuk generasi berikutnya 😀

28. June 2012 by Sibudi
Categories: Troubleshooting | Tags: , , | 2 comments

Memanipulasi URL pada Status Bar Browser

Mungkin teknik ini hanya digunakan oleh para penjahat dunia maya. Orang yang merasa perlu untuk menyembunyikan apa yang seharusnya bebas diketahui publik. Penting bagi kita untuk mengetahui teknik yang digunakan oleh para penjahat untuk melindungi diri bukan untuk sebaliknya. Biasanya ini digunakan untuk menyembunyikan/memanipulasi link referal atau sebagai langkah awal kejahatan phishing.

Ketika kita menyorotkan mouse pada sebuah tautan (link), misalnya ini, maka akan muncul URL dari tautan tersebut pada status bar. Biasanya terletak pada pojok kiri bawah sebuah browser.

Sebuah tautan yang benar adalah menggunakan tag HTML <a> dengan atribut href dan title. Atribut href wajib ada karena dibutuhkan sebagai tujuan sebuah tautan dan memunculkan URL pada status bar, sedangkan title opsional.

<a href="http://sibudi.net" title="Websiteku">klik di sini</a>

Berikut ini adalah 3 teknik yang digunakan untuk menyembunyikan atau memanipulasi tautan.

Cara pertama

<a style="cursor:pointer" onClick="location.href='http://sibudi.net'" >klik di sini</a>

Pada kode di atas, atribut href sengaja tidak ditulis. Dalam keadaan normal hal tersebut tidak berbahaya, hanya akan menampilkan tulisan “klik di sini” pada browser dan tidak bisa diklik. Namun dengan tambahan sedikit kode JavaScript di atas, tautan di atas akan mengarah pada “http://sibudi.net” tanpa dapat dilihat tujuannya oleh pengguna awam.

Untuk lebih meyakinkan dapat ditambahkan inline css cursor:pointer yang akan mengubah pointer menjadi gambar tangan. Bisa juga ditambahkan text-decoration:underline dan color sesuai dengan warna yang digunakan pada browser.

Cara kedua (hanya bekerja pada browser IE):

<a href="http://sibudi.net" onMouseOver="window.status='http://www.google.com'; return true" onMouseOut="window.status=''">klik di sini</a>

Tautan di atas tidak lagi hanya menyembunyikan URL tapi memanipulasi URL. Jadi pada status bar tertulis “http://google.com” padahal jika diklik akan menuju ke “http://sibudi.net”. Namun teknik itu tidak akan bekerja pada browser selain IE.

Cara ketiga

<script>
function redirect(URL) {

  document.location = URL;
  return false;
}
</script>

<a href="http://google.com" onClick="return redirect('http://sibudi.net');">klik di sini</a>

Teknik ketiga adalah gabungan dari 2 teknik sebelumnya, yaitu menggunakan atribut href dan onClick. Seperti yang kita tau, atribut href akan memunculkan URL pada status bar. Ketika tautan di atas diklik, maka akan membangkitkan event onClick dan memanggil fungsi JavaScript redirect.

Perlu dicatat bahwa ketiga teknik di atas sangat bergantung pada JavaScript. Jadi tidak akan bekerja pada browser yang di-disable Javascript-nya. Tautan akan tetap mengarah sesuai pada atribut href dan hanya berupa teks biasa jika atribut href tidak ada. Untuk menangani masalah JavaScript ini, bisa mengacu pada tulisan menangani browser dengan JavaScript disable.

15. June 2012 by Sibudi
Categories: JavaScript | Tags: , , , | 7 comments

5 Teknik Dasar HTML5 yang Wajib Anda Ketahui

Dalam berbagai artikel dan contoh kode pada blog ini sudah diterapkan beberapa fitur baru yang ada di HTML5. Saat ini sebagian besar browser terbaru sudah mendukung fitur-fitur tersebut. Berikut ini adalah 5 teknik dasar HTML5 untuk membuat dokumen HTML Anda menjadi lebih singkat dan bersih.

1. Penulisan doctype pada awal sebuah dokumen HTML yang lebih singkat dan sederhana.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Dulu, hampir tidak mungkin ada seorang web developer yang hafal di luar kepala kode untuk menuliskan doctype di atas. Sekarang Anda dapat menggantinya dengan doctype berikut ini.

<!doctype html>

Sederhana sekali dan tidak perlu menuliskannya dengan huruf besar seperti orang sedang marah.

2. Penggunaan XML namespace dan atribut-atribut XML lain pada elemen html tidak diperlukan.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

Pada HTML5 cukup ditulis:

<html lang="en">

3. Pada HTML5 diperkenalkan cara baru untuk menyebutkan charset dokumen.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

Pada HTML5 menjadi:

<meta charset="utf-8">

4. Pada HTML5 kita bisa menulis tag script, style, dan link tanpa atribut type="text/javascript" dan type="text/css".

<script type="text/javascript">
  // kode javascript Anda di sini
</script>

Pada HTML5 cukup dituliskan seperti berikut:

<script>
  // kode javascript Anda di sini
</script>

5. Dokumen HTML5 tetap valid tanpa adanya slash ‘/’ pada self closing tag.

<img src="" alt="" />
<br />

Pada HTML5, tanda slash bisa dihilangkan.

<img src="" alt="">
<br>

Itulah 5 teknik dasar untuk membuat sebuah dokumen HTML5 yang valid dan memiliki syntax yang kompatibel dengan HTML4 dan XHTML1. Jadi tidak ada salahnya untuk menggunakannya dalam setiap website yang kita buat. Seperti yang Anda lihat, HTML5 membuat kode menjadi lebih singkat dan bersih, sehingga menghasilkan ukuran file yang lebih kecil. Ukuran file yang lebih kecil akan membuat website menjadi lebih ringan untuk diakses.

11. May 2012 by Sibudi
Categories: HTML5 | Tags: , , | 3 comments

Mengeblok Flash dari Browser

Akhir-akhir ini semakin banyak website yang tidak beretika, menjejali pengunjungnya dengan iklan-iklan besar yang menutup hampir keseluruhan layar. Iklan yang muncul tiba-tiba dan menutup sebagian layar tidak hanya memakan bandwidth tetapi juga sangat mengganggu. Banyak sekali iklan bertebaran di situs-situs besar, baik yang berbentuk teks maupun gambar. Tapi di antara iklan yang paling menyebalkan tentunya adalah iklan berbentuk animasi Flash. Tidak hanya menampilkan gambar bergerak, terkadang iklan tersebut juga mengeluarkan suara yang mengagetkan.

Browser adalah pintu gerbang menuju dunia maya, maka sudah sewajarnya kita melindunginya dari hal-hal yang tidak diinginkan. Untuk mengatasi masalah yang cukup mengganggu ini, kita dapat memasang plugin flashblock pada browser. Khusus untuk Google Chrome ada sebuah pilihan yang dapat diaktifkan untuk mengeblok script-script yang tidak bisa dijalankan secara alami oleh browser, atau dengan kata lain script yang berjalan menggunakan plugin seperti Flash. Cara mengaktifkannya adalah dengan menuju ke menu settings -> Under The Hood -> klik pada tombol Content Settings pada bagian Privacy -> cari pada bagian Plug-ins -> lalu pilih Click to play.

click to play flash

Dengan pilihan ini, pengguna diharuskan mengeklik tulisan “click to run the Flash plug-in” pada browser ketika sebuah animasi Flash muncul. Tentunya kita hanya mengeklik pada media yang dipercaya dan tau isinya tidak akan membuang-buang waktu atau bandwidth, misalnya pada saat menonton video di Youtube. Kini kita bisa berselancar, membaca informasi di dunia maya dengan nyaman dan aman tanpa gangguan animasi Flash. Mungkin pada versi Firefox berikutnya pilihan ini juga akan disertakan. Di bawah ini adalah tampilan pada saat dijumpai animasi/video Flash pada browser.

click to play flash plugin

02. May 2012 by Sibudi
Categories: Off Topic | Tags: , | Leave a comment

Peraturan Masyarakat

Dalam kehidupan bermasyarakat, kita harus mematuhi peraturan (norma) yang berlaku. Peraturan yang dibuat oleh orang-orang terpandai dalam masyarakat. Peraturan tersebut dirancang supaya orang-orang pandai bisa hidup dengan nyaman.

Orang-orang bodoh, tidak akan mengerti peraturan-peraturan tersebut. Tetapi orang-orang pandai tau, bagaimana menggunakan dan memainkannya. Peraturan-peraturan tersebut akan terus melayani orang-orang pandai. Sebagai contoh, pajak, gaji, dana pensiun, asuransi, pelayanan kesehatan, alokasi dana, subsidi, dan lain-lain.

Orang-orang pandai dengan sengaja membuat peraturan yang sangat sulit untuk dimengerti. Sementara orang-orang bodoh yang berusaha memahami peraturan itu diperlakukan seperti idiot. Jadi bagi orang-orang bodoh, sepanjang hidupnya akan dicurangi dan diharuskan membayar lebih banyak.

Orang-orang pandai tidak bisa ditipu dengan mudah, mereka akan mengambil manfaat dari situasi ini. Situasi orang-orang bodoh yang dicurangi dan ditindas sepanjang waktu. Ini adalah fenomena yang terjadi di masyarakat. Jika Anda tidak bisa menerima kenyataan ini, buatlah peraturan sendiri! Jika Anda ingin hidup tanpa dicurangi, belajarlah!

27. April 2012 by Sibudi
Categories: Off Topic | Tags: , | Leave a comment

← Older posts

Newer posts →