Monday, November 12, 2007

No More Hard-to-Read Chinese Text!

NEWS: Currently the font is included in the Ubuntu Hardy Heron repository! Install the "ttf-wqy-zenhei" package

Recently I have been continually fine-tuning my Ubuntu to give me the best (i.e. most comfortable) environment for me to work with. One of the major quirks is the hard to read Chinese fonts, which is due to the fact that it's pretty hard to hint SongTi (宋体) fonts.

Somehow it's pretty surprising that Ubuntu's repositories doesn't come with HeiTi (黑体) or Chinese Gothic fonts, which has thicker strokes. But luckily there's this open source, GPL'ed font foundary, Wen Quan Yi, which does provide their HeiTi variant called "Zen Hei". Basically what I do is grab the package, install the Debian package (execute `dpkg --install wqy-zenhei-0.2.15-1.deb`), adding the configuration to match the font in my /etc/fonts/local.conf file (see my previous article for details) and lastly execute `sudo fc-cache -fv`.

Once I done that and restart my applications, now I had 100% reliable and perfectly readable Chinese pages! :D

Friday, November 09, 2007

From Gentoo to Ubuntu

By some circumstances, I found myself migrated to Ubuntu Linux from Gentoo. It's not a intentional flavour change, to be honest: but rather just happened that I royally screwed my partition table as I shuffle them around. An attempt to raking in dormant partitions (mainly my old Linux installations) and salvaging them for better use ended up having myself wiped out the LVM partition that my Gentoo lives in. Whoops! No doubt that fdisk may as well be your best friend or your best enemy.

Luckily I have my home partition and personal data separated out and I didn't have any production MySQL databases (phew...), so I'm still safe :). (that coming from someone who have screwed up Linux several times, my best advice is better to keep all your important out from your OS partition :p)

So, mainly due to my own laziness of not wanting to spent a whole day just to set a razor-edged Gentoo (i.e. which is very time consuming but you do get to craft every single nook-and-cranny of the system: customized the way you wanted it to), I opt for Ubuntu instead.

But that said, installing Ubuntu using their Desktop Installation CD is only a breeze if you didn't find the need to use LVM. But in the end, it's not as hard as it seemed as Chantra from Debuntu.org did posted up a tutorial on how to do so, which basically needs you to:

  • Execute `sudo apt-get install lvm2`
  • Setup your LVM partitions; or if you have an existing LVM setup, just activate the volume group by executing `vgchange -ay VolGroup` (where VolGroup is the name of your volume group)
  • Once make sure that the logical volumes have entries in /dev/VolGroup/... (again, VolGroup is the name of your volume group), kick up the installation GUI. Remember to use the "Manual" option when you reached the partitioning section
  • Once installed, DON'T REBOOT FIRST! Mount all your logical volumes and the /boot partition into /target. Chroot into /target, perform an `apt-get update` there then install LVM2 (Otherwise you won't be able to boot into your computer)

So now I'm running Ubuntu and got it setup in a breeze and I'm pretty impressed on how polished the Ubuntu team have made it to be. Coming from a Gentoo background, I'm really impressed because if you happen to build everything yourself, you'd end up noticing a lot of small quirks which give some rough bumps in interacting with the user interface (especially Compiz, during my days in Gentoo I never seemed to get it "right").

And never needing to leave my PC overnight to let emerge do it's thing (i.e. compiling updates) is a definite plus :).

Sunday, October 28, 2007

RedesignMalaysia: Glitch or Gone?

Was browsing around today and noticed that Redesign Malaysia's site was gone!

For the uninitiated, Redesign Malaysia is "an initiative to improve Malaysia’s broadband facilities" (extracted from their site as last cached by Google), which provides information and news of all broadband providers in the country as well as serves as a platform for the rakyat (Malay word for "citizens") to voice their complains and concerns on the services being provided or any development that will hinder the development of wider and faster adoption of broadband.

I'm not sure what had happened behind the scenes, but should we lose the site, it would be a great loss for Malaysia. Just hope that it's just a temporary matter that will be solved swiftly.

Thursday, October 25, 2007

Meebo Firefox Extension

Meebo just recently launched its own extension, aptly named as Meebo Firefox Edition. The extension basically adds a Meebo buddy list sidebar (which can be hidden) and a couple of bells and whistles that makes it more useful than a glorified sidebar.

The major convenience that the sidebar provides is the automatic login feature, which is able to log into your IM account automatically when Firefox is started. Once you logged on to Meebo, you'll see your buddy list in the sidebar, which you can select which friend you'd like to message and set your status. The sidebar is resizeable and with the minimum allowable width, the buddylist is still usable without taking up too much screen real estate. The sidebar can be hidden as well, which you can toggle whether it is shown or hidden by clicking on the Meebo icon (see red circle on the first image).

One nifty feature they had included is the alert box feature, which is a small blue box which will pop up on the bottom-right corner of the screen to notify you when your friends were online or when they messaged you. The neat thing is that the alert box is shown even when Firefox is minimized. Not only that, in the Options dialog you can configure what Meebo Firefox Edition should alert you and when it should keep quiet.

At the time of writing it's still in its early stage of development, it still require the actual Meebo page to be loaded in a tab, which is required to contain all the conversation windows and provide other functionality that is not implemented in this extension. So at the moment, what it provides is still pretty basic but it's worth the install just for the desktop alert feature. But I'm definitely looking forward it becoming a full fledged IM extension.

Here's a feature (wish) list that I'd hope to see in future releases:

  • Theme-able skins
  • Able to configure where the sidebar should be located: either left, right or as a floating window. What I would find it nice is probably something like Google Notebook which is capable to slide out from the bottom
  • The login screen should allow a narrower width
  • Buddylist groups
  • I know this is in the works but I can't resist saying this: Make it standalone without requiring the Meebo page to be loaded ;) (that would mean one less tab :p)
  • Audio alerts/notification
  • Capability to set MSN display name

To install the extension, head to http://www.meebo.com/firefox and try it for yourself :).

UPDATE: I did forget to mention a quite annoying quirk that if you use the auto sign-in feature, it'll always open a new tab loading Meebo's site. This is quite annoying because I personally use the auto-load previous session feature in Firefox: which make it always end up with two tabs loading Meebo and I have to take the trouble to close one of them. Hopefully that get resolved soon (but then again, the "no tabs" feature is on the way :) ).

Tuesday, October 09, 2007

Follow-up to Spam Blogs

It had been a few weeks after I found out the previous Blogger subdomain of my site was maliciously occupied by a spam blog which not only filled with random content, it also shown deceiving full-screen ad that claims to be anti-spyware but actually attempts to install malicious software in your computer.

So I had filed a spam complaint to Blogger, and the next day the first thing I saw is the deceiving full-screen ad was gone, doesn't automatically attempt to install malicious software, but the page still remained intact with spam. Then I sort of let the issue slide.

Then today, out of curiosity, I revisited my old real-estate and pleasantly surprised that apparently Blogger had closed down the previous site and open it up for others to occupy it. Apparently it seemed that Hayden had picked it up and posted his new blog there, which is also a computer tech blog and the content seemed very promising. Looking forward to read more from him/her. :)

Other than that, I'm glad that Blogger was fast to resolve and had actually taken steps to get rid of spam blogs. Despite the fact that I didn't follow things up on a daily basis, but the fact that they took action is commendable. Good job! :)

Thursday, September 20, 2007

Spam Blogs

Once upon a time, The Digital Blue Wave does not resides at the same URL as what it is today: I migrated it to another "virtual real estate" (read: subdomain) in the same "neighbourhood" (Blogger).

Apparently months later after the move, my friend, Eng Lee told me that my old space was occupied. Just out of curiosity, I paid the newcomer a visit. And boy I was surprised!

Nastily surprised, in fact.

Yes, you probably could have guessed it: it has become a spam blog, much worse than one, in fact. It's pretty funny to see how creative those spammers had become, and in the end of the "scan", they even attempted to give me a fishy download file, which that could anything but a nice present for your computer. (well... unless you liked the idea of having your computer spied on)

And they are smart enough for not making it easy to report it as inappropriate (you know, there's a "Flag as inappropriate" button on the Blogger navigation bar on top that you can click on). Even with my attempts of not letting the mock malware scanning screen shown by disabling all graphics, CSS and Javascript, the "Flag as inappropriate" button is no where to be seen! O_O

I have to say that spammers are really a smart shady bunch indeed.

In the end, after rummaging around with Google, I finally found Blogger's spam reporting page (really, they should have make it more.... umm, visible). Just filed my report and let's see how long does it take for Blogger to respond to that one.

In the meantime, I got around to install GreaseMonkey and a script to make sure the damn flag is not made hidden by those hideous spammers. Hope that would greatly help me to weed out those spam blogs as soon as I see one.

Tuesday, August 28, 2007

Gentoo "emerging" pains of upgrading to Python 2.5

And I thought it's time for me to upgrade to Python 2.5, partly due to a particular masked package and partly due to the fact that I had the itch to upgrade that particular package. So I gone ahead to doing that, happy that it's successful, and sort of left it there for a few days.

A few days later, I do the oh-so-routine of "emerge -uD world" and expect it to run smoothly, only to be proved wrong when emerge start to act up on me. One of the most prominent errors being "ACCESS VIOLATION SUMMARY" in big red text before the emerge fails. Then some of them seemed to have problems with xml2po.

Apparently when python is upgraded, python packages and a couple of programs that relies on it needs to be updated as well. This can be done by executing "python-updater" right after you do the release update of python. And later do the re-emerging of gnome-doc-util, just to be on the safe side.

Currently these steps weren't officially documented in Gentoo and the mention of it is in the GNOME 2.12 upgrading guide. But then again, Python 2.5 is still under the unstable flag, so such inconveniences was expected. Hopefully by the time when the maintainers believe Python 2.5 is ready for prime time (i.e. become "stable") they will issue a notice in the Gentoo newsletter or something.

[P/S: Still haven't got around unmerging Python 2.4 though, but probably I'd do that later]

Tuesday, August 14, 2007

Annoyances: Firefox on FAT, Rhythmbox with iPods

There had been two minor annoyances that I had faced until now:

Mozilla Firefox downloading problems on FAT32 partitions

The Problem: Personally I used a FAT32 partition where I placed all my data that is to be shared, so naturally all downloads will go there. However, downloading with Firefox had been a pain to me: it tends to give me zero bytes zip file downloads as well as the behaviour of appending something extra at the back of the filename (for instance, music.mp3 will become music.mp3.bin, or that package.tar.gz will become package.tar.gz.tar).

Honestly speaking, that's extremely annoying.

But apparently I'm not alone, and the reason for that happening, according to one of the analysis being done "In a way it seems to be a permission problem... As soon as the Fat32 partition is mounted with permissions rwx on files and directories, aLocalFile is always executable. When downloading a regular file (something not a binary executable), Firefox seems to set the mode of targetFile to 600, so the expression is true and I get a aborted download and a 0 byte file."

The Fix: So in a way, this problem highlights one of the biggest mistake I had made to my current Linux setup: I set the mount parameters (/etc/fstab) for my FAT32 partition wrongly. I set the fstab entry as "umask=0007", which is blatantly wrong because that means that all files and directory are set as executable. This can prove to be a great security risk as I might accidentally execute something nasty without me knowing it.

The more correct way of setting the /etc/fstab entry is to utilize the fmask (file permission mask) and dmask (directory permission mask) parameters, which should be set to something like this "fmask=117,dmask=007", equivalent to allowing read and write (but not execute) to files and all permissions to directories. And that other users whom are not the owner or within the designated group are not able to access it.

After that is done, remount your partitions and Mozilla Firefox will now download files into FAT32 without problems. (other users reported that this is also the solution for the same problem in NTFS)

However, it'd be nice if Firefox can acknowledge and fix this minor pet peeve. Or at least throw some sort of a rejection or warning message would be better.

Rhythmbox doesn't actually "delete" files from iPod

The Problem: Having an iPod myself, the ability of synchronizing songs from Rhythmbox is definitely a convenience to myself without having to rely on iTunes. However, easy synchronization is only half of the story; deleting them from your iPod is completely different story altogether.

Now, as a user, I came to expect that I can free up some disk space by right-clicking the songs that I don't want anymore from my iPod's playlist and select the "Move to wastebasket". End of story... or is it? The actual situation wasn't completely so: Yes, the playlist entries were removed, but it doesn't free up any disk space on my iPod at all! Not to mention that my desktop Trash icon doesn't show any indication that the files had been there for me to cleared away.

Now, that means that the files were dangling somewhere in my iPod and search for these orphans are a complete pain. And it just doesn't make any sense to format my iPod completely because of that either. Double whammy! ARGH~~~!!!

The Fix: Searching online, apparently this issue has been in Rhythmbox's Bugzilla for quite some time. And worse, the maintainers can't seem to agree the behaviour of "Move to wastebasket" option... for more than one year!

Although someone has made a patch which does delete the files in iPod from Rhythmbox, if you are having some reason that patching it on your own is not an option (to me it's just because I hate to make a local portage overlay ebuild of Rhythmbox every time the software is updated), there's another workaround to it.

The workaround is that after you mounted your iPod, go to the root directory of your iPod and add the ".Trash-[username]" directory, where [username] is the username which you usually use in your Linux instance. Which now the "Move to wastebasket" option will move the files that you chose to removed there. And to free up iPod's disk space, just delete the files manually.

I know, I know, it's a two steps process. But it's better than formatting my iPod completely. And until the time that the maintainers agree that deleting files from the iPod is perfectly OK (or at least have some other intelligible solutions to the problem), that's the safest way to do it.

Probably it might be a good time for me to search/write a Rhythmbox plugin that does just that.

Monday, August 13, 2007

Creating your own OpenSearch plugin for Firefox

Personally, I liked the search bar feature which is now a staple for all major web browsers already. However there are times when you found out that people may not have created a search plugin for that one site you frequent? For my case, I needed a search plugin for BitEx, a Chinese-Japanese dictionary but I can't find it at Mycroft. (the default place which Firefox points for users to find custom search plugins)

So basically you can either write it manually using a normal text editor or the automated way provided by Mycroft.

To do it automatically (Recommended!), you can use Mycroft's Submit plugins link, which will show you a simple form for you to fill up. The more important part is to fill in the "Search URL" field. Basically you can either view the HTML source or just do a normal search in order for you to get the search string being used, and then replace the parameters containing your keywords into {searchTerms}.

For instance, after I submitted a search at BitEx, the address bar now shows "http://www.bitex-cn.com/search_result.php?deal_type=jp2cn&keywords=%E6%97%A5%E6%9C%AC". Knowing that the "keyword" parameter is used for my search term, the "Search URL" field should be filled as "http://www.bitex-cn.com/search_result.php?deal_type=jp2cn&keywords={searchTerms}".

Now, make sure you put a meaningful plugin name and description and make sure what encoding that the webpage is using, especially if you are dealing with sites that was in a foreign language. Some of them aren't using Unicode yet so it's important to make sure that it's set correctly or your search plugin may be rendered useless.

Now, once everything is done, press the "Generate plugin" button and the textfield below will show the xml code of your plugin. I greatly recommend that you test your plugin once by saving the xml as a normal xml file and copy it to your search plugin folder. In Linux, it'd typically be stored in "~/.mozilla/firefox/[some random string]/searchplugins" folder. Note that [some random string] differs from each user profile. Restart your Firefox browser and test your plugin. Once confirmed that it's working, please do others a favour by submitting it to Mycroft. That'd be extremely helpful to other users.

To do it manually, you can refer to the "Creating OpenSearch plugins for Firefox" tutorial at Mozilla Development Center. Here are the steps that I used:

  1. Open a new xml file, which in this case I named it as bitex.xml
  2. Copy the template from the tutorial above
  3. (Optional) Download the icon file from BitEx and edit it. The reason for me doing that because the icon file is extremely large, so I have to trim the fat myself before proceeding to the next step
  4. Using the data: URI kitchen, get the xml data representation of the icon. Remember to tick the base64 checkbox located on top of the form, right next to "Title" text field. Then you either input the URL of the icon or upload your own (if you have edited one yourself) and press the "Generate" button. Copy the link which is presented to you and paste it between the <Image> tags. (see template)
  5. Now, substitute all necessary fields shown in bold in the template file. Here's my quick explanation of how to fill in the values:
    • engineName: The name of the search engine
    • engineDescription: Your description of the search engine
    • inputEncoding: The input encoding used, typically UTF-8
    • imageData: The image data that you have generated in the previous step
    • method: Either GET or POST. Typically GET
    • searchURL: The base URL of the search engine, its the same as my previous example (see "To do it automatically" section)
    • (Not required) paramNameN and paramValueN: Used to pass parameters in the search requests. Typically not required unless the engine uses the POST method, in which you have to fill in such data
    • (Not required) suggestionURL: If the search engine supports the suggestion feature ala Google Suggest, then it'd be nice to fill this in
    • searchFormURL: The link to the search page, useful if users want to access the search page directly
  6. Once you are done, save the xml file and copy it into your search plugins folder (see "To do it automatically" section)

Friday, August 10, 2007

Rsync from Windows to Linux

With the mounting documentations that I'm having at work, there's always the insecurity that losing them, especially those "critical work-in-progress" documents. To most of us, having some sort of an easy backup solution is a must, but "making things easy" is one of the biggest hurdles that I ended up delaying to find the solution until recently.

And so I bumped into rsync, which is a fast and secure way to perform backups. And having it installed by default in our office's development server (a Redhat Enterprise Linux 4), I sort of gave it a go.

So the idea is to have a shortcut at windows so that it can mirror all important documents into Linux, which goes through rsync. Since Redhat have rsync daemon setup to run via xinetd, so the first thing is to setup rsync client for Windows, which is a piece of cake if you install Cygwin packages. Gaztronics.net provides a good tutorial for it (See 1. Cygwin and 3. Client section).

All is good but now the problem is that everytime when rsync is executed the server always asks for a password. Reason being the rsync that came with Redhat using SSH as the transport protocol, which means you can't simply do a "rsync --password-file=[file]". To automate the authentication step (i.e. not needing to key in the password every time), Troy Johnson had a tutorial which explains how to do it.

Just for your quick reference, this is the big picture on what I have done ([text in square brackets] denote fill in the blank fields :) ):

  1. Install rsync and ssh Cygwin packages in Windows
  2. Perform a rsync transfer to make sure that it works (basically just a "rsync [local file] [linux-username]@[linuxserver-address]:[remote directory]" would do)
  3. Perform a ssh-keygen at Windows to get a public-private key pair (*Note: You'd have to use "ssh-keygen -t dsa -b 1024 -f [key filename]" command)
  4. Transfer the public key (the file with the .pub extension) to Linux
  5. Copy the contents of the public key into ~/.ssh/authorized_keys and make the necessary modifications (See Troy Johnson's tutorial above)
  6. Perform a rsync transfer test again to make sure that it works and without requiring a password from you ("rsync -e "ssh -i [private key file]" [local file] [linux-username]@[linuxserver-address]:[remote directory])
  7. Write a batch script (refer to Gastronics' tutorial) which automates the whole backup process
  8. Add the shortcut on your desktop and your done :)

Note that you might face some problems if you have directory names having spaces (especially if you want to backup documents in your My Documents folder. Basically here's my working script for your reference:
@cls
@echo off

rem Rsync job control file

set DOCROOT=/cygdrive/c/Documents and Settings/shleong/My Documents

C:\Cygwin\bin\rsync -e 'ssh -i rsynckey' -vrtz --delete --include-from='%DOCROOT%/bin/filelist' '%DOCROOT%/' shleong@linuxserver:docstore

Monday, July 30, 2007

Solving unreadable Simplified Chinese text on Gentoo

It's been a while I have been facing font display issues with Simplified Chinese text in my Gentoo machine. Main reason being the fact that without special fontconfig configuration, it tends to mix Sungti (宋体) and Kaiti (楷体) fonts to display Simplify Chinese text. Not only it's aesthetically unpleasing to see two different fonts on the same line, Kaiti is extremely hard to read under small font sizes due to font hinting. Worst being sometimes you can only see a character space filled random pixels (due to the line too thin to be rendered on screen after hinting) and it's pretty annoying to enlarge your font-sizes just to read those characters.

The solution can be found in this Chinese article that I had found online. For those who aren't all that proficient in Chinese, here's my own translation to it:


Title: Font problem in Gentoo

by yangtse (?)

Q: I'm using SimSun font in my Gentoo machine. But I don't like how the English alphabets looked in SimSun, is it possible to set the English alphabets to be displayed using other fonts, while still having Chinese characters displayed using SimSun font?

A: Yes. That's how it's usually done. But most users don't use SimSun; use Uming and WenQuanYi instead.

In /etc/fonts/local.conf, configure the fonts that you wanted in the serif, sans-serif and monospace font family: Specifying your font of choice for Roman characters first, then specify the Chinese fonts that you wanted next. Then configure KDE or GNOME to use these fonts as the default display font.

Please refer to my /etc/fonts/local.conf configuration:

<?xml version="1.0"?>
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>Bitstream Vera Serif</family>
<family>DejaVu Serif</family>
<family>AR PL ShanHeiSun Uni</family>
<family>WenQuanYi Bitmap Song</family>
<family>AR PL ZenKai Uni</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
<family>AR PL ShanHeiSun Uni</family>
<family>WenQuanYi Bitmap Song</family>
<family>AR PL ZenKai Uni</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Bitstream Vera Sans Mono</family>
<family>DejaVu Sans Mono</family>
<family>AR PL ShanHeiSun Uni</family>
<family>WenQuanYi Bitmap Song</family>
<family>AR PL ZenKai Uni</family>
</prefer>
</alias>
<match target="font">
<edit mode="assign" name="antialias">
<bool>true</bool>
</edit>
<edit mode="assign" name="autohint">
<bool>false</bool>
</edit>
<edit name="hinting">
<bool>true</bool>
</edit>
</match>
<match target="font">
<test name="family" compare="contains">
<string>Song</string>
<string>Sun</string>
<string>Kai</string>
<string>Ming</string>
</test>
<test name="weight" compare="less_eq">
<int>100</int>
</test>
<test compare="more_eq" target="pattern" name="weight">
<int>180</int>
</test>
<edit mode="assign" name="embolden">
<bool>true</bool>
</edit>
</match>
<match target="font">
<test name="family" compare="contains">
<string>Song</string>
<string>Sun</string>
<string>Kai</string>
<string>Ming</string>
</test>
<edit name="globaladvance">
<bool>false</bool>
</edit>
<edit name="spacing">
<int>0</int>
</edit>
<edit name="hinting">
<bool>true</bool>
</edit>
<edit name="autohint">
<bool>false</bool>
</edit>
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<test name="pixelsize" compare="less_eq">
<int>18</int>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
</fontconfig>

Q: Where can I find these fonts?
A: Please emerge these packages: media-fonts/wqy-bitmapfont, media-fonts/arphicfonts



Additional steps

Once you have copied and saved the above /etc/fonts/local.conf file, perform the following command to refresh the font cache:
fc-cache -fv

You'd have to restart your applications in order to see the effect.

[Original article link]