Ipod Touch – You can’t touch this….

I recently purchased an Ipod Touch and I all I can say is that its the greatest little gadget that I have ever owned. Apple have really out done themselves. Everything from the GUI to the usability of the device are perfectly integrated to create a small computer that fits in your pocket.

If that wasn’t enough some of the applications/games that are being released on the appstore are simply amazing.

Furthermore, the ability to surf the internet, check emails etc on the go are really handy, especially if you get dragged to a boring opera or something and want to just mess around without falling asleep.

I have been recommending the ipod touch to everyone that has asked me about. Yes…there are others music players on the market that have better sound quality but with the ipod touch you are getting a whole lot of functionality for a reasonable price.

Game Programming (C++/C#): Where to start?

For a while now I have been interested in getting into game development and with the advent of the community XNA program that has been created by Microsoft it is now alot easier to get your game ideas out there.

Although, most commerical games are currently coded using C++, I am currently looking at using C# which has the benefit of the XNA development platform, which gives you a ton of flexibility right off the bat without being too bogged down in the minutia of DirectX itself. It’s a pretty good place for beginners who have a strong CompSci background.

The only real drawback of XNA is that it requires so many libraries when distributed on the PC. You need one of the later DirectX runtimes, the MSDN C# runtime environment, and the XNA runtimes themselves. That’s a bit of a tall order when it comes to trying to squeeze a game into a small package that doesn’t require a ton of installs – most people will just cancel the installation after the first or second non-game-related installer. So take that into consideration if you’re looking to send the game out to the masses via PC distribution – even if it’s freeware a lot of people just won’t bother.

C++ will give you the ability to use a wider variety of libraries and engines (DirectX, OpenGL, etc) but will also require you to integrate a lot of those libraries yourself. It can be a lot of work, especially in addition to programming the game logic itself, so I’d only recommend C++ if you’re either interested in becoming a professional game programmer or if you have extensive knowledge of maintaining a rather large codebase with a number of third party dependencies.

Regardless of what language you choose, start small. I can’t emphasize this enough – whether you’re a seasoned programmer learning a new language or a novice programmer picking up his first, never go into unfamiliar territory with a grandiose plan that the language – or your skills with it – cannot support. Start with Pong or Tetris, and move up from there. It may take you just a few hours or it may take you a few days, but at least at the end of it you’ll have a fully complete project to build experience from. You’ll have learned the ins and outs of input, collision detection, drawing things on the screen, and writing game logic within the language. It sounds boring (and it sort of is) but at the end it’s a lot more helpful and rewarding than starting to code a 40 hour RPG epic or the next great first person shooter and abandoning the idea 2000 lines of code in without a single playable build.

The Hitchhiker’s Guide to Ruby On Rails Galaxy

Finally, after having used a variety of different programming languages ranging from Java to Perl, I have an opportunity to try out Ruby on Rails which I have heard a lot about.

Essentially, Ruby on Rails is an open source Web application framework for the Ruby programming language which makes excellent use of the Model-View-Controller architecture.

Furthermore, the goal of Ruby on Rails is to simplify and speed up web development. To accomplish this Ruby on Rails contains several tools to make development tasks easier out of the box.

From my experience the Scaffolding tool is a god send. By clicking a few buttons you are able to construct some of the models and views needed for a basic website. Essentially, it provides you without an outline of the web application you want to build. All you have to do is fill in the blanks….yes its as simple as that.

Additionally, the command rake db:migrate is another feature that has me truly interested in learning more about Ruby on Rails. Essentially, rake db:migrate allows you to easily setup and migrate data to a database for use with your Ruby on Rails web app. It creates all of the necessary database links, tables, relationships – pretty much it eliminates the need for the developer to mess around with the database.

Overall, I am pleasently surprised by Ruby on Rails and the flexibility it gives to the developer to dive straight into coding without having to mess about with other tasks.

TinyMCE – The Beast Within….

Alice Walker once said

“In nature, nothing is perfect and everything is perfect. Trees can be contorted, bent in weird ways, and they’re still beautiful”

Like trees TinyMCE is a beautiful thing. This tiny package allows anyone to add Rich Text Editing capabilties to their web application with little to no hassle at all. However, like most things in this world TinyMCE is not without its problems.

For example the TinyMCE code is not as efficient as it could be. Due to some extra baggage it can sometimes lag or be unresponsive, which can cause you to swear a lot (and I mean a lot….trust me its not a pretty site).

Furthermore, sometimes it can be a real pain as it doesn’t want to play nice with layouts which make use of divs and CSS. An example of this popped up during some testing I was carrying out with TinyMCE. it would move the textarea to random locations for unknown reasons, whereas when I deleted the package and reintegrated TinyMCE, it would be working perfectly.

Additionally, TinyMCE is lacking some features out of the box, such as

  • No upload picture function
  • No file upload function etc

However, by using addons it is possible to add these features to TinyMCE, but it would have been nice if they were available from the get go without having to mess with TinyMCE code.

Despite, its faults TinyMCE truely brings genuwine advantages with it, which has cemented its position as one of the leading Rich Text Editors available at the moment.

Some of the advantages include:-

  • Its ease of use and installation
  • Its lightweight footprint which means that the web app it is integrating with doesn’t become bloated.
  • Its numerous configuations options
  • Its ability to integrate addons to expand functionaility
  • Its ability to work on different platforms without the need to make drastic changes to the code

Despite, its downfalls I am very impressed with TinyMCE but I look forward to testing FCKeditor when I can get it to finally work properly.

The Weird Wild World of Rich Text Editing…..

While working on our second assignment, we all decided that the webapp that we were developing required some sort of Text Editing capabilities.

Everyone then proceeded to research the available 3rd party options as we would not have the time to sit down and make our own. During our research we discovered that TinyMCE and FCKeditor were two of the more popular choices, which is why we decided to work with one of these two editors.

Although, our research indicated that FCKeditor was the more powerful of the two, everyone had difficulties in getting the package to work well with IIS. However, for our webapp TinyMCE provided all the necessary features that we were looking for and it was also very easy to get it integrated with our projects with little hassle.

Typically, the widget looks like a mini word processor, i.e. a toolbar on top with a rich editing area underneath.

Some of the standard features that a Rich Text Editor brings to the table include:

  • Flexible font styles, sizes, boldfacing, etc.
  • Flexible colour schemes.
  • Embedded images.
  • Embedded tables.
  • Bullet-point and numeric lists.
  • Indenting and flexible text alignment.

All these features are usually accessible by the toolbar, and also via keyboard shortcuts.

Although, the editors may seem a bit complex, they have been developed in such a way that anyone from the beginner to the advanced web developer can implement them into their applications.

For a comprehensive comparison of a majority of 3rd party Rich Text Editors visit the following site:-

http://geniisoft.com/showcase.nsf/WebEditors

Aptana JavaScript Debugger – Houston we have a problem!!!!

The Aptana JavaScript debugger provides you with a variety of tools to allow you to closely examine and troubleshoot your JavaScript code. Despite there being numerous debugging applications around the feature which sets The Apatana JavaScript debugger apart is that it uses its own Debug perspective so that debugging tasks are separated from development tasks – which makes life a lot easier especially when you have hundreds of lines of code.

Furthermore, one of the more impressive features is it ability to be used in conjunction with Firebug (FireFox debugging extension) which gives you the ability to add break points in your code – Allowing you to pause your script at a certain point and analyze the current state and all the variables

Some additional features include:-

  • The ability to examine or change the value of a variable – This allows you to ensure that you variables are being passed the correct data and should there be an issues you will be able to identify the source of the problem much faster than normal.
  • The ability to step into or over functions to navigate you code – Stepping into a function or stepping over a function can help you see exactly what is going on within your JavaScript code.

Having used many different debuggers I can safely say that the Aptana JavaScript Debugger is one of the most powerful debuggers that I have used, as it provides different ways of troubleshooting your code in an efficient manner.

RSS vs Atom – The Rumble in the Cyber Jungle!!

RSS seems to be on the tip of every tongue nowadays, and I’ve been realizing that not everybody has a clear idea of “what” it is, or how it differs from Atom (which is another type of feed format).

Both RSS and Atom present a webmaster with ways to give their users access to content without requiring the user to browse to their website. While this is a very loose scope, both RSS and Atom both provide many more uses such as:

  • the ability to have headlines from other websites to be displayed on your own site and vice versa,
  • to aggregate news with an application so you can catch up on them later,
  • to follow what a load of websites are talking about with one swoop, etc.

Basically, the reason for all the hype is that possibilities are in fact, endless.

However, how are these format different from one and other???

Despite accomplishing the same things, both format do have differences which separate them from each other, such as:

  1. While RSS has two main publishing protocols, Atom has one standardized approach. This waives off some of the interoperability issues between using both the Blogger protocol and MetaWeblog (the two protocols for RSS publishing). Best approach: Atom
  2. When it comes to required content on a feed, Atom is much more restrictive, needing more data in order to be valid. RSS has a more loose approach. This has generated some discussion: ultimately, I like how Atom requires “last update” timestamps, but I like how RSS isn’t as restrictive to be standard. Best approach: Both have their strong side
  3. RSS requires escaped HTML or plain text, while Atom allows for other forms of data. This increases human-readability of an Atom feed, even though it complicates the publishing process (because you have to specify the kind of data you’re publishing). Best approach: RSS
  4. Atom clearly distincts partial content from excerpts, while RSS doesn’t. This clearly makes a difference, because there’s no way to know when an item on an RSS feed is a full story or an excerpt (that requires loading the original page in order to continue reading). Best approach: Atom
  5. Autodiscovery is standardized in the Atom specification, whereas in RSS there have been several ways to discover feeds, to this date. Best approach: Atom
  6. Aggregating and extracting content is one of the most important issues, and the one that clearly gives Atom an advantage. RSS allows content only inside a single monolithic rss document including several entries. Atom on the other hand allows for single Atom Entry documents, that make syndicating, aggregating or reusing single entries of a feed a much easier process. Best approach: Atom

As you can see I prefer the Atom format purely for the fact that not only does it accomplish the same things as RSS but it does it better and with more grace. Furthermore, since the RSS format has been frozen by Harvard University we will not be seeing it evolve anytime soon, which is a real shame. However, because of this closed development approach the Atom format was able to be born and due to its more open approach to development we should be seeing Atom continuing to evolve.

The secret life of Jquery…..

jQuery is a lightweight JavaScript Library that emphasizes interaction between JavaScript and HTML.

Essentially, jQuery contains all of the common DOM, Event, Effects, and Ajax functions that a web developer would require to create a web application.

The best thing about the jQuery library is the fact that it bases alot of syntax on the CSS syntax, which means that you are able to keep your code simple and succinct. No longer do you have to write a bunch of repetitious loops and DOM scripting library calls. With jQuery, you can get right to the point and express yourself in the fewest possible characters.

Furthermore, the jQuery philosophy is certainly unique: It’s designed to keep things simple and reusable. When you understand and feel comfortable with the philosophy, you’ll start to see just how much jQuery can improve the way you program.

Here is example code which I believe best shows the impact that jQuery has had on the way website will be built:-

DOM scripting without jQuery
var external_links = document.getElementById('external_links');
var links = external_links.getElementsByTagName('a');
for (var i=0;i < links.length;i++) {
var link = links.item(i);
link.onclick = function() {
return confirm('You are going to visit: ' + this.href);
};
}

DOM scripting with jQuery
$('#external_links a').click(function() {
return confirm('You are going to visit: ' + this.href);
});

As you can see 8 lines of traditional code have been condensed into 2 simple to read lines of code.

Additionally, considering the amount of functionality that you get right out of the box, it is truly amazing to see that jQuery also has the ability to make use of plugins which means that you are no longer limited to a set of predetermined functions - jQuery’s plugin mechanism provides documented hooks for adding that method to the jQuery system. The ease with which these can be created has attracted an impressive community of plugin authors.

After having played around with jQuery for a bit I am truly amazed at its versatility and its ability to enable even the absolute beginner to implement some advance functions into their websites.

Now that I have had a sample I am truly hooked on jQuery and will be implementing it into future projects.

My One Night Stand With IIS………………

I finally got a chance to play around with the Microsoft Internet Information Server or better known as IIS, which is essentially Microsoft’s attempt to snatch market share from Apache – and overall I am happy to report that the installation process was as easy as stealing candy from a baby (Not that I would ever do this of course ;P )

Seeing as the IIS application is already built into Windows XP (However, it is initially deactivated) the installation process was very simple and with only a few clicks we were away.

The installation did take some time to finalize though but that could have been for a couple of reasons such as:-

  • Too many VM’s were being used at the same time and the poor server was dieing a slow painful death
  • The application could contain bloatware for which MS are world famous for.
  • etc

So far my impression of IIS is that it is capable to doing what it was made for however, I still prefer Apache as it appears to have better flexibility and due to its open source nature you are able to manipulate it to fit your desires.

The Fascinating World of Distributed Systems

Distributed systems are beginning to play an integral part in many different industries, who require cost effective processing power which can match or even surpass the most ridiculously expense/powerful supercomputer.

However, what is a “Distributed System”???

After looking into the world of distributed systems, I felt a bit awed and overwhelmed with the amount of information that is available on the topic. However, after shifting through the mountain of information and breaking down the concept of Distributed Systems into more manageable bits of information, I came to realize that Distributed Systems are nothing more than a lot of software components that are stored on multiple computer hardware, which are linked together to run as a single system.

However, the most interesting thing about a Distributed System is that the computers that are linked together can be physically close together and connected by a local network, or they can be geographically distant and connected by a wide area network. Furthermore, A distributed system can consist of any number of possible configurations, such as mainframes, personal computers, workstations, minicomputers, and so on.

Furthermore, the most common method of organizing software to run efficiently on a distributed system is to separate the function of the software into two distinct parts – Clients and Servers.

Essentially, a client is an application which uses services that other applications provide. Whereas, the applications that provide the services are called servers. The way in which this configuration works is that the client makes a request for a service, and a server performs that service.

Despite working in close proximity of each other both Clients and Servers have their own distinct responsibilities. For example Servers are responsible for synchronizing and managing access to the available resources, and it must also respond to client requests with either data or status information. This means that a client does not need to be aware of any updates/changes that are made to the server or its resources. Whereas, Client applications typically handle user interactions and often request data or initiate some data modification on behalf of a user.

However, apart from the Client – Server architecture that is most commonly used there are various other architectures which are used to build Distributed Systems:-

3-tier architecture — Three tier systems move the client intelligence to a middle tier so that stateless clients can be used. This simplifies application deployment. Most web applications are 3-Tier.

N-tier architecture — N-Tier refers typically to web applications which further forward their requests to other enterprise services. This type of application is the one most responsible for the success of application servers.

Tightly coupled (clustered) — refers typically to a cluster of machines that closely work together, running a shared process in parallel. The task is subdivided in parts that are made individually by each one and then put back together to make the final result.

Peer-to-peer — an architecture where there is no special machine or machines that provide a service or manage the network resources. Instead all responsibilities are uniformly divided among all machines, known as peers. Peers can serve both as clients and servers.

Space based — refers to an infrastructure that creates the illusion (virtualization) of one single address-space. Data are transparently replicated according to application needs. Decoupling in time, space and reference is achieved.

At the end of the day it appears that Distributed Systems are indeed the way of the future as they hold the key to unlock the mysteries of the universe…………

Examples of Projects which have made use of the Distributed System concept are:-

1) Folding@Home,

Which is focused on simulations of protein folding to find disease cures and to understand biophysical systems

2) World Community Grid,

Which is an effort to create the world’s largest public computing grid to tackle scientific research projects that benefit humanity

3) SETI@home,

Which is focused on analyzing radio-telescope data to find evidence of intelligent signals from space,