Building PROJ.4 Library in Windows

First thing to do is to make sure all libraries are there. This is actually part of pre-application puzzle challenge. But then, the libraries are already in the github repo. This time, I would like to build it myself. just in case there will be another release during this project. I will only cover building under windows.

Using Visual Studio 2010
PROJ.4 usually come with autotools (autoconf and automake) but for VS, PROJ.4 comes with custom makefile (although no solution or VS project file). In order to build this library using visual studio, one can follow these steps:

  1. run cmd.exe as Administrator (this is important since my OS is 64-bit, otherwise it will generate errors with the debug informations)
  2. execute vcvars32.bat from visual studio directory (in my case it’s in VC\bin\vcvars32.bat)
  3. execute “nmake /f makefile.vc”
  4. if you want to install it then execute “nmake /f makefile.vc install-all”. It will then create a PROJ directory at C:\

Using MinGW/MSYS
I tried to build PROJ.4 by calling sh.exe from cmd but it was not seems to work and then I had to run from msys shell (by running msys.bat). BTW, I use latest MinGW distribution (using mingw-get). I guess these steps are similar with the steps to build a package in linux-based systems.

  1. open msys shell
  2. execute “./configure” from proj-x.y.z directory
  3. execute “./make”
  4. execute “./make install”

Notes
The whole building process is faster when using VS than MinGW even when configuring time is ignored. There is an issue though. At first, I was using “mingw32-make” command in which the build cannot be done. When i checked, the version of ‘mingw32-make’ is different with ‘make’. mingw32-make was mapped to later version (3.82.90 i686-pc-mingw32) while ‘make’ command was mapped to earlier version (3.81 i686-pc-msys).

Google Summer of Code 2013: Hello world!

Hello world! This is my first post about GSoC. I usually write post to this blog using Indonesian language so people who are from Indonesia can easily understand and also to contribute to probably technical corpora which is written in Indonesian. For the next posts that will be using gsoc2013 tag also will be written in English.

Now, a little bit of background won’t hurt.
This is my first experience in Google Summer of Code, applying and being accepted. My last status as student was 2010 which is almost three years ago. Now that I am back as student, I am eligible to apply as participant. Yay!

The project I am working on is under the organization of Computational Science and Engineering of Vienna University of Technology. Altough I am also a student in TU Wien, The Mentors are from different institute. My Mentors are from Department of Geodesy and Geoinformation. The project itself is implementing transformation algorithm for vertical datums. For me, this is something that is quite new. I did projects using spatial data before, but the inner working of the knowledge behind that was actually done by another person which background is geodesy. Well, the availability of libraries like PROJ.4, GDAL/OGR really helped me a lot back then. That’s why I thought this might be the way I can contribute back.
Read More

Converting XML Schema to OWL in Python

Beberapa minggu terakhir saya dapat mainan baru setelah bermain-main dengan scraping (ini bukannya serius belajar malah main-main terus). Persoalannya adalah mengonversi skema data dari bentuk XML Schema ke Ontologi (dalam OWL). XML Schema adalah dokumen XML yang berisi spesifikasi komposisi sebuah dokumen XML.

XML Schema
Pada dasarnya dokumen XML Schema berisi tag-tag “element” yang mengacu pada tag di dokumen yang dispesifikasikan. Untuk mempermudah spesifikasi, jenis dari element ini dibagi menjadi dua tipe yaitu simpleType dan complexType. simpleType adalah tag yang hanya berisi data (numerik/string) sedangkan complexType adalah tipe tag yang memiliki paling tidak atribut tag atau child tag (tag di dalam tag). Komposisi tag di dalam tag dapat berupa komposisi sederhana seperti simpleType tapi memiliki atribut, hanya berisi tag, atau berisi campuran antara teks dengan tag (seperti pada tag body dalam HTML). simpleType dan complexType dapat dideklarasikan tersendiri dan diberi nama. Untuk alasan reusability, maka type dibuat memiliki sifat inheritance dan polymorphism. yaitu suatu tipe dapat dideklarasikan sebagai turunan dari tipe lain yang lalu dispesialisasi/dibatasi atau diperluas.

Web Ontology Language (OWL)
Ontologi merupakan deskripsi formal pengetahuan tentang konsep2 dan hubungan antar konsep. Pada kasus pendefinisian skema basis data, hal yang biasanya dilakukan adalah membuat representasi konseptual (conceptual data model) dari pengetahuan yang dimiliki oleh pengembang sistem. Adanya formalisasi pengetahuan dalam bentuk ontologi bertujuan agar mesin juga dapat ‘mengerti’ sehingga proses integrasi data dapat berlangsung secara otomatis.

Sekian dulu bahasan abstraknya, selanjutnya adalah bagaimana menyelesaikan persoaln konversi XML Schema ke OWL. Sayangnya saya tidak menemukan ada tool konversi yang ditulis dalam python sehingga saya membuat dari awal. Saya menggunakan dua pustaka pembantu yaitu lxml untuk mengurai data dari dokumen XML dan RDFLib untuk membangkitkan ontologi. Sayangnya RDFLib belum memiliki serializer untuk OWL sehingga saya tidak bisa menggunakan format OWL (XML) sebagai keluaran dan sebagai gantinya saya menggunakan format Turtle yang sepertinya juga lebih mudah dibaca oleh manusia.

Sebetulnya makalah yang berisi cara melakukan konversi ini lumayan banyak jadi saya pakai yang paling banyak dikutip dan posisi teratas dari pencarian di google scholar saja:

Bohring, Hannes, and Sören Auer. “Mapping xml to owl ontologies.” Leipziger Informatik-Tage 72 (2005): 147-156.

Read More

Web scraping dengan Python : cuaca kota Wina

Ketika saya masih di Indonesia, Saya jarang sekali memeriksa temperatur udara. Setelah sampai Wina jadi sering memeriksa temperatur karena penasaran dengan temperatur yang terukur di cuaca musim semi tetapi terasa masih dingin dan masih bersalju. Kebetulan akhir-akhir ini sedang sering bermain dengan scraping (ekstraksi data dari dokumen web), akhirnya pada suatu malam sebelum tidur saya iseng membuat skrip untuk mendapat cuaca saat ini di kota Wina.

Saya menggunakan library beautifulsoup untuk mengurai isi dokumen HTML yang kemudian bisa diekstrak bagian tertentu (dalam hal ini adalah elemen DIV yang mencakup data temperatur). Elemen ini diketahui dari mengaktifkan panel “Inspect Element” di peramban Google Chrome (atau bisa juga dengan menampilkan kode sumber dari halaman aktif di peramban lain).

from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup as BS

temps = [float(tag.string.replace(u"\xb0", '')) for tag in BS(urlopen("http://www.wetter.at/wetter/oesterreich/wien").read()).findAll("div", {"class": "temp"})]
if len(temps)>0: print "%0.2f C" % (sum(temps)/len(temps))

Data temperatur yang diberikan halaman tersebut merupakan data pengukuran temperatur di beberapa distrik kota. Karena saya hanya perlu tahu satu data saja sebagai gambaran umum temperatur kota maka saya menghitung rata-rata dari data tersebut.

Oya, tulisan ini juga sekalian untuk mencoba aggregator blog dari komunitas Python Indonesia. tampil tidak yaa..? tampil tidak yaa…?

7 Habits of Highly Disruptive People

*sedang ikut pelatihan 7 Habits of Highly Effective People yang diselenggarakan oleh kampus untuk para dosen trus iseng bikin improvisasi untuk topik lain*

Habit 1: Be Provocative
Habit 2: Begin with bending the mind
Habit 3: Put first traps’ first
Habit 4: Think Lean and Mean
Habit 5: Seek first to be concealed, and then to conquer
Habit 6: Make surprise!
Habit 7: Tighten the claw

Poisson Image Editing (revised)

Tulisan ini melengkapi tulisan sebelumnya yang berjudul serupa. Waktu itu hasilnya masih kurang memuaskan dan sepertinya implementasinya masih ada yang salah. Akhirnya saya coba membuat implementasi ulang dengan Delphi, mulai dari pendefinisian persoalannya pada ruang berdimensi 1 secara diskret.

Sederhananya, misalkan Saya punya fungsi 1D yang terdefinisi oleh nilai di posisi awal f(a) dan akhir f(b) sementara nilai diantara selang (a,b) tidak diketahui. Kalau saya berasumsi bahwa turunan keduanya adalah konstan 0, maka interpolasi yang dibuat antara titik a dan b adalah sebuah garis lurus seperti gambar berikut.

interpolasi dengan turunan kedua = 0

interpolasi dengan turunan kedua = 0


Kalau fungsi turunan keduanya saya buat konstan positif atau negatif maka interpolasinya akan menjadi melengkung.

interpolasi dengan turunan kedua konstan positif ( = 2 )

interpolasi dengan turunan kedua konstan negatif ( = -2 )

Ide dari poisson image editing adalah dengan menggunakan informasi dari turunan kedua citra sumber untuk mengarahkan interpolasi ini pada citra tujuan.

interpolasi dengan turunan kedua pengarah berasal dari turunan kedua fungsi lain

Read More

Local Binary Pattern with NumPy

Dulu saya pernah menulis tentang menghitung fitur LBP (Local Binary Pattern) menggunakan OpenCV di python. Waktu itu interface opencv yang digunakan masih OpenCV 2.1 . Saya juga sempat membahas bagaimana mempercepat perhitungan LBP tersebut dengan kode inline C++ menggunakan scipy.weave. Kemarin saya penasaran, bagaimana caranya mempercepat operasi tersebut tanpa menggunakan inline code (yang membuat ada penundaan di awal karena harus melakukan kompilasi dan import native extension) dan hanya menggunakan apa yang tersedia di numpy (di versi-versi terakhir, python OpenCV menggunakan numpy array sebagai representasi citra).

Setelah mencari dokumentasi dari numpy, Akhirnya ketemu dua cara. Cara yang pertama masih lebih lambat (200-300ms) sedangkan cara kedua ternyata cukup cepat (100-150ms). Pada dasarnya adalah melakukan pengurangan menggunakan operator broadcast terhadap seluruh elemen array dengan pengurangnya adalah array tersebut yang digeser sesuai dengan posisi 8 tetangga tiap piksel sehingga total array yang perlu dibuat adalah 8 array. Dalam praktiknya, array tersebut dibuat dengan cara melakukan slicing.

Read More