<?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-13753933</id><updated>2011-12-01T12:08:22.261-08:00</updated><category term='flash'/><category term='i386'/><category term='javascript'/><category term='XP'/><category term='restart'/><category term='robot'/><category term='input'/><category term='fedora'/><category term='Windows'/><category term='conference'/><category term='rapidshare'/><category term='PE'/><category term='upgrade'/><category term='MAC'/><category term='watchdog'/><category term='string'/><category term='firefox'/><category term='DriveImage XML'/><category term='language pack'/><category term='hebrew'/><category term='journal'/><category term='script'/><category term='IP'/><category term='x86_64'/><category term='residential gateway'/><category term='v8'/><category term='motorola'/><category term='greasemonkey'/><category term='backup'/><category term='kids'/><category term='linux'/><category term='paper'/><category term='embedded'/><category term='hack'/><category term='FC9'/><category term='boot'/><category term='java'/><category term='CSS'/><category term='internet explorer'/><category term='convert'/><category term='security'/><category term='games'/><category term='Google'/><category term='USB'/><category term='GPL'/><category term='pacman'/><category term='text'/><category term='amule'/><category term='FC8'/><category term='sucks'/><category term='keycode'/><title type='text'>/dev/demiurg</title><subtitle type='html'>Random Linux-related stuff. 

My main blog is &lt;a href="http://gruimed.livejournal.com"&gt;here&lt;/a&gt; (mostly in Russian).</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Demiurg</name><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>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13753933.post-6897958389429854718</id><published>2010-09-05T10:21:00.001-07:00</published><updated>2010-09-05T10:21:57.799-07:00</updated><title type='text'>Debugging the Linux kernel with JTAG</title><content type='html'>My new article about debugging the Linux kernel with JTAG in Embedded Systems Design magazine&lt;br /&gt;&lt;a href="http://www.eetimes.com/design/embedded/4207333/Debugging-the-Linux-kernel-with-JTAG"&gt;Debugging the Linux kernel with JTAG&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-6897958389429854718?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/6897958389429854718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=6897958389429854718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6897958389429854718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6897958389429854718'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2010/09/debugging-linux-kernel-with-jtag.html' title='Debugging the Linux kernel with JTAG'/><author><name>Demiurg</name><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-13753933.post-8051610641252273841</id><published>2010-04-29T05:54:00.000-07:00</published><updated>2010-04-29T06:01:27.603-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>FemtoLinux</title><content type='html'>My new initiative - low latency embedded Linux web site is up and running at &lt;a href="http://femtolinux.com"&gt;www.femtolinux.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Our goal is to reduce Linux interrupt-to-application latency (that's correct, not just interrupt latency) to the same numbers that RTOS such as VxWorks deliver, i.e. 10μs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-8051610641252273841?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/8051610641252273841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=8051610641252273841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8051610641252273841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8051610641252273841'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2010/04/femtolinux.html' title='FemtoLinux'/><author><name>Demiurg</name><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-13753933.post-1751360430409065115</id><published>2009-12-19T11:17:00.000-08:00</published><updated>2009-12-19T11:27:45.869-08:00</updated><title type='text'>Dr. Dobb's | Selenium: Cross-browser Website Testing</title><content type='html'>My new &lt;a href="http://www.ddj.com/web-development/222002626"&gt;article&lt;/a&gt; about Selenium web application testing framework at Dr. Dobb's Journal.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Selenium Remote Control (RC), a tool that lets you programmatically simulate user behavior, launch a browser, open a URL, type some text, click on a button, wait for the web site response and check the browser state. Although implemented in Java and Javascript, Selenium RC supports a variety of languages for test programming, including Java, C#, Perl, Python, and PHP. And last but not least, Selenium is a free open source project with a large and active community of developers and website testers. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-1751360430409065115?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/1751360430409065115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=1751360430409065115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/1751360430409065115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/1751360430409065115'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2009/12/dr-dobbs-selenium-cross-browser-website.html' title='Dr. Dobb&apos;s | Selenium: Cross-browser Website Testing'/><author><name>Demiurg</name><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-13753933.post-507086415764627976</id><published>2009-09-20T15:12:00.000-07:00</published><updated>2009-11-25T05:03:34.708-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='robot'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='keycode'/><category scheme='http://www.blogger.com/atom/ns#' term='input'/><category scheme='http://www.blogger.com/atom/ns#' term='string'/><category scheme='http://www.blogger.com/atom/ns#' term='convert'/><title type='text'>Using Java Robot to type text strings</title><content type='html'>The Java Robot class is very useful for automating various tasks that normally require user interaction. However, it lacks a rather simple but useful feature - it cannot type a string of text, just a single key code. I had to implement this when I worked on one of my projects and to my surprise an extensive googling session showed that quite a lot of people are looking for such functionality.&lt;br /&gt;&lt;br /&gt;The SmartRobot class below extends the standard Java Robot class adding to "type(String text)" and a few other useful methods:&lt;br /&gt;&lt;pre width="80"&gt;&lt;font color="#228B22"&gt;import java.awt.AWTException;&lt;/font&gt;&lt;br /&gt;&lt;font color="#228B22"&gt;import java.awt.Robot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#228B22"&gt;import java.awt.event.KeyEvent;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;font color="#4169E1"&gt;&lt;a name="SmartRobot"&gt;&lt;/a&gt;public class SmartRobot extends Robot &lt;/font&gt;&lt;/strong&gt;{&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;font color="#4169E1"&gt; public SmartRobot()&lt;/font&gt;&lt;/strong&gt; &lt;font color="#4169E1"&gt;throws&lt;/font&gt; AWTException {&lt;br /&gt;  super();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;font color="#4169E1"&gt; public void keyType(int keyCode)&lt;/font&gt;&lt;/strong&gt; {&lt;br /&gt;  keyPress(keyCode);&lt;br /&gt;  delay(50);&lt;br /&gt;  keyRelease(keyCode);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;font color="#4169E1"&gt; public void keyType(int keyCode, int keyCodeModifier)&lt;/font&gt;&lt;/strong&gt; {&lt;br /&gt;  keyPress(keyCodeModifier);&lt;br /&gt;  keyPress(keyCode);&lt;br /&gt;  delay(50);&lt;br /&gt;  keyRelease(keyCode);&lt;br /&gt;  keyRelease(keyCodeModifier);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;font color="#4169E1"&gt; public void type(String text)&lt;/font&gt;&lt;/strong&gt; {&lt;br /&gt;  String textUpper = text.toUpperCase();&lt;br /&gt;&lt;br /&gt;  &lt;font color="#4169E1"&gt;for&lt;/font&gt; (int i=0; i&amp;lt;text.length(); ++i) {&lt;br /&gt;   typeChar(textUpper.charAt(i));&lt;br /&gt;  }  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;font color="#4169E1"&gt; private void typeChar(char c)&lt;/font&gt;&lt;/strong&gt; {&lt;br /&gt;  boolean shift = true;&lt;br /&gt;  int keyCode;&lt;br /&gt;  &lt;br /&gt;  &lt;font color="#4169E1"&gt;switch&lt;/font&gt; (c) {&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '~':&lt;br /&gt;   keyCode = (int)'`';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '!':&lt;br /&gt;   keyCode = (int)'1';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '@':&lt;br /&gt;   keyCode = (int)'2';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '#':&lt;br /&gt;   keyCode = (int)'3';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '$':&lt;br /&gt;   keyCode = (int)'4';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '%':&lt;br /&gt;   keyCode = (int)'5';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '^':&lt;br /&gt;   keyCode = (int)'6';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '&amp;':&lt;br /&gt;   keyCode = (int)'7';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '*':&lt;br /&gt;   keyCode = (int)'8';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '(':&lt;br /&gt;   keyCode = (int)'9';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; ')':&lt;br /&gt;   keyCode = (int)'0';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; ':':&lt;br /&gt;   keyCode = (int)';';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '_':&lt;br /&gt;   keyCode = (int)'-';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '+':&lt;br /&gt;   keyCode = (int)'=';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '|':&lt;br /&gt;   keyCode = (int)'\\';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;&lt;font color="#B22222"&gt;//  case '"':&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#B22222"&gt;//   keyCode = (int)'\'';&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#B22222"&gt;//   break;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '?':&lt;br /&gt;   keyCode = (int)'/';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '{':&lt;br /&gt;   keyCode = (int)'[';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '}':&lt;br /&gt;   keyCode = (int)']';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '&lt;':&lt;br /&gt;   keyCode = (int)',';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; '&gt;':&lt;br /&gt;   keyCode = (int)'.';&lt;br /&gt;   &lt;font color="#4169E1"&gt;break&lt;/font&gt;;&lt;br /&gt;&lt;strong&gt;&lt;font color="#FF0000"&gt;  default:&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;   keyCode = (int)c;&lt;br /&gt;   shift = false;&lt;br /&gt;  }&lt;br /&gt;  &lt;font color="#4169E1"&gt;if&lt;/font&gt; (shift)&lt;br /&gt;   keyType(keyCode, KeyEvent.VK_SHIFT);&lt;br /&gt;  &lt;font color="#4169E1"&gt;else&lt;/font&gt;&lt;br /&gt;   keyType(keyCode);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;&lt;font color="#4169E1"&gt; private int charToKeyCode(char c)&lt;/font&gt;&lt;/strong&gt; {&lt;br /&gt;  &lt;font color="#4169E1"&gt;switch&lt;/font&gt; (c) {&lt;br /&gt;  &lt;font color="#4169E1"&gt;case&lt;/font&gt; ':':&lt;br /&gt;   &lt;font color="#4169E1"&gt;return&lt;/font&gt; ';';&lt;br /&gt;  }&lt;br /&gt;  &lt;font color="#4169E1"&gt;return&lt;/font&gt; (int)c;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The code can be downloaded &lt;a href="http://demiurgos.com/SmartRobot.java"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-507086415764627976?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/507086415764627976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=507086415764627976' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/507086415764627976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/507086415764627976'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2009/09/using-java-robot-to-type-text-strings.html' title='Using Java Robot to type text strings'/><author><name>Demiurg</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13753933.post-6256361516217265582</id><published>2008-10-15T02:33:00.000-07:00</published><updated>2010-06-27T03:55:08.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='language pack'/><category scheme='http://www.blogger.com/atom/ns#' term='motorola'/><category scheme='http://www.blogger.com/atom/ns#' term='hebrew'/><category scheme='http://www.blogger.com/atom/ns#' term='v8'/><title type='text'>Hebrew for Motorola RAZR2 V8</title><content type='html'>RAZR2 V8 is not sold officially in Israel and according to Motorola it has no Hebrew support. Fortunately, as it often happens, they (Motorola) don't really know what they are talking about. Although there is no LP0033 (Language Pack 0033) which usually includes Hebrew support, LP0034A which can be downloaded &lt;a href="http://modmymoto.com/forums/downloads.php?do=file&amp;id=7019"&gt; here &lt;/a&gt; includes, among other languages, Hebrew fonts!&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;br /&gt;&lt;br /&gt;Update 0:&lt;br /&gt;It appears that LP0034A does not include full Hebrew language support, just the Hebrew fonts (which is enough to read Hebrew text messages).&lt;br /&gt;&lt;br /&gt;Update 1: &lt;br /&gt;If you do not know how to transfer the language pack to your phone google for RSD Lite utility.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-6256361516217265582?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/6256361516217265582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=6256361516217265582' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6256361516217265582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6256361516217265582'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2008/10/hebrew-for-motorola-razr2-v8.html' title='Hebrew for Motorola RAZR2 V8'/><author><name>Demiurg</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13753933.post-6593918741123642152</id><published>2008-09-06T03:29:00.000-07:00</published><updated>2008-09-06T03:43:40.412-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DriveImage XML'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Never use DriveImage XML for backup</title><content type='html'>DriveImage XML looks very nice - it's free, has a simple and easy-to-use menu, supports all the features that you would normally need to backup your system:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Can backup drive that it (and Windows) is running from&lt;br /&gt;&lt;li&gt; Available as Bart PE module and can be easily integrated into Bart PE bootable CD or USB flash drive&lt;br /&gt;&lt;li&gt; And more&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;It's a charming piece of software, until you actually have to use it to restore you backup. Then you suddenly discover that it is almost impossible to restore you backup!&lt;br /&gt;&lt;br /&gt;First, it does not really support multiple CD/DVD media. This is especially frustrating, as during backup it creates multiple image chunks of 650MB size, which makes you think that it will be able to restore the drive from multiple CD media. Bummer! When you try to do so, you get “error reading from Compressed stream” message.&lt;br /&gt;&lt;br /&gt;Second, it can restore to existing partition only, however during the restore process it destroys that partition and if the restore fails - you have to recreate this partition using some other software.&lt;br /&gt;&lt;br /&gt;And, when and if you somehow manage to restore the image you discover that it's not bootable. But this is easy to fix with fdisk (just make the restore partition active), provided you have a bootable CD/USB with relevant utilities.&lt;br /&gt;&lt;br /&gt;To summarize, if your backup does not fit into a single DVD media, you can only use DriveImage XML to restore from network drive (or physically connect you faulty drive to another PC). &lt;br /&gt;&lt;br /&gt;OR better yet, use a different backup software.&lt;br /&gt;&lt;br /&gt;Actually, this is an interesting marketing strategy - most people use backup software to backup only, restores are rare. So it pays off to invest in backup features and neglect almost entirely restore functionality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-6593918741123642152?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/6593918741123642152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=6593918741123642152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6593918741123642152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6593918741123642152'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2008/09/never-use-driveimage-xml-for-backup.html' title='Never use DriveImage XML for backup'/><author><name>Demiurg</name><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-13753933.post-6288642844888070543</id><published>2008-09-03T12:26:00.000-07:00</published><updated>2008-09-06T03:28:24.592-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PE'/><category scheme='http://www.blogger.com/atom/ns#' term='XP'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='USB'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='boot'/><title type='text'>How to boot Windows XP from USB flash drive</title><content type='html'>This stuff is not exactly new, but nevertheless quite useful, as it appears that there are lots of contradictory and quite complex guides on the subject.&lt;br /&gt;&lt;br /&gt;The truth is that it is quite simple to make bootable WinXP USB drive (at least it worked like a charm for me and it would be interesting to learn about other people's experiences on different hardware).&lt;br /&gt;&lt;br /&gt;Prerequisite:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.nu2.nu/pebuilder/"&gt; BartPE builder &lt;/a&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://gocoding.com/page.php?al=petousb"&gt; PeToUSB &lt;/a&gt;&lt;br /&gt;&lt;li&gt; Windows XP installation CD&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Instructions:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Download and install BartPE bulder and PeToUSB&lt;br /&gt;&lt;li&gt; Run BartPE, follow the instructions to create Windows PE installation&lt;br /&gt;&lt;li&gt; Run PeToUSB, follow the instructions to format the USB drive and copy Windows PE files&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;That's it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-6288642844888070543?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/6288642844888070543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=6288642844888070543' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6288642844888070543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/6288642844888070543'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2008/09/how-to-boot-windows-xp-from-usb-flash.html' title='How to boot Windows XP from USB flash drive'/><author><name>Demiurg</name><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>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13753933.post-3695785932364497236</id><published>2008-05-21T12:28:00.000-07:00</published><updated>2008-05-21T13:04:40.874-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='i386'/><category scheme='http://www.blogger.com/atom/ns#' term='FC9'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='FC8'/><category scheme='http://www.blogger.com/atom/ns#' term='x86_64'/><title type='text'>Upgrading Fedora i386 to x86_64</title><content type='html'>Fedora Core 9 installation script warns that upgrading FC i386 to FC9 x86_64 is likely to fail, which is indeed what happens if you chose to proceed. However, the resulting mess can be fixed relatively easily.&lt;br /&gt;&lt;br /&gt;First, the grub configuration must be fixed. Just boot from the installation DVD, do "chroot /mnt/sysimage", edit grub.conf file to include the correct kernel and other filenames (note that for some reason it was moved from /etc/grub.conf to /boot/grub/grub.conf) and rerun grub-install. After that you should be able to boot.&lt;br /&gt;&lt;br /&gt;The next step is to fix yum/rpm configuration. Edit "/etc/rpm/platform" and change the platform to "x86_64-redhat-linux". After that yum should work OK, except that for some reason the DVD repository may not be configured correctly. Check that " /etc/yum.repos.d/Fedora-install-media.repo" (or any other InstallMedia configuration file) has the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;[InstallMedia]&lt;br /&gt;name=Fedora 9&lt;br /&gt;mediaid=1210111941.792844&lt;br /&gt;metadata_expire=-1&lt;br /&gt;gpgcheck=0&lt;br /&gt;cost=500&lt;br /&gt;enabled = 1&lt;br /&gt;baseurl=file:///media/Fedora%209%20x86_64%20DVD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now you should have more or less working system with lots of packages from previous installation which were not upgraded correctly. I wrote a small script which looks for all Fedora Core 8 packages and upgrades them to FC9 x86_64. Remember to disable all repositories except for InstallMedia before running the script:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;for i in `rpm -qa | grep fc8 `; do&lt;br /&gt;    echo  $i&lt;br /&gt;    j=`rpm -q $i --qf %{NAME}`&lt;br /&gt;    echo $j&lt;br /&gt;    rpm -e --nodeps $i&lt;br /&gt;    yum -y install $j&lt;br /&gt;done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You may also want to upgrade all "i386" packages in the same way, in which case just replace "fc8" with "i386" in the above script.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-3695785932364497236?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/3695785932364497236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=3695785932364497236' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/3695785932364497236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/3695785932364497236'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2008/05/upgrading-fedora-i386-to-x8664.html' title='Upgrading Fedora i386 to x86_64'/><author><name>Demiurg</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13753933.post-7212289460871336554</id><published>2007-11-29T11:19:00.000-08:00</published><updated>2007-11-29T11:28:15.226-08:00</updated><title type='text'>Embedded Linux development tools</title><content type='html'>I read a number of articles about embedded Linux development tools. Some claimed that these tools do not exist, yet another one tried to convince everybody that embedded Linux tools do not exist because there is no market for them.&lt;br /&gt;&lt;br /&gt;My recent &lt;a href="http://embedded.com/design/opensource/204300381"&gt;article&lt;/a&gt; at Embedded Systems Design magazine briefly mentions a few commercial offerings (yes, these tools exist and the companies that produce them are profitable), but it concentrates mostly on what you can do (hint - quite a lot) if you chose the do-it-yourself approach to embedded Linux tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-7212289460871336554?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/7212289460871336554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=7212289460871336554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/7212289460871336554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/7212289460871336554'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/11/embedded-linux-development-tools.html' title='Embedded Linux development tools'/><author><name>Demiurg</name><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-13753933.post-1222900745375555985</id><published>2007-11-02T06:45:00.000-07:00</published><updated>2007-11-02T06:59:29.588-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='watchdog'/><category scheme='http://www.blogger.com/atom/ns#' term='restart'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='amule'/><title type='text'>aMule restart script</title><content type='html'>Accidentally discovered that some people still use my old aMule watchdog script. The script  can be downloaded &lt;a href="http://www.demiurgos.com/run_amule.sh"&gt;here&lt;/a&gt;. It is quite trivial - it simply checks from time to time that somebody is still listening on the aMule port. Since aMule tends to crash and freeze quite often (at least used to when I was using it) it is rather handy.&lt;br /&gt;&lt;br /&gt;The script:&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;# aMule watchdog&lt;br /&gt;# Checks on aMule every 5 (configurable parameter) minutes&lt;br /&gt;# and restarts it if aMule does not respond.&lt;br /&gt;# Requires Netcat&lt;br /&gt;#&lt;br /&gt;# Created by Demiurg - sasha.sirotkin [AT] gmail.com&lt;br /&gt;# Have fun.&lt;br /&gt;&lt;br /&gt;MULENAME=amule&lt;br /&gt;MULE=`which ${MULENAME}`&lt;br /&gt;NC=`which nc`&lt;br /&gt;&lt;br /&gt;TCPPORT=4642&lt;br /&gt;SLEEP=300&lt;br /&gt;&lt;br /&gt;test -e ${MULE} || (echo "${MULE} not found. Dying" ; exit 1)&lt;br /&gt;test -e ${NC} || (echo "Netcat not found. Dying" ; exit 1)&lt;br /&gt;&lt;br /&gt;FIRSTLOOP=1&lt;br /&gt;&lt;br /&gt;rm ~/.aMule/muleLock&lt;br /&gt;&lt;br /&gt;while true; do&lt;br /&gt;#    echo "Waiting"&lt;br /&gt;   test ${FIRSTLOOP}  || sleep ${SLEEP}&lt;br /&gt;   unset FIRSTLOOP&lt;br /&gt;#    echo "Checking"&lt;br /&gt;   nc localhost ${TCPPORT} &lt; /dev/null &amp;amp;&amp;amp; continue&lt;br /&gt;   echo "Restarting"&lt;br /&gt;   date&lt;br /&gt;   killall -9 ${MULENAME}&lt;br /&gt;   sleep 1&lt;br /&gt;   ${MULE} &amp;amp;&lt;br /&gt;#    echo "Running"&lt;br /&gt;done&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-1222900745375555985?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/1222900745375555985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=1222900745375555985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/1222900745375555985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/1222900745375555985'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/11/amule-restart-script.html' title='aMule restart script'/><author><name>Demiurg</name><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-13753933.post-5862301551952809261</id><published>2007-10-25T14:05:00.000-07:00</published><updated>2007-10-27T02:47:24.162-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='greasemonkey'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rapidshare'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>Yet another Rapidshare hack</title><content type='html'>A few weeks after I published my Rapidshare Linux &lt;a href="http://gruimed.blogspot.com/2007/10/rapidshare-hack-for-linux.html"&gt;hack&lt;/a&gt; (which removes the delay between two consecutive downloads by changing the MAC and the IP addresses) and probably completely unrelated to this Rapidshare introduced another annoying "feature" - up to 1 minute delay before the first download.&lt;br /&gt;&lt;br /&gt;It turns out that there is a trivial hack for this too (but only for these who are &lt;s&gt;smart&lt;/s&gt;lucky to use Firefox). First you will have to install &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/748"&gt;Greasemonkey&lt;/a&gt; Firefox addon and after that my Rapidshare delay removal &lt;a href="http://www.demiurgos.com/rapidshare.delay.user.js"&gt;script&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;P.S. This Javascript hack is not exactly new, I just automated it using Greasemonkey.&lt;br /&gt;P.P.S. Here is the script source code:&lt;br /&gt;&lt;br /&gt;window.addEventListener(&lt;br /&gt;   'load',&lt;br /&gt;   function() { this.c = 0},&lt;br /&gt;   true);&lt;br /&gt;&lt;br /&gt;It simply changes the value of "c" variable to 0 after the page finishes loading. This variable is used by Rapidshare Javascript delay function, so my script just sets this delay to 0.&lt;br /&gt;&lt;br /&gt;Update: Apparently this does not work anymore as they check the time delay on the server too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-5862301551952809261?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/5862301551952809261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=5862301551952809261' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/5862301551952809261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/5862301551952809261'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/yet-another-rapidshare-hack.html' title='Yet another Rapidshare hack'/><author><name>Demiurg</name><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-13753933.post-523109809760178714</id><published>2007-10-22T04:02:00.000-07:00</published><updated>2007-10-22T05:57:00.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kids'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='pacman'/><title type='text'>PacMan for kids</title><content type='html'>After giving up efforts to find a decent computer game for my 3.5 year old kid I figured out that I was just reinventing the wheel. Tons of good old computer games can be easily adapted for kids. So I started with PacMan - mostly because I could came across an easy to modify open source implementation at &lt;a href="http://www.bennychow.com/"&gt;www.bennychow.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So... here it is - PacMan for kids. I slowed the game a little bit, but most importantly I decreased by the factor of 3 the speed of "ghosts" compared to the pacman. And added more lives so that one game would give me at least the time I need to finish my beer :)&lt;br /&gt;&lt;br /&gt;You can download the game &lt;a href="http://www.demiurgos.com/PacManKid.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Temporarily it is also available &lt;a href="http://www.demiurgos.com/pacman/PacMan.html"&gt;online&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-523109809760178714?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/523109809760178714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=523109809760178714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/523109809760178714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/523109809760178714'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/pacman-for-kids.html' title='PacMan for kids'/><author><name>Demiurg</name><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-13753933.post-5447381066610850957</id><published>2007-10-20T04:52:00.001-07:00</published><updated>2007-10-20T08:42:30.765-07:00</updated><title type='text'>Magnatune</title><content type='html'>Magnatune is an open source buzzword compliant... what exactly ? I'm not sure what are they since I did not visit their web site, but they surely did not save on buzzwords.&lt;br /&gt;&lt;br /&gt;List of open source related buzzwords from the &lt;a href="http://www.linuxjournal.com/article/9722"&gt;LinuxJournal&lt;/a&gt; "article":&lt;br /&gt;"DRM-free"&lt;br /&gt;"freedom”&lt;br /&gt;"We Are Not Evil”&lt;br /&gt;"Creative Commons "&lt;br /&gt;"Open Source Community"&lt;br /&gt;"Freedom Fighter"&lt;br /&gt;"Linux"&lt;br /&gt;" Open Music"&lt;br /&gt;"source code”&lt;br /&gt;"give it back to the community"&lt;br /&gt;"innovation"&lt;br /&gt;"crisis in music"&lt;br /&gt;" Running on Open Source"&lt;br /&gt;"Linux, Apache, PHP, MySQL"&lt;br /&gt;&lt;br /&gt;For god's sake, this is not an open source project, they are just trying to find a way to sell you some lousy albums that nobody would by! And their definition of "Open Music" is quite interesting, they invite you to "be a part of the Magnatune's marketing team by requesting free recruiting cards or printing Magnatune mini-posters and handing them out", i.e. work for them just because their web site runs on Linux!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-5447381066610850957?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/5447381066610850957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=5447381066610850957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/5447381066610850957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/5447381066610850957'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/magnatune.html' title='Magnatune'/><author><name>Demiurg</name><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-13753933.post-3397412622857078273</id><published>2007-10-16T14:59:00.000-07:00</published><updated>2007-10-16T15:29:07.348-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Transferring information between Java applets</title><content type='html'>I stumbled upon a rather lengthy article at &lt;a href="http://articles.techrepublic.com.com/5100-22-1051787.html"&gt;TechRepublic&lt;/a&gt; about a workaround for one of the Java applet security limitations, which does not allow any information to be passed between Java applets originating from different servers. The article talks about transferring files, but there is no reason not to generalize it to the transfer of any kind of information.&lt;br /&gt;&lt;br /&gt;Their solution is to write what they call a "middleman" - an application that should reside on a web server and route the traffic between its applet and the "middleman" application running on the server of the other applet, which in its turn should forward the information to the receiving applet.&lt;br /&gt;&lt;br /&gt;Well... it's surely an interesting exercise, but... guys, this is stupid!&lt;br /&gt;&lt;br /&gt;The following trivial hack using Javascript allows you to do the same, i.e. pass information between two Java applets originating from different servers, in a fraction of an effort needed to implement the hack from TechRepublic article. This is actually very simple - the above Java applets are not allowed to communicate with each other, but they both can communicate with the Javascript!&lt;br /&gt;&lt;br /&gt;There are a couple of ways to call Java code from Javascript, but the simplest is &lt;code&gt;"java.package.class.staticMethod()". &lt;/code&gt;So all you have to do is to call the  relevant methods of both classes from Javascript and pass the information from one to another.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://java.sun.com/sfaq/#prevent"&gt;Java applet security limitations, Sun Java security specifications&lt;/a&gt;  &lt;code&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-3397412622857078273?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/3397412622857078273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=3397412622857078273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/3397412622857078273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/3397412622857078273'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/transferring-information-between-java.html' title='Transferring information between Java applets'/><author><name>Demiurg</name><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-13753933.post-2396097963962179529</id><published>2007-10-15T14:47:00.000-07:00</published><updated>2007-10-16T15:19:13.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='GPL'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>DViCO</title><content type='html'>DViCO is a Korean company which produces quite popular TViX media players. Most of them are based on Sigma Designs reference board and run some kind of embedded Linux. They even have a GPL page on their website with the full text of GPL v2 and a link to the source code  tarball, which indicates that they admit to using Linux in their systems and understand what GPL is.&lt;br /&gt;&lt;br /&gt;The only problem is that the above tarball, which is supposed to include the full sources of their software along with the compilation instructions, is identical to the one released by Sigma Designs for their EM8500 reference board. As TViX system has clearly different hardware and software, these source won't run "as is" on their hardware and clearly do not contain their modifications, i.e. derived work, to the GPL code.&lt;br /&gt;&lt;br /&gt;Unfortunately, this is very typical and common case of GPL violation.&lt;br /&gt;&lt;br /&gt;Interestingly enough, their "firmware upgrade" image appears to be encrypted in some way as I did not manage to find any of the known Linux filesystem images inside of it when I tried to get shell access.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://www.dvico.com/"&gt;DViCO&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.tvix.co.kr/gpl/"&gt; DViCO "GPL" page&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.uclinux.org/pub/uClinux/ports/arm/EM8500/"&gt; Sources of Sigma Designs EM8500 reference board&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-2396097963962179529?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/2396097963962179529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=2396097963962179529' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/2396097963962179529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/2396097963962179529'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/dvico.html' title='DViCO'/><author><name>Demiurg</name><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-13753933.post-2912014774201237665</id><published>2007-10-14T10:09:00.000-07:00</published><updated>2007-10-16T15:19:47.167-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>Internet Explorer</title><content type='html'>Well, I never particularly liked that thing (IE), but I did not realize how bad it sucks from the technical point of view until I started  doing some Joomla coding. Apparently IE6 does not support neither PNG alpha transparency nor CSS tooltips, i.e. :hover class on elements other than links.&lt;br /&gt;&lt;br /&gt;Needless to say that Firefox supports all these. Interesting whether they finally fixed it in IE7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-2912014774201237665?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/2912014774201237665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=2912014774201237665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/2912014774201237665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/2912014774201237665'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/internet-explorer.html' title='Internet Explorer'/><author><name>Demiurg</name><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-13753933.post-8232959875295854985</id><published>2007-10-13T14:55:00.000-07:00</published><updated>2007-10-16T15:20:01.152-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Analytics</title><content type='html'>Is it just me or Google Analytics, however cool it may look at the first sight, has absolutely terrible user interface and actually does not come close to Analog and Webalizer ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-8232959875295854985?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/8232959875295854985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=8232959875295854985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8232959875295854985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8232959875295854985'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/google-analytics.html' title='Google Analytics'/><author><name>Demiurg</name><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-13753933.post-8081171669801850507</id><published>2007-10-09T13:59:00.000-07:00</published><updated>2007-10-16T15:20:24.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IP'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rapidshare'/><category scheme='http://www.blogger.com/atom/ns#' term='MAC'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>Rapidshare hack for Linux</title><content type='html'>As it turns out  it's unbelievably easy to overcome annoying time delay between downloads of the free Rapidshare account. And it's even easier if you happen to run Linux.&lt;br /&gt;&lt;br /&gt;Rapidshare "remembers" the IP address you used to download, so all you have to do is to change it between subsequent downloads by restarting DHCP client. In order to ensure that you will not get the same IP address (Linux DHCP client tries to get the same IP by first issuing the DHCP REQUEST and only if it fails - DHCP DISCOVER; and most DHCP servers will try to lease the same IP address for the same MAC address) you have to change... right, the MAC address. And, as I mentioned above, this is yet another example of Linux being much more user-oriented OS than the other one - changing MAC address on Linux is a breeze.&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;ifdown eth0&lt;br /&gt;let "rnum = $RANDOM % 255"&lt;br /&gt;d=`printf "%02X\n" $rnum`&lt;br /&gt;ifconfig eth0 hw ether 00:0F:EA:37:9F:$d&lt;br /&gt;rm /var/lib/dhclient/dhclient-eth0.leases&lt;br /&gt;ifup eth0&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Remember to change the MAC address of the correct interface, i.e. the one on which you get the normal (routable) IP address.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-8081171669801850507?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/8081171669801850507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=8081171669801850507' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8081171669801850507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8081171669801850507'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/rapidshare-hack-for-linux.html' title='Rapidshare hack for Linux'/><author><name>Demiurg</name><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>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13753933.post-8574168990373399378</id><published>2007-10-08T13:24:00.000-07:00</published><updated>2007-10-08T13:27:55.455-07:00</updated><title type='text'>Linux journalS</title><content type='html'>Apart from Linux Journal that actually publishes some interesting stuff from time to time, who the heck is reading Linux Magazine and Linux User and Developer ?&lt;br /&gt;&lt;br /&gt;And more interestingly, who is the moron that is financing all this crap ?&lt;br /&gt;&lt;br /&gt;Heck, Linux Magazine web site layout apparently was not even tested under Firefox!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-8574168990373399378?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/8574168990373399378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=8574168990373399378' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8574168990373399378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/8574168990373399378'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/linux-journal-s.html' title='Linux journal&lt;i&gt;S&lt;/i&gt;'/><author><name>Demiurg</name><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-13753933.post-4384819068018495675</id><published>2007-10-08T00:25:00.000-07:00</published><updated>2007-10-08T00:57:22.112-07:00</updated><title type='text'>Nouveau drivers</title><content type='html'>I keep hearing that once Nouveau drivers (open source drivers for NVIDIA cards) reach maturity we will finally have video drivers problem "solved".  It is funny how even intelligent people fail to see the reality of their (well, our) beloved Linux OS. Nouveau project will never reach maturity. Look at the pace at which NVIDIA and ATI are releasing new products. We will never catch up!&lt;br /&gt;&lt;br /&gt;And lets not forget that the situation with ATI open source drivers is even worse. The only video card for which there are decent open source drivers is Intel and this situation is not going to change any time soon. Never, actually.&lt;br /&gt;&lt;br /&gt;People may get fooled by the fact that the situation with Linux video drivers improved dramatically over the past 10 years, but this is only because there much less video card companies than it used to be.&lt;br /&gt;&lt;br /&gt;However, I'd argue that, in spite of all the above, the situation with Linux video drivers is OK. Desktop Linux is a niche OS and will remain such until something dramatic happens. And for a niche OS it is perfectly acceptable to support only very specific hardware, i.e. Intel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-4384819068018495675?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/4384819068018495675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=4384819068018495675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/4384819068018495675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/4384819068018495675'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/nouveau-drivers.html' title='Nouveau drivers'/><author><name>Demiurg</name><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-13753933.post-4582625509517776110</id><published>2007-10-07T17:28:00.000-07:00</published><updated>2007-10-16T15:21:09.605-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='paper'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><title type='text'>LinuxConf Europe 2007 article and presentation: Hacking Embedded Linux Based Home Appliances</title><content type='html'>Abstract&lt;br /&gt;&lt;br /&gt;Embedded Linux is an interesting phenomenon. With millions of devices shipped to-day, from residential gateways to cellular phones, it may be Linux's biggest success story ever. However, it gets disproportionately small amount of interest from the open source community. Part of the blame is on the companies developing embedded Linux based products, which feel uncomfortable with the idea of opensource. However, even bigger problem can be the fact that embedded systems are perceived as black boxes which are very hard to hack, contrary to an "open" PC.&lt;br /&gt;This article tries to break this stigma by showing Linux developers how to hack various Linux based devices that they might already have at home. If we understand that it's easy and fun to hack embedded systems, I believe embedded Linux issues will get more attention from opensource community, which will eventually result in more embedded-friendly Linux kernel, more embedded-oriented opensource projects and better Linux-based products.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://www.linuxconf.eu/2007/papers/Sirotkin.pdf"&gt;article&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.demiurgos.com/lce2007/presentation.pdf"&gt;presentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-4582625509517776110?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/4582625509517776110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=4582625509517776110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/4582625509517776110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/4582625509517776110'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/linuxconf-europe-2007-article-and.html' title='LinuxConf Europe 2007 article and presentation: Hacking Embedded Linux Based Home Appliances'/><author><name>Demiurg</name><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-13753933.post-7554712845322237972</id><published>2007-10-07T17:23:00.000-07:00</published><updated>2007-10-16T15:21:36.727-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='journal'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='paper'/><category scheme='http://www.blogger.com/atom/ns#' term='residential gateway'/><title type='text'>Linux Journal article: Building a Next-Generation Residential Gateway</title><content type='html'>A bit high-level &lt;a href="http://www.linuxjournal.com/article/9691"&gt;article&lt;/a&gt; about how the simple lego-like approach of building Linux-based residential gateways is going to change when vendors are required to support high throughputs of 802.11n, PON and DOCSIS 3 on cheap commodity hardware.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13753933-7554712845322237972?l=gruimed.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gruimed.blogspot.com/feeds/7554712845322237972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13753933&amp;postID=7554712845322237972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/7554712845322237972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13753933/posts/default/7554712845322237972'/><link rel='alternate' type='text/html' href='http://gruimed.blogspot.com/2007/10/linux-journal-article-building-next.html' title='Linux Journal article: Building a Next-Generation Residential Gateway'/><author><name>Demiurg</name><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>
