Tag Archives: computer

The News From The Intertubes

So one day I check the intertubes,

The Intertubes In 60 Seconds (and more)

*casually clicking at* http://www.devttys0.com/2014/02/wrt120n-fprintf-stack-overflow/

Wait, wut??!



I am SOOOOO going to replace this router A.S.A.P, in the meantime dont hack my place plz. Thanks, I know you guys are super!

Oh, another update, I also put up my project mentioned at my last blog post somewhere, right now I put it on indefinite freeze, at least until I can get *other* (pressing) project on the pipeline to finish.

No, I’m not going to post the URL, so nyah! 🙂


Leave a comment

Filed under Uncategorized

Oh Noes, I Wrote A Program

Long time no update, sorry but in the mean time I managed to get busy with life, ha! What? You think I write blogs all day long?

It’s an image viewer folks.

Yes, I can hear the collective cry of “great, yet another image viewer that the world needs” and you might disappointed that I haven’t yet complete my zillion dollars super fast kernel that will eclipse Linux and BSD alike and shock the entire IT world. Well, in my defense I would if I manage to start that project.. but in the mean time I hope you would forgive my insolence of NOT fulfilling your high standard o’ reader of my blog. I’m sure being a blog reader gives you the authority over some guy over the internet to do your bidding.

In case your sense of humor is out of wack, please read the last paragraph as a joke. Thank you.

Anyway, this is what it looks like:

Oh noes, a screenshot!

Oh noes, a screenshot!

If you wince hard enough you’ll see Gwenview, well IT IS one of the main reason I wrote this damn program. For now, its name is “Lihat” which depending if you care or not to try to pronounce it but really from my side, I don’t care if you can pronounce it at all. We’re both random dudes on the internet, you can call it whatever you want.

Why you say? Well because a) I can, b) it was started with “how hard could it be?”, and c) IrfanView looks like someone from east europe wrote a program in the 90’s and still haven’t bothered to update the interface of (maybe) the most used image viewer program for Windows.


the program I mean, not Napoleon, mind you

Oh my god, its so seggssy!

For people who cares, fret not, I intend to release the code as open source. Besides, who makes millions from just an image viewer?

What is this? I don't even ..

What’s this? I don’t even ..

As you can see, I manage to put a useless feature here.

As you can see, I manage to put a useless feature here.

Please stay tuned, I’m working on it.. I’ll release it soon enough. If I haven’t upload it somewhere after a while, please bother me on the comment, or not.. I don’t care.

Leave a comment

Filed under Orang bego punya kegiatan

RhodeCode As FastCGI Program With Lighttpd In Debian

So one day I want to have a github-esque push box, somewhere I can push to collect my projects in one place that is NOT GitHub or BitBucket, or whatever. As always, my internet connection sucks and so I prefer to mirror interesting projects with incremental updates through daily/weekly/whenever-I-feels-like pull or fetch instead downloading each release.

My old setup was two separate hgweb and gitweb running as fastcgi applications connected to a lighttpd server through sockets each serving as mercurial and git web gui. In status quo, everything works and I like it.

Why Change A Perfectly Working System?

Because I can. Besides I want to get my hands on this RhodeCode thing I have put on hold for quite some time. It can handle both mercurial and git in one application, so that’s a good selling point that I would like to try.

RhodeCode Installation

My opinion on the overall installation, it was painless. First, I create a special user and group for this program:

    $ sudo adduser --disabled-login --no-create-home --uid 500 rhodecode

Next, I set /opt/rhodecode/ so everything about this RhodeCode stay inside that directory. Furthermore to make things easier on installation I chown that directory to my regular user & group, for now:

    $ sudo mkdir -p /opt/rhodecode
    $ sudo chown -R ariel:ariel /opt/rhodecode

Next, I create a new virtualenv instance:

    $ virtualenv --no-site-packages /opt/rhodecode/venv/2.7
    $ cd /opt/rhodecode/

This will initialize new virtualenv inside venv/2.7, the “2.7” part is because I use Debian Wheezy and its Python is at 2.7.3.

Okay now, I begin using the new virtualenv to download rhodecode and its dependencies:

    $ source venv/2.7/bin/activate
    (2.7)$ pip install rhodecode

Oh joy, I get to wait for something. So off to making tea then …

For some strange reason RhodeCode fail when downloading Mercurial (2.6.2). Now my pushbox is on Wheezy Stable, its Mercurial was at 2.2.2. So, while I’m at it anyway why not just use 2.6.2 directly in this virtualenv?

Mercurial Installation

I set to build a fresh Mercurial straight from upstream:

    (2.7)$ cd /tmp/
    (2.7)$ wget http://selenic.com/hg/archive/cceaf7af4c9e.tar.bz2
    (2.7)$ tar xf cceaf7af4c9e.tar.bz

The cceaf7af4c9e is Mercurial tag for version 2.6.2, the version that RhodeCode 1.7.1 wants. So I build that:

    (2.7)$ cd Mercurial-cceaf7af4c9e/
    (2.7)$ python setup.py build
    (2.7)$ python setup.py install

I’m still in my virtualenv environment as you can see in my prompt string, it says “(2.7)$“. So I know when I do an “install” the new Mercurial version will be installed to /opt/rhodecode/venv/2.7/lib/python/site-packages.

Not surprisingly Mercurial installed successfully. I have no further use for the Mercurial source code, so I remove them and get back to rhodecode directory:

    (2.7)$ cd /opt/rhodecode/
    (2.7)$ rm -rf /tmp/Mercurial-cceaf7af4c9e/

RhodeCode Installation Part 2

Mercurial should not be a problem anymore, continue with the installation:

    (2.7)$ pip install rhodecode

After waiting a while for downloading and compiling (this push-box is a re-purposed 2005-ish desktop, not exactly what you’ll call as “fast”) we are done with the downloads.

Now, according to RhodeCode documentation I should create a configuration file. I’m new, so I’ll just follow that:

    (2.7)$ paster make-config RhodeCode pushbox.ini
    (2.7)$ paster setup-rhodecode pushbox.ini

It then ask for “Do I want to delete database?”. Of course I say yes, I don’t have one yet!

Next, it prompts me for my repository location. I guess for my first try I should create a new directory, so I stop the job (Ctrl + Z) and do a quick mkdir:

    (2.7)$ sudo mkdir -p /srv/repos/
    (2.7)$ sudo chown ariel:ariel /srv/repos/
    (2.7)$ fg

Continuing the job, I put “/srv/repos/” here. Of course I don’t have anything in that directory yet, you think I’ll use my REAL repository location?

It then asks for admin user name, password, and email address, you know, the standard stuff.

Maiden Flight Of RhodeCode

Alright, let’s run this thing:

    (2.7)$ paster serve pushbox.ini 
RhodeCode first run

RhodeCode first run

Well, that was easy.. so I kill the RhodeCode program by pressing Ctrl + C.

What About My Needs?

Now that the “default configuration” RhodeCode is working, its time for adapting it to my requirements:

  1. First, I do not want to run another web server on port 5000. So it has to work with my current webserver: lighttpd.
  2. Web access, push and pull, must use SSL not standard http.
  3. I want it to start automatically at startup like any other fastcgi apps.

RhodeCode As A FastCGI Program

After a while browsing about Paste, I found out to make it run as fastcgi program is to specify/use flup (surprise! surprise!) on the server section. So I get flup on this virtualenv too:

    (2.7)$ pip install flup

To make RhodeCode use flup I put this on my /opt/rhodecode/pushbox.ini file:


    ** more lines here, I commented as I don't use waitress, gunicorn, paste
       http server, etc. **

    use = egg:PasteScript#flup_fcgi_thread
    socket = %(here)s/socket
    umask = 000

    ** some more irrelevant lines **

The main idea is for flup to make RhodeCode running as threaded fastcgi program communicating to outside world using UNIX socket at /opt/rhodecode/socket, and that socket’s permission is 777.

On the web server side, I create new config file at /etc/lighttpd/conf-enabled/45-rhodecode.conf:

    # BEGIN /etc/lighttpd/conf-enabled/45-rhodecode.conf
    $SERVER["socket"] == ":443" {
        $HTTP["url"] =~ "^/repos" {
            fastcgi.server = ("/repos" => (("check-local" => "disable",
                                            "socket"      => "/opt/rhodecode/socket"))

    $HTTP["url"] =~ "^/repos" {
        $SERVER["socket"] != ":443" {
            $HTTP["host"] =~ "(.*)" {
                url.redirect += ( "^/(.*)" => "https://%1/$1" )

    # EOF /etc/lighttpd/conf-enabled/45-rhodecode.conf

Using this configuration, lighttpd will:

To test the new configuration, I restart the lighttpd web server and try to run the RhodeCode program again:

    (2.7)$ sudo service lighttpd restart
    (2.7)$ paster serve pushbox.ini 

** Checks http://pushbox.home/repos/ on the browser **

This time it should work as before, using a cute little socket instead of running as http server on some port.

Debian-ish Setup

Now that basically the program is done, it’s time to make it run as daemon.

In my case I wrote my own /etc/init.d/rhodecode script. But I probably didn’t have to, because later I found out that the developer also have a nice init script for Debian:


But for completeness sake I will post my init script too. My script is pretty much the skeleton file modified to execute “paster serve” in daemon mode under the privilege of rhodecode user and group:

    #! /bin/sh
    # Provides:          rhodecode
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: rhodecode repository application service

    # Author: ariel 

    # Do NOT "set -e"

    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    DESC="RhodeCode Repositories Service"
    PASTER_ARGS="serve --daemon --user=$RUNUSER --group=$RUNGROUP --pid-file=$PIDFILE --log-file=$LOGFILE $CONFIG"

    # Exit if the package is not installed
    [ -x "$PASTER" ] || exit 0
    [ -f "$CONFIG" ] || exit 0

    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh

    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
    # and status_of_proc is working.
    . /lib/lsb/init-functions

    # Function that starts the daemon/service
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --chdir $HOME --chuid $RUNUSER:$RUNGROUP --pidfile $PIDFILE --exec $PASTER -- $PASTER_ARGS start > /dev/null 2>&1 || return 2

    # Function that stops the daemon/service
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --start --quiet --chdir $HOME --chuid $RUNUSER:$RUNGROUP --pidfile $PIDFILE --exec $PASTER -- $PASTER_ARGS stop > /dev/null 2>&1 || return 1

        if [ -f $PIDFILE ]; then
            rm $PIDFILE

        return 0

    # Function that sends a SIGHUP to the daemon/service
    do_reload() {
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        start-stop-daemon --start --quiet --chdir $HOME --chuid $RUNUSER:$RUNGROUP --pidfile $PIDFILE --exec $PASTER -- $PASTER_ARGS --reload > /dev/null 2>&1 
        return 0

    case "$1" in
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        $PASTER $PASTER_ARGS status > /dev/null
        exit $?
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        log_daemon_msg "Reloading $DESC" "$NAME"
        log_end_msg $?
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        log_daemon_msg "Restarting $DESC" "$NAME"
        case "$?" in
            case "$?" in
                0) log_end_msg 0 ;;
                1) log_end_msg 1 ;; # Old process is still running
                *) log_end_msg 1 ;; # Failed to start
            # Failed to stop
            log_end_msg 1
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload}" >&2
        exit 3


Using the usual command to make it run automatically on startup:

    (2.7)$ sudo update-rc.d rhodecode defaults

Now that I have program set, init script and all, it’s time to clean up.

For starters, everything under /opt/rhodecode/ should be owned by user and group rhodecode:

    (2.7)$ sudo chown -R rhodecode:rhodecode /opt/rhodecode/

The same thing should be applied to /srv/repos/, but in my case I own it to user and group repo. Why? My current repositories that is stored elsewhere, also owned by this user/group, so I’m just being consistent here:

    (2.7)$ sudo chown -R repo:repo /srv/repos/

Because the rhodecode program executed under user rhodecode I also add user rhodecode to group repo, and make sure anyone in repo group can write to /srv/repos/:

    (2.7)$ sudo adduser rhodecode repo
    (2.7)$ sudo chmod -R g+w /srv/repos/

Some Gotchas Along The Way

  1. My first gotcha was about file permission of socket, it seems flup defaults to create socket that is not writable to others. And since my web server runs under user lighttpd (not www-data, rhodecode, or ariel) the web server returns “503 Service Unavailable”. So by adding “umask = 000” in my pushbox.ini flup will create a socket with 777 permission that is accessible to user running the program (user rhodecode) and the user running the web server (user lighttpd).
  2. Second gotcha came when pushing through rhodecode, the git client program says the server “hung up” and by adding GIT_CURL_VERBOSE=1 environment variable I see curl got “413 Requested Entity To Large” from the server.

    In my case my problem basically caused by /var/cache/lighttpd/ being owned by user www-data. You see, as I said earlier, in my setup my lighttpd program runs as user lighttpd and NOT as www-data which is the default in Debian. So if you’re having your push fail with “hung up” message, check the filesystem permission of the directory pointed by lighttpd as server.upload-dirs.

  3. The third gotcha is on the browser, my browser is Mozilla Firefox with No Script on by default on ALL domains. RhodeCode uses AJAX heavily, so if there is no repository showing on RhodeCode even though you know you already push something to it, check your No Script (temporary) whitelist.


There are some other things that need to be done such as using my real repositories location, setting proper filesystem permissions, and so on; but they are normal administrator daily work so I’ll leave that out from this post.

Some observations:

  • RhodeCode seems to install some hooks to repositories, which you might not want. There are settings somewere when you login as admin to disable this but I dont know if those would remove hook(s) that RhodeCode installed the first time it found a new repository.
  • From the log it seems, in my setup, it fails on file permission when installing some hooks but other than that I haven’t experienced any problem on pulling, cloning, and pushing to repositories.
  • Its appearance is not as sexy as github or bitbucket, sure. But I’ll manage, I rarely use web gui anyway.


Filed under Ilmu, Orang bego punya kegiatan

TL-WN722N Problem With Windows XP

We have an aging desktop running Windows XP. I want to update a program from the internet so I need a network connection, since its ethernet cable used somewhere else so I plug my USB WLAN adapter. Strangely, I get disconnected from the network after about an hour or so after I plug it in. Unfortunately this mysterious disconnection also followed by failures to reconnect so I cannot treat it as a mere annoyance, I have to get this fixed.

The usual “repair” option didn’t work, manually disabling and re-enabling the device didn’t work either. I try to reboot, and again after an hour or so the WLAN disconnects itself. Next I physically unplug and replugging the device, still it wont reconnect. I try to google the interwebs on this, I got nothing.

Strange, when I use Linux I didn’t have  this problem, been using it for hours everyday. I try the ethernet/wired connection (I borrow a cable from an unused machine) it works, so at least now I know the problem is with my USB WLAN adapter.

This particular machine has a firewall, Sygate Personal Firewall, which basically used for its nice notifier when applications making network connections. It is also very old, but its good enough for a freeware. This machine also have VirtualBox installed, it says “VirtualBox from Oracle”, definitely newer than the firewall program.

Looking at two of this program I suspect that one of them is the cause of this problem because:

  • A firewall is works at low-level, at least the decent ones. So it is ALWAYS a factor when network connection showing exhibiting problems.
  • VirtualBox install a virtual network interface for its “Host-only” network. To me it smells like the driver is mucking with this machine’s networking.

After some trial-and-error, I found that by removing VirtualBox it solves the mysterious disconnection problem.

So there you go, if your TL-WN722N mysteriously disconnects in Windows XP and you have Sygate Personal Firewall and VirtualBox installed you should try to remove VirtualBox. Hey.. the more you know!

Leave a comment

Filed under Uncategorized

Bought A USB Wireless Adapter

TP-LINK TL-WN722NI just bought USB wireless adapter TL-WN722N, it works very well on Linux. Just plug it in, run a dmesg, install iwconfig + wpa_supplicant, and since I’m feeling lazy lately, I use networkmanager to deal with the configuration details.

Now I have at least three TP-LINK equipments in my house. They have no problem working with Linksys stuff I have here, and it doesn’t look ugly at all for a device I bought for less than $10. I have to say for their price they do make some decent stuff, or maybe I’m just lucky to get only the good ones. As far as I can tell now, I only have two problems with this device:

  1. The damn cap is not tied to the main body, I might lose it soon.
  2. I can only plug it in my computer with the white side facing the wrong direction! What a strange design choice.

And that gentlemen, is another update for this blog, at least for now. 🙂

Leave a comment

Filed under Orang bego punya kegiatan, Uncategorized

Cerita Sebuah VGA Card Baru

Latar Belakang

Beberapa hari yang lalu komputer tidak mau boot, selalu restart pada saat X seharusnya mulai. Saya coba boot ke Windows sama saja, selalu restart pada saat desktop seharusnya muncul. Aneh.

Pertama-tama saya check memory dulu pakai memtest+, tidak ada masalah katanya. Lalu saya coba membersihkan bagian dalam komputer, sama sekali tidak ada perbedaan. Setelah beberapa kali bongkar pasang casing komputer, di monitor muncul bintik-bintik membentuk garis vertikal pada saat BIOS booting. Sedikit lega, karena artinya kalau sudah begini masalahnya bukan dari software lagi.

Masalah di VGA Card

Sedikit browsing di internet, kesimpulannya ini gejala VGA card yang sudah sekarat. Saya cabut VGA card yang ada, PixelView nVIDIA GeForce 8600 GT (128-bit, 256MB) coba bersihin banyak debu yang sudah bersarang di kipasnya lalu coba pasang lagi. Setelah kira-kira empat kali cabut, bersih-bersih, dan pasang saya mulai berpikir mungkin ini saatnya untuk beli VGA card baru. VGA card ini sudah ada dari tahun 2007, sudah 4 atau 5 tahun nih, mungkin memang sudah saatnya dia diganti.

Saya pergi ke toko komputer langganan dan non-langganan terdekat untuk cari tahu harga VGA card yang ada. Dari empat atau lima toko komputer di daerah Pasar Lama, saya cuma ketemu tiga macam: merk Point of View 9xxx GT (lupa), PixelView GeForce 240 GT dan Radeon HD 6xxx (lupa). Cuma ada tiga pilihan? No thank you, mending cari-cari dulu deh di internet yang sesuai dengan budget. Ok, balik lagi ke rumah.

Hari itu adalah hari Sabtu, biasanya hari Sabtu dan Minggu adalah hari main Counter-Strike. Biasanya mulai begadang dari Sabtu pukul 11 malam non-stop sampai pukul 6 pagi di hari Minggu. Nah sekarang bagaimana mau main online? VGA cardnya sekarat begene!

Terpaksa deh main pakai laptop, meja jadi super ribet dengan kabel USB, VGA, LAN, audio, dan AC keluar dari laptop. Mana di laptop dipasang Deep Freeze lagi, jadi setelah install Counter-Strike jangan sampai keluar Windows, kalau restart semuanya akan hilang dan mesti install plus copy ulang config bermain saya dari komputer desktop. Oh Counter-Strike nights, the things that I do for you…

Mencari AlamatPengganti

Karena yang rusak ini merknya PixelView, dan yang sebelum yang ini saya juga pakai PixelView dan TV tuner juga merk PixelView, jadi untuk berikutnya saya cari yang merk PixelView juga, kalau ada. Tentu saja untuk VGA yang baru harus lebih baik daripada yang lama, jadi saya mencari yang lebih baik daripada 8600 GT. Walaupun saya tidak memanggil diri sebagai seorang gamer (lebih ke programmer sih), tapi ya setidaknya VGA-nya harus gak malu-maluin lah.

Soal pilihan jenis memory DDR2 atau DDR3 tidak masalah, saya sendiri gak tau bedanya dimana. Saya cari minimal 128-bit, kalau ada yang lebih baik dan masuk dalam budget silahkan, kalau gak ada juga gak masalah saya tetap di 128-bit. VGA card yang baru tentu harus sudah mendukung DirectX 10, sama seperti 8600 GT, dan bisa memainkan game-game mulai tahun 2010-an. Dari semua syarat, VGA card yang baru harus bisa dual-output soalnya saya pakai dua monitor. Untuk pilihan GeForce atau Radeon, sebenarnya saya sedikit condong ke GeForce kecuali kepepet, misalnya ditodong piso suruh beli Radeon :D.

Setelah cari-cari pilihan saya jatuh ke PixelView GeForce 220 GT (1GB 128bit DDR3), kalau menurut Vira Jaya di Mangga Dua waktu itu harganya kira-kira 468 ribu. Saya di Tangerang, jadi kalau dihitung lagi dengan cost transportasi ke Mangga Dua ternyata masih dalam budget belanja. So, off we go!

Orang Tangerang di Jakarta

Saya pilih ke Jakarta cara lama, naik bus, walaupun ada SIM (dan mobil) tapi belom berani bawa ke Jakarta.

  • Dari Tangerang pergi naik bus ke Senen, saya naik yang non-AC. Tobat deh, gak lagi-lagi, dari jaman kuliah sampe sekarang kalau namanya naik bus non-AC dari Tangerang ke Jakarta masih aja kayak begini, siang-siang selama kira-kira satu jam rasanya seperti ikan kalengan. Ongkos : Rp 3.000,-
  • Turun di terminal Senen, naik bus biru nomor M02 ke arah kota. Minta ke keneknya turun di Mangga Dua Mall. Sedikit lebih baik dari pada Tangerang – Senen, gak rame busnya. Ongkos : Rp 2.000,-

Dalam Mangga Dua Mall saya langsung ke toko Vira Jaya. Sedikit bingung dengan penomoran toko tapi akhirnya ketemu juga tokonya.

Kira-kira ada lima wanita muda di belakang etalase kaca pakai T-Shirt ngepas dengan badan yang melayani pembeli. Sekitar 5 orang lagi dibelakang meja, diantara tumpukan boks komponen komputer, ada yang sibuk dengan telepon, ada yang memperhatikan kertas, ada yang sedang sibuk pakai laptop.

Saya dilayani oleh wanita yang pakai baju kuning, dari perawakannya orang Jawa, dan saya mendapatkan kesan bahwa dia sendiri tidak terlalu mengerti komputer. Anyway, saya bilang saya mau VGA card, yang PCI Express, lalu dia kasih daftar harganya, persis seperti yang ada di internet. Saya cari item yang saya mau, tunjukkin ke dia, dia catat nama itemnya.

Setelah kira-kira lima menit liatin daftar harga, liatin yang jaga etalase, liatin orang-orang sekitar toko, dan liatin tumpukan boks komponen komputer dia balik lagi bilang barangnya gak ada, “kosong barangnya” begichu. Oh oke, saya tanya yang ada apa, dia bilang yang merk Biostar. Oke kembali lagi ke daftar harga kalau begitu.

Biostar GeForce GT 220

Jujur aja walaupun pernah denger motherboard merk ini, saya sebenarnya belum pernah pakai komponen merk Biostar. Sedikit ragu-ragu soalnya vendor ini unknown bagi saya dan karena saya di tokonya jadi gak bisa dong cari-cari review tentang merk Biostar di internet.

Karena meja saya sudah seperti kapal pecah, hari Selasa mesti lanjutin kerjaan, males bolak-balik Tangerang-Jakarta, akhirnya memberanikan diri untuk mencoba Biostar. Disini saya berharap pada garansi toko dan sedikit harap-harap cemas semoga VGA card yang ini ada dual-output.

Setelah kira-kira lima menit kembali liatin toko, liatin sekeliling toko, dan liatin daftar harga yang melayani saya datang dengan box VGA card. Saya tanya ke dia, ini bisa “dual-head” gak, mukanya sedikit berubah menandakan gak mengerti, saya gunakan istilah “dual monitor” dan akhirnya saya bilang kalau saya pakai dua monitor, akhirnya dia nyerah dan tanya ke bossnya. Dia bilang, bahwa bossnya bilang, tergantung komputernya bisa apa nggak.

Oke, saya minta boxnya dibuka.. lalu saya liat ternyata ada tiga output: DVI, VGA, dan HDMI. Oh oke, saya ambil. Saya kasih Rp 387.000,- lalu pulang.

Installasi VGA Card Baru

Saya lepas PixelView GeForce 8600 GT dari motherboard lalu pasang Biostar GeForce 220 GT di tempat yang sama. Pertama kali boot ke Linux, sudah tidak perlu install apa-apa lagi bisa langsung pakai. Casing komputer dipasang lagi, meja dirapihkan dari laptop dan kabel-kabel sisa begadang Sabtu-Minggu, kamar disapu dan pel biar bersih sekaligus.

Boot ke Windows dan harus install driver dari CD, makan waktu kira-kira 15 menit untuk install driver nVidia, minus nVidia Update (program apa ini??). Set driver untuk menggunakan konfigurasi dual-view, lalu saya lanjut test main Counter-Strike. Singkat kata, semuanya seperti sebelum waktu VGA card rusak.


Pertama-tama, harga VGA card mahal-mahal.
Kedua, naik bus dari Tangerang ke Jakarta masih seperti yang dulu. Kalau bisa pilih naik bus yang AC saja, ongkosnya memang Rp 6.500,- tapi jauh lebih nyaman.
Ketiga, kalau jualan komputer lebih bagus kalau pajang daftar harga di internet. Lo jualan, I lookup daftar harga you, kalau sepakat we do business lah.
Keempat, lewat pengalaman ini saya bisa mengatakan Linux sudah plug-and-play!

Leave a comment

Filed under Orang bego punya kegiatan

This Is Just Too Funny, I Have To Re-Post It Here

Credit to the original author, a spin of the thought-provoking dialog between Jack Nicholson’s and Tom Cruise’s character in A Few Good Men movie.

Yeah, IANAL, but a warrant means police have the authority to go look for something in a specific location, not the authority to command a suspect divulge information. You have to trick them into revealing the secret by leveraging their own ego:

Col. Jessep: You want answers?

Kaffee: I think I'm entitled.

Col. Jessep: You want answers?

Kaffee: I want the truth!

Col. Jessep: You can't handle the truth!

Col. Jessep: Son, we live in a world that has tubes,
and those tubes have to be guarded by encryption
algorithms. Who's gonna do it? You? You, 
Lt. Weinburg? I have more numerous salt bits than 
you could possibly fathom. You weep for digital 
forensics, and you curse the cipher.

You have that luxury. You have the luxury of not 
knowing what I know. That cryptography's invention, 
while inconvenient, probably keeps secrets. And my 
use of it, while absurd and incomprehensible to you, 
keeps secrets. You don't want the truth because 
deep down in places you don't talk about at 
parties, you want secrets to be kept, you need 
secrets to be kept.

We use words like key, code, hash. We use these 
words as the backbone of a science dedicated to 
securing communication. You use them as a specter. 

I have neither the time nor the inclination to 
explain cryptography to a man who rises and sleeps 
under the blanket of the very security that it 
provides, and then questions the security it 
provides for others. I would rather you just said 
thank you, and went on your way, Otherwise, I 
suggest you pick up a decrypter, and start brute 
forcing. Either way, I don't give a damn what you 
think you are entitled to.

Kaffee: Do you know the private key?

Col. Jessep: I know the premise of encry...

Kaffee: Do you know the private key?

Col. Jessep: 4b752O7o3dgJ#?;6q7IxLBr7:#gUL^!

Boom! Techno-lawyered.

I just put some line breaks for easier reading.

Leave a comment

Filed under Uncategorized

Fluxbox Screenshot

No I’m not dead, yet.

Leave a comment

Filed under Orang bego punya kegiatan

The Significance of # For Mercurial

Did you know that you have to encode “#” in your path if you work with Mercurial (hg)? I didn’t.

Let’s say I have a repository named “work#A” and so the usual Mercurial usage:

$ hg clone ~/projects/work#A mybranch
$ hg out ../work#A

wouldn’t work, and anything that requires path to a repository wouldn’t either as long you have a “#” in the path.

Excuse Me, What?

First of all you should read Mercurial’s manual on this, or if you fancy go grab a console and type:

$ hg help urls

The Mercurial guys decided to use “#” delimiter between repository path and revision. Does it sounds like a good feature to have? Can’t tell, I never use it but for me it smells like a legacy thing.

It’s A Feature Alright ..

Let’s say you have a can code in C# and you have projects under directory /media/c#/, so now you want to clone a project.

Unfortunately, if you are using Mercurial, you can’t do this:

$ hg clone /media/c#/mylinuxkernelrewrittenindotnet/ /tmp/dummybranch

to clone mylinuxkernelrewrittenindotnet to /tmp/dummybranch.

It will fail because it cannot find repository in /media/c. And if you DO have repository in /media/c, as long you dont have a tag named /mylinuxkernelrewrittenindotnet/ it will fail which is good because in this case we do not want to clone from /media/c up to tag /mylinuxkernelrewrittenindotnet/.

If you do have BOTH, a repository in /media/c and a tag named /mylinuxkernelrewrittenindotnet/ it will clone just that, successfully, but clearly it is not what you thought it is.

Wait, But I Thought Mercurial Is Intuitive?

Right away you thought you can escape this thing by adding a “\“, but nooo.. it wouldn’t work either.

So the Mercurial solution to this is to url-encode that path and put “file:” in front of the path expression. The end result should look like a URL.

Through research we know that a # url-encoded to %23. So with that knowledge, now you can do this:

$ hg clone file:/media/c%23/mylinuxkernelrewrittenindotnet/ /tmp/dummybranch

you can also use relative path as usual:

$ hg out file:../../../../work/foo%231

or :

$ hg pull file:~/work/foo%232

which I have to admit is such a hassle. But really, the alternatives to this (in Mercurial) are:

  • Just rename that stupid directory, or
  • Avoid it by using symlink without “#” in it, or
  • Not to write full path every time at all. In Mercurial we can define paths in hgrc (or .hgrc) and use them as alias.

Why I Think This # Is Ugly

Because the damned “-r” parameter exists, alive, and working that’s why.

Want to clone up to a revision? Type this:

$ hg clone -r 30 repopath newclone

Want to pull a revision from a remote repository? Type this:

$ hg pull -r c723c2da http://something.com/hg/

The reasoning why they have to treat “#” as revision identifier in a path is beyond me. Honestly I never use that feature and probably never will, I cannot think of a situation where this “feature” will be useful.

Leave a comment

Filed under Ilmu, Orang bego punya kegiatan, Pendapat gak penting

SLiM Theme: blackwidow

Here, have a nice theme for SLiM:

SLiM Theme: blackwidow

Download: http://ompldr.org/vYjk2ZA/

To use this, you need to install Droid Sans Mono font.

Source image.

1 Comment

Filed under Orang bego punya kegiatan