<?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-1016097698868134716</id><updated>2011-11-28T00:21:58.513+01:00</updated><category term='linux'/><category term='driver'/><category term='arduino'/><category term='Unix'/><category term='Mobile'/><category term='MP3-Player'/><category term='IEEE'/><category term='Script'/><category term='Italy'/><category term='wifi'/><category term='Bookmarklet'/><category term='Perl'/><category term='graph'/><category term='Idea'/><category term='Google'/><category term='Programming'/><category term='electronics'/><category term='Blogging'/><category term='Tool'/><category term='Browser'/><category term='travel'/><category term='SystemC'/><category term='Chrome'/><category term='python'/><category term='netbook'/><category term='Conference'/><category term='Software'/><category term='ubuntu'/><category term='JavaScript'/><category term='Android'/><category term='Como'/><category term='avr'/><category term='App-a-Day'/><category term='HOWTO'/><title type='text'>J-Dii's Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-6242796856999730674</id><published>2011-07-20T17:33:00.001+02:00</published><updated>2011-07-20T17:36:38.884+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='App-a-Day'/><title type='text'>App-a-Day 2: Singapore MRT</title><content type='html'>&lt;div&gt;&lt;p&gt;&lt;a href="https://market.android.com/details?id=ddr.phone.mrt"&gt;"Singapore MRT"&lt;/a&gt;&lt;br&gt;OK, this was kinda cheap to delete. A useful map of the Singapore subway MRT service. But only useful in Singapore... ;-) &lt;br&gt;My rating: 4/5 stars.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-6242796856999730674?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/6242796856999730674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=6242796856999730674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/6242796856999730674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/6242796856999730674'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2011/07/app-day-2-singapore-mrt.html' title='App-a-Day 2: Singapore MRT'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-1792287650168152553</id><published>2011-07-19T22:14:00.001+02:00</published><updated>2011-07-20T17:36:53.169+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='App-a-Day'/><title type='text'>App-a-Day 1: Singapore Travel Guide</title><content type='html'>&lt;div&gt;&lt;p&gt;&lt;a href="https://market.android.com/details?id=com.guidepal.singapore"&gt;"Singapore"&lt;/a&gt;&lt;br&gt;I used this on a trip to Singapore this spring. Pretty useful for a quick overview of the most prominent sights of the country. Useful agenda function.&lt;br&gt;My rating: 4/5 stars.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-1792287650168152553?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/1792287650168152553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=1792287650168152553' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/1792287650168152553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/1792287650168152553'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2011/07/app-day-1-singapore-travel-guide.html' title='App-a-Day 1: Singapore Travel Guide'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-4321008275218480791</id><published>2011-07-19T21:51:00.001+02:00</published><updated>2011-07-19T22:06:10.063+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='App-a-Day'/><title type='text'>New Project: An App a Day - UNINSTALLED</title><content type='html'>&lt;div&gt;&lt;p&gt;I have been using Android since early 2010, first on a Samsung Galaxy Spica, now (since April) on a Nexus S. While the limited memory of my first phone forced me to strictly limit the number of apps I kept on my phone, I have been really wasteful since having about one gigabyte of space for apps (not counting the 15GB of internal storage for "App2SD").&lt;/p&gt;&lt;p&gt;Since April, I have accumulated well over 150 apps (166 right now, not counting the apps I uninstalled in the past days). Way to many, it seems. &lt;/p&gt;&lt;p&gt;Many of the installed apps I only tried once and never ran them again. Others are used rarely but worth keeping. However, there are even apps thatbI have not run at all. In order to reduce the number, I will be trying to uninstall an average of 1 app per day and report it here.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-4321008275218480791?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/4321008275218480791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=4321008275218480791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/4321008275218480791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/4321008275218480791'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2011/07/new-project-app-day-uninstalled.html' title='New Project: An App a Day - UNINSTALLED'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-4426106983115365875</id><published>2010-08-11T07:59:00.005+02:00</published><updated>2010-08-11T08:04:13.552+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='avr'/><title type='text'>Pullup of Dallas/Maxim 1-Wire on AVR or Arduino</title><content type='html'>Just a quick hack: You can avoid using the required 4k7 pullup resistor for the 1-wire data line by using an AVR pin in pullup mode (i.e. input mode, set to high). This has to be an extra pin, not the data pin itself (unless you are paying special attention in your 1-wire protocol routines). Also, it probably won't work for long wires or large 1-wire networks (I tried it using a single DS1820 temperature sensor very close to the AVR).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-4426106983115365875?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/4426106983115365875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=4426106983115365875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/4426106983115365875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/4426106983115365875'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2010/08/pullup-of-dallasmaxim-1-wire-on-avr-or.html' title='Pullup of Dallas/Maxim 1-Wire on AVR or Arduino'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-3288460801456908742</id><published>2010-02-26T17:18:00.006+01:00</published><updated>2010-03-01T17:30:04.712+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><title type='text'>Python Script VCF Photo to Google Contacts</title><content type='html'>Google Contacts does not yet import Photos embedded in VCF (VCard Files) during import from an existing addressbook. I wrote a little script that does that for you:&lt;br /&gt;Contacts must already exist in Google (import VCF in Google first).&lt;br /&gt;&lt;br /&gt; - Configure the script by adjusting the 4 variables at the top&lt;br /&gt; - Contacts must already exist in Google (import VCF in Google first)&lt;br /&gt; - Photos are cropped to 96x96 in the middle using ImageMagic (via command line) to match Googles image limit&lt;br /&gt; - Contacts are matched based on the Full name (FN in VCF) / Entry Title (in Google)&lt;br /&gt;&lt;br /&gt;Updates: &lt;br /&gt; - Version 1.1: Fixed Unicode-Handling&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/python&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;&lt;br /&gt;""" Script to upload photos from a VCF addressbook to Google Contacts&lt;br /&gt;    Contacts must already exist in Google (import VCF in Google first).&lt;br /&gt;    Photos are cropped to 96x96 in the middle using ImageMagic (via command line) to match Googles image limit&lt;br /&gt;    Contacts are matched based on the Full name (FN in VCF) / Entry Title (in Google)&lt;br /&gt;    Version: 1.1&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;# Configuration:&lt;br /&gt;vcf_filename = "addressbook-2009-11-10.vcf"     # VCF file to read&lt;br /&gt;google_login = "mymail@gmail.com"               # Your google Email address&lt;br /&gt;password = None                                 # if none -&gt; prompt&lt;br /&gt;max_results = 5000                              # use low number for testing&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import vobject&lt;br /&gt;import StringIO&lt;br /&gt;import atom&lt;br /&gt;import gdata.contacts&lt;br /&gt;import gdata.contacts.service&lt;br /&gt;import sys,os,time&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# temporary files&lt;br /&gt;image_filename = 'photo.jpg'&lt;br /&gt;cropped_image_filename = "photoc.jpg"&lt;br /&gt;&lt;br /&gt;f = open(vcf_filename)&lt;br /&gt;&lt;br /&gt;gd_client = gdata.contacts.service.ContactsService()&lt;br /&gt;gd_client.email = google_login&lt;br /&gt;gd_client.password = None&lt;br /&gt;gd_client.source = 'exampleCo-exampleApp-1'&lt;br /&gt;&lt;br /&gt;if gd_client.password is None:&lt;br /&gt;    import getpass&lt;br /&gt;    gd_client.password = getpass.getpass("password:")&lt;br /&gt;&lt;br /&gt;gd_client.ProgrammaticLogin()&lt;br /&gt;&lt;br /&gt;query = gdata.contacts.service.ContactsQuery()    &lt;br /&gt;query.max_results = max_results&lt;br /&gt;#print "query:", query.max_results, query.ToUri()&lt;br /&gt;feed = gd_client.GetContactsFeed(query.ToUri())&lt;br /&gt;&lt;br /&gt;for v in vobject.readComponents( f ):&lt;br /&gt;    #print v.contents&lt;br /&gt;    if "photo" not in v.contents: continue        &lt;br /&gt;    #v.prettyPrint()    &lt;br /&gt;    name = unicode(v.fn.value)&lt;br /&gt;    &lt;br /&gt;    for i, entry in enumerate(feed.entry):&lt;br /&gt;        if entry.title.text is None: continue&lt;br /&gt;        title = unicode(entry.title.text, "utf-8")&lt;br /&gt;        if title == name:&lt;br /&gt;            print "Uploading Photo for", name.encode('utf-8'), "to", title.encode('utf-8')&lt;br /&gt;            # Update foto!&lt;br /&gt;            p = open(image_filename, 'w')&lt;br /&gt;            p.write(v.photo.value)&lt;br /&gt;            p.close()&lt;br /&gt;            &lt;br /&gt;            # Change size to 96x96&lt;br /&gt;            cropped_image_filename = "photoc.jpg"&lt;br /&gt;            cmd = "convert "+image_filename+" -gravity Center -crop 96x96+0+0 "+cropped_image_filename&lt;br /&gt;            os.system(cmd)&lt;br /&gt;            &lt;br /&gt;            try:&lt;br /&gt;                photo_metadata = gd_client.ChangePhoto(cropped_image_filename, entry, content_type='image/jpeg')&lt;br /&gt;            except gdata.service.RequestError:&lt;br /&gt;                print "Didn't work!"&lt;br /&gt;            &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;script language="javascript" src="http://gpowered.webfactional.com/php/js/dp.SyntaxHighlighter/Scripts/shBrushJScript.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript"&gt;dp.SyntaxHighlighter.ClipboardSwf = '/flash/clipboard.swf';dp.SyntaxHighlighter.HighlightAll('code');&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-3288460801456908742?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/3288460801456908742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=3288460801456908742' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/3288460801456908742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/3288460801456908742'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2010/02/python-script-vcf-photo-to-google.html' title='Python Script VCF Photo to Google Contacts'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-3213577827046629926</id><published>2009-10-27T13:39:00.005+01:00</published><updated>2009-10-27T14:53:36.899+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Bookmarklet'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Browser'/><title type='text'>Bookmarklet to the TU-BS Mensa</title><content type='html'>To directly go to Todays menu, use this bookmarklet (drag it to your Bookmark Bar, works in Chrome, Firefox, ...):&lt;br /&gt;&lt;br /&gt;&lt;a href="javascript:today = new Date();  day = today.getDay();  arday = new Array('#So', '#Mo', '#Di',  '#Mi', '#Do', '#Fr', '#Sa'); location.href='http://www.sw-bs.de/braunschweig/essen/tu2'+arday[day];"&gt;Mensa&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-3213577827046629926?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/3213577827046629926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=3213577827046629926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/3213577827046629926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/3213577827046629926'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2009/10/chrome-bookmarklet-to-tu-bs-mensa.html' title='Bookmarklet to the TU-BS Mensa'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-336908037005910879</id><published>2009-09-16T23:28:00.003+02:00</published><updated>2009-09-16T23:38:23.280+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbook'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='driver'/><title type='text'>WPA Wifi with MSI Wind (RTL8187SE) on Ubuntu 9.04</title><content type='html'>My MSI Wind used to have trouble keeping a WIFI connection going when I used WPA/WPA2. The connection was frequently lost, usually when large amounts of data were transferred (downloads). This could be fixed by reconnecting, but that really was a PITA.&lt;br /&gt;&lt;br /&gt;This behavior happened with the rtl8187se driver that shipped with Ubuntu 9.04. Being desparate, I gave NDISWrapper a try, which is a generic driver that uses original Windows WiFi drivers. I basically just followed the Ubuntu guide at &lt;a href="http://wiki.ubuntuusers.de/WLAN/NdisWrapper"&gt;http://wiki.ubuntuusers.de/WLAN/NdisWrapper&lt;/a&gt; (German), using the windows drivers provided by MSI (&lt;a href="http://global.msi.eu/index.php?func=driverfile&amp;amp;dno=6922&amp;amp;i=1"&gt;http://global.msi.eu/index.php?func=driverfile&amp;amp;dno=6922&amp;amp;i=1&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;After rebooting, I made sure that the ndiswrapper was used (i.e. checked that the rtl8781se driver was not loaded) and used the wicd tool to connect to my favourite WPA2-secured WLAN access point. Voila! The connection seems to be stable.&lt;br /&gt;&lt;br /&gt;I am not aware of any drawbacks of using the ndiswrapper. It seems to run stable (especially compared to the "original" ubuntu driver). Maybe battery consumption is not as good?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-336908037005910879?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/336908037005910879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=336908037005910879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/336908037005910879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/336908037005910879'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2009/09/wpa-wifi-with-msi-wind-rtl8187se-on.html' title='WPA Wifi with MSI Wind (RTL8187SE) on Ubuntu 9.04'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-5176074116647854749</id><published>2009-04-28T09:35:00.008+02:00</published><updated>2009-04-28T10:09:53.825+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><title type='text'>Overview of Python Graph Packages</title><content type='html'>I wanted to create a graph of a network with directed edges including edge labels from a simulation file. Since most of my scripts are written in python, I wanted to use a python-based approach. Most of them are based on &lt;a href="http://www.graphviz.org/"&gt;Graphviz&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, I found that many of these packages are strongly overlapping. So maybe its reasonable to consolidate... BTW: I ended up using pygraphviz. Here are my findings:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;pygraphviz&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://networkx.lanl.gov/pygraphviz/"&gt;http://networkx.lanl.gov/pygraphviz/&lt;/a&gt;&lt;/li&gt;&lt;li style="color: rgb(0, 153, 0);"&gt;Support for all sorts of attributes (in latest version - the one in ubuntu hardy has only little support)&lt;/li&gt;&lt;li style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Direct generation of graphs&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Good documentation&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;python-graph&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/python-graph/"&gt;http://code.google.com/p/python-graph/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Supports all sorts of attributes (edgelabels etc.)&lt;/span&gt;&lt;/li&gt;&lt;li style="color: rgb(153, 0, 0);"&gt;Requires manually calling of graphviz (dot, neato)?&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;pydot&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/pydot/"&gt;http://code.google.com/p/pydot/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Seems similar to python-graph&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Supports all sorts of attributes (edgelabels etc.)&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;No documentation&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Requires manually calling of graphviz (dot, neato)?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;NetworkX&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://networkx.lanl.gov/index.html"&gt;http://networkx.lanl.gov/index.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Seems to be related to pygraphviz&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Good documentation&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="color: rgb(153, 0, 0);"&gt;No support for edge labels&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;Directed edges look strange&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;graph-tool&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://projects.forked.de/graph-tool/"&gt;http://projects.forked.de/graph-tool/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Haven't taken a closer look...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-5176074116647854749?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/5176074116647854749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=5176074116647854749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/5176074116647854749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/5176074116647854749'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2009/04/overview-of-python-graph.html' title='Overview of Python Graph Packages'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-3538412609798442896</id><published>2009-03-13T16:00:00.006+01:00</published><updated>2009-03-13T17:12:52.911+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Idea'/><title type='text'>"Turbo Mode" for mobile browsing</title><content type='html'>I just read about the&lt;a href="http://labs.opera.com/news/2009/03/13/"&gt; turbo mode in Opera 10&lt;/a&gt;, which sends images through a proxy that compresses them to save bandwidth on the end user.&lt;br /&gt;&lt;br /&gt;This sounds really useful for a mobile phone web browser like &lt;a href="http://www-archive.mozilla.org/projects/minimo/"&gt;Minimo&lt;/a&gt; or &lt;a href="http://www.twotoasts.de/index.php?/pages/midori_summary.html"&gt;Midori&lt;/a&gt;. But relying on a proxy to scale the images might not suit an opensource browser because of the infrastructure cost for the proxies. However, maybe Google Image could be (mis-)used as a proxy to at least scale down the images.&lt;br /&gt;&lt;br /&gt;Another option is to use &lt;a href="http://en.wikipedia.org/wiki/Interlace_%28bitmaps%29"&gt;interlaced/progressive images&lt;/a&gt;, which is supported by most image formats for the same purpose. In "turbo mode", the browser would only load enough data to display a rough preview of the image, hence conserving bandwidth. The user might then selectively load the rest of the image later.&lt;br /&gt;&lt;br /&gt;This of course requires the image to be encoded in interlaced format in the first place, which is not common. But it might become common when minimo/firefox/webkit implements such a turbo mode...&lt;br /&gt;&lt;br /&gt;What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-3538412609798442896?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/3538412609798442896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=3538412609798442896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/3538412609798442896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/3538412609798442896'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2009/03/turbo-mode-for-mobile-browsing.html' title='&quot;Turbo Mode&quot; for mobile browsing'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-2850846210034800569</id><published>2009-03-06T22:34:00.003+01:00</published><updated>2009-03-06T22:53:14.075+01:00</updated><title type='text'>Controlling MSI Wind fan speed from Linux</title><content type='html'>In search of a way to silence my MSI Wind (esp. when running Linux), I found this Thread and a coresponding tool for Windows/Dos: &lt;a href="http://forums.msiwind.net/post85863.html"&gt;http://forums.msiwind.net/post85863.html&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;I created a port to Linux, which can be found on my &lt;a href="http://sites.google.com/site/jonasdiemer/Home/kb3700_fanctrl"&gt;sites&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-2850846210034800569?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/2850846210034800569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=2850846210034800569' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/2850846210034800569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/2850846210034800569'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2009/03/controlling-msi-wind-fan-speed-from.html' title='Controlling MSI Wind fan speed from Linux'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-437684570879522201</id><published>2009-01-20T13:47:00.004+01:00</published><updated>2009-01-20T13:50:49.762+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SystemC'/><title type='text'>Tracing with SystemC using gtkwave</title><content type='html'>I have found few sources of information on this, so I'd like to share my experiences.&lt;br /&gt;&lt;br /&gt;Most importantly, use the commandline switch -o when opening VCD files with gtkwave:&lt;br /&gt;&lt;pre&gt;gtkwave -o MyTrace.vcd&lt;/pre&gt;&lt;br /&gt;This generates a hierarchy from hierarchical names like "TOP.module1.signal1".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-437684570879522201?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/437684570879522201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=437684570879522201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/437684570879522201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/437684570879522201'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2009/01/tracing-with-systemc-using-gtkwave.html' title='Tracing with SystemC using gtkwave'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-8947767842028754285</id><published>2008-12-28T16:22:00.009+01:00</published><updated>2009-01-01T22:05:36.893+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='MP3-Player'/><category scheme='http://www.blogger.com/atom/ns#' term='Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><title type='text'>Using rsync with FAT filesystem</title><content type='html'>The VFAT filesystem, which is commonly used on USB-Sticks and MP3-Players, requires special options for use with rsync:&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;rsync -rvt --modify-window=1 [from] [to]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;code&gt;-rvt&lt;/code&gt; does a recursive sync, preserves the modification time (so a later rsync can recognize identical files) and is verbose.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;code&gt;--modify-window=1&lt;/code&gt; avoids "false positives". It is required because VFAT only has a resolution of 2 seconds for the timestamp, while most other filesystem offer a resolution of 1 second.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt; &lt;br /&gt;Another useful option is &lt;code&gt;-n&lt;/code&gt;, which performs a "dry run".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-8947767842028754285?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/8947767842028754285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=8947767842028754285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/8947767842028754285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/8947767842028754285'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2008/12/using-rsync-with-fat-filesystem.html' title='Using rsync with FAT filesystem'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-6233350517182062096</id><published>2008-12-09T19:57:00.006+01:00</published><updated>2008-12-09T20:35:16.503+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><title type='text'>VCard to HTML Script</title><content type='html'>I needed a way to display contacts (in VCF Format) exported from KDE's KAddressbook (the contact management in Kontact). I found &lt;a href="http://stebalien.com/2008/06/vcard-viewer-perl-script.html"&gt;this perl script&lt;/a&gt; that converts vcf to text, which I used as a starting point.&lt;br /&gt;&lt;br /&gt;Features of my script (call it vcf2html or vcard2html) so far:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reads a VCF containing multiple contacts&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Generates a single HTML file to stdout&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Supported fields: Full Name (FN), Organization (ORG), ROLE, EMAIL, ADDRESSES, Phone Numbers (TEL), URL, Birthday, Notes,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Photos are saved into the current directory&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Usage:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;vcf2html.pl addressbook.vcf &gt; addressbook.html&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The script looks like this (copy and paste into text editor and save as vcf2html.pl. Don't forget to make it executable):&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;#!/usr/bin/perl&lt;br /&gt;# Copyright (C) 2008, Jonas Diemer&lt;br /&gt;# Based on vcard-view.pl, Copyright (C) 2008, Steven Allen&lt;br /&gt;#&lt;br /&gt;# This program is free software: you can redistribute it and/or modify&lt;br /&gt;# it under the terms of the GNU General Public License as published by&lt;br /&gt;# the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;# (at your option) any later version.&lt;br /&gt;#&lt;br /&gt;# This program is distributed in the hope that it will be useful,&lt;br /&gt;# but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;# GNU General Public License for more details.&lt;br /&gt;#&lt;br /&gt;# You should have received a copy of the GNU General Public License&lt;br /&gt;# along with this program.  If not, see .&lt;br /&gt;&lt;br /&gt;# This program parses vCards and displays their contents in a&lt;br /&gt;# human readable form.&lt;br /&gt;&lt;br /&gt;# Import libtext-vcard-perl library&lt;br /&gt;use Text::vCard::Addressbook;&lt;br /&gt;use Text::vCard::Node;&lt;br /&gt;use Text::vCard;&lt;br /&gt;use utf8;&lt;br /&gt;use HTML::Entities;&lt;br /&gt;&lt;br /&gt;use MIME::Base64;&lt;br /&gt;&lt;br /&gt;# Get card name&lt;br /&gt;my $card_file = $ARGV[0];&lt;br /&gt;&lt;br /&gt;# Create Addressbook&lt;br /&gt;my $address_book = Text::vCard::Addressbook-&amp;gt;new({&lt;br /&gt; 'source_file' =&amp;gt; $card_file,&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;#HTML header&lt;br /&gt;print &amp;quot;&amp;lt;html&amp;gt;\n&amp;quot;;&lt;br /&gt;print &amp;quot;&amp;lt;head&amp;gt;\n&amp;quot;;&lt;br /&gt;print &amp;quot;  &amp;lt;meta http-equiv=\&amp;quot;Content-Type\&amp;quot; content=\&amp;quot;text/html; charset=UTF-8\&amp;quot;/&amp;gt;\n&amp;quot;;&lt;br /&gt;print &amp;quot;  &amp;lt;title&amp;gt;VCF2HTML: &amp;quot;.$card_file.&amp;quot;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;\n&amp;quot;;&lt;br /&gt;print &amp;quot;&amp;lt;body&amp;gt;\n&amp;quot;;&lt;br /&gt;&lt;br /&gt;# $s = &amp;quot;Sm&amp;#246;re Br&amp;#246;d &amp;gt; X\n&amp;quot;;&lt;br /&gt;# print $s;&lt;br /&gt;# print encode_entities($s);&lt;br /&gt;&lt;br /&gt;#Loop through Addressbook&lt;br /&gt;foreach my $vcard ($address_book-&amp;gt;vcards()) {&lt;br /&gt;  print &amp;quot;&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;\n&amp;quot;;&lt;br /&gt;&lt;br /&gt;  # PHOTO&lt;br /&gt;  if ($vcard-&amp;gt;photo()){&lt;br /&gt;    open(file, &amp;quot;&amp;gt;&amp;quot;.$vcard-&amp;gt;uid().&amp;quot;.jpg&amp;quot;);&lt;br /&gt;    print file decode_base64($vcard-&amp;gt;photo());&lt;br /&gt;    print &amp;quot;&amp;lt;img src=\&amp;quot;&amp;quot;.$vcard-&amp;gt;uid().&amp;quot;.jpg\&amp;quot;/&amp;gt;&amp;lt;/br&amp;gt;&amp;quot;;&lt;br /&gt;  }&lt;br /&gt;  print &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;td valign=top&amp;gt;&amp;quot;;&lt;br /&gt;  print &amp;quot;&amp;lt;table&amp;gt;\n&amp;quot;;&lt;br /&gt;&lt;br /&gt; # Name&lt;br /&gt; print &amp;quot;&amp;lt;tr class=Name&amp;gt;\n  &amp;lt;td&amp;gt;Name:&amp;lt;/td&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot; . $vcard-&amp;gt;fullname() . &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt;&lt;br /&gt; # ORG&lt;br /&gt; my $orgs = $vcard-&amp;gt;get({ 'node_type' =&amp;gt; 'ORG' });&lt;br /&gt; foreach my $org (@{$orgs}) {&lt;br /&gt;   print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td&amp;gt;Organization:&amp;lt;/td&amp;gt;\n&amp;quot;;&lt;br /&gt;   $n = $org-&amp;gt;name();&lt;br /&gt;   $n =~ s/\\,/,/g;&lt;br /&gt;   print &amp;quot;  &amp;lt;td&amp;gt;&amp;quot;. $n .&amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; # ROLE&lt;br /&gt; if ($vcard-&amp;gt;role()) {&lt;br /&gt;  print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td&amp;gt;Role:&amp;lt;/td&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot; . $vcard-&amp;gt;role() . &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #email&lt;br /&gt; my $emails = $vcard-&amp;gt;get({ 'node_type' =&amp;gt; 'EMAIL' });&lt;br /&gt; foreach my $email (@{$emails}) {&lt;br /&gt;   print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td&amp;gt;Email &amp;quot;.$email-&amp;gt;types()-&amp;gt;[0].&amp;quot;:&amp;lt;/td&amp;gt;\n&amp;quot;;&lt;br /&gt;   print &amp;quot;  &amp;lt;td&amp;gt;&amp;quot;.encode_entities($email-&amp;gt;value()) .&amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; # Address&lt;br /&gt; my $addresses = $vcard-&amp;gt;get({ 'node_type' =&amp;gt; 'addresses' });&lt;br /&gt; foreach my $address (@{$addresses}) {&lt;br /&gt;   print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td valign=top&amp;gt;&amp;quot;.$address-&amp;gt;types()-&amp;gt;[0].&amp;quot; Address:&amp;lt;/td&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot;;&lt;br /&gt;   print &amp;quot;  &amp;quot; . encode_entities($address-&amp;gt;street()) . &amp;quot;&amp;lt;br/&amp;gt;\n&amp;quot;;&lt;br /&gt;   print &amp;quot;  &amp;quot; . $address-&amp;gt;post_code() . &amp;quot; &amp;quot;. $address-&amp;gt;city();&lt;br /&gt;   if ($address-&amp;gt;region()) { print &amp;quot;, &amp;quot; . $address-&amp;gt;region(); }&lt;br /&gt;   if ($address-&amp;gt;country()){&lt;br /&gt;     print &amp;quot;&amp;lt;/br&amp;gt;\n  &amp;quot; . $address-&amp;gt;country();&lt;br /&gt;   }&lt;br /&gt;   print &amp;quot;  &amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; # Phones&lt;br /&gt; my $tels = $vcard-&amp;gt;get({ 'node_type' =&amp;gt; 'tel' });&lt;br /&gt; foreach my $tel (@{$tels}) {&lt;br /&gt;   print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot;.$tel-&amp;gt;types()-&amp;gt;[0].&amp;quot; Phone:&amp;lt;/td&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot;. $tel-&amp;gt;value().&amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; # URL&lt;br /&gt; my $urls = $vcard-&amp;gt;get({ 'node_type' =&amp;gt; 'URL' });&lt;br /&gt; foreach my $url (@{$urls}) {&lt;br /&gt;  print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td&amp;gt;Web:&amp;lt;/td&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot; . $url-&amp;gt;value() . &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; # BDAY&lt;br /&gt; if ($vcard-&amp;gt;birthday()) {&lt;br /&gt;  print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td&amp;gt;Birthday:&amp;lt;/td&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot; . $vcard-&amp;gt;birthday() . &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; # Notes&lt;br /&gt; my $notes = $vcard-&amp;gt;get({ 'node_type' =&amp;gt; 'NOTE' });&lt;br /&gt; foreach my $note (@{$notes}) {&lt;br /&gt;  $n = $note-&amp;gt;value();&lt;br /&gt;  $n =~ s/\\n/&amp;lt;br\/&amp;gt;/g;&lt;br /&gt;  $n =~ s/\\,/,/g;&lt;br /&gt;  print &amp;quot;&amp;lt;tr&amp;gt;\n  &amp;lt;td valign=top&amp;gt;Note:&amp;lt;/td&amp;gt;\n  &amp;lt;td&amp;gt;&amp;quot; . $n . &amp;quot;&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;\n&amp;quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; print &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;!--inner table-&amp;gt;\n&amp;quot;;&lt;br /&gt; print &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt; print &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;hr&amp;gt;\n\n&amp;quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print &amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;\n\n&amp;quot;;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;script language="javascript" src="http://gpowered.webfactional.com/php/js/dp.SyntaxHighlighter/Scripts/shBrushJScript.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript"&gt;&lt;br /&gt;dp.SyntaxHighlighter.ClipboardSwf = '/flash/clipboard.swf';&lt;br /&gt;dp.SyntaxHighlighter.HighlightAll('code');&lt;br /&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-6233350517182062096?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/6233350517182062096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=6233350517182062096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/6233350517182062096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/6233350517182062096'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2008/12/vcard-to-html-script.html' title='VCard to HTML Script'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-4644750668159001277</id><published>2008-11-15T17:10:00.005+01:00</published><updated>2009-03-13T16:46:51.334+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Italy'/><category scheme='http://www.blogger.com/atom/ns#' term='IEEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Como'/><title type='text'>MICRO-41 in Como, Italy</title><content type='html'>I attended a very interesting conference (IEEE MICRO-41) in Como, Italy. Pictures are &lt;a href="http://www.flickr.com/photos/justdeamer/sets/72157609130227443/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/b28b2c6d-f102-457a-980b-cbba37ab21de/" title="Zemified by Zemanta"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://farm4.static.flickr.com/3163/3032298642_7f68b84f51.jpg?v=0" alt="img_2378 von Ihnen." title="" onload="show_notes_initially();" class="reflect" width="500" height="375" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-4644750668159001277?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/4644750668159001277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=4644750668159001277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/4644750668159001277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/4644750668159001277'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2008/11/micro-41-in-como-italy.html' title='MICRO-41 in Como, Italy'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1016097698868134716.post-6462541883634325200</id><published>2008-11-09T17:51:00.002+01:00</published><updated>2008-12-02T23:08:37.304+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogging'/><title type='text'>Hello Blogging World</title><content type='html'>This is my hello-world of blogs. The first step. First experiments. Nothing more, nor less. I don't know (yet) whether I will be doing any serious blogging, so lets just wait and see :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1016097698868134716-6462541883634325200?l=j-dii.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://j-dii.blogspot.com/feeds/6462541883634325200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1016097698868134716&amp;postID=6462541883634325200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/6462541883634325200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1016097698868134716/posts/default/6462541883634325200'/><link rel='alternate' type='text/html' href='http://j-dii.blogspot.com/2008/11/test.html' title='Hello Blogging World'/><author><name>J</name><uri>http://www.blogger.com/profile/05826981098135224790</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
