<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1859167416855250911</atom:id><lastBuildDate>Fri, 27 Jan 2012 17:10:28 +0000</lastBuildDate><category>Pictures</category><category>Source code</category><category>Publications</category><category>Games</category><category>Windows</category><category>Apple</category><category>Linux</category><category>HowTo</category><category>Web</category><category>Music</category><title>Scumm Bar</title><description>Spreading happiness since 1987</description><link>http://groglogs.blogspot.com/</link><managingEditor>noreply@blogger.com (Stefano Ghio)</managingEditor><generator>Blogger</generator><openSearch:totalResults>92</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/groglogs" /><feedburner:info uri="groglogs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-2512255157361317541</guid><pubDate>Fri, 27 Jan 2012 17:08:00 +0000</pubDate><atom:updated>2012-01-27T18:08:21.768+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>OSGi DS Declarative Services example</title><description>&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;In this post we will give a fair example of the workings of the &lt;/span&gt;&lt;a href="http://www.osgi.org/Download/File?url=/download/r4v42/r4.cmpn.pdf"&gt;&lt;span style="font-family: Arial;"&gt;OSGi DS services&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial;"&gt;.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;We are working with the &lt;/span&gt;&lt;a href="http://eclipse.org/equinox/"&gt;&lt;span style="font-family: Arial;"&gt;Equinox&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial;"&gt; OSGi framework, which is part of the &lt;/span&gt;&lt;a href="http://www.eclipse.org/downloads/"&gt;&lt;span style="font-family: Arial;"&gt;Eclipse IDE&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial;"&gt; (for Java). The code can be launched either inside Eclipse or from a standalone OSGi framework; for the latter option, grab the following &lt;i&gt;jar&lt;/i&gt; packages from under the &lt;i&gt;plugins/&lt;/i&gt; folder of our Eclipse installation:&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;org.eclipse.osgi&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;org.eclipse.equinox.ds&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;org.eclipse.equinox.util&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;org.eclipse.osgi.services&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: Arial;"&gt;and copy them in a folder of your choice.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial, Helvetica, sans-serif;"&gt;No&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;w open a command prompt, browse to that folder and type:&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;
java -jar org.eclipse.osgi.jar -console&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;to make the OSGi prompt appear. From here you can issue a lot of commands to the OSGi framework, some of which are:&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;help&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;i&gt;ss&lt;/i&gt; - shows the current status of the installed bundles&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;i&gt;install file://path&lt;/i&gt; - installs the bundle available at the specified &lt;i&gt;path&lt;/i&gt;. It will be given an unique numeric ID&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;uninstall ID&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;start ID&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span style="font-family: Arial;"&gt;stop ID&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;i&gt;refresh&lt;/i&gt; - forces a framework refresh and update of the bundles state&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;The bundles can be in only one of the following states at a time:&lt;/span&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;INSTALLED&lt;/b&gt;: the bundle has been successfully installed on the platform;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;RESOLVED&lt;/b&gt;: all of the bundle's dependencies are currently available, the bundle is ready to be started or it has just been stopped;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;STARTING&lt;/b&gt;: the bundle is starting, it is waiting for the method which takes care of the necessary start operations to return;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;ACTIVE&lt;/b&gt;: the bundle is up and running;&lt;/span&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;STOPPING&lt;/b&gt;: the bundle is stopping, it is waiting for the method which takes care of the necessary stop operations to return.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;There exists an additional state, &lt;b&gt;UNINSTALLED&lt;/b&gt;, but it will never be shown by the framework.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;In order for the DS component to work properly, you must install and start all the bundles copied before (&lt;i&gt;org.eclipse.osgi &lt;/i&gt;excluded) inside the framework. &lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;Now we can begin our example.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;Suppose we have two services: &lt;i&gt;HappyService&lt;/i&gt; and &lt;i&gt;SadService&lt;/i&gt;, their interfaces: &lt;i&gt;IHappy&lt;/i&gt; and &lt;i&gt;ISad&lt;/i&gt; and a client: &lt;i&gt;Customer&lt;/i&gt; who declares a dependency on the services by pointing to their interfaces using the DS method.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;When a component declares it provides a service, the OSGi framework stores that information in its internal registry.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/osgi/osgi_ds.zip"&gt;&lt;span style="font-family: Arial;"&gt;Download here the example's source code&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Arial;"&gt;. Inside you will find:&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Interface - &lt;b&gt;IHappy.java&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
package it.eng.test.ds.happy;

public interface IHappy {
 public void imHappy();
}&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Interface - &lt;b&gt;ISad.java&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
package it.eng.test.ds.sad;

public interface ISad {
 public void imSad();
}&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Implementation - &lt;b&gt;HappyService.java&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
package it.eng.test.ds.happyservice;

import it.eng.test.ds.happy.IHappy;

public class HappyService implements IHappy{
 public void imHappy(){
  System.out.println("I'm happy :)");
 }
}&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Implementation - &lt;b&gt;SadService.java&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
package it.eng.test.ds.sadservice;

import it.eng.test.ds.sad.ISad;

public class SadService implements ISad{
 public void imSad(){
  System.out.println("I'm sad :(");
 }
}&lt;/pre&gt;
&lt;pre&gt;&lt;b&gt;
&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;If you inspect them, you will see that the two services offer a single, simple method which prints something on standard output.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;Client - &lt;b&gt;Consumer.java&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
package it.eng.test.ds.consumer;

import it.eng.test.ds.happy.IHappy;
import it.eng.test.ds.sad.ISad;

public class Consumer {
 private IHappy happy;
 private ISad sad;
 
 public synchronized void bindHappy(IHappy happy){
  this.happy = happy;
  happy.imHappy();
 }
 
 public synchronized void unbindHappy(IHappy happy){
  this.happy = null;
  sad.imSad();
 }
 
 public synchronized void bindSad(ISad sad){
  this.sad = sad;
  sad.imSad();
 }
 
 public synchronized void unbindSad(ISad sad){
  this.sad = null;
  happy.imHappy();
 }
 
 public void activate(){
  System.out.println("I'm here");
 }
 
}&lt;/pre&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;The consumer declares the dependency on the two services by requiring their interfaces and has some methods of his own:&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;i&gt;activate&lt;/i&gt;: this method is called as soon as the client bundle is started;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;i&gt;bind*&lt;/i&gt;: this method is called immediately after the required *Service becomes available on the framework;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Arial;"&gt;&lt;i&gt;unbind*&lt;/i&gt;: this method is called immediately after the required *Service becomes unavailable on the framework.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-family: Arial;"&gt;The framework knows that &lt;i&gt;Consumer&lt;/i&gt; needs those particular services since he declared it in his XML configuration which must be put under the &lt;i&gt;OSGI-INF/&lt;/i&gt; folder:&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="it.eng.test.ds.consumer"&amp;gt;
   &amp;lt;implementation class="it.eng.test.ds.consumer.Consumer"/&amp;gt;
   &amp;lt;reference bind="bindHappy" cardinality="0..1" interface="it.eng.test.ds.happy.IHappy" name="IHappy" policy="dynamic" unbind="unbindHappy"/&amp;gt;
   &amp;lt;reference bind="bindSad" cardinality="0..1" interface="it.eng.test.ds.sad.ISad" name="ISad" policy="dynamic" unbind="unbindSad"/&amp;gt;
&amp;lt;/scr:component&amp;gt;&lt;/pre&gt;
&lt;pre&gt;
&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;In there the bundle is saying that the class &lt;i&gt;it.eng.test.ds.consumer.Consumer&lt;/i&gt; dynamically and optionally depends on one of the possible &lt;i&gt;it.eng.test.ds.happy.IHappy&lt;/i&gt; interface implementations and that when one of them becomes available or unavailable inside the framework, its &lt;i&gt;bindHappy&lt;/i&gt; or &lt;i&gt;unbindHappy&lt;/i&gt; method should be called.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;The &lt;i&gt;dynamically&lt;/i&gt; &lt;b&gt;policy&lt;/b&gt; attribute means that the bundle is able to work properly even when the services are dynamically switched; the alternative would be &lt;i&gt;static&lt;/i&gt;, which would require the DS to deactivate the component and create a new instance each time the required service changes.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;The dependency is optional since the &lt;b&gt;cardinality&lt;/b&gt; was set to &lt;i&gt;0..1&lt;/i&gt;, meaning the component can be started even if that particular dependency is not currently available, contrarily to &lt;i&gt;1..1&lt;/i&gt; which means instead that it is mandatory. Another alternative would be &lt;i&gt;0..N&lt;/i&gt;, which would require the DS to invoke the associated method multiple times, one for each service instance currently available in the registry.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;Furthermore, the name of the &lt;i&gt;bind*&lt;/i&gt; and &lt;i&gt;unbind*&lt;/i&gt; methods can be changed as pleased as long as it reflects the ones written in the java code.&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;On their side, the two services must declare their own XML configurations, listing the interface implementations offered and the classes implementing them:&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;HappyService XML&lt;/b&gt;:&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="it.eng.test.ds.happyservice"&amp;gt;
   &amp;lt;implementation class="it.eng.test.ds.happyservice.HappyService"/&amp;gt;
   &amp;lt;service&amp;gt;
      &amp;lt;provide interface="it.eng.test.ds.happy.IHappy"/&amp;gt;
   &amp;lt;/service&amp;gt;
&amp;lt;/scr:component&amp;gt;&lt;/pre&gt;
&lt;pre&gt;
&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;&lt;b&gt;SadService XML&lt;/b&gt;:&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="it.eng.test.ds.sadservice"&amp;gt;
   &amp;lt;implementation class="it.eng.test.ds.sadservice.SadService"/&amp;gt;
   &amp;lt;service&amp;gt;
      &amp;lt;provide interface="it.eng.test.ds.sad.ISad"/&amp;gt;
   &amp;lt;/service&amp;gt;
&amp;lt;/scr:component&amp;gt;&lt;/pre&gt;
&lt;pre&gt;
&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial;"&gt;When we install all those bundles inside the same OSGi framework and start them, we see that &lt;i&gt;Consumer&lt;/i&gt; prints on the standard output the string "I'm here" right after it is starts and then, alternatively depending on their service implementation bundle's state, the strings: "I'm happy :)" and "I'm sad :(".&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-2512255157361317541?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QyJSgz4l7u_wFINIBofAOycEC6g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QyJSgz4l7u_wFINIBofAOycEC6g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QyJSgz4l7u_wFINIBofAOycEC6g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QyJSgz4l7u_wFINIBofAOycEC6g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/QRUq8Ljyu6g/osgi-ds-declarative-services-example.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2012/01/osgi-ds-declarative-services-example.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-1416007736725604982</guid><pubDate>Sun, 15 Jan 2012 10:04:00 +0000</pubDate><atom:updated>2012-01-15T11:04:40.501+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Publications</category><title>Why beer is good for the brain</title><description>Well ya see, Norm, it's like this. A herd of buffalo can only move as fast as the slowest buffalo. And when the herd is hunted, it is the slowest and weakest ones at the back that are killed first.&lt;br /&gt;
This natural selection is good for the herd as a whole, because the general speed and health of the whole group keeps improving by the regular killing of the weakest members.&lt;br /&gt;
&lt;br /&gt;
In much the same way, the human brain can only operate as fast as the slowest brain cells. Excessive intake of alcohol, as we know, kills brain cells. But naturally, it attacks the slowest and weakest brain cells first. In this way, regular consumption of beer eliminates the weaker brain cells, making the brain a faster and more efficient machine.&lt;br /&gt;
That's why you always feel smarter after a few beers.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;
&lt;a href="http://www.imdb.com/title/tt0083399/quotes?qt=qt0461693"&gt;Cheers, 1982&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: right;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;ITALIANO:&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Beh vedi, Norm, funziona cosi'. Una mandria di bufali puo' muoversi al piu' velocemente come il bufalo piu' lento. E quando la mandria viene cacciata, sono i piu' lenti e deboli rimasti indietro ad essere uccisi per primi.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Questa selezione naturale giova alla mandria stessa, perche' la salute e la velocita' generale di tutto il gruppo continua a migliorare grazie all'eliminazione costante dei membri piu' deboli.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Quasi allo stesso modo, il cervello umano puo' operare al piu' velocemente come le piu' lente cellule cerebrali. Un'assunzione eccessiva di alcool, come sappiamo, uccide le cellule cerebrali. Ma naturalmente, attacca le piu' lente e deboli per prime. In questo modo, un'assunzione regolare di birra elimina le cellule cerebrali piu' deboli, rendendo il cervello una macchina piu' rapida ed efficiente.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Ecco perche' ti senti sempre piu' furbo dopo un paio di birre.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-1416007736725604982?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/etDoJtejQmxj3tWSWMv-tv0BpLU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/etDoJtejQmxj3tWSWMv-tv0BpLU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/etDoJtejQmxj3tWSWMv-tv0BpLU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/etDoJtejQmxj3tWSWMv-tv0BpLU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/MGUNE6mPo4Y/why-beer-is-good-for-brain.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2012/01/why-beer-is-good-for-brain.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-6189979051565104234</guid><pubDate>Tue, 08 Nov 2011 17:46:00 +0000</pubDate><atom:updated>2011-11-08T18:46:53.238+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Music</category><title>[Sheet music] Take me home, country roads piano</title><description>This version is the one from the movie &lt;a href="http://www.imdb.com/title/tt0113824/"&gt;Whispers of the heart&lt;/a&gt; and it's based on the John Denver's original one.&lt;br /&gt;
&lt;br /&gt;
Questa versione e' del film &lt;a href="http://www.imdb.com/title/tt0113824/"&gt;Whispers of the heart&lt;/a&gt; ed e' basata sull'originale di John Denver.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://digilander.libero.it/otacoconvention/sheet/mimi-o-sumaseba-country-roads.pdf"&gt;Scarica lo spartito/Download sheet music.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-6189979051565104234?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MRVSuHOZXblNKRuBKQnCEwcixcU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MRVSuHOZXblNKRuBKQnCEwcixcU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MRVSuHOZXblNKRuBKQnCEwcixcU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MRVSuHOZXblNKRuBKQnCEwcixcU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/4vPapA8d5es/sheet-music-take-me-home-country-roads.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/11/sheet-music-take-me-home-country-roads.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-7275467689068276862</guid><pubDate>Tue, 08 Nov 2011 17:42:00 +0000</pubDate><atom:updated>2011-11-08T18:42:46.189+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Music</category><title>[Sheet music] Starcraft Terran theme piano</title><description>&lt;a href="http://digilander.libero.it/otacoconvention/sheet/Starcraft%20-%20Terran%20Theme.pdf"&gt;Scarica lo spartito/Download sheet music.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-7275467689068276862?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kOvBKvdDQ6LmHJfIsbUrE4VYUGg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kOvBKvdDQ6LmHJfIsbUrE4VYUGg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kOvBKvdDQ6LmHJfIsbUrE4VYUGg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kOvBKvdDQ6LmHJfIsbUrE4VYUGg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/s5Wd4WJchlI/sheet-music-starcraft-terran-theme.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/11/sheet-music-starcraft-terran-theme.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-2572314860583208869</guid><pubDate>Tue, 08 Nov 2011 17:41:00 +0000</pubDate><atom:updated>2011-11-08T18:41:58.493+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Music</category><title>[Sheet music] Murder, she wrote piano theme - La signora in giallo</title><description>&lt;a href="http://digilander.libero.it/otacoconvention/sheet/Murder%20she%20wrote%20%28La%20Signora%20in%20Giallo%29.pdf"&gt;Scarica lo spartito/Download sheet music.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-2572314860583208869?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BvuS_D_uthH3VflL9e-kbpLy_uo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BvuS_D_uthH3VflL9e-kbpLy_uo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BvuS_D_uthH3VflL9e-kbpLy_uo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BvuS_D_uthH3VflL9e-kbpLy_uo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/07jeaWQWTiM/sheet-music-murder-she-wrote-piano.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/11/sheet-music-murder-she-wrote-piano.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-7317167047008795834</guid><pubDate>Tue, 27 Sep 2011 18:34:00 +0000</pubDate><atom:updated>2011-09-28T21:02:32.524+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">HowTo</category><title>How to contact Facebook or delete your account</title><description>Contacting Facebook can really be a pain, but definitely deleting your account is even harder. Since they rely on your data to survive, they will hang on to it as long as possible.&lt;br /&gt;
&lt;br /&gt;
Luckily, &lt;a href="http://www.marismith.com/how-to-contact-facebook-a-directory-of-120-forms/"&gt;Mary Smith&lt;/a&gt; gathered all possible ways to contact Facebook and receive support. Feature requests, suggestions, bug reports and &lt;a href="https://www.facebook.com/help/contact.php?show_form=delete_account"&gt;account deletion&lt;/a&gt; can all be found there.&lt;br /&gt;
&lt;br /&gt;
You can even&lt;a href="https://www.facebook.com/help/contact.php?show_form=data_requests"&gt; request Facebook to send you a CD copy of all the data they have about you&lt;/a&gt; accordingly with your country's privacy laws.&lt;br /&gt;
&lt;br /&gt;
By the way, good luck at getting Facebook to reply to you, especially with the data request. If they don't answer, insist since they MUST satisfy your request within a limited time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-7317167047008795834?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gP2HJiOHbUIk244IYwithaHdka0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gP2HJiOHbUIk244IYwithaHdka0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gP2HJiOHbUIk244IYwithaHdka0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gP2HJiOHbUIk244IYwithaHdka0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/WqPXAnYy-SY/how-to-contact-facebook-or-delete-your.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>1</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/09/how-to-contact-facebook-or-delete-your.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-4762571828675312740</guid><pubDate>Tue, 13 Sep 2011 14:34:00 +0000</pubDate><atom:updated>2011-09-17T23:36:35.080+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Games</category><title>Legend of Dragoon fix disc 2 freeze after Lenus &amp; Regole battle</title><description>&lt;div style="text-align: justify;"&gt;
&lt;b&gt;ENGLISH&lt;/b&gt;: please refer to &lt;a href="http://www.supercheats.com/playstation/questions/thelegendofdragoon/55266/On-Disc-2-after-I-defeat-Lenus.htm"&gt;supercheats&lt;/a&gt;, quick summary: &lt;b&gt;beat the battle without ever going Dragoon&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;ITALIANO&lt;/b&gt;:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="http://en.wikipedia.org/wiki/The_Legend_of_Dragoon"&gt;The Legend of Dragoon&lt;/a&gt; é uno di quei giochi che non risentono dell’etá. Purtroppo, se si prova a giocarlo su una qualsiasi console che non sia la ormai rara PlayStation 1 (PS2, PS3, PSP o usando&amp;nbsp; l’emulatore PSX), per qualche motivo dopo la &lt;a href="http://www.youtube.com/watch?v=qXaN2smjneY"&gt;battaglia contro Lenus e Regole verso la fine del disco 2&lt;/a&gt;, lo schermo diventa nero ed il gioco va in freeze senza possibilitá di recupero.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Fortunatamente (grazie &lt;a href="http://www.google.it/search?q=legend+dragoon+disc+2+lenus+regole+freeze"&gt;Google search&lt;/a&gt; e &lt;a href="http://www.supercheats.com/playstation/questions/thelegendofdragoon/55266/On-Disc-2-after-I-defeat-Lenus.htm"&gt;supercheats&lt;/a&gt;!), esiste una soluzione: &lt;b&gt;terminare la battaglia senza mai trasformare alcun personaggio in Dragone&lt;/b&gt;.&amp;nbsp; La cosa non é poi cosí impossibile come sembra, basta seguire alcuni accorgimenti:&lt;/div&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li style="text-align: justify;"&gt;avere il party ad un livello di almeno 20&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;inserire Meru nel party poiché, essendo dello stesso elemento (acqua) dei due boss, riceve meno danni dai loro attacchi e gli oggetti magici d’attacco usati da lei sono piú efficaci&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;inserire Shana nel party poiché gli oggetti magici d’attacco usati da lei sono piú efficaci&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;fare grande scorta di oggetti d’attacco come Incenerimento (bersaglio singolo) e Magma sgorgante (bersagli multipli), molto efficaci specie se utilizzati da Dart, Meru o Shana&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;puó aiutare equipaggiare Dart con la Lama Rovente perché aggiunge attacco fuoco a cui sono deboli i due boss&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;evitare di inserire Kongol o Albert nel party per via della loro scarsa difesa magica e lentezza&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;in alternativa a Shana, inserire Rose o Haschel nel party con il compito di utilizzare oggetti di recupero ed attaccare fisicamente Lenus verso la fine della battaglia quando non si hanno piú oggetti d’attacco&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;puó aiutare equipaggiare con l’Anello del Bandito il membro piú lento del party, equipaggiare con l’Anello Lenitivo il membro del party che sará addetto alla cura e con l’Anello Fisico il membro del party con meno PF&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-4762571828675312740?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7vUbkf1USMEiUYw1mcNT-1eno6A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7vUbkf1USMEiUYw1mcNT-1eno6A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7vUbkf1USMEiUYw1mcNT-1eno6A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7vUbkf1USMEiUYw1mcNT-1eno6A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/SOtWwOUQL1c/legend-of-dragoon-fix-disc-2-freeze.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/09/legend-of-dragoon-fix-disc-2-freeze.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-8653654047364744362</guid><pubDate>Wed, 10 Aug 2011 06:20:00 +0000</pubDate><atom:updated>2011-09-17T23:36:51.777+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Pictures</category><title>Portugal.. como un Jarro</title><description>Ci sono un Irlandese, un Portoghese e due Italiani in Portogallo con un &lt;i&gt;jarro&lt;/i&gt; in mano.. &lt;a href="http://cid-19468fe08387b566.photos.live.com/browse.aspx/Portugal%20como%20un%20Jarro"&gt;Scopri come va a finire guardando le foto&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img border="0" height="533" src="https://sn2files.storage.live.com/y1p5PZy6bI_7AG2C4YPAJz43cpn_R6vau2LdSdlLwecrspI6IOdO-zn6nOF2rGvU6kYsht1RC-tfJc/IMG_1291.JPG" width="400" /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://sn2files.storage.live.com/y1pZwyWtSbV7BjPZxH__E7EGeUK1oZegMUlYXhmxXthGr7f9owxLI5ZygZTixRTyBOpADvmU_WWZEY/IMG_1292.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="533" src="https://sn2files.storage.live.com/y1pZwyWtSbV7BjPZxH__E7EGeUK1oZegMUlYXhmxXthGr7f9owxLI5ZygZTixRTyBOpADvmU_WWZEY/IMG_1292.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ps: If anyone knows who's the girl in the background, please say it in a comment!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-8653654047364744362?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b2t_5gXON9t1E07EGIK4G7LY_f4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b2t_5gXON9t1E07EGIK4G7LY_f4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b2t_5gXON9t1E07EGIK4G7LY_f4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b2t_5gXON9t1E07EGIK4G7LY_f4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/1EPfCYiqFkc/portugal-como-un-jarro.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/08/portugal-como-un-jarro.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-7571722208748181902</guid><pubDate>Sun, 31 Jul 2011 21:41:00 +0000</pubDate><atom:updated>2011-09-17T23:21:49.116+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>GNOME 3 add applications taskbar/panel</title><description>GNOME 3 does not have, like GNOME 2, two taskbars: one for the applications and one for the system tray. It is possible to add the application taskbar (which includes a system tray panel too) manually with the project &lt;a href="http://code.google.com/p/tint2/wiki/Install"&gt;tint2&lt;/a&gt;. All instructions for installing under different distros are available directly on the developers website.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ITALIANO:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
GNOME 3 non ha, a differenza di GNOME 2, due taskbar: una per le applicazioni e una per la system tray. É possibile aggiungere la barra delle applicazioni (che include anche un pannello di tray) manualmente tramite il progetto &lt;a href="http://code.google.com/p/tint2/wiki/Install"&gt;tint2&lt;/a&gt;. Tutte le istruzioni per l’installazione sotto differenti distribuzioni sono disponibili direttamente sul sito degli sviluppatori.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-7571722208748181902?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uuX0hn9fKeeZ0ih2KY3rpn7uJtM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uuX0hn9fKeeZ0ih2KY3rpn7uJtM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uuX0hn9fKeeZ0ih2KY3rpn7uJtM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uuX0hn9fKeeZ0ih2KY3rpn7uJtM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/44JMJDpCRhE/gnome-3-add-applications-taskbarpanel.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/gnome-3-add-applications-taskbarpanel.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-7395306415083893571</guid><pubDate>Sun, 31 Jul 2011 21:32:00 +0000</pubDate><atom:updated>2011-09-17T23:22:32.455+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>GNOME 3 enable right click on desktop and show icons</title><description>GNOME 3 by default doen’t show any icon on the desktop and does not allow right-clicking it. You could change this behaviour manually:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;run &lt;code&gt;yum install dconf-editor&lt;/code&gt; as root or install it via &lt;i&gt;add/remove software&lt;/i&gt; and launch it when it’s ready &lt;/li&gt;
&lt;li&gt;navigate the menus through org –&amp;gt; GNOME –&amp;gt; Desktop –&amp;gt; Background&lt;/li&gt;
&lt;li&gt;search for the &lt;i&gt;show-desktop-icons&lt;/i&gt; entry and chek its checkbox&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;ITALIANO:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;GNOME 3 di base non mostra alcuna icona sul desktop e non permette il click destro. Si puo’ modificare questo comportamento manualmente:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;lanciate &lt;code&gt;yum install dconf-editor&lt;/code&gt; da root o installatelo via &lt;i&gt;add/remove software&lt;/i&gt; ed avviatelo al termine &lt;/li&gt;
&lt;li&gt;navigate i menu attraverso org –&amp;gt; GNOME –&amp;gt; Desktop –&amp;gt; Background &lt;/li&gt;
&lt;li&gt;cercate la voce &lt;i&gt;show-desktop-icons &lt;/i&gt;e selezionate la checkbox associata&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-7395306415083893571?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-Ijmssi42FeGcSKcnBt4DQc0GVE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-Ijmssi42FeGcSKcnBt4DQc0GVE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-Ijmssi42FeGcSKcnBt4DQc0GVE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-Ijmssi42FeGcSKcnBt4DQc0GVE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/1IA0YdpL4C4/gnome-3-enable-right-click-on-desktop.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>1</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/gnome-3-enable-right-click-on-desktop.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-237543862519630938</guid><pubDate>Sun, 31 Jul 2011 21:24:00 +0000</pubDate><atom:updated>2011-09-17T23:22:46.627+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>GNOME 3 add minimize and restore buttons to windows</title><description>GNOME 3 by default shows only the “close” button on windows. You could add the other two (minimize and restore/maximize) manually:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;run &lt;code&gt;yum install gconf-editor&lt;/code&gt; as root or install it via &lt;i&gt;add/remove software&lt;/i&gt; and launch it when it’s ready &lt;/li&gt;
&lt;li&gt;navigate the menus through Desktop –&amp;gt; GNOME –&amp;gt; Shell –&amp;gt; Windows &lt;/li&gt;
&lt;li&gt;search for the &lt;i&gt;button_layout&lt;/i&gt; entry and edit its value to &lt;code&gt;:minimize,maximize,close&lt;/code&gt; (colon included!)&lt;/li&gt;
&lt;li&gt;restart nautilus or log out and in again to see the changes take effect &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;ITALIANO:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
GNOME 3 di base mostra solo il bottone “chiudi” sulle finestre. Si possono aggiungere gli altri due (minimizza e ripristina) manualmente:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;lanciate &lt;code&gt;yum install gconf-editor&lt;/code&gt; da root o installatelo via &lt;i&gt;add/remove software&lt;/i&gt; ed avviatelo al termine &lt;/li&gt;
&lt;li&gt;navigate i menu attraverso Desktop –&amp;gt; GNOME –&amp;gt; Shell –&amp;gt; Windows &lt;/li&gt;
&lt;li&gt;cercate la voce &lt;i&gt;button_layout&lt;/i&gt; e modificate il suo valore a &lt;code&gt;:minimize,maximize,close&lt;/code&gt; (due punti inclusi!)&lt;/li&gt;
&lt;li&gt;riavviate nautilus o fate log out e log in di nuovo per vedere il cambiamento in azione&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-237543862519630938?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NueC50OxF3zcblA4UeC2Tro72ng/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NueC50OxF3zcblA4UeC2Tro72ng/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NueC50OxF3zcblA4UeC2Tro72ng/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NueC50OxF3zcblA4UeC2Tro72ng/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/McYqR3IsB_g/gnome-3-add-minimize-and-restore.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/gnome-3-add-minimize-and-restore.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-4477686110220347633</guid><pubDate>Sun, 31 Jul 2011 21:05:00 +0000</pubDate><atom:updated>2011-07-31T23:07:29.458+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><title>Realtek wireless on Fedora</title><description>&lt;p&gt;This article applies to the &lt;a href="http://www.realtek.com/downloads/searchView.aspx?keyword=8191"&gt;819x Realtek wireless cards&lt;/a&gt; series like models 8191SEvB, 8191SEvA2, 8192SE, …&lt;/p&gt;  &lt;p&gt;Main reference site is &lt;a href="http://cz.linkedin.com/pub/stanislaw-gruszka/b/5b5/96b"&gt;Stanislaw Gruszka&lt;/a&gt;’s &lt;a href="http://people.redhat.com/sgruszka/compact_wireless.html"&gt;compact wireless website&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;You can either try the &lt;a href="http://people.redhat.com/sgruszka/compat-wireless/"&gt;-stable&lt;/a&gt; version or the &lt;a href="http://people.redhat.com/sgruszka/compat-wireless-next/"&gt;–next&lt;/a&gt;. Both have different kernel requirements, the –next version, though more unstable, is compiled against the latest kernel version so you should run &lt;code&gt;yum update kernel&lt;/code&gt; as root before installing the appropriate package for your system.&lt;/p&gt;  &lt;p&gt;After installation you will have to reboot the system before being able to use and control your wireless card through NetworkManager.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ITALIANO:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Questo articolo si applica ai modelli di schede &lt;a href="http://www.realtek.com/downloads/searchView.aspx?keyword=8191"&gt;wireless Realtek serie 819x&lt;/a&gt; quali 8191SEvB, 8191SEvA2, 8192SE, …&lt;/p&gt;  &lt;p&gt;Il sito di riferimento é &lt;a href="http://people.redhat.com/sgruszka/compact_wireless.html"&gt;compact wireless&lt;/a&gt; di &lt;a href="http://cz.linkedin.com/pub/stanislaw-gruszka/b/5b5/96b"&gt;Stanislaw Gruszka&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Potete provare sia la versione &lt;a href="http://people.redhat.com/sgruszka/compat-wireless/"&gt;-stable&lt;/a&gt; che la &lt;a href="http://people.redhat.com/sgruszka/compat-wireless-next/"&gt;–next&lt;/a&gt;. Entrambe hanno differenti requisiti di kernel, la versione –next, sebbene piú instabile, é compilata per l’ultima versione del kernel supportata dal sistema per cui é sufficiente lanciare &lt;code&gt;yum update kernel&lt;/code&gt; da root prima di installare il pacchetto corretto per il proprio sistema.&lt;/p&gt;  &lt;p&gt;Al termine dell’installazione sará necessario riavviare il sistema prima di poter usare e controllare la propria scheda wireless attraverso il NetworkManager.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-4477686110220347633?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XK9xiB4MlBXPlzPO2HiOGGGLlT8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XK9xiB4MlBXPlzPO2HiOGGGLlT8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XK9xiB4MlBXPlzPO2HiOGGGLlT8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XK9xiB4MlBXPlzPO2HiOGGGLlT8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/M9ILzTcYBto/realtek-wireless-on-fedora.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/realtek-wireless-on-fedora.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-2213697597942068080</guid><pubDate>Wed, 20 Jul 2011 16:33:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.768+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[MatLab] EM – Expectation Maximization reconstruction technique implementation</title><description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Expectation_maximization"&gt;EM – Expectation Maximization&lt;/a&gt; is an &lt;a href="http://scholar.google.it/scholar?q=expectation+maximization+reconstruction+technique&amp;amp;hl=en&amp;amp;as_sdt=0&amp;amp;as_vis=1&amp;amp;oi=scholart"&gt;iterative algorithm&lt;/a&gt; used in tomographic images (as in &lt;a href="http://en.wikipedia.org/wiki/Computed_tomography"&gt;CT&lt;/a&gt;) reconstruction, very useful when the &lt;a href="http://www.owlnet.rice.edu/~elec539/Projects97/cult/node2.html"&gt;FBP – Filtered Back Projection technique&lt;/a&gt; is not applicable.&lt;/p&gt;    &lt;p&gt;Basic formula is:&lt;/p&gt;  &lt;p&gt;f_k+1 = (f_k / alpha) (At (g / (A f_k)))&lt;/p&gt;  &lt;p&gt;where:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;f_k is solution (the resulting reconstructed image) at k-th iteration, at first iteration it is our guess&lt;/li&gt;    &lt;li&gt;g is image &lt;a href="http://en.wikipedia.org/wiki/Radon_transform"&gt;sinogram&lt;/a&gt; (what we get from the scanning)&lt;/li&gt;    &lt;li&gt;A f_k is &lt;a href="http://en.wikipedia.org/wiki/Radon_transform"&gt;Radon transform&lt;/a&gt; of f_k&lt;/li&gt;    &lt;li&gt;At is inverse Radon&lt;/li&gt;    &lt;li&gt;alpha is inverse Radon of a sinogram with all values 1 which represents our scanning machine&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/bi/EM.m"&gt;Get the source code here.&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-2213697597942068080?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/W_C4mHbZizQL-ZEDPMzcm1EWaFo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_C4mHbZizQL-ZEDPMzcm1EWaFo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/W_C4mHbZizQL-ZEDPMzcm1EWaFo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_C4mHbZizQL-ZEDPMzcm1EWaFo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/kmj8bEJjwHk/matlab-em-expectation-maximization.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/matlab-em-expectation-maximization.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-9019378628709830452</guid><pubDate>Wed, 20 Jul 2011 16:26:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.857+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[MatLab] SIRT - Simultaneous Iterative Reconstruction Technique implementation</title><description>&lt;p&gt;&lt;a href="http://scholar.google.it/scholar?q=simultaneous+iterative+reconstruction+technique&amp;amp;hl=en&amp;amp;as_sdt=0&amp;amp;as_vis=1&amp;amp;oi=scholart"&gt;SIRT – Simultaneous (algebraic) Reconstruction Technique&lt;/a&gt; is an iterative algorithm used in tomographic images (as in &lt;a href="http://en.wikipedia.org/wiki/Computed_tomography"&gt;CT&lt;/a&gt;) reconstruction, very useful when the &lt;a href="http://www.owlnet.rice.edu/~elec539/Projects97/cult/node2.html"&gt;FBP – Filtered Back Projection technique&lt;/a&gt; is not applicable.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Basic formula is: &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; f_(k+1) = f_k + At (g - A f_K)  &lt;br /&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;where:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;f_k is solution (the resulting reconstructed image) at k-th iteration, at first iteration it is our guess&lt;/li&gt;    &lt;li&gt;g is image &lt;a href="http://en.wikipedia.org/wiki/Radon_transform"&gt;sinogram&lt;/a&gt; (what we get from the scanning)&lt;/li&gt;    &lt;li&gt;A f_k is &lt;a href="http://en.wikipedia.org/wiki/Radon_transform"&gt;Radon transform&lt;/a&gt; of f_k&lt;/li&gt;    &lt;li&gt;At is inverse Radon&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/bi/SIRT.m"&gt;Get the source code here.&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-9019378628709830452?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z9aVgb2TtGaAEhhsgvlCZ2R-oEc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z9aVgb2TtGaAEhhsgvlCZ2R-oEc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z9aVgb2TtGaAEhhsgvlCZ2R-oEc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z9aVgb2TtGaAEhhsgvlCZ2R-oEc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/iL0nB0nFZ-Q/matlab-sirt-simultaneous-iterative.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/matlab-sirt-simultaneous-iterative.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-3661233516570443583</guid><pubDate>Wed, 20 Jul 2011 16:16:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.787+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[MatLab] Filter a tomographic image in Fourier’s space</title><description>&lt;p&gt;&lt;a href="http://www.mathworks.com/products/matlab/"&gt;MatLab&lt;/a&gt; has built-in functions to simulate acquisition and elaboration of tomographic (as in &lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/X-ray_computed_tomography"&gt;CT&lt;/a&gt;) images. When it comes to filtering the image prior to &lt;a href="http://www.owlnet.rice.edu/~elec539/Projects97/cult/node2.html"&gt;back-projecting&lt;/a&gt; it, it is possible to do it yourself without relying on the (good as in &lt;a href="http://scholar.google.com/scholar?q=shepp-logan&amp;amp;hl=en&amp;amp;as_sdt=0&amp;amp;as_vis=1&amp;amp;oi=scholart"&gt;Shepp-Logan&lt;/a&gt;) filters MatLab has.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We will filter our image in Fourier’s space. For each column of the &lt;a href="http://en.wikipedia.org/wiki/Radon_transform"&gt;sinogram&lt;/a&gt;, we:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt; apply the &lt;a href="http://en.wikipedia.org/wiki/Fourier_transform"&gt;Fourier transform&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;filter it&lt;/li&gt;    &lt;li&gt;apply the Fourier antitransform&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;When we reconstruct our image WITHOUT having MatLab apply any filter, we’ll see the image, filtered with our filter, as a result. &lt;a href="http://digilander.libero.it/otacoconvention/source/bi/iRadon.m"&gt;Get the source code here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-3661233516570443583?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3gWjcln80BackPnNLC9xatcH5TU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3gWjcln80BackPnNLC9xatcH5TU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3gWjcln80BackPnNLC9xatcH5TU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3gWjcln80BackPnNLC9xatcH5TU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/omDPBZiCtPM/matlab-filter-tomographic-image-in.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/matlab-filter-tomographic-image-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-1710706318081152833</guid><pubDate>Wed, 06 Jul 2011 14:21:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.756+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[PHP] PageRank implementation</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-7GHTxzkU254/ThRo98CfgPI/AAAAAAAAAK8/olBNQ4v_i7I/s1600/pickmeplease.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-7GHTxzkU254/ThRo98CfgPI/AAAAAAAAAK8/olBNQ4v_i7I/s320/pickmeplease.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;There are two possible &lt;a href="http://en.wikipedia.org/wiki/Pagerank"&gt;PageRank&lt;/a&gt; implementations: the power method and the iterative method. We will describe both.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;To check the results obtained we provide a scri'pt to generate a &lt;i&gt;.gexf&lt;/i&gt; file to be opened with &lt;a href="http://gephi.org/"&gt;Gephi&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Test datasets are available at the &lt;a href="http://www.cs.toronto.edu/%7Etsap/experiments/datasets/index.html"&gt;Toronto university website&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0cm;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0.5cm;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Technologies used:&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt;PHP&lt;/span&gt;  &lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt;Gephi&lt;/span&gt;  &lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt;XML&lt;/span&gt;  &lt;/span&gt;&lt;/span&gt;  &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;/div&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;b&gt;1.Power method &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This method takes longer than the other one, however the result is equally right. Using a sparse matrix instead of the full one may help speed up the process.&lt;br /&gt;
&lt;br /&gt;
Method description:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Pick the NxN input matrix and make it stochastic, call it A&lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Create the P" matrix as alpha*A+(1-alpha)*M with &lt;i&gt;alpha&lt;/i&gt; a factor which describes the probability of a random jump and &lt;i&gt;M &lt;/i&gt;an NxN matrix filled with values 1/N&lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Create starting vector v_0 with length N filled with values 1/N&lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="margin-bottom: 0cm;"&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Compute v_m = v_m-1*P" where the first time v_m-1 is exactly v_0&lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Compute the difference v_m - v_m-1 which should converge to 0&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;When the difference doesn't vary over a certain threshold or &lt;i&gt;i&lt;/i&gt; iterations have been made, stop. v_m should contain the PageRank for every page &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;To run the program you must have the &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;nodes&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;adj_matrix&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; files from the chosen dataset. The implementation source code is found here &lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/pagerank/pagerank.php"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;u&gt;&lt;b&gt;NOTE:&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; Due to Apache and PHP limitations, you may have to modify the &lt;i&gt;php.ini&lt;/i&gt; file to grant more memory to the scripts (if you don't want to store the matrix on filesystem like we did) by setting the &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;memory_limit&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; parameter to at least 768MB and raising the maximum script execution time to 5 minutes(300 seconds) with &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;max_execution_time&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;2. Iterative method - found on &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://phpir.com/pagerank-in-php"&gt;phpir&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;br /&gt;
To use this method you must have the &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;nodes&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;adj_list&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; files from the chosen dataset.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
Method description:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Each page is given a starting PR of 1/N where N is the number of nodes in the graph. Each page then gives to every page it links a PR of current_page_PR/number_of_outbound_links.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;It's introduced a dampening factor alpha (0,15) which represents the probability of making a random jump while visiting the graph or when reaching a &lt;i&gt;cul de sac&lt;/i&gt;.&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;br /&gt;
PR_new = alpha/n + (1-alpha)*PR_old&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Every PR is then normalized between 0 and 1.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
The process keeps going until it has reached &lt;i&gt;i&lt;/i&gt; iterations or the difference between old and new PR doesn't vary over a certain threshold.&lt;br /&gt;
&lt;br /&gt;
Our implementation is available &lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/pagerank/pagerank_iterative.php"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;3. Gephi parser:&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;br /&gt;
To use the &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/pagerank/parse_pagerank.php"&gt;parser&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; you &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;you must have the &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;nodes&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; and &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;adj_list&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; files from the chosen dataset. The parser outputs a &lt;i&gt;.gexf&lt;/i&gt; file to be opened with Gephi. Here is a sample &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/pagerank/out.gexf"&gt;.gexf&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; file obtained by parsing the first dataset available on the site (the one about abortion).&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-1710706318081152833?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3zZTPbjhF3FZELlGqRimZF2g3Jg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3zZTPbjhF3FZELlGqRimZF2g3Jg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3zZTPbjhF3FZELlGqRimZF2g3Jg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3zZTPbjhF3FZELlGqRimZF2g3Jg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/kCI_VJ_bblE/php-pagerank-implementation.html</link><author>noreply@blogger.com (Stefano Ghio)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-7GHTxzkU254/ThRo98CfgPI/AAAAAAAAAK8/olBNQ4v_i7I/s72-c/pickmeplease.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/07/php-pagerank-implementation.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-1693625592349800850</guid><pubDate>Wed, 25 May 2011 13:39:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.754+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><title>pro-AD website: MRI analysis for prodromal Alzheimer’s assessment</title><description>&lt;p&gt;Recently I participated in the &lt;em&gt;pro-AD&lt;/em&gt;’s website development.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href="http://magic5gui.ge.infn.it/tesi/"&gt;pro-AD&lt;/a&gt; is a website created at DIFI, the University of Genoa’s Department of Physics, to help medics automagically analyse MRI images for the prodromal Alzheimer's disease assessment. &lt;/p&gt;  &lt;p&gt;Registered medics can easily submit &lt;em&gt;DICOM&lt;/em&gt; or &lt;em&gt;NII&lt;/em&gt; files through the website to their private local folder via the java applet JUploader or the PHP uploader which is shown automatically when no java plugin is detected on the user's browser. They can then modify the information associated with those images: age, gender and an optional unique ID - &lt;strong&gt;no personal data about the patients is stored anywhere anytime during the process&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Easy access for the medic's personal profile is provided through a dedicated page; if a valid e-mail address is provided, it is possible to enable e-mail notifications about processing results.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;When one or more files are selected for processing, the server enqueues them in a multithreaded pipeline and starts the analysis. At the end, a single number which describes the patient's likelihood of being affected in the near future by the disease is returned for each file sent to processing. If the file processed was of really bad quality or was not a valid file, the process fails and an error is shown instead of the result.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;All results are stored for easy future access and can be viewed and exported in XLS format from a dedicated page. If a file is sent to processing more times, only the latest result is stored.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-1693625592349800850?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zq9I7cmLVO3TbN-8JqOMSWA0_8c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zq9I7cmLVO3TbN-8JqOMSWA0_8c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zq9I7cmLVO3TbN-8JqOMSWA0_8c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zq9I7cmLVO3TbN-8JqOMSWA0_8c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/uOau-j6qSrI/pro-ad-website-mri-analysis-for.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/05/pro-ad-website-mri-analysis-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-6206636736169277737</guid><pubDate>Wed, 25 May 2011 13:18:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.823+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[PHP] Create XLS document</title><description>&lt;p&gt;If you need to create XLS documents via PHP, you may need these functions:&lt;/p&gt;  &lt;p&gt;//XLS Begin of file    &lt;br /&gt;function xlsBOF() {     &lt;br /&gt;echo pack(&amp;quot;ssssss&amp;quot;, 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);     &lt;br /&gt;return;     &lt;br /&gt;}     &lt;br /&gt;//XLS End of file     &lt;br /&gt;function xlsEOF() {     &lt;br /&gt;echo pack(&amp;quot;ss&amp;quot;, 0x0A, 0x00);     &lt;br /&gt;return;     &lt;br /&gt;}     &lt;br /&gt;//Writes a number in a cell     &lt;br /&gt;function xlsWriteNumber($Row, $Col, $Value) {     &lt;br /&gt;if($Value == null){     &lt;br /&gt;xlsWriteLabel($Row, $Col, $Value);     &lt;br /&gt;}     &lt;br /&gt;else{     &lt;br /&gt;echo pack(&amp;quot;sssss&amp;quot;, 0x203, 14, $Row, $Col, 0x0);     &lt;br /&gt;echo pack(&amp;quot;d&amp;quot;, $Value);     &lt;br /&gt;}     &lt;br /&gt;return;     &lt;br /&gt;}     &lt;br /&gt;//Writes a string in a cell     &lt;br /&gt;function xlsWriteLabel($Row, $Col, $Value ) {     &lt;br /&gt;$L = strlen($Value);     &lt;br /&gt;echo pack(&amp;quot;ssssss&amp;quot;, 0x204, 8 + $L, $Row, $Col, 0x0, $L);     &lt;br /&gt;echo $Value;     &lt;br /&gt;return;     &lt;br /&gt;} &lt;/p&gt;  &lt;p&gt;//Creates headers to download the file    &lt;br /&gt;function xlsWriteHeader(){     &lt;br /&gt;// Send Header     &lt;br /&gt;header(&amp;quot;Pragma: public&amp;quot;);     &lt;br /&gt;header(&amp;quot;Expires: 0&amp;quot;);     &lt;br /&gt;header(&amp;quot;Cache-Control: must-revalidate, post-check=0, pre-check=0&amp;quot;);     &lt;br /&gt;header(&amp;quot;Content-Type: application/force-download&amp;quot;);     &lt;br /&gt;header(&amp;quot;Content-Type: application/octet-stream&amp;quot;);     &lt;br /&gt;header(&amp;quot;Content-Type: application/download&amp;quot;);;     &lt;br /&gt;header(&amp;quot;Content-Disposition: attachment;filename=EXPORTNAME.xls &amp;quot;);     &lt;br /&gt;header(&amp;quot;Content-Transfer-Encoding: binary &amp;quot;);     &lt;br /&gt;}&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-6206636736169277737?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/89lG6lM96g4ktK3g1GZCJls7PtE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/89lG6lM96g4ktK3g1GZCJls7PtE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/89lG6lM96g4ktK3g1GZCJls7PtE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/89lG6lM96g4ktK3g1GZCJls7PtE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/lOJdScaThaE/php-create-xls-document.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/05/php-create-xls-document.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-7436577266764902000</guid><pubDate>Wed, 25 May 2011 13:08:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.834+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[PHP] Send mail with attachment using PEAR</title><description>&lt;p&gt;If you use &lt;a href="http://pear.php.net/"&gt;PEAR&lt;/a&gt; and want to send mails with attachments via PHP, you may find this helpful.&lt;/p&gt;  &lt;p&gt;First, ensure you have installed PEAR’s &lt;a href="http://pear.php.net/package/Mail/"&gt;Mail&lt;/a&gt; and &lt;a href="http://pear.php.net/package/Mail_Mime/redirected"&gt;Mail_mime&lt;/a&gt; packages. Then, you just need a function like this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;function send_mail($mail, $subject, $bodytxt, $bodyhtml, $attachment){    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; require_once('Mail.php');     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; require_once('Mail/mime.php');     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //mail parameters, this is the basic one     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $params = array(&amp;quot;host&amp;quot;=&amp;gt;&amp;quot;YOUR_HOST&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //creates smtp mail object     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $mail_sender = Mail::factory(&amp;quot;smtp&amp;quot;, $params);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //creates mail headers     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $headers = array(&amp;quot;From&amp;quot;=&amp;gt;&amp;quot;YOUR_ADDRESS&amp;quot;, &amp;quot;To&amp;quot;=&amp;gt;$mail, &amp;quot;Subject&amp;quot;=&amp;gt;$subject);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //creates attachment and body fields     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $crlf = &amp;quot;\n&amp;quot;;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $mime = new Mail_mime($crlf);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $mime-&amp;gt;setTXTBody($bodytxt);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $mime-&amp;gt;setHTMLBody($bodyhtml);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $mime-&amp;gt;addAttachment($attachment, &amp;quot;ATTACHMENT_TYPE&amp;quot;);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //never change these lines order     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $body = $mime-&amp;gt;get();     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $headers = $mime-&amp;gt;headers($headers);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; $error=$mail_sender-&amp;gt;send($mail, $headers, $body);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return $error;     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;where:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;YOUR_HOST is your mail host, something like smtp.gmail.com &lt;/li&gt;    &lt;li&gt;$mail is the recipient’s mail address &lt;/li&gt;    &lt;li&gt;$bodytxt is the mail’s body in TXT format, do not use HTML markup here! &lt;/li&gt;    &lt;li&gt;ATTACHMENT_TYPE is the attachment’s &lt;a href="http://www.iana.org/assignments/media-types/index.html"&gt;MIME type as per IANA’s specifications&lt;/a&gt;, something like image/jpeg &lt;/li&gt;    &lt;li&gt;if you change the order of the last lines, the attach operation will not work &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-7436577266764902000?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cjXq5cSG132Saf4A5O46eEKAYgo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cjXq5cSG132Saf4A5O46eEKAYgo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cjXq5cSG132Saf4A5O46eEKAYgo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cjXq5cSG132Saf4A5O46eEKAYgo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/teptqLxRmUs/send-mail-with-attachment-via-php-using.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/05/send-mail-with-attachment-via-php-using.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-6854055151207633856</guid><pubDate>Fri, 13 May 2011 16:44:00 +0000</pubDate><atom:updated>2011-05-13T18:44:58.878+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[PHP, XML] Twitter friends graph</title><description>&lt;p&gt;Brief example on how to create and draw some Twitter user’s &lt;em&gt;friends&lt;/em&gt; graph.&lt;/p&gt;  &lt;p&gt;Piccolo esempio di come creare e disegnare il grafo dei &lt;em&gt;friends&lt;/em&gt; di un dato utente Twitter.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://digilander.libero.it/otacoconvention/source/ar2/graph/friend-vs-best-friend.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;English:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;With &lt;em&gt;friends&lt;/em&gt; Twitter means “people whom the user follows”. Starting from a chosen user, we grab all his &lt;em&gt;friends&lt;/em&gt; until a depth level of 3 and we create a XML file with a proper structure to be opened by &lt;a href="http://gephi.org/"&gt;Gephi&lt;/a&gt; in order to graphically visualize the result. The number of users we get is far lower than the real one due to Twitter API’s limitations.&lt;/p&gt;  &lt;p&gt;To create the gexf file for Gephi, just run the &lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/graph/HowDoYouGraph.php"&gt;HowDoYouGraph&lt;/a&gt; script after editing the &lt;em&gt;$username&lt;/em&gt; variable with the desired username. After a little coffee break, in the same folder as the script you should find a file named &lt;em&gt;grafo.gexf&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/graph/graph.png"&gt;Show an example graph for user &lt;em&gt;VivoMikiX&lt;/em&gt;&lt;/a&gt; and &lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/graph/grafo.gexf"&gt;download the gexf source&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Stats about the undirected example graph:&lt;/b&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Total nodes: 5013 &lt;/li&gt;    &lt;li&gt;Total edges: 5539 &lt;/li&gt;    &lt;li&gt;Medium degree = 2.21 &lt;/li&gt;    &lt;li&gt;Diameter = 6 &lt;/li&gt;    &lt;li&gt;Density = 0 &lt;/li&gt;    &lt;li&gt;Modularity = 0.876      &lt;ul&gt;       &lt;li&gt;Number of communities = 72&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Weakly connected components = 1 &lt;/li&gt;    &lt;li&gt;Medium clustering coefficient = 0.014      &lt;ul&gt;       &lt;li&gt;Total triangles = 202&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Eigenvector centrality with 300 iterations = 0.0325 &lt;/li&gt;    &lt;li&gt;Medium path length = 4.496      &lt;ul&gt;       &lt;li&gt;Number of shortest paths = 25125156 &lt;/li&gt;        &lt;li&gt;Radius = 3&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Italiano:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Con &lt;i&gt;friends&lt;/i&gt; si intendono tutte le persone che l'utente segue. Partendo da un dato utente, recuperiamo i suoi &lt;i&gt;friends &lt;/i&gt;fino al livello 3 e generiamo un file XML con una struttura gradita a &lt;a href="http://gephi.org/"&gt;Gephi&lt;/a&gt; per visualizzare graficamente il risultato. Il numero di utenti recuperati e' inferiore al numero reale a causa di limitazioni imposte dalle API di Twitter.&lt;/p&gt;  &lt;p&gt;Per creare il file gexf per Gephi, basta far girare lo script &lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/graph/HowDoYouGraph.php"&gt;HowDoYouGraph&lt;/a&gt; dopo aver modificato la variabile &lt;em&gt;$username&lt;/em&gt; con lo username desiderato. Dopo aver preso un caffe', nella stessa cartella dello script apparira' un file chiamato &lt;i&gt;grafo.gexf&lt;/i&gt; che e' quello che ci interessa.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/graph/graph.png"&gt;Visiona un grafo di esempio per l’utente &lt;em&gt;VivoMikiX&lt;/em&gt;&lt;/a&gt; e &lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/graph/grafo.gexf"&gt;scarica il file gexf sorgente&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Statistiche sul grafo d’esempio, considerandolo indiretto:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Totale nodi: 5013 &lt;/li&gt;    &lt;li&gt;Totale archi: 5539 &lt;/li&gt;    &lt;li&gt;Grado Medio = 2.21 &lt;/li&gt;    &lt;li&gt;Diametro = 6 &lt;/li&gt;    &lt;li&gt;Densità = 0 &lt;/li&gt;    &lt;li&gt;Modularità = 0.876      &lt;ul&gt;       &lt;li&gt;Numero di Comunità = 72&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Componenti connesse debolmente = 1 &lt;/li&gt;    &lt;li&gt;Coefficiente di Clustering Medio = 0.014      &lt;ul&gt;       &lt;li&gt;Triangoli totali = 202&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Centralità di autovettori con 300 iterazioni = 0.0325 &lt;/li&gt;    &lt;li&gt;Lunghezza cammino medio = 4.496      &lt;ul&gt;       &lt;li&gt;Numero di percorsi piu' corti = 25125156 &lt;/li&gt;        &lt;li&gt;Raggio = 3&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-6854055151207633856?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M_6EUm90nKlekyJJr7qGYsyHDR0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M_6EUm90nKlekyJJr7qGYsyHDR0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M_6EUm90nKlekyJJr7qGYsyHDR0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M_6EUm90nKlekyJJr7qGYsyHDR0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/ZuFYRLTUk2o/php-xml-twitter-friends-graph.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/05/php-xml-twitter-friends-graph.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-5878814121560953993</guid><pubDate>Mon, 25 Apr 2011 21:11:00 +0000</pubDate><atom:updated>2011-09-17T23:42:18.723+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Pictures</category><title>Paris.. like a boss</title><description>&lt;p&gt;Cosa ottieni se prendi tre fieri e li metti a Parigi? &lt;a href="http://cid-19468fe08387b566.photos.live.com/browse.aspx/Paris%20like%20a%20boss"&gt;Scoprilo guardando le foto!&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://public.sn2.livefilestore.com/y1p4qVvmkEPW7zrQD9SuNDz7qKVtmX8qgMYq_F6DyPbbfhSPKIPqbeZm8KQ3MqLvb72mefEeD3Rs8hwlbG_C1Egtw/100_0632.jpg?psid=1" width="400" height="533" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-5878814121560953993?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ONObJALePpkVoiI_na78DVB-yk0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ONObJALePpkVoiI_na78DVB-yk0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ONObJALePpkVoiI_na78DVB-yk0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ONObJALePpkVoiI_na78DVB-yk0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/4qf_aD0Q7bE/paris-like-boss.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>2</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/04/paris-like-boss.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-2060770604940837819</guid><pubDate>Thu, 31 Mar 2011 11:48:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.763+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Web</category><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[PHP, JavaScript] Twitter, Google Maps, YouTube API mashup</title><description>&lt;div&gt;Where you followin' me?&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/follow.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="249" src="http://digilander.libero.it/otacoconvention/source/ar2/follow.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;English:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A mashup with Twitter, Google Maps and YouTube APIs.&lt;br /&gt;
&lt;br /&gt;
We grab some Twitter user's followers, show them on Google Maps and include YouTube videos about the city where most followers live.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Italiano:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;Un mashup con le API di Twitter, Google Maps e YouTube.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Si recuperano i follower di un certo utente Twitter, si mostra la loro concentrazione su Google Maps e si includono dei video riguardanti la cittá in cui risiede la maggior parte dei follower.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/relazione/Where_you_followin_me.pdf"&gt;Scarica la documentazione/Download the project docs&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/ar2/mashup.zip"&gt;Scarica i file del progetto/Download the project files&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-2060770604940837819?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZD19JobREFmd9uAhfZS3atSkOX0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZD19JobREFmd9uAhfZS3atSkOX0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZD19JobREFmd9uAhfZS3atSkOX0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZD19JobREFmd9uAhfZS3atSkOX0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/Zwn5Pf_Ofg0/php-javascript-twitter-google-maps.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2011/03/php-javascript-twitter-google-maps.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-7608532810466412531</guid><pubDate>Sun, 28 Nov 2010 12:52:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.836+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[Java] Calcolatrice v 1.1</title><description>&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;   &lt;p&gt;Sì tutti la aspettavano e finalmente è uscita! La mitica, insuperabile, potentissima, e graficamente accattivante Calcolatrice v 1.1 è qui! &lt;/p&gt;    &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/archivi/Calcolatrice.jar"&gt;Qui&lt;/a&gt; scarica il .jar (doppio click per farlo partire). Serve un ambiente java installato, se non lo hai scaricalo da &lt;a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jre-6u6-oth-JPR@CDS-CDS_Developer"&gt;qui&lt;/a&gt;. &lt;/p&gt;    &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/Calcolatrice.java"&gt;Qui&lt;/a&gt; scarica i sorgenti java. &lt;/p&gt;    &lt;p&gt;Prodotto rilasciato sotto licenza di uccidere, GPLv2, CreativeCommons.&lt;/p&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-7608532810466412531?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LyAH81LbhLQTb_RDR0reTTwpAHE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LyAH81LbhLQTb_RDR0reTTwpAHE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LyAH81LbhLQTb_RDR0reTTwpAHE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LyAH81LbhLQTb_RDR0reTTwpAHE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/zeqeifToo-Q/java-calcolatrice-v-11.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2010/11/java-calcolatrice-v-11.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-4796613838030287899</guid><pubDate>Sun, 28 Nov 2010 12:51:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.802+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[C] Stable Matching v2.5.3</title><description>&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;   &lt;p&gt;Finalmente completato e ampiamente testato, è ancora fresco di compilazione. "Stable Matching v2.5.3" cambierà il vostro modo di cercare un/a compagno/a. Potente, intuitivo, annienta-noob-inabili-all'utilizzo-correggendo-ogni-loro-errore-di-inuput-e-costringendoli-a-crasharmelo-soltanto-con-una-kill, non manca di nulla, a parte un'interfaccia. &lt;/p&gt;    &lt;p&gt;Qui i sorgenti: &lt;/p&gt;    &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/stable_matching/insieme.h"&gt;libreria&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/stable_matching/insieme_aux.c"&gt;funzioni&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/stable_matching/insieme.c"&gt;main&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://digilander.libero.it/otacoconvention/source/stable_matching/doc.txt"&gt;Qui&lt;/a&gt; il documento di progetto. &lt;/p&gt;    &lt;p&gt;Il programma è in inglese, i commenti al codice ed il documento di progetto sono in italiano, tanto il C è universale. Compilare con gcc o quello che volete. Funziona da riga di comando. Rilasciato sotto GPLv2 e CreativeCommons. &lt;/p&gt;    &lt;p align="center"&gt;&lt;img src="http://munchies.files.wordpress.com/2007/04/heart_cloud.gif" /&gt;&lt;/p&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-4796613838030287899?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LyJ6t4gr2eUbjSKGGFMGzIzeeHs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LyJ6t4gr2eUbjSKGGFMGzIzeeHs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LyJ6t4gr2eUbjSKGGFMGzIzeeHs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LyJ6t4gr2eUbjSKGGFMGzIzeeHs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/wqVbssHMlKM/c-stable-matching-v253.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2010/11/c-stable-matching-v253.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1859167416855250911.post-2264757101034664871</guid><pubDate>Sun, 28 Nov 2010 12:50:00 +0000</pubDate><atom:updated>2011-09-17T23:43:43.770+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">HowTo</category><category domain="http://www.blogger.com/atom/ns#">Source code</category><title>[Java] Pda Maps v1.0</title><description>&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;p&gt;Più potente del TomTom, più stiloso dell'iPhone, più completo del tuttocittà.. ecco a voi &lt;a href="http://digilander.libero.it/otacoconvention/source/pda/Pda.zip"&gt;Pda Maps v1.0&lt;/a&gt;!&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://digilander.libero.it/otacoconvention/source/pda/sfondo.jpg" /&gt; &lt;/p&gt; &lt;p align="center"&gt; &lt;/p&gt; &lt;p align="left"&gt;Nello zip c'è tutto, incluso documento di progetto e readme. &lt;/p&gt; &lt;p align="left"&gt;Per compilare: javac Pda.java&lt;/p&gt; &lt;p align="left"&gt;Per far partire: java Pda&lt;/p&gt; &lt;p align="left"&gt; &lt;/p&gt; &lt;p align="left"&gt;Questa volta niente .jar per comodità. Sono allegati due file mappa, altri aggiuntivi vanno creati a mano.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1859167416855250911-2264757101034664871?l=groglogs.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RSTLwfmKP6qwCDZrCkSCrSNr51A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RSTLwfmKP6qwCDZrCkSCrSNr51A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RSTLwfmKP6qwCDZrCkSCrSNr51A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RSTLwfmKP6qwCDZrCkSCrSNr51A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/groglogs/~3/hLWLuNDHrc8/java-pda-maps-v10.html</link><author>noreply@blogger.com (Stefano Ghio)</author><thr:total>0</thr:total><feedburner:origLink>http://groglogs.blogspot.com/2010/11/java-pda-maps-v10.html</feedburner:origLink></item></channel></rss>

