<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4921500585003409026</id><updated>2025-12-09T21:39:21.089+02:00</updated><category term="apache"/><category term="james"/><category term="gsoc"/><category term="java"/><category term="hbase"/><category term="debian"/><category term="floss"/><category term="hadoop"/><category term="programare"/><category term="spring"/><category term="RLUG"/><category term="email"/><category term="web"/><category term="GSL"/><category term="OpenOffice"/><category term="XML"/><category term="amuzante"/><category term="broccoli"/><category term="btrfs"/><category term="curs online"/><category term="emberjs"/><category term="events"/><category term="filesystem"/><category term="flosscamp"/><category term="hdfs"/><category term="hibernate"/><category term="html"/><category term="laptop"/><category term="linux"/><category term="mahout"/><category term="mim4j"/><category term="mime4j"/><category term="nio"/><category term="office"/><category term="performance"/><category term="solution"/><category term="zetar"/><title type='text'>Software for humans</title><subtitle type='html'>Debian, Java, Apache Software Foundation</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-3554300981665449977</id><published>2015-03-24T22:32:00.003+02:00</published><updated>2015-03-24T23:17:23.129+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="broccoli"/><category scheme="http://www.blogger.com/atom/ns#" term="btrfs"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="emberjs"/><category scheme="http://www.blogger.com/atom/ns#" term="filesystem"/><category scheme="http://www.blogger.com/atom/ns#" term="laptop"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="performance"/><category scheme="http://www.blogger.com/atom/ns#" term="solution"/><title type='text'>My experience with Btrfs on Debian - no space on device</title><content type='html'>I wish to share with you some of my experiances with BTRFS. Maybe it will be usefull.&lt;br /&gt;
&lt;br /&gt;
I&#39;m using btrfs on my /home partition, on my Debian laptop for a few months now. All seemed to be pretty good. The only issues that I had was the fact that filesystem access seemed to be a bit slow on some occasions, but generally things where ok. &lt;br /&gt;
&lt;br /&gt;
This went on until today, when I noticed a complete slowdown of the system, to a point that it became unusable. Some symptoms: Google Chrome crashed and became unusable, removing files was very slow (rm -rf node_modules, nautilus deletion, etc. ) Intellij WebStorm was barelly starting, node.js was complaining about &#39;not enough space on device&#39; .&lt;br /&gt;
&lt;br /&gt;
I also checked my root partition to validate if the prbolem was btrfs related or not. My root partition, which is ext4 and I created/removed some files. Operations performed normally.&lt;br /&gt;
&lt;br /&gt;
My system was thus unusable and I didn&#39;t had any idea why.&lt;br /&gt;
&lt;br /&gt;
So I started investigating...&lt;br /&gt;
&lt;br /&gt;
I checked btrfs file system size, but things where ok:&lt;br /&gt;
&lt;br /&gt;
btrfs fi df /home showed about 10gb of free space&lt;br /&gt;
&lt;br /&gt;
sudo btrfs fi df /home/&lt;br /&gt;
Data, single: total=229.80GiB, used=218.80GiB&lt;br /&gt;
System, single: total=32.00MiB, used=20.00KiB&lt;br /&gt;
Metadata, single: total=3.00GiB, used=2.49GiB&lt;br /&gt;
GlobalReserve, single: total=512.00MiB, used=0.00B&lt;br /&gt;
&lt;br /&gt;
My fstab looked like this (I had cow active):&lt;br /&gt;
&lt;br /&gt;
/dev/sda3 /home &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btrfs &amp;nbsp; &amp;nbsp;autodefrag,compress=lzo,space_cache &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;
&lt;br /&gt;
Not knowing what to do, I started changing /etc/fstab and rebooting my laptop. First I activated noatime, then I deactivated cow (with nodataow) but I did not notice any improvement.&lt;br /&gt;
&lt;br /&gt;
The solution:&lt;br /&gt;
&lt;br /&gt;
I was very close to re-install Debian on my machine but decided to give it one more chance. I didn&#39;t like that thought, since it would have ment a lot of work. I seated myself at the keyboard and started a btrfs defrag&lt;br /&gt;
&lt;br /&gt;
&quot;btrfs filesystem defrag /home&quot;&lt;br /&gt;
&lt;br /&gt;
While I was at it, I thought it will be nice to have some more free-space so I started to delete a bunch of big files. That took a few minutes and I got some extra space and Evrika !!! &amp;nbsp;my system was usable once more !&lt;br /&gt;
&lt;br /&gt;
Data, single: total=229.80GiB, used=199.81GiB&lt;br /&gt;
System, single: total=32.00MiB, used=20.00KiB&lt;br /&gt;
Metadata, single: total=3.00GiB, used=2.49GiB&lt;br /&gt;
GlobalReserve, single: total=512.00MiB, used=0.00B&lt;br /&gt;
&lt;br /&gt;
My current /etc/fstab :&lt;br /&gt;
&lt;br /&gt;
/dev/sda3 /home &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btrfs &amp;nbsp; &amp;nbsp;nodatacow,autodefrag,noatime,compress=lzo,space_cache &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;br /&gt;
&lt;br /&gt;
What caused this?&lt;br /&gt;
&lt;br /&gt;
I&#39;m not very sure. It&#39;s kind of obvious that I&#39;ve hit the btrfs low disk space problem. The strange thing is that I&#39;ve been having ~ 10 Gb of free space for a long time (more than a 1-2 months) and I did not notice that behaviour. After more thought of what I did different the laste few days is that I started using some node.js build tools that generate a lot of writes on change ( broccoli js build tool, ember-cli ). I will continue to investigate this, but right now I&#39;m happy to have a working system and will also migrate my &amp;nbsp;root partition to btrfs once Debian Jessie is released.&lt;br /&gt;
&lt;br /&gt;
On the down side, it&#39;s a pitty that with btrfs you can do so much, but you can&#39;t use all your disk space, and you can make your system very unstable very easy. &lt;br /&gt;
&lt;br /&gt;
$ sudo btrfs fi show&lt;br /&gt;
Label: none &amp;nbsp;uuid: 49d9c741-b00b-487b-be5c-49da02325a16&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Total devices 1 FS bytes used 202.30GiB&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;devid &amp;nbsp; &amp;nbsp;1 size 232.83GiB used 232.83GiB path /dev/sda3&lt;br /&gt;
&lt;br /&gt;
Btrfs v3.17&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
$ uname -a&lt;/div&gt;
&lt;div&gt;
Linux daos 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt7-1 (2015-03-01) x86_64 GNU/Linux&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Update:&lt;br /&gt;
More &#39;scientific&#39; artiles related to the subject:&lt;br /&gt;
http://unix.stackexchange.com/questions/174446/btrfs-error-error-during-balancing-no-space-left-on-device&lt;br /&gt;
http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/3554300981665449977/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2015/03/my-experience-with-btrfs-on-debian.html#comment-form' title='2 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/3554300981665449977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/3554300981665449977'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2015/03/my-experience-with-btrfs-on-debian.html' title='My experience with Btrfs on Debian - no space on device'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-626185768023590325</id><published>2014-10-17T00:03:00.002+03:00</published><updated>2014-10-17T00:11:03.776+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="programare"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Modular REST applications with Karaf features for OSGi Jax-RS Connector</title><content type='html'>&lt;span style=&quot;font-size: small;&quot;&gt;The purpose of this article is to let you know how easy&amp;nbsp; it is to develop modular REST (JAX-RS) applications on OSGi, particularly Apache Karaf. &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;For some time I&#39;m working on improving the way I deliver applications. My focus is on quality, ease of understanding and speed of delivery. My framework of choice for some time is the OSGi platform (mostly used on top of Karaf, but I&#39;m getting bolder - going for bare-bone, native containers).&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Regarding web applications I admit I don&#39;t like sessions and I am strongly inclined to develop stateless applications. Since I like standards and the benefits they provide, my choice for a web framework has narrowed down to JAX-RS for which there are a few implementations.&lt;/span&gt;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;I came across a project called &lt;a href=&quot;https://github.com/hstaudacher/osgi-jax-rs-connector&quot; target=&quot;_blank&quot;&gt;osgi-jax-rs-connector&lt;/a&gt;
 who&#39;s aim is to simplify web application&amp;nbsp; development using
JAX-RS on OSGi. The way it works is you write your JAX-RS annotated resources and you publish them in the registry. Once there, the JAX-RS Publisher from osgi-jax-rs-connector will find them, take notice of the annotation and publish them.&amp;nbsp; That&#39;s it.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;In the project README on github, you will find links to articles detailing the whole process. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;All i did was to&amp;nbsp; add a features file for Apache Karaf so you can try it out easily. I&#39;ve made a pull request with my code to make it part of the original code base and hopefully it will soon.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;I&#39;ll reproduce the steps below. You start by building the project and installing the features in Apache Karaf: &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;&lt;code&gt;    feature:repo-add mvn:com.eclipsesource.jaxrs/features/0.0.1-SNAPSHOT/xml/features
    feature:install scr http
    feature:install jax-rs-connector jax-rs-provider-moxy
    install mvn:com.eclipsesource.jaxrs/jax-rs-sample/0.0.1-SNAPSHOT&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;After this just go to: &lt;a href=&quot;http://localhost:8181/sercices/greeting&quot; target=&quot;_blank&quot;&gt;http://localhost:8181/sercices/greeting&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;You can check the whole project on my github account in the mean time: &lt;a href=&quot;https://github.com/ieugen/osgi-jax-rs-connector/blob/master/karaf/README.md&quot; target=&quot;_blank&quot;&gt;step by step&lt;/a&gt; . &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;There are other solution out there for publishing JAX-RS resources using OSGi HttpService. Another interesting approach is &lt;a href=&quot;https://github.com/njbartlett/jaxrs-osgi-extender&quot; target=&quot;_blank&quot;&gt;Neil Bartlett&#39;s JAX-RS OSGi extender&lt;/a&gt; . The main advantage (in my opinion) of using the approach taken by Connector is the fact that you publish objects instead of the extender building them for you. This means that I am free to choose the way I build my object and I also have the opportunity to inject dependencies in it before I publish it&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;- hello CDI&lt;/span&gt;. I can build my objects using CDI via pax-cdi or with declarative services (as you can see in my sample code) and I am free to inject stuff in it before I expose it for registration with HttpService. That is a pretty powerful thing. I hope to show you how this is done soon.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp; &lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/626185768023590325/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2014/10/modular-rest-applications-with-karaf.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/626185768023590325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/626185768023590325'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2014/10/modular-rest-applications-with-karaf.html' title='Modular REST applications with Karaf features for OSGi Jax-RS Connector'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-5018619630382583409</id><published>2012-06-19T13:07:00.000+03:00</published><updated>2012-06-19T13:07:45.785+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="mim4j"/><category scheme="http://www.blogger.com/atom/ns#" term="programare"/><title type='text'>java mbox parsing with Apache  James Mime4j</title><content type='html'>Today I just made a small push to Apache James Mim4j trunk. The change-set adds mbox parsing capabilities to mime4j. It&#39;s a one class Iterator that you can use to split an mbox file into individual messages and after this parse them with mime4j.&lt;br /&gt;
&lt;br /&gt;
I also added an simple example &lt;a href=&quot;http://svn.apache.org/repos/asf/james/mime4j/trunk/examples/src/main/java/org/apache/james/mime4j/samples/mbox/IterateOverMbox.java&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This is how you can use it:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
&lt;pre&gt;for (CharBufferWrapper message : MboxIterator.fromFile(mbox).charset(ENCODER.charset()).build()) {&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;pre&gt;System.out.println(messageSummary(message.asInputStream(ENCODER.charset())));
count++;
}
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/5018619630382583409/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2012/06/java-mbox-parsing-with-apache-james.html#comment-form' title='5 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/5018619630382583409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/5018619630382583409'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2012/06/java-mbox-parsing-with-apache-james.html' title='java mbox parsing with Apache  James Mime4j'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-7976980112101492322</id><published>2012-05-17T12:22:00.000+03:00</published><updated>2012-05-17T12:25:35.323+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="floss"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><title type='text'>JETM performance monitoring for Apache James</title><content type='html'>&lt;h2&gt;The story&lt;/h2&gt; 

Today I decided to improve how people can monitor Apache James email server. James already has some&lt;a href=&quot;http://james.apache.org/server/3/monitor.html&quot;&gt; monitoring&lt;/a&gt; available via:

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://james.apache.org/server/3/monitor-logging.html&quot;&gt;Logging monitoring page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://james.apache.org/server/3/monitor-jmx.html&quot;&gt;Java Management Extension monitoring page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://james.apache.org/server/3/monitor-folders.html&quot;&gt;Folder monitoring page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

Each of the above monitoring options is useful and necessary as it&#39;s used to monitor different aspects of how James runs. 
With regard to performance, only JMX monitoring can provide metrics that allow a user to get a feel of the server state. 
&lt;br /&gt;

With JMX enabled you can just launch jconsole to access the attributes and methods that James exposes: number of active connections active per component, limits, etc. You have complete monitoring access to the following services:
&lt;ul&gt;
&lt;li&gt;IMAP&lt;/li&gt;
&lt;li&gt;POP3&lt;/li&gt;
&lt;li&gt;SMTP&lt;/li&gt;
&lt;li&gt;LMTP&lt;/li&gt;
&lt;li&gt;RemoteManager&lt;/li&gt;
&lt;li&gt;DNSService&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt; 

The nice thing about JMX is that it&#39;s integrated with the JVM (no external libraries also) and can provide very precise information on almost every aspect of your application like memory, execution of methods, number of method calls, etc. You can see what James exposes on the &lt;a href=&quot;http://james.apache.org/server/3/monitor-jmx.html&quot;&gt;Java Management Extension&lt;/a&gt; page. 

JMX is good so why another solution to monitor James? Well, in order for JMX monitoring to work you have to write some code and once you get it in there it&#39;s not easy to turn off. Since James is component based, disabling JMX is very easy: you just have to comment out some spring beans declarations. So the second part is not an issue, but the first one is. 
&lt;br/&gt; 

Monitoring all James components means you have to write code for each component. This will make the code-base larger and harder to maintain. Here&#39;s where &lt;a href=&quot;http://jetm.void.fm/&quot;&gt;Java™ Execution Time Measurement Library&lt;/a&gt; or JETM shines. It&#39;s a general library that you can use in your application to do monitoring. It&#39;s small, compact, adds little overhead and provides all the basic stuff that you need, including an web interface to view your results. 

&lt;br/&gt;

The nicest part about JETM is that it has spring integration. Because James uses spring extensively (the IOC part) integrating the two was a matter of a few hours (took my time reading).

&lt;h2&gt;How it works&lt;/h2&gt;

The JETM library has integration with spring framework and uses spring AOP. It creates a &lt;a href=&quot;http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/reflect/Proxy.html&quot;&gt;Proxy&lt;/a&gt; to intercept calls to the beans that you wish to monitor. 


&lt;h2&gt;The result &lt;/h2&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM674o3Y_7TWTnWQrOAf5QJCkF9JeHFXnYJayPdQ02rKo_wDaz-zd7nGe23sbjU8VI96L1VQ4E81fCSqsb1s0D0tAeW-goN_AIUESIDL1JsWwagCYsY_pUCN-LqiKPQl1yJCyQkMg7Okx-/s1600/james-jetm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;223&quot; width=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM674o3Y_7TWTnWQrOAf5QJCkF9JeHFXnYJayPdQ02rKo_wDaz-zd7nGe23sbjU8VI96L1VQ4E81fCSqsb1s0D0tAeW-goN_AIUESIDL1JsWwagCYsY_pUCN-LqiKPQl1yJCyQkMg7Okx-/s320/james-jetm.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

and detailed: 

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvvebhe2iZuZizA3E1cfLn8PEjzMqRGXUwe5UVqh1pjkdKUIAaXpIaWFA-1zTGjyiqZUT8QJBoFSnX8k0iNtzc1SeTfd_ykKyU81iELaljmc4wPiNDE1dT5KkhuAgb6hkn-7NPV8uhx-kv/s1600/james-jetm2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;327&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvvebhe2iZuZizA3E1cfLn8PEjzMqRGXUwe5UVqh1pjkdKUIAaXpIaWFA-1zTGjyiqZUT8QJBoFSnX8k0iNtzc1SeTfd_ykKyU81iELaljmc4wPiNDE1dT5KkhuAgb6hkn-7NPV8uhx-kv/s400/james-jetm2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;h2&gt;The code&lt;/h2&gt;

You won&#39;t find much here, just some configurations. You can see the full diff &lt;a href=&quot;http://svn.apache.org/viewvc?view=revision&amp;revision=1336662&quot;&gt;here&lt;/a&gt;. &lt;br /&gt; 
In a few words: add the library to your project pom.xml file:

&lt;code&gt;
&lt;pre&gt;
        &amp;lt;dependencies&amp;gt;&lt;br/&gt;            &amp;lt;dependency&amp;gt;&lt;br/&gt;                &amp;lt;groupId&amp;gt;fm.void.jetm&amp;lt;/groupId&amp;gt;&lt;br/&gt;                &amp;lt;artifactId&amp;gt;jetm&amp;lt;/artifactId&amp;gt;&lt;br/&gt;                &amp;lt;version&amp;gt;1.2.3&amp;lt;/version&amp;gt;&lt;br/&gt;            &amp;lt;/dependency&amp;gt;&lt;br/&gt;            &amp;lt;dependency&amp;gt;&lt;br/&gt;                &amp;lt;groupId&amp;gt;fm.void.jetm&amp;lt;/groupId&amp;gt;&lt;br/&gt;                &amp;lt;artifactId&amp;gt;jetm-optional&amp;lt;/artifactId&amp;gt;&lt;br/&gt;                &amp;lt;version&amp;gt;1.2.3&amp;lt;/version&amp;gt;&lt;br/&gt;            &amp;lt;/dependency&amp;gt;&lt;br/&gt;        &amp;lt;/dependencies&amp;gt;
&lt;/pre&gt;
&lt;/code&gt;

Next declare the monitoring beans in your project (jetm-monitoring.conf in our case): 

&lt;code&gt;
&lt;pre&gt;
    &amp;lt;bean id=&amp;quot;etmMonitor&amp;quot; class=&amp;quot;etm.core.monitor.NestedMonitor&amp;quot;&lt;br/&gt;          init-method=&amp;quot;start&amp;quot; destroy-method=&amp;quot;stop&amp;quot; /&amp;gt;&lt;br/&gt;    &amp;lt;bean id=&amp;quot;etmHttpConsole&amp;quot; class=&amp;quot;etm.contrib.console.HttpConsoleServer&amp;quot;&lt;br/&gt;          init-method=&amp;quot;start&amp;quot; destroy-method=&amp;quot;stop&amp;quot; autowire=&amp;quot;constructor&amp;quot;/&amp;gt;&lt;br/&gt;&lt;br/&gt;    &amp;lt;bean id=&amp;quot;etmMethodCallInterceptor&amp;quot;&lt;br/&gt;          class=&amp;quot;etm.contrib.aop.aopalliance.EtmMethodCallInterceptor&amp;quot;&lt;br/&gt;          autowire=&amp;quot;constructor&amp;quot;/&amp;gt;&lt;br/&gt;&lt;br/&gt;    &amp;lt;bean id=&amp;quot;etmAutoProxy&amp;quot;&lt;br/&gt;          class=&amp;quot;org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator&amp;quot;&amp;gt;&lt;br/&gt;        &amp;lt;property name=&amp;quot;interceptorNames&amp;quot;&amp;gt;&lt;br/&gt;            &amp;lt;list&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;etmMethodCallInterceptor&amp;lt;/value&amp;gt;&lt;br/&gt;            &amp;lt;/list&amp;gt;&lt;br/&gt;        &amp;lt;/property&amp;gt;
&lt;/pre&gt;
&lt;/code&gt;

Here EtmMonitor is responsible for collecting and aggregating measurements points. The measurements points are method calls intercepted by EtmMethodCallInterceptor.  
&lt;br?&gt; 
The final step is to add the list of beans from your project that you wish to monitor (also in jetm-monitoring.conf). Here I added most of the beans exported by James.

&lt;pre&gt;
&lt;code&gt;
    &amp;lt;bean id=&amp;quot;etmAutoProxy&amp;quot;&lt;br/&gt;          class=&amp;quot;org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator&amp;quot;&amp;gt;&lt;br/&gt;        &amp;lt;property name=&amp;quot;interceptorNames&amp;quot;&amp;gt;&lt;br/&gt;            &amp;lt;list&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;etmMethodCallInterceptor&amp;lt;/value&amp;gt;&lt;br/&gt;            &amp;lt;/list&amp;gt;&lt;br/&gt;        &amp;lt;/property&amp;gt;&lt;br/&gt;        &amp;lt;!-- add the beans that you wish to monitor to the list bellow --&amp;gt;&lt;br/&gt;        &amp;lt;property name=&amp;quot;beanNames&amp;quot;&amp;gt;&lt;br/&gt;            &amp;lt;list&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;usersrepository&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;recipientrewritetable&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;domainlist&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;mailrepositorystore&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;!--&lt;br/&gt;            The folowing beans require CGLIB2 to be on the classpath --&amp;gt;&lt;br/&gt;                &amp;lt;!--&lt;br/&gt;            &amp;lt;value&amp;gt;mailqueuefactory&amp;lt;/value&amp;gt;&lt;br/&gt;            &amp;lt;value&amp;gt;blobTransferPolicy&amp;lt;/value&amp;gt;&lt;br/&gt;            &amp;lt;value&amp;gt;jmsConnectionFactory&amp;lt;/value&amp;gt;&lt;br/&gt;            --&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;jmsTransactionManager&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;mailprocessor&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;mailetcontext&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;mailspooler&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;mailetloader&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;matcherloader&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;filesystem&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;dnsservice&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;fetchmail&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;smtpserver&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;pop3server&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;lmtpserver&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;imapserver&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;imapDecoder&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;imapEncoder&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;locker&amp;lt;/value&amp;gt;&lt;br/&gt;                &amp;lt;value&amp;gt;datasource&amp;lt;/value&amp;gt;&lt;br/&gt;            &amp;lt;/list&amp;gt;&lt;br/&gt;        &amp;lt;/property&amp;gt;&lt;br/&gt;    &amp;lt;/bean&amp;gt;&lt;br/&gt;
&lt;/pre&gt;
&lt;/code&gt;

Spring will do the rest (we import the jetm-monitoring.conf in spring-server.xml to bring it in context).

&lt;h2&gt;Final notes&lt;/h2&gt;

You can do much more than what I&#39;ve showed. You can export the metrics JETM collects via JMX and console, not just HTTP console. Please read the online docs for more details. &lt;br/&gt;
You can get the source code as example by checking out &lt;a href=&quot;http://svn.apache.org/repos/asf/james/app/trunk/&quot;&gt;James App&lt;/a&gt; . 

After discussing this on James mailing list a number of other promising monitoring libraries turned up:
&lt;a href=&quot;http://metrics.codahale.com/&quot;&gt;metrics&lt;/a&gt; from Codehale and &lt;a href=&quot;http://techblog.netflix.com/2012/02/announcing-servo.html&quot;&gt;Servo&lt;/a&gt; from Netflix. 

They both deserve a look.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/7976980112101492322/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2012/05/jetm-performance-monitoring-for-apache.html#comment-form' title='1 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/7976980112101492322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/7976980112101492322'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2012/05/jetm-performance-monitoring-for-apache.html' title='JETM performance monitoring for Apache James'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM674o3Y_7TWTnWQrOAf5QJCkF9JeHFXnYJayPdQ02rKo_wDaz-zd7nGe23sbjU8VI96L1VQ4E81fCSqsb1s0D0tAeW-goN_AIUESIDL1JsWwagCYsY_pUCN-LqiKPQl1yJCyQkMg7Okx-/s72-c/james-jetm.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-4655605580891507450</id><published>2012-03-04T19:50:00.001+02:00</published><updated>2012-03-04T19:57:57.910+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Trying out (pending) James 3.0-beta4 HBase mail store - take 1</title><content type='html'>Today I decided to try the newest (pending) release of James : 3.0-beta4. &lt;br /&gt;
I have access to a VM cluster of machines running HBase and I wanted to see how things work, maybe do a small stress test. &lt;br /&gt;
&lt;br /&gt;
Downloaded the binary release from the staging repo, unpacked and began configuring the James to enable the hbase mailstore implementation. &lt;br /&gt;
&lt;br /&gt;
Changed a line in mailbox.conf to enable hbase mailstore provider, changed &lt;blockquote&gt;import resource=&quot;classpath:META-INF/org/apache/james/spring-mailbox.xml&quot; &lt;/blockquote&gt;from  spring-server.xml to &lt;blockquote&gt;import resource=&quot;classpath:META-INF/org/apache/james/spring-mailbox-hbase.xml&quot; &lt;/blockquote&gt;and uncommented the mailbox declaration from spring-mailbox-hbase.xml to make the Hbase mail store implementation available to the spring context. After this I copied hbase-site.xml (and hdfs-site.xml) inside the James conf directory. &lt;br /&gt;
&lt;br /&gt;
And with that last step James is configured to send emails to the Hbase cluster. All things done, I started James with bin/run and then.... Exception. &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;| james.mailprocessor | Unable to init mailet LocalDelivery: org.apache.mailet.MailetException: Could not load mailet (LocalDelivery);&lt;br /&gt;
nested exception is:&lt;br /&gt;
org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;org.apache.james.transport.mailets.LocalDelivery&#39;: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;hbase-mailboxmanager&#39; defined in class path resource [META-INF/org/apache/james/spring-mailbox-hbase.xml]: Cannot resolve reference to bean &#39;hbase-sessionMapperFactory&#39; while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#39;hbase-sessionMapperFactory&#39; defined in class path resource [META-INF/org/apache/james/spring-mailbox-hbase.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.james.mailbox.hbase.HBaseMailboxSessionMapperFactory]: Constructor threw exception; nested exception is java.lang.RuntimeException: java.lang.IllegalArgumentException: Not a host:port pair: �%32649-- removed hostnames-- net,60000,1329515254741&lt;br /&gt;
.....&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Searched the cause of exception and found out that it&#39;s because of a version mismatch. Unfortunately the cluster is running hbase 0.92 and the client is running 0.90. The client serialization is incompatible with the one used by the server.&lt;br /&gt;
&lt;br /&gt;
Aside for the fact that the exception was fatal there is an upside to this: James is trying to connect to the the cluster.  &lt;br /&gt;
&lt;br /&gt;
Just found out that HBase 0.92 is on Maven Central, but without tests so this will make upgrading impossible because of the unit tests which require it. &lt;br /&gt;
&lt;br /&gt;
The tests jar will be available in 0.92.1 (as stated on hbase-dev). If that tekes too long I will build and test it with a private release of Hbase 0.92. &lt;br /&gt;
&lt;br /&gt;
Hope things move a bit faster with 0.92.1 with respect to artifacts being available on Maven Central.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/4655605580891507450/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2012/03/trying-out-pending-james-30-beta4-hbase.html#comment-form' title='1 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/4655605580891507450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/4655605580891507450'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2012/03/trying-out-pending-james-30-beta4-hbase.html' title='Trying out (pending) James 3.0-beta4 HBase mail store - take 1'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-7011081760358952611</id><published>2012-02-08T23:08:00.000+02:00</published><updated>2012-02-08T23:08:22.947+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="mime4j"/><category scheme="http://www.blogger.com/atom/ns#" term="nio"/><title type='text'>NIO Iterator over messages in mbox file</title><content type='html'>I&#39;ve started working on a small project called &lt;a href=&quot;https://github.com/ieugen/mbox-iterator&quot;&gt;mbox-iterator&lt;/a&gt; that I wish to integrate with &lt;a href=&quot;http://james.apache.org/mime4j/index.html&quot;&gt;mime4j&lt;/a&gt; later, when it&#39;s more usable. &lt;br /&gt;
&lt;br /&gt;
The idea is to provide an Iterator over all the messages in a mbox file and provide access to the raw data. You can then use mime4j to parse the message and do whatever. It&#39;s very good for use cases when you don&#39;t need the data to be processed and would like to do your own processing or just need access to the raw data. &lt;br /&gt;
&lt;br /&gt;
The project uses java NIO Memory Mapped files to map the file into memory. This will use the OS to manage the memory and file loading for you you get a ByteBuffer that you can use to accces the date. We are not using this ByteBuffer directly, because it&#39;s bytes and we need character sets so we need to decode the bytes. We get use a Charset to get a CharsetDecoder for the encoding we need. CharsetDecoder returns a CharBuffer instance and because it implements CharSequence we can use a regex to determine boundaries between messages. &lt;br /&gt;
&lt;br /&gt;
I was hoping that CharBuffer would share the memory with the MappedByteBuffer that we get initially but it seems that this is not the case. We have some memory copying here because the CharBuffer we get is an instance of java.nio.HeapCharBuffer. I was thinking we could have zero Java heap memory and use just the O.S. pages for holding the mbox data but as it turns out, the process of translating bytes to chars needs some memory to keep the chars. &lt;br /&gt;
&lt;br /&gt;
It would have been nice to use asCharBuffer() and provide zero-copy access, but darn, maybe with a future Java version.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s return to our cattle: &lt;br /&gt;
&lt;br /&gt;
When we find such a boundary, we return a slice()ed CharBuffer to that message. We also set position and limit so that we get just the message. This has the advantage of using the same memory as the CharBuffer ww do matching on and avoids unnecessary memory copy operations. &lt;br /&gt;
&lt;br /&gt;
I have tested it on a small mbox (135kb) and performs ok. I&#39;m planning more tests with a 2gb mbox. Using NIO memory mapped files we can map very large files and use the OS cache and buffer memory so we can avoid GC activity and unnecessary memory copy operations. &lt;br /&gt;
&lt;br /&gt;
The following areas need improvements before the project is usable:&lt;br /&gt;
&lt;br /&gt;
- testing for different types of mbox files &lt;br /&gt;
- better regex to match different mbox formats (mboxcl, mboxrd and the likes)&lt;br /&gt;
- better regex for matching From_ lines (now we miss some From_ lines that have MAILER_DAEMON instead of email address)&lt;br /&gt;
- support for mboxes larger than 2GB - use more ByteBuffers to map portions of the files, watch out for mails that spill over boundaries. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&#39;m pretty new to NIO so if you have suggestions of how to do this better I&#39;m open to suggestions and pull requests. &lt;br /&gt;
&lt;br /&gt;
You will fins a simple example that splits one mbox into individual messages in the project sources. &lt;br /&gt;
&lt;br /&gt;
Happy hacking. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
References and links:&lt;br /&gt;
&lt;br /&gt;
[1] http://www.kdgregory.com/index.php?page=java.byteBuffer&lt;br /&gt;
[2] http://en.wikipedia.org/wiki/Mbox&lt;br /&gt;
[3] http://qmail.org/man/man5/mbox.html&lt;br /&gt;
[4] http://james.apache.org/mime4j/index.html&lt;br /&gt;
[5] https://github.com/ieugen/mbox-iterator</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/7011081760358952611/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2012/02/nio-iterator-over-messages-in-mbox-file.html#comment-form' title='4 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/7011081760358952611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/7011081760358952611'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2012/02/nio-iterator-over-messages-in-mbox-file.html' title='NIO Iterator over messages in mbox file'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-8811594409540009429</id><published>2011-09-27T17:43:00.000+03:00</published><updated>2011-09-27T17:43:14.431+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="mahout"/><title type='text'>New job</title><content type='html'>A few days ago I joined Big Data Solutions Team at 1and1. They have nice offices in Bucharest, but most of all I like the team and the projects. &lt;br /&gt;
&lt;br /&gt;
Besides the fact that I will continue to work with HBase and Hadoop I will also expand in using Lucene, Solr and Mahout. All Apache technologies :). &lt;br /&gt;
&lt;br /&gt;
I plan to use the experience I gain to integrate more functionality in Apache James, first on my list is mail search over HBase.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/8811594409540009429/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/09/new-job.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8811594409540009429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8811594409540009429'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/09/new-job.html' title='New job'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-5500970464205234643</id><published>2011-09-04T14:36:00.000+03:00</published><updated>2011-09-04T14:36:24.001+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><title type='text'>James HBase mailbox is in: Give it a spin</title><content type='html'>Today I managed to finish integrating the HBase mailbox implemenation for James. I committed all project code based that I developed during Google Summer of code, including the integration tests. &lt;br /&gt;
&lt;br /&gt;
I also added a spring context definition so now it&#39;s very easy to use. Just fire up James and supply it (put on the class path) with the xml configuration file for your HBase cluster. Users and domains can also be stored in HBase or in another supported repository (like a database). &lt;br /&gt;
&lt;br /&gt;
This flexibility is achieved because the way James is built. All the important parts are spring components that can be interchanged easily. Also, if you did not already know:  James is moving towards OSGI. &lt;br /&gt;
&lt;br /&gt;
So what are you waiting for, go try out the new James goodies on your cluster and send us some feed-back if you have time. &lt;br /&gt;
&lt;br /&gt;
Just remember you have to get the latest trunk version for this and do some compilation. &lt;a href=&quot;http://james.apache.org/server/3/dev-build.html&quot;&gt;Here&lt;/a&gt; you can get detailed instructions on how to do that. &lt;br /&gt;
&lt;br /&gt;
If you are not in a hurry you can wait until we make a new release or check the nightly builds. &lt;br /&gt;
&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/5500970464205234643/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/09/james-hbase-mailbox-is-in-give-it-spin.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/5500970464205234643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/5500970464205234643'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/09/james-hbase-mailbox-is-in-give-it-spin.html' title='James HBase mailbox is in: Give it a spin'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-411061260636971885</id><published>2011-09-04T14:09:00.000+03:00</published><updated>2011-09-04T14:09:03.400+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><category scheme="http://www.blogger.com/atom/ns#" term="zetar"/><title type='text'>Zetar, a free spell-checker dictionary builder, is reborn</title><content type='html'>This is a new old project of mine. It&#39;s new because I just started to code it and it&#39;s old because I had the idea for a very long time (I think I got this idea back in 2006). &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The problem:&lt;/b&gt; &lt;br /&gt;
I believe that there is no good free spell checking dictionary available for Romanian, so I decided to build one.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The solution:&lt;/b&gt;&lt;br /&gt;
Build a dictionary from published text, based on the frequency of words. The idea is that a bad form will be less common than a good form of the word.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What is available:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I have committed a small spring based project that is able to break text into words and put the words into a database. The schema is very simple, I am counting he number of times each word appears. I plan to further develop this and provide a web interface to access the database. For now, all it does is to scan a XML file (I tested it with the Romanian XML dump of Wikipedia). &lt;br /&gt;
&lt;br /&gt;
It&#39;s not very efficient, but it was done in a few hours. &lt;br /&gt;
The project uses Spring, Hibernate and Firebird SQL, But you can easily switch another DB if you like. &lt;br /&gt;
&lt;br /&gt;
You can get the sources from my repo: &lt;a href=&quot;https://bitbucket.org/ieugen/zetar/&quot;&gt;https://bitbucket.org/ieugen/zetar/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/411061260636971885/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/09/zetar-free-spell-checker-dictionary.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/411061260636971885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/411061260636971885'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/09/zetar-free-spell-checker-dictionary.html' title='Zetar, a free spell-checker dictionary builder, is reborn'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-8480780874162414837</id><published>2011-09-03T21:19:00.000+03:00</published><updated>2011-09-03T21:19:05.306+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="floss"/><title type='text'>Switched Debian to systemd</title><content type='html'>Well it happens that I like to live on the edge of technology so from time to time I try something new to satisfy my needs. The last time I switched to Gnome 3, which on Debian means that I have to pull some things from experimental branch. &lt;br /&gt;
&lt;br /&gt;
That&#39;s over now and I was thinking what to do next. I was a little unhappy of how my system booted and because I had heard a lot of things about &lt;a href=&quot;http://en.wikipedia.org/wiki/Systemd&quot;&gt;systemd&lt;/a&gt;, and all of them good, I decided to try it. &lt;br /&gt;
&lt;br /&gt;
Installation was easy and fast. I followed the instructions available on the Debian &lt;a href=&quot;http://wiki.debian.org/systemd#systemd_-_system_and_service_manager&quot;&gt;wiki page&lt;/a&gt; and used aptitude for installation. I am following Debian testing and I also have the unstable branch in my sources.list. &lt;br /&gt;
&lt;br /&gt;
I had just one problem the first time I booted. Gnome 3 (shell) did not load correctly and for a short period of time I had a Gnome2 with UI with a Gnome3 theme. That lasted until I logged out and in again. &lt;br /&gt;
&lt;br /&gt;
Now everything seems to run smooth. My notebook seems to load a little bit faster. I did not run tests to see if it goes up fast, but it definitely goes down fast. &lt;br /&gt;
&lt;br /&gt;
For official things about Systemd, please check the &lt;a href=&quot;http://freedesktop.org/wiki/Software/systemd/&quot;&gt;freedesktop project website&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
 </content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/8480780874162414837/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/09/switched-debian-to-systemd.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8480780874162414837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8480780874162414837'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/09/switched-debian-to-systemd.html' title='Switched Debian to systemd'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-2941430783556530236</id><published>2011-09-01T12:52:00.000+03:00</published><updated>2011-09-01T12:52:07.047+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="events"/><category scheme="http://www.blogger.com/atom/ns#" term="floss"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><title type='text'>Romanian FLOSS summer school in Arad Castle</title><content type='html'>These days I&#39;m participating at an event called &quot;Informatics at the Castle&quot; &lt;a href=&quot;http://www.osor.eu/events/informatics-at-the-castle-free-and-open-source-summer-school/?searchterm=arad&quot;&gt;[1]&lt;/a&gt; &lt;a href=&quot;http://proinfo.uvvg.ro/&quot;&gt;[2]&lt;/a&gt;. It&#39;s the third edition and until now I had a wonderful time. I had a talk about the advantages of Free Software and my work at GSoC. I also talked about Apache Software Foundation, Debian, and Ceata.org (a young Romanian FLOSS community) &lt;a href=&quot;http://ceata.org&quot;&gt;[3]&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
The presentation is available from here &lt;a href=&quot;http://voinici.ceata.org/~ieugen/files/castiga%20cu%20software%20liber.pdf&quot;&gt;[4]&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The participants are from very diverse domains: University teachers (from four Romanian and Moldavian universities), small/medium business owners, students, government agencies employees, LUG members, etc.&lt;br /&gt;
&lt;br /&gt;
That&#39;s all for now. &lt;br /&gt;
&lt;br /&gt;
[1] http://www.osor.eu/events/informatics-at-the-castle-free-and-open-source-summer-school/?searchterm=arad&lt;br /&gt;
[2] http://proinfo.uvvg.ro/ (in Romanian)&lt;br /&gt;
[3] http://ceata.org&lt;br /&gt;
[4] http://voinici.ceata.org/~ieugen/files/castiga%20cu%20software%20liber.pdf</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/2941430783556530236/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/09/romanian-floss-summer-school-in-arad.html#comment-form' title='2 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/2941430783556530236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/2941430783556530236'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/09/romanian-floss-summer-school-in-arad.html' title='Romanian FLOSS summer school in Arad Castle'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-7000285353879145381</id><published>2011-08-31T15:38:00.000+03:00</published><updated>2011-08-31T15:38:59.287+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>Apache James GSoC round-up, HBase mailbox implementation</title><content type='html'>It&#39;s been a long time since my last post and a lot has happened in the mean time. &lt;br /&gt;
I am not a constant writer so I will try to catch up.  &lt;br /&gt;
&lt;br /&gt;
A short list of the most important stuff:&lt;br /&gt;
- Google Summer of Code is over more or less, and it ended well&lt;br /&gt;
- the HBase mailbox implementation is ready, passes all tests, soon to be integrated in the main project&lt;br /&gt;
- I was recently elected as a committer for Apache James&lt;br /&gt;
&lt;br /&gt;
So, the great news: James has a mailbox implementation over HBase, and fully functional. To complete the picture, Eric also implemented the user and domain persistence over HBase. You can read more about it here [0]. This makes James fully distributed (when persisting data). &lt;br /&gt;
&lt;br /&gt;
You can find all the code for James HBase mailbox implementation at&lt;a href=&quot;http://code.google.com/a/apache-extras.org/p/mailbox-hdfs/&quot;&gt;[1]&lt;/a&gt;.&lt;br /&gt;
I expect to commit the code in the James official repo in the next week, and get update it to follow trunk. &lt;br /&gt;
&lt;br /&gt;
If you are interested, you can check out the mailbox integration tests here &lt;a href=&quot;http://code.google.com/a/apache-extras.org/p/hbase-mailbox-integration-test/&quot;&gt;[2]&lt;/a&gt;. They too will be commited soon. &lt;br /&gt;
&lt;br /&gt;
For my future work I plan to continue working with Jams and improve the implementation (integrate search, and other functionality). So stay tuned, and don&#39;t hesitate to ask questions or show interest. &lt;br /&gt;
&lt;br /&gt;
I&#39;m also planning to package James for Debian. Devendra Dave is interested in doing some work in this area. This will help James get some market and better testing and also Debian to have more up-to-date software. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[0] https://issues.apache.org/jira/browse/JAMES-1273&lt;br /&gt;
[1] http://code.google.com/a/apache-extras.org/p/mailbox-hdfs/&lt;br /&gt;
[2] http://code.google.com/a/apache-extras.org/p/hbase-mailbox-integration-test/</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/7000285353879145381/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/08/apache-james-gsoc-round-up-hbase.html#comment-form' title='1 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/7000285353879145381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/7000285353879145381'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/08/apache-james-gsoc-round-up-hbase.html' title='Apache James GSoC round-up, HBase mailbox implementation'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-4894233206857514776</id><published>2011-08-01T23:11:00.000+03:00</published><updated>2011-08-16T18:20:40.133+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="flosscamp"/><category scheme="http://www.blogger.com/atom/ns#" term="GSL"/><title type='text'>Going to FlossCamp</title><content type='html'>It&#39;s official: I&#39;m going to &lt;a href=&quot;http://camp.softwareliber.ro/2011/&quot;&gt;FlossCamp &lt;/a&gt;this year also. It&#39;s the third year in a row. &lt;br /&gt;
&lt;br /&gt;
For those of you who have not heard about &lt;a href=&quot;http://camp.softwareliber.ro/2011/&quot;&gt;FlossCamp&lt;/a&gt;. It&#39;s the ultimate geek-in-nature getaway and the largest of this kind in Romania. &lt;br /&gt;
&lt;br /&gt;
This year is the fourth edition and will be held at Moeciu, near Brasov in the Carpathians, from 5th to 7th august. There are some &lt;a href=&quot;http://camp.softwareliber.ro/2011/poze&quot;&gt;pictures&lt;/a&gt; of the camping site. &lt;br /&gt;
&lt;br /&gt;
To get an ideea of what to expect you can take a look at the &lt;a href=&quot;http://camp.softwareliber.ro/2010/poze/index.php&quot;&gt;pictures from the previous years&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I had a lot of fun every time, and I know this year is going to be the same. &lt;br /&gt;
&lt;br /&gt;
See you at the camp site it&#39;s free (software,) in nature.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/4894233206857514776/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/08/goind-to-flosscamp.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/4894233206857514776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/4894233206857514776'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/08/goind-to-flosscamp.html' title='Going to FlossCamp'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-8502209909859417486</id><published>2011-07-03T01:08:00.000+03:00</published><updated>2011-07-03T01:08:26.561+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><title type='text'>Bumped mailbox API version to 0.3</title><content type='html'>This is another status update on the James HBase mailbox implementation. I am now following apache-james-mailbox-0.3 release. &lt;br /&gt;
At first I tried following trunk, but got overwhelmed by the speed of changes in the code. That led to a discussion on the mailing list that concluded with the me following release 0.2. &lt;br /&gt;
&lt;br /&gt;
Now that the mailbox API is stable in 0.3 I am going to follow this branch. Some of the improvements worth mentioning are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;simpler API for managing messages&lt;/li&gt;
&lt;li&gt;lucene index for searching&lt;/li&gt;
&lt;li&gt;support for quotas&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
The full list is available on &lt;a href=&quot;https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311221&amp;version=12316446&quot;&gt;jira&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The other thing I was working on, the link to HBase, is not done yet. I am getting an exception in HBaseStoreTest.java:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
java.lang.NoClassDefFoundError: org/apache/hadoop/security/UnixUserGroupInformation&lt;br /&gt;
 at org.apache.hadoop.hbase.HBaseTestingUtility.startMiniDFSCluster(HBaseTestingUtility.java:223)&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
I think I may have a HBase library that is incompatible with the Hadoop version. I will check this soon and post what I find. &lt;br /&gt;
&lt;br /&gt;
Any suggestions are appreciated.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/8502209909859417486/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/07/bumped-mailbox-api-version-to-03.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8502209909859417486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8502209909859417486'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/07/bumped-mailbox-api-version-to-03.html' title='Bumped mailbox API version to 0.3'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-8136431163758511038</id><published>2011-06-27T01:01:00.000+03:00</published><updated>2011-06-27T01:05:24.710+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="XML"/><title type='text'>James HBase mailbox status update: JAXB HBase schema loading</title><content type='html'>It&#39;s been a long time since my last post. Time to do a status update. &lt;br /&gt;
&lt;br /&gt;
I modeled the HBase implementation after the JPA mailbox implementation. I followed a top-down approach and created most of the classes as stubs that I have to fill. I also created the stub test classes. &lt;br /&gt;
&lt;br /&gt;
Things are not very useful yet because there is no connection to a HBase cluster to test the (not here yet) good stuff. So this is what I&#39;m concentrating on. &lt;br /&gt;
&lt;br /&gt;
We don&#39;t have a schema for storing messages in HBase, and I believe it is going to change a few times before we manage to get it right. I figured we need a flexible system to keep up with the changes so I looked for a way to do this. I found an article from Lars George explaining &lt;a href=&quot;http://www.larsgeorge.com/2009/01/changing-hbase-tables-in-code.html&quot;&gt;how to change HBase tables from code&lt;/a&gt; and it inspired me to write an implementation for James. &lt;br /&gt;
&lt;br /&gt;
I wrote one using &lt;a href=&quot;http://jaxb.java.net/&quot;&gt;Java for XML binding API&lt;/a&gt;, JAXB for short. &lt;br /&gt;
My implementation has three main classes that map to a hierarchy in XML: ColumnFamily, Table and Store. The classes are stored in &lt;code&gt;&lt;a href=&quot;http://code.google.com/a/apache-extras.org/p/mailbox-hdfs/source/browse/#hg%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fjames%2Fmailbox%2Fhbase%2Fschema&quot;&gt;org.apache.james.mailbox.hbase.schema&lt;/a&gt;&lt;/code&gt; package.&lt;br /&gt;
A store represents a James storage. A store spans multiple tables (one table for storing messages, another for subscriptions, etc.), each table can contain multiple column families to store different types of information. &lt;br /&gt;
&lt;br /&gt;
While working on this I decided to try Test Driven Development. I found it to be very useful way of testing your design. It really kept me going because after each test passed successfully I got a good feeling. Small successes can mean a lot on the long run. The main benefit of this development method, besides the fact that you can test your code as you go, is that the test you write today can save you (a lot of grey matter) in the future. This is because (good) software that makes it into production is never finished. You always find some bugs to fix, features to add or remove, etc. Your code will change, but it&#39;s not always for the best. Some times things break and good tests make the difference. &lt;br /&gt;
&lt;br /&gt;
So now I have code to load a mailbox schema written in XML, I have some test written. The next step is to create a schema and see how these things fit together. This was discussed in part on the mailing list and with my mentor Eric and the discussion summary is on a &lt;a href=&quot;http://wiki.apache.org/james/GSoC2011HBaseMailbox&quot;&gt;wiki&lt;/a&gt; page. &lt;br /&gt;
&lt;br /&gt;
For the next two weeks I plan to be able to load and create a mailbox schema into HBase and begin testing with different ways of storing messages. I&#39;m thinking of buying &lt;a target=&quot;_blank&quot;  href=&quot;http://www.amazon.com/HBase-Definitive-Guide-Lars-George/dp/1449396100?ie=UTF8&amp;tag=softwareforhu-20&amp;link_code=btl&amp;camp=213689&amp;creative=392969&quot;&gt;„HBase the definitive guide” &lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=softwareforhu-20&amp;l=btl&amp;camp=213689&amp;creative=392969&amp;o=1&amp;a=1449396100&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important; padding: 0px !important&quot; /&gt; from Amazon. I just hope a e-book version will be also available.  &lt;br /&gt;
&lt;br /&gt;
If you have any comments you can post them on the blog if they are related to the article or on the &lt;a href=&quot;server-dev-subscribe@james.apache.org&quot;&gt;James mailing list&lt;/a&gt; if they are suggestions for James.&lt;br /&gt;
&lt;br /&gt;
See you next time,</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/8136431163758511038/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/06/james-hbase-mailbox-status-update-jaxb.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8136431163758511038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8136431163758511038'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/06/james-hbase-mailbox-status-update-jaxb.html' title='James HBase mailbox status update: JAXB HBase schema loading'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-6551359614217985771</id><published>2011-06-12T17:31:00.000+03:00</published><updated>2011-06-12T17:33:37.719+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><title type='text'>First commit to James Mailbox over HBase</title><content type='html'>Today I made my first commit to the HBase mailbox implementation for James, the GSoC project I&#39;m working on. It&#39;s not much, I just added a simple implementation for MailboxManager and Mailbox interfaces but it feels good. It&#39;s what I was preparing for the past couple of weeks. &lt;br /&gt;
&lt;br /&gt;
The above interfaces are used to access mailboxes from the mailbox store. The mailbox is modeled as described in &lt;a href=&quot;http://tools.ietf.org/html/rfc5321&quot;&gt;SMTP RFC &lt;/a&gt; and &lt;a href=&quot;http://tools.ietf.org/html/rfc5322&quot;&gt;Internet Message Format RFC&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
In short, a &lt;b&gt;&lt;i&gt;mailbox&lt;/i&gt;&lt;/b&gt; can be used to refer either: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;a character string that represents an email address&lt;/li&gt;
&lt;li&gt;a store; a place used to deposit a user&#39;s emails&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Not all emails hava an associated store, for example email aliases do not.&lt;br /&gt;
&lt;br /&gt;
A more detailed explanation can be found on &lt;a href=&quot;http://en.wikipedia.org/wiki/Email_box&quot;&gt;wikipedia&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For best results check out the latest RFC documents.&lt;br /&gt;
&lt;br /&gt;
The project is hosted at &lt;a href=&quot;http://code.google.com/a/apache-extras.org/p/mailbox-hdfs/&quot;&gt;http://code.google.com/a/apache-extras.org/p/mailbox-hdfs/&lt;/a&gt;. The sources are managed using &lt;a href=&quot;http://mercurial.selenic.com/&quot;&gt;mercurial&lt;/a&gt; and you can build them using &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Apache Maven&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;References:&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://tools.ietf.org/html/rfc5321&quot;&gt;[1] RFC 5321, Simple Mail Transfer Protocol, J. Klensin, The Internet Society (October 2008), Section 2.3.11 (Mailbox and Address)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://tools.ietf.org/html/rfc5322&quot;&gt;[2] RFC 5322, Internet Message Format, P. Resnick (Ed.), The Internet Society (October 2008), Section 3.4 (Address Specification)&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/6551359614217985771/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/06/first-commit-to-mailbox-base.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/6551359614217985771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/6551359614217985771'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/06/first-commit-to-mailbox-base.html' title='First commit to James Mailbox over HBase'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-820992347020575639</id><published>2011-06-12T14:48:00.000+03:00</published><updated>2011-06-12T14:48:48.549+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="debian"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><title type='text'>HBase install on Debian</title><content type='html'>Today I installed HBase and got the &lt;a href=&quot;http://hbase.apache.org/book.html#shell_exercises&quot;&gt;basic exercise&lt;/a&gt;. I got the latest version, 0.90.3, directly from &lt;a href=&quot;http://hbase.apache.org/&quot;&gt;HBase home&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I configured it following the &lt;a href=&quot;http://hbase.apache.org/book/quickstart.html&quot;&gt;Quick start instructions&lt;/a&gt;. Basically I instructed HBase to use a directory from a filesystem, instead of a using HDFS cluster. This setup is very good for doing simple examples and getting stuff ready for the real thing. &lt;br /&gt;
&lt;br /&gt;
Installation was not without problems. HBase failed because it could not bind to any network interface. The log file showed the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;java.lang.RuntimeException: Failed construction of RegionServer: class org.apache.hadoop.hbase.master.HMasterCommandLine$LocalHMasterCannot assign requested address&lt;br /&gt;
        at org.apache.hadoop.hbase.util.JVMClusterUtil.createMasterThread(JVMClusterUtil.java:155)&lt;br /&gt;
        at org.apache.hadoop.hbase.LocalHBaseCluster.addMaster(LocalHBaseCluster.java:197)&lt;br /&gt;
        at org.apache.hadoop.hbase.LocalHBaseCluster.&lt;init&gt;(LocalHBaseCluster.java:147)&lt;br /&gt;
        at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:137)&lt;br /&gt;
        at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:102)&lt;br /&gt;
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)&lt;br /&gt;
        at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:76)&lt;br /&gt;
        at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:1074)&lt;br /&gt;
Caused by: java.net.BindException: Problem binding to /192.168.0.254:0 : Cannot assign requested address&lt;br /&gt;
        at org.apache.hadoop.hbase.ipc.HBaseServer.bind(HBaseServer.java:203)&lt;br /&gt;
        at org.apache.hadoop.hbase.ipc.HBaseServer$Listener.&lt;init&gt;(HBaseServer.java:270)&lt;br /&gt;
        at org.apache.hadoop.hbase.ipc.HBaseServer.&lt;init&gt;(HBaseServer.java:1168)&lt;br /&gt;
        at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.&lt;init&gt;(HBaseRPC.java:544)&lt;br /&gt;
        at org.apache.hadoop.hbase.ipc.HBaseRPC.getServer(HBaseRPC.java:514)&lt;br /&gt;
        at org.apache.hadoop.hbase.master.HMaster.&lt;init&gt;(HMaster.java:196)&lt;br /&gt;
        at org.apache.hadoop.hbase.master.HMasterCommandLine$LocalHMaster.&lt;init&gt;(HMasterCommandLine.java:188)&lt;br /&gt;
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)&lt;br /&gt;
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)&lt;br /&gt;
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)&lt;br /&gt;
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)&lt;br /&gt;
        at org.apache.hadoop.hbase.util.JVMClusterUtil.createMasterThread(JVMClusterUtil.java:152)&lt;br /&gt;
        ... 7 more&lt;br /&gt;
Caused by: java.net.BindException: Cannot assign requested address&lt;br /&gt;
        at sun.nio.ch.Net.bind(Native Method)&lt;br /&gt;
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126)&lt;br /&gt;
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)&lt;br /&gt;
        at org.apache.hadoop.hbase.ipc.HBaseServer.bind(HBaseServer.java:201)&lt;br /&gt;
        ... 18 more&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
I first believed the issue was related to IPV6, because I had related problems with java applications accessing the internet on Debian. In that case you can pass the &lt;blockquote&gt;java.net.preferIPv6Addresses=false&lt;/blockquote&gt;parameter. You can read an explanation &lt;a href=&quot;http://openradar.appspot.com/7100919&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
After carefully analyzing the log file I noticed that HBase insisted on connecting to a specific IP address. And it wasn&#39;t IPv6, it was IPv4 and it had a 0 port ( see the above lising for /192.168.0.254:0). &lt;br /&gt;
&lt;br /&gt;
The documentation states that HBase does a reverse DNS lookup to find it&#39;s IP address. &lt;br /&gt;
I checked &lt;i&gt;/etc/hosts&lt;/i&gt; file and found the culprit. I had a line that linked my machine hostname with the above mentioned IP address. &lt;br /&gt;
&lt;br /&gt;
Changed the address to loopback (127.0.0.1) and that was it: I got HBase to work. &lt;br /&gt;
&lt;br /&gt;
I think the line was added there during the system installation, which is kind of strange because it shouldn&#39;t have been there. My Debian installation was clean. I installed Squeeze and then switched to testing.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/820992347020575639/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/06/hbase-install-on-debian.html#comment-form' title='2 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/820992347020575639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/820992347020575639'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/06/hbase-install-on-debian.html' title='HBase install on Debian'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-1673608216182766560</id><published>2011-06-10T00:53:00.000+03:00</published><updated>2011-06-10T00:53:28.823+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="RLUG"/><title type='text'>RLUG meets James</title><content type='html'>As I mentioned in a previous post, I did a presentation on James at the monthly RLUG meeting. &lt;br /&gt;
&lt;br /&gt;
It went good, the people seamed interested. My presentation was in Romanian, as the slides and they will be available soon on &lt;a href=&quot;http://prolinux.ro/&quot;&gt;ProLinux&lt;/a&gt; &lt;a href=&quot;http://www.slideshare.net/prolinux&quot;&gt;slideshare account&lt;/a&gt;. &lt;a href=&quot;http://nicubunu.ro/&quot;&gt;Nicu&lt;/a&gt;, a Fedora Ambassador and a friend filmed the event and he will upload the video presentations on &lt;a href=&quot;http://nicubunu.blip.tv/posts?view=archive&amp;nsfw=dc&quot;&gt;blip&lt;/a&gt; sometime next week. &lt;br /&gt;
&lt;br /&gt;
I was the first to present so the crowd (about 12 people) was fresh. I pointed out some general things about James because most of the audience where general open-source enthusiasts so I did not go into (that many :D) details. Well I tried. I emphasized the Mailet part and talked about HBase mail storage I am working on. &lt;br /&gt;
&lt;br /&gt;
There where a couple of sys-admins there that managed some mail servers. They pointed out that James seemed more like an enterprise solution, than a solution for someone with more basic needs.&lt;br /&gt;
&lt;br /&gt;
I really did not know how to respond to that. I tend to believe this is not true, but I hope to find out soon (get working experience in this field) and get back to them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All in all it went well. I left with the impression that I did not bore them. After the presentations we went, as usual, to further discuss the matter at a local „restaurant” (not actually, but I can&#39;t find the name for terasă in English).</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/1673608216182766560/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/06/rlug-meets-james.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/1673608216182766560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/1673608216182766560'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/06/rlug-meets-james.html' title='RLUG meets James'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-8271694147294349688</id><published>2011-06-08T22:34:00.000+03:00</published><updated>2011-06-08T23:43:02.520+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="RLUG"/><title type='text'>Last exam for this year, full time to James</title><content type='html'>The summer exam session just ended so I will be dedicating my full time to James. The first thing I&#39;m going to do (after I celebrate!) is to write a presentation for the &lt;a href=&quot;http://lug.ro&quot;&gt;Romanian Linux User Group&lt;/a&gt; monthly presentation session. &lt;br /&gt;
&lt;br /&gt;
The &lt;a href=&quot;http://wiki.lug.ro/Intalniri&quot;&gt;RLUG meetings&lt;/a&gt; are a monthly event held by the Romanian Open Source Community in Bucharest. It&#39;s held regularly from November 2009 and the topics are on open source information technologies. &lt;br /&gt;
&lt;br /&gt;
This is the first time I will be keeping a presentation and I hope to get good feedback from the audience.I will be presenting &lt;a href=&quot;http://james.apache.org&quot;&gt;James&lt;/a&gt; -, which I think it&#39;s a new technology and I hope some of the people from the audience will experiment with it. &lt;br /&gt;
&lt;br /&gt;
Under RLUG, there is also a periodic workshop event called &lt;a href=&quot;http://wiki.lug.ro/Ateliere&quot;&gt;Atelierele RLUG&lt;/a&gt; (eng. RLUG Workshops). They are not as frequent as the meetings. I will prepare to keep James installation, usage and Mailet development workshop. I hope I will be able to pull this off in time for the next event, maybe do some benchmarks betwen James and Postfix or other mail agents.&lt;br /&gt;
&lt;br /&gt;
Stay tuned for updates.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/8271694147294349688/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/06/last-exam-for-this-year-full-time-to.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8271694147294349688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/8271694147294349688'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/06/last-exam-for-this-year-full-time-to.html' title='Last exam for this year, full time to James'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-6529939571360700748</id><published>2011-05-30T15:48:00.000+03:00</published><updated>2011-05-30T15:53:11.809+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apache"/><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="gsoc"/><category scheme="http://www.blogger.com/atom/ns#" term="hadoop"/><category scheme="http://www.blogger.com/atom/ns#" term="hbase"/><category scheme="http://www.blogger.com/atom/ns#" term="hdfs"/><category scheme="http://www.blogger.com/atom/ns#" term="james"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><title type='text'>My GSoC project for this year: Apache James mailbox over Hadoop</title><content type='html'>The guys at Google where kind enough to select my application for Google Summer of Code program and turn it into a project, which is kind of cool :B. &lt;br /&gt;
This is old news but I just started blogging and I am planning to make a habit. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The Project: Mailbox over &lt;a href=&quot;http://hadoop.apache.org/&quot;&gt;Hadoop&lt;/a&gt; &lt;a href=&quot;http://hadoop.apache.org/hdfs/&quot;&gt;HDFS&lt;/a&gt; for Apache James&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
My project is with the Apache Foundation. I will work on &lt;a href=&quot;http://james.apache.org&quot;&gt;Apache James - Java Apache Enterprise Mail Server - &lt;/a&gt;. By the end of this summer I will have to deliver mailbox storage over Hadoop HDFS. Storing email over a distributed file system such as HDFS This will enable James to handle many email accounts and many emails in a &lt;br /&gt;
&lt;br /&gt;
The details and project about the project is handled with &lt;a href=&quot;https://issues.apache.org/jira/browse/MAILBOX-44&quot;&gt;Jira&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The people&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
My mentor is Eric Charles. He&#39;s been around with the project for some time and knows his way around it. He helped me get up some inside knowledge. I also met other people on the list (Robert Burrell Donkin and Norman Maurer) and they also seem very passionate. &lt;br /&gt;
&lt;br /&gt;
I think things are going to go well.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;The status&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
It&#39;s been a week now since the project officially started. It&#39;s been quite busy. I had a lot of new things to learn. The video presentations about &lt;a href=&quot;http://vimeo.com/3579013&quot;&gt;Hadoop&lt;/a&gt;, &lt;a href=&quot;http://vimeo.com/3584536&quot;&gt;HDFS&lt;/a&gt; and &lt;a href=&quot;http://vimeo.com/14068552&quot;&gt;HBase&lt;/a&gt; from Cloudera on vimeo where very helpful. &lt;br /&gt;
&lt;br /&gt;
We discussed on the list and decided to implement the mailbox storage using HBase in order to avoid some performance issues related to the fact that HDFS does not support random file writes. It has only file append feature so once you create a file you can only append to it. This may seem weird for a file system, but you have to keep in mind that HDFS was designed to store huge amounts of data while providing high throughput access to this data. Having random reads and writes is not that easy to achieve if you want to keep the performance high. &lt;br /&gt;
&lt;br /&gt;
Hbase is a NoSQL database implementation. It avoids these issues by appending the changes to a log file in a way journal based file systems do. When the log file gets too large, the changes are committed to the files.&lt;br /&gt;
&lt;br /&gt;
There is a similar mailbox implementation based on Cassandra (another NoSQL store) implemented by IBM. You can find more about it &lt;a href=&quot;http://ewh.ieee.org/r6/scv/computer/nfic/2009/IBM-Jun-Rao.pdf&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/6529939571360700748/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2011/05/my-gsoc-project-for-this-year-apache.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/6529939571360700748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/6529939571360700748'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2011/05/my-gsoc-project-for-this-year-apache.html' title='My GSoC project for this year: Apache James mailbox over Hadoop'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-2478469057630578802</id><published>2009-10-20T12:57:00.001+03:00</published><updated>2009-10-20T12:57:31.826+03:00</updated><title type='text'>Inmatriculare bulgaria</title><content type='html'>Sunt trei modalități de a înmatricula un autoturism în Bulgaria:&lt;br /&gt;-pe numele unei persoane fizice cetățene bulgare,&lt;br /&gt;-pe numele unei persoane juridice bulgare,&lt;br /&gt;-pe numele unei persoane fizice rezidente în Bulgaria.&lt;br /&gt;&lt;br /&gt;BgConsult va pune la dispoziție următoarele variante de înmatriculare în Bulgaria:&lt;br /&gt;&lt;br /&gt;-Înmatriculare pe numele unui angajat al firmei noastre (roman) rezident în Bulgaria. Dovada proprietății o veți face baza contractului notarial de vânzare-cumpărare și veți circula pe baza procurii notariale în care este specificat că ne reprezentați în dreptul autoturismului în caz de accident, în fața politiei, la radiere, la înmatriculare, plata impozitului, etc.&lt;br /&gt;&lt;br /&gt;-Înmatriculare pe numele dumneavoastră pe baza rezidenței pe care noi  o  vom obține pentru dumneavoastră. Autoturismul va fi permanent în posesia dumneavoastră. Înmatricularea în Bulgaria se va face pe numele dvs. pe baza rezidenței anterior obținute. Cu firma noastră veți face un contract de prestări servicii, prin care noi ne obligăm să vă obținem în Bulgaria rezidența pe 5 ani (durata maximă posibilă, după care trebuie reînnoită) și să înmatriculam autoturismul pe numele dumneavoastră.&lt;br /&gt;&lt;br /&gt;-Înmatriculare pe firma noastră din Bulgaria. Dovada proprietății o veți face pe  baza contractului de vânzare-cumpărare (perfect valabil în instanță) și veți circula pe baza procurii notariale în care este specificat că ne reprezentați în dreptul autoturismului în caz de accident, în fața politiei, la radiere, la înmatriculare, plata impozitului, etc.&lt;br /&gt;&lt;br /&gt;Prețuri: &lt;br /&gt;-Înmatriculare pe numele unui angajat al firmei noastre (român) rezident în Bulgaria 600 euro (contract notarial de vânzare-cumpărare + procura notarială)&lt;br /&gt;- înmatriculare pe firma noastră din Bulgaria 700 euro (contract de vânzare cumpărare + procură notarială)&lt;br /&gt;- înmatriculare pe numele dumneavoastră prin obținerea rezidentei - 650 înmatricularea +300 euro obținerea rezidenței - total 950 euro (ulterioarele autoturisme înmatriculate pe rezidența anterior obținuta vor costa 650 euro)&lt;br /&gt;&lt;br /&gt;În oricare din variante este inclusa asigurarea pe un an, impozitul pe un an și toate cheltuielile aferente înmatriculării (și obținerii rezidenței). Prețurile afișate sunt prețurile totale, nicio cheltuială suplimentara nu va interveni.&lt;br /&gt;&lt;br /&gt;Proceduri:&lt;br /&gt;&lt;br /&gt;-Pentru  înmatricularea pe numele unui angajat al firmei noastre (roman) rezident în Bulgaria  în principiu durează o singura zi (dacă trimitem cu o zi înainte sa mergem în Bulgaria actele scanate la traducător) în cazul în care intervine ceva sau este aglomerație a doua zi va fi gata cu siguranța. Prezenta dumneavoastră în Bulgaria nu este obligatorie dar binevenita, tine doar de timpul dvs.&lt;br /&gt;-Pentru înmatricularea pe firmă noastră în principiu durează o singura zi (dacă trimitem cu o zi înainte sa mergem în Bulgaria actele scanate la traducător) în cazul în care intervine ceva sau este aglomerație a doua zi va fi gata cu siguranță. Prezența dumneavoastră în Bulgaria nu este obligatorie dar binevenita, tine doar de timpul dvs.&lt;br /&gt;-Pentru înmatricularea pe baza rezidenței va trebui sa procurați &quot;card european de asigurări de sănătate&quot; îl obțineți de la CNAS (Casa Naționala de Asigurări de Sănătate) sau certificat înlocuitor al cardului (se eliberează a doua zi). Vom merge în Bulgaria sa depunem actele pentru obținerea rezidenței și să traducem contractele de vânzare-cumpărare ale autoturismului, după două zile lucrătoare vom merge sa ridicam actele rezidenței și vom înmatricula autoturismul. Dacă intervine ceva sau este aglomerație a doua zi va fi gata cu siguranță. Pentru obținerea rezidenței prezența dvs. în Bulgaria este obligatorie.&lt;br /&gt;&lt;br /&gt;Cerințe:&lt;br /&gt;-autoturismele sa nu depășească 120 kw (160.92 cai putere)&lt;br /&gt;-sa fie aduse din UE.&lt;br /&gt;&lt;br /&gt;Dacă mai aveți alte întrebări/nelămuriri sau va hotărâți sa optați către una din variante așteptăm răspuns la acest thread sau telefonul dumneavoastră la 0722433194 / 0723712369.&lt;br /&gt;www.bgconsult.ro&lt;br /&gt;www.inmatricularibulgaria.ro&lt;br /&gt;www.rezidentabulgaria.ro&lt;br /&gt;www.firmebulgaria.ro</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/2478469057630578802/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2009/10/inmatriculare-bulgaria.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/2478469057630578802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/2478469057630578802'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2009/10/inmatriculare-bulgaria.html' title='Inmatriculare bulgaria'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-6940518814237590227</id><published>2009-07-17T22:01:00.000+03:00</published><updated>2009-07-17T22:16:09.540+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="html"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Cod HTML în blog</title><content type='html'>Am întâmpinat o problemă când am scris &lt;a href=&quot;http://vorbamutului.blogspot.com/2009/07/referinte-biliografice-in-word-2007-un.html&quot;&gt;[0]&lt;/a&gt;: codul XSL era interpretat (blogul este HTML) şi nu mai apărea. Mi-am dat seama şi am încercat să repar folosind construcţia &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span style=&quot;border: 1px solid #FF0000&quot;&gt;&amp;lt;&lt;/span&gt;![CDATA[ ]]&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt; , dar nu a mers (nu prea ştiu HTML), aşa că am căutat altă soluţie: să transform toate elementele pe care HTML-ul le interpretează în codurile echivalente. Am găsit articolul [1]  codurile şi cum trebuiesc scrise, dar cum sunt leneş de fel şi nu-mi place să muncesc am căutat o aplicaţie &lt;a href=&quot;http://xzfv.appspot.com/s/format.html&quot;&gt;[2]&lt;/a&gt; &lt;br /&gt;care s-o facă în locul meu. Am şi găsit un script frumos care transformă cod scris într-o multitudine de limbaje  (Java, XSLT, XML, Lua, Perl, Python, Ruby, etc) în HTML sau XML.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://vorbamutului.blogspot.com/2009/07/referinte-biliografice-in-word-2007-un.html&quot;&gt;[0] http://vorbamutului.blogspot.com/2009/07/referinte-biliografice-in-word-2007-un.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.blogspottutorial.com/2008/12/html-code-appears-in-posting.html&quot;&gt;[1] http://www.blogspottutorial.com/2008/12/html-code-appears-in-posting.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://xzfv.appspot.com/s/format.html&quot;&gt;[2] http://xzfv.appspot.com/s/format.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/6940518814237590227/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2009/07/cod-html-in-blog.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/6940518814237590227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/6940518814237590227'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2009/07/cod-html-in-blog.html' title='Cod HTML în blog'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-3475998160341604083</id><published>2009-07-17T20:55:00.001+03:00</published><updated>2009-07-17T21:59:55.111+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="office"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenOffice"/><title type='text'>Referinţe biliografice în Word 2007 - un coşmar</title><content type='html'>Ehe, dacăvreţi să utilizaţi referinţe bibliografice de forma [1], [12] în text (exact ca mai jos) folosind Microsoft Office Word 2007, o să constataţi că nu se poate. Cel puţin nu direct. Pentru a beneficia de asemenea capabilităţi trebuie să faceţi câteva modificări, urmărind paşii de la &lt;a href=&quot;http://channel9.msdn.com/forums/Coffeehouse/240589-Word-2007-citations-should-be-simple-but-solved/&quot;&gt;[0]&lt;/a&gt;.&lt;br /&gt;Pentru cine nu înţelege engleza, nu are răbdare să caute prin forum,  sau prin fişierul XSL nedocumentat de peste 7000 de linii o să scot eu esenţialul mai jos:&lt;br /&gt;&lt;br /&gt;Artificiul este posibil modificând un fişier de stil XSL, şi anume  &quot;C:\Program Files\Microsoft Office\Office12\Bibliography\Style\ISO690Nmerical.XSL&quot; . Puteţi să-l modificaţi sau faceţi o copie a acestuia pe care să o modificaţi; să-i spunem &quot;ISO690NmericalPatrate.XSL&quot; .&lt;br /&gt;În &quot;ISO690NmericalPatrate.XSL&quot; căutaţi următoarele blocuri :&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;templ_prop_OpenBracket&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:variable&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;_LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:call-template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;localLCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:with-param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;$LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:variable&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;/*/b:Locals/b:Local[@LCID=$_LCID]/b:General/b:OpenBracket&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;templ_prop_CloseBracket&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:variable&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;_LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:call-template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;localLCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:with-param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;$LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:variable&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;/*/b:Locals/b:Local[@LCID=$_LCID]/b:General/b:CloseBracket&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;şi modificaţi-le să arate aşa:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;templ_prop_OpenBracket&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:variable&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;_LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:call-template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;localLCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:with-param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;$LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:variable&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(64, 128, 128); font-style: italic;&quot;&gt;&amp;lt;!--&amp;lt;xsl:value-of select=&quot;/*/b:Locals/b:Local[@LCID=$_LCID]/b:General/b:OpenBracket&quot;/&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:text&amp;gt;&lt;/span&gt;[&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:text&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;templ_prop_CloseBracket&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:variable&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;_LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:call-template&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;localLCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:with-param&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;name=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;LCID&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;$LCID&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:variable&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(64, 128, 128); font-style: italic;&quot;&gt;&amp;lt;!--&amp;lt;xsl:value-of select=&quot;/*/b:Locals/b:Local[@LCID=$_LCID]/b:General/b:CloseBracket&quot;/&amp;gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:text&amp;gt;&lt;/span&gt;]&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:text&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:template&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pentru ca înregistrările bibliografice să arate din aşa:&lt;br /&gt;&lt;br /&gt;1. &lt;i&gt;3-D Constraint-based Modeling: Finding Common Themes. &lt;/i&gt;&lt;b&gt;Wiebe, Eric N.&lt;/b&gt; 1999. EDGD Mid-year Meeting, Columbus, OH.&lt;br /&gt;&lt;br /&gt;aşa&lt;br /&gt;&lt;br /&gt;[1]. &lt;i&gt;3-D Constraint-based Modeling: Finding Common Themes. &lt;/i&gt;&lt;b&gt;Wiebe, Eric N.&lt;/b&gt; 1999. EDGD Mid-year Meeting, Columbus, OH.&lt;br /&gt;&lt;br /&gt;trebuie să încadraţi eticheta&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;b:RefOrder&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;aşa:&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:text&amp;gt;&lt;/span&gt;[&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:text&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:value-of&lt;/span&gt; &lt;span style=&quot;color: rgb(125, 144, 41);&quot;&gt;select=&lt;/span&gt;&lt;span style=&quot;color: rgb(186, 33, 33);&quot;&gt;&quot;b:RefOrder&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;xsl:text&amp;gt;&lt;/span&gt;]&lt;span style=&quot;color: rgb(0, 128, 0); font-weight: bold;&quot;&gt;&amp;lt;/xsl:text&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;În ribbonul din word o să apară un stil suplimentar cu același nume (dacă aţi modificat o copie) sau va fi tot stilul ISO 960 (cel cu paranteze rotunde, doar că acum va avea pătrate).&lt;br /&gt;&lt;br /&gt;Pentru cei care vor să utilizeze referinţe bibliografice cu paranteze pătrate în Word 2007 le urez succes la muncă (nu cred că aspectul se va păstra şi dacă actualizaţi documentul pe alt calculator, fără să copiati fişierul de stil) şi le dau un sfat: folosiţi OpenOffice.org cu încredere, o să scăpaţi de multe dureri de cap.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://channel9.msdn.com/forums/Coffeehouse/240589-Word-2007-citations-should-be-simple-but-solved/&quot;&gt;[0] http://channel9.msdn.com/forums/Coffeehouse/240589-Word-2007-citations-should-be-simple-but-solved/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/3475998160341604083/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2009/07/referinte-biliografice-in-word-2007-un.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/3475998160341604083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/3475998160341604083'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2009/07/referinte-biliografice-in-word-2007-un.html' title='Referinţe biliografice în Word 2007 - un coşmar'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-5466836680776671866</id><published>2009-07-09T13:45:00.000+03:00</published><updated>2009-07-10T01:21:30.264+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="curs online"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="programare"/><title type='text'>curs online java</title><content type='html'>M-am apucat să învăț Java și tot căutând materiale pe internet am dat peste un curs gratuit oferit de un domn pe nume Sang Shin. Cursul se numește &lt;span style=&quot;font-weight: normal;font-size:100%;&quot; &gt;Free Java Programming with Passion! &lt;/span&gt;și îl găsiți la [&lt;a href=&quot;http://www.javapassion.com/javaintro/&quot;&gt;0&lt;/a&gt;] . La sfărșitul cursului veți primi un certificat de absolvire online care o să fie publicat online.&lt;br /&gt;&lt;br /&gt;Am început si eu cursul și sunt foarte mulțumuit de modul în care prezintă informația. Este prezentată mai întâi partea teoretică (prezentare și articole sau documentație ) urmată de un laborator cu exemple și o temă pentru acasă.&lt;br /&gt;Este un curs bun, practic, care merită urmat atât de cei care abia învață Java cât și de cei intermediari.&lt;br /&gt;&lt;br /&gt;Tot pentru a învăța Java mi-am cumpărat și cartea „Java de la 0 la expert” și pot să spun că prezintă informația destul de bine și ușor de înțeles, deși în unele părți se cam cramponează la detalii. Până acum  sunt mulțumit de ea, încă  nu am apucat să o termin, dar nu înlocuiește exercițiul. Dacă vreți să învățați Java apucați-vă de scris cod!&lt;br /&gt;&lt;br /&gt;Resurse Java:&lt;br /&gt;&lt;br /&gt;[0] &lt;a href=&quot;http://www.javapassion.com/javaintro/&quot;&gt;http://www.javapassion.com/javaintro/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/&quot;&gt;http://java.sun.com/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/reference/docs/&quot;&gt;http://java.sun.com/reference/docs/&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.netbeans.org/&quot;&gt;http://www.netbeans.org/&lt;/a&gt; - un mediu de programare excelent</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/5466836680776671866/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2009/07/curs-online-java.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/5466836680776671866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/5466836680776671866'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2009/07/curs-online-java.html' title='curs online java'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4921500585003409026.post-2893669951436366771</id><published>2009-07-01T10:57:00.000+03:00</published><updated>2009-07-12T14:53:38.073+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="amuzante"/><title type='text'>Cuplul perfect</title><content type='html'>Un individ întreabă un cuplu de bătrânei: &quot;Cum reușiți ca la vârsta asta sunteți un cuplu atât de perfect și va înțelegeți atât de bine?&quot;&lt;br /&gt;&lt;br /&gt;El : &quot;Pai, vedeți, TOT ce facem, facem împreună. De exemplu, folosim întotdeauna aceleași prosoape împreuna. Avem unul pe care scrie *C* de la Cap  și altul pe care scrie *F* de la Fund.&lt;br /&gt;&lt;br /&gt;Ea : &quot;Ceeeeee?!!!!! Întotdeauna am crezut că *C* e de la Cur şi *F* de la Față!</content><link rel='replies' type='application/atom+xml' href='http://blog.ieugen.ro/feeds/2893669951436366771/comments/default' title='Postare comentarii'/><link rel='replies' type='text/html' href='http://blog.ieugen.ro/2009/07/cuplul-perfect.html#comment-form' title='0 comentarii'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/2893669951436366771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4921500585003409026/posts/default/2893669951436366771'/><link rel='alternate' type='text/html' href='http://blog.ieugen.ro/2009/07/cuplul-perfect.html' title='Cuplul perfect'/><author><name>Eugen</name><uri>http://www.blogger.com/profile/06253984914359239918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>