Things I am currently tinkering

  1. Can I Improve my efficiency & academic performance? By academic I mean: paper output and scientific thinking.
  2. How can I be less reactive (mentally)? Would meditation work? How can I train meditation consistently? Spiritual books: Rumi / Eckhart Tolle / Tara Brach / Seneca: What do these books teach? And what are the takeout from each off these books?
  3. What are the most effective and efficient way to improve my bench press (loading more weight), without high risk of injury?
  4. How can I be more efficient on time usage?
  5. How can I have better sleep?

These are not necessarily prioritized in order.

Iklan

Fear

This is the touchstone of such a spirit; no prize fighter can go with high spirits into the strife if he has never been beaten black and blue; the only contestant who can confidently enter the lists is the man who has seen his own blood, who has felt his teeth rattle beneath his opponent’s fist, who has been tripped and felt the full force of his adversary’s charge, who has been downed in body but not in spirit, one who, as often as he falls, rises again with greater defiance than ever.”

Seneca – Moral Letters to Lucilius, Letter 13.

Metode Statis vs Metode Reguler di Java

Metode Static di Java adalah metode yang untuk menjalankannya tak perlu dilakukan instantiasi. Salah satu contoh metode ini adalah metode round dalam class Math, misalnya Math.round(93.6).
Jika kita melakukan instantiasi pada Math ( misal, Math objekMath = new Math(); ), kita akan mendapatkan pesan kesalahan berupa “Math() has private access in java.lang.Math“, ini karena constructor Math() ditandai sebagai private di Java. Metode yang ditandai dengan kata kunci private tidak bisa diakses dari luar class tersebut.
Sebagai perbandingan dengan metode biasa (reguler/non-static), perhatikan tabel berikut:
Metode Reguler Metode Static
Dipanggil menggunakan nama reference variable (contoh: kucing1.mengeong() ) Dipanggil dengan menggunakan nama kelas (Contoh: Math.round(93.6) )
Terdapat instantiasi object Biasanya tidak ada instantiasi objek
Metode static tidak mengetahui keadaan variabel dari class yang mengandungnya. Jika kita memanggil sebuah variable yang didefinisikan dalam class yang sama dengan metode static ini (namun berada di luar metode static tsb), compiler akan memberikan pesan kesalahan, yakni “non-static variable … cannot be referenced from a static context“. Metode static tak bisa merefer ke  variabel dari class-nya dan tak tahu nilai variabel instantiasi yang mana yang akan digunakan. Sebagai ilustrasi, lihat kode A.   Metode reguler juga tak dapat diakses dari dalam metode static, meskipun metode tersebut tidak mengandung instance variable. Sebagai ilustrasi, lihat kode B.
Kode A
public class Kosan {
     int jumlahKamar;
     public static void main() {
          //error, karena mengakses variavel jumlahKamar yang
          //didefinisikan di luar metode Static
          System.out.println("Banyak kamar kosan ini:" + jumlahKamar);
     }
     public void setJumlahKamar(int n) {
          jumlahKamar = n;
     }
     public void getJumlahKamar() {
          return jumlahKamar;
     }

}
Kode B
public class Kosan {
     int jumlahKamar;
     public static void main() {
          //Error, karena pada akhirnya getJumlahKamar() juga akan
          //mengakses variabel jumlahKamar
          System.out.println("Banyak kamar kosan ini:" + getJumlahKamar());
     }
     public void setJumlahKamar(int n) {
          jumlahKamar = n;
     }
     public void getJumlahKamar() {
          return jumlahKamar;
     }
}
Referensi:  Head First Java 2nd Edition, Kathy Sierra & Bert Bates

Java Driver & MongoDB Aggregation Example

The following snippet is an example of how to query document in Mongo database, using Group By, Count, Limit, Sort, and Match.

This will count top 20 referrers descendingly-sorted, excluding any document with empty value (“”) in _id field.

If you’re not familiar with Aggregation concept, the following article about Aggregation Pipeline might helps.

// get from "Accounts" collection
DBCollection accountsColl = db.getCollection("Accounts");

// create new BasicDBObject that will be used to
// count based on $referrer field
DBObject groupFields = new BasicDBObject( "_id", "$referrer");
// return result as "count" field that based on the sum
// of similar value in $referrer field. Everytime a similar value
// is found, the count is given a $sum operation by 1.
groupFields.put("count", new BasicDBObject( "$sum", 1));
DBObject group = new BasicDBObject("$group", groupFields );

// create new BasicDBObject  that will ne used to filters out
// an empty string in $referrer field
DBObject matchFields = new BasicDBObject();
matchFields.put("_id", new BasicDBObject("$ne",""));
DBObject match = new BasicDBObject("$match", matchFields);

// create new BasicDBObject that limit query result in only 20 rows
DBObject limit = new BasicDBObject("$limit", 20);

// create new BasicDBObject that sort the result
// based on count, descendingly
DBObject sortFields = new BasicDBObject("count", -1);
DBObject sort = new BasicDBObject("$sort", sortFields );

// aggregate all conditions above
AggregationOutput output = accountsColl.aggregate(group, match,
sort, limit);
return output.getCommandResult().toString();

SAP dan ABAP, Apa Itu?

ABAP adalah bahasa pemrograman milik SAP yang ditujukan untuk pengelolaan perusahaan skala besar dan menengah. SAP sendiri merupakan aplikasi ERP dari Jerman yang belakangan ini sangat populer.  Mungkin bisa dianalogikan dengan MATLAB-nya ERP. Jika MATLAB aplikasi yang kaya dengan fungsi-fungsi sientific, maka SAP merupakan aplikasi ERP dengan beragam fungsi dan database  untuk mengelola perusahaan secara terstandar. Sekitar 80% fungsi-fungsi perusahaan telah disediakan SAP, sisanya baru disesuaikan atau dikembangkan sendiri oleh perusahaan baik oleh internal perusahaan maupun jasa konsultan. Nah, penyesuaian ini menggunakan bahasa pemrograman ABAP.

SAP sendiri mulai booming di Indonesia. Selain karena telah memiliki business process terstandar, kode-kode ABAP di SAP maintainable. Salah satu perusahaan susu terbesar di Indonesia beberapa waktu lalu beralih ke SAP dari aplikasi internal mereka yang dikembangkan dari Java dengan alasan maintainability. Hal ini disebabkan ketika mereka perlu mengkustomisasi ulang aplikasi yang telah mereka gunakan, mereka kesulitan menemukan konsultan Java yang mampu mengembangkan aplikasi tersebut, sementara perusahaan konsultan dimana mereka mengembangkan aplikasi tersebut telah bubar.

Konsultan SAP terbagi menjadi tiga bagian utama: Fungsional, ABAPer, dan Basis. Fungsional bertugas mengidentifikasi requirement user dan menuliskan Functional Specification yang selanjutnya akan diterjemahkan menjadi baris-baris kode pemrograman ABAP oleh ABAPer. Hasil kode ABAP kemudian diuji oleh fungsional, jika telah sesuai, maka program yang dikembangkan ABAPer tadi di-transport ke Production system oleh Basis. Basis juga melakukan instalasi SAP dan Database Management System.

Nah, pertanyaan berlanjut, apa itu Production system?

Dalam suatu sistem SAP, biasanya terdapat beberapa client yang ditunjukkan oleh bilangan unik sepanjang tiga digit. Client ini menentukan ke subsistem mana seorang user akan masuk. Pada umumnya, terdapat tiga subsistem pada instalasi SAP, yakni development system, QA & test system, serta production system. Seorang user akan login ke Production System untuk melakukan tugas hariannya.  Adanya mekanisme client ini mencegah adanya perubahan data atau hilangnya data penting dari database ketika aplikasi ABAP dikembangkan.  Perubahan data hanya dilakukan melalui aplikasi yang benar-benar teruji ‘sahih’ dan telah ter-transport ke production system.

Personal Opinion

Bagi saya sendiri  aplikasi bahasa pemrograman SAP cukup sempit, hanya di lingkungan korporat skala menengah ke atas. Lantas, apa menariknya SAP? Mungkin reward. Keahlian di SAP menjanjikan keuntungan finansial yang cukup besar. Saya pernah bertemu dengan seorang Fungsional yang telah berkutat di SAP selama 12 tahun, dan pendapatannya ketika beliau terjun dalam projek pengembangan SAP di atas 5000 USD per bulan!

Meskipun demikian, dengan berbagai pertimbangan, kemarin saya memutuskan untuk berhenti dari ABAPer.  Mungkin di lain waktu akan saya coba uraikan alasannya. Oh iya, ABAP menduduki urutan ke-16 dalam urutan bahasa pemrograman versi TIOBE programming index. *belummandidansarapan*

(Unofficial) Daluang Manual

Daluang adalah salah satu aplikasi open source yang digunakan untuk membaca Wikipedia secara offline. Aplikasi yang dikembangkan oleh Fajran Iman Rusadi ini telah dipaketkan dalam distro Linux BlankOn. Salah satu keunggulan Daluang dibandingkan aplikasi pembaca Wikipedia secara offline lainnya adalah kompresi bz2 yang membuat file offline databasenya berukuran lebih kecil. Kekurangannya, Daluang masih tersedia hanya untuk sistem operasi linux dan belum mendukung tampilan template (CMIIW).

Tulisan ini merupakan panduan non resmi untuk melakukan instalasi Daluang. Daluang dapat diunduh disini. Sebelum melakukan instalasi, pastikan anda telah menginstall firefox, python-gtk2, python-glade2, python-gnome2-extras, dan python-mako.

Instalasi Daluang

Setelah mengunduh Daluang, ekstrak aplikasi ke dalam folder home di direktori linux anda, misalnya /home/[nama_user]/Apps/daluang/, kemudian masuk ke dalam direktori /bin, ubah file daluang dalam direktori /bin tadi, dengan menyesuikan variabel PYTHONPATH sesuai dengan direktori /lib/python anda, misalnya:

#!/bin/sh

export MOZILLA_FIVE_HOME=/usr/lib/firefox

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/firefox

export PYTHONPATH=/home/fathoni/Apps/daluang/lib/python

./daluang-browser-bin

selanjutnya, ubah juga file daluang.conf, dengan base sesuai direktori /share/daluang anda, misalnya:

[daluang]

base=/home/fathoni/Apps/daluang/share/daluang

setelah selesai, simpan kedua file tersebut.

 

Memperoleh Artikel Wikipedia untuk Digunakan Secara Offline

Artikel-artikel di Wikipedia disediakan untuk diunduh secara sekaligus dalam file format xml terkompresi (*.bz2). File ini disebut dengan XML database dump, dan dapat diunduh disini dalam berbagai bahasa. Biasanya, XML database dump ini memiliki format nama file seperti [kode_bahasa]wiki-[tanggal]-pages-articles.xml.bz2. Untuk Bahasa Indonesia, namanya seperti ini: idwiki-YYYYMMDD-pages-articles.xml.bz2, dengan YYYY menyatakan tahun, MM menyatakan bulan, dan DD menyatakan tanggal XML Dump tersebut dibuat.

Setelah mengunduh XML database dump wikipedia, anda perlu mengubah dari format XML ke dalam format yang bisa dibaca oleh daluang. Untuk mengubah format ini, anda dapat menjalankan perintah sebagai berikut dari terminal:

$ ./daluang-util convert “[Nama Bahasa]” “Kode_bahasa” [nama_file_xml_dump], contoh:

$ ./daluang-util convert “Bahasa Indonesia” “id” idwiki-20080213-pages-articles.xml.bz2

Hasil konversi ini berupa file [nama_file_xml_dump].data. Untuk menggunakannya, letakkan file ini ke dalam direktori /share/daluang/data

 

Menjalankan Daluang

Daluang dapat dijalankan melalui terminal dengan masuk ke dalam direktori /bin (dalam contoh ini berada pada /home/fathoni/Apps/daluang/bin ), kemudian, jalankan:

$ ./daluang

Jika konfigurasi yang telah anda lakukan benar, anda akan melihat semacam browser yang memperlihatkan pilihan bahasa yang telah tersedia, dan setelah memilih bahasa yang anda inginkan, anda dapat melakukan pencarian artikel, hingga menjelajahi artikel yang sudah ada.

 

daluang screenshot
daluang screenshot

 

 

Kesalahan yang Sering Terjadi

Traceback (most recent call last):

File “./daluang-browser-bin”, line 8, in <module>

from daluang import Config, server

ImportError: No module named daluang

Konfigurasi PYTHONPATH dalam file daluang di direktori /bin masih belum sesuai. Sesuaikan kembali dengan direktori /lib/python daluang anda.