Arsip Penulis: anggitpy

Tentang anggitpy

Halo dunia

Kritik tanpa solusi

Kritik tanpa solusi? Kedengerannya nggak enak banget ya. Tapi itu lebih baik daripada tidak ada kritik sama sekali.

Sebagai pengembang amatiran, saya seringkali dapat proyek-proyek kecil dan kebanyakan user hanya paham sedikit mengenai dunia teknologi informasi. Tugas saya adalah membangun aplikasi yang foolproof (siapa saja bisa memakainya dengan mudah).

Membangun aplikasi yang ramah pengguna bukan perkara mudah. Mewujudkannya ternyata membutuhkan banyak masukan dari sesama rekan pengembang. Tapi yang paling utama adalah masukan dari pengguna.

Pengguna seringkali memberi kritik tanpa saran.
Misalnya:
Mas, formnya kok susah banget ya?
Ini kok loginnya ga bisa ya.
Aplikasinya kayaknya enakan yang dulu deh.
Saya sudah daftar tapi kok email belum masuk ya.
Ini kok aplikasinya lambat ya.
Saya maunya X, yang Y dibuang aja.
dan lain-lain

Perlu diketahui, pengguna seringkali tidak tahu apa yang mereka inginkan dan tidak tahu cara kerja berbagai teknologi informasi dibalik layar. Dan seringkali kritik sulit dibedakan dengan makian. Tapi tidak apa-apa, berita baiknya adalah kita punya goal atau tujuan yang sama. Jadi, adalah tugas kita, pengembang untung membimbing mereka sehingga visi kita sebagai pengembang dan keinginan user sejajar menuju goal yang sudah ditetapkan.

Kadang-kadang, sebagai pengembang muda yang merasa ahli, ego kita super tinggi. Kita menganggap aplikasi buatan kita ini sudah keren, bagus, dan sesuai. Dikritik jadi kesal dan marah. Tapi jangan kuatir, itu semua cuma proses yang harus dilalui dengan kepala dingin.

Semakin sering berkomunikasi dengan user, semakin cepat pula kita menghasilkan solusi atas kritik-kritik tadi. Kritik adalah kemajuan bukan kemunduran. Jadi kalau ada yang kritik membabi-buta dan tanpa solusi jangan marah ya, ngopi dululah kalo lagi kesel.

The Problem with empty()

http://stackoverflow.com/questions/1075534/cant-use-method-return-value-in-write-context/4328049#4328049

empty() needs to access value by reference (in order to check whether that reference points to something that exists), and PHP before 5.5 didn’t support references to temporary values returned from functions.

However, the real problem you have is that you use empty() at all, mistakenly believing that “empty” value is any different from “false”.

Empty is just an alias for !isset($thing) || !$thing. When the thing you’re checking always exists, the empty() function is nothing but a negation operator.

PHP doesn’t have concept of emptyness. Values that evaluate to false are empty, values that evaluate to true are non-empty. It’s the same thing. This code:

$x = something();
if (empty($x)) …
and this:

$x = something();
if (!$x) …
has always the same result, in all cases, for all datatypes (because $x is defined empty() is redundant).

Return value from the method always exists (even if you don’t have return statement, return value exists and contains null). Therefore:

if (!empty($r->getError()))
is logically equivalent to:

if ($r->getError())

Memori Ojek Pangkalan dan Monopoli Gojek

An interesting point of view regarding Gojek.

Esei Nosa

www.go-jek.com http://www.go-jek.com

Kalau Jakarta mau jadi metropolitan yang sebenarnya, Gojek harus memonopoli semua pangkalan ojek. Harus profesional, teratur, terstruktur dan meminimalisir hubungan negosiasi antara tukang ojek (yang disebut driver (supir) oleh Gojek, padahal harusnya Rider (pengendara) karena motor tidak disetir tapi dikendarai)). Akan ada kepastian harga, kepastian keselamatan (asuransi) dan tidak ada ruang main-main atau dipermainkan. Apakah kita mau? Jangan bilang mau begitu saja, itu artinya gampang digodain setan. Coba saya bantu anda dengan memori saya tentang ‘institusi lokal’ yang hendak dibantai modernisme ini.

Anggap saja namanya pak Adi (bukan nama sebenarnya). Dia tukang ojek langganan saya dari Depok-Cilandak waktu saya masih tinggal di Margonda dan bekerja di sebuah sekolah national plus tahun 2009-2011. Pak Adi ini sarjana muda dan kuliah di kampus yang sama dan jurusan yang sama seperti bapak saya. Kalau saya ngobrol sama dia, saya jadi ingat pada bapak saya.

Ada lagi Mamat (juga bukan nama sebenarnya). Dia tukang…

Lihat pos aslinya 1.131 kata lagi

Ruby Gem Fix SSL Certificate Verification Error

How to fix error and get back to https with ssl:
The reason is old rubygems. So we need to remove ssl source to be able to update gem –system which includes rubygems and so on. after this we can feel free to get back to ssl source.

gem sources -r https://rubygems.org/ - to temporarily remove secure connection
gem sources -a http://rubygems.org/ - add insecure connection
gem update --system - now we're able to update rubygems without SSL

after updating rubygems do vice versa

gem sources -r http://rubygems.org/ - to remove insecure connection
gem sources -a https://rubygems.org/ - add secure connection

Now you’re able to update gems using secure connection.

gem update

http://stackoverflow.com/questions/10246023/bundle-install-fails-with-ssl-certificate-verification-error/10430331#10430331

Workaround RubyGems’ SSL errors on Ruby for Windows (RubyInstaller)

Intip Rok Wanita Dengan Bersembunyi di Selokan, Seorang Pria Ditangkap

man-hides-in-gutter-women-skirts-japan-01

Berita ini memang sudah lama, tahun 2013, tapi menarik perhatian saya yang baru saja membacanya. Selain inovatif dan maju, Jepang juga terkenal dengan pria-pria hidung belangnya. Seorang pria asal Kobe, Jepang ditangkap karena melakukan kejahatan yang unik dan bisa dibilang jenius.

Hirai Yasuomi (26), dilaporkan ke polisi setelah seseorang mendapatinya tiduran terlentang di sebuah selokan pinggir jalan untuk mengintipi rok-rok wanita yang lewat diatasnya. Tentu saja, tidak seperti di Jakarta, selokan di Jepang bersih dan ada tutupnya yang garis-garis seperti di komik Doraemon.

Meski banyak orang mengutuk perbuatan tercelanya dan berharap pria tersebut dihukum berat, netizens juga memberi pujian atas antusiasme dan determinasi pria hidung belang tersebut.

Sequel Drama Mini AADC dan Alternate Timeline

Tahun 2002 dulu ABG mana yang nggak nonton AADC di bioskop? Jangankan ABG, kami-kami yang pada kala 2002 dulu sudah tampak bijak bak pohon beringin tua juga gemar menontonnya. Drama remaja super cheesy masa pra cabe-cabean ini tampaknya juga menarik perhatian pria brewokan rekan saya pada waktu itu. Tidak tanggung-tanggung beliau menontonnya kalau tidak salah hingga 10 kali. Namun begitu, walaupun cheesy saya mendaulat kisah Cinta dan Rangga besutan Rudi Soedjarwo ini masih lebih baik daripada Twilight.

Setelah 12 tahun berlalu, Line yang saat ini ironisnya merupakan tools utama para cabe-cabean untuk bercengkerama sambil minum es buah membuat sebuah promo yang ciamik dengan mengutilisasi kisah Cinta dan Rangga. Dramanya sendiri sih tidak ada yang istimewa, cerita mengayun lambat dipadu-padankan dengan aksi menyentuh layar dimana Line sedang ditampilkan. Namun bagi saya dan sang pria brewokan, setelah 12 tahun menunggu, tentu saja kami menyambut baik periklanan dibalik kisah cinta non cabe-cabean ini.

Tapi tunggu dulu… apakah ini sequel atau alternate timeline? Membingungkan bukan saudara-saudara? AADC kan pernah punya sequel yaitu sinetron dengan Cinta yang lebih Ceking dan Rangga yang lebih sombong. Jadi AADC versi Garis ini sequel dari 2002 atau alternate timeline dari 2002? Saya lebih suka menganggap ini alternate timeline dari 2002.

Sebetulnya jika mengikuti versi Alternate Timeline, waktu 2002 dulu pas Rangga ke Amerika, beliau tidak pulang ke Jakarta karena membantu Avenger melawan Loki dengan menjadi staff ahli bidang puisi di lembaga SHIELD. Setelah Loki dikalahkan, barulah Rangga memiliki waktu untuk ke Jakarta dan kembali menemui cinta dan ibu-ibu AADC.

Untuk lebih jelasnya, waktu dan tempat kami persilakan untuk ikut menonton video berikut ini dan mungkin juga bisa memutuskan untuk menginstall aplikasi Garis tadi.

Menu Select Berantai Menggunakan Jquery dan PHP (Jquery Chained Select)

Membuat tampilan (antar muka) aplikasi web yang baik dan mudah dipahami memang selalu menjadi tantangan tersendiri bagi developer dan designer. Salah satunya adalah membuat menu select berantai dengan mengambil nilai dari database (remote).

Menu select berantai (chained select menu) kira-kira bentuknya seperti ini:
Jquery Chained Select

Di sebelah kiri adalah menu propinsi dan di sebelah kanannya adalah menu kabupaten. Daftar kabupaten muncul sesuai nama propinsi yang kita pilih. Tutorial ini menggunakan plugin jquery dari http://www.appelsiini.net/projects/chained. Kita akan menggunakan script remote dari plugin tersebut. Script remote tersebut digunakan khusus untuk membuat menu select berantai dengan nilai yang diambil dari database.

Langkah 1:
Buat Database dengan skema sbb:
skema database
Klik disini untuk mengimpor data ke database anda.

Langkah 2:
Seperti bisa dilihat di http://www.appelsiini.net/projects/chained. Script jquery remote ini menggunakan format json. Jadi ketika kita memilih propinsi Sumatera Utara (id = 2), maka script remote ini mengharapkan nilai json seperti dibawah ini. Nilai berikut didapat dari GET request ?propinsi=2 .

{
"466": "Kabupaten Labuhan Batu",
"467": "Kabupaten Tapanuli Utara",
"468": "Kota Tanjung Balai",
"469": "Kota Medan",
"470": "Kabupaten Asahan",
"471": "Kabupaten Batubara",
"472": "Kabupaten Dairi",
"473": "Kabupaten Deli Serdang",
"474": "Kabupaten Humbang Hasundutan",
"475": "Kabupaten Labuhan Batu Selatan",
"476": "Kabupaten Mandailing Natal",
"477": "Kabupaten Nias Selatan",
"478": "Kabupaten Padang Lawas",
"479": "Kabupaten Pakpak Bharat",
"480": "Kabupaten Samosir",
"481": "Kota Padang Sidempuan",
"482": "Kota Pematangsiantar",
"483": "Kota Tebing Tinggi",
"484": "Kota Binjai",
"485": "Kabupaten Serdang Bedagai",
"486": "Kabupaten Langkat",
"487": "Kabupaten Toba Samosir",
"488": "Kabupaten Karo",
"489": "Kabupaten Simalungun",
"490": "Kabupaten Nias Barat",
"491": "Kabupaten Tapanuli Tengah",
"492": "Kabupaten Labuhan Batu Utara",
"493": "Kabupaten Gunung Sitoli",
"494": "Kabupaten Nias",
"495": "Kabupaten Nias Utara",
"496": "Kabupaten Tapanuli Selatan",
"497": "Kabupaten Padang Lawas Utara",
"498": "Kota Sibolga"
}

Supaya lebih paham, kita langsung saja buat nama file json.php di folder chain (nama folder terserah anda) dan di dalamnya tulis kode berikut ini:

<?php

// Connect Database
$con = mysql_connect("localhost","root","");
if (!$con){die('Could not connect: ' . mysql_error());}
$selected = mysql_select_db("jquery_chained", $con) or die("Could not select jquery_chained");

// Query propinsi
$propinsi = $_GET['propinsi'];
$result = mysql_query("SELECT * FROM kabupaten WHERE id_propinsi = '$propinsi'");

$results_array = array();
while($row = mysql_fetch_array($result)) {
	$results_array[$row['id_kabupaten']] = $row['kabupaten'];
}

echo json_encode($results_array);

mysql_close($con);

Sekarang kita coba buka http://localhost/chain/json.php?propinsi=2
Anda akan melihat daftar kabupaten di propinsi dengan id_propinsi = 2 (Sumatera Utara) dengan format json seperti ini:
{"466":"Kabupaten Labuhan Batu","467":"Kabupaten Tapanuli Utara","468":"Kota Tanjung Balai","469":"Kota Medan","470":"Kabupaten Asahan","471":"Kabupaten Batubara","472":"Kabupaten Dairi","473":"Kabupaten Deli Serdang","474":"Kabupaten Humbang Hasundutan","475":"Kabupaten Labuhan Batu Selatan","476":"Kabupaten Mandailing Natal","477":"Kabupaten Nias Selatan","478":"Kabupaten Padang Lawas","479":"Kabupaten Pakpak Bharat","480":"Kabupaten Samosir","481":"Kota Padang Sidempuan","482":"Kota Pematangsiantar","483":"Kota Tebing Tinggi","484":"Kota Binjai","485":"Kabupaten Serdang Bedagai","486":"Kabupaten Langkat","487":"Kabupaten Toba Samosir","488":"Kabupaten Karo","489":"Kabupaten Simalungun","490":"Kabupaten Nias Barat","491":"Kabupaten Tapanuli Tengah","492":"Kabupaten Labuhan Batu Utara","493":"Kabupaten Gunung Sitoli","494":"Kabupaten Nias","495":"Kabupaten Nias Utara","496":"Kabupaten Tapanuli Selatan","497":"Kabupaten Padang Lawas Utara","498":"Kota Sibolga"}

Langkah 3:
Download script remote chained https://raw.githubusercontent.com/tuupola/jquery_chained/master/jquery.chained.remote.min.js
Buat file index.php dan tulis kode berikut:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
	<meta charset="UTF-8">
	<title>Jquery Chained</title>
	
	<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
	<script src="jquery.chained.remote.min.js"></script>
	
	<script>	
	$( document ).ready(function() {

		$("#kabupaten").remoteChained({
			parents : "#propinsi",
			url : "json.php",
			loading : "Memuat..."
		});

	});		
	</script>
	
	
</head>
<body>

<?php
// Ambil Semua Nilai Propinsi Untuk Select Menu
$con = mysql_connect("localhost","root","");
if (!$con){die('Could not connect: ' . mysql_error());}
$selected = mysql_select_db("jquery_chained", $con) or die("Could not select jquery_chained");
$result = mysql_query("SELECT * FROM propinsi");
?>

<select name="propinsi" id="propinsi">
	<option value="">--</option>
	<?php while($row = mysql_fetch_array($result)): ?>
		<option value="<?php echo $row['id_propinsi']?>"><?php echo $row['propinsi'] ?></option>	
	<?php endwhile ?>
</select>

<select name="kabupaten" id="kabupaten">
	<option value="">--</option>
</select>
	
</body>
</html>

Jika semuanya benar, anda akan melihat tampilan seperti ini:
Jquery Chained Select