Wednesday, August 15, 2012

Setup Eclipse C++ and OpenGL support on Ubuntu Linux

Currently I am using Ubuntu 12.04 and Eclipse Version 3.7.2. I am trying to write little note how to setup Ubuntu Linux and Eclipse C++ for developing openGL purpose.

We usually use Glut, FreeGlut and Mesa for developing openGL in Linux  system. We need to get update from Ubuntu repository before installing openGL development resource and then second step install the openGL library.
sudo apt-get update
sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
After resource got installed, we need to setup Eclipse IDE, Eclipse can be done by install from Ubuntu repository with CDT Support.
sudo apt-get install eclipse eclipse-cdt eclipse-cdt-jni
After all tools installed, now it's time to start setup Eclipse IDE and then after Eclipse started, we need to create new C++ project using menu File->New->C++ Project or using key shortcut Shift+Alt+N.


Select Empty Project and Cross GCC then give project name to whatever, in this case I use "opengl_glut" as project name. Then select finish button to completed creating project.

Before start create code, we need to add some linker option, so when linker process the library can be found by linker program. To add glut library on the linker process can be complete by using rigth click on the opengl_glut project then select properties.


Choose C/C++ Build Section, select Setting then select Libraries on C++ Linker section. Add "glut" and "GLU" library on the project then select Ok Button to apply changes.

Now we can start openGL code, create main.cpp by right click on the opengl_glut project and select New->File then give File Name as entry point "main.cpp". Add this code to main.cpp to check if our Eclipse setting is correct:


#include <GL/glut.h>
#define window_width  640
#define window_height 480
// Main loop
void main_loop_function() {
    // Z angle
    static float angle;
    // Clear color (screen)
    // And depth (used internally to block obstructed objects)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    // Load identity matrix
    glLoadIdentity();
    // Multiply in translation matrix
    glTranslatef(0, 0, -10);
    // Multiply in rotation matrix
    glRotatef(angle, 0, 0, 1);
    // Render colored quad
    glBegin(GL_QUADS);
    glColor3ub(255, 000, 000);
    glVertex2f(-1, 1);
    glColor3ub(000, 255, 000);
    glVertex2f(1, 1);
    glColor3ub(000, 000, 255);
    glVertex2f(1, -1);
    glColor3ub(255, 255, 000);
    glVertex2f(-1, -1);
    glEnd();
    // Swap buffers (color buffers, makes previous render visible)
    glutSwapBuffers();
    // Increase angle to rotate
    angle += 0.25;
}
// Initialze OpenGL perspective matrix
void GL_Setup(int width, int height) {
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glEnable(GL_DEPTH_TEST);
    gluPerspective(45, (float) width / height, .1, 100);
    glMatrixMode(GL_MODELVIEW);
}
// Initialize GLUT and start main loop
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(window_width, window_height);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutCreateWindow("GLUT Example!!!");
    glutIdleFunc(main_loop_function);
    GL_Setup(window_width, window_height);
    glutMainLoop();
}


Build the code by right click on the opengl_glut then select Build Project menu, this should compile without any error. Then select menu Run->Run or using shortcut Ctrl+F11. If no error, the sample should become to be like this...then we completed all setting setup step for openGL development environment using Eclipse in Ubuntu Linux system.


Sunday, August 12, 2012

Rootbeer, akses GPU menggunakan Java

GPU processing selalu identik dengan bahasa yang rumit seperti C++, C dan assembly, karena memasukkan data ke GPU memerlukan akses ke level hardware pipeline. Sekarang semua itu bisa dilakukan dengan menggunakan Java, ya benar sekali Rootbeer memudahkan programmer untuk mengontrol GPU menggunakan Java.
Rootbeer Pertamakali diperkenalkan pada konferensi HPCC (High Performance Computer Communication) 2012 oleh Philip C. Pratt-Szeliga, James W. Fawcett, Roy D. Welch dengan judul presentasi "Rootbeer: Seamlessly using GPUs from Java". Beberapa hal yang dipaparkan dalam konferensi adalah:
  • Dengan menggunakan Rootbeer developer dapat mengakses GPU secara langsung
  • Rootbeer tidak sekedar Java binding biasa, tetapi lebih dari itu
  • Hampir semua program yang dibuat dalam Java, prosessnya bisa dimasukkan kedalam GPU
  • Dengan menggunakan Rootbeer, kernel dapat dibuat dengan menggunakan Java sehingga serialize secara otomatis.
 RootBeer Quote:
 The Rootbeer GPU Compiler makes it easy to use Graphics Processing Units from within Java.

Rootbeer is more advanced that CUDA or OpenCL Java Language Bindings. With bindings the developer must serialize complex graphs of objects into arrays of primitive types. With Rootbeer this is done automatically. Also with language bindings, the developer must write the GPU kernel in CUDA or OpenCL. With Rootbeer a static analysis of the Java Bytecode is done (using Soot) and CUDA code is  automatically generated.
Karena masih dalam tahap pengembangan ada beberapa fitur bawaan Java yang belum bekerja di Rootbeer, diantaranya:
  • Reflection
  • Native Methods
  • Sleeping inside Monitor
  • Garbage Collection (Future Work)
Source Rootbeer tersedia di github, bisa diambil dari link berikut https://github.com/pcpratts/rootbeer1

Saturday, August 11, 2012

Akhirnya QT diakuisisi oleh Digia

Setelah beberapa tahun berada di bawah Nokia akhirnya QT resmi diakusisi oleh Digia. Digia merupakan perusahaan pengembang software dari Finlandia tepatnya berada di kota Helsinki yang merupakan ibukota dari Finlandia,  penandatanganan kontrak dilakukan pada tanggal 9 Agustus lalu. Dari berita yang didapat menyatakan bahwa QT akan dikembangkan dan akan mensupport Android, IOS dan Windows 8.
Dengan adanya akusisi ini menandakan bahwa ada era baru untuk QT bisa berkembang lebih baik jika dibandingkan saat berada dibawah Nokia.

Detail dari berita akusisi QT oleh Digia dapat dilihat di situs resmi Digia http://www.digia.com/en/Home/Company/News/Digia-to-acquire-Qt-from-Nokia/

“We are looking forward to welcoming the Qt team to Digia. By adding this world class organization to our existing team we plan to build the next generation leading cross-platform development environment.” said Tommi Laitinen, SVP, International Products, Digia. “Now is a good time for everyone to revisit their perception of Qt. Digia’s targeted R&D investments will bring back focus on Qt’s desktop and embedded platform support, while widening the support for mobile operating systems.”

"Nokia is proud of the contributions we've made to Qt over the past four years. We are pleased that we've been able to work with Digia to secure continued development of Qt by the current core team," said Sebastian Nyström, head of Nokia Strategy. "Digia's plans to acquire Qt mean that it can continue as a successful open source project and also offer continuing employment for many people in the community."

Sebuah Keinginan dan Tekad


Aku ingin menjadi dokter, keluar dari mulut seorang anak yang masih polos dengan mata yang berbinar disambut dengan doa dari kedua orang tua yang selalu menyayanginya. Tetapi seiring dengan tumbuhnya kedewasaan dan pengaruh lingkungan serta interaksi sosial akan sangat mempengaruhi impian dan keinginan seseorang, yang dulunya bercita cita jadi dokter bisa saja tumbuh dan akhirnya tidak menjadi dokter tetapi menjadi sosok lain yang berbeda. Karena seseorang pasti tau mana profesi yang cocok dan tepat untuk dirinya karena yang mampu mengukur dari kemampuan seseorang hanyalah dirinya sendiri.
Keinginan? Tekad? inilah yang menjadi kunci sukses dari seseorang, seseorang yang mempunyai keinginan harus mempunyai tekad yang kuat sebagai sarana pendukung untuk meraih apa yang dia inginkan, karena keinginan dan tekad adalah satu paket yang tidak bisa dipisahkan. Keinginan tanpa tekad hanya menghasilkan seorang pemimpi yang hanya bisa berandai andai sebaliknya tekad tanpa keinginan hanya akan membuat orang lepas kendali menjalani hidup tanpa tujuan.
Orang yang mempunyai keinginan dan tekad pasti mengahasilkan sesuatu yang wah dan bermanfaat bagi banyak orang banyak karena dalam mencapai keinginannya tidak hanya berfokus pada hal hal yang bersifat pribadi tetapi juga peka terhadap lingkungan sekitar dan sanggup berubah menjadi lebih baik dengan merubah kritik kritik dari luar menjadi sebuah motivasi yang baru sehingga memperkuat tekad untuk mencapai keinginan menjadi lebih baik. Ambil contoh dari dalam negeri bagaimana sejarah Maspion hingga menjadi perusahaan yang besar, sedang dari luar Negeri siapa yang tidak kenal dengan Microsoft, Google, Apple, Facebook, Pixar, Red Hat, Linux Foundation, GNU Foundation dan masih banyak lagi contoh yang itu semua dimulai dari sebuah keinginan dan tekad yang kuat.
Siap yang tidak mau sukses? siapa yang tidak mau kaya? siapa yang tidak mau hidup nyaman dan aman? semua orang menginginkan itu dan memimpikan semua itu tetapi mimpi saja tidak cukup harus dibarengi dengan tekad yang kuat tanpa mengenal lelah dan yang paling penting adalah doa yang tulus dan sungguh sungguh disaat dalam kondisi yang baik maupun buruk.

karena aku juga ingin sukses, kaya, bermanfaat untuk orang lain dan juga hidup nyaman dan tentram

Wednesday, August 8, 2012

Unified Extensible Firmware Interface


Unified Extensible Firmware Interface atau sering disebut UEFI adalah merupakan sebuah standard spesifikasi yang berupa software untuk menjembatani antara operating system dengan platform firmware. UEFI dibuat untuk meggantikan interface BIOS firmware, dan sampai saat ini semua IBM PC Personal Computer sudah mensuport teknologi ini dan hampir semua UEFI sudah mensuport untuk berinteraksi dengan BIOS. Dengan menggunakan ini memungkinkan untuk melakukan diagnosa dan memperbaiki sistem dengan cara remote dengan atau tanpa sistem operasi terpasang pada Computer.

Awal mula pengembangan EFI adalah Intel,  dan pada tahun 2005 UEFI sudah deprecated dan lahirlah EFI 1.10 kemudian standar spesifikasi UEFI saat ini di kembangkan oleh Unified EFI Forum.

EFI merupakan varian kedua dari UEFI untuk menggantikan legacy BIOS di PC Itanium, x86 dan x86_64. EFI sudah tersedia dan tertanam pada motherboard model terbaru beberapa diantaranya adalah ASUS "UEFI BIOS", MSI "CLICK BIOS", Gigabyte "HybridEFI" dan masih banyak lagi yang lain. Dengan menggunakan EFI dapat mensuport storage dengan kapasitas yang lebih besar dari 2.2TB yang merupakan batas batasan dari sebuah BIOS.

Saturday, August 4, 2012

Necessitas, QT + Android NDK

Necessitas adalah project komunitas yang di prakarsai oleh BogDan Vatra, project ini bertujuan untuk membuat sistem framework pengembangan aplikasi mobile yang telah mendunia.

Qt framework adalah salah satu framework development multi platfrom, kompit, matang dan sangat bagus dan itu semua sudah menjadi satu paket, Qt sendiri bisa menhasilkan aplikasi desktop untuk beberapa operating system seperli Windows, Linux dan Mac disamping itu juga dapat digunakan untuk membuat aplikasi mobile untuk banyak platform seperti Symbian, MeeGo, Maemo, Android, IOS, BlackBerry, WebOS...etc termasuk juga mensuport untuk pengembangan di bidang embedded system. Qt adalah C++ framework, point plus jika kita bukan penggemar Java.

Android...sepertinya tidak perlu membahas panjang lebar tentang platform yang satu ini karena hampir semua orang akan tau apa itu Android :D

Necessitas berawal dari keinginan untuk mengeksploitasi kekuatan multi platform dari Qt framework di dalam dunia Android. Necessitas terlahir dari konsep kemudahan dari framework Qt untuk pengembangan multi platfrom dan Necessitas saat ini sudah sangat matang untuk digunakan sebagai framework pengembangan Android.

Siapapun boleh bertindak sebagai kontributor dalam project Necessitas, sampai saat tulisan ini dibuat pengembangan sudah sampai versi 3 update 4 alpha. Sudah ada developer yang menggunakan Necessitas untuk mengembangkan aplikasinya dan tersedia di Google Play bahkan aplikasinya ada yang sangat kompleks. Perlu diketahui juga bahwa Necessitas sudah mensuport QML dan QWidget UI tetapi tidak semua feature berjalan tetapi setiap kali ada rilis update pasti selalu ada patch untuk perbaikan feature yang masih kurang.

Berapa feature yang sudah berjalan diantaranya main Qt framework, QML, QWidget (terbatas untuk UI mobile), Qt Webkit...dan Qt Mobility juga berjalan namun belum sempurna. Qt location and Qt sensor hampir berjalan dengan sempurna, Qt multimedia dan Qt sound sedang dalam tahap penyempurnaan.

Untuk developer yang sudah pernah membuat aplikasi untuk symbian atau untuk platform lain yang menggunakan Qt framework ada baiknya klo mencoba Necessitas untuk memporting aplikasinya ke Android app tinggal recompile dan jadi (meskipun tidak semudah yang saya tuliska tapi..lebih mudah untuk memporting :D). Necessitas Cocok untuk developer yang bukan maniak Java dan ingin membuat aplikasi menggunakan Qt framework (C++)...hmmm..:D

Necessitas menggunakan Android NDK, pada dasarnya aplikasi Qt akan di compile menjadi dynamic library dan aplikasi Java wrapper akan dubuat secara otomatis untuk menjembatani dengan lingkungan Android, tidak perlu khawatir bakalan ribet soalnya semua sudah ditangani oleh Necessitas tinggal buat code terus pencet tombol deploy selibihnya akan dikerjakan oleh Necessitas SDK.

Apalagi yang ditunggu cepetan di coba!

Friday, August 3, 2012

IRRLICHT






IRRLICHT adalah platform 3D engine yang kenceng dan open source.dibawah lisensi libpng/zlib.Dibuat dengan menggunakan bahasa pemrograman C++ tetapi juga dapat menggunakan beberapa bahasa pemrograman lain yang dikembangkan oleh komunitas. Pengembangan IRRLICHT didasarkan pada dua jenis bagian rendering API yaitu DirectX ,OpenGL dan dua bagian software render. IRRLICHT didesain dengan filosofi ringan, sederhana namun tetap merupakan sebuah grafik engine yang powerfull, serta memberikan kemudahan untuk dipelajari dibandingkan dengan engine yang ada saat ini akan tetapi tidak mengorbankan kualitas dari grafik engine ini.

IRRLICHT adalah grafik engine dan bukan game engine (jadi jangan menyalah artikan sebagai game engine), dedesain dengan beberapa fasilitas yaitu simple collision detection dan user input berupa keyboard/mouse/joystick, tidak disebut sebagai game engine karena tidak dilengkapi dengan fasilitas AI ,path finding, sound (see irrKlang), networking dan fasilitas yang lain seperti yang terdapat di dalam paket game engine pada umumnya. Meskipun tidak mendukung fasilitas untuk kelengkapan segabai sebuah game engine tetapi IRRLICHT mempunyai fondasi yang kuat untuk dikembangkan sebagai sebuah game engine karena mempunya grafik render yang powerfull dan ini adalah bagian yang paling penting untuk membuat sebuah game yang berkualitas.

Berdasarkan pada lisensi yang dimiliki oleh IRRLICHT, kita bisa menggunakan source code dan memodifikasinya
You never have to release to the public any programs you make, any changes you make to the engine, or pay royalties. The engine is free to use for commercial use without debilitating restriction. Of course the community would be happy to receive any donation of code you would be willing to make
untuk lebih jelas mengenai lisensi bisa dilihat di sini (see license), yang jelas free untuk penggunaan dan dapat digunakan untuk tujuan komersial.

Untuk mendapatkan informasi yang lebih detail tentang grafik engine ini bisa dilihat disini (please visit the features page) atau mau bersabar untuk menunggu tulisan di blog ini :D

Tuesday, July 24, 2012

Need to change

Merasa bosan dengan rutinitas yang mungkin tidak sesuai dengan apa yang ku inginkan itu bikin capek. Tidak hanya capek pikiran tapi juga capek badan, aku ingin membuat sebuah perubahan dalam diriku karena aku lebih suka "main" dan ngoprek system, integrasi sistem dan embedded system.
Pengen bikin router os or whatever yang bisa berkompetisi dengan vendor besar *ngimpi mode on* dengan segala keterbatasan ini. Meski harus meluangkan sedikit waktu untuk ngerjain hobby disamping main kerjaan sekarang yang menguras banyak waktu dan pikiran, tapi bukan berarti pekerjaan sekarang tidak menyenangkan..karena aku senang bekerja dibidang ini tapi memang ada saat2 dimana ingin meluangkan waktu untuk hobby ngoprek system kernel, mainan embedded system bisa bejalan dan ga tersendat.
Tapi fokus di kerjaan itu lebih penting soalnya menyangkut siklus hidup banyak individu dan ditutut untuk bisa menhargai pendapat dan inovasi individu disekitar biar kondisi kerjaan tetep kondusif dan enjoy.
Tapi aku yakin suatu saat nanti bisa buat perubahan buat banyak orang meskipun ga secara langsung.

Wednesday, April 4, 2012

Time is always running forward

We will never know what happen in the future. What will be happen? is it friend with us or the opposite? we will never know.
But we can make different for the future, all we done will effect to the future. Both for us or for generally other people.
As I know that, hard work and pray to GOD will make all easy to done and make better thing for the future.

Saturday, March 17, 2012

PDF To Text Convertor

I am so tired today very very bored!!!, and then I want to do something bored :) so I created this little application to convert PDF to Text. I created this using Eclipse and java + pdfbox library from apache jakarta project to convert PDF to Text.


File can be download from this link contain two files, one file TTex.jar is executable jar file, will automatic run with double click if JRE installed on the computer and one file PDFTTex.rar is Eclipse project, to compile the project using eclipse need PDFBox library, can be download from this link.

Saturday, March 3, 2012

Compare image scan method

Original Image Link

In this section I will try to compare performance from some scanning method using OpenCV, the compare is about performance image scanning for manipulate per color data.

What will be compare on this section:
  • Classic C style operator scanning method
  • Iterator safe method scanning method
  • On-the-fly address calculation with reference returning scanning method
  • Use LUT() core function from OpenCV

Setup OpenCV With QT Creator

OpenCV (Open Source Computer Vision) is a library of programming functions for real time computer vision.
OpenCV is released under a BSD license, it is free for both academic and commercial use. It has C++, C, Python and soon Java interfaces running on Windows, Linux, Android and Mac. The library has >2500 optimized algorithms (see figure below). It is used around the world, has >2.5M downloads and >40K people in the user group. Uses range from interactive art, to mine inspection, stitching maps on the web on through advanced robotics.

How to install opencv? it's depend on our operating system, installation procedure can be found here http://opencv.willowgarage.com/wiki/InstallGuide.

I assume that OpenCV already installed on the computer, it's easy to integrate OpenCV lib and header to QTCreator
  • Create Empty QTCreator Project
 Open QTCreator and creaate empty QT Project File -> New File or Project


then give the project name, in this case I use OpenCV as project name.
  • Add Library OpenCV to .pro file project
 Open .pro file and add OpenCV library, in this case I use Linux as my operating system so in the .pro file will be like this


Friday, March 2, 2012

QT


Qt is a cross-platform application and UI framework for developers using C++ or QML, a CSS & JavaScript like language. Qt Creator is the supporting Qt IDE.
Qt, Qt Quick and the supporting tools are developed as an open source project governed by an inclusive meritocratic model. Qt can be used under open source (LGPL v2.1) or commercial terms.

I'm very excited with QT in few month, I' not sure why but it's new  thing for me because before using QT I use PHP, Python, Java and other C++ than QT. I found something different from QT because It's native code and cross platform. Target for me is write some example and some project related with QT in this blog, being QT developer and contributor. I like work with people around the world.
Let's rock in the code!