Archivio

Archivio per la categoria ‘programmazione’

LINQ to SQL: Disegnare gli oggetti in C#, prima di creare il DB

27 dicembre 2010 Nessun commento

Non sto dicendo che si dovrebbe eliminare la pianificazione del database dai documenti di progettazione di un nuovo applicativo. Niente affatto. La progettazione del database è una parte importante della processo di sviluppo e non dovrebbe mai essere trascurato, se necessario. Allo stesso tempo, a volte è più facile iniziare il processo di progettazione in un altro modo – la meno comune.

Dalla mia esperienza, nella progettazione di un database fin dall’inizio si dà una struttura piuttosto rigida. Dopo aver definito le tabelle e creato alcune stored procedure, gli sviluppatori iniziano a lavorare sulle loro applicazioni cercando di adattare l’applicazione alle condizioni esistenti del DB e spesso essi devono raggiungere compromessi perché una piccola modifica a una tabella di DB può rovinare tutta una catena di relazioni tra tabelle.

Prosegui la lettura…

Come creare in PHP una tabella in un database MySQL

22 dicembre 2010 Nessun commento

In questo articolo vedremo come in Php si può creare una tabella di un database MySQL. Prima affronteremo il file config.php in cui ci sono i parametri di connessione al server MySQL e la funzione di php per la connessione e poi affronteremo il file per la creazione della tabella, alla fine del post troverai lo zip con all’interno i 2 file php che puoi scaricare per fare tutte le prove che vuoi.

Prosegui la lettura…

WordPress: Modificare il plugin transposh per le traduzioni automatiche

17 dicembre 2010 2 commenti

Nel mio blog utilizzo il plugin transposh per le traduzioni automatiche della homepage, dei post e delle pagine. Mi succedeva che a fianco delle bandierine in home page comparisse la scritta Edit Translation che volevo nascondere allora ho deciso di mettere mani direttamente nel codice php del plugin.

Ho modificato il file transposh_widget.php che si trova /wordpress/wp-content/plugins/transposh-translation-filter-for-wordpress/wp e nella classe transposh_plugin_widget ho modificato la funzione transposh_widget($args) commentando questa parte di codice:

 // add the edit checkbox only for translators for languages marked as editable
 // if ($this->transposh->is_editing_permitted()) {
 //     echo '<input type="checkbox" name="' . EDIT_PARAM . '" value="1" ' .
//      ($this->transposh->edit_mode ? 'checked="checked"' : '') .
//      ' onclick="this.form.submit();"/>&nbsp;Edit Translation';
//}

[AGGIORNAMENTO]
Parlando nei commenti con il realizzatore del plugin Ofer Wald, ho scoperto che si poteva fare il tutto senza toccare una linea di codice. Andando nella sezione Impostazioni->Transposh e settando nell’area Transalation Settings, l’opzione Who can translate ? solo per Amministratore e non Anonymous.

WordPress: personalizzare l’area quickpress della bacheca

17 dicembre 2010 Nessun commento

Quando mi vengono delle idee per nuovi argomenti/post per il mio blog me li appunto salvando una bozza tramite l’area quickpress della bacheca di wordpress.

Recentemente mi è capitato per errore che invece di cliccare il bottone Salva Bozza ho cliccatto il bottone Pubblica rendendo pubblico un articolo non finito che è solo una bozza. Se lo leggeva qualcuno tramite i miei feed o direttamente sul blog facevo una figuraccia.

Allora ho deciso di modificare il codice php dell’area quickpress della bacheca di wordpress per nascondere il bottone Pubblica e per evitare questi errori in futuro.

Ho preso il file dashboard.php che si trova nella cartella \wp-admin\includes\ e nella funzione wp_dashboard_quick_press_output() ho commentato la parte di codice che aggiungeva il bottone pubblica in questo modo:

<!--<span id="publishing-action">
     <input type="submit" name="publish" id="publish" accesskey="p" tabindex="5" class="button-primary" value="<?php current_user_can('publish_posts') ? esc_attr_e('Publish') : esc_attr_e('Submit for Review'); ?>" />
     <img class="waiting" src="<?php echo esc_url( admin_url( 'images/wpspin_light.gif' ) ); ?>" />
</span>-->

Ho solo commentato e non cancellato le righe di codice così in futuro posso riabilitare il bottone Pubblica. Adesso non c’è più pericolo di sbagliare.

[Sondaggio] Se dovessi imparare 3 linguaggi di programmazione quale sceglieresti?

8 dicembre 2010 5 commenti

Dopo circa 3 settimane il sito dzone.com ,che si occupa di programmazione e che frequento tutti i giorni, ha raccolto 2300 risposte per il suo sondaggio. Mi stupisce il fatto che Php sia solo al 9 posto con il 15% e invece colpisce il 3 posto di python che si prefigura sempre di più come il linguaggio di programmazione del futuro.

Io per fortuna sono messo bene perchè conosco e continuo a studiare parecchi di questi linguaggi come: Java, Python, C# e Php.

Ecco i risultati:

dzone.com risultato sondaggio scelta linguaggi di programmazione

Programmazione in Php: 7 funzioni che probabilmente non hai mai usato

30 novembre 2010 4 commenti

Quando programmiamo in PHP, spesso ci limitiamo ad un numero limitato di funzioni API: quelli comuni, come il print (), header (), definire (), isset (), htmlspecialchars (), ecc Se alcune funzionalità necessarie non esistono, spesso ne scriviamo delle nuove facendo uso di questi componenti di base che conosciamo. Le API di PHP in realtà offrono un sacco di funzionalità, alcune inutili e qualcuna utile, che vengono usate raramente. Ho cercato tra le funzioni disponibili e mi sono interessato a trovarne qualcuna di cui davvero ho bisogno. Ecco, condivido con voi le mie scoperte.

1. sys_getloadavg ()
sys_getloadvg () è una funzione che restituisce tre misure del “carico” su un sistema. Il carico è il numero di processi in coda di esecuzione del sistema. I 3 elementi della matrice sono il carico medio per gli ultimi 1, 5 e 15 minuti.

1
2
3
4
5
$carico = sys_getloadavg(),
se ($carico[0] > 80) {
    header('HTTP/1.1 503 Troppo occupato, riprovare più tardi');
    die('Il server è occupato più tardi. Riprova.');
}

Piuttosto che avere il servizio Web non più disponibile (offline) semplicemente perché è crollato tutto dopo aver ricevute troppe richieste, questo codice permetterà in maniera preventiva di accettare alcune richieste e di negarsi ad altre. Questo codice però non funziona su Windows.

2. cal_days_in_month ()
cal_days_in_month () restituisce il numero di giorni in un dato mese:

1
2
$giorni = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y")); / / 31
echo($giorni - data("d") + 1 )."giorni fino a quando".date("F", mktime(0, 0, 0, data("m") + 1, 1, 1970));

3. get_browser ()
Non sarebbe bello scoprire che cosa può fare il browser di un utente prima di inviare la pagina? Beh, si può con get_browser (). Avrete bisogno di php_browscap.ini prima, e il punto di direttiva browscap al file. Si potrebbe avere qualcosa di simile a questa:

1
2
3
$browser = get_browser(null, true);
if(!$browser["frames"] | | !$ browser["cookies"])
      echo "Si prega di aggiornare il browser o usare un browser più moderno ed attivare i cookies perchè alcune sezioni di questo sito potrebbero essere inaccessibili";

Questo non è in grado di rilevare le singole configurazioni di browser, tuttavia, non può essere utilizzato per rilevare se è abilitato JavaScript, per esempio. Questa funzione può essere utile per sapere quale browser si usa e quale piattaforma viene utilizzata.

4. debug_print_backtrace ()
Può essere molto difficile da rintracciare un errore nel codice in particolare quando si cerca un errore logico, invece grazie a debug_print_backtrace() potrebbe essere molto più facile. Come ad esempio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$a = 0; 
 
function iterate() 
{ 
      global $a; 
      if( $a < 10 ) recur(); 
      echo $a.", "; 
} 
 
function recur() 
{ 
     global $a; 
     $a++; 
     // how did I get here? 
     echo " \n \n \n "; 
    debug_print_backtrace(); 
    if ( $a < 10 ) iterate (); 
}   
 
iterate (); 
# OUTPUT: #0 recur() called at [C:\htdocs\php_stuff\index.php:8] #1 iterate() called at [C:\htdocs\php_stuff\index.php:25] #0 recur() called at [C:\htdocs\php_stuff\index.php:8] #1 iterate() called at [C:\htdocs\php_stuff\index.php:21] #2 recur() called at [C:\htdocs\php_stuff\index.php:8] #3 iterate() called at [C:\htdocs\php_stuff\index.php:25] #0 recur() called at [C:\htdocs\php_stuff\index.php:8] #1 iterate() called at [C:\htdocs\php_stuff\index.php:21] #2 recur() called at [C:\htdocs\php_stuff\index.php:8] #3 iterate() called at [C:\htdocs\php_stuff\index.php:21] #4 recur() called at [C:\htdocs\php_stuff\index.php:8] #5 iterate() called at [C:\htdocs\php_stuff\index.php:25] [ ... ]

5. natsort()
natsort() è una funzione che ordina elementi di una matrice in maniera naturale (cioè, in un ordine che sembra logico a una persona), piuttosto che un ordine di tipo alfabetico. Prendete, per esempio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$items = array("100 mele", "5 mele", "110 mele", "55 mele");
 
/ / normale ordinamento:
sort($items);
print_r($items);
 
# Il risultato:
Array #
# (
# [0] => 100 mele
# [1] => 110 mele
# [2] => 5 mele
# [3] => 55 mele
#)

natsort($items);
print_r($items);
 
# Il risultato:
# Array
# (
# [2] => 5 mele
# [3] => 55 mele
# [0] => 100 mele
# [1] => 110 mele
#)

6. Levenshtein()
Levenshtein() è una funzione che aiuta a trovare la miglior somiglianza tra 2 parole. Prendiamo, per esempio, il codice seguente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$dictionary = array( "php" , "javascript" , "css" ); 
$word = "japhp"; 
$best_match = $dictionary[0]; 
$match_value = levenshtein ($dictionary[0] , $word); 
 
foreach($dictionary as $w) 
{ 
     $value = levenshtein($word , $w); 
     if( $value < $match_value) 
     { 
          $best_match = $w; 
          $match_value = $value; 
     } 
} 
 
echo "Forse cercavi la categoria ' $best_match ' ?";

In questo caso, l’utente è stato chiesto di fornire un nome di categoria. Ha scritto “japhp”, che non è valido. Poiché questo è probabile che sia un errore di digitazione, grazie a questa funzione riusciamo a trovare la categoria più somigliante (“Forse cercavi categoria ‘php’?”).

7. glob()
glob() , vi farà sentire stupidi dopo l’uso di opendir(), readdir() e closedir() per cercare un file. La procedura è semplicissima:

1
2
foreach (glob("*. php") as $file)
    echo "$ file\ n";

Di Più?
Ci sono un sacco di funzioni utili e sconosciute là fuori come http_build_query(), register_shutdown_function() e pspell_suggest, quali sono le vostre preferite?

Fonte: infinity-infinity.com

Quali sono gli errori di programmazione più pericolosi?

19 febbraio 2010 Nessun commento

Così come accaduto lo scorso anno, oltre trenta organizzazioni internazionali che si occupano di sicurezza, si sono sedute attorno ad un tavolo per stilare la lista dei 25 errori di programmazione più pericolosi. Si tratta di “leggerezze” che sono considerate particolarmente gravi perché possono esporre le applicazioni sviluppate ad attacchi esterni favorendo, ad esempio, attività criminali e sottrazione di dati.

Il documento che illustra gli errori di programmazione più deleteri è consultabile facendo riferimento a questa pagina. Ogni errore è stato commentato, valutato in termini di criticità e suddiviso in categorie.

Nella sezione “insecure interaction” sono raccolti gli errori che possono condurre all’iniezione di codice dannoso, nell’area “risky resource management” sono esposte problematiche di programmazione che possono portare ad attacchi di tipo buffer overflow o risultati non validi mentre nella sezione “porous defenses” vengono affrontate le “falle” nelle procedure di autenticazione o crittografia.

Per ciascun errore, viene indicata anche la semplicità nell’individuazione dello stesso, i costi per la risoluzione del problema, la frequenza di attacchi ed il livello di conoscenza generale del problema da parte degli aggressori.

In testa alla classifica, per gravità del problema, ci sono sempre le vulnerabilità che espongono un sito web ad attacchi “cross-site scripting” (XSS); al secondo posto la mancata “pulizia”, effettuata dal programmatore, delle stringhe ricevute in ingresso dall’utente ed utilizzate all’interno delle interrogazioni SQL. Seguono, al terzo e quarto posto, le classiche vulnerabilità di “buffer overflow” (la copia di un dato ricevuto in input senza verificarne la corretta dimensione) e le “cross-site request forgery” (CSRF).

Appena un paio degli errori descritti nel documento di pubblica consultazione, sarebbero responsabili – secondo le stime – di quasi due milioni di attacchi sferrati nei confronti di siti web.

Nuova pagina dei software

6 gennaio 2010 Nessun commento

Questa mattina ho creato la pagina dei software in cui metterò tutti i programmi di cui parlerò nei miei post come ad esempio Python: come trasformare la rubrica di thunderbird in un semplice elenco di indirizzi mail.

Se vuoi un consiglio oppure un chiarimento contattami.

Categorie:programmazione Tag:

Tutorial Java: copiare un array/vettore in Java

5 gennaio 2010 2 commenti

Il vettore o array in informatica o matematica si può immaginare come una sorta di casellario, le cui caselle sono dette celle dell’array stesso, clicca qui per leggere l’intera voce su wikipedia.

Questo tutorial in Java mostrerà come usare il metodo System.arraycopy() per copiare un vettore/array in java. Il metoto System.arraycopy() permette di copiare un intero vettore oppure una parte di esso.

Naturalmente per copiare l’array, l’array di destinazione deve avere la stessa grandezza (lo stesso numero di caselle) dell’array sorgente.

Ecco un esempio con del codice Java:

String[] sorgente = { “gatto”, “cane”, “uccello” }; // Definisco l’array sorgente con 3 caselle di tipo stringa cioè variabili con del testo

String[] destinazione = new String[sorgente.length]; // Definisco l’array di destinazione vuoto e con lunghezza uguale all’array sorgente ricorda devono avere la stessa lunghezza sorgente e destinatario

System.arraycopy(sorgente , 0, destinazione , 0, sorgente.length); // Infine utilizzo il metodo System.arracopy dando come parametri l’array sorgente, la posizione in cui iniziare a copiare, l’array di destinazione, la posizione in cui devo mettere la copia e la lunghezza

Articolo correlato: java: convertire una variabile di tipo String in Date

Abbonati ai miei feed RSS: http://www.marcobruni.info/it/feed

Python: come trasformare la rubrica di thunderbird in un semplice elenco di indirizzi mail

2 gennaio 2010 Nessun commento

Python è un linguaggio di programmazione ad alto livello interpretato, orientato agli oggetti, adatto, tra gli altri usi, per sviluppare applicazioni distribuite, scripting e computazione numerica.

Considero python un linguaggio di programmazione molto potente e versatile ed è per questo che l’ho usato per trasformare la rubrica degli indirizzi di posta elettronica di mozilla thunderbird in un elenco usabile in una newsletter.

Ecco il mio primo screencast del mio blog così puoi capire meglio di cosa parlo, cliccate sul bottone a forma di quadrato in basso a destra del video a sinistra del volume per vederlo a tutto schermo…Buona Visione e dimmi cosa ne pensi.

Get the Flash Player to see this content.

Codice:


from string import *

def findrev(stro,strf,pos):
    i = pos
    while stro[i]!=strf:
        i = i - 1
    return i

fn = open("rubrica.csv")
fm = open("NewsLetter.txt","w")

while 1:
    line = fn.readline()
    if not line:
            break
    else:
            posc = find(line,"@",0)
            posv1 = find(line,",",posc)
            posv = findrev(line,",",posc)

            fm.writelines(line[posv+1:posv1]+','+'\n')

pass # do something

fm.writelines("bruni.marco@gmail.com")
fm.close()
fn.close()

print "Finito, ho creato la NewsLetter"