tag:blogger.com,1999:blog-18926319997686202592023-03-18T04:39:49.452-04:00The Perpetual NotionVarious ramblings by Christopher FriedtAnonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.comBlogger155125tag:blogger.com,1999:blog-1892631999768620259.post-45075889042727762522016-12-02T13:46:00.000-05:002016-12-02T14:01:46.700-05:00Dear Canada Post..<div class="separator" style="clear: both; text-align: center;">
<a href="https://pbs.twimg.com/profile_images/565896833726046209/qh9PYzb8.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://pbs.twimg.com/profile_images/565896833726046209/qh9PYzb8.png" width="200" /></a></div>
Hi,<br />
<br />
a) Your website is broken. When I check the box that says "Want to track your service ticket status online? Provide a few more details to sign up.", and click "Continue" I get a blank web page rather than a form that allows me to enter more details.<br />
<br />
b) The person who delivers parcels to us should be FIRED from their job<br />
<br />
Steps to reproduce, EVERY SINGLE TIME:<br />
1) Stay home expecting important delivery<br />
2) listen for knock at the door and / or doorbell<br />
3) leave notes to Please knock / ring doorbell / LEAVE PACKAGE HERE<br />
4) LEAVE THE DOOR WIDE OPEN<br />
<br />
Expected Results:<br />
* Parcel delivery person knocks and / or rings doorbell and / or leaves package at door and / or delivers package to recipient.<br />
<br />
Actual Results:<br />
* Parcel NEVER delivered<br />
* Notification not left (sometimes)<br />
<br />
WHY IS IT THAT THE CANADA POST DELIVERY PERSON DOES NOT EVEN MAKE AN ATTEMPT TO DELIVER PARCELS? DON'T EVEN BOTHER LOADING PARCELS ONTO THE TRUCK, AND YOU CAN SIMPLY FIRE THE DRIVER.<br />
<br />
Hopefully the above should be concise enough to fit within your 1000 character limit (it does, I checked).Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0Toronto, ON, Canada43.653226 -79.38318429999998243.2856095 -80.028631299999986 44.020842499999993 -78.737737299999978tag:blogger.com,1999:blog-1892631999768620259.post-47233454549987107922016-02-06T12:18:00.001-05:002016-02-06T12:20:13.305-05:00Managing Projects with GNU Make<a href="https://drive.google.com/file/d/0B99lnkytB9SaTnF4UXROOGpKLU0/view?usp=sharing" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt=" Managing Project with GNU Make" border="0" height="320" src="https://3.bp.blogspot.com/-JbuIbPliCX8/VrYpfaeZ0oI/AAAAAAAAvHM/nAoo8DjxS6M/s320/cover.jpg" width="244" /></a>In spite of the dozens of small projects that attempt to displace it, there are few that could in fact replace the ubiquitous <a href="https://www.gnu.org/software/make/">GNU Make</a>.<br />
<br />
A particularly great book at describing <a href="https://www.gnu.org/software/make/">GNU Make</a> is <a href="http://www.oreilly.com/openbook/make3/book/index.csp"><i><b>Managing Projects with GNU Make</b></i></a>, which is published by <a href="http://www.oreilly.com/">O'Reilly</a> freely under their <a href="http://www.oreilly.com/openbook/">Open Books Project</a>. In fact, the book itself is distributed under the <a href="http://www.gnu.org/licenses/fdl-1.3.en.html">GNU Free Documentation License</a> which allows me to redistribute an unmodified version of the documentation.<br />
<br />
I took the liberty of assembling all of the individual chapters of this document into <a href="https://drive.google.com/file/d/0B99lnkytB9SaTnF4UXROOGpKLU0/view?usp=sharing">one cohesive pdf file</a> with TOC links to individual chapters as well as bookmarks. While there are some particularly advanced topics that I could probably add a section on based on my extensive hacking of <a href="https://github.com/cfriedt/bionic">The Bionic C Library</a> alone (e.g. the <a href="http://elinux.org/Android_Build_System">Android Build System</a>, or <a href="https://autotools.io/automake/nonrecursive.html">Nonrecursive Automake</a>), I have not modified the <i>documentation</i> in any way, I have just added meta-information to it<span style="font-size: xx-small;">*</span>.<br />
<br />
Some improvements I could see being made to the meta-information are below.<br />
<br />
<ol>
<li>inter-section references (i.e. links made to a different section from within the text of another)</li>
<li>Index links (i.e. links to the exact page for each entry in the index)</li>
</ol>
<br />
If you are able to volunteer to make those improvements and share your changes, I would be happy to redistribute them here.<br />
<br />
If you like this book, I encourage you to <a href="http://shop.oreilly.com/product/9780596006105.do">buy a hard copy</a>, or if you feel like GNU Make has benefitted you enough, please <a href="https://my.fsf.org/donate/">donate to the Free Software Foundation</a>.<br />
<br />
<span style="font-size: xx-small;">*I have added the cover to that file as well, so please inform me if I have in any way violated the spirit of the license and I will remove it.</span>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-38195360364918699432015-04-12T23:40:00.001-04:002015-04-12T23:51:31.372-04:00Play with VMFlexArrayI explained VMFlexArray in my <a href="http://perpetual-notion.blogspot.ca/2015/02/mappedbytebufferhurray-programming.html">last post</a>, and went to some effort to get it approved as <a href="http://icedtea.classpath.org/wiki/GSoC2015#VMFlexArray_for_OpenJDK_.28IcedTea.29">a topic</a> for this years <a href="http://code.google.com/soc">Google Summer of Code</a>, kindly under the umbrella of the <a href="http://www.gnu.org/software/soc-projects/ideas-2015.html">GNU Project</a>, <a href="http://classpath.org/">Classpath</a>, and <a href="http://icedtea.classpath.org/">IcedTea</a>.<br />
<div>
<br /></div>
<div>
Judging from the fact that only one Google Summer of Code student proposed to work on VMFlexArray, it seems as though the concepts might be difficult for students to conceptualize.</div>
<div>
<br /></div>
<div>
For that reason, I built a small <a href="https://www.vmware.com/">VMWare</a> image that anyone can freely <a href="https://drive.google.com/file/d/0B99lnkytB9SabGNBU1NDc3hqXzQ/view?usp=sharing">download</a> to experiment with VMFlexArray.</div>
<div>
<br /></div>
<div>
In the process of doing so, I also converted FB4J to use <a href="http://en.wikipedia.org/wiki/Java_Native_Access">JNA</a> instead of <a href="http://en.wikipedia.org/wiki/Java_Native_Interface">JNI</a>, and I'm very glad I did. The average refresh rate has now gone up by a significant factor to above 40 fps, and I haven't even begun to optimize anything.</div>
<div>
<br /></div>
<div>
The way I would suggest someone begin experimenting with VMFlexArray is as follows:</div>
<div>
<ol>
<li><a href="https://drive.google.com/file/d/0B99lnkytB9SabGNBU1NDc3hqXzQ/view?usp=sharing">Download</a> and uncompress the VMWare image (there is a .vmdk inside the .vmwarevm folder for those who do not use Mac OS X / VMWare Fusion)</li>
<li>Run the VMFlexArrayLinux virtual machine</li>
<li>Log in with user 'root' and an empty password</li>
<li>Run 'ifconfig eth0' and write down the IP address</li>
<li>Open a terminal session on the host OS and ssh into the IP address from above (i.e. ssh root@[ip_addr])</li>
<li>run the demo ./fb4jdemo</li>
</ol>
<div>
You should see a white background and some colourful balls bouncing around on the VMWare's virtual SVGA II device.</div>
<div>
<br /></div>
<div>
I hope you're curious enough to begin to dissect the demo being run.</div>
<div>
<br /></div>
<div>
After some investigation, it should become obvious that <a href="http://jamvm.sourceforge.net/">JamVM</a> and Classpath are being used under the hood for java. One might also notice that there is a java compiler (javac) in the image courtesy of <a href="http://blog.deepakazad.com/2010/05/ecj-eclipse-java-compiler.html">Eclipse Compiler for Java</a> (ecj). Some clever people will probably also notice /var/db/pkg.sqfs, which is a <a href="http://en.wikipedia.org/wiki/SquashFS">SquashFS</a> version Gentoo's database of installed packages (tying all installed free software back to source repositories).</div>
</div>
<div>
<br /></div>
<div>
Then, please take note that there is a portage overlay located at /usr/local/portage/java_overlay, as well as a patch located in /usr/src. The portage overlay represents changes required to demonstrate VMFlexArray using jamvm and gnu classpath. The patch in /usr/src represents the one patch required to perform double-buffering using the VMWare frame buffer.</div>
<div>
<br /></div>
<div>
I went to some length to ensure that my patch set was easy to reproduce. Therefore, all required changes to JamVM are located in my <a href="https://github.com/cfriedt/jamvm/tree/feature/vmflexarray-demo">feature/vmflexarray-demo</a> branch, and all required Classpath changes are located in my <a href="https://github.com/cfriedt/classpath/tree/feature/vmflexarray-demo">feature/vmflexarray-demo</a> branch. Also, all required changes to <a href="https://kenai.com/projects/jna-posix">JNA-Posix</a> are in my branch <a href="https://github.com/cfriedt/jna-posix/tree/feature/ioctl">feature/ioctl</a>.</div>
<div>
<br /></div>
<div>
My updated FB4J changes are currently in the <a href="https://github.com/cfriedt/fb4j/tree/feature/jna">feature/jna</a> branch. These changes mean that FB4J does not require any of its own native components. They will be merged into master eventually, but I just need to a) clean up the README, and b) possibly machine-generate enums and constants from /usr/src/linux/fb.h</div>
<div>
<br /></div>
<div>
This is where it gets fun.</div>
<div>
<br /></div>
<div>
The next task in understanding VMFlexArray, for anyone who is curious, is to take the <a href="https://github.com/cfriedt/fb4j/blob/feature/jna/src/java/org/fb4j/Fb4jDemo.java">Fb4jDemo</a> code and modify it to draw a different video effect. The good news is that there is a built-in java compiler (ecj) in the VMWare image, so that's rather easy.</div>
<div>
<br /></div>
<div>
Next, do something with FB4J that I haven't done yet - use it to read a <a href="http://en.wikipedia.org/wiki/Video4Linux">Video 4 Linux</a> device ;-) This will require you to roll your own kernel and add UVC, V4L, and other modules in.</div>
<div>
<br /></div>
<div>
Here's a screenshot of my latest run. Don't forget to download the compressed VMWare image to experiment with from <a href="https://drive.google.com/file/d/0B99lnkytB9SabGNBU1NDc3hqXzQ/view?usp=sharing">here</a>.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-CCRKEPixvJ4/VSs20WgKY0I/AAAAAAAAbk0/zeSoiWrCKw4/s1600/Screen%2BShot%2B2015-04-12%2Bat%2B10.23.44%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-CCRKEPixvJ4/VSs20WgKY0I/AAAAAAAAbk0/zeSoiWrCKw4/s1600/Screen%2BShot%2B2015-04-12%2Bat%2B10.23.44%2BPM.png" height="214" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Happy frame buffer drawing!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In the mean time, I will continue to experiment on my end. Once I have some free time, I might attempt an <a href="http://openjdk.java.net/">OpenJDK</a> port of the VMFlexArray changes.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Please note that the software is still very beta - e.g. I am currently getting an undiagnosed segfault after some time. I believe I ran into this problem before I did a major cleanup of the code, and will review it when I have some time.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-8951362071426454542015-02-17T15:10:00.001-05:002015-03-06T22:42:32.140-05:00MappedByteBuffer.hurray()!: Programming the Linux Framebuffer in Java & VMFlexArray Explained<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-eN0b7qnGxUY/VNeN3QscPZI/AAAAAAAAX1w/I27pPR_YASY/s1600/FOSDEM-2015.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-eN0b7qnGxUY/VNeN3QscPZI/AAAAAAAAX1w/I27pPR_YASY/s1600/FOSDEM-2015.png"></a></div>
I recently travelled to Belgium to participate in <a href="https://fosdem.org/2015/">FOSDEM</a>. This year, I gave two presentations:<br>
<ul>
<li>MappedByteBuffer.hurray()!: Programming the Linux FrameBuffer in Java & VMFlexArray Explained. See <a href="https://fosdem.org/2015/schedule/event/mapped_byte_buffer/">here</a>.</li>
<li>Internet of #allthethings: Using GNURadio Companion to Interact with an IEEE 802.15.4 Network. See <a href="https://fosdem.org/2015/schedule/event/iot_sdr/">here</a>.</li>
</ul>
<div>
The topic of this post will focus on the former. Specifically, VMFlexArray.</div>
<div>
<br></div>
<div>
Currently, there is no Java Virtual Machine in existence that allows a developer to reference off-heap memory regions as Java arrays - e.g. via byte[] or int[]. That is, all java arrays that the VM deals with must be contiguously allocated at instantiation time.<br>
<br>
What I mean by that, is that when the VM instantiates an integer array object, e.g. <b>int[] x = new int[ length ]</b>, it typically allocates memory (now careful, I'm going to use some C teriminology here) for an object struct (2 uintptr_t in JamVM) which represents the instance of the int[] object, followed by 1 uintptr_t, which represents the length of the int[] object, followed by exactly length uintptr_t items (on a 32-bit machine) or length / 2 uintptr_t items (on a 64-bit machine) to represent the data.<br>
<br>
<h3>
VMFlexArray</h3>
<br>
VMFlexArrays are slightly different. For the same case as above, where a new int[] is allocated on the Java heap, the VM would allocate an object struct (2 uintptr_t in JamVM) which represents the instance of the int[] object, followed by 1 uintptr_t to represent the length of the int[] object, followed by 1 uintptr_t <i style="font-weight: bold;">to point to</i> the int[] data, followed by the data itself.<br>
<br>
What makes VMFlexArrays different, and what makes them <b style="font-style: italic;">flexible</b> (and arguably way better than what most JVMs use today) is that they include that extra uintptr_t to point to the data which could exist <i>anywhere</i> in virtual memory. That means, obviously, VMFlexArrays can point to contiguous data that the JVM would allocate for a regular array, but it also means that it can point to an arbitrary location - and <i>still</i> cooperate with the garbage collector. Indeed, the object lifecycle remains unchanged for VMFlexArrays if the garbage collector avoids releasing memory regions with free(3) if the VMFlexArray pointer does not point to the next contiguous memory address.<br>
<br>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-skXbEBBC4Dw/VOOZxg3YfkI/AAAAAAAAYVg/s6-Va6uJyms/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B2.42.43%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-skXbEBBC4Dw/VOOZxg3YfkI/AAAAAAAAYVg/s6-Va6uJyms/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B2.42.43%2BPM.png" height="125" width="320"></a></div>
<br>
VMFlexArray is a solution I came up with that allows one integrate off-heap memory regions into the Java Virtual Machine - e.g. a native external thread that allocates memory using malloc(3), or pages mapped from a device such as /dev/video0 using mmap(2).<br>
<br></div>
<div>
<h3>
Buffer Views</h3>
</div>
<div>
<br>
Perhaps the aspect of VMFlexArrays that I found <i><b>most useful</b></i>, that I somehow forgot to mention during my talk, is that they rather trivially allow the following code snippet to work <b>as expected</b>. <b>Specifically, an IntBuffer derived from a ByteBuffer with a backing array <i>should</i> be able to provide an int[] backing array view of the same virtual memory.</b><br>
<b><br></b></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-ScGRD3OSheI/VON9Sf5tTMI/AAAAAAAAYVI/kbafBuvRuDI/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B12.40.28%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-ScGRD3OSheI/VON9Sf5tTMI/AAAAAAAAYVI/kbafBuvRuDI/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B12.40.28%2BPM.png" height="101" width="320"></a></div>
<br>
Currently this code, which should work pretty seamlessly, <b>fails miserably</b>.<br>
<br>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-ZrOafNnHeeQ/VON9musq92I/AAAAAAAAYVQ/0f7eYBV8QpM/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B12.42.08%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-ZrOafNnHeeQ/VON9musq92I/AAAAAAAAYVQ/0f7eYBV8QpM/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B12.42.08%2BPM.png" height="48" width="320"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-HH_GC60j4JA/VOOaeJJj3KI/AAAAAAAAYVo/Mjh4TH3wMvo/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B2.45.34%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-HH_GC60j4JA/VOOaeJJj3KI/AAAAAAAAYVo/Mjh4TH3wMvo/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B2.45.34%2BPM.png" height="224" width="320"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br></div>
ByteBuffers allow themselves to be viewed as IntBuffers or LongBuffers or ShortBuffers. Pretty brilliant! Well... if it worked it would be brilliant. The fact is, as shown above, one cannot wrap a byte[] into a ByteBuffer, view it as an IntBuffer, and then call IntBuffer.array() to get an int[] view of the original byte[]. That would make the NIO API complete, in my opinion, and this feature is sadly lacking.<br>
<br>
With VMFlexArrays, that problem is <a href="https://github.com/cfriedt/classpath/compare/use-sun-misc-unsafe-for-pointer-arrays">solved</a>.<br>
<br>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-Rs538xJ9i0A/VOOcb6TqIkI/AAAAAAAAYV0/-LuZEw60CNw/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B2.53.19%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-Rs538xJ9i0A/VOOcb6TqIkI/AAAAAAAAYV0/-LuZEw60CNw/s1600/Screen%2BShot%2B2015-02-17%2Bat%2B2.53.19%2BPM.png" height="131" width="320"></a></div>
<br>
I've even used this code to memory map the Linux FrameBuffer and animate a bunch of bouncing balls :-) It works quite well.<br>
<br>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-0NZhONzOLlk/VOOc-CakZoI/AAAAAAAAYV8/4jzo_DupcSk/s1600/balls.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-0NZhONzOLlk/VOOc-CakZoI/AAAAAAAAYV8/4jzo_DupcSk/s1600/balls.png"></a></div>
<br>
There's even a massive speedup associated with access to the underlying byte[] from a ByteBuffer and even more so viewing the ByteBuffer as an IntBuffer, with access to the underlying int[].<br>
<br>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-NR0hW6KoZD4/VOOd6RTOs8I/AAAAAAAAYWE/5u8TINCxT3E/s1600/jamvm_classpath_mappedbytebuffer_improvements.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-NR0hW6KoZD4/VOOd6RTOs8I/AAAAAAAAYWE/5u8TINCxT3E/s1600/jamvm_classpath_mappedbytebuffer_improvements.jpg" height="155" width="320"></a></div>
<br>
I am definitely interested in enabling these changes to make it into OpenJDK, and I feel that the community at large would benefit greatly from them. As my time is rather limited these days, I might prefer to mentor a student to make these changes in the <a href="https://developers.google.com/open-source/soc">Google Summer of Code</a>, 2015, if OpenJDK was a mentoring organization. Otherwise, I would be open to mentoring a student under the umbrella of JamVM or GNU Classpath as a mentoring organization.</div>
Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-90013292510831961552015-02-08T12:19:00.000-05:002015-02-08T12:19:07.846-05:00Internet of #allthethings: Using GNURadio Companion to Interact with an IEEE 802.15.4 Network<a href="http://fosdem.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-eN0b7qnGxUY/VNeN3QscPZI/AAAAAAAAX1s/waO2g-QMLu8/s1600/FOSDEM-2015.png" /></a>I recently travelled to Belgium to participate in <a href="https://fosdem.org/2015/">FOSDEM</a>. This year, I gave two presentations:<br />
<br />
<ul>
<li>MappedByteBuffer.hurray()! Programming the Linux Framebuffer in Java & VMFlexArray Explained. See <a href="https://fosdem.org/2015/schedule/event/mapped_byte_buffer/">here</a>.</li>
<li>Internet of #allthethings: Using GNURadio Companion to Interact with an IEEE 802.15.4 Network. See <a href="https://fosdem.org/2015/schedule/event/iot_sdr/">here</a>.</li>
</ul>
The topic of this post will focus on the latter.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://gnuradio.org/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-JXJIiso9TRg/VNeNp8_if4I/AAAAAAAAX1k/wEc_z-2GC64/s1600/gnuradio.png" height="91" width="320" /></a></div>
The gist of my talk was essentially that we have all of the tools available for us to quickly prototype all sorts of 802.15.4 devices. All that is needed is to integrate the following:<br />
<br />
<ul>
<li><a href="http://www.freaklabs.org/index.php/FreakZ-Open-Source-Zigbee-Stack.html">FreakZ</a>: A BSD-licensed <a href="http://zigbee.org/">ZigBee</a> stack (for non-commercial purposes)</li>
<ul>
<li>Easily modified to communicate to a GNURadio device via UDP (<a href="https://github.com/cfriedt/freakz">github</a>)</li>
<li>Note: this stack is <i>not</i> certified.</li>
</ul>
<li><a href="http://gnuradio.org/">GNURadio</a></li>
<ul>
<li>a great suite of tools to interact with <a href="http://en.wikipedia.org/wiki/Software-defined_radio">Software Defined Radio</a> (SDR) transceivers</li>
</ul>
<li>GNURadio <a href="http://standards.ieee.org/getieee802/download/802.15.4-2011.pdf">IEEE 802.15.4</a> Out Of Tree (OOT) module</li>
<ul>
<li><a href="https://github.com/bastibl/gr-ieee802-15-4">gr-ieee-802_15_4</a> is available today</li>
<li>based on work originally from UCLA</li>
<li>unofficially meets all of the mandatory requirements for the IEEE 802.15.4 PHY layer</li>
<li>meets some of mandatory requirements for the IEEE 802.15.4 MAC layer</li>
<li>lacking mandatory MAC features such as</li>
<ul>
<li>Beacon Management</li>
<li>Receive Beacons</li>
<li>Channel Access Mechanism</li>
<ul>
<li>Carrier Sense Multiple Access with Collision Avoidance (CSMA-CA)</li>
</ul>
<li>ACK Delivery</li>
<li>Security</li>
<li>Orphan Scanning</li>
<li>Store One Transaction</li>
</ul>
</ul>
</ul>
The primary barrier-to-entry for developers & researchers is most likely going to be the cost of an SDR. Even after buying an SDR that is capable of sampling at a sufficiently high rate around 2.4GHz, it still requires some minimal amount of investment in other 802.15.4 equipment such as ZigBee enabled thermostats, light bulbs, or gateways (I am only aware of ZigBee consumer products in the IEEE 802.15.4 market today).<br />
<br />
To assist would-be developers in overcoming that hurdle, what I have done is simply used my <a href="http://www.ettus.com/product/details/UB200-KIT">USRP B200</a> to record real-world 802.15.4 traffic produced from an <a href="http://www.silabs.com/products/wireless/zigbee/Pages/zigbee-chips-em35x.aspx">EM370</a> in <a href="http://www.silabs.com/Support%20Documents/TechnicalDocs/AN710.pdf">NodeTest</a> mode. This should easily facilitate offline signal processing using e.g. GNURadio (see File Source block), Matlab, <a href="https://www.gnu.org/software/octave/">Octave</a>, or any other programming language. The block diagram for doing so is depicted below. I have intentionally made all of my variables directly obvious.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-5SBM0HV6cyk/VNY0en_OlEI/AAAAAAAAXyQ/h9Y_phIz8BE/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.01.09%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-5SBM0HV6cyk/VNY0en_OlEI/AAAAAAAAXyQ/h9Y_phIz8BE/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.01.09%2BAM.png" height="123" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-Wd5rZd7FEoM/VNY0nH9SJ-I/AAAAAAAAXyY/yNrejMZtwKI/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.07.16%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-Wd5rZd7FEoM/VNY0nH9SJ-I/AAAAAAAAXyY/yNrejMZtwKI/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.07.16%2BAM.png" height="138" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Keep in mind, that the the files are rather large (433 MB compressed with LZMA2) as the samples are complex-float32 and I have oversampled at a rate of 4x (8M samples per second) intentionally to better facilitate SDR receiver design. You may find them <a href="http://goo.gl/BUEOyy">here</a>.<br />
<br />
The files are listed and described below:<br />
<br />
<ul>
<li>ieee802154-channel14-txtone-complex-float32.dat</li>
<ul>
<li>simply recording a tone at 2420 MHz in the presence of noise</li>
<li>note: there is a slight frequency offset which will need to be corrected</li>
</ul>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-BvTUK5eRey0/VNYzTFn4LFI/AAAAAAAAXx0/fYYpBaVM__k/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.04.26%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-BvTUK5eRey0/VNYzTFn4LFI/AAAAAAAAXx0/fYYpBaVM__k/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.04.26%2BAM.png" height="274" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-m5OWJ5fkS_k/VNY0o1Jqa3I/AAAAAAAAXyg/GjLYe3jdLxw/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.06.42%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-m5OWJ5fkS_k/VNY0o1Jqa3I/AAAAAAAAXyg/GjLYe3jdLxw/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.06.42%2BAM.png" height="165" width="320" /></a></div>
<br />
<ul>
<li>ieee802154-channel14-txstream-complex-float32.dat</li>
<ul>
<li>a continuous random stream of valid channel symbols</li>
</ul>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-NoNzm6vnnXs/VNYzp2MjYdI/AAAAAAAAXx8/_MEmG1AyQdo/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.10.00%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-NoNzm6vnnXs/VNYzp2MjYdI/AAAAAAAAXx8/_MEmG1AyQdo/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.10.00%2BAM.png" height="274" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-p8iCBNPe4cQ/VNY0qfIKTgI/AAAAAAAAXyo/0Wm-8AXItik/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.11.53%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-p8iCBNPe4cQ/VNY0qfIKTgI/AAAAAAAAXyo/0Wm-8AXItik/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.11.53%2BAM.png" height="165" width="320" /></a></div>
<br />
<ul>
<li>ieee802154-channel14-tx-complex-float32.dat</li>
<ul>
<li>a stream containing intermittent & full IEEE 802.15.4 frames</li>
<li>frames are sent once every 25500 us</li>
</ul>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-eqGjQ6LCCkI/VNYzxJR2VQI/AAAAAAAAXyE/Uy-rAChAy7E/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.14.05%2BAM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-eqGjQ6LCCkI/VNYzxJR2VQI/AAAAAAAAXyE/Uy-rAChAy7E/s1600/Screen%2BShot%2B2015-02-07%2Bat%2B8.14.05%2BAM.png" height="274" width="320" /></a></div>
<h4>
A Few Notes About the Current State of IEEE 802.15.4 in GNURadio</h4>
All of the open-source PHY implementations assume that Symbol and Timing Recovery (STR) is already performed. This is fine for simulation (depicted below).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-59WIbf0i38Y/VNeZKCWAmhI/AAAAAAAAX2Q/PKOVm4TQ2GM/s1600/Screen%2BShot%2B2015-01-11%2Bat%2B10.52.41%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-59WIbf0i38Y/VNeZKCWAmhI/AAAAAAAAX2Q/PKOVm4TQ2GM/s1600/Screen%2BShot%2B2015-01-11%2Bat%2B10.52.41%2BPM.png" height="287" width="320" /></a></div>
Indeed, clock recovery, frequency offset compensation, and phase offset compensation are often the <i>most</i> complicated part of real-world wireless receiver architectures. Without frequency compensation, the constellation diagram appears to move around the unit circle, as shown below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-PhfUGQEKEAU/VNeZGlmu9uI/AAAAAAAAX2I/nVxOvWVPhic/s1600/Screen%2BShot%2B2015-01-27%2Bat%2B3.47.03%2BPM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-PhfUGQEKEAU/VNeZGlmu9uI/AAAAAAAAX2I/nVxOvWVPhic/s1600/Screen%2BShot%2B2015-01-27%2Bat%2B3.47.03%2BPM.png" height="200" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
For those who would like to get started quickly, you may follow the <a href="http://gnuradio.org/redmine/projects/gnuradio/wiki/Guided_Tutorial_PSK_Demodulation">PSK Symbol Recovery</a> tutorial. Use a Polyphase Clock Sync block, followed by the "blind" Constant Modulus Algorithm (CMA) equalizer, followed by Costas Loop. The Polyphase Clock Sync takes the taps for the matched filter as an argument, the filter length, as well as the number of samples per channel symbol, and returns a configurable number of samples per symbol with a (somewhat) frequency-corrected clock. The CMA equalizer then forces all of the samples onto the unit circle, and finally the Costas Loop corrects the phase of the signal. This approach works well enough but it has some associated complexity. The clock recovery, frequency, and phase compensation work independently. It has been suggested that using the Least Mean Squared Decision-Directed (LMS-DD) equalizer could improve performance. The Polyphase Clock Sync block can be more accurate, sacrificing time in the receive chain due to increased complexity.<br />
<br />
However, since we already know the preamble of an IEEE 802.15.4 packet in the 2450 MHz ISM region, we are at liberty to implement a more sophisticated coherent architecture in our receiver. Specifically, due to the known preamble, we may use a Correlate and Sync block.<br />
<br />
I will be doing a bit more experimenting in the coming days and will post an update once available.Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-37561546138771523072012-09-27T12:21:00.000-04:002015-04-04T07:39:12.032-04:00Two Jedi-Fu Links for Installing Gentoo Quickly<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://t2.gstatic.com/images?q=tbn:ANd9GcRhjdrpYvWHN4nMKynwX_CsQupQzGlEGIrnDKaOKsJkEh9tYKWXuMsVasJc" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://t2.gstatic.com/images?q=tbn:ANd9GcRhjdrpYvWHN4nMKynwX_CsQupQzGlEGIrnDKaOKsJkEh9tYKWXuMsVasJc" /></a></div>
<div>
<br /></div>
<ol>
<li><a href="http://gentoo-en.vfose.ru/wiki/Install_LiveDVD_12.1_to_hard_disk_drive">Install LiveDVD to Hard Drive</a><br />(works with 12.1 too)</li>
<li><a href="http://www.gentoo-wiki.info/HOWTO_Remove_PAM">Remove Pam</a><br />(so passwordless root logins over SSH work)<br />(I typically use this for VMs when hacking Gentoo-ish stuff)<br />(... this is not the IP address you're looking for...)</li>
</ol>
Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com2tag:blogger.com,1999:blog-1892631999768620259.post-72967155734180054912012-06-15T01:41:00.001-04:002012-06-15T01:41:59.603-04:00What an Amazing Time Warp!<div><p>So when I was a teenager (years and years ago), my cousin John Muller & I played with Matt Howatt and a guy from Australia named Miles, and we covered the song Tinfoil by Limblifter. I played the bass, and Matt & John switched up for rhythm & lead guitar for every other song.</p>
<p>Tonight I had the privilege of seeing some of the original band from Limblifter playing in Hamilton.</p>
<p>It was a fantastic experience to be brought back to the music I loved in my youth and continue to love in adulthood.</p>
<p>Particularly, when I used to play this song, I played the bass, and I was certainly happy to meet the new female bass player tonight, who is certainly overqualified for this set. She has an MA I. Music specializing in the double bass. Aside from the cool factor of a 'chick' bassist, she was doing an amazing job with backup (and in some cases, lead) vocals.</p>
<p>This has probably been the best 'feel good' show for me this summer, thus far.</p>
<p>Thanks again  to Limblifter for putting on a full energy show!</p>
<br/><img src='http://lh5.ggpht.com/-NBS5leDjWl0/T9rLIwwLAsI/AAAAAAAADZM/rjNTZSmxF3o/PANO_20120614_233509.png' /></div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0Burlington, Burlington43.32552 -79.799034tag:blogger.com,1999:blog-1892631999768620259.post-54145754251135070622012-06-11T22:36:00.001-04:002012-06-11T22:37:17.165-04:00Cook Beans: Check ;-)<div><br/><img src='http://lh6.ggpht.com/-PDUrhFgXm7E/T9arOzpMOtI/AAAAAAAADZA/6U5OKxtavB4/IMG_20120611_223556.png' /></div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0Burlington, Burlington43.32552 -79.799034tag:blogger.com,1999:blog-1892631999768620259.post-58337683603416935312012-06-11T21:44:00.000-04:002012-06-11T22:16:37.873-04:00To Do: Cook Beans!<br />
<a href="http://1.bp.blogspot.com/-BS4gPXuepO4/T9aeUTTzPAI/AAAAAAAADYg/MNCvBfmnYdo/s1600/buy_more_beans.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/-BS4gPXuepO4/T9aeUTTzPAI/AAAAAAAADYg/MNCvBfmnYdo/s320/buy_more_beans.jpg" width="320" /></a>For anyone who thinks that going <a href="http://en.wikipedia.org/wiki/Veganism">vegan</a> is expensive... totally not the case.<br />
<br />
If you are vegan and <i><b>don't already own one</b></i>, or if you're considering going vegan and have no idea where to start, <b><i>investment #1 should be a <a href="http://en.wikipedia.org/wiki/Pressure_cooking">pressure cooker</a></i></b>. Not very many people (in Canada?) own one, but they're soooo common in India, and I've got my indian friends to thank for turning me on to mine.<br />
<br />
You can buy massive dried bags of lentils of various colours (dal), kidney beans (rajma), chick peas (chana), or black beans for next to nothing. Compare the contents of one bag ($4 maybe?) to the same mass of beans in 20 (?) cans of water for >= $1 each!<br />
<br />
And due to the simple equation from high school that most have forgotten, <a href="http://en.wikipedia.org/wiki/Ideal_gas_law">PV=nRT</a> [<a href="http://en.wikipedia.org/wiki/Ideal_gas_law">1</a>], you can cook dried gram at a much lower temperature if the pressure is increased (V, n, & R are held constant). This saves on electricity (or gas as the case may be). I'll be the first to admit, <b>I used to cook dried beans like a complete idiot and soak them overnight</b>, and then boil them for 5 hours or something. With a pressure cooker, there is no need to soak legumes overnight and cooking them takes about 1 hr. Most importantly, it completely seals in the flavour for whatever meal you have planned: burritos (like me), kaali, masoor, or tadka dal - or good, old-fashioned soups (e.g. lentil, split-pea)!<br />
<br />
A nice side effect: dried legumes take far less energy to transport than cans of legumes that are 60% salt and water; you're going <span style="color: #6aa84f;">green</span> [<a href="http://www.chooseveg.com/environment.asp">2</a>]!<br />
<br />
Naturally, not everyone has the proper body chemistry to be able to go vegan with great success, but here is one attractive figure that might catch your eye:<br />
<br />
<blockquote class="tr_bq">
Marathon runners should consume about 1.5 grams of protein per kg of body weight per day [<a href="http://therunningbug.co.uk/training/food-and-weight-loss/b/weblog/archive/2012/01/31/sources-of-protein-for-runners-spring-marathon-training-plan-part-5.aspx">3</a>].</blockquote>
<br />
For a 180 pound guy like me (~80kg according to Google's conversion), that's about 50g of chick peas. What is that for a total protein bill per day - about 25<span style="background-color: white; font-family: sans-serif; font-size: 12.727272033691406px; line-height: 19.09090805053711px;">¢ </span>??<br />
<br />
Not bad at all :)<br />
<br />
[1] <a href="http://en.wikipedia.org/wiki/Ideal_gas_law">The Ideal Gas Law</a> (Influences amazing things! E.g. how fast a pot of water takes to boil)<br />
[2] <a href="http://www.chooseveg.com/environment.asp"><em style="background-color: white; color: #222222; font-family: inherit; font-style: normal; white-space: nowrap;">Vegetarian Diets</em><span style="background-color: white; color: #222222; font-family: inherit; white-space: nowrap;"> </span><span style="background-color: white; color: #222222; font-family: inherit; white-space: nowrap;">Help Protect the</span><span style="background-color: white; color: #222222; font-family: inherit; white-space: nowrap;"> </span><em style="background-color: white; color: #222222; font-family: inherit; font-style: normal; white-space: nowrap;">Environment</em></a><br />
(As if you didn't already know how green a vegan diet is!!)<br />
[3] <a href="http://therunningbug.co.uk/training/food-and-weight-loss/b/weblog/archive/2012/01/31/sources-of-protein-for-runners-spring-marathon-training-plan-part-5.aspx">Sources of Protein for Runners: Spring Marathon Training Plan Part 5</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-U2XgtmvHJxk/T9amIa1xFvI/AAAAAAAADY0/KC_N9JpcDuI/s1600/surprised.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-U2XgtmvHJxk/T9amIa1xFvI/AAAAAAAADY0/KC_N9JpcDuI/s1600/surprised.jpg" /></a></div>
<span style="font-size: x-small;">Disclaimer: I'm not totally vegan these days (I now eat fish & other seafood), but I was for ~8 years or so. It was personal preference and the evolution of my diet. I like the great perspective it gave me on international foods though, along with environmental and even spiritual perspectives. I just want to feed my family well, and sometimes (really just for my little man) that does include some animal products </span>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com1Burlington, ON, Canada43.3255196 -79.799031943.1407021 -80.1148889 43.5103371 -79.483174900000009tag:blogger.com,1999:blog-1892631999768620259.post-37600772193695920402011-12-16T20:20:00.001-05:002011-12-16T20:26:11.642-05:00Yum ;-)<div><p>A nearly-vegan pad thai (no eggs, but crab & otherwise some fish sauce).</p>
<br/><img src='http://lh6.ggpht.com/-NywTz0BmK1k/TuvuSAhKHLI/AAAAAAAACsk/PVB17i9SCI0/IMG_20111216_201431.png' /></div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-77031468451630335662011-11-29T11:46:00.001-05:002011-11-29T12:54:56.894-05:00Two Thumbs Up to Koush<div>
I just installed & tweeked <a href="https://plus.google.com/103583939320326217147">Koush</a>'s <a href="http://www.cyanogenmod.com/">Cyanogen Mod</a> 9 alpha 11 for my <a href="http://www.google.com/phone/detail/nexus-s">Nexus S</a> running <a href="http://developer.android.com/sdk/android-4.0-highlights.html">Ice Cream Sandwich</a> from AOSP. You can read his original message on the <a href="http://forum.xda-developers.com/showthread.php?t=1356228">XDA forums</a>.<br />
<br />
For an engineering build it's running quite smoothly. I'm certainly looking forward to mirroring <a href="http://api.viglink.com/api/click?format=go&drKey=1359&loc=http%3A%2F%2Fforum.xda-developers.com%2Fshowthread.php%3Ft%3D1356228&v=1&libid=1322588497819&out=https%3A%2F%2Fgithub.com%2FCyanogenMod%2Fsamsung-kernel-crespo%2Ftree%2Fics&ref=http%3A%2F%2Fslashdot.org%2F&title=%5BROM%5D%20CyanogenMod%209%20Alpha%2011%20-%20by%20Koush%20-%20xda-developers&txt=https%3A%2F%2Fgithub.com%2FCyanogenMod%2Fsamsu...respo%2Ftree%2Fics&jsonp=vglnk_jsonp_13225886933502">his</a> <a href="http://api.viglink.com/api/click?format=go&drKey=1359&loc=http%3A%2F%2Fforum.xda-developers.com%2Fshowthread.php%3Ft%3D1356228&v=1&libid=1322588497819&out=https%3A%2F%2Fgithub.com%2FCyanogenMod%2Fandroid_device_samsung_crespo%2Ftree%2Fics&ref=http%3A%2F%2Fslashdot.org%2F&title=%5BROM%5D%20CyanogenMod%209%20Alpha%2011%20-%20by%20Koush%20-%20xda-developers&txt=https%3A%2F%2Fgithub.com%2FCyanogenMod%2Fandro...respo%2Ftree%2Fics&jsonp=vglnk_jsonp_13225887031763">git</a> <a href="http://api.viglink.com/api/click?format=go&drKey=1359&loc=http%3A%2F%2Fforum.xda-developers.com%2Fshowthread.php%3Ft%3D1356228&v=1&libid=1322588497819&out=https%3A%2F%2Fgist.github.com%2F1382062&ref=http%3A%2F%2Fslashdot.org%2F&title=%5BROM%5D%20CyanogenMod%209%20Alpha%2011%20-%20by%20Koush%20-%20xda-developers&txt=https%3A%2F%2Fgist.github.com%2F1382062&jsonp=vglnk_jsonp_13225887152174">and </a>building a <a href="http://www.kandroid.org/online-pdk/guide/build_system.html">userdebug</a> variant. Typically this speeds up most aspects of the UI and other software since debug messages are less frequent.<br />
<br />
A few pointers:<br />
<br />
<ul>
<li>If you feel that the boot animation is continuing infinitely, you probably forgot to erase the data partition (I did, originally)</li>
<li>If you like <a href="https://market.android.com/details?id=com.google.android.carhome">Google Car Home</a>, which is a great home-replacement while driving, then install it manually from a backed-up apk and install the 3rd party <a href="https://market.android.com/details?id=net.cwfk.ig88.carmode&hl=en">Car Mode Control</a> app. The original google car home will install, but it is claimed not to work with ICS and does not show up in the launcher so there is no way to use it unless Car Mode Control is installed.</li>
<li>If you encounter "<span class="Apple-style-span" style="background-color: white; line-height: 18px;"><span class="Apple-style-span" style="font-family: inherit;">Unfortunately, Google TTS Engine has stopped</span></span>" <a href="http://forum.xda-developers.com/showpost.php?p=19687420&postcount=2852">Select PicoTTS</a> to get <a href="https://market.android.com/details?id=com.google.android.apps.maps">Navigation</a> and <a href="https://market.android.com/details?id=com.google.android.maps.mytracks">My Tracks</a> to work.</li>
</ul>
</div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com2tag:blogger.com,1999:blog-1892631999768620259.post-3617839869696530222011-11-11T21:59:00.001-05:002011-11-11T22:26:11.309-05:00An UpdateJust to dispel any confusion that might arise if people google me to dig up 'dirt'.<br />
<br />
Yes, I am in fact single again. Yes, there may be photos of me & my ex floating around on the interwebs that seem to be very recent - and they are! I only did become single again recently, and it was a bit sudden for me too!<br />
<br />
So is life, however, and it does go on, as they say.<br />
<br />
It's actually really surprising how little I'm blogging these days, with the major shift changing from blogging to micro-blogging via Twitter, FaceBook, and Google+ . Sorry if I haven't been terribly vocal.<br />
<br />
Just thought I would post an update.<br />
<br />
Ciao!<br />
<br />
CAnonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-15314815859783744662011-08-31T16:11:00.000-04:002011-08-31T16:16:25.830-04:00Google Nexus S Android Phone Suffers USB DeathToday I am a very lucky guy, in spite of the fact that the USB OTG functionality on my Google Nexus S has just vanished. Why does that make me lucky? Well, it doesn't, but luckily I had ordered a second Nexus S that works properly with Canadian HSDPA frequencies on the Rogers network, and it arrived literally the same second that my old Nexus S stopped working. Total coincidence... I think.<br />
<div>
<br /></div>
<div>
Actually, I should be more specific - nothing on the old phone has stopped working except for the USB OTG controller. So when I plug my in my phone to my workstation, I receive "unable to enumerate device on port... " under Linux and "USB Device Not Recognized" under Windows 7. In layman's terms, my phone no longer works as a USB disk. </div>
<div>
<br /></div>
<div>
Being a clever hacker, I managed to get the dmesg output on my Nexus S, which I hope will be of some use for people at either Google or Samsung. The source code for the Nexus S (codenamed crespo) is available, so I might look into it further some time later. </div>
<div>
<br /></div>
<div>
In reference to the dmesg output below, </div>
<div>
<br /></div>
<blockquote>
"The FSA9480 chip is used on some Samsung phones to detect various accessories using sensing resistors on the ID pin of the USB port." [1]</blockquote>
<div>
It's likely an authentication chip - there are several vendors that provide something similar. The datasheet is only available under NDA of course. Naturally, I've tried several cables, and several different workstations, to no avail. There are many layers of software and electronics at work (or rather not at work) here, so without some chip documentation / resources, there's not really a way that I can debug this just using the source code of the Linux driver.</div>
<div>
<br /></div>
<div>
But just to clarify - anytime an 'err -6' appears, that corresponds to with -ENXIO "No such device or address", and anytime 'err -5' appears, it corresponds to -EIO "I/O error", so the outlook is not good. It's likely that the chip in question had a bad solder joint and is not powering up with the rest of the phone, or it experienced a "massive" current spike from my laptop that it couldn't handle.</div>
<div>
<br /></div>
<div>
I believe my device is still under warranty though, so I'll certainly be shipping it back for repair soon. </div>
<div>
<br /></div>
<div>
The strangest part of this whole thing is that I've kept my phone in pristine condition, which (sadly) suggests that the design quality of this Nexus S was lacking, in spite of what Google has said in various marketing videos. It could also be Fairchild's fault, if in fact it turned out to be an ESD issue. Anything that's connected on the USB should be able to handle 'typical' levels of ESD from a PC's USB pins. </div>
<div>
<br /></div>
<div>
<div>
[ 2066.560942] fsa9480 7-0025: dev1: 0x0, dev2: 0x0</div>
<div>
[ 2068.234132] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2068.362855] fsa9480 7-0025: fsa9480_irq_thread: err -6</div>
<div>
[ 2068.363813] fsa9480 7-0025: fsa9480_detect_dev: err -6</div>
<div>
[ 2068.363919] fsa9480 7-0025: dev1: 0xfa, dev2: 0xff</div>
<div>
[ 2068.374642] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2068.377227] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2068.377957] i2c i2c-7: sendbytes: NAK bailout.</div>
<div>
[ 2068.378051] fsa9480 7-0025: fsa9480_reg_init: err -5</div>
<div>
[ 2068.379090] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2068.975317] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2068.977052] fsa9480 7-0025: dev1: 0x1f, dev2: 0xff</div>
<div>
[ 2068.978903] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2068.991221] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2068.992016] i2c i2c-7: sendbytes: NAK bailout.</div>
<div>
[ 2068.992109] fsa9480 7-0025: fsa9480_reg_init: err -5</div>
<div>
[ 2068.993178] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2068.994968] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.003127] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.004982] fsa9480 7-0025: dev1: 0x10, dev2: 0x3</div>
<div>
[ 2069.006708] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.008463] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.009962] i2c i2c-7: sendbytes: NAK bailout.</div>
<div>
[ 2069.010054] fsa9480 7-0025: fsa9480_reg_init: err -5</div>
<div>
[ 2069.010498] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.012253] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.014000] fsa9480 7-0025: dev1: 0x10, dev2: 0x1f</div>
<div>
[ 2069.015793] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.035247] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.037069] fsa9480 7-0025: dev1: 0xff, dev2: 0xff</div>
<div>
[ 2069.038796] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.041289] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.043017] fsa9480 7-0025: dev1: 0x10, dev2: 0xff</div>
<div>
[ 2069.044765] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.048313] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.050040] fsa9480 7-0025: dev1: 0x17, dev2: 0xff</div>
<div>
[ 2069.051853] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.060308] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.062035] fsa9480 7-0025: dev1: 0x13, dev2: 0xff</div>
<div>
[ 2069.063858] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.067409] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.068963] i2c i2c-7: sendbytes: NAK bailout.</div>
<div>
[ 2069.069124] fsa9480 7-0025: fsa9480_detect_dev: err -5</div>
<div>
[ 2069.069209] fsa9480 7-0025: dev1: 0xfb, dev2: 0xff</div>
<div>
[ 2069.070971] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.091186] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.092983] fsa9480 7-0025: dev1: 0x10, dev2: 0x3</div>
<div>
[ 2069.094731] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2069.104292] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2069.105018] i2c i2c-7: sendbytes: NAK bailout.</div>
<div>
[ 2069.105108] fsa9480 7-0025: fsa9480_reg_init: err -5</div>
<div>
[ 2069.106102] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2070.150280] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2070.152079] fsa9480 7-0025: dev1: 0xff, dev2: 0xff</div>
<div>
[ 2070.153836] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2070.166528] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2070.167026] i2c i2c-7: sendbytes: NAK bailout.</div>
<div>
[ 2070.167188] fsa9480 7-0025: fsa9480_reg_init: err -5</div>
<div>
[ 2070.168389] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2070.192257] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
[ 2070.193986] fsa9480 7-0025: dev1: 0x10, dev2: 0x1</div>
<div>
[ 2070.195786] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
<div>
...</div>
<div>
[ 2070.210682] fsa9480 7-0025: dev1: 0x10, dev2: 0x0</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
[1] http://electronics.stackexchange.com/questions/13041/how-do-i-make-the-fairchild-fsa9280-fsa9480-fsa880-boot-pin-trigger-samsung-gal</div>
Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-29948863613734835552011-08-29T22:15:00.001-04:002011-08-29T22:15:28.447-04:00UNetbootin on Mac OS XJust in case anyone wants to use <a href="http://unetbootin.sourceforge.net/">UNetbootin</a> to create e.g. an <a href="https://help.ubuntu.com/community/Installation/FromUSBStick">Ubuntu Live USB</a> device and it isn't working, there are two key steps that are not performed by the UNetbootin binary for OS X.<br />
<br />
After downloading the ISO, use Disk Utility to partition your USB device. Ensure that you've selected Options -> MBR . After formatting the disk...<br />
<br />
1) Ensure that you've marked the partition active<br />
<br />
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">fdisk -e /dev/rdisk1</span></div>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;">f 1</span></div>
<div style="font-family: "Courier New",Courier,monospace;">
<span style="font-size: x-small;"> write</span></div>
<span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">exit</span></span><br />
<br />
2) Download <a href="http://www.syslinux.org/wiki/index.php/The_Syslinux_Project">syslinux</a> and write the critical mbr binary your device.<br />
<br />
<pre style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;">dd conv=notrunc bs=440 count=1 if=mbr.bin of=/dev/rdisk1</span></pre>
<pre style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;">
</span></pre>
<pre style="font-family: "Courier New",Courier,monospace;"><span style="font-size: x-small;">
</span></pre>
After that, just use UNetbootin as usual.<br />
<span class="tl"></span><br />
Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-87161615572312970872011-08-03T11:28:00.008-04:002011-08-03T11:33:19.513-04:00OMAP3 SGX EGL Drivers Add Wayland SupportJust in case anyone was wondering <a href="http://tigraphics.blogspot.com/2011/07/3q2011-sgx-graphics-package-now.html"><b><i>this</i></b></a> is a pretty big deal. <a href="http://www.imgtec.com/">Imagination Technologies</a>, whose 3D graphics cores drive most mobile displays, has announced support for the <span class="Apple-style-span" style="color: #222222; line-height: 13px;"><span class="Apple-style-span" style="font-family: inherit;"><a href="http://www.khronos.org/registry/egl/extensions/KHR/EGL_KHR_image_pixmap.txt">EGL_KHR_Image_Pixmap extensions</a> used by the <a href="http://wayland.freedesktop.org/">Wayland</a> <a href="http://en.wikipedia.org/wiki/Wayland_(display_server_protocol)">display server protocol</a>.</span></span><br />
<br />
For those who haven't been following, Wayland has gained a lot of momentum as a non-<a href="http://en.wikipedia.org/wiki/X_Window_System">X</a>-based <a href="http://en.wikipedia.org/wiki/Compositing_window_manager">window compositor</a> for Linux-based operating systems. Wayland facilitates client-side rendering, similar to the <a href="http://en.wikipedia.org/wiki/Quartz_(graphics_layer)">Quartz compositor used in Mac OS X</a>. It has since been <a href="http://wiki.meego.com/Wayland_in_MeeGo">adopted</a> by <a href="https://meego.com/">Meego</a> and <a href="http://www.ubuntu.com/">Ubuntu</a> as their preferred compositing backend.<br />
<br />
The stated goal of Wayland is to provide a user experience where "<span class="Apple-style-span" style="line-height: 19px;"><span class="Apple-style-span" style="font-family: inherit;"><a href="http://en.wikipedia.org/wiki/Wayland_(display_server_protocol)#Background">every frame is perfect</a>". This is a rather necessary and long overdue improvement since traditional Linux desktops based on the aging <a href="http://en.wikipedia.org/wiki/X_Window_System">X11 display server</a> tended to suffer from artifacts such as <a href="http://en.wikipedia.org/wiki/Screen_tearing">tearing</a>, visible redrawing, and flickering. However, Wayland retains the capabilities to encapsulate the traditional rootless X server for legacy applications. Wayland rendering targets already exist for popular toolkits such as <a href="http://www.gtk.org/">GTK+</a> and <a href="http://qt.nokia.com/">QT</a> among others.</span></span><br />
<br />
Check out the video below for a (slightly older) demo.<br />
<br />
<iframe allowfullscreen="true" frameborder="0" height="240" src="http://www.youtube.com/embed/ssxB0a3Js7I" width="320"></iframe><br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
Today, Wayland support exists for graphics chipsets from Intel, AMD, NVIDIA (<a href="http://nouveau.freedesktop.org/wiki/">nouveau</a>) and SGX (<a href="http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=11989&contentId=4682">OMAP3</a>) platforms. <a href="http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=12842&contentId=53247">OMAP4</a> support <span class="Apple-style-span" style="color: #222222; line-height: 13px;"><span class="Apple-style-span" style="font-family: inherit;">probably isn't far off.</span></span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<br /></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
I guess it's time to fire up the old <a href="http://beagleboard.org/">BeagleBoard</a> ;-) Incidentally, <a href="http://beagleboard.blogspot.com/2011/07/beagleboard-turns-30.html">happy birthday</a>!</div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<br /></div>
<br />
<br />Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-28104403494028241522011-07-26T16:13:00.002-04:002011-07-26T16:31:50.259-04:00Canon Printer Drivers under Mac OS XFor my regular readers, please disregard this post. I'm merely using this blog post as a conglomerate location for my bug and other similar bugs that are occurring with Canon Printer drivers on Mac OS X.<br />
<br />
Here is a list of URL's describing exactly the same issue:<br />
<br />
<a href="https://discussions.apple.com/message/15218891#15218891">https://discussions.apple.com/message/15218891#15218891</a><br />
<a href="https://discussions.apple.com/message/15086171#15086171">https://discussions.apple.com/message/15086171#15086171</a><br />
<a href="https://discussions.apple.com/message/12138167#12138167">https://discussions.apple.com/message/12138167#12138167</a><br />
<a href="https://discussions.apple.com/message/12577853#12577853">https://discussions.apple.com/message/12577853#12577853</a><br />
<a href="https://discussions.apple.com/message/12777003#12777003">https://discussions.apple.com/message/12777003#12777003</a><br />
<a href="https://discussions.apple.com/message/12423314#12423314">https://discussions.apple.com/message/12423314#12423314</a><br />
<a href="https://discussions.apple.com/message/13276113#13276113">https://discussions.apple.com/message/13276113#13276113</a><br />
<a href="https://discussions.apple.com/message/15015078#15015078">https://discussions.apple.com/message/15015078#15015078</a><br />
<br />
I have tried every variant of UFR2 driver available from version 1.60 to version 2.25 and none of them work.Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-23811285321645593182011-07-06T12:53:00.001-04:002011-07-21T23:47:09.486-04:00Parc Oka for the Canada Day Long Weekend<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-VjA30eYfXsg/ThSR7xD1MmI/AAAAAAAABmI/kFRv7ETER2k/s1600/IMG_4287.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="150" src="http://3.bp.blogspot.com/-VjA30eYfXsg/ThSR7xD1MmI/AAAAAAAABmI/kFRv7ETER2k/s200/IMG_4287.JPG" width="200" /></a></div>
We went on a bike & camping trip to Parc Oka for the weekend and documented the trip with some <a href="https://picasaweb.google.com/107058277812335526223/ParcOka20110702?authuser=0&authkey=Gv1sRgCMnqobWV7Kz9HA&feat=directlink">photos</a>.<br />
<br />
Originally we were supposed to take a train to and from Deux Montagnes, which would have made this trip very easy, but the AMT had some unannounced line work. So Erin threw together some last minute improvisational plans and the "to" portion of our trip included a horrific STM then CIT commuting.<br />
<br />
We ended up biking from St. Eustache, which was only about 5 km further. Taking the AMT from Deux Montagnes on the way back was much more accommodating for our bikes, and our bike-seats and Croozer full of camping gear / 3yo child.<br />
<br />
I also traced our trip using <a href="http://mytracks.appspot.com/">MyTracks for Android</a>, and it worked quite well. Considering how much I'm on my bike, MyTracks is practically like a personal trainer given that it records all of the stats you can imagine (latitude, longitude, bearing, speed, elevation, time, etc).<br />
<br />
It was the perfect weekend to get away, and Parc Oka was awesome. The water provided an excellent escape from the heat that weekend.Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-86456307702751843972011-05-24T09:44:00.004-04:002011-05-29T22:37:47.689-04:00The End of an Era<div>Today I arrived at my office (which just happens to be wherever I sit down with my notebook), and was quite contented to read that <a href="http://www.phoronix.com/scan.php?page=news_item&px=OTQ3Ng">Linus has seemingly decided to move on to the next major version change</a>. This will probably also include a change in the numbering system that is currently used for kernal releases, much to the appeal of GregKH.<br />
<br />
I have been using Linux since around the 2.2 days, and have been actively hacking / employed with Linux related projects on various architectures with both the 2.4 and 2.6 kernels. I guess you could say that I have Linus and many other kernel, arch, & subsystem maintainers to thank for that.<br />
Sentimentally speaking, I find it immensely cool that I am currently writing this blog post using a phone running Linux/Android released by a company that leveraged the power of Linux for a significant part of their commercial success. If anyone is wondering, the phone is a Nexus S and the company is Google.<br />
<br />
Here's to all Linux hackers, wherever your workstations may be.<br />
<br />
<b>update-20110529</b>: <a href="http://www.phoronix.com/scan.php?page=news_item&px=OTUwMg">3.0</a>!</div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-19579579772736704542011-05-03T15:11:00.000-04:002011-05-03T15:11:53.284-04:00Time for ChangeLately I've been trying to write less political editorial on my blog, but I'll make an exception just for today.<br />
<br />
There are some things that I'm very (indeed, historically) happy about after yesterday's Canadian Federal Election and there are things that also make my skin crawl. What those things are is an exercise for the reader to determine.<br />
<br />
Regardless of the winners and losers of the election, I wanted to write about the topic of proportional representation in the house of commons.<br />
<br />
<b>Most of the time</b><br />
<br />
<b></b>... when somebody argues <i>against</i> proportional representation, they usually make the argument that small communities will suffer if they do not share the same ideals as the majority<br />
<br />
That argument has some merit particularly when considering the right to maintain a cultural identity or a specific type of business or industry in Canada.<br />
<br />
In this context, there are some cases where locality does play a major role. However, for the most part, Canada is everywhere-diverse in terms of culture. Almost everywhere in the country, there are people celebrating and learning about their own and different cultures, together as Canadians.<br />
<br />
In terms of industrial locality, the issue can be fairly easily solved by transferring more power to the provincial governments and by supporting particular focus groups rather than dismantling them. It also affords voters the privilege of having an equal voice at the federal level.<br />
<br />
That is the argument... most of the time.<br />
<br />
<b>Occasionally</b><br />
<br />
<b></b>... when somebody argues <i>for</i> proportional representation, they usually make the argument that large communities will suffer if they do not share the same ideals as the minority. To put more of a positive spin on it, one could also make the argument that the majority would not have the benefit of hearing the oft important message of a marginalized voice.<br />
<br />
Why not let our political system reflect the diversity of our population? Let unique voices be heard & eliminate redundancy.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-Np4tvfqA08c/TcBRKCDdmnI/AAAAAAAABV4/jDBR6iF84tc/s1600/2py9dfa.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-Np4tvfqA08c/TcBRKCDdmnI/AAAAAAAABV4/jDBR6iF84tc/s1600/2py9dfa.png" /></a></div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-45482769684801792122011-03-30T11:07:00.016-04:002011-03-31T10:07:14.322-04:00The USRP E100<div class="separator" style="clear: both; text-align: center;"><a href="http://www.ettus.com/images/usrp_e100.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="105" src="http://www.ettus.com/images/usrp_e100.JPG" width="320" /></a></div>I thought that I would take a moment to plug a product that I think has great potential for anyone working, experimenting, or interested in learning about digital wireless communication - the <a href="http://www.ettus.com/downloads/USRP_E100_Series_temporary_datasheet.pdf">USRP E100</a>. This device, jointly developed by <a href="http://www.ettus.com/">Ettus Research</a> and <a href="http://www.opensdr.com/">OpenSDR</a>, was <a href="http://lists.ettus.com/pipermail/usrp-announce_lists.ettus.com/2010-November/000005.html">announced</a> just a few months ago. It's a <i><b>tightly-integrated</b></i> embedded Linux solution for research into digital baseband signal processing for wireless systems.<br />
<div><br />
</div><div>I've worked with previous products from Ettus, like the <a href="http://www.ettus.com/downloads/ettus_ds_usrp2_v5.pdf">USRP2</a>, and have had 99% good experiences. The <a href="http://www.ettus.com/products">entire USRP product family</a> is supported with <a href="http://gnuradio.org/">GNURadio</a>, which greatly facilitates signal <a href="http://pwnhome.wordpress.com/2011/01/29/intro-to-gnuradio-and-the-usrp-part-2-visualizing-the-waves/">visualization</a>, <a href="http://www.gnu.org/software/gnuradio/doc/howto-write-a-block.html">processing</a>, and <a href="http://gnuradio.org/doc/doxygen/index.html">software interfacing</a>. The one down-side of using the USRP2 was that the only way to connect with it was by using a Gb ethernet cable (which is not a standard feature on laptop / desktop computers). The Gb ethernet port did not make the USRP2 'networkable' since it was only used for data transfer using raw ethernet packets.</div><div><br />
</div><div>The main differentiator of the E100 is that this device ships with a <a href="http://en.wikipedia.org/wiki/Computer-on-module">modular</a> <a href="http://www.arm.com/">ARM</a> board from <a href="http://www.gumstix.com/">GumStix</a>. The stock GumStix board is powered by an <a href="http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&navigationId=11989&contentId=4682">OMAP3</a> (<a href="http://en.wikipedia.org/wiki/ARM_Cortex-A8">Cortex-A8</a>) chip from <a href="http://www.ti.com/">Texas Instruments</a>. The modular design makes repairs and upgrades easy (any <a href="http://en.wikipedia.org/wiki/Computer-on-module">COM</a> can be used with conformant electrical and mechanical specifications). The OMAP3 has appeared in <a href="http://www.google.com/search?q=site%3Apdadb.net+omap+3430+3630">several mobile phones</a>, but (more importantly) has also been the driving force behind a tidal wave of low-cost and powerful embedded Linux developer boards such as the <a href="http://beagleboard.org/hardware">BeagleBoard</a> and <a href="http://beagleboard.org/hardware-xM">BeagleBoard xM</a>. Texas Instruments really has made a great contribution back to the developer community just by making these developer boards available. The OMAP3 processor is capable of running just about every operating system in existence, ranging from <a href="http://focus.ti.com/general/docs/wtbu/wtbugencontent.tsp?templateId=6123&navigationId=12278&contentId=4631#1">Windows Mobile</a> to <a href="https://wiki.ubuntu.com/ARM/">Ubuntu</a> or <a href="http://code.google.com/p/rowboat/">Android</a> (all flavours of Linux, and <a href="http://www.freebsd.org/news/status/report-2010-10-2010-12.html#Bringing-up-OMAP3">FreeBSD</a> too). The E100 (probably) ships with <a href="http://www.angstrom-distribution.org/">Ångström</a> by default. As for interfacing, the E100 even exposes HDMI, ethernet, and USB ports so this SDR box can literally be it's own work-station. I really wish this was available back when I was working on the USRP2!</div><div><br />
</div><div>So - that's great - an SDR device that eliminates the need for an external laptop or desktop computer so the entire system consumes much less power in total.</div><div><br />
</div><div>There's just one more thing...</div><div><br />
</div><div>The way that the OMAP3 interfaces with the radio hardware is super-efficient. The TX and RX buffers are <a href="http://en.wikipedia.org/wiki/Memory_map">mapped</a> directly in to the OMAP3's <a href="http://en.wikipedia.org/wiki/Memory_management_unit">MMU</a>. To the layman, this means that the Linux kernel can easily expose the radio as a regular <a href="http://en.wikipedia.org/wiki/Device_file">device</a> to userspace using <a href="https://github.com/balister/linux-omap-philip/blob/mmap-rb-35-usrp_e100_devel/drivers/misc/usrp_e.c">Phil Ballister's driver</a>, which is on its way upstream. Furthermore, users of <a href="http://www.ti.com/">TI</a>'s <a href="http://focus.ti.com/dsp/docs/dspsupportatn.tsp?sectionId=3&tabId=415&familyId=44&toolTypeId=30">Code Composer Studio</a> (or developers who choose to use <a href="http://processors.wiki.ti.com/index.php/Category:Compiler">CGT</a> directly) can write <a href="http://en.wikipedia.org/wiki/Digital_signal_processing">DSP</a> firmware for OMAP3's integrated <a href="http://focus.ti.com/lit/ug/spru732j/spru732j.pdf">C64x+ DSP</a>. Thus, keen developers can run code on the DSP to control the <a href="http://en.wikipedia.org/wiki/Baseband">baseband</a> radio and process baseband signals directly (the way nature intended). Naturally, only one processor on the chip can 'own' the radio buffers at one time (without proper synchronization).</div><div><br />
</div><div>To summarize: the USRP2 E100 is the ideal product for most engineers researching embedded RF systems and digital baseband processing.<br />
<br />
PS: Nice work Phil! (he was my co-mentor for <a href="http://gsoc2010-fftw-neon.blogspot.com/">GSOC2010</a>). I would love to use the E100 for some of my more recent work with <a href="http://ahumanright.org/">ahumanright.org</a> to engineer a low-cost / low-power satellite modem...</div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com0tag:blogger.com,1999:blog-1892631999768620259.post-39050995080442621872011-03-23T09:51:00.009-04:002011-04-12T12:52:11.065-04:00GSOC 2011: I Recommend Mono.SIMD<div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://code.google.com/images/GSoC2011_300x200.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="132" src="http://code.google.com/images/GSoC2011_300x200.png" width="200" /></a></div>If anyone is looking for a good <a href="http://www.google-melange.com/">GSOC 2011</a> project, I would suggest <a href="http://www.mono-project.com/StudentProjects#Mono.Simd_ports">Mono.SIMD</a>. If you don't already know <a href="http://en.wikipedia.org/wiki/SIMD">what SIMD is</a>, then this project probably isn't for you, but you might find it interesting nonetheless. Although the Microsoft .NET version of <a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)">C#</a> <a href="http://en.wikipedia.org/wiki/Mono_(software)#Mono-specific_innovations">does not explicitly support SIMD</a>, once Mono has it for x86, ARM, and others, Microsoft likely will want it as well. The ARM port is just as important (if not more) important than the x86 port, so please don't ignore it. Buy a <a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Cat=2621773&k=beagleboard">BeagleBoard</a> or a <a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?&keywords=pandaboard">PandaBoard</a> to tackle <a href="http://www.arm.com/products/processors/technologies/neon.php"><span id="goog_342442250"></span>NEON SIMD<span id="goog_342442251"></span></a>, (or even buy a <a href="http://www.plugcomputer.org/">Plug Computer</a> or <a href="http://www.gumstix.com/store/catalog/product_info.php?products_id=210">Verdex Pro</a> for <a href="http://en.wikipedia.org/wiki/MMX_(instruction_set)#MMX_in_embedded_applications">iwMMXt</a>) . Although some people may think that iwMMXt is old news, it still lives on with <a href="http://www.marvell.com/">Marvell</a>'s <a href="http://en.wikipedia.org/wiki/SheevaPlug">Sheeva</a> and <a href="http://www.marvell.com/armada/">ARMADA</a> product lines. You can still do blazingly fast multimedia with iwMMXt (h264, for example) but its limited to integer operations rather than floating-point (which is more efficient for multimedia in any case). </div><div><br />
</div><div>Chances are you already have a PC with several flavours of <a href="http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions">SSE</a>, so you should be all set to do add x86 SIMD and at least one flavour of ARM SIMD to the <a href="http://www.go-mono.com/meeting06/MonoSummit2006-JIT.pdf">Mono JIT</a>. Read this article to see <a href="http://tirania.org/blog/archive/2008/Nov-03.html">why it makes sense</a>.<br />
<br />
PS: Good luck to all volunteering organizations and students this year!</div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com3tag:blogger.com,1999:blog-1892631999768620259.post-47624180835861195612011-02-27T11:48:00.002-05:002011-02-27T11:53:32.520-05:00Death, Taxes, & Voting<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/commons/c/cf/Flag_of_Canada.svg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="100" src="http://upload.wikimedia.org/wikipedia/commons/c/cf/Flag_of_Canada.svg" width="200" /></a></div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;">Considering that less than 50% of Canadians of the age of majority actually vote, why don't we make it mandatory to vote every time an individual files their taxes?</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">PS: I am intentionally leaving a lot of editorial commentary out of this post.</div></div>Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com2tag:blogger.com,1999:blog-1892631999768620259.post-75130876401928034502011-02-26T09:16:00.000-05:002011-02-26T09:16:23.896-05:00AMD Open-Sources Video API<a href="http://www.phoronix.com/scan.php?page=news_item&px=OTEzNg">This</a> is quite a leap forward for free and open-source software users everywhere.Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com1tag:blogger.com,1999:blog-1892631999768620259.post-20829382732304712782011-02-16T09:52:00.002-05:002011-03-04T07:36:57.790-05:00Nvidia ARMs Themselves for a Shot at the Desktop MarketX86 chip manufacturers should probably be a little bit worried <a href="http://blogs.nvidia.com/2011/02/tegra-roadmap-revealed-next-chip-worlds-first-quadcore-mobile-processor/">at this point</a>, considering that Microsoft has also decided to do a <a href="http://ces.cnet.com/8301-32254_1-20027445-283.html">full windows port to ARM</a>. Of course, Linux has been running beautifully on ARM <a href="http://www.arm.linux.org.uk/docs/history.php">for almost two decades already</a>.<br />
<br />
Don't be fooled, Nvidia's ARM team is not only aiming at the netbook / laptop market - they're setting their crosshairs on the desktop market as well, as indicated by <a href="http://blogs.nvidia.com/2011/02/tegra-roadmap-revealed-next-chip-worlds-first-quadcore-mobile-processor/">their roadmap</a>.<br />
<br />
<object style="height: 390px; width: 640px;"><param name="movie" value="http://www.youtube.com/v/VATNyBTPltI?version=3"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/VATNyBTPltI?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"></object><br />
<br />
PS: If you are reading this, and you were present at a certain meeting with me not too long ago where we were talking about buying an ARM architecture license, then I hope you are hearing this message loud and clear. My honest opinion is that you need to act now or suffer tremendously in sales.Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com1tag:blogger.com,1999:blog-1892631999768620259.post-71751823814815753042011-02-13T10:29:00.000-05:002011-02-13T10:29:32.870-05:00Ahem... Picasa?Dear Google,<br />
<br />
Don't you think it's about time to make functional Picasa clients for Linux and Android?<br />
<br />
Currently, I am relying on a random 3rd-party app maker to upload video from my Google Nexus S to my Google / Picasa Web account - it's a little discomforting.<br />
<br />
Also, video transcoding for Picasa Web albums is really straight forward to do using ffmpeg from the command-line, and it will even do VP8 :) ... but still, I can only upload videos from Picasa using Windows or Mac. If you're worried about software patents, then just use a plug-in architecture with dlopen(). That way, users can supply "their own" versions of popular multimedia encoders / decoders. For closed-source platforms, just write a plug-in that uses the codecs available on that system (e.g. windows, os x).Anonymoushttp://www.blogger.com/profile/05896336560457157090noreply@blogger.com2