<?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-9210580920169500129</id><updated>2011-12-05T08:05:09.991-03:00</updated><category term='linux'/><category term='embedded'/><category term='gsoc'/><category term='ufcg'/><category term='enlightenment'/><category term='personal'/><category term='elementary'/><category term='eupnp'/><category term='bluez'/><category term='upnp'/><category term='projects'/><category term='ixmf'/><category term='wolrdcup'/><category term='brisa'/><category term='bluetooth'/><category term='nokia'/><category term='python'/><category term='efl'/><category term='low energy'/><category term='signove'/><category term='guides'/><category term='edje_editor'/><category term='fun'/><category term='vuvuzela'/><category term='ti'/><category term='useless'/><category term='pts'/><category term='google'/><category term='gstreamer'/><title type='text'>André Dieb</title><subtitle type='html'>-- hopping through frequencies</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9210580920169500129.post-5725183506281253490</id><published>2011-02-20T13:14:00.005-03:00</published><updated>2011-03-07T10:08:14.330-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Hard drive tuning</title><content type='html'>&lt;div&gt;I just installed Ubuntu Netbook 10.10 on my girlfriend's netbook. I expected it to be slow, but not that slow. It's a ACER ASPIRE ONE 110 netbook, pretty simple, small SSD drive, low memory, though pretty light to carry around.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After googling around a bit, I found some common optimizations for netbooks. Here are the ones I actually did:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Remove journaling from ext4&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some &lt;a href="http://thunk.org/tytso/blog/2009/03/01/ssds-journaling-and-noatimerelatime/"&gt;previous research&lt;/a&gt; indicate that the overhead caused by journaling could be from 4% to 12%. While installing Ubuntu, you can disable the journaling right after the partitions are done (shift to a different tty and use following command). I did it another way around: boot to a live USB drive. The command is&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;sudo tune2fs /dev/sdN -O ^has_journal&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;and it removes the journaling feature flag.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2. Mount flags&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;"noatime" avoids updates on files' access time information for every read you perform on it. I basically prepended "noatime" to the mount flags on /etc/fstab. For more information on other special uses, check &lt;a href="http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap6sec73.html"&gt;this page&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I also tweaked the initialization procedures for moving/removing unimportant stuff for the netbook's use, such as moving bluetooth initialization to user runtime, sudo checks, etc. Another thing that gave a good boost was setting vm.swappiness=20 on /etc/sysctl.conf, which will decrease swapout (throwing programs to the hard drive). This is somehow a dangerous trade-off: RAM is faster but this netbook has only 512MB, it'll be faster as long as you don't keep lots of applications open.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Cheers&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-5725183506281253490?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/5725183506281253490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=5725183506281253490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5725183506281253490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5725183506281253490'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2011/02/hard-drive-tuning.html' title='Hard drive tuning'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-6857508743591248294</id><published>2011-02-10T13:59:00.004-03:00</published><updated>2011-02-10T14:05:06.468-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='low energy'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ti'/><category scheme='http://www.blogger.com/atom/ns#' term='bluez'/><title type='text'>Finally CC2540 gets useful</title><content type='html'>After some talking with TI engineers, they figured out we were in the wrong pitch. The firmware argued to be BLE compliant indeed exists, though it wasn't the one provided in the software bundle.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of their engineers was kind enough to provide us a build of the correct one. We can't confirm it's complete, but we managed to perform a successful LE scan and also a LE connection (using BlueZ latest developments on LE).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It seems that now we have an useful platform in our hands. We'll be planning development and syncing with the community in the near future.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-6857508743591248294?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/6857508743591248294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=6857508743591248294' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6857508743591248294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6857508743591248294'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2011/02/finally-cc2540-gets-useful.html' title='Finally CC2540 gets useful'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9210580920169500129.post-3961266721025655418</id><published>2011-01-25T16:43:00.004-03:00</published><updated>2011-01-25T16:55:11.477-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='signove'/><category scheme='http://www.blogger.com/atom/ns#' term='bluez'/><title type='text'>Initialization script for CC2540</title><content type='html'>For those interested, I'll be using the following repositories for my BlueZ-related work:&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://gitorious.org/dieb-bluez"&gt;http://gitorious.org/dieb-bluez&lt;/a&gt; (bluez)&lt;/li&gt;&lt;li&gt;&lt;a href="http://gitorious.org/bluez-hcidump"&gt;http://gitorious.org/bluez-hcidump&lt;/a&gt; (bluez-hcidump)&lt;/li&gt;&lt;li&gt;&lt;a href="http://gitorious.org/~dieb/bluetooth-next/dieb-bluetooth-next"&gt;http://gitorious.org/~dieb/bluetooth-next/dieb-bluetooth-next&lt;/a&gt; (bluetooth-next kernel)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Regarding the post title, I'm glad to announce a &lt;i&gt;very primitive &lt;/i&gt;version of a hciattach initialization script for the TI's CC2540 USB dongle I've talking about. You can check it out &lt;a href="http://gitorious.org/dieb-bluez/dieb-bluez/commit/cc6169076783a0897a331eaa07e0a3aa3c8d763a"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Also, no updates regarding the dongle's firmware and BLE stack problems. We're still in contact with TI engineers trying to figure out what's wrong.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-3961266721025655418?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3961266721025655418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3961266721025655418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3961266721025655418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3961266721025655418'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2011/01/initialization-script-for-cc2540.html' title='Initialization script for CC2540'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-1421374535289683931</id><published>2011-01-13T16:50:00.003-03:00</published><updated>2011-01-23T10:24:44.374-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='low energy'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='signove'/><category scheme='http://www.blogger.com/atom/ns#' term='bluez'/><title type='text'>Updates on TI BLE CC2540DK-Mini on Linux</title><content type='html'>Here's some updates regarding CC2540DK-Mini on Linux.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We managed to get in touch with TI's engineers regarding the kit and they confirmed the dongle provided is BLE qualified. We still cannot determine why some commands die on time out, but we made some progresses.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Kernel-side bluetooth code is incomplete regarding LE: it currently doesn't support LE-only controllers. I got some hints from #bluez-br guys (thanks vcgomes, lizardo, briglia, krau) and I'll be trying to get it working over the next couple weeks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cheers&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-1421374535289683931?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/1421374535289683931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=1421374535289683931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1421374535289683931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1421374535289683931'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2011/01/updates-on-ti-ble-cc2540dk-mini-on.html' title='Updates on TI BLE CC2540DK-Mini on Linux'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-8082148703431215849</id><published>2010-12-21T14:48:00.006-03:00</published><updated>2010-12-21T17:47:36.199-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='low energy'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='signove'/><category scheme='http://www.blogger.com/atom/ns#' term='bluez'/><title type='text'>Getting started hacking BLE CC2540DK-Mini on Linux</title><content type='html'>&lt;div style="text-align: justify;"&gt;One of the currently available &lt;a href="http://www.bluetooth.com/English/Products/Pages/low_energy.aspx"&gt;BLE &lt;/a&gt;(Bluetooth Low Energy) development kits is &lt;a href="http://focus.ti.com/docs/toolsw/folders/print/cc2540dk-mini.html"&gt;CC2540DK-MINI&lt;/a&gt; from Texas Instruments. We at &lt;a href="http://www.signove.com/"&gt;Signove &lt;/a&gt;managed to get a few kits and I got to hack on these for a while. This post will describe some knowledge gathered regarding the kit.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The kit comes with:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;1 CC2540 key fob (slave)&lt;/li&gt;&lt;li style="text-align: justify;"&gt;1 CC2540 USB dongle (master)&lt;/li&gt;&lt;li style="text-align: justify;"&gt;1 CC debugger, used to program both key fob and dongle&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Before trying to use it on Linux, I tried to follow TI instructions on their &lt;i&gt;CC2540 Mini Development Kit Quick Start Guide&lt;/i&gt; (&lt;a href="http://www.ti.com/litv/pdf/swru272"&gt;pdf&lt;/a&gt;). It teaches you how to program both key fob and dongle using the CC Debugger, their software (&lt;a href="http://focus.ti.com/docs/toolsw/folders/print/ble-stack.html"&gt;BLE software stack and tools&lt;/a&gt;) and the flash images already shipped with their software.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The programming of the devices was pretty straight-forward, the only thing worth mentioning is to be careful when connecting the cables - follow the images on the instructions and you won't have a problem.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Once the devices were programmed, I followed &lt;i&gt;CC2540 Mini Development Kit User's Guide &lt;/i&gt;(&lt;a href="http://focus.ti.com/lit/ug/swru270a/swru270a.pdf"&gt;pdf&lt;/a&gt;). It is a walk-through that shows how to use the dongle and the key fob together with BTool, a very simple tool that can locate the key fob, connect, read/write attributes, and so on. All functions worked fine with my setup and I moved on to hacking it on Linux.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We managed to get the dongle basic functions working on Linux with the following steps:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;1. Plug in the dongle (this step is important)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2. Check which module was automatically loaded with:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;dmesg | tail&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In my case it was &lt;i&gt;cdc_acm&lt;/i&gt; and it created the device &lt;i&gt;/dev/ttyACM0.&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;&lt;/i&gt;3. Check whether the dongle was detected:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;lsusb&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If it was detected, you may have a "Bus aaa Device bbb: ID 0451:16aa Texas Instruments, Inc." line on the output.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;4. Attach the device to the BlueZ stack:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;sudo hciattach /dev/ttyACM0 any 57600 flow&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This step should output something similar to this:&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: justify;"&gt;Device setup complete&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;We used "any" for it to use a HCI_UART interface without vendor specific options. If you try to use "texas", it'll will complain about a missing /lib/firmware/TIInit_0.2.0.bts, which we don't know if it would make our hacking any easier. Anyways, using "any" works with our basic hacking and we're in contact with TI Low Power RF department to get some more info about it.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now the device is attached to BlueZ, you should be able to list it on hciconfig:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;hciconfig -a&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In my case, my laptop only has one bluetooth adapter (hci0), so the new device was assigned to hci1. The output for the new adapter is something like this:&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: justify;"&gt;hci1:&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Type: BR/EDR&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Bus: UART&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;BD Address: 3C:2D:B7:84:0B:3B&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;ACL MTU: 0:0&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;SCO MTU: 0:0&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;UP RUNNING&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;RX bytes: 271 acl:0 sco:0 events:19 errors:0&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;TX bytes: 121 acl:0 sco:0 commands:16 errors:0&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Features: 0x00 0x00 0x00 0x60 0x00 0x00 0x00 0x00&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Packet type: DM1 DH1 HV1&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Link policy:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Link mode: SLAVE ACCEPT&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Can't read local name on hci1: Input/output error (5).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;From this output, we can see our device is not getting detected as of BLE type. Also, hciconfig can't read its local name. If you attach a hcidump to hci1, you will see that the read local name command is not known by the dongle - incomplete firmware? yes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;But that won't stop your hacking. Now you have the dongle ready to be used within hcitool and use hcidump to observe the outcome of commands. After several attempts, we managed to get some commands (using hcitool -i hci1 cmd) working on the dongle.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;One thing you might notice while playing some BLE commands is that some of them just don't work. Texas warns you about it on the &lt;i&gt;TI_BLE_Vendor_Specific_HCI_Guide.pdf&lt;/i&gt; document, included on the software package. Basically, it says some commands/events might be discarded by the BLE stack they provided. Turns out that it actually does.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;We tried to use the Low Energy scan - "lescan" - of BlueZ's hcitool and it hang on Set Scan Enable, a basic LE command. On the other hand, when we crafted two HCI vendor commands we got from BTool, we managed to locate the keyfob using BlueZ. For our simple test, we created a new function for hcitool named "texas-lescan", a ugly hack for using the HCI vendor commands for scanning, imitating BTool. If you're interested, you can take a look at the patch &lt;a href="http://pastebin.com/uNjZsx86"&gt;here&lt;/a&gt; (applies on bluez git tree parent ec31eb74a9e7).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It works. It starts a LE scan by sending two HCI vendor commands and keyfob gets detected when the right key is pressed. Though, we're not sure if this is the correct approach for BlueZ or dealing with these TI devices.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The thing is, the HEX images provided by TI seem not to be fully compliant with BLE. Maybe this is why they provided the source code for them and pointers on how to build your own firmware (using IAR embedded workbench). Are they expecting us to write the full BLE-compliant firmware for these two devices?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-8082148703431215849?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/8082148703431215849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=8082148703431215849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/8082148703431215849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/8082148703431215849'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/12/getting-started-hacking-ble-cc2540dk.html' title='Getting started hacking BLE CC2540DK-Mini on Linux'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-1957978097264360139</id><published>2010-12-16T21:06:00.006-03:00</published><updated>2010-12-16T21:56:40.979-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='signove'/><category scheme='http://www.blogger.com/atom/ns#' term='pts'/><category scheme='http://www.blogger.com/atom/ns#' term='bluez'/><title type='text'>Testing BlueZ's HDP implementation</title><content type='html'>Following up &lt;a href="http://www.epx.com.br/"&gt;epx&lt;/a&gt;'s work on &lt;a href="http://senzala.epx.com.br/2010/12/mcap-and-csp-testing-in-bluez.html"&gt;MCAP testing on BlueZ&lt;/a&gt;, we at &lt;a href="http://www.signove.com"&gt;Signove&lt;/a&gt; created one more tool for testing BlueZ against PTS (&lt;a href="http://www.bluetooth.com/English/Technology/Building/Pages/Bluetooth-Solution-Testing.aspx"&gt;Bluetooth Profile Tuning Suite&lt;/a&gt;).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;a href="http://gitorious.org/hdpy/hdpy/blobs/master/scripts/bluez/pts/auto-hdp-pts"&gt;auto-hdp-pts&lt;/a&gt; &lt;/i&gt;is a Python script tinkered to automate the testing of BlueZ's HDP against PTS's HDP test suite. It contains *all PTS HDP test cases and suites listed and respective BlueZ calls that achieve the expected result.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It has only two possible command-line uses:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;auto-hdp-pts --list: lists currently supported tests among PTS&lt;/li&gt;&lt;li&gt;auto-hdp-pts [PTS dongle addr] [tests file]&lt;tests&gt;&lt;/tests&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;A basic use is to run the list command and direct it to a file, then use it with the second command, which will let you go through all test suite.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The usage within the runtime environment is basically pressing ENTER to enter (cheesy?) test suites and run commands and typing 'no' to skip.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It currently covers almost all tests from the PTS suite, except the (SRC/SNK) HCT_07 tests and (SRC/SNK)_DEP (which require unreleased IEEE stack).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The script currently lives on &lt;a href="http://gitorious.org/hdpy"&gt;HDPy git repository&lt;/a&gt;, under scripts/bluez/pts (quick link &lt;a href="http://gitorious.org/hdpy/hdpy/blobs/master/scripts/bluez/pts/auto-hdp-pts"&gt;here&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/9210580920169500129-1957978097264360139?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/1957978097264360139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=1957978097264360139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1957978097264360139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1957978097264360139'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/12/testing-bluezs-hdp-implementation.html' title='Testing BlueZ&apos;s HDP implementation'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-1444992165049412176</id><published>2010-09-07T13:12:00.002-03:00</published><updated>2010-09-07T13:36:07.629-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='ixmf'/><title type='text'>xmf/ixmf plugin updates</title><content type='html'>For the past few months I've implemented a few XMF plugins for GStreamer's GSoC. The GSoC objectives and results are here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add XMF support into GStreamer (both creation and parsing of XMF files)&lt;/li&gt;&lt;li&gt;Have a base for XMF sub types (mXMF - mobile ringtones, iXMF - games, interactivity, among others)&lt;/li&gt;&lt;li&gt;Perform iXMF experiments&lt;/li&gt;&lt;li&gt;Get to know the GStreamer community, make professional contacts, learn the technologies in question (GStreamer, GObject, GLib, etc)&lt;/li&gt;&lt;li&gt;Get in touch with the XMF/iXMF working group&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I'm glad to say we managed to accomplish these objectives. From the code POV, we have the following plugins:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;xmfmux: capable of creating XMF files&lt;/li&gt;&lt;li&gt;xmfdemux: capable of demuxing XMF files&lt;/li&gt;&lt;li&gt;xmfbin: worth-mentioning experiment in which we tested how to perform some iXMF features within the gst context.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;It's important to note that me and my mentor will maintain these plugins and keep them updated according to newly published specs. Although they're in a near-stable state, we're in the process of rounding them before pushing to -bad.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Concerning the community, we've held a conference call with key members of the iXMF working group. It was a great talk and they're definitely backing up our project. I joined the group and I may attend to following conference calls.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-1444992165049412176?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/1444992165049412176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=1444992165049412176' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1444992165049412176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1444992165049412176'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/09/xmfixmf-plugin-updates.html' title='xmf/ixmf plugin updates'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-6363382122476376117</id><published>2010-07-19T00:15:00.006-03:00</published><updated>2010-07-19T00:52:17.749-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>xmfbin experiments, ixmfmux</title><content type='html'>&lt;div&gt;This is the third report for the iXMF GSoC project. In this phase I've done experiments on an element called xmfbin, that would implement similar behavior of an iXMF engine. Me and my mentor have discussed the difficulties and aspects of this element for defining what we'll do next.&lt;/div&gt;&lt;br /&gt;The experiments were all about learning more about the runtime environment required for ixmf. xmfbin was able to play simultaneously mp3 files embedded in a xmf file, created using our own xmfmux component. We had some problems when playing a mp3 file two times while using pulsesink, debug shows there may be a problem with discontinuity but alsasink did not present the same problem. We're still looking into it.&lt;br /&gt;&lt;br /&gt;There are also other ideas regarding how ixmf playback could be done using GStreamer, we have stashed them and we'll probably revisit them on the next few weeks.&lt;br /&gt;&lt;br /&gt;Now I'll start coding ixmfmux, which is just an extension of xmfmux. The addition is that it embeds special data structures used for ixmf effects (e.g fading, transitions, volume control, etc).&lt;br /&gt;&lt;br /&gt;&lt;table border="0" align="center" rules="all" cellpadding="5" cellspacing="3" frame="box" style="text-align: justify;"&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;tbody&gt;  &lt;tr&gt;    &lt;th&gt;Week&lt;/th&gt;    &lt;th&gt;Date&lt;/th&gt;    &lt;th&gt;Event&lt;/th&gt;    &lt;th&gt;Status&lt;/th&gt;  &lt;/tr&gt;  &lt;tr style="background-color: #aba; color: black;"&gt;    &lt;td&gt;0&lt;/td&gt;&lt;td&gt;May 18th&lt;/td&gt;  &lt;td&gt;First component delivered&lt;/td&gt;  &lt;td&gt;&lt;a href="http://genuinepulse.blogspot.com/2010/05/gsoc-project-report-1-xmfdemux.html"&gt;xmfdemux delivered&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt;  &lt;td&gt;1&lt;/td&gt; &lt;td&gt;May 24th&lt;/td&gt;  &lt;td&gt;GSoC officially begins&lt;/td&gt;  &lt;td&gt;Designing xmfmux&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;2&lt;/td&gt;&lt;td&gt;May 31th&lt;/td&gt;  &lt;td&gt;Coding xmfmux&lt;/td&gt;  &lt;td&gt;xmfmux, unit tests&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt;  &lt;td&gt;3&lt;/td&gt;&lt;td&gt;Jun 7th&lt;/td&gt;  &lt;td&gt;Coding xmfmux&lt;/td&gt;  &lt;td&gt;muxing of complex folder structures&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;4&lt;/td&gt;&lt;td&gt;Jun 14th&lt;/td&gt;  &lt;td&gt;Second component delivered&lt;/td&gt;  &lt;td&gt;xmfmux delivered, start designing ixmf playback engine and muxing requirements&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt; &lt;td&gt;5&lt;/td&gt;&lt;td&gt;Jun 21th&lt;/td&gt;  &lt;td&gt;iXMF bin design and prototype&lt;/td&gt;  &lt;td&gt;&lt;span style="font-style:italic;"&gt;extended&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;5&lt;/td&gt;&lt;td&gt;Jun 28th&lt;/td&gt;  &lt;td&gt;xmfbin experiments&lt;/td&gt;  &lt;td&gt;xmfbin initial implementation&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt; &lt;td&gt;6&lt;/td&gt;&lt;td&gt;Jul 5th&lt;/td&gt;  &lt;td&gt;xmfbin experiments&lt;/td&gt;  &lt;td&gt;&lt;span style="font-style:italic;"&gt;simultaneous playback tests with formats other than (e.g. mp3) &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;7&lt;/td&gt;&lt;td&gt;Jul 12th&lt;/td&gt;  &lt;td&gt;xmfbin experiments&lt;/td&gt;  &lt;td&gt;seeking, samplebin-like behavior&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt; &lt;td&gt;8&lt;/td&gt;&lt;td&gt;Jul 16th&lt;/td&gt;  &lt;td&gt;GSoC Mid-term&lt;/td&gt;  &lt;td&gt;GSoC midterm evaluations&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;8&lt;/td&gt;&lt;td&gt;Jul 19th&lt;/td&gt;  &lt;td&gt;ixmf startup&lt;/td&gt;  &lt;td&gt;start coding ixmfmux component for samples generation&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;caption&gt;Project Schedule&lt;/caption&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-6363382122476376117?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/6363382122476376117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=6363382122476376117' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6363382122476376117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6363382122476376117'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/07/xmfbin-experiments-ixmfmux.html' title='xmfbin experiments, ixmfmux'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9210580920169500129.post-2960783437909825965</id><published>2010-06-21T21:31:00.011-03:00</published><updated>2010-06-21T22:35:49.389-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>GSoC Project Report 2 - xmfmux</title><content type='html'>&lt;div&gt;This is the second report for the iXMF GSoC project. In this phase I have created the xmfmux component, the remaining requirement for starting diving into ixmf.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Concerning GSoC timeline, here's how we're scheduled:&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;table border=0 align="center" rules=all cellpadding=5 cellspacing=3 frame=box style="text-align: justify;"&gt;&lt;tbody&gt;&lt;tr&gt;  &lt;th&gt;Week&lt;/th&gt;  &lt;th&gt;Event&lt;/th&gt;  &lt;th&gt;We're at&lt;/th&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;0 (May 18th)&lt;/td&gt;  &lt;td&gt;First component delivered&lt;/td&gt;  &lt;td&gt;&lt;a href="http://genuinepulse.blogspot.com/2010/05/gsoc-project-report-1-xmfdemux.html"&gt;xmfdemux delivered&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt;  &lt;td&gt;1 (May 24th)&lt;/td&gt;  &lt;td&gt;GSoC officially begins&lt;/td&gt;  &lt;td&gt;Designing xmfmux&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;2 (May 31th)&lt;/td&gt;  &lt;td&gt;Coding xmfmux&lt;/td&gt;  &lt;td&gt;xmfmux, unit tests&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt;  &lt;td&gt;3 (Jun 7th)&lt;/td&gt;  &lt;td&gt;Coding xmfmux&lt;/td&gt;  &lt;td&gt;muxing of complex folder structures&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #aba; color: black;"&gt;  &lt;td&gt;4 (Jun 14th)&lt;/td&gt;  &lt;td&gt;Second component delivered&lt;/td&gt;  &lt;td&gt;xmfmux delivered, start designing ixmf playback engine and muxing requirements&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color: #cdc; color: black;"&gt;  &lt;td&gt;5 (Jun 21th)&lt;/td&gt;  &lt;td&gt;iXMF bin design and prototype&lt;/td&gt;  &lt;td&gt;&lt;span style="font-style:italic;"&gt;In progress&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;caption&gt;Project Schedule&lt;/caption&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;Important information:&lt;br /&gt;&lt;div&gt;&lt;ul type="square"&gt;&lt;li&gt;Project repository: http://gitorious.org/gst/ixmf&lt;/li&gt;&lt;li&gt;Contact&lt;/li&gt;&lt;ul type="square"&gt;&lt;li&gt;Me: André Dieb Martins (andredieb on IRC-freenode) - andre.dieb@gmail.com&lt;/li&gt;&lt;li&gt;Mentor: Thiago Sousa Santos (thiagoss on IRC-freenode) - thiagossantos@gmail.com&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;a href="http://www.midi.org/techspecs/xmf/xmf.php" style="color: rgb(34, 85, 136); "&gt;XMF&lt;/a&gt; - introduction about the base format for iXMF&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.midi.org/techspecs/xmf/ixmf_art1.php" style="color: rgb(34, 85, 136); "&gt;iXMF&lt;/a&gt; - introduction about interactive XMF&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/www.iasig.org/wg/ixwg/index.shtml" style="color: rgb(34, 85, 136); "&gt;iXMF IASIG&lt;/a&gt; - interactive XMF working group (contains the draft spec)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.midi.org/techspecs/xmf/xmf_mobile.php" style="color: rgb(34, 85, 136); "&gt;mXMF&lt;/a&gt; - mobile XMF&lt;/li&gt;&lt;li&gt;&lt;a href="http://genuinepulse.blogspot.com/2010/04/ixmf-gsoc.html" style="color: rgb(34, 85, 136); "&gt;Blog post&lt;/a&gt; by me about XMF/iXMF and the GSoC project&lt;/li&gt;&lt;li&gt;First report: &lt;a href="http://genuinepulse.blogspot.com/2010/05/gsoc-project-report-1-xmfdemux.html"&gt;xmfmux&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Now to the report itself.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see from our schedule above, we spent about 2-3 weeks coding the xmfmux component. The component is currently in its most basic form (doesn't support metadata yet) but it's able to fully mux xmf files and build any node structure specified (for instance, multiple folders, subfolders).  This was a functional requirement for iXMF, as it specifies multiples folders for storing its different resources descriptors. Here we show some usage:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Single node structure, one root node that is actually the file (most common mxmf files have this layout):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote style="text-align: center;"&gt;filesrc location=file1.midi ! xmfmux ! filesink location=output.xmf&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;2. Two nodes owned by a root folder node:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;blockquote&gt;filesrc location=file1.midi ! xmfmux name=muxer ! filesink location=output.xmf  filesrc location=file2.midi ! muxer.&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;3. Subfolders:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Desired layout:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul type="square"&gt;&lt;li&gt;Root&lt;/li&gt;&lt;ul type="square"&gt;&lt;li&gt;Folder1&lt;/li&gt;&lt;ul type="square"&gt;&lt;li&gt;Folder2&lt;/li&gt;&lt;ul type="square"&gt;&lt;li&gt;file1&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;Pipeline:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;filesrc location=file1.midi name=file1  xmfmux name=muxer ! filesink location=output.xmf  file1 ! muxer.Folder1:Folder2:file1&lt;/blockquote&gt;Note that in this pipeline we specified the folder structure through the pad names, folders separated with &lt;b&gt;: &lt;/b&gt;tokens.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now on week 5, I'm studying and designing how the ixmf bin will be implemented. Concerning the xmfmux and xmfdemux components, they still lack a couple functionalities required by ixmf:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;xmfdemux: Pull pads for srcpads created&lt;/li&gt;&lt;li&gt;xmfmux: metadata&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Week 5 will be about implementing these remaining functionalities and keep designing the ixmf bin. Next report will expose the design study results and the implementation roadmap.&lt;/div&gt;&lt;/div&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/9210580920169500129-2960783437909825965?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/2960783437909825965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=2960783437909825965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2960783437909825965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2960783437909825965'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/06/gsoc-project-report-2-xmfmux.html' title='GSoC Project Report 2 - xmfmux'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-4627918158599931285</id><published>2010-06-16T05:26:00.006-03:00</published><updated>2010-06-16T06:13:30.306-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wolrdcup'/><category scheme='http://www.blogger.com/atom/ns#' term='vuvuzela'/><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><title type='text'>Vuvuzela Filter</title><content type='html'>&lt;div&gt;Here we'll create a filter that removes the vuvuzela sound. We'll use &lt;a href="http://www.blogger.com/www.gstreamer.net/"&gt;GStreamer&lt;/a&gt; (free software) and some of its plugins (also free :)).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Requirements:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;GStreamer 0.10&lt;/li&gt;&lt;li&gt;GStreamer Base Plugins&lt;/li&gt;&lt;li&gt;GStreamer Good Plugins&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Ubuntu users: install gstreamer0.10-plugins-base and gstreamer0.10-plugins-good through Synaptic or apt-get.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Used files:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://megaupload.com/?d=3OI5TEBT"&gt;Vuvuzela mp3 sample&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.megaupload.com/?d=3T97NOQ8"&gt;Vuvuzela mp3 sample filtered&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you might have heard about over the web, Vuvuzela main harmonics are at frequencies 233 Hz, 466 Hz, 932 Hz and 1864 Hz. This filter is basically an array of band-reject filters for attenuating (or completely removing) the signal level on those frequencies. For this, we'll be using the audiochebband&lt;b&gt; &lt;/b&gt;plugin, part of GStreamer Good Plugins. It's a Chebyshev band pass and band reject filter but here we'll use it in band reject mode.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Vuvuzela complete filter (run in command-line):&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;gst-launch-0.10 uridecodebin uri="file:///home/dieb/Desktop/vuvuzela_antes.mp3" ! audioconvert ! audiochebband mode=band-reject lower-frequency=223 upper-frequency=243 type=2 ripple=50 ! audiochebband mode=band-reject lower-frequency=456 upper-frequency=476 type=2 ripple=50 ! audiochebband mode=band-reject lower-frequency=922 upper-frequency=942 type=2 ripple=50 ! audiochebband mode=band-reject lower-frequency=1854 upper-frequency=1874 type=2 ripple=50 ! audioconvert ! autoaudiosink&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Note that:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;This filter is attenuating a bandwidth of 20 Hz around the target frequencies. You can tune that bandwidth down (e.g. to 10 Hz, 5 Hz) for a better output sound by setting lower-frequency and upper-frequency properties to -bandwidth/2 and +bandwidth/2, respectively (e.g. 10 Hz bandwidth at 233 Hz, lower=228, upper=238)&lt;/li&gt;&lt;li&gt;You can also tune the ripple for a better sound. 50dB is a bit too much, perhaps you can find a smaller value for your setup&lt;/li&gt;&lt;/ul&gt;Note that this pipeline can be used for filtering live your TV sound through your computer:&lt;br /&gt;&lt;blockquote&gt;gst-launch-0.10 &lt;b&gt;autoaudiosrc&lt;/b&gt; ! audioconvert ! audiochebband mode=band-reject lower-frequency=223 upper-frequency=243 type=2 ripple=50 ! audiochebband mode=band-reject lower-frequency=456 upper-frequency=476 type=2 ripple=50 ! audiochebband mode=band-reject lower-frequency=922 upper-frequency=942 type=2 ripple=50 ! audiochebband mode=band-reject lower-frequency=1854 upper-frequency=1874 type=2 ripple=50 ! audioconvert ! autoaudiosink&lt;/blockquote&gt;Connect your TV sound output to your computer microphone/audio input (usually pink or blue connectors) and then your PC output (green connector) back to the TV (most modern TV's have blue-colored audio input jacks on the back panel). That's it. You have vuvuzela-free world cup games :-), for free.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-4627918158599931285?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/4627918158599931285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=4627918158599931285' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4627918158599931285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4627918158599931285'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/06/vuvuzela-filter.html' title='Vuvuzela Filter'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9210580920169500129.post-3455536454519447926</id><published>2010-05-18T23:39:00.007-03:00</published><updated>2010-05-19T00:50:50.849-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='ixmf'/><title type='text'>GSoC Project Report 1 - xmfdemux</title><content type='html'>&lt;div style="text-align: justify;"&gt;This is the first report for the iXMF GSoC project. First let's have some useful information about it:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Project repository: &lt;a href="http://gitorious.org/gst/ixmf"&gt;http://gitorious.org/gst/ixmf&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Contact:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Me: André Dieb Martins (andredieb on IRC-freenode) - andre.dieb@gmail.com&lt;/li&gt;&lt;li&gt;Mentor: Thiago Sousa Santos (thiagoss on IRC-freenode) - thiagossantos@gmail.com&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;iXMF related resources:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.midi.org/techspecs/xmf/xmf.php"&gt;XMF&lt;/a&gt; - introduction about the base format for iXMF&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.midi.org/techspecs/xmf/ixmf_art1.php"&gt;iXMF&lt;/a&gt; - introduction about interactive XMF&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/www.iasig.org/wg/ixwg/index.shtml"&gt;iXMF IASIG&lt;/a&gt; - interactive XMF working group (contains the draft spec)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.midi.org/techspecs/xmf/xmf_mobile.php"&gt;mXMF&lt;/a&gt; - mobile XMF&lt;/li&gt;&lt;li&gt;&lt;a href="http://genuinepulse.blogspot.com/2010/04/ixmf-gsoc.html"&gt;Blog post&lt;/a&gt; by me about XMF/iXMF and the GSoC project&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;For achieving the bigger goal (iXMF), GStreamer needs to support the base format (XMF). For a better understanding of the format, we decided to start the project writing a XMF demuxer element.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I started implementing the demuxer element about a week ago and today we played for the first time a XMF file. The demuxer is capable of parsing a mxmf file (mobile XMF - audio/mobile-xmf, bundle of two audio files: mDLS + MIDI) and creating sometimes-pads for each internal file.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It seems that GStreamer does not yet support mDLS, so the test concerned only the internal MIDI file (using wildmidi MIDI decoder plugin).  The pipeline used was:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;filesrc location=sample.mxmf ! xmfdemux ! wildmidi ! pulsesink&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt; &lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Still, there are a few TODO's for this element:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Pull mode for created pads: when working in sink pull mode, it would be nice to let our created pads also work in pull mode. This can be tested with the &lt;i&gt;timidity&lt;/i&gt; plugin which supports only pull-mode.&lt;/li&gt;&lt;li&gt;Finish implementing file references handlers: currently we're only parsing in-line resources data. There are a few more types of reference that should be implemented before moving forward to the next element.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;I'll be working on these TODO's in the next week and there should be a report concerning the next steps, which are currently under discussion with Thiago.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd also like to call out our fellow GStreamer developers for help, insights, suggestions, reviews, etc. It would be great to have feedback from the community.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-3455536454519447926?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3455536454519447926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3455536454519447926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3455536454519447926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3455536454519447926'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/05/gsoc-project-report-1-xmfdemux.html' title='GSoC Project Report 1 - xmfdemux'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-6114439001182515218</id><published>2010-04-29T16:41:00.001-03:00</published><updated>2010-04-29T16:42:30.422-03:00</updated><title type='text'>New nickname on freenode</title><content type='html'>My new nickname on freenode (irc.freenode.org) is &lt;b&gt;andredieb&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-6114439001182515218?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/6114439001182515218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=6114439001182515218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6114439001182515218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6114439001182515218'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/04/new-nickname-on-freenode.html' title='New nickname on freenode'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-5090790881512268424</id><published>2010-04-14T22:08:00.007-03:00</published><updated>2010-04-16T14:00:55.188-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><title type='text'>iXMF &amp; GSoC</title><content type='html'>&lt;div style="text-align: justify;"&gt;This year I applied to &lt;a href="http://www.blogger.com/www.gstreamer.net/"&gt;GStreamer&lt;/a&gt;'s &lt;a href="http://www.blogger.com/socghop.appspot.com/"&gt;GSoC&lt;/a&gt; proposing to add &lt;a href="http://www.iasig.org/wg/ixwg/index.shtml"&gt;iXMF&lt;/a&gt; support, consequently &lt;a href="http://www.midi.org/techspecs/xmf/"&gt;XMF&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;For those who don't know iXMF, it's an interative audio format/container. It's a low-overhead meta file format capable of bundling collections of different data resources into a single file.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It's designed minding games sounds/music, audio skins, artist autonomy, playback instructions and many other aspects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To quote iXMF's background description:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;This new file format will put artistic control into the hands of the artists, keep programmers from having to make artistic decisions, eliminate rework for porting to new platforms, and reduce production time, cost, and stress.&lt;/blockquote&gt;Sounds powerful, doesn't it?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now back to the proposal, my initial idea is to start by adding XMF meta file support (parsers and writers elements). This would be useful for packing multiple audio files (possibly with different formats) into a single file.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Once done, the fun part jumps in. Being an interactive audio format, iXMF playback is designed to be somehow event-driven (or signal-driven), e.g. a game application signals &lt;i&gt;play (shot_sound)&lt;/i&gt;.  Additionally, these packed audio resources can contain scripts that allow transitions (e.g. crossfade) and playback parameters (e.g. volume, pan, etc). For example, the &lt;i&gt;shot_sound &lt;/i&gt; resource could specify a play cross-fade effect.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Concerning this engine, I have discussed some implementation details Thiago and Stefan, &lt;/div&gt;&lt;div style="text-align: justify;"&gt;elder GStreamer developers. I have been pointed to &lt;a href="http://gstreamer.freedesktop.org/wiki/SampleBin"&gt;http://gstreamer.freedesktop.org/wiki/SampleBin&lt;/a&gt;, which seems to be a good idea to be aggregated here. I also gathered lots of mxmf samples (mobile XMF), which can validate the parser/writer elements.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Eager as I am, I already done some research on simultaneous play of multiple audio files (with different formats) and wrote a simple element called &lt;a href="http://gitorious.org/dieb-playground/gst/trees/master/decoderadder"&gt;decoderadder&lt;/a&gt; which does the basic job of decoding and adding the different resources. A simple test pipeline could be&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: justify;"&gt;gst-launch filesrc location=background.mp3 ! decoderadder name=a ! pulsesink audiotestsrc freq=100 ! a. audiotestsrc freq=200 ! a.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;which plays an mp3 audio file (e.g. a game background music) and two sin waves with frequencies 100Hz and 200Hz.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Currently I'm researching how to implement seek in &lt;i&gt;decoderadder &lt;/i&gt;and adding signals for scheduling plays / stopping resources. I'm also researching a way for caching/predecoding samples for almost-instant play (Stefan pointed me to buzztard's memoryaudiosrc element).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I must say I'm very excited about this project, so, fingers crossed!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-5090790881512268424?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/5090790881512268424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=5090790881512268424' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5090790881512268424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5090790881512268424'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/04/ixmf-gsoc.html' title='iXMF &amp; GSoC'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-3593429347953623705</id><published>2010-02-18T08:41:00.003-03:00</published><updated>2010-02-18T09:02:34.083-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Eupnp-AV</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hello,&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I'm glad to present the first actual showcase of &lt;a href="http://trac.enlightenment.org/e/wiki/Eupnp"&gt;Eupnp&lt;/a&gt;: a UPnP browser. It's a simple &lt;a href="http://trac.enlightenment.org/e/wiki/Elementary"&gt;Elementary&lt;/a&gt;-based application capable of browsing any UPnP-capable media servers. Here are some screenshots:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5ABmqiTrHSs/S30o1vykvHI/AAAAAAAAAQ0/8bFlMsxMu4I/s1600-h/Screenshot-Enlightenment+UPnP+AV-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 320px;" src="http://2.bp.blogspot.com/_5ABmqiTrHSs/S30o1vykvHI/AAAAAAAAAQ0/8bFlMsxMu4I/s320/Screenshot-Enlightenment+UPnP+AV-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5439548828760194162" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;Browsing multiple media servers&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5ABmqiTrHSs/S30o3BY-khI/AAAAAAAAAQ8/eRIgExySvwE/s1600-h/Screenshot-Enlightenment+UPnP+AV-2.png"&gt;&lt;img src="http://2.bp.blogspot.com/_5ABmqiTrHSs/S30o3BY-khI/AAAAAAAAAQ8/eRIgExySvwE/s320/Screenshot-Enlightenment+UPnP+AV-2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5439548850664542738" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 305px; " /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;Browsing folders and files of a MediaTomb server&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Although it's still a first crude version, it'll follow up with some UI improvements, playing media using &lt;a href="http://trac.enlightenment.org/e/wiki/Emotion"&gt;Emotion&lt;/a&gt; and possibly pictures using &lt;a href="http://trac.enlightenment.org/e/wiki/Elementary"&gt;elm-photocam&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/9210580920169500129-3593429347953623705?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3593429347953623705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3593429347953623705' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3593429347953623705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3593429347953623705'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2010/02/eupnp-av.html' title='Eupnp-AV'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5ABmqiTrHSs/S30o1vykvHI/AAAAAAAAAQ0/8bFlMsxMu4I/s72-c/Screenshot-Enlightenment+UPnP+AV-1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9210580920169500129.post-3745207335696334842</id><published>2009-10-19T20:24:00.004-03:00</published><updated>2009-10-19T20:32:21.307-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='ufcg'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Where are you?</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;I've been quite busy the last couple months with the university and I'll probably still be until December. Too many exams, course-projects and etc.&lt;br /&gt;&lt;br /&gt;Until then, I'll be focusing on:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;eupnp: end-user applications, documentation, tutorial, libeupnp-av. Any help would be really good!&lt;/li&gt;&lt;li&gt;(university) annoy-clock: project for the &lt;span style="font-style: italic;"&gt;digital systems archicteture&lt;/span&gt; course&lt;/li&gt;&lt;li&gt;(university) voice-scrambler or de-esser: project for the &lt;span style="font-style: italic;"&gt;communication systems &lt;/span&gt;course&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/9210580920169500129-3745207335696334842?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3745207335696334842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3745207335696334842' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3745207335696334842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3745207335696334842'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/10/where-are-you.html' title='Where are you?'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-2202949975425561110</id><published>2009-08-19T17:06:00.003-03:00</published><updated>2009-08-19T18:01:48.321-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>GSoC final report</title><content type='html'>We've just passed the firm pencil's down date. Here's a final report for Eupnp GSoC project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Discovery, Description, Control features completed (which provide a basic control point functionality set)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Multi-toolkit: one can easily integrate Eupnp with Qt, Glib, Ecore or any other toolkit/framework that provides the basic functionality required. We already have integration with Ecore (EFL)&lt;/li&gt;&lt;li&gt;Event Notification incomplete (we're able to subscribe for events but for now you're only able to receive raw messages)&lt;/li&gt;&lt;li&gt;Internet Gateway Device configuration tool incomplete (able to list IGD devices)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Even though the program ended, I'll obviously keep working on Eupnp. Here's an updated TODO list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Finish implementing Event Notification&lt;/li&gt;&lt;li&gt;Finish IGD configuration tool&lt;/li&gt;&lt;li&gt;Finish API documentation,  write a tutorial&lt;br /&gt;&lt;/li&gt;&lt;li&gt;libeupnp-av (UPnP Audio/Video specification) extension library&lt;/li&gt;&lt;/ul&gt;Ideas/future features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Universal control point&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Python bindings&lt;/li&gt;&lt;li&gt;Maemo porting&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Canola plugin&lt;/li&gt;&lt;li&gt;Device building ability (UPnP server)&lt;/li&gt;&lt;/ul&gt;PS: Big thanks to Gustavo Barbieri (my mentor) who helped me throughout problems and taught me lots of programming techniques. Also thanks to EFL guys (raster, Sachiel, vtorri, cedric, etc) who had the patience to read my patches and answer my stupid questions on IRC :-P.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-2202949975425561110?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/2202949975425561110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=2202949975425561110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2202949975425561110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2202949975425561110'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/08/gsoc-final-report.html' title='GSoC final report'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-8776209569097522764</id><published>2009-08-10T02:25:00.004-03:00</published><updated>2009-08-10T03:18:11.819-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Eupnp &amp; GSoC</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;I've just finished implementing the last requirement (embedded devices parsing) for our IGD client.&lt;br /&gt;&lt;br /&gt;Concerning the project as a whole, we have the following features and TODO's:&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Discovery: SSDP client&lt;/li&gt;&lt;li&gt;Description: fast and light SAX parsers for devices and services description files&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Control: SOAP support implemented&lt;/li&gt;&lt;li&gt;Integration interface for external toolkits/libraries (ecore, glib, qt)&lt;/li&gt;&lt;li&gt;eupnp-ecore: integration library with ecore library&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Command line control point application example&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IGD GUI application listing devices&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Missing/TODO (by order of priority):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;IGD GUI controlling IGD devices&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Event Notification: subscribing for variables updates&lt;/li&gt;&lt;li&gt;Docs, tutorial&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UPnP Audio/Video extension library (libeupnp-av)*&lt;/li&gt;&lt;/ol&gt;Also, it's good to remind that today is the &lt;span style="font-style: italic;"&gt;suggested&lt;/span&gt; GSoC pencil's down date. To quote the timeline:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;August 10: &lt;/span&gt;&lt;strong&gt;&lt;em&gt;Suggested&lt;/em&gt;&lt;/strong&gt; 'pencils down' date. Take a week to scrub code, write tests, improve documentation, etc.&lt;/blockquote&gt;Concerning their sugestion and the timeline, we are almost on schedule (on the original plan we had item #2 on the first release and item #4 on the second release*). Items #1 and #3 will certainly get done on time (before August 16). I also wish to deliver item #2 on time, which is an optional UPnP feature but is very important and widely used.&lt;br /&gt;&lt;br /&gt;* libeupnp-av has been postponed in favour of the IGD GUI as the A/V specification is extremely extensive and the IGD GUI is a simpler showcase for the project - at least for now.&lt;br /&gt;&lt;br /&gt;Enough with the talk, pants on and code!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-8776209569097522764?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/8776209569097522764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=8776209569097522764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/8776209569097522764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/8776209569097522764'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/08/eupnp-gsoc.html' title='Eupnp &amp; GSoC'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-1210733101314025662</id><published>2009-08-07T20:45:00.004-03:00</published><updated>2009-08-07T20:52:18.621-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='elementary'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Eupnp, Elementary, IGD</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_5ABmqiTrHSs/Sny9TWkw7hI/AAAAAAAAAJQ/RMiaM4XzC_s/s1600-h/screenshot.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_5ABmqiTrHSs/Sny9TWkw7hI/AAAAAAAAAJQ/RMiaM4XzC_s/s320/screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5367372996093734418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Nothing fancy for now, but we're on our way to end user tools :). This little application already lists and searches for Internet Gateway Devices using Eupnp and Elementary.&lt;br /&gt;&lt;br /&gt;Next step will be about adding a dialog for controlling these devices (easy to do) but I need to strike-through one last TODO item before adding it (embedded devices parsing).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-1210733101314025662?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/1210733101314025662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=1210733101314025662' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1210733101314025662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1210733101314025662'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/08/eupnp-elementary-igd.html' title='Eupnp, Elementary, IGD'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_5ABmqiTrHSs/Sny9TWkw7hI/AAAAAAAAAJQ/RMiaM4XzC_s/s72-c/screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9210580920169500129.post-8112660318049789655</id><published>2009-08-03T20:58:00.002-03:00</published><updated>2009-08-03T21:07:50.833-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Finally!</title><content type='html'>I finally managed to get XML fetching (devices and services) done. I lost a lot of time going against libcurl directly, so the solution my mentor proposed just fit: export a core download function that is provided by the integration toolkit (e.g. ecore_con_url from ecore toolkit).&lt;br /&gt;&lt;br /&gt;I'll try to make up for the time lost and move on now for controlling!&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-8112660318049789655?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/8112660318049789655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=8112660318049789655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/8112660318049789655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/8112660318049789655'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/08/finally.html' title='Finally!'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-9037432277117489921</id><published>2009-07-31T21:17:00.002-03:00</published><updated>2009-07-31T21:27:36.072-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Eupnp: last sprint</title><content type='html'>I just finished implementing the SCPD (service XML descriptor) parser, which leads me to the next phase: Control.&lt;br /&gt;&lt;br /&gt;I'll be implementing Control in the next two weeks, which will be about using libcurl to perform HTTP POST calls with some attributes wrapped in a SOAP XML. The biggest problem about this is making libcurl work properly (I have just had two days debugging a stack corruption which lead nowhere, result is feature suspended).&lt;br /&gt;&lt;br /&gt;Finished this task, I'll implement a simple application using elementary for listing local devices and information about them (i.e. universal control point). This is good to demonstrate functionality.&lt;br /&gt;&lt;br /&gt;This will be followed by the control point A/V spec, task which hopefully I'll finish before GSoC pencil's down date (16 August).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-9037432277117489921?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/9037432277117489921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=9037432277117489921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/9037432277117489921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/9037432277117489921'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/07/eupnp-last-sprint.html' title='Eupnp: last sprint'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-3268614351217748254</id><published>2009-07-05T16:56:00.002-03:00</published><updated>2009-07-05T17:34:58.916-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>GSoC report on Eupnp</title><content type='html'>Though my release plan on the &lt;a href="http://wiki.github.com/dieb/eupnp"&gt;original schedule&lt;/a&gt; wasn't completely met on 30th June, I managed to finish some very important parts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;eupnp-core&lt;/span&gt; (&lt;a href="http://github.com/dieb/eupnp/blob/d69da7e190daee71d8df7c22f5d7d7770208f3e2/src/lib/eupnp_core.h"&gt;code&lt;/a&gt;): virtual core module of the library, responsible for fd handling, timers and idlers. It's designed to make simple the integration with common event loops out there (ecore, gobject, qt). It's basically a mapping to event loop functions, see eupnp-ecore below.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;eupnp-ecore&lt;/span&gt; (&lt;a href="http://github.com/dieb/eupnp/blob/d69da7e190daee71d8df7c22f5d7d7770208f3e2/src/lib/eupnp_ecore/eupnp_ecore.c"&gt;code&lt;/a&gt;): library that integrates eupnp with ecore event loop. Already contains a &lt;a href="http://github.com/dieb/eupnp/blob/d69da7e190daee71d8df7c22f5d7d7770208f3e2/src/bin/eupnp_ecore_basic_control_point.c"&gt;working example&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;UPnP step 2, description: parsing device root XML description and services descriptions. This part is almost finished and will be followed by controlling devices (Step 3, SOAP support)&lt;/li&gt;&lt;/ul&gt;It's very likely that I'll finish SOAP support in these next two weeks. The other remaining task (event notification) will be easy to implement since most of the code is already done (HTTP message parser).&lt;br /&gt;&lt;br /&gt;The second release will be using the library on end-user programs for controlling media devices and internet gateway devices (routers, etc). I hope I can finish this part on time and have more time for docs (which are already being written along with the code) and bug fixes.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;General information: &lt;a href="http://wiki.github.com/dieb/eupnp"&gt;http://wiki.github.com/dieb/eupnp&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Source tree: &lt;a href="http://github.com/dieb/eupnp/tree/master"&gt;http://github.com/dieb/eupnp/tree/master&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Contact:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;dieb_ @ irc.freenode.org #edevelop &lt;/li&gt;&lt;li&gt;andre.dieb at gmail.com&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/9210580920169500129-3268614351217748254?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3268614351217748254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3268614351217748254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3268614351217748254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3268614351217748254'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/07/gsoc-report-on-eupnp.html' title='GSoC report on Eupnp'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-5554237486010704430</id><published>2009-06-06T13:55:00.002-03:00</published><updated>2009-06-06T13:58:30.693-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Update</title><content type='html'>Updated about me, ohloh, links, blog layout and so on... Because if you don't do it now, you'll never do!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://genuinepulse.blogspot.com/2008/03/about-me.html"&gt;http://genuinepulse.blogspot.com/2008/03/about-me.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-5554237486010704430?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/5554237486010704430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=5554237486010704430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5554237486010704430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5554237486010704430'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/06/update.html' title='Update'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-5097519112148894516</id><published>2009-06-04T01:44:00.004-03:00</published><updated>2009-06-04T02:05:21.691-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Eupnp event bus and new deps</title><content type='html'>Since UPnP is event-driven itself, I have implemented a Event Bus. It is a channel onto publishers can publish events and into which subscribers can subscribe for a specific type of event (one-to-many).&lt;br /&gt;&lt;br /&gt;The goodies about this bus is that it centralizes all eventing in one point, so, gets simpler to implement, debug, optimize and also &lt;span style="font-weight: bold;"&gt;use&lt;/span&gt;. The API got very simple and short, an example can be found on my &lt;a href="http://github.com/dieb/eupnp/blob/351f02d6b6b6aba9ee6e7ed50fbe7041e6ed3241/src/bin/eupnp_basic_control_point.c"&gt;example-test program&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One thing I'm still thinking about adding in this stage is multiple events subscription. I'm defining the events with independent constants (powers of 2), so it's possible to subscribe to a set of events by combining them with bitwise OR. One thing that I'm still wondering about is the frequency users would use this.&lt;br /&gt;&lt;br /&gt;Apart from that, I have chosen two new dependencies:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;libcurl&lt;/span&gt;: will be used to fetch XML's, perform soap POST's&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;libxml2:&lt;/span&gt; I'll use a SAX XML parser for "read-as-you-go" parsing, harder to implement but benefits in almost every way comparing to DOM.&lt;/li&gt;&lt;/ul&gt;I want to give the fetch result directly to the SAX parser, but I'm still studying the APIs to learn how to do it properly. While the XML doc is received and parsed, it'll be mounting the DeviceInfo object, without requiring a memory-expensive DOM tree.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-5097519112148894516?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/5097519112148894516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=5097519112148894516' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5097519112148894516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5097519112148894516'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/06/eupnp-event-bus-and-new-deps.html' title='Eupnp event bus and new deps'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-4412836419355617096</id><published>2009-05-19T18:59:00.003-03:00</published><updated>2009-05-19T19:04:52.396-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='brisa'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><title type='text'>Projects status</title><content type='html'>Last week I was very busy with the university and finishing up BRisa tasks, so I didn't have time to code for Eupnp, even though I couldn't take it out of my mind (ideas!).&lt;br /&gt;&lt;br /&gt;The status is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;BRisa: almost ready for release (may happen sometime this week, we expect friday)&lt;/li&gt;&lt;li&gt;Eupnp: detected a 8 byte leak on inet_ntoa (well known in the community), next steps will be implementing a cache for known devices (SSDP), add filters for search targets (CP) and starting the device builder module&lt;/li&gt;&lt;/ul&gt;I'll be working on these tasks this week and on the next week I'll have to halt a bit for some university tests. I expect to have some results until friday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-4412836419355617096?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/4412836419355617096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=4412836419355617096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4412836419355617096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4412836419355617096'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/05/projects-status.html' title='Projects status'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-2727982519516756332</id><published>2009-05-19T18:55:00.002-03:00</published><updated>2009-05-19T18:59:12.025-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='useless'/><title type='text'>Real coffee</title><content type='html'>It's been a while since I accidentally broke my coffee jar while washing it.. and since it's specially designed for that - and I didn't have time to go look for another jar of this brand - I've been drinking instant coffee Nescafe since then (bad!).&lt;br /&gt;&lt;br /&gt;Today I managed to do a workaround with the coffee machine and another jar, so, real coffee again!&lt;br /&gt;&lt;br /&gt;Hoorai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-2727982519516756332?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/2727982519516756332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=2727982519516756332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2727982519516756332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2727982519516756332'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/05/real-coffee.html' title='Real coffee'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-7888087455180445143</id><published>2009-05-06T05:35:00.005-03:00</published><updated>2009-05-06T05:45:04.215-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Zaroo Leaks!</title><content type='html'>Grinding Leaks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;cd eupnp&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;./autogen.sh&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;make&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Create the lt binary under .lib: &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;EINA_ERROR_LEVEL=3 ./src/bin/eupnp_basic_control_point &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Valgrind it: &lt;/span&gt;EINA_ERROR_LEVEL=3 valgrind --leak-check=full --num-callers=6 --show-reachable=yes src/bin/.libs/lt-eupnp_basic_control_point&lt;/li&gt;&lt;/ul&gt;Outputs&lt;br /&gt;&lt;blockquote&gt;==17842== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 23 from 1)&lt;br /&gt;==17842== malloc/free: in use at exit: 0 bytes in 0 blocks.&lt;br /&gt;==17842== malloc/free: &lt;span style="font-weight: bold;"&gt;36 allocs, 36 frees&lt;/span&gt;, 7,265 bytes allocated.&lt;br /&gt;==17842== For counts of detected errors, rerun with: -v&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;==17842== All heap blocks were freed -- no leaks are possible.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Zaroo leaks!&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Test construction failure leaks:&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;two instances, one binds to the address, the other can't bind, check for leaks&lt;br /&gt;&lt;br /&gt;Output:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;[eupnp_udp_transport.c:85] eupnp_udp_transport_prepare() Error binding. Address already in use&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;[eupnp_udp_transport.c:135] eupnp_udp_transport_new() Could not prepare socket.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;[eupnp_ssdp.c:324] eupnp_ssdp_server_new() Could not create SSDP server instance.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;[eupnp_control_point.c:86] eupnp_control_point_new() Could not create control point.&lt;/span&gt;&lt;br /&gt;==18183==&lt;br /&gt;==18183== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 23 from 1)&lt;br /&gt;==18183== malloc/free: in use at exit: 0 bytes in 0 blocks.&lt;br /&gt;==18183== malloc/free: &lt;span style="font-weight: bold;"&gt;23 allocs, 23 frees&lt;/span&gt;, 1,490 bytes allocated.&lt;br /&gt;==18183== For counts of detected errors, rerun with: -v&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;==18183== All heap blocks were freed -- no leaks are possible.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-7888087455180445143?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/7888087455180445143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=7888087455180445143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7888087455180445143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7888087455180445143'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/05/zaroo-leaks.html' title='Zaroo Leaks!'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-392013113002351503</id><published>2009-05-04T08:04:00.005-03:00</published><updated>2009-05-12T19:04:05.171-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>GSoC Eupnp Progress</title><content type='html'>Project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Repository:&lt;/span&gt; &lt;a href="http://github.com/dieb/eupnp/tree"&gt;http://github.com/dieb/eupnp/tree&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Cloning:&lt;/span&gt; git clone git://github.com/dieb/eupnp.git&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Testing:&lt;/span&gt; ./autogen.sh, make, make install, try the binaries under src/bin with EINA_ERROR_LEVEL=3 if you want complete debug.&lt;/li&gt;&lt;/ul&gt;These are the features I already pushed &lt;span style="font-weight: bold;"&gt;(see update below):&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;UDP transport component;&lt;/li&gt;&lt;li&gt;SSDP HTTP basic request parser;&lt;/li&gt;&lt;li&gt;SSDP Discovery Request (M-Search);&lt;/li&gt;&lt;li&gt;Control Point and SSDP classes;&lt;/li&gt;&lt;li&gt;Working basic control point for testing features described above&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update: Gustavo Barbieri (project mentor) helped me a lot improving everything and also fix the repository tree that had a 'trunk' folder. So I created a new tree and pushed the files already improved.&lt;br /&gt;&lt;br /&gt;From now on, only incremental commits! :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-392013113002351503?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/392013113002351503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=392013113002351503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/392013113002351503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/392013113002351503'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/05/gsoc-eupnp-progress.html' title='GSoC Eupnp Progress'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-5195156866557545119</id><published>2009-04-27T02:58:00.004-03:00</published><updated>2009-05-12T19:05:00.997-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>GSoC 2009: let the games begin</title><content type='html'>For this past week I've been learning autotools as fast as I could, and as pragmatic as I could. I don't want to lose much time with this. I also managed to finish a lot of pendencies, so I'll have more time to write early code - before May 23 (official start-coding date).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-5195156866557545119?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/5195156866557545119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=5195156866557545119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5195156866557545119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5195156866557545119'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/04/gsoc-2009-let-games-begin.html' title='GSoC 2009: let the games begin'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-4470131111549375228</id><published>2009-04-20T16:38:00.004-03:00</published><updated>2009-05-12T19:05:31.084-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='eupnp'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>GSoc 2009: accepted!</title><content type='html'>I'm very happy. I've been accepted as student for &lt;a href="http://socghop.appspot.com/"&gt;Google Summer of Code 2009&lt;/a&gt;. My project is associated with The Enlightenment Project organization and it will be implementing a UPnP control point library in C. A brief description of the project can be found &lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/enlightenment/t124022255807"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have already started coding a bit and done some bits on the SSDP server (finished the multicast listener).&lt;br /&gt;&lt;br /&gt;The code will be available on a git repository on github. You can access the tree &lt;a href="http://github.com/dieb/eupnp/tree/master"&gt;here&lt;/a&gt; and I'll be pushing the stuff soon.&lt;br /&gt;&lt;br /&gt;Wish me luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-4470131111549375228?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/4470131111549375228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=4470131111549375228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4470131111549375228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4470131111549375228'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2009/04/gsoc-2009-accepted.html' title='GSoc 2009: accepted!'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-3694307300377781722</id><published>2008-12-22T19:03:00.002-03:00</published><updated>2008-12-22T19:18:32.005-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='brisa'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Finally!</title><content type='html'>Finally college activities are over for this year. All in all it was a good year.&lt;br /&gt;&lt;br /&gt;I will now focus on the remaining tasks of BRisa 0.7.2 release, which are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Refactor the plugin architecture (plugin.py) for auto id generation for virtual containers and also the plugins affected&lt;/li&gt;&lt;li&gt;Ship brisa-media-server-conf and brisa-media-server together&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy brisa-media-server-conf command line part to brisa-conf for general configuration of the framework&lt;/li&gt;&lt;li&gt;Fix brisa-media-server-conf command line part to be specific to the media server with more direct commands&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/9210580920169500129-3694307300377781722?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3694307300377781722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3694307300377781722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3694307300377781722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3694307300377781722'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/12/finally.html' title='Finally!'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-2310690290293232844</id><published>2008-12-20T19:03:00.001-03:00</published><updated>2008-12-20T19:05:44.017-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>In remembrance</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="font-weight: bold;"&gt;Evergrey - In Remembrance&lt;/span&gt;&lt;a name="6"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt;&lt;br /&gt;I remember your voice and your dreams&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Your smile when you laughed&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And your pain when you screamed&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; I'll follow your footsteps let them be my guide&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Can you save me from being myself?&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; It's hard to be strong when you're stuck in a shell&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; If you don't desert me I won't let down&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Of all the things you used to do&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Of all the faith I had in you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And when I walk, I walk for you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance of you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; I remember when we used to run&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Against any threat united as one&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; We faced all our fears&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And we chased all the clouds blocking the sun&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And through the haze my sorrow created&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; I heard your voice and the promise you stated&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And I...&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Won't let you down&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Of all the things you used to do&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Of all the faith I had in you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And when I walk, I walk for you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance of you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Cause I never saw you deserted&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Or you never spoke so I heard it&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Cause I would never let you down&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Did you call me and I didn't listen?&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Did I force you to make a decision?&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Did I?&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Of all the days we planned&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And all the things we said we'd do&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Of all the times we had&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And the fate I shared with you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; You'll always be my truth&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Cause what I know I've learned from you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance of you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Of all the things you used to do&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; And all the faith I had in you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; Cause when I walk, I walk for you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; In remembrance of you&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a name="6"&gt; &lt;/a&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/9210580920169500129-2310690290293232844?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/2310690290293232844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=2310690290293232844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2310690290293232844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2310690290293232844'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/12/in-remembrance.html' title='In remembrance'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-2279176017867054714</id><published>2008-12-16T08:23:00.001-03:00</published><updated>2008-12-16T08:25:42.896-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Dream on...</title><content type='html'>&lt;div class="watch-video-desc description"&gt;Simply amazing: &lt;span&gt;&lt;a href="http://www.youtube.com/watch?v=W7ACCDQwfIc"&gt;http://www.youtube.com/watch?v=W7ACCDQwfIc&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;Can you feel a little love&lt;br /&gt;&lt;br /&gt;As your bony fingers close around me&lt;br /&gt;Long and spindly&lt;br /&gt;Death becomes me&lt;br /&gt;Heaven can you see what I see&lt;br /&gt;&lt;br /&gt;Hey you pale and sickly child&lt;br /&gt;You're death and living reconciled&lt;br /&gt;Been walking home a crooked mile&lt;br /&gt;&lt;br /&gt;Paying debt to karma&lt;br /&gt;You party for a living&lt;br /&gt;What you take won't kill you&lt;br /&gt;But careful what you're giving&lt;br /&gt;&lt;br /&gt;There's no time for hesitating&lt;br /&gt;Pain is ready, pain is waiting&lt;br /&gt;Primed to do it's educating&lt;br /&gt;&lt;br /&gt;Unwanted, uninvited kin&lt;br /&gt;It creeps beneath your crawling skin&lt;br /&gt;It lives without it lives within you&lt;br /&gt;&lt;br /&gt;Feel the fever coming&lt;br /&gt;You're shaking and twitching&lt;br /&gt;You can scratch all over&lt;br /&gt;But that won't stop you itching&lt;br /&gt;&lt;br /&gt;Can you feel a little love&lt;br /&gt;Can you feel a little love&lt;br /&gt;&lt;br /&gt;Dream on dream on&lt;br /&gt;&lt;br /&gt;Blame it on your karmic curse&lt;br /&gt;Oh shame upon the universe&lt;br /&gt;It knows its lines&lt;br /&gt;It's well rehearsed&lt;br /&gt;&lt;br /&gt;It sucked you in, it dragged you down&lt;br /&gt;To where there is no hallow ground&lt;br /&gt;Where holiness is never found&lt;br /&gt;&lt;br /&gt;Paying debt to karma&lt;br /&gt;You party for a living&lt;br /&gt;What you take won't kill you&lt;br /&gt;But careful what you're giving&lt;br /&gt;&lt;br /&gt;Can you feel a little love&lt;br /&gt;Can you feel a little love&lt;br /&gt;&lt;br /&gt;Dream on dream on&lt;br /&gt;&lt;br /&gt;Can you feel a little love&lt;br /&gt;Can you feel a little love&lt;br /&gt;&lt;br /&gt;Dream on dream on&lt;br /&gt;Dream on dream on&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Depeche Mode - Dream On&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-2279176017867054714?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/2279176017867054714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=2279176017867054714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2279176017867054714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2279176017867054714'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/12/dream-on.html' title='Dream on...'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-4611536572059656430</id><published>2008-11-21T23:58:00.006-03:00</published><updated>2008-11-22T00:28:53.764-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='guides'/><title type='text'>Share keyboard and mouse with Synergy</title><content type='html'>Today I'm a happy geek. Why? I discovered Synergy (actually I saw some guys at the lab using it). It allows you to share your keyboard and mouse with multiple machines.&lt;br /&gt;&lt;br /&gt;I found it amazingly useful. At the lab, I used to use a single LCD monitor and the times I was with my laptop there, it was always a pain to stretch for typing or moving the cursor (just for the record, I'm not fat!). Now with Synergy I can share smoothly my desktop keyboard with my laptop (also at home).&lt;br /&gt;&lt;br /&gt;On Ubuntu, you may find Synergy and Quicksynergy (graphical interface for synergy - very good and simple) at Synaptic Package Manager. Just type in "synergy" and install both.&lt;br /&gt;&lt;br /&gt;Between Linux machines, just use Quicksynergy. On the server machine (the one you want to share from) go to the &lt;span style="font-style: italic;"&gt;Share &lt;/span&gt;tab and type in the machines hostnames (cat &lt;span style="font-style: italic;"&gt;/etc/hostname&lt;/span&gt; for retrieving the hostname if you don't know) on the positions you want. On the clients (that will use the shared peripherals) just go to the &lt;span style="font-style: italic;"&gt;Use&lt;/span&gt; tab and type in the hostname or the IP address of the server.&lt;br /&gt;&lt;br /&gt;If you want to add a Windows machine as a client, it's as easy as on Linux. Install Synergy from their &lt;a href="http://synergy2.sourceforge.net/"&gt;website &lt;/a&gt;and just type in the IP address or hostname of the server.&lt;br /&gt;&lt;br /&gt;If you want to have your Windows as server, you'll need to do some configuration. On the configuration Screen, click on the Configure button besides "Screens &amp;amp; Links".&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5ABmqiTrHSs/SSd4h8dRizI/AAAAAAAAAAw/UJ2YvINpxA0/s1600-h/synergy_main.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 243px;" src="http://2.bp.blogspot.com/_5ABmqiTrHSs/SSd4h8dRizI/AAAAAAAAAAw/UJ2YvINpxA0/s320/synergy_main.JPG" alt="" id="BLOGGER_PHOTO_ID_5271314413420383026" border="0" /&gt;&lt;/a&gt;Synergy main window&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_5ABmqiTrHSs/SSd4tStOsvI/AAAAAAAAAA4/2NcBoc4tTOg/s1600-h/configure_window.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 222px;" src="http://1.bp.blogspot.com/_5ABmqiTrHSs/SSd4tStOsvI/AAAAAAAAAA4/2NcBoc4tTOg/s320/configure_window.JPG" alt="" id="BLOGGER_PHOTO_ID_5271314608371446514" border="0" /&gt;&lt;/a&gt;Screens &amp;amp; Links configuration window&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;On the top of the window you may see the Screens frame. There you will add which screens you'll use. I didn't read the documentation, so I really don't know if this is correct: I supposed screen name is just the name that appears on windows Synergy application, and the aliases should be the hostnames. Anyways, it worked this way.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_5ABmqiTrHSs/SSd42S8Ll5I/AAAAAAAAABI/orMLm2iEceE/s1600-h/screen2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 214px; height: 320px;" src="http://2.bp.blogspot.com/_5ABmqiTrHSs/SSd42S8Ll5I/AAAAAAAAABI/orMLm2iEceE/s320/screen2.JPG" alt="" id="BLOGGER_PHOTO_ID_5271314763052980114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(Here's one of my screens config. you really don't have to do much here, just type in the hostname in aliases).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Once you added your screens, you must now add the links. They're all about positioning your screens the way you want it. It's very intuitive, and I think this one you should try yourself. :-)&lt;br /&gt;&lt;br /&gt;Have fun!&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/9210580920169500129-4611536572059656430?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/4611536572059656430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=4611536572059656430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4611536572059656430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4611536572059656430'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/11/share-keyboard-and-mouse-with-synergy.html' title='Share keyboard and mouse with Synergy'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_5ABmqiTrHSs/SSd4h8dRizI/AAAAAAAAAAw/UJ2YvINpxA0/s72-c/synergy_main.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9210580920169500129.post-5407233102042808101</id><published>2008-11-12T14:33:00.003-03:00</published><updated>2008-11-12T14:57:43.872-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='brisa'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='guides'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Learning how to use BRisa through code</title><content type='html'>For the brave users who hate to read documentation or long texts:&lt;br /&gt;&lt;br /&gt;Basic dictionary:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;media server: hosts media&lt;/li&gt;&lt;li&gt;media renderer: plays media&lt;/li&gt;&lt;li&gt;control point: selects media from a server and tells a renderer to play it&lt;/li&gt;&lt;li&gt;brisa: provides a server and a renderer&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Basic procedure:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Don't panic&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Configure the media server with your music, picture and video folders (brisa-configuration-tool)&lt;/li&gt;&lt;li&gt;Start your media server (brisa-media-server)&lt;/li&gt;&lt;li&gt;Start a media renderer (optional)&lt;/li&gt;&lt;li&gt;Start a control point&lt;/li&gt;&lt;li&gt;On the control point interface, select your media server&lt;/li&gt;&lt;li&gt;On the control point interface, select a media renderer (perhaps yours, if you done step 3)&lt;/li&gt;&lt;li&gt;Use the controls on the control point interface: &lt;span style="font-weight: bold;"&gt;play, stop, pause, next, previous &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;be happy&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Basic procedure (with commands):&lt;br /&gt;&lt;pre&gt;$ svn co https://garage.maemo.org/svn/brisa/tags/python-brisa-0.7.1&lt;br /&gt;$ svn co https://garage.maemo.org/svn/brisa/tags/brisa-configuration-tool-0.1.0&lt;br /&gt;$ cd python-brisa-0.7.1&lt;br /&gt;$ sudo python setup.py install&lt;br /&gt;$ cd ../brisa-configuration-tool-0.1.0&lt;br /&gt;$ sudo python setup.py install&lt;br /&gt;&lt;br /&gt;Select your media folders on the audio, video and pictures sections:&lt;br /&gt;$ brisa-configuration-tool&lt;br /&gt;Save, exit&lt;br /&gt;&lt;br /&gt;Run your media server&lt;br /&gt;$ brisa-media-server&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Done! Just use a &lt;span style="font-weight: bold;"&gt;control point&lt;/span&gt; to &lt;span style="font-style: italic;"&gt;select&lt;/span&gt; media and a &lt;span style="font-weight: bold;"&gt;media renderer&lt;/span&gt; to &lt;span style="font-style: italic;"&gt;play&lt;/span&gt; the selected media.&lt;br /&gt;&lt;br /&gt;Control points are short in the market. If you own a N800/N810 there are two I'd recommend: Media Streamer and Canola UPnP.&lt;br /&gt;&lt;br /&gt;Brisa provides a media renderer, which can be run on any machine on the local network. If you want to use it, just type&lt;code&gt;&lt;/code&gt; in:&lt;br /&gt;&lt;pre&gt;$ brisa-media-renderer&lt;br /&gt;&lt;/pre&gt;You can naturally want to play media on another machine. Just follow the same steps above for installing and then run brisa-media-renderer on the machine.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;For the brave who want to follow/test latest brisa:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Getting latest BRisa:&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;$ svn co https://garage.maemo.org/svn/brisa/trunk&lt;br /&gt;$ cd python-brisa&lt;br /&gt;$ sudo python setup.py install&lt;br /&gt;$ cd ../brisa-configuration-tool&lt;br /&gt;$ sudo python setup.py install&lt;br /&gt;&lt;br /&gt;Select your media folders on the audio, video and pictures sections:&lt;br /&gt;$ brisa-configuration-tool&lt;br /&gt;Save, exit&lt;br /&gt;&lt;br /&gt;Running your media server&lt;br /&gt;$ brisa-media-server&lt;br /&gt;&lt;br /&gt;Running a media renderer&lt;br /&gt;$ brisa-media-renderer&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;Help can be found at #brisa on irc.freenode.org.&lt;br /&gt;&lt;br /&gt;Good luck and have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-5407233102042808101?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/5407233102042808101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=5407233102042808101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5407233102042808101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5407233102042808101'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/11/learning-how-to-use-brisa-through-code.html' title='Learning how to use BRisa through code'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-7441955715263653529</id><published>2008-11-12T14:11:00.005-03:00</published><updated>2008-11-12T14:33:24.185-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='brisa'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>python-brisa 0.7.1 released!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;python-brisa-0.7.1&lt;/span&gt; has been released for maemo devices. Though it can be found at &lt;span style="font-weight: bold;"&gt;maemo-extras&lt;/span&gt; repository, this release is &lt;span style="font-style: italic;"&gt;kinda not-meant-for-users&lt;/span&gt; (since it does not contain menu shortcuts, icons, applet and the configuration tool is still a bit ugly).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's an update on &lt;span style="font-weight: bold;"&gt;python-brisa-0.7.2&lt;/span&gt; (actual development version):&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;" type="square"&gt;&lt;li&gt;Major refactor on the &lt;span style="font-weight: bold;"&gt;brisa.config&lt;/span&gt; package: sections and parameters are no longer stored on a text file, but on a sqlite database&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;brisa.config&lt;/span&gt; holds a configuration state for each brisa instance and the state can be saved on the persistence or updated with new persistence data.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Holding a runtime state for configuration makes it easy to deploy new interfaces for the configuration tool, since it can be viewed as Model of the MVC architectural pattern. Also, it provides a dynamic configuration which will be very useful with the dbus control interface (for example, turning plugins on and off dynamically without pooling configuration files).&lt;br /&gt;&lt;br /&gt;Concerning dates, &lt;span style="font-weight: bold;"&gt;python-brisa-0.7.2&lt;/span&gt; will be tagged and released in the next couple weeks, and &lt;span style="font-weight: bold;"&gt;python-brisa-0.8.0&lt;/span&gt; hopefully in the beginning of december.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm also pasting here the latest changelog, as promised :)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;python-brisa 0.7.2-dev, xxxx-xx-xx (development release)&lt;br /&gt;----------------------------------&lt;br /&gt;- removed extern/python-id3 which is not a dependency anymore&lt;br /&gt;- created a colored logging module for developers&lt;br /&gt;- configuration persistence moved from text file to sqlite database&lt;br /&gt;- configuration API holds a runtime state that can be save()'d or &lt;br /&gt;update()'d with the configuration persistence&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;python-brisa 0.7.1, 2008-11-11&lt;br /&gt;------------------------------&lt;br /&gt;- API change: modules from brisa/utils/python moved to brisa/utils&lt;br /&gt;- added watch facilities for SQLLite databases and objects bool attributes&lt;br /&gt;- partial optimization on the filesystem plugin persistence&lt;br /&gt;- fixed bugs #2980, #2950&lt;br /&gt;- fixed examples with old import names&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;python-brisa 0.7.0, 2008-10-30&lt;br /&gt;------------------------------&lt;br /&gt;- control point API cleaned: now contains a basic control_point.py and a A/V implementation&lt;br /&gt;- removed SQLObject dependency&lt;br /&gt;- removed Twisted dependency&lt;br /&gt;- removed sqlite2 dependency (sqlite3 is being shipped with python2.5)&lt;br /&gt;- removed pymad and libmad dependency (now we use python-mutagen)&lt;br /&gt;- new implementation of XML DIDLite generation&lt;br /&gt;- plugins browser methods can return all matches or perform internal optimized sorting/slicing (has_browse_filter flag)&lt;br /&gt;- added maemo multimedia and canola plugins&lt;br /&gt;- added UPnP-UP (User Profile) initial implementation&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&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/9210580920169500129-7441955715263653529?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/7441955715263653529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=7441955715263653529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7441955715263653529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7441955715263653529'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/11/python-brisa-071-released.html' title='python-brisa 0.7.1 released!'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-3114645345003659207</id><published>2008-10-29T20:08:00.005-03:00</published><updated>2008-10-29T20:47:53.375-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='brisa'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>BRisa UPnP Framework</title><content type='html'>&lt;b&gt;BRisa&lt;/b&gt; is a UPnP framework for creating and managing UPnP devices, specially MediaServer/MediaRenderer. It offers a plugin architecture enabling new services such as Flickr, SHOUTCast, PicasaWeb, Orkut, FaceBook, Youtube and Canola as UPnP services.&lt;br /&gt;&lt;br /&gt;As a project decision, &lt;b&gt;BRisa&lt;/b&gt; team is now up to &lt;b&gt;faster&lt;/b&gt; releases (obviously with smaller increments).&lt;br /&gt;&lt;br /&gt;Concerning versions, heres an update:&lt;br /&gt;&lt;ul type=SQUARE&gt;&lt;br /&gt;&lt;li&gt;python-brisa 0.7.0 (22 Oct 2008): finished, packaged, ready for shipping (project page[1], blogs and lists) - will be released sometime during this week&lt;/li&gt;&lt;br /&gt;&lt;li&gt;python-brisa 0.7.1 (28 Oct 2008): finished but not tagged yet&lt;/li&gt;&lt;br /&gt;&lt;li&gt;python-brisa 0.7.2 (development)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Changelog will soon be posted, but for the eager there's one &lt;a href="https://garage.maemo.org/plugins/scmsvn/viewcvs.php/trunk/python-brisa/CHANGES?root=brisa&amp;view=markup"&gt;few-hours-old version&lt;/a&gt; which will be updated asap.&lt;br /&gt;&lt;br /&gt;[1] - &lt;a href="http://garage.maemo.org/projects/brisa"&gt;Project Page&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-3114645345003659207?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3114645345003659207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3114645345003659207' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3114645345003659207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3114645345003659207'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/10/brisa-upnp-framework.html' title='BRisa UPnP Framework'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-6415199550300873342</id><published>2008-10-22T06:12:00.003-03:00</published><updated>2008-10-22T06:22:20.807-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Simple GIT vs SVN</title><content type='html'>Tired of all those detailed technical reasons why Git is better than SVN? Yeah, me too. &lt;a href="http://markmcb.com/2008/10/18/3-reasons-to-switch-to-git-from-subversion/"&gt;This article&lt;/a&gt; showed up on &lt;a href="http://www.slashdot.org"&gt;slashdot&lt;/a&gt; to change that. It explains how Git works with development (branching, collaboration, stashing) and compares it with how you would do it using SVN. Soon I'll have "jumped on the Git bandwagon". :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-6415199550300873342?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/6415199550300873342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=6415199550300873342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6415199550300873342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6415199550300873342'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/10/simple-git-vs-svn.html' title='Simple GIT vs SVN'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-7323984643092774079</id><published>2008-10-21T15:02:00.002-03:00</published><updated>2008-10-21T15:06:04.366-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Embedded lab. now with pastebin</title><content type='html'>That's it! Embedded now has a pastebin. It is a very useful resource for developers and thanks to &lt;span style="font-style: italic;"&gt;bozo&lt;/span&gt; (support team) we now have one.&lt;br /&gt;&lt;br /&gt;Address: &lt;a href="http://pastebin.embedded.ufcg.edu.br/"&gt;http://pastebin.embedded.ufcg.edu.br/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-7323984643092774079?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/7323984643092774079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=7323984643092774079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7323984643092774079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7323984643092774079'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/10/embedded-lab-now-with-pastebin.html' title='Embedded lab. now with pastebin'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-443395920530252181</id><published>2008-09-09T21:44:00.000-03:00</published><updated>2008-09-09T21:49:59.941-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Next personal project!</title><content type='html'>http://www.cheaphack.net/2008/01/turing-alarm-clock.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-443395920530252181?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/443395920530252181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=443395920530252181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/443395920530252181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/443395920530252181'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/09/next-personal-project.html' title='Next personal project!'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-876915405745877872</id><published>2008-09-01T16:16:00.003-03:00</published><updated>2008-09-01T16:31:29.523-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Enlightenment: CVS to SVN</title><content type='html'>(not so) recently the &lt;a href="enlightenment.org"&gt;enlightenment project&lt;/a&gt; changed its repository from cvs to svn.&lt;br /&gt;&lt;br /&gt;For the interested, there's already an adapted version of easy_e17 available &lt;a href="http://omicron.homeip.net/files/easy_e17_svn_preview.sh"&gt;here&lt;/a&gt;. It does all the dirty work for you (checkout/update/install/merge/fix-conflicts) and provides lots of options.&lt;br /&gt;&lt;br /&gt;Have fun :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-876915405745877872?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/876915405745877872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=876915405745877872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/876915405745877872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/876915405745877872'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/09/enlightenment-cvs-to-svn.html' title='Enlightenment: CVS to SVN'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-4304543304237074422</id><published>2008-08-10T17:41:00.003-03:00</published><updated>2008-08-13T16:32:46.501-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Final Lap</title><content type='html'>Two weeks, seven tests, nine reports, much coffee and less sleeping.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-4304543304237074422?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/4304543304237074422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=4304543304237074422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4304543304237074422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4304543304237074422'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/08/final-lap.html' title='Final Lap'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-3681017537477072622</id><published>2008-07-23T18:50:00.003-03:00</published><updated>2008-07-23T19:04:35.526-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Wishes</title><content type='html'>Keeping me busy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Experimental Physics experiment report (six!)&lt;/li&gt;&lt;li&gt;Physics III (lots of tests)&lt;/li&gt;&lt;li&gt;BRisa webserver and bug hunt/fix for the next release&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Other subjects tests (Mechanics, Calculus III)&lt;/li&gt;&lt;li&gt;Formatting and setting up my laptop again&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I wish I had time for:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Play with EFL, code for edje_editor&lt;/li&gt;&lt;li&gt;Learn QT, gst, &lt;a href="http://code.google.com/p/protobuf/"&gt;protocol buffers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Configure my gentoo server&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Playing StarCraft&lt;/li&gt;&lt;li&gt;Learning new useful stuff (and posting them here, obviously)&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/9210580920169500129-3681017537477072622?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3681017537477072622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3681017537477072622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3681017537477072622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3681017537477072622'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/07/wishes.html' title='Wishes'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-7358422369503619320</id><published>2008-07-19T03:49:00.004-03:00</published><updated>2008-07-19T04:44:07.727-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='brisa'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python objects evaluating to False</title><content type='html'>&lt;div style="text-align: justify;"&gt;Hi! Today I'm writing here to relate a little problem I had today, its fix and a lesson learned! [Thanks 'fumanchu' at &lt;a href="irc://irc.oftc.net/cherrypy"&gt;#cherrypy&lt;/a&gt; for helping me debug some problems I was having with &lt;a href="http://brisa.garage.maemo.org/"&gt;BRisa&lt;/a&gt;'s webserver (the problem was not with CherryPy but debugging inside it made me find the problem on the webserver).]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The problem was that CherryPy wasn't finding (404) my resource, but it was there and it was exposed properly. Something else was keeping cherrypy from calling my handler. After some prints inside CherryPy, I found the bottom line of the problem: at &lt;span style="font-weight: bold;"&gt;_&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;cpdispatch&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Dispatcher&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;__call__&lt;/span&gt;. It had an evaluation of the handler function to be called, something like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if func:&lt;br /&gt;# Set the handler&lt;br /&gt;# ...&lt;br /&gt;else:&lt;br /&gt;# Raise NotFound exception (which leads to a 404 response)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So, the only possible explanation left was that my class was evaluating to &lt;span style="font-weight: bold;"&gt;False&lt;/span&gt;. I wasn't aware that python had this &lt;span style="font-weight: bold;"&gt;__nonzero__&lt;/span&gt; method and this was a very particular case where I needed it. Just to sum up the my situation, let one class be named A, and let B inherit from A and from "dict" (!). Then, if "B's dict" is empty, bool(B) will evaluate to False (&lt;a href="http://docs.python.org/lib/truth.html"&gt;doc&lt;/a&gt;). So, when CherryPy did that evaluation on my instance of B, it was evaluating to &lt;span style="font-weight: bold;"&gt;False&lt;/span&gt; and returning &lt;span&gt;404&lt;/span&gt;. One "fix" (not really a bug) to this is to overwrite &lt;span style="font-weight: bold;"&gt;__nonzero__&lt;/span&gt; and make it return &lt;span style="font-weight: bold;"&gt;True&lt;/span&gt; (if this is the behavior you really want).&lt;br /&gt;&lt;br /&gt;Lesson learned: be careful with inheritance!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-7358422369503619320?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/7358422369503619320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=7358422369503619320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7358422369503619320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7358422369503619320'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/07/python-objects-evaluating-to-false.html' title='Python objects evaluating to False'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-2315807612096701621</id><published>2008-07-18T14:54:00.000-03:00</published><updated>2008-07-18T14:55:46.230-03:00</updated><title type='text'>Important (for brazilians)</title><content type='html'>&lt;a href="http://www.petitiononline.com/veto2008/petition.html"&gt;http://www.petitiononline.com/veto2008/petition.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-2315807612096701621?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/2315807612096701621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=2315807612096701621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2315807612096701621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2315807612096701621'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/07/important-for-brazilians.html' title='Important (for brazilians)'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-5265078423642229557</id><published>2008-06-25T07:35:00.002-03:00</published><updated>2008-06-25T07:37:55.485-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Symbian to Go Open Source, Nokia plans to purchase Symbian</title><content type='html'>&lt;blockquote&gt;Nokia recently announced its &lt;a href="http://ostatic.com/166030-blog/symbian-to-go-open-source-nokia-to-buy-out-symbian-shares"&gt;plans to purchase Symbian&lt;/a&gt; and formed the &lt;a href="http://www.symbianfoundation.org/"&gt;Symbian Foundation&lt;/a&gt; with the intention opening the software platform over the next two years. Symbian is already present on 60% of all cellphones in the world. With such a massive install base, open source Symbian has a much better chance of taking off than platforms like &lt;a href="http://www.mahalo.com/Android"&gt;Android&lt;/a&gt;, which are starting on the ground floor.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;Source: &lt;a href="http://www.hackaday.com/2008/06/24/open-source-symbian/"&gt;http://www.hackaday.com/2008/06/24/open-source-symbian/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-5265078423642229557?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/5265078423642229557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=5265078423642229557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5265078423642229557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/5265078423642229557'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/06/symbian-to-go-open-source-nokia-plans.html' title='Symbian to Go Open Source, Nokia plans to purchase Symbian'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-3103996578372211920</id><published>2008-06-23T01:04:00.000-03:00</published><updated>2008-06-23T01:44:12.654-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='edje_editor'/><category scheme='http://www.blogger.com/atom/ns#' term='brisa'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='efl'/><title type='text'>Dependency removal &amp; others</title><content type='html'>&lt;div style="text-align: justify;"&gt;It's been a while since the last time I wrote here. I'm now working on &lt;a href="http://brisa.garage.maemo.org/"&gt;BRisa&lt;/a&gt; project at &lt;a href="http://www.embedded.ufcg.edu.br/"&gt;embedded.&lt;/a&gt; It's a very interesting project and I'm very excited about this change. I've been removing &lt;a href="http://twistedmatrix.com/"&gt;twisted&lt;/a&gt; dependency out of BRisa because of its long loading time, and it's working (the modified parts), although I haven't tested it on Maemo devices yet. I got some trouble finishing BRisa's WebServer, but I think it's really close now.&lt;br /&gt;&lt;br /&gt;Moving on to another subject, &lt;a href="http://wiki.enlightenment.org/index.php/Edje_Editor"&gt;Edje Editor&lt;/a&gt; occupied my spare time for the last two weeks, it's been fun exploring its (and Edje's) source code and actually doing some code myself! DaveMDS really made it easy for me commenting out the code and writing some samples, thanks man!&lt;br /&gt;&lt;br /&gt;Comments and ideas are welcome!&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/9210580920169500129-3103996578372211920?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/3103996578372211920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=3103996578372211920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3103996578372211920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/3103996578372211920'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/06/dependency-removal.html' title='Dependency removal &amp; others'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-7831495328449880982</id><published>2008-06-17T21:09:00.000-03:00</published><updated>2008-06-17T21:10:48.407-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title type='text'>Captchas</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img241.imageshack.us/img241/5426/rapidsharebx1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://img241.imageshack.us/img241/5426/rapidsharebx1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-7831495328449880982?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/7831495328449880982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=7831495328449880982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7831495328449880982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7831495328449880982'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/06/captchas.html' title='Captchas'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-2105838211199834243</id><published>2008-05-03T03:56:00.000-03:00</published><updated>2008-05-25T22:16:54.562-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='guides'/><category scheme='http://www.blogger.com/atom/ns#' term='efl'/><title type='text'>Alternative way for installing EFL</title><content type='html'>This worked just fine with Ubuntu 8.04. First, add the repository from &lt;a href="http://genuinepulse.blogspot.com/2008/03/enlightenment-on-ubuntu-gutsy.html"&gt;this older guide &lt;/a&gt;with your respective ubuntu version. Then...&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;sudo apt-get install libevas0 libecore0 libedje0 libedje-bin libeet0 libeet-bin libewl1 libetk1 libemotion0 libepsilon0 libefreet0 efl-dev e17-devel-extras &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you have installed the needed libraries from &lt;a href="http://genuinepulse.blogspot.com/2008/03/building-base-for-developing-with-efl.html"&gt;this post&lt;/a&gt; (the first command listed), then you should be able to compile anything checked out from cvs.&lt;br /&gt;&lt;br /&gt;Just did this on a fresh machine and compiled the python-bindings with almost no effort. Better than compiling everything by hand :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*EDIT* had to run "apt-get install libevas*" because some engine stuff didn't come with the previous command.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-2105838211199834243?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/2105838211199834243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=2105838211199834243' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2105838211199834243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/2105838211199834243'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/05/alternative-way-for-installing-efl.html' title='Alternative way for installing EFL'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-6743042518889503325</id><published>2008-04-30T18:58:00.000-03:00</published><updated>2008-04-30T19:03:13.609-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='efl'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Pindaiba 0.0.0 released!</title><content type='html'>&lt;a href="https://garage.maemo.org/projects/pindaiba/"&gt;Pindaiba &lt;/a&gt;has been released at his garage homepage. It's a financial calculator for maemo, implemented using python and the GUI uses Edje|Evas.&lt;br /&gt;&lt;br /&gt;As Thiago said on the release note @ garage, test it, find bugs and report them please! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-6743042518889503325?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/6743042518889503325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=6743042518889503325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6743042518889503325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/6743042518889503325'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/04/pindaiba-000-released.html' title='Pindaiba 0.0.0 released!'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-4913796519964847331</id><published>2008-03-30T19:26:00.000-03:00</published><updated>2008-03-31T00:37:42.152-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='guides'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Building the base for developing with EFL</title><content type='html'>This post describes how to build e17 libraries and the python bindings, getting the base for developing on EFL :).&lt;br /&gt;&lt;br /&gt;In this first moment, sit back and relax, it might take a while to download the needed packages:&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;&lt;br /&gt;sudo aptitude install build-essential cvs libtool libltdl3-dev automake1.9 autotools-dev libpopt-dev libcurl3-dev libx11-dev x11proto-xext-dev libbz2-dev libid3tag0-dev libpng12-dev libtiff4-dev libungif4-dev libjpeg62-dev libssl-dev libfreetype6-dev bison flex gettext libimlib2-dev libxml2-dev libxcursor-dev libgtk1.2-dev autoconf pkg-config libxine-dev sqlite3 libsqlite3-dev libtagc0-dev libtag1-dev giblib-dev libxcomposite-dev xorg-dev fort77 python2.5-dev libedbus0-dev python-pyrex&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After that, you can run the &lt;a href="http://omicron.homeip.net/projects/easy_e17/easy_e17.sh"&gt;easy_e17.sh&lt;/a&gt; script. It will checkout from CVS and compile the libraries. Before running, set it +x with chmod (&lt;span style="font-style:italic;"&gt;chmod +x easy_e17.sh&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The alternative building method is to manually checkout and compile the modules. Instead of the script, I chose this alternative, because when the script stops in one library, you'll have to run it again, and I guess it starts from the beginning again (or not!). By going manual, you can see what dependency is missing and install it.&lt;br /&gt;&lt;br /&gt;If you prefer to go manual, start by checking out from the CVS (this step should take a while):&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;cvs -z3 -d :pserver:anonymous@anoncvs.enlightenment.org:/var/cvs/e co e17&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After that, cd to the &lt;span style="font-style:italic;"&gt;e17/libs&lt;/span&gt; dir and compile (the libraries in this order:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;imlib, eet, evas, ecore, epeg, embryo, edje, epsilon, esmart, efreet, ewl, emotion, edb, etk&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With the following commands (replace libfolder :)):&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;cd libfolder&lt;br /&gt;./autogen.sh&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After you compiled all these libraries, cd to &lt;span style="font-style:italic;"&gt;e17/proto&lt;/span&gt; and compile the apps you want to use. I myself installed edje_editor, edje_cc and python-efl. I compiled these apps. with the commands above (for installing the libraries). If you want to compile the python-efl bindings, first install Cython (&lt;a href="http://www.cython.org/Cython-0.9.6.12.tar.gz"&gt;Download&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;tar -zxvf Cython-0.9.6.12.tar.gz&lt;br /&gt;cd Cython-0.9.6.12/&lt;br /&gt;python setup.py install&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Then you should cd to the directory and run the install script:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;cd e17/proto/python-efl&lt;br /&gt;sudo ./build-all.sh /usr&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Test it by importing "evas" or "ecore" on the python command line :).&lt;br /&gt;&lt;br /&gt;If you missed any library install earlier, it will be accused here clearly, so, you go back and install it the same way you installed the others. If you've got problem with dependencies, try googleing it with your distribution name appended (e.g. "ltdl.h + Ubuntu"). By doing that, you may find the package with includes the dependency (or the package-dependency itself) and you can install it via apt-get or aptitude.&lt;br /&gt;&lt;br /&gt;If you googled it, asked on #e (freenode.org), prayed, cursed god and done every step here, but you can't still get something compiled, you can leave a comment ;-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Good luck! (you'll probably need it :))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-4913796519964847331?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/4913796519964847331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=4913796519964847331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4913796519964847331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/4913796519964847331'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/03/building-base-for-developing-with-efl.html' title='Building the base for developing with EFL'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-727130648520551969</id><published>2008-03-29T13:46:00.000-03:00</published><updated>2008-03-30T20:30:54.325-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='guides'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Enlightenment 17 on Ubuntu (Gutsy): Theme and Entrance</title><content type='html'>I found myself Enlightenment 17 default theme kinda weird, not ugly, but weird. There is a pretty common theme called &lt;a href="http://e17artwork.tuxfamily.org/images/themes/BlackTheme.edj"&gt;BlackTheme&lt;/a&gt;, it looks very nice on the Desktop, you should try it out :). To install it, you can &lt;span style="font-style:italic;"&gt;left click&lt;/span&gt; on your desktop, then go &lt;span style="font-style:italic;"&gt;Cofiguration -&gt; Theme&lt;/span&gt; and import the theme browsing. It will automatically copy it into E theme folder (which is ~/.e/e/themes).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now for the login manager, I must say I always wanted a different one from GDM. Entrance showed itself a great solution and if you want to install it, just type on the terminal (supposing you have the correct repository from the &lt;a href="http://genuinepulse.blogspot.com/2008/03/enlightenment-on-ubuntu-gutsy.html"&gt;previous post&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;sudo apt-get install entrance&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;At the end of the installation, it should ask you which login manager you want to use, obviously, choose Entrance :). The default Entrance theme is also weird so I'm using &lt;a href="http://e17artwork.tuxfamily.org/images/entrance/Entrance_BlackTheme.edj"&gt;Entrance_BlackTheme&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;In order to install it, cd to the download directory and execute this in the terminal:&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt; &lt;br /&gt;cp Entrance_BlackTheme.edj /usr/share/entrance/&lt;br /&gt;sudo entrance_edit --theme Entrance_BlackTheme.edj&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This will set the theme to the new one. I think you'll need to reboot in order to see the new login 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/9210580920169500129-727130648520551969?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/727130648520551969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=727130648520551969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/727130648520551969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/727130648520551969'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/03/enlightenment-17-on-ubuntu-gutsy-theme.html' title='Enlightenment 17 on Ubuntu (Gutsy): Theme and Entrance'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-7517141973942779677</id><published>2008-03-28T18:08:00.000-03:00</published><updated>2008-03-29T14:07:06.724-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='guides'/><category scheme='http://www.blogger.com/atom/ns#' term='enlightenment'/><title type='text'>Enlightenment 17 on Ubuntu (Gutsy): Installing</title><content type='html'>Run (terminal):&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;&lt;br /&gt;wget http://lut1n.ifrance.com/repo_key.asc&lt;br /&gt;sudo apt-key add repo_key.asc&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The file should be downloaded and after the second command an "OK" message should be printed out.&lt;br /&gt;&lt;br /&gt;Append the following to /etc/apt/sources.list:&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;&lt;br /&gt;deb http://e17.dunnewind.net/ubuntu gutsy e17&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Run as root:&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;&lt;br /&gt;apt-get update&lt;br /&gt;apt-get install e17&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;It should install just fine.&lt;br /&gt;&lt;br /&gt;(Planning on a post with config. tips and tweaking)&lt;br /&gt;&lt;br /&gt;Note: If you're using feisty or hardy, changing 'gutsy' to yours will probably work (since they're on the &lt;a href="http://e17.dunnewind.net/ubuntu/dists/"&gt;repository&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9210580920169500129-7517141973942779677?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/7517141973942779677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=7517141973942779677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7517141973942779677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/7517141973942779677'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/03/enlightenment-on-ubuntu-gutsy.html' title='Enlightenment 17 on Ubuntu (Gutsy): Installing'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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-9210580920169500129.post-1731580154494840347</id><published>2008-03-22T18:05:00.002-03:00</published><updated>2009-06-06T13:55:44.763-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>About Me</title><content type='html'>&lt;div style="text-align: left;"&gt;Hi, my name is André Dieb Martins, I'm an Electrical Engineering undergraduate student at &lt;a href="http://ufcg.edu.br/"&gt;UFCG&lt;/a&gt; (Universidade Federal de Campina Grande - PB, Brazil).&lt;br /&gt;&lt;br /&gt;I'm currently participating in research projects at &lt;a href="http://embedded.ufcg.edu.br/"&gt;Embedded&lt;/a&gt; (Laboratory of Embedded Systems and Pervasive Computing) and on Google Summer of Code 2009.&lt;br /&gt;&lt;br /&gt;My research interests are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Software Development&lt;/li&gt;&lt;li&gt;&lt;span&gt;Embedded Systems&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Industrial Automation&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Mobile related subjects&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;CV: &lt;a href="http://buscatextual.cnpq.br/buscatextual/visualizacv.jsp?id=K4201778E6"&gt;Portuguese&lt;/a&gt;, &lt;a href="http://buscatextual.cnpq.br/buscatextual/visualizacv.jsp?id=K4201778E6&amp;amp;idiomaExibicao=2"&gt;English&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(updated on 6 June 2009)&lt;/span&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/9210580920169500129-1731580154494840347?l=genuinepulse.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://genuinepulse.blogspot.com/feeds/1731580154494840347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9210580920169500129&amp;postID=1731580154494840347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1731580154494840347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9210580920169500129/posts/default/1731580154494840347'/><link rel='alternate' type='text/html' href='http://genuinepulse.blogspot.com/2008/03/about-me.html' title='About Me'/><author><name>André Dieb Martins</name><uri>http://www.blogger.com/profile/00818132770105735861</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>
