Kekuatan atau Kelemahan?

December 20, 2009

Tulisan ini saya peroleh dari mailing list, di kirimkan oleh Bapak Kusmayanto Kadiman.

Kekuatan atau Kelemahan?

Penulis tidak diketahui, Bits & Pieces, August 15, 1996, Economic Press Inc

Kadang kelemahan kita bisa menjadi kekuatan terbesar kita. Ambil contoh kisah seorang bocah 10 tahun yang memutuskan untuk mempelajari judo walaupun ia telah kehilangan lengan kirinya dalam sebuah kecelakaan mobil.

Sang bocah belajar dari seorang guru judo Jepang. Bocah ini benar-benar belajar dengan baik, sehingga ia sendiri tidak paham, kenapa setelah tiga bulan latihan, sang guru hanya mengajarkannya satu gerakan.

“Sensei,” akhirnya sang bocah bertanya, “Bukankah saya seharusnya sudah belajar gerakan lainnya?”

“Ini adalah satu-satunya gerakan yang kamu tahu, tapi ini juga satu-satunya gerakan yang perlu kamu ketahui” jawab sang Sensei.

Walau tidak begitu memahami, tapi tetap percaya pada gurunya, bocah ini tetap berlatih dan berlatih. Beberapa bulan kemudian, sang sensei mengantarkan sang bocah ke turnamen pertamanya. Terkejut pada kemampuannya sendiri, sang bocah dengan mudah memenangkan dua pertarungan pertamanya. Pertarungan ketiga lebih sulit, tapi setelah beberapa saat, lawannya kehilangan kesabaran dan menyerang, sang bocah dengan piawai menggunakan satu gerakannya untuk memenangkan pertarungan. Masih heran dengan kemenangannya, sang bocah masuk final.

Kali ini, lawannya lebih besar, lebih kuat, dan lebih berpengalaman. Untuk beberapa saat sang bocah terlihat tidak sepadan dibanding lawannya. Karena kuatir sang bocah bisa cedera, wasit menyerukan time-out. Ia bermaksud menghentikan pertarungan saat sang sensei menginterupsinya.

“Tidak,” interupsi sang sensei,”Biarkan ia melanjutkan.” Segera setelah pertarungan dilanjutkan, lawannya membuat kesalahan kritikal: ia lalai dalam pertahanannya. Secara cepat sang bocah menggunakan satu gerakan untuk menguncinya. Sang bocah memenangkan pertarungan dan kejuaraan. Ialah sang juaranya.

Dalam perjalanan kembali ke rumah, sang bocah dan senseinya mempelajari kembali setiap gerakan di pertarungan hari itu. Lalu sang bocah berani menanyakan yang terus dipikirkannya. “Sensei, bagaimana saya bisa memenangkan kejuaraan hanya dengan satu gerakan?” “Kamu menang karena dua alasan!” jawab sang sensei. “Pertama, kamu hampir memahiri salah satu bantingan tersulit dari semua gerakan di judo. Kedua, satu-satunya pertahanan yang telah diketahui terhadap gerakan itu adalah jika lawan kamu menangkap lengan kiri kamu”

Kelemahan sang bocah telah menjadi kekuatan terbesarnya.


Platforms Inter-trips

November 3, 2009

Few weeks back, I was requested to assist offshore ESD/PSD performance test to make sure that process can be brought to its specified safety state within specified time. One of the major concerns that we need to face is platform inter-trips where one platform sending trip signals to another remote platform.

Why do we need platforms inter-trips anyway?
My memory goes back to piper alpha every time I think about this. Based on the event aftermath on http://en.wikipedia.org/wiki/Piper_Alpha, “Another contributing factor was that the nearby connected platforms Tartan and Claymore continued to pump gas and oil to Piper Alpha until its pipeline ruptured in the heat in the second explosion”. Both platforms continued its production since there was no automated function to stop the platform when other platforms in trouble and operators were afraid they will be blamed if they lost the production.

How do we do this then?
Sending hardwired IO may not be an option due to distance between platforms, but, can we use data communication?
There is one thumb rule I received from the seniors that “data communication can’t be used for safety purpose”. Well, if we put “SIL 3 Data Communication” on google and we can get list of safety data communication products available on the market. Still, we need to make sure that both data protocol and media architecture are per SIL 3 requirement.

Data communication we use is Honeywell SM-SM SafeNet.

One of the differences between safety dan non-safe data communication is its failsafe feature.
If non-safe modbus used, it will hold last known good data value upon communication lost, thus, process will not be brought to its safe state when the real event occurs (fail to dangerous). If safe data communication used, process will be brought to its safe state upon communication lost. The bad news is yes, we will have another nuisance trip.

Open discussion guys – please CMIIW


Parsing Halaman Web

August 7, 2009

Pernahkah Anda menemukan informasi berguna di suatu web dan berfikir informasi tersebut akan lebih berguna dalam bentuk spreadsheet sehingga informasi tersebut lebih mudah diolah? Dalam kasus saya, saya menemukan http://mobil.kapanlagi.com/index_harga_tertinggi.html dan berfikir membuat pivot table excel untuk informasi tersebut. Mengakses halaman tersebut satu-persatu akan sangat memakan waktu dan saya tidak serajin itu.

Parsing merupakan metode untuk melakukannya secara otomatis. Banyak bahasa yang menyediakan library untuk parsing suatu halaman web. Kali ini saya coba dengan menggunakan python karena kepraktisannya. Hasilnya kurang lebih seperti script di bawah.

Ekseskusi :

python namascriptnya.py > list.csv

Terlalu malas untuk mengkonversi langsung ke excel, fungsi piping sudah cukup. File CSV, kemudian, dapat dibuka di excel dan diolah sesuai kebutuhan.

Script :

import sgmllib

class MyParser(sgmllib.SGMLParser):
    "Parsing tipe dan harga mobil dari mobil.kapanlagi.com"

    def parse(self, s, page=0):
        "Parsing string 's'."
        self.pagenumber = page
        self.feed(s)
        self.close()

    def __init__(self, verbose=0):
        "Initialise an object, passing 'verbose' to the superclass."

        sgmllib.SGMLParser.__init__(self, verbose)
        self.pagenumber = 0
        self.detailtype = 0
        self.counter = 0

    def start_a(self, attributes):
        "Sebagian data ada di tag A, dibedakan berdasarkan atribut class. Lihat di source mobil.kapanlagi.com"

        for name, value in attributes:
            if name == "class":
                if value == "ml5":
                    self.detailtype = 1
                if value == "ml18":
                    self.detailtype = 4

    def end_a(self):
        "Record the end of a hyperlink."

        self.detailtype = 0

    def start_span(self, attributes):
        "Sebagian data yang lain ada di tag span, dibedakan berdasarkan atribut class"

        for name, value in attributes:
            if name == "class":
                if value == "ml11" or value == "ml11x":
                    self.detailtype = 2
                if value == "ml12" or value == "ml12x":
                    self.detailtype = 3

    def end_span(self):
        "Record the end of a span."

        self.detailtype = 0

    def handle_data(self, data):
        "Apa yang akan dilakukan dengan 'data'? Hanya di print untuk piping"

        if self.detailtype > 0:
            if self.detailtype == 1:
                print str(self.pagenumber + 1) + "-" + str(self.counter + 1) + "," + data + ",",
                self.counter = self.counter + 1
            elif self.detailtype == 4:
                print data
            else:
                print data + ",",

import urllib, sgmllib

baseurl = "http://mobil.kapanlagi.com/index_harga_tertinggi"

for a in range(145, 146):

    if a == 0:
        url = baseurl + ".html"
    else:
        url = baseurl + "_" + str(a) + ".html"

    f = urllib.urlopen(url)
    s = f.read()

    myparser = MyParser()
    myparser.parse(s, a)

Hasilnya (list.CSV – dibuka menggunakan excel):

146-1,KIA Pregio, MPV, Diesel M/T, Thn.2005, KM: Tidak ada info, Harga: Rp. 137.000.000, Surabaya -
146-2,Mitsubishi Lancer, Sedan, New Evo GLX-I M/T, Thn.2004, 80.000 KM, Harga: Rp. 137.000.000, Jakarta -
146-3,Nissan Terrano, SUV, Spirit, Thn.2003, 54.000 KM, Harga: Rp. 137.000.000,Jakarta -
146-4,Isuzu Panther, MPV, New Panther Hi-Grade LS M/T, Harga: Rp. 137.000.000, Surabaya -
146-5,Suzuki APV, MPV, Arena SGX, Thn.2008, 10.000 KM, Harga: Rp. 137.000.000, Malang -