<?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/"
	>

<channel>
	<title>Developer&#039;s Blog</title>
	<atom:link href="http://crmdevelopment.net/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://crmdevelopment.net/dev</link>
	<description></description>
	<lastBuildDate>Mon, 16 Apr 2012 09:41:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Privacy in the Cloud, Google and how they handle requests from law enforcement agencies</title>
		<link>http://crmdevelopment.net/dev/privacy-in-the-cloud-google-and-how-they-handle-requests-from-law-enforcement-agencies/</link>
		<comments>http://crmdevelopment.net/dev/privacy-in-the-cloud-google-and-how-they-handle-requests-from-law-enforcement-agencies/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 09:20:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Data Protection]]></category>
		<category><![CDATA[Europe]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Patriot Act]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[Social Web]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=437</guid>
		<description><![CDATA[      
      I&#8217;ve stumbled upon an interesting interview by Ben Kepes, he talked to Lindsay Finch, Senior Global Privacy Counsel for Salesforce and Box.net co-founder and CEO Aaron Levie. While reading the article, I was surprised to find a transparency report by Google, which contains details about Government Requests for content removal /user data. According to this report, <a href='http://crmdevelopment.net/dev/privacy-in-the-cloud-google-and-how-they-handle-requests-from-law-enforcement-agencies/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[      
      <p>I&#8217;ve stumbled upon an <a href="http://www.cloudave.com/17539/on-privacy-us-legislation-and-cloud-vendors/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.cloudave.com/17539/on-privacy-us-legislation-and-cloud-vendors/?referer=');">interesting interview</a> by<a href="http://www.cloudave.com/author/benkepes/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.cloudave.com/author/benkepes/?referer=');"> Ben Kepes</a>, he talked to Lindsay Finch, Senior Global Privacy Counsel for <a href="http://salesforce.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/salesforce.com?referer=');">Salesforce</a> and <a href="http://www.box.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.box.com/?referer=');">Box.net</a> co-founder and CEO Aaron Levie.</p>
<p>While reading the <a title="Full Article" href="http://www.cloudave.com/17539/on-privacy-us-legislation-and-cloud-vendors/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.cloudave.com/17539/on-privacy-us-legislation-and-cloud-vendors/?referer=');">article</a>, I was surprised to find a <a href="http://www.google.com/transparencyreport/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.google.com/transparencyreport/?referer=');">transparency report</a> by Google, which contains details about Government Requests for content removal /user data. According to this report, the german law enforcement agencies <a href="http://www.google.com/transparencyreport/governmentrequests/DE/?p=2011-06&amp;t=USER_DATA_REQUEST" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.google.com/transparencyreport/governmentrequests/DE/?p=2011-06_amp_t=USER_DATA_REQUEST&amp;referer=');">made 1759 requests</a> for personal data during the 1st half of 2011, compared to <a href="http://www.google.com/transparencyreport/governmentrequests/US/?p=2011-06&amp;t=USER_DATA_REQUEST" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.google.com/transparencyreport/governmentrequests/US/?p=2011-06_amp_t=USER_DATA_REQUEST&amp;referer=');">11057 requests</a> made by US law enforcement agencies.</p>
<p>Google also allows to download all data from the report as <a href="http://www.google.com/transparencyreport/data/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.google.com/transparencyreport/data/?referer=');">raw data</a>, which can be useful when preparing a discussion about Privacy related to web-based services such as SaaS.</p>
<!-- AdSense Now! Redux V1.80 -->
<!-- Post[count: 2] -->
<div class="adsense adsense-leadout" style="float:left;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "ca-pub-5929195813010780";
google_ad_slot = "4940894599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/privacy-in-the-cloud-google-and-how-they-handle-requests-from-law-enforcement-agencies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social API&#8217;s on ProgrammableWeb</title>
		<link>http://crmdevelopment.net/dev/social-apis-on-programmableweb/</link>
		<comments>http://crmdevelopment.net/dev/social-apis-on-programmableweb/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 15:55:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Social Web]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=433</guid>
		<description><![CDATA[      
      Currently, I&#8217;m doing some research about social networks and how to interact programatically with them. In fact, I was looking for some examples besides the well known players such as Facebook, Twitter, etc. and I found them on ProgrammableWeb. This is probably the most accurate list of available API&#8217;s I&#8217;ve found so far, though it contains <a href='http://crmdevelopment.net/dev/social-apis-on-programmableweb/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[      
      <p>Currently, I&#8217;m doing some research about social networks and how to interact programatically with them. In fact, I was looking for some examples besides the well known players such as Facebook, Twitter, etc. and I found them on <a href="http://www.programmableweb.com/apis/directory/1?apicat=Social" onclick="pageTracker._trackPageview('/outgoing/www.programmableweb.com/apis/directory/1?apicat=Social&amp;referer=');">ProgrammableWeb</a>.</p>
<p>This is probably the most accurate list of available API&#8217;s I&#8217;ve found so far, though it contains some dead links.</p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/social-apis-on-programmableweb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Austrian law student tackles Facebook</title>
		<link>http://crmdevelopment.net/dev/austrian-law-student-tackles-facebook/</link>
		<comments>http://crmdevelopment.net/dev/austrian-law-student-tackles-facebook/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 09:39:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Data Protection]]></category>
		<category><![CDATA[Europe]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[Right to access]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=424</guid>
		<description><![CDATA[      
      Max Schrems, an Austrian law student who has filed dozens of complaints about Facebook became the opportunity to sit down with Facebook&#8217;s European director of policy Richard Allen and another unidentified Facebook executive to discuss his concerns, especially about the “right to access”, which is a fundamental aspect of the European data protection law. This law entitles <a href='http://crmdevelopment.net/dev/austrian-law-student-tackles-facebook/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[      
      <p>Max Schrems, an Austrian law student who has filed <a href="http://europe-v-facebook.org/EN/Complaints/complaints.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/europe-v-facebook.org/EN/Complaints/complaints.html?referer=');">dozens of complaints</a> about Facebook became the opportunity to sit down with Facebook&#8217;s European director of policy <a href="https://www.facebook.com/ricallan" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.facebook.com/ricallan?referer=');">Richard Allen</a> and another unidentified Facebook executive to discuss his concerns, especially about the “right to access”, which is a fundamental aspect of the European data protection law. This law entitles Europeans to know exactly <a href="http://europe-v-facebook.org/EN/Data_Pool/data_pool.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/europe-v-facebook.org/EN/Data_Pool/data_pool.html?referer=');">what a company knows about them</a>.</p>
<p>Schrems started to investigate about how Facebook treats privacy after he made a request to Facebook, where he received a file that was over 1,200 pages long, including everyone he had ever friended and de-friended, every event he had ever been invited to (and how he responded), a history of every “poke” he had ever received, a record of who else signed onto Facebook on the same computers as him, email addresses that he hadn’t provided for himself (but that must have been culled from his friends’ contact lists) and all of his past messages and chats, including some with the notation “deleted.”</p>
<p>For more information, read this <a href="http://www.forbes.com/sites/kashmirhill/2012/02/07/the-austrian-thorn-in-facebooks-side/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.forbes.com/sites/kashmirhill/2012/02/07/the-austrian-thorn-in-facebooks-side/?referer=');">article on Forbes</a> or visit Schrem&#8217;s website <a href="http://europe-v-facebook.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/europe-v-facebook.org/?referer=');">Europe vs. Facebook</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/austrian-law-student-tackles-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Salesforce for iPad hits Apple&#8217;s App Store</title>
		<link>http://crmdevelopment.net/dev/salesforce-for-ipad-hits-apples-app-store/</link>
		<comments>http://crmdevelopment.net/dev/salesforce-for-ipad-hits-apples-app-store/#comments</comments>
		<pubDate>Thu, 16 Feb 2012 11:16:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone 4]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[App]]></category>
		<category><![CDATA[Benioff]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=419</guid>
		<description><![CDATA[      
      Today, Marc Benioff announced on Twitter that Salesforce Labs has released a free, open-source but unofficial and yet unsupported Salesforce app for the iPad. It has been localized in 7 languages and allows to create, edit, clone &#38; delete standard and custom records, all kind of tabs are supported &#38; it can be used with any <a href='http://crmdevelopment.net/dev/salesforce-for-ipad-hits-apples-app-store/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[      
      <p>Today, Marc Benioff announced on <a href="https://twitter.com/#!/Benioff" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/Benioff?referer=');">Twitter</a> that Salesforce Labs has released a free, open-source but unofficial and yet unsupported <a href="http://itunes.apple.com/us/app/salesforce-for-ipad/id458454196?ls=1&amp;mt=8" target="_blank" onclick="pageTracker._trackPageview('/outgoing/itunes.apple.com/us/app/salesforce-for-ipad/id458454196?ls=1_amp_mt=8&amp;referer=');">Salesforce app for the iPad</a>.</p>
<p>It has been localized in 7 languages and allows to create, edit, clone &amp; delete standard and custom records, all kind of tabs are supported &amp; it can be used with any environment (e.g. Production, Sandbox).</p>
<p>I guess this is going to be a huge success for Salesforce, even though the native Salesforce environment is allready very useful on the iPad.</p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/salesforce-for-ipad-hits-apples-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Salesforce Certified Administrator exam / ADM201: passed!</title>
		<link>http://crmdevelopment.net/dev/salesforce-certified-administrator-exam-adm201-passed/</link>
		<comments>http://crmdevelopment.net/dev/salesforce-certified-administrator-exam-adm201-passed/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 10:22:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Salesforce]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=362</guid>
		<description><![CDATA[      
      &#160; &#160; &#160; &#160; I did it! Yesterday I&#8217;ve passed the Salesforce Certified Administrator exam (Winter&#8217;12 edition), now I&#8217;m looking forward to become a certified Developer / advanced Developer ASAP! &#160; &#160;]]></description>
			<content:encoded><![CDATA[      
      <p><a href="http://crmdevelopment.net/dev/wp-content/uploads/2011/12/sf_cert_adm_rgb.jpg" rel="lightbox[362]" title="sf_cert_adm_rgb"><img class="wp-image-363 alignleft" title="sf_cert_adm_rgb" src="http://crmdevelopment.net/dev/wp-content/uploads/2011/12/sf_cert_adm_rgb.jpg" alt="" width="135" height="115" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>I did it! Yesterday I&#8217;ve passed the Salesforce Certified Administrator exam (Winter&#8217;12 edition), now I&#8217;m looking forward to become a certified Developer / advanced Developer ASAP!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/salesforce-certified-administrator-exam-adm201-passed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fan noise, heat problems &amp; instant shutdowns on a HP Elitebook 8540p: solved</title>
		<link>http://crmdevelopment.net/dev/fan-noise-heat-problems-instant-shutdowns-on-a-hp-elitebook-8540p-solved/</link>
		<comments>http://crmdevelopment.net/dev/fan-noise-heat-problems-instant-shutdowns-on-a-hp-elitebook-8540p-solved/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 09:14:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Elitebook]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[nVidia]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=349</guid>
		<description><![CDATA[      
      A few weeks ago I&#8217;ve had trouble with my HP Elitebook 8540p (Windows 7 64bit) - it instantly powered off without warnings. After restarting the laptop, I did a quick Memory test (I got 8GB), without result. Next, I&#8217;ve monitored the behaviour of my laptop for a week and noticed the following: the fan started to <a href='http://crmdevelopment.net/dev/fan-noise-heat-problems-instant-shutdowns-on-a-hp-elitebook-8540p-solved/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[      
      <p>A few weeks ago I&#8217;ve had trouble with my HP Elitebook 8540p (Windows 7 64bit) -<span style="text-decoration: underline;"> it instantly powered off without warnings</span>.</p>
<p>After restarting the laptop, I did a quick Memory test (I got 8GB), without result. Next, I&#8217;ve monitored the behaviour of my laptop for a week and noticed the following:</p>
<ul>
<li>the fan started to spin off for no reason, even if the laptop is in idle mode</li>
<li>the temperature of the GPU (Nvidia NVS 5100M) went up to ~80 Celsius (how do I know? Just download a small Desktop Gadget called &#8220;<a title="GPU Observer" href="http://download.orbmu2k.de/download.php?id=49" target="_blank" onclick="pageTracker._trackPageview('/outgoing/download.orbmu2k.de/download.php?id=49&amp;referer=');">GPU Observer</a>&#8220;)</li>
</ul>
<p>It didn&#8217;t matter what I did, CPU usage &amp; Memory load was always as expected, but my fan &amp; the GPU went wild!</p>
<p>I decided to have a look at the components, I removed the keyboard (<a title="How to remove the keyboard" href="http://bizsupport1.austin.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c02489484&amp;printver=true" target="_blank" onclick="pageTracker._trackPageview('/outgoing/bizsupport1.austin.hp.com/bizsupport/TechSupport/Document.jsp?objectID=c02489484_amp_printver=true&amp;referer=');">Instructions</a>) &amp; voilà &#8211; there was a lot of dust between the fan and the vent! HP offers a manual titled &#8220;<a href="http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=de&amp;cc=de&amp;taskId=125&amp;prodSeriesId=4097214&amp;prodTypeId=321957&amp;objectID=c01657439" target="_blank" onclick="pageTracker._trackPageview('/outgoing/h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=de_amp_cc=de_amp_taskId=125_amp_prodSeriesId=4097214_amp_prodTypeId=321957_amp_objectID=c01657439&amp;referer=');">HP Notebook PCs &#8211; Reducing Heat and Fan Noise by Cleaning Air Vents</a>&#8220;, but I don&#8217;t recommend to follow the procedure exactly as described. The reason is that they just blow compressed air through the vents, and the dust will remain in the laptop.</p>
<p>I bought a can of compressed air (you can get it on eBay, Amazon, etc.) and blowed the air through the vents while the keyboard was removed. I was surprised how much dust came out, it was much more than what you can see when looking at the parts. After I reassembled the keyboard, I turned off  the option &#8220;<em>Fan always on</em> with AC&#8221; in the BIOS because I blamed this option for the quantity of dust.</p>
<p>The result was amazing: the average GPU temperature dropped by 25%, and even with all the fancy visual features of Windows 7 enabled, my laptop is running smooth, reliable &#8211; and silent. I haven&#8217;t had any problems since I cleaned my laptop, and I&#8217;m cleaning it now every 4 weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/fan-noise-heat-problems-instant-shutdowns-on-a-hp-elitebook-8540p-solved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playing Microsoft wmv movies on a Apple iPhone 4 &#8211; without conversion !</title>
		<link>http://crmdevelopment.net/dev/playing-microsoft-wmv-movies-on-a-apple-iphone-4-without-conversion/</link>
		<comments>http://crmdevelopment.net/dev/playing-microsoft-wmv-movies-on-a-apple-iphone-4-without-conversion/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 11:07:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone 4]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=346</guid>
		<description><![CDATA[      
      Sweet, today I realized that I can add any movie based on Microsoft&#8217;s *.wmv format to iTunes, and it get&#8217;s converted automatically when I synch my iPhone 4! I&#8217;m using iOS 4.3.5 &#8211; maybe that&#8217;s the reason why this works. I&#8217;m going to test other video formats as well, just to see what else I <a href='http://crmdevelopment.net/dev/playing-microsoft-wmv-movies-on-a-apple-iphone-4-without-conversion/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[      
      <p>Sweet, today I realized that I can add any movie based on Microsoft&#8217;s *.wmv format to iTunes, and it get&#8217;s converted automatically when I synch my iPhone 4! I&#8217;m using iOS 4.3.5 &#8211; maybe that&#8217;s the reason why this works.</p>
<p>I&#8217;m going to test other video formats as well, just to see what else I can put onto my iPhone <img src='http://crmdevelopment.net/dev/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/playing-microsoft-wmv-movies-on-a-apple-iphone-4-without-conversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New internal project: bringing Apache Tika &amp; Lucene together</title>
		<link>http://crmdevelopment.net/dev/new-internal-project-bringing-apache-tika-lucene-together/</link>
		<comments>http://crmdevelopment.net/dev/new-internal-project-bringing-apache-tika-lucene-together/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 12:20:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Lucene]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/dev/?p=333</guid>
		<description><![CDATA[      
      In the coming weeks I will update my blog with some insights about my newest project: a lightweight indexing &#38; search solution for everyones Desktop, using Apache Tika &#38; Lucene - just expect more to come!]]></description>
			<content:encoded><![CDATA[      
      <p>In the coming weeks I will update my blog with some insights about my newest project: a lightweight indexing &amp; search solution for everyones Desktop, using <a href="http://tika.apache.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/tika.apache.org/?referer=');">Apache Tika</a> &amp; <a href="http://lucene.apache.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/lucene.apache.org/?referer=');">Lucene </a>- just expect more to come!</p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/new-internal-project-bringing-apache-tika-lucene-together/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A custom HTML formatter including CSS &amp; Exception logging for Java</title>
		<link>http://crmdevelopment.net/dev/a-custom-html-formatter-including-css-exception-logging-for-java/</link>
		<comments>http://crmdevelopment.net/dev/a-custom-html-formatter-including-css-exception-logging-for-java/#comments</comments>
		<pubDate>Thu, 25 Nov 2010 08:27:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Logging]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/christian/?p=278</guid>
		<description><![CDATA[      
      Yesterday I decided to use a custom formatter for my logfiles. Why? Because I thought it would be nice to have a nicely formatted piece of logfile rather than the old-school, black &#38; white log files we all know: But wait &#8211; there is more than just look &#38; feel, writing your own formatter lets <a href='http://crmdevelopment.net/dev/a-custom-html-formatter-including-css-exception-logging-for-java/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[      
      <p>Yesterday I decided to use a custom formatter for my logfiles. Why? Because I thought it would be nice to have a nicely formatted piece of logfile rather than the old-school, black &amp; white log files we all know:</p>
<p style="text-align: center;"><a href="http://crmdevelopment.net/dev/wp-content/uploads/2010/11/Capture.jpg" rel="lightbox[278]" title="Capture"><img class="aligncenter size-medium wp-image-292" title="Capture" src="http://crmdevelopment.net/dev/wp-content/uploads/2010/11/Capture-300x144.jpg" alt="" width="300" height="144" /></a></p>
<p style="text-align: left;">But wait &#8211; there is more than just look &amp; feel, writing your own formatter lets you control how exceptions are beeing logged and you can create Hyperlinks to lookup a solution for a problem directly from the logfile!</p>
<p style="text-align: left;">And here is what you need:</p>
<p style="text-align: left;">1. The Formatter</p>
<pre class="brush: java; light: false; title: ; toolbar: true; notranslate">&lt;/pre&gt;
package helper;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;

/**
 * @see CustomHtmlFormatter
 * @author christian.meyer
 * @author stockholmconsulting
 * @version 1.0, November 2010
 */

public class CustomHtmlFormatter extends Formatter
{

 // This method is called for every log records
 public String format(LogRecord rec)
 {
 StringBuffer buf = new StringBuffer(1000);
 buf.append(&quot;&lt;tr&gt;&quot;);
 //Here we use an alternate background color for every 2nd row
 //(just to improve readability)
 /*if(row%2==0)
 buf.append(&quot;&lt;tr&gt;&quot;);
 else
 buf.append(&quot;&lt;tr bgcolor = #C0C0C0&gt;&quot;);*/

 buf.append(&quot;&lt;td&gt;&quot;);
 buf.append(getFormattedDate(rec.getMillis()));
 buf.append(&quot;&lt;/td&gt;&quot;);
 buf.append(&quot;&lt;td&gt;&quot;);
 buf.append(rec.getLoggerName());
 buf.append(&quot;&lt;/td&gt;&quot;);
 buf.append(&quot;&lt;td&gt;&quot;);

// Set the font color for levels &gt;= WARNING to red
 if (rec.getLevel().intValue() &gt;= Level.WARNING.intValue()){
 buf.append(&quot;&lt;font color=\&quot;#FF0000\&quot;&gt;&quot;);
 }

 buf.append(rec.getLevel());
 buf.append(&quot;&lt;/td&gt;&quot;);
 buf.append(&quot;&lt;td&gt;&quot;);
 buf.append(formatMessage(rec));

 //This happens if we get a throwable: we're iterating through the
 //stacktrace &amp; printing everything nicely formatted
 if(rec.getThrown()!=null){
 buf.append(&quot;&lt;font color=\&quot;#FF0000\&quot;&gt;&quot;);
 buf.append(&quot;: &quot; + &quot;&lt;a href=\&quot;http://www.google.de/search?q=&quot; + rec.getThrown() +
 &quot;\&quot; title= \&quot;Search at Google\&quot; target=\&quot;_blank\&quot;&gt;&quot; + rec.getThrown() + &quot;&lt;/a&gt;&lt;br&gt;&quot;);

 StackTraceElement[] stackTrace = rec.getThrown().getStackTrace();
 for (StackTraceElement element : stackTrace)
 {
 String exceptionMsg = &quot;at &quot; + element.getClassName() +
 &quot; (&quot; + element.getMethodName() + &quot;:&quot; +
 element.getLineNumber() + &quot;)&lt;br&gt;&quot;;
 buf.append(exceptionMsg);
 }
 }

 buf.append('\n');
 buf.append(&quot;/td&gt;&quot;);
 buf.append(&quot;&lt;/tr&gt;\n&quot;);
 return buf.toString();
 }

private String getFormattedDate(long millisecs)
 {
 SimpleDateFormat date_format = new SimpleDateFormat(&quot;HH:mm:ss&quot;);
 Date resultdate = new Date(millisecs);
 return date_format.format(resultdate);
 }

// This method creates the basic HTML structure. You can add your own
 // CSS after the &lt;style type=&quot;text/css&quot;&gt; tag
 public String getHead(Handler h)
 {
 return &quot;&lt;HTML&gt;\n&lt;HEAD&gt;&lt;title&gt;Datamasker logfile&lt;/title&gt;\n&quot; +
 &quot;&lt;link rel=\&quot;stylesheet\&quot; type=\&quot;text/css\&quot; href=\&quot;datamasker.css\&quot; /&gt;&quot; +
 /*&quot;&lt;style type=\&quot;text/css\&quot;&gt;\n&quot; +
 &quot;caption {font-size: 1.7em; color: #F06; text-align: left;}\n&quot; +
 &quot;heading {font-family: Arial; font-size: medium; color: #555; text-decoration:underline; font-weight: bold; text-align: center }\n&quot; +
 &quot;footer {font-family: Arial; font-size: x-small; color: #555; text-align: right }\n&quot; +
 &quot;body {font-family: Arial; font-size: small; color: black; text-align: left }\n&quot; +
 &quot;table {margin: 0; padding: 0; border-collapse: collapse; width: 100%;}\n&quot; +
 &quot;td, th {padding: 1px 4px; border-bottom: 1px solid #EEE;}\n&quot; +
 &quot;td + td {border-left: 1px solid #FAFAFA; color: #999;}\n&quot; +
 &quot;td + td + td {color: #666; border-left: none;}\n&quot; +
 &quot;td a {color: #444; text-decoration: none; text-align: left;}\n&quot; +
 &quot;td a, th a {display: block; width: 100%;}\n&quot; +
 &quot;td a:hover {background: #444; color: #FFF;}\n&quot; +
 &quot;tfoot th {text-align: left;}\n&quot; +
 &quot;th {text-align: left;}\n&quot; +
 &quot;th + th {text-align: left;}\n&quot; +
 &quot;th + th + th {text-align: left;}\n&quot; +
 &quot;th a {color: #F06; text-decoration: none; font-size: 1.1em;}\n&quot; +
 &quot;th a:visited {color: #F69;}\n&quot; +
 &quot;th a:hover {color: #F06; text-decoration: underline;}\n&quot; +
 &quot;thead tr, tfoot tr {color: #555; font-size: 0.8em;}\n&quot; +
 &quot;tr {font: 12px sans-serif; background: repeat-x #F8F8F8; color: #666;}\n&quot; +
 &quot;tr:hover {background: #FFF;}\n&quot; +
 &quot;&lt;/style&gt;\n&quot; +*/
 &quot;&lt;/HEAD&gt;\n&quot; +
 &quot;&lt;BODY&gt;\n&quot; +
 &quot;&lt;heading&gt;Datamasker Logfile: &quot; + (new Date()) +&quot;&lt;/heading&gt;&lt;br&gt;\n&lt;br&gt;&quot; +
 &quot;\n&lt;PRE&gt;\n&quot; +
 &quot;&lt;table rules=\&quot;all\&quot;; cellpadding=\&quot;2px\&quot;&gt;\n &quot; +
 &quot;&lt;tr bgcolor = #A9A9A9&gt;&lt;th&gt;Time&lt;/th&gt;&lt;th&gt;Source&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Message&lt;/th&gt;&lt;/tr&gt;\n&quot;;
 }

// This method appends the necessary closing tags
 public String getTail(Handler h)
 {
 return &quot;&lt;/table&gt;\n&lt;/PRE&gt;\n &lt;footer&gt;Copyright Stockholmconsulting 2010&lt;/footer&gt; \n &lt;/BODY&gt;\n&lt;/HTML&gt;\n&quot;;
 }
}
&lt;pre&gt;
</pre>
<p style="text-align: left;">2. A logger which writes to a file using our formatter</p>
<pre class="brush: java; light: false; title: ; toolbar: true; notranslate">private static final Logger rootLogger = Logger.getLogger(MainClass.class.getName());

rootLogger.setLevel(Level.INFO);

		fileHTML = new FileHandler(&quot;Logging.html&quot;);

		//Create HTML Formatter
		formatterHTML = new CustomHtmlFormatter();
		fileHTML.setFormatter(formatterHTML);
		rootLogger.addHandler(fileHTML);

rootLogger .info(&quot;Starting logfile&quot;);
rootLogger.entering(this.getClass().getName(), &quot;theNameOfTheMethod&quot;);
rootLogger .severe(&quot;Serious information&quot;);
Throwable ex = new IllegalArgumentException(&quot;Some exception text&quot;);
    rootLogger .log(Level.SEVERE, &quot;Some message&quot;, ex);
rootLogger.exiting(this.getClass().toString(), &quot;End of method&quot;);</pre>
<p>Of course you can put the css into a file, there is no need to put everything into the code.<br />
In this case, simply put the following line right after the &lt;Head&gt;:</p>
<p>&#8220;&lt;link rel=\&#8221;stylesheet\&#8221; type=\&#8221;text/css\&#8221; href=\&#8221;nameOfYourCSSFile.css\&#8221; /&gt;&#8221;</p>
<p>As you can see it is pretty simple to create your own formatter, of course it is possible to use your own CSS, Logo, whatever you want &#8211; I hope you enjoy it <img src='http://crmdevelopment.net/dev/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/a-custom-html-formatter-including-css-exception-logging-for-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The surprising truth about what motivates us</title>
		<link>http://crmdevelopment.net/dev/the-surprising-truth-about-what-motivates-us/</link>
		<comments>http://crmdevelopment.net/dev/the-surprising-truth-about-what-motivates-us/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 11:50:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Information]]></category>

		<guid isPermaLink="false">http://crmdevelopment.net/christian/?p=265</guid>
		<description><![CDATA[This is an outstanding visualization of an interesting topic: motivation. Watch the video, it explains some concepts you might be interested in.]]></description>
			<content:encoded><![CDATA[      
      <p style="text-align: center;">[There is a video that cannot be displayed in this feed. <a href="http://crmdevelopment.net/dev/the-surprising-truth-about-what-motivates-us/">Visit the blog entry to see the video.]</a></p>
]]></content:encoded>
			<wfw:commentRss>http://crmdevelopment.net/dev/the-surprising-truth-about-what-motivates-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

