Archive for the ‘ Article ’ Category

Flat Token Authentication

Latar belakang

Saat ini saya tengah mengembangkan sebuah API(REST API) untuk moderasi konten digital seperti pada website, forum, dan sebagainya. Namun saya sadar bahwa keamanan(security) adalah hal yang amat penting dan krusial bagi semua pihak.

Akhirnya saya mulai mempelajari mekanisme security yang ada dan sudah umum di gunakan untuk API, hinggal akhirnya saya menemukan OAuth 1 dan OAuth 2. Pada saat ini OAuth 2 masih berupa draft dan belum resmi, namun kita bisa mempelajari konsepnya. Setelah membandingkan dan mencoba sendiri security OAuth 2, ternyata menurut saya tidak aman karena token bisa digunakan dimanapun dan berkali-kali. Kelebihan OAuth 2 adalah tidak begitu kompleks dan rumit seperti OAuth 1, namun seperti yang sudah saya jelaskan sebelumnya bahwa OAuth 2 masih berupa draft dan tidak aman(saya sudah membuktikannya). Anda bisa membaca link ini sebagai bahan bacaan dan pertimbangan tambahan http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/

Sedangkan untuk OAuth 1, saya sudah mencoba dan memang cukup secure secara konsep dan implementasinya dan juga sudah dipakai oleh industry selama ini. Namun perlu diingat bahwa OAuth 1 dan OAuth 2 pada awalnya dirancang untuk konsep 3 Legged connection. Sehingga token akan menjadi sia-sia jika anda menggunakan konsep 2 legged. Bukan berarti OAuth 1 tidak mensuport 2 legged connection, namun hal ini akan sangat over kill. Jika anda menggunakan OAuth 1, pasti anda akan merasakan betapa kompleksnya aturan-aturan yang ada. Saya juga sudah mencoba beberapa OAuth library(official), dan saya cukup kaget ketika menemukan bugs yang hampir ada di semua library yang saya coba, yaitu bugs untuk Array of Array, dimana jika ditemukan variable seperti(Array of Array) ini maka pasti tidak akan masuk kedalam base string yang akan di generate sebagai signature. Ini merupakan bug yang sangat fatal. Saya heran kenapa bug ini tidak ada yang sadar dan membenarkannya dari awal OAuth ada(2008). Anda bisa lihat http://code.google.com/p/oauth-php/issues/detail?id=131

Namun sejauh ini memang OAuth 1 masih menjadi yang terbaik dan terbukti secara industry, aman dari banyak jenis serangan dan security issue, serta bisa digunakan pada HTTP(tidak membutuhkan SSL). Perlu anda ketahui saya menghabiskan waktu hampir 5 hari untuk mengerti konsep OAuth, dikarenakan saya mempelajari dari semua sudut, seperti konsep, security, Code dan implementasinya.

Saya merasa OAuth sangat terlalu kompleks untuk 2 legged connection dan mungkin ada solusi yang lebih mudah dan secure. Oleh karena itu saya menghabiskan waktu 2 hari untuk memikirkan alternative dan cara yang paling cocok untuk mekanisme 2 legged.

Masalah

OAuth 1 sangat kompleks untuk mekanisme 2 legged

Tujuan Penulisan

Karena melihat permasalahan yang ada, maka saya merancang konsep Flat Token Authentication dengan harapan tidak kompleks namun secure.

Pembatasan Masalah

Kali ini masalah akan dibatasi seputar konsep, keamanan dan kelayakan pada metode Flat Token Authentication. Serta konsep akan dibatasi hanya untuk 2 legged connection. Namun tidak menutup kemungkinan konsep ini bisa digunakan pada 3 legged atau n legged connection.

Catatan Awal

Sekali lagi saya ingin menyatakan bahwa tujuan saya adalah mencari alternative, dan meminta bantuan public untuk menilai dan memberikan masukan untuk solusi yang saya rancang, apakah layak atau tidak.

2 Legged Connection

2 legged

Spec

  1. API Server must use SSL
  2. Public Key and Private Key
  3. One Way Hash using SHA512
  4. Token Signature using HMAC(SHA512 and Private Key)
  5. One Time Token Expire

Untuk memangkas kompleksitas pada OAuth 1, serta memberikan level security maka API Server harus menggunakan SSL.

Konsep Flat Token Authentication membagi akses client terharap server menjadi dua bagian.

1. Client mengirimkan data atau action/perintah terhadap server (Contoh : client memberikan perintah untuk menghapus salah satu data user.)

2. Client meminta data dari server (Contoh : Client meminta data semua usernya.)

Karena menggunakan SSL, maka bisa dijamin koneksi dari Client ke Server tidak bisa di spoof. Namun tidak sebaliknya jika Server yang memulai koneksi ke client.

Client dan Server harus memiliki Public key dan Private key. Private key haruslah rahasia dan hanya di ketahui oleh Server dan Client. Sedangkan Public key bisa di ketahui oleh siapa saja.

Untuk hash pada saat verifikasi token, diharuskan menggunakan sha512.

Penandatanganan hanya dilakukan terhadap TOKEN yang di kirim oleh server ke Client. Konsep Flat Token Authentication tidak mengenal data signature karena sudah menggunakan SSL.

Skenario 1, Client mengirimkan data :

  1. [Client] mengirim data user barunya terhadap [Server]
  2. [Server] membalas dengan sebuah random token yang akan expire jika token tersebut sudah di konfirmasi oleh [Client]. Pada saat ini Server tidak akan menyimpan data user sebelum [Client] melakukan konfirmasi. Jika konfirmasi berhasil maupun gagal, maka token akan dibuang dan tidak dapat digunakan lagi oleh pihak manapun.
  3. [Client] harus melakukan konfirmasi dengan cara menandatangani token tersebut dengan HMAC menggunakan Private Key yang dimiliki, lalu mengirimkannya ke [Server].
  4. [Server] menerima signature baru tersebut dan mengeceknya dengan cara yang sama, yaitu menandatangani dengan cara HMAC(SHA512) menggunakan Private key. Jika valid, maka data user akan dimasukkan, jika tidak maka bisa dipastikan request data user tersebut dilakukan oleh Attacker.

Perlu diketahui bahwa point 1 dan 2 terlindungi dari penyadapan karena melalui HTTPS. Namun yang menjadi permasalahan adalah Penyerang bisa saja mengetahui public key dan melakukan request terhadap server. Oleh karena itu Server mengirimkan token dan seakan-akan mempercayai data yang dikirim tersebut. Namun tentunya Penyerang tidak bisa melakukan konfirmasi karena tidak mengetahui Private Key. Mari lihat Ilustrasi dibawah ini

Attacker Flat Token Authentication

Skenario 2, Client meminta data :

  1. [Client] meminta data semua Usernya ke [Server]
  2. [Server] membalas dengan sebuah token yang akan ditukar dengan data jika sudah di konfirmasi oleh [Client].
  3. [Client] menandatangani token tersebut dengan HMAC(SHA512) menggunakan Private Key yang dimilikinya dan mengimkan konfirmasi tersebut ke [Server].
  4. [Server] menerima konfirmasi tersebut dan melakukan pengecekan dengan cara yang sama, yaitu tandangan token dengan HMAC(SHA512) menggunakan Private Key, jika sama maka [Server] akan membalas dengan Data yang diminta. Setelah itu token pasti akan expire.

Dengan konsep yang sama, yaitu Server menahan untuk memberikan data, dan hanya memberikan token. Jika token berhasil di konfirmasi, maka token itu bisa ditukan dengan data yang diminta. Semua koneksi aman dari penyadapan dan pengubahan data karena melalui HTTPS.

Kekurangan utama dari system ini adalah dibutuhkan +1 connection or API Call untuk konfirmasi token. Namun hal ini sebanding dengan pengurangan drastis dari kerumitan ketika menggunakan OAuth v1.

Saya mohon lihat dan teliti segala celah. Masukan akan sangat berarti bagi saya untuk bisa memperbaiki konsep ini. Jika ternyata konsep ini tidak layak maka saya akan senang hati J. Jika anda tertarik untuk mengembangkannya bersama saya, maka kita bisa membuat working group seperti apa yang dilakukan OAuth selama ini.

Feedback bisa dikirimkan langsung pada comment di blog ini atau email  ke ahmadfathihadi [ at ] gmail.com dan cc ke ahmad [ at ] tandif.com.

Saya bisa dihubungi di +62 81 808 49 7749

Teknologi dibalik Google reCAPTCHA

بسم الله الرحمن الرحيم

Mungkin kita sudah sering melihat reCAPTCHA, terutama di form registrasi atau login seperti di kaskus.

Nah pertanyaannya sudah pada tahu belum cara kerjanya ?

Pada dasarnya CAPTCHA( “completely automated public Turing test to tell computers and humans apart” ) adalah suatu cara untuk memastikan bahwa yang berinteraksi dengan komputer adalah manusia dan bukan program/bot. Namun bot bisa saja menggunakan teknologi OCR, dimana gambar bisa menjadi text. Terus terang OCR adalah favorite saya untuk menyalin isi buku tanpa menulis/mengetik kembali isi buku tersebut. Cukup dengan Scan buku/tulisan lalu dari format gambar bisa menjadi text dengan OCR. nah beruntungnya saat ini teknologi OCR tidak terlalu canggih. hal inilah yang dimanfaatkan oleh reCAPTCHA. reCAPTCHA menggunakan kata-kata yang gagal di translate oleh OCR, sehingga bot yg menggunakan OCR sekalipun akan susah untuk melakukan aksinya.

Hasil Scan buku

Hasil OCR
The Hreckinridge‘ and Lane Democrats, having taken courage at the recent eastern advises, are [xxxxxxxxxx] energetically for the campaign: Several prominent Democrats who at first favored DonoLea, are coming out. for the other aide, apparently under the [xxxxxxxx] of Federal [xxxxxxxxx]. An address to the National Democracy of ,1ifornia, urging the party to support HaeeslipslDas, has recently been published, which manifestly bss strengthened that aide of the [xxxxxxxxx]: It is signed by 65 Democrats, many of whom occupy respectab e and prominent positions in the party, 22 of them are Federal office-holders, [xxxxx] more are recipients of Federal patronage, and the others represent a mass of politicians giving the document [xxxx] [xxxxxx] mTheDcu8las Democrats are also active The Irish and German vote will mostly go with ths# branch of the party, but it is[xxxxxxxxx] to [xxxxxxxx] [xxxxx] [xxxx] [xx] the stronger. Thus far 17 IT newspapers have declared for DonGres, 13 for Base$- IaaIDGS and 9 remain non-committal, with even chances of going either way. Under these circumstances the Republicans entertain not unjustifiable hopes that the Democratic divisions may be so equal,- ly balanced as to give the State [xx] LIaCOLV. Same very [xxxxxxx] Bell and Everett meetings have been held in different parts of the State, bat thus far that party does not exhibit much rank sad ale air en.

Nah kata-kata yang gagal di scan oleh OCR itu yang dipakai oleh reCAPTCHA.

sample-ocr.png (544×108)

OK, jadi kurang lebihnya seperti ini prosesnya…

Satu lagi kelebihan reCAPTCHA yaitu mencatat semua IP yang mengakses reCAPTCHA, tujuannya adalah untuk mengetaui IP mana yang selalu sukses dalam memasukkan kata dalam reCAPTCHA dalam kurun waktu tertentu, karena dihawatirkan ini adalah bot.

Semoga sekiranya dapat menambah wawasan semua pembaca

Free Q&A or Stackoverflow clone

640px-Stack_Overflow.png (640×456)
Yeah, banyak sekali yang bertanya bagaimana cara membuat situs seperti Stackoverflow.com dimana user bisa bertanya dan mendapatkan jawaban dari komunitas. Yang jelas Stackoverflow telah membantu banyak programmer di seluruh dunia(termasuk saya). Stackoverflow dibuat pada 2008 oleh Jeff Atwood dan Joel Spolsky. Ok tanpa basa basi ini dia listnya :

Semoga bermanfaat :)

Tidak ada doa yang tidak terkabul

Banyak dari kita mengeluh bahwa doanya tidak terkabul, atau bahkan lebih parahnya tidak percaya doa akan terkabul. Ada juga yang yakin doanya pasti tidak akan terkabul karena merasa dirinya masih buruk dan kurang dekat dengan tuhan.

Kabar gembira bagi anda semua, Mau doa anda dikabulkan ? PASTI dikabulkan ! garansi 100% uang kembali jika tidak terkabulkan. Mau tau caranya ? simak baik-baik :)

Sebenarnya tidak ada doa maupun lintasan atau getaran hati yang tidak terkabulkan. Namun terkabulnya sebuah doa itu berbeda-beda.

Untuk selanjutnya akan kita gunakan contoh buah Durian, misalnya anda tiba-tiba ingin makan durian malam ini. (perlu di ingat bahwa ini belum doa, baru ingin saja)

Waktu

  1. Langsung terkabul, ya anda ingin makan durian, dan saat itu juga tiba-tiba misalnya ada sanak saudara atau tetangga yang memberikan durian untuk anda pada saat itu juga. Tidak pakai lama, tidak pakai nunggu apa yang anda inginkan terwujud. Ini mungkin yang paling diinginkan oleh semua orang, dan cukup beruntung bagi siapa saja yang keinginan dan doanya langsung terwujud.
  2. Diundur, ketika anda ingin makan durian malam ini, namun lusa anda baru bisa mencicipi apa yang anda inginkan. Ini adalah jenis yang terundur, tidak saat itu juga namun membutuhkan waktu, biasanya manusia ketika meminta sesuatu dia akan cenderung mudah lupa dan sudah pesimis bahwa hal tersebut akan dikabulkan, bisa besok, lusa, minggu depan, atau tahun depan, tapi yang pasti adalah pasti terkabul.

Wujud

  1. Digantikan, anda ingin durian, namun ternyata yang anda dapatkan adalah nangka, ya mirip-mirip tapi apa yang anda inginkan tetep terkabul. pernahkan anda mengalaminya ?
  2. Buang Bala(musibah), misalnya anda tidak jadi kecelakaan, terselamatkan dari musibah, dll. sering kali ketika kita meminta sesuatu, Allah SWT menggantikannya dengan hal ini, dimana jauh lebih berharga dibanding 3 hal diatas jika anda sadari :)

Dimensi

  1. Surga, keinginan anda tetap dan pasti dikabulkan, namun di surga, bukan didunia. loch kenapa ? kan minta di dunia, tapi kenapa di beri disurga ? jawabannya simple, tidak semua yang anda inginkan itu baik untuk anda didunia, sehingga Allah SWT lebih tahu mana yang terbaik untuk anda. Lagian durian di dunia sama di surga pasti beda kan rasanya.

Ok Jadi mulai sekarang YAKINLAH bahwa doa dan keinginan anda PASTI terkabulkan, hanya perihal waktu, wujud dan dimensi saja. Contoh diatas baru ingin durian saja yah, bayangkan bila anda berdoa khusyu’ sambil solat dan bahkan menangis agar terkabul, masa iya tidak terkabulkan. satu lagi, sesungguhnya Allah akan mengikuti perasangka hambanya, jika anda yakin doa anda pasti terkabul, maka Allah pasti akan mengabulkannya.

Berhentilah bertanya mengenai Dalil

Hampir setiap kali saya berbicara dengan orang lain mengenai suatu perkara dalam islam, selalu saja ada orang yang bertanya begini “Mana dalilnya ?”. Ini mungkin terdengar lebih baik dibanding orang yang menelan informasi begitu saja. Misalnya jika saya membohongi dengan berkata bahwa makan nasi itu haram, mungkin jika anda orang yang mudah dibohongi, anda akan langsung percaya karena tidak bertanya mengenai dalilnya.

Tapi yang menjadi permasalahannya adalah untuk orang-orang yang selalu kritis menanyakan dalil, seakan-akan saya sedang membohongi mereka. tahukah anda dalil itu ada berapa macam jenis ? tipe hadis ? golongan ? dan bahkan kecendrungan mazhabnya. ah memang terlalu rumit sepertinya, namun tidak jika kita pelajari ilmu dasarnya. sebelum mempelajari ilmu dasarnya, saya ingin bertanya apakah jika anda mendapatkan dalil yang kuat mengenai suatu perkara, lalu anda akan 100% mengerjakan dan mematuhinya ? tidak juga kan ? lalu ngapain nanya dalilnya -_-. lantaran diberikan dalil tapi gak percaya. atau lebih tepatnya pura-pura tidak percaya dan tidak yakin.

Ketika saya mencari tahu mengenai haramnya musik, saya sudah berkomitmen akan mematuhi 100% hasilnya jika memang haram, saya akan mengharamkan musik untuk diri saya. dan sekarang alhamdulillah saya sudah tidak pernah mendengarkan musik dan menggantikannya dengan mp3 Al-Qur’an. ini lah yang disebut komitmen, namun untuk sebagian orang yang bertanya mana dalilnya, lalu setelah diberikan dalilnya, dia akan berkata “ah masa sih, gak yakin nih, masa gini aja gak boleh”. Terdengar lucu dan konyol bagi saya.

Jadi stop berhenti menanyakan dalil jika memang anda belum/tidak siap menerimanya.

Sekarang mari sedikit kita bahas mengenai ilmu dasar hadis. dasarnya hadis merupakan omongan dari bibir Rasulullah, dan dengan waktu, sampailah kepada kita melalui kutipan atau perantara para sahabat rasulullah(biasanya). Agar mudah saya beri contoh misalnya gini, jika saya bicara kepada teman saya Angga kusuma bin Nugraha, bahwa sesungguhnya naik motor itu enak banget, lalu Angga kusuma bin Nugraha menyampaikannya lagi kepada Adhitya bin Septriyadi. kira-kira hadisnya akan seperti ini,

“Adhitya bin Septriyadi berkata bahwa telah mendengar dari Angga kusuma bin Nugraha bahwa Ahmad Fathi Hadi bersabda bahwa naik motor itu enak banget”

Ok sudah ada gambaran sekarang ?, mari kita lanjutkan.

Ilmu ini disebut ilmu rijalul hadist lalu bagaimana cara mengetahui kebenaran suatu hadis. ok saya beri contoh yang mudah seperti contoh diatas, misalnya,

  1. Ahmad Fathi Hadi tinggal di Jakarta dan tidak pernah keluar jakarta, serta hidup dari 1800-1870
  2. Angga kusuma bin Nugraha hidup di Bali, dan pernah beberapa kali datang ke Jakarta, hidup dari tahun 1810-1865
  3. Adhitya bin Septriyadi tinggal di Jakarta, namun hidup tahun 1872-1930

Bisa dilihat ketidak cocokan pada Adhitya bin Septriyadi, dimana masa hidupnya tidak memungkinkan untuk menerima ucapan dari Angga kusuma bin Nugraha. Maka hadis ini bisa dibilang palsu.

Bagaimana jika contohnya seperti ini,

  1. Ahmad Fathi Hadi tinggal di Jakarta dan tidak pernah keluar jakarta, serta hidup dari 1800-1870
  2. Angga kusuma bin Nugraha hidup di Bali, dan pernah beberapa kali datang ke Jakarta, hidup dari tahun 1810-1865
  3. Adhitya bin Septriyadi tinggal di Jakarta, namun hidup tahun 1859-1928

Coba perhatikan kelahiran Adhitya bin Septriyadi dengan kematian Angga kusuma bin Nugraha, antara 1865 dengan 1859, berarti kemungkinan Adhitya bin Septriyadi berumur 6 tahun, apakah mungkin Adhitya bin Septriyadi dalam umur 6 tahun tersebut menerima pesan, apa mungkin juga Angga kusuma bin Nugraha memberikan pesan tersebut kepada anak berumur 6 tahun ? Walau ada kemungkinan, namun ada kebimbangan, maka hadis ini bisa disebut dhaif/lemah.

Kebetulan saya juga membantu riset seorang prof yang membahas mengenai ilmu ini, jadi agak sedikit tahu.

Malware dan Phishing pada Facebook

Artikel ini saya buat sebagai dedikasi untuk teman-teman saya yang menjadi korban pencemaran nama baik oleh para pembuat malware dan semua yang telah di rugikan karena phishing di Facebook. Pernahkah anda melihat teman anda chating namun seperti aneh dan bukan kebiasaannya untuk menuliskan chat seperti itu, contoh …
Facebook Chat Malware

Ya, bahkan pengirim chat itupun tidak merasa pernah menulis seperti itu. Lalu siapa yang menulis ? Viruskah ? atau mungkin Hantu ?. Bukan virus, melainkan sebuah code program biasa yang berisi malware. Menurut Wikipedia, Perangkat perusak (bahasa Inggris: malware, berasal dari lakuran kata malicious dan software) adalah perangkat lunak yang diciptakan untuk menyusup atau merusak sistem komputer, peladen atau jejaring komputer tanpa izin termaklum (informed consent) dari pemilik.

Tolong garis bawahi kalimat “tanpa izin termaklum (informed consent) dari pemilik”, Bagaimana jadinya bila anda ternyata memberikan izin terhadap software/program tersebut ?, Hal ini jelas ketika pertama kali anda menyetujui program ini melakukan aksinya.Pada Facebook terdapat suatu permission/izin untuk setiap aplikasi yang dikembangkan menggunakan Facebook API, silahkan baca artikel saya sebelumnya disini. Setiap aplikasi pada facebook akan meminta izin kepada para pemakainya sebelum dapat melakukan/menggunakan hak yang anda berikan. Izin atau Permission yang saya maksud disini adalah untuk mengakses data dan fitur yang telah di sediakan oleh Facebook API.

Facebook Permission
pada saat artikel ini dibuat, terdapat 37 permission pada facebook, silahkan liat disini. Misalkan jika kita membuat aplikasi pengelola event, dimana penggunanya dapat mengedit langsung eventnya melalui aplikasi, maka user perlu memberikan izin create_event dan rsvp_event pada aplikasi, yang kemudian aplikasi dapat menggunakan hak yang diberikan oleh user(dapat berupa data, akses, dll, sesuai izin yang anda berikan). Namun sayangnya izin ini dapat disalah gunakan oleh aplikasi, misalnya untuk membuat event sex party dan mengundang seluruh teman dalam friend list di facebook. Hal ini pernah terjadi kepada teman saya, dia menghabiskan waktu 1 minggu untuk memperbaiki reputasinya. Bayangkan jika anda memberikan izin sms ? Event sex party tadi bisa mengirimkan sms undangan kepada seluruh teman anda, ditambah izin publish_stream wall anda akan penuh dengan kata-kata ‘sex’.

Aplikasi meminta izin kepada anda pada saat pertama kali anda mengakses, berikut contohnya …
Facebook Permission

Mulai saat ini jangan sembarangan memberikan permission kepada aplikasi yang berada pada facebook !, Baca dan perhatikan terlebih dahulu apakah aplikasi yang akan anda gunakan, apakah aplikasi resmi dari developer yang bersangkutan atau bukan. Lalu bagaimana bagi facebook user yang sudah memberikan permission kepada aplikasi ?, silahkan buka http://www.facebook.com/settings/?tab=applications, berikut list aplikasi yang terdapat pada facebook saya…
Apps on Facebook

Jadi solusinya adalah Silahkan remove aplikasi yang menurut anda aneh(permissionnya tidak sesuai aplikasi, namanya aneh, dll) dan tidak layak ada. Berikut contoh aplikasi yang aneh yang pernah saya gunakan difacebook…
Apps on Facebook yang aneh

Semoga dapat membantu dan memberikan pemahaman kepada semua yang membaca, Jika artikel ini membantu bagi anda, silahkan sebarkan link blog ini dan add facebook saya di http://www.facebook.com/ahmadfathihadi dan jadilah user yang baik :)

Bonus!!!
Saya akan memberikan beberapa link berguna bagi anda yang mengalami masalah facebook security seperti password anda di rubah( biasa disebut oleh 4L@y “f4c3B0k w dH@K” )  :

  • Jika lupa password, klik disini untuk reset password.
  • Jika anda merasa di hack namun masih dapat mengakses account, klik disini untuk recover.
  • Jika email yang biasa anda gunakan di remove oleh hacker sehingga anda tidak bisa login, klik disini untuk recover.
  • Jika email yang biasa anda gunakan diambil alih sehingga anda tidak dapat login, klik disini

Facebook Development

Setelah sekian lama saya menghilang mengarungi pekerjaan baru sebagai Facebook Developer, kini saya kembali mendokumentasikan sebagian pengalaman saya didalam blog ini. Pada dasarnya development aplikasi menggunakan platform facebook cukup mudah bagi yang sudah terbiasa dengan API.
Lalu apa sih tujuannya menggunakan facebook platform ?. Bisa diibaratkan begini, pada suatu website. Anggap saja website ini(blog.fathihadi.net), siapa sih yang mau registrasi user ?. ini kalau satu website, bagaimana kalau banyak website ? apa anda mau terus-menerus registrasi user untuk setiap website ?. Sedangkan anda sudah pasti punya account Facebook(hari gini gak punya facebook ?). kenapa tidak pakai account facebook saja untuk semua website ?, toh sudah banyak friend, dan aktifitas disana.
Nah dengan menggunakan API yang sudah disediakan oleh facebook, anda dengan mudah dapat menarik data User sesuai Permission(izin) yang di berikan oleh user. Ada izin untuk mempost sesuatu di wall user secara langsung, biasa dikenal dengan permission publish_stream.

Facebook Publish to Wall

Facebook Publish to Wall

Lebih lengkap mengenai permission ada di sini http://developers.facebook.com/docs/authentication/permissions
Lalu sekarang kita perlu mengatahui yang disebut access token, apa itu access token ?. Coba bayangkan jika kita sedang berada di sebuah halaman website, sedangkan informasi anda berada di website lain, tetapi ada sudah login pada website dimana informasi anda berada. Dengan menggunakan oath authentication, anda akan diberikan sebuah access token, dimana access token bisa ditukar dengan informasi, dibandingkan anda harus login dimana user dan password anda dipertaruhkan.
Facebook API dapat digunakan untuk :

  • Website
  • Mobile Application
  • Application on Facebook.com

Yang harus anda perhatikan dari awal adalah memilih render method. Facebook menyediakan dua jenis render method, jika anda akan membuat aplikasi web yang menggunakan CSS serta Javascript atau justru mengintegrasikan dengan jQuery, silahkan gunakan iFrame. Namun jika anda akan membuat aplikasi sederhana yang tidak menggunakan css serta javascript, silahkan gunakan FBML. Apa sih bedanya ?, suatu saat akan saya bahas khusus mengenai perbedaannya.
Sekarang kita akan membahas lebih dalam mengenai, FBML, API, dan FQL.

FBML
FBML merupakan singkatan dari Facebook Markup Language , hal menarik bagi saya pada awalnya, karena kita bisa dengan mudah mendapatkan informasi dan tampilan yang telah disediakan oleh facebook dengan mudah. Seperti apa sih contohnya ?

<fb:name uid="12345" /> // akan menghasilkan nama sesuai uid yang tertera.
<fb:profile-pic uid="12345" linked="true" /> // akan menghasilkan tag html <img/> dengan property src foto dari uid yang tertera.

Semuanya sudah terdokumentasi lengkap di http://developers.facebook.com/docs/reference/fbml/. Namun yang perlu anda perhatikan adalah render method yang anda pilih. Tidak semua FBML dapat berjalan jika anda memilih iFrame, bahkan anda harus menggunakan XFBML jika anda menggunaan iFrame. Berikut contoh penggunaan FBML pada iFrame :

<fb:serverFbml style="width: 755px;">
<script type="text/fbml">
<fb:fbml>
<fb:request-form
action="<URL for post invite action, see fb:request-form docs for details>"
method="POST"
invite="true"
type="XFBML"
content="This is a test invitation from XFBML test app
<fb:req-choice url="see fb:req-choice docs for details."
label="Ignore the Facebook test app!" />
">
</fb:request-form>
<fb:multi-friend-selector
showborder="false"
actiontext="Invite your friends to use Facebook." />
</fb:fbml>
</script>
</fb:serverFbml>

FQL
FQL merupakan singkatan dari Facebook Query language. Satu hal lagi yang menarik dari facebook, kita dapat menggunakan gaya query hampir sama seperti SQL. Namun berbeda dengan SQL, pada FQL kita hanya dapat menggunakan satu table pada clause WHERE, Misalkan :

SELECT name FROM user WHERE uid = me();

Contoh FQL diatas akan memberikan kita hasil nama dari user yang sedang login.
Untuk melakukan subquery kita dapat menggunakan keyword IN, namun subquery tidak dapat mengakses variable yang berada diluar skope, misalkan :

SELECT uid, name, pic_square FROM user WHERE uid = me() OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me());

Saat ini Facebook baru mensuport beberapa fungsi dalam FQL, yaitu now(), strlen(), substr(), strpos() dan me().
Bagaimana dengan informasi lainnya, kita tinggal memilih table dan field yg kita inginkan. Untuk list lengkapnya bisa dibuka di http://developers.facebook.com/docs/reference/fql/

API
API yang disediakan facebook cukup banyak, Mulai dari Graph API hingga Flash SDK. Masing-masing keterangan bisa dibaca sesuai topic masing-masing API yang digunakan. Berdasarkan pengalaman saya, untuk pengembagan aplikasi facebook pada Website dan Application Facebook(apps.facebook.com), lebih baik anda menggunakan JavaScript SDK dengan Old REST API/Graph API.
Saya akan memberikan sedikit kunci pemahaman menggunakan Graph API maupun Old REST API disini.
Masing-masing memiliki cara yang berbeda untuk inisialisasi awal.
Pada Graph API(jika kita menggunakan PHP) :

$facebook = new Facebook(array(
'appId'  => $fbconfig['appid'],
'secret' => $fbconfig['secret'],
'cookie' => true,
));
//Facebook Authentication part
$session = $facebook->getSession();
$loginUrl = $facebook->getLoginUrl(
array(
'canvas'    => 1,
'fbconnect' => 0,
'req_perms' => 'email,offline_access,publish_stream,status_update'
)
);
$fbme = null;
if (!$session) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
exit;
}
else {
try {
$uid      =   $facebook->getUser();
$fbme     =   $facebook->api('/me');
$token = $session['access_token'];
} catch (FacebookApiException $e) {
echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
exit;
}
}

Pada Old REST API(PHP SDK) :

$facebook = new Facebook(API_KEY, SECRET);
$facebook->set_user($uid, $sessID);

Contoh pada Old Rest API untuk mendapatkan seluruh isi dari Album User :
$albums = $facebook->api_client->photos_getAlbums($uid, NULL);
Contoh pada Graph API untuk mendapatkan Seluruh isi dari Album User :
curl -F ‘access_token=…’ \

https://graph.facebook.com/me/albums

sebelumnya kita sudah membicarakan mengenai apa itu access token.

Semua hal yang berkaitan mengenai Facebook API, sudah terdokumentasi lengkap di http://developers.facebook.com/docs/.

Kedepannya saya akan lebih banyak memberikan contoh, showcase, serta tips dan trik untuk facebook development. Owh ya, tidak lupa saya ucapkan terima kasih kepada Dhub Digital yang memberikan saya pengalaman terhadap Facebook Development.

Media Temple

(mt) Media Temple

(mt) Media Temple

Setelah trauma bertahun-tahun(alay) karena hosting lama saya sering mengalami masalah, akhirnya saya memutuskan untuk berpindah ke lain hati. Tentunya anda akan bingung kenapa saya berpaling dari hosting yang lama, berikut beberapa hal yang sudah terjadi :

  • Seluruh hosting terkena serangan malware.
  • Sering sekali Down.
  • Masa Down time yang cukup lama.
  • RTO.
  • Harddisk server terbakar ! -> ini yang paling sulit diterima.
  • Dan hal-hal lainnya yang membuat tidak nyaman.

Lalu apa itu media temple (mt)?
Media Temple, Inc adalah sebuah perusahaan web hosting dan service virtual yang bermarkas di Los Angeles, California. Ada beberapa hal yang membuat saya untuk lebih memilih media temple dibandingkan hosting yang lain, yaitu :

  • (mt) memiliki commercial dan backup power.
  • Heat Rejection
  • Fire Suppression, Dry pipe
  • Beberapa client yang cukup besar seperti Adobe, Starbuck, Sony, Toyota, Qantas, VW, Warner Bros, Tech Crunch, Diesel, Rip Curl, abc, nbc, dll, silahkan cek di http://mediatemple.net/company/clients/

Ketika pertama kali tahu bahwa Adobe hosting di (mt), wah gak mau kalah sama Adobe,hehe walau paket hosting yang dipilih berbeda jauh :D . ya setidaknya ibarat rumah satu komplek lah :D
Ada beberapa macam jenis hosting yang disediakan oleh (mt) seperti :

  • (gs) Grid-Hosting – $20/month | Great for: Small Businesses, Newbies, Devs, Designers
  • (dv) Dedicated Virtual – starting at $50/month | Great for: Multi-Domain, Intermediate, Devs, Designers
  • (dvp) Nitro – $750/month | Great for: Big traffic, big projects, single tenant needs
  • (ve) Server – starting at $30/month | Great for: Devs, Admins, Linux geeks, Root Access, SaaS
  • (cx) Complex Hosting – please contact (mt)

So bagi teman-teman yang sedang berencana mencari hosting, dengan penuh semangat saya merekomendaikan (mt). Oh iya ada satu hal yang pastinya sangat bermanfaat untuk para  pembaca, disini saya akan memberikan sebuah kupon yang bisa dipakai untuk mendapatkan diskon 20%

Coupon Code : ‘retailmenot’

Flash XML Graphics (FXG), Apa itu ?

Flash XML Graphics (FXG) adalah sintax untuk medefinisikan grafik dalam Flex. Mungkin bagi anda yang pernah membaca artikel saya mengenai degrafa yang berjudul “Degrafa untuk Pemula” di http://www.indonesianflexcommunity.org/tutorial-flex/41-design/91-degrafa-untuk-pemula , anda akan mudah dalam memahami FXG.

Sebenarnya FXG dibuat agar para designer bisa bekerja terpisah dengan developer. Maksudnya ?, ya maksud saya adalah dengan menggunakan tools seperti Adobe Photoshop CS4, Illustrator CS4 and Fireworks CS4, kita akan bisa merubahnya kedalah format FXG dan bisa dipakai dalam aplikasi Flex kita. Namun sayangnya format FXG bisa digunakan menggunakan Flex 4 SDK dan termasuk dalam bagian spark .  Maaf ya :)

Anda bisa menggunakan FXG element langsung didalam sintax MXML ataupun berdiri sendiri sebagai Custom Component.

Contoh :

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768">
	<mx:Panel title="Ellipse" height="247" width="279" layout="horizontal" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" x="259" y="154">
		<s:Graphic x="0" y="0">
			<s:Ellipse height="100" width="250">
				<s:stroke>
					<s:SolidColorStroke color="0x000000" weight="2"/>
				</s:stroke>
				<s:fill>
					<s:RadialGradient>
						<s:entries>
							<s:GradientEntry color="0x1c64a7"/>
							<s:GradientEntry color="0x114371"/>
						</s:entries>
					</s:RadialGradient>
				</s:fill>
				<s:filters>
					<mx:DropShadowFilter/>
				</s:filters>
			</s:Ellipse>
		</s:Graphic>
	</mx:Panel>
</s:Application>
Ellipse FXG

Ellipse FXG

FXG bisa berada dalam file *.mxml dan *.fxg dengan syarat berada didalam tag <Graphic>

Tidak hanya itu, kita juga bisa menggunakan tag <Library> dan <Definition>, yang berfungsi semacam deklarasi FXG yang nantinya bisa kita pakai dengan memanggil namanya.

Contoh :

<?xml version="1.0" encoding="utf-8"?>
<!-- Ahmad Fathi Hadi/FXGLibraryExample.mxml -->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/halo" xmlns:s="library://ns.adobe.com/flex/spark" >
	<fx:Library>
		<fx:Definition name="EllipseFathi">
			<s:Graphic x="0" y="0">
				<s:Ellipse height="100" width="250">
					<s:stroke>
						<s:SolidColorStroke color="0x000000" weight="2"/>
					</s:stroke>
					<s:fill>
						<s:RadialGradient>
							<s:entries>
								<s:GradientEntry color="0x1c64a7"/>
								<s:GradientEntry color="0x114371"/>
							</s:entries>
						</s:RadialGradient>
					</s:fill>
					<s:filters>
						<mx:DropShadowFilter/>
					</s:filters>
				</s:Ellipse>
			</s:Graphic>
		</fx:Definition>
	</fx:Library>
	<mx:Panel title="Library Example" height="314" width="528" layout="absolute" paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" x="93" y="31">
		<fx:EllipseFathi x="0" y="0"/>
		<fx:EllipseFathi x="255" y="105"/>
		<fx:EllipseFathi x="0" y="105"/>
		<fx:EllipseFathi x="255" y="0"/>
	</mx:Panel>
</s:Application>
FXG Library Example

FXG Library Example

Mungkin dengan anda melihat contoh kode yang saya berikan, anda bisa mengerti maksud saya. (^_^)

Well, mungkin sekian dari saya untuk penjelasan singkat mengenai FXG.

LiveCycle Designer ES 8.2

Saya yakin anda semua sudah mengenal Adobe PDF yang biasa anda buka dengan aplikasi PDF Reader yaitu Adobe Acrobat Reader. Banyak orang hanya memanfaatkan teknologi PDF sebagai suatu format untuk e-book, jika anda masih beranggapan seperti itu, mmm KELAUT AJA DEH ! atau mungkin anda termasuk orang yang tidak mengikuti perkembangan teknologi. hehehe, maaf.

Adobe PDF schema mengizinkan anda untuk membuat aplikasi, form, calculation, bahkan BarCode. ya ini tidak bohong loch. Tool yang digunakan adalah Adobe LiveCycle Designer. Sebenarnya saya sudah tau dari 2 tahun yang lalu, namun baru ingat untuk membuat cuplikan kecil mengenai tool ini setelah melihat-lihat isi Program Files yang ada di Laptop milik ibu saya.

Adobe Cs4 Master Collection

Adobe Cs4 Master Collection

Terdapat satu buah aplikasi bernama Adobe LiveCycle Designer, OK, mari kita buka . . . . .

Adobe Livecycle Designer ES

Adobe Livecycle Designer ES

Saya rasa Adobe LiveCycle Designer, termasuk aplikasi yang mudah dipelajari karena anda hanya tinggal mendrag component yang anda inginkan dan kemudian merubah nilai attributnya, kecuali satu, yaitu script untuk programmingnya. Pdf Scheme cukup familiar bagi anda yang sudah terbiasa dengan XML, anda hanya tinggal mempelajari FormCalc atau JavaScript untuk programming language-nya.

Kita lihat XML schema yang dihasilkan untuk sebuah component Drop Down List :

<field name=”DropDownList1″ y=”3.175mm” x=”6.35mm” w=”62mm” h=”9mm”>
<ui>
<choiceList>
<border>
<?templateDesigner StyleID aped3?>
<edge stroke=”lowered”/>
</border>
<margin/>
</choiceList>
</ui>
<font typeface=”Myriad Pro”/>
<margin topInset=”1mm” bottomInset=”1mm” leftInset=”1mm” rightInset=”1mm”/>
<para vAlign=”middle”/>
<caption reserve=”25mm”>
<font typeface=”Myriad Pro”/>
<para vAlign=”middle”/>
<value>
<text>Pilihan Hari</text>
</value>
</caption>
<items save=”1″>
<text>Senin</text>
<text>Selasa</text>
<text>Rabu</text>
<text>Kamis</text>
<text>Jumat</text>
<text>Sabtu</text>
<text>Minggu</text>
</items>
</field>

Ya, asik banget kan. . .

Anda bisa lihat pada gambar dibawah ini, ternyata anda tidak usah lagi membuang waktu untuk membuat program dengan bahasa pemrograman tertentu seperti JAVA atau Visual Basic, karena anda cukup mendesain aplikasi yang anda inginkan, kemudian memberikannya sedikit bumbu masak, dan eng ing eng, jadilah masakan yang anda inginkan.

Adobe Livecycle Designer - Preview Pdf

Adobe Livecycle Designer - Preview Pdf

Tekhnologi PDF saat ini sudah mampu untuk membuat aplikasi, form, dsb, membuat banyak perusahaan diluar negeri merubah teknologi mereka untuk beberapa aplikasi kecil, seperti Registration Form yang selama ini mereka buat menggunakan HTML, kini menjadi PDF. dikarenakan kemampuan PDF saat ini yang sudah melebihi kemampuan HTML.

Silahkan download file yang sudah saya buat untuk membuktikan bahwa PDF sudah tidak lagi sekedar format E-Book. Download Disini dan disini