2008-07-07

EuroPython 2008 - Day 1

It's the end of first day of EuroPython 2008, a good time to overlook what I've seen.





Right after the keynote, which was short and uplifting, I've headed to the first session - Dynamic Compilation in Python and Jython by Tobias Ivarsson and Jim Baker. It was long and boring, but still inspiring. They looked into things like bytecode versus AST manipulation, introduced nice tools like pyassem. It's nice to see that Java and JVM is a hot topic in smart programmer communities. I consider Python community as one of the smartest people in software development.



Then I went to listen to my native speaker Ignas Mikalajūnas from Programmers of Vilnius. He told Why he Wants Us to Use Eggs. I would disagree with saying "Eggs are to Pythons as Jars are to Java...". It's more like "Eggs may some day be to Pythons as Maven is for Java". For now Eggs look scary and unstable especially with things like Known Good Set (compare it to Maven Repository). Though I would definitely want to use it for Python projects. Better than nothing.





Then I made a mistake by visiting John Pinner's "Python at Home" talk. He was going to tell how he automated his boiler at home with use of Python. I expected a lot from that, instead I've seen some photos of a boiler wired to a motherboard and some source code like "boiler.ignition(On)" and "boiler.ignition(Off)". I would recommend John (and all the other speakers) not to dig deep into source code but concentrate on big picture instead.



I didn't want to go to vendor pitch sessions or things that does not sound interesting (Advanced Searching for Plone and stuff), so my choice was the Barcamp / Open Space, where Tommi Virtanen was giving a talk on Twisted. If you want messaging in Python, do it in Twisted. The guy gave a great quote of Torvalds Linus, which sounded something like "If you have to use debugging - you already have problems. Take a step back and review what could be wrong". It definitely was a great session.



I was going to visit "Discouraging the Use of Python" next, but I was tired and didn't want to be discouraged, so I've headed home to write all this down.

Most of attendees I've spoken to admit that last year's EuroPython was way better than this. But well, two more days to go.

Now for some fun moments:
Canonical was hiring Django developers and senior engineers.



Until the epic failure of their campaign:



All pythonistas got a copy of NetBeans 6.1 and Open Solaris (go Sun! :)) along with geeky looking Bazaar T-Shirt.



And of course, loads of free coffee, snacks and socializing!






See You there at Day 2!

Update

Yesterday I forgot to mention that Guido Van Rossum did not participate in the conference like the last year. I did not participate in his video keynote either...

2008-07-02

CMS battle: Drupal vs Joomla vs Custom Programming

In modern Content Management System (CMS) world there are two major figures - Joomla (descendant of Mambo CMS ) and Drupal. They both are open source and have large comunities with enormous amounts of extensions and themes. It's hard to choose which one to use without trying them out. As usually, there are more options - home grown custom programming or even building your own CMS (which I was once stupid enough to do). Programming from scratch is always fun and beneficial for your skills, however, if you need things up and running in no time or you don't do (or don't want to do) any programming, using a CMS is the way to go.

If you are digging for CMS comparisons and trying to decide which one is best for you, here is a quick and dirty answer - go for Drupal, you won't regret it.

Why?

After test-driving them both I've came to these conclusions:

  • Joomla is bloated, Drupal is minimal
  • Drupal is easy to use and intuitive, Joomla is confusing

That was more than enough for a minimalist like me.

Here are some statistics from CMS Matrix for a more detailed comparison. It shows that Drupal is extremely modular and Joomla has a heavy core, thus a terrible architecture. That means Joomla is hard to extend and messy under the hood. Drupal, on the other hand, looks beautiful.


Product Drupal 6.2 Joomla! 1.5.3
Last Updated 4/10/2008 5/31/2008
System Requirements Drupal Joomla!
Application Server PHP 4.3.5+
Approximate Cost Free Free
Database MySQL, Postgres MySQL
License GNU GPL GNU/GPL v2
Operating System Any Any
Programming Language PHP PHP
Root Access No No
Shell Access No No
Web Server Apache, IIS Apache
Security Drupal Joomla!
Audit Trail Yes No
Captcha Free Add On Free Add On
Content Approval Yes Yes
Yes Yes
Granular Privileges Yes No
Kerberos Authentication No No
LDAP Authentication Free Add On Yes
Yes Yes
NIS Authentication No No
NTLM Authentication Free Add On No
Pluggable Authentication Yes Yes
Problem Notification No No
Sandbox No No
Session Management Yes Yes
SMB Authentication No No
SSL Compatible Yes Yes
SSL Logins No Yes
SSL Pages No Yes
Versioning Yes No
Support Drupal Joomla!
Certification Program No No
Code Skeletons Yes No
Commercial Manuals Yes Yes
Commercial Support Yes Yes
Commercial Training Yes Yes
Developer Community Yes Yes
Online Help Yes Yes
Pluggable API Yes Yes
Professional Hosting Yes Yes
Professional Services Yes Yes
Public Forum Yes Yes
Public Mailing List Yes No
Test Framework Free Add On Yes
Third-Party Developers Yes Yes
Users Conference Yes Yes
Ease of Use Drupal Joomla!
Drag-N-Drop Content Free Add On No
Free Add On Free Add On
Friendly URLs Yes Yes
Image Resizing Free Add On Yes
Macro Language Free Add On Yes
Mass Upload Free Add On No
Prototyping Limited Yes
Server Page Language Yes Yes
Site Setup Wizard Limited No
Spell Checker Free Add On No
Style Wizard Limited No
Subscriptions Free Add On No
Template Language Limited Yes
UI Levels No Yes
Undo Limited No
WYSIWYG Editor Free Add On Yes
Zip Archives No No
Performance Drupal Joomla!
Advanced Caching Yes Yes
Database Replication Limited No
Load Balancing Yes Yes
Page Caching Yes Yes
Static Content Export No No
Management Drupal Joomla!
Advertising Management Free Add On Yes
Asset Management Yes Yes
Clipboard No No
Content Scheduling Free Add On Yes
Content Staging Free Add On No
Inline Administration Yes Yes
Online Administration Yes Yes
Package Deployment No No
Sub-sites / Roots Yes Yes
Themes / Skins Yes Yes
Trash No Yes
Web Statistics Yes Yes
Web-based Style/Template Management Yes Yes
Web-based Translation Management Yes Free Add On
Workflow Engine Limited No
Interoperability Drupal Joomla!
Content Syndication (RSS) Yes Yes
FTP Support Limited Yes
iCal Free Add On No
UTF-8 Support Yes Yes
WAI Compliant Limited No
WebDAV Support No No
XHTML Compliant Yes No
Flexibility Drupal Joomla!
CGI-mode Support Yes Yes
Content Reuse Limited Yes
Extensible User Profiles Yes Yes
Interface Localization Yes Yes
Yes Yes
Multi-lingual Content Yes Free Add On
Multi-lingual Content Integration Free Add On Free Add On
Multi-Site Deployment Yes Free Add On
URL Rewriting Yes Yes
Built-in Applications Drupal Joomla!
Blog Yes Yes
Chat Free Add On Free Add On
Classifieds Free Add On Free Add On
Contact Management Free Add On Yes
Data Entry Free Add On Free Add On
Database Reports No Free Add On
Discussion / Forum Yes Free Add On
Document Management Limited Free Add On
Events Calendar Free Add On Free Add On
Events Management Free Add On Free Add On
Expense Reports No Free Add On
FAQ Management Yes Yes
File Distribution Free Add On Free Add On
Graphs and Charts No Free Add On
Groupware Free Add On Free Add On
Guest Book Free Add On Free Add On
Help Desk / Bug Reporting Free Add On Free Add On
HTTP Proxy No No
In/Out Board No No
Job Postings Free Add On Free Add On
Free Add On Yes
Mail Form Free Add On Yes
Matrix No No
My Page / Dashboard Free Add On No
Free Add On Free Add On
Free Add On Free Add On
Polls Yes Yes
Product Management Free Add On Yes
Project Tracking Free Add On Free Add On
Search Engine Yes Yes
Site Map Free Add On Free Add On
Stock Quotes Free Add On No
Surveys Free Add On Free Add On
Syndicated Content (RSS) Yes Yes
Tests / Quizzes Free Add On Free Add On
Time Tracking Free Add On No
User Contributions Yes Yes
Weather Free Add On No
Web Services Front End Limited Yes
Wiki Free Add On Free Add On
Commerce Drupal Joomla!
Affiliate Tracking Free Add On Free Add On
Inventory Management Free Add On Free Add On
Pluggable Payments Free Add On Free Add On
Pluggable Shipping Free Add On Free Add On
Pluggable Tax Free Add On Free Add On
Point of Sale No Free Add On
Shopping Cart Free Add On Free Add On
Subscriptions Free Add On Free Add On
Wish Lists Free Add On Free Add On

Hope this helps to make a choice.

2008-05-30

XSL Engine

Amazingly, some bright minds of the company I work at supported the idea to release one of our products as an open source software. It's nice to see a huge "Nothing is Free" business opening up a little. I'm proud to present the release of the XSL Engine:

XSLE at Google Code

XSL Engine is an XSL transformation server and client. It provides united processing of XSL transformations, independent of any programming environment. This can remove load from other applications. It features high throughput, with the possibility to increase the throughput of the XSL transformations by setting up new servers. It operates in an Apache Tomcat Web container. XSL documents are loaded into cache. XSL Includes are supported. PDF can be generated (using XSL-FO). XSL cache can be automatically replicated among remote servers.

2008-05-10

Getting Unicode output in Eclipse Console

Tired of seeing garbled Eclipse Console output? Here is a quick and dirty tutorial for getting Unicode output in Eclipse Console.

Fact: You will not get Unicode output in Eclipse Console while using System.out directly in Windows. See Eclipse BUG #13865.

1. add -Dfile.encoding=UTF-8 to your eclipse.ini

2. make sure your Eclipse Console font supports Unicode. You can try it out by typing unicode characters directly to console with keyboard. Console Font is set in Window -> Preferences -> General -> Appearance -> Colors and Fonts -> Debug -> Console Font

3. if you are NOT using Windows, set your system encoding to UTF-8. You should now see Unicode characters in Console after restarting Eclipse.

4. if you are using Windows or do not want to change your OS encoding, you will have to avoid using System.out stream directly. Instead, wrap it up with java.io.PrintStream:
PrintStream sysout = new PrintStream(System.out, true, "UTF-8");
sysout.println("\u2297\u0035\u039e\u322F\u5193");


5. if you are using Log4J with ConsoleAppender, make sure to set the encoding property to UTF-8. Example:
#TRACE appender
log4j.appender.stdout.trace=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.trace.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.trace.encoding=UTF-8
log4j.appender.stdout.trace.layout.ConversionPattern=%p [%c] - %m%n
log4j.appender.stdout.trace.Threshold=TRACE


Happy development!

2008-04-21

Make your Eclipse rock

Eclipse is one of the greatest IDEs available out there. In my opinion it's the best, because in comparison with other choices such as Intellij IDEA, Eclipse is free and open. People say NetBeans are getting good, however I am too skeptic to believe. As it's the matter of preference, I will stick with Eclipse.

Yet, after a fresh and clean install Eclipse (v3.3 as of this moment) is not yet kicking. A few crucial things are missing. I'll give out my recipe to making Eclipse rock. So, let's get on with that:

  1. Fresh install from www.eclipse.org. As I'm NOT doing J2EE/Web/XML stuff at home, Eclipse IDE for Java Developers is the best choice for me.
  2. Give it more RAM! Default values are pathetic, so you should edit your eclipse.ini to look like this:
    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize
    256M
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xms256m
    -Xmx1024m
    -XX:PermSize=256m
    Say bye to those possible out of memory and permgen space errors.
  3. Fine-tune the Preferences. Go straight to workspace and open Window -> Preferences.
    General:
    Check "Show heap status" - it's nice to see how much heap you've got.
    General -> Appearance:
    Uncheck "Show text on the perspective bar". That gives more space for perspective icons.
    Check "Show traditional style tabs". Performance.
    Uncheck "Enable animations". Performance.
    General -> Editors -> Text Editors:
    Check "Insert spaces for tabs". You may not want that if you're a tab fan.
    Check "Show print margin". 80 is good.
    Check "Show line numbers". Who would not want to see line numbers by default?
    General -> Editors -> Text Editors -> Spelling:
    Uncheck "Enable spell checking". Performance. And hell, that's no Microsoft Word.
    General -> Startup and Shutdown:
    Uncheck "Mylin Tasks UI" from "Plug-ins activated on startup". Unless you REALLY want to use Mylin. I think it sucks and terribly slows Eclipse down.
    General -> Workspace:
    Choose "UTF-8" as your "Text file encoding". Unicode is the way to go.
    Choose "Unix" as your "New text file line delimiter". This is also is the way to go.
    Java -> Code Style -> Formatter:
    Click "Edit..." on Eclipse [built-in] profile. Set new profile name. In "Identation" tab set "Tab policy" to "Spaces only". You may skip this if you're a tab dude.
    Java -> Compiler -> Errors/Warnings:
    You may want to harden your compiler warnings for more beautiful and strict development. I tend to override these:
    In "Code style": "Undocumented empty block" -> "Warning".
    In "Unnecessary code": "Unnecessary 'else' statement" -> "Warning".
    In "Unnecessary code": "Unnecessary cast or 'instanceof' operation" -> "Warning".
    In "Unnecessary code": "Unnecessary declaration of thrown checked exception" -> "Warning".
    Java -> Compiler -> Javadoc:
    Set "Malformed Javadoc comments:" -> "Warning".
    Set "Only consider members as visible as: " -> "Private".
    You want your Javadoc clean, don't you.
    Java -> Editor -> Content Assist -> Advanced:
    In content assist proposal list uncheck entries marked with "(Mylin)" and check the alternatives: "Other Java Proposals", "Template Proposals", "Type Proposals".
    In cycling list check all same entries: "Other Java Proposals", "Template Proposals", "Type Proposals".
    Web and XML -> XML Files -> Source:
    In "Formatting" section check "Indent using spaces" and set Indentation size to "2". Otherwise you will end up with tabs in your XML.
  4. Subversive - the best Eclipse plug-in for SVN support:
    Help -> Software Updates -> Find and Install. Search for new features to install. Add two New Remote Sites - "Subversive SVN Connectors" with URL: http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/ and "Subversive plug-in" with URL: http://download.eclipse.org/technology/subversive/0.7/update-site/
    Check http://www.eclipse.org/subversive/downloads.php for latest URLs.
    Install new components. Skip Mylin integration and sources.
  5. Maven plug-in. You MUST know what Maven is, otherwise don't do Java. Seriously. You may choose from Tycho and Q: http://maven.apache.org/eclipse-plugin.html
    I was a long-time user of Tycho, however Q looks really promising. I'm trying it right now for the first time. Yeah, definitely, go for Q. Installation is easy, just add New Remote Site:
    Q4E: http://q4e.googlecode.com/svn/trunk/updatesite/
  6. XML Buddy. Your light weight swiss army knife in Eclipse XML editing. Download plug-in manually from http://xmlbuddy.com and drop it into your Eclipse plugins folder, then restart.
  7. JADClipse. Your daily Java decompiler. Best for those times when you need to go under the hood. Make this a habit. You will need JAD in your PATH: http://www.kpdus.com/jad.html
    Then download JADClipse plug-in from http://jadclipse.sourceforge.net/, drop it to Eclipse plugins folder and restart.
Enjoy your tools!