Saturday, April 27, 2013

The long way to Evernote

Have you ever think about the application (and/or service) which can satisfy all your "productivity" needs? The term "productivity" in this context is very simple - it's something (tools or methods) which helps you work with higher productivity, spent less time resolving boring tasks and concentrate on your business needs.

Here I describe the areas which helps me be more productive and tools related with them.
  1. Personal Knowledge Base (KB) System. It's might be wiki, some notes taking application. I'd been using MS OneNote. It's very powerful application with tons of nice features. Except it's supported on Microsoft OS's only. Also, I love using tons of tags for everything, but OneNote doesn't work well with tags.
  2. Task Management System. I've been practicing the Pomodoro Technique. And it's very hard to manage tons of tasks without some application. If you google a little you will find huge amount of applications and services which might be used for Pomodoro. I've configured TodoList application to use it properly in scope of Pomodoro. It's was fun. But there was one drawback - I had one application for knowledge base and another for tasks management. It was a pain to link some tasks with article from my KB system.
  3. Bookmarking. I don't like to have super huge bookmark list inside my browser. I prefer to store the next thing in browser bookmarks: a) resources which I've been visiting on daily/weekly basis and b) temporary links. All the bookmarks were stored on social bookmarking platform delicious. And again I had 3d tool which hard to integrate with others.
OneNote and TodoList is Windows based application. But, I've switched Mac and Android as my target home devices. My work machine is Windows based. So, I've started research of analogues for KB and todo list applications which works quite well on Windows, Mac OS X and Android.

As you probably guess it's Evernote. Here I highlight features which I love:
  • almost cross-platform (Windows, Mac OS X, iOS and Android), Linux isn't supported officially. But there is a work for Linux as well NixNote (old name NeverNote).
  • Evernote is a service. I.e. all my notes are synchronized between all my devices. Even more,  Evernote has Web analogue of native note taking application. So, I can have access to my notes from anywhere.
  • Evernote has very power tag support. I can apply multiple tags my notes. It improves notes search and classification.
  • Knowledge Base, Pomodoro System and Bookmarks are all integrated into Evernote. I have single application for managing all these stuff. And it's real benefit, because my user experience is shared between all my devices and productivity concepts (KB, Pomodoro/Todo and Bookmarks).
  • Evernote has public Cloud API and Local API. I.e. we can automate Evernote experince.
  • There is very nice browser plugin Evernote Web Clipper which store web pages (link, selected part of page or full page) into the notes. Very cool feature for bookmarking and KB.

Evernote is very flexible application and a service. It was required some time for me to completely switch to Evernote from other application and services. But now I'm more productive.

If you have any question about my Evernote experience ask me. I will be glad to share it.

Tuesday, April 23, 2013

Java PDF Libraries

Recently I had a task to select some Java PDF libraries for PDF generation. But it wasn't a simple task.
The first thing which came into my mind was iText. It's well know Java library with good reputation. But... there is some stopper. iText version 5+ is released under the AGPL license. I.e. we have to pay money if we want to use iText in commercial product.

I've created the next small checklist which covers project needs:
  1. liberal license
  2. support maximum amount of project features (e.g. absolute element positioning)
  3. good documentation
  4. huge amount of samples
  5. possibility to render HTML to PDF
I've reviewed the next libraries:
  • iText 5.0+ AGPL license
  • iText 4.2 MPL/LGPL licenses
  • PDF Box Apache License, Version 2.0
  • JPedal JPedal has a LGPL release to provide a full java PDF viewer under a LGPL license
  • FOP Apache License, Version 2.0
  • gnujpdf LGPL License
  • PJX GPLv2 License
  • PDFjet Strange Open Source license model
  • jPod BSD License
  • PDF Renderer Maintaining is not active

iText review

  • iText 2.1.7: the latest official release under the MPL & LGPL license;
  • iText 4.2.0: the latest unofficial release under the MPL & LGPL license;
  • iText 5.0.0 and higher: released under the AGPL license.
Notes about iText 5.0+ vs iText 4.2
Beginning with iText version 5.0 the developers have moved to the AGPL to improve their ability to sell commercial licenses. .. To assist those desiring to stick with the old license was made the final MPL/LGPL version more easily available and forked on github.


Apache™ FOP

Apache™ FOP (Formatting Objects Processor) is a print formatter driven by XSL formatting objects (XSL-FO) and an output independent formatter. It is a Java application that reads a formatting object (FO) tree and renders the resulting pages to a specified output. This lib doesn't have enough flexibility for absolute page element positioning. But, it might be really valuable as content convertor.


Apache PDFBox

Very interesting project. It has very impressive amount of features. And most important it's in active development.



I've selected iText v.4.2 which has acceptable license and huge community. But the most important feature it's a very good documentation (actually it's a book iText in Action — 2nd Edition), tons of samples. Almost all samples for iText v.5 can be easily applied to iText v.4.2.
Other libraries have not so much samples/demos. And for quick start it's very important.

Here is maven dependency info:


PDFBox is selected as backup library. I.e. I will use it when iText has some limitations.