Non sei loggato | Registrati | Login

Facciamo un’applicazione Web 2.0 altrimenti rimarremo nerds! Aggiungi

News / Pensieri

Benvenuto! Se sei un nuovo visitatore ti consiglio di iscriverti al mio Feed RSS in modo da essere sempre aggiornato riguardo l'uscita di nuovi articoli oppure sbirciare tra i tutorials ed i progetti.
Per avere un'idea del best-content presente in questo blog puoi leggere il post intitolato "Ed ora è il momento di rilanciare alcune iniziative! (1a parte e 2a parte)".
Buona navigazione e grazie per la visita!

Bene, i tempi stringono…ognuno deve almeno conoscere i principi che stanno dietro alla costruzione di un’applicazione del genere oppure averne già creata una.
Perchè dico questo? Semplice, non c’è giorno che non visiti una qualsiasi pagina senza sentir nominare le seguenti parole: Web2.0, tags, ajax, social, e molto altro.
Oltre all’aspetto puramente tecnico/funzionale che contraddistinge le parole appena citate, esiste anche quello estetico.
Ultimamente siamo testimoni di un appiattimento grafico dove questa volta le parole magiche sono: gradienti, grandi fonts, sfondo bianco, effetto riflesso, pixel fonts, ecc…
In un certo senso stiamo vivendo quel “minimalismo” grafico che da più rilevanza al “fare” (quindi all’usabilità) che al “vedere”: posso solo essere contento di ciò.
L’accessibilità e l’usabilità sono concetti che a volte si abbracciano ma in questo caso fanno a pugni, ed è appunto per questo che non smetterò mai di consigliare di creare applicazioni seguendo tutti e due gli approcci disponibili (in poche parole Web1.0 e Web2.0) soprattutto nei siti di una certa importanza.

L’ultima cosa che vorrei dire è questa: molte persone cercano di creare le proprie applicazioni Web2.0 (grandi o piccole che siano) imitando o prendendo spunto da quelle già esistenti spinte dall’ondata di entusiasmo.

Quale miglior opportunità di imparare? :)

Daniele Simonin 3 Ottobre 2006 alle 12:48 Ci sono 5 commenti

Problemini tecnici hosting Aggiungi

News / Melodycode.com

In questi giorni l’azienda che mi fornisce l’hosting sta cercando di risolvere un problemino che affligge tutti i siti ospitati da loro (si! compreso il mio ;).
Il problema consiste fondalmentalmente nella ripetizione dell’html (Assurdo…è vero!), che si risolve riaggiornando la pagina…infatti il difetto vi si presenterà solo una volta per ciascuna visita (vi risparmio i vari dettagli che è meglio).

Mi scuso

Daniele Simonin 2 Ottobre 2006 alle 08:36 Aggiungi commento

Memorizzare password in un db in modo sicuro Aggiungi

News / Codice

Molto spesso si incontra la necessità di dover registrare le credenziali dell'utente in un qualsiasi database.
Il dato più delicato a cui prestare attenzione è la password: molto spesso viene memorizzata nel database in chiaro oppure per chi ci tiene alla sicurezza ne viene calcolato l'hash in md5 (e quindi criptato).
Molto spesso quest'ultima soluzione viene considerata la migliore: ed è vero, ma manca un piccolo particolare!
L'md5 essendo per definizione un algoritmo di crittografia univoco a senso unico rende "impossibile" (anzi per essere precisi, molto laborioso e poco conveniente visto che la matematica che si interessa di scomposizione in numeri primi di grandi numeri non ha trovato ancora alcun algoritmo adatto allo scopo) trasformare l'hash nella password originaria.
L'unico sistema per fare ciò è il matching degli hash, ossia ottenere la password tramite il semplice confronto tra hash (è il sistema che ci mette a disposizione rednoize) ma ciò richiede l'esistenza di un database corposo di hashes (rainbow tables).
L'hash della parola test è 098f6bcd4621d373cade4e832627b4f6 di cui è facile fare il lookup utilizzando il sito citato sopra, da ciò si capisce come la sicurezza è si legata all'algoritmo di crittografia ma anche alla qualità della password (lunghezza, ecc...).
Per risolvere questo problemino si utilizza solitamente la tecnica del salting che consiste nel concatenare alla password in chiaro una stringa random o "prestabilita" in modo da rendere impossibile il confronto tra hashes, ecco un piccolo esempio in PHP:

  1. <?php
  2.  
  3. /* Definiamo il SALT */
  4. define('SALT', 'yuppydoo');
  5.  
  6. /* Crittografia password */
  7. $password_criptata=md5(SALT.$_POST['password']);
  8.  
  9. ?>

Naturalmente nel momento in cui dobbiamo identificare l'utente dobbiamo tenere conto di questa soluzione e quindi fare una cosa simile a:

  1. <?php
  2.  
  3. if (md5(SALT.$_POST['password'])==$password_criptata) {
  4.     /* Loggato */
  5. } else {
  6.     /* Non Loggato  */
  7. }
  8.  
  9. ?>

Ora l'utilizzo di una rainbow table risulta essere inefficace :)

Daniele Simonin 29 Settembre 2006 alle 11:04 Ci sono 6 commenti

REST Representational State Transfer, cos’è? Aggiungi

News / Surfing

Leggendo per sommi capi "Ajax Design Patterns" di Michael Mahemoff (che gestisce il sito ajaxpatterns.org) sono venuto a conoscenza di REST.
Questo termine fu coniato tempo fa da Roy Fielding (che è uno dei principali autori delle specifiche HTTP) nel documento intitolato "Architectural Styles and the Design of Network-based Software Architectures".
La definizione è la seguente:

Representational State Transfer is intended to evoke an image of how a well-designed Web application behaves: a network of web pages (a virtual state-machine), where the user progresses through an application by selecting links (state transitions), resulting in the next page (representing the next state of the application) being transferred to the user and rendered for their use.

Tra i principi di REST la cosa più interessante è come vengono rivalutati correttamente i metodi HTTP ossia: GET, POST, PUT e DELETE attribuendo a loro significati concreti.
GET è simile al concetto di leggere/copiare (o comunque prelevare informazioni), POST di creare/aggiungere, PUT di aggiornare ed infine DELETE per eliminare/tagliare.
Il mondo dei servizi Web (Web Services) si fa sempre più complicato ;)

Daniele Simonin 28 Settembre 2006 alle 11:36 Aggiungi commento

Problemi server Aggiungi

News / Melodycode.com

Mi scuso per i problemi che affliggono in questi giorni il sito: per fortuna ogni problema ha una soluzione ;)

Daniele Simonin 27 Settembre 2006 alle 10:30 Aggiungi commento

Le 10 frasi più comuni dette da un programmatore arrabbiato Aggiungi

News / Fun

Navigando per dzone.com ho scoperto l'articolo intitolato "10 Common Words Uttered by Programmers !!".
In questo articolo si citano le parole/frasi più utilizzate dai programmatori nell'istante in cui scoprono errori o bug durante la fase della programmazione.
Secondo Balakumar Muthu le 10 parole più usate sono:

  1. uh-oh God
  2. it's weird
  3. f**k
  4. come on
  5. shit
  6. it worked yesterday
  7. ^#!%& microsoft
  8. stupid computer
  9. cuppa time
  10. more coffee

Sarà così anche in Italia? Secondo me andiamo più sul pesante quindi è meglio non fare alcuna classifica ;)

Daniele Simonin 24 Settembre 2006 alle 11:03 Aggiungi commento

Rain TPL il template engine per PHP Aggiungi

News / Software

RainTPL logo
Chi meglio dell'autore (in questo caso RainElemental) sa definire il proprio progetto?

Rain TPL è un software PHP Open Source che gestisce i template, compilandoli da HTML a PHP per velocizzarne l'utilizzo. E' stato ideato per separare il lavoro dei grafici web da quello dei programmatori web, dividendo la parte statica (HTML) da quella dinamica (PHP). In questo modo i grafici si occuperanno di realizzare i temi, ed i programmatori semplicemente di utilizzarli nei propri programmi.

Il progetto è aperto quindi chiunque voglia aiutare l'autore (traducendo in inglese la documentazione, ecc...) può farlo :)

PS: Il progetto è stato annunciato anche in un post su Wave9.it.

Daniele Simonin 20 Settembre 2006 alle 11:05 Aggiungi commento

Codice sorgente delle infoPillole Aggiungi

News / Codice

Ho già spiegato nel post precedente cosa sono le infoPillole e quindi ora non mi resta che condividere il codice sorgente:

  1. <?php
  2.  
  3. /* Inizio impostazioni */
  4. $numero_items=5;
  5. $url_base_wikipedia="http://it.wikipedia.org"; // url base di wikipedia senza ultimo slash
  6. $url_portale_wikipedia="http://it.wikipedia.org/wiki/Wikipedia:Progetto_Informatica/Lista_delle_voci_di_informatica"; // url da cui prelevare i links
  7. /* Fine impostazioni */
  8.  
  9. function download_and_save_wiki($mese,$url_portale_wikipedia) {
  10.  
  11.         /* Download wiki */
  12.        
  13.         ini_set('user_agent','Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6'); // settaggio user-agent per evitare codice di errore 403 da parte di Wikipedia
  14.        
  15.         if ($wiki_content=@file_get_contents($url_portale_wikipedia)) { // preleva sorgente pagina web
  16.        
  17.                 if (preg_match_all('/<li><a href="(.*)" title="(.*)">(.*)<\/a><\/li>/im', $wiki_content, $wiki_items)) { // estrazione links
  18.                         $count_items=count($wiki_items[0]);
  19.                         for ($i=0; $i<$count_items; $i++) {
  20.                                 $wiki_item[$i]['h']=$wiki_items[1][$i]; // valore attributo href
  21.                                 $wiki_item[$i]['t']=$wiki_items[2][$i]; // valore attributo title
  22.                                 $wiki_item[$i]['n']=$wiki_items[3][$i]; // contenuto nodo
  23.                         }
  24.                 } else {
  25.                         return -1; // nessun link trovato
  26.                 }
  27.                                
  28.         /* Save wiki */
  29.        
  30.         if (!($file=fopen(TEMPLATEPATH.'/'.$mese.".txt","w"))) { // apre il file in scrittura
  31.                 return -2;
  32.         }
  33.         $file_array=serialize($wiki_item); // prepara l'array per il salvataggio
  34.         if (!(fwrite($file,$file_array))) { // scrivo l'array nel file del mese
  35.                 return -3;
  36.         }
  37.         $mese_prec=($mese==1?(12):($mese-1)); // mese precedente
  38.         @unlink($mese_prec.".txt"); // cancello il file del mese precedente
  39.         return $wiki_item; // ritorno l'array
  40.         } else {
  41.                 return -4; // errore scaricamento pagina
  42.         }
  43. }
  44.  
  45. function load_wiki($mese) {
  46.         if ($file=@file_get_contents(TEMPLATEPATH.'/'.$mese.".txt")) { // carico il contenuto del file
  47.                 return unserialize($file); // ritorno l'array
  48.         } else {
  49.                 return -1; // errore caricamento file
  50.         }
  51. }
  52.  
  53. $mese=date('n'); // rappresentazione numerica del mese corrente (da 1 a 12)
  54.  
  55. if (!file_exists(TEMPLATEPATH.'/'.$mese.".txt")) {
  56.         $wiki_item=download_and_save_wiki($mese,$url_portale_wikipedia);
  57.         switch($wiki_item) { // gestione errori
  58.                 case -1:
  59.                         echo "<ul>\n<li>Non &egrave; stato trovato alcun link</li>\n</ul>\n";
  60.                 case -2:
  61.                         echo "<ul>\n<li>Impossibile creare il file di cache</li>\n</ul>\n";
  62.                 case -3:
  63.                         echo "<ul>\n<li>Impossibile scrivere sul file di cache</li>\n</ul>\n";
  64.                 case -4:
  65.                         echo "<ul>\n<li>Errore durante la connessione a <a href=\"http://it.wikipedia.org\" title=\"Wikipedia Italia\">Wikipedia</a></li>\n</ul>\n";
  66.  
  67.         }
  68.        
  69. } else {
  70.         $wiki_item=load_wiki($mese);
  71.         switch($wiki_item) { // gestione errori
  72.                 case -1:
  73.                         echo "<ul>\n<li>Non &egrave; stato possibile prelevare i dati dalla cache</li>\n</ul>\n";
  74.         }
  75. }
  76. if (is_array($wiki_item)) {
  77.         srand(time());
  78.         shuffle($wiki_item);
  79.        
  80.         echo "<ul>\n";
  81.        
  82.         $count_items=count($wiki_item);
  83.         $numero_items=($numero_items>$count_items || $numero_items<=0)?($count_items):($numero_items);
  84.        
  85.         for ($i=0;$i<$numero_items;$i++) {
  86.                 echo "<li><a href=\"".$url_base_wikipedia.$wiki_item[$i]['h']."\" title=\"Approfondisci su Wikipedia il significato di '".$wiki_item[$i]['t']."'\">".$wiki_item[$i]['n']."</a></li>\n";
  87.         }
  88.        
  89.         echo "</ul>\n";
  90. }
  91.  
  92. ?>

Il codice risulta essere facilmente modificabile ad esempio rendendo possibile la creazione di un feed RSS della pagina interessata.
Sarebbe molto bello convertirlo in un plug-in per Wordpress solo che non ho tempo per documentarmi a riguardo quindi se qualcuno ha interesse a farlo ben venga ;)

Daniele Simonin 18 Settembre 2006 alle 11:07 Aggiungi commento

Aggiunte le infoPillole Aggiungi

News / Melodycode.com

Visitando Wikipedia ho notato che c'è un portale dedicato all'informatica dove al suo interno c'è un link che porta ad una lista di voci inerenti il mondo dell'informatica.
Il mio cervello allora ha pensato: perchè non estrarre i links di quella pagina per poi mostrare 5 termini informatici casuali nel mio blog? Ed è quello che ho fatto!
Più precisamente la lista delle voci viene aggiornata ogni mese (per ridurre le chiamate remote a Wikipedia) e memorizzata in un file che funge da cache.

Ora l'analfabetizzazione informatica è solo un brutto ricordo ;)

PS: L'iconcina sembra un mouse? la libertà di espressione in 9*11 pixel è un po' ridotta scusatemi :P

Daniele Simonin 16 Settembre 2006 alle 21:17 Aggiungi commento

Unilife - L’università che volevi Aggiungi

News / Surfing

Logo Unilife
Che cos'è Unilife?

Unilife è una community dedicata al mondo universitario italiano e di conseguenza a tutte le persone che ruotano attorno a questo mondo: in primis gli studenti e i docenti, ma anche dottorandi, laureati e personale non docente.

Per avere una panoramica più completa delle cose che si possono fare vi consiglio di leggere "Cosa fare su Unilife".
Per registrarsi occorre avere un indirizzo mail fornito dall'università in modo da garantire l'accesso solo agli universitari (studenti o professori): quindi con domini del tipo uniud, unipd, ecc...

PS: Sarebbe bello se, nello specifico, l'università di Udine pubblicizzasse questo tipo di iniziative.

Daniele Simonin 14 Settembre 2006 alle 12:51 C'è un commento

Feed

infoPillole (by Wikipedia)

Ultimi commenti

  • Emanuele: Io invece vedo un altro numero un po’...
  • Attilio Viscido: Thanks, può essere molto utile :)
  • oniduke: AAaaah!!! Tropic Thunder è bellissimo!!!!!11...
  • Gioxx: Non c’è nulla da preoccuparsi lato flipper...
  • Daniele Simonin: Nel mio caso non sono venuto a...

Calendario

Novembre 2008
L M M G V S D
« Ott    
 12
3456789
10111213141516
17181920212223
24252627282930

Archivio

Categorie

News casuali

Ultimi tutorials

Progetti

Alcuni miei lettori

Have a break