Com’è dura la professione!

4 Giugno 2008

‘Essere’ uguale a…

Archiviato in: Programmazione, letture — lbell @ 19:42

Nel suo ultimo libro, una raccolta di spunti e pensieri, quasi un blog, Odifreddi lascia una nota sulla teoria secondo cui la struttura di un linguaggio condiziona la struttura del pensiero che in tale linguaggio viene espresso. A causa di ciò nel mondo anglosassone si è più portati a pensare in termini di sostantivi ed oggetti, che in termini di azioni e verbi. Nel campo della filosofia, questo motivo sarebbe uno delle cause delle differenze di pensiero tra la scuola continentale e quella analitica di derivazione anglosassone. Questo contrasto è esemplificato dal concetto di ‘essere’; nella filosofia continentale il verbo essere può essere impiegato con ambiguità tanto nel senso di esistere, quanto manifestare appartenenza (identità), o esprimere una proprietà.

Nei linguaggi di programmazione possiamo ritrovare le stesse differenza di impostazioni, abbastanza ironicamente visto che i linguaggi di programmazione sono quasi tutti di derivazione anglosassone.

Dal Basic, linguaggio in cui l’operatore ‘=’ viene utilizzato con le stesse ambiguità del termine ‘essere’ si passa al Pascal ed al linguaggio C ed ai suoi derivati , in cui ci si preoccupa di distinguere l’assegnamento, cioè il divenire, dal confronto, usando due operatori diversi, = e == (doppio uguale). Resta comunque possibile anche in questi due linguaggi scrivere espressioni in cui si assegna un valore ad una variabile in modo ricorsivo, facendo riferimento ad un suo valore precedente.

A=A+B

Ovviamente questa espressione non va intesa come un’equazione, ma a quest’ultima ambiguità pongono rimedio i linguaggi funzionali come Erlang, che non permettono l’assegnamento di un valore ad una variabile più di una volta, rendendo di fatto impossibile concepire simili storture sintattiche. Anche il C, con l’introduzione di appositi operatori di modifica ed assegnamento ci dà la possibilità di proseguire su questa strada, utilizzando espressioni come la seguente

A+= B

dove l’operatore += è inteso semplicemente come incremento, ma basta complicare un attimo l’espressione per ricadere nel caso precedente, dopotutto il C non ha mai deluso nessuno in quanto a flessibilità.

A+= 2/(A+1);

I concetti di sostantivo, aggettivo ed azione presenti nel linguaggio umano si ritrovano comunque nei vari paradigmi della programmazione, orientata agli oggetti, funzionale o imperativa . Nessuno di questi paradigmi è tuttavia in grado di coprire completamente le necessità della programmazione ed è per questo che nei linguaggi di programmazione orientati agli oggetti si è costretti a ricorrere all’uso dei generics, o dell’Aspect Oriented Programming.

http://it.wikipedia.org/wiki/Essere

http://it.wikipedia.org/wiki/Filosofia_analitica

http://it.wikipedia.org/wiki/Erlang_(linguaggio)

http://www.erlang.org/

http://www.vialattea.net/odifreddi/impenitente.php

http://www2.polito.it/didattica/polymath/htmlS/info/BIBLIOID/Borzacchini%20Odifreddi.htm

http://it.wikipedia.org/wiki/Chiusura_%28informatica%29

http://en.wikipedia.org/wiki/Aspect-oriented_programming

14 Maggio 2008

Sembra facile dire nj…

Archiviato in: Programmazione — lbell @ 20:45
Tags: ,

Il corretto trattamento del testo nei programmi pone problemi di design ad applicazioni che a prima vista sembrano semplici, come i word processor. In Europa, senza scomodare le complessità delle scritture asiatiche, sono usati tre diversi alfabeti principali: latino, greco e cirillico. In alcuni Paesi, come nell’area della ex Jugoslavia, quello latino e cirillico coesistono, però non tutte le lettere dell’alfabeto cirillico hanno una corrispondenza in quello latino. Per assicurare l’interscambiabilità dei due alfabeti, le lettere dell’alfabeto cirillico usato in Serbia non presenti in quello latino sono stare tradotte facendo uso di digrammi, cioè di una sequenza di due lettere inseparabili che indicano un unico carattere, Љ viene tradotto con lj, Џ con dž e Њ con nj.

Il problema è che la forma maiuscola dei caratteri cirillici viene resa trasformando in maiuscolo entrambi i glifi latini, mentre quando la lettera si trova all’inizio di una frase, solo il primo glifo dei due va messo in maiuscolo.

In Unicode è stata creata una categoria speciale per questo tipo di lettere, chiamata “titlecase”; ad ogni digrafo sono assegnati tre distinti caratteri, uno per forma, minuscola maiuscola, capitalizzata. In dettaglio lj assume i valori U+01C9, U+01C8, U+01C7, nj U+01CC, U+01CB, U+01CA, dž U+01C6, U+01C5, U+01C4 e tutti si trovano nel blocco del Latin Extended B.

Un buon programma di word processing dovrebbe ovviamente conoscere queste regole che una persona normalmente applica senza nemmeno avere bisogno di pensare.

La gestione del testo nei programmi al di là della semplice memorizzazione, non è affatto un argomento semplice, dal momento che non può prescindere dalla conoscenza approfondita della cultura dei Paesi che impiegano o che hanno dato vita ad un determinato alfabeto.

Unicode Latin Extended B

http://it.wikipedia.org/wiki/Digramma

http://it.wikipedia.org/wiki/Lingua_serba

http://en.wikipedia.org/wiki/Titlecase

12 Maggio 2008

Lo strano caso del BOM

Archiviato in: Programmazione — lbell @ 21:07
Tags: , , ,

Leggendo file con programmi scritti in C, un modo per distinguere se il file sia stato codificato in formato Unicode o ASCII senza avere a priori altre informazioni, è di controllare se nelle prime posizioni del file sia presente una sequenza di due byte che danno vita ai numeri esadecimali 0xFEFF o 0xFFFE. Per averne una conferma si provi a salvare un file di testo in formato Unicode con Notepad o Wordpad di Microsoft Windows e caricarlo con editor di testo che non supporta Unicode.

In effetti i due byte sono effettivamente un marker, un carattere Unicode specifico, il cui scopo è dichiarare l’ordine di codifica dei caratteri composti da più byte o, come si dice in inglese, l’endianness, e lo si può legalmente trovare anche nel formato UTF-8. Il suo nome è “Byte Order Mark” o BOM. Si tratta di una sequenza che nel formato Unicode è legale solo se letta in modo da assumere il valore esadecimale 0xFEFF. Il valore 0xFFFE è infatti un carattere illegale. Un programma, trovando questo carattere non rappresentabile graficamente e quindi inseribile senza problemi di alterazione in testo in formato Unicode, può capire se la codifica del file stesso è nel formato big endian o little endian. Lo standard Unicode inserisce il BOM tra i non caratteri (noncharacters); il BOM viene indicato anche come ‘Zero-Width Non-Breaking Space’

A dire il vero nel caso il file sia stato codificato in UTF-32 i byte da esaminare sarebbero quattro, ma il succo del discorso non cambierebbe.

La definizione del BOM:

FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;

Qualche link sull’argomento:

http://en.wikipedia.org/wiki/Byte_Order_Mark

http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters

http://www.unicode.org/Public/UNIDATA/UnicodeData.txt

10 Gennaio 2008

Anjuta è ora parte di GNOME

Archiviato in: Linux, Open Source, Progetti su SourceForge, Programmazione — lbell @ 22:43
Tags: , ,

Un piccolo annuncio che mi riempie di soddisfazione, anche se ormai sono anni che non vi riverso una linea di codice: Anjuta, un IDE per programmare in C e C++ per l’ambiente GNOME farà ufficialmente parte dei moduli di GNOME 2.22 come si legge in questa mail. Complimenti agli sviluppatori attuali ed una lacrimuccia in memoria di quando programmavo nel mio linguaggio preferito (il C) e Linux per me era ancora una (bellissima) novità. Di strada ne è stata fatta tanta.

Anjuta 3 Anjuta 2 Anjuta 1

Il sito ufficiale di Anjuta:

http://www.anjuta.org/

Il sito di Anjuta su SourceForge:

http://sourceforge.net/projects/anjuta

 

8 Gennaio 2008

Perché è importante usare standard aperti (ed essere contrari a OOXML)

Archiviato in: Microsoft, Open Source, cosi' va il mondo — lbell @ 23:26

La fine del supporto a certi tipi di “vecchi” formati di file decretata da Microsoft, fa riflettere sull’utilità di impiegare formati proprietari per memorizzare i documenti. In un altro blog leggo che decine di documenti religiosi e scolastici a causa di questa decisione rischiano di essere perduti perché fra qualche tempo non esisteranno più programmi in grado di leggerli, mentre gli atti più vecchi scritti su carta possono essere tranquillamente consultati.

L’accessibilità dei documenti elettronici memorizzati in formati proprietari, essendo molto spesso non nota la loro codifica, dipende dalla volontà della ditta che detiene l’ideazione di tali formati. Qualora la ditta fallisse o non avesse più convenienza ad aggiornare i programmi perché possano funzionare sui moderni sistemi operativi (tutti casi occorsi nella realtà), l’utente o l’autore di tali documenti troverebbe di fatto un ostacolo insormontabile tra sé ed i propri dati.

Cosa è successo in realtà? Che un’azienda, esercitando un suo legittimo diritto, ha deciso di togliere il supporto ad alcuni formati di file proprietari, di programmi non più funzionanti sugli odierni sistemi operativi. Lo ha fatto per la propria convenienza, citando come spiegazione ragioni di sicurezza, mediante la pubblicazione di aggiornamenti di manutenzione ai suoi programmi da ufficio. Per amor del vero devo dire che esiste una scappatoia, anche se complicata, per accedere ancora a tali formati, ma il danno maggiore lo si avrà fra qualche tempo, quando magari si avrà bisogno di consultare i documenti storici e non si saprà come.

In un mondo dove occorre lavoro ed impegno per essere continuamente competitivi, sprecare tempo e lavoro per poter di nuovo accedere ai vecchi documenti mi sembra una vergogna. Viviamo tempi in cui accadono cose straordinarie, da piccolo mai avrei pensato che potesse cadere il confine con la Slovenia nella concordia più totale o che la Cina potesse diventare la fabbrica del mondo, perché dobbiamo perdere tempo ed energie per capire come rileggere i documenti di cinque o dieci anni fa?

È facile ora consigliare di utilizzare standard aperti per la memorizzazione dei documenti, ma che alternative reali esistono per evitare di non potervi più accedere fra, diciamo, cinque anni? Tutti pensiamo di poter vivere almeno cinque anni ancora, vero? Altrimenti non perdereste tempo a leggere queste righe.

  1. Utilizzare il programma che va per la maggiore, non accontentarsi di nulla di meno, il secondo in classifica domani sarà reso obsoleto dalla nuova versione del sistema operativo o magari la ditta che lo produce sarà fallita o scalata. Ma nemmeno così sarete sicuri.

  2. Usare uno standard aperto, e per aperto non intendo aperto per finta come è stato fino ad oggi OOXML, ma un formato utilizzabile senza restrizioni né condizioni, OpenDocument, tanto per essere chiari.

Con un formato aperto sarà sempre possibile accedere ai propri dati.

Decidere di utilizzare o meno un formato aperto è di una scelta legittima, ma penso che almeno le associazioni e le pubbliche amministrazioni abbiano il dovere di utilizzare e pubblicare documenti in formati aperti.

L’uso di formati come OpenDocument, PDF ed HTML è una garanzia prima di tutto per l’utente.

Link:

http://www.tedcarnahan.com/2008/01/02/three-steps-to-open-source-in-the-church/

http://it.slashdot.org/firehose.pl?id=443210&op=view

http://support.microsoft.com/kb/938810/en-us

http://www.news.com/Office-2003-to-get-security-upgrade/2100-7355_3-6179672.html?tag=st.nl

http://www.consortiuminfo.org/standardsblog/index.php?topic=20051116124417686

http://www.noooxml.org/

http://en.wikipedia.org/wiki/Opendocument

http://www.fsf.org/campaigns/odf.html

 

 

 

 

4 Gennaio 2008

È nato il nuovo anno, è nato KDE 4.0.0

Archiviato in: Open Source, kde4 — lbell @ 21:47
Tags: ,

Non sarà il passo che porta alla salvezza del genere umano, o un capolavoro come la Gioconda, ma KDE 4.0.0 è praticamente pronto per il rilascio di metà gennaio, proprio nei giorni del mio compleanno, in un evento in grande stile a Mountain View nella sede di Google. La versione attuale non sarà tuttavia un ambiente che qualunque utente potrà desiderare di utilizzare già da ora al posto della 3.5 attuale, ma piuttosto una base su cui far crescere il KDE di domani: il processo di sviluppo del software Open Source è diverso da quello del software proprietario e questo post di Aaron Seigo lo descrive bene:
http://aseigo.blogspot.com/2008/01/talking-bluntly.html.
La fretta e la confusione con cui sono state eseguite le ultime traduzioni per rientrare nella deadline imposta, valida anche per il congelamento del codice, mi ha ricordato per certi versi l’atmosfera di un giornale al momento di andare in stampa. Più di 700 commit in un paio di giorni non è una cifra da disprezzare.
Forse è troppo tardi per la applicazioni desktop, ma KDE4 è comunque un’avventura affascinante.
Buon anno KDE, da lunedì si torna al lavoro con Windows.

9 Dicembre 2007

Android: visualizzare voci in una ListView

Archiviato in: Android, Java, Programmazione — lbell @ 11:34
Tags:

Il modo più semplice in Android di visualizzare voci con un oggetto ListView è utilizzando l’oggetto ArrayAdapter<String>, che agisce da interfaccia tra una rappresentazione testuale dei dati e la ListView. Il suo costruttore accetta un id di risorsa di tipo Layout, contenente una TextView utilizzata ad ogni riga per la visualizzazione dei dati.
Se dovessimo avere l’esigenza di presentare in modo diverso le varie voci possiamo farlo in modo semplice, sfruttando l’ottima ingegnerizzazione della classe Adapter generica, parametrizzandola per i nostri scopi. Supponiamo di dover mostrare un’icona a fianco della descrizione di una voce nel caso che il testo di quest’ultima contenga una certa sequenza di caratteri; per fare un esempio semplice controlliamo solo che il testo inizi per ‘a’. (continua…)

4 Dicembre 2007

Vita con Android

Archiviato in: Android, Open Source, Programmazione — lbell @ 21:09
Tags: ,

Finalmente ho avuto l’occasione di vedere da vicino e di provare l’ambiente di sviluppo del gPhone.

La prima cosa che si nota rispetto agli ambienti di sviluppo ‘tradizionali’ è la facilità dell’installazione: basta scompattare i file in una directory ed aggiungere una variabile di ambiente. Se si intende sviluppare con Eclipse (cosa che facilita la vita) occorre scaricare dal sito di Google un plugin. Un altra cosa che lascia ben disposti è il fatto che lo SDK sia stato portato sotto Linux, Windows e MacOS demandando la scelta dell’ambiente operativo allo sviluppatore.

L’emulatore di dispositivo in dotazione sembra ben fatto, ma a volte, almeno sotto Linux, in fase di debug perde il sincronismo con Eclipse. Dal momento che in realtà gli strumenti utilizzati dietro le quinte sono programmi pilotabili a linea di comando, adb nello specifico, presenti nella directory tools del SDK, in caso di emergenza possiamo killare il processo adb con opzione start-server permettendo ad Eclipse di rilanciarlo in modo pulito alla sessione di debug successiva. Anche lo SDK stesso sembra solamente il primo abbozzo di un sistema più completo e diverse funzionalità sono riportate non funzionanti nella mailing list dedicata al progetto.

Nel complesso come primo passo Android sembra ottimo, la documentazione è esaustiva e copre ogni parte del toolkit, ma occorre aspettarsi una sviluppo del sistema.

Come banco di prova ho iniziato un progettino per visualizzare i feeds del sito planet.kde.org (uno dei miei preferiti). Ho cercato di esplorare un po’ di tecnologie, servizi in background, uso del database sqlite, viste personalizzate e l’integrazione del browser internet incluso. Il tutto è stato abbastanza agevole, anche se non sono state investigate le capacità multimediali del sistema, di cui molti sviluppatori si sono lamentati. Ad ogni modo il progetto è stato pubblicato su Google code all’indirizzo http://code.google.com/p/planetandroid/ sotto l’obbligatoria licenza GPL.

1 Novembre 2007

Fabbriche di codice

Archiviato in: Programmazione, letture — lbell @ 21:08
Tags: , , ,

Ho iniziato a sfogliare le prime pagine di “Beautiful Code”, un libro formato da un collezione di riflessioni di programmatori di prima classe su vari problemi di software design (a proposito, perché tra gli autori non ci sono anch’io?).
La prima riflessione è su di un motore di matching di espressioni regolari ed è firmata da sua Maestà Brian Kernighan a proposito di un pezzo di codice scritto da Rob Pike nel linguaggio degli Dei, in C. Dieci pagine per parlare di un programma di trenta righe non stupiscono, ogni riga di codice corrisponde ad una decisione di cui si deve rendere conto.
Scorrendo il codice incluso, spicca questa riga:

} while(*text != '' && (*text++ == c || c == '.' ));

in cui ritrovo tutta l’espressività del C e praticamente tutto quello che viene sconsigliato di mettere in pratica nei libri degli esperti di programmazione.
É strano notare che quello che viene considerato un capolavoro di sintesi ed espressività sia considerato dannoso nella pratica dell’industria, ed una delle ragioni dell’abbandono di un linguaggio tanto potente verso i più controllabili Java e C#.
Cosa c’è di tanto sbagliato? Un postincremento in una espressione di confronto e una dipendenza del risultato finale dall’ordine dei test, il che non è affatto chiaro a chi deve leggere il codice per la prima volta, se non ha molta esperienza.
Un modo migliore di svolgere lo stesso compito sarebbe di creare una variabile booleana prima del while, e spezzare il test su più righe esplicitando test ed operazioni.
La professione del programmatore è uscita da tempo dall’artigianato per entrare nell’era della produzione industriale in cui le differenze di stile e le soluzioni ‘brillanti’ di questo tipo, che escono dai canoni delle convenzioni sono viste con sospetto.

3 Maggio 2007

ApacheDS, server LDAP da Apache (e LDAP Studio)

Archiviato in: Java, Open Source, Programmazione — lbell @ 20:27

Qualche giorno fa è stato rilasciata una nuova versione (1.5) di ApacheDS, un server LDAP scritto interamente in Java. LDAP è ormai diventato centrale nel mondo IT per la gestione delle identità degli utenti in ambienti di una certa complessità. Microsoft vi ha decisamente puntato, mentre il mondo Open Source è un po’ più statico a questo riguardo.

ApacheDS, server nato da un progetto Apache, ha diverse caratteristiche interessanti: è scritto in Java, è embeddable, estensibile, supporta filtri, trigger (che possono implementare integrità referenziale) e stored procedure.

Sono previsti tool di configurazione per semplificare la vita agli utilizzatori ed esiste già uno strumento, LDAP Studio basato su Eclipse che, oltre a permettere la navigazione dei dati, può editare gli schemi (e presto modificare direttamente ads) e presto avrà altre funzionalità specifiche per ads.

Sul sito (http://directory.apache.org) ci sono guide e tutorial.

A dire la verità dopo alcune prove, ho riscontrato qualche problema con il consumo di memoria. La quantità di memoria consigliata e di default è di 384MB ( da settare nel file di gestione del servizio) ma sulla mia macchina con solo 512MB con tale valore ads non è riuscito a partire causa allocazioni fallite. Ho dovuto abbassare il limite ad un più ragionevole 128 MB per avere la soddisfazione di vederlo partire.

Oltre al sito del progetto si può trovare una presentazione sul sito della conferenza europea di Apache 2007 http://www.eu.apachecon.com/

LDAP Studio

« Pagina PrecedentePagina Successiva »

Blog su WordPress.com.