Willino Blog

Sono un ingegnere informatico, appassionato di fotografia, chitarra acustica, micologia e Tennis Tavolo. In questo blog cercherò di raccontare eventi ed esperienze che in qualche modo potrebbero risultare utili a tutti.

mercoledì 28 ottobre 2009

Non importa, una fiera dei Morti è una fiera dei Morti!


Strano, molto strano.
Incrocio Via Libero Grassi - Via degli Emiri, una strada come le altre, non proprio a portata di fiere e mercati rispetto la città essendo un pò fuori porta; una strada con due scuole, un servizio ambulanze, un parcheggio sconfinato non ancora collaudato e un mercato rionale del venerdì che già da solo mette in ginocchio la viabilità della zona.

E cosa accade? in una notte decine di stand vengono tirati su alla stessa velocità con cui, ai tempi della febbre dell'oro, nascevano le cittadine ai fianchi del fiume Yukon.

Stand, stand in mezzo alla strada, lungo i marciapiedi, stand ovunque; stand che per posare in opera necessitano di chiodi piantati per terra a centinaia.
Un mercato per la festa Palermitana dei Morti.

L'organizzazione però puzza...

All'inizio vennero costruiti stand davanti ad un passo carraio di via Nina Siciliana (uscita di un condominio di Via degli Emiri 57) che però, a seguito di forti lamentele, vennero spostati in mezzo alla strada.

Mi vengono dubbi : è mai venuto qualcuno a fare un sopralluogo verificando con il condominio l'eventuale possibilità di usare altri passi carrai? E se l'uscita di via Degli Emiri non fosse carrabile? E se ci fossero stati dei disabili che avevano accesso solo dall'uscita di via Nina Siciliana?
Non importa, una fiera dei Morti è una fiera dei Morti!

Sempre in quel condominio risiede un servizio di Ambulanze con uscita in via Nina Siciliana e mezzi parcheggiati esattamente in via Nina Siciliana (diverse ambulanze e auto)
Altra domanda che mi viene in mente : e ora dove parcheggeranno? come faranno ad essere tempestivi nel soccorso se le ambulanze sono parcheggiate molto lontane dalla sede operativa e, quindi, per raggiungerle bisognerà fare una lunga corsa a piedi?
Non importa, una fiera dei Morti è una fiera dei Morti!

Il venerdì, ogni venerdì, da sempre, in via Libero Grassi viene allestito il mercato rionale autorizzato dal comune, che comporta la chiusura di alcune strade.
Altra domanda che mi viene in mente : ma se con il mercato viene chiusa via Libero Grassi lasciando, all'incrocio con via Degli Emiri, la possibilità di svoltare a sinistra verso via Nina Siciliana, questo venerdì come faranno visto che sarà chiusa anche quella strada?
Mi chiedo anche : ma il comune prima di autorizzare questa fiera ha verificato che il piano traffico, la situazione mercati rionali, le scuole, i servizi sanitari e sociali non venissero penalizzati o addirittura messi in grave difficoltà (dalla Zisa non c'è scelta, bisogna andare in via Perpignano per raggiungere la circonvallazione)?
Non importa, una fiera dei Morti è una fiera dei Morti!

Da parecchio tempo (così come in mezza città) in via Nina Siciliana l'illuminazione pubblica stradale è spenta (è uno scenario inquietante : buio pesto, spazi aperti e molti rischi).
Altra domanda che mi viene in mente : vuoi vedere che li lasciano al buio? No? Tornerà a funzionare? Peggio! Allora vuol dire che una Fiera dei Morti vale più della sicurezza nelle strade!
Non importa, una fiera dei Morti è una fiera dei Morti!

Ancora : i volantini promozionali parlano di fiera dei Morti con accanto "ampio parcheggio"!
Ma come? Il parcheggio sconfinato di cui vi parlavo non è ancora collaudato né inaugurato e per questa fiera pensano di aprirlo?
Altra domanda che mi viene in mente : Non è che per caso l'intenzione è di aprirlo "abusivamente" (ovvero senza previo collaudo)?
Non importa, una fiera dei Morti è una fiera dei Morti!

No, forse sono ingenuo, da un comune retto da un Sindaco che ad agosto veleggia libero al vento pilotato da uno skipper pagato da noi, non posso che aspettarmi questo.

mercoledì 14 ottobre 2009

Amore e Follia

Un giorno,
la Follia decise di invitare tutti i sentimenti a prendere un caffè da lei.
Dopo il caffè, la Follia propose:
'Si gioca a nascondino?'
'Nascondino? Che cos'è?' - domandò la Curiosità.
'Nascondino è un gioco. Io conto fino a cento e voi vi nascondete.
Quando avrò terminato di contare, cercherò e il primo che troverò sarà il prossimo a contare.'
Accettarono tutti ad eccezione della Paura e della Pigrizia.
'1,2,3...' - la Follia cominciò a contare.
La Fretta si nascose per prima, dove le capitò.
La Timidezza, impacciata come sempre, si nascose in un gruppo d'alberi.
La Gioia corse in mezzo al giardino.
La Tristezza cominciò a piangere, perché non trovava un angolo adatto per nascondersi.
L' Invidia si unì al Trionfo e si nascose accanto a lui dietro un grande masso.
La Follia continuava a contare mentre i suoi amici si nascondevano.
La Disperazione era disperata vedendo che la Follia era già a novantanove.
'CENTO!' - gridò la Follia - 'Comincerò a cercare.'
La prima ad essere trovata fu la Curiosità, poiché non aveva potuto impedirsi
di uscire per vedere chi sarebbe stato il primo ad essere scoperto.
Guardando da una parte, la Follia vide il Dubbio sopra un recinto che non
sapeva da quale lato si sarebbe meglio nascosto.
E così di seguito scoprì la Gioia, la Tristezza, la Timidezza.
Quando tutti erano riuniti, la Curiosità domandò: 'Dov'è l'Amore?'.
Nessuno l'aveva visto.
La Follia cominciò a cercarlo.
Cercò in cima ad una montagna, nei fiumi sotto le rocce.
Ma non trovò l'Amore.
Cercando da tutte le parti, la Follia vide un rosaio, prese un pezzo di legno e
cominciò a cercare tra i rami, allorché ad un tratto sentì un grido.
Era l'Amore, che gridava perché una spina gli aveva forato un occhio.
La Follia non sapeva che cosa fare.
Si scusò per aver organizzato un gioco così stupido, implorò l'Amore per avere il suo perdono e arrivò al punto di promettergli che l'avrebbe assisito per sempre.
L' Amore, rincuorato, accetto la promessa e quelle scuse così sincere,
così, da allora,
l'Amore è cieco,
e la Follia lo accompagna sempre.

giovedì 8 ottobre 2009

TripleDES bug in LockBox

Da qualche tempo mi sono imbattuto con un seccante problema di incongruenza di risultati legati alla crittografia di un flusso di byte tramite le funzioni TripleDes di LockBox per Delphi.
In seguito ad alcune analisi del codice sorgente della suite Lockbox, ho scoperto l'arcano.
Quando vengono criptati solamente 8 byte, le funzioni di crittografia aggiungono erroneamente altri 8 byte vuoti in coda al flusso da criptare; esattamente come se stessimo criptando un flusso di byte NON multiplo di 8 byte.
L'errore di fondo, nel codice, consiste nell'aggiungere un blocco di 8 byte senza verificare se il flusso sia già multiplo di 8 byte.

Di seguito la riga di codice principale responsabile dell'errore nella funzione TripleDESEncryptStream della unit LbProc di LockBox.
• Esempio SQL/WSQL
  1.  If Encrypt Then
2. Inc(BlockCount);
Codice incriminato


Ho risolto il problema riscrivendo la funzione in toto (considerato il fatto che non mi piace come è stata concepita).
L'unica vera differenza nella funzione scritta da me è legata al fatto che la utilizzo esclusivamente con SmartCard e, pertanto, trovo comodo che i parametri siano di tipo Array di Byte, piuttosto che Stream.

Ecco di seguito il codice sorgente.
• Esempio SQL/WSQL
  1.Procedure TripleDes(const Source: Array Of Byte; 
2. const Key: TKey128;
3. var Dest: TAnyArray;
4. Encrypt: Boolean);
5.
6. Function CheckBlockSize(fBlock : TDESBlock) : Byte;
7. Var
8. Last : Byte;
9. Begin
10. Last:=1;
11. While (Last<=SizeOf(fBlock)) And (fBlock[Last-1]<>0) Do
12. Inc(Last);
13. Result:=Last-1;
14. End;
15.
16.Var
17. I : LongInt;
18. Block : TDESBlock;
19. Context : TTripleDESContext;
20. BlockMod,
21. BlockCount : LongInt;
22.
23. InStream : TMemoryStream;
24. OutStream : TMemoryStream;
25.Begin
26. InStream := TMemoryStream.Create;
27. OutStream := TMemoryStream.Create;
28. Try
29. InStream.Write(Source[0], Length(Source));
30. InStream.Position := 0;
31.
32. InitEncryptTripleDES(Key, Context, Encrypt);
33.
34. BlockMod:=(InStream.Size Mod SizeOf(Block));
35. BlockCount := (InStream.Size Div SizeOf(Block));
36.
37. For I := 1 To BlockCount Do
38. Begin
39. InStream.Read(Block, SizeOf(Block));
40. EncryptTripleDES(Context, Block);
41. // scrittura ultimo blocco in decrypt
42. If Not Encrypt And (I=BlockCount) Then
43. OutStream.Write(Block, CheckBlockSize(Block))
44. Else
45. OutStream.Write(Block, SizeOf(Block));
46. End;
47.
48. // scrittura ultimo blocco in encrypt
49. If Encrypt And (BlockMod<>0) Then
50. Begin
51. FillChar(Block,SizeOf(Block),0);
52. InStream.Read(Block, BlockMod);
53. EncryptTripleDES(Context, Block);
54. OutStream.Write(Block, SizeOf(Block));
55. End;
56.
57. OutStream.Position := 0;
58. SetLength(Dest, OutStream.Size);
59. OutStream.Read(Dest[0], OutStream.Size);
60. Finally
61. InStream.Free;
62. OutStream.Free;
63. End;
64.End;
Soluzione


E' possibile estrarre la funzione dalle Unit LockBox e scriverla in una propria aggiungendo alla lista delle uses le seguenti:
• Esempio SQL/WSQL
  1.Uses
2. LbCipher,
3. lbProc,
4. LbString;
Unit da aggiungere

ANSA.it - Top News