Thursday, July 24, 2008

What next? Cloud computing, mashup, or app engine.

Cloud computing, Mashup, and App engine.

It might be interesting to build a 'cloud' instead of building an OS. As time goes by, a TV set is no longer an expensive property. Although a computer ( the hardware plus many software bundled) is not as cheap as a TV set, it certainly will in the near future. Will these clouds in the future become OSes which we are now used to? It might be. It was once the era of hardware, and followed by software. It is now Internet and services.

Thursday, April 17, 2008

os.system() and its return value

When os.system('exit 1') returns 256, you might wonder what is going on with python? Why isn't it simply 1 (one)? Let's take a look at this command.

A system() command might be frequently used when you were interacting with the system or other scripts.

Try help(os.system) will only show:
system(command) -> exit_status

Execute the command (a string) in a subshell.

And it talks nothing about the exit status.

This function appears in the tutorial as an example and in library reference:

system(command)
Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations. Changes to posix.environ, sys.stdin, etc. are not reflected in the environment of the executed command.

On Unix, the return value is the exit status of the process encoded in the format specified for wait(). Note that POSIX does not specify the meaning of the return value of the C system() function, so the return value of the Python function is system-dependent.

On Windows, the return value is that returned by the system shell after running command, given by the Windows environment variable COMSPEC: on command.com systems (Windows 95, 98 and ME) this is always 0; on cmd.exe systems (Windows NT, 2000 and XP) this is the exit status of the command run; on systems using a non-native shell, consult your shell documentation.

Availability: Macintosh, Unix, Windows.

wait(command)

Wait for completion of a child process, and return a tuple containing its pid and exit status indication: a 16-bit number, whose low byte is the signal number that killed the process, and whose high byte is the exit status (if the signal number is zero); the high bit of the low byte is set if a core file was produced. Availability: Macintosh, Unix.
So this explains why os.system('exit 1') returns 256 instead of 1. Actually, the signal number killed the process is zero. To get the exit status, just shift the value 8-bit to the right.

Here is a link talking about the return code of os.system(). http://mail.python.org/pipermail/python-list/2001-March/073147.html

Tuesday, March 11, 2008

Virtualization and Video Card

Virtualization helps utilize the computer power. (It would consume more power, than a single server, but much less compared to a group of single servers). Virtualization is a cost-effective solution.

Although there are great enhancement of virtualiztion technology, there is not so much in the field of video virtualization. So far, no released virtual machine could provide a modern video card. What they do provide is an emulated slow video card with likely 8mb ram or even worse. It has limited the usability of virtual machine. For example, a game user certainly could not play his/her most favorable 3D game on such a VM. An 8mb ram might not be sufficient to render a quite large LCD. Further more, many CAD software requires a compatible video card.

There are other possibilities. When CPU and main memory are fast enough, the GPU could be replaced. Thus, things will be simpler. Only an average video is necessary.

It would be great for people requiring the flexibility of *nix who can't live without games which only have windows versions. In an ideal world, users would be able to
  • switch between VMs as easy as a simple click;
  • run any application at native speed;

Friday, January 18, 2008

When Parted ruins it, Testdisk rescues it

Notice that this article contains many useful yet dangerous tools. You should always NOT use them unless you have to and you know what your are doing.

Yesterday, I was going to make a new Linux LVM partition on the hard disk with a Debian system and a Windows installed. I tried parted (GNU Parted) and everything went well until the misleading command

mklabel LABEL-TYPE create a new disklabel (partition table)
which I thought of labeling the partition, but which actually erase your partition table. This command also gives a warning like
Warning: Partition(s) on /dev/sda are being used.
Ignore/Cancel?
and if you ignored it, you would regret.

So the partition table was wiped out. However, the good news was that only the partition table was lost. Parted provided a rescue command which is useless. Let's just skip the boring part of trying 'rescue 0 20GB' a hundred times. After several search queries, I came to gpart (not GParted). It turned out to be of use. With

gpart /dev/sda
I found an NTFS partition and a Linux swap partition. The gpart did not recognize ext3 and lvm2. Then I found the last release dated back to 2001, and it certainly won't support these new formats.

Whenever you are to give up, the savior comes.

Testdisk came in and became handy. Comparatively, it is user-friendly. Testdisk analyzed the disk and gave out a list of partitions it found. I modified some attributes (boot flag etc) and write the partition table back.

It should marked the end of the partition table recovery, but things were a little more complicated than expected.

The partition was not ordered correctly. It is not a problem of testdisk though. Testdisk ordered the partitions by cylinder number, but the partition table on the disk used to be in random order. The reason for that is when I was installing debian and made partitions using partman, the ordered was determined by the operation order. I had to change the partition order back manually. I chose fdisk this time. It never modify the partition table before the w (write) command.

  1. First, list the partitions using fdisk and record them somewhere.
    fdisk -l /dev/sda         (list by cylinders)
    fdisk -ul /dev/sda (list by sectors, it will be of use)
    fdisk -u /dev/sda (using a sector mode)
  2. Second, delete those partitions not in the expected order with command d

  3. Third, add primary partitions using the expected number. (command n).
    Add an extended partition that will contain all logical partitions.
    Add logical partitions from number 5. Note that you can't choose the partition number for logical partitions.

  4. [Very Important] Fourth, verify that the sectors you entered are EXACTLY as the listed ones.
    Set the boot flag on the boot partition.
    Set partition types (LVM, NTFS, FAT etc.).
    Make sure that everything is correct and you know what you are doing.

  5. Finally, write back and quit with w. [Dangerous]

I verified that the partition table is correct with testdisk.

And re-install grub on MBR. With

grub-install /dev/sda

Now the most exciting part. Reboot...

Everything went and the system was not affected.

Links:

Monday, December 24, 2007

Merry Christmas & Happy New Year

Merry Christmas and Happy New Year to all, if any, readers, no matter it is in winter or in summer at your location. :D

Wednesday, December 19, 2007

iocharset, deprecated option but might be of use

Thanks to various encoding systems which makes the world diverse.

First of all, this is extracted from manual from mount on Debian Linux
Mount options for ntfs
iocharset=name
Character set to use when returning file names. Unlike VFAT,
NTFS suppresses names that contain unconvertible characters.
Deprecated.

nls=name
New name for the option earlier called iocharset.

utf8 Use UTF-8 for converting file names.

Typically, you don't need the iocharset option when you are using an UTF-8 locale. But when it comes that you have to transfer some ugly-named files to other systems that don't have an UTF-8 support (or when you can't turn it on, like on Windows), the iocharset option turns out useful. What I was doing recently is to transfer files from an old PC to a new laptop. The files are in an NTFS partition, but for some reason, the driver is used as a secondary HDD on a running Debian Linux, which means I can not unplug it or reboot to windows. The new laptop is running windows. To solve this problem is easy. Mount the NTFS partition and transfer files using scp. (Installation of scp clients on the laptop is necessary though). As my windows is using codepage 936 or GBK as default, mount the partition as follows
mount -t ntfs -o iocharset=cp936,umask=022 /dev/hdd1 /mnt/ntfspart
and that is all. And the command (pscp is a scp client from putty)
pscp -ls someone@someaddr:/some/dir
returned well formed results, which will makes me happy.

Note that you might mess up the file names on your NTFS partition when writing data using an incorrect codepage. Please make sure you know what you are doing before striking the enter/return key.

Friday, December 7, 2007

Separation of Users and Applications

Service - Separation of Users and Applications

In the very past, we bought a new computer, and then install the operating system and applications and start using it.

Recently, we bought computers with bundled applications, many of which unnecessary or unwelcome, and start to uninstall them and install what we really need and then start using it.

In the future, can we just buy a new computer and start using it right after?

Accept it or not, software upgrades fast, not slower than the double of power of CPU. We have new features every day, every hour, every minute. However, customers can not afford such upgrading expense. This is especially true when there are huge number of users, or the product is for general public. Instead of letting users dealing with complex and boring installations or upgrades, why not just let the talent computer engineers deal them more efficiently.

Internet and web service provides a possible way to separate customers from software applications. However, we don't care whether it is web based applications or not. And it is not likely that all applications will be web-based in the future. Hardware could only be replaced manually. However, software can be upgraded 'forever' with a connection to the cyberspace. No matter it is operating systems or not. Theoretically, a running process can even update itself.

Up till now, there is no OS that can get upgraded automatically without causing trouble and without human beings' interfere. Debian and Ubuntu are among the not-so-perfect ones. They are in so far the best ones. You can get your software upgraded with ease most of the time. Although they are still far from perfect.

Compared to web based applications, operating systems are far more complicated. One reason is that no matter how complex the web pages are, there is only one way to interact with them, i.e. through browsers or explorers, while a operating system has to deal with all kinds of devices as well as supporting various applications. Another reason is that there are existing standards for web pages or web services. This makes things easy and coherent.