Everything sux

Wednesday, August 31, 2005

[Java] Conosci Davvero Java?

Java è un linguaggio complicato.
Avendo un sacco di colleghi in disaccordo con questa tesi, mi sono preparato una piccola lista di domande per dimostrare che nemmeno loro si immaginano quanto sia complicato ;)

Se vi ritenete esperti Java dovreste sapere le risposte, se non le sapete, sono tra i commenti



  1. Riscaldamento: cosa stampa questo codice?

    public class Main {
    int myInt;
    double myDouble;
    boolean myBoolean;

    public static void main( String []args){
    Main obj=new Main();
    System.out.print(obj.myInt);
    System.out.print(" " + obj.myDouble);
    System.out.println(
    " " + obj.myBoolean);
    }
    }


  2. Dato il codice

    Calendar cal = Calendar.getInstance();
    cal.set(1999, 12, 31);
    System.out.print(cal.get(Calendar.YEAR) + " ");
    System.out.print(cal.get(Calendar.MONTH) + " ");
    System.out.println(cal.get(Calendar.DAY_OF_MONTH));

    cosa credete che venga stampato a schermo?

  3. In questo codice c'è un evidente errore, siete in grado di individuarlo?

    void copy(File src, File dst) throws IOException {
    FileChannel in = null, out = null;
    try {
    in = new FileInputStream(src).getChannel();
    out = new FileOutputStream(dst).getChannel();
    long size = in.size();
    MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
    out.write(buf);
    } finally {
    if (in != null) in.close();
    if (out != null) out.close();
    }
    }



  4. Quanto vale
     1 << 32


  5. Eseguendo questo codice:

    public static void main(String[] args) {
    System.out.println(10/magic(-2147483648));
    }
    static int magic(int x){
    if (x !=0)
    return x+x;
    return 1;
    }

    cosa viene stampato a schermo?


  6. I modifier sono quelle cose tipo public o static. Facile, direte voi. La domanda è: quanti modifier ci sono in java?


  7. Se per qualche assurda ragione avete azzeccato la risposta precedente, sareste in grado di riee quali e spiegare a cosa servono?


  8. Avendo cura di includere java.lang.reflect.*, Cosa stampa questo spezzone:
    System.out.print( Modifier.toString( Member.class.getModifiers() ) );
    ?


  9. Qual'è l'errore in questa innocua classe?

    public class Main {


    public static final double twoPI
    = 2 * myPI;
    public static final double myPI
    = Math.PI;
    }


  10. Potrebbero sembrare banali, ma io mi sbaglio spesso.. Quali tra queste sono assegnazioni valide ?
  • double b = 1.0;
  • float c = .1f;
  • float a = 0.1;
  • float d = 1.f ;
  • float e = 3.2f ;
  • double f = 1. ;
  • float g = 0x23595959L ;
  • float h = 0x595959F ;
  • double i = 0X0;
  • int l = 2147483648;
  • double m = 2036373547;
  • float n = 2147483648;
  • double m = 2147483648


Thursday, August 11, 2005

PHP Security, the oxymoron

Well, this time The Woodwork » Blog Archive » someone tells you that php is not insecure by default.
I have a different idea, that basically boils down to:
it has a long history of security problems, and there is a social problem WRT to this concern in the PHP community.

But, hey, I'll let you think about that.
The only thing I'll point out is: leaving out the (self labeled) "Enterprise" languages, how often did you heard about a security problem in the other en vogue languages (yeah, the one with P and the other with R) ?

Saturday, July 23, 2005

Weblogs Forum - When Generics Fail

Bruce Eckel sta conducendo da un bel po' di tempo una battaglia per dimostrare quanto siano brutti e cattivi i generics in Java5.

In questa puntata, vorrebbe provarci ma un simpatico tizio di passaggio ci mostra come in realtà sia lui ad essere btutto e cattivo. Ilare, nevvero?

Sunday, July 17, 2005

[Varie] Buone Letture

Da una discussione sulle piattaforme web [1] su ziobudda, arriva una richiesta di suggerimenti su cose da leggere.

Sinceramente non so in che ambito, ma questo non mi eviterà di fare lo stesso una lista, cercando di mantenerla minima:

I fondamentali, teoria della programmazione:
sono quelli che ti permettono di capire perché un linguaggio è meglio di un altro (per qualche definizione di "meglio"), e che ti insegnano a scrivere programmi usando tutta una gamma di approcci, permettendoti poi di scegliere il migliore

  1. structure and interpretation of computer programs (disponibile online)
  2. concepts, techniques and models of computer programming (si trova un vecchio draft con google, anche se conviene comprarlo)
  3. essential of programming languages (si trova anche questo, mi pare)

Gli importanti, design:
cioè quelli che ti fanno capire come strutturare un applicazione. E non solo, ti fanno capire come farlo in modo che la chiarezza arrivi fino all'utente.
  1. Object Oriented Software Construction (mattone di 1300 pagine ma ottimo)
  2. Design Patterns (quello di gamma et al, meglio dei vari cloni)
  3. On Lisp (serve conoscenza di base del CommonLISP, disponibile online)

I comportamentisti:
ovvero quelli che più che insegnare tecniche di programmazione tendono a darti un'idea di come
affrontare i vari compiti dello sviluppatore in maniera efficace
  1. The Pragmatic Programmer (da leggere e rileggere)
  2. Domain Driven Design (un po' troppo OO, ma buono)
  3. Thinking in Forth (inaspettatamente, un libro dell'88 molto interessante)
Lo so, mancano quelli "di basso livello" (i.e. su C, Kernel, glibc etc): non conosco ottimi testi a riguardo, purtroppo. Di correlato però c'è "Code Reading", che usa l'albero dei port di NetBSD per insegnare una tecnica che troppo spesso è trascurata: imparare a fare una cosa vedendo come fanno quelli bravi.

Per quel che riguarda lo sviluppo web nello specifico: purtroppo non conosco una fonte decente che tratti gli argomenti vari in maniera coerente.
Praticamente nessun testo su PHP che ho visto era classificabile come "buona lettura", al massimo come "discreto tutorial". Non escludo ce ne siano, specie ora che PHP5 ha clonato Java, ma o non li conosco.
I modelli MVC per il web sono spiegati bene o male ovunque, Bitter EJB e Bitter Java sono buoni testi per chi usa J2EE.
La documentazione sui framework WebObject-like (CGIKit, Tapestry, JSFe qunt'altro) in generale è buona direttamente alla fonte. Anche la serie "In Action" di Manning press in genere ha buoni titoli a riguardo.

Infine, gli ambienti continuation-based/modali. Sinceramente non conosco nemmeno un libro sull'argomento, anche se si trova qualche paper a riguardo. In compenso mi vengono in mente dei testi interessanti sulle continuazioni, magari farò una lista anche di quelli.

[1] oh, si un giorno mi lamenterò di quanto siano pessime anche quelle che sembrano tanto in voga

Saturday, July 16, 2005

[C#] A Ritroso

Anders ci parla del passato, in modo che sembri futuro.
Il papà di C# e Delphi non è uno scemo, suonerà pro-microsoft (e quindi azzardatamente avverso al ContropensieroUnico) ma C#2.0 non è un brutto linguaggio, e nemmeno il pascal ad oggetti lo era.

Eppure anche lui in fondo è un drone di redmond, e quindi finisce a sostenere che le magnifiche sorti et progressive dipendono quasi linearmente dai suoi prodotti.
Ad esempio, a proposito del fatto che C# nel futuro dovrà contenere qualche cosa che gli permetta di integrare linearmente SQL:


[...]when you're learning to program in C#, you're actually not just learning to program in C#. You're also learning SQL. And you're also learning all the APIs [...]. And you're learning a whole style of writing a distributed application[...]But it doesn't necessarily have to be that way. The two worlds are actually surprisingly un-integrated.On the tools side, we're making tremendous progress on getting deeper integration between these two worlds. But I think on the language side, we also could make an enormous amount of progress.
Riuscite ad individuare i quattro errori? Pensateci bene, nei prossimi post la risposta
C'è poi questo magnifico spezzone:
Once you create another language, In the name of solving one problem, you buy yourself nine other problems. I think we can very naturally extend the languages that we have so that you can do it.
Ok, questa è un'altra chicca. Che c'entra il titolo del post con il post stesso? Semplice, Anders sta cercando di farci capire in che modi meravigliosi e mirabolanti C# potrebbe aprirci le porte dell'avvenire, ma lo fa nello stesso identico modo in cui si è fatto per decenni, affrontando di nuovo problemi già risolti. Approfondimenti a breve.

Saturday, July 09, 2005

[SemWeb] Yahoo! My Web 2.0

Premshree shows a cool hack you can do with MyWeb2.0(beta).
Which basically is a "let's tag all togheter" kind of website like many other now.

The idea is that you can use the search engine, and while you do this you can tag stuff.
You can even choose to chare your tagging with the world or with some friends or keep it for you.

Now, repeat with me: I am not a yahoo employee, I will not classify the world for them.
Ah damn, I'm addicted.

Wednesday, July 06, 2005

[OS] Haiku almost live

Tracker is running on Haiku. - philipp schmid's blog.
If you ignore what Haiku is, well, it is an open source clone of BeOS.

I loved BeOS. It had a great modern design. SMall kernel, great GUI, threaded from the ground up, it used to boot in seconds, and had great ideas all over the environment.
And it is utterly dead, since the company that used to develop it was bought by Palm, Inc.
Now, several groups of people are trying to revive it, this particualr bunch of coders is trying to clone it, maintaining binary compat, and writing completely from scratch.
The great news is that they are now able to run tracker, which is to BeOS what explorer.exe is to windows

The Awful news is that there is no space for 4 OSs in the x86ish desktop world.
And Apple is coming to Intel.