Business Initiative Directions‘ (BID) is currently the most important private organization presenting a Quality Award, in the same stance as the standards in Japan (Deming), USA (Baldrige), and European companies (EFQM). Established in the late 1980′s, BID has recognized global companies who are a clear cut above the rest and leaders in their fields in terms of quality, innovation and technology, for the better part of two decades.

Thus, there was a mixed sense of profound admiration and pride when I heard that 99X Technology had won the ‘Arch of Europe’ Gold Award this year for Quality and Technology, presented by BID.  It has been a great achievement and stands testament to the work done at 99X Technology.

The short Video below shows our CEO Mr. Mano Sekaram receiving the Award from BID President and CEO Jose E. Prieto, in Frankfurt, Germany.

The following content is a summary of an article I wrote for the Software Developers Journal publication in their March issue of this year, under the same title as above:

“Video and PC games are a big part of our lives today. From the text and vector graphics based games in the past, to the interactive 3D environments we immerse ourselves in today, games have come a long way as have the hardware and software platforms that host them. Today, games could be said to be cross-platform in many contexts, as the many different operating systems, hardware platforms (Xbox, Playstation etc), and web browsers are all platforms that games run on. An HTML5 game could be said to be cross platform as it can be played in a browser on a Mac, PC or Linux environment, but on a higher level it runs on top of one platform: the web. In any case, for our purposes in this article, we will define cross platform in its classical sense: Targeting multiple OS systems such as Windows, Linux or Mac.

Why would anyone want to develop cross platform games, specifically using OpenGL? One main reason for adopting a cross platform strategy would be to reach a wider audience. Startups and open source entities would benefit from this in many ways. Another aspect that is gaining momentum is the online and social gaming phenomenon that has been growing from few years back. The games that are played on browsers and mobile devices are rapidly growing in number and complexity. The 3D environments and complex functions in the traditional PC games can be seen to be morphing into the Browser and handheld devices. An interesting observation in all this is  the role that OpenGL is playing silently. OpenGL is a graphics library that interfaces with the video hardware to create the graphical elements we program it for. The majority of mobile devices in use today (including the iOS range of devices) employ a subset of OpenGL known as OpenGL ES (Embedded Systems) to run graphics, animations, and games. On the web, the latest browsers use an underlying implementation of OpenGL ES conveniently named WebGL, to use the GPU (Graphics Processing Unit) of the client machine to accelerate graphics and motion on the browser, enabling amazing 3D effects and environments.

A bit about OpenGL: OpenGL is a graphics API that can be used to render graphics via a set of state machine commands. A state machine is simply a pipeline of variables which are set to some value and retain them till they are changed again. For example, you can assign the variable representing the background color to be green, and it will stay green till the value is changed again to some other color. For this reason, there is a loop that runs the rendering component, and depending on external inputs, conditional changes, the state machine variables will be changed within this loop to provide the graphical output we see as motion, graphics and interactivity.

So how do we go about designing a game to be cross platform compatible? The main issue and whole point of having cross platform libraries is that there will always be platform specific code. The manner in which threads, file operations, network functions and other constructs are implemented in different platforms vary in details, and as a result, the way we have to program varies from platform to platform as well.

The approach I outline is to first create simple abstractions on top of the platform specific code that a game would need to address, and to create self-contained libraries out of them. Examples would be thread creation and operations, network access, file and directory functions etc. Using 3rd party libraries for this is a good reuse practice but sometimes bring on their own learning curves and integration issues. Having said that, there are many good 3rd party libraries out there for creating solid commercial grade games (checkout Intel parallel application blocks for example), which should be researched and scrutinized well before using them in our application. This would be the norm than the exception, as a game needs a myriad of resources, physics, music, sounds, user input handlers and other details that cannot be handled by one developer writing custom code for all this. The end result is this: to have the game logic and functionality as encapsulated as possible, and to only compile our platform specific custom libraries and 3rd party libraries in order to achieve portability. One simple way of visualizing a model as described can be seen in the below image:

Of course, attempting to write a large commercial or open source game can bring the need for more advanced architectures and the employment of game engines or rendering engines. Irrlicht and Ogre are two popular rendering engines which can use OpenGL or DirectX at the lower level. If really ambitious, the IdTech4 game engine (which was used in Doom, Wolfenstein) is open sourced and readily available for analysis or modifications. My advice is to research a simple open source game engine and try and customize it to the needs at hand. It is my hope that I have succeeded in showing the readers that designing and creating games can be as fun as playing them.”

Colombo SharePoint Camp

March 16, 2012

After a successful Colombo Code Camp and Agile Camp, now its time for Colombo SharePoint Camp! The Colombo Camps are a series of tech/industry events that are the first of their kind featuring globally acclaimed technologists and business leaders. The events are absolutely free for the invited attendees. This time, it’s the Colombo SharePoint Camp that’s around the corner (28th of this month to be exact). Following the same caliber of speakers as the previous camps, Colombo SharePoint Camp will be graced by Bjørn Furuknap, a renown SharePoint Guru and author. If you are a SharePoint geek or junky who wants to be up to date on the latest developments on SharePoint, you know where to be on the 28th of this month! Smile Make sure you register at: http://colombosharepointcamp.com/register.html

 

main2

Am playing a really cool and addictive HTML5 game these days, called 99Challenge (just navigate to 99challenge.com in your browser). The quirky, interactive, and challenging game play makes it really addictive in my books. The objective is to use a bow and arrow to pin 99 circles (which will be dropped by a frog in a balloon) to the other side of the lake. That would be pretty easy, if not for the bombs and the floating debree that your arrow has to dodge! Sadly, I’m still in last place in the list of high scores (told you it was challenging!)… but am working hard to come up the ranks :)

The interesting part is that you stand to win prizes when you score higher and higher, with netbooks, cameras, phones and much more in the prize list. So grease up your archery skills and have a go at the game…. it can be played here: 99challenge.com

Here are two screenshots for good measure:

Starting the game...

Me trying to up the scores!

The past few days I was searching around for a desktop client for managing my blog, and came across quite a number of good applications which seemed pretty much able to handle what I wanted. But a link in one forum directed me to the Windows Live Writer download site, and after downloading I was thinking, how did I work and blog without knowing about this tool before? I was pretty much ignorant about Live Writer and the fact that it comes included in the Windows Live Essentials download. Using Live Writer is the best blogging experience I’ve had, and would recommend it to anyone needing a serious blog manager. Saving drafts, multiple views, a multitude of fonts and formatting, easy integration, seamless image and video embedding, and managing multiple blog accounts just touches the surface of what you can do with Live Writer. The images below illustrate some of the main views and functions of the tool.

Main Editing view:

main

 

Web Preview Option:

preview

 

Manage multiple blog accounts from different providers:

accounts

 

Embed content without hassle:

embed

Usually when I come across something technical I need to lookup or do some background research  at work, I start digging in the web and other resources… too deep in fact. For instance, if I wanted to study a particular technical concept related to my work, I would start reading it up on the web and almost always I would run into a prerequisite piece of information that I need know in order to understand what I’m currently reading. So I branch out from there and start searching and reading up on the prior knowledge I need, which in turn might spawn new concepts and more prerequisites that I may need to have knowledge of, in order to come up the chain of facts and understand them.

My problem is that the brain does not allow information to be read and stored in a half understood manner. If I read something on a specific topic and conclude that I truly did not understand the whole of it, I start a recursive pattern of reading and researching related concepts, facts, history and lots of other information. This can be a good thing, and at times a bad thing.

A real life scenario might paint a more intuitive picture: A few days back, I came across the STAThread and MTAThread attributes used in .Net for communication with COM constructs. I wanted to know why and how they are used in .Net, what thread apartments are, what roles the COM objects play, etc. The objective of this exercise was to be better armed with knowledge on .Net and COM communication when I go about my development work. Initially I had opened a few MSDN pages explaining the attributes in .Net, which prompted me to look up and search on COM and COM implementation, which led me to STA (Single Threaded Apartment) and MTA (Multi Threaded Apartment), which led me to…. well, you get the idea. About thirty to forty browser tabs later, I was getting ready to implement some C++ code, trying to build the COM server described in the current web page I was reading. If I had run into any errors in the C++ code, I would have started off a new search on that issue…. and so on.

The above scenario maybe familiar to some, and others maybe shaking their heads already… But looking again, isn’t this how we software developers are encouraged and motivated to work? To dig deep into facts, to read source code examples, write them and test them, and gain all the knowledge needed to master what we do not know? It is how most of us work, or at least how most of us are driven to work when we encounter something we need to learn or research at work. Thinking back for a moment on the scenario I described, my main objective was to gain enhanced understanding on the STAThread and MTAThread attributes so that I could approach my development task with knowledge, in case for example, I needed to consume COM services from the .Net application. Starting to read up on it and ending up learning COM interfaces, coding COM servers, and trying to figure out the C++ errors in the COM implementation was just me wandering away from the main issue at hand. My task was not to write COM implementations, but to implement features in a .Net application which might communicate with COM. In projects, almost half of the time you are supposed to spend on providing beneficial value to the customer is spent on recursive research in order to satisfy our curiosity to understand how something works. This results in unproductive stances and deviations from project and customer focused goals. Sating our curiosity and working hard to find out how something works is a good thing, but not when it is conducted within time slots that are meant for work. It would be more appropriate and professional when we concentrate on our knowledge enhancements outside of our work hours.

Does this mean we should go about our daily operations blindly? Not search or read up facts that will help in our daily work? Ignore what we don’t understand or haven’t studied before? That is not the case, as fact finding and doing technical  research is a mandatory part of a developers daily work agenda. It is the approach and mindset of how you are doing it that matters. What I would be concentrating in my future work would be the following aspects:

  • If I come across an unknown fact, forgotten concept, or anything technically interesting, I would first check whether it is directly relevant or critical to the task at hand. If not, I know i can continue my work in the project and finish some features or functionality, and after work or at home, I can continue researching and reading on what interested me earlier.
  • I may come across lots of interesting information and facts, but filtering out obsolete/legacy explanations, articles with bad reputation points, and non-relevant information should be practiced. This would be a smarter and more focussed manner to gain valid and working knowledge, whether at home or work.
  • Learn to read through or skim through an article and gather the relevant facts, not read the article like a story or novel.
  • Have the big picture in mind. I should be able to connect and structure the disparate information I read about, in my brain. After all, abstractions, the ability to organize and model, and the ability to compartmentalize facts in our heads is what makes us who we are.
  • I do not need to know everything under the sun about a topic. I can gain knowledge on that topic incrementally. Accumulating knowledge in a need to know basis and applying it in the same manner can be refreshing and produce faster results.

I cannot be certain that what I have listed above is the best approach, but for me it would be a step in the right direction in being productive at work, enhancing and adding value to the customer, as well as increasing and gaining knowledge and expertise in the workplace. Of course, I will be hacking away at code and reading facts, articles, ebooks etc in my free time, but in a more analytical minded approach rather than in haphazard fashion. Though the title of this blog mentions technical knowledge, it can be anything we want to study or have more knowledge on. The end result is to have an analytical and filtered manner of accumulating knowledge where you learn more things in less time, and increase your efficiency and productivity at work or home.

It was a great week at 99X Technology, as we had just completed the annual Vesak lantern competitions, which was the buzz for the past few days at office. After hours and lunch breaks found people toiling away to come up with the best designed Vesak Lantern. Vesak is the holy Buddhist holiday commemorating the birth, enlightenment  and passing away of Lord Buddha. Vesak Lanterns are the artful and creative constructs (along with their associative decorations) that symbolizes Vesak.

At 99X Technology, the different teams (Employees are grouped into teams, and the team that constructs the best designed lantern wins the competition) put all their skills, creativity and talent, to produce some of the most amazing Vesak lanterns I have seen (albeit the fact that our major, and sometimes only occupation, is designing and building software). Being a proud contributor myself in the team I was in, it was great to experience the teamwork, multiple views and opinions of people, and the multi-faceted talents that were manifested. The end products themselves can be seen below:



Much of the mainstream graphics and games programming resources out there target the Windows platform (with good reason), either using an openGL implementation, or (mainly) the popular DirectX SDK. I have nothing against the said technologies nor the platforms, but I was always constantly needled by the realization that given the necessary hardware(VGA capable of custom vertex shader, custom pipeline rendering etc) and smart programming, all the bells and whistles seen in modern graphics can be applied in the linux world as well, using the OpenGL API. It would be worthwhile to mention maestro John Carmacks ‘Doom’ series of games, which do a great job of showcasing the capabilities of OpenGL. I have played around programming with DirectX as well as OpenGL on Windows, and decided to continue the experience by trying to see what I can do using OpenGL in the world of linux (working on Ubuntu 10.10, to be exact).

To this end, I wrote this tutorial, as i was having some problems trying to set up the proper environment in Ubuntu. I was looking around the web to see how to set up the openGL and freeglut libraries, but found bits and pieces which did not work completely, hence my tutorial.

One thing to notice about writing C++ OpenGL programs is that the FreeGLUT library greatly simplifies the framework in which we do our openGL coding. All the intializations, window creation and environment configurations are taken care of  by FreeGLUT, and we only have to concentrate on the rendering and the OpenGL state machine. This simplicity is a necessity when it comes to actually creating something interactive as a game, specially when testing or debugging.

I will write up more on what I manage to get done with OpenGL on the Ubuntu platform. It would be interesting to see what extremes the platform can go to, in terms of interactive graphics.

Recently, I ran into some problems in creating an RSA key pair which is required by github, before committing or pushing code to the online repository. I had downloaded the Rails installer kit (from here), and was trying my first stab at Ruby and Rails. Creating an open repository in github for pushing code required the creation of an RSA key pair, as described in the help pages. This is necessary as github uses SSH for the transfer of files to and from the local machine.

I had successfully created the RSA public and private keys, but ran into issues when testing whether the connection to the github repository worked, as github was not picking up the correct location of the keys in my local machine. To cut a long story short, the following describes what should be done, to avoid the hassle I went through.

When installing the Rails installer kit, Git is also installed alongside Ruby, the Rails framework, and sqlite. When navigating to the RailsInstaller folder after installation, you will find the bin folder inside the Git folder (/RailsInstaller/Git/Bin/) which contains the tools necessary for creating the RSA key pair. You have to include the Git’s bin location in the PATH environment variable (if it is not automatically configured during installation), in order to easily access the tool set from the command prompt. Also, if the ‘home’ system variable is missing, you will have to create a key ‘home’, which has value ‘C:\’

 

After setting the environment variable, I created a folder named “.ssh” in my C drive, and this is where github will look for the public key. Once the folder was ready, i created the key pair using the ‘ssh-keygen’ command. You have to enter the .ssh folder created as the location (watch out for the UNIX style folder location specifier), and id_rsa as the key (file) name. This will create a private key (id_rsa) and a public key (id_rsa.pub) inside the .ssh folder. Also enter a good pass phrase or hit enter without typing anything for a blank pass phrase (though entering one is recommended):

 

If you navigate inside the .ssh folder created, you would see the two keys, id_rsa and id_rsa.pub which were created. The next step would be to add the public key to your github account. Here, you will have to open the id_rsa.pub file in a text editor, copy the contents without any whitespace or newlines, and paste the contents as described in the “Adding the key to your github account” section in this page.

In order to test if everything went well, you can use the ‘ssh’ command, typing ‘ssh git@github.com’ (as described in the github help page as well) to see if you connect properly. When the prompt asks you whether you want to continue connecting, and you type yes, a ‘successfully authenticated’ message should be displayed:

 

The message shown above means that github properly identified your public key and you can push code using Git, from the local repository to github. Note that none of the above steps will work properly if the ‘home’ system variable does not exist or contain the value ‘C:\’, in order to indicate the home location that github uses to search for the .ssh directory. Since I’ve got my relationship with github stable and secure, my next adventure would be to deploy the Rails application at heroku, which will most likely turn out to be a future blog post. My first attempt at Ruby (and Rails, and Git, and sqlite), and I can safely say, “so far, so good”.

Microsoft and Nokia have announced a partnership last Friday (11th Feb 2011) stating that Windows phone will be the OS for Nokia smart phones, leveraging each others complementary innovations. Going through the literature on the web, this announcement has invoked mixed reactions from various parties. My take on this matter is an objective look at what changes can be expected of this collaboration and what impacts they may have, gathered from the information that is currently available.

Firstly, the announcement is not the death spell for Symbian and Meego. The Symbian platform which is open source will be available at the symbian blog via FTP till March of this month. Nokia is committed to the development and evolution of the platform, although it is not clear how this will take place in the future. Meego is stated to be offered as an open source mobile platform in the future. Nokia expects to sell around 150 million Symbian devices in the next few years, and will be producing Meego devices till the end of this year after which it will transform into an experimental platform for research.

That being said, it is not clear what the real forecast is for Symbian and Meego is. Nokia has stated that Symbian will be a franchise platform, but it has been degrading in a low curve for some time now and it is hard to envision getting the boost from Nokia in the years to come. Meego could fare better as a test bed for research and innovation, and being open source, anything could happen.

Looking to the future where Nokia smartphones will be running the windows phone platform, there is a huge impact in the mobile, business and software development circles. The windows phone OS will be running on the top selling handset device globally, virtually overnight. Developers would spring to the opportunity provided by the platform explosion in scale. Businesses and end users could be targeted with the synergy of Nokia and Microsoft innovations. In an open letter by the CEO’s of Microsoft and Nokia, the decisions and changes to take place are stated, and it is interesting to note that many deal with the integration of the technical innovations of both parties to a large extent. This would open up avenues in the current market by leveraging developers to innovate and develop in quality and quantity, and by having the vast array of Microsoft services at the fingertips of a Nokia user base, not to mention cloud capabilities.

What seems to be an unexpected decision could very well be what is needed to turn the tables. Apple and Google will most certainly not be sitting around and observe proceedings. In my view, the partnership between Microsoft and Nokia and the expected outcome would boil down to a few questions:

  • What will the collaboration offer to end users, in terms of smartphone capability and visual appeal?
  • What will be the reception of the Windows, Symbian and other developer communities?
  • What will be catered to the existing Nokia customers and how will they respond?
  • How can Microsoft and Nokia collaborate and address the above points to the best positive effect?

It would be interesting to observe how the other players in the market respond to the ‘best of both worlds’ approach by the Microsoft-Nokia partnership. This is my perspective of last Friday’s announcement in a nutshell and I welcome your thoughts and suggestions on the turn of events.

Follow

Get every new post delivered to your Inbox.