<?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-1701290979105271381</id><updated>2012-01-05T22:33:54.893+01:00</updated><category term='linux'/><category term='matlab'/><category term='boxplot'/><category term='embedded'/><category term='wsn'/><category term='sunspot'/><category term='wtf email'/><category term='plot'/><category term='postgres'/><category term='java'/><category term='lol'/><category term='webcam'/><category term='graphics'/><category term='air guitar'/><category term='sweden'/><category term='skype'/><category term='code'/><category term='ubuntu'/><category term='sensor trace'/><category term='labels'/><category term='msp430'/><category term='laptop'/><title type='text'>three orange lights</title><subtitle type='html'>assorted random stuff. mostly computer-related.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Frederik</name><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>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1701290979105271381.post-908941383427161648</id><published>2009-10-04T01:00:00.006+02:00</published><updated>2009-10-04T01:24:27.906+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='boxplot'/><category scheme='http://www.blogger.com/atom/ns#' term='plot'/><category scheme='http://www.blogger.com/atom/ns#' term='matlab'/><category scheme='http://www.blogger.com/atom/ns#' term='labels'/><title type='text'>Changing labels in a Matlab whisker box plot</title><content type='html'>Given my recent Matlab experiences, I am tempted turn this blog into a Matlab-hater blog, but I will try to keep my cool.&lt;br /&gt;&lt;br /&gt;Here's the next trick that I hope will save someone else a lot of time. It's about changing the label in a whisker box plot.&lt;br /&gt;&lt;br /&gt;If you have the statistics toolbox installed, you can create whisker box plots with the boxplot() command.&lt;br /&gt;&lt;br /&gt;Let's try:&lt;br /&gt;&lt;br /&gt;&gt;&gt; boxplot(rand(10, 3), 'labels', {'Data A', 'Data B', 'Data XYZ'})&lt;br /&gt;&lt;br /&gt;This creates a whisker box plots with the individual boxes labeled 'Data A', 'Data B' and 'Data XYZ':&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JidFKbHHxz4/SsfZxvrF04I/AAAAAAAAAC0/DuLg_TXGpB0/s1600-h/boxplot_wrong_label.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 138px;" src="http://1.bp.blogspot.com/_JidFKbHHxz4/SsfZxvrF04I/AAAAAAAAAC0/DuLg_TXGpB0/s320/boxplot_wrong_label.png" alt="" id="BLOGGER_PHOTO_ID_5388514927806108546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Looks great, until you realize that you meant to label the third box 'Data C', and not 'Data XYZ'. Should be straight-forward to change, right? Isn't. Five minutes of clicking around and swearing took me nowhere.&lt;br /&gt;&lt;br /&gt;So here's how to change the label. In the figure, click on Edit -&gt; Figure properties. Next, click on any of the boxes. All boxes and all labels will be selected. Now, in  Matlab's main window enter:&lt;br /&gt;&lt;br /&gt;&gt;&gt; children = get(gco, 'Children');&lt;br /&gt;&lt;br /&gt;This gives you a handle to all children of the currently selected object. The object you have selected right now is the boxplot, which is of type &lt;span style="font-style: italic;"&gt;hggroup&lt;/span&gt;. Its i-th child is the label of the (n-i)-th box. So, the label of the the third box in the figure created above is the first child. It can be changed with&lt;br /&gt;&lt;br /&gt;&gt;&gt; set(children(1), 'String', 'Data C');&lt;br /&gt;&lt;br /&gt;And finally:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_JidFKbHHxz4/SsfbVaUilUI/AAAAAAAAAC8/U6NxoDnnvlY/s1600-h/boxplot_right_label.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 138px;" src="http://1.bp.blogspot.com/_JidFKbHHxz4/SsfbVaUilUI/AAAAAAAAAC8/U6NxoDnnvlY/s320/boxplot_right_label.png" alt="" id="BLOGGER_PHOTO_ID_5388516640061297986" border="0" /&gt;&lt;/a&gt;Better, isn't it? Better, yes, but the way there couldn't be less intuitive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-908941383427161648?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/908941383427161648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/10/changing-labels-in-matlab-whisker-box.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/908941383427161648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/908941383427161648'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/10/changing-labels-in-matlab-whisker-box.html' title='Changing labels in a Matlab whisker box plot'/><author><name>Frederik</name><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://1.bp.blogspot.com/_JidFKbHHxz4/SsfZxvrF04I/AAAAAAAAAC0/DuLg_TXGpB0/s72-c/boxplot_wrong_label.png' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1701290979105271381.post-7229996229324701837</id><published>2009-09-10T23:18:00.008+02:00</published><updated>2009-10-04T00:59:36.541+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='matlab'/><title type='text'>Deleting legend entries in Matlab plots</title><content type='html'>Matlab has been a constant source of annoyance and rage since I started writing my thesis. Using it in a dual screen environment, trying to export figures, and the source file editor's obscure keyboard short-cuts often  brought me close to insanity.&lt;br /&gt;&lt;br /&gt;But today I want to share a nice trick with you that I have just found out: How to delete legend entries in a Matlab plot.&lt;br /&gt;&lt;br /&gt;Why would anyone want to do that? An example is the &lt;a href="http://www.mathworks.com/matlabcentral/fileexchange/24718"&gt;errorbarbar&lt;/a&gt; script. It adds errorbars to your bar plot. A pretty useful thing! What is not so useful is the fact that the errorbars themselves appear in the legend. See for yourself:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt; values=10*rand(5, 3);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt; errors=rand&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(5,3);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt; errorbarbar(values, errors);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The resulting image, after a legend has been inserted using Insert -&gt; Legend:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_JidFKbHHxz4/SqlvPTHNjRI/AAAAAAAAACk/y4KfbTZtpdQ/s1600-h/legend_ugly.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 134px;" src="http://2.bp.blogspot.com/_JidFKbHHxz4/SqlvPTHNjRI/AAAAAAAAACk/y4KfbTZtpdQ/s320/legend_ugly.png" alt="" id="BLOGGER_PHOTO_ID_5379953538490010898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The data4, ..., data 5 entries are both useless and annoying.&lt;br /&gt;&lt;br /&gt;Here's the solution. In the figure window, click Edit -&gt; Properties. Then, select an error bar and enter&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&gt;&gt; hasbehavior(gco, 'legend', false);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Do this for each bar in the first group. Then delete the old legend and insert a new one using Insert -&gt; Legend. Voilà:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JidFKbHHxz4/SqlwGmeGE1I/AAAAAAAAACs/g80l__Yr4ls/s1600-h/legend_nice.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 134px;" src="http://4.bp.blogspot.com/_JidFKbHHxz4/SqlwGmeGE1I/AAAAAAAAACs/g80l__Yr4ls/s320/legend_nice.png" alt="" id="BLOGGER_PHOTO_ID_5379954488579068754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Looks much better, doesn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-7229996229324701837?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/7229996229324701837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/09/hiding-legend-entries-in-matlab-plots.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/7229996229324701837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/7229996229324701837'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/09/hiding-legend-entries-in-matlab-plots.html' title='Deleting legend entries in Matlab plots'/><author><name>Frederik</name><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/_JidFKbHHxz4/SqlvPTHNjRI/AAAAAAAAACk/y4KfbTZtpdQ/s72-c/legend_ugly.png' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1701290979105271381.post-5263095170199077063</id><published>2009-08-14T22:13:00.003+02:00</published><updated>2009-08-14T22:27:25.646+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msp430'/><category scheme='http://www.blogger.com/atom/ns#' term='embedded'/><title type='text'>Random MSP430 notes #1: Do not turn on the ADC twice</title><content type='html'>For my thesis, I use the &lt;a href="http://cst.mi.fu-berlin.de/projects/ScatterWeb/hardware/msb/index.html"&gt;ScatterWeb MSB430&lt;/a&gt; sensor nodes which are driven by an &lt;a href="http://focus.ti.com/docs/prod/folders/print/msp430f1612.html"&gt;MSP430&lt;/a&gt; from Texas Instruments. I ran into a weird problem today after adding some code which I expected to have no effect at all. In fact, I just enabled the MSP430's ADC12 twice. What could possibly go wrong?&lt;br /&gt;&lt;br /&gt;Ok, ok, I admit it's all in the &lt;a href="http://www.ti.com/litv/pdf/slau049f"&gt;user manual&lt;/a&gt;: The manual states that bits 15-3 of the  ADC12CTL0 register may not be modified if conversions are enabled, i.e. if the ENC bit is set.&lt;br /&gt;I found out -- the hard way -- if you modify the bits nevertheless, the conversions will actually stop! Since the ADC12ON bit is bit number 4, turning on the ADC12 &lt;span style="font-style: italic;"&gt;twice&lt;/span&gt; will actually turn it off ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-5263095170199077063?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/5263095170199077063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/08/random-msp430-notes-1-do-not-turn-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/5263095170199077063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/5263095170199077063'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/08/random-msp430-notes-1-do-not-turn-on.html' title='Random MSP430 notes #1: Do not turn on the ADC twice'/><author><name>Frederik</name><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-1701290979105271381.post-8821998805549481484</id><published>2009-06-23T10:47:00.003+02:00</published><updated>2009-06-23T10:53:05.974+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wtf email'/><title type='text'>E-mail "security"</title><content type='html'>&lt;blockquote&gt;&lt;/blockquote&gt;Some days ago someone tried to send a ZIP file to the Contiki mailing list. It seems that the person's mail server blocked the outgoing ZIP file and just created a message (sent to the list) saying that ZIP files cannot be sent. This is not uncommon, what I found weird though was the following part of the server generated message:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The ZIP-attachment sent to you was blocked.&lt;br /&gt;Please inform the original sender to rename ZIP-files.&lt;br /&gt;&lt;br /&gt;Die Ihnen gesandte ZIP-Datei wurde geblockt.&lt;br /&gt;Bitte informieren Sie den ursprünglichen Absender. (Dateiendung umbenennen).&lt;/blockquote&gt;&lt;br /&gt;What is going on here? In the mail generated by the server that blocked the mail, there is a suggestion how to circumvent this block?&lt;br /&gt;Security based solely on the ending of a file name along with a description how to avoid being blocked ... that's just blatantly stupid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-8821998805549481484?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/8821998805549481484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/06/e-mail-security.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/8821998805549481484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/8821998805549481484'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/06/e-mail-security.html' title='E-mail &quot;security&quot;'/><author><name>Frederik</name><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-1701290979105271381.post-5505724465355703828</id><published>2009-03-19T02:32:00.005+01:00</published><updated>2009-03-19T03:09:21.882+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><category scheme='http://www.blogger.com/atom/ns#' term='wsn'/><category scheme='http://www.blogger.com/atom/ns#' term='sensor trace'/><title type='text'>Getting Intel Lab Data into Postgres (and getting it out again)</title><content type='html'>Intel Lab has made a &lt;a href="http://db.csail.mit.edu/labdata/labdata.html"&gt;trace of sensor readings&lt;/a&gt; in a wireless sensor network available in 2004. It contains readings from 54 sensor nodes in the Intel Berkeley Data Lab between February 28th and April 5th, 2004. This data set turns out very useful for validating your own great ideas using Matlab and the like, before you bother to implement stuff on actual sensor hardware.&lt;br /&gt;&lt;br /&gt;However, at about 2.3 million rows, the data set is rather bulky to handle, and most certainly you don't want to load it into Matlab directly. Here I will describe how you can load the data set into &lt;a href="http://www.postgresql.org/"&gt;Postgres&lt;/a&gt;. Once it's in there, you can easily select parts of the data set -- e.g. all voltage readings on a specific day -- into a file. These small files are much easier to handle ...&lt;br /&gt;&lt;br /&gt;I assume that you already have installed Postgres and have some familiarity with it. Now, we will need to create a table to hold the data. Here goes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CREATE TABLE intellab (&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;date DATE NOT NULL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;time TIME WITHOUT TIME ZONE NOT NULL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;epoch INTEGER NOT NULL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;moteid INTEGER,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;temperature DOUBLE PRECISION,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;humidity DOUBLE PRECISION,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;light DOUBLE PRECISION,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;voltage DOUBLE PRECISION&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You might wonder why there is not a NOT NULL constraint on every column. This is because some of the entries in the data set are truncated. You might wonder even more that there is no primary key. This is because for some entries, moteid is NULL. A primary key would arguably have to contain this attribute, so I opted for no primary key at all. (I know this is bad ^^)&lt;br /&gt;&lt;br /&gt;Next, before we can load the data set into our table, we need to massage the logs a bit. Download the &lt;a href="http://db.csail.mit.edu/labdata/labdata.html"&gt;data set&lt;/a&gt; and decompress it with gzip. Then, we need to replace every space in the log file by a comma. sed to the rescue! In a terminal, run:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$ sed -i 's/ /,/g' data.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This may take a while, but we are almost there. Now let's get the data from the data.txt into our table. In a postgres terminal, run&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;COPY intellab FROM '/tmp/data.txt' WITH DELIMITER ',' NULL AS '';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where '/tmp/data.txt' is the path to your modified data.txt. Copying the data into the table took about one minute on my machine.&lt;br /&gt;&lt;br /&gt;Once you have the data set in Postgres, you will want to get an interesting subset out again ;) For example, let's assume we were interested in the temperature readings of motes 1 and 2 on Feb. 28th. We can use the COPY command for this as well. In a postgres terminal, run:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;COPY (SELECT moteid, time, epoch, temperature&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;FROM intellab&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;WHERE moteid IN (1,2) AND date = '2004-02-28')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TO '/tmp/temp_1_2_02-28.txt';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We can now take the output file and load it into our math program or simulator of choice. BTW, you can further control the output of COPY ... TO. See the &lt;a href="http://www.postgresql.org/docs/8.1/interactive/sql-copy.html"&gt;COPY manual page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kudos to the Intel Lab for making the data set available to the public!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-5505724465355703828?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/5505724465355703828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/03/getting-intel-lab-data-into-postgres.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/5505724465355703828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/5505724465355703828'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/03/getting-intel-lab-data-into-postgres.html' title='Getting Intel Lab Data into Postgres (and getting it out again)'/><author><name>Frederik</name><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-1701290979105271381.post-2103550567764737051</id><published>2009-02-12T12:49:00.003+01:00</published><updated>2009-02-12T12:56:47.814+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sweden'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu ... cola!</title><content type='html'>I have come across this cola in a café called &lt;a href="http://www.barista.cc/o.o.i.s/27"&gt;Barista&lt;/a&gt; on my trip to Uppsala (Sweden) last week. (Check out their web site, it has a live web cam of their coffee machine)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_JidFKbHHxz4/SZQNvqxHC8I/AAAAAAAAACM/sfSUWQ2YXlE/s1600-h/ubuntu_cola.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://4.bp.blogspot.com/_JidFKbHHxz4/SZQNvqxHC8I/AAAAAAAAACM/sfSUWQ2YXlE/s320/ubuntu_cola.png" alt="" id="BLOGGER_PHOTO_ID_5301877773907200962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Being the nerd that I (sometimes) am, I bought a couple. It is actually a pretty decent cola, but at 26 SEK per can it is pricy as well. However, since it's a fair trade product, you can actually feel well for paying too much (or maybe the right amount?) for a cola.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-2103550567764737051?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/2103550567764737051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/02/ubuntu-cola.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/2103550567764737051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/2103550567764737051'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/02/ubuntu-cola.html' title='Ubuntu ... cola!'/><author><name>Frederik</name><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/_JidFKbHHxz4/SZQNvqxHC8I/AAAAAAAAACM/sfSUWQ2YXlE/s72-c/ubuntu_cola.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1701290979105271381.post-4487566413725308065</id><published>2009-02-11T20:50:00.002+01:00</published><updated>2009-02-11T20:53:19.308+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sunspot'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='air guitar'/><title type='text'>Sun SPOT Air Guitar source code</title><content type='html'>So here's the source code to the air guitar, along with some instructions. For those who are already familiar with the Sun SPOTs, there will be no surprises here -- the software is fairly trivial. Ok, here we go ...&lt;br /&gt;&lt;br /&gt;What you need:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Two Sun SPOTs&lt;/li&gt;&lt;li&gt;One basestation Sun SPOT&lt;/li&gt;&lt;li&gt;A host computer (I tried on Windows PC, should work on Linux or Mac as well, but I haven't tested.)&lt;/li&gt;&lt;li&gt;A working Sun SPOT development environment&lt;/li&gt;&lt;li&gt;A working Java development environment&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A MIDI output. This can be anything from the Windows software synth to Reason&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;How it works:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One spot is going to be your "pick", which you use to strum. Make sure its accelerometer is &lt;a href="http://www.sunspotworld.com/docs/AppNotes/AccelerometerAppNote.pdf"&gt;calibrated correctly&lt;/a&gt;!&lt;/li&gt;&lt;li&gt;One spot is going to be the "neck". You will use it to change the chord you're playing.&lt;/li&gt;&lt;li&gt;The basestation spot is going to be the "pickup". It will dump any radio messages to its serial output.&lt;/li&gt;&lt;li&gt;A piece of software called the "amp" runs on the computer. It reads from a serial input and creates the appropriate MIDI events.&lt;/li&gt;&lt;/ul&gt;The sources are available here: &lt;a href="http://page.mi.fu-berlin.de/hermans/air-guitar-090126.zip"&gt;air-guitar-090126.zip&lt;/a&gt;. Download the zip file and extract its content to a directory of your choice.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Installing the software on the spots&lt;/span&gt;&lt;br /&gt;First, we're installing the pick. Connect the spot you will be using as pick to your computer, change into the &lt;span style="font-weight: bold;font-family:courier new;" &gt;Pick/&lt;/span&gt; directory and run &lt;span style="font-weight: bold;font-family:courier new;" &gt;ant deploy&lt;/span&gt;. The spot will be reflashed.&lt;br /&gt;When you turn on the pick spot, it is very important that its XY-plane is parallel to your body and that the Y-axis is parallel to the floor. After pressing the power button, hold the spot in this position until the middle LED starts fading. (This is required because the rest offset is computed after the spot is turned on. All further calculations of acceleration are performed with respect to this rest offset. If the offset is calculated incorrectly, the spot will not be able to correctly detect up and down strokes.)&lt;br /&gt;&lt;br /&gt;The next thing to install is the neck. Connect the spot you will be using as neck to your computer, change into the &lt;span style="font-weight: bold;font-family:courier new;" &gt;Neck/&lt;/span&gt; directory and run &lt;span style="font-weight: bold;font-family:courier new;" &gt;ant deploy&lt;/span&gt;. Make sure you select the right spot! Having two picks or two necks is not especially useful ;)&lt;br /&gt;&lt;br /&gt;Ok, now we will need the pickup, which is the basestation spot. It will listen on the radio channel and simply dump everything it gets to the USB port. Connect it to your computer, change into the &lt;span style="font-weight: bold;"&gt;&lt;span style="font-family:courier new;"&gt;Pickup/&lt;/span&gt; &lt;/span&gt;directory and run &lt;span style="font-weight: bold;font-family:courier new;" &gt;ant deploy&lt;/span&gt;. Restart all spots.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Making sure things work&lt;/span&gt;&lt;br /&gt;Before we start to rock, let's make sure the spots are setup properly. Connect the basestation node (pickup), change into the &lt;span style="font-weight: bold;font-family:courier new;" &gt;Pickup/&lt;/span&gt; directory and run &lt;span style="font-weight: bold;font-family:courier new;" &gt;ant echo&lt;/span&gt;. This will dump any serial output from the pickup.&lt;br /&gt;Take the neck spot and try pressing one of the user buttons. If you press the left button, the message "up" should be printed. If you press the right button, it should say "down".&lt;br /&gt;Now take the pick spot. Move it as if you were strumming a guitar (holding it in parallel to your body, as explained above). You should see a message saying "stroke" whenever you strum.&lt;br /&gt;&lt;br /&gt;Ok, if everything worked out, let's hook things up to some MIDI synthesizer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Creating MIDI output&lt;/span&gt;&lt;br /&gt;The amp software runs on the computer. It reads from the USB and plays out MIDI events. As a command line argument, it takes the USB device (i.e. the basestation spot) to read from. Under Windows, this should be something like &lt;span style="font-weight: bold;font-family:courier new;" &gt;COM3&lt;/span&gt;, under Linux it's something like &lt;span style="font-weight: bold;font-family:georgia;" &gt;/dev/ttyACM0&lt;/span&gt;.&lt;br /&gt;Compile the amp software and start it. It is very important that you have the rxtx-library on your classpath. If not, you can yank it from the spot SDK. Make sure to provide it with the right USB device to read from. Whenever it get's a "stroke" message from the basestation spot, it will send a MIDI event. Go ahead and try by strumming the Pick spot. If you're on Windows, you should hear the built-in Windows software synth playing a chord on a piano.&lt;br /&gt;You can change the chord to be played using the buttons of the neck spot, as explained above.&lt;br /&gt;If you press the rightbutton on the pick spot, the MIDI channel will be increased by one, thus allowing you to switch instruments.&lt;br /&gt;(Chords and the maximum number of channels can be changed in the amp sources. They're hardcoded for now.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Routing MIDI to another program (under Windows)&lt;/span&gt;&lt;br /&gt;Ok, this is still a bit boring, because the Windows software synth isn't actually that much fun. To redirect MIDI output to another program like Reason for example, you need a piece of software called &lt;a href="http://www.midiox.com/index.htm?http://www.midiox.com/myoke.htm"&gt;MIDI Yoke&lt;/a&gt;. Download and install it (you might need to restart your computer). Then, go to the Windows control panel and open the "Sounds and Audio devices" dialog. Select the "Audio" tab. There, change the default device for MIDI music playback to "Out to MIDI Yoke: 1".&lt;br /&gt;Now that you've changed the default MIDI output device, you need to setup the receiving application. For Reason 4, do as follows: Start up Reason and go to Edit -&gt; Preferences -&gt; Advanced Control. Make sure "In From MIDI Yoke: 1" is selected as Bus A. Then create a new empty rack. Add some instrument of your choice. For starters, an NN19 with a guitar preset loaded is nice. Now, on the topmost device of the rack (I don't know what it's called), press the button "Adv. MIDI device". Then assign Channel 1 to the device you have just created.&lt;br /&gt;At last, start the amp software as before and start playing ...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That concludes setting up the air guitar. Enjoy!&lt;br /&gt;&lt;br /&gt;I am eager to see your modifications of the code! Drop me a note if you implement new features. There is a lot of room for improvement :)&lt;br /&gt;It would be nice to write a hack for &lt;a href="http://fretsonfire.sourceforge.net/"&gt;Frets On Fire&lt;/a&gt; to use the spots to play.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-4487566413725308065?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/4487566413725308065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/02/sun-spot-air-guitar-source-code.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/4487566413725308065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/4487566413725308065'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/02/sun-spot-air-guitar-source-code.html' title='Sun SPOT Air Guitar source code'/><author><name>Frederik</name><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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1701290979105271381.post-8972715619959486835</id><published>2009-01-21T23:02:00.001+01:00</published><updated>2009-01-22T00:31:59.963+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lol'/><category scheme='http://www.blogger.com/atom/ns#' term='sunspot'/><category scheme='http://www.blogger.com/atom/ns#' term='air guitar'/><title type='text'>2x SunSPOTs + Propellerhead Reason = Air Guitar!</title><content type='html'>This is a little hack that I have done yesterday, being very bored with learning for my database exam. I took two &lt;a href="http://www.sunspotworld.com/"&gt;SunSPOT sensor nodes&lt;/a&gt; and &lt;a href="http://www.propellerheads.se/"&gt;Propellerhead Reason&lt;/a&gt; to build an air guitar that you can actually play!&lt;br /&gt;&lt;br /&gt;But enough talk, here's the video:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rHSngzazZg4&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/rHSngzazZg4&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As you will have noticed, it's not very accurate and does not replace a real guitar yet ;) Maybe I'll improve it when I have some more time on my hands.&lt;br /&gt;You will probably also have noticed that one of the SunSPOTs, the neck, is still connected over USB. This is because the battery is broken and cannot be charged, so I have to draw power over USB. It would probably rock much more if neither of the SPOTs would be connected.&lt;br /&gt;&lt;br /&gt;The software is written in Java: The stuff on the SunSPOTs as well as the application running on the PC. MIDI output from the PC application is redirected to Reason using &lt;a href="http://www.midiox.com/index.htm?http://www.midiox.com/myoke.htm"&gt;MIDI Yoke&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;At the end of the week I'll post the source code and a little tutorial for those interested in playing air guitar as well :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-8972715619959486835?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/8972715619959486835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/01/2x-sunspot-propellerhead-reason-air.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/8972715619959486835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/8972715619959486835'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/01/2x-sunspot-propellerhead-reason-air.html' title='2x SunSPOTs + Propellerhead Reason = Air Guitar!'/><author><name>Frederik</name><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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1701290979105271381.post-5228358828617956194</id><published>2009-01-18T22:54:00.005+01:00</published><updated>2009-01-18T23:05:10.907+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webcam'/><category scheme='http://www.blogger.com/atom/ns#' term='skype'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Getting your web cam to work with Skype and Xubuntu 8.10 (Intrepid Ibex)</title><content type='html'>Since Xubuntu 8.10, the video from my web cam is broken. When I test the web cam, all I see is noise, where as my partner does not receive any of my video. This is related to &lt;a href="https://bugs.launchpad.net/ubuntu/+source/libv4l/+bug/260918"&gt;bug 260918&lt;/a&gt;. However, there's a simple workaround.&lt;br /&gt;&lt;br /&gt;First of all, install libv4l-0. Open a terminal and type the following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;frederik@lolcat:~$ sudo apt-get install libv4l-0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then, you need to make sure that the newly installed library is used when you start Skype. Make sure Skype is not running yet, then enter this in your terminal:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;frederik@lolcat:~$ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Go to the Options -&gt; Video devices menu in Skype. Your web cam should work correctly now.&lt;br /&gt;&lt;br /&gt;It's a bit awkward to type the above command every time you want to start Skype, so I suggest creating a script for it. Just open up your favorite text editor and put the following lines in the empty file:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now save the file in your home directory under the name skype.sh.&lt;br /&gt;&lt;br /&gt;Now you need to make the script executable. To do this, in the terminal type:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;frederik@lolcat:~$ chmod +x skype.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now you can execute skype.sh whenever you want to start Skype.&lt;br /&gt;&lt;br /&gt;The last thing to fix is the menu entry. This is located in the file /usr/share/applications/skype.desktop. Open this file as root with a text editor of your choice and find the line "Exec=skype". Replace this line with the following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Exec=/home/frederik/skype.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Be sure to replace frederik with your username. Save the file.&lt;br /&gt;&lt;br /&gt;You may now need to restart XFCE for the change to take effect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-5228358828617956194?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/5228358828617956194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/01/getting-your-web-cam-to-work-with-skype.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/5228358828617956194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/5228358828617956194'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/01/getting-your-web-cam-to-work-with-skype.html' title='Getting your web cam to work with Skype and Xubuntu 8.10 (Intrepid Ibex)'/><author><name>Frederik</name><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-1701290979105271381.post-1211818884312730923</id><published>2009-01-17T23:50:00.000+01:00</published><updated>2009-01-18T13:32:24.221+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='laptop'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>Using the VGA output of your laptop's Intel graphics card</title><content type='html'>I have been a Linux user for quite some time now, and even though I am much more comfortable with using Linux than with any other operating system, there still are some things that really annoy me.&lt;br /&gt;&lt;br /&gt;One of these things is enabling the VGA output (i.e. the external monitor) on a laptop. I own a rather old Acer TravelMate 290 laptop that comes with an Intel 855GM graphics card. When using Xubuntu 8.04 and trying to enable the VGA output by hitting the Fn+F5 key, all my system did is ... crash. As you can imagine, this is especially annoying when you're supposed to give a talk! (Shame on me for not testing before.)&lt;br /&gt;&lt;br /&gt;With Xubuntu 8.10 (Intrepid Ibex), the system doesn't crash on Fn+F5 any more, but it will not enable the VGA output either. So after I spent quite some time researching and trying things out, here is how to enable your VGA output:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li style="font-weight: bold;"&gt;Attach a monitor/projector/something else to the VGA output of your laptop.&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;Open a terminal and run "xrand -q". It will show all your graphics card's outputs and the available modes. VGA is your VGA output (duh!) and LVDS is your laptop's LCD display.&lt;br /&gt;&lt;/li&gt;&lt;li style="font-weight: bold;"&gt;To enable the VGA output, enter  "xrandr --output VGA --mode 1024x768", where you substitute "1024x768" with the resolution of your LCD display (LVDS).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Voilá! VGA output is enabled and you're ready to give a great presentation.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This information is valid for all graphics cards that use the X intel driver. These are: G45, Q45, G43, Q43, GM45, G35, Q35, Q33, G33, 965GM, 965G, 965Q, 946GZ, 945G, 945GM, 915G, 915GM, 865G, 855GM, 845G, i830M, 815, 810, 810-DC100.&lt;br /&gt;For more information, see the &lt;a href="http://intellinuxgraphics.org/"&gt;X intel driver's homepage&lt;/a&gt;. It also has a tutorial on how to setup a &lt;a href="http://intellinuxgraphics.org/dualhead.html"&gt;dual-screen environment&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;About the function keys: Unfortunately, it is not possible to capture Fn+F5 to run the xrandr-related magic automatically. It tried finding out the appropriate event using xev, but to no avail. Thus, for now, you're stuck with the command line.&lt;br /&gt;&lt;br /&gt;Hope this helps you to enable you VGA and give a good presentation, watch a cool movie, or use a dual-screen environment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1701290979105271381-1211818884312730923?l=threeorangelights.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://threeorangelights.blogspot.com/feeds/1211818884312730923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://threeorangelights.blogspot.com/2009/01/using-vga-output-of-your-laptops-intel.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/1211818884312730923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1701290979105271381/posts/default/1211818884312730923'/><link rel='alternate' type='text/html' href='http://threeorangelights.blogspot.com/2009/01/using-vga-output-of-your-laptops-intel.html' title='Using the VGA output of your laptop&apos;s Intel graphics card'/><author><name>Frederik</name><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></feed>
