Posts Tagged ‘Programmazione’

Editor PHP

Monday, February 26th, 2007

DZSoft - Scadente: funzionalità molto semplici e contenute in tutti gli altri software - voto 2/5
NuSphere PHPEd - Ide ben fatto - voto 4/5
Zend Studio - Ide ben fatto - voto 4/5
VS.NET per Visual Studio - Integrato con visual studio 2005 non supporta refactoring e simili- voto 4/5

Sprechi all’italiana?

Monday, February 26th, 2007

Secondo il blog http://scandaloitaliano.wordpress.com il nuovo sito internet per la promozione del turismo, esatto proprio quello di cui avete sentito la pubblicità nei telegiornali, avrebbe utilizzato una quantita di fondi smisurata per i risultati prodotti. A fronte di 45 milioni di euro spesi (di cui 100.000€ solo per il logo) il sito fornisce informazioni facilmente reperibili su decine di altri siti web costati anche 10.000 volte meno del portale in questione.

I soldi sono in gran parte andati alle regioni (21 milioni di euro, ovvero il 46% dell’intera cifra).

Anche noi non possiamo non concordare sul fatto che si potesse di fatto utilizzare una cifra minore per ottenere lo stesso risultato e cogliamo l’occasione per chiedere il parere dei nostri lettori sulla seguente questione: al di fuori della demagogia, come può un partito politico o l’altro, risolvere i problemi di un Italia il cui unico vero problema reale sembra essere quello degli sprechi? Questa è ovviamente un’opinione, e sta a voi la possibilità di commentarla e dire la vostra.

http://punto-informatico.it/p.aspx?id=1905861

Risorse su Ajax

Thursday, February 22nd, 2007

Un sito utile, leggero e ben fatto:
http://www.fullo.net/blog/tag/ajax

Plugin per wordpress

Wednesday, February 21st, 2007

Qui di seguito una lista di siti su cui troverte i principali plugin per wordpress

http://codex.wordpress.org/Plugins/Posts_Editing
http://www.wpplugins.org/charts/downloads
http://wordpress.softplug.net/
http://www.bloggingpro.com/archives/category/wordpress-plugins/
http://www.johntp.com/category/wordpress/wordpress-plugins/
http://redalt.com/External/Plugins/

Java 6.0 è uscito!

Friday, February 16th, 2007

Di seguito elenchiamo alcune delle principali novità introdotte dall’ultima versione di Java.

La classe SplashScreen permette di creare delle schermate di avvio dell’applicazione senza aspettare il caricamento completo della Java Virtual Machine

Il metodo getSystemTray() permette di controllare che il system tray sia effettivamente supportato. Ricordiamo che Java deve la sua notorietà proprio alla possibilità di eseguire codice indipendentemente dalla piattaforma hardware e dal sistema operativo sottostante.

E’ stato inoltre velocizzato il rendering dell’interfaccia grafica (Swing) e altre novità secondarie.

Perchè il mio computer è così lento?

Sunday, February 11th, 2007

Processori superscalari che richiedono anni di progettazione da parte di team di centinaia di persone, RAM velocissime appoggiate da cache ancor più veloci, istruzioni a 64 bit, hard disk capaci di trasferire anche 50 MB in un solo secondo e ADSL da 6 Megabit. Ma come possono i computer di oggi andare lenti?

Se pensate che la cosa sia dovuta al carico di lavoro o colli di bottiglia vi sbagliate di grosso: ci sono pochissime applicazioni che richiedono realmente un’elevata potenza di calcolo e sono le seguenti.
- database enormi
- programmi di simulazione scientifica
- software per grafica 3D
- videogame con grafica moooooolto alta

Sapete a cos’è dovuto il rallentamento che percepite? Semplice, alla disottimizzazione più totale a tutti i livelli hardware e soprattutto software interessati dalle applicazioni. Pensate che il software venga “ottimizzato”?
No! L’unica ottimizzazione che il software subisce è quella da parte della CPU che riordina le istruzioni per evitare cicli di stallo, ovvero per non dover aspettare il risultato di un operazione mentre potrebbe eseguirne un’altra invertendo l’ordine nel codice sorgente del programma.

Doom 3 è scritto quasi interamente in DirectX 7.0! Altro che ottimizzazione, qui non abbiamo nemmeno lo sfruttamento delle funzionalità introdotte. Quando mai avete visto programmatori scrivere codice ottimizzato per MMX, SSE ed SSE2? Sono pochissimi le case che scelgono di sacrificare la compatibilità per le prestazioni, ancor meno quelle che scrivono più versioni del programma. Adobe Premiere è uno dei pochissimi software che gira solo su processori con supporto SSE2…

Del resto l’aggiornamento del computer, anche per chi ha le competenze per sostituire i singoli componenti, è tutt’altro che economico. I processori, le schede video, gli hard disk, le ram sono alcuni dei componenti che hanno cambiato connettori negli ultimi 3 anni…
E poi credete che raddoppiare la velocità del processore cambi qualcosa? No, inizierà a fare da collo di bottiglia tutto il resto… e anche cambiando completamente computer otterrete un miglioramento minimo rispetto a quello che ci si potrebbe aspettare.

Perchè? Semplice… Windows non gestisce NULLA in maniera ottimale. Linux è peggio e anche Machintosh si attesta a livelli simili. Facciamo un esempio. Quando un software entra in un ciclo infinito, assorbe il 100% del processore bloccando tutto windows potrebbe comunque terminarlo in un secondo. Perchè l’hardware di sistema gestisce una cosa chiamata interrupt che restituisce il controllo a windows ogni tot millisecondi. Sempre! Non è possibile che windows non rilevi che il software è bloccato e che l’utente vuole chiuderlo.

Stessa cosa per i cluster danneggiati. Anche se il controllo fosse a DMA un dispositivo permette a windows di riprendere il controllo ogni tot secondi e decidere cosa fare. Ovvio che tutte le scelte potrebbero andar bene tranne quella di bloccarsi…

I mille programmini inutili (servizi, dll, ecc) tra cui windows deve continuamente switchare richiedono continui cambi di contesto. Perchè non chiedere all’utente al momento dell’installazione se vuole autorizzarli o meno? E soprattutto perchè dividere in migliaia di processi se non c’è necessità di parallelismo? La verità è che i compilatori e gli strumenti di sviluppo del software fanno schifo. Sono a livello dell’assembler o poco più evoluti. Come gli italiani sono fissati a volere l’auto con le marce gli sviluppatori vogliono vedere il “codice”. Mentre oramai tutto dovrebbe essere fatto tramite un’avanzatissima interfaccia grafica che permetta di inserire vincoli, il riutilizzo del codice, lo sviluppo collaborativo e al contempo ottimizzi realmente il codice (riunendo più dll, riscrivendo procedure, proponendo altre soluzioni più razionali al programmatore).

Gli editor di sviluppo del software sono così primordiali da essere paragonabili ad un notepad evoluto. Cose come il refactoring del codice fanno quasi sorridere se si pensa che ormai le classi dovrebbero essere qualcosa di simile a plugin altamente configurabili, ottenuti unendo l’interfaccia e le funzionalità di diversi plugin e visualizzabili, editabili e migliorabili unicamente attraverso un’interfaccia grafica evolutissima.

Inoltre eliminare la disottimizzazione dal software richiede una revisione noiosisssssima da parte di programmatori veramente esperti e introduce bug che vanno poi eliminati. Sviluppare software secondo tale schema costerebbe 10 volte tanto il costo attuale. Facciamo un esempio. Se un’operazione comporta 1000 accessi all’hard disk leggendo il codice attentamente potrei rendermi conto che basta leggere 1 volta scrivere 999 volte in ram e 1 sull’hard disk. Il compilatore non può accorgersene (perchè è fatto malissimo)…

E se invece usassi i registri interni o ottimizzassi il tutto per non sforare dalla cache o dalla RAM? Ovvero usare l’hard disk rallenta 1000 volte rispetto a usare la ram e idem per la cache. Gli elementi di un software vengono gestiti spesso ad oggetti (che è incredibilmente inefficente) e le procedure magari vengono scritte in DLL esterne separando in programmi concorrenti operazioni che non hanno questa necessità e viceversa rendendo sequenziali operazioni che potrebbero essere concorrenti su processori hyperthreading o multicore.

E cosa dire dell’hardware? Ci vuole tanto a cambiare connettori degli hard disk, pci, processori, ecc realizzando un unico standard di connettore interno ed esterno tipo usb? E windows? A cosa servirebbe l’NCQ se windows non ciclasse continuamente tra mille operazioni di I/O su hard disk? Avete mai provato a effettuare più di un trasferimento alla volta? Windows switcha tra uno e l’altro ogni pochi KB, anche se questo non serve a nulla se non a rallentare di 5-6 volte entrambi i trasferimenti.

Insomma, la situazione è a dir poco penosa. Si potrebbe diventare miliardari solo mettendo in pratica qualcuna di queste idee. Un computer veloce decine di volte più di quelli attuali… che importanza può avere se il processore è solo a 1000 Mhz se poi il sistema operativo non esegue inutili operazioni di I/O per paging e simili?