Wednesday, February 27, 2013

First Steps with IntelliJ IDEA

I am old an Eclipse user. I've been trying several times to switch to IntelliJ IDEA.
You can ask me "what's wrong with my Eclipse experience" - actually "nothing" :-) But I have some influence from:
  • co-workers and friends
  • famous Java people are using this IDE
  • I'm constantly hearing the positive feedback about IntelliJ IDEA at different conferences
That's why I've decided to try IntelliJ IDEA once more. This time I've selected for myself some restriction and "motivation" factors ;-)

Restriction is very simple - use ONLY IntelliJ IDEA, forget about Eclipse.
Motivation is to learn the IntelliJ IDEA's productivity best practices. I suspect that something cool must be in this IDE.

First step is to collect the main IntelliJ IDEA resources and constantly grab knowledge out of there:
And the last inspiration went from Neal Ford:
His main advice is "When coding, always prefer keyboard to mouse":
Learning shortcuts
  • make yourself use the shortcuts even if you've gotten there another way 
  • have someone/something pester you about it 
    • pair programmer 
    • key promoter plug-in for IntelliJ IDEA 
  • repeat them to yourself 
  • write down handy menu combination

Saturday, February 09, 2013

i18n vs l10n

I always had a trouble how to explain this subject to other people. That's why I've decided to collect the main definitions (and explanations) of internationalization and localization in one place.

W3C explain this concept pretty well:
Internationalization is the design and development of a product, application or document content that enables easy localization for target audiences that vary in culture, region, or language. 
 Localization refers to the adaptation of a product, application or document content to meet the language, cultural and other requirements of a specific target market (a locale).

Let's paraphrase these definitions based on Apple guides:
  • Internationalization (i18n) is the process of designing and building an application to facilitate localization. The main concern is that application can be adapted to various languages and regions without engineering changes.
  • Localization (l10n) is the cultural and linguistic adaptation of an internationalized application to two or more culturally-distinct markets

The primary task of localization is translating the user interface elements and documentation. Localization involves not only changing the language interaction, but also other relevant changes such as display of numbers, dates, currency, and so on. Other types of data, such as sounds and images, may require localization if they are culturally sensitive. The better internationalized an application is, the easier it is to localize it for a particular language and character encoding scheme. (

Definitions from Mozilla Internationalization & Localization Guidelines:
(a.k.a. Globalization, a.k.a. Enabling)
Designing and developing a software product to function in multiple locales. This process involves identifying the locales that must be supported, designing features which support those locales, and writing code that functions equally well in any of the supported locales.
Localization Modifying or adapting a software product to fit the requirements of a particular locale. This process includes (but may not be limited to) translating the user interface, documentation and packaging, changing dialog box geometries, customizing features (if necessary), and testing the translated product to ensure that it still works (at least as well as the original).
Localizability The degree to which a software product can be localized. Localizable products separate data from code, correctly display the target language and function properly after being localized.
i18n Acronym for "internationalization" ("i" + 18 letters + "n"; lower case i is used to distinguish it from the numeral 1 (one)).
L10n Acronym for "localization" ("L" + 10 letters + "n"; upper case L is used to distinguish it from the numeral 1 (one)).
L12y Acronym for "localizability" ("L" + 12 letters + "y"; upper case L is used to distinguish it from the numeral 1 (one)).
Locale A set of conventions affected or determined by human language and customs, as defined within a particular geo-political region. These conventions include (but are not necessarily limited to) the written language, formats for dates, numbers and currency, sorting orders, etc.
Resource 1. Any part of a program which can appear to the user or be changed or configured by the user.
2. Any piece of the program's data, as opposed to its code.
Core product The language independent portion of a software product (as distinct from any particular localized version of that product - including the English language version). Sometimes, however, this term is used to refer to the English product as opposed to other localizations.


Saturday, February 02, 2013

Review: Deploying with JRuby

This books is unique, because the author (Joe Kutner) did really great work collecting several JRuby on Rails deploying approaches in one book. It's very convenience if you need some sort of review in scope of this subject.

I believe that any Rails developer which think that Java/JVM is enemy camp should read it. The tools which are highlighted in this book are very interesting and provide for Ruby/Rails developers broader space.

As for Java developers it's a good start point for integration Rails in corporate Java environment. The reader get all required info to get started.

Here is a list of tools:
  • Warbler ( - Warbler provides a minimal, flexible, Ruby-like way to bundle up all of your application files for deployment to a Java environment
  • Trinidad ( - Trinidad allows you to run Rails or Rack applications within an embedded Apache Tomcat container.
  • Kirk ( - Kirk is a wrapper around Jetty that hides all of the insanity and wraps your Rack application in a loving embrace
  • Torquebox ( - TorqueBox is a new kind of Ruby application platform that supports popular technologies such as Ruby on Rails and Sinatra, while extending the footprint of Ruby applications to include built-in support for services such as messaging, scheduling, caching, and daemons.
  • jetpack (, it wasn't mentioned in book. It packages your JRuby webapp for Jetty.
I must admit that the most impressive is Torquebox. It's very powerful and it uses all power of JBoss App Server:
TorqueBox provides an all-in-one environment, built upon the latest JBoss AS Java application server and JRuby
Such features as messaging, long running jobs, scheduled jobs are provided out of the box, have nice API which easy to use. Have a try.