<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.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" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-3285197066205497695</id><updated>2012-01-20T16:01:00.098-05:00</updated><category term="Python" /><category term="Twitter" /><category term="Microsoft" /><category term="Architecture" /><category term="web" /><category term="gadgets" /><category term="collaboration" /><category term="Amazon" /><category term="Ohloh" /><category term="AppEngine" /><category term="Web-Services" /><category term="last.fm" /><category term="Data-Centre" /><category term="social" /><category term="rhythmbox" /><category term="dbus" /><category term="Azure" /><category term="Skype" /><category term="mindmeister" /><category term="Programming" /><category term="NPAPI" /><category term="firefox" /><category term="Amazon S3" /><category term="Chrome" /><category term="Message-Bus" /><category term="bookmarklet" /><category term="Projects" /><category term="Software" /><category term="mindmap" /><category term="Apache" /><category term="wave" /><category term="greasemonkey" /><category term="YahooPipes" /><category term="Cloud" /><category term="FeedBurner" /><category term="Icons" /><category term="Social Networking" /><category term="Design-Patterns" /><category term="linux" /><category term="IBM" /><category term="System" /><category term="Phidgets" /><category term="MySQL" /><category term="Subversion" /><category term="Javascript" /><category term="MediaWiki" /><category term="freemind" /><category term="C/C++" /><category term="ejabberd" /><category term="CloudComputing" /><category term="Green" /><category term="music" /><category term="communication" /><category term="Zend" /><category term="OSX" /><category term="networking" /><category term="Gnome" /><category term="Gliffy" /><category term="musicbrainz music python" /><category term="PEAR" /><category term="PHP" /><category term="Del.icio.us" /><category term="musicbrainz" /><category term="trick" /><category term="systemical" /><category term="VPS" /><category term="Eclipse" /><category term="Subclipse" /><category term="Hacking" /><category term="itunes" /><category term="google" /><category term="Erlang" /><title type="text">Jean-Lou Dupont's WEBlog</title><subtitle type="html">Notes on Cloud Computing, Telecommunications &amp;amp; Software</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/posts/full" /><link rel="alternate" type="text/html" href="http://jldupont.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/full?start-index=26&amp;max-results=25" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jldupont/weblog" /><feedburner:info uri="jldupont/weblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-5395322670203499623</id><published>2012-01-20T16:01:00.000-05:00</published><updated>2012-01-20T16:01:00.105-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Amazon" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title type="text">Amazon AWS tools - jldaws</title><content type="html">Today I am open-sourcing yet another project. &amp;nbsp;It consists in a collection of Linux scripts related to Amazon Web Services (AWS).&lt;br /&gt;&lt;br /&gt;The project's home page can be found &lt;a href="http://www.systemical.com/doc/opensource/jldaws"&gt;here&lt;/a&gt; whilst the code repository is &lt;a href="https://github.com/jldupont/jldaws" target="_blank"&gt;there&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-5395322670203499623?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/yt9NTgbhCD0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/5395322670203499623/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2012/01/amazon-aws-tools-jldaws.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/5395322670203499623" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/5395322670203499623" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/yt9NTgbhCD0/amazon-aws-tools-jldaws.html" title="Amazon AWS tools - jldaws" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2012/01/amazon-aws-tools-jldaws.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-7257930702905343216</id><published>2011-12-08T14:27:00.001-05:00</published><updated>2011-12-08T14:53:50.759-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="CloudComputing" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">My life in the Cloud</title><content type="html">I am pretty much 100% in the Cloud now.  Here's how I do it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Services&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Email: &amp;nbsp;Google GMAIL (with "Tasks")&lt;/li&gt;&lt;li&gt;Calendar: &amp;nbsp;Google Calendar&lt;/li&gt;&lt;li&gt;Documents: &amp;nbsp;Google Docs (with a sprinkle of DropBox, going away soon enough)&lt;/li&gt;&lt;li&gt;Music: combination of &lt;a href="http://www.rdio.com/#/people/dupontjl/" target="_blank"&gt;Rdio&lt;/a&gt; and &lt;a href="http://grooveshark.com/" target="_blank"&gt;Grooveshark&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Movies: Netflix &amp;nbsp;(on my Android devices, Apple TV and MacBook Pro)&lt;/li&gt;&lt;li&gt;Code: &lt;a href="https://github.com/jldupont" target="_blank"&gt;Github&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Project Issue Tracker: &amp;nbsp;&lt;a href="http://lighthouseapp.com/" target="_blank"&gt;Lighthouse&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;What I gain:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Mobility&lt;/li&gt;&lt;li&gt;Availability&lt;/li&gt;&lt;li&gt;Persistence&lt;/li&gt;&lt;li&gt;Version Control&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I don't need to worry about loosing / forgetting my laptop for work: &amp;nbsp;I just grab a spare one at work. Hence, business continuity is greatly improved over the traditional Microsoft "stack".&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, on my Linux/OSX PCs, I only need the following installed software:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Google Chrome &amp;nbsp;(the auto-sync feature for bookmarks, extensions etc. is way cool :)&lt;/li&gt;&lt;li&gt;Eclipse (with PyDev, Google Plugin, Egit)&lt;/li&gt;&lt;li&gt;git&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;When it comes time to setting-up a complete working environment, I can turnaround one in under &lt;b&gt;1/2 hour&lt;/b&gt;!&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;Security&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The first reaction I get when I expose my workflow: &amp;nbsp;is this Cloud stuff secure? &amp;nbsp;To which I respond with a combination of the following:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;I would rather trust Google and their army of sysadmins than me when it comes to external security threats&lt;/li&gt;&lt;li&gt;I never write down passwords nor credit card numbers in documents. Period.&lt;/li&gt;&lt;li&gt;Doing business comes down to trust - being part of society requires trust&lt;/li&gt;&lt;li&gt;My data is more secure located in the Cloud than on my laptop / desktop : those are too easy to lift&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-size: large;"&gt;Availability&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Another common reaction is about availability. I don't know about you guys, but Internet Access is pretty available nowadays and certainly Google is. For those of you worried about this dimension, consider:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;I have access through my Android mobile devices (carrier #1)&lt;/li&gt;&lt;li&gt;I have access&amp;nbsp;through my 3G dongle (carrier #2)&lt;/li&gt;&lt;li&gt;I have access through my Cable Modem (carrier #3)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Yes I subscribe to 3 different carriers - I don't remember the last time I lost connectivity and was out of commission, business wise.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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/3285197066205497695-7257930702905343216?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/NAlT4NXwKoc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/7257930702905343216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2011/12/my-life-in-cloud.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/7257930702905343216" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/7257930702905343216" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/NAlT4NXwKoc/my-life-in-cloud.html" title="My life in the Cloud" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2011/12/my-life-in-cloud.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-5044266316753254820</id><published>2011-10-29T21:59:00.001-04:00</published><updated>2011-10-29T22:01:32.764-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Message-Bus" /><category scheme="http://www.blogger.com/atom/ns#" term="Software" /><category scheme="http://www.blogger.com/atom/ns#" term="System" /><title type="text">Software based Message Switch</title><content type="html">&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="true" frameborder="0" height="750" src="https://docs.google.com/presentation/embed?id=1_2VEkOGLK7z8nfUDLKSTZXbnvgLWaL7ffMDCz01MVLs&amp;amp;start=false&amp;amp;loop=false&amp;amp;delayms=3000" webkitallowfullscreen="true" width="850"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-5044266316753254820?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/mtrJ-uwTLXg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/5044266316753254820/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2011/10/software-based-message-switch.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/5044266316753254820" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/5044266316753254820" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/mtrJ-uwTLXg/software-based-message-switch.html" title="Software based Message Switch" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2011/10/software-based-message-switch.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-5223122855056729915</id><published>2011-08-14T09:03:00.002-04:00</published><updated>2011-08-14T09:03:31.484-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OSX" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title type="text">Media-Keys over Web-Socket</title><content type="html">My newest open-source project is a Media-Keys over Web-Socket application. &amp;nbsp;The project's details can be found &lt;a href="https://sites.google.com/a/systemical.com/v1/doc/opensource/mediakeysserver"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Application&lt;/b&gt;&lt;br /&gt;The main use-case I wanted to address with this component is the ability to control music playback of web-sites such as &lt;a href="http://grooveshark.com/"&gt;GrooveShark&lt;/a&gt; and &lt;a href="http://www.rdio.com/"&gt;Rdio&lt;/a&gt; through the keyboard media-keys.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Usage&lt;/b&gt;&lt;br /&gt;A Google Chrome extension will follow shortly.&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/3285197066205497695-5223122855056729915?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/hHNUYhh7taE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/5223122855056729915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2011/08/media-keys-over-web-socket.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/5223122855056729915" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/5223122855056729915" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/hHNUYhh7taE/media-keys-over-web-socket.html" title="Media-Keys over Web-Socket" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2011/08/media-keys-over-web-socket.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-3182961897544993567</id><published>2011-05-18T13:17:00.000-04:00</published><updated>2011-05-18T13:17:30.386-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AppEngine" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">Using Google Sites as Content Management System</title><content type="html">I recently had to build a new web site from ground-up. &amp;nbsp;One thing I didn't want to do is go off installing Wordpress / Drupal etc. on a virtual machine. &amp;nbsp;As much as I love technology, I can't be bothered anymore with administrative tasks such as backups.&lt;br /&gt;I decided to give Google Sites another go but I quickly was confronted with the limitations of this platform. That's when I decided to couple to great Google products: &amp;nbsp;Sites and AppEngine.&lt;br /&gt;&lt;br /&gt;View the &lt;a href="http://www.systemical.com/doc/cms"&gt;presentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-3182961897544993567?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/kjOCsKKACKc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/3182961897544993567/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2011/05/using-google-sites-as-content.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/3182961897544993567" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/3182961897544993567" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/kjOCsKKACKc/using-google-sites-as-content.html" title="Using Google Sites as Content Management System" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2011/05/using-google-sites-as-content.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-6222145167072715148</id><published>2011-04-15T19:33:00.000-04:00</published><updated>2011-04-15T19:33:56.920-04:00</updated><title type="text">A Service Registration Web-Service API</title><content type="html">It's been a while since I have last blogged... been very busy with my company &lt;a href="http://www.data-tester.com/"&gt;Data-Tester Inc.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have the pleasure to announce the immediate availability of another Web-Service hosted on &lt;a href="http://www.systemical.com/"&gt;Systemical&lt;/a&gt; : &lt;a href="http://www.systemical.com/web-services/ipreg"&gt;ipreg&lt;/a&gt;. &amp;nbsp;This service allows, for example, mobile devices (such as Android) to "discover" available LAN services). &lt;br /&gt;&lt;b&gt;Why is this useful at all you might ask?&lt;/b&gt; &amp;nbsp;For the curious: &amp;nbsp;it boils down to limitations related to multicast support in mobile devices. &amp;nbsp;For more details, read the details &lt;a href="http://www.systemical.com/web-services/ipreg"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-6222145167072715148?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/QR4h8HbJbJU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/6222145167072715148/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2011/04/service-registration-web-service-api.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/6222145167072715148" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/6222145167072715148" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/QR4h8HbJbJU/service-registration-web-service-api.html" title="A Service Registration Web-Service API" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2011/04/service-registration-web-service-api.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-565829535622028679</id><published>2010-10-11T20:52:00.000-04:00</published><updated>2010-10-11T20:52:37.117-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="last.fm" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="itunes" /><title type="text">iTunes playcount updater script</title><content type="html">I am pretty busy these days with my new job ( I am heading a start-up in the telecommunications market ) but I took a couple of hours to craft a couple of scripts.&lt;br /&gt;&lt;br /&gt;The first script (&lt;i&gt;lastfm_gettracks&lt;/i&gt;) downloads all of a user's song track information from &lt;a href="http://last.fm/"&gt;Last.fm&lt;/a&gt;. It can be found on Pypi &lt;a href="http://pypi.python.org/pypi/jld_scripts"&gt;here&lt;/a&gt;.&amp;nbsp; More information can be perused &lt;a href="http://www.systemical.com/doc/opensource/jld_scripts"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The second script takes as input the file generated by the former script and updates the iTunes database on an OSX machine (sorry, I don't do windozes). Documentation for this script can be found &lt;a href="http://www.systemical.com/doc/opensource/itunes_update_playcount"&gt;here&lt;/a&gt; whilst package details can be found on Pypi &lt;a href="http://pypi.python.org/pypi/jld_osx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-565829535622028679?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/RnntFix0EfQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/565829535622028679/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/10/itunes-playcount-updater-script.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/565829535622028679" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/565829535622028679" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/RnntFix0EfQ/itunes-playcount-updater-script.html" title="iTunes playcount updater script" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/10/itunes-playcount-updater-script.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-1626519652746417930</id><published>2010-09-09T15:34:00.001-04:00</published><updated>2010-09-09T15:34:40.516-04:00</updated><title type="text">Logo contest</title><content type="html">Help me choose a logo for my new company. &amp;nbsp;The logo contest on &lt;a href="http://99designs.com/"&gt;99designs&lt;/a&gt; has ended and it is now time to vote!&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://99designs.com/logo-design/vote-b48bii"&gt;VOTE HERE&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Thanks!&lt;/div&gt;&lt;div style="text-align: left;"&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/3285197066205497695-1626519652746417930?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/yrm8Aj_I6e4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/1626519652746417930/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/09/logo-contest.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/1626519652746417930" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/1626519652746417930" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/yrm8Aj_I6e4/logo-contest.html" title="Logo contest" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/09/logo-contest.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-2602261530746495805</id><published>2010-09-05T09:08:00.000-04:00</published><updated>2010-09-05T09:08:49.623-04:00</updated><title type="text">Chrome Framed extension</title><content type="html">I have just published my latest Google Chrome extension: &amp;nbsp;&lt;a href="http://www.systemical.com/doc/opensource/chrome-framed"&gt;Chrome-Framed&lt;/a&gt;. &amp;nbsp;The extension allows opening a tab with 2 columns 'frame'. &amp;nbsp; This functionality enables a user 2 pages side-by-side in the same chrome window.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-2602261530746495805?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/m37lLP636jU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/2602261530746495805/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/09/chrome-framed-extension.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2602261530746495805" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2602261530746495805" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/m37lLP636jU/chrome-framed-extension.html" title="Chrome Framed extension" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/09/chrome-framed-extension.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-8233249110488685457</id><published>2010-08-17T20:21:00.001-04:00</published><updated>2010-08-17T20:52:53.098-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="last.fm" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="musicbrainz" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title type="text">Musicbrainz and Last.fm proxies updated</title><content type="html">Just a quick note to let users of &lt;b&gt;&lt;a href="http://www.systemical.com/doc/opensource/musicbrainz-proxy-dbus"&gt;musicbrainz-proxy-dbus&lt;/a&gt;&lt;/b&gt; &amp;amp; &lt;b&gt;&lt;a href="http://www.systemical.com/doc/opensource/lastfm-proxy-dbus"&gt;lastfm-proxy-dbus&lt;/a&gt;&lt;/b&gt; applications that new versions are available on my &lt;a href="https://launchpad.net/~jldupont/+archive/jldupont"&gt;PPA&lt;/a&gt;. &amp;nbsp;Notable changes include:&lt;br /&gt;&lt;br /&gt;- Tray icon support: the main application window can now be closed and a tray icon can control them&lt;br /&gt;- Help button linking to a web accessible page&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-8233249110488685457?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/Oqw4lwerorw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/8233249110488685457/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/08/musicbrainz-and-lastfm-proxies-updated.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/8233249110488685457" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/8233249110488685457" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/Oqw4lwerorw/musicbrainz-and-lastfm-proxies-updated.html" title="Musicbrainz and Last.fm proxies updated" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/08/musicbrainz-and-lastfm-proxies-updated.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-6009507945311920543</id><published>2010-06-20T21:33:00.001-04:00</published><updated>2010-06-20T21:33:39.503-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Web-Services" /><category scheme="http://www.blogger.com/atom/ns#" term="systemical" /><category scheme="http://www.blogger.com/atom/ns#" term="AppEngine" /><title type="text">Web Services available on Systemical.com</title><content type="html">I've decided to open access to some web services I built. &amp;nbsp;These services are hosted on &lt;a href="http://code.google.com/appengine/"&gt;Google AppEngine&lt;/a&gt; and the documentation can be found &lt;a href="http://www.systemical.com/web-services"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Google Moderator: an RSS feed for a "series"&lt;/li&gt;&lt;li&gt;Stackoverflow: an RSS feed for a user's statistics on &lt;a href="http://stackoverflow.com/"&gt;http://stackoverflow.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Github: an RSS feed for a user's statistics on &lt;a href="http://github.com/"&gt;http://github.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;I will be opening access to more services so stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-6009507945311920543?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/ko1k3F6bdoU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/6009507945311920543/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/06/web-services-available-on-systemicalcom.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/6009507945311920543" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/6009507945311920543" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/ko1k3F6bdoU/web-services-available-on-systemicalcom.html" title="Web Services available on Systemical.com" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/06/web-services-available-on-systemicalcom.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-8559966559270356513</id><published>2010-06-17T09:00:00.000-04:00</published><updated>2010-06-17T09:00:33.354-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="last.fm" /><category scheme="http://www.blogger.com/atom/ns#" term="rhythmbox" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="dbus" /><title type="text">Last.fm Proxy with DBus interface</title><content type="html">I just realized I haven't made a public announcement regarding an application that constitutes a critical piece of my &lt;a href="http://jldupont.blogspot.com/2010/06/rhythmbox-synclastfm-plugin.html"&gt;Rhythmbox arsenal&lt;/a&gt;: &amp;nbsp;" lastfm-proxy-dbus ".&lt;br /&gt;&lt;br /&gt;This Linux Gnome application serves as "proxy" to a Last.fm user's scrobbling history. The data collected through this proxy serves to populate the "playcount" field of Rhythmbox's database.&lt;br /&gt;&lt;br /&gt;More information can be found &lt;a href="http://www.systemical.com/doc/opensource/lastfm-proxy-dbus"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-8559966559270356513?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/p3kKWaI3xGM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/8559966559270356513/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/06/lastfm-proxy-with-dbus-interface.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/8559966559270356513" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/8559966559270356513" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/p3kKWaI3xGM/lastfm-proxy-with-dbus-interface.html" title="Last.fm Proxy with DBus interface" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/06/lastfm-proxy-with-dbus-interface.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-761243621021035389</id><published>2010-06-15T15:13:00.003-04:00</published><updated>2010-06-15T15:48:38.299-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="rhythmbox" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="musicbrainz music python" /><title type="text">Rhythmbox Synclastfm plugin</title><content type="html">Today I announce the availability of a brand new version (2.02) of my Rhythmbox plugin "Synclastfm" (see &lt;a href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-syncing-with-lastfm.html"&gt;previous post&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;This version packs the much anticipated "batch update" feature i.e. the plugin will walk the user's history on Last.fm in order to update Rhythmbox tracks 'playcount' field.&lt;br /&gt;&lt;br /&gt;More information can be found &lt;a href="http://www.systemical.com/doc/opensource/rb-synclastfm"&gt;here&lt;/a&gt;. &amp;nbsp;Have fun and don't forget to provide feedback!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-761243621021035389?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/cfYmMm9Hbxs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/761243621021035389/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/06/rhythmbox-synclastfm-plugin.html#comment-form" title="12 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/761243621021035389" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/761243621021035389" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/cfYmMm9Hbxs/rhythmbox-synclastfm-plugin.html" title="Rhythmbox Synclastfm plugin" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>12</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/06/rhythmbox-synclastfm-plugin.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-3345823644982565015</id><published>2010-05-30T23:28:00.002-04:00</published><updated>2010-06-10T08:44:02.356-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="musicbrainz music python" /><title type="text">Musicbrainz Proxy service over DBus</title><content type="html">I have just finished another building block on my quest to taming my music library: a Linux based application serving as 'proxy' (with caching of course) to Musicbrainz webservice. &amp;nbsp;The service is exposed through DBus.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Why?&lt;/b&gt;&lt;br /&gt;Correlating music tracks across disparate applications / services can be daunting. For example, suppose one &amp;nbsp;&lt;i&gt;scrobbles&lt;/i&gt;&amp;nbsp;his/her tracks to &lt;a href="http://last.fm/"&gt;Last.fm&lt;/a&gt;. Furthermore, let's say one wishes to keep his/her favorite Music Player in &lt;i&gt;sync&lt;/i&gt;&amp;nbsp;with his/her Last.fm profile. &amp;nbsp;This goal appears, on the surface, to be an easy one but as it turns out, support for finding &amp;amp; cataloging music tracks coherently across various applications / services remains elusive at the moment.&lt;br /&gt;&lt;br /&gt;Also worth noting: &amp;nbsp;access to Musicbrainz's webservice is monitored. &amp;nbsp;Webservice API access is limited to 1call/sec: if many applications make uncoordinated access to the service, the user's machine might get blacklisted. &amp;nbsp;As I intend to make the &lt;i&gt;track mbid&lt;/i&gt;&amp;nbsp;a central piece of information for correlating my music tracks, I needed to address this issue.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;br /&gt;With this application, it will be easier to integrate the various other building blocks of my music management arsenal. See the other project &lt;a href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-syncing-with-lastfm.html"&gt;SyncLastfm&lt;/a&gt; that will benefit from this addition.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project&lt;/b&gt;&lt;br /&gt;The project's home page can be found &lt;a href="http://github.com/jldupont/musicbrainz-proxy-dbus"&gt;here&lt;/a&gt;. &amp;nbsp;The associated &lt;a href="http://ohloh.net/"&gt;Ohloh&lt;/a&gt; page can be found &lt;a href="https://www.ohloh.net/p/musicbrainz-proxy-dbus"&gt;there&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt;&amp;nbsp;&amp;nbsp;the application will be installed under &lt;i&gt;Applications / Other.&lt;/i&gt;&lt;br /&gt;&lt;b&gt;Update2:&lt;/b&gt;&amp;nbsp;more information is accessible &lt;a href="http://www.systemical.com/doc/opensource/musicbrainz-proxy-dbus"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-3345823644982565015?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/JXS14UaeFLI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/3345823644982565015/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/05/musicbrainz-proxy-service-over-dbus.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/3345823644982565015" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/3345823644982565015" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/JXS14UaeFLI/musicbrainz-proxy-service-over-dbus.html" title="Musicbrainz Proxy service over DBus" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/05/musicbrainz-proxy-service-over-dbus.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-2547633816358967303</id><published>2010-05-10T13:26:00.001-04:00</published><updated>2010-05-10T13:26:18.018-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Social Networking" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><category scheme="http://www.blogger.com/atom/ns#" term="Skype" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">Some Google Gadgets</title><content type="html">I am in the process of building up my &lt;a href="http://www.systemical.com/"&gt;company website&lt;/a&gt;&amp;nbsp;based on Google Apps, I need some Google Gadgets to embed but as I am unsure about the majority of the gadgets listed in the &lt;a href="http://www.google.com/ig/directory"&gt;directory&lt;/a&gt;, I have created &amp;nbsp;some of my own.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Skype Account Information&lt;/li&gt;&lt;li&gt;Ohloh Profile Flair&lt;/li&gt;&lt;li&gt;Stackoverflow Profile Flair&lt;/li&gt;&lt;li&gt;Twitter Profile Flair with latest tweets&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Links to the relevant gadgets are provided on my &lt;a href="http://jldupont.blogspot.com/2009/09/mindmap-of-my-projects.html"&gt;projects page&lt;/a&gt;. &amp;nbsp;I would rather not duplicate them here as I am most likely to forget to update them whereas on the project page they'll get my attention.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/958ac04f-d3b7-4971-8fd8-41c76a776deb/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=958ac04f-d3b7-4971-8fd8-41c76a776deb" style="border: none; float: right;" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-2547633816358967303?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/pJ3A0xNJ1q4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/2547633816358967303/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/05/some-google-gadgets.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2547633816358967303" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2547633816358967303" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/pJ3A0xNJ1q4/some-google-gadgets.html" title="Some Google Gadgets" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/05/some-google-gadgets.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-1817421326447632395</id><published>2010-02-08T09:20:00.005-05:00</published><updated>2010-02-08T09:26:21.082-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="last.fm" /><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="dbus" /><title type="text">Last.fm Web Service desktop interface through DBus</title><content type="html">Not too long ago, I started my &lt;i&gt;quest to Music Library Faiyland&lt;/i&gt; (my daughter would love this quote). On this journey, I have completed a couple of intermediate steps ( &lt;a href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-syncing-with-lastfm.html"&gt;Rhythmbox plugin - Syncing with Last.fm&lt;/a&gt; and &lt;a href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-for-lastfm-desktop.html"&gt;Rhythmbox plugin for Last.fm desktop client&lt;/a&gt; ) and now I am happy to announce another milestone: a DBus accessible interface to &lt;a href="http://last.fm/"&gt;Last.fm&lt;/a&gt;'s Web Service API.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;API&lt;/span&gt;&lt;br /&gt;The current DBus interface is rudimentary but can be easily extended ( I have abstracted Last.fm's API to a manageable degree ). I will certainly be expanding the &lt;i&gt;methods&lt;/i&gt; in the near future based on my needs and "customer feedback" ;-) Below is a non-exhaustive list of the API:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Account related:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;get/set Username&lt;/li&gt;&lt;li&gt;getAuthUrl : retrieve a URL for authenticating the service against a user&lt;/li&gt;&lt;li&gt;setApiKey , setSecretKey&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Track related&lt;/li&gt;&lt;ul&gt;&lt;li&gt;track.addTags&lt;/li&gt;&lt;li&gt;track.getTags&lt;/li&gt;&lt;li&gt;track.removeTag&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;I have only implemented these &lt;i&gt;methods&lt;/i&gt; because they get me what I need at the moment: the possibility to "rate" my music tracks through a &lt;i&gt;hack&lt;/i&gt;&amp;nbsp;using the tags to hold the rating for a track. E.g. a 5 stars track would get "R5" as tag.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Message Based Design Technique&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;In this project, I have further experimented with a design technique based on "Message Passing". I have made &lt;a href="http://jldupont.blogspot.com/2010/01/notes-on-message-passing-design.html"&gt;some notes on the subject here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Project&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;The home page of this project can be found on &lt;a href="http://github.com/jldupont/dbus_lastfm"&gt;my Github repository&lt;/a&gt;. &amp;nbsp;A Debian package can be found on &lt;a href="https://launchpad.net/~jldupont/+archive/jldupont"&gt;my Launchpad PPA&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-1817421326447632395?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/7-PShhpWAM8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/1817421326447632395/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/02/lastfm-web-service-desktop-interface.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/1817421326447632395" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/1817421326447632395" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/7-PShhpWAM8/lastfm-web-service-desktop-interface.html" title="Last.fm Web Service desktop interface through DBus" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/02/lastfm-web-service-desktop-interface.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-1298002102580442885</id><published>2010-01-29T17:36:00.001-05:00</published><updated>2010-01-29T17:39:29.890-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Design-Patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="Architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="Message-Bus" /><title type="text">Notes on a Message Passing design</title><content type="html">I am an avid supporter of "message based" systems. I took the time to perform a quick "brain dump" of some of my thoughts on the subject.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/present/embed?id=dgstxrxv_453cgxxmjc2&amp;size=m" frameborder="0" width="555" height="451"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Follows a simple Python based implementation.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/288887.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;I will very likely make other contributions to my blog along the same lines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-1298002102580442885?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/Qf-t70Q1hpk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/1298002102580442885/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/01/notes-on-message-passing-design.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/1298002102580442885" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/1298002102580442885" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/Qf-t70Q1hpk/notes-on-message-passing-design.html" title="Notes on a Message Passing design" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/01/notes-on-message-passing-design.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-9131277153153946625</id><published>2010-01-21T20:04:00.017-05:00</published><updated>2010-01-21T20:30:11.090-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gnome" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title type="text">Message Bus for Gnome Object based Python projects</title><content type="html">Whilst developing my latest software project (&lt;a href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-syncing-with-lastfm.html"&gt;Rhythmbox plugin Last.fm sync&lt;/a&gt;), I have crafted a "Message Bus" based on Gnome GObject. Since I didn't have any experience at all with Gnome GObject previously, it took me sometimes to work out the details of the architecture. &amp;nbsp;For an example usage, please refer to my &lt;a href="http://github.com/jldupont/rb_synclastfm"&gt;Git Repository&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="python" name="code"&gt;""" &lt;br /&gt;    GObject based "Message Bus"&lt;br /&gt;    &lt;br /&gt;    @author: Jean-Lou Dupont&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;import gobject #@UnresolvedImport&lt;br /&gt;&lt;br /&gt;class Signals(gobject.GObject):&lt;br /&gt;    """&lt;br /&gt;    List of the application level signals&lt;br /&gt;    """&lt;br /&gt;    __gsignals__ = {&lt;br /&gt;&lt;br /&gt;         ## NOTE: customization required here&lt;br /&gt;         ## =================================&lt;br /&gt;         ## Announces changes in the user's Last.fm properties&lt;br /&gt;        "lastfm_username_changed":  (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)) &lt;br /&gt;        ,'lastfm_password_changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,))&lt;br /&gt;&lt;br /&gt;        ## Used to signal a change in the currently playing track&lt;br /&gt;        ,"playing_song_changed":    (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_OBJECT,))&lt;br /&gt;        &lt;br /&gt;        ## Used to report a failure when accessing Last.fm web service&lt;br /&gt;        ,'lastfm_request_failed':   (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())&lt;br /&gt;        &lt;br /&gt;        ## Used for distributing the results of the query against the Last.fm web service&lt;br /&gt;        ,"user_track_info":         (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_OBJECT,))&lt;br /&gt;        &lt;br /&gt;        ## Used to pass around the "shell" global object&lt;br /&gt;        ,"rb_shell":                (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_OBJECT,))              &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    def __init__(self):&lt;br /&gt;        gobject.GObject.__init__(self)&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;class Bus(object):&lt;br /&gt;    """&lt;br /&gt;    Message Bus&lt;br /&gt;    &lt;br /&gt;    Borg Pattern&lt;br /&gt;    """&lt;br /&gt;    _signals=Signals()&lt;br /&gt;&lt;br /&gt;    @classmethod&lt;br /&gt;    def emit(cls, name, *pa, **kwa):&lt;br /&gt;        cls._signals.emit(name, *pa, **kwa)&lt;br /&gt;&lt;br /&gt;    @classmethod&lt;br /&gt;    def add_emission_hook(cls, name, callback):&lt;br /&gt;        gobject.add_emission_hook(cls._signals, name, callback)&lt;br /&gt;    &lt;br /&gt;mbus=Bus()&lt;br /&gt;&lt;br /&gt;## =============================================================== Tests&lt;br /&gt;&lt;br /&gt;if __name__=="__main__":&lt;br /&gt;&lt;br /&gt;    def callback(signal, data):&lt;br /&gt;        print "callback: signal=%s, data=%s" % (signal, data)&lt;br /&gt;    &lt;br /&gt;    Bus.add_emission_hook("lastfm_username_changed", callback)&lt;br /&gt;    &lt;br /&gt;    Bus.emit("lastfm_username_changed", "jldupont")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Relevant Stackoverflow posts&lt;/span&gt;&lt;br /&gt;Here are two Stackoverflow posts in relation with my exercise: &lt;a href="http://stackoverflow.com/questions/2074372/connecting-signals-in-gtk-anonymous-way"&gt;question 1&lt;/a&gt;, &lt;a href="http://stackoverflow.com/questions/2088451/gobject-addemissionhook-usage"&gt;question 2&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-9131277153153946625?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/JzxQ_XWTFR4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/9131277153153946625/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/01/message-bus-for-gnome-object-based_21.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/9131277153153946625" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/9131277153153946625" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/JzxQ_XWTFR4/message-bus-for-gnome-object-based_21.html" title="Message Bus for Gnome Object based Python projects" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/01/message-bus-for-gnome-object-based_21.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-751196183465310357</id><published>2010-01-21T19:13:00.001-05:00</published><updated>2010-06-15T15:15:47.523-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="last.fm" /><category scheme="http://www.blogger.com/atom/ns#" term="rhythmbox" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><title type="text">Rhythmbox plugin - Syncing with Last.fm</title><content type="html">In my quest to manage my music collection seamlessly between media players, I've decided to use &lt;a href="http://www.last.fm/"&gt;Last.Fm&lt;/a&gt; as my main database. Last.Fm provides ways to store:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;History of played tracks&lt;/li&gt;&lt;li&gt;Playcount associated with played tracks&lt;/li&gt;&lt;li&gt;Tags associated with tracks&lt;/li&gt;&lt;li&gt;Playlists&lt;/li&gt;&lt;li&gt;etc.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Through their API (see &lt;a href="https://www.mindmeister.com/maps/show/39035072"&gt;mindmap&lt;/a&gt;), it is possible to have access to all this information (and much more).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Rhythmbox&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;My music collection is currently organized through Rhythmbox - it wasn't my first choice at the time I've moved from my Windows desktop to my Linux Ubuntu one but it has proven very useful. RB can be extended with Python scripts quite painlessly.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Last.Fm Syncing&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The plugin I have developed this time supports the following features:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;When a track is played, it downloads the corresponding information from the user's Last.Fm account and updates the following fields of the Rhythmbox database:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Playcount: if the "last.fm playcount" associated with the track is greater than 0, the local playcount of RB is updated with it&lt;/li&gt;&lt;li&gt;Rating: if the "last.fm love" field is set for the track, the local "rating" field of the track is set to 5.0 (5 stars)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;With this functionality, it is easier to update a local Rhythmbox media player database with information stored on a user's account on Last.fm. &amp;nbsp;The standard Last.Fm plugin of Rhythmbox must be enabled and configured correctly.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Installation&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The plugin can be installed by following the procedure found at the &lt;a href="http://github.com/jldupont/rb_synclastfm"&gt;project's home page&lt;/a&gt;. A direct link to the plugin Debian/Ubuntu repository is &lt;a href="https://launchpad.net/~jldupont/+archive/jldupont"&gt;provided here&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Future&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The project is far from being completed - I have many other features in the pipeline. Stay tuned!&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Related project&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;There is a related project to this one: &lt;a href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-for-lastfm-desktop.html"&gt;Rhythmbox - Last.Fm Desktop Client plugin&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Feedback is very welcome!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;UPDATE:&lt;/u&gt;&lt;/b&gt; see &lt;a href="http://jldupont.blogspot.com/2010/06/rhythmbox-synclastfm-plugin.html"&gt;here&lt;/a&gt; for details on the new release.&lt;/div&gt;&lt;div&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/3285197066205497695-751196183465310357?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/ej1RxNJElZ8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/751196183465310357/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-syncing-with-lastfm.html#comment-form" title="15 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/751196183465310357" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/751196183465310357" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/ej1RxNJElZ8/rhythmbox-plugin-syncing-with-lastfm.html" title="Rhythmbox plugin - Syncing with Last.fm" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>15</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-syncing-with-lastfm.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-2111438814908239674</id><published>2010-01-11T16:50:00.018-05:00</published><updated>2010-01-11T20:29:00.746-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="last.fm" /><category scheme="http://www.blogger.com/atom/ns#" term="rhythmbox" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><title type="text">Rhythmbox plugin for Last.fm desktop client</title><content type="html">I've recently lost my music database to the hands of Banshee (actually, the Sqlite3 database file is still somewhat salvageable). I have longed for an application that would make my life easy in managing my music collection (which is pretty extensive) and do this day haven't found one. The recent event pushed me to the edge: I am embarking on a quest to &lt;i&gt;scratch my itch on this matter.&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;First step&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The first step consisted in getting acquainted with &lt;a href="http://projects.gnome.org/rhythmbox/"&gt;Rhythmbox&lt;/a&gt;, my new music media player. Why Rhythmbox? because it supports a Python based extension system (compared to Banshee's C# based on) and I happen to really enjoy writing software using Python.&lt;/div&gt;&lt;div&gt;To this effect, I have crafted a plugin that sends the current playing state (START/PAUSED/RESUMED) of Rhythmbox to &lt;a href="http://www.last.fm/download"&gt;Last.fm's Desktop Client&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;Plugin&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;The project is located on &lt;a href="http://github.com/jldupont/rb_lastfmdk"&gt;Github&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Project&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I intend to make several other contributions focused on media players. My goal is to be able to synchronize my music collection seamlessly between Rhythmbox, Last.fm and iTunes (with possibly also &lt;a href="http://musicbrainz.org/"&gt;Musicbrainz&lt;/a&gt;).  Stay tuned!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-2111438814908239674?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/zkU4mqTIsoU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/2111438814908239674/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-for-lastfm-desktop.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2111438814908239674" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2111438814908239674" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/zkU4mqTIsoU/rhythmbox-plugin-for-lastfm-desktop.html" title="Rhythmbox plugin for Last.fm desktop client" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/01/rhythmbox-plugin-for-lastfm-desktop.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-2977764760126654942</id><published>2010-01-06T20:35:00.002-05:00</published><updated>2010-01-06T20:36:37.244-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="wave" /><title type="text">Google Wave Invites</title><content type="html">I've got some Google Wave invites left... first come, first served!&lt;div&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/3285197066205497695-2977764760126654942?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/vU9WGlIXYl4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/2977764760126654942/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2010/01/google-wave-invites.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2977764760126654942" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/2977764760126654942" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/vU9WGlIXYl4/google-wave-invites.html" title="Google Wave Invites" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2010/01/google-wave-invites.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-4989299993841890741</id><published>2009-11-25T16:58:00.004-05:00</published><updated>2009-11-25T17:04:44.113-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="collaboration" /><title type="text">Collaborative Sites</title><content type="html">I recently found out about a cool software collaboration site: &lt;a href="http://stackoverflow.com/"&gt;Stackoverflow&lt;/a&gt;.  There one can get questions answered in a timely manner as well as earning "reputation" credits.  Access is free and unlimited akin to a "wiki" site such as &lt;a href="http://wikipedia.org/"&gt;Wikipedia&lt;/a&gt;.&lt;div&gt;But what is best is there is an ecosystem of such site based on the same platform ( &lt;a href="http://stackexchange.com/"&gt;Stackexchange&lt;/a&gt; ):&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Hardware related: &lt;a href="http://chiphacker.com/"&gt;Chiphacker&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Communications / Networking : &lt;a href="http://www.packetdrop.net/"&gt;PacketDrop&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Computer User: &lt;a href="http://superuser.com/"&gt;Superuser&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Server Users: &lt;a href="http://serverfault.com/"&gt;Serverfault&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;... and probably much more! &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-4989299993841890741?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/fw3OJAUElg8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/4989299993841890741/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2009/11/collaborative-sites.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/4989299993841890741" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/4989299993841890741" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/fw3OJAUElg8/collaborative-sites.html" title="Collaborative Sites" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2009/11/collaborative-sites.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-239602010041943022</id><published>2009-11-17T22:03:00.002-05:00</published><updated>2009-11-17T22:07:18.903-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="NPAPI" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">Chrome Extension: mDNS Service Browser</title><content type="html">As a stepping-stone towards making the browser my main portal to my applications, I have crafted a Google Chrome extension (based on an NPAPI plugin) that lists the services announced through Avahi / mDNS.&lt;br /&gt;It is available &lt;a href="http://code.google.com/p/npapi-mdns/"&gt;here&lt;/a&gt;. Note that only Linux based systems are supported.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_bLwRtcZS8No/SwNkpbDWnpI/AAAAAAAAAUE/8EQD2HhRQyg/s1600/npapi-mdns.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 256px; height: 61px;" src="http://1.bp.blogspot.com/_bLwRtcZS8No/SwNkpbDWnpI/AAAAAAAAAUE/8EQD2HhRQyg/s400/npapi-mdns.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5405274640573963922" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-239602010041943022?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/uXUprsIxehQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/239602010041943022/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2009/11/chrome-extension-mdns-service-browser.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/239602010041943022" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/239602010041943022" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/uXUprsIxehQ/chrome-extension-mdns-service-browser.html" title="Chrome Extension: mDNS Service Browser" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_bLwRtcZS8No/SwNkpbDWnpI/AAAAAAAAAUE/8EQD2HhRQyg/s72-c/npapi-mdns.png" height="72" width="72" /><thr:total>9</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2009/11/chrome-extension-mdns-service-browser.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-571624052194959458</id><published>2009-11-04T09:18:00.011-05:00</published><updated>2009-11-04T09:41:24.578-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="NPAPI" /><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title type="text">Notes on NPAPI based plugins</title><content type="html">I am sharing the following diagram to (hopefully) lessen some pain from folks who intend to write NPAPI based plugins (Firefox, Chrome etc.).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gliffy.com/pubdoc/1880283/L.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 680px; height: 450px;" src="http://www.gliffy.com/pubdoc/1880283/L.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;u&gt;STEP 1:&lt;/u&gt; the host browser loads the library corresponding to the MIME type expressed in the &lt;i&gt;embed&lt;/i&gt; element tag.&lt;div&gt;&lt;u&gt;STEP 2:&lt;/u&gt; the host browser calls the &lt;b&gt;NP_Initialize&lt;/b&gt; function of the library and passes a reference to the public API of the browser (i.e. the &lt;b&gt;NPNetscapeFuncs&lt;/b&gt; starting with NPN_ in the Mozilla documentation).  The host browser also calls the &lt;b&gt;NPP_New&lt;/b&gt; function in order to instantiate a "plugin instance".&lt;/div&gt;&lt;div&gt;&lt;u&gt;STEP 3:&lt;/u&gt; the host browser calls the &lt;b&gt;NP_GetValue&lt;/b&gt; function (with the variable &lt;i&gt;NPPVpluginScriptableNPObject&lt;/i&gt; ) of the library. See step 4.&lt;/div&gt;&lt;div&gt;&lt;u&gt;STEP 4:&lt;/u&gt;  the plugin calls the &lt;b&gt;NPN_CreateObject&lt;/b&gt; (through the reference provided in step 2)  to instantiate a "scriptable NPObject". This object serves as proxy to the &lt;i&gt;embed&lt;/i&gt; object declared on the source web page.&lt;/div&gt;&lt;div&gt;&lt;u&gt;STEP 5:&lt;/u&gt; the web page can interact with the "scriptable object".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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/3285197066205497695-571624052194959458?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/QuVbInUmUoM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/571624052194959458/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2009/11/notes-on-npapi-based-plugins.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/571624052194959458" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/571624052194959458" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/QuVbInUmUoM/notes-on-npapi-based-plugins.html" title="Notes on NPAPI based plugins" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2009/11/notes-on-npapi-based-plugins.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-3285197066205497695.post-3308436037178292854</id><published>2009-10-17T06:39:00.002-04:00</published><updated>2009-10-17T06:42:31.415-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Chrome" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title type="text">Chrome Extension: Stackoverflow Tweaks</title><content type="html">For those adept of &lt;a href="http://stackoverflow.com/"&gt;Stackoverflow&lt;/a&gt;, the following extension provide &lt;i&gt;tweaks&lt;/i&gt; to the web site. For version 0.1, the questions associated with &lt;i&gt;ignored tags&lt;/i&gt; are rendered hidden.&lt;div&gt;The extension is available for installation through this &lt;a href="http://jldupont.googlecode.com/svn/trunk/chrome/stackoverflow/stackoverflow.crx"&gt;link&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3285197066205497695-3308436037178292854?l=jldupont.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jldupont/weblog/~4/xtDUx7uJhUs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://jldupont.blogspot.com/feeds/3308436037178292854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://jldupont.blogspot.com/2009/10/chrome-extension-stackoverflow-tweaks.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/3308436037178292854" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3285197066205497695/posts/default/3308436037178292854" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jldupont/weblog/~3/xtDUx7uJhUs/chrome-extension-stackoverflow-tweaks.html" title="Chrome Extension: Stackoverflow Tweaks" /><author><name>Jean-Lou Dupont</name><uri>https://profiles.google.com/106001206564825940847</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-4rTdOm7seZ8/AAAAAAAAAAI/AAAAAAAAIvg/C1mdS05ScxM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://jldupont.blogspot.com/2009/10/chrome-extension-stackoverflow-tweaks.html</feedburner:origLink></entry></feed>

