<?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-684890336075246090</id><updated>2011-11-06T15:05:10.880-08:00</updated><category term='linux'/><category term='mobile'/><category term='node.js'/><category term='xml'/><category term='ssd'/><category term='javascript'/><category term='Freemind'/><category term='html5'/><category term='usb'/><category term='firebug'/><category term='tomcat'/><category term='wine'/><category term='bash'/><category term='pdf'/><category term='jslint'/><category term='android'/><category term='CoffeeScript'/><category term='gedit'/><category term='cross-domain'/><category term='svg'/><category term='windows'/><category term='rhino'/><category term='open-source'/><category term='hardware'/><category term='xhr'/><title type='text'>Juve's Open Web Log</title><subtitle type='html'>Blogging about Open Source and the technologies for the Open Web</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-993716030378282947</id><published>2011-11-06T15:05:00.000-08:00</published><updated>2011-11-06T15:05:10.897-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Freemind'/><category scheme='http://www.blogger.com/atom/ns#' term='CoffeeScript'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><title type='text'>Freemind to Mediawiki via CoffeeScript</title><content type='html'>Check out my new project at Github. I wrote a little &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;Freemind&lt;/a&gt; to &lt;a href="http://www.mediawiki.org/wiki/MediaWiki"&gt;Mediawiki&lt;/a&gt; converter using &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/ubunatic/mm2wiki"&gt;https://github.com/ubunatic/mm2wiki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;CoffeeScript does really a good job for writing such software. Parsers, writers, and other data processing stuff can be easily done, thanks to CoffeeScript comprehensions and other smart language features.&lt;br /&gt;Together with running all code running smoothly via &lt;a href="http://nodejs.org"&gt;node.js&lt;/a&gt;... Really nice!&lt;br /&gt;&lt;br /&gt;-- written on an iPad, typing long text, and copying links is horrible ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-993716030378282947?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/993716030378282947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=993716030378282947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/993716030378282947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/993716030378282947'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/11/freemind-to-mediawiki-via-coffeescript.html' title='Freemind to Mediawiki via CoffeeScript'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-3379425634875415712</id><published>2011-10-11T07:13:00.000-07:00</published><updated>2011-10-11T07:13:46.948-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Whitening SumatraPDF</title><content type='html'>I am using &lt;a href="http://blog.kowalczyk.info/software/sumatrapdf/download-free-pdf-viewer.html"&gt;SumatraPDF &lt;/a&gt;as OSS alternative for the heavyweight Adobe Reader.&lt;br /&gt;Sumatra is lightning fast and I like it more than Evince, which I used before.&lt;br /&gt;&lt;br /&gt;One thing that bugged me was the ugly yellow background. It makes the tool and unfortunately also it's website look unprofessional. Here is how you can change that - at least the tool, not the web site ;)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iIPyM0WtPak/TpRMIW6pJQI/AAAAAAAAAac/jPiiscyG1qk/s1600/sumatra-regedit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-iIPyM0WtPak/TpRMIW6pJQI/AAAAAAAAAac/jPiiscyG1qk/s640/sumatra-regedit.png" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Start &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;SumatraPDF.exe&lt;/span&gt;&lt;span style="font-size: small;"&gt; at least once. You may have to "&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;open with...&lt;/span&gt;&lt;span style="font-size: small;"&gt;" it with a pdf file first.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Fire up &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;regedit &lt;/span&gt;&lt;span style="font-size: small;"&gt;and&lt;b&gt; &lt;/b&gt;find (Strg+F) "&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;SumatraPDF.exe&lt;/span&gt;&lt;span style="font-size: small;"&gt;". You need to find a key named:&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt; HKEY_USERS\...\Software\Classes\Applications\SumatraPDF.exe\shell\open\command&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;There you should find a value named: &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(Default)&lt;/span&gt; that points to your Sumatra executable (see my screenshot)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Double-click the &lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(Default)&lt;/span&gt; value and add:&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;-bg-color 0xffffff &lt;/span&gt;&lt;span style="font-size: small;"&gt;between the&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt; "...SumatraPDF.exe"&lt;/span&gt;&lt;span style="font-size: small;"&gt; and the &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;"%1"&lt;/span&gt;&lt;span style="font-size: small;"&gt; (as in my screenshot)&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Done!&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;More Sumatra command line parameters can be found here: &lt;a href="http://blog.kowalczyk.info/software/sumatrapdf/manual.html%20"&gt;http://blog.kowalczyk.info/software/sumatrapdf/manual.html &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-3379425634875415712?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/3379425634875415712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=3379425634875415712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/3379425634875415712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/3379425634875415712'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/10/whitening-sumatrapdf.html' title='Whitening SumatraPDF'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-iIPyM0WtPak/TpRMIW6pJQI/AAAAAAAAAac/jPiiscyG1qk/s72-c/sumatra-regedit.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-7413781065133606643</id><published>2011-07-17T14:11:00.000-07:00</published><updated>2011-07-17T14:11:17.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='rhino'/><title type='text'>Making command line JavaScript ready for node.js AND rhino</title><content type='html'>&lt;br /&gt;I have several command line scripts for doing repetitive chores. As seen in a &lt;a href="http://open-juve.blogspot.com/2011/04/make-jslint-working-nicely-with-gedit.html"&gt;previous post&lt;/a&gt;, I used &lt;a href="http://www.mozilla.org/rhino/"&gt;rhino&lt;/a&gt; to run the scripts. But since &lt;a href="http://node.js/"&gt;node.js&lt;/a&gt; has been arising, I guess many developer will use that one as JavaScript interpreter. It also starts a bit faster that rhino.&lt;br /&gt;&lt;br /&gt;The problem is that the two are not very compatible since the hooks to the operating system are named differently. This will lead to errors when one engine executes scripts designed for the other.&lt;br /&gt;&lt;br /&gt;Here is a workaround that can make basic scripts, not using too many internals, compatible with each other. It works well for my string conversion scripts.&lt;br /&gt;&lt;pre style="background-color: #cccccc;"&gt;&lt;b&gt;var&lt;/b&gt; args = &lt;b&gt;arguments&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;//initalize for node.js/rhino compatibility&lt;br /&gt;&lt;b&gt;if&lt;/b&gt;(&lt;b&gt;typeof&lt;/b&gt; print === 'undefined') print = console.log;&lt;br /&gt;&lt;b&gt;if&lt;/b&gt;(&lt;b&gt;typeof&lt;/b&gt; console === 'undefined') console = { log: print };&lt;br /&gt;&lt;b&gt;if&lt;/b&gt;(&lt;b&gt;typeof&lt;/b&gt; process !== 'undefined') args = process.argv.splice(2); &lt;/pre&gt;This script does two things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; It maps the command line arguments to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;args&lt;/span&gt;. Node.js stores them in &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;process.argv&lt;/span&gt; and rhino in the default &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;arguments&lt;/span&gt; array.&lt;/li&gt;&lt;li&gt;It will merge the basic logging functionality of rhino and node.js, mapping node.js' &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;console.log&lt;/span&gt; to rhino's &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;print&lt;/span&gt; function and vice versa.&lt;/li&gt;&lt;/ol&gt;That's it! I hope you can make use of this little hint.&lt;br /&gt;&lt;br /&gt;Ciao,&lt;br /&gt;Juve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-7413781065133606643?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/7413781065133606643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=7413781065133606643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/7413781065133606643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/7413781065133606643'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/07/making-command-line-javascript-ready.html' title='Making command line JavaScript ready for node.js AND rhino'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-1795842483378857088</id><published>2011-06-26T11:23:00.000-07:00</published><updated>2011-06-26T11:23:39.258-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='gedit'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><title type='text'>Using gedit's External Tools Plugin to Search in Files</title><content type='html'>&lt;div style="text-align: justify;"&gt;IDEs for strongly typed languages allow you to press a hotkey (e.g., F3 in Eclipse) to look up a type or use features like "where used" to find all references of class, property, or method.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;When hacking &lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;Javascript&lt;/a&gt; in &lt;a href="http://projects.gnome.org/gedit/"&gt;gedit&lt;/a&gt; I also very often need to find all references of variables, object properties, and functions. But when coding with a &lt;a href="http://en.wikipedia.org/wiki/Weak_typing"&gt;weakly typed&lt;/a&gt; language like Javascript in gedit you do not have any shortcut to success. At least not by default.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Searching manually is not an option as soon as your projects grow larger. Firing up the &lt;a href="http://manpages.ubuntu.com/manpages/oneiric/en/man1/gnome-search-tool.1.html"&gt;gnome-search-tool&lt;/a&gt; is also not an option, since it would require further clicking in the dialog and cannot open gedit at the correct line.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Super Simple Search Script&lt;/span&gt; &lt;br /&gt;&lt;div style="text-align: justify;"&gt;Currently, the best option for me is to use this little script:&lt;/div&gt;&lt;pre style="background-color: #cccccc;"&gt;#!/bin/&lt;span style="background-color: #cccccc;"&gt;&lt;/span&gt;sh&lt;br /&gt;args=$(xargs)&lt;br /&gt;echo "searching for '$args'"&lt;br /&gt;grep -nr $args * | sed 's/\(^[^\:]*:[0-9]*:\)/\1 /g' &lt;/pre&gt;&lt;div style="text-align: justify;"&gt;It simply looks up the current word in all files of the current document's directory and outputs "filename:line-number: matching line's text" in gedit's bottom pane. Output text using the "file:line:text" pattern is clickable in gedit and lets you jump to the line in the file immediately.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Installation&lt;/span&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-EfNPkunXz8E/Tgd1n-r3DkI/AAAAAAAAALk/OYOGbsb7omE/s1600/gedit-search-in-files.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="125" src="http://3.bp.blogspot.com/-EfNPkunXz8E/Tgd1n-r3DkI/AAAAAAAAALk/OYOGbsb7omE/s200/gedit-search-in-files.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;To use this script in gedit you need to enable the &lt;a href="http://live.gnome.org/Gedit/ToolLauncherPlugin"&gt;External Tools Plugin&lt;/a&gt;. Add a new entry in the plugin's configuration screen, name it, assign your hotkey, and select "Current word" as "Input". Finally copy the script code into the text area and check if everything is correct. Look at the first screenshot to check if everything is set up correctly.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-OSx01-UCHdE/Tgd1oVhva2I/AAAAAAAAALo/puat1ramLJE/s1600/gedit-search-plugin-config.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="90" src="http://3.bp.blogspot.com/-OSx01-UCHdE/Tgd1oVhva2I/AAAAAAAAALo/puat1ramLJE/s200/gedit-search-plugin-config.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now you can finally test your new tool. Open a file and select a word. You can also set the cursor before any of the characters of the word. Now press your hotkey (F3 in my case) and the script should check your current file's directory for other files containing the word. Look at the second screenshot to see a sample result.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I hope you liked this article and that the script is useful for you.&lt;/div&gt;Best wishes, Juve&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-1795842483378857088?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/1795842483378857088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=1795842483378857088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/1795842483378857088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/1795842483378857088'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/06/using-gedits-external-tools-plugin-to.html' title='Using gedit&apos;s External Tools Plugin to Search in Files'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-EfNPkunXz8E/Tgd1n-r3DkI/AAAAAAAAALk/OYOGbsb7omE/s72-c/gedit-search-in-files.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-5381979702491838702</id><published>2011-06-19T22:32:00.000-07:00</published><updated>2011-06-22T07:27:20.528-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Motorola Update Hell</title><content type='html'>&lt;div style="text-align: justify;"&gt;Last week I tried to update my &lt;a href="http://en.wikipedia.org/wiki/Motorola_DEFY"&gt;Motorola Defy&lt;/a&gt; mobile phone. It is an &lt;a href="http://en.wikipedia.org/wiki/Android_%28operating_system%29"&gt;Android&lt;/a&gt; 2.1 device and the &lt;a href="http://androidadvices.com/how-to-update-motorola-defy-to-froyo-2-2-firmware/"&gt;people in the US&lt;/a&gt; could simply update via WiFi or 3G to Android 2.2. Unfortunately Motorola decided to do a more complex scenario here in Europe.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;And whoever decided this strategy is hopefully not longer working for that company. The process requires an external PC and is a big mess.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After many hours trying to update on several machines I finally got my Android 2.2. Here is what I went through.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: large;"&gt;The Painful Path&lt;/span&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;I checked the Motorola site and several sources on the web how to update.&lt;/li&gt;&lt;li&gt;According to some sources, I should have been notified of the update directly on the devices, which did not happen.&lt;/li&gt;&lt;li&gt;Then I tried to update via the Android system settings: "No updates for you, sorry guy".&lt;/li&gt;&lt;li&gt;Obviously European mobile network providers require a more complex update approach, even if I have a retail version of the phone, not tied to any provider.&lt;/li&gt;&lt;li&gt;Checking the web again. OK, I need an update software from Motorola.&lt;/li&gt;&lt;li&gt;I found it on their site and downloaded it. OMG, it is an &lt;b&gt;exe-file&lt;/b&gt;! It was of course not working on &lt;a href="http://www.winehq.org/about/"&gt;WINE&lt;/a&gt; and there was no update software for Linux.&lt;/li&gt;&lt;li&gt;I assumed that this exe-file neither runs on my friends Mac nor my collagues iPads.&lt;/li&gt;&lt;li&gt;Dammit, I had to find a Windows PC, but who owns such old-fashioned devices anymore?&lt;/li&gt;&lt;li&gt;Then I remembered my old Windows XP image, on one of my hard drives. Fortunately it was still there and also tied to the &lt;a href="http://www.gnu.org/software/grub/"&gt;GRUB&lt;/a&gt; as last entry to be &lt;a href="http://www.gnu.org/software/grub/manual/html_node/Chain_002dloading.html"&gt;chainloaded&lt;/a&gt;. I fired it up and it still worked.&lt;/li&gt;&lt;li&gt;Yeah! Let's start the funny exe-file: "Motorola requires &lt;b&gt;Internet Explorer 5.5&lt;/b&gt; or above." What the heck? Why does an mobile device update software require and antiquated web browser? For security reasons, I disabled this leaky browser before this Windows image was installed and I will not install it now. Nobody dictates me what to install and what not. That's why I use &lt;a href="http://www.ubuntu.com/ubuntu"&gt;Ubuntu&lt;/a&gt;, my current(!) Linux of choice.&lt;/li&gt;&lt;li&gt;OK, I had to find another Windows device. But where to search? I wont tell you where I finally found my Windows device - the owner was a bit ashamed of still owning it - but we got the update running. He still had the leaky Internet Explorer installed even if he never used it. The update also requires the .NET framework, which was luckly already installed.&lt;/li&gt;&lt;li&gt;Then the update software went a bit amok forcing the notification icons going wild. The notifications told us vigorously about "new devices", "failed driver installations", and "ready devices". I don't know how many times the notification flashed but that I had to start the software a second time and again let it try to dig all its system-related components into the Windows machine. OMG! Fortunately that was not my machine. :)&lt;/li&gt;&lt;li&gt;After all this fiddling it would finally recognize the device, download the update, and install it. Done!&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;"Luckily" the Defy will not get an Update to 2.3. ;)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Btw., did I tell you that I did not have to install anything when I plugged my phone into my Ubuntu Linux PC and I could start development for Android immediately?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I really don't know why Motorola has built such a complicated update for its European phones. But I hope that next time they will consider the growing number of users of Macs, iPads, Android-based Pads, and even Desktop Linux PCs. The &lt;a href="http://en.wikipedia.org/wiki/Wintel"&gt;Wintel&lt;/a&gt; era is coming to an end.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; A few days ago, I send a mail to Motorola's CEO again telling them about me not being happy with their update strategy. It was obviously read by their IT support. Thereafter, they replied on my former support ticket, telling me that they read this blog entry and congratulating me on my update success.&lt;br /&gt;They promised to forward my valuable feedback to the responsible departments. Very nice!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ciao,&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Juve&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-5381979702491838702?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/5381979702491838702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=5381979702491838702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/5381979702491838702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/5381979702491838702'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/06/motorola-update-hell.html' title='Motorola Update Hell'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-7686673785966160740</id><published>2011-06-19T12:18:00.000-07:00</published><updated>2011-06-19T12:18:43.678-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='gedit'/><category scheme='http://www.blogger.com/atom/ns#' term='firebug'/><title type='text'>Connect gedit to Firebug</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-O4FLHlBdWW4/Tf4_seGeaHI/AAAAAAAAALM/QMbHg-mE-zY/s1600/Selection_002.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Did you ever jump back and forth between &lt;b&gt;Firebug&lt;/b&gt; and &lt;b&gt;gedit&lt;/b&gt; or other text editors, searching for the line you were just debugging/editing?&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;Stop doing this manually! Firebug provides you with an "external editors" feature and allows you to jump to the right line in your code in the editor.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-O4FLHlBdWW4/Tf4_seGeaHI/AAAAAAAAALM/QMbHg-mE-zY/s1600/Selection_002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://3.bp.blogspot.com/-O4FLHlBdWW4/Tf4_seGeaHI/AAAAAAAAALM/QMbHg-mE-zY/s200/Selection_002.png" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-zO_XQCqRrXI/Tf4_yDdoviI/AAAAAAAAALQ/j1fsn68v1O4/s1600/Selection_003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-zO_XQCqRrXI/Tf4_yDdoviI/AAAAAAAAALQ/j1fsn68v1O4/s200/Selection_003.png" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-jH2mzEx22aE/Tf4_yX-xYAI/AAAAAAAAALU/2td60W-KKf4/s1600/Selection_004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-jH2mzEx22aE/Tf4_yX-xYAI/AAAAAAAAALU/2td60W-KKf4/s200/Selection_004.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Here are some screenshots to show you how it looks like. First, I right click a line (e.g., line 7) in Firebug and select "gedit". Firebug/Firefox then calls "&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;gedit myfile.js +7&lt;/span&gt;" making gedit get focus and jump to line 7.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-gIp-VJLwCz8/Tf4_zMFeXlI/AAAAAAAAALY/-kxhXlMQ8eE/s1600/Selection_005.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="78" src="http://2.bp.blogspot.com/-gIp-VJLwCz8/Tf4_zMFeXlI/AAAAAAAAALY/-kxhXlMQ8eE/s200/Selection_005.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Setting up gedit or other tools as external editors is really easy. I wonder why I did not try this earlier. Open Firebug and the Firebug option menu. Select "Open with Editor &amp;gt; Configure Editors". &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_5_ezQ2O5ms/Tf4_3awfLoI/AAAAAAAAALg/PgF6Qb8Zd_k/s1600/Editor+Configuration_007.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="127" src="http://2.bp.blogspot.com/-_5_ezQ2O5ms/Tf4_3awfLoI/AAAAAAAAALg/PgF6Qb8Zd_k/s200/Editor+Configuration_007.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now click "Add", give the editor a name, select an executable and edit the command line arguments. Firebug can forward the current &lt;b&gt;%url&lt;/b&gt;, the local path to the &lt;b&gt;%file&lt;/b&gt;, and the &lt;b&gt;%line&lt;/b&gt; number via the command line.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In my case, &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;man gedit&lt;/span&gt; revealed that both file and line can be forwarded to gedit with the simple pattern &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;gedit filename +linenumber&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;, and therefore, gedit's arguments string in Firebug would be &lt;b&gt;%file +%line&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_5_ezQ2O5ms/Tf4_3awfLoI/AAAAAAAAALg/PgF6Qb8Zd_k/s1600/Editor+Configuration_007.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;That's it, I hope you could learn something new.&lt;br /&gt;Ciao,&lt;br /&gt;Juve &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jH2mzEx22aE/Tf4_yX-xYAI/AAAAAAAAALU/2td60W-KKf4/s1600/Selection_004.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-7686673785966160740?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/7686673785966160740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=7686673785966160740' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/7686673785966160740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/7686673785966160740'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/06/connect-gedit-to-firebug.html' title='Connect gedit to Firebug'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-O4FLHlBdWW4/Tf4_seGeaHI/AAAAAAAAALM/QMbHg-mE-zY/s72-c/Selection_002.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-558986348924508639</id><published>2011-04-02T04:12:00.000-07:00</published><updated>2011-04-02T05:54:33.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='gedit'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='jslint'/><title type='text'>Make JSLint working nicely with gedit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-aMOhOhPAFbA/TZca6h19kkI/AAAAAAAAAKs/coFncF__INA/s1600/gedit-jslint.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 290px; height: 192px;" src="http://1.bp.blogspot.com/-aMOhOhPAFbA/TZca6h19kkI/AAAAAAAAAKs/coFncF__INA/s400/gedit-jslint.png" alt="" id="BLOGGER_PHOTO_ID_5590967055223198274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;For coding Javascript, I use gedit and several plugins/external tools. One of them is &lt;a href="http://www.jslint.com/lint.html"&gt;JSLint&lt;/a&gt;. Here is a short tutorial get a good integration of JSLint into gedit.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install the Rhino Javascript command line engine:&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;sudo apt-get install rhino&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Download and install the rhino version of JSLint. Unfortunately, it is no longer available from the original developer. You can get a copy from the juicer project: &lt;a href="https://github.com/cjohansen/juicer/raw/master/lib/jslint/jslint-rhino.js"&gt;https://github.com/cjohansen/juicer/raw/master/lib/jslint/jslint-rhino.js &lt;/a&gt;(save link as). Copy the file to:&lt;span style="font-family:courier new;"&gt; $HOME/.gnome2/gedit/plugins/jslint-rhino.js&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Open gedit to configure JSLint as external tool.&lt;br /&gt;Enable the &lt;span style="font-family:arial;"&gt;External Tools&lt;/span&gt; plugin and restart gedit.Go to &lt;span style="font-family:arial;"&gt;Tools &amp;gt; Manage External Tools &lt;/span&gt;and add a new entry.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy&amp;amp;Paste the following script into the text area. Make sure that file name and path of the downloaded JSLint file is the same as in this script. &lt;pre style="overflow:auto; font-size: 8pt; background-color: #e0e0c0"&gt;#!/bin/sh&lt;br /&gt;echo "/*jslint onevar: true, undef: true, newcap: true, nomen: true, regexp: true, plusplus: true, bitwise: true, browser: true, maxerr: 50, indent: 4, white: false */" &amp;gt; /tmp/jslint-me.js&lt;br /&gt;cat $1 &amp;gt;&amp;gt; /tmp/jslint-me.js&lt;br /&gt;result=$(js $HOME/.gnome2/gedit/plugins/jslint-rhino.js /tmp/jslint-me.js)&lt;br /&gt;rm /tmp/jslint-me.js&lt;br /&gt;js $HOME/.gnome2/gedit/plugins/jslint-rhino-text-replace.js "$GEDIT_CURRENT_DOCUMENT_NAME" $result &amp;gt; /dev/stdout&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Select a shortcut (Ctrl+J&lt;control&gt;&lt;control&gt;) and s&lt;/control&gt;&lt;/control&gt;et the other options to&lt;br /&gt;Save: &lt;span style="font-family:arial;"&gt;Nothing&lt;/span&gt;&lt;br /&gt;Input: &lt;span style="font-family:arial;"&gt;Current Selection (default to document)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Finally you need to copy another command line script to reformat the JSLint output. It will allow you to click the error messages in gedit, jumping to the corresponding line in your code. Copy the following script to: &lt;span style="font-family:courier new;"&gt;$HOME/.gnome2/gedit/plugins/jslint-rhino-text-replace.js&lt;/span&gt;. Make sure that file name and path of the text-replace script file is the same as in the gedit External Tools script.&lt;pre style="overflow: auto; height: 200px; font-size: 8pt; background-color: #e0e0c0"&gt;var newArgs = [], errorPrefix, i = 1, lastErrorIndex = -1, fileName = "";&lt;br /&gt;var len = arguments.length, fileName = arguments[0];&lt;br /&gt;&lt;br /&gt;while (i &amp;lt; len) {&lt;br /&gt;if (arguments[i] === "Lint" &amp;amp;&amp;amp; arguments[i+1] === "at"){ //new Lint starting&lt;br /&gt;errorPrefix = fileName + ":" + (arguments[i+3]-1) + ":";&lt;br /&gt;newArgs.push(errorPrefix);&lt;br /&gt;lastErrorIndex = newArgs.length-1;&lt;br /&gt;i += 6;&lt;br /&gt;}&lt;br /&gt;newArgs[lastErrorIndex] += " " + arguments[i];&lt;br /&gt;i += 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;for(i = 0; i &amp;lt; newArgs.length; i += 1) {&lt;br /&gt;print(newArgs[i]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(newArgs.length === 0) {&lt;br /&gt;print(fileName + ": Excellent! Your JS code is clean and shiny.");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// Copyright (C) 2011 by Uwe Jugel, uwe.jugel@gmail.com&lt;br /&gt;//&lt;br /&gt;// Permission is hereby granted, free of charge, to any person obtaining a copy&lt;br /&gt;// of this software and associated documentation files (the "Software"), to deal&lt;br /&gt;// in the Software without restriction, including without limitation the rights&lt;br /&gt;// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;br /&gt;// copies of the Software, and to permit persons to whom the Software is&lt;br /&gt;// furnished to do so, subject to the following conditions:&lt;br /&gt;//&lt;br /&gt;// The above copyright notice and this permission notice shall be included in&lt;br /&gt;// all copies or substantial portions of the Software.&lt;br /&gt;//&lt;br /&gt;// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br /&gt;// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;br /&gt;// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&lt;br /&gt;// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&lt;br /&gt;// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&lt;br /&gt;// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN&lt;br /&gt;// THE SOFTWARE.&lt;br /&gt;//&lt;br /&gt;// Info:&lt;br /&gt;// gedit support referencing and navigating from shell output lines to source&lt;br /&gt;// code lines if the output follows the "filename:linenumber:message" pattern&lt;br /&gt;// This script removes some verbosity from the JSLint error messages and&lt;br /&gt;// reformats them to support this pattern.&lt;br /&gt;//&lt;br /&gt;// Use this script after calling JSLint from gedit External Tools.&lt;br /&gt;//&lt;br /&gt;// Usage:&lt;br /&gt;// js PATH_TO/jslint-rhino-text-replace.js FILENAME JSLINTOUTPUT...&lt;br /&gt;//&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;You can now run JSLint on your opened Javascript files by pressing CTRL+J. You can also click on the output, and gedit jumps to the corresponding line in the source code.&lt;br /&gt;&lt;br /&gt;Juve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-558986348924508639?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/558986348924508639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=558986348924508639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/558986348924508639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/558986348924508639'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/04/make-jslint-working-nicely-with-gedit.html' title='Make JSLint working nicely with gedit'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-aMOhOhPAFbA/TZca6h19kkI/AAAAAAAAAKs/coFncF__INA/s72-c/gedit-jslint.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-4978052918311761884</id><published>2011-02-22T14:24:00.000-08:00</published><updated>2011-02-22T15:09:13.928-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><title type='text'>OSS for Schools and  Public Authorities</title><content type='html'>I just read a nice article about the growing spread of open source in schools and authorities all over the world. (&lt;a href="http://www.oss.bund.de/node/282"&gt;german&lt;/a&gt; article, &lt;a href="http://translate.google.com/translate?js=n&amp;amp;prev=_t&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;layout=2&amp;amp;eotf=1&amp;amp;sl=auto&amp;amp;tl=en&amp;amp;u=http%3A%2F%2Fwww.oss.bund.de%2Fnode%2F282"&gt;english&lt;/a&gt; translation)&lt;br /&gt;&lt;br /&gt;Quite impressing how rapidly the number of these projects is growing and how large they have become. Here are some numbers:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Brazil:&lt;/span&gt; Saves estimated 500 Mio USD by using OSS since 2003.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Norway:&lt;/span&gt; All 19 county governments are now using OSS (Ubuntu, Open Office, Gimp, etc.).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;France:&lt;/span&gt; French National Police saves 50 Mio € by using Ubuntu, Open Office, and a security-enhanced Thunderbird. The enhancement was contributed back to Mozilla and the French Military is now also using this Thunderbird.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Spain:&lt;/span&gt; 300,000 desktops and 180,000 laptops are using an Ubuntu-derived Linux. 100,000 will follow in 2011. The use of OSS also strengthened the local IT-industry (rather than Microsoft ;)&lt;br /&gt;&lt;br /&gt;And in 2011 more will follow, such as &lt;span style="font-weight: bold;"&gt;Russia&lt;/span&gt;, where 55,000 schools could switch to OSS.&lt;br /&gt;&lt;br /&gt;I really like this development, since I am a strong advocate for GNU/Linux, Gimp, etc. One of the best tools for me is &lt;a href="http://inkscape.org/"&gt;Inkscape&lt;/a&gt;. But that's another story.&lt;br /&gt;&lt;br /&gt;Best wishes for all your OSS projects,&lt;br /&gt;Juve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-4978052918311761884?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/4978052918311761884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=4978052918311761884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/4978052918311761884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/4978052918311761884'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/02/oss-for-schools-and-public-authorities.html' title='OSS for Schools and  Public Authorities'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-4677606899972959090</id><published>2011-02-22T05:43:00.000-08:00</published><updated>2011-02-22T05:48:28.460-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhr'/><category scheme='http://www.blogger.com/atom/ns#' term='cross-domain'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Solve your cross domain issues. Avoid "file://"!</title><content type='html'>I regularly trip over cross domain security problems &lt;a href="https://developer.mozilla.org/En/HTTP_Access_Control"&gt;[1]&lt;/a&gt;. These are even harder to solve if you are developing your HTML-based apps locally and try to run them by simply opening them in the browser via &lt;span style="font-style: italic;"&gt;"file://local-path-to-my/app1"&lt;/span&gt;. When such an app request data from a server, e.g., via xhr &lt;a href="https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest"&gt;[2]&lt;/a&gt;, the requests Origin header value is set to null.&lt;br /&gt;&lt;br /&gt;You can avoid this by using a web server and starting your app from the server via &lt;span style="font-style: italic;"&gt;"http://localhost:8080/app1"&lt;/span&gt;. My projects usually reside in an easy to reach path, e.g., &lt;span style="font-style: italic;"&gt;/home/juve/projects/app1&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;E:/projects/app1&lt;/span&gt;, and I do not want to copy them redundantly to the server, into an awkwardly long sub path. Therefore, I often need to create an additional path mapping to the servers config, pointing to my project's absolute paths.&lt;br /&gt;&lt;br /&gt;This is possible for many kinds of web servers. Here's how I did in in my &lt;span style="font-weight: bold;"&gt;Tomcat 6.0&lt;/span&gt; &lt;b&gt;server.xml&lt;/b&gt;.  Simply find the &lt;span style="font-weight: bold; font-family:courier new;" &gt;&amp;lt;Host&amp;gt;&lt;/span&gt; tag and add a &lt;span style=" font-weight: bold;font-family:courier new;" &gt;&amp;lt;Context&amp;gt;&lt;/span&gt; tag:&lt;br /&gt;&lt;pre&gt;&amp;lt;Host&amp;gt;&lt;br /&gt;    &amp;lt;Context path="/app1" docbase="E:/projects/app1/"&amp;gt;&lt;br /&gt;    &amp;lt;/Context&amp;gt;&lt;br /&gt;&amp;lt;/Host&amp;gt;&lt;br /&gt;&lt;/pre&gt;Restart the server. Your ready to go! Don't waste time exploring "file://"-related cross domain problems. Use "http://localhost" instead!&lt;br /&gt;&lt;br /&gt;&lt;a href="https://developer.mozilla.org/En/HTTP_Access_Control"&gt;&lt;span style="font-family:courier new;"&gt;[1] &lt;/span&gt;MDC, HTTP access control&lt;/a&gt;&lt;br /&gt;&lt;a href="https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest"&gt;&lt;span style="font-family:courier new;"&gt;[2] &lt;/span&gt;Using XMLHttpRequest&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-4677606899972959090?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/4677606899972959090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=4677606899972959090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/4677606899972959090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/4677606899972959090'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/02/solve-cross-domain-issues-avoid-file_22.html' title='Solve your cross domain issues. Avoid &quot;file://&quot;!'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-118501701945811531</id><published>2011-02-13T16:43:00.000-08:00</published><updated>2011-04-18T13:03:14.006-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svg'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Simplify SVG for HTML5 App Debugging</title><content type='html'>In this article I will show you a nice little shell script that will&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Crunch your big Inkscape SVG,&lt;/li&gt;&lt;li&gt;Round all numbers to one digit,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Remove all unnecessary styles, namespaces, nodes, and attributes that have no effect in the browser&lt;/li&gt;&lt;/ul&gt;The script is a rough start, and I expect it to get better when I will further develop my little HTML5 scenario.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 100%; font-weight: bold;"&gt;Why do I need the script?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've been experimenting with HTML5, SVG, JavaScript, Firebug, and Chrome Developer Tools since last Christmas. Currently, I am developing a little proof of concept game. The idea is to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use vanilla &lt;a href="http://www.inkscape.org/"&gt;Inkscape&lt;/a&gt; as main world editor.&lt;/li&gt;&lt;li&gt;Render the game world using SVG in the browser.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use some JavaScript/JSON &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;DSL&lt;/a&gt; to model the game logic.&lt;/li&gt;&lt;/ol&gt;If you are debugging things in the browser, you want a small DOM tree and as few code lines as possible. The basic Inkscape SVGs are quite redundant and you often have a lot of decimals with lots of post-comma digits. For better debugging I will round them down/up. I also wanted to replace many inline styles with a real &amp;lt;style&amp;gt; tag, and remove all unnecessary nodes, attributes, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 100%; font-weight: bold;"&gt;Full SVG simplification script&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #e0e0c0; font-size: 8pt; height: 300px; overflow: auto;"&gt;# This file is provided as is, with no warranties&lt;br /&gt;#&lt;br /&gt;# Author: Uwe Jugel&lt;br /&gt;# WWW:    http://open-juve.blogspot.com&lt;br /&gt;#&lt;br /&gt;# License: Creative Commons Attribution-ShareAlike 3.0 Unported License.&lt;br /&gt;#&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;echo cleaning up $1&lt;br /&gt;#namespaces&lt;br /&gt;svgns=http://www.w3.org/2000/svg&lt;br /&gt;svgns_escaped="http:\/\/www.w3.org\/2000\/svg"&lt;br /&gt;sodins=http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&lt;br /&gt;inkns=http://www.inkscape.org/namespaces/inkscape&lt;br /&gt;&lt;br /&gt;#replace svg root&lt;br /&gt;svgreplace='s/\(^&amp;lt;svg\)\(\s\).*&amp;gt;$/\1\2xmlns=\"'$svgns_escaped'\"\2xmlns:svg=\"'$svgns_escaped'\"&amp;gt;/g'&lt;br /&gt;&lt;br /&gt;defaultstyles=''&lt;br /&gt;&lt;br /&gt;for i in \&lt;br /&gt;'s/color:#000000;*//g' \&lt;br /&gt;'s/stroke:#000000;*//g' \&lt;br /&gt;'s/stroke-width:1[a-Z]*;*//g' \&lt;br /&gt;'s/stroke-linecap:butt;*//g' \&lt;br /&gt;'s/stroke-linejoin:miter;*//g' \&lt;br /&gt;'s/stroke-opacity:1[a-Z]*;*//g' \&lt;br /&gt;'s/fill:none;*//g' \&lt;br /&gt;'s/fill-opacity:1[a-Z]*;*//g' \&lt;br /&gt;'s/fill-rule:nonzero;*//g' \&lt;br /&gt;'s/stroke-miterlimit:4[a-Z]*;*//g' \&lt;br /&gt;'s/stroke-dasharray:none;*//g' \&lt;br /&gt;'s/stroke-dashoffset:0[a-Z]*;*//g' \&lt;br /&gt;'s/marker:none;*//g' \&lt;br /&gt;'s/visibility:visible;*//g' \&lt;br /&gt;'s/display:inline;*//g' \&lt;br /&gt;'s/overflow:visible;*//g' \&lt;br /&gt;'s/enable-background:accumulate;*//g'&lt;br /&gt;do&lt;br /&gt;defaultstyles="$defaultstyles -e $i"&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;emptystyle='s/style=""//'&lt;br /&gt;&lt;br /&gt;cat $1 &amp;gt; /tmp/svg-cleanup.tmp1&lt;br /&gt;touch /tmp/svg-cleanup.tmp2&lt;br /&gt;touch /tmp/svg-cleanup.tmp3&lt;br /&gt;touch ./tiles-export.svg&lt;br /&gt;&lt;br /&gt;out=./tiles-export.svg&lt;br /&gt;tmp=/tmp/svg-cleanup.tmp1&lt;br /&gt;tmpround=/tmp/svg-cleanup.tmp2&lt;br /&gt;tmploop=/tmp/svg-cleanup.tmp3&lt;br /&gt;&lt;br /&gt;recursiontest=1&lt;br /&gt;loops=1&lt;br /&gt;&lt;br /&gt;echo "starting recursive rounding"&lt;br /&gt;while [ $recursiontest = 1 ]; do&lt;br /&gt;for i in 's/\(\.[0-9]\)[0-4][0-9]*/\1/g' 's/\(\.[0-9]\)[5-9][0-9]*/\1_CEIL_/g' \&lt;br /&gt;'s/0_CEIL_/1/g' 's/1_CEIL_/2/g' 's/2_CEIL_/3/g' 's/3_CEIL_/4/g' 's/4_CEIL_/5/g' \&lt;br /&gt;'s/5_CEIL_/6/g' 's/6_CEIL_/7/g' 's/7_CEIL_/8/g' 's/8_CEIL_/9/g' \&lt;br /&gt;'s/\([0-9]\)9_CEIL_/\1_CEIL_0/' 's/\([0-9]\)\.9_CEIL_/\1_CEIL_\.0/'&lt;br /&gt;do&lt;br /&gt;cat $tmp | sed -e $i &amp;gt; $tmpround&lt;br /&gt;cat $tmpround &amp;gt; $tmp&lt;br /&gt;done&lt;br /&gt;diff=$(diff -qn $tmp $tmploop)&lt;br /&gt;recursiontest=$?&lt;br /&gt;if [ $recursiontest = 1 ]; then echo "loop: $loops"; fi&lt;br /&gt;loops=$(($loops+1));&lt;br /&gt;cat $tmp &amp;gt; $tmploop&lt;br /&gt;done&lt;br /&gt;echo "recursive rounding done."&lt;br /&gt;&lt;br /&gt;cat $tmp | xmlstarlet ed -N svg=$svgns -N sodi=$sodins -N ink=$inkns -d "//svg:metadata" -d "//sodi:*" \&lt;br /&gt;-d "//@sodi:nodetypes" -d "//@ink:connector-curvature" -d "//@sodi:docname" | sed $defaultstyles -e $emptystyle \&lt;br /&gt;-e $svgreplace &amp;gt; $out&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: 100%; font-weight: bold;"&gt;The Script in Detail&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First I define some namespaces that will be used by &lt;a href="http://xmlstar.sourceforge.net/docs.php"&gt;xmlstartlet&lt;/a&gt; to modify the xml tree:&lt;br /&gt;&lt;pre style="background-color: #e0e0c0; overflow: auto;"&gt;#namespaces&lt;br /&gt;svgns=http://www.w3.org/2000/svg&lt;br /&gt;svgns_escaped="http:\/\/www.w3.org\/2000\/svg"&lt;br /&gt;sodins=http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd&lt;br /&gt;inkns=http://www.inkscape.org/namespaces/inkscape&lt;br /&gt;&lt;/pre&gt;Then I have a little replacement expression that will kill all namespaces from from the svg root tag (will be called last).&lt;br /&gt;&lt;pre style="background-color: #e0e0c0; overflow: auto;"&gt;#replace svg root&lt;br /&gt;svgreplace='s/\(^&amp;lt;svg\)\(\s\).*&amp;gt;$/\1\2xmlns=\"'$svgns_escaped'\"\2xmlns:svg=\"'$svgns_escaped'\"&amp;gt;/g'&lt;br /&gt;&lt;/pre&gt;Inkscape writes many inline styles into each node in the SVG tree. Most of them are default values that are supported by the browser. Therefore, we can remove them (and manually replace them with a CSS file someday).&lt;br /&gt;&lt;pre style="background-color: #e0e0c0; overflow: auto;"&gt;defaultstyles=''&lt;br /&gt;for i in 's/color:#000000;*//g' 's/stroke:#000000;*//g' 's/stroke-width:1[a-Z]*;*//g' #and so on&lt;br /&gt;do&lt;br /&gt;defaultstyles="$defaultstyles -e $i"&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;If not style is left, I also have to remove the empty style attribute&lt;br /&gt;&lt;pre style="background-color: #e0e0c0; overflow: auto;"&gt;emptystyle='s/style=""//'&lt;br /&gt;&lt;/pre&gt;Now comes a funny part (after some file initialization). I am using a while loop and a for loop to accomplish some basic rounding of all numbers in the file. Post-digits .X1 to .X4 are cut down to .X, while all numbers .X5 and above are rounded up including a distribution of the rounding to the previous digits. The solution using only sed and some loops looks awkward but it works.&lt;br /&gt;&lt;pre style="background-color: #e0e0c0; overflow: auto;"&gt;while [ $recursiontest = 1 ]; do&lt;br /&gt;for i in 's/\(\.[0-9]\)[0-4][0-9]*/\1/g' 's/\(\.[0-9]\)[5-9][0-9]*/\1_CEIL_/g' \&lt;br /&gt;'s/0_CEIL_/1/g' 's/1_CEIL_/2/g' 's/2_CEIL_/3/g' 's/3_CEIL_/4/g' 's/4_CEIL_/5/g' \&lt;br /&gt;'s/5_CEIL_/6/g' 's/6_CEIL_/7/g' 's/7_CEIL_/8/g' 's/8_CEIL_/9/g' \&lt;br /&gt;'s/\([0-9]\)9_CEIL_/\1_CEIL_0/' 's/\([0-9]\)\.9_CEIL_/\1_CEIL_\.0/'&lt;br /&gt;do&lt;br /&gt;cat $tmp | sed -e $i &amp;gt; $tmpround&lt;br /&gt;cat $tmpround &amp;gt; $tmp&lt;br /&gt;done&lt;br /&gt;diff=$(diff -qn $tmp $tmploop)&lt;br /&gt;recursiontest=$?&lt;br /&gt;if [ $recursiontest = 1 ]; then echo "loop: $loops"; fi&lt;br /&gt;loops=$(($loops+1));&lt;br /&gt;cat $tmp &amp;gt; $tmploop&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;This script marks all places to be rounded up  with _CEIL_ and then replaces these marks with new marks or the correct numbers until no marks are left.&lt;br /&gt;&lt;br /&gt;Finally, I aggregate all sed expressions, use xmlstartlet to remove the bad nodes and attributes, and write out the result.&lt;br /&gt;&lt;pre style="background-color: #e0e0c0; overflow: auto;"&gt;cat $tmp | xmlstarlet ed -N svg=$svgns -N sodi=$sodins -N ink=$inkns -d "//svg:metadata" -d "//sodi:*" \&lt;br /&gt;-d "//@sodi:nodetypes" -d "//@ink:connector-curvature" -d "//@sodi:docname" | sed $defaultstyles -e $emptystyle \&lt;br /&gt;-e $svgreplace &amp;gt; $out&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;I am not 100% sure if the tools (bash/sed/xmlstartlet) are the perfect fit for my task but they get the job done without being overly complex. If I imagine of how unreadable an XSLT script would be, compared to this little bash script, I believe that my choice was not unwise.&lt;br /&gt;&lt;br /&gt;I hope you find this article helpful for you SVG-related project.&lt;br /&gt;&lt;br /&gt;Best wishes,&lt;br /&gt;Juve&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="license"&gt;&lt;img alt="Creative Commons License" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" style="border-width: 0;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span dct="http://purl.org/dc/terms/" property="dct:title"&gt;SVG simplificaion shell script&lt;/span&gt; by &lt;a cc="http://creativecommons.org/ns#" href="http://open-juve.blogspot.com/" property="cc:attributionName" rel="cc:attributionURL"&gt;Uwe Jugel&lt;/a&gt; is licensed under a &lt;a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="license"&gt;Creative Commons Attribution-ShareAlike 3.0 Unported License&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-118501701945811531?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/118501701945811531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=118501701945811531' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/118501701945811531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/118501701945811531'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2011/02/simplify-svg-for-html5-app-debugging.html' title='Simplify SVG for HTML5 App Debugging'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-6135775998884201907</id><published>2010-11-18T12:38:00.000-08:00</published><updated>2011-02-22T15:40:29.928-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='wine'/><title type='text'>Slow down your gaming mouse in Linux!</title><content type='html'>Last week I updated/added Ubuntu 10.10 to my gaming machine. But when trying to play some games via &lt;a href="http://www.winehq.org/"&gt;wine&lt;/a&gt;, I realized that my Sharkoon Fireglider was still too fast, even at the lowest settings. The Ubuntu mouse settings did not allow me to push the slider further down.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After some research I decided to write a little script that would allow me to do this manually. It sets the sensitivity and the acceleration to a desired number and outputs the current settings.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here it is:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre style="overflow:auto; font-size: 8pt; background-color: #e0e0c0"&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;#&lt;br /&gt;# bash script to slow down gaming mice even below the&lt;br /&gt;# lowest values supported in XServer mouse config dialogs&lt;br /&gt;#&lt;br /&gt;# author: Uwe Jugel&lt;br /&gt;# contact: http://open-juve.blogspot.com/&lt;br /&gt;# license: creative commons, http://http://creativecommons.org/licenses/by/3.0/&lt;br /&gt;#&lt;br /&gt;# usage: ./slow-mouse [sensitivity] [acceleration]&lt;br /&gt;#&lt;br /&gt;# useful values for my Sharkoon Fireglider: 5,1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;device_str="A4Tech"&lt;br /&gt;&lt;br /&gt;id=`xinput --list --short | grep -m1 $device_str | sed 's/.*id=//' | sed 's/\s*\[.*\].*//'`&lt;br /&gt;&lt;br /&gt;echo "---------------------"&lt;br /&gt;echo "old settings:"&lt;br /&gt;xinput --list-props $id | grep -E Decel\|Scali&lt;br /&gt;echo "---------------------"&lt;br /&gt;&lt;br /&gt;sens=$1&lt;br /&gt;accel=$2&lt;br /&gt;echo "setting sens/accel to $sens/$accel"&lt;br /&gt;&lt;br /&gt;`xinput --set-prop $id "Device Accel Constant Deceleration" $sens`&lt;br /&gt;`xinput --set-prop $id "Device Accel Velocity Scaling" $accel`&lt;br /&gt;&lt;br /&gt;echo "---------------------"&lt;br /&gt;echo "new settings:"&lt;br /&gt;xinput --list-props $id | grep -E Decel\|Scali&lt;br /&gt;echo "---------------------"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-6135775998884201907?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/6135775998884201907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=6135775998884201907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/6135775998884201907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/6135775998884201907'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2010/11/slow-down-your-gaming-mouse-in-linux.html' title='Slow down your gaming mouse in Linux!'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-2569361630719962499</id><published>2010-08-09T08:17:00.000-07:00</published><updated>2011-02-22T15:41:22.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssd'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>Put all your Apps on SD Card or USB stick!</title><content type='html'>Putting your games and other software on an removable USB storage might seem useless to some of you, but I am currently doing it for some games and software. I am now mainly doing it to free some space on my SSD and still have the runnable application at hand. But it could also be very handy in other cases.&lt;br /&gt;&lt;br /&gt;I'm playing WoW on a private server and wanted my girlfriend to easily join the game, even though she had no distinct gaming PC/Laptop then.&lt;br /&gt;&lt;br /&gt;Private servers might also not work with the latest WoW-client version and might need some manual upgrading/fixing. Since I didn't want to reinstall/upgrade the game's client software after every client update on all potential machines, I was looking for an easy an pragmatic solution.&lt;br /&gt;&lt;br /&gt;Fortunately, the WoW-client software is less than 20GB in size. And it did fit nicely on my 32GB USB stick, thus I could always have an up-to-date version of the client at hand, independently of which machine it should be run on. The performance of the stick was more than sufficient and we never had problems with it. I even have the feeling that the stick is faster than the old HDD that now resides in my girlfriend's "new" gaming PC.&lt;br /&gt;&lt;br /&gt;I'd really like this easy plugging and removing without having to fight myself through any installers and upgrade tools. And since I have so much my stuff on flash now, it really hurts me now if I hear an ancient mechanical HDD crunching it's wheels.&lt;br /&gt;&lt;br /&gt;Check out SSD and Flash if you can afford it. It's worth every penny!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-2569361630719962499?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/2569361630719962499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=2569361630719962499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/2569361630719962499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/2569361630719962499'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2010/08/put-all-your-apps-on-sd-card-or-usb.html' title='Put all your Apps on SD Card or USB stick!'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-3703809397539556675</id><published>2010-02-18T07:37:00.000-08:00</published><updated>2010-02-18T08:00:52.176-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssd'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>SSD Turbo</title><content type='html'>I just bought an SSD for my Gaming-PC at home.&lt;br /&gt;&lt;br /&gt;It is a big difference. Everything feels to load three times faster and is responsive instantly. Windows (no Linux :( since it's  a gaming-machine) boots in 50 seconds including all stuff loaded in the background/to the tray (anti-virus, hardware-tools, styler, etc.)&lt;br /&gt;&lt;br /&gt;I did some basic measurement that shows the subjective improvement is much bigger than the real-world numbers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Game save state loading times are "only" reduced by 50-100%&lt;/li&gt;&lt;li&gt;Windows boot is "only" 70% faster&lt;/li&gt;&lt;li&gt;But Firefoxs (16 Tabs) really starts &lt;span style="font-weight: bold;"&gt;three times faster&lt;/span&gt;, and is responsive after less than 10 seconds. This did take 30 seconds before!&lt;/li&gt;&lt;/ul&gt;This really impressed me so much, that I even felt like blogging it to the world again ;)&lt;br /&gt;If you plan to upgrade your PC someday, don't forget to add an SSD, it's worth every Cent.&lt;br /&gt;&lt;br /&gt;Ahh, what you actually might want to know is, which SSD I bought:&lt;br /&gt;Its an 80GB Intel X25-M G2 Postville 2,5" SATA II drive that I bought for 185€.&lt;br /&gt;&lt;br /&gt;Ciao,&lt;br /&gt;Juve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-3703809397539556675?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/3703809397539556675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=3703809397539556675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/3703809397539556675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/3703809397539556675'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2010/02/ssd-turbo.html' title='SSD Turbo'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-8302775703729165672</id><published>2009-03-20T02:05:00.000-07:00</published><updated>2009-03-20T02:12:42.771-07:00</updated><title type='text'>Welcome mobilecamp.de members!</title><content type='html'>Hello guys and girls!&lt;br /&gt;I just singed up for &lt;a href="http://www.mobilecamp.de"&gt;mobilecamp.de&lt;/a&gt;. In case you stumble upon this blog, do not be confused. This is currently only used as my &lt;a href="http://openid.net"&gt;Open ID&lt;/a&gt;, and I currently don't have important private issues to blog about; no kids yet. ;) &lt;br /&gt;&lt;br /&gt;Ciao,&lt;br /&gt;Juve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-8302775703729165672?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/8302775703729165672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=8302775703729165672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/8302775703729165672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/8302775703729165672'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2009/03/welcome-mobile-members.html' title='Welcome mobilecamp.de members!'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-684890336075246090.post-1548576772416695557</id><published>2008-09-15T10:45:00.000-07:00</published><updated>2008-09-15T11:23:07.959-07:00</updated><title type='text'>Woah! I bought a 42" TV!</title><content type='html'>Anja and me were always fighting over the usage of my 22" TFT Monitor. She could not watch TV when i wanted to play a PC-game. And the 22" Display was way to small for playing Wii Sports. The conflict would have escaleted eventually ;) and thus we spontanousely decided to go to the "Mediamarkt" and buy a real TV last friday evening.&lt;br /&gt;After searching the web for some buying recommendations we went to the "Elbepark" and intended to buy a average sized 32" LCD-TV. We took a long walk through the shelves and had to realize that there's a lot of crap for over 500€ out there until one TV caught our attention. We imediately liked the image quality and it had a very reasonable price. And here it is:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UVgEHkMoQRk/SM6jGE2mLDI/AAAAAAAAAFM/vJTdZV1YfjY/s1600-h/TV-toshiba-42C3530D.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_UVgEHkMoQRk/SM6jGE2mLDI/AAAAAAAAAFM/vJTdZV1YfjY/s400/TV-toshiba-42C3530D.png" alt="" id="BLOGGER_PHOTO_ID_5246309940710485042" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;Toshiba 42C3530D, 42" LCD-TV&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Our new TV, it only just fits in our living room and Anja is still frightened of its' size ;). We imediately played a match of Wii Sports Tennis and it makes a big difference. My first status symbol, really nice. ;)&lt;br /&gt;&lt;br /&gt;Ciao,&lt;br /&gt;Juve&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/684890336075246090-1548576772416695557?l=open-juve.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://open-juve.blogspot.com/feeds/1548576772416695557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=684890336075246090&amp;postID=1548576772416695557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/1548576772416695557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/684890336075246090/posts/default/1548576772416695557'/><link rel='alternate' type='text/html' href='http://open-juve.blogspot.com/2008/09/woah-i-bought-42-tv.html' title='Woah! I bought a 42&quot; TV!'/><author><name>juve</name><uri>http://www.blogger.com/profile/04873074871216061239</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/uwe.jugel/RwDfy1jyARI/AAAAAAAAACA/DkHo4wbkNMM/s144/juve-avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_UVgEHkMoQRk/SM6jGE2mLDI/AAAAAAAAAFM/vJTdZV1YfjY/s72-c/TV-toshiba-42C3530D.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
