Jun 27 2011

Facebook FBML W3C Invalid

Beberapa waktu yang lalu, ketika saya mencoba menambahkan facebook like / ‘fb like’, pada halaman web. Terjadi error ketika di validasi di http://validator.w3.org. Setelah browsing-browsing kesana kemari, akhirnya hal tersebut dapat diatasi dengan cara tag tersebut ditulis pada sebuah script javascript.

Berikut ini adalah contohnya.

function coba() {
	//fb:like ditaruh disini, biar validasi sukses
	var tombol = '<fb:like href="http://pujianto.net" '
	+ 'send="true" width="480"'
	+'show_faces="true" font="lucida grande"></fb:like>';

	//menulis var tombol tadi pada element yg ber id fesbuk
	return document.getElementById('fesbuk').innerHTML = tombol;
}

Untuk lebih, lengkapnya bisa dilihat di  http://tinypaste.com/f1815. Klik disini untuk cek validasi w3c, klik disini untuk melihat tampilannya.


Apr 6 2011

Menambahkan feed info kampus

Assalamualaikum Wr.Wb,

Ternyata setelah the daftar tugas di set sebagai home page ada sedikit kemajuan, dimana setiap pertama kali membuka browser langsung muncul tumpukan tugas kampus yang mesti segera diselesaiken. :)

Oke, kali ini akan membahas seputar sesuatu yang baru ditambahkan pada projek ini. #halah. Yaitu feed seputar info-info dari kampus. Dan setelah coba-coba cari cara bagemana untuk memparsing file xml di python akhirnya menemukan sebuah library yang simple dan mudah digunakan. Yups ini dia, menggunakan Universal Feed Parser, selain itu dokumentasinya juga lengkap.

Berikut contoh simpel penggunaan feed parser ini.

#import feedparser.py
import feedparser

#buat variabel untuk menyimpan hasilnya
data = []

xml = feedparser.parse(&quot;http://www.amikom.ac.id/index.php/feed/info_kampus&quot;)
for a in xml:
     data.append('&lt;a href=\&quot;'+a.link+'\&quot; target=\&quot;_blank\&quot;&gt;'+a.title+'&lt;/a&gt;'&quot;)

#variabel data sudah ada isi judul berita &amp; linknya.

Apr 2 2011

The Daftar Tugas

Lama nggak posting dimari nih. Memasuki semester yang ke-empat ini emang jadwal kuliah rada dipadatkan. #halah. Terus ditambah aktifitas lainnya ….*plaak*.. *kepanjangan*.

Oke, mari kita berserius.hihhi. Tak terasa sekarang sudah ke semester 4 dalam berkuliah. Jadi 3 semester sudah terlewati & seiring dengan bertambahnya waktu perjalanan ini, tentunya harus semakin serius dalam belajar :) .  Wis pokoknya aku butuh sebuah perbedaan dan peningkatan, yang waktu dulu ngerjain tugas sering telat kini harus lebih disiplin. *yah.., ketrampilanku dalam membagi waktu itu emang rada rendah*.

Oke salah satu usahanya, kemarin coba-coba iseng buat aplikasi web sederhana tentang ‘the jadwal tugas’ itu. Pokoknya semua tugas-tugas di list disitu. Dan kalau progress sudah 100%, maka otomatis tugas tersebut ter-close sendiri.

the daftar tugas
Technically, seperti biasa.. pake google appengine yang python version & tornadoweb sebagai web frameworknya. Untuk mempercantik tampilan coba pake library jqueryui. Terdiri atas 3 entitas di datastorenya, yaitu semester, makul dan tasklist. *saat ini yg semester belum digabungin*.

Untuk yang akan datang,

Pengennya sih dikembangin lagi biar semua orang bisa memanfaatkan. Ya mari kita liat setelah pake aplikasi ini apakah ‘disiplinku’ semakin meningkat, kalo iya berarti ini cara efektif biar kita tambah rajin.hehehe. Ya insya Allah nanti kalo ini sukses, bisa dikembangkan untuk versi umum. Dan tentunya ditambah fitur lain biar lebih menarik.

Ada pemikiran …agak lebay sih.. yaitu fitur yang bila tugas sudah mendekati deadline dan progressnya belum 100%, otomatis posting pengingat untuk ngerampungin tugas ke twitter atau wall facebook atau situs jejaring sosial lainnya. Begitu bunyinya.

Demikian postingan hari ini. jangan lupa, buka http://kuliah.pujianto.net & set as homepage. :) )

Feb 27 2011

aplikasi sederhana dengan tornado #1

Oke. Sekarang kita coba belajar tornadoweb. Sebelume, tornado itu adalah web framework pada python dan bisa juga dijadikan sebagai web server. Eh info juga, ternyata tornado web sekarang sudah versi 1.2, entah kapan tanggal rilisnya. Karena yang tak download dulu yang versi 0.2. Lebih lanjut tentang tornado, bisa kita lihat di official website nya

Oiya, dalam percobaan kali ini kita akan menggunakan database MySQL pada lampp (xampp versi linux) sebagai backend nya #halah.

Pertama kita buat database & tabelnya

create database percobaan;
use percobaan;
create table anggota (
id int not null primary key auto_increment,
nama varchar (30)not null,
alamat varchar (50)not null,
pekerjaan varchar (40)not null
);

contoh kita mbuat tabel anggota kelompok ronda. :D .

Setelah buat database sekarang kita buat aplikasinya, buat sebuah direktori tempat kita membuat direktori tempat meletakkan aplikasinya. *dan didalam direktori tersebut kita masukan juga direktori tornadonya.*. Eh tapi sebelumnya buat install dulu MySQL-Python di komputer. untuk detail instalasinya cari sendiri yee. :) .  Untuk ngetes apakah mysql-python sudah berjalan jalankan python, terus import  _mysql. Kalo lancar berarti sudah sip.

contoh hirarki direktorinya:

- appsku:

- tornado

- app.py

Karena dalam tulisan di atas python scriptnya kita namai app.py, maka buat file app.py di direktori appsku. Terus buka file app.py & mari kita mulai :

#!/usr/bin/env python
# nama filenya app.py

#import modul2 yang dibutuhkan
import tornado.database
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

#definisikan pada port berapa aplikasi kita berjalan
from tornado.options import define, options
define("port", default=8888, help="run on the given port", type=int)

#sekarang kita buat class untuk halaman utamanya
class MainHandler(tornado.web.RequestHandler):
    def get(self):

		konek = tornado.database.Connection("/opt/lampp/var/mysql/mysql.sock","percobaan",user="root")
		self.write("""
		<html><head><title>Daftar Anggota Kelompok Ronda RT 43 </title></head>
		<body><div align="center"><h3>Daftar anggota kelompok ronda RT 43</h3>
		<table name="listanggota" border="1" ><tr>
		<td>No</td><td>Nama</td>
		<td>Alamat</td><td>Pekerjaan</td>
		</tr>

		""")
		if len(konek.query("SELECT * from anggota")) < 1:
			self.write("data masih kosong!")

		for a in konek.query("SELECT * FROM anggota"):
			self.write("<tr><td>" )
			self.write(str(a.id))
			self.write("</td><td>" )
			self.write(a.nama)
			self.write(" </td><td>")
			self.write(a.alamat)
			self.write("</td><td>")
			self.write(a.pekerjaan)
			self.write("</td></tr>")

		self.write("</table>")
		self.write("<br/> <a href=/insert>tambah</a> anggota")
		self.write("	</div> </body></html>")

#sekarang	class untuk tambah data dan post tambahan data
class Isi(tornado.web.RequestHandler):
	def get(self):
		self.write("<html><head><title>Tambah Anggota Baru </title></head><body>")

		self.write("""<div align="center">
		<h3>Tambahkan Anggota Baru: </h3>
		<form method="post" action="/insert">
		<table name="form-input" border="0">
		<tr><td><label for="nama">Nama:  </label></td>
		<td><input type="text" name="nama"><br /></td></tr>
		<tr><td><label for="alamat">Alamat:</label></td>
		<td><input type="text" name="alamat"><br /></td></tr>
		<tr><td><label for="pekerjaan">Pekerjaan:</label></td>
		<td><input type="text" name="pekerjaan"><br /></td></tr></table>
		<input type="submit" value="send">
		<input type="reset" value="clear">
		<a href="/"><input type="button" value="batal"></a>
		</form>
		</body></div>
		</html>""")

	def post(self):
		nama = self.get_argument("nama",None)
		alamat = self.get_argument("alamat",None)
		pekerjaan = self.get_argument("pekerjaan",None)
		if not nama or not alamat or not pekerjaan:
			self.write("data tidak lengkap, silakan diulang kembali. Klik back pada browser")
		else:
			konek = tornado.database.Connection("/opt/lampp/var/mysql/mysql.sock","percobaan",user="root")
			konek.execute(u'''insert into anggota(nama,alamat,pekerjaan) values (%s,%s,%s)''',nama,alamat,pekerjaan)
			self.redirect("/")

#kita buat fungsi utamanya
def main():
    tornado.options.parse_command_line()
    application = tornado.web.Application([
        (r"/", MainHandler),
        (r"/insert", Isi)
    ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

Eh iya, itu karena kita MySQLnya berada di lampp / xampp. maka yang kita isikan bukan localhost, tapi ‘/pathlokasilampp/var/mysql/mysql.sock’.

Dan, err sori itu kode htmlnya rada membuat berantakan ya? :D . Kan ini baru versi 1, jadi kita belum pake template dll.:))

Jalankan file app.py tadi ($python app.py), karena dalam pengaturan port untuk  httpnya 8888, maka setelah dijalankan url di browser adalah http://localhost:8888 . Mari kita lihat hasilnya :D

http://localhost:8888

http://localhost:8888/insert

list anggota yang sudah lumayan banyak..

Oke, mungkin itu dulu sodara2 sekalian. mohon maaf kalo masih banyak salah2.hihi.


Feb 15 2011

Membaca Google Books

Google Books.  Sebuah layanan dari Google yang memungkinkan kita untuk membaca-baca buku secara online tanpa perlu membeli buku. Beragam kategori buku yang ada di  google books ini. Ada seputar kesehatan, humor, masak, desain, dll.

Ya, sejenis sebuah perpustakaan virtual yang di dalamnya terdapat ribuan koleksi yang siap untuk disimak. Dan menurut pendapat saya, google books ini kurang begitu dikenal oleh orang-orang di sekitar kita. *tadi coba tanya salah satu teman apakah pernah nyoba google books, eh ternyata belum*.
Oke, coba kita coba praktekkan. Dan karena kebetulan saya tinggal di desa, coba cari buku dengan kata kunci“budidaya”.


Meskipun kalau yang versi free halaman yang ditampilkan dibatasi, tapi setidaknya kita dapat memperoleh pengalaman baru dari buku yang  kita baca. Bingung dengan uraian saya? monggo silakan ke tkp sendiri. :) ))