Tuesday, May 01, 2007

Time machine


"In 1980 most of us felt pretty certain that users --customers-- were going to demand the application portability that UNIX promised, and CFOs and CEOs were going to demand the hardware independence that UNIX (in theory) made possible.

But in 1988, the PC revolution had resulted in DOS and PCs stealing the opportunity that we had seen for UNIX, causing us to conclude that Microsoft would continue its domination simply because there was no alternative -- despite the obvious need for a better PC operating system than DOS.


Today I am not sure of the inevitability of Microsoft's continuing dominance on the PC platform, which begs the question: What sort of operating system could challenge those from Microsoft ?

It would have to be cheap and at the same time respected by technical users. It would also have to be compatible with one of the major operating systems standards. It would have to improve faster than its competitors, have true multiuser, multitasking capabilities, and have to come from a vendor with resources to develop the product for a worldwide market and roll out new features on massive, coordinated basis simultaneously.

That's where Linux comes in.

Linux is a 32-bit, multiuser, multitasking operating system that is as stable as, if not more than, any form on UNIX on the PC. The kernel is largely the work of Linux Torvalds, who is now employed by the University of Helsinki, although much of the original work was done while he was a student there. After writing a prototype kernel in 1991, Torvalds posted it to the Internet (in the comp.os.minix newsgroup) and invited the world to help him work on it.

A Propeller Head's Dream
Rob Kolstad, president of Berkeley Software Design, of Colorado Springs, CO, sees Linux as more theology than technology. "Linux users," he says, "do not argue the merits of their chosen technology, they evangelize on the method that was used to create it."

To begin to understand the evangelical aspect of Linux, consider the development cycle at any commercial operating system vendor. The marketing department meets with its largest customers' senior MIS managers (most og whom have not written code in 20 years) to find out what these customers are asking for.
They write reports, conduct surveys, and eventually come up with a list of, say, the 10 most important new features that their operating system developers should work on.

In Linux there are no marketing teams. Developers are the customers. They work on the parts of the code, utilities, or applications they have an interest inusing.
The code these developers build is posted on the net for others to download, test, and if appropriate, provide suggested changes, report bugs, or use for whatever purpose they chose. Coordination of all this development effort is casual but effective. There is a designated person responsible for each major aspect of the Linux operating system, Torvald's leadership of the kernel being a famous example.
[...]



This was published by Robert F. Young in Uniforum Monthly in October 1994.
Can you spot some coincidences with today's ecosystem ?
13 years have passed and are we still arguing about the same things ?

Sunday, April 29, 2007

Skoda Fabia

Otra vez Buenos Aires. Esta vez en el comercial del nuevo Skoda Fabia.
http://www.skoda-auto.com/importermastereng/model/newfabia/home
o aqui (la extended version).
Enjoy.

Friday, April 20, 2007

Python and Test Driven Development - Part I

Briefly, Test Driven Development is the strategy of starting the development process by the test cases and then provide the software that satisfies these tests, not the other way around.

Maybe you have been already charmed by the Test Driven Development and its innumerable virtues.

If not, I strongly recommend that you take a look at Wikipedia's (http://en.wikipedia.org/wiki/Test_driven_development) which is a good place to start and has a lot of external links.

The following UML activity diagram depicts the Test Driven Development process.

Start writing the tests, run the tests to verify that the test you have just written fails, write the code that satisfies it and the refactor the code to keep it tidy, clean an minimal.

Personally, the main advantage I've seen so far is that you focus your destination quickly and is much difficult to divert implementing options in your software that will never be used and wasting your precious time so much needed in order to arrive to the end of the project on time. To cut short what could be a very long story, I don't want to debate now if Test Driven Development could be applied to any project. I think that, as well as any other technique, you should use your judgment and expertise to recognize where it can be applied and where not. But having this in mind: there's no silver bullets.


1 Unit testing

Unit is the portion of your software being tested. You should also apply your experience to determine, in each case, what a unit can be. Sometimes it is a class, a set of classes or even a a method. In general, the tools are called xUnit where x is your favorite language (Java, Python, C++, VisualBasic).


2 Test suites

Tests are composed into suites. Suites are a convenient way to keep related tests together and simplifies running all of the tests in every iteration of the process. Normally, all of the tests should be run to verify that nothing else is broken.

3 Test runners

We will be using a python example. Also, assume that we have already written some tests classes stubs containing some tests placeholders. These classes are ATest, BTest and CTests, each in its corresponding module inside the tests subdirectory. These will help to maintain the separation between code and tests. They will test the correctness of classes A, B and C respectively.

#! /usr/bin/python

import sys
import unittest

class ATest(unittest.TestCase) :
def test1(self) :
self.assertEqual(1, 1)

def test2(self) :
self.assertEqual(1, 1)

if __name__ == '__main__':
unittest.main()

The same for the other classes.

In python, when you are writing a test driver you write something like this

#! /usr/bin/env python

import sys
import unittest

from tests.ATest import ATest
from tests.BTest import BTest
from tests.CTest import CTest
from tests.moretests.DTest import DTest

if __name__ == '__main__':
unittest.main()

This is a test driver that imports some classes to be tested, and the unittest discovers all of the test cases using introspection.

Nevertheless, there are some drawbacks with this approach:

  • we need to create a test driver like this in any project
  • we need to maintain the driver and if a new class is created in the project it must be added to the driver
  • the names of the classes must be known in advance

Thus, we will try to address this problems creating a generic test driver, independent from the project we are working on, and this driver will generate automatically the Test suite accordingly to a given pattern of classes and a path to look for the modules.

With all of this in mind, we try our second driver. This driver uses the function find which emulates partially the behavior of the Unix find command (see downloads).

#! /usr/bin/env python

import sys
import os
import re
import unittest

from find import find

def loadTestsFromPath(dir='.', pattern='*Test.py', maxdepth=None) :
modules = []
for f in find(dir, pattern, maxdepth) :
mo = os.path.basename(f)[:-3]
mp = re.sub('^\./?', '', os.path.dirname(f)).replace(os.sep, '.')
if mp:
mp += '.'
modules.append(mp+mo)

return modules


if __name__ == '__main__':
ts = unittest.TestSuite()
for m in loadTestsFromPath('.') :
ts.addTests(unittest.TestLoader().loadTestsFromName(m))

unittest.TestProgram(defaultTest='ts')

Now the situation is much better

  • this is a generic driver, there's no need to maintain it with the target project
  • the names of the classes are not included in the driver
  • automatically the driver finds the existing test cases in the filesystem

We still need some improvements, but it is pretty usable right now. The possible improvements are

  • we require the ability of passing command line parameters to obtain the maximum flexibility, for example the path to start the search and the maximum depth to continue searching
  • this command line options should be integrated with the unittest options
  • the pattern should be variable

These improvements will be the subject of the next part: Pyhton and Test Driven Development - Part II

Wednesday, April 18, 2007

Citrix ICA Client 10 on Fedora Core 6

And... because I'm still in love with Fedora, in spite of my migration to Ubuntu in most of our customers, here you are: http://codtech.com/wiki/index.php/Citrix_ICA_Client_10_on_Fedora_Core_6

In fact, I should say, there's a lot less desktop problems with Fedora than with Ubuntu, but this is another story.

Tuesday, April 10, 2007

Citrix ICA Client 10 and Ubuntu


If you have downloaded and installed the new Citrix ICA Client 10 in Ubuntu 6.10 Edgy Eft you may have already discovered that it doesn't work out of the box.
You may receive some font errors or missing dependencies, and because Citrix doesn't provide a DEB package these missing dependencies are not detected by the tar.gz package installer.

To simplify the installation, or better the post-install steps, I've made a script available at http://codtech.com/downloads/citrix-icaclient-10-ubuntu which verifies that dependencies packages are installed and patch the configuration files to get rid of the error with UTF fonts.

Download the script, and if Citrix is installed in a system location use sudo to run it.
Don't forget to set ICAROOT in the environment if it's not /usr/lib/ICAClient.

Comments are welcome.

Monday, April 09, 2007

Veolia

No solo crecen naranjas en Buenos Aires. Como veran en este comercial de Veolia que tambien se puede ver en canales europeos.

Thursday, March 29, 2007

Tropicana

Miren este comercial de Tropicana que estan pasando en la mayoria de los canales de UK.
No sabia que desde que me fui habian plantado tantos arboles.

Monday, February 05, 2007

El regalo de cumpleanos de Octavio

No hacen falta mas comentarios, Octavio con su nuevo Buzz Lightyear (y Zurg en off).

Sunday, February 04, 2007

New gnome-terminal-launcher released

A new release of gnome-terminal-launcher has been released last week. This new release includes some interesting features like gnome-terminal profiles sorting and GConf events notification.
If you are a sysadmin it's worth a try.
Visit gnome-terminal-launcher web site to read the details.

Thursday, January 11, 2007

Compaq Deskpro 50M


After almost 14 years, I finally threw away my Compaq Deskpro 50M, because there's a real need to reduce the number of things I'm moving.
Born as a high end workstation but it has bravely died as a PXES Universal Linux Thin Client, strictly speaking it was the only Intel 486DX thin client that I've been using so far for the development and testing of PXES images.

Farewell Deskpro 50M !

Tuesday, November 14, 2006

Sun opens Java under the GPL license

Finally, the day has come.
Yesterday, in a historic move, Sun opened the Java Platform Standard Edition (Java SE), Java Platform Micro Edition (Java ME), and Java Platform Enterprise Edition (Java EE) —under the GNU General Public License version 2 (GPLv2).
Read more...

Friday, November 10, 2006

What is a thin client, really ?

Sun Microsystems CEO Jonathan Schwartz wrote on his blog this definition about thin clients:


Industry convention says that apps written to browsers are defined to be "thin." But by that definition, thin really equates to "using someone else's runtime environment" -- in that the browser itself has to be present for the service to be rendered. And last I checked, browsers require operating systems and windowing environments. Not exactly thin. So in my book, it's inaccurate to say Google or YouTube are "thin clients" -- they're services that leverage someone else's thick client. A browser.


This is really true and seems to reflect a feeling that I've had already.

Why do people call thin client a small computer which has an operating system (Windows CE, XPe, or Linux, it doesn't matter) installed in a local media, perhaps a flash memory ?
And think that it's not only an operating system, but applications too.
Like the web browser.

Do they call it thin client because the disk usually doesn't spin ?
Because the upgrades are much more difficult and tedious than upgrading a fat client disk ?
Because the operating system and applications fits in only 64 or 128 MB of flash ?
So, the desktop PCs from sime time ago, when disks were much smaller, were thin client too.
And we didn't know it !

Real thin clients boot off the network. Stop.

Wednesday, October 04, 2006

Vuelta al cole


Cuando los primeros rayos del sol asoman sobre el horizonte, Augusto se prepara para su primer dia de clase en Saint Michael School en Junior I, lo que seria equivalente a Primer Grado.
No les parece mentira ?
No, que nos levantemos a esa hora (incluido yo que tome la foto) no, sino que ya vaya a la escuela ?
Si ayer era un bebe...

Wednesday, September 27, 2006

Running Microsoft Internet Explorer on Linux


This is a short introduction to a more in-depth article I'm writing about Running Microsoft Internet Explorer on Linux, covering Fedora Core and Ubuntu releases (you may run any other Microsoft Windows application as well, not just Internet Explorer).

You may wonder why, if you can run Firefox.

Well, there's a huge list of reasons, but on top of this list is: because some important sites are designed like crap and you can't use Firefox to access them.

Have you seen tons of error messages in your Firefox's Javascript Console while accessing your home banking or when you try to buy an iPod online ?

This is a reason.

You can use Wine, Crossover Office, but personally I think that you extend your agony.
Do you need Flash 8 on Linux ?
Flash 9 ?
This is a way.
The solution uses rdesktop 1.5.0 with seamless window support, Cendio's seamlessrdpshell, Microsoft Windows XP, and VMware Workstation (but can also be applied to the free VMware Player or Server).
I'm also using some Python scripts and devilspie to modify some windows.
More on this next on this blog.

Tuesday, September 05, 2006

Diego Torres Milano's blog: gnome-terminal enhancements

Diego Torres Milano's blog: gnome-terminal enhancements
Today I've released gnome-terminal-launcher-0.6 now featuring FedoraRPMs and Ubuntu DEBs.

This new version includes some fixes and enhancements. Further details are provided in the changelog.

Monday, August 07, 2006

PXE wireless booting


Introduction


From time to time, in the thin client, network booting, LTSP (Linux Terminal Server Project) and other related technologies mailing lists the same question arise: how do I boot off the network with a wireless card ?

Sometimes, the answer derives to the use of flash disk or other local boot methods,but strictly speaking this is not a wireless booting and the thin client is not thin anymore.

The approach presented here doesn't require the use of a hard disk, flash memory or other local storage device. The nature of the network boot is preserved.

Although, you need to add an additional piece of hardware which is a wireless bridge.

There's a subtle difference between access points and wireless bridges which sometimes is not clear enough. Thus, our first step will be to depict this difference.

Access points


Access points are the most common element in wireless networks.

The 802.11 standard defines an access point as a communication hub for users of a wireless device to connect to a wired distribution system, such as an Ethernet network. Access points also play a major role in providing access control and wireless security to users in the shared radio environment.

Wireless bridges


Unless the 802.11 standard doesn't specifically define a bridge some vendors offer wireless briges as a simplified and somewhat different from access points.

A bridge is a device that connects two networks that may use the same or a different Data Link Layer protocol (Layer 2 of the OSI Model). Bridges have been in use for decades, especially with wired networks.

Access points connect multiple users on a wireless LAN to each other and to a wired network while a bridge connects two different networks.

The simplest case is a basic Ethernet-to-wireless bridge. This type connects directly to a single device via an Ethernet port, and then provides a wireless connection to an access point.

These types of device provides the solution when the device (i.e: thin client) has an Ethernet port but no 802.11 NIC.




Available Ethernet-to-wireless bridges
  • D-Link model number DWL-7700AP
  • Linksys model number WET54G
  • Cisco Aironet 1300 Series




Wireless network booting


Because, as far as I know, there's no wireless 802.11 NICs featuring PXE firmware, the Ethernet-to-wireless bridge is the only way to go to provide wireless network booting.

The thin client has the PXE firmware in the Ethernet card which is connected to the Ethernet-to-wireless bridge. Thus, when the thin client broadcasts the PXE request it is bridged and forwarded to the wireless network access point, which in turn is connected to the wired network where the servers reside.

This solution is completely transparent for the thin client and servers.

Wireless security


Wireless security (ESSID, WEP, WPA, etc.) can be configured in the bridge so there's no need to store nor configure theses settings in the thin client.

History


I've successfully implemented this approach in the past in some large scale PXES Universal Linux Thin Client deployments, in big retail stores mainly with moving thin clients (battery operated thin clients mounted on a cart).

External links


Tuesday, August 01, 2006

Cerrado por vacaciones


Hoy fue el primer dia de mis vacaciones, y aprovechando que los niños van al summer school nos fuimos a bucear en el naufragio del destructor HMS Maori, que fue hundido en el Malta Grand Harbour por un avión alemán el 12 de febrero de 1942 durante la Segunda Guerra Mundial.


Y el titulo no es verdad, este blog no cierra por vacaciones...

Monday, July 10, 2006

Octavio - Live in Malta


Los invito a escuchar el primer corte de difusión de Octavio - Live in Malta, llamado One, Two, Three, ....

Que lo disfruten tanto como yo (click en la imagen del speaker/parlante o como lo llamen para escuchar).

Sunday, June 25, 2006

Installing Mediawiki on SourceForge

If you are trying to install Mediawiki on SourceForge, and you are encountering a lot of issues coming from the fact that SourceForge's web servers mount the project home directories read only, you should take a look at Mediawiki installation on SourceForge and follow the directions to run a script that I've written to circunvent those problems.

Wednesday, June 21, 2006

gnome-terminal enhancements

If you are a system administrator, perhaps a command line junkie, and you deal with a large number of servers on a daily basis, you may have already created profiles to define the connection characteristics of each server.



I've also experienced an improvement in usability assigning a different color and icon to a server or group of servers. After a while, you can quicly identify which server are you connected to with just a glimpse of the screen.
But this has a drawback, the only way to open a terminal is from another terminal unless you've already created launchers for the specific profiles.
To provide a cleaner solution. I've create the gnome-terminal-launcher applet that reads the profiles from GConf and creates the corresponding menu entry to invoke the gnome-terminal command and its arguments.




Despite the fact that it is a work in progress and some other features will be added in next releases, it is very helpful now for the administrator's toolbox.

Visit the project SourceForge home page to obtain more information gnome-tla.sourceforge.net