all repos — h3rald @ 55052345bf9545c4eab011ca89cc0fb9dbcd2a7c

The sources of https://h3rald.com

Created Home and About pages.
h3rald h3rald@h3rald.com
Tue, 11 Aug 2009 16:48:33 +0200
commit

55052345bf9545c4eab011ca89cc0fb9dbcd2a7c

parent

9a1395642bcbb0a582ce978eadb9a9a74132f115

D content/about.textile

@@ -1,87 +0,0 @@

------ -permalink: about -filters_pre: -- redcloth -title: About -comments: [] - -date: -tags: [] - -type: page -toc: true ------ -h2. About this Web Site - -This is a _minimalist_ web site: I do not care about fancy graphics or nitfy effects. I do care, however, about content and I want you to read what I write comfortably. As you can see, this site has no sidebars: it only has a header, a main column and a footer, exactly where you expect them to be. - -This site was designed to work with all the major modern browsers (hint: Internet Explorer 6 is _not_ a modern browser). It validates as XHTML 1.0 Strict and CSS 2.1. - -h3. About Me - -I am a full-time technical writer working in Genoa, Italy. In my free time I enjoy writing (surprise, surprise), reading about technology and programming a little bit in Ruby and other languages. - -You can contact me by email at _h3rald [at] h3rald [dot] com_, or reach me through: - -* "Twitter":http://www.twitter.com/h3rald -* "LinkedIn":http://www.linkedin.com/pub/dir/Fabio/Cevasco -* "Delicious":http://www.delicious.com/h3rald -* "Facebook":http://www.facebook.com/h3rald -* "Shelfari":http://www.shelfari.com/h3rald -* "FriendFeed":http://friendfeed.com/h3rald - -h3. About the name "H3RALD" - -Why "H3RALD"? Well, this dates back to 2003. Back in the day I was trying to find a username I could user everywhere on the 'Net that wasn't something like FabioCev83 or SomeRandomCoolGuy777. I wanted something unique, easy to remember and not too silly if possible. - -At the time I was also an avid reader of the "International Herald Tribune":http://www.iht.com/, mainly because it was the only foreign paper I could buy near my house. So I tried using "herald" for some services, but sadly it was obviously taken. Finally, I thought about turning the E into a 3, and there we are, the name H3RALD was born and I used ever since. - -h3. Under the Hood - -This site is powered by: - -* A customized version of the "Typo":http://www.typosphere.org blogging engine. -* The "Ruby on Rails":http://www.rubyonrails.org web framework for the "Ruby":http://www.ruby-lang.org programming language. -* The "MySQL":http://www.mysql.com database engine. -* The "Apache":http://www.apache.org web server. -* "BlueHost":http://www.bluehost.com web hosting. - -h3. About Comments - -You can freely post comment to all the articles on my web site as long as you are civilized. Anything which looks like spam is likely to be filtered out automatically by "Askimet":http://akismet.com/. Please note that: - -* You can use "Textile":http://textism.com/tools/textile/ to format your comments. -* If you provide an email address, it will not be displayed publicly on this site. It will only be used to retrieve your "Gravatar":http://en.gravatar.com/, if you have one. - - -h3. About the Palette - -There's a tiny palette containing some extremely small icons you can use to perform many different actions (mouse over them for a hint, or read below): - -|_. Icon |_. Action |_. Pages | -| !/images/theme/icons/mini/arrow_up.gif! | Go to the top of the page | All | -| !/images/theme/feed.png! | Subscribe to RSS Feed | Home, Archives, Articles (comment feed) | -| !/images/theme/icons/mini/bookmark.gif! | Bookmark this page using popular social bookmarking services | All | -| !/images/theme/icons/mini/mail_back.gif! | Email this page | All | -| !/images/theme/icons/mini/comment.gif! | Go to the comment section | All Articles | -| !/images/theme/icons/mini/printer.gif! | Print this page | All Articles | -| !/images/theme/icons/mini/arrow_down.gif! | Go to the bottom of the page | All | - -h3. Licensing - -My "articles":/archives/ and other material available on this web site are lincesed under the _Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported_license. For other uses, contact me. - -<p style="text-align:center"> -<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" /></a> -</p> - -h3. Credits - -I'd like to thank the following people for their work, which made this web site possible: - -* "Timothy Groves":http://www.brandspankingnew.net/, for designing the wonderful "Mini Icons":http://www.brandspankingnew.net/archive/2006/12/hohoho.html I used for the palette and the rest of this site. - -* "David J.Perry":http://scholarsfonts.net/, who designed the "Cardo font":http://scholarsfonts.net/cardofnt.html I used for the H3RALD logo. - - -
D content/archives.textile

@@ -1,15 +0,0 @@

------ -# Built-in -filters_pre: -- redcloth - -# Custom -permalink: page -title: New page! -date: -type: page - ------ -h2. Title - -<div id="search_form"></div>
M content/articles/10-programming-languages.textilecontent/articles/10-programming-languages.textile

@@ -1,4 +1,6 @@

----- +popular: true +summary: "A quick comparison of 10 non-mainstream programming languages, highlighting their main features, pros and cons. Each section contains also a list of links to get you started with a particular language." permalink: 10-programming-languages filters_pre: - redcloth

@@ -123,13 +125,13 @@ :author: Glad_if_I

:url: "" :id: 2623 :body: |- - When you wrote that Haskell's has "Speed that rivals C and <notextile>C++</notextile>" I looked at the link that you provided and it proved you wrong. That is to say it stated that in computer processing that both C and <notextile>C++</notextile> is processes faster. While it stated that in some instances it beat C++ it did suggest that if optimization was a factor you had better write the program in C. The speed it talked about in the article was how fast it was for the programmer to write the code in Haskell than in C and <notextile>C++</notextile>. - - Now if you had stated: - "The Speed at which it takes to program something in Haskell rivals that of C and <notextile>C++.</notextile>" - - I would be okay with that but the way you stated it was misleading. It was a lie. I am not trying to be mean but when you talk about programming speed that means how fast the computer processes. Each programmer creates and edits code at their own speed. It is a subjective property of each programmer. Maybe it is easier to program in Haskell and thus faster supposedly. But the way you wrote it was misleading. - + When you wrote that Haskell's has "Speed that rivals C and <notextile>C++</notextile>" I looked at the link that you provided and it proved you wrong. That is to say it stated that in computer processing that both C and <notextile>C++</notextile> is processes faster. While it stated that in some instances it beat C++ it did suggest that if optimization was a factor you had better write the program in C. The speed it talked about in the article was how fast it was for the programmer to write the code in Haskell than in C and <notextile>C++</notextile>. + + Now if you had stated: + "The Speed at which it takes to program something in Haskell rivals that of C and <notextile>C++.</notextile>" + + I would be okay with that but the way you stated it was misleading. It was a lie. I am not trying to be mean but when you talk about programming speed that means how fast the computer processes. Each programmer creates and edits code at their own speed. It is a subjective property of each programmer. Maybe it is easier to program in Haskell and thus faster supposedly. But the way you wrote it was misleading. + C is the fastest language for a reason. Because it is one step above assembler which in turn is faster than C. If you are going to make statements that are a lie. Do not link to a page that disagrees with you. - :date: :author: pRtkL xLr8r

@@ -163,10 +165,10 @@ :author: Christian

:url: "" :id: 2630 :body: |- - You may want to take a look at PowerShell. Focused on Administration of IT, but able to do so much more. - - http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx - + You may want to take a look at PowerShell. Focused on Administration of IT, but able to do so much more. + + http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx + http://blogs.msdn.com/powershell/ - :date: :author: BK

@@ -205,7 +207,7 @@ :author: Ulf Wiger

:url: http://ulf.wiger.net/weblog :id: 2641 :body: | - Damien Katz' article is indeed an interesting read, but it mainly addresses those already sold on Erlang. Others might perhaps first want to read http://sdtimes.com/link/33124, in which Katz explains how he threw away his <notextile>C++</notextile> based CouchDB after having played around with Erlang for a week, and then rewrote in 1.5 months what had taken him 6 months to write in <notextile>C++</notextile>. Otherwise, one could easily get the impression that Katz isn't very fond of Erlang... ;-) + Damien Katz' article is indeed an interesting read, but it mainly addresses those already sold on Erlang. Others might perhaps first want to read http://sdtimes.com/link/33124, in which Katz explains how he threw away his <notextile>C++</notextile> based CouchDB after having played around with Erlang for a week, and then rewrote in 1.5 months what had taken him 6 months to write in <notextile>C++</notextile>. Otherwise, one could easily get the impression that Katz isn't very fond of Erlang... ;-) - :date: :author: Phil

@@ -308,250 +310,250 @@ - programming

type: article toc: true ----- -If you program for fun or profit, chances are that you know C, C++, Java, PHP, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered _mainstream_, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one. -If you are earning your living by coding, it's often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most "esoteric":http://esolangs.org/wiki/Main_Page extremes. - -bq. "The most obvious common 'personality' characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are 'neophiles', stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist." - -p((((. &ndash; Eric S. Raymond, ??"The Jargon File":http://catb.org/jargon/html/personality.html?? - -Even if you're particularly devoted to one of the languages mentioned above, it is normal to be curious about what else is out there. As the end of the year approaches, I find myself thinking about learning &ndash; or at least become acquainted with &ndash; some less known, more experimental, programming languages. -I was originally planning on learning another programming language as a New Year's Resolution, which is quite common among programmers. The most difficult task turned out to be _choosing_ a particular language: there are so many out there which makes it very hard to decide. - -This article deals with ten possible candidates, and it's far from being an exhaustive list. The programming languages described henceforth are very different from each other, but they all have one thing in common: they all stimulate my curiosity in their own, very different ways.* "Haskell":#haskell -* "Erlang":#erlang -* "Io":#io -* "PLT Scheme":#plt-scheme -* "Clojure":#clojure -* "Squeak":#squeak -* "OCaml":#ocaml -* "Factor":#factor -* "Lua":#lua -* "Scala":#scala - -h3(#haskell). Haskell - -I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews and even books about this fascinating academic language which claims to achieve functional purity though remaining extremely useful, practical and efficient. Sadly, I'm still not able to fully grasp some of its most crucial concepts, such as "monads":http://en.wikibooks.org/wiki/Programming:Haskell_monads, but this still doesn't put me off _wishing_ to learn the language. - -If you've never enountered Haskell before, I find "The Evolution of a Haskell Programmer":http://www.willamette.edu/~fruehr/haskell/evolution.html an amusing and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is one of the most complete collections of the different paradigms and programming approaches Haskell allows. - -Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what it offers, in terms of features: - -* 9 different "implementations":http://www.haskell.org/haskellwiki/Implementations (multiple compilers _and_ interpreters) -* Countless "standard libraries":http://haskell.org/ghc/docs/latest/html/libraries/ "packages":http://hackage.haskell.org/packages/archive/pkg-list.html which can be used to solve _any_ programming challenge -* Abundant "learning material":http://www.haskell.org/haskellwiki/Books_and_tutorials -* "Speed":http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell that rivals C and C++ -* Very mature cross-platform compatibility - -The catch? It is likely to be very different from any other language you might have encountered before, and that's probably the reason why some people find it difficult to learn and master. That being said, if you are looking for a challenging (but very rewarding, I believe) New Year's Resolution, you should definitely go for this. - -h4. To get you started... - -* "Official Haskell Wiki":http://www.haskell.org/ -* "Haskell Wikibook":http://en.wikibooks.org/wiki/Haskell -* "Real World Haskell":http://book.realworldhaskell.org/read/index.html -* "37 Reasons to Love Haskell":http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/ -* "Haskell for the Ruby Guy":http://antoniocangiano.com/2007/03/13/haskell-eye-for-the-ruby-guy/ -* "A-Z of Programming Languages: Haskell":http://www.techworld.com.au/article/261007/-z_programming_languages_haskell -* "Learn you a Haskell for Great Good!":http://learnyouahaskell.com/ -* "Haskell Hacking":http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16 - -h3. Erlang - -"Erlang":http://erlang.org/ is a concurrent programming language originally developed by Ericsson for their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to all concurrency problems you may encounter in your life as a programmer. -Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems can be unmatched. - -Quite a few interesting applications have been developed in this language, such as: - -* "CouchDB":http://couchdb.apache.org/, a popular distributed, document-oriented database -* "Yaws":http://yaws.hyber.org/, a high-performance web server -* even "Facebook Chat":http://www.facebook.com/note.php?note_id=14218138919&id=9445547199 - -The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) "points out":http://damienkatz.net/2008/03/what_sucks_abou.html, is: - -* Awkward syntax, inspired by Prolog -* Weird if expressions -* Difficult string operations -* No classes or namespaces - -...this list could go on. Damien's article is an interesting read, enough to put anyone off learning the language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof application. - -h4. To get you started... - -* "Official Erlang Web Site":http://www.erlang.org/ -* "An Introduction to Erlang":http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html -* "Erlang Style Concurrency":http://www.defmacro.org/ramblings/concurrency.html -* "PlanetErlang":http://www.planeterlang.org/ -* "Erlang Projects":http://www.erlang-projects.org/ - -h3(#io). Io - -"Io":http://iolanguage.com/ is a relatively new programming language by Steve Dekorte which recently surfaced from Google's oblivion (if you tried googling for it a few months ago, you couldn't event find its home page) thanks to a short vut stimulating "article":http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html by "_why":http://whytheluckystiff.net/. It doesn't have the best name for a programming language, that's for sure, but it's definitely a breath of fresh air in terms of the way it works. - -Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be inspected and passed around as you see fit. - -If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this to a whole different level, imposing virtually no limitation to the programmer. What's truly amazing is that its grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start experimenting, first with its extremely small core and then with its extension libraries and bindings. - -Io has indeed a lot of potential. Granted, it's still young and under development, but also already quite efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini started to design a similar language called "Ioke":http://kenai.com/projects/ioke/ for the Java Virtual Machine. - -h4. To get you started... - -* "Official Io Web Site":http://iolanguage.com/ -* "Io Repository on Github":http://github.com/stevedekorte/io/tree/master -* "Io user group":http://tech.groups.yahoo.com/group/iolanguage/ -* "Io has a very clean mirror":http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html -* "Io Notes":http://iota.flowsnake.org/ -* "Io Language Notes":http://wiki.type-z.org/index.php/Io/IoLanguage -* "Blame it on Io! A slow-paced introduction to the Io language":http://ozone.wordpress.com/2006/03/15/blame-it-on-io/ -* "Io Wikibook":http://en.wikibooks.org/wiki/Programming:Io - -h3(#plt-scheme). PLT Scheme - -I stumbled upon the "PLT Scheme web site":http://plt-scheme.org/ while browsing for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I started reading a few articles and books on this old and yet still popular language. -Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic attempt to revitalize an venerable language, I soon found out that Scheme &ndash; and PLT Scheme in particular &ndash; is definitely worthy of attention and interest. - -Being a technical writer, I immediately became fond of the "PLT Scheme Guide":http://docs.plt-scheme.org/guide/, one of the clearest and most well-organized examples of documentation available for a programming language I've ever come across. -The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining pleasant to read sequentially: a rare trait in technical documentation. Best of all, it's free: you simply have no real excuse not to read it. - -Besides its excellent documentation, PLT Scheme feels like a fresh and modern implementation of one of the two most important dialects of Lisp. It's cross-platform, it has an extensive "collection of packages":http://planet.plt-scheme.org/ and a very active community behind it. -After my first attempt to learn Haskell, I felt compelled to try out PLT Scheme and it immediately felt much easier and more user friendly to learn, partly because of "DrScheme":http://download.plt-scheme.org/drscheme/ a dedicated IDE/learning tool optimized to get you started and feel comfortable with the language. -Caveats? None, unless you have an adversion for parenthesis, that is. - -h4. To get you started... - -* "Official PLT Scheme Web Site":http://plt-scheme.org/ -* "PLT Scheme Guide":http://docs.plt-scheme.org/guide/index.html -* "PLaneT":http://planet.plt-scheme.org/ -* "Quick: An Introduction to PLT Scheme with Pictures":http://docs.plt-scheme.org/quick/ -* "More: Systems Programming with PLT Scheme":http://docs.plt-scheme.org/more/ - -h3(#clojure). Clojure - -"Clojure":http://clojure.org/ is the most recent and notable attempt to bring Lisp back to life and ready to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I'm a bit reluctant to deal with anything related to Java nowadays, Clojure's approach makes it more appealing. - -Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions: - -* "Multimethods":http://clojure.org/multimethods -* "Agents asynchronous actions":http://clojure.org/agents -* Some interestings "special forms":http://clojure.org/special_forms -* Many pre-built "data structures":http://clojure.org/data_structures, like Vectors, Maps, Sets, Collections, ... - -Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a single blog post or article which is seriously criticizing Clojure in any way. - -h4. To get you started... - -* "Official Clojure Web Site":http://clojure.org -* "Clojure User Group":http://groups.google.com/group/clojure -* "Clojure presentation on InfoQ":http://www.infoq.com/presentations/hickey-clojure -* "Trying Clojure":http://netzhansa.blogspot.com/2008/10/trying-clojure.html -* "My first look at Clojure":http://groups.google.com/group/clojure/msg/f038decc18c7da37 -* "Enclojure":http://enclojure.net/Index.html - -h3(#squeak). Squeak - -"Squeak":http://www.squeak.org/ has become one of the most popular Smalltalk implementations available. It has been used in some very interesting projects: - -* "EToys":http://wiki.laptop.org/go/Smalltalk_Development_on_XO, a kids-oriented but powerful development environment built in Squeak, was included as part of the educational sofware suite of the "OLPC":http://www.laptop.org. -* "Seaside":http://www.seaside.st/ is a modern and very productive web framework running on Squeak. -* "Croquet":http://www.croquetproject.org/index.php/Main_Page is a development solution to build complex, multi-user virtual worlds. - -If you ask "Randal Schwartz":http://www.stonehenge.com/merlyn/, he'll explain you "why":http://www.infoq.com/articles/smalltalk-comeback-schwartz Squeak and Smalltalk are at least worth a look. Personally, while I'm attracted by Smalltalk's unique approach to programming and its friendly syntax, I am still a bit overwhelmed by the way it works. -Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that: - -* You write your code inside Squeak -* You debug, inspect and interact your code inside squeak -* You run your code inside Squeak -* You can install Squeak on virtually any platform, including mobile phones, fairly easily - -Everything lives inside Squeak. It's very weird to picture this without actually trying it, so I suggest you "download it":http://www.squeak.org/Download/ and give it a try: it will definitely be an unusual but intriguing experience. - -Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external version control systems and other common tools familiar to traditional programmers simply loose their purpose. - -h4. To get you started... - -* "Official Squeak Web Site":http://www.squeak.org/ -* "Squeak by Example":http://squeakbyexample.org/ -* "SqueakLand":http://www.squeakland.org/ -* "Ruby's Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk":http://www.infoq.com/articles/smalltalk-comeback-schwartz -* "FLOSS Weekly 29: Dan Ingalls":http://twit.tv/floss29 - -h3(#ocaml). OCaml - -Like Smalltalk, "OCaml":http://caml.inria.fr/ has been getting more attention recently than in the past. Sure, not everyone is planning to learn is these days, but after reading "this article":http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/ I admit I was eager to give it a proper try. - -Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language syntax with custom operators and constructs. - -Additionally, the "OCaml Batteries Included":http://batteries.forge.ocamlcore.org/ project was created as an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is still in alpha stage, it definitely "looks promising":http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/. - -h4. To get you started... - -* "Official Caml Web Site":http://caml.inria.fr/ -* "Objective Caml Tutorial":http://www.ocaml-tutorial.org/ -* "A Concise Introduction to Objective Caml":http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html -* "The OCaml Alliance Network":http://wiki.cocan.org/ -* "OCaml News":http://ocamlnews.blogspot.com/ -* "OCaml Batteries Included":http://batteries.forge.ocamlcore.org/ - -h3. Factor - -"Factor":http://factorcode.org/ is to Forth what "Clojure":http://clojure.org is to Common Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it's stack-based, concatenative and has postfix notation. -While this is enough to put some people off, if you digg deeper you'll discover that Factor offers all the most important features available in contemporary programming languages: garbage collection, dynamic typing, an object system, ... they're just presented in a very different way: - -bq. "Learning Factor is tough. One reason for this is that Factor is very different from other programming languages. Programmers today are used to imperative programming languages where data is stored and passed around in named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small fraction of words. Nobody intends to change any of this; it's a feature, not a bug!" - -p(((. &ndash; Daniel Ehrenberg, ??"Learning Factor":http://useless-factor.blogspot.com/2008/01/learning-factor.html?? - -Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get past that, it can be as useful as any other language, if not more. The "Furnace":http://docs.factorcode.org/content/article-furnace.html web framework, which powers the "Concatenative":http://concatenative.org/ wiki, is entirely built in Factor and runs on top of a Factor web server. - -h4. To get you started... - -* "Official Factor Web Site":http://factorcode.org/ -* "Factor on the Concatenative Wiki":http://concatenative.org/wiki/view/Factor -* "Factor Documentation":http://docs.factorcode.org/ -* "Learn Factor":http://learnfactor.org/ -* "Planet Factor":http://planet.factorcode.org/ - -h3(#lua). Lua - -"Lua":http://www.lua.org/ ("Moon" in Portuguese), is a lightweight and fast scripting language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it is definitely the less alien of the lot: if you know a tiny bit of C or Java, you'll be able to understand (and possibly write) 80% of Lua code without reading a single line of its documentation. - -Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even object-oriented approaches. More specifically, Lua's _tables_ provide a simple but powerful way to create arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through _metatables_, which allow calls to undefined functions to be _transferred_ to parent tables. - -Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that "as fast as Lua" has become a proverbial expression. -Lua found its niche in embedded applications and games development, basically everywhere there's the need to provide a fast scripting language which is also very easy to learn and extend with C or other languages. - -h4. To get you started... - -* "Official Lua Web Site":http://www.lua.org/ -* "Lua Manual":http://www.lua.org/manual/ -* "Lua-users":http://lua-users.org/ -* "Learning Lua":http://icculus.org/~theoddone33/lua/ -* "Lua for Beginners":http://lua.gts-stolberg.de/en/index.php?uml=1 - -h3(#scala). Scala - -You may not be happy to see "Scala":http://www.scala-lang.org/ in this list instead of other very valid and equally powerful languages for the Java Virtual Machine such as "Groovy":http://groovy.codehaus.org/. While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented counterparts. - -Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may be familiar to OOP lovers but also anonymous functions, currying and pattern matching which may please Haskell enthusiasts. Additionally, it's also compatible with Java: so if you use Java for work, trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with functional programming in the meantime. - -Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or PLT Scheme, learning Scala is definitely easier and will feel less alien. - -h4. To get you started... - -* "Official Scala Web Site":http://www.scala-lang.org/ -* "The Case for Scala":http://blogs.zdnet.com/Burnette/?p=690 -* "Scala Wiki":http://scala.sygneca.com/ -* "Learning Scala with Project Euler":http://grok-code.com/75/learning-scala-with-project-euler/ -* "Roundup: Scala for Java Refugees":http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees - -h3. Epilogue - -There are so many interesting programming language out there that it's very hard to keep track of all of them. I hope this list can aid you in the right direction, whichever it may be. -Some people may debate over the very essence of this article: why _choosing_ a programming language? Why spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? What's the purpose of learning something which may feel totally alien to you? - -A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop GUI application which will always run on Windows and which needs to inteface with Microsoft technologies, you'll choose C# over Haskell, there's no doubt about that. Especially if 500 developers in your company already develop in C# and you don't, as a matter of fact, have a saying on the matter. - -But what if you _could_ choose? What if you wanted to develop your own geeky command line application to automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to experiment with something totally different and potentially difficult just for the sake of learning new things? - -If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run. +If you program for fun or profit, chances are that you know C, C++, Java, PHP, Perl, Python or Ruby. These programming languages are all widely known, and, to a different degree, used in commercial applications. At least some of them can safely be considered _mainstream_, even if that word has become so overused and misused that has almost lost its original meaning, if it ever had one. +If you are earning your living by coding, it's often one of these languages that pays the bills. Nevertheless, true hackers frequently meander in other directions, exploring and discovering different paradigms and methodologies, sometimes to the most "esoteric":http://esolangs.org/wiki/Main_Page extremes. + +bq. "The most obvious common 'personality' characteristics of hackers are high intelligence, consuming curiosity, and facility with intellectual abstractions. Also, most hackers are 'neophiles', stimulated by and appreciative of novelty (especially intellectual novelty). Most are also relatively individualistic and anti-conformist." + +p((((. &ndash; Eric S. Raymond, ??"The Jargon File":http://catb.org/jargon/html/personality.html?? + +Even if you're particularly devoted to one of the languages mentioned above, it is normal to be curious about what else is out there. As the end of the year approaches, I find myself thinking about learning &ndash; or at least become acquainted with &ndash; some less known, more experimental, programming languages. +I was originally planning on learning another programming language as a New Year's Resolution, which is quite common among programmers. The most difficult task turned out to be _choosing_ a particular language: there are so many out there which makes it very hard to decide. + +This article deals with ten possible candidates, and it's far from being an exhaustive list. The programming languages described henceforth are very different from each other, but they all have one thing in common: they all stimulate my curiosity in their own, very different ways.* "Haskell":#haskell +* "Erlang":#erlang +* "Io":#io +* "PLT Scheme":#plt-scheme +* "Clojure":#clojure +* "Squeak":#squeak +* "OCaml":#ocaml +* "Factor":#factor +* "Lua":#lua +* "Scala":#scala + +h3(#haskell). Haskell + +I tried to learn Haskell in the past. Quietly, I started diving into the multitude of articles, tutorials, overviews and even books about this fascinating academic language which claims to achieve functional purity though remaining extremely useful, practical and efficient. Sadly, I'm still not able to fully grasp some of its most crucial concepts, such as "monads":http://en.wikibooks.org/wiki/Programming:Haskell_monads, but this still doesn't put me off _wishing_ to learn the language. + +If you've never enountered Haskell before, I find "The Evolution of a Haskell Programmer":http://www.willamette.edu/~fruehr/haskell/evolution.html an amusing and informative read. Although aiming to be humorous in a way, it serves a very important didascalic purpose: it is one of the most complete collections of the different paradigms and programming approaches Haskell allows. + +Besides its very elegant, pragmatic and almost-magical syntax, what really intrigues me about this language is what it offers, in terms of features: + +* 9 different "implementations":http://www.haskell.org/haskellwiki/Implementations (multiple compilers _and_ interpreters) +* Countless "standard libraries":http://haskell.org/ghc/docs/latest/html/libraries/ "packages":http://hackage.haskell.org/packages/archive/pkg-list.html which can be used to solve _any_ programming challenge +* Abundant "learning material":http://www.haskell.org/haskellwiki/Books_and_tutorials +* "Speed":http://www.haskell.org/haskellwiki/Why_Haskell_matters#The_speed_of_Haskell that rivals C and C++ +* Very mature cross-platform compatibility + +The catch? It is likely to be very different from any other language you might have encountered before, and that's probably the reason why some people find it difficult to learn and master. That being said, if you are looking for a challenging (but very rewarding, I believe) New Year's Resolution, you should definitely go for this. + +h4. To get you started... + +* "Official Haskell Wiki":http://www.haskell.org/ +* "Haskell Wikibook":http://en.wikibooks.org/wiki/Haskell +* "Real World Haskell":http://book.realworldhaskell.org/read/index.html +* "37 Reasons to Love Haskell":http://cdsmith.wordpress.com/2007/07/29/37-reasons-to-love-haskell-playing-off-the-ruby-article/ +* "Haskell for the Ruby Guy":http://antoniocangiano.com/2007/03/13/haskell-eye-for-the-ruby-guy/ +* "A-Z of Programming Languages: Haskell":http://www.techworld.com.au/article/261007/-z_programming_languages_haskell +* "Learn you a Haskell for Great Good!":http://learnyouahaskell.com/ +* "Haskell Hacking":http://cgi.cse.unsw.edu.au/~dons/blog/2008/05/16 + +h3. Erlang + +"Erlang":http://erlang.org/ is a concurrent programming language originally developed by Ericsson for their real-time applications. It goes without saying that with these premise, Erlang seems the most natural answer to all concurrency problems you may encounter in your life as a programmer. +Developing with concurrency in mind feels natural and easy in Erlang, and the performance of Erlang-powered systems can be unmatched. + +Quite a few interesting applications have been developed in this language, such as: + +* "CouchDB":http://couchdb.apache.org/, a popular distributed, document-oriented database +* "Yaws":http://yaws.hyber.org/, a high-performance web server +* even "Facebook Chat":http://www.facebook.com/note.php?note_id=14218138919&id=9445547199 + +The price Erlang adepts have to pay, as Damien Katz (CouchDB creator and Erlang enthusiast) "points out":http://damienkatz.net/2008/03/what_sucks_abou.html, is: + +* Awkward syntax, inspired by Prolog +* Weird if expressions +* Difficult string operations +* No classes or namespaces + +...this list could go on. Damien's article is an interesting read, enough to put anyone off learning the language if read superficially. On the other hand, it provides an invaluable resource for newcomers who wish to be prepared before taking on the challenge of learning Erlang to build their next scalable, concurrent and industry-proof application. + +h4. To get you started... + +* "Official Erlang Web Site":http://www.erlang.org/ +* "An Introduction to Erlang":http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html +* "Erlang Style Concurrency":http://www.defmacro.org/ramblings/concurrency.html +* "PlanetErlang":http://www.planeterlang.org/ +* "Erlang Projects":http://www.erlang-projects.org/ + +h3(#io). Io + +"Io":http://iolanguage.com/ is a relatively new programming language by Steve Dekorte which recently surfaced from Google's oblivion (if you tried googling for it a few months ago, you couldn't event find its home page) thanks to a short vut stimulating "article":http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html by "_why":http://whytheluckystiff.net/. It doesn't have the best name for a programming language, that's for sure, but it's definitely a breath of fresh air in terms of the way it works. + +Its unusual, minimalist and yet elegant and powerful syntax reminds of Smalltalk, but the language goes far beyond that. Io is an object-oriented, prototype-based, message-based and fully-reflective programming language. This means that you use messages like in Smalltalk, you create objects like in Javascript and every bit of your code can be inspected and passed around as you see fit. + +If you think Ruby allows fancy (and potentially dirty) tricks like metaprogramming and monkey-patching, Io takes this to a whole different level, imposing virtually no limitation to the programmer. What's truly amazing is that its grammar and syntax are so minimal that you can learn them in literally 10 minutes. After that, you can start experimenting, first with its extremely small core and then with its extension libraries and bindings. + +Io has indeed a lot of potential. Granted, it's still young and under development, but also already quite efficient and suitable for real-world tasks demanding high speed and concurrency. It is implemented in C, but Ola Bini started to design a similar language called "Ioke":http://kenai.com/projects/ioke/ for the Java Virtual Machine. + +h4. To get you started... + +* "Official Io Web Site":http://iolanguage.com/ +* "Io Repository on Github":http://github.com/stevedekorte/io/tree/master +* "Io user group":http://tech.groups.yahoo.com/group/iolanguage/ +* "Io has a very clean mirror":http://hackety.org/2008/01/05/ioHasAVeryCleanMirror.html +* "Io Notes":http://iota.flowsnake.org/ +* "Io Language Notes":http://wiki.type-z.org/index.php/Io/IoLanguage +* "Blame it on Io! A slow-paced introduction to the Io language":http://ozone.wordpress.com/2006/03/15/blame-it-on-io/ +* "Io Wikibook":http://en.wikibooks.org/wiki/Programming:Io + +h3(#plt-scheme). PLT Scheme + +I stumbled upon the "PLT Scheme web site":http://plt-scheme.org/ while browsing for different Lisp flavors about a year ago. At the time, I was determined to learn the rudiments of Lisp and I started reading a few articles and books on this old and yet still popular language. +Although I was originally put off by certain Common Lisp literature, which dismissed Scheme as an almost-heretic attempt to revitalize an venerable language, I soon found out that Scheme &ndash; and PLT Scheme in particular &ndash; is definitely worthy of attention and interest. + +Being a technical writer, I immediately became fond of the "PLT Scheme Guide":http://docs.plt-scheme.org/guide/, one of the clearest and most well-organized examples of documentation available for a programming language I've ever come across. +The manual is exquisitely crafted as a Getting Started Manual and a Reference Book at the same time, though remaining pleasant to read sequentially: a rare trait in technical documentation. Best of all, it's free: you simply have no real excuse not to read it. + +Besides its excellent documentation, PLT Scheme feels like a fresh and modern implementation of one of the two most important dialects of Lisp. It's cross-platform, it has an extensive "collection of packages":http://planet.plt-scheme.org/ and a very active community behind it. +After my first attempt to learn Haskell, I felt compelled to try out PLT Scheme and it immediately felt much easier and more user friendly to learn, partly because of "DrScheme":http://download.plt-scheme.org/drscheme/ a dedicated IDE/learning tool optimized to get you started and feel comfortable with the language. +Caveats? None, unless you have an adversion for parenthesis, that is. + +h4. To get you started... + +* "Official PLT Scheme Web Site":http://plt-scheme.org/ +* "PLT Scheme Guide":http://docs.plt-scheme.org/guide/index.html +* "PLaneT":http://planet.plt-scheme.org/ +* "Quick: An Introduction to PLT Scheme with Pictures":http://docs.plt-scheme.org/quick/ +* "More: Systems Programming with PLT Scheme":http://docs.plt-scheme.org/more/ + +h3(#clojure). Clojure + +"Clojure":http://clojure.org/ is the most recent and notable attempt to bring Lisp back to life and ready to face the challenges posed to IT systems by the new century: concurrency and scalability. Because it runs on the Java Virtual Machine, you also get Java interoperability for free, in a more Lispy flavour. Although I'm a bit reluctant to deal with anything related to Java nowadays, Clojure's approach makes it more appealing. + +Unlike other Lisps (and Schemes) you may have encountered before, Clojure comes with some interesting additions: + +* "Multimethods":http://clojure.org/multimethods +* "Agents asynchronous actions":http://clojure.org/agents +* Some interestings "special forms":http://clojure.org/special_forms +* Many pre-built "data structures":http://clojure.org/data_structures, like Vectors, Maps, Sets, Collections, ... + +Despite all this, Rich Hickey became increasingly popular both in the Lisp and Java world for creating such an interesting and well-designed language. Unlike with many new (and old) programming languages, I have yet to find a single blog post or article which is seriously criticizing Clojure in any way. + +h4. To get you started... + +* "Official Clojure Web Site":http://clojure.org +* "Clojure User Group":http://groups.google.com/group/clojure +* "Clojure presentation on InfoQ":http://www.infoq.com/presentations/hickey-clojure +* "Trying Clojure":http://netzhansa.blogspot.com/2008/10/trying-clojure.html +* "My first look at Clojure":http://groups.google.com/group/clojure/msg/f038decc18c7da37 +* "Enclojure":http://enclojure.net/Index.html + +h3(#squeak). Squeak + +"Squeak":http://www.squeak.org/ has become one of the most popular Smalltalk implementations available. It has been used in some very interesting projects: + +* "EToys":http://wiki.laptop.org/go/Smalltalk_Development_on_XO, a kids-oriented but powerful development environment built in Squeak, was included as part of the educational sofware suite of the "OLPC":http://www.laptop.org. +* "Seaside":http://www.seaside.st/ is a modern and very productive web framework running on Squeak. +* "Croquet":http://www.croquetproject.org/index.php/Main_Page is a development solution to build complex, multi-user virtual worlds. + +If you ask "Randal Schwartz":http://www.stonehenge.com/merlyn/, he'll explain you "why":http://www.infoq.com/articles/smalltalk-comeback-schwartz Squeak and Smalltalk are at least worth a look. Personally, while I'm attracted by Smalltalk's unique approach to programming and its friendly syntax, I am still a bit overwhelmed by the way it works. +Squeak, and Smalltalk in general, runs inside (literally) a virtual machine written in Squeak itself. This means that: + +* You write your code inside Squeak +* You debug, inspect and interact your code inside squeak +* You run your code inside Squeak +* You can install Squeak on virtually any platform, including mobile phones, fairly easily + +Everything lives inside Squeak. It's very weird to picture this without actually trying it, so I suggest you "download it":http://www.squeak.org/Download/ and give it a try: it will definitely be an unusual but intriguing experience. + +Smalltalk takes programming to a whole different level, which is simply unimaginable for other languages. In return, it asks you to fully embrace the Smalltalk way of doing things, according to which external text editors, external version control systems and other common tools familiar to traditional programmers simply loose their purpose. + +h4. To get you started... + +* "Official Squeak Web Site":http://www.squeak.org/ +* "Squeak by Example":http://squeakbyexample.org/ +* "SqueakLand":http://www.squeakland.org/ +* "Ruby's Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk":http://www.infoq.com/articles/smalltalk-comeback-schwartz +* "FLOSS Weekly 29: Dan Ingalls":http://twit.tv/floss29 + +h3(#ocaml). OCaml + +Like Smalltalk, "OCaml":http://caml.inria.fr/ has been getting more attention recently than in the past. Sure, not everyone is planning to learn is these days, but after reading "this article":http://enfranchisedmind.com/blog/2008/04/14/useful-things-about-static-typing/ I admit I was eager to give it a proper try. + +Despite being statically typed, OCaml offers some of the features which are common in dynamically typed languages like Ruby, such as duck typing, the possibility of creating Domain-Specific Languages and even extending the language syntax with custom operators and constructs. + +Additionally, the "OCaml Batteries Included":http://batteries.forge.ocamlcore.org/ project was created as an attempt to bundle a standard set of commonly-used library together with the language core. Even if this project is still in alpha stage, it definitely "looks promising":http://dutherenverseauborddelatable.wordpress.com/2008/11/07/a-taste-of-ocaml-batteries-included/. + +h4. To get you started... + +* "Official Caml Web Site":http://caml.inria.fr/ +* "Objective Caml Tutorial":http://www.ocaml-tutorial.org/ +* "A Concise Introduction to Objective Caml":http://www.csc.villanova.edu/~dmatusze/resources/ocaml/ocaml.html +* "The OCaml Alliance Network":http://wiki.cocan.org/ +* "OCaml News":http://ocamlnews.blogspot.com/ +* "OCaml Batteries Included":http://batteries.forge.ocamlcore.org/ + +h3. Factor + +"Factor":http://factorcode.org/ is to Forth what "Clojure":http://clojure.org is to Common Lisp: a reincarnation of an ancient language in a more modern and practical form. In the specific case, although it borrows from Lisp and Self as well, Factor retains the main characteristics of its ancestor: it's stack-based, concatenative and has postfix notation. +While this is enough to put some people off, if you digg deeper you'll discover that Factor offers all the most important features available in contemporary programming languages: garbage collection, dynamic typing, an object system, ... they're just presented in a very different way: + +bq. "Learning Factor is tough. One reason for this is that Factor is very different from other programming languages. Programmers today are used to imperative programming languages where data is stored and passed around in named variables (or function calls, which name their variables). Factor is the opposite of this. A lot of code tends to be written in a functional style, and even more jarringly, variables are rare, only referenced in a small fraction of words. Nobody intends to change any of this; it's a feature, not a bug!" + +p(((. &ndash; Daniel Ehrenberg, ??"Learning Factor":http://useless-factor.blogspot.com/2008/01/learning-factor.html?? + +Like Haskell, Factor demands a completely different programming approach to what you may be used to, but once you get past that, it can be as useful as any other language, if not more. The "Furnace":http://docs.factorcode.org/content/article-furnace.html web framework, which powers the "Concatenative":http://concatenative.org/ wiki, is entirely built in Factor and runs on top of a Factor web server. + +h4. To get you started... + +* "Official Factor Web Site":http://factorcode.org/ +* "Factor on the Concatenative Wiki":http://concatenative.org/wiki/view/Factor +* "Factor Documentation":http://docs.factorcode.org/ +* "Learn Factor":http://learnfactor.org/ +* "Planet Factor":http://planet.factorcode.org/ + +h3(#lua). Lua + +"Lua":http://www.lua.org/ ("Moon" in Portuguese), is a lightweight and fast scripting language which can be easily embedded in other systems. Compared to the other languages mentioned in this article, it is definitely the less alien of the lot: if you know a tiny bit of C or Java, you'll be able to understand (and possibly write) 80% of Lua code without reading a single line of its documentation. + +Despite its simplicity, Lua is considered a multi-paradigm language supporting imperative, functional and even object-oriented approaches. More specifically, Lua's _tables_ provide a simple but powerful way to create arrays, hashes and even classes (or better, prototypes). Simple (and multiple) inheritance is achieved through _metatables_, which allow calls to undefined functions to be _transferred_ to parent tables. + +Lua programs are not interpreted in the traditional way: they are compiled to bytecode and then executed in the Lua Virtual Machine. As a result, Lua code tends to be executed much faster than other interpreted languages, so fast that "as fast as Lua" has become a proverbial expression. +Lua found its niche in embedded applications and games development, basically everywhere there's the need to provide a fast scripting language which is also very easy to learn and extend with C or other languages. + +h4. To get you started... + +* "Official Lua Web Site":http://www.lua.org/ +* "Lua Manual":http://www.lua.org/manual/ +* "Lua-users":http://lua-users.org/ +* "Learning Lua":http://icculus.org/~theoddone33/lua/ +* "Lua for Beginners":http://lua.gts-stolberg.de/en/index.php?uml=1 + +h3(#scala). Scala + +You may not be happy to see "Scala":http://www.scala-lang.org/ in this list instead of other very valid and equally powerful languages for the Java Virtual Machine such as "Groovy":http://groovy.codehaus.org/. While there was no doubt on whether Clojure should have been included or not, I was a bit hesitant to include Scala. In the end, I chose to do so simply because Scala fits better in this list than other languages: as you should have noticed by now, I am somehow more inclined to learn functional languages as opposed to their object-oriented counterparts. + +Scala is both object oriented and functional. It offers the best of both worlds: classes, traits and mixins which may be familiar to OOP lovers but also anonymous functions, currying and pattern matching which may please Haskell enthusiasts. Additionally, it's also compatible with Java: so if you use Java for work, trying out Scala for pleasure is definitely the most logical next step, especially if you want to experiment with functional programming in the meantime. + +Compared to learning a fully-functional (no pun intended) language like Haskell, Clojure or PLT Scheme, learning Scala is definitely easier and will feel less alien. + +h4. To get you started... + +* "Official Scala Web Site":http://www.scala-lang.org/ +* "The Case for Scala":http://blogs.zdnet.com/Burnette/?p=690 +* "Scala Wiki":http://scala.sygneca.com/ +* "Learning Scala with Project Euler":http://grok-code.com/75/learning-scala-with-project-euler/ +* "Roundup: Scala for Java Refugees":http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugees + +h3. Epilogue + +There are so many interesting programming language out there that it's very hard to keep track of all of them. I hope this list can aid you in the right direction, whichever it may be. +Some people may debate over the very essence of this article: why _choosing_ a programming language? Why spending time and energy in a task which may lead to a lot of confusion in your mind and lead you nowhere? What's the purpose of learning something which may feel totally alien to you? + +A programming language is ultimately just a tool to get your job done. If you have to write an end-user, desktop GUI application which will always run on Windows and which needs to inteface with Microsoft technologies, you'll choose C# over Haskell, there's no doubt about that. Especially if 500 developers in your company already develop in C# and you don't, as a matter of fact, have a saying on the matter. + +But what if you _could_ choose? What if you wanted to develop your own geeky command line application to automate a particular task for yourself, and not because someone else tells you to do so? Would you be willing to experiment with something totally different and potentially difficult just for the sake of learning new things? + +If the answer is yes, then you should take a look at this list again. Not now, maybe not this month or this year, but when you feel the time is right, and give one of these languages a shot. It may not end well (so far I attempted to learn Haskell twice, with no luck), but I promise you it will be worthwhile, in the long run. If you already mastered some of these languages already, or even all of them, be assured that they're plenty out there ready to be discovered and open your mind even more. Or, if you prefer, there are a lot of minds out there which may need guidance in learning and discovery. Help them. Write articles, tutorials, books, educate and evangelize: ultimately, that will be your greatest reward.
M content/articles/10-reasons-to-learn-ruby.textilecontent/articles/10-reasons-to-learn-ruby.textile

@@ -1,4 +1,6 @@

----- +summary: "Ten possible reasons to learn the Ruby Programming Language. Mostly related to the language's syntax and most useful idioms." +popular: true permalink: 10-reasons-to-learn-ruby filters_pre: - erb

@@ -78,13 +80,13 @@ :author: IronRuby

:url: http://ironruby.blogspot.com :id: 57 :body: |- - - Hi, - - Nice and happy to see your 10 Reasons added to "10 another advantages":http://ironruby.blogspot.com/2007/09/many-reasons-to-fall-in-love-with.html on a blog that is based on IronRuby. - - The Author claims 10 + 10 Advantages as 100 rather tan 20. - + + Hi, + + Nice and happy to see your 10 Reasons added to "10 another advantages":http://ironruby.blogspot.com/2007/09/many-reasons-to-fall-in-love-with.html on a blog that is based on IronRuby. + + The Author claims 10 + 10 Advantages as 100 rather tan 20. + Happy Reading there. - :date: 2007-09-08 10:35:28 +02:00 :author: FlySwat

@@ -165,17 +167,17 @@ :author: wefwefwef

:url: "" :id: 72 :body: |- - 10 reasons to NOT learn ruby: - - 1. It's Shit - 2. It's Shit - 3. It's Shit - 4. It's Shit - 5. It's Shit - 6. It's Shit - 7. It's Shit - 8. It's Shit - 9. It's Shit + 10 reasons to NOT learn ruby: + + 1. It's Shit + 2. It's Shit + 3. It's Shit + 4. It's Shit + 5. It's Shit + 6. It's Shit + 7. It's Shit + 8. It's Shit + 9. It's Shit 10. It's Shit - :date: 2007-09-14 12:15:41 +02:00 :author: Anders Persson

@@ -219,7 +221,7 @@ :author: toby

:url: "" :id: 89 :body: |- - Python, en, i like it. + Python, en, i like it. Ruby, nothing - :date: 2007-10-07 13:32:09 +02:00 :author: riffraff

@@ -308,182 +310,182 @@ - ruby

type: article toc: true ----- -h3. Preamble - -I discovered Ruby fairly recently, through the excellent Ruby on Rails framework[1]. Although I don't consider myself a Ruby expert by any means, I read the PickAxe[2], I've coded a few utilities for my personal use in Ruby and I'm currently developing with Rails during my free time. -Ruby is currently my programming language of choice; I started off with Turbo Pascal in high school, discovered C and C++ at university, did my thesis in Java and learned PHP from scratch because I wanted to learn how to make websites quickly and easily. I guess I feel compelled to code sometimes, more as a form of entertainment than anything else. Rather dissatisfied with what I tried language-wise, I was determined to start learning either Python or Ruby. I chose the latter because I didn't want incorrect indentation to break my code[3], and here I am, heaping praise upon it. - -There are plenty[4] of introductions, tutorials, articles and essays of different sorts which aim to guide the novice and advise the guru on how to get the most out of Ruby. This article, however, is not one of them. - -It's more of a modest, humble, and incomplete list of a few reasons which may (or may not) entice you to use Ruby or at least play with it a bit. A word of caution: if you are using another programming language for work or whatever, don't complain to me if you don't want to use it anymore - that's exactly what happened to me, but luckily, it didn't matter. Ruby is a very beautiful and elegant language, but like all things of this sort, it may well poison your mind and corrupt your soul... - -You have been warned. -h3. Why learn Ruby? - -h4. #1 - You get all the treats without the tricks - -Ruby borrows from all the best programming languages out there, from smalltalk to Java, Perl to Python[5]. Basically, here's the features and functionalities Ruby gives you which you may have seen elsewhere: - -* _Exceptions:_ Believe it or not, exceptions are one of the most important things to master when developing any kind of application. PHP4 programmers probably won't know anything about them and they'll tell you to just print stuff on the screen or use their "extremely advanced" class for error handling. Please, ignore them. Fortunately for all of us, Ruby comes with try/catch (or better, begin/rescue) blocks and a series of predefined, extensible Exceptions to handle errors properly. -* _Namespaces:_ Ruby modules make excellent and easy-to-use namespaces, for the joy of Java and C++ enthusiasts. -* _Built-in Regular Expressions:_ For all the Perl monkeys, you can put something between slashes and it will become a regular expression, ready to be matched with a =~ operator. -* _Overloadable operators:_ Ruby lets you define operators like +, -, etc., for any of your classes. -* _Packages:_ Called "gems", they really are solid and precious indeed...and they work! Packages support dependencies, and they can be either cross-platform or platform-dependent. -* _Interactive Shell:_ the Interactive Ruby Shell can be used to test Ruby code instantly, similar to the Python console. -* _Unit Testing_: The @Test::Unit@ module makes things so easy that you really don't have any excuse not to test your code. - - -h4. #2 - You'll love the little things - -Ruby is elegant. Why's that? Because it doesn't focus on making code _concise_ so much as _readable and usable_. Here are some tips to help you out: - -* You can use both _if_ and _unless_ in condition statements. Of course you can just use _if_ and negate the condition, but _unless_ can be less error-prone at times. Furthermore, you can use both operators as conditional modifiers, after a statement rather than before: _order.new unless order.exists_. -* You can use question marks and exclamation marks at the end of your methods. Although no convention is enforced, ? is added if the method should return true or false, while ! is used to clarify that the method does something forcefully, like destroying a database record, chopping off the last character of a string, etc. -* You can use the _alias_ directives to create an alias for a method already defined. In this way you can have an _exist_ and an _exists_ method at no additional cost or repetition. -* You can use the _attr_reader_, _attr_writer_ or _attr_accessor_ directives to automatically generate getter and setter methods for specified class members. -* Some naming conventions are enforced for your own sanity: constants, classes and modules are capitalized, methods and members must start with a lowercase letter; global variables are prepended by a $, instance variables by <code>@</code> and class variables by <code>@@</code>; etc. -* Parentheses are optional in method calls. You can therefore write _File.open("/home/h3rald/test.txt")_ or simply _File.open "/home/h3rald/test.txt"_, which is particularly handy with methods that don't take parameters. - - -h4. #3 - You won't ever use a semicolon again - -You want to add another instruction? Just go on the next line. Hit <return> and you're done. In Ruby, like in Python, newlines matter and you don't have to remember to end your instructions with a semicolon. Unfortunately this means that you won't be able to write your whole program in a single line of code, like the C++ folks... that's too bad, isn't it? - -*UPDATE:* Indeed you CAN use semicolons as line delimiters in Ruby as well, the point, however, is that you don't have to. - -h4. #4 - Everything is an object, as it should be - -When I studied Java they taught me that everything is an object. - -_- "So 14 and 374346.678 are objects then?"_ -_- "No, silly, they are numbers!"_ - -In Ruby, numbers, strings, Boolean values _et al_ are objects. Really. This means you'll write things like: - -<% highlight :ruby do %> -"YOU SHOULDN'T ALWAYS USE CAPITALS".downcase #=> outputs "you shouldn't always use capitals" --12.abs #=> outputs 12 -<% end %> - -instead of something like: - -<% highlight :ruby do %> -# PHP Code - -strtolower("YOU SHOULDN'T ALWAYS USE CAPITALS"); -abs(-12); -<% end %> - -You save time, you save brackets, and it just makes more sense. - -h4. #5 - Everything has a value - -Or "you'll hardly ever use return to return values". In a nutshell, all Ruby instructions return a value, even variable assignments, so you don't really need to use the "return" keyword at the end of a method; the value of the last assignment or _any_ other expression will always be returned. - -h4. #6 - You can alter your environment in any way you like - -The first time I saw this, it really freaked me out. Imagine a typical programming situation: you start using a system class or a class written by someone else and you notice that you'd like to have an additional method. At this point you have a few ways to handle this in ordinary programming languages: -s -* You modify the developer's source code, if you have access to it. This is normally not a good idea, and you shouldn't do it. -* You derive a new class from the original one, and you implement the new method there. This is a good idea, but it could be overkill for just one method, and you may have to update some of your other code accordingly. -* You give up, and you just create the method outside the class, somewhere else. This can be done, but it is not very elegant and goes against Object Oriented Programming. - -In Ruby, you can simply add the method to the original class, without having to hack the original source code, and even for system classes! You want to have a method to automatically convert a measurement from meters to feet? You can simply extend the Numeric class as follows: - -<% highlight :ruby do %> -class Numeric - def feet - self*3.2808399 - end -end -<% end %> - -From now on, all your numbers will have a _feet_ method, which can be used just like any other method that was originally defined for the class: - -<% highlight :ruby do %> -5.feet #=> Returns 16.4041995 -<% end %> - -Basically, Ruby classes are never closed and can be modified at any time from anywhere. Use with care, of course. - -h4. #7 You won't get unicorns from birds and horses, but you'll still get donkeys if you want - -I distinctly remember my C++ professor at university using animals to illustrate key object-oriented concepts like classes and inheritance. Weird things came in when she tried to explain multiple inheritance to inherit a class Pegasus from a class Bird and a class Horse. It had methods like "fly" and "neigh"... crazy stuff, anyhow, Ruby does not offer multiple inheritance. -This seems to be the trend, after all, and of course it's up to tastes. I don't quite fancy multiple inheritances, as they may lead to unpredictable things. Nevertheless, it is possible to create "mix-ins" using Ruby modules, so that members and methods defined in a module will be added to a particular class if the module is included in it. - -h4. #8 You don't really need XML - -XML is a nice, general-purpose markup language which can be processed by every programming language and used everywhere. Unfortunately, it can also be quite verbose to write, very difficult to parse, and let's be honest, it's not really readable at first glance in many cases, unlike the following code snippet: - -<% highlight :yaml do %> -regexp: !ruby/regexp /a-zA-Z/ -number: 4.7 -string: a string -<% end %> - -This is definitely easier and more readable than XML, isn't it? Welcome to YAML, Ruby's favorite markup (but not really[6]) language, which can be used to represent any Ruby object in a simple, clear and yet complete way. -Ruby _can_ parse XML, but YAML's simplicity convinced a lot of developers to use it as an alternative to XML for configuration files, for example (Rails does this). -The code snipped presented before was obtained by executing the following line of Ruby code: - -<% highlight :ruby do %> -{"string" => "a string", "number" => 4.7, "regexp" => /a-zA-Z/}.to_yaml -<% end %> - -The _to_yaml_ method is defined for the Object class, which is the father of all of the other classes, and thus it is available in all Ruby objects. This means that you can convert anything into YAML _and_ re-convert anything back into Ruby objects, with total transparency for the developer. So much for parsing, huh? - -h4. #9 Lambda is much more than a Greek letter - -Ruby borrows some magic from Lisp and Perl with Proc objects and blocks. Procs are _"blocks of code that have been bound to a set of local variables. Once bound, the code may be called in different contexts and still access those variables." _[7] Consider the following: - -<% highlight :ruby do %> - def gen_times(factor) - return Proc.new {|n| n*factor } - end - - times3 = gen_times(3) - times5 = gen_times(5) - - times3.call(12) #=> 36 - times5.call(5) #=> 25 - times3.call(times5.call(4)) #=> 60 -<% end %> - -I could have used the _lambda_ method instead of _Proc.new_ and gotten the same result. This should ring a bell for people who know Perl and Python (or Lisp)[8]. You can do the same thing in PHP as well, but most people don't really use the function.[9] - -Additionally, Ruby makes extensive use of blocks, sort of "unborn Procs"[10], for example, to iterate the contents of an object and execute some code, like the _each_ method available for the Array class: - -<% highlight :ruby do %> -[1, 2, 4, 6, 8].each {|c| puts c*2} #=> outputs each element multiplied by 2 in a new line. -<% end %> - -Should the code in the block exceed one line, you're advised (but not required) to include the block within _do ... end_ instead of using braces. Ruby folks don't like braces much, really. - -h4. #10 - You can go on Rails - -Last but not least, you can always use Ruby on Rails for developing web applications. Deployment may not be as easy as it is with PHP, but Rails was built in Ruby because Ruby has features no other language can offer. - -h3. Conclusion - -Time's up. You've probably made up your mind about Ruby already, and you are either playing with it already, or you're totally ignoring it. However, the next time you're frustrated because your code looks ugly and you think you could have done the same thing with half the code you got, don't blame me! - -h3. Notes - -fn1. "Ruby on Rails":http://www.rubyonrails.org, MVC Web Development Framework. - -fn2. "Programming Ruby (2nd Ed.)":http://www.pragmaticprogrammer.com/title/ruby/index.html, by Dave Thomas & others, Pragmatic Programmers, 2004 - -fn3. Not entirely correct, but sort of. For more information on Python's indentation rules and myths, read "Python: Myths about Indentation":http://www.secnetix.de/~olli/Python/block_indentation.hawk. - -fn4. For a list of Ruby tutorials, refer to the "Documentation":http://www.ruby-lang.org/en/documentation/ section of the Official Ruby Website. - -fn5. For more information on Ruby, and in particular on the similarities and differences with other languages, refer to "Ruby from Other Languages":http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/. - -fn6. YAML is Not a Markup Language. - -fn7. Definition and example taken from the official Ruby documentation for class "Proc":http://www.ruby-doc.org/core/classes/Proc.html. - -fn8. For some example on lambda functions in Python, see "Python: Lambda Functions":http://www.secnetix.de/~olli/Python/lambda_functions.hawk. - -fn9. For examples of "lambda functions" in PHP using create_function(), see "this":http://www.webmasterworld.com/forum88/7414.htm. - +h3. Preamble + +I discovered Ruby fairly recently, through the excellent Ruby on Rails framework[1]. Although I don't consider myself a Ruby expert by any means, I read the PickAxe[2], I've coded a few utilities for my personal use in Ruby and I'm currently developing with Rails during my free time. +Ruby is currently my programming language of choice; I started off with Turbo Pascal in high school, discovered C and C++ at university, did my thesis in Java and learned PHP from scratch because I wanted to learn how to make websites quickly and easily. I guess I feel compelled to code sometimes, more as a form of entertainment than anything else. Rather dissatisfied with what I tried language-wise, I was determined to start learning either Python or Ruby. I chose the latter because I didn't want incorrect indentation to break my code[3], and here I am, heaping praise upon it. + +There are plenty[4] of introductions, tutorials, articles and essays of different sorts which aim to guide the novice and advise the guru on how to get the most out of Ruby. This article, however, is not one of them. + +It's more of a modest, humble, and incomplete list of a few reasons which may (or may not) entice you to use Ruby or at least play with it a bit. A word of caution: if you are using another programming language for work or whatever, don't complain to me if you don't want to use it anymore - that's exactly what happened to me, but luckily, it didn't matter. Ruby is a very beautiful and elegant language, but like all things of this sort, it may well poison your mind and corrupt your soul... + +You have been warned. +h3. Why learn Ruby? + +h4. #1 - You get all the treats without the tricks + +Ruby borrows from all the best programming languages out there, from smalltalk to Java, Perl to Python[5]. Basically, here's the features and functionalities Ruby gives you which you may have seen elsewhere: + +* _Exceptions:_ Believe it or not, exceptions are one of the most important things to master when developing any kind of application. PHP4 programmers probably won't know anything about them and they'll tell you to just print stuff on the screen or use their "extremely advanced" class for error handling. Please, ignore them. Fortunately for all of us, Ruby comes with try/catch (or better, begin/rescue) blocks and a series of predefined, extensible Exceptions to handle errors properly. +* _Namespaces:_ Ruby modules make excellent and easy-to-use namespaces, for the joy of Java and C++ enthusiasts. +* _Built-in Regular Expressions:_ For all the Perl monkeys, you can put something between slashes and it will become a regular expression, ready to be matched with a =~ operator. +* _Overloadable operators:_ Ruby lets you define operators like +, -, etc., for any of your classes. +* _Packages:_ Called "gems", they really are solid and precious indeed...and they work! Packages support dependencies, and they can be either cross-platform or platform-dependent. +* _Interactive Shell:_ the Interactive Ruby Shell can be used to test Ruby code instantly, similar to the Python console. +* _Unit Testing_: The @Test::Unit@ module makes things so easy that you really don't have any excuse not to test your code. + + +h4. #2 - You'll love the little things + +Ruby is elegant. Why's that? Because it doesn't focus on making code _concise_ so much as _readable and usable_. Here are some tips to help you out: + +* You can use both _if_ and _unless_ in condition statements. Of course you can just use _if_ and negate the condition, but _unless_ can be less error-prone at times. Furthermore, you can use both operators as conditional modifiers, after a statement rather than before: _order.new unless order.exists_. +* You can use question marks and exclamation marks at the end of your methods. Although no convention is enforced, ? is added if the method should return true or false, while ! is used to clarify that the method does something forcefully, like destroying a database record, chopping off the last character of a string, etc. +* You can use the _alias_ directives to create an alias for a method already defined. In this way you can have an _exist_ and an _exists_ method at no additional cost or repetition. +* You can use the _attr_reader_, _attr_writer_ or _attr_accessor_ directives to automatically generate getter and setter methods for specified class members. +* Some naming conventions are enforced for your own sanity: constants, classes and modules are capitalized, methods and members must start with a lowercase letter; global variables are prepended by a $, instance variables by <code>@</code> and class variables by <code>@@</code>; etc. +* Parentheses are optional in method calls. You can therefore write _File.open("/home/h3rald/test.txt")_ or simply _File.open "/home/h3rald/test.txt"_, which is particularly handy with methods that don't take parameters. + + +h4. #3 - You won't ever use a semicolon again + +You want to add another instruction? Just go on the next line. Hit <return> and you're done. In Ruby, like in Python, newlines matter and you don't have to remember to end your instructions with a semicolon. Unfortunately this means that you won't be able to write your whole program in a single line of code, like the C++ folks... that's too bad, isn't it? + +*UPDATE:* Indeed you CAN use semicolons as line delimiters in Ruby as well, the point, however, is that you don't have to. + +h4. #4 - Everything is an object, as it should be + +When I studied Java they taught me that everything is an object. + +_- "So 14 and 374346.678 are objects then?"_ +_- "No, silly, they are numbers!"_ + +In Ruby, numbers, strings, Boolean values _et al_ are objects. Really. This means you'll write things like: + +<% highlight :ruby do %> +"YOU SHOULDN'T ALWAYS USE CAPITALS".downcase #=> outputs "you shouldn't always use capitals" +-12.abs #=> outputs 12 +<% end %> + +instead of something like: + +<% highlight :ruby do %> +# PHP Code + +strtolower("YOU SHOULDN'T ALWAYS USE CAPITALS"); +abs(-12); +<% end %> + +You save time, you save brackets, and it just makes more sense. + +h4. #5 - Everything has a value + +Or "you'll hardly ever use return to return values". In a nutshell, all Ruby instructions return a value, even variable assignments, so you don't really need to use the "return" keyword at the end of a method; the value of the last assignment or _any_ other expression will always be returned. + +h4. #6 - You can alter your environment in any way you like + +The first time I saw this, it really freaked me out. Imagine a typical programming situation: you start using a system class or a class written by someone else and you notice that you'd like to have an additional method. At this point you have a few ways to handle this in ordinary programming languages: +s +* You modify the developer's source code, if you have access to it. This is normally not a good idea, and you shouldn't do it. +* You derive a new class from the original one, and you implement the new method there. This is a good idea, but it could be overkill for just one method, and you may have to update some of your other code accordingly. +* You give up, and you just create the method outside the class, somewhere else. This can be done, but it is not very elegant and goes against Object Oriented Programming. + +In Ruby, you can simply add the method to the original class, without having to hack the original source code, and even for system classes! You want to have a method to automatically convert a measurement from meters to feet? You can simply extend the Numeric class as follows: + +<% highlight :ruby do %> +class Numeric + def feet + self*3.2808399 + end +end +<% end %> + +From now on, all your numbers will have a _feet_ method, which can be used just like any other method that was originally defined for the class: + +<% highlight :ruby do %> +5.feet #=> Returns 16.4041995 +<% end %> + +Basically, Ruby classes are never closed and can be modified at any time from anywhere. Use with care, of course. + +h4. #7 You won't get unicorns from birds and horses, but you'll still get donkeys if you want + +I distinctly remember my C++ professor at university using animals to illustrate key object-oriented concepts like classes and inheritance. Weird things came in when she tried to explain multiple inheritance to inherit a class Pegasus from a class Bird and a class Horse. It had methods like "fly" and "neigh"... crazy stuff, anyhow, Ruby does not offer multiple inheritance. +This seems to be the trend, after all, and of course it's up to tastes. I don't quite fancy multiple inheritances, as they may lead to unpredictable things. Nevertheless, it is possible to create "mix-ins" using Ruby modules, so that members and methods defined in a module will be added to a particular class if the module is included in it. + +h4. #8 You don't really need XML + +XML is a nice, general-purpose markup language which can be processed by every programming language and used everywhere. Unfortunately, it can also be quite verbose to write, very difficult to parse, and let's be honest, it's not really readable at first glance in many cases, unlike the following code snippet: + +<% highlight :yaml do %> +regexp: !ruby/regexp /a-zA-Z/ +number: 4.7 +string: a string +<% end %> + +This is definitely easier and more readable than XML, isn't it? Welcome to YAML, Ruby's favorite markup (but not really[6]) language, which can be used to represent any Ruby object in a simple, clear and yet complete way. +Ruby _can_ parse XML, but YAML's simplicity convinced a lot of developers to use it as an alternative to XML for configuration files, for example (Rails does this). +The code snipped presented before was obtained by executing the following line of Ruby code: + +<% highlight :ruby do %> +{"string" => "a string", "number" => 4.7, "regexp" => /a-zA-Z/}.to_yaml +<% end %> + +The _to_yaml_ method is defined for the Object class, which is the father of all of the other classes, and thus it is available in all Ruby objects. This means that you can convert anything into YAML _and_ re-convert anything back into Ruby objects, with total transparency for the developer. So much for parsing, huh? + +h4. #9 Lambda is much more than a Greek letter + +Ruby borrows some magic from Lisp and Perl with Proc objects and blocks. Procs are _"blocks of code that have been bound to a set of local variables. Once bound, the code may be called in different contexts and still access those variables." _[7] Consider the following: + +<% highlight :ruby do %> + def gen_times(factor) + return Proc.new {|n| n*factor } + end + + times3 = gen_times(3) + times5 = gen_times(5) + + times3.call(12) #=> 36 + times5.call(5) #=> 25 + times3.call(times5.call(4)) #=> 60 +<% end %> + +I could have used the _lambda_ method instead of _Proc.new_ and gotten the same result. This should ring a bell for people who know Perl and Python (or Lisp)[8]. You can do the same thing in PHP as well, but most people don't really use the function.[9] + +Additionally, Ruby makes extensive use of blocks, sort of "unborn Procs"[10], for example, to iterate the contents of an object and execute some code, like the _each_ method available for the Array class: + +<% highlight :ruby do %> +[1, 2, 4, 6, 8].each {|c| puts c*2} #=> outputs each element multiplied by 2 in a new line. +<% end %> + +Should the code in the block exceed one line, you're advised (but not required) to include the block within _do ... end_ instead of using braces. Ruby folks don't like braces much, really. + +h4. #10 - You can go on Rails + +Last but not least, you can always use Ruby on Rails for developing web applications. Deployment may not be as easy as it is with PHP, but Rails was built in Ruby because Ruby has features no other language can offer. + +h3. Conclusion + +Time's up. You've probably made up your mind about Ruby already, and you are either playing with it already, or you're totally ignoring it. However, the next time you're frustrated because your code looks ugly and you think you could have done the same thing with half the code you got, don't blame me! + +h3. Notes + +fn1. "Ruby on Rails":http://www.rubyonrails.org, MVC Web Development Framework. + +fn2. "Programming Ruby (2nd Ed.)":http://www.pragmaticprogrammer.com/title/ruby/index.html, by Dave Thomas & others, Pragmatic Programmers, 2004 + +fn3. Not entirely correct, but sort of. For more information on Python's indentation rules and myths, read "Python: Myths about Indentation":http://www.secnetix.de/~olli/Python/block_indentation.hawk. + +fn4. For a list of Ruby tutorials, refer to the "Documentation":http://www.ruby-lang.org/en/documentation/ section of the Official Ruby Website. + +fn5. For more information on Ruby, and in particular on the similarities and differences with other languages, refer to "Ruby from Other Languages":http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/. + +fn6. YAML is Not a Markup Language. + +fn7. Definition and example taken from the official Ruby documentation for class "Proc":http://www.ruby-doc.org/core/classes/Proc.html. + +fn8. For some example on lambda functions in Python, see "Python: Lambda Functions":http://www.secnetix.de/~olli/Python/lambda_functions.hawk. + +fn9. For examples of "lambda functions" in PHP using create_function(), see "this":http://www.webmasterworld.com/forum88/7414.htm. + fn10. For more detailed information on Ruby's Procs, blocks etc. refer to "Understanding Ruby blocks, Procs and methods":http://eli.thegreenplace.net/2006/04/18/understanding-ruby-blocks-procs-and-methods.
M content/articles/11-07-2009.textilecontent/articles/11-07-2009.textile

@@ -1,4 +1,5 @@

----- +summary: "All you need to know about my wedding, from the arrival in Ireland 'till the departure from AbbeyGlen Castle. With official pictures and famous quotes." permalink: 11-07-2009 filters_pre: - redcloth

@@ -35,172 +36,172 @@ - wedding

type: article toc: true ----- -* "Prologue":#prologue -* "The wedding party":#party -* "The stag night":#stag -* "The preparations":#preparations -* "The ceremony":#ceremony -* "The reception":#reception -* "The honeymoon":#honeymoon -* "Photos":#photos -* "Trivia":#trivia -* "Famous quotes":#quotesh3(#prologue). Prologue - -Roxanne and I arrived in Ireland on the 3rd of July, just over a week before the wedding day. We thought a week would have been more than enough to finish organizing our big day, and we were right: we spent a few days enjoying our holiday with relatives and going around to meet the photographer, the florist and all the others. - -Slowly guests started arriving into the country from Italy, England, Romania etc. For some reason, everyone chose a different day to get to Killenaule, so we had people turning up right until the very day before. - -In a similar fashion, I was waiting for my waistcoat to arrive until the last minute: it turns out that the guy I bought it from decided to send it through normal post about 10 days before -- "They normally arrive in less than two weeks", he wrote to me in his last email. - -I ended up having to drive to Clonmel the afternoon before the wedding with half the wedding party in my car looking for a waistcoat. I eventually managed to rent one (with matching shirt and cravat) for _just_ 40 Euro. - -h3(#party). The wedding party - -The following table lists all the members of the wedding party, for your own reference. - -|_. Name |_. Role | -| Fabio Cevasco | Groom | -| Roxanne O'Mahoney | Bride | -| Matteo Lagomarsino | Best man | -| Simona Angheluta | Maid of Honor | -| Roberto Pischedda | Head Usher | -| Delia Angheluta | Bridesmaid | -| Zacharry O'Mahoney | Usher | -| Caspar O'Mahoney | Usher | - -h3(#stag). The stag night - -In Italy, England, US and in many other countries a "stag night" may end up in many different ways: dinner with friends, strip club, wild practical jokes to the groom, and so on. In Ireland, it generally means one thing: _drink_. It occasionally ends up badly (there are rumors a poor fellow who was thrown out in a river and got married with a broken nose), but generally everything turns out just fine: have a few pints, sing and dance, and have a couple of eggs in the morning. That normally does the trick -- if you're an Irishman. - -I was well aware of my in-laws drinking habits, so I decided to take uncle Felix's offer: "I'll have a taxi ready for you whenever you want to sneak out of the pub, and make sure you do" -- he said. - -The evening started with a few pints at Laffansbridge, an old country pub in the middle of nowhere, probably one of the best places for a pint of Guinnes in the whole Tipperary. The little smart guy who runs it has one simple rule: at midnight the light goes off and no more drinks are served, so all 16 of us got into a minibus by then, heading for the next pub. - -_Quinn's_ is the family pub, in the sense that it is owned by Felix Quinn Jr, son of Felix Quinn Sr, brother of Anastasia Quinn, mother of James O'Mahoney, father of Roxanne O'Mahoney, my wife (families are still very large and very close, in Ireland). Being the family pub, _Quinn's_ doesn't close at midnight; in fact, it often doesn't close at all for family and friends (i.e. the entire village of Killenaule). -As soon as we got in, Claire (wife of Felix, son of Felix, etc. etc.) greeted us with a full round of pints, and then another, and yet another... - -Around the third round someone asked me if I could sing a song -- a request I politely but firmly declined due to my total ignorance in Irish folk songs and my total inability to utter sounds in even the slightest musical way. Luckily, someone else volunteered and sang a beautiful ballad, perfectly in-tune, with no music backing at all: Irish people are amazingly musical when sober, imagine when drunk! - -When people started getting into _their_ fourth round (note the pronoun), I decided to try out an old trick to keep myself sober: I drank less than half a pint, and then pretended to drink the rest, leaving always something in my glass. In that way &ndash; I thought &ndash; I could pretend I didn't need yet another pint. Unfortunately the pub owner spotted me straight away and said "That pint is stale... here, have another one, on the house!". At that point I decided it was better for me & the rest of the Italians to quietly sneak out. - -I was at home (uncle Martin's house) and in bed at about 1:30 AM. I almost didn't sleep at all that night, as expected, so I wasn't too bothered when the rest of the drinking comrades came back, singing and shouting at 4:30 am. Simona [the Maid of Honor and girlfriend of my brother-in-law Zac], on the other hand, wasn't too amused when Zac turned up after drinking the (Irish) Nightly Guideline Drink Amount: approx. 10-11 pints of Guinness -- those he could count, that is. - -h3(#preparations). The preparations - -This part of the day is best reported in chronological tabular form: - -|_. Time |_. Event | -| 7:35 | The groom -wakes up- decides to stop pretending to sleep. | -| 8:00 | The bridesmaids are up and about, ready to go to the hairdresser | -| 9:00 | Uncle Martin and the rest of the gang slowly regain consciousness. The groom spends about half an hour trying to explain uncle Martin that he's his only hope to collect and bring back the flowers for the church (_"Ahhhh you want _me_ to do it... you could have said so since the beginning!"_). | -| 9:45 | The groom takes the bridesmaids into town, to the hairdresser | -| 10:00 | The groom attempts to gather his groomsmen for the first time | -| 10:15 | The groom starts having a chat with the best man and the head usher. The other ushers are _somewhere around_. | -| 10:30 | The groom realizes that one of the ushers (Zac) has the most terrible hangover on Earth and the other (Caspar) slept solidly from 3 am (while still in the pub) until now | -| 11:00 | The groom attempts to gather his groomsmen for the second time, this time telling them it's time to get ready (he's not taken seriously) | -| 11:30 | The groom attempts to gather his groomsmen for the third and final time, now everyone is starting to try out their suits | -| 11:45 | For some weird reason auntie Noelle decides to call the groom and tell him that the florist is not accepting checks, after 5 minuts of absolute panic, she says we're going to get the flowers anyway and there's nothing to worry about. | -| 12:00 | All groomsman are dressed. It starts raining. | -| 12:30 | Zac decides he needs some fresh air and takes a walk outside in his morning suit, regardless of the heavy rain and the groom's prayers | -| 13:10 | The groomsmen go to the church. | -| 14:00 | Guests start arriving | -| 14:20 | The brides arrives and the ceremony starts. | - -h3(#ceremony). The ceremony - -The wedding ceremony was very suggestive, almost magic. As soon as I looked at Roxanne in her wedding dress all worries faded away, and we both enjoyed the wedding rite. I must say I also don't remember much of the whole ceremony, but I'm told it's a common thing to happen. - -As the ceremony started, we sat down without looking at the audience, so I didn't feel paranoid and enjoyed listening to the priest's speech, the readings and the songs. Canon Liam Ryan embodies the typical Irish priest: about 70-year-old, tall, extremely talkative, cheerful and very charismatic. He shocked us all during the reharsal telling us what we'd have had to do the day after, and it felt like a lot of work. The groomsmen and the bridesmaids were terrified: _"So I have to help you sit down, move the chair... like that... then... go back... no, wait, what was that again?"_. Matteo and Roberto couldn't believe the whole choreography involved in the event: it's nothing like that in Italy, but they were glad they were part of it in the end. - -It all happened exactly like Father Ryan predicted, he even guessed almost all the few mistakes we made: "You have to walk slowly in front of the bride" &ndash; he said to Delia, the bridesmain &ndash; "and if you _think_ you're going slow while you're doing it, you're probably going _way too fast_". But nobody noticed, really, and nobody cared: they were all too excited to mind that, and everyone's eyes were on Roxanne, anyway. She was really, really gorgeous and her dress was fabulous. It felt unreal, at times: we both felt we were in one of those movies... - -The most peculiar thing about the whole ceremony was perhaps the different languages involved: English, Italian, Gaelic and Latin. I doubt there was a single person among us who could understand the entirety of the mass, but it was very evocatory. The whole mass was predominantly in English, with the following exceptions: - -* The First Reading was in Latin (my mum read it superbly -- she's a Latin teacher!) -* The Second Reading was in Italian -* _Our Father_ was sung in Gaelic - -By our own common decision, we didn't ask for a professional video of the ceremony, only "photos":#photos. Nevertheless, my uncle captured most of the ceremony (and the most embarassing bits of the dancing after the "reception":#reception) using my dad's video camera. - -h3(#reception). The reception - -When the ceremony ended it was still raining heavily, so after an endless amount of pictures taken we went straight into our Rolls. Technically, that was not _our_ Rolls of course: we rented it from a local car hirer, and it was worth every penny. A lot of people get married in a VW Beatle or in a Mercedes at most, but Roxanne and I really love old cars, so when we saw "Ruby":http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html, a red 1961 Silver Cloud II, we just had to get it. Champagne and chauffeur included, of course. - -The chauffeur was a very jolly and chatty fellow from Waterford, and drove that beauty of a car for a very long time. Unfortunately though his sat nav decided to stop working and he wasn't really _local_, so erhm..., well, let's just say we were really lucky that at least _the bride_knew her way around. We made it safe and sound to Raheen House in no time: so fast that everyone else arrived about 10-15 minutes afterwards. - -"Raheen House":http://www.raheenhouse.ie/ is a very charming XIX century Georgian House. One of those places you normally see only in movies: tapestries on the walls, old armchairs, stuffed heads over the doors (an african buffalo, a huge deer, an antelope, and some more)... you get the picture. Unfortunately it can only accomodate 120 people, so it isn't a very popular location for wedding receptions in Ireland, because the number of people invited at Irish weddings ranges from 150 to 300. We were about 60 in total, nevertheless the dining hall looked quite full and lively, with 7 big tables covering all the room. - -As soon as we got there, my best man was informed by the staff that he _had to_ introduce the bride and groom. _"What? No, wait! What do I say... how... what? Fabio, come back!"_ he freaked out, but as soon as I wrote down the two lines he was supposed to say in English everything was OK. Not only did he introduce us properly, he also made a _terrific_ speech: he obviously gave it a lot of thought and it sounded just perfect. - -After he spoke, it was my dad's turn. Now, my dad speaks perfect French but never got a chance to learn and practice English (yet), so not only he had to write down his entire speech, he also had to annotate the pronunciation of _every_ word. He managed fine though. It felt a little bit long, but he said really wonderful and touching words about Roxanne and I, our respective families, and countries. I'll publish it soon on the Internet, for posterity's sake. - -The last three speeches were Jim's (the father of the bride), who did great as always, without reading anything, right on the spot. And so did Roxanne and I: we basically just said a few words thanking all the guests for coming, and half of them for helping us with the wedding as well. Every speech (except mine and Roxanne's) was characterized by subtle and very discreet exhortations to produce progeny (_"get on with it!"_), but other than that they were fine. - -After all the traditional obligations, we finally started our dinner. The food was delicious and extremely tasty: Raheen House is renown for that, as we were told, but we honestly weren't 100% sure until we started trying it. And there was also _plenty_ of it, so everyone felt really satisfied towards the end of the meal. So satisfied that we decided to postpone the cake till later (see below) and indulge with wine instead. - -Wine, right. They were going to charge us 20€ per bottle for some weird Chilean or Australian stuff. Silly and almost offending, especially considering that my family has been producing wine for family and friend's use for at least three generations! This was my dad's primary concern until we left for Ireland: "You sort the restaurant out, because I'm going to bring some bottles, no matter what". He shipped over _96_ special bottles of our 2005, 2006, 2007 and 2008 vintages. Ninety-six. We used about 25 of them for the meal and the rest of the evening, then we gave one to almost every guest, three to the staff of the restaurant, a few more to other hotel and B&B owners, six to each uncle of the bride, etc. etc. None came back to Italy, that's for sure. - -Right after the meal the band came in, and we got ready to dance. Roxanne and I had to start with our First Dance, of course, then everyone else slowly joined in. The group was playing a mixture of traditional Irish music, ballads and rock 'n' roll: they were amazing, and especially the Italian's were really impressed. - -Not as impressed as when they noticed uncle Martin dancing. I've never seen _anyone_ in my life dancing so vigorously and wildly in my life. He has his own special technique that cannot be described with words. I'll try to post a video of him soon. He really felt the rythm and never missed a step. Like a whirlwind he dragged everyone in, dancing with him: first his daughters and sons, then his brothers, the he thought he'd take my auntie for a spin, then the bride (well, mostly her dress), then even me! I don't remember much, I think I was in the air at one point, and then all over the place... - -Everyone of course joined in and started drinking and dancing for the whole evening. When the band performed the last two songs, I just remember a _huge_ circle of nearly all the guests holding hands dancing around Roxanne and I, then coming closer, then far, then closer again. It was definitely the wildest night in our whole life. - -h3(#honeymoon). The honeymoon - -The day after we slowly recovered. We didn't sleep much, but we managed to get up and have breakfast with some of the guests at the hotel, before they started heading back. Then we decided to go shopping in town: it was basically Roxanne and I, plus her brothers, her parents, and my parents. Not much of a honeymoon, as my mum pointed out, but we didn't mind. - -After spending the following day saying goodbye and thanks to all the relatives, we finally headed to Co. Galway, in Connemara. We booked three nights in the fabulous "Abbeyglen Castle":http://www.abbeyglen.ie/, highly recommended. Our superior room had a fireplace, a four-poster bed and jacuzzi bath: the bare essentials for a honeymoon really. Roxanne and I really enjoyed those three days, finally alone in the most breathtaking and romantic area of Ireland. Three days weren't enough, really, but we'll eventually go back there hopefully: maybe Sir Paul Hughes, proprietor of the castle, will still remember _"the bride and groom"_, as he kept calling us throughout our brief, but very pleasant stay. - -Exactly as auntie Noelle said, everything was over in a blink: the ceremony, the reception, the honeymoon... everything went back to normal, eventually. It took a while to get used to our normal life: we had to go on a shopping spree before we went back to work... let's say the money we got as present from most of the guest was well spent in a 42" LCD HD TV, surround sound system, etc. etc. - -...And we still have our other half of the honeymoon, too! Probably Miami Beach and Bahamas, next November. - -h3(#photos). Photos - -Our wedding photos were taken by "Pat McCoole":http://www.patmccoole.ie/, who did a truly amazing job portraying the magic of our special day. - -<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fh3rald%2Falbumid%2F5359762418204291649%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> - - -h3(#trivia). Trivia - -* On the wedding day, it rained non-stop from 12 am to 7 pm. -* The groom drove for a total of 1758.7 Km in 14 days. -* On his stag night, the groom only drank 2.5 pints of Guinness (almost everyone else had 10, on average). -* The night before the wedding, the groom slept only from 5:30 to 7:30. -* Only the middle tier of the wedding cake was eaten on the wedding day. The top tier was eaten during the following days by relatives and the bottom tier was shipped to Italy, together with the Bride's dress. -* The father of the bride decided to change into more comfortable clothes right after the ceremony. He borrowed a waistoat and a jacket for the speech. -* Uncle Martin danced with a lot of people after the meal, including the bride, her father, and the groom. -* When he arrived at the church, the groom immediately realized he left the mass booklets and the confetti in the back of his car, at home. They were eventually brought to the church by a cousin of the bride just a few minutes before she arrived. -* At the very start of the ceremony, the groom told the priest to tell the best man to get a mass booklet so that he and the bride can follow the mass properly. After 30 seconds of lip-reading and signalling, the best man understood and fetched one of the infamous booklets. -* The bride forgot her change of clothes in uncle John's car, who had to drive in early in the morning or she would have had her breakfast in her wedding dress. - -h3(#quotes). Famous quotes - -bq. "This journey feels like going to Lourdes: you come back and your life changed forever."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- The best man, when he arrived in Killenaule. - -bq. "Is there a garage around?"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Auntie Isa while waving a car mirror, when she arrived in Killenaule - -bq. "Do I really have to do a speech? Are you sure?"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The best man, when he met the groom in Ireland. - -bq. "My preciousssss!"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The best man, when he was given the rings in custody. - -bq. "She's the most calm and organized bride in history."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Auntie Noelle, about the bride on the wedding day. - -bq. "You could tell he was panicking on the phone"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Auntie Noelle, about the groom on the wedding day. - -bq. "Potatoes, potatoes, potatoes..."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The father of the bride to the groom, during the traditional handshake of the wedding rehearsal. - -bq. "Potatoes, potatoes, potatoes..."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The groom to the father of the bride, during the traditional handshake of the wedding ceremony. - -<blockquote> - -*Best man:* "[...] this is the first time for me to speak in public, in front of an _English_ audience [...]"<br /> -*Audience:* "Irish! IRISH!!!"<br /> -*Best man:* "...oh, right, Irish! Sorry..."<br /> - -</blockquote> - -bq. "I need another shirt!"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Uncle Martin, after about 2 hours of continuous dancing with almost all the guests. - +* "Prologue":#prologue +* "The wedding party":#party +* "The stag night":#stag +* "The preparations":#preparations +* "The ceremony":#ceremony +* "The reception":#reception +* "The honeymoon":#honeymoon +* "Photos":#photos +* "Trivia":#trivia +* "Famous quotes":#quotesh3(#prologue). Prologue + +Roxanne and I arrived in Ireland on the 3rd of July, just over a week before the wedding day. We thought a week would have been more than enough to finish organizing our big day, and we were right: we spent a few days enjoying our holiday with relatives and going around to meet the photographer, the florist and all the others. + +Slowly guests started arriving into the country from Italy, England, Romania etc. For some reason, everyone chose a different day to get to Killenaule, so we had people turning up right until the very day before. + +In a similar fashion, I was waiting for my waistcoat to arrive until the last minute: it turns out that the guy I bought it from decided to send it through normal post about 10 days before -- "They normally arrive in less than two weeks", he wrote to me in his last email. + +I ended up having to drive to Clonmel the afternoon before the wedding with half the wedding party in my car looking for a waistcoat. I eventually managed to rent one (with matching shirt and cravat) for _just_ 40 Euro. + +h3(#party). The wedding party + +The following table lists all the members of the wedding party, for your own reference. + +|_. Name |_. Role | +| Fabio Cevasco | Groom | +| Roxanne O'Mahoney | Bride | +| Matteo Lagomarsino | Best man | +| Simona Angheluta | Maid of Honor | +| Roberto Pischedda | Head Usher | +| Delia Angheluta | Bridesmaid | +| Zacharry O'Mahoney | Usher | +| Caspar O'Mahoney | Usher | + +h3(#stag). The stag night + +In Italy, England, US and in many other countries a "stag night" may end up in many different ways: dinner with friends, strip club, wild practical jokes to the groom, and so on. In Ireland, it generally means one thing: _drink_. It occasionally ends up badly (there are rumors a poor fellow who was thrown out in a river and got married with a broken nose), but generally everything turns out just fine: have a few pints, sing and dance, and have a couple of eggs in the morning. That normally does the trick -- if you're an Irishman. + +I was well aware of my in-laws drinking habits, so I decided to take uncle Felix's offer: "I'll have a taxi ready for you whenever you want to sneak out of the pub, and make sure you do" -- he said. + +The evening started with a few pints at Laffansbridge, an old country pub in the middle of nowhere, probably one of the best places for a pint of Guinnes in the whole Tipperary. The little smart guy who runs it has one simple rule: at midnight the light goes off and no more drinks are served, so all 16 of us got into a minibus by then, heading for the next pub. + +_Quinn's_ is the family pub, in the sense that it is owned by Felix Quinn Jr, son of Felix Quinn Sr, brother of Anastasia Quinn, mother of James O'Mahoney, father of Roxanne O'Mahoney, my wife (families are still very large and very close, in Ireland). Being the family pub, _Quinn's_ doesn't close at midnight; in fact, it often doesn't close at all for family and friends (i.e. the entire village of Killenaule). +As soon as we got in, Claire (wife of Felix, son of Felix, etc. etc.) greeted us with a full round of pints, and then another, and yet another... + +Around the third round someone asked me if I could sing a song -- a request I politely but firmly declined due to my total ignorance in Irish folk songs and my total inability to utter sounds in even the slightest musical way. Luckily, someone else volunteered and sang a beautiful ballad, perfectly in-tune, with no music backing at all: Irish people are amazingly musical when sober, imagine when drunk! + +When people started getting into _their_ fourth round (note the pronoun), I decided to try out an old trick to keep myself sober: I drank less than half a pint, and then pretended to drink the rest, leaving always something in my glass. In that way &ndash; I thought &ndash; I could pretend I didn't need yet another pint. Unfortunately the pub owner spotted me straight away and said "That pint is stale... here, have another one, on the house!". At that point I decided it was better for me & the rest of the Italians to quietly sneak out. + +I was at home (uncle Martin's house) and in bed at about 1:30 AM. I almost didn't sleep at all that night, as expected, so I wasn't too bothered when the rest of the drinking comrades came back, singing and shouting at 4:30 am. Simona [the Maid of Honor and girlfriend of my brother-in-law Zac], on the other hand, wasn't too amused when Zac turned up after drinking the (Irish) Nightly Guideline Drink Amount: approx. 10-11 pints of Guinness -- those he could count, that is. + +h3(#preparations). The preparations + +This part of the day is best reported in chronological tabular form: + +|_. Time |_. Event | +| 7:35 | The groom -wakes up- decides to stop pretending to sleep. | +| 8:00 | The bridesmaids are up and about, ready to go to the hairdresser | +| 9:00 | Uncle Martin and the rest of the gang slowly regain consciousness. The groom spends about half an hour trying to explain uncle Martin that he's his only hope to collect and bring back the flowers for the church (_"Ahhhh you want _me_ to do it... you could have said so since the beginning!"_). | +| 9:45 | The groom takes the bridesmaids into town, to the hairdresser | +| 10:00 | The groom attempts to gather his groomsmen for the first time | +| 10:15 | The groom starts having a chat with the best man and the head usher. The other ushers are _somewhere around_. | +| 10:30 | The groom realizes that one of the ushers (Zac) has the most terrible hangover on Earth and the other (Caspar) slept solidly from 3 am (while still in the pub) until now | +| 11:00 | The groom attempts to gather his groomsmen for the second time, this time telling them it's time to get ready (he's not taken seriously) | +| 11:30 | The groom attempts to gather his groomsmen for the third and final time, now everyone is starting to try out their suits | +| 11:45 | For some weird reason auntie Noelle decides to call the groom and tell him that the florist is not accepting checks, after 5 minuts of absolute panic, she says we're going to get the flowers anyway and there's nothing to worry about. | +| 12:00 | All groomsman are dressed. It starts raining. | +| 12:30 | Zac decides he needs some fresh air and takes a walk outside in his morning suit, regardless of the heavy rain and the groom's prayers | +| 13:10 | The groomsmen go to the church. | +| 14:00 | Guests start arriving | +| 14:20 | The brides arrives and the ceremony starts. | + +h3(#ceremony). The ceremony + +The wedding ceremony was very suggestive, almost magic. As soon as I looked at Roxanne in her wedding dress all worries faded away, and we both enjoyed the wedding rite. I must say I also don't remember much of the whole ceremony, but I'm told it's a common thing to happen. + +As the ceremony started, we sat down without looking at the audience, so I didn't feel paranoid and enjoyed listening to the priest's speech, the readings and the songs. Canon Liam Ryan embodies the typical Irish priest: about 70-year-old, tall, extremely talkative, cheerful and very charismatic. He shocked us all during the reharsal telling us what we'd have had to do the day after, and it felt like a lot of work. The groomsmen and the bridesmaids were terrified: _"So I have to help you sit down, move the chair... like that... then... go back... no, wait, what was that again?"_. Matteo and Roberto couldn't believe the whole choreography involved in the event: it's nothing like that in Italy, but they were glad they were part of it in the end. + +It all happened exactly like Father Ryan predicted, he even guessed almost all the few mistakes we made: "You have to walk slowly in front of the bride" &ndash; he said to Delia, the bridesmain &ndash; "and if you _think_ you're going slow while you're doing it, you're probably going _way too fast_". But nobody noticed, really, and nobody cared: they were all too excited to mind that, and everyone's eyes were on Roxanne, anyway. She was really, really gorgeous and her dress was fabulous. It felt unreal, at times: we both felt we were in one of those movies... + +The most peculiar thing about the whole ceremony was perhaps the different languages involved: English, Italian, Gaelic and Latin. I doubt there was a single person among us who could understand the entirety of the mass, but it was very evocatory. The whole mass was predominantly in English, with the following exceptions: + +* The First Reading was in Latin (my mum read it superbly -- she's a Latin teacher!) +* The Second Reading was in Italian +* _Our Father_ was sung in Gaelic + +By our own common decision, we didn't ask for a professional video of the ceremony, only "photos":#photos. Nevertheless, my uncle captured most of the ceremony (and the most embarassing bits of the dancing after the "reception":#reception) using my dad's video camera. + +h3(#reception). The reception + +When the ceremony ended it was still raining heavily, so after an endless amount of pictures taken we went straight into our Rolls. Technically, that was not _our_ Rolls of course: we rented it from a local car hirer, and it was worth every penny. A lot of people get married in a VW Beatle or in a Mercedes at most, but Roxanne and I really love old cars, so when we saw "Ruby":http://www.alleventslimos.com/Wedding/rolls_silver_cloud.html, a red 1961 Silver Cloud II, we just had to get it. Champagne and chauffeur included, of course. + +The chauffeur was a very jolly and chatty fellow from Waterford, and drove that beauty of a car for a very long time. Unfortunately though his sat nav decided to stop working and he wasn't really _local_, so erhm..., well, let's just say we were really lucky that at least _the bride_knew her way around. We made it safe and sound to Raheen House in no time: so fast that everyone else arrived about 10-15 minutes afterwards. + +"Raheen House":http://www.raheenhouse.ie/ is a very charming XIX century Georgian House. One of those places you normally see only in movies: tapestries on the walls, old armchairs, stuffed heads over the doors (an african buffalo, a huge deer, an antelope, and some more)... you get the picture. Unfortunately it can only accomodate 120 people, so it isn't a very popular location for wedding receptions in Ireland, because the number of people invited at Irish weddings ranges from 150 to 300. We were about 60 in total, nevertheless the dining hall looked quite full and lively, with 7 big tables covering all the room. + +As soon as we got there, my best man was informed by the staff that he _had to_ introduce the bride and groom. _"What? No, wait! What do I say... how... what? Fabio, come back!"_ he freaked out, but as soon as I wrote down the two lines he was supposed to say in English everything was OK. Not only did he introduce us properly, he also made a _terrific_ speech: he obviously gave it a lot of thought and it sounded just perfect. + +After he spoke, it was my dad's turn. Now, my dad speaks perfect French but never got a chance to learn and practice English (yet), so not only he had to write down his entire speech, he also had to annotate the pronunciation of _every_ word. He managed fine though. It felt a little bit long, but he said really wonderful and touching words about Roxanne and I, our respective families, and countries. I'll publish it soon on the Internet, for posterity's sake. + +The last three speeches were Jim's (the father of the bride), who did great as always, without reading anything, right on the spot. And so did Roxanne and I: we basically just said a few words thanking all the guests for coming, and half of them for helping us with the wedding as well. Every speech (except mine and Roxanne's) was characterized by subtle and very discreet exhortations to produce progeny (_"get on with it!"_), but other than that they were fine. + +After all the traditional obligations, we finally started our dinner. The food was delicious and extremely tasty: Raheen House is renown for that, as we were told, but we honestly weren't 100% sure until we started trying it. And there was also _plenty_ of it, so everyone felt really satisfied towards the end of the meal. So satisfied that we decided to postpone the cake till later (see below) and indulge with wine instead. + +Wine, right. They were going to charge us 20€ per bottle for some weird Chilean or Australian stuff. Silly and almost offending, especially considering that my family has been producing wine for family and friend's use for at least three generations! This was my dad's primary concern until we left for Ireland: "You sort the restaurant out, because I'm going to bring some bottles, no matter what". He shipped over _96_ special bottles of our 2005, 2006, 2007 and 2008 vintages. Ninety-six. We used about 25 of them for the meal and the rest of the evening, then we gave one to almost every guest, three to the staff of the restaurant, a few more to other hotel and B&B owners, six to each uncle of the bride, etc. etc. None came back to Italy, that's for sure. + +Right after the meal the band came in, and we got ready to dance. Roxanne and I had to start with our First Dance, of course, then everyone else slowly joined in. The group was playing a mixture of traditional Irish music, ballads and rock 'n' roll: they were amazing, and especially the Italian's were really impressed. + +Not as impressed as when they noticed uncle Martin dancing. I've never seen _anyone_ in my life dancing so vigorously and wildly in my life. He has his own special technique that cannot be described with words. I'll try to post a video of him soon. He really felt the rythm and never missed a step. Like a whirlwind he dragged everyone in, dancing with him: first his daughters and sons, then his brothers, the he thought he'd take my auntie for a spin, then the bride (well, mostly her dress), then even me! I don't remember much, I think I was in the air at one point, and then all over the place... + +Everyone of course joined in and started drinking and dancing for the whole evening. When the band performed the last two songs, I just remember a _huge_ circle of nearly all the guests holding hands dancing around Roxanne and I, then coming closer, then far, then closer again. It was definitely the wildest night in our whole life. + +h3(#honeymoon). The honeymoon + +The day after we slowly recovered. We didn't sleep much, but we managed to get up and have breakfast with some of the guests at the hotel, before they started heading back. Then we decided to go shopping in town: it was basically Roxanne and I, plus her brothers, her parents, and my parents. Not much of a honeymoon, as my mum pointed out, but we didn't mind. + +After spending the following day saying goodbye and thanks to all the relatives, we finally headed to Co. Galway, in Connemara. We booked three nights in the fabulous "Abbeyglen Castle":http://www.abbeyglen.ie/, highly recommended. Our superior room had a fireplace, a four-poster bed and jacuzzi bath: the bare essentials for a honeymoon really. Roxanne and I really enjoyed those three days, finally alone in the most breathtaking and romantic area of Ireland. Three days weren't enough, really, but we'll eventually go back there hopefully: maybe Sir Paul Hughes, proprietor of the castle, will still remember _"the bride and groom"_, as he kept calling us throughout our brief, but very pleasant stay. + +Exactly as auntie Noelle said, everything was over in a blink: the ceremony, the reception, the honeymoon... everything went back to normal, eventually. It took a while to get used to our normal life: we had to go on a shopping spree before we went back to work... let's say the money we got as present from most of the guest was well spent in a 42" LCD HD TV, surround sound system, etc. etc. + +...And we still have our other half of the honeymoon, too! Probably Miami Beach and Bahamas, next November. + +h3(#photos). Photos + +Our wedding photos were taken by "Pat McCoole":http://www.patmccoole.ie/, who did a truly amazing job portraying the magic of our special day. + +<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum&RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fh3rald%2Falbumid%2F5359762418204291649%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> + + +h3(#trivia). Trivia + +* On the wedding day, it rained non-stop from 12 am to 7 pm. +* The groom drove for a total of 1758.7 Km in 14 days. +* On his stag night, the groom only drank 2.5 pints of Guinness (almost everyone else had 10, on average). +* The night before the wedding, the groom slept only from 5:30 to 7:30. +* Only the middle tier of the wedding cake was eaten on the wedding day. The top tier was eaten during the following days by relatives and the bottom tier was shipped to Italy, together with the Bride's dress. +* The father of the bride decided to change into more comfortable clothes right after the ceremony. He borrowed a waistoat and a jacket for the speech. +* Uncle Martin danced with a lot of people after the meal, including the bride, her father, and the groom. +* When he arrived at the church, the groom immediately realized he left the mass booklets and the confetti in the back of his car, at home. They were eventually brought to the church by a cousin of the bride just a few minutes before she arrived. +* At the very start of the ceremony, the groom told the priest to tell the best man to get a mass booklet so that he and the bride can follow the mass properly. After 30 seconds of lip-reading and signalling, the best man understood and fetched one of the infamous booklets. +* The bride forgot her change of clothes in uncle John's car, who had to drive in early in the morning or she would have had her breakfast in her wedding dress. + +h3(#quotes). Famous quotes + +bq. "This journey feels like going to Lourdes: you come back and your life changed forever."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- The best man, when he arrived in Killenaule. + +bq. "Is there a garage around?"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Auntie Isa while waving a car mirror, when she arrived in Killenaule + +bq. "Do I really have to do a speech? Are you sure?"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The best man, when he met the groom in Ireland. + +bq. "My preciousssss!"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The best man, when he was given the rings in custody. + +bq. "She's the most calm and organized bride in history."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Auntie Noelle, about the bride on the wedding day. + +bq. "You could tell he was panicking on the phone"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Auntie Noelle, about the groom on the wedding day. + +bq. "Potatoes, potatoes, potatoes..."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The father of the bride to the groom, during the traditional handshake of the wedding rehearsal. + +bq. "Potatoes, potatoes, potatoes..."<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- The groom to the father of the bride, during the traditional handshake of the wedding ceremony. + +<blockquote> + +*Best man:* "[...] this is the first time for me to speak in public, in front of an _English_ audience [...]"<br /> +*Audience:* "Irish! IRISH!!!"<br /> +*Best man:* "...oh, right, Irish! Sorry..."<br /> + +</blockquote> + +bq. "I need another shirt!"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- Uncle Martin, after about 2 hours of continuous dancing with almost all the guests. +
M content/articles/firefox-lovers-guide-to-opera.textilecontent/articles/firefox-lovers-guide-to-opera.textile

@@ -1,4 +1,6 @@

----- +summary: "An in-depth review of the Opera browser, with the eyes of a Firefox enthusiast. A useful comparison of the two browsers, whether you're planning to _switch_ or not." +popular: true permalink: firefox-lovers-guide-to-opera filters_pre: - redcloth

@@ -24,8 +26,8 @@ :author: Fabio Cevasco

:url: "" :id: 174 :body: |- - Thanks cvm for pointing out two fixes to two of my "annoyances"! I updated the article accordingly. - + Thanks cvm for pointing out two fixes to two of my "annoyances"! I updated the article accordingly. + P.S.: The find as you type looks fantastic! I didn't know that, thanks! - :date: 2007-12-28 16:36:12 +01:00 :author: Ameer

@@ -38,10 +40,10 @@ :author: Ameer

:url: http://ameer1234567890.blogspot.com :id: 176 :body: |- - Opera has a couple of ruler widgets which are equal to and sometimes even better than the firefox "Measure It" extension. - Have a look at <a href="http://widgets.opera.com/search/?order=name&q=ruler" target="_blank">here</a>. - - <blockquote>SearchStatus gives me Alexa Rank and Google Pagerank:</blockquote> + Opera has a couple of ruler widgets which are equal to and sometimes even better than the firefox "Measure It" extension. + Have a look at <a href="http://widgets.opera.com/search/?order=name&q=ruler" target="_blank">here</a>. + + <blockquote>SearchStatus gives me Alexa Rank and Google Pagerank:</blockquote> Does <a href="http://www.puzzleclub.ru/files/seobar/" target="_blank">this</a> serve the purpose? - :date: 2007-12-29 02:35:47 +01:00 :author: cvm

@@ -81,8 +83,8 @@ :author: Fabio Cevasco

:url: http://www.h3rald.com/ :id: 184 :body: |- - @Ed: I've spent _a lot_ of time looking around for alternative Windows browsers. Sleipnir is very popular in Japan and actively developed, but not too stable. I also tried all the variants of K-Meleon and then I finally decided to give Opera another shot! - + @Ed: I've spent _a lot_ of time looking around for alternative Windows browsers. Sleipnir is very popular in Japan and actively developed, but not too stable. I also tried all the variants of K-Meleon and then I finally decided to give Opera another shot! + @Ayush: Thanks but... I can't access the link for the del.icio.us panel (403 forbidden). Thanks for the other tips too! - :date: 2007-12-30 03:51:12 +01:00 :author: Ed

@@ -108,12 +110,12 @@ :author: alex

:url: "" :id: 188 :body: | - if you want to get some of the functionality of your firefox extensions in opera you should check this - - http://files.myopera.com/Rijk/blog/extensions.html - - - + if you want to get some of the functionality of your firefox extensions in opera you should check this + + http://files.myopera.com/Rijk/blog/extensions.html + + + - :date: 2007-12-31 16:28:50 +01:00 :author: bpm

@@ -145,26 +147,26 @@ :author: DrLaunch

:url: http://my.opera.com/drlaunch/blog/ :id: 196 :body: |- - I couldn't find any eyedropper tools for Opera but I found one for Windows. I haven't tried it my self yet. Get it from http://www.tucows.com/preview/194554 - - There is a Web Developer Toolbar for Opera but I don't know how it compares to the Firefox one. Get it from http://operawiki.info/WebDevToolbar - - As for Gmail manager, you could use the built in Opera mail client or you could set up forwarding from one Gmail account to another. You can also send from several mail addresses in one Gmail account. - - You can use del.icio.us as fast as and as easily as in Firefox with Pocket. Pocket can import your bookmarks and post them to del.icio.us, all without leaving the page you're browsing. Skip the unsupported browser nonsense on the front page and just install the bookmarklet from http://thinkpocket.com/admin/jump/get_bookmarklet - - There have been ways to synchronise opera before Opera Link too. Opera's settings are stored in one folder, and a lot of these settings can be copied to other Opera installations. Osync can sync your Opera profile. Get it from http://sourceforge.net/projects/osync - - To fix the Google Reader plugin problems in Opera switch to list view and press Space to scroll and go to the next story. - + I couldn't find any eyedropper tools for Opera but I found one for Windows. I haven't tried it my self yet. Get it from http://www.tucows.com/preview/194554 + + There is a Web Developer Toolbar for Opera but I don't know how it compares to the Firefox one. Get it from http://operawiki.info/WebDevToolbar + + As for Gmail manager, you could use the built in Opera mail client or you could set up forwarding from one Gmail account to another. You can also send from several mail addresses in one Gmail account. + + You can use del.icio.us as fast as and as easily as in Firefox with Pocket. Pocket can import your bookmarks and post them to del.icio.us, all without leaving the page you're browsing. Skip the unsupported browser nonsense on the front page and just install the bookmarklet from http://thinkpocket.com/admin/jump/get_bookmarklet + + There have been ways to synchronise opera before Opera Link too. Opera's settings are stored in one folder, and a lot of these settings can be copied to other Opera installations. Osync can sync your Opera profile. Get it from http://sourceforge.net/projects/osync + + To fix the Google Reader plugin problems in Opera switch to list view and press Space to scroll and go to the next story. + You can use some incompatible sites in Opera with Meadco's Neptune plugin or open the page in another browser. Check out the following buttons: http://operawiki.info/CustomButtons#webdev - :date: 2008-01-10 17:08:45 +01:00 :author: Doug :url: "" :id: 198 :body: |- - Hi from Canada, - I'm looking for a replacement for dogear which I used in Firfox,it marks the spot you stopped reading so you can pick up the again later.I might have missed it,Opera has a lot of Widgets etc, any ideas? thanks. + Hi from Canada, + I'm looking for a replacement for dogear which I used in Firfox,it marks the spot you stopped reading so you can pick up the again later.I might have missed it,Opera has a lot of Widgets etc, any ideas? thanks. flipper1@eastlink.ca - :date: 2008-01-15 21:27:43 +01:00 :author: GT500

@@ -191,22 +193,22 @@ :author: EroSan

:url: http://my.opera.com/erosan :id: 244 :body: |- - I'm using Opera 9.5, and i wanted to add a few things... - - There is a widget called multiGmail, that lets you monitor more than one gmail account, and easily access their inboxes (in case your girlfriend decides to switch to opera) ;) - - Also, the thing about not wanting to synch in your friends computer is cool. You can still access your bookmarks in html form if you log into my.opera.com - + I'm using Opera 9.5, and i wanted to add a few things... + + There is a widget called multiGmail, that lets you monitor more than one gmail account, and easily access their inboxes (in case your girlfriend decides to switch to opera) ;) + + Also, the thing about not wanting to synch in your friends computer is cool. You can still access your bookmarks in html form if you log into my.opera.com + Regards. - :date: 2008-10-08 01:13:55 +02:00 :author: murphy83@gmx.net :url: "" :id: 263 :body: | - Hi, - - Great article - Indeed I've been using Opera since version 3.x in a time where "Netscape Navigator" was not activly developed anymore, IE coming up with many security problems and slow speed as well as non-standard conformance. - I got to it by an article in the ct magazine (see www.heise.de/ct/) as they listed the current status of browser development at this time - well I soon got kind of addicted to using it everyday - secure, fast, standard compliant and one big point - very open to feature-requests by the users. Customized search was discussed in forums already back in 2000 if I remember correctly. + Hi, + + Great article - Indeed I've been using Opera since version 3.x in a time where "Netscape Navigator" was not activly developed anymore, IE coming up with many security problems and slow speed as well as non-standard conformance. + I got to it by an article in the ct magazine (see www.heise.de/ct/) as they listed the current status of browser development at this time - well I soon got kind of addicted to using it everyday - secure, fast, standard compliant and one big point - very open to feature-requests by the users. Customized search was discussed in forums already back in 2000 if I remember correctly. - :date: :author: udkl_12_98

@@ -222,229 +224,229 @@ - firefox

type: article toc: true ----- -bq. *Note:* This article can be considered a sequel for "An IE Lover's Guide to Firefox":http://www.h3rald.com/articles/ie-lovers-guide-to-firefox, which described Firefox through the eyes of an Internet Explorer fan. Similarly, this article describes Opera's features from the point of view of a user &ndash; myself &ndash; who has been using Firefox for years and is now considering another browser switch. - -I am a Firefox fan. I've been using Firefox since it was named "Firebird" and calling it "stable" was a big overstatement. Firefox dragged me out of Internet Explorer, and that was definitely one of its biggest achievements. - -Because I'm addicted to trying out new tools, however, I always kept testing new browsers I discovered here and there. K-Meleon, Flock, Sleipnir... When Safari came out for Windows I immediately installed it and used it for about 2 hours, only to realize that it wasn't &ndash; and it still isn't &ndash; usable at all, mainly due to sporadic crashes. - -!>/files/opera/fast.jpg! - -Similarly, I've been trying out "Opera":http://www.opera.com/ periodically, as new releases came out, but again it didn't seem to work for me. The biggest complaint I had was its inability to render heavily-ajaxified web sites properly. However, now it seems that the Opera Development Team made a big effort to improve the browser, and I was pleased to notice that "Opera 9.5b":http://www.opera.com/products/desktop/next/ ("Kestrel") doesn't seem to have this sort of problems at all.h3. Planning the Switch - -Firefox has extensions. Plenty of them actually. Some are useful, like the newish Del.icio.us one made by Yahoo, and also crappy ones you'll never use unless you want to have a fancy button on one of your over-cluttered toolbars which enables you to interface more easily with X or Y web services you hardly ever use. - -By contrast, Opera never attempted to add full-blown extension support to its venerable and yet very powerful browser. Instead, they kept building more and more features right into its core, being careful not to undermine the browser's two proverbial qualities: _speed_ and _stability_. What seemed a doomed philosophy at first turned out to be a good thingin the long run. More and more people are getting more and more worried about Firefox's memory issues and begin to _wander off_ to explore new things, exactly like I did. - -The first step to switch from Firefox to Opera is to reduce the number of Firefox extensions to the bare minimum you need: - -* Colorzilla -* Web Developer -* MeasureIt -* Search Status -* Gmail Manager -* Secure Login -* Del.icio.us - - How many extensions do you _actually_ use? Here's a short analysis for the ones above: - -* The first three are related to Web Development only, which means that I don't need them unless I'm doing some web-development tests during which I'm always going to have more than one browser open anyway. *UPDATE:* there are a few "Ruler":http://widgets.opera.com/search/?order=name&q=ruler widget which can be used instead of MeasureIt _(thanks *Ameer*)_. -* SearchStatus gives me Alexa Rank and Google Pagerank: I think I can survive without those for a while. *UPDATE:* if not, there's always "SEObar":http://www.puzzleclub.ru/files/seobar/ _(thanks *Ameer*)_. -* I use Gmail Manager because my girlfriend uses Gmail on the same computer. I'm switching to Opera and she'll stick with Firefox, so no problem there... -* Secure Login? It's called _Wand_ and it has been built-in into Opera for the last decade or so. -* Del.icio.us &ndash; OK, I won't be able to access my favorite tags as quickly, but "someone":http://erlang.no/2005/10/06/delicious-opera-buttons-2/ already came out with a few handy buttons for a better integration with the popular social bookmarking service. - -bq. *UPDATE:* For a list of the features provided by Firefox extensions which are included in Opera, see Rijk's "Top 150 Popular Firefox Extensions and Opera":http://files.myopera.com/Rijk/blog/extensions.html - -!>/files/opera/opera_navigation.png! - -Because I'm addicted to betas, I immediately downloaded "Opera Kestrel":http://www.opera.com/products/desktop/next/, i.e. Opera 9.50 beta 1. I never actually liked Opera's default theme, so I started looking around for *"new skins":http://my.opera.com/community/customize/skins/* (yes, eye-candy matters sometimes) and came across the Ximple series by "serafins":http://my.opera.com/community/customize/skins/author/?id=serafins. In particular, "2nd thought - Jimple":http://my.opera.com/community/customize/skins/info/?id=3835 quickly became my favorite. - -h3. Tabs - -_"Opera is the Web pioneer that delivered tabbed browsing in 2000 [...]"_ - -Opera tabs _feel_ stable and mature. Why? Probably because tabs are used more consistently to open not only web pages but also: - -* Downloads ("Transfers") -* RSS feeds -* Notes -* Emails -* Bookmarks -* Widget Management -* Contacts -* History -* Page Links - -I think this is a great feature and Firefox should definitely consider it: v3.0 comes with new download and bookmark managers, but they're still dialogs. Yes, I know, there's probably some extension which allows you to display them in the sidebar, but that's not the point: Opera brings more consistency to the overall browsing experience by using tabs wherever they should be used. - -Additionally, Opera tabs... - -* Can be rearranged, exactly like Firefox tabs -* Can be restored, if closed accidently, by re-opening them from the Trash can -* Can be locked, meaning that they can't be closed accidently -* Can be duplicated -* Can be saved in groups (sessions) and re-opened later on -* Can be restored if Opera crashes - - -h3. Speed Dial - -When you open Opera for the first time, and _whenever you open a new empty tab_ the Speed Dial is displayed. What I originally thought it was one of the most annoying things introduced by Opera 9 turned out to be actually useful and very addictive. - -The idea behind it is simple: - -* Show a default page with 9 slots -* Allow users to drag links to those slots -* Display preview of each slot (which is cached and can be updated by refreshing the page) -* Allow users to quickly access pages saved in the Speed Dial via CTRL+1 .. CTRL+9 or simply by clicking them. - - Simple and effective. Once you get going with it, you'll overcome the initial feeling of imposition and you'll use it more and more: I literally can't live without it now! - -h3. Right-click goodies - -While I was testing Opera, my girlfriend came along and asked me to look something up on "IMDB":http://www.imdb.com/. I normally had IMDB as custom search engine in Firefox, but unfortunately Opera didn't seem to allow users to customize their search engines... - -Totally wrong. Not only Opera lets you add any search engine to the search bar, it also does it with style and in the easiest way possible: - -!>/files/opera/search_engines.png! - -# Go to your search engine or any website with a search form -# Right click the search field -# Click *Create Search...* -# Specify a name and a keyword for your search engine - -Done. You'll now be able to search that particular site directly from the search bar. As you can see, I added Wikipedia, IMDB and even the "Unofficial Elder Scrolls Pages":http://www.uesp.net/wiki/Main_Page in this way. - -Besides creating searches, Opera lets you do a lot by right-clicking anywhere on a page: - -* *Block Content*: Right-click an empty area of any webpage and select *Block Content* to select which ads, scripts and images will be blocked from now on. -* *Validate*: Validate the HTML source code of the current page. -* *Translate*: Translate the current page into a foreign language with just two clicks. -* *Open With*: Open the current page in another browser installed on your system. -* *Edit Site Preferences...*: Choose to block/allow cookies and popups, identify Opera as another browser, set a different encoding, enable/disable scripts, images, flash, etc. These setting apply to the _current web site only_. -* View source, reload page every X seconds/minutes, send by email, etc. - -h3. Widgets - -"Opera Widgets":http://widgets.opera.com/ must not be considered as Opera's counterpart to Firefox extensions. Instead, Opera Widgets can be used as _poor man's Vista Gadgets_ on Windows XP, and they do their job most remarkably. - -I'm personally very fond of these ones: - -* "The Free Dictionary":http://widgets.opera.com/widget/3683/ -* "Wikipedia":http://widgets.opera.com/widget/8461/ -* "Calendar":http://widgets.opera.com/widget/3687/ -* "Whois Widget":http://widgets.opera.com/widget/4513/ -* "Currency Converter":http://widgets.opera.com/widget/3689/ -* "HTML Entities":http://widgets.opera.com/widget/5118/ -* "Twitter":http://widgets.opera.com/widget/7206/ - -They all have a common trait: they all behave as standalone programs, as they should be. The Wikipedia one, for example, can display Wikipedia entries directly inside the widget, unlike some others which just take you to Wikipedia, which is rather pointless. - -Although widgets live within Opera, they can be displayed "always behind", which means they'll be glued to your desktop and therefore will be visible whenever Opera and other applications are minimized. - -Needless to say that anyone brave enough can make widgets for Opera by following a simple "Widget Specification":http://dev.opera.com/articles/view/opera-widgets-specification-1-0/. - - -h3. Everything you can do on the Internet - -The term _browser_ applied to Opera is somehow misleading. Personally I would have called it something like "Internet Suite", because that would be a better choice due to the features it offers and the things it can do. - -Traditionally speaking, a web browser can be used to browse web pages, read feeds (sometimes) and navigate through FTP directories. Here's what Opera can handle: - -!>/files/opera/files.png! - -* Web Pages &ndash; No need of explanations here. -* FTP &ndash; FTP directories are listed very clearly, overriding server's settings with a more user-friendly layout. -* Local Files &ndash; This was a surprise for me. Typing @file://@ will automatically load a list of the drives currently available on your machine. Similarly, auto-completion for directory and file names is supported! I almost started using Opera as my everyday's file manager (almost). -* Feeds &ndash; An embedded feed reader can be used to subscribe to RSS/Atom feeds and view them... in a tab, of course. -* E-mails &ndash; Opera _is_ also a pretty decent email client. As of version 9.5 full IMAP support has been added, which definitely makes the difference. -* IRC &ndash; Opera can be used as an client, which works pretty well. Who needs ChatZilla anymore? -* News &ndash; Opera can be used to signup and retrieve news from newsgroups. -* Gopher/WAIS &ndash; Although not used everyday, Opera can handle these old protocols as well. -* BitTorrent Files &ndash; By default, Opera can act as a BitTorrent client as well, so you can just open .torrent files through the program and then monitor the download progress in the Transfers window, like with any other normal download. While this feature is indeed useful, it is also possible to "disable it":http://www.opera.com/support/search/view/840/ and still use your favorite BitTorrent client. - -h3. Portability and Synchronization - -Let's spend some words about _portability_. Sure, there are two "Portable Opera" apps out there, and they work well enough, but one thing I'd like about a web browser is the ability to synchronize my preferences, customizations, themes, passwords etc. etc. across multiple computers. -Firefox is "getting there":http://labs.mozilla.com/2007/12/introducing-weave/, although the technology is still at a very early stage. -Opera is doing something similar through "Opera Link":http://link.opera.com/, which allows you to synchronize automatically your Bookmarks, your Personal Bar and your Speed Dial. All you need is to get a (free) Opera account, login to Opera Link and enable the synchronization feature from the _File_ menu. From now on every time you'll modify your Speed Dial or Bookmarks, the changes will be sent to your Opera Link page. Similarly, whenever you start using opera somewhere else, if you login to your Opera Account you should be able to synchronize your Bookmarks and Speed Dial. - -Here are some thoughts on this type of technology: - -* It's not totally private yet. While it's great to be able to sync bookmarks and speed dial, the problems arise when you finish using your friend's computer for example... what happens to the bookmarks you just sync'ed? The only way to delete them would be to have your friend to log in to his Opera account and re-sync them. Not enough privacy for my liking. -* Your passwords, notes, widgets, etc. etc. cannot be synchronized yet, but that will hopefully be possible in near future. -* Sync'ing bookmarks is pointless for me. Although Opera still hopes to compete with Del.icio.us & Co., that will be very hard to achieve. I stopped using in-browser bookmarks long ago. -* Link seems and interesting feature considering that Opera is available on virtually _any operating system_ and a lot of different devices (mobile phones, Nintendo DS & Wii, ...). - -At any rate, it is still possible to "carry around" your personal opera settings by following the instructions provided on "this page":http://help.opera.com/Windows/9.50/en/backup.html which explains pretty much everything you need to know aboud Opera files and local storage. - -h3. Advanced Features - -Opera looks more "polished up" than Firefox in most cases. The superb usage of tabs for nearly everything is one example, and another one is the possibility to apply skins (themes) on-the-fly, without having to restart the browser. -Firefox _can_ do this via the "Personas":http://labs.mozilla.com/2007/12/personas-for-firefox/ extension, but Opera had this built-in for a long time. - -To apply a new skin: - -# Go to the "Skins Directory":http://my.opera.com/community/customize/skins/ -# Download a skin you like -# Opera will download and apply the skin immediately, *and it will ask you whether you want to keep it or not*. If you choose not to, it won't save it in your profile (very useful for quick previews). Neat. - -Another quality opera always excelled to is accessibility. Besides using the interface in the traditional way, it is also possible to: - -* *Use "mouse gestures":http://www.opera.com/products/desktop/mouse* &ndash; I wasn't a big fan of this until I bothered reading the excellent documentation Opera provided for them (which is significantly better than "the Firefox's equivalent":http://www.mousegestures.org/). It can be quite useful at times. -* *Use "keyboard shortcuts":http://www.opera.com/products/desktop/keyboard/* &ndash; Believe it or not, you can literally "use Opera without a mouse":http://www.opera.com/support/tutorials/nomouse/. -* *"Speak":http://www.opera.com/products/desktop/voice/ to it* &ndash; Opera's voice integration is getting better and better. Not only you can effectively "tell your browser what to do":http://www.opera.com/support/tutorials/voice/, you can also use the built-in text-to-speech function (Windows only) to have it read entire pages for you. It actually works quite well and it can parse punctuation well enough to apply the right intonation. Just for fun, I had it read it an Italian page... and it actually worked as expected: it was like listening to an American reading an Italian text using US pronuntiation! - -Finally, power users will be delighted of the way opera lets you hack the program settings, as you can: - -* Use *Tools > Quick Preferences* to block/unblock popups, cookies, Java applets, images, etc. -* Use *Tools > Advanced* to access detailed information concerning cookies, cache (it lists every image/object cached!), plug-ins, Wand passwords, etc. -* Use *Tools > Appearence...* to access and manage appearance-related settings, like skins, toolbars, buttons and panels -* Use *Tools > Preferences...* to access general preferences (all the rest) -* Type in *opera:config* to view and tweak Opera's internal settings, somehow like Firefox's about:config, but much cleaner and easier to use. -* Download the *"Developer Console":http://dev.opera.com/tools/* to have a simpler alternative to Firefox's Web Developer Toolbar extension, to view DOM elements, CSS and Javascript information. - -h3. Annoyances - -After using as main browser for a few weeks now, I can say that it's great but not perfect yet. It's very advanced, faster and more mature than any other browser, of course,but there are a few things which should be fixed or improved. - -In particular: - -* *It's not open source* &ndash; This may not matter to someone, but some people consider this an essential requirement for their browser, and that's why Firefox is their most obvious choice. Although Opera is free, it is proprietary software after all, which means is definitely not as open as you may want it to be. Personally I'm not too bothered, as I'm starting to think that too much openness may lead to too many unuseful and bloated extensions and make the program somehow "unpredictable" and heavy. -* -*No address bar search* &ndash; Amazingly, only Firefox seems to have this feature built-in. I'm referring to the ability to type whatever in the address bar to be redirected to the site returned by a Google's _I'm feeling lucky_ search. It is possible to emulate this feature in Opera by creating a custom search for _I'm Feeling Lucky_ and assign it a short keyword like "l". In this way, for example, typing in @l h3rald@ should lead you to this website. Not quite as immediate as in Firefox though.- -* -*No find as you type* &ndash; Another big disappointment for who comes from Firefox or Safari: Opera still uses a dialog box to perform page searches.- -* -*No spell clecking* &ndash; Again, both Firefox and Safari now offer text fields spell checking. Opera doesn't yet.- -* *No HTML mail composer* &ndash; Opera's built-in mail client can display HTML emails but doesn't yet allow users to create them. -* -*Auto-start widgets?* &ndash; This is a feature enhancement Opera Dev Team should consider: allow users to configure certain widgets to start automatically when Opera starts.- -* *Google Reader + Flash problems* &ndash; Sometimes I experiences some scrolling problems when reading news which contain embedded flash movies on Google Reader. -* *Corporate Sites* &ndash; Unfortunately some corporate web site do not support Opera or are not displayed correctly in Opera. Unfortunately there's nothing much we can do about it but trying to "mask" Opera as another browser (via *right-click > Edit Site Preferences...*) -* -*Default Browser Problems* &ndash; Setting Opera as default browser on Windows doesn't seem to set the file icons accordingly (or worse, it resets them to the default file icon).- - -*ERRATA:* - -* It is possible to have Opera to redirect you to the right after typing a few words in thr address bar by setting Google's "I'm feeling lucky" as default search engine _(thanks *EJ902*)_. -* Spell Checking is "supported":http://www.opera.com/support/tutorials/opera/spellcheck/ via GNU Aspell _(thanks *cvm*)_ or by using "Ospell":http://opera.gt500.org/ospell/ for inline spell checking _(thanks *Dava*)_. -* Find as you type can be triggered by pressing @.@ and typing _(thanks *cvm*)_. -* It is possible to auto-start widgets by saving a session with all your widget open and reloading it at every startup [CTRL+F12 > General > Startup > Continue saved sessions] _(thanks *Tamil* & *Ameer*)_. -* As of the "latest snapshot":http://my.opera.com/desktopteam/blog/, setting Opera as default browser and handler for HTML files doesn't cause any problems _thanks *Ayush*)_. - -h3. Conclusion - -Despite the few annoyances listed in the previous section, Opera 9.5 beta 1 truly impressed me. I was waiting for Opera to get better before switching and now I've not been using Firefox for a few weeks. -Although Opera offers a lot of features, there's still room for improvements, especially for what concerns integration with third party services: I would really like to see some sort of integration with del.icio.us, and that could be possible via widgets at least. -Regarding the new Opera Link feature, it looks very promising and a potential competitor for Mozilla Weave even though it will be used mainly to get more and more users to register to the Opera community (I did, at least), which is indeed very active any way. - -To conclude this article, which still barely scratches the surface of this very powerful application, I'd like to praise two more things about Opera: - -<span style="float:right; margin:3px;"> -<script type="text/javascript"> -digg_url = 'http://digg.com/software/A_Firefox_Lover_s_Guide_to_Opera'; -</script> -<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script> -</span> - -* Their website network, and in particular their truly excellent documentation knowledge base, which is very comprehensive of references, tutorials and interesting articles. I am a full time technical writer myself, and I've hardly ever come across better documentation. -* Their extensive "support and compliance to web standards":http://www.opera.com/docs/specs/, which makes Opera the most advanced browser ever made. - +bq. *Note:* This article can be considered a sequel for "An IE Lover's Guide to Firefox":http://www.h3rald.com/articles/ie-lovers-guide-to-firefox, which described Firefox through the eyes of an Internet Explorer fan. Similarly, this article describes Opera's features from the point of view of a user &ndash; myself &ndash; who has been using Firefox for years and is now considering another browser switch. + +I am a Firefox fan. I've been using Firefox since it was named "Firebird" and calling it "stable" was a big overstatement. Firefox dragged me out of Internet Explorer, and that was definitely one of its biggest achievements. + +Because I'm addicted to trying out new tools, however, I always kept testing new browsers I discovered here and there. K-Meleon, Flock, Sleipnir... When Safari came out for Windows I immediately installed it and used it for about 2 hours, only to realize that it wasn't &ndash; and it still isn't &ndash; usable at all, mainly due to sporadic crashes. + +!>/files/opera/fast.jpg! + +Similarly, I've been trying out "Opera":http://www.opera.com/ periodically, as new releases came out, but again it didn't seem to work for me. The biggest complaint I had was its inability to render heavily-ajaxified web sites properly. However, now it seems that the Opera Development Team made a big effort to improve the browser, and I was pleased to notice that "Opera 9.5b":http://www.opera.com/products/desktop/next/ ("Kestrel") doesn't seem to have this sort of problems at all.h3. Planning the Switch + +Firefox has extensions. Plenty of them actually. Some are useful, like the newish Del.icio.us one made by Yahoo, and also crappy ones you'll never use unless you want to have a fancy button on one of your over-cluttered toolbars which enables you to interface more easily with X or Y web services you hardly ever use. + +By contrast, Opera never attempted to add full-blown extension support to its venerable and yet very powerful browser. Instead, they kept building more and more features right into its core, being careful not to undermine the browser's two proverbial qualities: _speed_ and _stability_. What seemed a doomed philosophy at first turned out to be a good thingin the long run. More and more people are getting more and more worried about Firefox's memory issues and begin to _wander off_ to explore new things, exactly like I did. + +The first step to switch from Firefox to Opera is to reduce the number of Firefox extensions to the bare minimum you need: + +* Colorzilla +* Web Developer +* MeasureIt +* Search Status +* Gmail Manager +* Secure Login +* Del.icio.us + + How many extensions do you _actually_ use? Here's a short analysis for the ones above: + +* The first three are related to Web Development only, which means that I don't need them unless I'm doing some web-development tests during which I'm always going to have more than one browser open anyway. *UPDATE:* there are a few "Ruler":http://widgets.opera.com/search/?order=name&q=ruler widget which can be used instead of MeasureIt _(thanks *Ameer*)_. +* SearchStatus gives me Alexa Rank and Google Pagerank: I think I can survive without those for a while. *UPDATE:* if not, there's always "SEObar":http://www.puzzleclub.ru/files/seobar/ _(thanks *Ameer*)_. +* I use Gmail Manager because my girlfriend uses Gmail on the same computer. I'm switching to Opera and she'll stick with Firefox, so no problem there... +* Secure Login? It's called _Wand_ and it has been built-in into Opera for the last decade or so. +* Del.icio.us &ndash; OK, I won't be able to access my favorite tags as quickly, but "someone":http://erlang.no/2005/10/06/delicious-opera-buttons-2/ already came out with a few handy buttons for a better integration with the popular social bookmarking service. + +bq. *UPDATE:* For a list of the features provided by Firefox extensions which are included in Opera, see Rijk's "Top 150 Popular Firefox Extensions and Opera":http://files.myopera.com/Rijk/blog/extensions.html + +!>/files/opera/opera_navigation.png! + +Because I'm addicted to betas, I immediately downloaded "Opera Kestrel":http://www.opera.com/products/desktop/next/, i.e. Opera 9.50 beta 1. I never actually liked Opera's default theme, so I started looking around for *"new skins":http://my.opera.com/community/customize/skins/* (yes, eye-candy matters sometimes) and came across the Ximple series by "serafins":http://my.opera.com/community/customize/skins/author/?id=serafins. In particular, "2nd thought - Jimple":http://my.opera.com/community/customize/skins/info/?id=3835 quickly became my favorite. + +h3. Tabs + +_"Opera is the Web pioneer that delivered tabbed browsing in 2000 [...]"_ + +Opera tabs _feel_ stable and mature. Why? Probably because tabs are used more consistently to open not only web pages but also: + +* Downloads ("Transfers") +* RSS feeds +* Notes +* Emails +* Bookmarks +* Widget Management +* Contacts +* History +* Page Links + +I think this is a great feature and Firefox should definitely consider it: v3.0 comes with new download and bookmark managers, but they're still dialogs. Yes, I know, there's probably some extension which allows you to display them in the sidebar, but that's not the point: Opera brings more consistency to the overall browsing experience by using tabs wherever they should be used. + +Additionally, Opera tabs... + +* Can be rearranged, exactly like Firefox tabs +* Can be restored, if closed accidently, by re-opening them from the Trash can +* Can be locked, meaning that they can't be closed accidently +* Can be duplicated +* Can be saved in groups (sessions) and re-opened later on +* Can be restored if Opera crashes + + +h3. Speed Dial + +When you open Opera for the first time, and _whenever you open a new empty tab_ the Speed Dial is displayed. What I originally thought it was one of the most annoying things introduced by Opera 9 turned out to be actually useful and very addictive. + +The idea behind it is simple: + +* Show a default page with 9 slots +* Allow users to drag links to those slots +* Display preview of each slot (which is cached and can be updated by refreshing the page) +* Allow users to quickly access pages saved in the Speed Dial via CTRL+1 .. CTRL+9 or simply by clicking them. + + Simple and effective. Once you get going with it, you'll overcome the initial feeling of imposition and you'll use it more and more: I literally can't live without it now! + +h3. Right-click goodies + +While I was testing Opera, my girlfriend came along and asked me to look something up on "IMDB":http://www.imdb.com/. I normally had IMDB as custom search engine in Firefox, but unfortunately Opera didn't seem to allow users to customize their search engines... + +Totally wrong. Not only Opera lets you add any search engine to the search bar, it also does it with style and in the easiest way possible: + +!>/files/opera/search_engines.png! + +# Go to your search engine or any website with a search form +# Right click the search field +# Click *Create Search...* +# Specify a name and a keyword for your search engine + +Done. You'll now be able to search that particular site directly from the search bar. As you can see, I added Wikipedia, IMDB and even the "Unofficial Elder Scrolls Pages":http://www.uesp.net/wiki/Main_Page in this way. + +Besides creating searches, Opera lets you do a lot by right-clicking anywhere on a page: + +* *Block Content*: Right-click an empty area of any webpage and select *Block Content* to select which ads, scripts and images will be blocked from now on. +* *Validate*: Validate the HTML source code of the current page. +* *Translate*: Translate the current page into a foreign language with just two clicks. +* *Open With*: Open the current page in another browser installed on your system. +* *Edit Site Preferences...*: Choose to block/allow cookies and popups, identify Opera as another browser, set a different encoding, enable/disable scripts, images, flash, etc. These setting apply to the _current web site only_. +* View source, reload page every X seconds/minutes, send by email, etc. + +h3. Widgets + +"Opera Widgets":http://widgets.opera.com/ must not be considered as Opera's counterpart to Firefox extensions. Instead, Opera Widgets can be used as _poor man's Vista Gadgets_ on Windows XP, and they do their job most remarkably. + +I'm personally very fond of these ones: + +* "The Free Dictionary":http://widgets.opera.com/widget/3683/ +* "Wikipedia":http://widgets.opera.com/widget/8461/ +* "Calendar":http://widgets.opera.com/widget/3687/ +* "Whois Widget":http://widgets.opera.com/widget/4513/ +* "Currency Converter":http://widgets.opera.com/widget/3689/ +* "HTML Entities":http://widgets.opera.com/widget/5118/ +* "Twitter":http://widgets.opera.com/widget/7206/ + +They all have a common trait: they all behave as standalone programs, as they should be. The Wikipedia one, for example, can display Wikipedia entries directly inside the widget, unlike some others which just take you to Wikipedia, which is rather pointless. + +Although widgets live within Opera, they can be displayed "always behind", which means they'll be glued to your desktop and therefore will be visible whenever Opera and other applications are minimized. + +Needless to say that anyone brave enough can make widgets for Opera by following a simple "Widget Specification":http://dev.opera.com/articles/view/opera-widgets-specification-1-0/. + + +h3. Everything you can do on the Internet + +The term _browser_ applied to Opera is somehow misleading. Personally I would have called it something like "Internet Suite", because that would be a better choice due to the features it offers and the things it can do. + +Traditionally speaking, a web browser can be used to browse web pages, read feeds (sometimes) and navigate through FTP directories. Here's what Opera can handle: + +!>/files/opera/files.png! + +* Web Pages &ndash; No need of explanations here. +* FTP &ndash; FTP directories are listed very clearly, overriding server's settings with a more user-friendly layout. +* Local Files &ndash; This was a surprise for me. Typing @file://@ will automatically load a list of the drives currently available on your machine. Similarly, auto-completion for directory and file names is supported! I almost started using Opera as my everyday's file manager (almost). +* Feeds &ndash; An embedded feed reader can be used to subscribe to RSS/Atom feeds and view them... in a tab, of course. +* E-mails &ndash; Opera _is_ also a pretty decent email client. As of version 9.5 full IMAP support has been added, which definitely makes the difference. +* IRC &ndash; Opera can be used as an client, which works pretty well. Who needs ChatZilla anymore? +* News &ndash; Opera can be used to signup and retrieve news from newsgroups. +* Gopher/WAIS &ndash; Although not used everyday, Opera can handle these old protocols as well. +* BitTorrent Files &ndash; By default, Opera can act as a BitTorrent client as well, so you can just open .torrent files through the program and then monitor the download progress in the Transfers window, like with any other normal download. While this feature is indeed useful, it is also possible to "disable it":http://www.opera.com/support/search/view/840/ and still use your favorite BitTorrent client. + +h3. Portability and Synchronization + +Let's spend some words about _portability_. Sure, there are two "Portable Opera" apps out there, and they work well enough, but one thing I'd like about a web browser is the ability to synchronize my preferences, customizations, themes, passwords etc. etc. across multiple computers. +Firefox is "getting there":http://labs.mozilla.com/2007/12/introducing-weave/, although the technology is still at a very early stage. +Opera is doing something similar through "Opera Link":http://link.opera.com/, which allows you to synchronize automatically your Bookmarks, your Personal Bar and your Speed Dial. All you need is to get a (free) Opera account, login to Opera Link and enable the synchronization feature from the _File_ menu. From now on every time you'll modify your Speed Dial or Bookmarks, the changes will be sent to your Opera Link page. Similarly, whenever you start using opera somewhere else, if you login to your Opera Account you should be able to synchronize your Bookmarks and Speed Dial. + +Here are some thoughts on this type of technology: + +* It's not totally private yet. While it's great to be able to sync bookmarks and speed dial, the problems arise when you finish using your friend's computer for example... what happens to the bookmarks you just sync'ed? The only way to delete them would be to have your friend to log in to his Opera account and re-sync them. Not enough privacy for my liking. +* Your passwords, notes, widgets, etc. etc. cannot be synchronized yet, but that will hopefully be possible in near future. +* Sync'ing bookmarks is pointless for me. Although Opera still hopes to compete with Del.icio.us & Co., that will be very hard to achieve. I stopped using in-browser bookmarks long ago. +* Link seems and interesting feature considering that Opera is available on virtually _any operating system_ and a lot of different devices (mobile phones, Nintendo DS & Wii, ...). + +At any rate, it is still possible to "carry around" your personal opera settings by following the instructions provided on "this page":http://help.opera.com/Windows/9.50/en/backup.html which explains pretty much everything you need to know aboud Opera files and local storage. + +h3. Advanced Features + +Opera looks more "polished up" than Firefox in most cases. The superb usage of tabs for nearly everything is one example, and another one is the possibility to apply skins (themes) on-the-fly, without having to restart the browser. +Firefox _can_ do this via the "Personas":http://labs.mozilla.com/2007/12/personas-for-firefox/ extension, but Opera had this built-in for a long time. + +To apply a new skin: + +# Go to the "Skins Directory":http://my.opera.com/community/customize/skins/ +# Download a skin you like +# Opera will download and apply the skin immediately, *and it will ask you whether you want to keep it or not*. If you choose not to, it won't save it in your profile (very useful for quick previews). Neat. + +Another quality opera always excelled to is accessibility. Besides using the interface in the traditional way, it is also possible to: + +* *Use "mouse gestures":http://www.opera.com/products/desktop/mouse* &ndash; I wasn't a big fan of this until I bothered reading the excellent documentation Opera provided for them (which is significantly better than "the Firefox's equivalent":http://www.mousegestures.org/). It can be quite useful at times. +* *Use "keyboard shortcuts":http://www.opera.com/products/desktop/keyboard/* &ndash; Believe it or not, you can literally "use Opera without a mouse":http://www.opera.com/support/tutorials/nomouse/. +* *"Speak":http://www.opera.com/products/desktop/voice/ to it* &ndash; Opera's voice integration is getting better and better. Not only you can effectively "tell your browser what to do":http://www.opera.com/support/tutorials/voice/, you can also use the built-in text-to-speech function (Windows only) to have it read entire pages for you. It actually works quite well and it can parse punctuation well enough to apply the right intonation. Just for fun, I had it read it an Italian page... and it actually worked as expected: it was like listening to an American reading an Italian text using US pronuntiation! + +Finally, power users will be delighted of the way opera lets you hack the program settings, as you can: + +* Use *Tools > Quick Preferences* to block/unblock popups, cookies, Java applets, images, etc. +* Use *Tools > Advanced* to access detailed information concerning cookies, cache (it lists every image/object cached!), plug-ins, Wand passwords, etc. +* Use *Tools > Appearence...* to access and manage appearance-related settings, like skins, toolbars, buttons and panels +* Use *Tools > Preferences...* to access general preferences (all the rest) +* Type in *opera:config* to view and tweak Opera's internal settings, somehow like Firefox's about:config, but much cleaner and easier to use. +* Download the *"Developer Console":http://dev.opera.com/tools/* to have a simpler alternative to Firefox's Web Developer Toolbar extension, to view DOM elements, CSS and Javascript information. + +h3. Annoyances + +After using as main browser for a few weeks now, I can say that it's great but not perfect yet. It's very advanced, faster and more mature than any other browser, of course,but there are a few things which should be fixed or improved. + +In particular: + +* *It's not open source* &ndash; This may not matter to someone, but some people consider this an essential requirement for their browser, and that's why Firefox is their most obvious choice. Although Opera is free, it is proprietary software after all, which means is definitely not as open as you may want it to be. Personally I'm not too bothered, as I'm starting to think that too much openness may lead to too many unuseful and bloated extensions and make the program somehow "unpredictable" and heavy. +* -*No address bar search* &ndash; Amazingly, only Firefox seems to have this feature built-in. I'm referring to the ability to type whatever in the address bar to be redirected to the site returned by a Google's _I'm feeling lucky_ search. It is possible to emulate this feature in Opera by creating a custom search for _I'm Feeling Lucky_ and assign it a short keyword like "l". In this way, for example, typing in @l h3rald@ should lead you to this website. Not quite as immediate as in Firefox though.- +* -*No find as you type* &ndash; Another big disappointment for who comes from Firefox or Safari: Opera still uses a dialog box to perform page searches.- +* -*No spell clecking* &ndash; Again, both Firefox and Safari now offer text fields spell checking. Opera doesn't yet.- +* *No HTML mail composer* &ndash; Opera's built-in mail client can display HTML emails but doesn't yet allow users to create them. +* -*Auto-start widgets?* &ndash; This is a feature enhancement Opera Dev Team should consider: allow users to configure certain widgets to start automatically when Opera starts.- +* *Google Reader + Flash problems* &ndash; Sometimes I experiences some scrolling problems when reading news which contain embedded flash movies on Google Reader. +* *Corporate Sites* &ndash; Unfortunately some corporate web site do not support Opera or are not displayed correctly in Opera. Unfortunately there's nothing much we can do about it but trying to "mask" Opera as another browser (via *right-click > Edit Site Preferences...*) +* -*Default Browser Problems* &ndash; Setting Opera as default browser on Windows doesn't seem to set the file icons accordingly (or worse, it resets them to the default file icon).- + +*ERRATA:* + +* It is possible to have Opera to redirect you to the right after typing a few words in thr address bar by setting Google's "I'm feeling lucky" as default search engine _(thanks *EJ902*)_. +* Spell Checking is "supported":http://www.opera.com/support/tutorials/opera/spellcheck/ via GNU Aspell _(thanks *cvm*)_ or by using "Ospell":http://opera.gt500.org/ospell/ for inline spell checking _(thanks *Dava*)_. +* Find as you type can be triggered by pressing @.@ and typing _(thanks *cvm*)_. +* It is possible to auto-start widgets by saving a session with all your widget open and reloading it at every startup [CTRL+F12 > General > Startup > Continue saved sessions] _(thanks *Tamil* & *Ameer*)_. +* As of the "latest snapshot":http://my.opera.com/desktopteam/blog/, setting Opera as default browser and handler for HTML files doesn't cause any problems _thanks *Ayush*)_. + +h3. Conclusion + +Despite the few annoyances listed in the previous section, Opera 9.5 beta 1 truly impressed me. I was waiting for Opera to get better before switching and now I've not been using Firefox for a few weeks. +Although Opera offers a lot of features, there's still room for improvements, especially for what concerns integration with third party services: I would really like to see some sort of integration with del.icio.us, and that could be possible via widgets at least. +Regarding the new Opera Link feature, it looks very promising and a potential competitor for Mozilla Weave even though it will be used mainly to get more and more users to register to the Opera community (I did, at least), which is indeed very active any way. + +To conclude this article, which still barely scratches the surface of this very powerful application, I'd like to praise two more things about Opera: + +<span style="float:right; margin:3px;"> +<script type="text/javascript"> +digg_url = 'http://digg.com/software/A_Firefox_Lover_s_Guide_to_Opera'; +</script> +<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script> +</span> + +* Their website network, and in particular their truly excellent documentation knowledge base, which is very comprehensive of references, tutorials and interesting articles. I am a full time technical writer myself, and I've hardly ever come across better documentation. +* Their extensive "support and compliance to web standards":http://www.opera.com/docs/specs/, which makes Opera the most advanced browser ever made. + If you've not tried Opera before, or if you've always dismissed it because "X browser is better", you may want to "give it another shot":http://www.opera.com/products/desktop/: for me it was definitely worthwhile!
M content/articles/herald-vim-color-scheme.textilecontent/articles/herald-vim-color-scheme.textile

@@ -1,4 +1,5 @@

----- +summary: "My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors!" permalink: herald-vim-color-scheme filters_pre: - redcloth

@@ -73,39 +74,39 @@ - vim

type: article toc: true ----- -I use "Vim":http://www.vim.org a lot. It's my editor of choice when I code (mainly in Ruby), and also when I write my blog post and articles (mainly in Textile). -One thing I always liked about Vim was it powerful syntax highlighting: there's probably a syntax highlighting file for every programming language ever created, even the new ones ("Nimrod":http://force7.de/nimrod/index.html? Sure, "here":http://www.vim.org/scripts/script.php?script_id=2632!). - -Furthermore, Vim allows you to create color schemes, and that's surprisingly easy to do. Everything you need to do is in the "docs":http://vimdoc.sourceforge.net/htmldoc/syntax.html, but that may put you off, so you can just start by editing an existing one -- that's what I did.h3. InfiniteRed Black - -I've been using the "ir_black":http://blog.infinitered.com/entries/show/8 color scheme for near enough a year. It's an excellent color scheme, recommended especially for writing Ruby code: - -!=/images/herald.vim/ir_black_vim_example.png! - -I honestly thought this was the best Vim color scheme until I discovered Moria... - -h3. Moria - -Recently I switched to "moria":http://www.vim.org/scripts/script.php?script_id=1464, mainly because I find it easier on the eyes. It's a matter of taste, of course: - -!=/images/herald.vim/moria_vim_example.png! - -The trick is in the background: it's not completely black. Still, I didn't quite like the colors, so I decided to write my own... - -h3. Herald - -Meet <strong> "herald.vim":/files/herald.vim </strong> (this is a direct link to the raw file, but you may also want to check my "stash":http://github.com/h3rald/stash/tree/master on GitHub or the "script page":http://www.vim.org/scripts/script.php?script_id=2684 on Vim.org): - -!=/images/herald.vim/herald_vim_example.png! - -To sum up, here's the _features_ offered by this new color scheme: -* It's easier to differentiate syntax elements; in particular reserved words like @if@ or @end@, constants (symbols) and identifiers (instance variables). -* Operators are highlighted and easier to notice. -* Dark gray background and black column/row selectors. -* Added highlight for titles (useful for Textile) -* Comments do not stand out, unlike in most color schemes -* Support for 256 color terminal (special thanks to "Wolfgang Frisch":http://www.frexx.de/xterm-256-notes/ for providing all the info and tools required) - -So what do you think? Is it tool colorful perhaps? How would *you* improve it? - - +I use "Vim":http://www.vim.org a lot. It's my editor of choice when I code (mainly in Ruby), and also when I write my blog post and articles (mainly in Textile). +One thing I always liked about Vim was it powerful syntax highlighting: there's probably a syntax highlighting file for every programming language ever created, even the new ones ("Nimrod":http://force7.de/nimrod/index.html? Sure, "here":http://www.vim.org/scripts/script.php?script_id=2632!). + +Furthermore, Vim allows you to create color schemes, and that's surprisingly easy to do. Everything you need to do is in the "docs":http://vimdoc.sourceforge.net/htmldoc/syntax.html, but that may put you off, so you can just start by editing an existing one -- that's what I did.h3. InfiniteRed Black + +I've been using the "ir_black":http://blog.infinitered.com/entries/show/8 color scheme for near enough a year. It's an excellent color scheme, recommended especially for writing Ruby code: + +!=/images/herald.vim/ir_black_vim_example.png! + +I honestly thought this was the best Vim color scheme until I discovered Moria... + +h3. Moria + +Recently I switched to "moria":http://www.vim.org/scripts/script.php?script_id=1464, mainly because I find it easier on the eyes. It's a matter of taste, of course: + +!=/images/herald.vim/moria_vim_example.png! + +The trick is in the background: it's not completely black. Still, I didn't quite like the colors, so I decided to write my own... + +h3. Herald + +Meet <strong> "herald.vim":/files/herald.vim </strong> (this is a direct link to the raw file, but you may also want to check my "stash":http://github.com/h3rald/stash/tree/master on GitHub or the "script page":http://www.vim.org/scripts/script.php?script_id=2684 on Vim.org): + +!=/images/herald.vim/herald_vim_example.png! + +To sum up, here's the _features_ offered by this new color scheme: +* It's easier to differentiate syntax elements; in particular reserved words like @if@ or @end@, constants (symbols) and identifiers (instance variables). +* Operators are highlighted and easier to notice. +* Dark gray background and black column/row selectors. +* Added highlight for titles (useful for Textile) +* Comments do not stand out, unlike in most color schemes +* Support for 256 color terminal (special thanks to "Wolfgang Frisch":http://www.frexx.de/xterm-256-notes/ for providing all the info and tools required) + +So what do you think? Is it tool colorful perhaps? How would *you* improve it? + +
M content/articles/komodo-edit-review.textilecontent/articles/komodo-edit-review.textile

@@ -1,4 +1,6 @@

----- +summary: "A comprehensive review of the free editor from ActiveState, and why it's a very interesting alternative to more complex and heavy IDEs." +popular: true permalink: komodo-edit-review filters_pre: - redcloth

@@ -43,8 +45,8 @@ :author: Stavros

:url: "" :id: 131 :body: |- - Intype is only free for now, since it's an alpha, afterwards it'll cost something like $25 which is WAY too much for what I saw. I installed it, looked at it for a minute and uninstalled it, since I didn't see any good features that free editors don't have. - + Intype is only free for now, since it's an alpha, afterwards it'll cost something like $25 which is WAY too much for what I saw. I installed it, looked at it for a minute and uninstalled it, since I didn't see any good features that free editors don't have. + I still mourn the loss of AnyEdit. It was by far the best editor, but it's not actively supported any more, and has many bugs :/ I wish someone would pick up its development. - :date: 2007-11-26 12:15:42 +01:00 :author: Nikhil

@@ -107,167 +109,167 @@ - software

type: article toc: true ----- -<a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"> -<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /> -</a> - -_What's your favorite code editor?_ - -This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of the times it's not only one program but several, depending on the language and on the features needed at the time. -Yes, great, but how do you choose your favorite editor? -By trying a lot of them of course: that's what I've been doing since I started programming. Lately I've become fond of "Vim":http://www.vim.org (or better, gVim), although I have a few other editors I may recommend, e.g.: - -* "Notepad++":http://notepad-plus.sourceforge.net/uk/site.htm -* "Intype":http://intype.info/home/index.php -* "SciTE":http://scintilla.sourceforge.net/SciTE.html - -Recently, however, I came across my _n^th^_ "what's your favorite editor" thread and someone mentioned "Komodo Edit":http://www.activestate.com/Products/komodo_edit/. I knew of it already, actually, but I never had a chance to give it a _proper_ try. -ActiveState is well known mainly for two things: - -* Their effort in offering a lot of commercial, windows-based Perl libraries -* Their commercial IDE, Komodo IDE, which I personally tried quite a long time ago - -The problems of Komodo IDE are foundamentally two: - -* It costs money &#8211; this is not great in a world where Eclipse and Netbeans are free -* It is an IDE &#8211; which normally means _'heavy as hell'_. - -It's a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, while sometimes an IDE may be the best solution, despite its potential slowness and bulk. - -Komodo Edit solves the above-mentioned problems because: - -* It's free -* It's an editor - -Actually I wouldn't call it an editor, because it offers quite a lot of features which are normally absent in editors -- it's something in-between, which definitely deserves a try. - - -h2. User interface - -Komodo Edit's interface is one of the most clear I've ever come across. It is organized in four main areas plus the top menu and toolbar (which only has the buttons you REALLY need, unlike Notepad++'s 31-button-bar). - -!=/files/komodo_main.png! - -The central area is for editing, the left pane is for the Project browser, the right one is for the Toolbox and the bottom pane is for command output. Luckily enough, a set of handy little buttons is provided in the toolbar to show and hide each pane. I normally only use the Project Browser and the main editing area, leaving the Toolbox and Command Output panes hidden, but that's up to you really. - -!</files/komodo_show-hide_pane.png! - -Komodo Edit allows symultaneous editing of multiple documents, which means that it has tabs like most of the best editors out there. Furthermore, it is possible to have Komodo re-open the files edited in the last editing session, saving you a lot of time. Granted, a lot of IDE do, but this is *NOT* an IDE, remember? It's an _editor_, or at least it is advertised as such. - -In reality it has _most_ of the power of a full-blown IDE though normally remaining under the 60K memory usage (out of 2GB of total RAM) -- which is not that bad, considering what Eclipse and NetBeans need. -Out of all the "extra features":http://www.activestate.com/Products/komodo_edit/edit_vs_ide.plex offered by Komodo IDE, the only one I truly miss is the Code Browser. Other than that, it quickly became my editor/IDE of choice (when gVim isn't looking, of course...) - -Lets find out why... - -h2. Editing features - -Komodo Edit comes with all the editing features of ever average editor, so _"[...] Code commenting, auto-indent and outdent, block selection, incremental search, reflow paragraph, join lines, enter next character as raw literal, repeat next keystroke and clean line endings on "save"."_, it uses Scintilla as main editing component, which makes it a close relative of Notepad++, Notepad2 and of course SciTE when it comes to understanding languages and syntax highlighting. - -This is good, of course, as Scintilla is an excellent editing component, but &#8211; I have to say this &#8211; not as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can't really complain!). -As you can see from the screenshot I included earlier on, it is possible to change the default black-on-white color scheme to something more stimulating and energy-saving. This doesn't mean I have to manually re-set the color of each element, it actually comes with a black-background scheme, which is handy. - -h3. Supported Languages & Syntax Highlighting - -Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++, Java, PHP, Python, Ruby, Perl) but it also smart enough to notice framework-specific syntaxes like Smarty, Django or RHTML. -Like every scintilla-based editors, it sports a nice HTML multi-highlighter which allows you to keep putting all the Javascript, CSS and server-side scripting into the same file, GREAT! No, you probably wouldn't want to do that, but it's a good thing to have. - -h3. Auto-completion - -What makes this editor a really handy tool is its auto-completion capabilities. Why? well, because it supports: - -* Ruby: require, class modules (on . and ::), class variables and methods, method calltips. -* Python -* Perl -* PHP -* XSLT -* XML -* Tcl - -Why is this so special? Well, because if you want this you normally need an IDE, and if you want it for Ruby AND Python AND Perl your choices are very limited. -I played with the Ruby auto-completion features quite a bit, and I'm actually really impressed. - -!>/files/komodo_auto-completion.png! - -It can suggest what to write through calltips after a @require@ directive, after a . and a ::, and hitting CTRL+SPACE (or just tab if you configure the right option) will auto-complete what you're writing, be it a language keyword, a variable of any kind or a method. Additionally, it comes with "soft characters support", which means it will try to match ( [ { when possible, allowing you to _write over_ the completed character if you want to. - -h3. Syntax Checking, Vi/Emacs key bindings and code folding - -The heading is almost self-explanatory here: Komodo Edit supports code folding (you can even chose the folding chracters!) for all its supported languages, syntax checking (it can detect and display errors before running the script, very useful in Ruby, and hard to find in other editors) and Vi/Emacs key bindings. -It also offers "vi emulation", which is constantly improving through every release &#8211; so you won't forget Vim's keys when I don't use it: very nice, and again, hard to find in other editors, nevermind IDEs! - -h2. Projects and Tools - -!>/files/komodo_toolbox.png! - -The Project Browser and Toolbox are two features which are normally presents in IDEs and which are normally not found in editors. Granted, some editors like "PSPad":http://www.pspad.com/en/ do indeed have "projects", but most of the others don't. A _project_ in Komodo Edit is normally composed by: - -* Some _Live Folders_ including all the source files of the application you're developing -* An optional set of tools, commands, snippets and other goodies which may help you coding that particular application. - -It is possible to create these tools by clicking the *Add Item to current project* button in the Projects toolbar or by clicking the *Add Item to Toolbox* button just over the toolbox. -Either way, you can choose among the following: - -h4. File/Remote File - -Add a file on your local machine or a remote file hosted on a server you configured via *Edit > Preferences > Servers*. Supported protocols are: FTP,FTPS, SFTP, SCP. - -h4. Folder - -This will _not_ link to a folder and import local files in Komodo, instead, it will create a container for other tools, not for local files. - -h4. Live Folder - -On the contrary, a live folder links to an actual folder on your machines, and all files and directories inside it are automatically imported. Note that it is possible to choose to include or exclude certain files or directories from being imported by right-clicking the folder and editing its properties. - -h4. Command - -This will create a shortcut to a command to execute. It is possible to specify its parameters, the directory where it will be run, whether its output will be displayed in the Command Output or in a newly-spawned console window, etc. etc. - -h4. Snippet - -TextMate fans will love this. Komodo will let you create a code snippet for later use. Furthermore, it is possible to specify "tabstops" to automatically select certain words when tab is pressed (so you can effectively fill in only particular fields of the snippet). - -h4. Template - -A simple but effective way to create code templates. - -h4. Url - -A link which will open a given url. - -h4. Open... Shortcut - -This will popup an *Open File* dialog in a direcxtory of your choice. - -h4. Macro - -For those who require even more customization, it is also possible to record or code macros in Python or javascript, and then configure their key bindings and triggers. - -h4. Custom Menu/Custom toolbar - -This was really impressive. Sure you can group all your tools in folders in your current project or you can create them in the toolbox to make them available all the time, but it would be cool if _the editor itself_ could make those tools available by default in a toolbar or a menu. Well, that's possible: all you need to do is create a new custom menu or toolbar and populate it with your tools by drag and drop. Very, very nice! - -This mini-framework to create custom tools can be used to create project templates in a blink. To show this concept, Komodo Edit comes with a Rails template with almost all the tools you need when coding a Ruby on Rails application: - -* Create/delete database -* Generators -* Migrations -* Run server -* Example view snippets - -h2. Conclusion - -Komodo Edit is an interesting editor which offers a lot of features which are normally only available in IDEs at a smaller memory footprint. Granted, when I want to jot something down I still prefer to fire up gVim, but for a serious coding session, Komodo is the right choice. -Its close attention to details and its ease of use make developing an even more pleasant experience, although perhaps there's still room for improvement, if you're really fussy. - -Sometimes when you start getting used of its advanced features, the lack of a code browser seems a real shame, but after all, ActiveState must sell their IDE to someone at some point! - -Another thing which I would have liked is the ability to create new syntax highlighting schemes, which Notepad++ and VIM both offer. Whydoes it bothers me so much? Well, because I'd like a "Textile":http://textism.com/tools/textile/ syntax highlighting scheme for writing blogs and articles. VIM and Intype seem to be the only ones which offer it out-of-the-box, but there's no trace of it in Komodo Edit. - -Actually it is possible to create new syntax highlighting schemes and extend Komodo Edit via "XUL extensions":http://community.activestate.com/addons, exactly like Firefox. After a closer look, the Django syntax was added in this way. - -Unfortunately there aren't that many extensions available for Komodo Edit, yet, but the "Activestate Community":http://community.activestate.com/ seems very active, so you never know. Additionally, the recently-started "OpenKomodo":http://www.openkomodo.com/ is a new project created by ActiveState to "[...] create an open source platform for building developer environments. ActiveState has open-sourced elements of Komodo Edit, a free multi-language editor for dynamic languages based on Komodo IDE, to create the Open Komodo code base". A new competitor for Eclipse and Netbeans will be available soon? - -<a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"> -<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /> +<a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"> +<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /> +</a> + +_What's your favorite code editor?_ + +This is a common question which still keeps popping up on community boards, mailing lists, comments, etc. Every programmer who writes code in some programming language normally has an editor of choice. Being realistic, most of the times it's not only one program but several, depending on the language and on the features needed at the time. +Yes, great, but how do you choose your favorite editor? +By trying a lot of them of course: that's what I've been doing since I started programming. Lately I've become fond of "Vim":http://www.vim.org (or better, gVim), although I have a few other editors I may recommend, e.g.: + +* "Notepad++":http://notepad-plus.sourceforge.net/uk/site.htm +* "Intype":http://intype.info/home/index.php +* "SciTE":http://scintilla.sourceforge.net/SciTE.html + +Recently, however, I came across my _n^th^_ "what's your favorite editor" thread and someone mentioned "Komodo Edit":http://www.activestate.com/Products/komodo_edit/. I knew of it already, actually, but I never had a chance to give it a _proper_ try. +ActiveState is well known mainly for two things: + +* Their effort in offering a lot of commercial, windows-based Perl libraries +* Their commercial IDE, Komodo IDE, which I personally tried quite a long time ago + +The problems of Komodo IDE are foundamentally two: + +* It costs money &#8211; this is not great in a world where Eclipse and Netbeans are free +* It is an IDE &#8211; which normally means _'heavy as hell'_. + +It's a matter of taste and needs: some people feel more confortable with using an editor for certain tasks, while sometimes an IDE may be the best solution, despite its potential slowness and bulk. + +Komodo Edit solves the above-mentioned problems because: + +* It's free +* It's an editor + +Actually I wouldn't call it an editor, because it offers quite a lot of features which are normally absent in editors -- it's something in-between, which definitely deserves a try. + + +h2. User interface + +Komodo Edit's interface is one of the most clear I've ever come across. It is organized in four main areas plus the top menu and toolbar (which only has the buttons you REALLY need, unlike Notepad++'s 31-button-bar). + +!=/files/komodo_main.png! + +The central area is for editing, the left pane is for the Project browser, the right one is for the Toolbox and the bottom pane is for command output. Luckily enough, a set of handy little buttons is provided in the toolbar to show and hide each pane. I normally only use the Project Browser and the main editing area, leaving the Toolbox and Command Output panes hidden, but that's up to you really. + +!</files/komodo_show-hide_pane.png! + +Komodo Edit allows symultaneous editing of multiple documents, which means that it has tabs like most of the best editors out there. Furthermore, it is possible to have Komodo re-open the files edited in the last editing session, saving you a lot of time. Granted, a lot of IDE do, but this is *NOT* an IDE, remember? It's an _editor_, or at least it is advertised as such. + +In reality it has _most_ of the power of a full-blown IDE though normally remaining under the 60K memory usage (out of 2GB of total RAM) -- which is not that bad, considering what Eclipse and NetBeans need. +Out of all the "extra features":http://www.activestate.com/Products/komodo_edit/edit_vs_ide.plex offered by Komodo IDE, the only one I truly miss is the Code Browser. Other than that, it quickly became my editor/IDE of choice (when gVim isn't looking, of course...) + +Lets find out why... + +h2. Editing features + +Komodo Edit comes with all the editing features of ever average editor, so _"[...] Code commenting, auto-indent and outdent, block selection, incremental search, reflow paragraph, join lines, enter next character as raw literal, repeat next keystroke and clean line endings on "save"."_, it uses Scintilla as main editing component, which makes it a close relative of Notepad++, Notepad2 and of course SciTE when it comes to understanding languages and syntax highlighting. + +This is good, of course, as Scintilla is an excellent editing component, but &#8211; I have to say this &#8211; not as good as Vim when it comes to syntax highlighting (nothing is as good as Vim though, so I can't really complain!). +As you can see from the screenshot I included earlier on, it is possible to change the default black-on-white color scheme to something more stimulating and energy-saving. This doesn't mean I have to manually re-set the color of each element, it actually comes with a black-background scheme, which is handy. + +h3. Supported Languages & Syntax Highlighting + +Komodo Edit supports quite a few programming languages, which means it can recognize the most common ones (C, C++, Java, PHP, Python, Ruby, Perl) but it also smart enough to notice framework-specific syntaxes like Smarty, Django or RHTML. +Like every scintilla-based editors, it sports a nice HTML multi-highlighter which allows you to keep putting all the Javascript, CSS and server-side scripting into the same file, GREAT! No, you probably wouldn't want to do that, but it's a good thing to have. + +h3. Auto-completion + +What makes this editor a really handy tool is its auto-completion capabilities. Why? well, because it supports: + +* Ruby: require, class modules (on . and ::), class variables and methods, method calltips. +* Python +* Perl +* PHP +* XSLT +* XML +* Tcl + +Why is this so special? Well, because if you want this you normally need an IDE, and if you want it for Ruby AND Python AND Perl your choices are very limited. +I played with the Ruby auto-completion features quite a bit, and I'm actually really impressed. + +!>/files/komodo_auto-completion.png! + +It can suggest what to write through calltips after a @require@ directive, after a . and a ::, and hitting CTRL+SPACE (or just tab if you configure the right option) will auto-complete what you're writing, be it a language keyword, a variable of any kind or a method. Additionally, it comes with "soft characters support", which means it will try to match ( [ { when possible, allowing you to _write over_ the completed character if you want to. + +h3. Syntax Checking, Vi/Emacs key bindings and code folding + +The heading is almost self-explanatory here: Komodo Edit supports code folding (you can even chose the folding chracters!) for all its supported languages, syntax checking (it can detect and display errors before running the script, very useful in Ruby, and hard to find in other editors) and Vi/Emacs key bindings. +It also offers "vi emulation", which is constantly improving through every release &#8211; so you won't forget Vim's keys when I don't use it: very nice, and again, hard to find in other editors, nevermind IDEs! + +h2. Projects and Tools + +!>/files/komodo_toolbox.png! + +The Project Browser and Toolbox are two features which are normally presents in IDEs and which are normally not found in editors. Granted, some editors like "PSPad":http://www.pspad.com/en/ do indeed have "projects", but most of the others don't. A _project_ in Komodo Edit is normally composed by: + +* Some _Live Folders_ including all the source files of the application you're developing +* An optional set of tools, commands, snippets and other goodies which may help you coding that particular application. + +It is possible to create these tools by clicking the *Add Item to current project* button in the Projects toolbar or by clicking the *Add Item to Toolbox* button just over the toolbox. +Either way, you can choose among the following: + +h4. File/Remote File + +Add a file on your local machine or a remote file hosted on a server you configured via *Edit > Preferences > Servers*. Supported protocols are: FTP,FTPS, SFTP, SCP. + +h4. Folder + +This will _not_ link to a folder and import local files in Komodo, instead, it will create a container for other tools, not for local files. + +h4. Live Folder + +On the contrary, a live folder links to an actual folder on your machines, and all files and directories inside it are automatically imported. Note that it is possible to choose to include or exclude certain files or directories from being imported by right-clicking the folder and editing its properties. + +h4. Command + +This will create a shortcut to a command to execute. It is possible to specify its parameters, the directory where it will be run, whether its output will be displayed in the Command Output or in a newly-spawned console window, etc. etc. + +h4. Snippet + +TextMate fans will love this. Komodo will let you create a code snippet for later use. Furthermore, it is possible to specify "tabstops" to automatically select certain words when tab is pressed (so you can effectively fill in only particular fields of the snippet). + +h4. Template + +A simple but effective way to create code templates. + +h4. Url + +A link which will open a given url. + +h4. Open... Shortcut + +This will popup an *Open File* dialog in a direcxtory of your choice. + +h4. Macro + +For those who require even more customization, it is also possible to record or code macros in Python or javascript, and then configure their key bindings and triggers. + +h4. Custom Menu/Custom toolbar + +This was really impressive. Sure you can group all your tools in folders in your current project or you can create them in the toolbox to make them available all the time, but it would be cool if _the editor itself_ could make those tools available by default in a toolbar or a menu. Well, that's possible: all you need to do is create a new custom menu or toolbar and populate it with your tools by drag and drop. Very, very nice! + +This mini-framework to create custom tools can be used to create project templates in a blink. To show this concept, Komodo Edit comes with a Rails template with almost all the tools you need when coding a Ruby on Rails application: + +* Create/delete database +* Generators +* Migrations +* Run server +* Example view snippets + +h2. Conclusion + +Komodo Edit is an interesting editor which offers a lot of features which are normally only available in IDEs at a smaller memory footprint. Granted, when I want to jot something down I still prefer to fire up gVim, but for a serious coding session, Komodo is the right choice. +Its close attention to details and its ease of use make developing an even more pleasant experience, although perhaps there's still room for improvement, if you're really fussy. + +Sometimes when you start getting used of its advanced features, the lack of a code browser seems a real shame, but after all, ActiveState must sell their IDE to someone at some point! + +Another thing which I would have liked is the ability to create new syntax highlighting schemes, which Notepad++ and VIM both offer. Whydoes it bothers me so much? Well, because I'd like a "Textile":http://textism.com/tools/textile/ syntax highlighting scheme for writing blogs and articles. VIM and Intype seem to be the only ones which offer it out-of-the-box, but there's no trace of it in Komodo Edit. + +Actually it is possible to create new syntax highlighting schemes and extend Komodo Edit via "XUL extensions":http://community.activestate.com/addons, exactly like Firefox. After a closer look, the Django syntax was added in this way. + +Unfortunately there aren't that many extensions available for Komodo Edit, yet, but the "Activestate Community":http://community.activestate.com/ seems very active, so you never know. Additionally, the recently-started "OpenKomodo":http://www.openkomodo.com/ is a new project created by ActiveState to "[...] create an open source platform for building developer environments. ActiveState has open-sourced elements of Komodo Edit, a free multi-language editor for dynamic languages based on Komodo IDE, to create the Open Komodo code base". A new competitor for Eclipse and Netbeans will be available soon? + +<a href="http://digg.com/programming/A_closer_look_at_Komodo_Edit"> +<img src="http://digg.com/img/badges/180x35-digg-button.png" width="180" height="35" alt="Digg!" /> </a>
M content/articles/log-apr-2009.textilecontent/articles/log-apr-2009.textile

@@ -1,4 +1,5 @@

----- +summary: "Featuring this month: wedding planning, easter in London, XBox gaming and more." permalink: log-apr-2009 filters_pre: - redcloth

@@ -18,43 +19,43 @@ - wedding

type: article toc: true ----- -April is tratidionally a rather busy month: Easter, public holidays, and &mdash; always &mdash; some deadline to meet at work. Moreover, my birthday is also in April which makes it even more busy! Let's see what happened this year...h3. Using Ruby in a corporate environment - -I've been using Ruby at work for a while now. I started off writing some automation script for my own needs, then someone noticed it and asked me if by chance I could develop some scripts for them, for automating part of their own job, and so on. My boss ultimately noticed it, and she liked the idea of me investing a small portion of my time to make other people save huge amount of _their_ time, so now I am _officially_ in charge of workflow improvements and automation (it's even in my job description!). - -This month a colleague of mine and I had to figure out a way to write some documents *once* in XML format and then produce different kind of outputs (other XML files, PDFs, etc.) using the "DITA Open Toolkit":http://dita-ot.sourceforge.net/. Originally we thought the toolkit would do most of the job, but we soon realized we needed to tweak and change a lot more than what we usually expected. - -We ended up hacking together a _system_ using: - -* "Microsoft Infopath":http://office.microsoft.com/en-us/infopath/default.aspx as XML editor for the end users (the company buys it by default, so no worries there) -* A Ruby program to parse and manipulate the original XML and produce DITA-compatible XML files. -* Some "Apache Ant":http://ant.apache.org/ tasks available in the open toolkit to produce an XSL-FO file -* "Apache FOP":http://xmlgraphics.apache.org/fop/ to produce the PDF from the XSL-FO file... - -The thing seems to work fine (after a lot of tweaking), and I really enjoyed creating the Ruby program to _glue_ everything together. I even got a chance to introduce my colleagues to the wonderful world of "Textile":http://hobix.com/textile/ (they are so happy that they don't want to use WYSIWYG editors anymore!). - -h3. Easter in London - -As usual, Roxanne and I spent our Easter holidays in London, at her brother's place. This year we actually had 9 days to go around -squandering money- spending _wisely_ in food, books, clothes and entertainment. - -Most notably, I managed to drag Roxanne to "Foyles":http://www.foyles.co.uk/ and I got myself a copy of "The Pragmatic Programmer":http://www.pragprog.com/the-pragmatic-programmer, which I'm reading avidly. If it was up to me I was going to buy half of the computing section, but Roxanne _kindly pointed out_ that I could get all of them from Amazon for half the price. -And she was right: for my birthday I preordered a copy of "Programming Language Pragmatics, 3rd Ed.":http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144, which should be shipped soon. - -h3. Wedding planning - -My spreadsheets for the wedding guests, wedding expenses (!) and ...suit sizes are getting bigger and bigger. We managed to book a lot of flights to Ireland to my parents, us, relatives etc., but there are still quite a few things to do for the wedding. The most urgent thing to do right now is sending the invites: we had them printed with the words _RSVP within May_ on them, so they _have_ to be out in one or two weeks at most. - -The other thing which must be sorted soon are the suits. According to English (and Irish) tradition, the groom, the bestman, the father of the groom, the father of the bride and the ushers have to wear the same type of suit, with minor differences (the color of the waistcoats?). In my case, this means getting 7 (SEVEN) _morning suits_ off eBay, in the right sizes! Hopefully I'll be able to get them by the end of next week (if my bestman manages to let me know his sizes). - -h3. XBox 360 Gaming - -Now that our new XBox 360 finally came through, Roxanne and I have a lot of hours of hard core week end gaming ahead of us! This, added to the physiological increase of stress due to the wedding, may result in a temporary slowdown of my coding and writing activities. -Right now we're playing "Mirror's Edge":http://xbox360.ign.com/objects/949/949455.html, "Mass Effect":http://xbox360.ign.com/objects/718/718963.html, and "Unreal Tournment III":http://xbox360.ign.com/objects/746/746631.html. The last one was a special surprise present from Roxanne (_"...so we can kill each other!"_ &mdash; she's really lovely at times!). - -h3. Other tech-related tidbits - -* I can't wait to go to the cinema to watch "Star Trek XI":http://www.imdb.com/title/tt0796366/ -* I started using "Shelfari":http://www.shelfari.com/ -* I started using "Star.io":http://start.io as my personal, bare-bones start page. -* I recently "released Concatenative 0.2.0":http://www.h3rald.com/articles/concatenative-020. +April is tratidionally a rather busy month: Easter, public holidays, and &mdash; always &mdash; some deadline to meet at work. Moreover, my birthday is also in April which makes it even more busy! Let's see what happened this year...h3. Using Ruby in a corporate environment + +I've been using Ruby at work for a while now. I started off writing some automation script for my own needs, then someone noticed it and asked me if by chance I could develop some scripts for them, for automating part of their own job, and so on. My boss ultimately noticed it, and she liked the idea of me investing a small portion of my time to make other people save huge amount of _their_ time, so now I am _officially_ in charge of workflow improvements and automation (it's even in my job description!). + +This month a colleague of mine and I had to figure out a way to write some documents *once* in XML format and then produce different kind of outputs (other XML files, PDFs, etc.) using the "DITA Open Toolkit":http://dita-ot.sourceforge.net/. Originally we thought the toolkit would do most of the job, but we soon realized we needed to tweak and change a lot more than what we usually expected. + +We ended up hacking together a _system_ using: + +* "Microsoft Infopath":http://office.microsoft.com/en-us/infopath/default.aspx as XML editor for the end users (the company buys it by default, so no worries there) +* A Ruby program to parse and manipulate the original XML and produce DITA-compatible XML files. +* Some "Apache Ant":http://ant.apache.org/ tasks available in the open toolkit to produce an XSL-FO file +* "Apache FOP":http://xmlgraphics.apache.org/fop/ to produce the PDF from the XSL-FO file... + +The thing seems to work fine (after a lot of tweaking), and I really enjoyed creating the Ruby program to _glue_ everything together. I even got a chance to introduce my colleagues to the wonderful world of "Textile":http://hobix.com/textile/ (they are so happy that they don't want to use WYSIWYG editors anymore!). + +h3. Easter in London + +As usual, Roxanne and I spent our Easter holidays in London, at her brother's place. This year we actually had 9 days to go around -squandering money- spending _wisely_ in food, books, clothes and entertainment. + +Most notably, I managed to drag Roxanne to "Foyles":http://www.foyles.co.uk/ and I got myself a copy of "The Pragmatic Programmer":http://www.pragprog.com/the-pragmatic-programmer, which I'm reading avidly. If it was up to me I was going to buy half of the computing section, but Roxanne _kindly pointed out_ that I could get all of them from Amazon for half the price. +And she was right: for my birthday I preordered a copy of "Programming Language Pragmatics, 3rd Ed.":http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144, which should be shipped soon. + +h3. Wedding planning + +My spreadsheets for the wedding guests, wedding expenses (!) and ...suit sizes are getting bigger and bigger. We managed to book a lot of flights to Ireland to my parents, us, relatives etc., but there are still quite a few things to do for the wedding. The most urgent thing to do right now is sending the invites: we had them printed with the words _RSVP within May_ on them, so they _have_ to be out in one or two weeks at most. + +The other thing which must be sorted soon are the suits. According to English (and Irish) tradition, the groom, the bestman, the father of the groom, the father of the bride and the ushers have to wear the same type of suit, with minor differences (the color of the waistcoats?). In my case, this means getting 7 (SEVEN) _morning suits_ off eBay, in the right sizes! Hopefully I'll be able to get them by the end of next week (if my bestman manages to let me know his sizes). + +h3. XBox 360 Gaming + +Now that our new XBox 360 finally came through, Roxanne and I have a lot of hours of hard core week end gaming ahead of us! This, added to the physiological increase of stress due to the wedding, may result in a temporary slowdown of my coding and writing activities. +Right now we're playing "Mirror's Edge":http://xbox360.ign.com/objects/949/949455.html, "Mass Effect":http://xbox360.ign.com/objects/718/718963.html, and "Unreal Tournment III":http://xbox360.ign.com/objects/746/746631.html. The last one was a special surprise present from Roxanne (_"...so we can kill each other!"_ &mdash; she's really lovely at times!). + +h3. Other tech-related tidbits + +* I can't wait to go to the cinema to watch "Star Trek XI":http://www.imdb.com/title/tt0796366/ +* I started using "Shelfari":http://www.shelfari.com/ +* I started using "Star.io":http://start.io as my personal, bare-bones start page. +* I recently "released Concatenative 0.2.0":http://www.h3rald.com/articles/concatenative-020. * I'm currently evaluating the possibility to create a Ruby-based _Document Authoring Framework_. Stay tuned.
M content/articles/log-jun-2009.textilecontent/articles/log-jun-2009.textile

@@ -1,4 +1,5 @@

----- +summary: "Featuring this month: open source develoment plan, the 8th release of this very web site, and the usual wedding updates." permalink: log-jun-2009 filters_pre: - redcloth

@@ -14,60 +15,62 @@ - wedding

type: article toc: true ----- -Welcome to yet another of my extremely boring, excessively fragmented "personal log":/tags/personal_log posts. I'm seriously thinking of dropping the whole series in favor of more frequent (and shorter) blog posts, starting from next year. This means you'll probably have to read _another six_ of these priceless gems, until december 2009. -As usual, feel free to skim through as each of the following _sections_ is almost completely unrelated to the others.h3. H3RALD Web Site v8.0 - -It's the time of the year, again. It doesn't happen _every_ year but it's definitely a trend (hence the high version number): I'm going to redesign & redevelop my web site. - -This time is not the usual "Let's pick another language and another framework and start from scratch", but a rather more radical shift, and yet at the same time less painful. The idea is to transform H3RALD.com into a 100% static web site, without losing anything in functionality (gaining, if anything!). - -"Tom Preston-Werner":/http://tom.preston-werner.com/ is definitely _not_ the first person to "blog like a hacker":http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html, and his very own "Jekyll":http://www.jekyllrb.com/ is definitely not the first static web site generator our there, nevertheless, he inspired me to embrace what seems to be one of the latest trend in developer's blogs. - -The idea is simple: turn all the blog posts and pages into static content, and rely on third party web services for things like comments, search etc. For a rather extreme by very interesting example, see "Tagaholic":http://tagaholic.me/. - -The advantages of this approach are many: -* Free yourself from a database. -* Free yourself from a resource-hungry, server-side app ("Typo":http://wiki.github.com/fdv/typo/, in this case). -* Increase speed and reliability, without using caching or similar artifacts. -* Keep everything under version control. -* Don't worry about breaking things when upgrading (even if the static content generator changes, it shouldn't really break things). -* Unleash the power of client-side scripting (namely, JQuery). - -For now, I'm just brainstorming a little bit on "GitHub":http://github.com/h3rald/h3rald-website/issues, feel free to participate. The first step is obviously choosing a static content generator, and atm Jekyll seems to be slightly ahead of Webby. Opinions? - -h3. Glyph - -Did you ever want to write a short manual or a book, or even a long article? If so, chances are you gave LaTeX a shot and either fully embraced its philosophy or totally refused it. Sadly, I belong to the second category: I believe sequential documents like manuals or books should be easier to create simply by using HTML. - -Whever I have a chance to actually start working on it, Glyph will become a _document authoring framework_, i.e. a way to create visually appealing documents in a simple way. All the ingredients are there, it's only necessary to glue them together in a pretty form: -* Textile (and "RedCloth":http://redcloth.org/) to produce clean HTML code from a human-readable markup -* CSS3 to specify page rules -* A few rake scripts to produce a standalone HTML file, TOC, Index etc. -* An internal DSL for the document structure and metadata -* "Liquid":http://www.liquidmarkup.org/ for control flow, snippets and filters -* "PrinceXML":http://www.princexml.com/ to generate a PDF from HTML - -This project is still in planning stage, feel free to have a look at the "issues/features page":http://github.com/h3rald/glyph/issues on GitHub. Feedback is appreciated, as usual. - - -h3. Vim files & _the Stash_ - -If you read the previous two sections of this post, you may have noticed that I'm growing more and more fond of git (and GitHub). Besides the repositories I already mentioned earlier on, I also created a personal "stash":http://github.com/h3rald/stash, which I'm using mainly to store some of my Linux dotfiles, article drafts and ...Vim customizations. - -If you're looking for a color scheme for Vim, check out my very own "herald.vim":/herald-vim-color-scheme, and tell me what you think. - -h3. Getting ready for the Big Step - -This will probably be my last post as a free man, as I'm getting married (civilly) on July 2nd and (religiously) on July 11th. -Luckily the photographer agreed to give us a CD with all the pictures taken on the big day, with no copyright restrictions attached to it (believe it or not, some photographers don't allow you to republish _your own_ photos unless you ask them first), so I'll probably write a long post with pictures when we come back from our (half) honeymoon. - -Everything is pretty much organized. We had troubles with the waistcoats we got from eBay: they were cut almost randomly to _resamble_ waistcoats, but they weren't so we had to re-order another lot of 7 sets (waistcoat, cravat _and_ shirt this time) from another seller, this time UK-based. I seriously hope to get them in time. - -On the 24th we're having a party at our house. If you were invited, feel free to drop by, otherwise be prepared to be thrown out of the window (4th floor) by one of our ushers (Roxanne's _big_ brother). It's probalby going to be about 30-40 people in the end, mainly because most of my office can't come due to holidays they booked in advance. - -What's left to do now? Well: -* Send the bomboniere over to Ireland -* Make sure my dad actually ships the 96 specially-bottled bottles of our own wine to uncle John, in Ireland. -* Make sure uncle John doesn't drink all the 96 bottles of wine before the wedding reception. -* Make sure my best man understood that the speech he has do make _must_ be in English, at least 3 minutes long and not too offensive to the groom. -* Pay a huge, colossal heap of money for the whole thing. It's going to cost us (and my dad) quite a bit, in the end. But it's a once-in-a-lifetime experience, after all (getting totally trashed in a fancy hotel with all your family, including 2nd and 3rd grade cousins). +Welcome to yet another of my extremely boring, excessively fragmented "personal log":/tags/personal_log posts. I'm seriously thinking of dropping the whole series in favor of more frequent (and shorter) blog posts, starting from next year. This means you'll probably have to read _another six_ of these priceless gems, until december 2009. +As usual, feel free to skim through as each of the following _sections_ is almost completely unrelated to the others. + +h3. H3RALD Web Site v8.0 + +It's the time of the year, again. It doesn't happen _every_ year but it's definitely a trend (hence the high version number): I'm going to redesign & redevelop my web site. + +This time is not the usual "Let's pick another language and another framework and start from scratch", but a rather more radical shift, and yet at the same time less painful. The idea is to transform H3RALD.com into a 100% static web site, without losing anything in functionality (gaining, if anything!). + +"Tom Preston-Werner":/http://tom.preston-werner.com/ is definitely _not_ the first person to "blog like a hacker":http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html, and his very own "Jekyll":http://www.jekyllrb.com/ is definitely not the first static web site generator our there, nevertheless, he inspired me to embrace what seems to be one of the latest trend in developer's blogs. + +The idea is simple: turn all the blog posts and pages into static content, and rely on third party web services for things like comments, search etc. For a rather extreme by very interesting example, see "Tagaholic":http://tagaholic.me/. + +The advantages of this approach are many: +* Free yourself from a database. +* Free yourself from a resource-hungry, server-side app ("Typo":http://wiki.github.com/fdv/typo/, in this case). +* Increase speed and reliability, without using caching or similar artifacts. +* Keep everything under version control. +* Don't worry about breaking things when upgrading (even if the static content generator changes, it shouldn't really break things). +* Unleash the power of client-side scripting (namely, JQuery). + +For now, I'm just brainstorming a little bit on "GitHub":http://github.com/h3rald/h3rald-website/issues, feel free to participate. The first step is obviously choosing a static content generator, and atm Jekyll seems to be slightly ahead of Webby. Opinions? + +h3. Glyph + +Did you ever want to write a short manual or a book, or even a long article? If so, chances are you gave LaTeX a shot and either fully embraced its philosophy or totally refused it. Sadly, I belong to the second category: I believe sequential documents like manuals or books should be easier to create simply by using HTML. + +Whever I have a chance to actually start working on it, Glyph will become a _document authoring framework_, i.e. a way to create visually appealing documents in a simple way. All the ingredients are there, it's only necessary to glue them together in a pretty form: +* Textile (and "RedCloth":http://redcloth.org/) to produce clean HTML code from a human-readable markup +* CSS3 to specify page rules +* A few rake scripts to produce a standalone HTML file, TOC, Index etc. +* An internal DSL for the document structure and metadata +* "Liquid":http://www.liquidmarkup.org/ for control flow, snippets and filters +* "PrinceXML":http://www.princexml.com/ to generate a PDF from HTML + +This project is still in planning stage, feel free to have a look at the "issues/features page":http://github.com/h3rald/glyph/issues on GitHub. Feedback is appreciated, as usual. + + +h3. Vim files & _the Stash_ + +If you read the previous two sections of this post, you may have noticed that I'm growing more and more fond of git (and GitHub). Besides the repositories I already mentioned earlier on, I also created a personal "stash":http://github.com/h3rald/stash, which I'm using mainly to store some of my Linux dotfiles, article drafts and ...Vim customizations. + +If you're looking for a color scheme for Vim, check out my very own "herald.vim":/herald-vim-color-scheme, and tell me what you think. + +h3. Getting ready for the Big Step + +This will probably be my last post as a free man, as I'm getting married (civilly) on July 2nd and (religiously) on July 11th. +Luckily the photographer agreed to give us a CD with all the pictures taken on the big day, with no copyright restrictions attached to it (believe it or not, some photographers don't allow you to republish _your own_ photos unless you ask them first), so I'll probably write a long post with pictures when we come back from our (half) honeymoon. + +Everything is pretty much organized. We had troubles with the waistcoats we got from eBay: they were cut almost randomly to _resamble_ waistcoats, but they weren't so we had to re-order another lot of 7 sets (waistcoat, cravat _and_ shirt this time) from another seller, this time UK-based. I seriously hope to get them in time. + +On the 24th we're having a party at our house. If you were invited, feel free to drop by, otherwise be prepared to be thrown out of the window (4th floor) by one of our ushers (Roxanne's _big_ brother). It's probalby going to be about 30-40 people in the end, mainly because most of my office can't come due to holidays they booked in advance. + +What's left to do now? Well: +* Send the bomboniere over to Ireland +* Make sure my dad actually ships the 96 specially-bottled bottles of our own wine to uncle John, in Ireland. +* Make sure uncle John doesn't drink all the 96 bottles of wine before the wedding reception. +* Make sure my best man understood that the speech he has do make _must_ be in English, at least 3 minutes long and not too offensive to the groom. +* Pay a huge, colossal heap of money for the whole thing. It's going to cost us (and my dad) quite a bit, in the end. But it's a once-in-a-lifetime experience, after all (getting totally trashed in a fancy hotel with all your family, including 2nd and 3rd grade cousins).
M content/articles/log-may-2009.textilecontent/articles/log-may-2009.textile

@@ -1,4 +1,5 @@

----- +summary: "Featuring this month: Wedding planning, impression on the Star Trek premiere in Genoa, some comments on the Nimrod programming language, and more." permalink: log-may-2009 filters_pre: - redcloth

@@ -13,82 +14,82 @@ - wedding

type: article toc: true ----- -Yet another extremely busy month, as you can see from the total absence of blog posts and lack of tweets even. Things are getting pretty hectic at work now I guess: less people, more work, more responsibility, same money. They call it ??contingency??; it's the latest trend in the Western World, didn't you know? I'm really not impressed. I can't complain though I guess: I still enjoy my job very much and I know it could be much worse, so it's just a matter of enduring until autumn -- or so they say. - -h3. Star Trek Premiere - -The month started with an event I'd been looking for for months: the _premiere_ of Star Trek XI, aka "Star Trek". It's not that J.J. Abrahms couldn't come up with a more original name (_Star Trek: Academy_ used to be the working title, at one point), he simply wanted to tell the world that this movie was a new beginning, an elaborate way to start from scratch, to reboot what was more than once dubbed _a dying franchise_. - -The movie was enjoyable - daring and a bit flamboyant - but still enjoyable nonetheless. I consider myself a Star Trek fan, and although it was _not_ the usual Star Trek movie, I somehow liked Abrahms' bold revisitation of Roddenberry's universe. Take a bunch of unknowns (Chris Pine) or semi-unknowns (Zachary Quinto), then add some spicy British humor (Simon Pegg) and some old friend (Leonard Nimoy) and throw in an awful lot of XXI century special effects: what you get is not the usual, let's-all-rock-because-we're-hit traditional Star Trek, of course, it's an _alternate_ version of it. - -That's precisely what the movie is meant to be: what Star Trek would have look like if it had been created in the XXI century. The timeline feels disrupted since the very first minute (nevermind the end!), with a Jim Kirk stealing his stepfather's car. Chris Pine is an ["alternate":http://memory-alpha.org/en/wiki/James_T._Kirk_(alternate_reality)] Kirk, quite different from the original one, but not that bad. Zachary Quinto, on the other hand, is a true revelation: he definitely is the new Spock, and he couldn't have been cast better. So is Simon Pegg as Scotty, but unfortunately he's not involved enough. - -The baddies were a bit of a letdown. Nero is a bit too flat, and his ship is way too fancy, no matter where it comes from. Clearly some Hollywood junkie wanted a big, invulnerable dark ship to bring havoc in the galaxy, but that is NOT a Romulan ship, period. - -At any rate, I enjoyed the movie and I'm looking forward to the second one, which I hope it will be followed by many others. - -Unfortunately in Italy Star Trek is not worshiped in Italy as in it is the US, which is very unfortunate... Roxanne and I decided to play along and go to the cinema half-dressed-up, but our friends Elora and Michelle came with a full-blown Uhura uniform! The whole cinema kept staring at us. It was a bit freaky, but fun (check out the pics on Facebook -- if you can, that is, I won't post them here!). - -h3. Wedding Planning - -Just over a month to my wedding. Scared? You bet. Stressed out? Indeed. Roxanne and I managed to get most of the things organized in the end, luckily. In particular, this month: -* We went to the British Consulate in Milan, and applied to get Roxanne's legal documents. -* I bought and had the 7 vest sets delivered to Roxanne's brother's (Caspar) place, in London. -* I ended up buying 8 (buy three, get one free) morning suits from "Marks and Spencer":http://www.marksandspencer.com/gp/product/B000N65ELG?extid=pg_msf&247SEM, and had them delivered to Caspar's place. He'll be sending all the stuff over soon, hopefully. -* Roxanne got the dresses for the maids of honor, and apparently we have to collect them on monday. -* We sent all the invites we needed to send, but we're still waiting for confirmations. It looks like it won't be a big wedding, probably around to 60-70 people mark. -* We ordered the "bomboniere":http://weddings.about.com/cs/glossary/g/Bomboniere.htm, they should come through soon. -* Uncle John told us he had the music for the church and the reception sorted out. -* We got the rings! - -We _still_ have to organize a few things, namely: -* Write and print the prayer books -* Book the flight for one of my ushers -* Get some fancy gifts for the bestman and the rest of the people involved in the ceremony -* Get married civilly here in Genoa -* Organize a party at our place for the people who can't come to the wedding -* Do something else I can't remember right now - -Yes, we are still busy as hell. I'm looking forward to it all, but I'll definitely be much more relaxed when it's all over! - -h3. Home Internet: Epilogue? - -I got broadband at home, finally, after five months. Let's do a quick recap: -# Last December I signed up to Libero Infostrada, and told them I wanted to disconnect from Telecom -# In January I actually got disconnected from Telecom, got a new phone line contract, but the Internet was never activated. -# I kept calling clueless operators on both ends pointlessly for 2-3 months. -# I got pissed off with Libero, so in April I signed up to Tele2, telling them to disconnect me from Libero. They told me it would take at least 4 weeks. -# Meanwhile, I signed up to 3g, and got an Internet USB key. At least I can go online, even if with a crappy UMTS connection. -# After a month, Telecom rings me asking if I want to come back to them, promising I'll have the Internet back on _soon enough_. Out of desperation, I accept and tell them to disconnect me from Tele2. - -Just when I was about to write a long post cursing Telecom and their perverted schemes to force their customers to stay with them, I receive a call from Libero and they tell me that the Internet is now activated! Unbelievable. Now all I have to do is send letters to all the other ISPs (they don't do these things on the phone -- clueless operators, remember?) telling them I don't want anything to do with them anymore. - -This is how broadband Internet works in Italy. Jealous? - -h3. Nimrod - -Last month I decided I would stop programming until after the wedding and so I did (at least at home). Nevertheless, I still keep strive to keep up-to-date with everything concerning technology and in particular programming. - -Out of all the tech news I came across throughout this month, the "Nimrod":http://force7.de/nimrod/ programming language definitely struck me the most. A German guy came up with a new language -- that's not a big news, new programming languages are born every week, if not every day. - -I believe Nimrod is different though. Basically, here's why: -* It's a mixture of Lisp, Python and C. It looks a bit like Python and it behaves like it (indentation matters), it allows the creation of macros, like in Lisp, and - this is what _really_ matters to me - it compiles to plain C (which can then be compiled using GCC or whatever). -* It is open source and can be used to produce commercially distributed executables. -* The "manual":http://force7.de/nimrod/manual.html is simple to read (but with a few rough edges), and the language looks simple to learn. -* The language is not yet complete, but it's getting close to a 1.0 release. It works as advertised, nonetheless. -* It offers a comprehensive standard library, and a _huge_ amount of libraries and wrappers from everything from Windows API to GTK and Cairo. -* It is cross platform, the Windows version even comes with a one-click installer. -* It has garbage collection _and_ it supports manual memory management, if you need it. -* It's statically typed, with type inference -* It can generate standalone executables, with very little overhead (90KB for an hello world program). - -A language like this has been my secret dream for a long time. I thought no one would ever come up like this. I am really looking forward to give it a proper try someday. What's wrong with it? For now, a few bits are missing (like native serialization), other than that someone pointed out the weird, rather extreme case insensitiveness of the language. Basically, case _and underscores_ are ignored to ??allow programmers to use their own programming conventions??. -Personally I don't think this is that bad. After all, if you name your variables "a_thing" and "aThing" and you want them to mean different things, that's bad programming style anyway. Nevertheless, as far as I know it's the only language I know which offers such an extreme degree of flexibility in this sense. - -h3. Learning new things - -This month I also found myself to be extremely eager to learn about new things. I'm still faithful to Ruby and all that, but I'm opening up to new possibility, for different things: -* I decided to start listening to slightly more technical podcasts, which are _not_related to tech news. In this way, I don't have the pressure of having to listen to them on a regular basis. Other than "FLOSS Weekly":http://twit.tv/FLOSS, which is probably the best show about Open Source Software out there, I'm going to try out "Software Engineering Radio":http://www.se-radio.net/ and "The Command Line":http://thecommandline.net/, both slightly more technical. -* Because I decided to put my personal programming projects on hold, I'm having all sort of new ideas about even _more_ projects I could start as soon as I can. No anticipations until after my wedding, of course. -* I'm using Vim all the time now, both at work and at home. I feel confident with it, but I feel I still have a lot to learn, especially when it comes to marks, registers, etc. And I'm not yet ready to write an article about it -- not the kind of article I'd like to write, anyway. +Yet another extremely busy month, as you can see from the total absence of blog posts and lack of tweets even. Things are getting pretty hectic at work now I guess: less people, more work, more responsibility, same money. They call it ??contingency??; it's the latest trend in the Western World, didn't you know? I'm really not impressed. I can't complain though I guess: I still enjoy my job very much and I know it could be much worse, so it's just a matter of enduring until autumn -- or so they say. + +h3. Star Trek Premiere + +The month started with an event I'd been looking for for months: the _premiere_ of Star Trek XI, aka "Star Trek". It's not that J.J. Abrahms couldn't come up with a more original name (_Star Trek: Academy_ used to be the working title, at one point), he simply wanted to tell the world that this movie was a new beginning, an elaborate way to start from scratch, to reboot what was more than once dubbed _a dying franchise_. + +The movie was enjoyable - daring and a bit flamboyant - but still enjoyable nonetheless. I consider myself a Star Trek fan, and although it was _not_ the usual Star Trek movie, I somehow liked Abrahms' bold revisitation of Roddenberry's universe. Take a bunch of unknowns (Chris Pine) or semi-unknowns (Zachary Quinto), then add some spicy British humor (Simon Pegg) and some old friend (Leonard Nimoy) and throw in an awful lot of XXI century special effects: what you get is not the usual, let's-all-rock-because-we're-hit traditional Star Trek, of course, it's an _alternate_ version of it. + +That's precisely what the movie is meant to be: what Star Trek would have look like if it had been created in the XXI century. The timeline feels disrupted since the very first minute (nevermind the end!), with a Jim Kirk stealing his stepfather's car. Chris Pine is an ["alternate":http://memory-alpha.org/en/wiki/James_T._Kirk_(alternate_reality)] Kirk, quite different from the original one, but not that bad. Zachary Quinto, on the other hand, is a true revelation: he definitely is the new Spock, and he couldn't have been cast better. So is Simon Pegg as Scotty, but unfortunately he's not involved enough. + +The baddies were a bit of a letdown. Nero is a bit too flat, and his ship is way too fancy, no matter where it comes from. Clearly some Hollywood junkie wanted a big, invulnerable dark ship to bring havoc in the galaxy, but that is NOT a Romulan ship, period. + +At any rate, I enjoyed the movie and I'm looking forward to the second one, which I hope it will be followed by many others. + +Unfortunately in Italy Star Trek is not worshiped in Italy as in it is the US, which is very unfortunate... Roxanne and I decided to play along and go to the cinema half-dressed-up, but our friends Elora and Michelle came with a full-blown Uhura uniform! The whole cinema kept staring at us. It was a bit freaky, but fun (check out the pics on Facebook -- if you can, that is, I won't post them here!). + +h3. Wedding Planning + +Just over a month to my wedding. Scared? You bet. Stressed out? Indeed. Roxanne and I managed to get most of the things organized in the end, luckily. In particular, this month: +* We went to the British Consulate in Milan, and applied to get Roxanne's legal documents. +* I bought and had the 7 vest sets delivered to Roxanne's brother's (Caspar) place, in London. +* I ended up buying 8 (buy three, get one free) morning suits from "Marks and Spencer":http://www.marksandspencer.com/gp/product/B000N65ELG?extid=pg_msf&247SEM, and had them delivered to Caspar's place. He'll be sending all the stuff over soon, hopefully. +* Roxanne got the dresses for the maids of honor, and apparently we have to collect them on monday. +* We sent all the invites we needed to send, but we're still waiting for confirmations. It looks like it won't be a big wedding, probably around to 60-70 people mark. +* We ordered the "bomboniere":http://weddings.about.com/cs/glossary/g/Bomboniere.htm, they should come through soon. +* Uncle John told us he had the music for the church and the reception sorted out. +* We got the rings! + +We _still_ have to organize a few things, namely: +* Write and print the prayer books +* Book the flight for one of my ushers +* Get some fancy gifts for the bestman and the rest of the people involved in the ceremony +* Get married civilly here in Genoa +* Organize a party at our place for the people who can't come to the wedding +* Do something else I can't remember right now + +Yes, we are still busy as hell. I'm looking forward to it all, but I'll definitely be much more relaxed when it's all over! + +h3. Home Internet: Epilogue? + +I got broadband at home, finally, after five months. Let's do a quick recap: +# Last December I signed up to Libero Infostrada, and told them I wanted to disconnect from Telecom +# In January I actually got disconnected from Telecom, got a new phone line contract, but the Internet was never activated. +# I kept calling clueless operators on both ends pointlessly for 2-3 months. +# I got pissed off with Libero, so in April I signed up to Tele2, telling them to disconnect me from Libero. They told me it would take at least 4 weeks. +# Meanwhile, I signed up to 3g, and got an Internet USB key. At least I can go online, even if with a crappy UMTS connection. +# After a month, Telecom rings me asking if I want to come back to them, promising I'll have the Internet back on _soon enough_. Out of desperation, I accept and tell them to disconnect me from Tele2. + +Just when I was about to write a long post cursing Telecom and their perverted schemes to force their customers to stay with them, I receive a call from Libero and they tell me that the Internet is now activated! Unbelievable. Now all I have to do is send letters to all the other ISPs (they don't do these things on the phone -- clueless operators, remember?) telling them I don't want anything to do with them anymore. + +This is how broadband Internet works in Italy. Jealous? + +h3. Nimrod + +Last month I decided I would stop programming until after the wedding and so I did (at least at home). Nevertheless, I still keep strive to keep up-to-date with everything concerning technology and in particular programming. + +Out of all the tech news I came across throughout this month, the "Nimrod":http://force7.de/nimrod/ programming language definitely struck me the most. A German guy came up with a new language -- that's not a big news, new programming languages are born every week, if not every day. + +I believe Nimrod is different though. Basically, here's why: +* It's a mixture of Lisp, Python and C. It looks a bit like Python and it behaves like it (indentation matters), it allows the creation of macros, like in Lisp, and - this is what _really_ matters to me - it compiles to plain C (which can then be compiled using GCC or whatever). +* It is open source and can be used to produce commercially distributed executables. +* The "manual":http://force7.de/nimrod/manual.html is simple to read (but with a few rough edges), and the language looks simple to learn. +* The language is not yet complete, but it's getting close to a 1.0 release. It works as advertised, nonetheless. +* It offers a comprehensive standard library, and a _huge_ amount of libraries and wrappers from everything from Windows API to GTK and Cairo. +* It is cross platform, the Windows version even comes with a one-click installer. +* It has garbage collection _and_ it supports manual memory management, if you need it. +* It's statically typed, with type inference +* It can generate standalone executables, with very little overhead (90KB for an hello world program). + +A language like this has been my secret dream for a long time. I thought no one would ever come up like this. I am really looking forward to give it a proper try someday. What's wrong with it? For now, a few bits are missing (like native serialization), other than that someone pointed out the weird, rather extreme case insensitiveness of the language. Basically, case _and underscores_ are ignored to ??allow programmers to use their own programming conventions??. +Personally I don't think this is that bad. After all, if you name your variables "a_thing" and "aThing" and you want them to mean different things, that's bad programming style anyway. Nevertheless, as far as I know it's the only language I know which offers such an extreme degree of flexibility in this sense. + +h3. Learning new things + +This month I also found myself to be extremely eager to learn about new things. I'm still faithful to Ruby and all that, but I'm opening up to new possibility, for different things: +* I decided to start listening to slightly more technical podcasts, which are _not_related to tech news. In this way, I don't have the pressure of having to listen to them on a regular basis. Other than "FLOSS Weekly":http://twit.tv/FLOSS, which is probably the best show about Open Source Software out there, I'm going to try out "Software Engineering Radio":http://www.se-radio.net/ and "The Command Line":http://thecommandline.net/, both slightly more technical. +* Because I decided to put my personal programming projects on hold, I'm having all sort of new ideas about even _more_ projects I could start as soon as I can. No anticipations until after my wedding, of course. +* I'm using Vim all the time now, both at work and at home. I feel confident with it, but I feel I still have a lot to learn, especially when it comes to marks, registers, etc. And I'm not yet ready to write an article about it -- not the kind of article I'd like to write, anyway. * I'd like to learn more about Javascript and JQuery. I played around with it and _loved it_, but I really never used it for anything serious yet. This, however, may change in the future.
M content/articles/rails-inspired-php-frameworks.textilecontent/articles/rails-inspired-php-frameworks.textile

@@ -1,4 +1,6 @@

----- +summary: "A roundup of six different PHP frameworks inspired by Ruby on Rails. Each with essential details, comments, pros and cons." +popular: true permalink: rails-inspired-php-frameworks filters_pre: - redcloth

@@ -76,258 +78,258 @@ - rails

type: article toc: true ----- -There are various articles online examining many PHP frameworks, providing short reviews or comparative charts, but I could not find yet an article examining the so called _"Rails-inspired frameworks"_ anywhere on the web, so I decided to write my own... - -bq. *IMPORTANT UPDATE:* I do no longer recommend the CakePHP framework anymore due to the "unprofessionalism of some member of its development team":http://www.h3rald.com/blog/42. My site is now powered by Ruby on Rails and I totally lost interest in PHP and any PHP framework. If you are looking for a decent web framework, try "Ruby on Rails":http://www.rubyonrails.org (for Ruby), "Django":http://www.djangoproject.com/ (for Python) or "Catalyst":http://catalyst.perl.org/ (for Perl). -I'm talking about those PHP frameworks who give at least part of their success to Ruby on Rails[2], but don't call them _clones_ or _ports_ as some of their creators may get offended. - -!</img/pictures/rails.gif! - -Since Rails shocked the world with an easy-to-use, powerful and semi-sentient web development framework, web development is not the same anymore: everything must be done efficiently, quickly and you _have_ to produce a Web 2.0 compliant public beta after X days/weeks/months or your work is simply not useful to anybody. Try doing that with the traditional PHP spaghetti code: you can't, it's too much, it will be too tangled up and in the end you'll lose your mind trying to find that _small insignificant bug_ which makes your web application completely useless. - -Yes, you could use Rails, but maybe you don't know or don't want to learn Ruby, your host doesn't support it, your boss loves PHP etc. etc. If you're in this situation or you simply would like to know what's going on at the PHP front of the Rails Clone War, you should keep reading this article. - -I'd like to introduce - briefly - six Rails-inspired PHP frameworks and compare them with each other, to point out their features, their pros and cons. - -bq. _*Disclaimer:* I'm a CakePHP[3] fan, this site has been built with CakePHP and I even wrote something[4] about it in the past. This makes me inevitably partial and more familiar with this particular framework, but I'll try my very best to provide a relatively objective analysis. Obviously frameworks which are not based on the MVC architechture and that weren't inspired by Ruby on Rails have not been included, so forget things like PRADO, Qcodo, eZComponents, or even Mojavi: it's not that they are "bad", they've just been left out because they are not pertinent to this article_ - -h3. CakePHP - -!>/img/pictures/CakePHP_1.0.png! - -*Website:* "www.cakephp.org":http://www.cakephp.org/ -*PHP version:* PHP4 and PHP5 -*License:* MIT[5] -*Download size (.tar.gz):* 184KB -*Supported Databases:* MySQL, PostgreSQL, SQlite, MS SQL + any other supported by ADOdb or PEAR::DB database abstraction layers -*Beginner's Tutorial*: "Blog Tutorial":http://wiki.cakephp.org/tutorials:blog_tutorial_-_1 - -*Official Description:* -_"Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility."_ - -*PROs:* - -* Lightweight, not bloated, containing only essential code -* Runs both on PHP4 and PHP5 -* No configuration needed - except for a stupidly short database configuration file and a few constants which _can_ be modified. You can literally start baking in less than five minutes -* Extended table association support, allowing the creation of complex database architechtures -* Extremely logical and functional directory structure: better than Rails, if you ask me. -* Enhanced AJAX support through the AJAX and Javascript view helpers -* useful "bake" command line script to generate parts of the code automatically -* Very active community and plenty of _satellite sites_ -* Suitable for every kind of website, from the small personal site to the advanced e-business application. - -*CONs:* - -* No "official" internationalization support for now, but it will be included in the next milestone. -* It does not take fully advantage of PHP5 features -* Official documentation still needs some some improvement, although now it seems pretty complete and exhaustive. - -*Comments:* -CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake's philosophy is not to include unnecessary code in the framework unless it's absolutely necessary for the framework itself, as a result, 3rd-party libraries are not included in the official releases, but may be seamlessly integrated with the framework _if developers need them_. -Cake's success is partly determined - at least initially - by the fact that it can run fine with no limitations on PHP4, while other similar frameworks don't. Although this may still be one of its most obvious strengths, it must be said that Cake seems to go in the right direction, taking only the best from Rails, without forcing developers into complex and pointless adaptations, and evolving into a great framework created _in PHP, for PHP_. - - -h3. Symfony - -!>/img/pictures/symfony.gif! - -*Website:* "www.synfony.project.com":http://www.symfony-project.com/ -*PHP version:* PHP5 -*License:* Symfony[6] -*Download size (.tgz):* 1255KB -*Supported Databases:* MySQL, PostgreSQL, SQLite, Oracle, MS SQL + any other supported by Creole database abstraction layer -*Beginner's Tutorial*: "My first project":http://www.symfony-project.com/tutorial/my_first_project.html - -*Official Description:* -_"Based on the best practices of web development, thoroughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure. [...]_ -_Symfony is an object-oriented PHP5 framework based on the MVC model. Symfony allows for the separation of business rules, server logic and presentation views of a web application. It also contains numerous tools and classes aimed at shortening the development time of a complex web application."_ - -*PROs:* - -* Fully featured framework, includes everything you might ever need (see CONs, below) -* Full native internationalization support -* Truly excellent documentation, tutorials, wiki, book, screencasts, API, real-world examples, etc. etc. -* Code generators -* Various "pre-built" modules/libraries for the most common tasks -* It was not inspired only by Rails, but borrows concepts and practices from various other frameworks -* Good community support - -*CONs:* - -* Seems too big compared to the others, too many "extras" which may not be useful to _all_ developers -* PHP5 only -* Confusing and disorganized directory structure -* Uses too many configuration files, not suitable for _simple_ projects -* Steep learning curve - -*Comments:* -Symfony is really an interesting framework: it's perhaps the most _complete_ in terms for features and documentation. The only problem I have with it is that it just seems too complex and rather difficult to learn if compared to the others, which can do _almost_ the same things (or will soon be able to) in a _MUCH_ simpler way. A nice blend of MVC, pre-built components, command line generators and YAML/Propel configuration files, but perhaps a bit _disorganized_ in its internal structure, unlike its wonderful documentation and support section. - -h3. PHP on Trax - -!>/img/pictures/phpontrax.jpg! - -*Website:* "www.phpontrax.com":http://www.phpontrax.com/ -*PHP version:* PHP5 -*License:* MIT -*Download size (.tgz):* 843KB -*Supported Databases:* Any database supported by PEAR::DB -*Beginner's Tutorial*: "How to create a Trax application":http://svn.phpontrax.com/wiki/HowToCreateATraxApplication - -*Official Description:* -_"Php On Trax (formerly Php On Rails) is a web-application and persistance framework that is based on Ruby on Rails and includes everything needed to create database-backed web-applications according to the Model-View-Control pattern of separation."_ - -*PROs:* - -* Simple, logical, essential: a true RoR port to PHP5 -* Code generators, like Rails -* Zero configuration (like Rails and Cake -* Easy and logical directory structure (the same as Rails) -* Supports table associations, but more in a way which is more similar to Ruby on Rails than Cake. - -*CONs:* - -* Lack of documentation compared to the others -* Trying to port Ruby on Rails to PHP, ignoring why RoR was not built in PHP in the first place[7] -* No internationalization or other advanced functionalities -* PHP5 only -* Small community -* DBO class based only on PEAR::DB - -*Comments:* -In my opinion this project aims too much to be a Rails-clone to acquire a proper consensus. Trying to port something to another language is not good, especially in the case of Rails and Ruby. This framework looks somehow like an old version of CakePHP, which evolved slightly but always remained anchored to its beliefs of building a Rails port for PHP (even in the name!). Some may say that this is a lost battle since the beginning - or better, since before it started - but others found that PHP on Trax can be the easiest way to switch from Ruby on Rails to a PHP equivalent. Who is going to do that? Well, Ruby programmers _forced_ to develop in PHP, maybe. Not too good, but not too bad either. - - -h3. Code Igniter - -!>/img/pictures/codeigniter.jpg! - -*Website:* "www.codeigniter.org":http://www.codeigniter.com/ -*PHP version:* PHP4 and PHP5 -*License:* CodeIgniter[8] -*Download size (.zip):* 609KB -*Supported Databases:* MySQL, PostgreSQL, SQLite, MySQLi, MS SQL + ODBC -*Beginner's Tutorial*: "Hello World! Introduction to Code Igniter":http://www.codeigniter.com/videos/ci_intro.mov [video] - -*Official Description:* -_"Code Igniter is an Open Source Web Application Framework that makes writing kick-ass PHP programs simple as apple pie. [...] Designed to enable, not overwhelm, Code Igniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications._ -_If you're a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you're tired of ponderously large and thoroughly undocumented frameworks that require rocket science to understand, Code Igniter might just be the right tool for you."_ - -*PROs:* - -* Good and organized documentation -* Zero configuration (like Rails and Cake) -* Includes various classes and libraries for common tasks -* Compatible with PHP4 and PHP5 -* Medium-sized community -* Intuitive directory structure -* Ships with the full user guide included in separate HTML files - -*CONs:* - -* No full ("written") tutorials except the videos! -* Relatively new to the scene, but growing -* Does not seem to support table associations. - - -*Comments:* -People on the Net seem to be rather enthusiastic about this framework: where there's a thread about the _big ones_ (Cake and Symfony), there's always, someone who pops in suggesting to try out Code Igniter. I personally think this can be a true bless for small/medium sized projects, however, I'd opt for CakePHP or Symfony for a large scale application: something is missing, e.g., most notably, table associations. - - -h3. Biscuit - -!>/img/pictures/biscuit.gif! - -*Website:* "biscuitproject.tigris.org":http://biscuitproject.tigris.org/ -*PHP version:* PHP4 and PHP5 -*License:* MIT[5] -*Download size (.zip):* 240KB -*Supported Databases:* Any database supported by PEAR::DB -*Beginner's Tutorial*: "Creating a simple application using the Biscuit MVC framework":http://bennolan.com/biscuit/tutorial.html - -*Official Description:* -_"The mission of this project is to port Ruby on Rails to PHP5 (minus the Ruby part ;-)"_ - -*PROs:* - -* Zero configuration, easy to deploy -* Runs both on PHP4 and PHP5 -* Simple to learn - -*CONs:* - -* Still under development and incomplete -* Offers a limited subset of the features and functionalities offered by competitors: no internationalization, no table associations, no scaffolding... -* _"Documentation coming soon"_ -* Almost non-existent community - - -*Comments:* -This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I'm not sure whether the project is still active or not, since the last "release" on the former's developer site is dated August 2005. Still in early stage - or dead. - -h3. Pipeline - -!>/img/pictures/livepipe.jpg! - -*Website:* "livepipe.net/pipeline/":http://livepipe.net/pipeline/ -*PHP version:* PHP5 -*License:* Pipeline[9] -*Download size (.zip):* 288KB -*Supported Databases:* SQLite -*Beginner's Tutorial*: none - -*PROs:* - -* Simple directory structure -* Suitable for small projects -* Comes with various ready-made components -* Supports table relationships - -*CONs:* - -* PHP5-only -* Too restrictive: only SQLite supported, _kindly suggests_ developers to use its built-in features only -* No documentation or tutorials, just the API -* Not suitable for large projects -* Almost non-existent community - -*Comments:* -This project mainly borrowed the MVC architecture and some basic concepts from Rails, creating a simple PHP5 framework with personal/small websites in mind: it offers various built-in components which can be handy to most of us, supports _only_ SQLite, and basically tells developers what to do. In my opinion it's not flexible enough to be compared to the others, and it's simply not suitable for anything other than small websites. - -h3. Conclusions - -My favorite framework still remains CakePHP, it's simple and yet powerful, easy to learn and use, mature, well supported and continuously improving. Symfony - at the moment - seems to be the one with most features and the best documentation, and it is an excellent and well supported project. The only problem I have with it is the scary amount of configuration files necessary to create an application: CakePHP doesn't need any and can be used for (almost?) equally complex projects. -Although I didn't have a chance to try them out, PHP on Trax is certainly the most faithful port of Ruby on Rails to PHP, but it lacks some of the features CakePHP and Symfony offer. Code Igniter may not be as advanced as the others, but its community seems to grow and its simplicity may appeal more users in the future... - -At any rate, developers should _always_ choose the best framework for their needs: I tried to write a quick comparative analysis of these six Rails' "PHP children", now it's _your_ turn, try out some of them, if you choose wisely you won't be disappointed. - -h3. Notes - -fn1. They are all distributed according to various Open Source licenses. - -fn2. "Ruby on Rails":http://www.rubyonrails.org - Ruby framework for web development - -fn3. "CakePHP":http://www.cakephp.org - Rapid [PHP] Development Framework - -fn4. "CakePHP - A 'tasty' solution for PHP programming":/articles/view/cakephp, originally published on "zZine Magazine":http://www.zzine.org/articles/cakephp - -fn5. Open Source "MIT License":http://www.opensource.org/licenses/mit-license.php. - -fn6. Symfony License: -<small> -<blockquote> -Copyright (c) 2004-2006 Fabien Potencier -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -</blockquote> -</small> - -fn7. Read the comments by David Heinemeier Hansson on "Ruby on Rails to Basecamp":http://www.37signals.com/svn/archives/000606.php - -fn8. CodeIgniter "License Agreement":http://www.codeigniter.com/user_guide/license.html - +There are various articles online examining many PHP frameworks, providing short reviews or comparative charts, but I could not find yet an article examining the so called _"Rails-inspired frameworks"_ anywhere on the web, so I decided to write my own... + +bq. *IMPORTANT UPDATE:* I do no longer recommend the CakePHP framework anymore due to the "unprofessionalism of some member of its development team":http://www.h3rald.com/blog/42. My site is now powered by Ruby on Rails and I totally lost interest in PHP and any PHP framework. If you are looking for a decent web framework, try "Ruby on Rails":http://www.rubyonrails.org (for Ruby), "Django":http://www.djangoproject.com/ (for Python) or "Catalyst":http://catalyst.perl.org/ (for Perl). +I'm talking about those PHP frameworks who give at least part of their success to Ruby on Rails[2], but don't call them _clones_ or _ports_ as some of their creators may get offended. + +!</img/pictures/rails.gif! + +Since Rails shocked the world with an easy-to-use, powerful and semi-sentient web development framework, web development is not the same anymore: everything must be done efficiently, quickly and you _have_ to produce a Web 2.0 compliant public beta after X days/weeks/months or your work is simply not useful to anybody. Try doing that with the traditional PHP spaghetti code: you can't, it's too much, it will be too tangled up and in the end you'll lose your mind trying to find that _small insignificant bug_ which makes your web application completely useless. + +Yes, you could use Rails, but maybe you don't know or don't want to learn Ruby, your host doesn't support it, your boss loves PHP etc. etc. If you're in this situation or you simply would like to know what's going on at the PHP front of the Rails Clone War, you should keep reading this article. + +I'd like to introduce - briefly - six Rails-inspired PHP frameworks and compare them with each other, to point out their features, their pros and cons. + +bq. _*Disclaimer:* I'm a CakePHP[3] fan, this site has been built with CakePHP and I even wrote something[4] about it in the past. This makes me inevitably partial and more familiar with this particular framework, but I'll try my very best to provide a relatively objective analysis. Obviously frameworks which are not based on the MVC architechture and that weren't inspired by Ruby on Rails have not been included, so forget things like PRADO, Qcodo, eZComponents, or even Mojavi: it's not that they are "bad", they've just been left out because they are not pertinent to this article_ + +h3. CakePHP + +!>/img/pictures/CakePHP_1.0.png! + +*Website:* "www.cakephp.org":http://www.cakephp.org/ +*PHP version:* PHP4 and PHP5 +*License:* MIT[5] +*Download size (.tar.gz):* 184KB +*Supported Databases:* MySQL, PostgreSQL, SQlite, MS SQL + any other supported by ADOdb or PEAR::DB database abstraction layers +*Beginner's Tutorial*: "Blog Tutorial":http://wiki.cakephp.org/tutorials:blog_tutorial_-_1 + +*Official Description:* +_"Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility."_ + +*PROs:* + +* Lightweight, not bloated, containing only essential code +* Runs both on PHP4 and PHP5 +* No configuration needed - except for a stupidly short database configuration file and a few constants which _can_ be modified. You can literally start baking in less than five minutes +* Extended table association support, allowing the creation of complex database architechtures +* Extremely logical and functional directory structure: better than Rails, if you ask me. +* Enhanced AJAX support through the AJAX and Javascript view helpers +* useful "bake" command line script to generate parts of the code automatically +* Very active community and plenty of _satellite sites_ +* Suitable for every kind of website, from the small personal site to the advanced e-business application. + +*CONs:* + +* No "official" internationalization support for now, but it will be included in the next milestone. +* It does not take fully advantage of PHP5 features +* Official documentation still needs some some improvement, although now it seems pretty complete and exhaustive. + +*Comments:* +CakePHP is my personal favorite: easy to learn, easy to use,multi-purpose and not bloated. Cake's philosophy is not to include unnecessary code in the framework unless it's absolutely necessary for the framework itself, as a result, 3rd-party libraries are not included in the official releases, but may be seamlessly integrated with the framework _if developers need them_. +Cake's success is partly determined - at least initially - by the fact that it can run fine with no limitations on PHP4, while other similar frameworks don't. Although this may still be one of its most obvious strengths, it must be said that Cake seems to go in the right direction, taking only the best from Rails, without forcing developers into complex and pointless adaptations, and evolving into a great framework created _in PHP, for PHP_. + + +h3. Symfony + +!>/img/pictures/symfony.gif! + +*Website:* "www.synfony.project.com":http://www.symfony-project.com/ +*PHP version:* PHP5 +*License:* Symfony[6] +*Download size (.tgz):* 1255KB +*Supported Databases:* MySQL, PostgreSQL, SQLite, Oracle, MS SQL + any other supported by Creole database abstraction layer +*Beginner's Tutorial*: "My first project":http://www.symfony-project.com/tutorial/my_first_project.html + +*Official Description:* +_"Based on the best practices of web development, thoroughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure. [...]_ +_Symfony is an object-oriented PHP5 framework based on the MVC model. Symfony allows for the separation of business rules, server logic and presentation views of a web application. It also contains numerous tools and classes aimed at shortening the development time of a complex web application."_ + +*PROs:* + +* Fully featured framework, includes everything you might ever need (see CONs, below) +* Full native internationalization support +* Truly excellent documentation, tutorials, wiki, book, screencasts, API, real-world examples, etc. etc. +* Code generators +* Various "pre-built" modules/libraries for the most common tasks +* It was not inspired only by Rails, but borrows concepts and practices from various other frameworks +* Good community support + +*CONs:* + +* Seems too big compared to the others, too many "extras" which may not be useful to _all_ developers +* PHP5 only +* Confusing and disorganized directory structure +* Uses too many configuration files, not suitable for _simple_ projects +* Steep learning curve + +*Comments:* +Symfony is really an interesting framework: it's perhaps the most _complete_ in terms for features and documentation. The only problem I have with it is that it just seems too complex and rather difficult to learn if compared to the others, which can do _almost_ the same things (or will soon be able to) in a _MUCH_ simpler way. A nice blend of MVC, pre-built components, command line generators and YAML/Propel configuration files, but perhaps a bit _disorganized_ in its internal structure, unlike its wonderful documentation and support section. + +h3. PHP on Trax + +!>/img/pictures/phpontrax.jpg! + +*Website:* "www.phpontrax.com":http://www.phpontrax.com/ +*PHP version:* PHP5 +*License:* MIT +*Download size (.tgz):* 843KB +*Supported Databases:* Any database supported by PEAR::DB +*Beginner's Tutorial*: "How to create a Trax application":http://svn.phpontrax.com/wiki/HowToCreateATraxApplication + +*Official Description:* +_"Php On Trax (formerly Php On Rails) is a web-application and persistance framework that is based on Ruby on Rails and includes everything needed to create database-backed web-applications according to the Model-View-Control pattern of separation."_ + +*PROs:* + +* Simple, logical, essential: a true RoR port to PHP5 +* Code generators, like Rails +* Zero configuration (like Rails and Cake +* Easy and logical directory structure (the same as Rails) +* Supports table associations, but more in a way which is more similar to Ruby on Rails than Cake. + +*CONs:* + +* Lack of documentation compared to the others +* Trying to port Ruby on Rails to PHP, ignoring why RoR was not built in PHP in the first place[7] +* No internationalization or other advanced functionalities +* PHP5 only +* Small community +* DBO class based only on PEAR::DB + +*Comments:* +In my opinion this project aims too much to be a Rails-clone to acquire a proper consensus. Trying to port something to another language is not good, especially in the case of Rails and Ruby. This framework looks somehow like an old version of CakePHP, which evolved slightly but always remained anchored to its beliefs of building a Rails port for PHP (even in the name!). Some may say that this is a lost battle since the beginning - or better, since before it started - but others found that PHP on Trax can be the easiest way to switch from Ruby on Rails to a PHP equivalent. Who is going to do that? Well, Ruby programmers _forced_ to develop in PHP, maybe. Not too good, but not too bad either. + + +h3. Code Igniter + +!>/img/pictures/codeigniter.jpg! + +*Website:* "www.codeigniter.org":http://www.codeigniter.com/ +*PHP version:* PHP4 and PHP5 +*License:* CodeIgniter[8] +*Download size (.zip):* 609KB +*Supported Databases:* MySQL, PostgreSQL, SQLite, MySQLi, MS SQL + ODBC +*Beginner's Tutorial*: "Hello World! Introduction to Code Igniter":http://www.codeigniter.com/videos/ci_intro.mov [video] + +*Official Description:* +_"Code Igniter is an Open Source Web Application Framework that makes writing kick-ass PHP programs simple as apple pie. [...] Designed to enable, not overwhelm, Code Igniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to create full-featured web applications._ +_If you're a developer who lives in the real world of shared hosting accounts and clients with deadlines, and if you're tired of ponderously large and thoroughly undocumented frameworks that require rocket science to understand, Code Igniter might just be the right tool for you."_ + +*PROs:* + +* Good and organized documentation +* Zero configuration (like Rails and Cake) +* Includes various classes and libraries for common tasks +* Compatible with PHP4 and PHP5 +* Medium-sized community +* Intuitive directory structure +* Ships with the full user guide included in separate HTML files + +*CONs:* + +* No full ("written") tutorials except the videos! +* Relatively new to the scene, but growing +* Does not seem to support table associations. + + +*Comments:* +People on the Net seem to be rather enthusiastic about this framework: where there's a thread about the _big ones_ (Cake and Symfony), there's always, someone who pops in suggesting to try out Code Igniter. I personally think this can be a true bless for small/medium sized projects, however, I'd opt for CakePHP or Symfony for a large scale application: something is missing, e.g., most notably, table associations. + + +h3. Biscuit + +!>/img/pictures/biscuit.gif! + +*Website:* "biscuitproject.tigris.org":http://biscuitproject.tigris.org/ +*PHP version:* PHP4 and PHP5 +*License:* MIT[5] +*Download size (.zip):* 240KB +*Supported Databases:* Any database supported by PEAR::DB +*Beginner's Tutorial*: "Creating a simple application using the Biscuit MVC framework":http://bennolan.com/biscuit/tutorial.html + +*Official Description:* +_"The mission of this project is to port Ruby on Rails to PHP5 (minus the Ruby part ;-)"_ + +*PROs:* + +* Zero configuration, easy to deploy +* Runs both on PHP4 and PHP5 +* Simple to learn + +*CONs:* + +* Still under development and incomplete +* Offers a limited subset of the features and functionalities offered by competitors: no internationalization, no table associations, no scaffolding... +* _"Documentation coming soon"_ +* Almost non-existent community + + +*Comments:* +This project started as an attempt to create something simpler than CakePHP and more similar to Rails. I'm not sure whether the project is still active or not, since the last "release" on the former's developer site is dated August 2005. Still in early stage - or dead. + +h3. Pipeline + +!>/img/pictures/livepipe.jpg! + +*Website:* "livepipe.net/pipeline/":http://livepipe.net/pipeline/ +*PHP version:* PHP5 +*License:* Pipeline[9] +*Download size (.zip):* 288KB +*Supported Databases:* SQLite +*Beginner's Tutorial*: none + +*PROs:* + +* Simple directory structure +* Suitable for small projects +* Comes with various ready-made components +* Supports table relationships + +*CONs:* + +* PHP5-only +* Too restrictive: only SQLite supported, _kindly suggests_ developers to use its built-in features only +* No documentation or tutorials, just the API +* Not suitable for large projects +* Almost non-existent community + +*Comments:* +This project mainly borrowed the MVC architecture and some basic concepts from Rails, creating a simple PHP5 framework with personal/small websites in mind: it offers various built-in components which can be handy to most of us, supports _only_ SQLite, and basically tells developers what to do. In my opinion it's not flexible enough to be compared to the others, and it's simply not suitable for anything other than small websites. + +h3. Conclusions + +My favorite framework still remains CakePHP, it's simple and yet powerful, easy to learn and use, mature, well supported and continuously improving. Symfony - at the moment - seems to be the one with most features and the best documentation, and it is an excellent and well supported project. The only problem I have with it is the scary amount of configuration files necessary to create an application: CakePHP doesn't need any and can be used for (almost?) equally complex projects. +Although I didn't have a chance to try them out, PHP on Trax is certainly the most faithful port of Ruby on Rails to PHP, but it lacks some of the features CakePHP and Symfony offer. Code Igniter may not be as advanced as the others, but its community seems to grow and its simplicity may appeal more users in the future... + +At any rate, developers should _always_ choose the best framework for their needs: I tried to write a quick comparative analysis of these six Rails' "PHP children", now it's _your_ turn, try out some of them, if you choose wisely you won't be disappointed. + +h3. Notes + +fn1. They are all distributed according to various Open Source licenses. + +fn2. "Ruby on Rails":http://www.rubyonrails.org - Ruby framework for web development + +fn3. "CakePHP":http://www.cakephp.org - Rapid [PHP] Development Framework + +fn4. "CakePHP - A 'tasty' solution for PHP programming":/articles/view/cakephp, originally published on "zZine Magazine":http://www.zzine.org/articles/cakephp + +fn5. Open Source "MIT License":http://www.opensource.org/licenses/mit-license.php. + +fn6. Symfony License: +<small> +<blockquote> +Copyright (c) 2004-2006 Fabien Potencier +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +</blockquote> +</small> + +fn7. Read the comments by David Heinemeier Hansson on "Ruby on Rails to Basecamp":http://www.37signals.com/svn/archives/000606.php + +fn8. CodeIgniter "License Agreement":http://www.codeigniter.com/user_guide/license.html + fn9. Pipeline is licensed under the same terms as the Symfony framework [Copyright (c) 2006 Picora Pipeworks LLC].
M content/home.textilecontent/home.textile

@@ -1,6 +1,7 @@

----- permalink: home filters_pre: +- erb - redcloth title: Home comments: []

@@ -11,12 +12,50 @@

type: page toc: true ----- -<div class="panel" id="home"> +<% +max_items = 5 +get_max_articles = lambda do |sorted| + sorted[sorted.length-(max_items)..sorted.length-1].reverse +end + +sorted_l = @site.pages.select{|p| p.attributes[:date] && p.attributes[:type] == 'article'}.sort{|a, b| a.attributes[:date] <=> b.attributes[:date]} +latest = get_max_articles.call sorted_l +sorted_p = @site.pages.select{|p| p.attributes[:date] && p.attributes[:type] == 'article' && p.attributes[:popular]}.sort{|a, b| a.attributes[:date] <=> b.attributes[:date]} +popular = get_max_articles.call sorted_p +%><div class="panel" id="home"> + +h2. Welcome + +This is Fabio Cevasco's web site, featuring his "articles":/#articles and open source "projects":/#projects. Fabio is a full-time technical writer working in Genoa, Italy. In his free time, he enjoys writing (surprise, surprise), reading about technology and programming a little bit in Ruby and other languages. + +You can contact him by writing an email to _h3rald [at] h3rald [dot] com_, or through: + +* "Twitter":http://www.twitter.com/h3rald +* "LinkedIn":http://www.linkedin.com/pub/dir/Fabio/Cevasco +* "Delicious":http://www.delicious.com/h3rald +* "Facebook":http://www.facebook.com/h3rald +* "Shelfari":http://www.shelfari.com/h3rald +* "FriendFeed":http://friendfeed.com/h3rald -h2. Home +<div class="article-list" id="latest-articles"> +h3. Latest Articles -popular:10-programming-languages|10-reasons-to-learn-ruby|firefox-lovers-guide-to-opera|komodo-edit-review|rails-inspired-php-frameworks +<% +latest.each do |a| +%> +<%= render 'article_item', :article => a %> +<% end %> +</div> +<div class="article-list" id="popular-articles"> +h3. Popular Articles +<% +popular.each do |a| +%> +<%= render 'article_item', :article => a %> +<% end %> +</div> +<div class="clearleft"></div> </div> <div class="panel" id="archives">

@@ -32,6 +71,37 @@

</div> <div class="panel" id="about"> -h3. About +h2. About + +This is a _minimalist_ web site: I do not care about fancy graphics or nitfy effects. I do care, however, about content and I want you to read what I write comfortably. As you can see, this site has no sidebars: it only has a header, a main column and a footer, exactly where you expect them to be. + +This site was designed to work with all the major modern browsers (hint: Internet Explorer 6 is _not_ a modern browser). It validates as XHTML 1.1 Strict and CSS 2.1. + + +h3. Under the Hood + +This site is powered by: + +* -A customized version of the "Typo":http://www.typosphere.org blogging engine.- +* -The "Ruby on Rails":http://www.rubyonrails.org web framework for the "Ruby":http://www.ruby-lang.org programming language.- +* -The "MySQL":http://www.mysql.com database engine.- +* -The "Apache":http://www.apache.org web server.- +* Just "Nanoc":http://nanoc.stoneship.org/, <em>"[...] a site compiler written in Ruby for building awesome web sites."</em> + +h3. Licensing + +My "articles":/#archives and other material available on this web site are lincesed under the _Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported_license. For other uses, contact me. + + +<p style="text-align:center"> +<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" /></a> +</p> + +h3. Credits + +I'd like to thank the following people for their work, which made this web site possible: + +* "Denis Defreyne":http://www.stoneship.org/, for creating the wonderful "Nanoc":http://nanoc.stoneship.org/ site compiler. +* "David J.Perry":http://scholarsfonts.net/, who designed the "Cardo font":http://scholarsfonts.net/cardofnt.html I used for the H3RALD logo. </div>
A layouts/article_item.htm

@@ -0,0 +1,9 @@

+----- +filter: erb +----- +<div class="article-item"> + <h4><a href="/articles/<%= @article.attributes[:permalink]%>/"><%= @article.attributes[:title]%></a></h4><% unless (@article.attributes[:tags].empty?) then %><div class="article-tags"><%= "Tagged as: "+@article.attributes[:tags].map{ |t| %{<a href="/tags/#{t}" class="tag">#{t}</a>} }.join(", ") %> + </div> + <% end %><% if (@article.attributes[:summary]) then %><div class="article-summary"><%= @article.attributes[:summary] %> + </div><% end %> +</div>
M layouts/default.htmlayouts/default.htm

@@ -33,10 +33,10 @@ <script src="/js/Chopin_400.font.js" type="text/javascript"></script>

<script src="/js/Cardo_400.font.js" type="text/javascript"></script> <script src="/js/Mutlu_400.font.js" type="text/javascript"></script> <script type="text/javascript"> - Cufon.replace('#navigation a', {fontFamily: 'Mutlu', hover: true}); - Cufon.replace('h2', {fontFamily: 'Mutlu'}); - Cufon.replace('h3', {fontFamily: 'Mutlu', hover: true}); - Cufon.replace('h4', {fontFamily: 'Mutlu'}); + Cufon.replace('#navigation a', {fontFamily: 'Mutlu', hover: true, fontSize: '35px'}); + Cufon.replace('h2', {fontFamily: 'Mutlu', fontSize: '40px'}); + Cufon.replace('h3', {fontFamily: 'Mutlu', hover: true, fontSize: '35px'}); + Cufon.replace('#article-content h4', {fontFamily: 'Mutlu', fontSize: '28px'}); function tweets_received(){ $('.twitter-item[title]').qtip(dark_tooltip); }

@@ -94,10 +94,13 @@ <% if @page.permalink == 'home' then %>

<div id="slider"> <div class="scroll"> <div class="scrollContainer"> + <%= @page.content %> <% else %> - <h2><%= @page.title %></h2> + <div id="article-content"> + <h2><%= @page.title %></h2> + <%= @page.content %> + </div> <% end %> - <%= @page.content %> <% if @page.permalink == 'home' then %> </div><!-- .scrollContainer -->
M resources/css/elements.cssresources/css/elements.css

@@ -145,6 +145,29 @@ margin: 3px 2px;

color: #BDB7BA; } +#latest-articles +{ + float:left; + width: 400px; +} + +#popular-articles +{ + float:right; + width: 400px; +} + +.clearleft +{ + clear:both; +} + +.article-item +{ + padding: 0.5em 0; + display: block; +} + /*** Arrows ***/ #down-arrow
M resources/css/layout.cssresources/css/layout.css

@@ -57,7 +57,7 @@

#logo { height: 72px; - z-index: 0; + margin-top: -25px; } #header-container, #footer-container

@@ -79,19 +79,12 @@ float: right;

text-align: right; } -#navigation -{ - padding-right: 60px; - margin-top: -5px -} - #navigation li { - display: block; - float: left; + display: inline; list-style-type: none; - width: 100px; - text-align: center; + padding-left: 35px; + } #ie-warning
M resources/css/text.cssresources/css/text.css

@@ -2,6 +2,7 @@ /* TEXT */

h2, h3, h4, h5 { + margin: 0; font-family: Georgia, Serif; font-weight: normal; color: #B80000;

@@ -9,26 +10,29 @@ }

h1 { - margin: 0; - font-size: 50px; + font-size: 2em; } h2 { - margin: 0; - font-size: 45px; text-align: center; + font-size: 1.7em; } h3 { - margin: 0; - font-size: 35px; + font-size: 1.5em; +} + +h4 +{ + font-size: 1.3em; } .dropcap { - font-size:50px; - width: 40px; + font-size: 35px; + text-align: right; + width: 50px; height: 50px; display:block; float:left;

@@ -42,7 +46,6 @@ }

#services h3 { - font-size: 35px; border: 1px solid #000; text-align: left; cursor: pointer;

@@ -51,12 +54,6 @@ height: 50px;

display: block; } -h4 -{ - margin: 0; - font-size: 30px; -} - em { font-style: italic; }

@@ -79,13 +76,35 @@ background: url("../images/icons/bullet.png") top left no-repeat;

padding-left: 20px; } +/**** Article Lists ****/ -/******* LINKS *******/ +.article-list h3 +{ + margin-bottom: 1.5em; +} + +.article-item h4 +{ + font-size: 1.2em; + margin: 0; + padding: 0; +} + +.article-tags +{ + font-size: 90%; + padding-left: 1em; +} -#navigation a +.article-summary { - font-size: 25px; + padding-left: 1em; + font-style: italic; } + + + +/******* LINKS *******/ a, a.gs-title {
M resources/js/init.jsresources/js/init.js

@@ -17,7 +17,7 @@ var first_letter = text.substr(0,1);

if (first_letter.match(/[a-zA-Z]/)){ node.nodeValue = text.slice(1,text.length); $('<span></span>').addClass('dropcap').html(first_letter).prependTo( first_paragraph ); - Cufon.replace('.dropcap', {fontFamily: 'Mutlu'}); + Cufon.replace('.dropcap', {fontFamily: 'Mutlu', fontSize: '40px'}); }; }); });