PHP: LA CLASSE PHP PER CREARE URL CORTI TRAMITE LE API DI TINYURL, IS.GD, HEX.IO, TR.IM & BIT.LY

10 marzo 2010 marco Nessun commento

I Short URL sono comunemente usati oggi per diversi motivi: evitare garbling url,
prendere uno spazio più piccolo soprattutto per le URL lunghe che devono essere inviati a
ad esempio in uno spazio limitato come Twitter, oppure vengono spesso utilizzati anche per nascondere l’url originale per fare phishing e gli annunci / affiliazione.

Ci sono molti siti web che forniscono servizi per accorciare url come tinyurl, bit.ly, hex.io, ho creato questo script PHP per Creare url brevi “al volo”, attualmente il supporto: TinyURL, bit.ly, is.gd, tr.im e hex.io, ma si possono facilmente aggiungere altri fornitori.

Se hai delle domande scrivimi un commento oppure scrivimi direttamente tramite la pagina dei contatti.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
 
class ShortUrl {
 
	public static function create($url,$provider='tinyurl',$user='',$key='') {
		$api_url = sprintf(self::api($provider),urlencode($url),$user,$key);
		return self::inspect($provider,self::execute($api_url));
	}
 
	private static function execute($url) {
		$ch = curl_init();
		curl_setopt ($ch, CURLOPT_URL, $url);
		curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 5);
		$text = curl_exec($ch);
		curl_close($ch);
		return $text;
	}
 
	private static function inspect($provider,$xml) {
		if(!empty($xml)) {
			switch(strtolower(trim($provider))){
				case "bitly":
					$o = new SimpleXMLElement($xml);
					return (string)$o->results->nodeKeyVal->shortUrl;
					break;
				case "trim":
					$o = new SimpleXMLElement($xml);
					return (string)$o->url;
					break;
				case "isgd":
				case "hexio":
				default:
					return $xml;
			}
		}
		return false;
	}
 
	private static function api($provider) {
		switch(strtolower(trim($provider))){
			case "bitly":
				$return = "http://api.bit.ly/shorten?version=2.0.1&format=xml&longUrl=%s&login=%s&apiKey=%s";
				break;
			case "isgd":
				$return = "http://is.gd/api.php?longurl=%s";
				break;
			case "hexio":
				$return = "http://hex.io/api-create.php?url=%s";
				break;
			case "digg":
				$return = "http://services.digg.com/url/short/create?url=%s&appkey=%s&type=xml";
				break;
			case "trim":
				$return = "http://api.tr.im/v1/trim_url.xml?url=%s";
				break;
			default:
				$return = "http://tinyurl.com/api-create.php?url=%s";
		}
		return $return;
	}
}
?>

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$url = 'http://www.chazzuka.com/blog/?p=192';
echo ShortUrl::create($url,'trim');
echo '<hr />';
echo ShortUrl::create($url,'tinyurl');
echo '<hr />';
echo ShortUrl::create($url,'isgd');
echo '<hr />';
echo ShortUrl::create($url,'hexio');
echo '<hr />';
echo ShortUrl::create($url,'bitly','your_user_name','your_api_key');
?>

Linux Shell: Integrare l’ output di ls

2 marzo 2010 marco Nessun commento

ls è uno dei comandi base di UNIX, e quindi anche per GNU/Linux, con esso è possibile controllare directories, files, permessi, ecc., il suo output è dettagliato e ben strutturato, ma può anche essere migliorato.

Come?

Provate a mandare in esecuzione:

$ (printf “PERMESSI LINKS PROPRIETARIO GRUPPO DIMENSIONE MESE GIORNO HH:MM PROGRAMMA” ; ls -l | sed 1d) | column -t

Articoli correlati:
http://www.marcobruni.info/it/category/linux
http://www.marcobruni.info/it/category/shell

Categorie:linux, shell Tag: ,

Quali sono gli errori di programmazione più pericolosi?

19 febbraio 2010 marco 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.

Linux Shell: Cambiare estensione ricorsivamente

30 gennaio 2010 marco Nessun commento

Spesso le foto scaricate dalla fotocamera digitale, hanno estensione .JPG, anziche .jpg, per ovviare al “problema”, basterà eseguire il comando seguente dalla shell:

find /percorso/delle/immagini -name *.JPG -exec rename “s/.JPG/.jpg/g” {} ;

Categorie:linux, shell Tag: ,

Il software per la grafica vettoriale Inkscape arriva alla versione 0.47

17 gennaio 2010 marco Nessun commento

Il software open source per la grafica vettoriale si aggiorna dopo un anno di intenso sviluppo.
È disponibile la versione 0.47 di Inkscape, programma open source di disegno basato sul formato standard Svg (Scalable Vector Graphics), per Windows, Linux e Mac OS X.

Questa versione esce a un anno di distanza da quella precedente e introduce nuove funzioni, come il salvataggio automatico a tempo, il controllo ortografico, l’esportazione in PostScript e Encapsulated PostScript e un nuovo tipo di curva, Spiro. Inoltre sono stai corretti centinaia di bug e sono state migliorate le prestazioni generali del software.

Per conoscere meglio questo programma leggete la voce di wikipedia: http://it.wikipedia.org/wiki/Inkscape

Cosa ne pensi?

Linux Shell: Zippare e spostare

14 gennaio 2010 marco Nessun commento

Continuiamo ad esplorare il fantastico mondo di Gnu/Linux.

Il comando di oggi, non fa altro che comprimere la directory di lavoro al volo, evidenziando i progressi, e spostandola nella posizione voluta.

tar -cf – . | pv -s $(du -sb . | awk ‘{print $1}’) | gzip > out.tgz

Ciò che accade è che indichiamo a tar di creare “-c”, un archivio di tutti i file nella directory corrente “.” (ricorsivamente), stampando l output dei dati verso lo stdout “-f -”, poi andiamo a specificare la dimensione “-s” di tutti i file nella directory corrente, per il comando “pv”, il prossimo passo: du “-sb. | awk? (Print $ 1)?” restituisce il numero di byte della directory corrente, poi zippiamo tutto il contenuto ed inviamo l outpup verso il file “out.tgz”

Articoli correlati:
Linux shell: Scompattare dalla rete

Linux, il meglio degli ultimi 10 anni secondo IBM developerWorks

Categorie:linux, shell Tag: ,

Programmare in C# nel frameowrk .NET – parte 01

13 gennaio 2010 marco Nessun commento

Che cosa è il C #?

Il C# (si pronuncia “c sharp”) è un linguaggio di programmazione object-oriented sviluppato da Microsoft all’interno dell’iniziativa .NET, ed è, in un certo senso, il linguaggio che meglio degli altri descrive le linee guida sulle quali ogni programma .NET gira; questo linguaggio è stato infatti creato da Microsoft specificatamente per la programmazione nel Framework .NET. I suoi tipi di dati “primitivi” hanno una corrispondenza univoca con i tipi .NET e molte delle sue astrazioni, come classi, interfacce, delegati ed eccezioni, sono particolarmente adatte a gestire il .NET framework. Leggi il resto nella voce di wikipedia.

Vediamo un esempio Hello World / Ciao Mondo:


using System; 

class class HelloWorld
{
    static static void Main()
    {
        Console .WriteLine( "hello world" );
    }
}

Come compilare questo codice! E ‘facile, scrivetelo in Visual Studio ed eseguite.

Utilizzando il compilatore da riga di comando, un tale programma può essere compilato con la riga di comando dalla finestra DOS con il comando:

csc helloworld.cs CSC HelloWorld.cs

Spiego alcune delle righe di codice scritto:

using System; Riferimenti della direttiva uno spazio dei nomi denominato system che viene fornito da Microsoft. NET Framework, per utilizzare le librerie del Framework.

static static void Main() è un membro della classe HelloWorld. Essa ha il modificatore static, e quindi è un metodo della classe HelloWorld ed è il punto di ingresso per l’applicazione.

Console .WriteLine( “hello world” ); questa riga scrive sullo schermo di output c”hello world”, Console è una classe all’interno del namespace System, e WriteLine () è un metodo di questa classe per stampare sulla console una frase.

Come scrivere con C #?

C # è un linguaggio, e per utilizzare qualsiasi linguaggio si deve conoscere la sua grammatica.

In primo luogo parliamo dell’avvio dell’applicazione (il punto di accesso):

Avvio dell’applicazione si verifica quando l’ambiente di esecuzione chiama un metodo designato, che viene indicato come il punto di ingresso. Questo metodo del punto di ingresso è sempre chiamato Main, E può avere uno dei seguenti firme:

static static void Main() {…} void Main () {…}

static static void Main( string [] args) {…} void Main (string [] args) {…}

static static int Main() {…} int Main () {…}

static static int Main( string [] args) {…} int Main (string [] args) {…}

Il punto di ingresso può opzionalmente avere un parametro formale. Il parametro può avere qualsiasi nome, ma il tipo del parametro deve essere string [] un vettore string, per capire cosa è un vettore leggete l’articolo Tutorial Java: copiare un array/vettore in Java. Se il parametro formale è presente, l’ambiente di esecuzione crea e passa un vettore stringa [] argomento contenente la riga di comando gli argomenti che sono stati specificati quando l’applicazione è stata avviata. Il vettore di parametri stringa [] non è mai nullo, ma può avere una lunghezza pari a zero se gli argomenti della riga di comando non sono stati specificati, C# è un linguaggio orientato agli oggetti è supporta l’overloading (cioè una classe o una struttura può contenere più definizioni di un metodo, a condizione che ognuno ha una diversa firma), così che l’applicazione può avere diversi punti di ingresso.

Note:

La firma di un metodo consiste nel nome del metodo e il tipo e la natura (valore di riferimento, o di uscita) di ciascuno dei suoi parametri formali, considerato in ordine da sinistra a destra. La firma di un metodo in particolare non include il tipo di ritorno, né comprende il modificatore di parametri.

L’ambito di un nome è la regione di testo del programma all’interno del quale è possibile fare riferimento alle entità dichiarate dal nome senza qualifiche del nome. Ambiti possono essere nidificate, e un campo di applicazione interna può ridichiarare il significato di un nome da un ambito esterno. Il nome dal campo esterno è poi detto di essere nascosto nella regione di testo del programma rientrano nell’ambito di applicazione interiore, e l’accesso al nome esterno è possibile solo con il nome di qualificazione.

Esempio A:


class A
{
    int i = 0; 

    void B()
    {
        i = 1;
    } 

    void C()
    {
        i = 2;
    }
}

Lo scope delle variabili è il contesto all’interno del quale esse sono definite.
i ha lo scope nella classe A e nel campo di applicazione ai metodi di B e C.

Esempio B:


class A
{
    int i = 0;

    void B()
    {
        int i = 1;
    } 

    void C()
    {
        i = 2;
    }
}

E’ come l’esempio precedente ma nel metodo B è nascosta nuova dichiarazione di un membro con lo stesso nome i.

Ogni namespace o spazio dei nomi e il tipo ha un nome pienamente qualificato, che identifica univocamente il namespace o il tipo, tra tutti gli altri. Il nome completo di uno spazio dei nomi o di tipo N è determinato come segue:

  • Se N è un membro del namespace globale, il suo nome completo è N
  • In caso contrario, il suo nome completo è SN, dove S è il nome completo dello spazio dei nomi o del tipo in cui N è dichiarata

Esempio:


class A { }                  // A 

namespace X              // X
{ 

           class B           // XB
           {
                        class C { }         // XBC
            }
            namespace Y               // XY
            {
                        class D { }     // XYD
            } 

} 

namespace X.Y                  // X.Y
{
             class E { }          // X.Y.E 

 }

Ecco l’esempio da scaricare:
Hello World – Esempio della lezione Programmare in C# nel frameowrk .NET – parte 01

Non vi perdete la prossima puntata che pubblicherò la prossima settimana in cui parleremo dei tipi.

Articoli correlati

Nuova pagina dei software

6 gennaio 2010 marco 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 marco Nessun commento

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 marco 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 player.

Chiudi
Invia e-mail