Categorie
Informatica

per un punto Martin perse la data

tanto tempo che non scrivo. perchè il tempo non è tanto ma è poco…
allora aggiungo questa storiellina simpatica…
"com’è che ho scritto sul mio cv? "attitudine al problem solving"?
stamattina ci hanno segnalato un bug nei dati di un report. il capo mi dice "facciamo l’analisi insieme".
cominciamo a spulciare le query e taaaac, trovo il punto giusto e taaaaac, scopro che in una certa tabella c’è un errore sul campo data su un record che non sappiamo ancora qual è.
e taaaac dico "record 1287" e lui "come fai a saperlo?" e io "beh, se nella tabella di destinazione ci sono 1286 record su duemila e passa che dovrebbero esserci, il problema sarà sul 1287esimo!".
e taaac troviamo che la data del 1287esimo record è sbagliata 02/02/208 invece di 02/02/2008.
taaaac. corretta la data, rilanciata la procedura di importazione e risolto il problema sul report.
taaaaaaaac!"

a chi ha sbagliato a inserire la data ovviamente gliela faremo pagare!

Categorie
Informatica Mac

Aggiornamenti di fine anno

Ruby On Rails, il famoso framework mvc per il web, è stato aggiornato alla versione 2.0. Sul mio OSX Leopard è installato di default la versione 1.2.6, ma aggiornarlo è semplicissimo, questione di un

iwave:~ davide$ sudo gem update rails

e di un paio di minuti (ma anche meno) e avrete

iwave:~ davide$ rails --version
Rails 2.0.2

Inoltre ho installato il database MySql alla versione 5.0.51.
Non esistendo ancora un pacchetto compatibile per OSX Leopard, bisogna installarselo da soli.
Fate come me, è questione di meno di dieci minuti, compilazione compresa.

  • create una cartella di lavoro
    $ mkdir ~/mysqlsrc
    $ cd ~/mysqlsrc
    
  • scaricate i sorgenti, decomprimeteli e entrate nella loro cartella
    $ curl -O \ 
    http://na.mirror.garr.it/get/Downloads/MySQL-5.0/mysql-5.0.51.tar.gz
    $ tar xzvf mysql-5.0.51.tar.gz
    $ cd mysql-5.0.51
    
  • configuriamo per la compilazione
    $ CC=gcc CFLAGS="-Os" CXX=gcc CXXFLAGS="-Os" ./configure \
    --prefix=/usr/local/mysql --with-extra-charsets=complex \
    --enable-thread-safe-client --enable-local-infile \
    --enable-shared
    
  • adesso siamo pronti a compilare (se avete un dual core lasciate -j5, altrimenti -j2)
    $ make -j5 
    
  • e ora possiamo installare, prendendo i privilegi di amministratore
    $ sudo make install
    

    questo installerà mysql e tutto il necessario in /usr/local/mysql

  • ora andiamo a configurare le cartelle di mysql

    $ cd /usr/local/mysql
    $ sudo ./bin/mysql_install_db --user=mysql
    $ sudo chown -R mysql ./var
    

    e poi procedete come sempre a settare la password di root e gli utenti del db

  • ora vorremmo che il server mysql parta automaticamente ad ogni avvio, vero? aggiungiamolo a launchd
    creiamo questo file in Documents col nome com.mysql.mysqld.plist

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>com.mysql.mysqld</string>
        <key>Program</key>
        <string>/usr/local/mysql/bin/mysqld_safe</string>
        <key>RunAtLoad</key>
        <true/>
        <key>UserName</key>
        <string>mysql</string>
        <key>WorkingDirectory</key>
        <string>/usr/local/mysql</string>
    </dict>
    </plist>	
    

    e copiamolo con i privilegi di root in /Library/LaunchDaemons/

    $ cd ~/Documents 
    $ sudo cp ~/Documents/com.mysql.mysqld.plist /Library/LaunchDaemons/
    $ sudo chown root /Library/LaunchDaemons/com.mysql.mysqld.plist  
    

    e diciamo a launchd di attivare il demone

    $ sudo launchctl \ 
     load -w /Library/LaunchDaemons/com.mysql.mysqld.plist
    

    questo lancerà il server mysql. Eventualmente per chiuderlo da linea di comando

    $ sudo launchctl \ 
     unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist
    
  • Il binding per mysql verso rails va aggiornato così: (per processori INTEL!!!)
    $ sudo env ARCHFLAGS="-arch i386" gem install mysql \
    --with-mysql-config=/usr/local/mysql/bin/mysql_config
    

    Finito!!! Ora il nostro sistema Ruby on Rails è aggiornato e pronto a tutto!

  • PS: se eventualmente volessimo cancellare mysql

    $ sudo launchctl \ 
     unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist
    $ cd ~/mysqlsrc/mysql-5.0.51
    $ sudo make uninstall
    $ sudo rm /Library/LaunchDaemons/com.mysql.mysqld.plist
    

    Buon divertimento

Categorie
Blog Informatica

Java vs C#

Da qualche settimana ho cambiato lavoro: ho lasciato la società di consulenza e adesso lavoro per un gruppo piuttosto grande, anche qui come sviluppatore.
I cambiamenti non sono stati solo esteriori, ma anche di contenuto. Infatti sono passato dallo sviluppo Java/Oracle a quello C#/SqlServer. “Oddio!” direte voi… beh, all’inizio lo dicevo anch’io.
Sto valutando le analogie e le differenze tra questi due mondi, cercando di riutilizzare al massimo l’esperienza che ho in Java nel nuovo ambiente. Ora, da utente e da contributore dell’Open Source, passare a M$ mi fa abbastanza impressione, ma considero il mio un lavoro che usa l’astrazione, quindi mi devo slegare dal pensiero del “basso” livello (linguaggi, compilatori, sistema operativo), e devo pensare al codice e a quanto bene sono capace di scriverlo, a come possa funzionare il programma che faccio, senza altro. Sì, questo potrebbe sembrare un esercizio di retorica o di teologia informatica…
Ora comincio con le considerazioni che sto facendo da quel poco che ho imparato nell’ambiente M$, spiegando un po’ l’effetto che mi fa.
Prima di tutto devo ribadire che lavoro per una grande azienda, quasi tutti gli utenti hanno client Windows, ci sono decinaia di server attivi, dall’AS/400 al Linux, da Sap con NetWeaver all’ultimo WS2003 con Sharepoint. C’è chi lavora in Cobol (ancora!), chi è espertissimo di VBA, c’è gente che fa in Excel robe che credevo impossibili (sul grado di affidabilità dei risultati non metterei la mano sul fuoco), c’è tanto lavoro in Java e altrettanto in C#.
Ora, quello che M$ permette, in virtù della sua posizione quasi monopolistica, è un altro grado di integrazione: condivisione dei dati, remote desktop, deploy delle applicazioni. Il lato negativo è che, come dice nonmiricordochi, “fai un programma a prova di stupidi e solo gli stupidi lo useranno”. Non siamo a questo punto, però il fatto che la programmazione per Window$ sia piuttosto semplice, corrisponde al fatto che i lavori non sempre sono eseguiti con rigore.
Faccio due esempi.
Comincio con la gestione delle eccezioni in C#: esiste ma non è obbligatoria. Cioè tu puoi eseguire un metodo che potenzialmente può generare un’eccezione e non prendertene carico. In Java è obbligatorio gestire l’eccezione, e l’errore di non farlo viene segnalato a compile-time. In C# puoi scrivere tutto il codice che vuoi senza usare mai try{} – catch(){}. È una cazzata! Un oggetto genera un’eccezione, non gestita, e si schianta tutto il programma. Ora questo modo di fare avvicina i “programmatori”, perchè è “facile” programmare così, ma il codice e il programma che ne esce è debole.
Secondo esempio: ASP.Net è la controparte web delle applicazioni Web, ed usa lo stesso paradigma degli eventi. Ogni pagina web è un “form” allo stesso modo che in un’applicazione client. E allo stesso modo risponde agli eventi, tipo button_click, che esistono sul client. Questo rende “facile” per un “programmatore” scrivere sia codice per client che per web, perchè sono praticamente identici. Ma in questo modo non c’è una chiara separazione del modello dalla presentazione e dal controller (ossia non c’è un paradigma MVC dietro) e lo “spaghetti code” imperversa. E inoltre la parte di presentazione, di default, è renderizzata con codice HTML 4.01, con un sacco di javascript auto-generato da visual studio. volendo si può costringere la pagina a usare codice XHTML 1.0, ma volendo usare XHTML 1.1 Strict, i controlli web non funzionano perchè sono fuori standard.
Il css non esiste. Questo perchè Visual Studio ti permette di definire le proprietà degli oggetti della pagina in modo “così semplice”, che scrive lui tutto lo stile per gli elementi in modalità “in-line”! Quindi se ti va di cambiare il colore delle pagine devi andare a modificarle tutte, invece di cambiare una riga nel css…
Insomma, l’approccio generale mi sembra questo: “guarda che bei bottoni colorati, clicca qui e là, è facilissimo programmare…” e il risultato è lo spaghetti-code.
In Java si può scrivere codice bruttissimo, ma un minimo di “metodo per fare le cose per bene” c’è, e questo in C# mi manca
ma io ormai sono in ballo, e cercherò di ballare meglio possibile… alla prossima (e via alla flame war!)

Categorie
Blog Informatica

statistiche netcraft

Ciao. in questo periodo non ho scritto niente, sono proprio fulminato.
Stamattina gironzolando per il web, ho dato un’occhiata alle statistiche di netcraft.com, il più autorevole sito di rilevamento del web. Si possono trovare gli uptime dei server, piuttosto che la versione del web server eccetera.
Beh, cercando le statistiche di davethewave.it ho trovato questa classifica dei siti più visitati.
La mia posizione è 4.960.717 EDIT: stamattina ero lì, stasera sono 4.995.964 perdo 35mila posizioni in una mezza giornata??? e secondo loro sto davanti a rossoalice! guardare per credere!
NETCRAFT oppure guardate QUI per le ultime modifiche!
sto dietro all’ambasciata di kabul, e davanti al sito di beathe use, quello che vende articoli pornis…
pensandoci su, però, adesso credo che netcraft non sia più tanto autorevole… =D

Categorie
Informatica

Rails, Capistrano, Dreamhost All-In-One Guide

Hi all, I wrote this post in english because I think a lot of people will look at it.
Dreamhost is a very good web hosting company, that support Ruby On Rails application through Apache FastCGI module.
I choosed Dreamhost because the good reviews I see everywere, and I’m pretty happy to have it done. They offer a LOT of disk space, terabytes of monthly bandwidth, unlimited databases and unlimited subdomains, ssh login, svn repository, all that you will need. Truly!
So I wanted to deploy two Rails application I’m working on, in two subdomains, using the “automagic” Capistrano way of deploying.
When I setup Capistrano for the first time, it was version 1.X and I found all the info I need on Dreamhost Wiki and Rails manual, and it worked like a charm.
But the new application I wrote has been “capified” with Capistrano 2.0 (current release) and some little difference in configuration has getting me mad… Because of this I’m writing this little document, for helping other people and even for helping my memory 😀
So give this guide a look, I think it is very interesting!
It comprehends ssh password free login, svn repository, capistrano and ruby on rails!
And if you want to signup an account to Dreamhost now you can get a 50% discount by entering this DREAMHOST PROMO CODE: DVWV50

Categorie
Blog Informatica Mac

Aiméc!

ciao a tutti! ho una novità: l’altra settimana ho comperato un iMac 24″, vecchio modello, non il nuovo che aveva uno schermo impossibile da usare.
dopo il lavoraccio di importare nel nuovo iMac documenti/video/musica sparsi sui tre hd e sui due sistemi operativi del precedente pc, adesso ho un computer fantastico.
sono pure riuscito a fare pulizia della scrivania, e di ciò mia moglie è contenta. e in parte anch’io.
come diceva qualcuno, “la differenza tra un uomo e un bambino sta nel prezzo dei giocattoli che si comprano…”

Categorie
Informatica

ricicliamo!

allora, fate conto che bisogna tenere sincronizzati due sistemi di database. Uno basato su Sap e l’altro Oracle. Il primo è il “master” e il secondo è il “client”. Il master pubblica, tramite un web service SOAP, una tabella piuttosto importante, in pratica la lista di utenti dei sistemi. Ho scritto un bel programmino java che ogni quattro ore va ad invocare il web service, legge la tabella e la importa nel database client. Tutto sembra funzionare per bene.
Qualche settimana fa, hanno aggiunto agli attributi degli utenti un campo “DataCessazione”, che significa che l’utente da un certo momento in poi non è più attivo.
Ancora tutto bene.
Adesso, lato “master”, hanno ben pensato che, se un utente non è più attivo, si può anche riutilizzare la sua chiave primaria per un altro nuovo utente !!! che teschioni!
Quindi adesso sul “master” ci sono una cinquantina di utenti “nuovi” che hanno chiavi primarie di utenti “vecchi”. Io sul “client” mi rifiuto di “riutilizzare” così gli utenti vecchi, perchè sennò tutti i dati storici mi si impapocchiano.
Ecco come due sistemi sincronizzati sono di fatto desincronizzati. Almeno finchè i furboni cambieranno idea sul riciclo… “dopo il vetro, le lattine e la plastica, è ora di riciclare le chiavi primarie!!!”

Categorie
Informatica

“per dipingere una parete grande…”

“…ci vuole un pennello grande!” diceva quel tale…
ma oggi ne ho sentita una ancora meglio: il mio collega R. sta lavorando su un form di un’applicazione. inserisce un bottone “Esegui”. passa il suo capufficio C., guarda il form e dice:

Quel bottone, fallo più grande. Così sembrerà che faccia pià roba…

e uno poi dice che non ci sono più gli sviluppatori di una volta… =)