Art of Programming
Just like “machine learning”, learning from different data and the machine will get the essential pattern(s) among the data. So, by experiencing various programming languages, different software libraries, and different frameworks, allows me to grow in my programming skills, and strengthen my philosophy of programming.
Programming is a combination of science and art. As science, the code can be replicated, experimented, and always produces same result. As art, the source code can be written according to an individual’s thinking, expression, and emotions.
Yet Another Brick Game
Finally, I wrote my first game, Tetris game engine.
The interface is simple, not attractive. And people will not like it. Yet, my philosophy is simple: Everything from the beginning. Unless we go to primary school, we cannot go to secondary school. Unless I know how to write a game of 1980s, it is not very worthy for me to write 3D modern games, because I will have no fundamental knowledge.
Greasemonkey Userscripts
I have wrote several userscripts, currently related to comic websites. Visit here to get my userscripts.
About Prayer Clock
Introduction
Prayer Clock is a simple application to remind a user to say a certain prayer at a certain time. Prayer Clock also shows the prayers to the user so that the user can read the prayers from the application.
Background
Frequently, I use a computer for the whole day. For my good health, I would like to rest for a while. During the moment of resting, for my spiritual health, I would like to say a prayer. Catholics have a prayer, called “Angelus”, which we will recite at 6 am, 12 pm, and 6 pm, three times a day. Besides that, Angelus will be replaced by Regina Caeli during Eastertide (Easter Season). In addition, there is a 3 O’clock Prayer in devotion to the Divine Mercy, which will be recited at 3 pm.
JPrayer Clock
JPrayer Clock is Java version of Prayer Clock. Please read the details in Prayer Clock. I re-write the application in Java because I want to migrate Windows OS to Linux OS. So, Java application might reduce the compilation problem, since it is WORA (Write once run anywhere). But currently, JPrayer Clock is developed in Windows, it is not yet tested in Linux.
The source code of JPrayer Clock is now available.
Prayer Clock
Written by using C and C++, depends on GTK+ and Expat. I spent about 3 days to study GTK+ and Expat since never used them before. I wrote this application because sometimes, I want to say a prayer, especially Angelus. But I need the prayer to read and also a reminder. So, I decided to wrote this program, at the same time I can also learn about GTK+ and Expat. And I decided to open source it as a contribution to Catholics.
MinGW/MSYS and Libraries
Since I am moving from Microsoft Visual C++ to MinGW/MSYS, I would like to record down what are the libraries installed in my MSYS.
The following libraries are successfully compiled and installed in MSYS with MinGW:
- GLEW
- OpenSceneGraph
- Cal3D (using g++-3.4.5)
- osgCal2
- SDL
- FreeGLUT
- DevIL
- libpng
- zlib
- libjpeg
- libtiff
- libxml2
- FFmpeg
- Theora
- libogg
- libvorbis
- FreeType
- FreeImage
- Boost
- COLLADA DOM (using g++-3.4.5)
- minizip
- CppUnit (using g++-3.4.5)
- Expat
- cURL
- PCRE (using g++-3.4.5)
- CEGUI
- POCO C++ Libraries
- OpenCV (using tdm-gcc)
The following libraries are pre-compiled and used by MSYS with MinGW:
Profile
The followings are the programming languages and technologies I am familiar and favoured with.
Programming languages
C, C++, Java, Python, PHP, C# (using mono), Perl.
Web development technologies
Javascript, HTML, XmlHttpRequest (AJAX), CSS, Greasemonkey (userscript), MySQL, Apache.
Frameworks: TinyMCE, CodeIgniter, Blueprint, jQuery.
Serialization format
XML, JSON, YAML.
Libraries
3D: FreeGLUT, Ogre, OpenSceneGraph, OpenGL.
Audio: Audiere, OpenAL, GStreamer.
Others: GTK+, Expat, SDL, Boost, TinyXML.
Utilities
GNU: bash, autoconf, automake, gcc (including MinGW/MSYS and Cygwin), gdb.
Windows: NSIS.
Debian-based: dpkg.
Arch Linux: PKGBUILD.
Previously used, but not favoured
Windows application development: DirectShow (replaced by GStreamer), Win32 API (replaced by GTK+), Visual C++ Express with Windows SDK (replaced by gcc).
Programming
A group of related variables, will become a data structure. Several related statements (or algorithms) will become a function. A function, can be a command (command-line). Combining data structure and algorithm, will become a program. Yet, combining related variables and functions, will also become an object. The variables are attributes, and the functions are methods. A group of related objects, will become a package, which uses namespace.
Data structure is most important, but algorithm cannot be neglected. Everything we are dealing in programming, is input and output. Thus, data will be conveyed as input and output. However, the process of conveying the data, is the algorithm. Hence, algorithm is depending on the data structure. Algorithm can also be assumed as data structure, if it is distributed as source code.