<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='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' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-8979045496387455785</atom:id><lastBuildDate>Sat, 19 May 2012 06:03:45 +0000</lastBuildDate><category>linux</category><category>arduino</category><category>recepten</category><category>tuin nl</category><category>erlang</category><category>smoothie</category><category>programming</category><category>milieu</category><category>hints</category><category>misc</category><category>electronics</category><category>lang:nl</category><category>lang:en wii fitness</category><category>atmega</category><category>photo</category><category>foto</category><category>amd64</category><category>grep</category><category>tajine</category><category>debian</category><category>lotr</category><category>email</category><category>recipes</category><category>lang:en</category><category>avr</category><category>recepten nl</category><title>starlight</title><description>blog of Joost Yervante Damad</description><link>http://joost.damad.be/</link><managingEditor>noreply@blogger.com (Joost Yervante Damad)</managingEditor><generator>Blogger</generator><openSearch:totalResults>182</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-7519411710804868394</guid><pubDate>Mon, 30 Apr 2012 04:55:00 +0000</pubDate><atom:updated>2012-04-30T07:32:15.904+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>misc</category><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>electronics</category><title>shipping of electronic parts from USA to europe: UPS vs DHL/FEDEX</title><description>When buying electronic parts it sometimes is cheaper to buy in the USA. There are some caveats concerning shipping though.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;UPS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;While sometimes a bit cheaper (but I usually end up with free shipping because I cluster my buys), there is one very big drawback, and that is import tax.&lt;br /&gt;With UPS you have to pay the import tax in cash to the driver. Because you don't know the exact amount at order time you have to guess how much money you need to have in house and then some more because the driver usually can't give change back.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DHL &amp;amp; FEDEX&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;With DHL &amp;amp; FEDEX you don't pay the import tax to the driver, you get a separate bill via snail mail, which you can pay via a normal wire transfer. Much better!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Consequences&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;That being said, this starts to influence my buying choices. For example digikey usually ships with UPS, while mouser allows me to choose FEDEX, which makes mouser my preferred choice for buying parts from the USA.&lt;br /&gt;&lt;br /&gt;When buying in Europe it doesn't matter so for farnell and rsonline I don't mind either. If I can buy at either of those I still prefer that but both digikey and mouser have a somewhat larger and different selection.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Others&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;I basically buy most parts at those 4, and sometimes sparkfun or one of sparkfun's resellers of course. Are there any other shops you recommend ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-7519411710804868394?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2012/04/shipping-of-electronic-parts-from-usa.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-952581099340702854</guid><pubDate>Thu, 26 Apr 2012 19:28:00 +0000</pubDate><atom:updated>2012-04-26T21:28:15.725+02:00</atom:updated><title>3D printing a LED diffuser directly on PCB</title><description>"3D printing a LED diffuser directly on PCB"&lt;br /&gt;&lt;br /&gt;Yes, it is possible. Hence this quick blog post.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-m3AbkAfYpAc/T5mgZK0ohrI/AAAAAAAADSE/3Hd2Xdf9MCw/s1600/3d_print_diff.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="384" src="http://2.bp.blogspot.com/-m3AbkAfYpAc/T5mgZK0ohrI/AAAAAAAADSE/3Hd2Xdf9MCw/s640/3d_print_diff.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This lamp is a simple proto PCB with a whole lot (&amp;gt;30) of high brightness 0603 white LEDs soldered on them with a few layers of 3D printed yellow PLA on top of them.&lt;br /&gt;&lt;br /&gt;I had to add some DRAM heat-sinks to the back to deal with the massive heat production,&amp;nbsp;especially&amp;nbsp;given that PLA gets liquid at relatively low temperatures. Light production is quite poor, but it is cool for mood lighting.&lt;br /&gt;&lt;br /&gt;To be continued.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-952581099340702854?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2012/04/3d-printing-led-diffuser-directly-on.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-m3AbkAfYpAc/T5mgZK0ohrI/AAAAAAAADSE/3Hd2Xdf9MCw/s72-c/3d_print_diff.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-1383713922592473161</guid><pubDate>Sun, 01 Apr 2012 06:28:00 +0000</pubDate><atom:updated>2012-04-01T08:28:16.938+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>programming</category><title>3D printing and openSCAD</title><description>Yesterday, March 2012, I gave a short talk about 3D printing and openSCAD at Newline^2, the conference at &lt;a href="http://0x20.be/"&gt;0x20&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The slides and embedded pictures are available under the Creative Commons Attribution-ShareAlike 3.0.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://damad.be/joost/3dprinting_openscad.pdf"&gt;Click here to get them as PDF.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-1383713922592473161?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2012/04/3d-printing-and-openscad.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total><georss:featurename>De Gent 20, 7609 Almelo, The Netherlands</georss:featurename><georss:point>52.3377251 6.6365076</georss:point><georss:box>52.3352996 6.6315721 52.3401506 6.6414431</georss:box></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-5649742253698393959</guid><pubDate>Sat, 10 Mar 2012 07:13:00 +0000</pubDate><atom:updated>2012-03-10T08:13:15.768+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>arduino</category><category domain='http://www.blogger.com/atom/ns#'>atmega</category><category domain='http://www.blogger.com/atom/ns#'>hints</category><category domain='http://www.blogger.com/atom/ns#'>avr</category><category domain='http://www.blogger.com/atom/ns#'>programming</category><title>Arduino, limited RAM and PROGMEM</title><description>And so I was happily adding more and more descent error handling code to a piece of code running on an atmega328p (the Atmel AVR&amp;nbsp;micro-controller&amp;nbsp;also typically used in Arduino). And then the thing started acting up. Now I've had that happen to me before so I immediately thought that it was running out of RAM.&lt;br /&gt;&lt;br /&gt;The atmega328p has 32k flash, which is typically plenty, but it has only 2k RAM, which is not very much at all.&lt;br /&gt;&lt;br /&gt;I was doing things like:&lt;br /&gt;&lt;br /&gt;Serial.println("FAIL invalid argument");&lt;br /&gt;&lt;br /&gt;Now, you might be thinking, why does it have to store the "FAIL invalid argument" in RAM?&lt;br /&gt;It has all to do with how braindead C/C++ is/are.&lt;br /&gt;&lt;br /&gt;"FAIL invalid argument" is a "const char *" which although it seems read-only it actually isn't (and no "const char const *" isn't either).&lt;br /&gt;Thing is in C it is perfectly legal to cast away any types and just start changing characters in the string.&lt;br /&gt;And the compiler can't know you're not doing that as you could be doing it via some very scary indirect&amp;nbsp;pointer&amp;nbsp;arithmetic to get to the characters in the string.&lt;br /&gt;&lt;br /&gt;Bottom line is that every "constant" string in the code is copied to RAM because it could theoretically be used.&lt;br /&gt;&lt;br /&gt;Now, on to PROGMEM.&lt;br /&gt;&lt;br /&gt;It is a way to use strings directly as contained in the program code, but without the copying to RAM.&lt;br /&gt;&lt;br /&gt;Okay, I'll first give the short answer which works fine on arduino 0.22 or newer:&lt;br /&gt;&lt;br /&gt;Serial.println(F("FAIL invalid argument"));&lt;br /&gt;&lt;br /&gt;This does some casting and other magic in the back and does the right thing.&lt;br /&gt;&lt;br /&gt;Just for educational purposes lets take a look how to do it without arduino tricks.&lt;br /&gt;&lt;br /&gt;the &amp;lt;avr/pgmspace.h&amp;gt; header contains a useful macro, called PSTR which looks like we could use it just like this:&lt;br /&gt;&lt;br /&gt;Serial.println(PSTR("FAIL invalid argument"));&lt;br /&gt;&lt;br /&gt;Unfortunately that doesn't work. PSTR returns a PROGMEM pointer and it turns out (even though the atmega has a flat address space) we can't use PROGMEM pointers just like regular pointers.&lt;br /&gt;&lt;br /&gt;It will nicely compile and give garbage.&lt;br /&gt;&lt;br /&gt;The only way is copying the data from PROGMEM to RAM and then using it.&lt;br /&gt;&lt;br /&gt;This could be done byte-by-byte with&amp;nbsp;pgm_read_byte (this is what arduino does internally, take a peek in arduino-1.0/hardware/arduino/cores/arduino/Print.cpp ) or to a buffer in RAM with&amp;nbsp;strcpy_P.&lt;br /&gt;&lt;br /&gt;All this is quite awkward and error-prone and makes me long for a nicer language for microcontrollers ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-5649742253698393959?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2012/03/arduino-limited-ram-and-progmem.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-114402584254596266</guid><pubDate>Fri, 20 Jan 2012 18:16:00 +0000</pubDate><atom:updated>2012-01-20T19:16:44.224+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>arduino</category><category domain='http://www.blogger.com/atom/ns#'>atmega</category><category domain='http://www.blogger.com/atom/ns#'>avr</category><category domain='http://www.blogger.com/atom/ns#'>programming</category><title>arduino mega and multiple hardware serial devices</title><description>For a project I use an arduino mega (Atmel AtMega1280 8-bit micro-controller to be precise) &amp;nbsp;to access multiple other hardware devices via hardware serial.&lt;br /&gt;&lt;br /&gt;I'm running the Arduino stack on the hardware, more specific the arduino 1.0 release.&lt;br /&gt;&lt;br /&gt;Now the atmega1280 (or atmega2560) has 4 hardware serial devices (called &lt;b&gt;Serial&lt;/b&gt;, &lt;b&gt;Serial1&lt;/b&gt;, &lt;b&gt;Serial2&lt;/b&gt;, &lt;b&gt;Serial3&lt;/b&gt; in arduino) so using multiple serial devices is easy eh?&lt;br /&gt;&lt;br /&gt;Not really.&lt;br /&gt;&lt;br /&gt;For one use case I have a device connected on &lt;b&gt;Serial1&lt;/b&gt; at 57600 baud.&lt;br /&gt;I want to be able to route serial traffic from that device to the &lt;b&gt;Serial&lt;/b&gt; device connected to the PC.&lt;br /&gt;&lt;br /&gt;Sounds easy enough, the follow arduino sketch does the job:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;void &lt;/span&gt;&lt;span style="color: black;"&gt;setup&lt;/span&gt;&lt;span style="color: grey;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Serial.begin&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;57600&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.begin&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;57600&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;void &lt;/span&gt;&lt;span style="color: black;"&gt;loop&lt;/span&gt;&lt;span style="color: grey;"&gt;() &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;// from external device to serial console&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.available&lt;/span&gt;&lt;span style="color: grey;"&gt;() &amp;gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;byte &lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.read&lt;/span&gt;&lt;span style="color: grey;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;Serial.write&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;// from serial console to external device&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;Serial.available&lt;/span&gt;&lt;span style="color: grey;"&gt;() &amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;byte &lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;Serial.read&lt;/span&gt;&lt;span style="color: grey;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.write&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Thing is, for short messages this works fine. However for longer messages only one direction is stable, the direction from the external device (Serial1) to the serial port (Serial).&lt;br /&gt;&lt;br /&gt;I could run the serial port (Serial) at a slower speed then the device (Serial1). However then the other way around will start to drop bytes!&lt;br /&gt;&lt;br /&gt;Let's have a look at &lt;b&gt;HardwareSerial.cpp&lt;/b&gt; as provided in the arduino distribution.&lt;br /&gt;&lt;br /&gt;It seems to work with an RX and TX buffer for each hardware serial device.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#define SERIAL_BUFFER_SIZE 64&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Maybe that buffer is not large enough. The AtMega1280 I'm using has 8K SRAM and thats quite some more then I need. Let's double the buffer.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#define SERIAL_BUFFER_SIZE 128&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Surely the behavior is somewhat better, but it is still dropping bytes in one direction.&lt;br /&gt;&lt;br /&gt;Let's have a look at the write function.&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;size_t HardwareSerial::write&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;uint8_t c&lt;/span&gt;&lt;span style="color: grey;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;int &lt;/span&gt;&lt;span style="color: black;"&gt;i &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;_tx_buffer&lt;/span&gt;&lt;span style="color: grey;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;head &lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;span style="color: grey;"&gt;) % &lt;/span&gt;&lt;span style="color: black;"&gt;SERIAL_BUFFER_SIZE&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green;"&gt;// If the output buffer is full, there's nothing for it other than to &lt;br /&gt;&amp;nbsp;&amp;nbsp;// wait for the interrupt handler to empty it a bit&lt;br /&gt;&amp;nbsp;&amp;nbsp;// ???: return 0 here instead?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;while &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;i &lt;/span&gt;&lt;span style="color: blue;"&gt;== &lt;/span&gt;&lt;span style="color: black;"&gt;_tx_buffer&lt;/span&gt;&lt;span style="color: grey;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;tail&lt;/span&gt;&lt;span style="color: grey;"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;_tx_buffer&lt;/span&gt;&lt;span style="color: grey;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;buffer[_tx_buffer-&amp;gt;head] &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;c&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;_tx_buffer&lt;/span&gt;&lt;span style="color: grey;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;head &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;i&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;sbi&lt;/span&gt;&lt;span style="color: grey;"&gt;(*&lt;/span&gt;&lt;span style="color: black;"&gt;_ucsrb&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: black;"&gt;_udrie&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return &lt;/span&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Look and behold:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;while (i == _tx_buffer-&amp;gt;tail)&lt;br /&gt;    ;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;it's a busy loop! If Serial1's transfer buffer is full the entire micro-controller will block and this keeps happening all the time.&lt;br /&gt;&lt;br /&gt;The solution I introduced is only move data from one serial device to the other when both are ready. One should be readable (available() in arduino jargon) and the other should be writeable.&lt;br /&gt;&lt;br /&gt;A writeable function is not available in Arduino so I added the following method to the HardwareSerial code:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;bool &lt;/span&gt;&lt;span style="color: black;"&gt;HardwareSerial::writeable&lt;/span&gt;&lt;span style="color: grey;"&gt;()&lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;int &lt;/span&gt;&lt;span style="color: black;"&gt;i &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;_tx_buffer&lt;/span&gt;&lt;span style="color: grey;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;head &lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;span style="color: grey;"&gt;) % &lt;/span&gt;&lt;span style="color: black;"&gt;SERIAL_BUFFER_SIZE&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;i &lt;/span&gt;&lt;span style="color: grey;"&gt;!= &lt;/span&gt;&lt;span style="color: black;"&gt;_tx_buffer&lt;/span&gt;&lt;span style="color: grey;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;tail&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The loop from the sketch now looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;void &lt;/span&gt;&lt;span style="color: black;"&gt;loop&lt;/span&gt;&lt;span style="color: grey;"&gt;() &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.available&lt;/span&gt;&lt;span style="color: grey;"&gt;() &amp;gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;0 &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;Serial.writeable&lt;/span&gt;&lt;span style="color: grey;"&gt;()) &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;byte &lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.read&lt;/span&gt;&lt;span style="color: grey;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;Serial.write&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;Serial.available&lt;/span&gt;&lt;span style="color: grey;"&gt;() &amp;gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;0 &amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.writeable&lt;/span&gt;&lt;span style="color: grey;"&gt;()) &lt;/span&gt;&lt;span style="color: black;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;byte &lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;Serial.read&lt;/span&gt;&lt;span style="color: grey;"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: black;"&gt;Serial1.write&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;incomingByte&lt;/span&gt;&lt;span style="color: grey;"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This helps in the sense that it smooths the flow between the serial devices.&lt;br /&gt;&lt;br /&gt;No more dropped bytes!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-114402584254596266?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2012/01/arduino-mega-and-multiple-hardware.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-6072691868721144387</guid><pubDate>Mon, 18 Jul 2011 15:49:00 +0000</pubDate><atom:updated>2011-07-18T17:49:21.950+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>hints</category><title>X with xmonad without KDE/gnome, continued</title><description>This is the setup I settled upon in the end, it's working great. It has&amp;nbsp;heavily based on&amp;nbsp;&lt;a href="http://haskell.org/haskellwiki/Xmonad/Config_archive/John_Goerzen%27s_Configuration"&gt;this wiki page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.xsession&lt;/span&gt; file:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# Load resources&lt;br /&gt;&lt;br /&gt;xrdb -merge .Xresources&lt;br /&gt;&lt;br /&gt;# Set up an icon tray&lt;br /&gt;&lt;br /&gt;trayer --edge top --align right --SetDockType true --SetPartialStrut true \&lt;br /&gt;--expand true --width 10 --transparent true --tint 0x191970 --height 12 &amp;amp;&lt;br /&gt;&lt;br /&gt;# Set the background color&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;xsetroot -solid midnightblue&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;# Fire up apps&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;xscreensaver -no-splash &amp;amp;&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;if [ -x /usr/bin/nm-applet ] ; then    nm-applet --sm-disable &amp;amp; fi&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;if [ -x /usr/bin/gnome-power-manager ] ; then    sleep 3    gnome-power-manager &amp;amp; fi&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#xset b off&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;eval `gpg-agent --daemon`&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;eval `ssh-agent --daemon`&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;setxkbmap -option compose:caps&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;exec xmonad  &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In order to have X execute the .xsession isof starting the window manager itself, choose the "System default" as session type in gdm or kdm.&lt;br /&gt;&lt;br /&gt;This is my .Xresource file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# red cursor Color, looks great in combination with xmonad&lt;br /&gt;xterm*cursorColor: red&lt;br /&gt;&lt;br /&gt;# save tons of lines&lt;br /&gt;xterm*saveLines: 100000&lt;br /&gt;&lt;br /&gt;# triple click like in konsole/gnome-termimal&lt;br /&gt;xterm*on3Clicks: regex [^ \n]+&lt;br /&gt;xterm*on4Clicks: line&lt;br /&gt;&lt;br /&gt;# use fancy terminus font&lt;br /&gt;xterm*FaceName: terminus-10&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.xmobarrc&lt;/span&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Config { font = "-*-Fixed-Bold-R-Normal-*-13-*-*-*-*-*-*-*"&lt;br /&gt;, bgColor = "black"&lt;br /&gt;, fgColor = "grey"&lt;br /&gt;, position = TopW L 90&lt;br /&gt;, lowerOnStart = True&lt;br /&gt;, commands = [&lt;br /&gt;Run Weather "EBDT" ["-t"," &lt;tempc&gt;C","-L","64","-H","77","--normal","green","--high","red","--low","lightblue"] 36000,&lt;br /&gt;Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10,&lt;br /&gt;Run Memory ["-t","Mem: &lt;usedratio&gt;%"] 10,&lt;br /&gt;Run Swap [] 10,&lt;br /&gt;Run Date "%a %b %_d %H:%M" "date" 10,&lt;br /&gt;Run StdinReader&lt;br /&gt;]&lt;br /&gt;, sepChar = "%"&lt;br /&gt;, alignSep = "}{"&lt;br /&gt;, template = "%StdinReader% }{ ancalagon %cpu% | %memory% * %swap%    &lt;fc=#ee9a00&gt;%date% | %EBDT%"&lt;br /&gt;}&lt;br /&gt;&lt;/fc=#ee9a00&gt;&lt;/usedratio&gt;&lt;/tempc&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;ancalagon&lt;/i&gt; is the name of my laptop.&lt;br /&gt;&lt;br /&gt;Finally, this is the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.xmonad/xmonad.hs&lt;/span&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import XMonad&lt;br /&gt;import XMonad.Hooks.DynamicLog&lt;br /&gt;import XMonad.Hooks.ManageDocks&lt;br /&gt;import XMonad.Util.Run(spawnPipe)&lt;br /&gt;import XMonad.Util.EZConfig(additionalKeys)&lt;br /&gt;import System.IO&lt;br /&gt;&lt;br /&gt;main = do&lt;br /&gt;    xmproc &lt;- spawnPipe "xmobar"     xmonad $ defaultConfig         { manageHook = manageDocks &lt;+&gt; manageHook defaultConfig&lt;br /&gt;        , layoutHook = avoidStruts  $  layoutHook defaultConfig&lt;br /&gt;        , logHook = dynamicLogWithPP xmobarPP&lt;br /&gt;                        { ppOutput = hPutStrLn xmproc&lt;br /&gt;                        , ppTitle = xmobarColor "green" "" . shorten 50&lt;br /&gt;                        }&lt;br /&gt;        --, modMask = mod4Mask     -- Rebind Mod to the Windows key&lt;br /&gt;        } `additionalKeys`&lt;br /&gt;        [ ((controlMask .|. shiftMask, xK_z), spawn "xscreensaver-command -lock")&lt;br /&gt;        , ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")&lt;br /&gt;        , ((0, xK_Print), spawn "scrot")&lt;br /&gt;        ]&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;With big thanks to John Goerzen for providing the excellent information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-6072691868721144387?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2011/07/x-with-xmonad-without-kdegnome.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-662996743468955361</guid><pubDate>Sun, 10 Jul 2011 10:41:00 +0000</pubDate><atom:updated>2011-07-10T12:41:11.756+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>linux</category><category domain='http://www.blogger.com/atom/ns#'>hints</category><title>configuring X with xmonad without KDE/gnome</title><description>While configuring X11 to use the &lt;a href="http://xmonad.org/"&gt;xmonad&lt;/a&gt; tiling window manager instead of the more usual KDE or GNOME, some things were somewhat less then obvious, and I document them here.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;.xsession configuration&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;These are settings that all can be made permanent by adding them to the&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.xsession&lt;/span&gt; file in your home directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;disable CAPS, enable Compose&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;setxkbmap -option compose:caps&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Now you can use the Caps Lock key to compose special characters. E.g.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;lt;Caps&amp;gt; 'e &amp;nbsp; gives é&lt;/li&gt;&lt;li&gt;&amp;lt;Caps&amp;gt; e= &amp;nbsp;gives €&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;... and as a bonus you can't accidentally press the Caps Lock key any more!&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;disable beep globally&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;xset b off&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;start gpg-agent on startup&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: inherit; font-size: medium; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;eval `gpg-agent --daemon`&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: medium; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: medium; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: medium; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;start ssh-agent on startup&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: medium; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: medium; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;eval `ssh-agent --daemon`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;other things&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;dmenu&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: x-large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Install the &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;suckless-tools&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; package for dmenu among things.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Just use &amp;lt;alt&amp;gt;-p to quicklanch apps with dmenu.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;xterm&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I want to use plain xterm as terminal emulator as the tabbing of gnome-terminal and konsole is rather pointless in combination with the tiling.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The default font size was to small. To solve this I did a dirty hack like this:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;update-alternatives -config xterm and change it to uxterm to have an UTF-8 terminal by default&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;edit /usr/bin/uxterm and change the last line by adding &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;-fn 10x20&lt;/span&gt; to it.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;email&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;At the moment I'm still using kmail as email client (and accidentally akregator as RSS feed agregator). I'm still thinking about switching that as well.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;... to be continued ...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit; font-size: medium; font-weight: normal;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-662996743468955361?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2011/07/configuring-x-with-xmonad-without.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-1599442447673095604</guid><pubDate>Fri, 01 Jul 2011 07:34:00 +0000</pubDate><atom:updated>2011-07-01T09:34:19.601+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>misc</category><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>hints</category><title>one month with a makerbot thing-o-matic, some musings</title><description>I've been meaning to write up more about my learning experience with the makerbot thing-o-matic 3D printer, but for now a short summary is already better then nothing:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;construction&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;I bought the printer as an assembly kit from robosavvy.co.uk. It took me about 12 hours spread over about 10 evenings to build the printer. Had to redo a few steps, some steps were not very clear. Should've made notes of that but didn't. Guess I was to eager to finish!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;shortage of wire&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;One issue I had is that some cables were to short to fit&amp;nbsp;comfortably&amp;nbsp;and be able to survive the movement of the printer platform. I extended them with some wire I had lying around.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;printing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Finally after finishing the construction I installed the software, did basic calibration of the machine and did a first print. It actually somewhat worked already!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;calibration&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;After some playing around I noticed the Z axis motor got really hot, soo I did a full calbration as described&lt;br /&gt;at &amp;nbsp;&lt;a href="http://wiki.makerbot.com/thingomatic-doc:calibration"&gt;http://wiki.makerbot.com/thingomatic-doc:calibration&lt;/a&gt;&amp;nbsp;. This solved the heat issue.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ABS &amp;amp; warping&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;I started printing with the roll of black ABS supplied with the printer.&lt;br /&gt;These are the relevant settings:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;platform temperature: 125°C&lt;/li&gt;&lt;li&gt;heater temperature: 225°C&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Printing goes fine but the plastic warps really easily. This is due to the ABS getting solid again really fast as it cools down.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;PLA&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I ordered some &lt;a href="http://en.wikipedia.org/wiki/Polylactic_acid"&gt;PLA&lt;/a&gt;&amp;nbsp;from german&amp;nbsp;supplier&amp;nbsp;&lt;a href="http://www.2printbeta.de/index.php?cPath=1"&gt;2printbeta&lt;/a&gt;. PLA is a&amp;nbsp;compost-able&amp;nbsp;plastic that is made from corn waste and has some interesting properties. The most important one is that PLA doesn't get solid as fast as ABS as it cools down. This seems to avoid warping all together. PLA also comes in beautiful&amp;nbsp;transparent&amp;nbsp;variants.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These are the settings I use for the PLA I bought, but be sure to check the recommendations of the vendor:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;platform temperature: 75°C&lt;/li&gt;&lt;li&gt;heater temperature: 195°C&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;PLA and higher temperatures&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Some people recommend using PLA at way higher temperatures like 235°C. This is really dangerous as the PLA will become liquid all the way up into the plastic transport part of the printing head and could bond to the plastic up there. I had to re-assembly the head after I tried that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;plastic not moving anymore&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;One of the most common issues is that the plastic is no longer pushed down in the head. This could be because the nut got loose due to excessive shaking of the printer, but I also had another issue:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Z-axis calibration&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This is vitally important. The Z axis should have a correctly configured max height.&lt;/div&gt;&lt;div&gt;The issue I had was that the max height was slight altered due to moving the machine around a lot and this caused the head to start printing too close to the platform. This causes pressure to build up in the head and the stepper-motor starts skipping. If this happens to you be sure to check the Z-axis setting!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;white plastic&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;For some bizar reason both the white ABS and white PLA I have causes the stepper to skip at times. I don't know why yet but for now I'm not using white plastic anymore.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;modelling&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Of course in the beginning it is fun just to print the calibration cubes and stuff found on thing-i-verse but after a while I wanted to start making something myself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was quite a bummer to find out that google sketchup doesn't work under Linux. Then I found openSCAD, which is a declarative programming language for constructing objects. It works quite ok for simple things.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;conclusion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;I still have a lot to learn about 3D printing. Documentation is quite sparse still.&lt;/li&gt;&lt;li&gt;It is &lt;b&gt;fun&lt;/b&gt; and I already made some items that are in use.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The thing-o-matic printer requires a willingness to maintain the machine or it will give issues.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-1599442447673095604?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2011/07/one-month-with-makerbot-thing-o-matic.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-6347461571072017537</guid><pubDate>Fri, 08 Apr 2011 06:55:00 +0000</pubDate><atom:updated>2011-04-08T08:55:41.199+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>recipes</category><title>bread maker hints and tips</title><description>Since a couple of years I have the excellent &lt;a href="http://www.amazon.co.uk/gp/product/B003DNRTEG/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;amp;tag=joostdamadbe-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=B003DNRTEG"&gt;Panasonic Automatic Breadmaker&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.co.uk/e/ir?t=joostdamadbe-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=B003DNRTEG" style="border: none !important; margin: 0px !important;" width="1" /&gt;.&lt;br /&gt;The quality of bread it produces easily matches and with some help surpasses the quality provided by the bakery. Here are a few hints that help make the experience better.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Use more water!&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;A 1kg bread based on 600g flour typically requires between 360 and 380 ml of water. I always use 400ml. This makes your bread a bit stronger and it'll dry out less fast.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Use less salt&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;You can easily get away with 4-5gram less salt then the recipe requires and it'll still taste great.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Ready-made flour mixes&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;There is nothing wrong with using ready-made flour mixes.However in my&amp;nbsp;opinion&amp;nbsp;they tend to contain to much salt and tend to produce bread that is quite light in structure. I prefer stronger bread.&lt;br /&gt;&lt;br /&gt;The solution is adding some other non-mixed flour like rye. For example I typically replace 600g of mix with 150g rye and 450g mix. It's not needed to add any extra salt or yeast. The bread will still rise fine.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Pizza!&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;The bread maker also makes dough and the pizza dough is highly recommended. It only takes 45 minutes in the machine to make a nice dough. That being said, if you have more time I recommend making the dough earlier and letting it rest a while in the fridge.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-6347461571072017537?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2011/04/bread-maker-hints-and-tips.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-7988998306945640370</guid><pubDate>Wed, 06 Apr 2011 08:20:00 +0000</pubDate><atom:updated>2011-04-06T10:22:48.552+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>photo</category><category domain='http://www.blogger.com/atom/ns#'>foto</category><title>young deer,early morning</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RYnVr93mZVo/TZwhZw9KXEI/AAAAAAAACxM/JKQiLjWDso0/s1600/00018-DSC_8584.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://3.bp.blogspot.com/-RYnVr93mZVo/TZwhZw9KXEI/AAAAAAAACxM/JKQiLjWDso0/s320/00018-DSC_8584.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-7988998306945640370?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2011/04/young-deerearly-morning.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-RYnVr93mZVo/TZwhZw9KXEI/AAAAAAAACxM/JKQiLjWDso0/s72-c/00018-DSC_8584.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-7352993617484675579</guid><pubDate>Wed, 06 Apr 2011 07:58:00 +0000</pubDate><atom:updated>2011-04-06T09:58:01.606+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>debian</category><category domain='http://www.blogger.com/atom/ns#'>hints</category><category domain='http://www.blogger.com/atom/ns#'>grep</category><title>debian, grub2, booting the "other OS"</title><description>Recently my debian installation switched to grub2 and the boot menu no longer showed a working entry for booting my old XP partition.&lt;br /&gt;&lt;br /&gt;The solution is simple:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo&amp;nbsp;apt-get install os-prober&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo update-grub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;From now on grub2 will automatically detect and add to its menu all other OS partitions on your local disks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-7352993617484675579?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2011/04/debian-grub2-booting-other-os.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-1180647978540263031</guid><pubDate>Tue, 05 Apr 2011 17:10:00 +0000</pubDate><atom:updated>2011-04-05T19:10:31.915+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><title>blog moved</title><description>I my blog moved again, looks like some posts got republished to planet grep, my apologies for the spam.&lt;br /&gt;&lt;br /&gt;Joost&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-1180647978540263031?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2011/04/blog-moved.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-8920015651068691680</guid><pubDate>Sun, 22 Aug 2010 06:19:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.497+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>misc</category><category domain='http://www.blogger.com/atom/ns#'>debian</category><category domain='http://www.blogger.com/atom/ns#'>grep</category><title>digicorder and recording subsequent programs</title><description>Digital television is getting the norm in Belgium, and typically people rent a "digicorder" from the TV provider. This allows you to watch television and also record programs for later consumption.&lt;br/&gt;&lt;br/&gt;In practice my family only records a few programs and watch them later. It's very convenient not to be bound to a specific schedule. (On the other hand it would probably be cheaper to just buy the DVD boxes of the series we like instead of having television at all, but that is another discussion :) ).&lt;br/&gt;&lt;br/&gt;In general, the digicorder works fine, I have one big gripe with it though: recording of subsequent programs.&lt;br/&gt;&lt;br/&gt;Lets say we're recording subsequent programs A and B from channel 0. Let's assume there is some advertisement in between programs. This gives as timescale something like this:&lt;br/&gt;&lt;br/&gt;&lt;a href="http://joost.damad.be/wp-uploads/2010/08/timescale.png"&gt;&lt;img class="size-full wp-image-222 alignnone" title="timescale" src="http://joost.damad.be/wp-uploads/2010/08/timescale.png" alt="" width="570" height="38" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Now, there are three ways the digicorder can record the program, not counting the completely faulty ways when timing goes all wrong.&lt;br/&gt;&lt;br/&gt;Both programs want to record a time-slice before and after their program, but this goes wrong in the middle, and only one recording ends up with the middle part.&lt;br/&gt;&lt;h3&gt;&lt;strong&gt;&lt;em&gt;correct&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;br/&gt;The correct recording is with the break point in the middle like this:&lt;br/&gt;&lt;br/&gt;&lt;a href="http://joost.damad.be/wp-uploads/2010/08/timescale2.png"&gt;&lt;img class="size-full wp-image-223 alignnone" title="timescale2" src="http://joost.damad.be/wp-uploads/2010/08/timescale2.png" alt="" width="570" height="94" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I presume there are not some kind of markers in between the broad-casted programs on commercial television because it makes their advertisement store even worse.&lt;br/&gt;&lt;br/&gt;Therefor, in practice you typically end up with one if these two:&lt;br/&gt;&lt;h3&gt;&lt;strong&gt;&lt;em&gt;B in recording 1&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;br/&gt;&lt;strong&gt;&lt;em&gt;&lt;br/&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://joost.damad.be/wp-uploads/2010/08/timescale3.png"&gt;&lt;img class="size-full wp-image-224 alignnone" title="timescale3" src="http://joost.damad.be/wp-uploads/2010/08/timescale3.png" alt="" width="570" height="94" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;This is problematic because if you don't remember not to erase recording 1 after watching program A, the start of program 2 will be lost.&lt;br/&gt;&lt;h3&gt;&lt;strong&gt;&lt;em&gt;A in recording 2&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;br/&gt;&lt;strong&gt;&lt;em&gt;&lt;br/&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://joost.damad.be/wp-uploads/2010/08/timescale4.png"&gt;&lt;img class="size-full wp-image-225 alignnone" title="timescale4" src="http://joost.damad.be/wp-uploads/2010/08/timescale4.png" alt="" width="570" height="94" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;This is even worse. Lets say you want to watch program B first.&lt;br/&gt;&lt;br/&gt;You first have to open recording 1, fast forward all the way to the start of program B, start watching and after a few minutes switch to recording 2. This will also leave recording 1 marked as "watched" even though you didn't watch program A yet. More confusion!&lt;br/&gt;&lt;h3&gt;&lt;strong&gt;&lt;em&gt;A simple solution&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;&lt;br/&gt;In the end this is a simple technical problem with an even simpler solution: record the overlap in a separate file and make it part of both recordings. Visual:&lt;br/&gt;&lt;br/&gt;&lt;a href="http://joost.damad.be/wp-uploads/2010/08/timescale5.png"&gt;&lt;img class="size-full wp-image-226 alignnone" title="timescale5" src="http://joost.damad.be/wp-uploads/2010/08/timescale5.png" alt="" width="570" height="95" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;If you watch recording 1, you get recording 1 + X. If you watch recording 2, you get X + recording 2.&lt;br/&gt;&lt;br/&gt;If you erase recording 1, X stays. Only if both recording 1 and recording 2 are erased, X gets deleted.&lt;br/&gt;&lt;br/&gt;More in general there will be X areas both in front and at the end, etc...&lt;br/&gt;&lt;br/&gt;Would be nice if the biggest TV provider of Belgium could implement this. If the digicorder was open source I would've done this already months ago...&lt;br/&gt;I guess I'll have to look into some kind of MythTV like setup one day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-8920015651068691680?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/08/digicorder-and-recording-subsequent.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-3647460948321854423</guid><pubDate>Sat, 14 Aug 2010 06:59:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.500+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>photo</category><category domain='http://www.blogger.com/atom/ns#'>foto</category><title>morning vs evening</title><description>&lt;p style="text-align: left;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Morning (dew)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br/&gt;&lt;p style="text-align: left;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br/&gt;&lt;a href="http://picasaweb.google.com/lh/photo/e7_2ok1MDAHkUs0t5F27o5DmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_2Exr8a4xFSg/TGWPprjau8I/AAAAAAAACDg/xI5OTK8SCyU/s800/20100813_morning.jpg" alt="" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Evening (rain)&lt;/span&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://picasaweb.google.com/lh/photo/gmuVND4XlhMfQGlqVogsQJDmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_2Exr8a4xFSg/TGY-h5B-yKI/AAAAAAAACDs/aFJSShVtFxw/s800/20100813_evening.jpg" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-3647460948321854423?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/08/morning-vs-evening.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_2Exr8a4xFSg/TGWPprjau8I/AAAAAAAACDg/xI5OTK8SCyU/s72-c/20100813_morning.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-7410167731934024172</guid><pubDate>Wed, 21 Jul 2010 08:13:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.502+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>photo</category><category domain='http://www.blogger.com/atom/ns#'>foto</category><title>young tomato</title><description>&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/AqSCVbjgIWrbr-d82xr92ZDmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_2Exr8a4xFSg/TEIMoTmyPBI/AAAAAAAACB4/NsbBfJ2cLY8/s400/f1817896.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/andete/2010?authkey=Gv1sRgCK_DiYrt4Zfc8AE&amp;feat=embedwebsite"&gt;2010&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-7410167731934024172?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/07/young-tomato.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_2Exr8a4xFSg/TEIMoTmyPBI/AAAAAAAACB4/NsbBfJ2cLY8/s72-c/f1817896.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-8453379072592368011</guid><pubDate>Wed, 21 Jul 2010 08:12:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.506+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>photo</category><category domain='http://www.blogger.com/atom/ns#'>foto</category><title>valeriaan</title><description>&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/2cJv6DcO_B5uRI3XGNYKJpDmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_2Exr8a4xFSg/TEIMn6Jp5dI/AAAAAAAACB0/8wYJo6PCPgs/s400/f1396392.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/andete/2010?authkey=Gv1sRgCK_DiYrt4Zfc8AE&amp;feat=embedwebsite"&gt;2010&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-8453379072592368011?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/07/valeriaan.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_2Exr8a4xFSg/TEIMn6Jp5dI/AAAAAAAACB0/8wYJo6PCPgs/s72-c/f1396392.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-790466750045620124</guid><pubDate>Sat, 17 Jul 2010 18:38:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.508+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>misc</category><category domain='http://www.blogger.com/atom/ns#'>grep</category><title>arduino-0018, avrdude and usbtiny programmer</title><description>For some reason the avrdude binary that is shipped with arduino-0018 has no support for the USBtiny programmer which I use to burn bootloaders on blank AVR atmega328 microcontrollers.&lt;br/&gt;On Debian the workaround is simple: first install avrdude via apt-get/aptidude and then enter the hardware/tools directory in the arduino-0018 dir and replace avrdude by a softlink to /usr/bin/avrdude like this:&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;$ cd arduino-0018/hardware/tools&lt;br/&gt;$ mv avrdude avrdude.old1&lt;br/&gt;$ ln -s /usr/bin/avrdude .&lt;br/&gt;$ mv avrdude.conf avrdude.conf.old1&lt;br/&gt;$ cp /etc/avrdude.conf .&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;After this burning a bootloader via the menu in arduino works fine again. A similar approach will probably work on other Linux distributions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-790466750045620124?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/07/arduino-0018-avrdude-and-usbtiny.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-7396254687496833313</guid><pubDate>Mon, 07 Jun 2010 18:41:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.509+02:00</atom:updated><title>digitalis 2</title><description>&lt;center&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/lK6Nk2F4TR_bhUNB8tLlPZDmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_2Exr8a4xFSg/TA06OD9GM5I/AAAAAAAAB-M/qJhDEZ0vDmo/s400/DSC_6389.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br/&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-7396254687496833313?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/06/digitalis-2.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_2Exr8a4xFSg/TA06OD9GM5I/AAAAAAAAB-M/qJhDEZ0vDmo/s72-c/DSC_6389.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-5136443608509117418</guid><pubDate>Mon, 07 Jun 2010 18:40:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.511+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>photo</category><title>digitalis 1</title><description>&lt;center&gt;&lt;br/&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/51n3w_apdQxuD_vonwHPqZDmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_2Exr8a4xFSg/TA06NRTgcrI/AAAAAAAAB-I/6HYtypAS5WQ/s400/DSC_6388.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br/&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-5136443608509117418?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/06/digitalis-1.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_2Exr8a4xFSg/TA06NRTgcrI/AAAAAAAAB-I/6HYtypAS5WQ/s72-c/DSC_6388.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-8747699373144640238</guid><pubDate>Mon, 07 Jun 2010 18:37:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.513+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>photo</category><title>papaver</title><description>&lt;center&gt;&lt;br/&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/wQ5X0ey8uAIZUyR4SD5CspDmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_2Exr8a4xFSg/TA06MO7Xp7I/AAAAAAAAB-A/Efqp2YHIdgE/s400/DSC_6346.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br/&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-8747699373144640238?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/06/papaver.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_2Exr8a4xFSg/TA06MO7Xp7I/AAAAAAAAB-A/Efqp2YHIdgE/s72-c/DSC_6346.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-3823573019408777182</guid><pubDate>Mon, 07 Jun 2010 18:34:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.517+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>photo</category><title>check my coachwork</title><description>&lt;center&gt;&lt;br/&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/8JhfFOQRWCN7IBbs2ktgjJDmhpRRbmkJRAbbGK-EGTc?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_2Exr8a4xFSg/TA06LF-oMnI/AAAAAAAAB98/G7fekv5Jd_I/s400/DSC_6334.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br/&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-3823573019408777182?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/06/check-my-coachwork.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_2Exr8a4xFSg/TA06LF-oMnI/AAAAAAAAB98/G7fekv5Jd_I/s72-c/DSC_6334.jpg' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-8184903575729881439</guid><pubDate>Fri, 07 May 2010 14:30:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.520+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><title>amavisd-new clamav crashes tmp files</title><description>Since I still run my own mail infrastructure, I also run anti-spam and anti-virus on it.&lt;br/&gt;Today I noticed that free space on my server running lenny was ALOT less then usual. Turned out that clamav was crashing all the time causing lots of temporary files in /var/lib/amavis/tmp.&lt;br/&gt;&lt;br/&gt;An upgrade of clamav also stopped the crashes.&lt;br/&gt;&lt;br/&gt;While at it I also disabled quarantining virus mails, I never had to retrieve any mail out of there anyway...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-8184903575729881439?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/05/amavisd-new-clamav-crashes-tmp-files.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-7451684952319207513</guid><pubDate>Fri, 12 Feb 2010 06:39:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.525+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>lang:en</category><category domain='http://www.blogger.com/atom/ns#'>debian</category><category domain='http://www.blogger.com/atom/ns#'>grep</category><title>Nokia N82 Bluetooth + GPRS/3G</title><description>A few months ago I did an interesting discovery about using my cellphone to go on the internet via bluetooth. I had this strange situation before where it just stopped working, and after revisiting all configs it worked again.&lt;br/&gt;&lt;br/&gt;What really happens is that my cellphone somehow crashes, after which I power cycle it by removing the batteries. The phone then boots again, but here is the twist: the service channels in the phone are re-allocated and apparently in a random order!&lt;br/&gt;&lt;br/&gt;This implies that the RFCOMM channel configured in the &lt;em&gt;/etc/bluetooth/rfcomm.conf&lt;/em&gt; file is possible wrong now!&lt;br/&gt;&lt;br/&gt;Solution: just browse the services again with &lt;em&gt;sdptool browse&lt;/em&gt;, adapt the file and it should work again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-7451684952319207513?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/02/nokia-n82-bluetooth-gprs3g.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>9</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-5202506165399572554</guid><pubDate>Sun, 31 Jan 2010 06:50:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.527+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>foto</category><title>Ochtendzon, Grote Nete</title><description>&lt;p style="text-align: center;"&gt;&lt;a href="http://joost.damad.be/wp-uploads/2010/01/DSC_47961.jpg"&gt;&lt;img class="aligncenter size-full wp-image-164" title="morning sun, grote nete" src="http://joost.damad.be/wp-uploads/2010/01/DSC_47961.jpg" alt="" width="368" height="245" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br/&gt;Ochtend zon aan de Grote Nete in December 2009.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-5202506165399572554?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/01/ochtendzon-grote-nete.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-8979045496387455785.post-1182793933612804134</guid><pubDate>Sun, 31 Jan 2010 06:46:00 +0000</pubDate><atom:updated>2011-04-05T13:14:39.529+02:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>photo</category><title>Morning sun, grote nete</title><description>&lt;p style="text-align: center;"&gt;&lt;a href="http://joost.damad.be/wp-uploads/2010/01/DSC_47961.jpg"&gt;&lt;img class="aligncenter size-full wp-image-164" title="morning sun, grote nete" src="http://joost.damad.be/wp-uploads/2010/01/DSC_47961.jpg" alt="" width="430" height="286" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br/&gt;December 2009, Morning sun at the Grote Nete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8979045496387455785-1182793933612804134?l=joost.damad.be' alt='' /&gt;&lt;/div&gt;</description><link>http://joost.damad.be/2010/01/morning-sun-grote-nete.html</link><author>noreply@blogger.com (Joost Yervante Damad)</author><thr:total>2</thr:total></item></channel></rss>
