Monthly Archives: June 2009

MySQL – Sharding

Beberapa hari yang lalu saya hadir di konferensi online yang diadakan oleh komunitas MySQL Indonesia. Praktis, karena online, jadi bisa dihadiri dari mana saja. Tapi sialnya, saya keliru waktu – saya kira dimulai pukul 22:00, ternyata sudah berjalan sejak pukul 20:00 ๐Ÿ™‚

Untunglah setiap konferensi dicatat, dan kemudian diposting di milis mysql-indonesia@googlegroups.com
Terlampir adalah catatan konferensi online pada tanggal 25 Juni 2009, dengan topik “Horizontal partitioning dengan menggunakan MySQL-Proxy dan Spock“, yang diadakan di channel #id-mysql di irc.freenode.net

Selamat menikmati.

<iis> ok..selamat malam teman-teman
<iis> malam ini confernce # 18
<iis> materinya tentang horizontal partitioning
<iis> yang akan ngizi crazynuxer
<iis> silahkan dimulai..
<crazynuxer> ok ๐Ÿ™‚
<crazynuxer> beberapa minggu lalu sudah dijelas kan oleh bro dendie
<crazynuxer> mengenai partition di mysql database
<crazynuxer> cuman itu disebut sebagai vertikal partitioning
<crazynuxer> jadi partition hanya di satu mesin
<crazynuxer> nah horizontal partition ini
<crazynuxer> adalah partition di beda mesin
<crazynuxer> atau istilah kerennya sharding
<iis> jadi istilah yang lebih dikenal sharding?
<crazynuxer> atau klo saya istilahkan lebih mudahnya itu
<crazynuxer> iya
<crazynuxer> intinya sih load balance database berdasarkan record
<crazynuxer> jadi misalnya kita ada 10 record
<crazynuxer> 5 record di server A dan 5 record lagi di server B
<crazynuxer> kira-kira sampai sejauh
<crazynuxer> bisa dibayangin ga
<crazynuxer> sharding itu gmn ?
<mediEvil44> bisa
<crazynuxer> klo dari wikipedia
<crazynuxer> Horizontal partitioning is a design principle whereby rows of a database table are held separately, rather than splitting by columns (as for normalization). Each partition forms part of a shard, which may in turn be located on a separate database server or physical location.
<crazynuxer> jadi kita melakukan scale out
<crazynuxer> untuk meningkatkan performance secara scale out karena dukungan scalabilitas
<iis> scale out itu apa ya? ๐Ÿ˜€
<crazynuxer> ada scale out dan scale in
<crazynuxer> gini
<crazynuxer> misalkan server kita udah bottleneck nih
<crazynuxer> dan bottleneck itu karena hardware resource yg ga mumpuni atau mencukupi lagi
<crazynuxer> ada 2 solusi untuk masalah ini
* d3ptzz (n=d3ptzz@125.163.244.26) has joined #mysql-id
<crazynuxer> yang pertama kita beli server baru lagi
<crazynuxer> dengan spesifikasi hardware yg lebih bagus dan lebih handal
<crazynuxer> kemudian kita pindah datanya
<crazynuxer> dan jalankan lagi servernya
<crazynuxer> solusi ini disebut scale in
<iis> trus?
<crazynuxer> kelemahannya kita harus mengeluarkan banyak waktu dan tenaga
<crazynuxer> selain itu kita juga harus rugi
<crazynuxer> karena ada downtime
<crazynuxer> lalu ada solusi lagi
<crazynuxer> selain itu
<crazynuxer> scale out istilahnya kerennya
<crazynuxer> jadi kita memakai semacam balancer
* d3ptzz (n=d3ptzz@125.163.244.26) Quit (Remote closed the connection )
<crazynuxer> dan dibelakang balancer itu ada beberapa server sebagai backend nya
<crazynuxer> jadi ketika server kita sudah overload kita tinggal nambah backend lagi dibelakangnya
<crazynuxer> jadi mempunyai skalabilitas yang bagus
<crazynuxer> kita bisa menambah tanpa downtime
<crazynuxer> dan mengurangi backend tanpa downtime
<crazynuxer> karena dari sisi user diakan akan mengakses ipnya balancer
<crazynuxer> lalu oleh balancer akan diberikan atau dibagi ke backend sesuai dengan algoritma
<crazynuxer> sejauh ini masih paham ?
<the_curious> algoritma nya?
<crazynuxer> algoritmanya macem2
<crazynuxer> tergantung jenisnya dan kebutuhannya
<crazynuxer> ada round-roubin, least-connection, weight least connection
<crazynuxer> dll
<crazynuxer> itu juga tergantung dari balancernya support apa ga
<crazynuxer> ada juga yg berdasarkan schema
<crazynuxer> misalnya spock proxy
<crazynuxer> atau mysql-proxy
<crazynuxer> yg berdasarkan algoritma didalam script lua nya
<crazynuxer> nanti yg akan kita bahas adalah mengenai spock proxy
<iis> “script lua nya”, mksdnya apa ya?
<crazynuxer> dan mysql-proxy sebagai software horizontal partition di mysql
<crazynuxer> lua itu jenis bahasa pemrograman
<crazynuxer> yg biasanya di buat untuk game ๐Ÿ˜€
<crazynuxer> sampai sejauh ini bagaimana ?
<the_curious> ๐Ÿ˜€
<the_curious> asiiikkk
<the_curious> ๐Ÿ˜€
<tundra1> lumayan
<crazynuxer> ok
<mediEvil44> keren
<crazynuxer> di mysql sendiri ada beberapa software yg digunakan untuk kebutuhan ini
<crazynuxer> bahkan sudah ada engine yg sudah diciptakan
<crazynuxer> ada mysql-proxy,spockproxy , sqlrelay dll
<crazynuxer> mysql-proxy+hscale
<crazynuxer> dan untuk engine sudah ada engine baru
<crazynuxer> namanya spider engine
<crazynuxer> cuman gue belum nyoba
<crazynuxer> yg udah gue coba mysql-proxy dan spock proxy
<crazynuxer> ๐Ÿ˜€
<iis> mysql-proxy dan spock proxy itu software ?
<crazynuxer> pertama kita mulai dengan mysql-proxy ya ๐Ÿ˜€
<crazynuxer> iya
<crazynuxer> mysql-proxy sekarang masih dalam tahap alpha
<crazynuxer> dan belum layak untuk production
<crazynuxer> hanya untuk main-main dan belajar saja
<crazynuxer> ๐Ÿ˜€
<crazynuxer> itu yang dijelaskan di manualnya mysql-proxy
<crazynuxer> untuk manualnya silahkan download di mysql.com
<crazynuxer> ๐Ÿ™‚
<crazynuxer> cuman sebenernya mysql-proxy ini sangat flexible karena mendukung scripting language
<crazynuxer> menggunakan lua
<the_curious> brarti belajar Lua juga dong
<the_curious> kekekekeke
<crazynuxer> oh ya untuk sedikit info saya menggunakan linux ketika melakukan ujicoba kedua software ini
<crazynuxer> hehehe
<crazynuxer> iya
<crazynuxer> tidak pun tidak2 apa
<crazynuxer> karena sudah banyak scritpt yg siap pakai
<crazynuxer> tapi…
<the_curious> Enakan bisa
<crazynuxer> keahlian untuk membaca script tetep harus dimiliki
<the_curious> buat kustomisasi
<the_curious> ๐Ÿ˜€
<crazynuxer> karena untuk proses troubleshoot ๐Ÿ™‚
<crazynuxer> klo bisa ya berarti lebih mantap ๐Ÿ˜€
<crazynuxer> ketika kita akan melakukan installasi mysql-proxy itu dari source
<crazynuxer> jadi harus compile ๐Ÿ™‚
<crazynuxer> dan disource nya itu ada banyak contoh script2 lua yg bisa di coba
<crazynuxer> ๐Ÿ™‚
<crazynuxer> mysql-proxy tidak hanya bisa melakukan load balance
<crazynuxer> tapi bisa memanipulasi query
<crazynuxer> ๐Ÿ™‚
<the_curious> mksdnya?
<crazynuxer> jadi juga bisa dipakai untuk menambah fitur keamanan
<the_curious> di manipulasi nya gimana nih
<crazynuxer> karena dia bisa membaca dan menganalisa query
<crazynuxer> yg bisa dilakukan oleh mysql-proxy
<crazynuxer> create new commands
<crazynuxer> รฏโ€šยง filter queries (deny specific queries)
<crazynuxer> รฏโ€šยง collect statistics on usage
<crazynuxer> รฏโ€šยง implement usage quotas
<crazynuxer> รฏโ€šยง execute shell commands
<crazynuxer> load balancing servers
<crazynuxer> jadi beberapa hal diatas bisa dijalankan oleh mysql-proxy
<crazynuxer> cuman satu kelemahan mysql-proxy
<crazynuxer> ๐Ÿ˜€
<crazynuxer> belum stable ๐Ÿ™‚
<crazynuxer> untuk install tinggal download
<crazynuxer> lalu ekstrak menggunakan perintah tar
<crazynuxer> tar zxvf mysql-proxy.tar.gz -C /usr/local/src/
<crazynuxer> cd /usr/local/src/mysql-proxy/
<crazynuxer> ./configure –prefix=/opt/mysql-proxy
<crazynuxer> make -j4 && make install
<crazynuxer> finish
<tundra1> sama di semua linux mas
<crazynuxer> yups ๐Ÿ™‚
<crazynuxer> harusnya sama semua
<crazynuxer> yang make -j4 itu bisa diganti make saja
<crazynuxer> ๐Ÿ™‚
<crazynuxer> -j4 itu jika kita menggunakan prosesor yg quad core
<crazynuxer> klo cuman single core ya make saja
<crazynuxer> ๐Ÿ™‚
<crazynuxer> biar lebih cepet compile nya
<crazynuxer> ada pertanyaan ?
<crazynuxer> sejauh ini masih paham ?
<the_curious> yang lain
<the_curious> ๐Ÿ˜€
<the_curious> Bobo yah
<the_curious> Ahahaha
<mediEvil44> lumayan
<iis> lagi liatin scriptnya ๐Ÿ˜€
<crazynuxer> ada cara yg lebih mudah jika pake ubuntu ๐Ÿ˜€
<crazynuxer> tinggal apt-get install mysql-proxy
<mediEvil44> ada di repo
<tundra1> wuih enak ya pake ubuntu..
<the_curious> ๐Ÿ˜€
<the_curious> slacker yah mas tundra
<the_curious> kekekekeke
<the_curious> source aja ams
<the_curious> ๐Ÿ˜€
<the_curious> Mas
<crazynuxer> —
<crazynuxer> — read_query() gets the client query before it reaches the server
<crazynuxer> —
<crazynuxer> — @param packet the mysql-packet sent by client
<crazynuxer> —
<crazynuxer> — the packet contains a command-packet:
<crazynuxer> — * the first byte the type (e.g. proxy.COM_QUERY)
<crazynuxer> — * the argument of the command
<crazynuxer> —
<crazynuxer> — http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#Command_Packet
<crazynuxer> —
<crazynuxer> — for a COM_QUERY it is the query itself in plain-text
<crazynuxer> —
<crazynuxer> function read_query( packet )
<crazynuxer> if string.byte(packet) == proxy.COM_QUERY then
<crazynuxer> print(“we got a normal query: ” .. string.sub(packet, 2))
<crazynuxer> end
<crazynuxer> end
<crazynuxer> itu contoh script yg simple nya
<crazynuxer> jadi nanti ketika anda menjalakan mysql proxy dan melakukan query
<crazynuxer> akan tampil we got a normal query: “query_anda”
<crazynuxer> di console ๐Ÿ™‚
<crazynuxer> di mysql-proxy ini
<crazynuxer> ketika kita menjalankan
<crazynuxer> akan ada 2 port yg dilisten
<crazynuxer> yg pertama untuk admin port
<crazynuxer> yg kedua itu port untuk balancer yg akan diakses user atau aplikasi
<crazynuxer> saya menggunakan port 4041 untuk admin nya
<crazynuxer> 4040 untuk diakses user atau aplikasi
<crazynuxer> berikut saya kasih contohnya
<crazynuxer> bentar ssh dulu ke mesinnya
<crazynuxer> :LD
<crazynuxer> ๐Ÿ˜€
<crazynuxer> untuk menjalankannya
<crazynuxer> /usr/sbin/mysql-proxy –proxy-lua-script=/opt/proxy/lib/mysql-proxy/example.lua –proxy-address=xxx.xxx.xxx.xxx:4040 –proxy-backend-addresses=xxx.xxx.xxx.xxx:3306 –proxy-backend-addresses=xxx.xxx.xxx.xxx:3306
<crazynuxer> mysql-proxy –> itu binary nya
<crazynuxer> –proxy-lua-script itu agar mysql-proxy menggunakan script example.lua
<crazynuxer> –proxy-address=xxx.xxx.xxx.xxx:4040 ini adalah sebagai ip dan port yg akan diakses oleh client atau aplikasi
<crazynuxer> atau ip balancer nya
<crazynuxer> sedangkan backend address nya itu adalah server2 database yg dibelakang balancer
<crazynuxer> setelah menjalankan perintah diatas kita bisa ngecheck apakah port 4040 dan 4041
<crazynuxer> sudah listen
<crazynuxer> root@crazynuxer:~# netstat -nltp
<crazynuxer> Active Internet connections (only servers)
<crazynuxer> Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
<crazynuxer> tcp 0 0 xxx.xxx.xxx.10:4040 0.0.0.0:* LISTEN 29432/mysql-proxy
<crazynuxer> tcp 0 0 0.0.0.0:4041 0.0.0.0:* LISTEN 29432/mysql-proxy
<crazynuxer> tcp 0 0 xxx.xxx.xxx.9:3306 0.0.0.0:* LISTEN 25706/mysqld
<crazynuxer> tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 19049/sshd
<crazynuxer> tcp6 0 0 :::22 :::* LISTEN 19049/sshd
<crazynuxer> kita lihat sudah listen
<crazynuxer> klo gitu kita akan coba melakukan query ya
<crazynuxer> mysql -uroot -h xxx.xxx.xxx.10 -P 4040 -e ‘select * from mysql.user’ -p
<crazynuxer> dan masukkin passwordnya
<crazynuxer> maka diconsole akan tampil
<crazynuxer> Hello world! Seen the query: select @@version_comment limit 1
<crazynuxer> Hello world! Seen the query: select * from mysql.user
<crazynuxer> sesuai dengan isi script yg ada diexample.lua
<crazynuxer> berikut isi example.lua
<crazynuxer> function read_query(packet)
<crazynuxer> if string.byte(packet) == proxy.COM_QUERY then
<crazynuxer> print(“Hello world! Seen the query: ” .. string.sub(packet, 2))
<crazynuxer> end
<crazynuxer> end
<crazynuxer> print(“test”
<crazynuxer> )
<crazynuxer> jadi di mysql-proxy ini bisa memanipulasi query dan me load balance
<crazynuxer> sesuai dengan isi script lua nya
<crazynuxer> jadi sangat2 flexible
<crazynuxer> dan untuk load balance ini di mysql-proxy sudah ada plugin
<crazynuxer> namanya hscale
<crazynuxer> bisa coba akses situsnya
<crazynuxer> hscale.org klo ga salah ๐Ÿ™‚
<crazynuxer> itu juga dalemnya lua
<crazynuxer> jadi nantinya proses load balance nya akan dihandle oleh hscale
<crazynuxer> dengan script lua didalamnya
<crazynuxer> untuk menjalankannya silahkan download di hscale.org
<crazynuxer> dan untuk installation tinggal download dan ekstrak kemudian set env variable dan local variable nya
<crazynuxer> sesuai dengan petunjuk dari situs hscale.org
<crazynuxer> itu sedikit info mengenai mysql-proxy ๐Ÿ™‚
<crazynuxer> untuk ubuntu konfigurasinya ada di /etc/default/mysql-proxy dan /etc/init.d/mysql-proxy
<crazynuxer> ๐Ÿ™‚
<crazynuxer> ok sekarang kita akan bahas spock proxy
<crazynuxer> spockproxy ini sudah bisa digunakan di production
<crazynuxer> ini dikeluarkan oleh spock.com
<crazynuxer> salah satu search engine ๐Ÿ™‚
<crazynuxer> coba deh liat www.spock.com
<crazynuxer> dan ini merupakan forking dari mysql-proxy
<crazynuxer> untuk situs resminya
<crazynuxer> spockproxy
<crazynuxer> http://spockproxy.sourceforge.net/
<crazynuxer> spockproxy yg terbaru baru versi 0.8.7
<crazynuxer> spockproxy ini hampir sama dengan mysql-proxy
<crazynuxer> cuman spockproxy tidak pake lua
<crazynuxer> dan horizontal partition menggunakan system range base
<crazynuxer> jadi misalnya ada 10 query
<crazynuxer> nanti dia akan bagi berdasarkan range yg sudah disetting
<crazynuxer> didalam database schema
<crazynuxer> jadi spock ini dalam pengaturannya menggunakan database schema
<crazynuxer> didalam database schema itu terdapat 3 buah table
<crazynuxer> shard_database_directory
<crazynuxer> shard_table_directory
<crazynuxer> shard_range_directory
<crazynuxer> table database directory itu untuk mengatur koneksi
<crazynuxer> jadi pendefinisian backend beserta database yg mau disharding
<crazynuxer> klo table shard_table_directory itu berdasarkan table yg mau disharding
<crazynuxer> kita mendefinisikan column
<crazynuxer> sedangkan range yg range yg akan kita atur nanti
<crazynuxer> jadi misalnya kita ada 10 query
<crazynuxer> range query 0-5 di lemparkan kemesin backend database A
<crazynuxer> 6-10 itu dilempar ke mesin database B
<crazynuxer> dan seterusnya
<crazynuxer> sampai sejauh ini bagaimana ?
<the_curious> masalahnya
<the_curious> ๐Ÿ˜€
<the_curious> kalo ga tau wuery nya berapa banyak
<the_curious> gimana?
<the_curious> iya kan?
<the_curious> ๐Ÿ˜€
<the_curious> *query
<crazynuxer> hehehe
<crazynuxer> yups betul banget saudara digit ๐Ÿ˜›
<crazynuxer> bagaimana dengan yg lain ?
<crazynuxer> untuk sejauh ini ?
<sufehmi> halo, saya agak sedikit rancu soal range query
<the_curious> iya pak
<sufehmi> jadi itu benar2 berdasarkan urutan query yang datang ya?
<sufehmi> bukan bagaimana isi querynya?
<sufehmi> oooo ok
<sufehmi> eh sori kirain mengkonfirmasi, layar saya terlalu terang
<sufehmi> bentar…. ***atur brightness layar**
<crazynuxer> berdasarkan isi nya
<crazynuxer> jadi misalnya kita setting id sebagai column yg ingin disharding
<crazynuxer> maka spock ini akan melihat idnya
<crazynuxer> lalu berdasarkan range nya
<crazynuxer> dia akan lempar ke backend
<crazynuxer> jika didalam range tidak ada
<crazynuxer> maka akan ditolah
<crazynuxer> ditolak
<crazynuxer> itu yang saya alami kemarin ๐Ÿ™‚
<sufehmi> oke, menarik… jadi kita bisa setup semacam rule ya
<sufehmi> untuk menentukan query yang mana untuk ke backend yang mana
<crazynuxer> iya
<sufehmi> kalau berdasarkan urutan datangnya query saja, gimana?
<sufehmi> bisa atau tidak ya?
<sufehmi> memang terlalu simple sih, tapi kadang ada kasus yang sudah cukup dengan seperti ini
<sufehmi> jadi misalnya; query yang pertama datang akan di opern ke backend1
<sufehmi> opern=oper
<sufehmi> query kedua dioper ke backend2
<sufehmi> query ketiga kembali ke backend1
<sufehmi> query keempat ke backend2
<sufehmi> dst
<crazynuxer> iya
<sufehmi> jadi cuma sekedar load balancer sederhana
<crazynuxer> kelemahan kita harus set itu semua ๐Ÿ™‚
<sufehmi> hehehe
<crazynuxer> iya sederhana sekali cara kerjanya
<crazynuxer> waktu kita select pun
<crazynuxer> sebenernya si spock ini melakukan query select di semua backend
<sufehmi> ooo
<sufehmi> ini topik yg sangat menarik, karena ada bbrp customer saya yang sudah perlu pakai multiple backend
<sufehmi> pada saat ini, ada bbrp customer saya yang traffiknya setara dengan republika.co.id
<sufehmi> jawapos.co
<sufehmi> padahal servernya cuma dual-core, 2 GB RAM ๐Ÿ™‚
<sufehmi> tertolongnya karena saya pakai squid, sehingga mayoritas hits mengenai squid. Bukan ke Apache/PHP
<sufehmi> tapi, traffic nya bertambah terus
<sufehmi> jadi musti siap2 utk multiple backend juga
<crazynuxer> iya ๐Ÿ™‚
<crazynuxer> sebaiknya mulai membuat solusi scale out ๐Ÿ™‚
<sufehmi> nah, sharding selama ini memerluka coding ulang dari web-apps ybs
<sufehmi> dengan spock, jadi ada harapan bahwa ini tidak perlu
<crazynuxer> iya ๐Ÿ™‚
<sufehmi> jadi shardingnya di handle di level “middleware” / spock
<sufehmi> bukan di aplikasi
<sufehmi> wah, sedap betul ini ๐Ÿ™‚
* hilman (n=adit@125.161.205.58) has joined #mysql-id
* hilman is now known as adit
<adit> ya telat ya
<crazynuxer> sepertinya begitu dit ๐Ÿ™‚
<adit> ๐Ÿ™
* sufehmi sambil testing game StarTrek Voyager : Elite Force di Ubuntu 9.04 ๐Ÿ™‚
<crazynuxer> hahaha
<the_curious> donlot dimana
<the_curious> di share dunk
<the_curious> Hahahaha
<adit> tadi keasyikan nonton opera van java
* the_curious mupeng
<adit> ๐Ÿ˜€
<crazynuxer> bagaimana sejauh ini yg masih belum jelas ?
<adit> tadi ngebahas apa ki?
<adit> tumben banget info nya telat di milis
<adit> lagi pada sibuk ya? ;))
<crazynuxer> hehehe
<crazynuxer> yups
<crazynuxer> jadi konsepnya sperti itu untuk spockproxy
<crazynuxer> untuk install nya silahkan download
<crazynuxer> lalu ekstrak,
<crazynuxer> install dengan perintah
<crazynuxer> ./autogen.sh
<crazynuxer> ./configure
<crazynuxer> make
<crazynuxer> dan make install
<crazynuxer> untuk ubuntu jaunty
<crazynuxer> harus sedikit menyesuaikan gcc nya ๐Ÿ˜€
<crazynuxer> untuk yg pake centos tidak perlu
<crazynuxer> untuk lebih detailnya nanti akan saya demokan di mysql monthly meeting
<crazynuxer> ๐Ÿ™‚
<crazynuxer> demikian dari saya
<crazynuxer> jika ada yg mau ditanyakan , silahkan
<adit> membahas apa toh ? ๐Ÿ˜€
<adit> sangat2 ketinggalan neh
<crazynuxer> adit: loe lihat log nya aja ๐Ÿ˜›
<adit> ok2 :p
<iis> jadi gmn teman-teman?
<iis> ada yang mau tanya ke nuxer?
<crazynuxer> bagaimana ?
<iis> sepertinya tidak ada yang bertanya nih..?
<iis> kalo gak ada mau ditutup nih confernce nya..
<crazynuxer> ok ๐Ÿ™‚
<mediEvil44> ok
<iis> baiklah…
<iis> conference mysql indonesia ke 18 berakhir disini
* udie_mysql (n=chatzill@114.123.173.175) Quit (“ChatZilla 0.9.85 [Firefox 3.0/2008052906]” )
<iis> kalo nanti tiba2 teringat ada yang mau ditanyain ttg materi ini, pm aja ke nuxer
<iis> atau kirim ke milis juga gpp..
<iis> lognya akan segera dikirim ke milis
<mediEvil44> sip
<crazynuxer> bener
<iis> terima kasih atas kesediaan temen2 ikut confernce malam ini
<iis> assalamu’alaikum semuanya..
<crazynuxer> waalaikumsalam
<iis> sampai jumpa di confernce berikutnya
* adit (n=adit@125.161.205.58) has left #mysql-id
<iis> jangan lupa mysql meeting 2009.06 tanggal 4 juli di kantor SUN di Jl. Sudirman

Materi Workshop @ Timor Leste – gratis + copyleft

Beberapa hari yang lalu saya diundang oleh Ristek untuk berkunjung ke Timor Leste selama 5 hari. Disana saya bersama Pak Onno Purbo memberikan workshop / seminar selama 3 hari. Untuk acara tersebut, saya membuat 4 buah dokumen training / tutorial.

Semua dokumen tersebut saya buat dengan lisensi GPL v2. Artinya, Anda bebas menggunakannya untuk kebutuhan Anda sendiri. Termasuk memodifikasinya untuk keperluan Anda.

Terlampir adalah dokumen-dokumen ybs :

[1] Cara Cepat Pemrograman Web – bagian 1 : berbasis Open Source (1,2 MB)
[ format PDF (280 KB)]
[2] Cara Cepat Pemrograman Web – bagian 2 : berbasis Open Source (1,2 MB)>
[ format PDF (282 KB)]
[3] Pengenalan Virtualisasi (1,6 MB) [ format PDF (888 KB)]
[4] Tutorial Open Office (4,5 MB) [ format PDF (2,9 MB)]

Dokumen ke 4 dibuat oleh Hasan (Ardelindo.com) dengan lisensi GPL. Sebetulnya dokumen tersebut membahas Open Office v2. Karena lisensinya bebas, maka saya jadi bisa meng update dokumen tersebut untuk versi 3, melakukan beberapa editing, beberapa revisi – dan lalu menyediakannya kembali untuk Anda sekalian.

Dengan membebaskan dokumen / artikel, yaitu melisensikannya secara bebas (GPL atau setara), maka dokumen tersebut seakan-akan menjadi hidup. Dia jadi bisa diakses oleh siapa saja, bermanfaat oleh siapa saja, dan bahkan jadi bisa terus relevan sesuai dengan perkembangan zaman.
Terimakasih kepada Hasan yang sudah menginspirasi saya untuk membebaskan dokumen-dokumen saya sendiri juga.

Kembali ke acaranya; mengenang kunjungan tersebut, terlampir adalah lagu “Juni di kota Dili” oleh Rita Effendi. Selamat menikmati ๐Ÿ™‚