hbm2ddl.keywords

Versioni utilizzate:

  • Debian 4.0/Ubuntu 9.10
  • NHibernate 2.1.1.400
  • Postgres 8.3
  • .NET/Mono 2.4.4/2.6.4/2.7

Recentemente ho migrato una applicazione da NHibernate 1.2 alla più recente 2.1.2. Dopo un rapido refactoring per rinominare il necessario e rispettare i nuovi namespace mi sono imbatutto nel seguente errore:

System.InvalidCastException: Cannot cast from source type to destination type.
 at NHibernate.Tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.Prepare () [0x00000] in <filename unknown>:0
 at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords (NHibernate.Dialect.Dialect dialect, IConnectionHelper connectionHelper) [0x00000] in <filename unknown>:0
 at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update (ISessionFactory sessionFactory) [0x00000] in <filename unknown>:0
 at NHibernate.Impl.SessionFactoryImpl..ctor (NHibernate.Cfg.Configuration cfg, IMapping mapping, NHibernate.Cfg.Settings settings, NHibernate.Event.EventListeners listeners) [0x00000] in <filename unknown>:0
 at NHibernate.Cfg.Configuration.BuildSessionFactory () [0x00000] in <filename unknown>:0
 [...]

Le righe inferiori dello stack fanno riferimento al codice non-NHibernate, la prima di queste punta alla riga dove viene tirata su la Session dalla SessionFactory(). Dopo un po' di mezz'ore a controllare e ricontrollare (e a rileggere le note di rilascio) ho cercato su San Google ed ho trovato che è un tipo errore causato dall'errata impostazione della proprietà hbm2ddl.

L'autoquoting pare non piacere in qualche modo. Impostando la proprietà a none l'errore non viene più sollevato.


NHibernate ed il tipo uuid in Postgres

Versioni utilizzate:

  • Debian 4.0
  • NHibernate 1.2
  • Postgres 8.3
  • .NET/Mono 2.4.4

PostgreSQL 8.3 supporta nativamente gli uuid. Il supporto è però dato da un modulo esterno (basato su libossp) ma comunque ufficialmente supportato. È quindi necessario installare il modulo sul sistema:

~# apt-get install postgresql-contrib-8.3 libossp-uuid15

Per poter sfruttare le nuove funzioni bisogna eseguire il codice SQL contenuto nel modulo. Il meccanismo di templating dei DB fa sì che un nuovo DB venga creato a partire (copiato) da dei DB predefiniti. Dovendo usare gli uuid spesso ho scelto di caricare le funzioni nel template predefinito template1 e poi creare i nuovi DB a partire da questo: tutti i DB creati usando template1 come template avranno a disposizioni il tipo di dato uuid e le funzioni associate.

postgres=#\connect template1
template1=#\i /usr/share/postgresql/8.3/contrib/uuid-ossp.sql

<id name="uuid_column" column="uuid_column" type="string"  access="...">
	<generator class="uuid.hex">
		<param name="format">D</param>
	</generator>
</id>
public virtual string uuid_column {
	get { return _uuid_column;  }
}
private string _uuid_column;

Per colonne che non sono chiave primaria è sufficiente usare il tipo di dato a string e impostare come politica di generazione insert: quando l'oggetto verrà salvato l'uuid sarà generato da PostgreSQL.

<property  name="uuid_property" type="string" access="nosetter.lowercase-underscore" generated="insert">
	<column name="uuid_proerty" />
</property>

La classe C# avrà come properietà una semplice string:

public virtual string uuid_property {
	get { return _uuid_property;  }
}
private string _uuid_property;

Mumbai, Italia

La città è piena di gente che accampa diritti su ciò che non le appartiene. Inquilini che rivendicano il possesso di proprietà occupate abusivamente. Operai di fabbriche in perdita che esigono di conservare il posto di lavoro. Abitanti degli slum che chiedono l'allacciamento alla rete idrica ed elettrica delle loro abitazioni, costruite illegalmente su terreno pubblico. Funzionari pubblici che rivendicano il diritto di continuare a lavorare anche quando da tempo non c'è più bisogno di loro, a spese del contribuente. Pendolari che rivendicano ulteriori riduzioni delle tariffe ferroviarie, che sono già tra le più basse del mondo. Spettatori cinematografici che chiedono al governo di congelare il prezzo dei biglietti. Per molto tempo il governo indiano ha creduto che la legge della domanda e dell'offerta fosse illusoria; ciò che si paga per una merce, un cibo o un servizio non ha alcun rapporto con i costi sostenuti da chi lo produce.

Maximu City, Suketu Mehta, p.112

Se non ci fossero gli espliciti riferimenti al governo indiano ed agli slum potrebbe essere un brano tratto da un libro che parla dell'Italia (e degli italiani). Il librò è stato associato a Gomorra di Saviano. È un parallelo che è valido solo per la prima parte del libro che comunque è secondo me la più interessante: i Paesi senza un sistema giudiziario equo e funzionante si assomigliano.


Varie 20091224

  • Fire your boss. Articolo interessante riguardo la cattiva gestione dei progetti. Il mantra è "Se il tuo responsabile non riesce a capire tecnicamente cosa stai facendo probabilmente il suo lavoro è sbagliato". Condivido ma dipende: può succedere di avere un 'capo' che non è responsabile. [Via ./]
  • Blizzard pR0N. Una galleria di foto scattate all'interno degli uffici Blizzard, uno dei più grandi spacciatori di droga
    e rinomati (per la qualità) produttori di videogiochi (non voglio fare il conto delle ore di vita perse tra i vari Diablo, Starcraft e Warcraft).
  • Maaaamaa! Mama? "Bohemian rhapsody" cantata e scimmiottata dai 'The Muppets'. [Via BoingBoing]

Huawei E1750 ed Ubuntu 9.04

Ho sottoscritto un abbonamento dati della H3G ed ho preso in "comodato d'uso" la Huawei E1750. Si differenzia dagli altri modelli per una velocità massima teorica di upload un po' più alta. Il virgolettato è necessario perché al termine del contratto la chiavetta diventa di proprietà.

La chiavetta è un del tipo "misto": funge sia da adattatore UMTS che da lettore di schede di memoria MicroSD; possiede inoltre una memoria interna sulla quale sono memorizza i driver per dell'adattatore UMTS.

Ci sono anche i driver per Gnu/Linux. In questo momento utilizzo Xubuntu 9.04 e purtroppo lo script di installazione fallisce. Leggendo questo scrtip e quel po' di documentazione a corredo ho elaborato la seguente procedura:

  • Copiate il file 'HWActivator' (usate quello per la vostra architettura: c'è a 32bit ed a 64bit) nella cartella:
    /usr/local/bin

    avendo cura attivare il bit di esecuzione:

    # chmod u+x /usr/local/bin/HWActivator
  • copiate il file 'runhwactivator' dentro /etc/init.d/ anche questo deve essere eseguibile. Aggiungete al file /etc/rc.local la seguente riga appena prima di 'exit 0':
    /etc/init.d/runhwactivator start

    anche qui controllate di avere il bit di esecuzione su /etc/rc.local

  • Aprite il file /etc/init.d/runhwactivator ed alla prima riga non commentata (circa la 25esima) inserite:
    HWAPP=/usr/local/bin/HWActivator
  • Avviate il programma eseguendo:
    # /etc/init.d/rc.local start

Al prossimo riavvio quest'ultimo comando sarà eseguito automaticamente. Questo metodo non fa uso di udev e probabilmente da problemi in caso della sospensione o dell'ibernazione del computer con la chiavetta collegata ma come si dice: "It works on my computer!".

Dettagli nerd

Gli script del driver fornito con la chiavetta richiedono 'bash' per essere eseguiti. In una *buntu standard è necessario esplicitare l'interprete 'bash' per runhwactivator perché l'insieme degli script di 'init.d' vengono interpretati da 'dash' (dalla versione di Ubuntu  6.10). Quest'ultima è strettamente compatibile con POSIX e manca di alcuni costrutti e parole chiave tipiche dello slang di 'bash' (la pagina sul wiki di Ubuntu è esaustiva).

La chiavetta e l'abbonamento fanno il loro sporco lavoro. La banda è sufficiente per un uso anche po' intensivo e in una zona densamente abitata (il centro di una grande città) la linea non è mai caduta accidentalmente, usandola prevalentemente la sera e da fermo. Allego i test di pingtest e speedtest (privi di qualsiasi valore). La connessione è ovviamente dietro NAT.

653549996

5720437


Corso autogestito GNU/Linux 2009 al Dip.Informatica di Torino

Ricevo dal lettore di feed e ripubblico molto volentieri:

È in partenza l’edizione 2009 del corso su GNU/Linux gestito autonomamente dagli studenti (ed ex-studenti) di informatica dell’Università di Torino.

Il corso è aperto al pubblico esterno e totalmente gratuito, tuttavia il livello tecnico del corso è piuttosto alto. Non si tratta di un programma adatto ai principianti e sono fondamentali delle basi piuttosto buone; siamo pur sempre nel dipartimento di informatica!
Detto ciò, l’edizione di quest’anno sembra essere molto interessante e almeno la prima lezione è fruibile da tutti, perciò fatevi avanti!

Calendario:

  • 0)   10 marzo  16:00 Codice, soldi, libertà, divertimento
  • 1)   17 marzo  16:00 Architettura del sistema GNU/Linux
  • LIP) 24 marzo  14:00 Installation Party
  • 2)    8 maggio 14:00 Linea di comando, come fare tanto con poco
  • 3)   15 maggio 14:00 Configurazione wired e wireless, servizi di rete
  • 4)   22 maggio 14:00 Il software per lo sviluppo software
  • 5)   29 maggio 14:00 Sicurezza e crittografia
  • 6)    5 giugno 14:00 Virtualizzazione e panoramica sui sistemi UNIX

La lezione 0 non è tecnica ed è adatta a tutti (e molto importante). Le lezioni 1,2 e 3 sono per chi vuole diventare un utente GNU/Linux mediamente esperto. Le restanti sono invece più tecniche per chi vuole qualcosa in più e potrebbero interessare anche i professionisti.

È molto gradito l’avvisare della propria intenzione di partecipare con un commento quì (o per e-mail), lasciando la propria e-mail, per ogni eventualità. Questo genere di commenti non verrà pubblicato.

Le lezioni si terranno in aula B, mentre il LIP in aula studio, salvo variazioni. Il dipartimento di informatica si trova al Piero della Francesca, ingresso da via Pessinetto 12, Torino. Ci sono delle scale esterne e delle porte verde scuro. Materiali e forum del corso sono su i-teach.
Per chi volesse diffondere l’iniziativa, prego di linkare questa pagina per poter ricevere i commenti e le mail di chi vuole partecipare.

Io personalmente terrò le prime 2 lezioni. Sto anche valutando di registrare qualche video, vedremo.

Il corso è dedicato in particolare agli studenti di informatica ma la partecipazione è aperta a chiunque sia interessato all'argomento.

P.S.Quest'anno proprio non ce l'ho fatta a partecipare come docente. Sarà per il prossimo anno :D Go GNU, go!


Consumo Natalizio

Mi raccomando, in questo Natale di crisi consumate, consumate, consumate...

[Fran and Stephen osservano dal tetto esterno del centro commerciale]
Francine Parker: Cosa fanno? Perché vengono qui?
Stephen: Una sorta d'istinto... una memoria di ciò che erano abituati a fare. Questo posto era importante nelle loro vite.

Due protagonisti di "Dawn of the death" osservano la moltitudine di zombie ammassarsi intorno al centro commerciale.


Varie 20081213

  • Noia - Anche se non sono qualificato per dirlo (ironia...) studiare informatica a Torino (poli o unito) è fondamentalmente noioso. In altri posti per fortuna no. Invece a come Stanford.
    Via: Packz
  • Respiriamo merda - Avete presente la leggera foschia che ricopre Torino? Ecco...

    Fonte: Andrea Ratto

  • Human battery - In una scena del film Matrix I l’angelo rivelatore Morpheus spiegava che in un futuro prossimo le macchine avrebbero trasformato gli esseri umani in generatori elettrici. Ebbene, i primi passi in questa direzione si stanno già facendo: dopo i primi protipi e concept ecco una applicazione concreta: parlano 1.400kW al giorno dai tornelli di una stazione ferroviaria in Giappone. Secondo me l'indicazione del wattaggio prodotto è imprecisa. Si veda questo pdf per maggiori dettagli.Ovviamente è tutto inutile se l'energia prodotta durante il periodo di vita dell'apparato è inferiore a quella necessaria all'estrazione delle materie prime, del loro trasporto, alla loro raffinazione, al trasporto del raffinato, alla costruzione, all'installazione, alla produzione e allo smaltimento :P (improbabile). Insomma vale lo stesso discorso dei pannelli solari.

Will it blend?

L'ingorgo che spesso tappa via Stradella intorno alle 18:00 è l'ennesima prova empirica che per la razza umana non c'è speranza. Lo sterminio di massa è l'unica soluzione. Scienziati pazzi di tutto il mondo unitevi!

Prometto che il prossimo pezzo lo scrivo su qualcosa di tecnico (mvn2?).


Ubuntu merda (Update 1)

Update 1

  • Il boot è più lento di una manciata di secondi (lo vedo dal conky spiattellato sul dekstop). Togliendo all'avvio "fronzoli" come cups ed un altro paio di servizi si recupera il vecchio tempo di boot.
  • Tutto Mono è fermo alla 1.9.1. con monodevelop fermo ad una preistorica 1.0. Ma perché?! Perché?! Giù di luridi PPA...
  • Al termine dello shutdown il computer resta acceso (roba che neanche una Red Hat del '97...)
  • L'hibernate ed il suspend finalmente funzionano.
  • L'hibernate ed il suspend non sputtanano il driver wifi Intel 3945 come accadeva in passato.
  • Il driver wifi Intel 3945 ora funziona davvero (prima se ci si scollegava non era più possibile riconnettersi a nessuna rete senza fili).
  • Perché ad ogni upgrade si ostinano a reinstallare gnome-desktop? Se ho disinstallato merda come tomboy è perché non la voglio, se ho sostituito metacity con openbox l'upgrade non dovrebbe imporre i propri pacchetti rispetto ai miei.
  • Network manager non gestisce la porta ethernet (unmanged mode). Per ovviare basta editare il file /etc/NetworkManager/nm-system-settings.conf, cambiare l'opzione managed da false a true e riavvare nm-system-settings.
  • Questa è la più bella di tutte: se seleziono "Home folder" dal menù "Places" viene aperta la mia cartella utente. Con Totem.

Rimuovendo i packages del kernel (immagine e moduli) l'ordine diventa importante. Se infatti si rimuove prima il pacchetto con l´immagine e poi con i moduli (ad esempio linux-ubuntu-modules-2.6.24-17-386) dpkg nella fase di post remove prova a ricostruire l'initramfs usando l'immagine della stessa versione che è stata appena rimossa.

Per ovviare o si reinstalla l'immagine e si rimuovono i pacchetti nell'ordine giusto (prima i moduli, poi le immagini) oppure si modificano gli script di post remove dei pacchetti dei moduli.

Questi script si trovano in /var/lib/dpkg/info/ e hanno nome nome-del-pacchetto.postrm: è sufficiente mettere un exit 0 appena dopo #!/bin/bash. I pacchetti dei moduli verranno rimossi senza problemi.



  • Archivi

  • Libri@aNobii