<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14874663</id><updated>2011-11-27T22:40:40.914-02:00</updated><category term='ruby'/><category term='linux'/><category term='C++'/><category term='clang'/><category term='Esperanto'/><category term='android'/><category term='jobs'/><category term='amd64'/><category term='webkit'/><category term='python'/><category term='gentoo'/><category term='unix'/><category term='rails'/><category term='C'/><category term='acid3'/><category term='palm'/><category term='ARM'/><category term='x86'/><category term='Ubuntu'/><category term='presto'/><category term='coding style'/><category term='assembly'/><title type='text'>FLOSS &amp; Cia.</title><subtitle type='html'>General free software and other things that I don't remember right now.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14874663.post-5985011453636645153</id><published>2009-05-25T10:14:00.000-03:00</published><updated>2009-05-25T10:15:39.930-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>libposix project started !</title><content type='html'>&lt;div class="entry"&gt;      &lt;p&gt; &lt;a href="http://libposix.sourceforge.net/"&gt;&lt;strong&gt;libposix&lt;/strong&gt;&lt;/a&gt; is a bold attempt to unify the implementation of the core functionality of all Unix systems. libposix is:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;A full implementation of the &lt;a href="http://www.unix.org/"&gt;POSIX 2008 standard&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A cross platform implementation, that should replace existing implementations of the system core libraries and unify the core Unix implementation for all systems&lt;/li&gt;&lt;li&gt;An exact implementation of POSIX 2008 and nothing else (no extensions, no previous POSIX versions)&lt;/li&gt;&lt;li&gt;An implementation that works well with possible extensions to the core system functionallity (ex: &lt;a href="http://gnu.org/"&gt;GNU&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Berkeley_Software_Distribution"&gt;BSD&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;An implementation of POSIX written from scratch&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Free_and_open_source_software"&gt;Free and open source software&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The main goal of the libposix project is to successfully replace free Unix "libc" implementations with an implementation that is portable, conformant, easy to build, to cross-build, to use, to study and to mantain. Read more about libposix in the &lt;a href="http://libposix.sourceforge.net/README"&gt;introduction page&lt;/a&gt;.&lt;/p&gt;     &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-5985011453636645153?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/5985011453636645153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=5985011453636645153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/5985011453636645153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/5985011453636645153'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2009/05/libposix-project-started.html' title='libposix project started !'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-7166538087707558496</id><published>2009-05-05T22:43:00.006-03:00</published><updated>2009-05-05T23:41:06.042-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='clang'/><title type='text'>A benchmark where clang wins gcc</title><content type='html'>I have sent my &lt;a href="http://hdante.blogspot.com/2009/04/clang-compiler-quickstart.html"&gt;last post&lt;/a&gt; about clang to a friend, suggesting that the final days of gcc could be coming, and he refuted with a very pragmatic point: "talk is cheap, show me the (generated) code". :-P So I decided to get serious.&lt;br /&gt;&lt;br /&gt;I have already told in the article that clang is in development stage, so how could I show him a working example ? I know clang able to compile large projects, like &lt;a href="http://gcc.gnu.org/"&gt;gcc&lt;/a&gt; and &lt;a href="http://www.freebsd.org/"&gt;FreeBSD&lt;/a&gt;. After playing with some small projects, I found this one, from the &lt;a href="http://shootout.alioth.debian.org/"&gt;Computer Language Benchmarks Game&lt;/a&gt;. The benchmark is called &lt;a href="http://shootout.alioth.debian.org/u32q/benchmark.php?test=fasta&amp;amp;lang=gcc&amp;amp;id=4"&gt;fasta&lt;/a&gt;, and it generates pseudo random DNA sequences. I chose this one because it was small and, even though floating point was used in the program, outputs could be directly compared without rounding errors (becuase they're composed of DNA elements).&lt;br /&gt;&lt;br /&gt;My system: My machine is a HP Pavilion dv9000, Core 2 Duo T5500 1.66 GHz, 2GB RAM, with Ubuntu 9.04.&lt;br /&gt;&lt;br /&gt;The compilers: the old guy is gcc 4.3.3 from the standard Ubuntu package. The new guy is clang, downloaded today from svn (llvm rev 71035/clang rev 71041). llvm and clang were compiled with "--prefix=/opt/clang --enable-optimized".&lt;br /&gt;&lt;br /&gt;The execution: I've just used &lt;a href="http://www.gnu.org/software/time/"&gt;GNU time&lt;/a&gt; repeatedly until the execution time converged, chose a result at random and rounded it to one decimal figure. Remember that I just have to convince a friend. :-P Standard output was redirected to /dev/null.&lt;br /&gt;&lt;br /&gt;At first I did this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ gcc -O3 -o b b.c&lt;br /&gt;$ /opt/clang/bin/clang -O3 -o bb b.c&lt;br /&gt;$ time ./b 25000000 &gt; /dev/null&lt;br /&gt;$ time ./bb 25000000 &gt; /dev/null&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But this gave incredible 11.1s for gcc and 7.4s for clang. It was a good surprise to see clang surpassing gcc, but there was something wrong, since gcc is not a bad compiler. A quick look in assembly output showed that clang was using SSE registers for moving data around and for calculating, while gcc was not. This is a good point for the clang driver, but it doesn't tell us anything. So, the correct command line for gcc is:&lt;br /&gt;&lt;br /&gt;$ gcc -O3 -march=native -mmmx -msse -msse2 -msse3 -mfpmath=sse -o b b.c&lt;br /&gt;&lt;br /&gt;Then we finally settle with the results: 7.7s for gcc and 7.4s for clang. Clang wins !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-7166538087707558496?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/7166538087707558496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=7166538087707558496' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/7166538087707558496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/7166538087707558496'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2009/05/benchmark-where-clang-wins-gcc.html' title='A benchmark where clang wins gcc'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-4970682581364757487</id><published>2009-04-17T10:18:00.011-03:00</published><updated>2009-04-17T11:33:11.475-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='clang'/><title type='text'>clang compiler quickstart</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Have you ever heard about &lt;a href="http://clang.llvm.org/"&gt;clang&lt;/a&gt; ?&lt;/span&gt; It's a new compiler for &lt;a href="http://en.wikipedia.org/wiki/C_%28programming_language%29"&gt;C&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B"&gt;C++&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Objective-C"&gt;Objective C&lt;/a&gt; languages. clang is being developed in a fast pace and is expected to become an alternative for the &lt;a href="http://gcc.gnu.org/"&gt;gcc&lt;/a&gt; compilers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What are &lt;a href="http://clang.llvm.org/features.html"&gt;its advantages&lt;/a&gt; ?&lt;/span&gt; It's a compiler written from scratch, its code is completely modular and easily readable, it aims to offer user-friendly expressive diagnostics, it's much smaller and faster than gcc, it's expected to support IDE integration and code analysis and it's compatible with gcc. The C part of the compiler is in an advanced stage and can build large projects, like &lt;a href="http://llvm.org/releases/2.4/docs/ReleaseNotes.html#subproj"&gt;sqlite&lt;/a&gt; and the &lt;a href="http://llvm.org/releases/2.5/docs/ReleaseNotes.html#subproj"&gt;FreeBSD&lt;/a&gt; kernel. The C++ part is in an &lt;a href="http://clang.llvm.org/cxx_status.html"&gt;early stage&lt;/a&gt; (clang can't compile itself, for example).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Quick start:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    $ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ cd llvm/tools&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ cd ..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ ./configure --prefix=/opt/clang&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ sudo make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the sequence above, &lt;a href="http://llvm.org/"&gt;llvm&lt;/a&gt; is the compiler back end and clang is the compiler front end. The compiler is installed in the /opt/clang directory, so it's available at /opt/clang/bin/clang (the directory can be deleted for a full uninstall when you're done).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Try it out:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ cat hello.c&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    #include "stdio.h"&lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    int main (void) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        printf("Hello world!\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        return 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ /opt/clang/bin/clang -o hello hello.c&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    $ ./hello&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    Hello world!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ tar xf lame-398-2.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ cd lame-398-2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ ./configure --prefix=/opt/lame CC=/opt/clang/bin/clang&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ make&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ sudo make install&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ /opt/lame/bin/lame myaudio.wav&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As you can see, clang is in development stage, so it's only available trough svn.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Do you want to contribute ?&lt;/span&gt; See more information at clang &lt;a href="http://clang.llvm.org/get_involved.html"&gt;home page&lt;/a&gt; !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-4970682581364757487?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/4970682581364757487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=4970682581364757487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4970682581364757487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4970682581364757487'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2009/04/clang-compiler-quickstart.html' title='clang compiler quickstart'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-8817571602732135694</id><published>2009-04-01T00:48:00.002-03:00</published><updated>2009-04-01T00:57:57.825-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>POSIX 2008</title><content type='html'>The &lt;a href="http://en.wikipedia.org/wiki/POSIX"&gt;POSIX&lt;/a&gt; standard has been updated in December 2008. The standard is an attempt to standardize the core &lt;a href="http://en.wikipedia.org/wiki/Application_programming_interface"&gt;API&lt;/a&gt; of all &lt;a href="http://en.wikipedia.org/wiki/Unix"&gt;Unix&lt;/a&gt; systems and, nowadays, most &lt;a href="http://en.wikipedia.org/wiki/Unix-like"&gt;Unix clones&lt;/a&gt; try to adhere to the standard in some level of conformance (including &lt;a href="http://en.wikipedia.org/wiki/GNU"&gt;GNU&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Berkeley_Software_Distribution"&gt;BSD&lt;/a&gt; based systems). Register and read the &lt;a href="http://www.unix.org/2008edition/"&gt;new standard&lt;/a&gt; in the Open Group UNIX System &lt;a href="http://www.unix.org/"&gt;site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-8817571602732135694?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/8817571602732135694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=8817571602732135694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8817571602732135694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8817571602732135694'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2009/04/posix-2008.html' title='POSIX 2008'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-8445989329074036428</id><published>2009-01-13T08:28:00.005-02:00</published><updated>2009-01-13T08:51:53.784-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jobs'/><title type='text'>The best job in the world</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_E5vGEWCFjoA/SWxvynqOimI/AAAAAAAAABY/De_KntP9pgw/s1600-h/Giant_clam_with_diver.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 267px;" src="http://3.bp.blogspot.com/_E5vGEWCFjoA/SWxvynqOimI/AAAAAAAAABY/De_KntP9pgw/s400/Giant_clam_with_diver.jpg" alt="" id="BLOGGER_PHOTO_ID_5290726577683728994" border="0" /&gt;&lt;/a&gt;Australian's &lt;a href="http://www.tq.com.au/"&gt;Queensland Tourism&lt;/a&gt; is seeking applicants for what they call the best job in the world. Are you interested in a 6 month contract and AUD$ 150.000,00 (US$ 100.950,00) for diving, feeding turtles and blogging, while living in paradise ? Then apply for the island caretaker job in &lt;a href="http://en.wikipedia.org/wiki/Hamilton_Island_%28Queensland%29"&gt;Hamilton Island&lt;/a&gt;. See the &lt;a href="http://www.islandreefjob.com/webdata/content/2/59.pdf?ts=1229652407"&gt;pdf&lt;/a&gt; in the site &lt;a href="http://www.islandreefjob.com/"&gt;Island Reef Job&lt;/a&gt; for details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-8445989329074036428?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/8445989329074036428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=8445989329074036428' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8445989329074036428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8445989329074036428'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2009/01/best-job-in-world.html' title='The best job in the world'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_E5vGEWCFjoA/SWxvynqOimI/AAAAAAAAABY/De_KntP9pgw/s72-c/Giant_clam_with_diver.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-4885625919656162932</id><published>2008-12-30T10:47:00.004-02:00</published><updated>2008-12-30T11:06:40.195-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android is updated and goes unnoticed</title><content type='html'>This December &lt;a href="http://source.android.com/"&gt;Android source code&lt;/a&gt; received a significant update, but apparently it went completelly unnoticed. The &lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt; &lt;a href="http://android.git.kernel.org/"&gt;repository&lt;/a&gt; of most components were updated to be compatible with the new Android kernel, based on linux 2.6.27 (previously 2.6.25). Most components have merged a repository called "cupcake", with lots of changes that have now become official. Also, external libraries were updated too. I think we should expect a new minor release of the SDK in a few weeks too. Remember to run a "&lt;a href="http://source.android.com/download/using-repo"&gt;repo sync&lt;/a&gt;" to keep your source code up-to-date (this one will take a lot of time).&lt;br /&gt;&lt;br /&gt;This is great news for me, since I was not being able to port &lt;a href="http://en.wikipedia.org/wiki/Palm_TX"&gt;Palm TX&lt;/a&gt; to Android. I needed version 2.6.27 because it's the first version with &lt;a href="http://kernelnewbies.org/Linux_2_6_27"&gt;official support&lt;/a&gt; for Palm TX. I was getting segfaults when executing one of the core applications in Android (servicemanager) in that version. Now I believe the port will work flawlessly. :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-4885625919656162932?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/4885625919656162932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=4885625919656162932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4885625919656162932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4885625919656162932'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2008/12/android-is-updated-and-goes-unnoticed.html' title='Android is updated and goes unnoticed'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-1395536767921843188</id><published>2008-12-11T16:38:00.003-02:00</published><updated>2008-12-11T16:47:29.850-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Meet Python 3.0</title><content type='html'>&lt;a href="http://python.org/download/releases/3.0/"&gt;Python 3.0&lt;/a&gt; was released this December ! Check out &lt;a href="http://docs.python.org/3.0/whatsnew/3.0.html"&gt;What's New in Pyhton 3.0&lt;/a&gt;, the full &lt;a href="http://docs.python.org/3.0/"&gt;documentation&lt;/a&gt; and the conversion tool &lt;a href="http://svn.python.org/view/sandbox/trunk/2to3/"&gt;2to3&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-1395536767921843188?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/1395536767921843188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=1395536767921843188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1395536767921843188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1395536767921843188'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2008/12/meet-python-30.html' title='Meet Python 3.0'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-148791234816275593</id><published>2008-10-28T19:09:00.003-02:00</published><updated>2008-10-28T19:19:16.417-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>Palm TX support added in the main kernel</title><content type='html'>On October 9, Linux &lt;a href="http://kernelnewbies.org/Linux_2_6_27"&gt;kernel 2.6.27&lt;/a&gt; was released with support for the &lt;a href="http://en.wikipedia.org/wiki/TX_%28handheld%29"&gt;Palm TX&lt;/a&gt; handhelds. That was a merge from the &lt;a href="http://hackndev.com/"&gt;hackndev&lt;/a&gt; kernels, which have had experimental support for many PDAs for a long time. Also, I have noticed that general support for PXA2xx/PXA3xx microcontrollers are much more mature than it was one year ealier.&lt;br /&gt;&lt;br /&gt;Congratulations for the achievement !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-148791234816275593?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/148791234816275593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=148791234816275593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/148791234816275593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/148791234816275593'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2008/10/palm-tx-support-added-in-official.html' title='Palm TX support added in the main kernel'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-7669800590783232196</id><published>2008-10-23T11:23:00.002-02:00</published><updated>2008-10-23T11:30:53.459-02:00</updated><title type='text'>Google Android source code released</title><content type='html'>On October 21, Google &lt;a href="http://source.android.com/posts/opensource"&gt;officially released&lt;/a&gt; Android full &lt;a href="http://source.android.com/"&gt;source code&lt;/a&gt; under the &lt;a href="http://en.wikipedia.org/wiki/Apache_License"&gt;Apache license&lt;/a&gt;. Quoting the official site:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-style: italic;"&gt;Android is the first free, open source, and fully customizable mobile platform. Android offers a full stack: an operating system, middleware, and key mobile applications. It also contains a rich set of APIs that allows third-party developers to develop great applications."&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;That's right ! An official, supported, open source distribution for cell phones. :-) Congratulations to everyone who has made this possible !&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-7669800590783232196?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/7669800590783232196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=7669800590783232196' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/7669800590783232196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/7669800590783232196'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2008/10/google-android-source-code-released.html' title='Google Android source code released'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-8459114440237192754</id><published>2008-08-07T10:45:00.009-03:00</published><updated>2008-08-07T12:27:10.933-03:00</updated><title type='text'>Concept Idea - Webkit for Firefox ! (Mozilla Labs)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_E5vGEWCFjoA/SJr__hxq85I/AAAAAAAAABM/Hy6v_qGymjY/s1600-h/firefox%2Bwebkit.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_E5vGEWCFjoA/SJr__hxq85I/AAAAAAAAABM/Hy6v_qGymjY/s320/firefox%2Bwebkit.png" alt="" id="BLOGGER_PHOTO_ID_5231775384007799698" border="0" /&gt;&lt;/a&gt;This is my contribution for &lt;a href="http://labs.mozilla.com/projects/concept-series/"&gt;Mozilla Labs&lt;/a&gt; concepts. &lt;span style="font-weight: bold;"&gt;PLEASE, SWITCH TO &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://webkit.org/"&gt;WEBKIT&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Why develop two HTML engines that are supposed to do &lt;span style="font-weight: bold;"&gt;exactly&lt;/span&gt; the same thing, when you could join forces and develop only one ? The user doesn't have access to the engine, it's the "user experience" that matters !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dump Gecko !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Development in Webkit is much faster ! In &lt;a href="http://en.wikipedia.org/wiki/Acid3"&gt;less than four months&lt;/a&gt; (beginning in January, 2008) Webkit got around 50 points in Acid3, while there are &lt;a href="http://www.flickr.com/photos/fredbezies/2692190152/"&gt;no plans&lt;/a&gt; for Gecko to support it yet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Webkit is faster, smaller, portable !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's been proven that Webkit has low overhead ! Consider the &lt;a href="http://en.wikipedia.org/wiki/Webkit"&gt;actual list&lt;/a&gt; of architectures that support it:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Safari on Mac&lt;/li&gt;&lt;li&gt;iPhone's Safari Browser&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Epiphany on Gnome (gtk+ port)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Integrated to Qt (Qt 4.4)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Browser for Google Android phones&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Nokia S60 phone&lt;/li&gt;&lt;li&gt;(planned) Konqueror on KDE 4.1&lt;/li&gt;&lt;li&gt;etc !&lt;/li&gt;&lt;/ul&gt;On the other hand, as of August 2008, nobody really considers using Gecko in embedded systems (the only exception is the OLPC project, which is rather a downscaled Linux/x86 standard architecture).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Dump the legacy !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Even though supporting buggy websites is still important these days, the slow development of Gecko, compared to Webkit, hints to us how bad supporting legacy code can be to maintenance.  Let's switch the development models. We can't wait a full year to support Acid3 and other standards when we can wait just four months !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;It's free software !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Why duplicating efforts when everything is free source ? Just build the shell above a single great engine that gets the job done. You can do it, because it's free software !&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(for a more critic opinion of the same problem, see the &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.allpeers.com/blog/2007/10/05/should-mozilla-drop-gecko-for-webkit/"&gt;post from October 2007&lt;/a&gt;&lt;span style="font-style: italic;"&gt; in the Peer Pressure blog)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-8459114440237192754?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/8459114440237192754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=8459114440237192754' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8459114440237192754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8459114440237192754'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2008/08/concept-idea-webkit-for-firefox-mozilla.html' title='Concept Idea - Webkit for Firefox ! (Mozilla Labs)'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_E5vGEWCFjoA/SJr__hxq85I/AAAAAAAAABM/Hy6v_qGymjY/s72-c/firefox%2Bwebkit.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-6021870486054175685</id><published>2008-07-26T20:22:00.006-03:00</published><updated>2008-07-26T20:42:28.906-03:00</updated><title type='text'>Yet another website that refuses to support linux</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Terra_Networks"&gt;Terra Networks&lt;/a&gt; is a large internet content provider and ISP company (currently owned by Spanish &lt;a href="http://en.wikipedia.org/wiki/Telefonica"&gt;Telefónica&lt;/a&gt;). In &lt;a href="http://www.terra.com.br/"&gt;Brazil&lt;/a&gt; it started as a nice ISP for dialup Internet (I had an account there for a few years) and then moved to the "web portal" business. Apparently, however, it doesn't care about linux users. Even if you don't know Portuguese you will understand what's being said in the picture (I believe there is a &lt;a href="http://terratv.terra.com.br/templates/checkBrowser.aspx?OS=FALHA&amp;amp;browser=Firefox%203"&gt;static link to the page&lt;/a&gt; also). Digg if you think Terra Networks should do something about that.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_E5vGEWCFjoA/SIu1B4n1s4I/AAAAAAAAABE/TRN4Pjmed1o/s1600-h/terra-tv-red.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_E5vGEWCFjoA/SIu1B4n1s4I/AAAAAAAAABE/TRN4Pjmed1o/s320/terra-tv-red.png" alt="" id="BLOGGER_PHOTO_ID_5227470836477571970" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-6021870486054175685?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/6021870486054175685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=6021870486054175685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/6021870486054175685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/6021870486054175685'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2008/07/yet-another-website-that-refuses-to.html' title='Yet another website that refuses to support linux'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_E5vGEWCFjoA/SIu1B4n1s4I/AAAAAAAAABE/TRN4Pjmed1o/s72-c/terra-tv-red.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-59322166071036478</id><published>2008-03-27T17:38:00.013-03:00</published><updated>2008-03-27T18:09:18.826-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='acid3'/><category scheme='http://www.blogger.com/atom/ns#' term='presto'/><title type='text'>Webkit and Presto on Acid !</title><content type='html'>Links to the first screenshots of&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; &lt;a href="http://webkit.org/blog/173/webkit-achieves-acid3-100100-in-public-build/trackback/"&gt;Webkit&lt;/a&gt; and &lt;a href="http://my.opera.com/desktopteam/blog/2008/03/26/opera-and-the-acid3-test"&gt;Presto&lt;/a&gt; scoring 100 points in the Acid3 test. After correcting small glitches (and Presto being temporarily &lt;a href="http://ln.hixie.ch/?start=1206578003&amp;amp;count=1"&gt;downgraded to 99 points&lt;/a&gt;), both rendering engines will pass the test completely. The amazing part is that both teams were able to fix &lt;a href="http://en.wikipedia.org/wiki/Acid3#Development_and_impact"&gt;more than 40 tests&lt;/a&gt; in a couple of months. Surely, both rendering engines were designed for the future.&lt;br /&gt;&lt;br /&gt;Congratulations !&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webkit.org/blog-files/acid3-full-rendering-pass.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://webkit.org/blog-files/acid3-full-rendering-pass.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-59322166071036478?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/59322166071036478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=59322166071036478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/59322166071036478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/59322166071036478'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2008/03/webkit-and-presto-on-acid.html' title='Webkit and Presto on Acid !'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-1813585439155053248</id><published>2007-05-06T12:47:00.000-03:00</published><updated>2007-05-06T12:49:04.430-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='x86'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>Linux4Palm Development Workstation on Gentoo Linux</title><content type='html'>The title &lt;a href="http://trac.hackndev.com/projects/general/wiki/GentooSetup"&gt;says it all&lt;/a&gt; ! :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-1813585439155053248?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/1813585439155053248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=1813585439155053248' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1813585439155053248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1813585439155053248'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/05/linux4palm-development-workstation-on.html' title='Linux4Palm Development Workstation on Gentoo Linux'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-553046073859041048</id><published>2007-05-01T11:54:00.004-03:00</published><updated>2008-11-02T11:42:05.237-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Esperanto'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='amd64'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Kiel oni skribas ... ? Typing Esperanto characters in Ubuntu</title><content type='html'>[&lt;span style="font-weight: bold;"&gt;update 20081102: &lt;/span&gt;Finally, almost three years after the bug report, Ubuntu 8.10 Intrepid Ibex has full, built-in support for Esperanto letters. This post may be considered out-of-date now. Congratulations for the gtk+ team !]&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gtk.org/"&gt;Gtk+&lt;/a&gt; (and thus &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;) multilingualism environment is not as good as it could be. Imagine that you can write in some exotic language. Now try to write a blog in such language using firefox in Ubuntu. You'll hit a wall and that's it.&lt;br /&gt;&lt;br /&gt;For the impatient: add the line:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  GTK_IM_MODULE=xim&lt;br /&gt;&lt;br /&gt;In your /etc/environment file and reboot. [&lt;span style="font-weight: bold;"&gt;update 20080317:&lt;/span&gt; gtk will be fixed so that this is not necessary anymore, see gnome &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=321896"&gt;bug 321896&lt;/a&gt;] For the patient: read on.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Interestingly, a set of small bugs, still present in Feisty Fawn, makes me unable to write in &lt;a href="http://en.wikipedia.org/wiki/Esperanto"&gt;Esperanto&lt;/a&gt;, an interesting constructed European language (that I learn just for fun), that uses the following special characters: ĉ, ĝ, ĥ, ĵ, ŝ and ŭ. The first, and most basic problem is the following: gtk+ could allow, with zero configuration, anybody write such characters (on a typical international keyboard). Qt based and Xlib based application allow this. If I used Kubuntu I wouldn't be writing this post, because Esperanto characters would work out of the box !&lt;br /&gt;&lt;br /&gt;You may try this out in your Ubuntu or gnome based distribution: in firefox and gedit, type ^ + a, ^ + e (using an international keyboard). You'll have the â and ê characters. Now type ^ + c, ^ + h. Firefox and gedit will beep and won't show neither ĉ nor ĥ. Now open &lt;a href="http://en.wikipedia.org/wiki/Xterm"&gt;xterm&lt;/a&gt; and type ^ + a, ^ + e, ^ + c, ^ + h. You'll have âêĉĥ.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://en.wikipedia.org/wiki/X_Window_System"&gt;X-Windows&lt;/a&gt;, complex character typing is handled by modules called &lt;a href="http://en.wikipedia.org/wiki/Input_method_editor"&gt;input methods&lt;/a&gt;. X has a default API for handling input methods, called XIM. That's what xterm uses. Gtk+ provides it's own API and set of input methods for gtk+ based applications. Gtk+ input methods don't provide Esperanto characters. Why ? Simply because gtk+ developers don't want to. I have &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=324021"&gt;filed this bug&lt;/a&gt; more than one year ago. Also, I could find a &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=88639"&gt;similar bug&lt;/a&gt; in gnome database that is 4,5 years ago. Now, in your Ubuntu, install some Qt/KDE application and type âêĉĥ. Easy, ain't it ?&lt;br /&gt;&lt;br /&gt;Fortunatelly, one of the input methods from the gtk+ set is to use the fallback XIM input method. It's the input method that says "I was unable to do what I was supposed to, so I'll let you use the standard, simpler input method because it works". In gedit, right-click in the text area, select the menu "input methods", then "X input method". Now type âêĉĥ. Voilà ! Firefox doesn't have this menu, however :'(. How one could make the X input method the default method, so that all applications work and I don't have to select it from a menu ? Here we go to our second multilingualization bug. There's no way, in gnome or gtk, to set our default input method. That's right. No way. Ni feliĉe batu en la muron, denove !&lt;br /&gt;&lt;br /&gt;The solution is to edit by hand the configuration file given above, /etc/environment (or in your personal enviroments file, ~/.bashrc, or maybe in some other place, depending on your system). In the next boot, when applications load the new environment, XIM will take control. Finally, we have a multilingual environment for Ubuntu... but wait !&lt;br /&gt;&lt;br /&gt;Firefox still doesn't work. Why is that ? Here we have a Ubuntu specific bug. More specifically: a 64-bit Ubuntu bug. Almost all the applications I use are compiled for 64-bit. Firefox (and a few others) is an exception. I need to browse sites that use &lt;a href="http://java.sun.com/"&gt;Java&lt;/a&gt; and &lt;a href="http://www.macromedia.com/software/flash/about/"&gt;Flash&lt;/a&gt; software. Java has just become &lt;a href="http://www.fsf.org/"&gt;free software&lt;/a&gt;. Flash is closed source software. Neither of them offer 64-bit support for firefox. So my firefox must be 32 bits (see &lt;a href="http://ubuntuforums.org/showthread.php?t=202537"&gt;Ubuntu forums&lt;/a&gt; if you'd like to know more about this). There are a few support packages that I have to install in order to support 32 bit applications, like "ia32-libs", "ia32-libs-gtk", etc. Those applications don't correctly install the 32 bit environment. Two extra hacks are necessary for 32 bit, gtk apps, to work. The first: add the following line to your firefox32 script (mine is /usr/local/bin/firefox32 or /usr/local/firefox32/firefox):&lt;br /&gt;&lt;br /&gt;GTK_IM_MODULE_FILE=/etc/gtk-2.0/gtk.immodules.32&lt;br /&gt;&lt;br /&gt;This first bug means that the 32 bit gtk looks by default in gtk.immodules, instead of gtk.immodules.32. The second bug is that the base 32 bit environment doesn't set locales. You need the following command:&lt;br /&gt;&lt;br /&gt;ln -s /usr/lib/locale /usr/lib32/locale&lt;br /&gt;&lt;br /&gt;This should do. Notice how we pursued a single task: to write in Esperanto in Ubuntu. We've found 4 bugs. Not the way to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-553046073859041048?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/553046073859041048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=553046073859041048' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/553046073859041048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/553046073859041048'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/05/kiel-oni-skribas-typing-esperanto.html' title='Kiel oni skribas ... ? Typing Esperanto characters in Ubuntu'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-4399473473930281149</id><published>2007-04-28T19:33:00.000-03:00</published><updated>2007-04-28T19:49:19.769-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Beginning Ruby on Rails</title><content type='html'>For those like me who may be wondering if web development is cool, the place to start is &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;. Rails is a much famous web application framework, valued for its agility. In Rails home page, there's an interesting video of someone creating a complete web site in 15 minutes. An exciting tutorial is available in ONLamp.com web site, "&lt;a href="http://www.onlamp.com/pub/a/onlamp/2006/12/14/revisiting-ruby-on-rails-revisited.html"&gt;Rolling with Ruby on Rails Revisited&lt;/a&gt;". Unfortunatelly I haven't found (as of April 2007) any free comprehensive manual of Rails on-line (there's a good oportunity here, eh ? :-) ), so I've decided to buy the book (&lt;a href="http://www.pragmaticprogrammer.com/titles/rails/"&gt;Agile web development with Rails&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;PS: for those who want to stick with python, an alternative to Rails is available, and it's called &lt;a href="http://www.turbogears.org/"&gt;TurboGears&lt;/a&gt; ;-).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-4399473473930281149?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/4399473473930281149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=4399473473930281149' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4399473473930281149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4399473473930281149'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/04/beginning-ruby-on-rails.html' title='Beginning Ruby on Rails'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-4815474231257749070</id><published>2007-04-28T19:01:00.000-03:00</published><updated>2007-04-28T19:32:55.100-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>New GPIO API in linux kernel 2.6.21 !!!</title><content type='html'>The 2.6.1 kernel now features GPIO documentation and API !!! :-) See &lt;a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/gpio.txt;h=09dd510c4a5fef1ecff21d79ad0d961b3cd864d1;hb=4c20386c8d0719b42503efe65abe47ad3fb3d711"&gt;Documentation/gpio.txt&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-4815474231257749070?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/4815474231257749070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=4815474231257749070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4815474231257749070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/4815474231257749070'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/04/new-gpio-api-in-linux-kernel-2621.html' title='New GPIO API in linux kernel 2.6.21 !!!'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-1400876276344590874</id><published>2007-04-01T13:58:00.000-03:00</published><updated>2007-04-01T20:28:42.026-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='coding style'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='assembly'/><title type='text'>A case for consistent (and beautiful) coding styles</title><content type='html'>As it's written in The Zen of Python (&lt;a href="http://www.python.org/dev/peps/pep-0020/"&gt;PEP 20&lt;/a&gt;), "Readability counts". Code is read much more often than written, so a nice looking source code is fundamental.&lt;br /&gt;&lt;br /&gt;This is a criticism specifically aimed to the inconSistentCase that started to plague C++, C and even assembly code in the Internet, and, more generally, a criticism of ugly, useless coding styles, like pre/post-fixed notations, very long line styles, and, surely, inconSistentCase.&lt;br /&gt;&lt;br /&gt;Whenever you write code or are in charge of deciding the coding style of your software, please, please, please, use consistent coding styles. For example, use full, first-letter-caps, CamelCase notation, not inconSistentCase. As for my personal coding style taste, do even more, minimize the amount of capitalized letters in your code and use the highly legible underscore_notation instead, like those used in most C code, in python and, especially, in C++ STL. Don't let your code strech to hundreds of characters per line and don't add completely useless "NrUserId" prefixed notations.&lt;br /&gt;&lt;br /&gt;Here are many examples of nice, well thought coding styles, that you may adapt for your needs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.python.org/dev/peps/pep-0008/"&gt;PEP 8&lt;/a&gt;: an exellent coding style guide for the python language. Mostly an underscore_notation style, with a little, easy on eye, CamelCase and post-fixed notation for special cases (ex: ClassNames, ExceptionsEndInError, etc.). The style is good for python and other high level languages, but it could be better for C++, which leads to...&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sgi.com/tech/stl/table_of_contents.html"&gt;STL&lt;/a&gt;: part of the C++ standard library, a good example of really well though piece of code. Uses full underscore_notation. If paired with selective namespace downloading (using std::vector, using std::string, etc.), will produce beautiful C++ code.&lt;/li&gt;&lt;li&gt;&lt;a href="http://cs.wwc.edu/%7Edavija/XLIB/top.html"&gt;Xlib&lt;/a&gt;: Choose this one if you prefer a mostly CamelCase style. Even though Xlib is outdated and supposed to fade away, it was also a well thought library. It also shows a good way to add a namespace-like structure to a C library, using a single "X" prefix in most library functions.&lt;/li&gt;&lt;li&gt;&lt;a href="http://lxr.linux.no/source/Documentation/CodingStyle"&gt;linux kernel&lt;/a&gt;: Another great coding style for the C language. Useful for mostly non-object oriented, structured programming, but includes insightful hints for anybody (ex: local variables get short, "aux, tmp" names, external functions get long_descriptive_names, etc.), and is backed by the pseudo-chaotic-multi-million-people linux kernel development success.&lt;/li&gt;&lt;/ul&gt;There are many other projects that you may try that use similar, high legibility coding standards, just google for it. See, for example, &lt;a href="http://www.gtkmm.org/docs/gtkmm-2.4/docs/"&gt;Gtkmm&lt;/a&gt;, Gtk+ port to C++, the &lt;a href="http://wiki.openttd.org/index.php/Coding_style"&gt;OpenTTD&lt;/a&gt; game, etc.&lt;br /&gt;&lt;br /&gt;If you've found that all those coding styles are crappy (even after thinking of them in terms of readability), then you should just remember one thing from this post: don't use inconSistentCase, it sucks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-1400876276344590874?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/1400876276344590874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=1400876276344590874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1400876276344590874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1400876276344590874'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/04/case-for-consistent-and-and-beautiful.html' title='A case for consistent (and beautiful) coding styles'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-2090379255276607193</id><published>2007-03-18T18:49:00.000-03:00</published><updated>2007-03-18T21:00:53.444-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>Logged in Palm TX ! :-)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_E5vGEWCFjoA/Rf20orHIutI/AAAAAAAAAAM/1-7S8z6OYF8/s1600-h/Palm+TX+ssh.jpeg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_E5vGEWCFjoA/Rf20orHIutI/AAAAAAAAAAM/1-7S8z6OYF8/s400/Palm+TX+ssh.jpeg" alt="" id="BLOGGER_PHOTO_ID_5043385768585247442" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-2090379255276607193?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/2090379255276607193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=2090379255276607193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/2090379255276607193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/2090379255276607193'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/03/logged-in-palm-tx.html' title='Logged in Palm TX ! :-)'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_E5vGEWCFjoA/Rf20orHIutI/AAAAAAAAAAM/1-7S8z6OYF8/s72-c/Palm+TX+ssh.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-6453347867102571869</id><published>2007-03-17T23:30:00.000-03:00</published><updated>2007-03-17T23:38:45.979-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>Amazing ! Logged in Palm TX !</title><content type='html'>Since Palm TX linux USB support in hackndev kernel works flawlessly, I was able to deploy buildroot's chroot jail and setup sshd in it ! I'll post a screenshot soon. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-6453347867102571869?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/6453347867102571869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=6453347867102571869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/6453347867102571869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/6453347867102571869'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/03/amazing-logged-in-palm-tx.html' title='Amazing ! Logged in Palm TX !'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-6058097455132787368</id><published>2007-03-11T12:17:00.000-03:00</published><updated>2007-03-11T12:27:34.073-03:00</updated><title type='text'>Linux on Palm TX !</title><content type='html'>This week, I bought a &lt;a href="http://en.wikipedia.org/wiki/TX_%28handheld%29"&gt;Palm TX&lt;/a&gt;, from a friend of a friend. I've been able to boot linux on it, using &lt;a href="http://www.handhelds.org/moin/moin.cgi/PalmTXBinaryHowTo"&gt;hackndev howto&lt;/a&gt;. I hope that I'll be able to research more fronts now (kernel, applications, performance, etc.), because Palm TX is expected to have a working USB support (so that I can telnet on it :-)) and because of the different capabilities of Palm Tungsten E2 (PXA 255, 16 MB main memory, 320x320 + input area) and Palm TX (PXA 270, 32 MB main memory, 320x480, no input area).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-6058097455132787368?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/6058097455132787368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=6058097455132787368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/6058097455132787368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/6058097455132787368'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/03/linux-on-palm-tx.html' title='Linux on Palm TX !'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-760003698647697595</id><published>2007-03-04T18:37:00.000-03:00</published><updated>2007-03-04T19:23:41.658-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Reference on GPIO programming with Intel PXA</title><content type='html'>In my quest to make the USB controller to work without messing the rest of the system, I've found an interesting &lt;a href="http://raph.people.8d.com/arm-linux-notes.html"&gt;reference&lt;/a&gt; about &lt;a href="http://en.wikipedia.org/wiki/GPIO"&gt;GPIO&lt;/a&gt; configuration for linux ARM. Devices may be activated/deactivated with GPIO ports and, as described in TE2 &lt;a href="http://hackndev.com/node/75?from=40&amp;amp;comments_per_page=10"&gt;forum thread&lt;/a&gt; at hackndev, USB requires controling GPIO 53.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-760003698647697595?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/760003698647697595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=760003698647697595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/760003698647697595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/760003698647697595'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/03/reference-on-gpio-programming-in-pxa.html' title='Reference on GPIO programming with Intel PXA'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-5032513398098902239</id><published>2007-02-25T19:59:00.000-03:00</published><updated>2007-03-04T15:25:04.834-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>Kernel (almost) correctly recompiled for Tungsten E2 !!!</title><content type='html'>Good news ! I was able to boot a home compiled kernel for Palm Tungsten E2 today. :-) This time, I downloaded an older kernel revision from &lt;a href="http://hackndev.svn.sourceforge.net/viewvc/hackndev/"&gt;hackndev svn&lt;/a&gt; (revision 382, I think, from April 2006). It's a modified 2.6.16 and it's probably the revision &lt;a href="http://nerdfeliz.com/"&gt;nerdfeliz&lt;/a&gt; used to compile &lt;a href="http://nerdfeliz.com/palmte2/kernel/"&gt;his kernel&lt;/a&gt;. The adjustments were simple, and after some trial and error, I was able to setup an USB serial port. Here are the steps to build the TE2 kernel:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;download hackndev kernel revision 382&lt;/li&gt;&lt;li&gt;in the main Makefile, change the CROSS_COMPILE to reflect the prefix name of your cross toolchain (mine was "arm-linux-")&lt;/li&gt;&lt;li&gt;in arch/arm/mach-pxa/palmte2/palmte2_buttons.c, remove the __exit macro from palmte2_buttons_remove&lt;/li&gt;&lt;li&gt;do a make menuconfig and load nerdfeliz's configuration &lt;a href="http://nerdfeliz.com/palmte2/kernel/kernel.20060406.config"&gt;20060406&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;add usb gadget support, pxa usb support and serial gadget with CDC ADM support&lt;/li&gt;&lt;li&gt;in boot options, add "g_serial.use_acm=1" option to change usb serial behavior&lt;/li&gt;&lt;li&gt;make and cp&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;That's it. This kernel should boot. :-) To activate USB, we need the following trick:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;mknod /dev/usb_serial c 127 0 (in TE2 /dev directory, not in your PC ;-)  )&lt;/li&gt;&lt;li&gt;add a "getty -L 38400 usb_serial" line in TE2 /etc/inittab&lt;/li&gt;&lt;li&gt;load &lt;a href="http://nerdfeliz.com/palmte2/garux/"&gt;Garux&lt;/a&gt; and set the "Open Cradle USB" option&lt;/li&gt;&lt;li&gt;boot with the device connected to the PC&lt;br /&gt;&lt;/li&gt;&lt;li&gt;after the many usb error messages disconnect the USB cable, wait your desktop flush /dev (wait 5 seconds) and plug the USB connector again :-D&lt;/li&gt;&lt;li&gt;open &lt;a href="http://www.jls-info.com/julien/linux/"&gt;gtkterm&lt;/a&gt; or &lt;a href="http://alioth.debian.org/projects/minicom/"&gt;minicom&lt;/a&gt; and open /dev/ttyACM0 in your desktop (or ACMx if you have other ACM devices)&lt;/li&gt;&lt;/ul&gt;All right, then ! Now, we have a working ARM linux system and a really expensive dumb terminal linked to it !!! Not quite. :-( I was unable to log in the remote system using gtkterm or minicom, either with "root" user or "default" (buildroot default user), even after playing with securetty and passwd/shadow configurations. Also, there's another sad bug: there's some kind of problem with the SD card driver, it keeps popping error messages. More to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-5032513398098902239?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/5032513398098902239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=5032513398098902239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/5032513398098902239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/5032513398098902239'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/kernel-almost-correctly-recompiled-for.html' title='Kernel (almost) correctly recompiled for Tungsten E2 !!!'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-8481004100552746162</id><published>2007-02-20T21:29:00.000-02:00</published><updated>2007-02-20T23:41:55.550-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='x86'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='assembly'/><title type='text'>Getting the vsyscall address from the ELF auxiliary vector [ref]</title><content type='html'>In a &lt;a href="http://hdante.blogspot.com/2007/02/new-style-system-call-in-linux-x86-ref.html"&gt;previous post&lt;/a&gt; I have showed how to make new style system calls in linux x86. I've also remarked that assuming that the __kernel_vsyscall address was always at a fixed address was wrong. The proper way to get the function address would be declare it as "extern", and link it with with linux-gate.so.1. However, I don't know how to do that, because linux gate is virtual and ld can't find it. I'll post here another way, that gets the information passed to the running software by the &lt;a href="http://en.wikipedia.org/wiki/Executable_and_Linkable_Format"&gt;ELF&lt;/a&gt; loader. It retrieves an auxiliary ELF structure, that is present in the stack, after the usual argc, argv and envp pointers.&lt;br /&gt;&lt;br /&gt;First, let's modify our previous hello.asm to call a new function "get_kernel_vsyscall", and set the address returned as the system call address:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;; hello.asm&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bits 32&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;global _start&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;extern get_kernel_vsyscall ; new function in vsyscall.asm&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;section .data&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    hello: db 'Hello World !', 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    hello_len: equ $-hello&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;section .bss&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; linux_gate: resd 1 ; now, linux gate is variable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;section .text&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;_start:&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    ; New code to save the vsyscall address&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov eax, esp&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    call get_kernel_vsyscall&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov [linux_gate], eax&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov eax, 4 ; write()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov ebx, 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov ecx, hello&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov edx, hello_len&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    call &lt;span style="color: rgb(255, 0, 0);"&gt;[&lt;/span&gt;linux_gate&lt;span style="color: rgb(255, 0, 0);"&gt;]&lt;/span&gt; ; call with dereference&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov eax, 1 ; _exit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov ebx, 42&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    call &lt;span style="color: rgb(255, 0, 0);"&gt;[&lt;/span&gt;linux_gate&lt;span style="color: rgb(255, 0, 0);"&gt;]&lt;/span&gt; ; call with dereference&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, we changed "linux_gate" into a variable and filled it with the address returned by "get_kernel_vsyscall", basically. This function loops in the stack, beginning with argc, until it finds the correct (key, value) pair in the ELF header:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;; vsyscall.asm&lt;br /&gt;bits 32&lt;br /&gt;global get_kernel_vsyscall&lt;br /&gt;%define ELF_VSYSCALL_ID 32 ; defined in elf.h as AT_SYSINFO&lt;br /&gt;%define ELF_EOF_ID 0 ; defined in elf.h as AT_NULL&lt;br /&gt;&lt;br /&gt;section .text&lt;br /&gt;get_kernel_vsyscall:&lt;br /&gt;; Returns the kernel vsyscall address from the&lt;br /&gt;; ELF aux vector. The vsyscall address is the&lt;br /&gt;; subroutine used for the new style system call.&lt;br /&gt;; in:&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax: the address, in the stack, of "argc"&lt;br /&gt;; out:&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax: the kernel vsyscall address, or zero&lt;br /&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on error&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    push ebx&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    ; First we skip argc and argv&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov ebx, [eax]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    inc ebx&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    inc ebx&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    shl ebx, 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    add eax, ebx&lt;br /&gt;   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    ; For envp, we need a loop until NULL is found&lt;br /&gt;envp_loop:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov ebx, [eax]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    add eax, 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    cmp ebx, 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    jne envp_loop&lt;br /&gt;   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    ; Now we are in the ELF aux vector. Look for&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    ;  the correct (key, value) pair&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov ebx, [eax]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    cmp ebx, ELF_VSYSCALL_ID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    je vsyscall_id_found&lt;br /&gt;elf_vector_loop:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    add eax, 8&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov ebx, [eax]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    cmp ebx, ELF_VSYSCALL_ID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    je vsyscall_id_found&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    cmp ebx, ELF_EOF_ID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    jne elf_vector_loop&lt;br /&gt;vsyscall_id_found:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    add eax, 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    mov eax, [eax]&lt;br /&gt;   &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    pop ebx&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    ret&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Weird, eh ? We needed to look for the AT_SYSINFO field (ELF_VSYSCALL_ID in the code) in some extra vector provided by the ELF loader. Other executable formats would give those parameters some other way. We have two options, now: use a hardcoded vsyscall address or retrieve it from the ELF vector. Compile and link with "nasm -f elf hello.asm; nasm -f elf vsyscall.asm; ld -o hello hello.o vsyscall.o".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-8481004100552746162?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://manugarg.googlepages.com/aboutelfauxiliaryvectors' title='Getting the vsyscall address from the ELF auxiliary vector [ref]'/><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/8481004100552746162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=8481004100552746162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8481004100552746162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8481004100552746162'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/getting-vsyscall-address-from-elf.html' title='Getting the vsyscall address from the ELF auxiliary vector [ref]'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-1733273322618965250</id><published>2007-02-20T04:23:00.000-02:00</published><updated>2007-02-22T00:42:31.636-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>Hackndev custom linux kernel for PDAs [ref]</title><content type='html'>I've downloaded hackndev modified linux kernel. It's a heavily modified kernel, with support for a lot of ARM PDAs. After reading TE2 &lt;a href="http://hackndev.com/node/75?from=0&amp;amp;comments_per_page=10"&gt;mailing lists&lt;/a&gt; and some fixups I was able to compile a &lt;a href="http://en.wikipedia.org/wiki/Tungsten_Handheld"&gt;Tungsten E2&lt;/a&gt; specific kernel. I couldn't boot it, however, the screen just faded after booting and nothing else. I tried two different kernel revisions and two different "config" files, with no success. The kernel image that is correctly booting in my Palm is from April 2006. I'll continue my research to a proper kernel in hackndev svn around this date.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-1733273322618965250?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://hackndev.com/' title='Hackndev custom linux kernel for PDAs [ref]'/><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/1733273322618965250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=1733273322618965250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1733273322618965250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1733273322618965250'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/hackndev-custom-linux-kernel-for-pdas.html' title='Hackndev custom linux kernel for PDAs [ref]'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-1948356930292000897</id><published>2007-02-18T13:51:00.000-02:00</published><updated>2007-02-18T14:40:49.183-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='x86'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='assembly'/><title type='text'>New style system call in linux x86 [ref]</title><content type='html'>We all know that the x86 architecture is &lt;a href="http://blogs.msdn.com/oldnewthing/archive/2004/09/14/229387.aspx"&gt;bizarre&lt;/a&gt;. An interesting event that has happened in the last 10 years was the change of the "system call" instruction. We all remember from DOS time that we issued "int 0x21" to make a DOS system call, and "int 0x10" to make a ROM BIOS system call. Some of us has even played with the linux system call, "int 0x80". However, five years ago, when using a Pentium IV, someone has found out that the "int" instruction could be &lt;a href="http://lkml.org/lkml/2002/12/9/13"&gt;half as fast&lt;/a&gt; in a Pentium IV than in a Pentium III. Why was that ?&lt;br /&gt;&lt;br /&gt;Intel introduced a new system call instruction in Pentium Pro/Pentium II, called "sysenter" that was supposed to be a "Fast System Call" facility. This meant that Pentium processors had two system call instructions: one that was the fast system call and the other, the slow system call (currently, there are three system calls: "int", "sysenter" and "syscall" !!!). Linux has since migrated to new style system calls. Instead of changing the "int" logic to the "sysenter" logic, another approach was taken. A new virtual shared library was created, called "&lt;a href="http://www.trilithium.com/johan/2005/08/linux-gate/"&gt;linux gate&lt;/a&gt;". This library is virtual because it's like a standard .so library, but only exists in memory (do a "ldd /bin/ls" and see if your system is using "linux-gate.so.1"). Applications (like libc or other system call front-ends) may then call a simple function exported from this library, __kernel_vsyscall, and this function will "systenter", "int" or issue whatever instruction is necessary for completing the system call. So here we have quick dirty "hello world" written in &lt;a href="http://en.wikipedia.org/wiki/NASM_%28computer_program%29"&gt;NASM&lt;/a&gt; assembly for linux (should work on linux 2.6 for x86). The code assumes that __kernel_vsyscall is always mapped at 0xffffe400 in memory (which is wrong ;-)).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;; hello.asm&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;bits 32&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;global _start&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;section .data&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;linux_gate: equ 0xffffe400&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;hello: db 'Hello World !', 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;hello_len: equ $-hello&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;section .text&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;_start:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;mov eax, 4    ; write()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;mov ebx, 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;mov ecx, hello&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;mov edx, hello_len&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;call linux_gate&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;mov eax, 1 ; _exit()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;mov ebx, 42&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;call linux_gate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice that we are making a procedure call, not a system call. Compile it with "nasm -f elf hello.asm; ld -o hello hello.o" . :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-1948356930292000897?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://manugarg.googlepages.com/systemcallinlinux2_6.html' title='New style system call in linux x86 [ref]'/><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/1948356930292000897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=1948356930292000897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1948356930292000897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1948356930292000897'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/new-style-system-call-in-linux-x86-ref.html' title='New style system call in linux x86 [ref]'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-3911761641901052975</id><published>2007-02-17T18:26:00.000-02:00</published><updated>2007-02-17T19:00:26.674-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Pythonic C++</title><content type='html'>Pythonic C++ may not be possible. :-) However, this simple trick will allow you to better follow &lt;a href="http://www.python.org/dev/peps/pep-0008/"&gt;PEP 8&lt;/a&gt; without recurring to pre/post-fixed notations when accessing variable or function members:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;br /&gt;Car::Car(&lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;unsigned&lt;/span&gt; engines) :&lt;br /&gt;  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Vehicle(&lt;span style="color: rgb(204, 51, 204);"&gt;4&lt;/span&gt;, engines)&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="color: rgb(51, 51, 255);"&gt;// use reference instead &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="color: rgb(51, 51, 255);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt; of &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;pointer ;-)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;  &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;Car &amp;self = *&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;this&lt;/span&gt;;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;span style="color: rgb(51, 51, 255);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;self.position = &lt;span style="color: rgb(204, 51, 204);"&gt;5&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;self.movement = &lt;span style="color: rgb(204, 51, 204);"&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Amazing, isn't it ? :-D With just a simple trick we have boosted code readability by one million. PS: how do I highlight "&lt;span style="font-weight: bold; color: rgb(153, 0, 0);"&gt;self&lt;/span&gt;" ? :-)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-3911761641901052975?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/3911761641901052975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=3911761641901052975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/3911761641901052975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/3911761641901052975'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/pythonic-c.html' title='Pythonic C++'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-1460185469348394593</id><published>2007-02-11T18:30:00.000-02:00</published><updated>2007-02-11T18:38:14.119-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Back to buildroot, successful root system deployed</title><content type='html'>I was unable to compile glibc with the target architecture set to xscale-linux-elf. I think I should have used arm-linux at this moment, which is the same that &lt;a href="http://buildroot.uclibc.org/"&gt;buildroot&lt;/a&gt; uses. Back to buildroot, I've removed the software that was giving compile errors (&lt;a href="http://en.wikipedia.org/wiki/Jffs2"&gt;jffs2&lt;/a&gt;/mtd utils) and was able to create a basic root filesystem. I was unable to use the system, however, because I don't have an installed keyboard and there was no virtual keyboard installed. I was unable to boot a newly compiled ARM stock kernel, with USB gadget support for telneting into it. Now I'll rebuild buildroot with Tiny X and Qtopia while I download hackndev's modified kernel and try to enable USB support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-1460185469348394593?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/1460185469348394593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=1460185469348394593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1460185469348394593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/1460185469348394593'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/back-to-buildroot-successful-root.html' title='Back to buildroot, successful root system deployed'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-8123335702160352037</id><published>2007-02-10T16:40:00.000-02:00</published><updated>2007-02-17T18:53:41.271-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARM'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Cross compiling binutils [ref]</title><content type='html'>After being unable to automate a Xscale toolchain cross-build for my Palm TE2 with &lt;a href="http://buildroot.uclibc.org/"&gt;buildroot&lt;/a&gt;, I'll use the MIPS Cross Linux From Scratch to derive a native toolchain for TE2. The binutils cross-build worked with CLFS_TARGET=xscale-linux-elf.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-8123335702160352037?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://cross-lfs.org/view/1.0.0/mips/cross-tools/binutils.html' title='Cross compiling binutils [ref]'/><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/8123335702160352037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=8123335702160352037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8123335702160352037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/8123335702160352037'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/cross-compiling-binutils.html' title='Cross compiling binutils [ref]'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14874663.post-7089422203702851487</id><published>2007-02-10T16:29:00.000-02:00</published><updated>2007-02-17T18:54:05.626-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><title type='text'>Linux on Palm Tungsten E2 How-to [ref]</title><content type='html'>Meet Garux, a linux bootloader for &lt;a href="http://en.wikipedia.org/wiki/Palm_OS"&gt;Palm OS&lt;/a&gt;. There's a specific Palm Tungsten E2 Garux build in that page, along with instructions on how to install &lt;a href="http://opie.handhelds.org/cgi-bin/moin.cgi/"&gt;Opie&lt;/a&gt; on it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14874663-7089422203702851487?l=hdante.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.handhelds.org/moin/moin.cgi/PalmTungstenE2HowTo' title='Linux on Palm Tungsten E2 How-to [ref]'/><link rel='replies' type='application/atom+xml' href='http://hdante.blogspot.com/feeds/7089422203702851487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14874663&amp;postID=7089422203702851487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/7089422203702851487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14874663/posts/default/7089422203702851487'/><link rel='alternate' type='text/html' href='http://hdante.blogspot.com/2007/02/linux-on-palm-tungsten-e2.html' title='Linux on Palm Tungsten E2 How-to [ref]'/><author><name>hdante</name><uri>http://www.blogger.com/profile/17371423835431603557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
