Software
Form the we-write-it-all-the-time departement.
You find here some tips and tricks I have collected in my all-day job.
Please take a look also at SIForge.org for some other articles I wrote in italian.
Last but not least a funny error message:
Network computer
Take a look to my article on the future of operating systems and network computers on Gioorgi.com. Gioorgi.com will slowly become the new business blog of Objectsroot.comiPhone programming
iPhone Open Application Development
By Jonathan A. Zdziarski
First Edition March 2008
Pages: 280
ISBN 10: 0-596-51855-2 | ISBN 13: 9780596518554
Boosting Squeak: RockSolid images
As some of you know, I was a Smalltalk fan&developer in the last twelve years. I have stopped working on smalltalk years ago... anyway, I am happy to look forward the Squeak Smalltalk Community from time to time.
I republish here an original article posted by me on SqueakPeople, over 4 years ago.
The reason is simple: I am very happy to see a Squeak code fork called "Sapphire" which share most of my thoughts:
Sapphire wants to take a fresh look at the Smalltalk philosophy and current implementations. The idea is to produce high quality open-source packages that will be loadable on a micro kernel.
I will take a look to Sapphire, and you will find my throughts here in the next months.
(full article)The Valueteam PDFGenerator
Per un importante cliente, abbiamo sviluppato una applicazione chiamata PDFGenerator, che è stata pacchettizzata come un vero e proprio prodotto.
Vediamo come è stato possibile...
Apple as hardware only company
In the last year, "Apple Computer" has changed a bit its focus.
First of all, Apple has erased the word "computer" in the company name.
Then, has shifted its focus on new products like the iPhone.
iPhone is a GSM telephone, and so it is quite different product for a computer company.
I see a very huge and strong alliance within these players:
- Apple (hardware part)
- Disney (via the Pixar,Steve Jobs can ask some movies to Disney :)
- Google/YouTube (media and "network computer" part)
- Sony: HD Video consumer/DVD standards and so on
Apple software part is true strong, but it will be difficult to hunt competitors if the company is busy building new hardware.
It'd be better to focus only on one thing.
MacOSX is a very innovative product, but its developement had become slower in the last nine months.
Leopard is not so innovative, and it is similar to Vista: a lot of GUI fetures, but little on the surface.
And last, Lepoard is still quite slow and sub-optimized, for being a full MacOSX release.
Javascript and Smalltalk
There is a future for SmallTalk? I was a very strong fan of the SmallTalk language, but in the last five years I have seen more and more contraction of its usage in the IT field.
The OLPC project, which uses also Squeak Smalltalk and its done by the core team fo Squeak, is not going very well.
Anyway, Dan Ingalls, one of the father of Smalltalk, is working on a new project called Lively. It is a rewrite of Morphic in Javascript, especially target for building a Squeak-like interface.
The interesting part of this work is a paper outlining the limitation of javascript as programming language. I have tried in the past years to look for ajax and or web 2.0 javascript libraries, but I feel very difficult to develop with them.
From the Paper we underline these parts:
Loading multiple JavaScript applications into the same virtual machine is problematic.[...] For instance, if two programs
happen to use the same names for global variables or functions, the overlapping variables or functions of
the first program will be replaced with the corresponding features of the second program, resulting in
unexpected behavior in the subsequent execution of the first program. Since JavaScript will not typically
give any warning messages or errors in such situations, the resulting behavior can sometimes be a total
surprise; in many cases the errors resulting from such situations may not be discovered until much later.
Evolutionary development approach is a necessity. Due to the highly permissive, error-tolerant nature of
JavaScript, JavaScript programming requires an incremental, evolutionary software development
approach. Since errors are reported much later than usual, by the time an error is reported it is often
surprisingly difficult to pinpoint the original location of the error. Error detection is made harder by the
dynamic nature of JavaScript, for instance, by the possibility to change some of the system features on
the fly.
A lot of room is left in optimizing JavaScript performance. Current JavaScript virtual machines are
unnecessarily slow. Even though JavaScript is a significantly more dynamic language than, for instance,
the Java programming language, there is no fundamental reason for JavaScript VMs to run two orders of
magnitude slower than Java virtual machines.
Memory management capabilities of the current JavaScript VMs are poorly suited to large, long-running
applications. Current JavaScript virtual machines have simple, 1970's style garbage collectors
The reason of these issue are simple:JavaScript was intially a language for web developers, small and easy to use, and very compact.
Absence of errors or warning is a nightmare, if you care of your digitating time.
And Javascript is slow because no one will write long script with it.
A very compact and clean discussion can be found in http://javascript.crockford.com/javascript.html
Fixing these problems is hard. Until the current implementation will not provide a better way of error detection, writing javascript code will be a very long and time-consuming task.
And using a so old garbage collector, give a chance to a c/64 BasicV2 to beat your code: you are awared, guys :)
Anyway, there is a good set of javascript libraries out of there (prototype and jquery, for instance but not only), so you should be quite happy
Dynamic languages troubles
I have read http://www.manageability.org/blog/stuff/chandler-failure and I think it is very danger way of exposing concepts.
In the article pointed out, the quite dead Chandler project is compared to the multi-billion Eclipse project. And then a too easy analysis is done against dynamic languages, where Java is the absolute winner.
I will try to fix some of the things said there, and to add also my two cents here :)
(full article)pyparsing review
Review of "Getting Started with Pyparsing", Copyright © 2008 O'Reilly Media, Inc.
ISBN: 9780596514235
Released: October 4, 2007
(full article)
Why Open Source is important?
Hi readers,
with the beggining of 2008, ObjectsRoot.com will change a bit its face.
!Update on 10th of January!
First of all, all Italian article will be moved to the new "vamp" site, thinked as a news site.
Objectsroot will focus on IT Business and it will host only english content: IT article will remain here, at least for a while.
(full article)pezzent programming
Si fa un gran parlare di Extreme Programming? Ma se non volete fallire, su quali basi la vostra azienda deve veramente reggersi? In questo articolo vediamo un excursus sul Pezzent Programming, usato nella produzione industriale di Dolci
Will Zend slash rubyonrails?
Let the Zend Framework introduce itself as a Borg would do:
"Hi dear RubyOnRails. Hi all. I am the Zend Framework, a small work (about 5 tons of code) done by IBM and Zend to destroy you. You think php is not able to build big project?... do you?
So you have dared to develop RubyOnRails or Perl or Python, thinking you can own the web in your way... Dear nerds you are so funny and young!!" in a lamp of light the borg duplicate itselfs in 100 indians programmers, saying together
"Resistence is futile.
Eh eh, we have just emitted a small set of stuff as a demo:
We have cache engine, memory manager, acl, configuration, pdf support, lucene support, all with documentation and examples (!).
Yeah we are also thinking to integrate php as a WebSphere Frontend, and javalize it. Yeah you now we are already working on it and it is a secret... in a couple of year, you will forced to use our PHP. As Borland destroyed its JBuilder in favour of our small Eclipse Framework you will be absorbed soon.
And yes, http://www.basecamphq.com/ is still closed source!"
PHP is still well supported and a tons of apps are out of there.
PHP is "insecure by design" because of its type juggling system which allow you to inject data in a very easy way. But ruby is not much more secure at the time of writing....and php code library is five times bigger then ruby.
the end of the empire
In Slashdot today I have seen a Microsoft advertise.
It said: "Windows is more reliable then Linux". [...]
iPhone success is hard
iPhone is a very nice project, well designed and manufactered, but the market addressed is
an hard bet for Apple.
Big players are already on the ground: Nokia, Motorola, Samsung and Sony for instance.
So it is difficult to play in such market, and some analysts said "the touch screen was not successful for GSM/phone products".
The launch of "iPod touch" addressed this fear in my own opinion, because the design of the iPhone is very cool, and you can try to at least have it survive ipod-izing it.
Last and more important factor, the iPhone is locked by one carrier in U.S., and the same will happen in U.K.
This is a very greedy move; big player like Nokia are trying to unbundle their product form the carrier, selling phones which can use multiple wireless network (wi-fi, skype, gsm/edge/umts).
Google is doing the same, from the software perspective using the Android project.
So Apple is always smart, but in the portable phone market you must be also price-affordable, fast in releasing new models, and open for working with other competitor.
All things Steve Jobs is not very good at the present time.
Update: At April 2008, Telecom Italy will carry on UMTS iPhones in Italy. I will write an article on them, to understand if the product is a bit less locked.
better unix life2
If you need to work on cluster, is nice to have syncronized terminals to send the same commands in parallel.
Is it also doungerous, so do some test before sending a bunch of vi commands!
On Unix, a cheap and fast solution is Kde "konsole" which has such option.
Look under "View/Send input to all Sessions" menu and try it out. I was happpy with version 1.6.6 of konsole.
I am not a fan of "xterm variants", but konsole looks great.
oracle mass table drop
Sometimes I need to build a small script to delete a huge set of tables of a schema.
In Oracle is easy to do it, using the meta tables "all_tables", "all_views", and "all_sequences":
select 'drop table ' || table_name || ' cascade constraints;'
from all_tables where owner='protoss' and table_name not like 'BIN%';
select 'drop view ' || view_name || ' ;'
from all_views where owner='zerg' ;
select 'drop sequence ' || sequence_name || ' ;'
from all_sequences where sequence_owner='spacemarine' ;
The "BIN%" table are special temp tables of oracle.
On PostgreSQL, try use PG_TABLES meta-table
Happy sqlizing!
Advanced Bash Scripting
Is it amazing things you can do with a simple Bourne Again Shell (bash).
I have just discovered you can open socket using a small redirection syntax, and emulate small checks you normally do with curl or wget.
The bash shell manual is always poor about examples, and this is very very sad.
In my own opinion, a good tool without a good set of examples is futile.
Crap software is still alive because is well documented.
Remember it
(and for bash, look also at:
http://www.google.com/search?sourceid=gmail&q=using%20bash%20%2Fdev%2Ftcp%2F)
Java Session Fancy Printing
public static final String convertToString(HttpServletRequest request) {StringBuffer msg = new StringBuffer();
try {
msg.append("*RequestURI:" + request.getRequestURI() + "\n");
msg.append("*ContentType:" + request.getContentType() + "\n");
msg.append("== Request Header\n");
Enumeration headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
String headerName = "" + headers.nextElement();
msg.append(headerName + ":" + request.getHeader(headerName) + "\n");
}
msg.append("\n");
Enumeration attr = request.getParameterNames();
ArrayList l = new ArrayList();
String att;
while (attr.hasMoreElements()) {
att = (String) attr.nextElement();
l.add(att + " -> " + request.getParameter(att));
}
msg.append("=== Request ( " + l.size() + " ) ===\n");
Object a[] = l.toArray();
Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
msg.append((String) a[i]);
msg.append("\n");
}
msg.append("=== === ===\n");
// Process the Session
HttpSession session = request.getSession();
// msg.append("\n");
Enumeration e = session.getAttributeNames();
TreeMap t = new TreeMap();
String k;
while (e.hasMoreElements()) {
k = (String) e.nextElement();
Object oggetto;
try {
oggetto = session.getAttribute(k);
} catch (Throwable notSerializableException) {
oggetto = "NON DESERIALIZZABILE. Chiave:" + k;
}
t.put(k, oggetto);
}
Object orderedKeys[] = t.keySet().toArray();
msg.append("=== Session ( " + orderedKeys.length + " " + (usertempz != null ? "+ 1UT" : " NO UT!") + " )===\n");
Object elem;
for (int i = 0; i < orderedKeys.length; i++) {
elem = t.get(orderedKeys[i]);
msg.append(orderedKeys[i]);
msg.append("\t-> ");
if (elem != null) {
nicePrintSessionObj(msg, elem);
} else {
msg.append("null");
}
msg.append("\n");
}
return msg.toString();
} catch (RuntimeException e) {
return msg + "\nERR: Cannot print session/request!!" + e.getMessage();
}
}
humble ajax
I think ajax is a very new technology, but with too much hype on it. I think we'd try to do simple things with it, avoiding too much bloated interfaces. I have found a good ibm article with shows "In-place editing" avery easy way to get a more responsible site. Finally the same article points to Prototype window, a very easy to use windowing system.Happy hacking!
Audiocast: linguaggi web
Sono stato intervistato dal podcast di notizie digitali. In questo mio secondo intervento facciamo alcune rifessioni sui linguaggi di programmazione utilizzati nello sviluppo Web.In particolare cerchiamo di capire il successo di PHP rispetto ad altri linguaggi, e che cosa possiamo attenderci da RubyOnRails. Potete leggere anche del mio primo intervento su audiocast riguardante ajax.
Software Trends1
Software trends is a new set of small article I will write. In this small pices I will sketch out the trends of the Software Industry related to web developmenet. Let's give a look at the October 2006
(full article)Exupery: byte compiler for Squeak
I have tried Exupery, the Squeak byte compiler written by Bryce Kampjes. Exupery is still in beta but is usable for experimenting. SqueakWeekly is happy to publish a prime-time FAQ!
(full article)B Wolf Version 1.1
BWolf version 1.1 has been relased!
I am happy to announce to all the world I have just relased the first stable release of BWolf.You can find it here.
You need to set up a settings_private.py for properly defining a secret cookie key. Happy (book) reading ;) (full article)
B Wolf Version 1.0
I am happy to announce Version 1.0 of BWolf. I have just installed it for my first customer. You can grab the 1.0 version from the Subversion repository. This first release spot some basic feature...
(full article)Celeste
Celeste
Celeste is a mail reading and organizing program wirtten in Squeak Smalltalk.This is the up-to-date mantenance page
(full article)
Wrost Shell provider of The net
Yes this is a negative-advertise (sometimes called flame). I get disappointed by "The Super Dimension Fortres" after about 3 years of use.
Let's see why...(full article)
Audiocast: Ajax
Ho collaborato con Valerio, l'autore del podcast Notizie Digiali. Nel numero che esce oggi parliamo delle tecnologie ajax: una panoramica su un trend emegente.Grazie alla sinergia con SIForge, possiamo presentare altri articoli legati all'argomento, tra cui segnalo:
- Un'espansione dell'intervista su audiocast, con diverse riflessioni aggiuntive ad opera della readazione di SIForge
- Una serie di articoli per imparare ad usare ajax
- Il forum relativo, per discutere di tecnologie ajax.
Aggiornamento:
A quasi un anno di distanza, il rischio che ajax si trasformi solo una "buzzword" (cioe' in una parola usata per millantare funzionalita' prive di consistenza reale) esiste. Inoltre al momento sviluppare in ajax e' ancora delicato e farraginoso: esistono mille modi di fare la stessa cosa, e nessuno di questi porta a qualcosa di facile da mantenere. Tuttavia e' indubbio che Ajax migliorera' di molto l'ergonomia dei siti web, attraendo anche nuovi utenti per tali applicativi.Database in depth
I was happy to review a very nice book called "Database in Depth".
Database in Depth Relational Theory for Practitioners
By C.J. Date
First Edition May 2005
Pages: 230
Series: Theory In Practice
ISBN 10: 0-596-10012-4 | ISBN 13: 9780596100124
I reviewed it in English and Italian for my SIForge.org web site.
Give it a try!
Bye bye
