20.11.08

Diversity at Google

Google promotes diversity because from different experiences and distinct point of view can arise good idea: diversity is creativity's cradle.
To celebrate the Transgender Remembrance Day Google has posted an interesting insight on how diversity can be an asset:

"November 20th marks Transgender Remembrance Day, which takes on a special significance in a world awakening to the need for unity among all people. In observing this day, the Gayglers — the Lesbian, Gay, Bisexual and Transgender (LGBT) group within Google — extend their wholehearted support to the LGBT community at large, as we reflect on the senseless violence perpetrated against transgender people around the world."

Read the full post here.

17.11.08

Gestural Interaction


g-speak overview 1828121108 from john underkoffler on Vimeo.

Really cool! Who knows which kind of applications will first take advantage of such groundbreaking interaction paradigms?!

2.11.08

Should this woman be allowed to govern?!

http://news.bbc.co.uk/1/hi/world/americas/us_elections_2008/7704673.stm

It is absolutely funny, though quite scary in some sense... Congrats to the guys on Montreal Radio. Gosh, it would be great if something like that happened here in Italy right before the last elections we've had... what could have happened?! :P

Cheers.

15.9.08

Pink Floyd's Richard Wright defeated by cancer

Today Pink Floyd's self-taught pianist and keyboardist Richard Wright has left the scenes. Here is a video taken in the late '60 capturing Pink Floyd playing "Set the Controls for the Heart of the Sun" a song in which keyboards play a really central role and "Let there be more Light", them both taken from their second album.



And here one of Richard Wright most recent appearances playing with David Gilmour a song taken from one of his solo albums.

12.9.08

Hope to work with you again soon Andrea


There's not so much to say about it... simply put it's one week since Andrea has left his position in our department. Hope we'll find a way to work together again soon ;)

Good luck Andrea

10.9.08

Hail to Steve Jobs

Yesterday in San Francisco the latest Apple keynote has taken place. Whoever has followed the news (ops,the rumors I should have said maybe) since the former Apple event that introduced the iPhone 3G until today, has surely heard/read worrying gossips about Steve Jobs health status.

It is funny/reassuring to reckon the very first slide has been the one you can see above :).

The keynote has not been that interesting, but Steve remains one of the greatest innovators of our era.

6.9.08

Enthusiastically sharing ideas

Today I've met for the first time after the summer holidays an old friend of mine, Stefano, a guy I always love to share ideas with. We have covered a lot of topics, ranging from our own private lives to our expectations of things to come both in the near and remote future, music, arts, cinema and obviously computer science.

He is a truly sharp guy, and every time with talk to each-other something good happens. This time I have enthusiastically shared with him my own experience of working on a brand new GWT-based project. Due to my excitement he finally advised me to create a group of tech-enthusiast people focused on GWT and its adoption for implementing new web-projects. It is useless to say that in a moment that proposal has become a reality.

Everyone interested in the idea can join this public group and share his/her experience with whoever will reach the group surfing the web. This group is meant to be a building-knowledge experience and I'd love it to be as much open as possible.

If you feel like interested in you can obviously join the group

Google Groups
Subscribe to Gwt-User-Group-it
Email:

Let's wait and see what will happens ;)
F.

16.8.08

Atom Heart Mother... as it was



This first video is (unlikely) a partial footage of Pink Floyd performing what is in my humble opinion the very best musical suite ever written in the 20th century, Atom Hearth Mother. It was shot in the early '70s in Saint Tropez. I think this is a quite interesting performance since the band is not backed by the full ensamble of orchestra and choirs. To cope with this limitation David Gilmour leverages on a set of delays and echoes through which his mic's signal is headed.


This second shot was taken in Hamburg. Here the band is backed by a full-fledged orchestra... really a nice result, but unlikely this is even shorter than the former one.



This third version, even if the worst one in terms of quality, might be interesting to somebody since it was directed by Ron Geesin ("the fifth Floyd" in the composition of Atom Heart Mother and revolutionary British composer of the '60s) in the flesh.

20.6.08

Gilmour playing Atom Heart Mother



There's really nothing more to say but listening to these historical tunes. This is the very first time I can listen to a live-version of Atom Heart Mother. Unlikely there is "only" David from the original line-up, but it is still worthy listening to this small fragment. I just envy those lucky ones that have had the chance to be there...
Ops, another interesting thing: the band he's playing with is an Italian cover-band from around Florence :)!

29.3.08

Blogging in Objective-C

The iPhone/iPod Touch SDK is gradually taking its way into main stream development for high-end mobile devices. Waiting to see what the Open Handset Alliance is going to deliver within the next year thanks to the Android platform, I felt necessary and interesting diving into Apple's SDK.
Once it was published some weeks ago I found out it was entirely Objective-C based, thus I decided to start taking a look at the language. This is my first post about my own learning experience of Objective-C 2.0.

Interfaces
Every object has to expose an interface that defines the contract it must adhere to and its internal structure (the set of properties it holds). This is deeply different from what an interface is in Java i.e.
Let's look at an example:
//  Person.h
// Objective-C test 1
//
// Created by Francesco Russo
// Copyright 2007. All rights reserved.
//
#import <Cocoa/Cocoa.h>
// Interface Person inherits from NSObject...
@interface Person : NSObject {
// ... and has the following private properties
@private
NSDate *birthday;
NSString *name;
NSString *surname;
NSSet *friends;
}

// Along the properties above each Person must expose the following set of methods
// NOTE: @property annotation tells the compiler that the following
@property(copy) NSDate *birthday;
@property(copy) NSString *name;
@property(copy) NSString *surname;
@property(copy) NSSet *friends;

// instance methods are marked with a minus sign "-", while class methods are marked
// with a "+" (plus) sign
- (void)reluctantMessage;
@end
The snippet above defines a Person interface that encloses four private properties (see the @private annotation) and the implicit definition of their accessor/mutator messages. This is accomplished by means of the @property annotation.
One of the things a like most is the copy attribute of the @property annotation: it tells the Objective-C (compiler?) to generate accessor messages that must return a copy of the given property! That's really cool, it would be great if Java had something similar. We also have similar options to declare synchronized messages.
Well, once we are done with our properties we can deal with messages: messages are functions that can be defined on a per-class or per-instance basis (just like static and instance methods in Java).

Implementations
Once our interface has been completed it's time to give it an implementation:
//  Person.m
// Objective-C test 1
// Copyright 2007. All rights reserved.
//
#import "Person.h"

// implementation of the Person interface
@implementation Person

// the @synthesize annotation allows for automatic accessor&mutator methods
// generation at compile time
@synthesize name;
@synthesize surname;
@synthesize birthday;
@synthesize friends;

// implementation of the instance method defined in the interface
- (NSString*)description {
NSString *str = nil;
@try {
// result NSString initialization
str = [[NSString alloc] initWithString:@""];
// result NSString composition
str = [[[[[[str stringByAppendingString:name]
stringByAppendingString:@" "]
stringByAppendingString:surname]
stringByAppendingString:@".\nBirthday is: "]
stringByAppendingString:[birthday description]]
stringByAppendingString:@".\nHas friends: "];
// temp variable required for iterating over the
// set of friends
// be careful: if two Persons are friends to eachother,
// invoking "description" in the following iteration will
// result in an infinite loop
Person *friend;
for (friend in friends) {
str = [str stringByAppendingString:[friend name]];
str = [str stringByAppendingString:@"\n"];
}
} @catch (NSException *e) {
NSLog(@"description: Caught %@: %@", [e name], [e reason]);
} @finally {
return str;
}
}

// This is a 'reluctant' method, that is a method that won't work at all ;)
-(void) reluctantMessage {
// a try block
@try {
// throwing an exception
@throw [NSException exceptionWithName:@"My first exception" reason:@"Only playing around :P" userInfo:nil];
}
@catch (NSException * e) {
// that gets caught and logged
NSLog(@"Exception description: caught %@: %@", [e name], [e reason]);
}
@finally {
// and a finally block that always executes
NSLog(@"This is a 'finally' block.");
}
}
@end
This class states it implements the Person interface defined above. 
The first thing we can highlight is that again we can avoid writing boilerplating code for our accessor&mutator messages by means of the @synthesize annotation.
As a second step I've overridden an NSObject message called description that can be thought of as the Java's Object toString() method. This message simply provides an NSString-based representation of the Person instance.
Interesting things to note:
  1. the way exceptions are handled by means of the keywords @try, @catch, @finally
  2. the foreach iteration
  3. interface methods can only be public
A main function
Now let's @finally :P take a look @ the main that tests the few lines of code written above:
//  main.m
// Objective-C test 1
//
// Copyright 2007. All rights reserved.
//

#import <Cocoa/Cocoa.h>
#import <Person.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
// every time a new object has to be created, we need to invoke
// the NSObject's static "alloc" method, followed by some initialization
// method
Person *person_1 = [[Person alloc] init];
// "inline" NString instances must start with @ (the address of)
person_1.name = @"Foo";
person_1.surname = @"Bar";
NSDate *birthday = [NSDate dateWithNaturalLanguageString:@"01/01/2008"];
person_1.birthday = birthday;

Person *person_2 = [[Person alloc] init];
person_2.name = @"Alice";
person_2.surname = @"Bob";
person_2.birthday = [NSDate dateWithNaturalLanguageString:@"01/01/2008"];

person_1.friends = [[[NSSet alloc] init] setByAddingObject:person_2];
person_2.friends = [[[NSSet alloc] init] setByAddingObject:person_1];

NSLog(@"\nPerson is: %@", [person_1 description]);
NSLog(@"\nPerson is: %@", [person_2 description]);

[person_1 reluctantMessage];
[person_2 reluctantMessage];

return 0;
}
Quite nice, isn't it? Hope I'll find the time to take my studies further at the point required for writing some simple iPhone/iPod Touch application.

Cheers,
F.

19.3.08

Focu de raggia


To help the movement go here.