Nitin Verma’s Blog

Leadership and the Person – Qualities of an Aspiring Leader

A blog by Bharath Kalyanram, joyful leader and a good friend.

Moore served as executive vice president of Intel until 1975, when he became president and chief executive. He was elected chairman in 1979 and remained CEO until 1987. He was named chairman emeritus in 1997.

Asked what he would do if he were a youngster in college again, Moore paused before saying, “I’d probably look at something more in the biology mold. The interface between computers and biology now is a very interesting area.”

“It’s an exciting time,” Moore, an avid deep sea fisherman, said later in the discussion. “I’d love to come back in 100 years and see what happened in the meantime.”

Gordon E. Moore
Moore’s Law
2007 – Intel Developer Forum
“I didn’t think it would be especially accurate.”
scanning-beam interference lithography

http://www.eurekalert.org/multimedia/pub/web/878_web.jpg
I landing on this page while reading about chimpanzee to make my daughter understand different primates. This article talks about similarities between different chromosomes of Humans and Chimps. Interestingly the autosome chromosomes separated 6-5 millions years ago but X chromosome only 2-1 million years ago. Theory says that Hybrids were interbreeding for long time before the final separation into Pan and Homo, about for 4 million years. Just think of how many interesting hybrids would have been created in this era. Leaving that why can not we find one now or a fossil ?

1. Search for fonts

$ apt-cache search $favorite_language font
This would search fonts for you, and would probability end up getting the stuff from ubuntu universe.

ttf-ancient-fonts
ttf-indic-fonts
ttf-kannada-fonts

$ apt-cache search indic font
groff - GNU troff text-formatting system
libqscintilla2-3 - The Qt4 port of the Scintilla source code editing widget
texlive-lang-indic - TeX Live: Indic
texlive-latex-extra - TeX Live: LaTeX supplementary packages
ttf-indic-fonts - Metapackage for free Indian language fonts
ttf-indic-fonts-core - Core collection of free Indian language fonts
ttf-unifont - TrueType version of the GNU Unifont
unifont - font with a glyph for each visible Unicode 5.1 Plane 0 character
xfonts-unifont - PCF (bitmap) version of the GNU Unifont
itrans-fonts - fonts used in the ITRANS Indic text processing system
libhtml-tagcloud-perl - Generate HTML indexes of popular tags
liblasi-dev - development files and documentation for the LASi library
liblasi0 - creation of PostScript documents containing Unicode symbols
qemacs - Small emacs clone editor with HTML and DocBook editing support
qemacs-nox - Small emacs clone editor (without X support)

$ apt-cache search ancient font
texlive-lang-greek - TeX Live: Greek typesetting
ttf-sil-gentium - Gentium extended Unicode Latin font ("a typeface for the nations")
ttf-ancient-fonts - Unicode Fonts for Ancient Scripts
ttf-gfs-baskerville - Ancient Greek font revival
ttf-gfs-complutum - ancient Greek font revival from the University of Alcalá, Spain
ttf-gfs-gazis - ancient Greek font (Byzantine cursive hand style)
ttf-gfs-solomos - ancient Greek oblique font
ttf-gfs-theokritos - decorative Greek font
ttf-linex - Fonts suitable for education and institutional use

2. Install the fonts

$ sudo apt-get install ttf-indic-fonts
$ sudo apt-get install ttf-ancient-fonts
$ sudo apt-get install ttf-kannada-fonts

Installing above three would enable your browser interpret my previous blogs and even let you enjoy running examples on your shell.

For RHEL

Could not find the ancient fonts but everything else is available.

$ sudo yum install fonts-kannada.noarch
$ sudo yum install fonts-tamil.noarch
$ sudo yum install fonts-hindi.noarch

Note: I like Joel’s articles and this one too,
but I saw a problem and highlighted it. Just like a code review comment.
So this blog should be read in the same spirit.

Looking at an article from 2003 on http://www.joelonsoftware.com. As I am no expert, so I wanted to look at the good practices while making i18n sites. Thus landed on the following page.

OtherLanguages

The list has two Indian languages

  1. Tamil (0B80–0BFF) http://tamil.joelonsoftware.com/
  2. Kannada (0C80–0CFF) http://kannada.joelonsoftware.com/

If I open these pages on my firefox, these really do not render well. But sites like Yahoo! Kannada and Yahoo! Tamil do render great.

Is this a browser issue?

No it is not! Joelonsoftware pages do not contain any UTF-8 char in the Tamil or Kannada range. eeeh!!!

How can I say so?

It is simple any char in the range U+0800 to U+0FFF would start with ‘E0’ hex char.
Please read UTF-8 using plain hands for more details.
Chars in range U+0800 to U+0FFF (Tamil and Kannada are in the same range):

  1. 0000 1xxx xxxx xxxx
  2. 0000 1xxxxx xxxxxx << make two group of 6 and one of 4
  3. 1110 0000 101x xxxx 10xx xxxx << now append group of 4 with 1110 and others with 10
  4. E0 XX XX << in Hex
Wanna try the theory?

A file with Tamil and Kannada chars (in UTF-8).


$ cat E0chars
     ௦
0BE6   TAMIL DIGIT ZERO
     ௧
0BE7   TAMIL DIGIT ONE
     ௨
0BE8   TAMIL DIGIT TWO
     ௩
0BE9   TAMIL DIGIT THREE
     ௪
0BEA   TAMIL DIGIT FOUR
     ಙ
0C99   KANNADA LETTER NGA
     ಚ
0C9A   KANNADA LETTER CA
     ಛ
0C9B   KANNADA LETTER CHA
     ಜ
0C9C   KANNADA LETTER JA
     ಝ
0C9D   KANNADA LETTER JHA
     ಞ
0C9E   KANNADA LETTER NYA
     ಟ
0C9F   KANNADA LETTER TTA
     ಶ
0CB6   KANNADA LETTER SHA
     ಷ
0CB7   KANNADA LETTER SSA
     ಸ
0CB8   KANNADA LETTER SA
     ಹ
0CB9   KANNADA LETTER HA

Look for ‘E0’ hex char.

$ awk ' /\xE0/ { print } ' E0chars
     ௦
     ௧
     ௨
     ௩
     ௪
     ಙ
     ಚ
     ಛ
     ಜ
     ಝ
     ಞ
     ಟ
     ಶ
     ಷ
     ಸ
     ಹ

This gives you all Tamil or Kannada chars in UTF-8.

Let us try the same on joelonsoftware & Yahoo! pages

1. Get the pages

$ curl http://tamil.joelonsoftware.com/ > joelonsoftware.tamil.in
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12677  100 12677    0     0   6465      0  0:00:01  0:00:01 --:--:-- 16118
$ curl http://kannada.joelonsoftware.com/ > joelonsoftware.kannada.in
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7383  100  7383    0     0   5155      0  0:00:01  0:00:01 --:--:-- 17198
$ curl http://in.tamil.yahoo.com/ > yahoo.tamil.in
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 47656  100 47656    0     0  99018      0 --:--:-- --:--:-- --:--:--  158k
$ curl http://in.kannada.yahoo.com/ > yahoo.kannada.in
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 46346  100 46346    0     0  78212      0 --:--:-- --:--:-- --:--:--  157k

2. Look for the sequence char

$ ls
E0chars  joelonsoftware.kannada.in  joelonsoftware.tamil.in  yahoo.kannada.in yahoo.tamil.in

$ awk ' /\xE0/ { print } ' yahoo.* | wc -l
78

$ awk ' /\xE0/ { print } ' joelonsoftware.* | wc -l
0

You can not even find a single ‘E0’ hex char on joelonsoftware.
Joel was the article of 2003 just for preaching?
or you forgot by the time Indian language pages were written 😉 ?
Joel if you are reading “I think these pages need your attention”

Looks like these pages are using TSC_Avarangal & BRH Kannada fonts, those do not abide by unicodes.

Appendix

HTML source on tamil.joelonsoftware.com 3rd Jan 2009

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="GENERATOR" content="Fog Creek CityDesk 1.0.7">
<meta name="generator" content="Fog Creek CityDesk 2.0.20" />
<meta name="citydesk" content="7EE7763A/1066" />
<title>Joel on Software - </title>
<style type=text/css>
<!--
@font-face {
    font-family: TSC_Avarangal;
    font-style:  normal;
    font-weight: 700;
    src: url(/EmbeddedFonts/TSCAVAR1.eot);
}
@font-face {
    font-family: TSC_Avarangal;
    font-style:  normal;
    font-weight: normal;
    src: url(/EmbeddedFonts/TSCAVAR2.eot);
}
@font-face {
    font-family: TSC_Avarangal;
    font-style:  oblique;
    font-weight: normal;
    src: url(/EmbeddedFonts/TSCAVAR0.eot);
}

body {  font-family: TSC_Avarangal,  Georgia, "Times New Roman", Times, serif}
.slugTable {  border-top: #666666 solid 1px }
.slugText { color: #666666;
            font-weight: bold;
            font-family: TSC_Avarangal,  Arial; }
.teaser {  font-family: TSC_Avarangal,  Verdana, Arial, Helvetica, sans-serif; font-size: 75%}

-->
</style>
</meta></head>
<body text=#000000 bgColor=#ffffff onload="if (self != top) top.location = self.location" dir="ltr"><table cellspacing="0" cellpadding="0" width="640" align="center" border="0">
<tbody>
<tr>
<td colspan="3"><a href="index.html"><img height="113" alt="Joel on Software" src="Images/global.jpg" width="640" border="0" /></a></td></tr>
<tr>
<td colspan="3"><p><font face="Verdana, Arial, Helvetica, sans-serif"><i><font size="5">Joel on Software</font> &nbsp; <font size="2"></font><font face=TSC_Avarangal>¦Áý¦À¡Õû ÀüÈ¢ §ƒ¡Âø</font></i></font></p>

<p align="left">&nbsp;</p></td></tr>
<tr>
<td valign="top" width="178">
      <p><font size="2"><a href="index.html"><font face=TSC_Avarangal>À¢È"§ƒ¡Âø ¬ý º¡ôð§Å÷" ¸ðΨøû - ¾Á¢Æ¢ø</font></a></font></p>

      <p><font size="2"><a href="http://www.joelonsoftware.com/"><font face=TSC_Avarangal>À¢È"§ƒ¡Âø ¬ý º¡ôð§Å÷" ¸ðΨøû - ¬í¸¢Äò¾¢ø</font></a>    </font></p>
              
      <p><font size="2"><a href="http://www.joelonsoftware.com/navLinks/fog0000000263.html">
      
      <font face=TSC_Avarangal>¬º¢Ã¢ÂÕìÌ Á¢ýÉïºø «ÛôÒ¸ (¬í¸¢Äò¾¢ø ÁðÎõ)</font></a></font></p>
      
      <p><font size="2"><a href="http://www.joelonsoftware.com/navLinks/fog0000000263.html">

      
      </a></font></p>

      
	</td>
<td valign="top" width="12" rowspan="2"><font size="1">&nbsp;</font></td>
<td valign="top" width="450" rowspan="2">
<table class="slugTable" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>

</td>
</tr>
</tbody>
</table>
<br /><font color="#808080"></font>

  

 
<p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p><a href="Articles/HowMicrosoftLosttheWaronA.html"><p>&nbsp;</p></a><br /><font size=1> 08 &#2949;&#2965;&#3021;&#2975;&#3019;&#2986;&#2992;&#3021; 2004 </font></p>
<blockquote> </blockquote> 
<p> 
</p><p> 
</p><p><a href="Articles/CodertoProgrammers.html">Coder to Developer de Mike Gunderloy</a><br /><font size=1> 05 &#2990;&#3015; 2004 </font></p>

<blockquote> </blockquote> 
<p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 

</p><p> 
</p><p> 
</p><p><a href="Articles/FireAndMotion.html">¾¡ì̾Öõ Óý§É¡ì¸¢ ¿¸Õ¾Öõ - ´Õ Ôì¾¢</a><br /><font size=1> 06 &#2972;&#2985;&#2997;&#2992;&#3007; 2002 </font></p>
<blockquote>±ýۼ ÀÄ ¿¡ð¸û þùÅ¡È¸ì ¸Æ¢ÅÐñÎ. (1) §Å¨Ä¢ø ¬úÅÐ (2) ŨÄ¢ø ÀÊôÀÐ, ¸Ê¾í¸û À¡÷ôÀÐ §À¡ýÈÉ, (3) §Å¨Ä¢ø ÓØÅÐõ ¦ºøžüÌ ÓýÀ¡¸ Á¾¢Â ¯½× ±ÎòÐì ¦¸¡ûÇÄ¡õ ±ýÚ §Â¡º¢ôÀÐ, (4) Á¾¢Â ¯½× ÓÊòÐ ¾¢ÕõÒÅÐ, (5) ŨÄ¢ø ÀÊôÀÐ, ¸Ê¾í¸û À¡÷ôÀÐ §À¡ýÈÉ, (6) ¸¨¼º¢Â¡¸ §Å¨Ä ¦ºö ÓÊ× ±ÎôÀÐ, (7) ŨÄ¢ø ÀÊôÀÐ, ¸Ê¾í¸û À¡÷ôÀÐ §À¡ýÈÉ, (8) ÁÚÀÊÔõ ¯ñ¨Á¡¸ §Å¨Ä ¦ºö ÓÊ× ±ÎôÀÐ, (9) ±Êð¼¨Ã ¾¢ÈôÀÐ, (10) ¸½¢É¢ ¦Áý¦À¡Õ¨Ç ¦¾¡¼÷¡¸ §¿Ãõ Á¡¨Ä 7:30 ¸¼ó¾Ð ܼò ¦¾Ã¢Â¡Á¡ø §Å¨Ä ¦ºöÅÐ.
<p><a href="Articles/FireAndMotion.html">8-ÅÐ ÁüÚõ 9-ÅÐ À̾¢Â¢ø ²§¾¡ ´Õ ¾ÅÚ þÕôÀ¾¡¸ §¾¡ýÚ¸¢ÈÐ.</a></p> </blockquote> 
<p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 

</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 

</p><p> 
</p><p><a href="Articles/TheJoelTest.html">§ƒ¡Âø §¾÷×: ¿øÄ ¿¢Ãø ±Ø¾ 12 Àʸû</a><br /><font size=1> 09 &#2950;&#2965;&#3000;&#3021;&#2975;&#3021; 2000 </font></p>
<blockquote><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA" xml:lang="EN-US"><font size="3">¿£í¸û ±ô¦À¡Ø¾¡ÅÐ</font> <a href="http://www.sei.cmu.edu/sema/welcome.html"><font size="3">¦ºÁ¡</font></a><font size="3">¨Åô ÀüÈ¢ §¸ûÅ¢ôÀðÊÕ츢ȣ÷¸Ç¡? ´Õ ¦Áý¦À¡Õû «½¢ ±ùÅÇ× º¢Èó¾Ð ±ýÀ¨¾ Á¾¢ôÀ¢Îžü¸¡É ´Õ §¾÷ó¾ ¸ð¼Á¨ÁôÒ «Ð. ¦À¡Úí¸û!, <i>«ó¾ þ¨½ô¨À §¿¡ì¸¢ô §À¡ö Å¢¼¡¾£÷¸û!</i> «¨¾ô ÒâóÐ ¦¸¡ûǧŠ¯í¸ÙìÌ º¢Ä ¬ñθû ¬¸Ä¡õ. ±É§Å ¿¡ý, ´Õ ¦Áý¦À¡Õû «½¢ «½¢ ±ùÅÇ× º¢Èó¾Ð ±ýÀ¨¾ Á¾¢ôÀ¢Îžü¸¡¸, ´Õ ¸ð¼¨Áô¨À Óý¨ÅòÐû§Çý.<span style="mso-spacerun: yes">&nbsp;</span> þ¾ý º¢ÈôÒ ±ýɦÅýÈ¡ø, þ¾ü¸¡Ìõ §¿Ãõ ¦ÅÚõ 3 ¿¢Á¢¼í¸û ÁðΧÁ. þ¾É¡ø Á¢îºôÀÎõ §¿Ãò¾¢ø ¿£¹¸û §ÁøÀÊôÒ Ü¼ ÀÊì¸Ä¡õ.</font></span> </blockquote> 

<p> 
</p><p> 
</p><p> 
</p><p> 
</p><p><a href="Articles/TopFiveReasonsYouDontHave.html">Top Five (Wrong) Reasons You Don't Have Testers: <font face=TSC_Avarangal>§º¡¾¨É¡¨Ç÷¸û «Á÷ò¾¢ì¦¸¡ûÇ¡¨ÁìÌ Ó¾ø ³óÐ (¾ÅÈ¡É) 
¸¡Ã½í¸û</font></a><br /><font size=1> 30 &#2959;&#2986;&#3021;&#2992;&#2994;&#3021; 2000 </font></p>
<blockquote><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">§º¡¾¨É¡Ç÷¸¨Ç</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">¨ÅòÐ즸¡ûÇ</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">ÓÊ¡¦¾ýÀÐ</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">´Õ</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">§À¡Ä¢ô</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">¦À¡ÕÇ¡¾¡Ãî</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">º¡ìÌ</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman">. </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">þ¨¾ô</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">Àø÷</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">¯½÷ž¢ø¨Ä</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">±ýÚ</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">¿¢¨Éì¸Â¢ø</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">ÁÉõ</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">¦¿¡óÐ</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman"> </font></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: TSC_Avarangal; mso-bidi-font-family: 'Times New Roman'">§À¡¸¢§Èý</span><span style="FONT-SIZE: 12pt"><font face="Times New Roman">.</font></span> </blockquote> 

<p> 
</p><p> 
</p><p><a href="Articles/PainlessSoftwareSchedules.html">Painless Software Schedules - <font face=TSC_Avarangal>¦¾¡ø¨ÄÂüÈ ¦Áý¦À¡Õû ¦ºÂø¿¢Ãø¸û</font></a><br /><font size=1> 29 &#2990;&#3006;&#2992;&#3021;&#2970;&#3021; 2000 </font></p>
<blockquote><font face=TSC_Avarangal>²ý ¡էÁ ¦ºÂø ¿¢Ã¨Ä ¯ÕÅ¡ì¸ Å¢ÕõÒž¢ø¨Ä? «¾üÌ Ó츢 ¸¡Ã½í¸û þÃñÎ. ´ýÚ, «Ð Á¢¸×õ ¸ÊÉõ. þÃñÎ, «Ð ±¾üÌõ ¯¾Å¡Ð ±ýÈ ¿õÀ¢ì¨¸. ´Õ ¦ºÂø ¿¢Ãø §Å¨Ä측¸¡Ð ±ýÈ¡ø À¢ýÉ÷ ²ý «¨¾ ¾Â¡Ã¢ì¸ «ùÅÇ× º¢ÃÁôÀ¼ §ÅñÎõ? ¦ºÂø ¿¢Ãø¸û ±ô§À¡Ðõ ¾ÅÈ¡¸§Å ÓÊÔõ ±ýÚõ, §À¡¸ô §À¡¸ §ÁÖõ §Á¡ºÁ¡Ìõ ±ýÚõ ´Õ ¸ÕòÐ ¿¢Ä׸¢ÈÐ. À¢ýÉ÷ ´ýÚÁ¢øÄ¡¾¾ü¸¡¸ ²ý º¢ÃÁôÀ¼ §ÅñÎõ? <a href="Articles/PainlessSoftwareSchedules.html">ºÃ¢Â¡É ¦ºÂø ¿¢Ãø¸¨Ç ¯ÕÅ¡ì¸ þ§¾¡ ´Õ ¦¾¡ø¨ÄÂüÈ ±Ç¢Â ÅÆ¢!.</a></font> </blockquote> 
<p> 
</p><p> 
</p><p> 

</p><p> 
</p><p> 
</p><p> 
</p><p> <br /><br /></p></td></tr>
<tr><td valign="bottom" width="178">


<font size="2"><a href="http://joel.spolsky.com/"><img height="116" src="Images/TinyJoel.jpg" width="116" border="0" /></a><br /></font><font color="#808080"></font><font face=TSC_Avarangal>§ƒ¡Âø Š§À¡øŠ¸¢ - ¿¢Ô ¡÷ì ¿¸Ã¢ø ¯ûÇ f§À¡ì ìÃ£ì ±ýÈ ´Õ º¢È¢Â ¦Áý¦À¡Õû ¿¢ÚÅÉò¨¾ ¦¾¡¼í¸¢ÂÅ÷. þÅ÷ §Âø Àø¸¨Äì ¸Æ¸ò¾¢ø Àð¼õ ¦ÀüÈÅ÷. ¨Áì§Ã¡º¡ôð, Å¡¸¡õ, ÁüÚõ ƒ¤§É¡ ¬¸¢Â ¿¢ÚÅÉí¸Ç¢ø ¿¢ÃÄ¡Çá¸×õ, §ÁÄ¡Çá¸×õ À½¢Â¡üÈ¢ÂÅ÷.</font>
   



</td></tr>

</tbody></table>

<p>
</p><p>
<hr />

</p><p></p>
<p align="center"><font size="2"></font><font face=TSC_Avarangal>þó¾ Àì¸í¸Ç¢ø ¸¡½ôÀÎõ ¸ÕòÐì¸û ´Õ ¾É¢ôÀð¼ ¿Àâý ¸ÕòÐì¸Ç¡Ìõ.</font><br /><font size="2"></font><font face=TSC_Avarangal>¸¡ôÒâ¨Á 1999-2005 §ƒ¡Âø Š§À¡øŠ¸¢. ±øÄ¡ ¯Ã¢¨ÁÔõ ¬º¢Ã¢ÂÕ째</font></p>
<p style="FONT-FAMILY: arial,helvetica,sans-serif" align="center"><font size="2"><a href="http://www.fogcreek.com/FogBUGZ"><font size="2">FogBUGZ</font></a> | <a href="http://www.fogcreek.com/CityDesk">CityDesk</a> | <a href="http://www.fogcreek.com/">Fog Creek Software</a> | <a href="http://joel.spolsky.com/">Joel Spolsky</a></font></p></body></html>

HTML source on kannada.joelonsoftware.com 3rd Jan 2009

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="GENERATOR" content="Fog Creek CityDesk 1.0.7">
<meta name="generator" content="Fog Creek CityDesk 2.0.20" />
<meta name="citydesk" content="7EE7763A/3718" />
<title>Joel on Software - </title>
<style type=text/css>
<!--
@font-face {
    font-family: BRH Kannada;
    font-style:  oblique;
    font-weight: normal;
    src: url(EmbeddedFonts/BRHKANN0.eot);
  }
  @font-face {
    font-family: BRH Kannada;
    font-style:  normal;
    font-weight: normal;
    src: url(EmbeddedFonts/BRHKANN0.eot);
  }
  @font-face {
    font-family: BRH Kannada;
    font-style:  normal;
    font-weight: 700;
    src: url(EmbeddedFonts/BRHKANN0.eot);
  }
 
body {  font-family: BRH Kannada, Georgia, "Times New Roman", Times, serif}
.slugTable {  border-top: #666666 solid 1px }
.slugText { color: #666666;
            font-weight: bold;
            font-family: BRH Kannada, Arial; }
.teaser {  font-family: BRH Kannada, Verdana, Arial, Helvetica, sans-serif; font-size: 75%}

-->
</style>
</meta></head>
<body text=#000000 bgColor=#ffffff onload="if (self != top) top.location = self.location" dir="ltr"><table cellspacing="0" cellpadding="0" width="640" align="center" border="0">
<tbody>
<tr>
<td colspan="3"><a href="index.html"><img height="113" alt="Joel on Software" src="Images/global.jpg" width="640" border="0" /></a></td></tr>
<tr>
<td colspan="3"><p><font face="Verdana, Arial, Helvetica, sans-serif"><i><font size="5">Joel on Software</font> &nbsp; <font size="2">&nbsp;</font><font face="BRH Kannada">'eÉÆïï D£ï ¸Á¥sïÖªÉÃgï'£À </font>(Joel on Software)<font face="BRH Kannada"> MAzÀÄ ¨sÁUÀ</font></i></font></p>

<p align="left">&nbsp;</p></td></tr>
<tr>
<td valign="top" width="178">
      <p><font size="2"><a href="index.html"><font face="BRH Kannada">PÀ£ÀßqÀzÀ°ègÀĪÀ EvÀgÉ '</font><font face="Times New Roman">Joel on Software</font><font face="BRH Kannada">'£À ¯ÉÃR£ÀUÀ¼ÀÄ.</font></a></font></p>

      <p><font size="2"><a href="http://www.joelonsoftware.com/"><font face="BRH Kannada">EAVèõï£À°ègÀĪÀ EvÀgÉ '</font><font face="Times New Roman">Joel on Software</font><font face="BRH Kannada">'£À ¯ÉÃR£ÀUÀ¼ÀÄ.</font></a>    </font></p>
              
      <p><font size="2"><a href="http://www.joelonsoftware.com/navLinks/fog0000000263.html">

      
      <font face="BRH Kannada">¯ÉÃRPÀjUÉ E-ªÉÄÃ¯ï ªÀiÁr (EAVèõï£À°è ªÀiÁvÀæ)</font></a></font></p>
      
      <p><font size="2"><a href="http://www.joelonsoftware.com/navLinks/fog0000000263.html">
      
      </a></font></p>

      
	</td>
<td valign="top" width="12" rowspan="2"><font size="1">&nbsp;</font></td>
<td valign="top" width="450" rowspan="2">
<table class="slugTable" cellspacing="0" cellpadding="0" width="100%" border="0">
<tbody>
<tr>
<td>

</td>
</tr>
</tbody>
</table>
<br /><font color="#808080"></font>
  
 
<p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 

</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 


</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 

</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 
</p><p> 

</p><p> 
</p><p><a href="Articles/Interviewing.html">¸ÀAzÀ±Àð£À ªÀiÁqÀ°PÉÌ MAzÀÄ UÉj¯Áè UÉÊqï</a><br /><font size="1"> 23-03-00 </font></p>
<blockquote><p><font color="#000000"></font><font face="BRH Kannada" size="+0"></font><font color="#000000"></font><font size="+0">¸ÀAzÀ±Àð£À ªÀiÁqÀĪÁUÀ MAzÀÄ ªÀÄÄRåªÁzÀ «µÀAiÀÄ eÁÕ¥ÀPÀ«qÀĪÀÅzÀÄ. C£ÀºÀð C¨sÀåyðAiÀÄ£ÀÄß vÉUÉzÀÄPÉƼÀÄîªÀÅzÀgÀ §zÀ®Ä M§â CºÀð C¨sÀåyðAiÀÄ£ÀÄß ¤gÁPÀj¸ÀĪÀÅzÀÄ JµÉÆÖà ªÉÄîÄ. C£ÀºÀð C¨sÀåyð AiÀiÁªÁUÀ®Æ zÀĨÁj. AiÀiÁPÉAzÀgÉ ¨ÉÃgÉAiÀĪÀgÀ ¥Àj±ÀæªÀÄ CªÀ£À vÀ¥ÀÅöàUÀ¼À£ÀÄß ¸Àj¥Àr¸À®Ä ªÀåAiÀĪÁUÀÄvÀÛzÉ. ¤ªÀÄUÉ C¨sÀåyðAiÀÄ §UÉÎ AiÀiÁªÀÅzÉà vÀgÀºÀzÀ ¸ÀAzÉúÀUÀ½zÀÝgÉ vÉUÉzÀÄPÉƼÀî¨ÉÃr.&nbsp;</font><font face="Times New Roman"> <a href="Articles/Interviewing.html"><font face="BRH Kannada">¸ÀAzÀ±Àð£À ªÀiÁqÀ°PÉÌ MAzÀÄ UÉj¯Áè UÉÊqï</font> </a></font></p> </blockquote> 
<p> 
</p><p> 
</p><p> <br /><br /></p></td></tr>
<tr><td valign="bottom" width="178">








<font size="2"><a href="http://joel.spolsky.com/"><img height="116" src="Images/TinyJoel.jpg" width="116" border="0" /></a><br /></font><font color="#808080"></font><font face="BRH Kannada">eÉÆÃAiÀÄ¯ï ¸Áà¯ï¹ÌAiÀĪÀgÀÄ £ÀÆåAiÀiÁPïð £ÀUÀgÀzÀ°ègÀĪÀ ¸ÀtÚ ¸Á¥sïÖªÉÃgï PÀA¥À¤AiÀiÁzÀ </font><font face="Times New Roman"><a href="http://www.fogcreek.com/">Fog Creek Software</a> </font><font face="BRH Kannada">PÀA¥É¤AiÀÄ ¸ÀA¸ÁÜ¥ÀPÀgÀÄ.&nbsp; EªÀgÀÄ AiÉÄÃ¯ï «±Àé«zÁå®AiÀÄ¢AzÀ ¥ÀzÀ« ¥ÀqÉzÀ £ÀAvÀgÀ, </font><font face="Times New Roman">Microsoft</font><font face="BRH Kannada">, </font><font face="Times New Roman">Viacom</font><font face="BRH Kannada"> ªÀÄvÀÄÛ </font><font face="Times New Roman">Juno </font><font face="BRH Kannada">PÀA¥É¤UÀ¼À°è ¥ÉÇæÃUÁæªÀÄgï ºÁUÀÆ ªÀiÁå£ÉÃdgï DV PÉ®¸À ªÀiÁrzÀgÀÄ.&nbsp;</font>
   



</td></tr>

</tbody></table>
<p>
</p><p>
<hr />

</p><p></p>
<p align="center"><font size="2"></font><font face="BRH Kannada">F ¯ÉÃR£ÀªÀÅ M§â ªÀåQÛAiÀÄ ªÉÊAiÀÄQÛPÀ C©ü¥ÁæAiÀĪÁVgÀÄvÀÛzÉ.</font><br /><font size="2"></font><font face="BRH Kannada">PÁ¦gÉÊmïºÀPÀÄÌUÀ¼ÀÄ </font>©1999-2005<font face="BRH Kannada"> eÉÆÃAiÀįï¸Áà¯ï¹Ì.&nbsp; J¯Áè ºÀPÀÄÌUÀ¼À£ÀÄß PÁ¢j¸À¯ÁVzÉ.&nbsp;</font></p>

<p style="FONT-FAMILY: arial,helvetica,sans-serif" align="center"><font size="2"><a href="http://www.fogcreek.com/FogBUGZ"><font size="2">FogBUGZ</font></a> | <a href="http://www.fogcreek.com/CityDesk">CityDesk</a> | <a href="http://www.fogcreek.com/">Fog Creek Software</a> | <a href="http://joel.spolsky.com/">Joel Spolsky</a></font></p></body></html>

HTML source on Yahoo! Tamil 3rd Jan 2009
only

awk ' /\xE0/ { print } ' yahoo.tamil.in
    <meta name='description' content='description' content='யாஹூ மாகாண சேனல்களில் உலகம் முழுவதிலும் உள்ள செய்திகள், கருத்துக்கள், பொழுதுபோக்கு, வியாபாரம், ஜோதிடம் & விளையாட்டு செய்திகளை பெற்று, உங்கள் மொழியில் இணைய அனுபவத்தை பெறுங்கள்...'>
    </meta><meta name='keywords' content='keywords' content='யாஹூ இந்தியா தமிழ், யாஹூ தமிழ் சேனல், யாஹூ தமிழ் செய்திகள், இந்திய செய்திகள், தமிழ் செய்திகள், தமிழ் தகவல், தமிழ் வலைதளங்கள், கதைகள், கவிதைகள், புத்தக விமர்சனங்கள், சுயசரிதைகள், காதல், பாலிவுட் செய்திகள், திரைப்பட முன்னோட்டம், திரைப்பட விமர்சனம், தொலைக்காட்சி அட்டவணை, தெராபிகள், உடல்நிலை கோளாறுகள், செய்திகள், நோய் தீர்ப்பு வழிகள், சைவம், அசைவம், காண்டினன்டல், இந்திய, மாகாண, இனிப்புகள், விரைவு உணவு, ஆன்மீக கதைகள் & செய்திகள், பண்டிகைகள், ஆன்மீக புகைப்பட கேலரி, பிரபலமானவர் ராசிபலன், தினபலன், வார ராசிபலன், வாஸ்து, சென்செக்ஸ் நிலவரங்கள், தமிழ் செய்திகள், இந்தியன் யாஹூ, இந்தியா, இந்துஸ்தானி செய்திகள், பாரத், தமிழ் தேசிய செய்திகள், தமிழ் வியாபார செய்திகள், தமிழ் மாகாண செய்திகள், தமிழ் சர்வதேசிய செய்திகள், இந்தியா செய்திகள் தமிழ், பாலிவுட் தகவல், பாலிவுட், தமிழில் பாலிவுட், தமிழ் திரைப்படங்கள், நட்சத்திர நேர்முகங்கள், தமிழ் படங்கள், தமிழ் மூவிகள், பட விமர்சனம், பட முன்னோட்டம், தமிழ் இசை, இந்திய இசை, இந்திய உணவு, இந்திய அறுசுவை, இந்திய அசைவம், இந்தியஅசைவம், அசைவ அறுசுவைகள், சைவ அறுசுவைகள், இந்திய இனிப்புகள், இனிப்பு அறுசுவை, இந்திய உணவுகள், விளையாட்டு தகவல், விளையாட்டுகள், தமிழ் விளையாட்டு செய்திகள், மற்ற விளையாட்டுகள், டென்னிஸ், கால்பந்து, ஷூட்டிங், கால்ஃப் , கிரிக்கெட், கிரிக்கெட் செய்திகள், தமிழில் கிரிக்கெட் செய்திகள், ஜோதிடம், தமிழ் ஜோதிடம், ஜோசியம், தினசரி ராசிபலன், வார ராசி பலன் ஜோதிட தகவல், ஸோடியாக், நட்சத்திர பலன், சூரிய ராசி, சந்திர ராசி, சிறுவர்கள், தகவல் தொழில்நுட்பம், ஐடி, ஐ.டி செய்திகள், ஐடி தொகுப்புகள், தகவல் தொழில் நுட்பங்கள், பொருளாதார சேவைகள், சிறப்பு கண்ணோட்டம் & தொகுப்புகள், தேசிய, சர்வதேசிய, மாகாண, விளையாட்டுகள், வியாபாரங்கள், மும்பை பங்குச்சந்தை, பங்குச்சந்தை.,<!--@@@1000000000_1@@@-->'>
                            <td align="center" valign="middle"><a href="http://in.yahoo.com" target="_blank">யாஹூ!</a></td>
                            <td align="center" valign="middle"><a href="http://in.my.yahoo.com" target="_blank">எனது யாஹூ!</a></td>
                            <td align="center" valign="middle"><a href="http://in.mail.yahoo.com" target="_blank">மின்னஞ்சல்</a></td>                            
                              <td width="31%" align="right" valign="middle">தேடல்</td>
                                <input name="submit" type="submit" title="Search" value="தேடவும்" class="searchBTN"/>
            <a href='/News/index.htm'>முக்கிய செய்திகள்</a>
                                                <a href="/News/International/0901/03/1090103010_1.htm">'சரப்ஜித் சிங் தூக்குத் தண்டனை ரத்தாகலாம்'</a>
                                                <a href="/News/International/0901/03/1090103002_1.htm">ஆளில்லாத கிளிநொச்சி: ராணுவம் பிடித்தது</a>
                                                <a href="/News/International/0901/02/1090102036_1.htm">கொழும்பு நகரில் தற்கொலைப்படை தாக்குதல்</a>
                                                <a href="/News/Regional/0901/03/1090103007_1.htm">திருமங்கலம்: 5ம் தேதி கருணாநிதி பிரச்சாரம்</a>
                                                <a href="/News/International/0901/03/1090103001_1.htm">கிளிநொச்சியை பிடித்துவிட்டோம்: ராஜபக்சே</a>
                                                <a href="/News/Regional/0901/03/1090103008_1.htm">திருமங்கலம்: இன்று முதல் ஜெ. பிரசாரம்</a>
                                    <a href="/News/National/index.htm" class="moreLink">தேசியம்</a>
                                    <a href="/News/International/index.htm" class="moreLink">சர்வதேசம்</a>
                                    <a href="/News/Regional/index.htm" class="moreLink">தமிழகம்</a>
                                    <a href="/News/Sports/index.htm" class="moreLink">விளையாட்டு</a>
    <td class="quadHeader"><a href="/Entertainment/index.htm">சினிமா</a></td>
                      <td class="tdH2"><a href="/Entertainment/Bollywood/0812/31/1081231024_1.htm">நடிகைகளை எரிச்சலூட்டும் சிம்பு</a></td>
                      <td>கோடம்பாக்கத்தில் பலரின் வயிற்றெரிச்சலுக்கு ஆளான நடிகர் என்றால் அது சிம்பு ஒருவராகத் தான் இருக்கும் என்று சொல்லுமளவுக்கு அவரது நடவடிக்கைகள் அமைந்துள்ளன. 'கெட்டவன்' படத்தில் நடிப்பதற்காக தேர்வு செய்த நடிகை லேகா வாஷிங்டன்...</td>
            <a href="/News/index.htm">செய்திகள்</a>
                                                <a href="/News/Sports/0901/03/1090103009_1.htm">ஐ.சி.சி. புகழ்பெற்றோர் பட்டியலில் கவாஸ்கர்</a>
                                                சர்வதேச கிரிக்கெட் பேரவையின் சார்பில் வெளியிடப்பட்ட 'கிரிக்கெட்டில் புகழ் பெற்றோர் பட்டியலில்' இந்தியாவின் சுனில் கவாஸ்கர், கபில்தேவ்...
                                                <a href="/News/Sports/0901/02/1090102010_1.htm">ஆஸி.க்கு தோல்வி ஏன்? வார்ன் விளக்கம்</a>
                                                ஆஸ்திரேலிய அணி புதுவிதமாக சிந்திக்கத் தவறியதால் தான் தோல்விகளை சந்தித்து வருவதாக, அந்த அணியின் முன்னாள்...
            <a href="/News/index.htm">செய்திகள்</a>
                                                <a href="/News/Regional/0901/03/1090103004_1.htm">‌பிரதம‌ருக்கு கருப்புக்கொடி காட்டுவோம்: பழ.நெடுமாற‌ன்</a>
                                                சென்னைக்கு வரும் பிரதமர் மன்மோகன் சிங்கிற்கு எதிராக கருப்புக் கொடி ஆர்ப்பாட்டம் நடைபெறும் என்று தமிழீழ விடுதலை ஆதரவாளர்... 
                                                <a href="/News/Regional/0901/03/1090103006_1.htm">தற்காலிக பணியாளர்களுக்கு அரசு எச்சரிக்கை</a>
                                                'தற்காலிக பணியாளர்கள் போராட்டம் நடத்த முயன்றால், அவர்களைக் காப்பாற்ற அரசு எடுத்த முடிவை மறுபரிசீலனை... 
            <a href="/Health/index.htm">ஆரோக்கியம்</a>
                                                <a href="/Health/Issues/0812/29/1081229027_1.htm">வேலைக்கு செல்பவரா? உணவில் கவனம் தேவை!</a>
                                                அலுவலகம், நிறுவனங்களில் பணி புரியும் பெரும்பாலானவர்கள், பள்ளி- கல்லூரி  மாணவர்கள் போன்றவர்கள் மதிய உணவை...
                                                <a href="/Health/Therapies/0812/29/1081229026_1.htm">மாறு கண் உள்ளவரா நீங்கள்?</a>
                                                மாறு கண் இருந்தால் அதிர்ஷ்டம் வரும் என்று சிலர் கூறுவதுண்டு. ஆனால் இது ஆபத்தானது. அதற்கு உரிய சிகிச்சை மேற்கொள்ள வேண்டும்.
                                            <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tblBdr'><tr><td class='quadHeader'><a href='/News/index.htm'>செய்திகள்</a></td></tr><tr><td class='padding'><table width='100%' border='0' cellspacing='2' cellpadding='0'><tr><td><table border='0' cellpadding='0' class='kreative'><tr><td><a href='/News/Regional/0812/30/1081230005_1.htm'><b>தமிழகம்</b></a> - 'முதல்வர் கருணாநிதியின் விருப்பப்படி கூவம் நதியை சுத்தப்படுத்த நடவடிக்கை எடுப்பேன்' என்று உள்ளாட்சித் துறை அமைச்சர் மு.க.ஸ்டாலின் உறுதியளித்துள்ளார்...</td></tr></table></td></tr><tr><td align='right'><table border='0' align='right' cellpadding='0' cellspacing='3' class='quadFooter'><tr><td align='center' valign='middle'><a href='/News/Regional/0812/30/1081230005_1.htm' class='moreLink'>மேலும் படிக்க</a></td><td width='15' align='center' valign='middle'>|</td><td align='center' valign='middle'><a href='/News/Regional/index.htm' class='moreLink'>மேலும்...</a></td> </tr></table></td></tr></table></td></tr></table>
                                                <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tblBdr'><tr><td class='quadHeader'><a href='/Entertainment/index.htm'>சினிமா</a></td> </tr><tr><td class='padding'><table width='100%' border='0' cellpadding='0' cellspacing='2'><tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td width='48'><a href='/Entertainment/FilmReview/0812/27/1081227035_1.htm'><img src='http://l.yimg.com/t/i/in/lang/Tamil/Entertainment/FilmReview/0812/27/images/tn_1081227035.jpg' width='48' height='47' align='left' class='img'/></a></td><td class='space'>&nbsp;</td><td valign='top'><table border='0' cellspacing='0' cellpadding='0' class='kreative'><tr><td class='tdH2'><a href='/Entertainment/FilmReview/0812/27/1081227035_1.htm'>சிலம்பாட்டம்</a></td></tr><tr><td>ஒரு சிம்பு ஆட்டம் போட்டாலே தாங்காது. இதில் இரட்டை சிம்புவா என்று நினைத்து உள்ளே போனால், அக்ரஹாரத்து அம்பியாக கடவுளை நினைத்து கண்மூடி உருகுகிறார் சிம்பு. அவரது குரலை கேட்டு மதம் பிடித்த கோயில் யானையே அடங்கி நிற்கிறது....</td></tr></table></td></tr></table></td></tr><tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0'> <tr><td><table border='0' cellpadding='0' cellspacing='0' class='kreative'><tr><td class='kBullet' >&bull;</td><td><a href='/Entertainment/FilmReview/0812/20/1081220017_1.htm' >பொம்மலாட்டம்</a></td></tr><tr><td class='kBullet' >&bull;</td><td><a href='/Entertainment/FilmReview/0812/06/1081206020_1.htm' >பூ - விமர்சனம்</a></td></tr></table> </td></tr></table></td></tr></table></td></tr></table>
                                                    <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tblBdr' ><tr><td class='quadHeader'><a href='/Health/index.htm'>ஆரோக்கியம்</a></td></tr><tr><td class='padding'><table width='100%' border='0' cellspacing='2' cellpadding='0'><tr><td valign='middle'><table border='0' cellpadding='0' class='kreative'><tr><td><a href='/Health/Treatments/0812/26/1081226026_1.htm'><b>நல குறிப்புகள்</b></a> - குளிப்பதற்கு வழக்கமாக பயன்படுத்தும் தண்ணீரைவிட ஒரே ஒருநாள் வேறு தண்ணீர் பயன்படுத்தினால் போதும். சிலருக்கு உடனே ஜலதோஷம் பிடித்து, இருமலில் கொண்டுபோய் விட்டு விடும்....</td></tr></table></td></tr><tr><td align='right'><table border='0' align='right' cellpadding='0' cellspacing='3' class='quadFooter'><tr><td align='center' valign='middle'><a href='/Health/Treatments/0812/26/1081226026_1.htm' class='moreLink'>மேலும் படிக்க</a></td><td width='15' align='center' valign='middle'>|</td><td align='center' valign='middle'><a href='/Health/Treatments/index.htm' class='moreLink'>மேலும்...</a></td> </tr></table></td></tr>  </table></td></tr></table>

HTML source on Yahoo! Kannada 3rd Jan 2009.
only

awk ' /\xE0/ { print } ' yahoo.kannada.in
    </meta><meta name='description' content='ನಿಮ್ಮದೇ ಭಾಷೆಯಲ್ಲಿ ಅಂತರ್ಜಾಲದ ಅನುಭವ ಪಡೆಯಿರಿ, ಯಾಹೂ ಪ್ರಾದೇಶಿಕ ತಾಣಗಳ ಮೂಲಕ ನೀವು ವಿಶ್ವದೆಲ್ಲೆಡೆಯಿಂದ ಸುದ್ದಿ, ಮಾಹಿತಿ, ಮನರಂಜನೆ, ವ್ಯಾಪಾರ, ಜ್ಯೋತಿಷ್ಯ ಮತ್ತು ಕ್ರೀಡೆಯ ಕುರಿತ ಸಮಗ್ರ ಮಾಹಿತಿ ತಿಳಿಯಿರಿ...'>
    </meta><meta name='keywords' content='ಯಾಹೂ ಇಂಡಿಯಾ ಕನ್ನಡ, ಯಾಹೂ ಕನ್ನಡ, ಯಾಹೂ ಸುದ್ದಿ, ಸಾಹಿತ್ಯ, ಕನ್ನಡ ಸುದ್ದಿ, ಭಾರತೀಯ ಸುದ್ದಿ, ಮಾಹಿತಿ, ಕನ್ನಡ ವೆಬ್‌ಸೈಟ್‌, ಕಥೆ, ಕವನ, ಪುಸ್ತಕ ವಿಮರ್ಶೆ, ಜೀವನ ಚರಿತ್ರೆ, ಸರಸ, ಬಾಲಿವುಡ್ ಸುದ್ದಿ, ಚಿತ್ರ ಮುನ್ನೋಟಸ ಚಿತ್ರ ವಿಮರ್ಶೆ, ಟಿವಿ ಶೆಡ್ಯೂಲ್, ಚಿಕಿತ್ಸೆ, ಆರೋಗ್ಯ ವಿಷಯ, ಸುದ್ದಿ, ಸಸ್ಯಾಹಾರ, ಮಾಂಸಾಹಾರ, ಕಾಂಟಿನೆಂಟಲ್, ಭಾರತೀಯ, ಪ್ರಾದೇಶಿಕ, ಸಿಹಿತಿಂಡಿ, ಫಾಸ್ಟ್ ಫುಡ್, ಧಾರ್ಮಿಕ ಲೇಖನ, ಗ್ರಂಥ, ಧಾರ್ಮಿಕ ಚಿತ್ರ ಸಂಗ್ರಹ, ಜ್ಯೋತಿಷ್ಯ ಸಲಹೆ, ದಿನ ಭವಿಷ್ಯ, ವಾರ ಭವಿಷ್ಯ, ವಾಸ್ತು, ಸೆನ್ಸೆಕ್ಸ್, ಸೂಚ್ಯಂಕ, ಭಾರತೀಯ ಯಾಹೂ, ಭಾರತ, ಹಿಂದೂಸ್ತಾನ ಸುದ್ದಿ, ರಾಷ್ಟ್ರೀಯ ಸುದ್ದಿ, ವ್ಯಾಪಾರ ಸುದ್ದಿ, ಪ್ರಾದೇಶಿಕ ಸುದ್ದಿ, ಅಂತರ್ ರಾಷ್ಟ್ರೀಯ ಸುದ್ದಿ, ದೇಶೀ ಸುದ್ದಿ, ಬಾಲಿವುಡ್ ಮಾಹಿತಿ, ಚಲನಚಿತ್ರ ಸುದ್ದಿ, ತಾರಾ ಸಂದರ್ಶನ, ಚಲನಚಿತ್ರ, ಚಲನಚಿತ್ರ ವಿಮರ್ಶೆ, ಚಲನಚಿತ್ರ ಮುನ್ನೋಟ, ಸಂಗೀತ, ಭಾರತೀಯ ಸಂಗೀತ, ಭಾರತೀಯ ಆಹಾರ, ಭಾರತೀಯ ಅಡುಗೆ, ಭಾರತೀಯ ಮಾಂಸಾಹಾರಿ, ಮಾಂಸಾಹಾರಿ ಅಡುಗೆ, ಸಸ್ಯಾಹಾರಿ, ಶಾಖಾಹಾರಿ ಅಡುಗೆ, ಭಾರತೀಯ ಸಿಹಿ ತಿಂಡಿ, ಸಿಹಿ ತಿಂಡಿ ತಯಾರಿ, ಕ್ರೀಡಾ ಮಾಹಿತಿ, ಕ್ರೀಡೆ, ಕನ್ನಡ ಕ್ರೀಡಾ ಸುದ್ದಿ, ಇತರ ಕ್ರೀಡೆ, ಟೆನಿಸ್, ಫುಟ್ ಬಾಲ್, ಶೂಟಿಂಗ್, ಗಾಲ್ಫ್, ಕ್ರಿಕೆಟ್, ಕ್ರಿಕೆಟ್ ಸುದ್ದಿ, ಕನ್ನಡದಲ್ಲಿ ಕ್ರಿಕೆಟ್ ಸುದ್ದಿ, ಜ್ಯೋತಿಷ್ಯ, ಕನ್ನಡ ಜ್ಯೋತಿಷ್ಯ, ಜ್ಯೋತಿಷ್ಯ ಲೇಖನಗಳು, ರಾಶಿ ಭವಿಷ್ಯ, ರಾಶಿ, ಸೂರ್ಯ ರಾಶಿ, ಚಂದ್ರ ರಾಶಿ, ಮಕ್ಕಳು, ಮಾಹಿತಿ ತಂತ್ರಜ್ಞಾನ, ಐಟಿ, ಐಟಿ ಸುದ್ದಿ, ಐಟಿ ಲೇಖನ, ಆರ್ಥಿಕ ಸೇವೆಗಳು, ವಿತ್ತ ಸೇವೆ, ಲೇಖನಗಳು ಮತ್ತು ಸುದ್ದಿ ಚಿತ್ರಗಳು, ದೇಶೀಯ, ಅಂತಾರಾಷ್ಟ್ರೀಯ, ಪ್ರಾದೇಶಿಕ, ಕ್ರೀಡೆ, ವ್ಯವಹಾರ, ಸೆನ್ಸೆಕ್ಸ್, ಸೂಚ್ಯಂಕ, ವಿತ್ತ, ಶೇರು ಮಾರುಕಟ್ಟೆ.,<!--@@@1000000000_1@@@-->'>
                            <td align="center" valign="middle"><a href="http://in.yahoo.com" target="_blank">ಯಾಹೂ!</a></td>
                            <td align="center" valign="middle"><a href="http://in.my.yahoo.com" target="_blank">ನನ್ನ ಯಾಹೂ!</a></td>
                            <td align="center" valign="middle"><a href="http://in.mail.yahoo.com" target="_blank">ಮೇಲ್</a></td>                            
                              <td width="31%" align="right" valign="middle">ಶೋಧ</td>
                                <input name="submit" type="submit" title="Search" value="ಶೋಧಿಸಿ" class="searchBTN"/>
            <a href='/News/index.htm'>ಮುಖ್ಯ ಸುದ್ದಿಗಳು</a>
                                                <a href="/News/National/0901/03/1090103001_1.htm">ದಿಲ್ಲಿ: ದಟ್ಟ ಮಂಜಿನಿಂದ ವಿಮಾನ ಹಾರಾಟ ವಿಳಂಬ</a>
                                                <a href="/News/Regional/0901/03/1090103025_1.htm">ಬೆಂಗಳೂರಿನಲ್ಲಿ 100 ಮಹಡಿಗಳ ಗಗನಚುಂಬಿ ಕಟ್ಟಡ</a>
                                                <a href="/News/Sports/0901/03/1090103023_1.htm">ರಾತ್ರಿ ಟೆಸ್ಟ್‌ ಕುರಿತು ಪರಿಗಣಿಸುವತ್ತ ಐಸಿಸಿ</a>
                                                <a href="/News/National/0901/03/1090103026_1.htm">ಮುಂಬೈ ದಾಳಿ ಸೂತ್ರದಾರನನ್ನು ತಮ್ಮ ವಶಕ್ಕೊಪ್ಪಿಸಿ: ಪಿಎಂ</a>
                                                <a href="/News/International/0901/03/1090103018_1.htm">ಕಿಲ್ಲಿನೋಚಿ ಕೈವಶ ಬಳಿಕ ಮುಲ್ಲತೀವು ಮೇಲೆ ಲಂಕಾ ದಾಳಿ</a>
                                                <a href="/News/Regional/0901/02/1090102045_1.htm">ಡಾ.ಅಜಯ್‌ಕುಮಾರ್ ಸಿಂಗ್ ನೂತನ ಡಿಜಿಪಿ</a>
                                    <a href="/News/National/index.htm" class="moreLink">ದೇಶ</a>
                                    <a href="/News/International/index.htm" class="moreLink">ವಿದೇಶ</a>
                                    <a href="/News/Regional/index.htm" class="moreLink">ರಾಜ್ಯ</a>
                                    <a href="/News/Sports/index.htm" class="moreLink">ಆಟೋಟ</a>
    <td class="quadHeader"><a href="/Entertainment/index.htm">ಮನರಂಜನೆ</a></td>
                      <td class="tdH2"><a href="/Entertainment/FilmPreview/0901/02/1090102035_1.htm">'ಹಾಗೆ ಸುಮ್ಮನೆ' ಮಾತನಾಡಿದ ಪ್ರೀತಂ</a></td>
                      <td>ಹಾಗೆ ಸುಮ್ಮನೆ ಚಿತ್ರದ ನಿರ್ದೇಶಕ ಪ್ರೀತಂ ಗುಬ್ಬಿ ಚಿತ್ರ ಬಿಡುಗಡೆಯಾದ ನಂತರ ಪತ್ರಿಕಾಗೋಷ್ಠಿ ಕರೆದು ತಮ್ಮ  ಚಿತ್ರದ ಬಗ್ಗೆ ಒಂದಷ್ಟು ಹೇಳಿಕೊಂಡರು. ಚಿತ್ರಕ್ಕೆ ಭರ್ಜರಿ ಓಪನಿಂಗ್ ಸಿಕ್ಕಿದೆ. ಈ ಚಿತ್ರ ಫ್ಯಾಮಿಲಿ ಪ್ರೇಕ್ಷಕರನ್ನು ಸೆಳೆಯುತ್ತಿದೆ ಎಂದರು.ಮುಂಗಾರು ಮಳೆ ಸಿನಿಮಾದ ನಿರೀಕ್ಷೆಯ ಮಟ್ಟವನ್ನು ತಲುಪಲು ಪ್ರಯತ್ನ ಮಾಡಿರುವುದಾಗಿ....</td>
            <a href="/News/index.htm">ಸಮಾಚಾರ</a>
                                                <a href="/News/Sports/0901/02/1090102030_1.htm">ಚಾಂ.ಲೀಗ್ ಟಿ20 ಹೆಸರಿಗೆ ಉಇಎಫ್ಎ ಆಕ್ಷೇಪ</a>
                                                ಹೆಸರಿನಲ್ಲೇನಿದೆ ಎಂದು ನಾವು ನೀವು ಹೇಳಬಹುದು. ಆದರೆ ಅದೇ ಈಗ ಬಿಸಿಸಿಐಗೆ ಸಮಸ್ಯೆ ಉಂಟುಮಾಡುತ್ತಿದೆ.
                                                <a href="/News/Sports/0901/02/1090102011_1.htm">ಬೀಜಿಂಗ್ ನಂತರ ಕಳೆಗುಂದಿದ ರೈಸ್</a>
                                                ಆಸ್ಟ್ರೇಲಿಯಾದ ತ್ರಿವಳಿ ಒಲಿಪಿಕ್ ಚಾಂಪಿಯನ್ ಈಜುಗಾರ್ತಿ ಸ್ಟೆಪನೀ ರೈಸ್ ತಮ್ಮ ಬೀಜಿಂಗ್ ನಂತರದ ಇಳಿಮುಖದಿಂದ  ಚೇತರಿಸಿಕೊಳ್ಳಲಿದ್ದು....
            <a href="/News/index.htm">ಸಮಾಚಾರ</a>
                                                <a href="/News/Regional/0901/02/1090102047_1.htm">ಸಿದ್ದರಾಮಯ್ಯ ವಿರುದ್ಧ ಖರ್ಗೆ ಪರೋಕ್ಷ ವಾಗ್ದಾಳಿ</a>
                                                ಉಪ ಚುನಾವಣೆಯಲ್ಲಿನ ಸೋಲಿನ ಪರಾಮರ್ಶೆ ಮಾಡಿಕೊಳ್ಳುತ್ತಿರುವ ಕಾಂಗ್ರೆಸ್, ಇದೀಗ ಮಾಜಿ ಉಪಮುಖ್ಯಮಂತ್ರಿ ಸಿದ್ದರಾಮಯ್ಯನತ್ತ ಬೊಟ್ಟು ಮಾಡಿದ್ದು, ತಪ್ಪು ಮಾಡಿದವರು ತಿದ್ದಿಕೊಳ್ಳಬೇಕು
                                                <a href="/News/Regional/0901/02/1090102046_1.htm">ಜ.5ರ ಬಳಿಕ 'ಮೌನ‌‌'‌‌ ಮುರಿದು ಉತ್ತರಿಸುವೆ: ಸಿದ್ದರಾಮಯ್ಯ</a>
                                                ಪ್ರಚಾರ ಕಾರ್ಯದಿಂದ ದೂರ ಸರಿದು ಕಾಂಗ್ರೆಸ್ ಪಕ್ಷದ ಕೆಂಗಣ್ಣಿಗೆ ಗುರಿಯಾಗಿರುವ ಮಾಜಿ ಉಪ ಮುಖ್ಯಮಂತ್ರಿ ಅವರು ಹೊಸ ವರ್ಷದ ಸಂಭ್ರಮವನ್ನು ನೆರೆಯ ಕೇರಳದಲ್ಲಿ ಆಚರಿಸಿದ ಬಳಿಕ
            <a href="/Entertainment/index.htm">ಮನರಂಜನೆ</a>
                                                <a href="/Entertainment/Bollywood/0901/02/1090102034_1.htm">ಮುಂದಿನ ವಾರ ತೆರೆಗೆ ಕೆಂಪ</a>
                                                ಆನೇಕಲ್ ಬಾಲರಾಜ್ ನಿರ್ಮಾಣದಲ್ಲಿ ಅವರ ಪುತ್ರ ಸಂತೋಷ್ ನಟಿಸಿರುವ 'ಕೆಂಪ' ಚಿತ್ರ ಮುಂದಿನ ವಾರ  ತೆರೆಕಾಣುತ್ತಿದೆ. ಸೆನ್ಸಾರ್ ಆಗಿ 5 ತಿಂಗಳಾದರೂ ...
                                                <a href="/Entertainment/FilmPreview/0901/02/1090102033_1.htm">ಯಶ್ ರಾಕಿಂಗ್</a>
                                                ಕಳೆದ ವಾರ ಬಿಡುಗಡೆಯಾದ 'ರಾಕಿ' ಚಿತ್ರಕ್ಕೆ ಭರ್ಜರಿ ಓಪನಿಂಗ್ ಸಿಕ್ಕಿದೆ. ಇದರಿಂದ ಇದರ  ನಾಯಕ ಯಶ್  ತುಂಬಾ ಖುಷಿಯಾಗಿದ್ದಾರೆ. ಕಿರುತೆರೆಯಲ್ಲಿ ಪ್ರಸಾರವಾಗುತ್ತಿದ್ದ...
                                            <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tblBdr'><tr><td class='quadHeader'><a href='/Astrology/index.htm'>ಗ್ರಹ ಗತಿ</a></td></tr><tr><td class='padding'><table width='100%' border='0' cellspacing='2' cellpadding='0'><tr><td><table border='0' cellpadding='0' class='kreative'><tr><td><a href='/Astrology/DailyPrediction/index.htm'><b>ದೈನಿಕ</b></a> - ಶುಭ ವಾರ್ತೆ ಇಂದು ನಿಮ್ಮ ಪಾಲಿಗಿದೆ. ಪ್ರೀತಿ ಪಾತ್ರರಾದವರೊಡನೆ ಇದ್ದ ಭಿನ್ನಾಭಿಪ್ರಾಯಗಳು ಕೊನೆಗೊಳ್ಳುವುದು. ವ್ಯವಹಾರದಲ್ಲಿ ಲಾಭವಾಗಲಿದೆ. ಪ್ರಯಾಣ ಅವಶ್ಯಕ. ನೆಂಟರ ಆಗಮನವಾಗಲಿದೆ.</td></tr></table></td></tr><tr><td align='right'><table border='0' align='right' cellpadding='0' cellspacing='3' class='quadFooter'><tr><td align='center' valign='middle'><a href='/Astrology/DailyPrediction/index.htm' class='moreLink'>ಮುಂದೆ ಓದಿ</a></td><td width='15' align='center' valign='middle'>|</td><td align='center' valign='middle'><a href='/Astrology/DailyPrediction/index.htm' class='moreLink'>ಮತ್ತಷ್ಟು...</a></td> </tr></table></td></tr></table></td></tr></table>
                                                <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tblBdr'><tr><td class='quadHeader'><a href='/News/index.htm'>ಸಮಾಚಾರ</a></td> </tr><tr><td class='padding'><table width='100%' border='0' cellpadding='0' cellspacing='2'><tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td width='48'><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td><a href='/News/Regional/0901/02/1090102047_1.htm'><img src='http://l.yimg.com/t/i/in/lang/Kannada/News/Regional/0901/02/images/tn_1090102047.jpg' width='48' height='47' align='left' class='img'/></a></td></tr><tr><td class='imgCaptionWithoutBorder'>nrb</td></tr></table></td><td class='space'>&nbsp;</td><td valign='top'><table border='0' cellspacing='0' cellpadding='0' class='kreative'><tr><td class='tdH2'><a href='/News/Regional/0901/02/1090102047_1.htm'>ಸಿದ್ದರಾಮಯ್ಯ ವಿರುದ್ಧ ಖರ್ಗೆ ಪರೋಕ್ಷ ವಾಗ್ದಾಳಿ</a></td></tr><tr><td>ಉಪ ಚುನಾವಣೆಯಲ್ಲಿನ ಸೋಲಿನ ಪರಾಮರ್ಶೆ ಮಾಡಿಕೊಳ್ಳುತ್ತಿರುವ ಕಾಂಗ್ರೆಸ್, ಇದೀಗ ಮಾಜಿ ಉಪಮುಖ್ಯಮಂತ್ರಿ ....</td></tr></table></td></tr></table></td></tr><tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0'> <tr><td><table border='0' cellpadding='0' cellspacing='0' class='kreative'><tr><td class='kBullet' >&bull;</td><td><a href='/News/Regional/0901/02/1090102023_1.htm' >2009 ಕನ್ನಡ ಅನುಷ್ಠಾನ ವರ್ಷವಾಗಿ ಆಚರಣೆ</a></td></tr><tr><td class='kBullet' >&bull;</td><td><a href='/News/Regional/0901/02/1090102045_1.htm' >ಡಾ.ಅಜಯ್‌ಕುಮಾರ್ ಸಿಂಗ್ ನೂತನ ಡಿಜಿಪಿ</a></td></tr></table> </td></tr></table></td></tr></table></td></tr></table>
                                                    <table width='100%' border='0' cellpadding='0' cellspacing='0' class='tblBdr' ><tr><td class='quadHeader'><a href='/Entertainment/index.htm'>ಮನರಂಜನೆ</a></td></tr><tr><td class='padding'><table width='100%' border='0' cellspacing='2' cellpadding='0'><tr><td valign='middle'><table border='0' cellpadding='0' class='kreative'><tr><td><a href='/Entertainment/Bollywood/0901/02/1090102034_1.htm'><b>ಚಿತ್ರ ಸುದ್ದಿ</b></a> - ಆನೇಕಲ್ ಬಾಲರಾಜ್ ನಿರ್ಮಾಣದಲ್ಲಿ ಅವರ ಪುತ್ರ ಸಂತೋಷ್ ನಟಿಸಿರುವ 'ಕೆಂಪ' ಚಿತ್ರ ಮುಂದಿನ ವಾರ  ತೆರೆಕಾಣುತ್ತಿದೆ. ಸೆನ್ಸಾರ್ ಆಗಿ 5 ತಿಂಗಳಾದರೂ ಚಿತ್ರಮಂದಿರ ಸಿಗದ ಕಾರಣ ಚಿತ್ರ</td></tr></table></td></tr><tr><td align='right'><table border='0' align='right' cellpadding='0' cellspacing='3' class='quadFooter'><tr><td align='center' valign='middle'><a href='/Entertainment/Bollywood/0901/02/1090102034_1.htm' class='moreLink'>ಮುಂದೆ ಓದಿ</a></td><td width='15' align='center' valign='middle'>|</td><td align='center' valign='middle'><a href='/Entertainment/Bollywood/index.htm' class='moreLink'>ಮತ್ತಷ್ಟು...</a></td> </tr></table></td></tr>  </table></td></tr></table>

Note: I had to install ttf-kannada-fonts, ttf-indic-fonts-core was not enough, to properly see all UTF-8 encoded unicode Kannada chars.

Just open this rfc : RFC 3629

Open this table:

   Char. number range  |        UTF-8 octet sequence
      (hexadecimal)    |              (binary)
   --------------------+---------------------------------------------
   0000 0000-0000 007F | 0xxxxxxx
   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Select a language with chars < U+10FFFF {It is possible to have chars above 10FFFF also if needed with time}– Unicode charts

Unicode character search

I just selected U+0950 ( U+0950 )

Now looking at the table it is in 0800-FFFF range

   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 

So just write ‘u0950’ in binary –>

  1. 0000 1001 0101 0000
  2. 0000 100101 010000 << make two group of 6 and one of 4
  3. 1110 0000 1010 0101 1001 0000 << now append group of 4 with 1110 and others with 10
  4. E0 A5 90 << in Hex
$ awk ' BEGIN { print "\xE0\xA5\x90" } '
ॐ

Now let us take
U+30F8 ヸ KATAKANA LETTER VI ( U+30F8)
Range :

   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 
  1. 0011 0000 1111 1000
  2. 0011 000011 111000
  3. 1110 0011 1000 0011 1011 1000
  4. E3 83 B8
$ awk ' BEGIN { print "\xE3\x83\xB8" } '
ヸ

next
U+10147 𐅇 GREEK ACROPHONIC ATTIC FIFTY THOUSAND (U+10147)
Range:

    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
  1. 0001 0000 0001 0100 0111
  2. 00 010000 000101 000111
  3. 1111 0000 1001 0000 1000 0101 1000 0111
  4. F0 90 85 87
$ awk ' BEGIN { print "\xF0\x90\x85\x87" } '
𐅇

You may need to install ‘ttf-ancient-fonts’ to look at GREEK ACROPHONIC.

After doing this enjoy the following article.
No Excuses!

Had done this long time ago for a legacy database, where UTF-8 char sequence was also overflowing 🙂 . May help someone.

RFC 3629

PJAM

$ java pjam.encoding.UTF7
I: ॐㄋㄧㄊㄧㄋॐ
E: rJPxLHKxLIGxLHJxLIGxLHKrJP
D: ॐㄋㄧㄊㄧㄋॐ
/*
 * UTF7.java
 *
 * Created on October 7, 2004, 4:53 PM
 */

package pjam.encoding;

import java.io.ByteArrayOutputStream;
import java.io.CharArrayWriter;
import java.io.ByteArrayInputStream;

/**
 * See RFC 3629,
 * this is a very similar transformation format of ISO 10646 in 7-bit.
 *
 * Implementation is for BMP support.
 * 

 * Char. number| UTF-7 heptade sequence
 * range       |
 * -------------------------------------------
 * 0000 - 003F | 0xxxxxx
 * 0040 - 01FF | 110xxxx 10xxxxx
 * 0200 - 1FFF | 1110xxx 10xxxxx 10xxxxx
 * 2000 - FFFF | 111100x 10xxxxx 10xxxxx 10xxxxx
 * 

 *
 * Can also support UTF-16 range (U+0000 to U+10FFFF), but would need
 * UTF-16 transformation (I think)
 * for char > U+FFFF as char size in java is 2 bytes only.
 * 

 * Char. number range | UTF-7 heptade sequence
 * -------------------------------------------
 * 000000 - 00003F    | 0xxxxxx
 * 000040 - 0001FF    | 110xxxx 10xxxxx
 * 000200 - 001FFF    | 1110xxx 10xxxxx 10xxxxx
 * 002000 - 01FFFF    | 11110xx 10xxxxx 10xxxxx 10xxxxx
 * 020000 - 10FFFF    | 1111100 10xxxxx 10xxxxx 10xxxxx 10xxxxx
 * 

 *
 * 

 *  final String string = "Nitin";
 *  final String utf7String = UTF7.encodeString(string);
 *  final String decodedString = UTF7.decodeString(utf7String)
 *  if ( !decodedString.equals(string)) {
 *      //Should never happen
 *  }
 * 

 *
 * This code is only to support 7-bit systems or charsets or streams, should not be used
 * to encode any Internet stream.
 *
 * @author  Nitin Verma
 * @version 1.0
 *
 */
public class UTF7 {

    public static void main ( final String args [] ) {
        // Nitin in Chinese Bopomofo between OM!
        final String string = "\u0950\u310B\u3127\u310A\u3127\u310B\u0950";
        System.out.println("I: " + string);
        final String utf7String = UTF7.encodeString(string);
        System.out.println("E: " + utf7String);
        final String decodedString = UTF7.decodeString(utf7String);
        System.out.println("D: " + decodedString);
        if ( !decodedString.equals(string)) {
             System.out.println( " Should never happen " );
        }
    }

    private UTF7() {
    }

    /** Gives a string that envelops UTF-7 bytes
     * @param bmpString A string only having chars in 'Basic Multilingual Plane'
     * @return UTF-7 String
     */
    public static String encodeString(final String bmpString) {
        char [] chars = new char[bmpString.length()];
        bmpString.getChars(0, bmpString.length(), chars, 0);
        return new String(encodeChars(chars));
    }

    /** Encodes BMP chars to UTF-7 byte sequence
     * @param bmpChars chars in 'Basic Multilingual Plane'
     * @return UTF-7 bytes
     */
    public static byte [] encodeChars(final char [] bmpChars) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream(bmpChars.length);
        try {
            for ( int i = 0; i < bmpChars.length; i++ ) {
                baos.write(encodeChar(bmpChars&#91;i&#93;));
            }
        }
        catch (java.io.IOException ioe) {
            // will never happen
        }
        return baos.toByteArray();
    }

    /** Encodes BMP char to UTF-7 byte sequence
     * @param bmpChar char in 'Basic Multilingual Plane'
     * @return UTF-7 bytes
     */
    public static byte &#91;&#93; encodeChar(final char bmpChar) {
        if ( bmpChar >= 0x0 && bmpChar < = 0x3F ) {
             int b1 = (bmpChar & 0x3F);
             return new byte &#91;&#93; {(byte)b1};
        }
        else if ( bmpChar > 0x3F && bmpChar < = 0x1FF ) {
            int b1 = (bmpChar & 0x1F);
            b1 = 0x40 + b1;
            int b2=(bmpChar & 0x1FF) >> 5;
            b2 = 0x60 + b2;




            return new byte [] {(byte)b2, (byte)b1};
        }
        else if ( bmpChar > 0x1FF && bmpChar < = 0x1FFF ) {
            int b1 = (bmpChar & 0x1F);
            b1 = 0x40 + b1;
            int b2=(bmpChar & 0x3FF) >> 5;
            b2 = 0x40 + b2;
            int b3 = (bmpChar & 0x1c00) >> 10;
            b3 = 0x70 + b3;
            return new byte [] {(byte)b3, (byte)b2, (byte)b1};
        }
        else if ( bmpChar > 0x1FFF && bmpChar < = 0xFFFF ) {
            int b1 = (bmpChar & 0x1F);
            b1 = 0x40 + b1;
            int b2=(bmpChar & 0x3FF) >> 5;
            b2 = 0x40 + b2;
            int b3 = (bmpChar & 0x7c00) >> 10;
            b3 = 0x40 + b3;
            int b4 = (bmpChar & 0x8000) >> 15;
            b4 = 0x78 + b4;
            return new byte [] {(byte)b4, (byte)b3, (byte)b2, (byte)b1};
        }
        else {
            throw new RuntimeException("Only BMP charset support (U+0000 to U+FFFF), non-bmp char was " + bmpChar);
        }
    }

    /** Decodes UTF-7 encoded string
     * @param utfString A valid UTF-7 encoded string
     * @return Decoded string
     */
    public static String decodeString(final String utfString) {
        return new String(decodeUTFBytes(utfString.getBytes()));
    }

    /** Decodes UTF-7 byte sequence to BMP chars
     * @param utfBytes A valid UTF-7 encoded byte sequence
     * @return Decoded BMP chars
     */
    public static char [] decodeUTFBytes(final byte [] utfBytes) {
        ByteArrayInputStream bais = new ByteArrayInputStream(utfBytes);
        CharArrayWriter caw = new CharArrayWriter(utfBytes.length/4);
        int readByte = 0;
        while( (readByte = bais.read()) != -1 ) {

            if (readByte >= 0x0 && readByte < = 0x3F ) {
                caw.write((int)readByte);
                continue;
            }

            int sequenceByte = readByte;
            // Does it start with xxx0?
            if ( (sequenceByte & 0x10) == 0x0 ) {
                // Should start with x110
                if( (sequenceByte & 0x70) != 0x60 ) {
                    throw new RuntimeException("not UTF-7 byte sequence, bad sequence byte " + Integer.toBinaryString(sequenceByte));
                }
                int b1 = bais.read();
                checkTailByte(b1, new int &#91;&#93; {sequenceByte});
                caw.write(decodeUTF(new byte&#91;&#93; {(byte)readByte, (byte)b1}));
            }
            // Is it xxxx0xxx?
            else if ( (sequenceByte & 0x08) == 0x0 ) {
                // Should start with x1110
                if( (sequenceByte & 0x78) != 0x70 ) {
                    throw new RuntimeException("not UTF-7 byte sequence, bad sequence byte " + Integer.toBinaryString(sequenceByte));
                }
                int b1 = bais.read();
                checkTailByte(b1, new int &#91;&#93; {sequenceByte});
                int b2 = bais.read();
                checkTailByte(b2, new int &#91;&#93; {sequenceByte, b1});
                caw.write(decodeUTF(new byte&#91;&#93; {(byte)readByte, (byte)b1, (byte)b2}));
            }
            // Is it xxxxx00x?
            else if ( (sequenceByte & 0x06) == 0x0 ) {
                // Should start with x11110
                if( (sequenceByte & 0x7C) != 0x78 ) {
                    throw new RuntimeException("not UTF-7 byte sequence, bad sequence byte " + Integer.toBinaryString(sequenceByte));
                }
                int b1 = bais.read();
                checkTailByte(b1, new int &#91;&#93; {sequenceByte});
                int b2 = bais.read();
                checkTailByte(b2, new int &#91;&#93; {sequenceByte, b1});
                int b3 = bais.read();
                checkTailByte(b3, new int &#91;&#93; {sequenceByte, b1, b2});
                caw.write(decodeUTF(new byte&#91;&#93; {(byte)readByte, (byte)b1, (byte)b2, (byte)b3}));
            }
            else {
                throw new RuntimeException("not UTF-7 byte sequence");
            }
        }
        return caw.toCharArray();
    }

    private static void checkTailByte(int b, int &#91;&#93; priorBytes) {
        // Should start with x10x
        if( (b & 0x60) != 0x40 ) {
            throw new RuntimeException("not UTF-7 byte sequence, bad bytes sequence " + toBinaryString(priorBytes) + Integer.toBinaryString(b & 0x00ff));
        }
    }

    private static String toBinaryString(int &#91;&#93; bytes) {
        StringBuffer sb = new StringBuffer();
        for ( int i = 0; i < bytes.length; i++ ) {
            sb.append(Integer.toBinaryString(bytes&#91;i&#93; & 0x00ff));
            sb.append(" ");
        }
        return sb.toString();
    }

    /** Decodes UTF-7 byte sequence to BMP char.
     * @param utf A valid UTF-7 encoded byte sequence for a single BMP char
     * @return Decoded BMP char
     */
    public static char decodeUTF(final byte &#91;&#93; utf) {
        if ( utf.length == 1 ) {
            return (char) utf&#91;0&#93;;
        }
        else if ( utf.length == 2 ) {
            int o1 = (utf&#91;1&#93; & 0x001f);
            o1 = o1 << 3;
            int o2 = utf&#91;0&#93; & 0x000f;
            o2 = o2 << 8;
            int c1 = o2 + o1;
            c1 = c1 >> 3;
            return (char)c1;
        }
        else if ( utf.length == 3) {
            int o1 = (utf[2] & 0x001f);
            o1 = o1 < < 6;
            int o2 = utf&#91;1&#93; & 0x001f;
            o2 = o2 << 11;
            int o3 = utf&#91;0&#93; & 0x0007;
            o3 = o3 << 16;
            int c1 = o3 + o2 + o1;
            c1 = c1 >> 6;
            return (char)c1;
        }
        else if ( utf.length == 4) {
            int o1 = (utf[3] & 0x001f);
            o1 = o1 < < 1;
            int o2 = utf&#91;2&#93; & 0x001f;
            o2 = o2 << 6;
            int o3 = utf&#91;1&#93; & 0x001f;
            o3 = o3 << 11;
            int o4 = utf&#91;0&#93; & 0x0001;
            o4 = o4 << 16;
            int c1 = o4 + o3 + o2 + o1;
            c1 = c1 >> 1;
            return (char)c1;
        }
        else {
            throw new RuntimeException("not UTF-7 bytes");
        }
    }

}

Categories