google summer of code 2009
at last, i encouraged myself to join google summer of code… google summer of code 2009, here i come
moodle is my point, let’s see…
at last, i encouraged myself to join google summer of code… google summer of code 2009, here i come
moodle is my point, let’s see…
setelah mengisi praktikum basisdata kemarin, saya berjanji untuk membuat materi ini… baiklah ini nih.
saya ambil langsung terjemahan dari MySQL 5.0 reference, biar cepet.. hehe…
post ini menjelaskan tentang
(cross join, inner join, right join, left join, natural join, join using)
yang berlaku di MySQL 5
pada suatu kasus, terdapat tabel sederhana pengguna dengan struktur dan data sebagai berikut
tabel pengguna
CREATE TABLE `pengguna` (
`id_pengguna` int(11) NOT NULL auto_increment,
`nama` varchar(20) NOT NULL,
PRIMARY KEY (`id_pengguna`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
tabel pengguna_lengkap
CREATE TABLE `pengguna_lengkap` (
`id_pengguna` int(11) NOT NULL,
`alamat` varchar(50) NOT NULL,
`telepon` varchar(15) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
data:
INSERT INTO `pengguna` (`id_pengguna`, `nama`) VALUES
(1, 'khalifavi'),
(2, 'silvershade'),
(3, 'kaelina');
INSERT INTO `pengguna_lengkap` (`id_pengguna`, `alamat`, `telepon`) VALUES
(1, 'cigiringsing', '081910435544'),
(2, 'cijambe', '022 7815913'),
(4, 'tubagus ismail', '022 91724325');
dari data tersebut, dapat kita lihat bahwa pada tabel pengguna, tidak terdapat record dengan id 4, dan begitu pula pada tabel pengguna_lengkap tidak terdapat record dengan id 3.
apabila dilakukan join biasa maka beberapa record tidak akan tampil seperti yang kita mau
SELECT *
FROM pengguna p, pengguna_lengkap pk
WHERE p.id_pengguna = pk.id_pengguna;
hanya akan menampilkan
| id_pengguna | nama | id_pengguna | alamat | telepon |
|---|---|---|---|---|
| 1 | khalifavi | 1 | cigiringsing | 081910435544 |
| 2 | silvershade | 2 | cijambe | 022 7815913 |
2 rows in set (0.01 sec)
lalu dimana yang memiliki id_pengguna 3 dan 4?, untuk itulah ada beberapa join khusus…
untuk menampilkan semua yang terdapat di tabel pengguna namun tidak terdapat di tabel pengguna_lengkap kita bisa menggunakan LEFT JOIN
SELECT *
FROM pengguna p LEFT JOIN pengguna_lengkap pk
ON p.id_pengguna = pk.id_pengguna;
maka akan menghasilkan
| id_pengguna | nama | id_pengguna | alamat | telepon |
|---|---|---|---|---|
| 1 | khalifavi | 1 | cigiringsing | 081910435544 |
| 2 | silvershade | 2 | cijambe | 022 7815913 |
| 3 | kaelina | NULL | NULL | NULL |
3 rows in set (0.01 sec)
pada penggunaan LEFT JOIN ini, record yang ada di kedua tabel atau hanya di tabel kiri akan selalu ditampilkan, dan akan menghasilkan nilai NULL pada tabel di kanan
begitu pula sebaliknya dengan RIGHT JOIN query ini
SELECT *
FROM pengguna p RIGHT JOIN pengguna_lengkap pk
ON p.id_pengguna = pk.id_pengguna;
akan menghasilkan
| id_pengguna | nama | id_pengguna | alamat | telepon |
|---|---|---|---|---|
| 1 | khalifavi | 1 | cigiringsing | 081910435544 |
| 2 | silvershade | 2 | cijambe | 022 7815913 |
| NULL | NULL | 4 | tubagus ismail | 022 91724325 |
3 rows in set (0.02 sec)
digunakan untuk menampilkan record yang ada di kedua tabel atau hanya terdapat di tabel kanan
Note: penggunaan SELECT * pada LEFT atau RIGHT join akan menampilkan column yang redundansi. jadi?? kita lanjut…kan
namun mari kita bandingkan dengan penggunaan NATURAL JOIN
SELECT *
FROM pengguna p NATURAL JOIN pengguna_lengkap pk;
| id_pengguna | nama | alamat | telepon |
|---|---|---|---|
| 1 | khalifavi | cigiringsing | 081910435544 |
| 2 | silvershade | cijambe | 022 7815913 |
2 rows in set (0.00 sec)
hey, ini sama dengan query pertama
SELECT *
FROM pengguna p, pengguna_lengkap pk
WHERE p.id_pengguna = pk.id_pengguna;
| id_pengguna | nama | id_pengguna | alamat | telepon |
|---|---|---|---|---|
| 1 | khalifavi | 1 | cigiringsing | 081910435544 |
| 2 | silvershade | 2 | cijambe | 022 7815913 |
2 rows in set (0.01 sec)
jadi bisa dikatakan bahwa ini penyederhanaan query pertama, namun menghapus column yang redundansi, hmmm, solusi yang bagus juga…
Note: hasil NATURAL JOIN sama dengan JOIN … USING
SELECT *
FROM pengguna p NATURAL JOIN pengguna_lengkap pk;
akan menghasilkan output yang sama dengan penggunaan JOIN … USING ini
SELECT *
FROM pengguna p JOIN pengguna_lengkap pk USING (id_pengguna);
ok, sekarang kita kombinasikan NATURAL JOIN dengan RIGHT JOIN
SELECT *
FROM pengguna p NATURAL RIGHT JOIN pengguna_lengkap pk;
| id_pengguna | nama | alamat | telepon |
|---|---|---|---|
| 1 | khalifavi | cigiringsing | 081910435544 |
| 2 | silvershade | cijambe | 022 7815913 |
| 4 | NULL | tubagus ismail | 022 91724325 |
3 rows in set (0.00 sec)
hmmm, untuk yang ini silahkan bandingkan sendiri…
dan mari kita coba INNER JOIN
SELECT *
FROM pengguna p INNER JOIN pengguna_lengkap pk
ON p.id_pengguna = pk.id_pengguna;
| id_pengguna | nama | id_pengguna | alamat | telepon |
|---|---|---|---|---|
| 1 | khalifavi | 1 | cigiringsing | 081910435544 |
| 2 | silvershade | 2 | cijambe | 022 7815913 |
2 rows in set (0.00 sec)
yang satu ini benar-benar mirip dengan query pertama, dan tanpa perbedaan sama sekali…
Note: di MySQL, INNER JOIN dan CROSS JOIN ini serupa (dapat saling menggantikan). namun di SQL Standar ini tidak serupa, INNER JOIN dapat menggunakan ON, tapi tidak dengan CROSS JOIN.
Hei Dataku!!!
Hmmm, mungkin itu yang kebanyakan orang katakan setelah terkena virus(di Windows)… OK, malah itu mungkin bukan virus, tetapi worm atau trojan. Pembahasan ini mungkin suatu saat menjadi kurang up-to-date, jadi silahkan ingatkan saya untuk terus memperbaharui artikel ini.
Sejak kemunculan brontok di depan publik, virus-virus (baca: worm) lain bermunculan dengan maksud serupa, tentunya membawa masing-masing misi, dimulai dari politik, iseng, balas dendam, jatuh cinta, bahkan putus cinta. Sudahlah, terserah mau disebut apa, yang pasti proses berjalannya virus tersebut tidak diketahui pengguna, mengganggu jalannya program lain, atau mungkin merusak dokumen kita. Saya juga kurang begitu paham maksud mereka, yang pasti para korban jelas merasa terganggu.
Untuk itu, saya akan coba membahas sedikit tentang ‘lubang’ yang (sering) dipakai untuk Malware menjaga eksistensi dirinya.
Direktori:C:\Documents and Settings\All Users\Start Menu\Programs\Startup\
direktori ini biasa digunakan untuk startup aplikasi sejalan dengan startup windows, file yang aktif bisa berupa executable(shortcut, *.pif, *.exe, *.com, *.bat, *.cmd, dan lain-lain), atau mungkin file dokumen(jika yang disimpan file *.txt, maka akan otomatis membuka dokumen tersebut di notepad)
Direktori:C:\Documents and Settings\Nama_User_Pengguna\Start Menu\Programs\Startup\
direktori ini berguna sama dengan yang diatas, tapi khusus untuk pengguna yang bersangkutan.
Registry:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
disini terdapat daftar aplikasi yang dijalankan saat windows start-up (untuk semua pengguna)
Registry:\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
sama dengan pada local_machine, tapi yang ini hanya berlaku pada pengguna yang bersangkutan.
Registry:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ ::Shell(String)
ini digunakan untuk menampilkan custom interface (tampilan windows), yang isi default-nya adalah “explorer.exe”, tapi jika sudah ditambah dengan data yang lain, misalnya “explorer.exe apacoba.exe”, kemungkinan “apacoba.exe” adalah merupakan sebuah virus.., waspadalah!!. Ada aplikasi custom interface yang benar-benar menggantikan peran explorer, yaitu talisman, program ini mengubah semua tampilan di desktop anda. jadi jangan khawatir apabila setelah talisman anda uninstall, desktop anda menjadi kosong, anda tinggal menjalankan task manager(ctrl+alt+del//ctrl+shit+esc), dan jalankan regedit, dan perbaiki key tersebut kembali menjadi “explorer.exe”.
Services: Hey, yang ini agak sulit dibahas, biar saya simpan dulu..
sekarang, virus-virus mulai meng-infeksikan dirinya ke dalam services windows, dengan interval sekian dia berjalan secara otomatis dan akan muncul setelah kita hapus,,, tapi tenang, pembahasannya biar saya simpan untuk artikel berikutnya…
Lain-lain:
selain dari lubang-lubang diatas, biasanya virus menamakan dirinya mirip dengan services windows yang berjalan, misalnya svchost.exe, dan atau disimpan di direktori penting windows semacam “C:\windows” atau di “C:\program files”, jadi kita harus teliti
Catatan:
tadi sore saya membantu seorang teteh yang komputernya terserang trojan IRC *saya lupa namanya, tapi katanya mau balas dendam yang berhubungan dengan IRC trojan lain, kalau tidak salah IRCbot, apalah*, jadi teringat saat saya masih melakukan studi tentang virus(koleksi, remake!)
Microsoft Indonesia telah mencanangkan program DreamSpark untuk mahasiswa. DreamSpark sendiri merupakan bantuan software gratis dari Microsoft untuk mahasiswa agar dapat digunakan untuk pengembangan pengetahuan khususnya di bidang yang berhubungan dengan IT. Seperti yang disampaikan oleh Republika Online, beberapa universitas yang siap mengimplementasikan program ini dalam waktu dekat diantaranya adalah Politeknik Elektronika Negeri Surabaya (ITS), Universitas Atma Jaya, Universitas Gadjah Mada (UGM), Universitas Gunadarma, Universitas MaChung, Universitas Pelita Harapan (UPH), Institut Pertanian Bogor (IPB), Institut Teknologi Bandung (ITB), Bina Nusantara (BINUS), Universitas Brawijaya (UNBRAW), Universitas Indonesia (UI), Universitas Padjajaran (UNPAD), Universitas Parahyangan (UNPAR).
Microsoft DreamSpark saat ini telah menyediakan beberapa software gratis untuk di-download, diantaranya Visual Studio 2008 Professional, Visual Studio 2005 Professional, Windows Server 2003 Standard, SQL Server 2005 Developer, Expression Studio, dan XNA Game Studio (lihat daftarnya). Namun itu tadi, sebelum bisa mengakses download tersebut kita harus terdaftar terlebih dahulu di MSNLive, dan mengisi form pendaftaran (apabila universitas telah terdaftar), selain itu karena paket yang disediakan hanya dalam bentuk download dan berkapasitas besar, pendownload perlu memiliki bandwith yang besar juga.
Ini merupakan salah satu terobosan Microsoft dalam pendidikan, khususnya pendidikan di perguruan tinggi, tapi dengan terbatasnya (untuk saat ini) universitas yang terdaftar, agaknya sedikit disayangkan.
catatan: (note dari penulis)
Universitas Pendidikan Indonesia tidak terdaftar. (sayang sekali, padahal banyak aplikasi pendukung pendidikan yang bisa dikembangkan disini; ditambah dengan hadirnya jurusan ilmu komputer – sejak 2005)
Tadi saya baru buka help yang tersedia di Flash, khususnya bagian actionscript, ternyata selain dapat membuat animasi bergerak(secara langsung) lewat actionscript, kita juga bisa membuat semacam tempat penyimpanan (memori) untuk aplikasi Flash yang kita buat. Ya, ini cukup menjelaskan tentang aplikasi-aplikasi Flash seperti ‘metro diary’, si diary merah yang isinya dapat berubah sesuai user yang kita gunakan. Ternyata yang digunakan disini adalah objek ‘Shared Object’. Jadi disini akan dijelaskan sedikit tentang yang satu ini sekaligus dengan contoh sederhananya…
Ternyata, Flash ini punya banyak fitur juga ya,,
Ini potongan dari Help-nya
“The SharedObject class is used to read and store limited amounts of data on a user’s computer. Shared objects offer real-time data sharing between objects that are persistent on the user’s computer. Local shared objects are similar to browser cookies.”
Kurang lebih artinya: Class SharedObject digunakan untuk membaca dan menyimpan sejumlah data (terbatas) di komputer pengguna. Shared object memberikan pertukaran data antar objek secara real-time yang persisten(tetap) di komputer pengguna. Shared object lokal mirip dengan cookies pada browser.
Nah, dari artinya itu sekarang kita tahu bahwa data disimpan secara lokal di harddisk, secara teknis tempatnya di “c:\Documents and Settings\[nama_user] \Application Data\Macromedia\Flash Player\#SharedObjects\”(ini di windows xp, di windows nt mungkin serupa, tapi kalau di win9x saya belum coba)
Untuk mencobanya, ayo kita coba actionscript yang terdapat di help Flash 8 ini (ok, dengan sedikit modifikasi tentunya),
// deklarasi variabel
var items_array:Array = new Array(101, 346, 483);
var currentUserIsAdmin:Boolean = true;
var currentUserName:String = “khalifavi”;
// deklarasi objek
var my_so:SharedObject = SharedObject.getLocal(“tes_sharedobject”, “/”);
// inisialisasi data objek dengan nilai dari variabel
my_so.data.itemNumbers = items_array;
my_so.data.adminPrivileges = currentUserIsAdmin;
my_so.data.userName = currentUserName;
nah ini dia yang dimaksud dengan penyimpanan
, baris var adalah deklarasi dan inisialisasi variabel, disini dicoba beberapa jenis variabel yaitu array, boolean, dan string…
, baris var my_so,,, adalah deklarasi shared object, ini diperlukan(penting!!, mana bisa menggunakan kalau sebelumnya tidak dibuat terlebih dahulu)[1].
, baris selanjutnya ‘my_so.data.itemNumbers = items_array;’, adalah ekspresi memasukan nilai ke shared object secara permanen[2]
apabila kode tersebut dijalankan, maka akan terdapat satu file baru setelah movie tersebut di-save, di-run, dan file tersebut akan muncul setelah movie di-close[3]
note:
[1]fungsi getLocal memiliki sintaks getLocal(sharedobject[, path, secured]), {dimana sharedobject:String adalah nama file shared object yang akan kita buat, path:String adalah direktori penyimpanan sharedobject(secara relatif), dan secured:Boolean adalah status penggunaan pengiriman lewat HTTPS, yang ini sebenarnya opsional, kurang jelas??, lebih jelasnya ada di help Flash}
[2]maksudnya permanen disini adalah shared object akan tetap ada(ditulis ke file) meskipun setelah movie di-close. Bisa dibuat ’semacam’ volatile dengan tidak menuliskan data(contoh: daripada menulis ‘my_so.data.itemNumbers = items_array;’, gunakan saja ‘my_so.itemNumbers = items_array;’) hal ini sangat berguna jika kita menginginkan sharedobject untuk ada hanya pada saat movie dijalankan [lihat ilustrasi di contoh]
[3]data bisa saja disimpan langsung(tanpa harus di-close) dengan menambahkan baris ‘my_so.flush()’ di akhir kode
disini saya sertakan juga file contoh (dalam format Flash
isi dari contoh.zip:::
namaFile(tipe; penjelasan)
ref_so.html(HTML Document; file referensi beberapa fungsi yang berhubungan dengan sharedObject, ini dikutip dari Flash 8 Help)
gambar#.jpg(JPG Graphic; beberapa file gambar, merupakan penjelasan visual dari dokumen ref_so.html)
data.fla(Flash Document; fileFlash percobaan dalam menggunakan ‘data’ [non-volatile]/tidak menggunakan ‘data’[volatile])
flush.fla(Flash Document; file Flash percobaan menggunakan fungsi flush)
penjelasan.html(HTML Document; file yang menerangkan tentang isi contoh)
Komentar Terakhir