Thursday, December 03, 2009

Belajar mengatur project

Hari ini saya hosting project di google code. Namanya project pawang. Project ini adalah project belajar bahasa pemrograman python bersama sama. Jadi project tutorial, kita buat artikel artikel step by step belajarnya di fasilitas wiki, dan kita hosting contoh contoh programnya di google code. Project ini ber-licence MIT , apa dan bagaimana saya juga kurang tahu detailnya :D. Mohon petunjuknya.

Bagi diri pribadi, harapan saya adalah bisa belajar bersama sama secara virtual dengan rekan rekan pengguna python di indonesia. Selain itu saya juga belajar untuk mengatur project secara virtual. Semoga project ini bisa memiliki team member yang cukup banyak sehingga bisa atraktif.

Wish me luck

Thursday, November 19, 2009

Membuat applikasi baru di dalam pinax

So, setelah kita belajar meng-install pinax, berikutnya adalah membuat applikasi di dalam pinax.
Step nya sebagai berikut :

1. Kita start dulu website "mysite" yang sudah kita buat dengan pinax. Diartikel terdahulu, kita membuat project "mysite" ini berbasis "social-project". Mari kita start webserver "my-site" kita.

(pinax-env)$ cd mysite
(pinax-env)$ python manage.py runserver

2. Setelah server kita bisa di start, kita lihat di web-browser kita di http://localhost:8000, dan mari kita coba untuk login.

3. Nah setelah kita bisa login, maka kita akan melihat deretan tab di bagian atas. Ada profile, photos, blogs, tribes dan seterusnya. Di deretan tab inilah kita akan mencoba untuk membuat applikasi kita. Jadi kita buat Tab applikasi kita, "my_app". Untuk itu kita harus edit file templates/site_base.html dan tambahkan kode dibawah ini di area dimana tab-tab tersebut di daftarkan. Setelah itu file kita save.

 <li id="tab_my_app">{% trans "My App" %}</li>

4. Refresh web-browser anda. Nah seharusnya sekarang muncul tab baru yang ber-title "My App". Nah ini kita baru saja mendaftarkan applikasi kita di halaman pinax. Itu adalah link-nya. Applikasinya sendiri harus kita buat terlebih dahulu. Untuk itu kita perbaharui dulu syntax di point-3 tersebut menjadi berikut :

 <li id="tab_my_app"><a href="{% url my_app_index %">{% trans "My App" %} </a> </li>

Nah sintak tersebut akan terbaca "applikasi kita bernama my_app, kita registrasikan tab-nya dengan nama tab_my_app, dengan title My App, jika di click dia akan mencari url dengan alamat my_app_index".

5. Nah alamat url "my_app_index" tersebut berada dimana  ? tentu saja dia harus berada didalam applikasi my_app kita. Mari kita buat applikasi kita di dalam pinax terlebih dahulu, dengan sintak :

(pinax-env)$ python manage.py startapp my_app

7. Sayangnya applikasi my_app ini tidak berada di dalam directory apps, sehingga akan mengurangi kerapian dari project ini. Mari kita pindah directory my_app ke dalam directory apps.

(pinax-env)$ mv my_app/ apps

8. Nah applikasi yang telah kita buat tersebut harus kita daftarkan ke dalam file daftar alamat url di pinax. Kita edit file urls.py milik pinax dan kita tambahkan baris perintah dibawah ini di area urlpatterns :

(r'^my_app/', include('my_app.urls')),

9. Sintak diatas itu akan terbaca seperti berikut "Apabila ada yang mencari alamat applikasi my_app, coba baca juga dari file urls milik applikasi my_app".  Saat ini kita masih belum memiliki file urls.py di dalam direktory my_app, jadi mari kita buat file urls.py di dalam directory my_app dan berisikan sintak sintak sebagai berikut :

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

urlpatterns = patterns('', url(r' ^$', direct_to_template, {"template": "my_app/index.html"}, name="my_app_index" ),
)

10. Nah dari sintak diatas terlihat bahwasannya alamat url my_app_index itu akan menggunakan tempat "index.html" yang berada di directory template. Saat ini kita tidak memiliki directory my_app di dalam directory template jadi kita harus membuatnya terlebih dahulu dengan sintak sebagai berikut :

(pinax-env)$ mkdir templates/my_app

11. Setelah itu kita buat file index.html di dalam directory template my_app, dan berisikan sintak sintak html seperti di bawah ini :

{% extends "site_base.html" %}

{% load i18n %}

{% block head_title %}{% trans "My App" %}{% endblock %}

{% block body %}
    {% blocktrans %}
        <p>Ini testing, UI Interface kita harus kita buat di file ini. </p>
    {% endblocktrans %}
{% endblock %}

12. Setelah itu kita kembali ke web-browser kita, kita refresh homepage-nya pinax, dan kita klik tab "My App" atau address bar kita isi http://localhost:8000/my_app/

Nah sekarang kita sudah bisa membuat applikasi kita, dan kita sudah mendaftarkannya di dalam pinax.


Thursday, November 05, 2009

Solusi composite primay key di Django

Mahalo, akhirnya setelah berkutat kesana kemari dengan ORM Django, akhirnya dapat juga solusi untuk mengatasi Composite Primary Key di Django. Django ORM menganut paham active_record, yang salah satu featurenya ada "1 kolom sebagai primary key" dalam suatu tabel. Persyaratan ini merupakan keharusan dalam sistem ORM Django.

Hal ini akan menimbulkan masalah pada saat kita akan memakai Django untuk sistem yang telah berjalan / legacy system, karena design tabel database di sistem tersebut banyak yang menggunakan composite key, atau lebih dari satu kolom sebagai primary key-nya.
Sebagai contoh kita ambil tabel kota, maka composite key nya adalah (kode_negara, kode_kota).

Nah solusi yang saya tawarkan adalah sebagai berikut :
  • buat satu kolom baru didalam tabel yang anda inginkan, dan jadikan kolom ini sebagai target untuk membuat primary key yang baru


    • alter table kota add column kota_id


  • kemudian di function save dari class model kota tersebut kita tambahkan perintah yang akan mengisi kolom kota_id dengan gabungan dari kolom kode_negara dan kode_kota


    • def save(self):
              if not self.kota_id:
                  self.kota_id = "%s%s" % (self.kode_negara, self.kode_kota)
                  super(Kota, self).save()



  • Kemudian pada saat save_edit, kita juga harus memastikan kolom primary key ini tidak ikut diubah oleh sistem.
Solusi yang saya tawarkan ini memang tidak 100% membuat saya puas, tetapi ini yang menurut saya terbaik saat ini. Dengan cara seperti ini, sistem yang sudah ada hanya perlu di ubah sedikit saja, tanpa merusak sistem yang lama.


Saturday, October 31, 2009

Installing Pinax

Hello All, berikut adalah catatan bagaimana instalasi pinax dilakukan di sistem Ubuntu 9.0.4 dan versi pinax adalah 0.7.1.

1. Download Pinax.
    Pinax software bisa kita download dari website pinaxproject dan ambil official release yang terakhir yakni versi 0.7.1. Django sudah termasuk didalam pinax software ini.

2. Extract file Pinax-0.7.1-bundle.tar.gz tersebut didalam directory project anda.

3. Selelah itu jalankan script untuk instalasi pinax di virtual environtment
$ python scripts/pinax-boot.py<path-to-virtual-env-to-create>
4. Setelah virtual environtment nya siap, berikutnya adalah mengaktifkan virtual environtmentnya
$ source <path-to-virtual-env-created>/bin/activate
5. Setelah aktif, maka di prompt di console kita akan berubah seperti berikut
(pinax-env)$
6. Berikutnya kita bisa melihat "template" project yang dimiliki oleh pinax, perintahnya seperti berikut :
(pinax-env)$ pinax-admin clone_project -l
7.  Favorite saya adalah membuat project yang berbasis "social-project", command nya sebagai berikut :
(pinax-env)$ pinax-admin clone_project social_project mysite

Mengapa saya memilih "social-project" walaupun pinax juga memiliki tempate "cms" ? reason-nya adalah multiple blogging nya. Dengan blogging ini knowledge management bisa dishare diantara pengguna sistem.

Oke sekian dulu.


Tuesday, October 20, 2009

Django + Pinax

Hi there,

Mau belajar Django + Pinax ?
Silahkan mengikuti Tutorial dari Fernando Correia ini, disana dia menjelaskan step by step menggunakan pinax. Harap di ingat saat tulisan ini di buat, versi dari pinax sudah di 0.7.1 sedangkan tutorial dari Fernando itu dibuat di versi 0.5.

Tetapi saya masih bisa memakainya, except project yang dipakai adalah "social-project" bukan "completed-project" seperti yang Fernando tulis.

Nah apa yang saya lakukan dengan Django dan Pinax ini ?.
Ide-nya begini, saya ingin punya applikasi yang bisa berkolaborasi dengan "CMS" atau "Social Networking" applikasi.  Jadi applikasi yang saya buat itu merupakan extention / bagian / component dari "CMS" atau "Social Networking" itu. Nah dengan pinax ini saya merasa bisa terwujud.

Pinax tetap merupakan suatu "library", yang di maintain oleh developer2-nya pinax, sementara applikasi yang saya buat merupakan extentionnya, dan yang memaintenance ya saya sendiri.
Begitu Pinax mengeluarkan release update terbaru, itu tidak akan mengganggu applikasi yang saya buat.

Hanya saja untuk versi saat ini, masih banyak yang harus di kejar dari Pinax. Terutama soal UI dan Functionalitynya yang masih terlalu sederhana.

Oke silahkan mencoba kombinasi django + pinax + applikasi-mu, dan mari kita belajar bersama.


Thursday, October 08, 2009

Rss again

Rasanya saya semakin kecanduan memakai feature rss nih. Sayangnya beberapa website yang saya ikuti, terutama website local tidak memiliki feature rss ini. Sehingga saya harus selalu melihat website tersebut jikalau saya ingin membacanya. Mungkin ada baiknya website website local yang banyak berisikan berita berita mulai memasukkan feature rss sebagai salah satu feature andalannya.
Biar saya juga mudah membaca beritanya.


Wednesday, September 16, 2009

Orientation, should I review mine ?

Akhir akhir ini, saya sudah jarang coding. Membuat satu modul utuh, saat ini lebih sering memperbaiki code code yang bermasalah dan tugas tugas yang tidak ada hubungannya dengan pekerjaan coding. Semisal melengkapi wiki, membuat sop, mereview ticket ticket dan koordinasi dengan departemen lain. Saya merasa ada sesuatu yang hilang, dan itu adalah coding.

Sensasi membuat code yang bagus, dalam artian enak dibaca, mudah di mengerti dan diikuti, dan penuh dengan optimasi, sudah membumbung di benak dan di jemari ini. Rasanya gatal ingin membuat sesuatu untuk code-code. Tetapi task task yang non-coding ini juga sangat banyak dan sangat menyita waktu.

Kapan ya saya bisa coding lagi, membuat suatu applikasi yang bagus lagi, yang bisa dipergunakan oleh orang banyak ?


Friday, September 04, 2009

igoogle

Pada awalnya tidak seberapa faham apa fungsi dari igoogle ini, tetapi setelah kunjungan ke beberapa site yang membahas pengenai rss-reader, rasanya penasaran juga. Akhirnya dikunjungilah site homepage igoogle ini, ternyata saya bisa akses dengan account google saya.

Wow, ternyata penampilannya mirip dengan dashboard. igoogle ini memiliki widget yang masing masing punya fungsi tertentu, contohnya ada widget untuk facebook, widget untuk gmail, widget untuk news dan sebagainya. Selain itu kita bisa mengatur "TAB"-nya, semisal seperti yang saya lakukan, ada tab untuk "Home", ada tab untuk "Berita", ada tab untuk "Programming". Jadi saya bisa meletakkan widget widget yang akan dipakai berdasarkan kategori TAB-nya tersebut.

So, jadilah ini adalah dashboard yang harus terbuka di internet browser ku secara default. widget yang paling sering saya pakai nih adalah sbb : widget google reader, widget berita-olahraga, widget google-news, widget detikinet, widget gmail.

So tell me your igoogle widget ?


Thursday, September 03, 2009

3 hal yang menggangu dalam membuat applikasi yang besar

Applikasi yang kita bangun sekarang boleh dikatakan cukup "jelek". Jelek dalam arti "developer point of view". Jadi kejelekannya itu dilihat dari cara pandang developer.
Berikut adalah daftar kejelekannya :
1. Ugly Foot-Print
Applikasi yang kita bangun menempal pada suatu software CMS. Kita membangun-nya sebagai component dari sistem CMS tersebut. Untuk suatu halaman yang sederhana, let say "hello world", masih terdapat foot-print yang cukup besar yang digenerate oleh CMS tersebut, ini bisa dilihat pada saat kita "view source" dari document html yang di generate. Hal ini memang tidak bisa dihindari akibat sistem kita yang menempel ke sistem CMS tersebut.
Solusi-nya :
Kita harus lepas dari sistem CMS tersebut.

2. Too many programming language
Yup, kita memakai banyak bahasa untuk membangun sistem kita ini. Php, Javascript, Pascal & Java adalah bahasa bahasa pemrograman yang kita pakai. Mungkin ini salah satu akibat dari kurangnya pengalaman dalam membangun sistem, banyaknya developer yang keluar masuk di sistem kita dan adanya keyakinan "yang penting jalan dulu".
Solusi-nya :
gunakan general-purpose language dan bangun ulang keseluruhan sistem dalam bahasa pemrograman tersebut

3. Our code is not easy to read
Walaupun kita memiliki standard penulisan code code di sistem kita, perbedaan antara developer yang satu dengan developer yang lain tetap terlihat di source code applikasi kita. Hal ini tidak mempengaruhi sistem yang berjalan ditempat kita, tetapi hal ini mempengaruhi pada saat kita akan memodifikasi source code tersebut. "Cara membaca" dari source code yang berbeda beda "pattern" penulisannya tentu akan sangat menyulitkan developer, dan ini adalah problem yang kita hadapi saat ini.  Tidak mengganggu jalannya sistem yang ada tapi cukup merepotkan pada saat memodifikasi source code-nya.
Solusi-nya :
tulis ulang code yang ada dan buat standard penulisan

Sementara baru tiga hal ini lah yang menurutku cukup "mengganggu" dalam kita membangun sistem kita. Sementara sistem kita terus berjalan, problem ini tetap tidak bisa teratasi tanpa kita memiliki momentum untuk memutus mata-rantai tersebut.

What do you think ?
ada usul ?


Wednesday, August 19, 2009

Play again with django

Yup, Django lagi. Why ? karena sekarang mereka sudah ada di V1.1, dan aku rasa cukup berharga untuk di lihat kembali apa yang mereka bisa. Oke, after installation yang smooth tidak ada masalah. Testing dengan applikasi poll mereka hingga ke tutorial ke 2, akhirnya problem yang ada terlihat. Berikut keterbatasan dari Django yang mungkin akan menimbulkan masalah bagi applikasi yang aku buat di kemudian hari :

 1. Single DB Connection
Django hanya memperkenankan 1 koneksi database. Ini artinya applikasi DB yang dibangun dengan Django hanya akan bekerja dengan 1 database saja, sehingga applikasinya tidak bisa  berperan sebagai "bridge application".
Solusi-nya : mungkin ada cara untuk membuat database connection sendiri, terpisah dari django. masih harus research mengenai hal ini.

 2. Composite Primary Key
Yup, Django masih memiliki keterbatasan dalam hal composite primary key. Django masih prefer dengan "single column as their primary key column" atau "Active Record" istilahnya.
Solusi-nya :
   a. menghindari "Identity/Sequence" value sebagai primary key, sebagai gantinya pakai "select max(x)+1" atau generate "unique value" sendiri.
   b. merubah design database ke "Active Records" pattern.

So, dengan dua problem besar yang muncul ini dan alternatif solusinya, aku rasa worthed untuk di mencoba Django v1.1. So Lets play with it.



Friday, August 07, 2009

Internal Speaker Solved

Kemarin ada informasi dari repository ubuntu untuk melakukan update terhadap package package Ubuntu. Terus terang masih ada sedikit trauma untuk melakukan update package dikarenakan terakhir update prosess yang kulakukan membuat aku harus menginstall ulang driver linuxantaudio.

But akhirnya aku lakukan juga prosess update tersebut.
Setelah check disana sini, sepertinya tidak ada problem dan woalah... ternyata internal speaker problem yang aku hadapi kemarin sudah solve. Internal speaker sekarang hanya bisa berfungsi jika tidak ada jack audio external speaker yang terpasang.

Mantap dah hari ini.


Thursday, August 06, 2009

Ubuntu Jaunty 9.0.4

Just update my Dell inspiron 1420 with Ubuntu Jaunty 9.0.4. Overall work fine, except for compiz and internal speaker. My Dell inspiron usage intel vga, so I have to set my xorg.conf to "UXA" mode, and it made my compiz run faster.  The only problem left is my internal speaker is still running while I used external speaker on my sound jack-port. Still no clue, can you help me ?



Friday, May 22, 2009

Getting Bigger and Ugly

Our Application project  is big enough, and its getting bigger.
Many collegue is get an eye on our application, they can see the benefit of our integrated system and they demand us to build a system for them.
Its good since they recognize our system already.

But, when u go deep into our application source code, you will realize that our source code is getting ugly. Its not goes beauty. Every developer bring their on style of develop codes. Their tend to "ignoring" our naming standard. Its fine if you deal with 2 or 3 programmers but if you deal with more than that, than you will have a problem.

This is what we saw on our project. When I have to fix a resign developer code, I amaze by seeing the code. it was different than what we followed and it force me to learn. Not easy, but I know what its mean. I said its not readable. At the end, I have to create my own style again, and I will apply it to our future application.

Tuesday, April 21, 2009

Rss addict

I think I became a RSS addict.
I prefer read from my RSS browser, the mozilla thunderbird.
The way it give me the news instantly is wonderful to me.
But off course not everything I can found from my RSS subscription.
But Its still good.

Where's my happy coding place ?

Slashdot just had a question regarding wheres my happy coding place ?
I say, I like to have a coding in mountain, surrounded by rice field ... and it must near the white sand beach.
I love bali.


Wednesday, April 08, 2009

Scalability challenges

Our Application Data is getting bigger and bigger.
This data growing is our challenges.

I need a replication on our Postgresql database.
Please give us advice.


Friday, March 06, 2009

Imagine

Lets Imagine,
I'm working with Open Source Software
I'm working from a village near big mountain at Central Java
I'm getting a good salary using OSS
I'm a member of International OSS Project

Just my 2cent
:-)


Monday, March 02, 2009

Database Replication on Postgresql

Its already become a major issue, since our data growing faster, 2GB each year in average until this day. I predict next year, we will have around 3GB growing data each year. Thats big enough.

By looking the type of application we developed, we realy think we need multi-master replication on our database. Planned to install a DB server on each site and use replication mechanism to handle the data.

So, please, if anyone know a OSS tools to do multi-master replication for Postgresql-DB, let me know okay ?


Tuesday, February 03, 2009

Wondering

Seandainya aku punya kesempatan untuk bergelut dengan python + database dan raise income money yang cukup seperti sekarang ... mungkin akan menyenangkan sekali ...

what do you think ?
working and learning and satisfy your soul, would it be nice ?

Monday, February 02, 2009

Postgresql Replicator

looking for Postgresql replication tools.
message me if you knew one of it.