For the past few months, eSpace has been dabbling in developing iGoogle gadgets for the iGoogle Arabic edition.  Whether you are interested in the news, sports, stocks or just looking for a laugh, be sure to checkout the gadgets developed by our team right here. Be sure to leave your feedback in the comments!

Command-line geeks, it's time to stay focused on your terminals and not switch to X back-and-forth when chatting with your buddies.

mcabber is a small Jabber console client.
mcabber includes features such as SSL support, MUC (Multi-User Chat) support, history logging, command completion, OpenPGP encryption, OTR (Off-the-Record Messaging) support and external action triggers.

While using Thinking Sphinx in one of my Rails projects, I needed to search Arabic content. Since Sphinx supports Unicode, I thought that it would be easy, but it was not due to the lack of documentation of Unicode support through Thinking Sphinx. So here is what to do to support Arabic (Unicode) search.

Ruby provides several socket classes for various connection protocols. Those classes are arranged in a strange and a convoluted heirarechy. This ASCII diagram explains this heirarechy:

     IO
|
BasicSocket
|
|-- IPSocket 
|     |
|     |-- TCPSocekt
|     |       |
|     |       |-- TCPServer
|     |       |
|     |       |-- SocksSocket
|     |
|     |-- UDPSocket 
|
|-- Socket
|
|-- UNIXSocket
|
UNIXServer

I faced a performance problem while using the library Mechanize to scrap an HTML page.

After fetching that page :

@agent = WWW::Mechanize.new
@page = @agent.get(http://www.webometrics.info/top4000.asp)
#.....
 

In one of my Ruby on Rails projects, I needed a full-text search engine to integrate. After some research, I decided that Thinking Sphinx is the way to go. It seemed simple, fast and well documented. Unfortunately, I had some issues when tried to get it running on Windows.

The first step is installing Sphinx itself. While this looks simple, it took me five hours to move to the next step!

While developing a RoR web portal, one task requirement was to show a modal pop-up window over the web-page. While searching for a javascript solution for doing that, I found two great solutions, and they are worth talking about.

The first one is the Prototype Window Class. This javascript class allows you to add a window in the HTML page; you can add more than one window to the same page and control them.

 

In a previous post, I talked about why we chose CommunityEngine. And due to the lack of documentation and several issues I faced, I thought it would be useful to go through the installation steps and the handling of some issues.

Requirements

Required gems

  • Rails 2.1.0
  • rake 0.8.1
  • rmagick
  • hpricot
  • htmlentities
  • RedCloth
  • haml
  • aws-s3 (if using Amazon S3 for photos)

Full text search is one of the most powerful features in PostgreSQL. In this blog entry, we'll start with a typical text search problem in its simplest form and see how to implement its query under PostgreSQL. After that, we'll evolve the problem bit by bit and see how we can modify our implementation accordingly until we come up with an ultimate strategy for the text search problem in its most generic form.

The goal of performance testing is not to find bugs, but to eliminate bottlenecks and establish a baseline for future regression testing. It's different from the stress testing  as stress testing tries to break the system with a test by overwhelming its resources or by taking resources away from it (in which case it is sometimes called negative testing). The main purpose behind this madness is to make sure that the system fails and recovers gracefully -- this quality is known as recoverability. Performance testing has to run on projects in order to deliver our recommended system bench marks to customers, but what tools to use to get what we are searching for in a very simple, time-saving way?

One of the most well known features of HTTP is Basic Authentication. You most probably know how to implement a basic authentication scheme in HTTP if you've spent enough time in web development; you usually add a response status code of 401 (unauthorized) and let the web browser prompt the user for authentication. The browser will then resubmit the authentication header with every subsequent request under the same domain name.

Developing for the iPhone is the hype nowadays. However, one big obstacle that faces anyone who wishes to write iPhone applications is learning Objective-C; after all, it is a high-level Object Oriented language. However, in my opinion, and for many people as well, the C family of languages is not suitable for application development; it is perfectly suited for writing system libraries and frameworks. This is because one should always take care of memory management, types and low level system calls.

In a previous post, I talked a bit about event based programming for Ruby; I mentioned the EventMachine/Asymy combo as a means of doing Asynchronous database operations, hence freeing up the Ruby runtime to do other things while it is waiting on database I/O operations. Even more, the developers need not worry about using a different programming model; with the help of Ruby Fibers we will continue to program in the same old ways while Fibers will be doing all the twisted work underneath. Very promising indeed, but one big elephant in the room was the immaturity of the current solution. Asymy is still very new and it is based on the super slow pure Ruby MySQL driver, not to mention that it is fairly incomplete as well.

A while back, we were developing a crawler here at eSpace. Before the launch we decided that we should have a control system where we can pause and resume the crawler, so as to have the flexibility to fix anything that may go wrong while the crawler is running. The crawler is implemented using java, with a multithreaded architecture and a thread control scheme, so it is not a good practice to add the logic of the threads control within the crawler thread control scheme and it may take some time to implement.
 

A while back, when I was researching open source solutions for building a social network with Ruby on Rails, I came across tog. Unlike other solutions, tog doesn't believe in generic social networks. Instead, tog is a collection of useful plugins that can easily add social network features to your Ruby on Rails application. In addition to these useful plugins, tog is released under the unrestrictive MIT license and was designed to make developing and integrating new plugins easy.

 

Agile Vs CMM

4

The main difference between the Agile and the CMM process models, from my viewpoint, is that CMM, or traditional waterfall process model, is more suitable for sensitive, large-scale projects that take more than 6 months to be delivered. Agile, on the other hand,  is more suitable for small-scale projects.


Recently I discussed this subject with some other professional testers and I got some replies that I want to share with you; note that you'll find their replies in Italic.