So I got myself a brand new iPod touch

Last month I finally had a chance to spend some time (and
money) in Florida, so besides going to the beach and meeting alligators I decided to get myself a nice gadget for Christmas. Technically speaking it's a present for my wife, but I picked it.

Originally I was going to get myself a netbook, not because I particularly needed one, just because -- I thought -- for $300 I may as well get a computer.
I was actually tempted to buy a Kindle or a Nook, but then I decided against it: why spending the same amount of money on so ethibg you can only use to read books? Nonsense: a netbook is ten times better.

So I went to Best Buy and decided to ask one of the guys for tips. surprisingly, the shop assistant was very honest and told me "well, if it was up to me I'd get the cheapest possible: you are probay gonna change it in a year or so, right"?
Errr... No, actually. So I started looking at tablets and
other similar gadgets: I mostly wanted something with WiFi connectivity, as that was the only thing I really missed in my Palm Treo 750 (yes, Windows Mobile, I know, I know... But I was young then!).

At this point, my wife comes along and goes: "Can't you just get an iPod touch then? It has what you need and it's sexy as well" (note: yes, since she got her mac she's kind of partial to Apple).

Indeed I decided to go for an iPod touch, and I'm very happy with it. This thing is sleek, responsive, and powerful. Originally I was going to go for an 8GB model, but then I read the specs more carefully and discovered that Apple just upgraded the OS on the 8GB models without changing it's hardware, so the 8GB iPod "3G" is Actually nothing more than an iPod 2G with a different name. So I went for a 32GB model.

Are 3G iPods that different from the previous generation? Well, enough:
- 256MB of RAM instead of 128
- 833MHz (underclocked to 600MHz) ARM processor instead of 600MHz (underclocked to 533MHz)
- better graphics card
- hidden FM receiver/transmitter
- hidden WiFi 802.11n receiver

I think all this (and of course the extra disk space) is well worth the $100 price difference!

What can I say? I've been using this for a few days and the GUI is so addictive and awesome that I've been neglecting my laptop, even for writing this very post.

After 2 days I loaded it with about 80 apps, all free except the following that I purchased with a 15€ iTunes voucher:
- Ocarina
- Notebooks
- 2Do
- Air Share

Why didn't I get an iPhone? because it would cost too much, it wouldn't have worked in Italy and because my current phone works fine. Plus I can live without a GPS (I have my wife for that) and a camera.

Loading mentions Retweet

Comments [0]

Fossil: A tiny, easy and feature-packed project management solution

Fossil is a software configuration management system. Fossil is software that is designed to control and track the development of a software project and to record the history of the project. There are many such systems in use today. Fossil strives to distinguish itself from the others by being extremely simple to setup and operate.

Imagine an SCM
-- easy, CSV or SVN

...a distributed SCM
-- Git?

...with a bugtracking system and an integrated wiki
-- Github, pretty much

...with a web interface and a web server
-- Definitely Github

...all in a single precompiled file (less than 800KB, available for Windows, Mac and Linux)
-- ...you what?

Welcome to the world of Fossil. When I wrote my thesis on version control system, you had to install CVS or SVN, and they had a central repository on  a server somewhere.
Then I discovered Git, and the wonderful world of distributed VCSs: no central repository anymore, so you could host your own repository on your own local machine, provided that you installed Git first, (portable versions are available though).

Fossil is a distributed VCS, but you don't need to install anything on your machine. All you need to do is to download a single file. Everything you need is right there, in under 800KB (on Windows, but of course Mac and Linux versions are available, too). It uses SQLite as main storage everything, from your code commits to Wiki pages.
While this can scare some folks, keep in mind that Fossil was created by the author of SQLite itself, so they definitely know how to use the popular single-file database properly. If you're still not convinced, you should definitely read about Fossil reliability and performance.

Getting Started

fossil new test
This command creates a new fossil repository named test. It also creates an administrative user (named after your username on your computer) with a temporary password.

fossil ui test
This command starts the server on port 8080 and opens a browser window on http://127.0.0.1:8080. What you see is a web page similar to the Fossil site, where you're kindly asked to head over to /setup_config to configure your project.

User Management

Fossil comes with full-fledged user management. You can add, edit, remove users and change their privileges and access rules. Unfortunately in my short test the logout link didn't seem to work, and I was unable to login as a different user... but I'm confident that this issue will be addressed.


Wiki

Fossil comes with a bare bones -- but functional -- wiki. It supports special markup for creating lists and links, and you can use HTML for everything else, and as all respectable Wikis, Fossil Wiki supports history and diff between two consecutive versions.
Additionally, you can use the wiki for "embedded documentation": if you put a .wiki file anywhere within your project, it will be accessible through Fossil UI.

For more information, see Wiki in Fossil.


Tickets

The integrated ticketing system is again pretty basic but does the job. You can obsiously create, edit, delete tickets and display them. Now, the neat thing is that if you don't like the way tickets are displayed, you can change the SQL query used to generate a ticket list.

For more information, see Bug Tracking in Fossil.

Basic VCS usage

Here's a simple fossil session showing how to use the basic commands to manage the source code of your project.

> cd test_project

> fossil open ../test

> fossil add test.rb
ADDED  test.rb

> fossil info

project-name: Test Project
repository:   D:/Temp/fossil/test
local-root:   D:/Temp/fossil/test_project/
user-home:  : C:/Documents and Settings/ita12311/Application Data
project-code: 091a4156135671783d93da715c3be525cc3eec92
server-code:  f6e913439853c30303173ca10f5235a66b51125c
checkout:     b527a6344058d427132e61b68956ee2a4eff0b1c 2009-12-21 08:00:19 UTC
tags:         trunk

> fossil status
repository:   D:/Temp/fossil/test
local-root:   D:/Temp/fossil/test_project/
server-code:  f6e913439853c30303173ca10f5235a66b51125c
checkout:     b527a6344058d427132e61b68956ee2a4eff0b1c 2009-12-21 08:00:19 UTC
tags:         trunk
ADDED      test.rb

> fossil commit
notepad "D:/Temp/fossil/test_project/ci-comment-660FA25BB2C2.txt"
'gpg' is not recognized as an internal or external command,
operable program or batch file.
unable to sign manifest.  continue (y/N)? y
New_Version: 8124462472b4afeec8f799531f702ebf92f069d2

> fossil status
repository:   D:/Temp/fossil/test
local-root:   D:/Temp/fossil/test_project/
server-code:  f6e913439853c30303173ca10f5235a66b51125c
checkout:     8124462472b4afeec8f799531f702ebf92f069d2 2009-12-21 08:55:40 UTC
parent:       b527a6344058d427132e61b68956ee2a4eff0b1c 2009-12-21 08:00:19 UTC
tags:         trunk

> fossil diff test.rb

--- test.rb
+++ test.rb
@@ -1,7 +1,11 @@
 class Test
        def test_method
                puts "Hello World!"
+       end
+
+       def another_test_method
+               puts "Goodbye!"
        end
 end

> fossil close


Final Thoughts

Although Fossil has been used successfully for some very respectable real-world projects, obviously I won't abandon Git anytime soon. Although it really appeals me in terms of portability and centralized solution (as in "everything in one place": code, documentation and tracking) it is still a bit basic in terms of functionality compared to other VCS (that are only VCSs), wikis or tracking systems.

I'll definitely use it whenever I need to plug-in a versioning system to a directory containing documents or code snippets, for example. Or even just as a personal wiki or bug tracking system: it's excellent even if you don't need a versioning system!

                       
Click here to download:
Fossil_A_tiny_easy_and_feature.zip (608 KB)

Loading mentions Retweet
Filed under  //   productivity   tools   tracking   vcs   wiki  

Comments [1]

You should learn a new programming language if...

Yesterday someone posted an interesting comment to one of my articles on DZone:

There are 8 features to consider when choosing a programming language:
 
20 points -- is is solid? would you write a control program for an aircraft or a pacemaker? 
15 points -- can you write a database system (like mysql) in that language, including the deamons?
15 points -- libraries: regex, reading XML, manipulating complex numbers, graphics;
10 points -- active community + books + web pages
10 points -- can write fast IO and easily read complex input and binary input? fancy formatting?
10 points -- can you write web pages;
10 points -- support for OOP?
10 points -- available at least on 2 platforms, Windows and/or Linux and/or Mac.
Rate the language on a scale of 0 to 100. At 75+ you should use it.

While I agree on some of the above, I thought I'd provide my own test to decide whether to learn a particular programming language or not.

Here goes:
  • +20 points: is it the fastest and easiest way to solve the problem at hand?
  • +10 points: has it been used successfully for three or more big applications like high-traffic websites or popular desktop programs?
  • +15 points: does it have a good standard library, including support for regular expression, GUI programming, XML processing, database and web development?
  • +10 points: does it run on at least 2 different desktop platforms?
  • +10 points: does it support a way to organize your code, like modules or namespaces?
  • +5 points: does it run on at least one mobile platform?
  • +10 points: does it support OOP?
  • +10 points: does it support FP?
  • +15 points: does it have a large, active and helpful community?
  • +10 points: is learning material easily available (books, web sites, articles, etc.)?
  • +10 points: is it faster than all other languages you use regularly?
  • +10 points: is it easier to use than all other languages you use regularly?
  • +5 points: can it be embedded or integrated with another programming language you use regularly?
  • +5 points: has it been around for 7+ years?
  • -20 points: is it similar, for syntax and features, to another language you use regularly?
If your score is 85 or higher, then you should learn it, otherwise don't bother. Based on the above, it turns out that I should learn Haskell but not Python, as I know Ruby already.

It's probably a bit overly simplified, but what do you think? Any ideas on how to improve this silly test?
Loading mentions Retweet
Filed under  //   learning   programming   test  

Comments [0]

Ready to fight the flu!

Today I received a gift from my company: an influenza prevention kit. I just couldn't believe it until I saw some of my colleagues getting it at the reception desk, so I asked for one myself.

The kit contains:

  • #1 gel detergent for your hands
  • #2 medical face masks
  • #2 pairs of medical gloves
  • #1 packet of paper handkerchiefs 
  • #5 anti-bacterial wipes
Is this normal in your country? I think Italy is WAY ahead when it comes to health & safety.

At this rate, I am confident that by the end of 2011 we'll all get our tickets for the Arks, maybe even for free!

         
Click here to download:
Ready_to_fight_the_flu_tags_hu.zip (1430 KB)

Loading mentions Retweet
Filed under  //   flu   humor   work  

Comments [0]

Should I give Haskell another try?

Haskell is a wonderful programming language. I'm not kidding, I really mean it. It's definitely worth checking out, at least.
Haskell is purely functional, succinct, elegant, fast, compiled, cross-platform, well-documented, feature-rich, and cross-platform. On paper, it's pure awesomeness: it lets you program in a way no other language can.

Programming in Haskell requires a radical paradigm shift, so it's not for anyone. I was always intrigued by it, and I started to learn it a few times in the past, on a yearly basis. Now it's that time of the year again, but before I embark in yet another almost-pointless journey, I wanted to analyze the issues I stumbled across last time I read through the countless tutorials and other awesome and free resources online.

Note #1 These are issues I found about a year ago, hopefully they are not true anymore. If you think they are not true, by all means explain why in the comments, but do it in a civilized manner: I am not criticizing your language of choice, I just want to learn more about it.

Note #2 I don't need to learn Haskell. I won't use it for work, not in the short term anyway. But I would use it sporadically to perform certain tasks for which I cannot use Ruby for, i.e. something that needs to be fast and not require something installed to run. Maybe some silly CLI tools, but maybe even some GUI or web/network stuff.

Here's what I'm most scared about, when it comes to learning Haskell:

1. Haskell is alien to what I'm used to

Haskell is purely functional. If you're not accustomed with functional programming, you're in for a big shock. I'd recommend learning the rudiments of Lisp/Scheme to learn a bit of (impure) functional programming first, digest it, and then get back to Haskell. I did that already, so the shock wasn't too big.

Still, the biggest differences with other programming languages are that:

  1.  all data is immutable (no c++, i += 1, i = 1+1 and similar),
  2. you can handle lists of infinite numbers and other similar lazy data structures like they were peanuts,
  3. above all, you must deal with side effects (including IO) through monads
...which leads us to the next point.

2. Haskell Monads are not exactly intuitive, and mastering them requires time and an iron will

If you google the Internet for tutorials on Haskell monads, you'll find loads. Everyone tried to explain them using the weirdest analogies, with mixed results. Personally, I really liked this tutorial, which aims at making you understand how monads work by inventing them yourself. I read it, slowly, more than once, I remember getting very, very close to grasping the concept behind it... but not quite. There was still something missing. How did you understand monads (possibly without getting too much into category theory)?

3. Package management is somewhat immature and confusing

This was another thing that put me off Haskell back in the day. Apparently there are many different official repositories of Haskell programs and libraries. Cabal Install seemed, a year ago, the best way to install packages, in a way that is similar to Rubygems or Debian packages. Unfortunately last time I tried it gave me the impression not to be mature enough. How are things going on this front?

One of the biggest problems of Haskell packages is that the GHC compiler releases are somewhat too frequent. I found myself unable to decide which version to install: one of the latest, which is better and has more features or a (very) old one, which at least guarantees me that the majority of Haskell libraries will work with it? If you think Ruby 1.8.x vs. 1.9.x makes things confusing... well, be glad to know that things can be much worse in the Haskell world. Is this still true?

4. Ultimately, a more traditional language gets things done with much less hassle

I could handle the paradigm shift well, I guess I could have learned Monads at some point, but the inability to install Haskell programs in a relatively easy way (e.g. Yi) really put me off. At the end of my last trip to the wonderful world of Haskell, I realized I could get things done more quickly, without the extra hassle with another language.

Still, I decided to wait a bit (a year) and see if things improved. A year has passed, should I give Haskell another try?

Loading mentions Retweet
Filed under  //   haskell   learning   programming  

Comments [6]

I have a cunning plan...


-- Baldrick, from the Black Adder TV Series

I've always been concerned about not being able to publish enough new content on my web site. That's due to lack of time, but not always: part of the problem was that posting on a blog is hard. Not hard as in impossible to do, but rather as in not lazy enough. Clearly, the WordPress approach doesn't really work for me: I don't like using a web form to write my articles, and especially I'm not fond of the WYSIWYG way of doing things.

That's why I moved my website to Nanoc, and that was awesome. For the first time in my online life I found something that gives me full control over the way I want to publish my content and the features I want to integrate into my web site. Still, Nanoc didn't increase the number of new articles published per month.
Why's that? Simple: because before posting on my site I look at my previous articles and think: No, this is not suitable, I must research it more thoroughly or something similar. More specifically, publishing blog posts about something personal or some thoughts on something I read on a tech news site became increasingly more difficult as my main site evolved into a collection of articles.

Then, not too long ago, I had an epiphany. My fellow countryman Antonio Cangiano started a blog on Posterous! Why would someone with over 4,000 readers do such a thing? It turns out he has a similar problem (on a much bigger scale, of course):

I often feel the need to express other aspects of my persona, and my main blog, Zen and the Art of Programming, is not an appropriate outlet for such discourse. Conversely, my Twitter account, which is more generic in nature, imposes a 140 character limit on my thoughts.

So here I am. This is my new blog. As usual, it won't follow a very specific theme and posts will probably range from technology, programming, travelling, sci-fi, politics and whatever else crosses my mind. It's my newest cunning plan, in the finest Baldrick tradition: I'm not sure how it will go, but it's better than nothing.

Subscriptions are open, I hope you'll enjoy it.

Loading mentions Retweet
Filed under  //   blogging   personal   writing  

Comments [2]

About

Fabio Cevasco is a technical writer, programmer, traveler, blogger, movie enthusiast, open source advocate, husband, trekkie... in other words, just another ordinary geek.

This blog is a just stream of thoughts and opinions, for well-structured articles head over to H3RALD.