<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Peter Fichtner&#039;s Blog</title>
	<atom:link href="http://pfichtner.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pfichtner.wordpress.com</link>
	<description></description>
	<lastBuildDate>Thu, 12 Jan 2012 23:53:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pfichtner.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Peter Fichtner&#039;s Blog</title>
		<link>http://pfichtner.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pfichtner.wordpress.com/osd.xml" title="Peter Fichtner&#039;s Blog" />
	<atom:link rel='hub' href='http://pfichtner.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Determine the type of RAM (package decode-dimms)</title>
		<link>http://pfichtner.wordpress.com/2012/01/13/determine-the-type-of-ram-package-decode-dimms/</link>
		<comments>http://pfichtner.wordpress.com/2012/01/13/determine-the-type-of-ram-package-decode-dimms/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 23:53:18 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=196</guid>
		<description><![CDATA[Install i2c-tools (debian/ubuntu aptitude install i2c-tools) modprobe eeprom execute decode-dimms Example output of decode-dimms: # decode-dimms version 5733 (2009-06-09 13:13:41 +0200) Memory Serial Presence Detect Decoder By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner, Jean Delvare, Trent Piepho and others Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0054 Guessing DIMM is in                             bank 5 &#8212;=== SPD EEPROM Information ===&#8212; EEPROM Checksum [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=196&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<ul>
<li>Install i2c-tools (debian/ubuntu aptitude install i2c-tools)</li>
<li>modprobe eeprom</li>
<li>execute decode-dimms</li>
</ul>
<p>Example output of decode-dimms:</p>
<p># decode-dimms version 5733 (2009-06-09 13:13:41 +0200)</p>
<p>Memory Serial Presence Detect Decoder<br />
By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner,<br />
Jean Delvare, Trent Piepho and others</p>
<p>Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0054<br />
Guessing DIMM is in                             bank 5</p>
<p>&#8212;=== SPD EEPROM Information ===&#8212;<br />
EEPROM Checksum of bytes 0-62                   OK (0x6F)<br />
# of bytes written to SDRAM EEPROM              128<br />
Total number of bytes in EEPROM                 256<br />
Fundamental Memory type                         SDR SDRAM<br />
SPD Revision                                    18</p>
<p>&#8212;=== Memory Characteristics ===&#8212;<br />
Size                                            256 MB<br />
tCL-tRCD-tRP-tRAS                               3-2-2-6<br />
Number of Row Address Bits                      12<br />
Number of Col Address Bits                      10<br />
Number of Module Rows                           2<br />
Data Width                                      64<br />
Voltage Interface Level                         LVTTL (not 5V tolerant)<br />
Module Configuration Type                       No Parity<br />
Refresh Type                                    Self Refreshing<br />
Refresh Rate                                    Normal (15.625 us)<br />
Primary SDRAM Component Bank Config             No Bank2 OR Bank2 = Bank1 width<br />
Primary SDRAM Component Widths                  8<br />
Error Checking SDRAM Component Bank Config      No Bank2 OR Bank2 = Bank1 width<br />
Error Checking SDRAM Component Widths           Undefined!<br />
Min Clock Delay for Back to Back Random Access  1<br />
Supported Burst Lengths                         1, 2, 4, 8, Page<br />
Number of Device Banks                          4<br />
Supported CAS Latencies                         3T, 2T<br />
Supported CS Latencies                          0<br />
Supported WE Latencies                          0<br />
Cycle Time                                      7.5 ns at CAS 3<br />
7.5 ns ns at CAS 2<br />
Access Time                                     5.4 ns at CAS 3<br />
5.4 ns ns at CAS 2<br />
SDRAM Module Attributes                         (None Reported)<br />
SDRAM Device Attributes (General)               Supports Auto-Precharge<br />
Supports Precharge All<br />
Supports Write1/Read Burst<br />
Lower VCC Tolerance: 10%<br />
Upper VCC Tolerance: 10%<br />
Minimum Row Precharge Time                      15 ns<br />
Row Active to Row Active Min                    15 ns<br />
RAS to CAS Delay                                15 ns<br />
Min RAS Pulse Width                             45 ns<br />
Row Densities                                   128 MByte<br />
Command and Address Signal Setup Time           1.5 ns<br />
Command and Address Signal Hold Time            0.8 ns<br />
Data Signal Setup Time                          1.5 ns<br />
Data Signal Hold Time                           0.8 ns</p>
<p>&#8212;=== Manufacturing Information ===&#8212;<br />
Manufacturer                                    Hyundai Electronics<br />
Manufacturing Location Code                     0&#215;02<br />
Part Number                                     71V32635HCT8P-K<br />
Revision Code                                   0&#215;4141<br />
Manufacturing Date                              2009-W67<br />
Assembly Serial Number                          0x80E1211B</p>
<p>&#8212;=== Intel Specification ===&#8212;<br />
Frequency                                       100MHz or 133MHz<br />
Details for 100MHz Support                      Intel Concurrent Auto-precharge<br />
CAS Latency = 2<br />
CAS Latency = 3<br />
Junction Temp A (100 degrees C)<br />
CLK 3 Connected<br />
CLK 2 Connected<br />
CLK 1 Connected<br />
CLK 0 Connected<br />
Double-sided DIMM</p>
<p>Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0055<br />
Guessing DIMM is in                             bank 6</p>
<p>&#8212;=== SPD EEPROM Information ===&#8212;<br />
EEPROM Checksum of bytes 0-62                   OK (0x9F)<br />
# of bytes written to SDRAM EEPROM              128<br />
Total number of bytes in EEPROM                 256<br />
Fundamental Memory type                         SDR SDRAM<br />
SPD Revision                                    18</p>
<p>&#8212;=== Memory Characteristics ===&#8212;<br />
Size                                            128 MB<br />
tCL-tRCD-tRP-tRAS                               3-3-3-6<br />
Number of Row Address Bits                      12<br />
Number of Col Address Bits                      9<br />
Number of Module Rows                           2<br />
Data Width                                      64<br />
Voltage Interface Level                         LVTTL (not 5V tolerant)<br />
Module Configuration Type                       No Parity<br />
Refresh Type                                    Self Refreshing<br />
Refresh Rate                                    Normal (15.625 us)<br />
Primary SDRAM Component Bank Config             No Bank2 OR Bank2 = Bank1 width<br />
Primary SDRAM Component Widths                  8<br />
Error Checking SDRAM Component Bank Config      No Bank2 OR Bank2 = Bank1 width<br />
Error Checking SDRAM Component Widths           Undefined!<br />
Min Clock Delay for Back to Back Random Access  1<br />
Supported Burst Lengths                         1, 2, 4, 8, Page<br />
Number of Device Banks                          4<br />
Supported CAS Latencies                         3T, 2T<br />
Supported CS Latencies                          0<br />
Supported WE Latencies                          0<br />
Cycle Time                                      7.5 ns at CAS 3<br />
10 ns ns at CAS 2<br />
Access Time                                     5.4 ns at CAS 3<br />
6 ns ns at CAS 2<br />
SDRAM Module Attributes                         (None Reported)<br />
SDRAM Device Attributes (General)               Supports Auto-Precharge<br />
Supports Precharge All<br />
Supports Write1/Read Burst<br />
Lower VCC Tolerance: 10%<br />
Upper VCC Tolerance: 10%<br />
Minimum Row Precharge Time                      20 ns<br />
Row Active to Row Active Min                    15 ns<br />
RAS to CAS Delay                                20 ns<br />
Min RAS Pulse Width                             45 ns<br />
Row Densities                                   64 MByte<br />
Command and Address Signal Setup Time           1.5 ns<br />
Command and Address Signal Hold Time            0.8 ns<br />
Data Signal Setup Time                          1.5 ns<br />
Data Signal Hold Time                           0.8 ns</p>
<p>&#8212;=== Manufacturing Information ===&#8212;<br />
Manufacturer                                    Hyundai Electronics<br />
Manufacturing Location Code                     0&#215;01<br />
Part Number                                     7V631601BTFG-75<br />
Revision Code                                   0&#215;4241<br />
Manufacturing Date                              2052-W00<br />
Assembly Serial Number                          0xA202C14B</p>
<p>&#8212;=== Intel Specification ===&#8212;<br />
Frequency                                       100MHz or 133MHz<br />
Details for 100MHz Support                      Intel Concurrent Auto-precharge<br />
CAS Latency = 2<br />
CAS Latency = 3<br />
Junction Temp B (90 degrees C)<br />
CLK 3 Connected<br />
CLK 2 Connected<br />
CLK 1 Connected<br />
CLK 0 Connected<br />
Double-sided DIMM</p>
<p>Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0056<br />
Guessing DIMM is in                             bank 7</p>
<p>&#8212;=== SPD EEPROM Information ===&#8212;<br />
EEPROM Checksum of bytes 0-62                   OK (0xE1)<br />
# of bytes written to SDRAM EEPROM              128<br />
Total number of bytes in EEPROM                 256<br />
Fundamental Memory type                         SDR SDRAM<br />
SPD Revision                                    18</p>
<p>&#8212;=== Memory Characteristics ===&#8212;<br />
Size                                            128 MB<br />
tCL-tRCD-tRP-tRAS                               3-2-2-5<br />
Number of Row Address Bits                      12<br />
Number of Col Address Bits                      9<br />
Number of Module Rows                           2<br />
Data Width                                      64<br />
Voltage Interface Level                         LVTTL (not 5V tolerant)<br />
Module Configuration Type                       No Parity<br />
Refresh Type                                    Self Refreshing<br />
Refresh Rate                                    Normal (15.625 us)<br />
Primary SDRAM Component Bank Config             No Bank2 OR Bank2 = Bank1 width<br />
Primary SDRAM Component Widths                  8<br />
Error Checking SDRAM Component Bank Config      No Bank2 OR Bank2 = Bank1 width<br />
Error Checking SDRAM Component Widths           Undefined!<br />
Min Clock Delay for Back to Back Random Access  1<br />
Supported Burst Lengths                         1, 2, 4, 8, Page<br />
Number of Device Banks                          4<br />
Supported CAS Latencies                         3T, 2T<br />
Supported CS Latencies                          0<br />
Supported WE Latencies                          0<br />
Cycle Time                                      10 ns at CAS 3<br />
10 ns ns at CAS 2<br />
Access Time                                     6 ns at CAS 3<br />
6 ns ns at CAS 2<br />
SDRAM Module Attributes                         (None Reported)<br />
SDRAM Device Attributes (General)               Supports Auto-Precharge<br />
Supports Precharge All<br />
Supports Write1/Read Burst<br />
Lower VCC Tolerance: 10%<br />
Upper VCC Tolerance: 10%<br />
Minimum Row Precharge Time                      20 ns<br />
Row Active to Row Active Min                    16 ns<br />
RAS to CAS Delay                                20 ns<br />
Min RAS Pulse Width                             45 ns<br />
Row Densities                                   64 MByte<br />
Command and Address Signal Setup Time           2 ns<br />
Command and Address Signal Hold Time            1 ns<br />
Data Signal Setup Time                          2 ns<br />
Data Signal Hold Time                           1 ns</p>
<p>&#8212;=== Manufacturing Information ===&#8212;<br />
Manufacturer                                    Infineon (former Siemens)<br />
Custom Manufacturer Data                        49 4E 46 49 4E 45 4F (&#8220;INFINEO&#8221;)<br />
Manufacturing Location Code                     0&#215;08<br />
Part Number                                     HYS64V16220GU-8<br />
Revision Code                                   0&#215;0102<br />
Manufacturing Date                              2000-W14<br />
Assembly Serial Number                          0x0102BE2E</p>
<p>&#8212;=== Intel Specification ===&#8212;<br />
Frequency                                       100MHz or 133MHz<br />
Details for 100MHz Support                      Intel Concurrent Auto-precharge<br />
CAS Latency = 2<br />
CAS Latency = 3<br />
Junction Temp A (100 degrees C)<br />
CLK 3 Connected<br />
CLK 2 Connected<br />
CLK 1 Connected<br />
CLK 0 Connected<br />
Double-sided DIMM</p>
<p>Number of SDRAM DIMMs detected and decoded: 3</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/196/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=196&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2012/01/13/determine-the-type-of-ram-package-decode-dimms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Serial console on SliTaz linux</title>
		<link>http://pfichtner.wordpress.com/2011/08/09/serial-console-on-slitaz-linux/</link>
		<comments>http://pfichtner.wordpress.com/2011/08/09/serial-console-on-slitaz-linux/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 23:04:56 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=188</guid>
		<description><![CDATA[To get serial console on SliTaz you have to compile your own kernel since serial console is not enabled in SliTaz: Please enable CONFIG_SERIAL_8250_CONSOLE in kernel config and build your own custom kernel (see this post or here) To tell the kernel that it should send its output also to the serial console you have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=188&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>To get serial console on SliTaz you have to compile your own kernel since serial console is not enabled in SliTaz: Please enable CONFIG_SERIAL_8250_CONSOLE in kernel config and build your own custom kernel (see <a title="http://pfichtner.wordpress.com/2011/07/18/slitaz-on-nfs-root/" href="http://pfichtner.wordpress.com/2011/07/18/slitaz-on-nfs-root/">this post</a> or <a title="http://doc.slitaz.org/en:guides:kernel" href="http://doc.slitaz.org/en:guides:kernel">here</a>) To tell the kernel that it should send its output also to the serial console you have to add</p>
<blockquote><p>console=tty0 console=ttyS0,115200n8</p></blockquote>
<p>to kernel&#8217;s boot parameters (e.g. <em>kernel /boot/vmlinuz-2.6.37-slitaz-serial root=/dev/sda1 panic=60 lang=de_DE console=tty0 console=ttyS0,115200n8</em>) in /boot/grub/menu.lst (legacy grub) If you&#8217;d like to see grub&#8217;s output on serial console add</p>
<blockquote><p>serial &#8211;unit=0 &#8211;speed=115200 &#8211;word=8 &#8211;parity=no &#8211;stop=1 terminal &#8211;timeout=10 serial console</p></blockquote>
<p>to /boot/grub/menu.lst (legacy grub). It&#8217;s a good choice to enable a getty listening on the serial line after the kernel has booted yo you schould add the line</p>
<blockquote><p>ttyS0::respawn:/sbin/getty -L 115200 ttyS0 vt102</p></blockquote>
<p>to /etc/inittab</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=188&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2011/08/09/serial-console-on-slitaz-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Most crazy door phone solution</title>
		<link>http://pfichtner.wordpress.com/2011/08/06/most-crazy-door-phone-solution/</link>
		<comments>http://pfichtner.wordpress.com/2011/08/06/most-crazy-door-phone-solution/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 14:00:24 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=96</guid>
		<description><![CDATA[Because I didn&#8217;t want to rip the court between my house and the gate (where the door phone should be get installed)  I was searching for a solution to operate a door phone without a physical telephone line to it. My main idea was to integrate the door phone into my exisiting SIP (VOIP) environment [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=96&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Because I didn&#8217;t want to rip the court between my house and the gate (where the door phone should be get installed)  I was searching for a solution to operate a door phone without a physical telephone line to it.</p>
<p>My main idea was to integrate the door phone into my exisiting SIP (VOIP) environment which is reachable by WiFi (WLAN). There exist door phones with so called a/b interfaces that can be connected like any other phone to a PBX (private branch exchange, =telephone system).<br />
Based on this I thought it should be possible to connect the door phone to an ATA (analog telephone adapter) that connects to the SIP server via WiFi connection.</p>
<p>Unfortunately these adapters are very expensive so I looked around for an alternative solution and finally found one: BCM96348GW based ADSL-Router (sold as Targa WR500 VOIP and the Speedport Deutsche Telekom W500V) can be used as ATAs by installing an <a title="http://bitswitcher.sourceforge.net" href="http://bitswitcher.sourceforge.net">alternative firmware</a>. With a little patience I got one on ebay for 1€.<br />
After installing the new firmware I put it into the arbor next to the gate (of course you need power jack at the place you&#8217;d like to install the door phone and the ATA to get the whole installation working!)</p>
<p>Now you can ring my door and I could answer even if I&#8217;m far away since I am connected with my mobile to the PBX via 3G. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&#8230;but as I said this was not my main attention but not to rip the court.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=96&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2011/08/06/most-crazy-door-phone-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Slitaz on NFS root</title>
		<link>http://pfichtner.wordpress.com/2011/07/18/slitaz-on-nfs-root/</link>
		<comments>http://pfichtner.wordpress.com/2011/07/18/slitaz-on-nfs-root/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 09:54:06 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[WiFi/Netboot]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=170</guid>
		<description><![CDATA[Slitaz won&#8217;t work out of the box on a NFS root, two problems have to been fixed: Kernel udhcp default script Kernel Recompile the kernel (as described here): call &#8220;tazpkg get-install linux-source&#8221;, this will install get-linux-source and all the kernel patches call &#8220;tazpkg get-install slitaz-toolchain&#8221;, this will install the binaries needed for compiling kernels call [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=170&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a title="SliTaz" href="www.slitaz.org">Slitaz</a> won&#8217;t work out of the box on a NFS root, two problems have to been fixed:</p>
<ul>
<li>Kernel</li>
<li>udhcp default script</li>
</ul>
<p><strong>Kernel</strong></p>
<p>Recompile the kernel (as described <a title="http://doc.slitaz.org/en:guides:kernel" href="http://doc.slitaz.org/en:guides:kernel">here</a>):</p>
<ul>
<li>call &#8220;tazpkg get-install linux-source&#8221;, this will install get-linux-source and all the kernel patches</li>
<li>call &#8220;tazpkg get-install slitaz-toolchain&#8221;, this will install the binaries needed for compiling kernels</li>
<li>call &#8220;tazpkg get-install ncurses-dev&#8221;, this will install ncurses files needed for the make target &#8220;menuconfig&#8221;</li>
<li>call &#8220;tazpkg get-install perl&#8221;, needed by kernel malefiles</li>
<li>call &#8220;get-linux-source&#8221;, this will download the kernel sources and patch them</li>
<li>cd into /usr/src/linux-$(version)</li>
<li>call &#8220;make menuconfig&#8221;</li>
<li>activate &#8220;IP: kernel level autoconfiguration&#8221; (CONFIG_IP_PNP)</li>
<li>activate &#8220;IP: DHCP support&#8221; (CONFIG_IP_PNP_DHCP)</li>
<li>activate &#8220;Root file system on NFS&#8221; (CONFIG_ROOT_NFS)</li>
<li>call &#8220;make bzImage&#8221;</li>
<li>copy the resulting kernel (arch/x86/boot/bzImage) beside the exisiting kernel and add it to grub&#8217;s menu.lst or copy it over the existing kernel (not prefered since it would be overwritten when doing a kernel package update).</li>
</ul>
<p><strong>Patch /usr/share/udhcpc/default.script</strong></p>
<p>Since udhcp would pull down the exisiting ethernet connection on the device used for the NFS mount we have to check for the NFS mount. The format defininition of the /proc/mounts changed in lately kernels so there are two possible regexps, the version active works on SliTaz cooking. I&#8217;m not sure on which kernel version the format did change.</p>
<p>Please patch the included /usr/share/udhcpc/default.script using the patch attached</p>
<blockquote><p>@@ -9,9 +9,19 @@<br />
[ -n "$broadcast" ] &amp;&amp; BROADCAST=&#8221;broadcast $broadcast&#8221;<br />
[ -n "$subnet" ] &amp;&amp; NETMASK=&#8221;netmask $subnet&#8221;</p>
<p>+# return 0 if root is mounted on a network filesystem<br />
+root_is_nfs() {<br />
+        ## old style<br />
+        # grep -qe &#8216;^/dev/root.*\(nfs\|smbfs\|ncp\|coda\) .*&#8217; /proc/mounts<br />
+        ## new style<br />
+        grep -qe &#8216;^.*:.* / \(nfs\|smbfs\|ncp\|coda\) .*&#8217; /proc/mounts<br />
+}<br />
+<br />
case &#8220;$1&#8243; in<br />
deconfig)<br />
-               /sbin/ifconfig $interface 0.0.0.0<br />
+               if ! root_is_nfs ; then<br />
+                       /sbin/ifconfig $interface 0.0.0.0<br />
+               fi<br />
for i in /etc/ipdown.d/*; do<br />
[ -x $i ] &amp;&amp; $i $interface<br />
done<br />
@@ -22,9 +32,11 @@</p>
<p>if [ -n "$router" ] ; then<br />
echo &#8220;deleting routers&#8221;<br />
-                       while route del default gw 0.0.0.0 dev $interface ; do<br />
-                               :<br />
-                       done<br />
+                       if ! root_is_nfs ; then<br />
+                               while route del default gw 0.0.0.0 dev $interface ; do<br />
+                                       :<br />
+                               done<br />
+                       fi</p>
<p>metric=0<br />
for i in $router ; do</p></blockquote>
<p>Boot and have fun! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=170&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2011/07/18/slitaz-on-nfs-root/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Read-only Slitaz using aufs</title>
		<link>http://pfichtner.wordpress.com/2011/03/08/read-only-slitaz-using-aufs/</link>
		<comments>http://pfichtner.wordpress.com/2011/03/08/read-only-slitaz-using-aufs/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 08:58:22 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MPD]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=156</guid>
		<description><![CDATA[As SliTaz provides a perfect base for embeded-like systems I used it for another MPD Client. The computer resists behind my stereo and gets its power from it. So when switching off the stereo the computer loses power too which causes a not unmounted filesystem. I didn&#8217;t like that and thought of live CDs where [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=156&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As <a title="Slitaz" href="http://www.slitaz.org/">SliTaz</a> provides a perfect base for embeded-like systems I used it for another <a title="MPD Client" href="http://mpd.wikia.com/">MPD Client</a>. The computer resists behind my stereo and gets its power from it. So when switching off the stereo the computer loses power too which causes a not unmounted filesystem. I didn&#8217;t like that and thought of live CDs where the real filesystem (the iso) is mounted on top (overlay) of a ram-filesystem.</p>
<p>This should be possible using not an ISO (loop/cloop) based filesystem but also an ext2/3/4 filesystem. A short google search showed me <a title="http://wiki.ubuntuusers.de/Nur-Lesen_Root-Dateisystem_mit_aufs" href="http://wiki.ubuntuusers.de/Nur-Lesen_Root-Dateisystem_mit_aufs">http://wiki.ubuntuusers.de/Nur-Lesen_Root-Dateisystem_mit_aufs</a> which is exactly the solution I was looking for. I only had to adopt it on SliTaz.</p>
<p>The Slitaz way is more complicated since I don&#8217;t know of a SliTaz package that offers initrd creation functionality so you have to do this all by your own, please follow these  instructions:</p>
<ul>
<li>extract an exisiting initrd (use the one that comes with any SliTaz ISO)  &#8220;cat rootfs.gz | lzma -d -c | cpio -i&#8221;</li>
<li>install aufs kernel module (tazpkg install linux-aufs)</li>
<li>remove all module branches from the initrd (rm -rf lib/modules/*)</li>
<li>copy all kernel modules of the running kernel to it (cp -ax /lib/modules`uname -r` lib/modules)</li>
<li>copy the attached init (see below) into initrd</li>
<li>make it executable (chmod 0755 init)</li>
<li>repack it (find . -print | cpio -o -H newc | lzma -c &#8211;best &gt;../aufsrootfs.gz)</li>
<li>modify the bootloader by passing the initrd and adding aufs=tmpfs to the kernel parameters</li>
</ul>
<p>Init comes with two scripts that allows you to remount the underlying root partition rw. So you&#8217;re able to change the content of the filesystem (e.g. for running updates) but beware: If you&#8217;ll upgrade the kernel you have to repack the initrd!</p>
<p>Have fun!</p>
<p>This is the init you have to use instead of the existing one:</p>
<blockquote><p>#! /bin/sh</p>
<p>export aufs</p>
<p>mount -t proc proc /proc<br />
mount -t sysfs sysfs /sys</p>
<p>for x in $(cat /proc/cmdline); do<br />
case $x in<br />
root=*)<br />
ROOTNAME=${x#root=}<br />
;;<br />
aufs=*)<br />
aufs=${x#aufs=}<br />
case $aufs in<br />
tmpfs-debug)<br />
aufs=tmpfs<br />
aufsdebug=1<br />
;;<br />
esac<br />
;;<br />
esac<br />
done</p>
<p>echo<br />
echo &#8220;root-aufs: Setting up aufs on ${ROOTNAME} as root file system &#8220;<br />
echo</p>
<p>modprobe -q aufs || insmod /lib/modules/`uname -r`/kernel/fs/aufs/aufs.ko.gz<br />
if [ $? -ne 0 ]; then<br />
echo    root-aufs error: Failed to load aufs module<br />
exit 0<br />
fi</p>
<p>#make the mount points on the init root file system<br />
mkdir /aufs<br />
mkdir /rw<br />
mkdir /ro</p>
<p># mount the temp file system and move real root out of the way<br />
mount -t tmpfs aufs-tmpfs /rw<br />
mount ${ROOTNAME} /ro<br />
if [ $? -ne 0 ]; then<br />
echo &#8220;root-aufs error: ${ROOTNAME}  failed to move to /ro&#8221;<br />
exit 0<br />
fi</p>
<p>mount -t aufs -o dirs=/rw:/ro=ro aufs /aufs<br />
if [ $? -ne 0 ]; then<br />
echo    root-aufs error:      Failed to mount /aufs files system<br />
exit 0<br />
fi</p>
<p>#test for mount points on aufs file system<br />
[  -d /aufs/ro ] || mkdir /aufs/ro<br />
[  -d /aufs/rw ] || mkdir /aufs/rw</p>
<p># the real root file system is hidden on /ro of the init file system.  move it to /ro<br />
mount -omove /ro /aufs/ro<br />
if [ $? -ne 0 ]; then<br />
echo    root-aufs error:      Failed to move /ro /aufs/ro<br />
exit 0<br />
fi</p>
<p># tmpfs file system is hidden on /rw<br />
mount -omove /rw /aufs/rw<br />
if [ $? -ne 0 ]; then<br />
echo    root-aufs error:      Failed to move /rw /aufs/rw<br />
exit 0<br />
fi</p>
<p>#Add the comment block to fstab<br />
cat &lt;&lt;EOF &gt;/aufs/etc/fstab<br />
#<br />
#  $0 has mounted the root file system in ram<br />
#<br />
#  This fstab is in ram and the real fstab can be found /ro/etc/fstab<br />
#  The root file system &#8216; / &#8216; has been removed.<br />
EOF</p>
<p>#remove root from fstab<br />
cat /aufs/ro/etc/fstab|grep -v &#8216; / &#8216; &gt;&gt;/aufs/etc/fstab</p>
<p># add the read only file system to fstab<br />
#ROOTTYPE=$(cat /proc/mounts|grep ${ROOT}|cut -d&#8217; &#8216; -f3)<br />
#ROOTOPTIONS=$(cat /proc/mounts|grep ${ROOT}|cut -d&#8217; &#8216; -f4)<br />
#echo ${ROOT} /ro $ROOTTYPE $ROOTOPTIONS 0 0 &gt;&gt;/aufs/etc/fstab</p>
<p># S22mount on debian systems is not mounting  /ro correctly after boot<br />
# add to rc.local to correct what you see from df<br />
#replace last case of exit with #exit<br />
#cat /aufs/ro/etc/rc.local|sed &#8216;s/\(.*\)exit/\1\#exit/&#8217; &gt;/aufs/etc/rc.local<br />
#echo mount -f  /ro &gt;&gt;/aufs/etc/rc.local</p>
<p># add back the root file system. mtab seems to be created by one of the init proceses.<br />
#echo &#8220;echo aufs / aufs rw,xino=/rw/.aufs.xino,br:/rw=rw:/ro=ro 0 0 &gt;&gt;/etc/mtab&#8221; &gt;&gt;/aufs/etc/rc.local<br />
#echo &#8220;echo aufs-tmpfs /rw tmpfs rw 0 0 &gt;&gt;/etc/mtab&#8221; &gt;&gt;/aufs/etc/rc.local<br />
#echo exit 0 &gt;&gt;/aufs/etc/rc.local</p>
<p>#fix permissions<br />
chmod 755 /aufs</p>
<p>#build remountrw<br />
echo \#!/bin/sh &gt;/aufs/bin/remountrw<br />
echo mount -o remount,rw ${ROOT} &gt;&gt;/aufs/usr/bin/remountrw<br />
chmod 0700 /aufs/bin/remountrw</p>
<p>#build remountro<br />
echo \#!/bin/sh &gt;/aufs/bin/remountro<br />
echo mount -o remount,ro ${ROOT} &gt;&gt;/aufs/usr/bin/remountro<br />
chmod 0700 /aufs/bin/remountro</p>
<p>umount /sys<br />
umount /proc</p>
<p># remount ro<br />
mount -oremount,ro /aufs</p>
<p>echo -e &#8220;\33[70G[ \33[1;33mOK\33[0;39m ]&#8220;<br />
exec /sbin/switch_root /aufs /sbin/init</p></blockquote>
<p>For reference, this is my grub menu.lst with the old (normal boot) and the new (aufs read only boot) entry:</p>
<p>[...]</p>
<p>title SliTaz GNU/Linux (Kernel 2.6.37-slitaz)<br />
root (hd0,0)<br />
kernel /boot/vmlinuz-2.6.37-slitaz root=/dev/hda1</p>
<p>title SliTaz GNU/Linux (Kernel 2.6.37-slitaz) (AUFS)<br />
root (hd0,0)<br />
kernel /boot/vmlinuz-2.6.37-slitaz root=/dev/hda1 aufs=tmpfs<br />
initrd /boot/aufsrootfs.gz</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/156/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=156&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2011/03/08/read-only-slitaz-using-aufs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Why you should NOT use log.isDebugEnabled()</title>
		<link>http://pfichtner.wordpress.com/2010/08/12/why-you-should-not-use-log-isdebugenabled/</link>
		<comments>http://pfichtner.wordpress.com/2010/08/12/why-you-should-not-use-log-isdebugenabled/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 23:56:51 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=101</guid>
		<description><![CDATA[Several people are telling you that you should wrap all logging statements by a isXXXEnabled method call (where XXX is the logging level) to prevent unecessary object creations. I do not recomment this! -It&#8217;s not part of your business logic but a kind of optimization -The code becomes less readable -When you change the loglevel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=101&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Several people are telling you that you should wrap all logging statements by a isXXXEnabled method call (where XXX is the logging level) to prevent unecessary object creations. I do not recomment this!</p>
<p>-It&#8217;s not part of your business logic but a kind of optimization</p>
<p>-The code becomes less readable</p>
<p>-When you change the loglevel you also have to change the isXXXEnabled call (error prune)</p>
<p>-&#8230;and at least: This is a very boring job <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Boring job!? Why don&#8217;t let some optimizer do this work for us!? And here comes <a title="http://sourceforge.net/projects/just4log/files/" href="http://sourceforge.net/projects/just4log/files/">http://sourceforge.net/projects/just4log/files/</a></p>
<p>This project comes with and AntTask adding the &#8220;missing&#8221; statements for us:</p>
<blockquote><p>a();</p>
<p>logger.debug(&#8220;Got &#8221; + input + &#8220;, will return &#8221; + output);</p>
<p>b();</p></blockquote>
<p>becomes</p>
<blockquote><p>a();</p>
<p>if (logger.isDebugEnabled())</p>
<p>logger.debug(&#8220;Got &#8221; + input + &#8220;, will return &#8221; + output);</p>
<p>b();</p></blockquote>
<p>Didn&#8217;t I say the isXXXEnabled statements are not needed? No! I didn&#8217;t! They are very very useful. I just said that they shouldn&#8217;t be written by the programmer itself.</p>
<p>Oh! The project is dead since 6 years, see <a href="http://sourceforge.net/projects/just4log/forums/forum/288112/topic/1354439">forum (http://sourceforge.net/projects/just4log/forums/forum/288112/topic/1354439)</a></p>
<p>Because of that and that the project did not support <a href="http://www.slf4j.org">SLF4J (Simple Logging Fascade for Java)</a> I decided to relaunch the whole project: Tataaaaa, here it is: <a href="http://sourceforge.net/projects/just4log-ng/">http://sourceforge.net/projects/just4log-ng/</a></p>
<p>You might say: &#8220;Hey! You don&#8217;t have to check the loglevel using SLF4J!&#8221;. Unfortunately this is not the truth:</p>
<p>Of couse you can use the parameterized messages SLF4J is supporting</p>
<blockquote><p>logger.debug(&#8220;The new entry is {}.&#8221;, entry);</p></blockquote>
<p>but if you&#8217;d like to log more than two arguments you have to use the vararg method which will create an Object[] holding your parameters (this is done automatically by the compiler). Another thing is autoboxing of primitive values:</p>
<p>int a=5, b=7, c=a+b;</p>
<p>logger.debug(&#8220;Sum of {} and {} is {}.&#8221;, sum, a, b);</p>
<p>What will happen here? The compiler will transform this under the hood into:</p>
<p>logger.debug(&#8220;Sum of {} and {} is {}.&#8221;, new Object[] { Integer.valueOf(sum), Integer.valueOf(a), Integer.valueOf(b) });</p>
<p>So there are 4 objects created you won&#8217;t see in your source code (3 Integers and one Object[])</p>
<p>Let me repeat myself:  The code should be wrapped by isXXXEnabled to prevent the Object[] creation.</p>
<p>I recommited the code found in the old repository and did a lot of optimizations (general rework, Java5 migration, command line support, fixed some bugs)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/101/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=101&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2010/08/12/why-you-should-not-use-log-isdebugenabled/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Standard Java collections are not thread-safe</title>
		<link>http://pfichtner.wordpress.com/2010/08/12/standard-java-collections-are-not-thread-safe/</link>
		<comments>http://pfichtner.wordpress.com/2010/08/12/standard-java-collections-are-not-thread-safe/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 23:46:55 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=128</guid>
		<description><![CDATA[As I worked for years now in different projects I experienced that many Java programmers think it&#8217;s enough to synchronize methods modifying the state of a Collection (put, add, remove, &#8230;).I guess they think that an access method (like get) is not affected. This is a common mistake! If you have concurrent modifying access to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=128&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As I worked for years now in different projects I experienced that many Java programmers think it&#8217;s enough to synchronize methods modifying the state of a Collection (put, add, remove, &#8230;).I guess they think that an access method (like get) is not affected.</p>
<p>This is a common mistake! If you have concurrent modifying access to collections you have either to synchronize <strong>all</strong> methods accessing the collection or to use a collection which is designed for this purpose (see java.util.concurrent or Collections.synchronized&#8230; if you are using a JDK version &lt; 5).</p>
<p>A small example to illustrate this:</p>
<blockquote><p>import java.util.HashMap;<br />
import java.util.Map;<br />
import java.util.Random;</p>
<p>public class StandardCollectionsAreNOTThreadSafe {</p>
<p>@SuppressWarnings(&#8220;nls&#8221;)<br />
public static void main(String[] args) {<br />
final Random random = new Random(System.currentTimeMillis());<br />
final Map&lt;String, Integer&gt; m = new HashMap&lt;String, Integer&gt;();<br />
Integer expected = Integer.valueOf(4711);<br />
m.put(&#8220;foo&#8221;, expected);<br />
new Thread() {<br />
@Override<br />
public void run() {<br />
for (;;) {<br />
int nextInt = random.nextInt();<br />
m.put(String.valueOf(nextInt), Integer.valueOf(nextInt));<br />
}</p>
<p>}<br />
}.start();</p>
<p>for (;;) {<br />
Integer actual = m.get(&#8220;foo&#8221;);<br />
if (actual != expected) {<br />
throw new RuntimeException(&#8220;Got &#8221; + actual + &#8221; (map size is &#8221; + m.size() + &#8220;)&#8221;);<br />
}</p>
<p>}<br />
}</p>
<p>}</p></blockquote>
<p>The code puts the value 4711 for key &#8220;foo&#8221; and continously retrieves the value for key &#8220;foo&#8221; from the Map while another thread puts dummy data to it. If the value retrieved from the map is not 4711 the method will throw an Exception.</p>
<p>Copy &amp; compile this code if you are sure that java&#8217;s standard collections (like HashMap/ArrayList/&#8230;) are thread-safe.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/128/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=128&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2010/08/12/standard-java-collections-are-not-thread-safe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Do not ignore IOException when calling close on Outputstreams/Writers</title>
		<link>http://pfichtner.wordpress.com/2010/07/21/do-not-ignore-ioexception-when-calling-close-on-outputstreamswriters/</link>
		<comments>http://pfichtner.wordpress.com/2010/07/21/do-not-ignore-ioexception-when-calling-close-on-outputstreamswriters/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 08:01:30 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=121</guid>
		<description><![CDATA[As a good Java Programmer you should close your resources in a finally block, most programmers do so. But what you can see very often is that the close-call is surrounded by a catch block catching IOExceptions and irgnoring them, e.g. OutputStream os = &#8230; try { while (&#8230;) { os.write(&#8230;); } } finally { [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=121&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As a good Java Programmer you should close your resources in a finally block, most programmers do so.</p>
<p>But what you can see very often is that the close-call is surrounded by a catch block catching IOExceptions and irgnoring them, e.g.</p>
<blockquote><p>OutputStream os = &#8230;<br />
try {<br />
while (&#8230;) {<br />
os.write(&#8230;);<br />
}<br />
} finally {<br />
try {<br />
os.close();<br />
} catch (IOException e) { /* ignore it */  }</p>
<p>}</p></blockquote>
<p>What&#8217;s wrong with that code?</p>
<p>When getting the Outputstream/Writer as argument (or even explicitly intantiating your own) you have most of the time a BufferedOutputStream/BufferedWriter. These classes write the data to the underlying Stream/Writer if their buffers are filled or flush() or close() is called on them.</p>
<p>That means that the remaining data in the buffer would be written when calling flush()/close().</p>
<p>So in the example above you&#8217;d have a corrupted file wothout noticing it.</p>
<p>So what&#8217;s the solution? You should never catch and ignore IOExceptions when writing to resources because they indicate that your file does not contain all the data you intended to write to it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/121/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=121&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2010/07/21/do-not-ignore-ioexception-when-calling-close-on-outputstreamswriters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Java command line argument processing</title>
		<link>http://pfichtner.wordpress.com/2010/07/16/java-command-line-argument-processing/</link>
		<comments>http://pfichtner.wordpress.com/2010/07/16/java-command-line-argument-processing/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 12:14:01 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=107</guid>
		<description><![CDATA[A nice way to process command line arguments is arg4j (https://args4j.dev.java.net/). The resulting code will be 10 times better than code using Apache Commons CLI (never use Findbugs/PMD or any other static software analyse tool on Commons CLI and never, really never take a look at the sources! :-/). Example code and description can be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=107&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A nice way to process command line arguments is arg4j (<a href="https://args4j.dev.java.net/">https://args4j.dev.java.net/</a>).</p>
<p>The resulting code will be 10 times better than code using Apache Commons CLI (never use Findbugs/PMD or any other static software analyse tool on Commons CLI and never, really never take a look at the sources! :-/).</p>
<p>Example code and description can be found here. <a href="http://weblogs.java.net/blog/kohsuke/archive/2005/05/parsing_command.html">http://weblogs.java.net/blog/kohsuke/archive/2005/05/parsing_command.html</a></p>
<p>Arg4J takes full use of and supports  Java5 language features (annotations and enums)</p>
<blockquote><p>public final class Main {</p>
<p>public static void main(String[] args) throws  CmdLineException {<br />
new Main().doMain(args);<br />
}</p>
<p>@Option(name = &#8220;-h&#8221;, aliases = { &#8220;-help&#8221; }, usage = &#8220;print this message&#8221;)<br />
private boolean help = false;</p>
<p>@Option(name = &#8220;-i&#8221;, required = true, usage = &#8220;input from this file&#8221;, metaVar = &#8220;/path/to/your.class&#8221;)<br />
private File in = new File(&#8220;.&#8221;);</p>
<p>@Option(name = &#8220;-o&#8221;, required = true, usage = &#8220;output to this dir&#8221;, metaVar = &#8220;/tmp/bin&#8221;)<br />
private File out = new File(&#8220;.&#8221;);</p>
<p>[...]</p></blockquote>
<p>Parsing is done easily by invoking the Parser:</p>
<blockquote><p>private void doMain(String[] args) throws CmdLineException {<br />
CmdLineParser parser = new CmdLineParser(this);<br />
parser.setUsageWidth(130);<br />
try {<br />
parser.parseArgument(args);<br />
} catch (CmdLineException e) {<br />
System.err.println(e.getMessage());<br />
showHelpAndExit(parser);<br />
}</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=107&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2010/07/16/java-command-line-argument-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
		<item>
		<title>Calculate the Date n workings days ahead using Java</title>
		<link>http://pfichtner.wordpress.com/2010/03/10/calculate-the-date-n-workings-days-ahead-using-java/</link>
		<comments>http://pfichtner.wordpress.com/2010/03/10/calculate-the-date-n-workings-days-ahead-using-java/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 12:31:52 +0000</pubDate>
		<dc:creator>Peter Fichtner</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Snippets]]></category>

		<guid isPermaLink="false">http://pfichtner.wordpress.com/?p=92</guid>
		<description><![CDATA[A little Java Snippet: Calculate the Date n workings days ahead: /** * Returns a new Date that is &#60;code&#62;workingDays&#60;/code&#62; working days in the * future based on &#60;code&#62;start&#60;/code&#62;. * * @param start the base date * @param workingDays count of working days * @return newly created Date that is &#60;code&#62;workingDays&#60;/code&#62; working days *         in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=92&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A little Java Snippet: Calculate the Date n workings days ahead:</p>
<blockquote><p>/**<br />
* Returns a new Date that is &lt;code&gt;workingDays&lt;/code&gt; working days in the<br />
* future based on &lt;code&gt;start&lt;/code&gt;.<br />
*<br />
* @param start the base date<br />
* @param workingDays count of working days<br />
* @return newly created Date that is &lt;code&gt;workingDays&lt;/code&gt; working days<br />
*         in the future based on &lt;code&gt;start&lt;/code&gt;<br />
*/<br />
public static Date addWorkingDays(Date start, int workingDays) {<br />
Calendar cal = Calendar.getInstance();<br />
cal.setTime(start);<br />
int base = workingDays + (cal.get(Calendar.DAY_OF_WEEK) &#8211; cal.get(Calendar.DAY_OF_MONTH) + 32) % 7;<br />
cal.add(Calendar.DAY_OF_MONTH, base &#8211; 7 + (base + 4) / 5 * 2);<br />
return cal.getTime();<br />
}</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pfichtner.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pfichtner.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pfichtner.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pfichtner.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pfichtner.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pfichtner.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pfichtner.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pfichtner.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pfichtner.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pfichtner.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pfichtner.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pfichtner.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pfichtner.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pfichtner.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pfichtner.wordpress.com&amp;blog=9204140&amp;post=92&amp;subd=pfichtner&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pfichtner.wordpress.com/2010/03/10/calculate-the-date-n-workings-days-ahead-using-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e25ac65d2d58fc62cb3223afb485bd71?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pfichtner</media:title>
		</media:content>
	</item>
	</channel>
</rss>
