Tuesday, August 30, 2011

Idul Fitri, Astronomi dan Navigasi

Untuk sesaat mari kita kesampingkan masalah penentuan 1 Syawal tahun ini dan merunut kembali pendekatan "logis" perhitungan penanggalan Hijriyah dan sejarahnya. Penanggalan Hijriyah adalah "lunar calendar". Artinya penanggalan berdasarkan posisi bulan terhadap pengamat di bumi. Mengapa bulan diambil sebagai patokan perhitungan waktu? Alasannya sederhana, karena posisi bulan relatif mudah di amati dan presisi pengamatan yang cukup akurat sekalipun tidak menggunakan alat bantu. Hal tersebut adalah salah satu alasan peradaban masa lalu menggunakan bulan sebagai patokan. Selain itu, efek dari posisi bulan dapat diamati secara tidak langsung melalui pasang-surut air laut di daerah pesisir.

Penanggalan pada dasarnya adalah pengamatan benda langit, jadi subjek ini merupakan bagian dari ilmu astronomi. Astronomi dapat kita temui pada peradaban masa lalu karena penentuan waktu (penanggalan) merupakan bagian yang penting dari sebuah peradaban. Untuk menentukan hari2 yang penting dan hal-hal lain yang bersifat ritual, penanggalan sangat penting. Hal itu menyebabkan ilmu astronomi selalu berkembang di tempat-tempat dengan peradaban maju.

Kegunaan lain dari ilmu astronomi adalah dalam hal navigasi. Terutama navigasi di laut. Bintang-bintang tertentu mempunyai posisi yang berubah terhadap horizon tergantung posisi kita di bumi (posisi terhadap garis lintang dan bujur). Misalnya, posisi bintang "Polaris" bergerak mendekati horizon jika kita bergerak dari belahan bumi utara ke arah equator. Selain itu, pengamatan terhadap bulan dapat menjadi alat bantu perhitungan waktu untuk kapal-kapal yang berada di laut pada malam hari.

Sekarang, apa hubungan antara astronomi, navigasi dan idul fitri? Hubungannya ada pada pengukuran yang akurat terhadap posisi benda langit terhadap horizon. Salah satu alat (tanpa mekanisme digital dan bantuan satelit) yang paling akurat dalam menentukan posisi benda langit terhadap horizon adalah sextant (http://en.wikipedia.org/wiki/Sextant). Sextant adalah alat navigasi yang ditemukan pada abad ke-18 (http://www.mat.uc.pt/~helios/Mestre/Novemb00/H61iflan.htm).Alat ini digunakan untuk pengamatan benda langit dengan akurat untuk membantu navigasi di masa lalu sebelum GPS ditemukan dan saat ini digunakan sebagai back-up untuk navigasi global sebab tidak membutuhkan suplai listrik dan tetap berfungsi jika satelit GPS mati/tidak dapat dihubungi.

Sextant dapat mengukur posisi benda langit terhadap horizon dengan akurat. Sehingga selain untuk navigasi, sextant juga dapat digunakan untuk membantu perhitungan penanggalan. Jika langit dalam keadaan mendung, sextant dapat melakukan pengukuran dengan menggunakan "artificial" horizon yang "built-in" pada alat tersebut.

Penentuan hilal pada penanggalan Hijriyah, adalah penentuan posisi bulan terhadap horizon (CMIIW). Di luar dari kontroversi berapa derajat kah yang "valid" (government-ego excluded), sextant dapat digunakan jika seandainya kita berada di tengah laut pada saat mendekati idul fitri untuk membuat keputusan sendiri di luar dari pengaruh pemerintah. he..he..he..



Selamat Idul Fitri :-)

Sunday, August 28, 2011

How to use Google Patent search

Google patent search (http://www.google.com/patents) is a very valuable search tool. Sometimes it helps reverse engineering task.

I found this method particularly useful:

1. Search based on the specific subject. It doesn't matter if the patent application document that you found is not yet correct because usually patents covering stuff in a very specific subject refers to each other by patent numbers. For example patent A refers to patent B through patent B's number.

2. From the patent B's number found in step 1, search your intended patent application. The patent number format is: YEAR/PATENT_NUMBER. For example patent number 207272 in year 2008 would be: 2008/0207272. Now, to search this patent, use the patent number (minus the slash), i.e. 20080207272 in google patent search.

That's it you're good to go.

Monday, August 15, 2011

Microsoft VC++, C99 Standard and __func__ Macro


Apparently, even VC++ 2010 included in Visual Studio 2010 still adheres only to part of the C99 standard. This is really irritating because you have to define different macros if you are debugging your function with the C99 __func__ "predefined" macro.



The list of supported ANSI macros in Visual Studio 2010 can be found at http://msdn.microsoft.com/en-us/library/b0084kay%28v=VS.100%29.aspx.
You will see that in the aforementioned link, Visual Studio 2010 provide an M$-specific macro, i.e. __FUNCTION__ if you want to refer to the current function name in your routine inside that function. It doesn't provide the C99-sanctioned __func__ macro. This would lead to failure during compilation if you try to use the __func__ macro in your code.


On the other hand, GCC supports C99 standard, at least in this particular case (__func__ macro), as shown here.

Saturday, August 13, 2011

IDA Pro GUI Plugin "Trivial" Bug


If you are using IDA Pro (probably version > 5.4) plugin template to develop a GUI-based plugin, you'll probably encounter this bug: The GUI of the plugin suddenly vanish after the plugin activated (run() function invoked)


This "trivial" bug manifests if you don't change the default value of the plugin flags in the plugin_t structure.
The default value for the plugin flags is PLUGIN_UNL which means: Unload the plugin immediately after calling 'run'. This flag may be set anytime. The kernel checks it after each call to 'run'. The main purpose of this flag is to ease the debugging of new plugins.. This explanation comes from loader.hpp. Now, to avoid the "suddenly vanishing GUI" bug,
you should change the plugin flag to suit your need. For example:



...
//--------------------------------------------------------------------------
//
// PLUGIN DESCRIPTION BLOCK
//
//--------------------------------------------------------------------------
plugin_t PLUGIN =
{
IDP_INTERFACE_VERSION,
PLUGIN_DRAW, // plugin flags

init, // initialize

term, // terminate. this pointer may be NULL.

run, // invoke plugin

comment, // long comment about the plugin
// it could appear in the status line
// or as a hint

help, // multiline help about the plugin

wanted_name, // the preferred short name of the plugin
wanted_hotkey // the preferred hotkey to run the plugin
};
...



The PLUGIN_DRAW flag means:



...
#define PLUGIN_DRAW 0x0002 // IDA should redraw everything after calling
// the plugin
...