Showing posts with label coding. Show all posts
Showing posts with label coding. Show all posts

05 December 2009

Squid Proxy Authentication With PHP/MySQL

Many methods to do authentication in Squid, ie basic, ncsa, ntlm, kerberos, radius,.... But what about authenticate a user by looking in a MySQL table? More convenience if the language is PHP, as everybody language in the Web B-). So, after some quick googling results many clues, I picked one here and added some lines for data retrieval from MySQL. Here they are:
#!/usr/bin/php
mysql_connect("localhost","root","password");
if (! defined(STDIN)) {
        define("STDIN", fopen("php://stdin", "r"));
}
while (!feof(STDIN)) {
        $line = trim(fgets(STDIN));
        $fields = explode(' ', $line);
        $username = rawurldecode($fields[0]); //1738
        $password = rawurldecode($fields[1]); //1738
        $db=mysql("auth","select * from user where nama='$username' and passwd='$password'");
        if(mysql_num_rows($db)>0){
                fwrite(STDOUT, "OK\n");
        } else {
                // failed miserably
                fwrite(STDOUT, "ERR\n");
        }
}
?>

Very simple as we write. Next, chmod the script, eg auth.php with execute permission. Copy/move the script into any folder accessible by squid, just place it in /etc/squid is very well.

Edit /etc/squid/squid.conf, add the following lines:
auth_param basic program /etc/squid/auth.php
auth_param basic children 20
auth_param basic realm FKM HotSpot
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

And allow only authenticated user:
acl AuthenticatedUsers proxy_auth REQUIRED
http_access allow AuthenticatedUsers
http_access deny all
Restart squid. One major drawback is we have to manually set the browser using the squid address and port, the authentication can't be done in a transparent proxy mode.

14 September 2009

Howto Upgrade Rails on Mac 10.5.8 (with XAMPP and Minimalist Xcode)

Nowadays I really like to tinker with RoR (Ruby on Rails). You know, a real (web) programmer/developer/designer has to know more than one framework/cms/tech/script lang. Mac actually has RoR itself included since the Leopard version, but as I checked, its version was 1.2.6, while the current version of rails is 2.3.4.

For a new learner, there's not so much differences between those versions, but as usual, I like the newest, the latest version available, though it maybe give me a lot of troubles.

My current development box is Mac OS X 10.5.8 on Aspire One 110L (hacked to 2.5" 160GiB SATA HDD and 1,5 GiB of RAM). I've installed XAMPP and MAMP at the same time (latest version, of course :)

According to ADC (Apple Dev Connection), the rails upgrade process was easy:
1. sudo gem update --system
2. sudo gem install rails
3. sudo gem update rake
4. sudo gem update sqlite3-ruby

So, it must be easy... Ok, step 1-3 successfully executed, I prefer not to run the forth step, 'coz 1-3 is enough. I have a sample rails app I've developed before(named Solidyne), so it's the time to upgrade the app itself:

$ rails solidyne [enter]

Note that we have to choose which file replaces what, like database, route, etc shouldn't be overwritten.

Ok, try to run Solidyne with:

$ script/server

And access it via Safari.... Oops, error!

It seems Solidyne couldn't communicate with MySQL server, which is from XAMPP package. Seems the mysql-ruby deleted after the upgrade. Ok, easy install with

$ sudo gem install mysql

Wow, error! Xcode needed. You know, plain install of Xcode takes Gigs of HDD space, so I just installed DevSDK, GCC-4.0, and DeveloperToolsCLI, minimum requirement for building something, I guess (after analyzing each package with Pacifist).

$ sudo gem install mysql

Oops, error again, it said something about lib, header, etc. Tried with:

$ sudo gem install mysql -- --with-mysql-config=/Applications/XAMPP/xamppfiles/bin/mysql_config

Well done, some improvements, but still failed looking for header. Hmm, seems like XAMPP development had to be downloaded. But, currently my connection is so slow, so fetching some 23MiB would take some hours.

Try to look for header from MySQL_Mac...dmg I've downloaded weeks ago, open it using Pacifist, and extract the folder 'include' to XAMPP base dir, and then re-execute the last command,and succeeded. Still has some warnings due to different version between mysql binary and mysql header, but who cares?

$ script/server

Accessing through http://localhost:3000, and it works as expected.

24 April 2009

Konversi SHP ke MAP

Format peta digital pada umumnya adalah SHP dari ESRI, sedangkan format untuk mapserver adalah MAP, padahal MAP ini sebenarnya hanya file yang berisi properti dan informasi, yang pada dasarnya masih memerlukan file SHP juga.

Dulu sekali aku menggunakan QuantumGIS untuk konversi atau tepatnya mengeksport project file dari QGIS (yang berisi layer dari SHP) ke Mapfile, waktu itu versi Qgis adalah 0.8. Sekarang, setelah versi 1.0.1 (Kore), ternyata opsi export ke mapfile malah tidak ada! Adanya adalah sekumpulan plugin, yang semula kuduga bisa untuk generate mapfile, ternyata sampai saat ini belum bisa.

Biasa, googling sana-sini dengan berbagai keyword, akhirnya ketemu dengan keyword qgis to mapserver, akan membawa kita ke sini. Ternyata konversi qgis project ke mapserver file sekarang dipisahkan menjadi aplikasi stand-alone. Pantas saja!

Nah, untuk versi Linux ternyata harus menarik sourcenya, sedangkan yang windows dan macos sudah ada binarynya. Maka, diperlukan program semacam svn, yaitu git. Langkahnya adalah dengan #apt-get install git-core, lalu # git clone git://spatialserver.net/mapserver_export.git

Setelah itu, masuk ke folder mapserver_export, lalu jalankan make seperti biasa. Wah. lagi-lagi kurang toolsnya, maka perlu install dulu # apt-get install pyqt4-dev-tools. Setelah itu baru jalankan programnya lewat konsol: #./qgistomapserver.py, akan muncul jendela seperti ini:

Dari file Map yang dihasilkan, nantinya tinggal dipanggil lewat ka-map, pmapper, chameleon atau yang lainnya, atau koding langung dengan bantuan php_mapscript

19 September 2005

Tickle dan Toolkit

TCl dan Toolkit sebenarnya sudah lama aku kenal, mulai saat install RH 6.2 ampat tahun yang lalu. Aku tidak begitu antusias dengan Tcl/Tk, pun setelah keranjingan python, aku jarang sekali bermain dengan Tk. Salah satu alasannya adalah tampilannya yang monoton dan terkesan lucu, kotak-kotak dan tebel-tebel. Namun demikian, setelah kemarin download dan mencoba Puppy Linux (aku sebenarnya kurang sreg dengan logo asu-nya), ternyata hampir semua tool-tool yang disertakan dibekali oleh kemampuan Tcl/Tk yang nyatanya ampuh luar biasa.

Karena itu, sekarang aku baru cari-cari apakah Tcl/tk itu themable? Ternyata memang ada di sini. Weleh, malah dead link!! Udah ah, balik dulu.

24 August 2005

PGU, komponen GUI untuk PyGame

Buat kamu yang suka Python dan terutama PyGame, ada framework baru yang bernama PGU. Ia berfungsi sebagai pembangun GUI dengan komponen PyGame. Asiknya lagi bisa berjalan dengan SDL, alias jalan pula dalam mode framebuffer. Ini artinya kita bisa membuat aplikasi GUI tanpa harus memakai X.

20 June 2005

Again: Python, dude...

Untuk diketahui, python disini adalah bahasa pemrograman, meskipun bersimbol ular python. Banyak hal di GNU/Linux bersimbol binatang: GNU sendiri, Perl, Python, Linux.

Nah, agaknya tidak perlu dibahas kehebatan python, namun kenapa dengan begitu banyaknya kelebihan python, kita orang Indonesia masih jarang memanfaatkannya? Kalah populer dengan PHP dan Java, apalagi dengan VB dan Delphi. Padahal resource Python cukup banyak, cuma memang buku yang membahas python masih bisa dihitung dengan jari.

Ada beberapa sebab. Pertama, lain dengan PHP yang single purpose language, yakni untuk web based application, meskipun sekarang muncul yang namanya PHP-Gtk yang mencoba main di level aplikasi stand alone. Orang biasanya suka dengan paket lengkap, meskipun paket itu untuk tujuan khusus, namun bisa saja orang memodifikasinya untuk tujuan umum, misal PHP dipakai untuk aplikasi dekstop, meskipun dari UI kadang tidak efisien. Nah, dengan Python, untuk buat UI setidaknya ada standard dengan TCl, namun begitu, banyak yang meninggalkan TCl dan beralih ke Qt, GTK atau wxWindow.

Kedua, meskipun sudah install python, untuk tujuan praktis masih harus di tambahkan modul yang sesuai (tentu lewat download), misalnya Numeric, pygame, wxPython, dll. Tentu saja ini masalah besar, karena rata-rata kita orang Indonesia hampir tidak pernah online.

Ketiga, sumber yang minim. Istilahnya dukun yang mahir python masih sedikit, dibandingkan katakanlah PHP yang juga masih baru.

Karena itu, menurutku bagi mereka yang ingin terjun ke python, setidaknya harus memiliki beberapa perangkat berikut:

1. python 2.3 atau 2.4
2. numeric
3. pygame
4. smpeg
5. SDL komplit (SDL_image, SDL_ttf, SDL_mixer, SDL_net)
6. salah satu UI binding, pyQt, pyGtk, wxPython atau cukup TCl

Mengapa harus ada pygame? Sederhana saja. Siapapun programmer game pastilah otaknya jalan kiri dan kanan, soalnya harus tahu algoritma, bisa memprogram, bisa berfantasi. Singkatnya, jika ingin belajar buat aplikasi yang bagus, cobalah buat game, apapun gamenya. Itulah mengapa dulu sekali waktu aku jadi asisten labkom, aku suruh para praktikan untuk bikin game (waktu itu pakai Pascal). Dalam game setidaknya ada algoritma, grafis programming, database (simpan hi score), dan mekanisme I/O.

Nah, menurut hemat aku, pygame dapat digunakan sebagai pengganti Qt dan Gtk (dalam arti sempit). Kelebihannya tentu saja syntax-syntaxnya yang lebih sederhana. Misalnya, buatlah image viewer, satu dengan pygame dan satu dengan tcl, pyqt atau pygtl, aku berani bertaruh, pygame paling sedikit memerlukan baris (tentu tergantung codernya). Selain itu, terutama, karena pygame termasuk dalam library JanuX, maka dengan sendirinya, grafis programming dapat dilakukan tanpa X, cukup dengan konsol mode frame buffer.

All I need is fb mode and some libs: SDL, directfb, svgalib.

Jika tertarik dengan frame buffer (no X fb!), coba saja lihat paragui (www.paragui.net). framework yang satu ini menggunakan C++, sehingga meskipun amat bagus (rocks!!!), tapi lebih sulit, atau directfb (www.directfb.org), yang ini juga C++. Mendingan pakai pygame dengan memakai engine pyzzle yang top abiss!.