Il blog per tutti gli smanettoni del pc

apr 16

Introduzione

Snake è un famoso giochino che ha come protagonista un serpente . Quando il serpente mangia, il suo corpo si allunga rendendo il gioco sempre piu’ complicato.

In questa prima parte spiegherò la pseudocodifica del codice che andreamo a relizzare dal prossimo articolo.

Le liste

Il corpo del serpente possiamo tradurlo in linguaggio informatico come una lista . La lista per chi non la conoscesse è una struttura dati dinamica o meglio una serie di elementi dove ogni elemento è legato a quello successivo . Per un approfondimento vi rimando a wikipedia .

Ecco come si presenta graficamente una lista :

Pensiamo il nodo come la parte che costituisce il corpo del serpente . Ogni nodo deve avere una caratteristica : la posizione occupata nello schermo.

Rifacciamo il disegno della lista seguendo la logica descritta sopra:

La lista disegnata rappresenta un serpente che inizia nella cella X:5 Y:2 e finisce in X:7 Y:2 .

Per comodita è consigliabile usare una lista concatenata : una particolare lista dove ogni elemento non solo è collegato all’elemento successivo ma anche a quello precendente .

Trasformiamo per l’ultima volta la nostra bozza :

Movimento del serpente

Supponiamo di avere questo serpente :

Tradotto in una lista sarebbe:

Il serpente deve potersi muovere nelle quattro direzioni : a sinistra , in alto , a destra e in basso.

Supponiamo di volerlo muovere a destra

Bisogna trovare un algortimo , una sequenza di istruzioni , per generare la seguente lista

Se sovrapponessimo le due liste noteremmo che nella lista generata ( quella dopo il movimento ) c’è un nuovo nodo che rappresenta l’ head e che l’ultimo nodo viene cancellato.

Il procedimento è identico per tutte le 4 le direzioni: eliminare l’ultimo nodo e inserire una nuova testa (head) con le nuove cordinate dove inizia il serpente.

Come avete visto il ragionamento logico che sta dietro all’algoritmo è molto semplice . Nella prossima lezione concluderemo questo appuntamento scrivendo il codice ;)

apr 2

In wordpress qualsiasi post può essere definito con una serie di elementi(attachments) come i video e le immagini .  Quando inseriamo un’ immagine nel contenuto di un post è possibile prelevarla con una funzione php messa a disposizione da wordpress e isolarla dal contenuto.

$images = get_children(array(
'post_type' => 'attachment',
'numberposts' => 1,
'post_status' => null,
'post_mime_type' => 'image',
'post_parent' => $id));
 
 
if(!empty($images)){
 
	foreach($images as $image){
	//$attachment = wp_get_attachment_image_src($image->ID, $size);
	$attachment = wp_get_attachment_image( $image->ID, $size );
	}
 
}

La funzione get_children(), che troviamo nella prima riga di questo script, è una funzione wordpress usata per prelevare dal database attachments, revisioni o sotto pagine di un post genitore .

Wp_get_attachment_image , invece, restituisce il codice html dell’immagine. Come secondo parametro è possibile inserire tre valori : thumbnail, medium, large or full .

Quandi se velessimo prelevare la thumb dell’immagine generata da wordpress basterebbe specificare nella funzione wp_get_attachment_image il valore thumbnail e il gioco è fatto ;)

dic 27

Dopo  anni di ripensamenti, finalmente, ho installato sul mio portatile  Open Suse e devo dire che la vita in questo S.O è alquanto insidiosa: ogni piccolo problema per un principiante si trasforma in una catastrofe, soprattutto per chi è nato e cresciuto su Windows =) .

Essendo un neofita nel mondo Linux, in questi giorni di puro smanettamento,   sto imparando tantissime cose e mi piacerebbe condividerle con voi .

Tutti conoscete JDownloader , no !? Per chi scarica di tutto online è un software indispensabile perchè gestisce i download su siti di file hosting come megaupload e fileserver.
Vediamo come installarlo perchè i passi da fare non sono immediati come su windows .

Prima di tutto scarichiamo a questo indirizzo l’archivio contenente i file del software . Naturalmente, noi dobbiamo scaricare i file per Linux quindi, fate click sul Pinguino .

Scaricato il file JDownloader.zip bisogna estrarlo nell hd, io li ho messi in /home/JDwonloader ma siete liberi di scegliere qualsiasi cartella. Continua a leggere »

dic 22

Con il file htaccess è possibile, se configurato, vietare l’accesso ai nostri file da siti esterni perchè puo’ capitare che qualcuno possa inserire una immagine contenuta nel nostro server facendoci sprecare della banda .

Il codice da inserire nel file htaccess è il seguente ..


RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://nostrosito.it [NC]
RewriteCond %{HTTP_REFERER} !^http://www.nostrosito.it [NC]
RewriteRule [^/]+.*$ - [F]

Con RewriteEngine attiviamo il modrewrite il quale viene usato per reindirizzare una richiesta url e con il comando RewriteCond definiamo le regole di indirizzamento. In questo caso gli diciamo che deve reindirizzare le pagine che non provengono dal nostro sito alla pagina di errore 403

Per maggiori informazioni andare sul sito apache

dic 19

Eccoci di nuovo con un altro articolo sulla programmazione vb.net dedicata alle immagini . Oggi realizzeremo un semplice software per “timbrare” delle immagini con un logo o meglio crearemo un software per  sovrapporre ad un’ immagine selezionata un’altra immagine di dimensione piu’ piccola come per esempio un logo .

Il codice in questione è il seguente, proviamo ad analizzarlo :

Public Class Form1
    Function timbra(ByRef img As Bitmap, ByRef timbro As Bitmap) As Bitmap
        Dim eg As Graphics
        timbra = New Bitmap(img.Width, img.Height)
        eg = Graphics.FromImage(timbra)
        eg.DrawImage(img, New Point(0, 0))
        eg.DrawImage(timbro, New Point((img.Width - timbro.Width) - 20, (img.Height - timbro.Height) - 20))
    End Function
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim timbro As Bitmap = New Bitmap("c:\tmp\timbro.png")
        Dim immagine As Bitmap = New Bitmap("c:\tmp\1.gif")
        Dim imgTimbrata As Bitmap = timbra(immagine, timbro)
        imgTimbrata.Save("c:\tmp\1t.jpg", Drawing.Imaging.ImageFormat.Jpeg)
    End Sub
End Class

La parte piu’ importante è la funzione Timbra la quale accetta due parametri di tipo bitmap e restituisce la nuova immagine modificata . Il primo parametro è l’immagine da timbrare mentre il secondo è il timbro da usare .

Function timbra(ByRef img As Bitmap, ByRef timbro As Bitmap) As Bitmap
        Dim eg As Graphics

Subito dopo la definizione della funzione , dichiariamo la variabile eg di tipo grapich, essa come abbiamo visto in un articolo precedente ( classe grapich ) si occupa della creazione e della modifica di immagini.

timbra = New Bitmap(img.Width, img.Height)

Timbra , la variabile di tipo bitmap , verrà restituita quando il codice della funzione sarà eseguito. Con questo pezzo di codice invochiamo il costruttore bitmap e dichiariamo le dimensioni della nuova immagine.

 eg = Graphics.FromImage(timbra)

Con Graphics.FromImage(timbra) passiamo il controllo dell’immagine timbra all’istanza della classe graphic eg .

eg.DrawImage(img, New Point(0, 0))
eg.DrawImage(timbro, New Point((img.Width - timbro.Width) - 20, (img.Height - timbro.Height) - 20))

Questa è la parte piu’ importante del codice e per capirla bene dovete sapere che DrawImage serve per copiare tutti i px di un immagine su un’altra immagine . La funzione , accetta due parametri, il primo parametro è l’immagine da copiare mentre il secondo sono le cordinate, x e y, dove incollare l’immagine .

Con queste due righe di codice non facciamo altro che duplicare l’immagine da timbrare e inserire l’immagine timbro in basso a destra .

dic 14

Facebook il piu grande social network a livello mondiale  ha da poco lanciato una sfida rivolgendosi a tutti gli smanettoni della comunità . Le gare inizieranno il 7 gennaio 2010 e consistono nel risolvere dei problemi con degli algoritmi scritti in un linguaggio di programmazione.

Per chi passerà la prima fase il giorno da ricordare è il 16 gennaio 2011. I migliori 3000 che supereranno la prima fase e che otterranno un buon punteggio potranno passare al secondo round , un pò più difficile in quando dovranno scrivere l’algoritmo nell’arco di 3 ore. I 300 vincitori andranno in California, giorno 11 marzo 2011 per svolgere l’ultimo round della gara.

In palio un primo premio da 5 mila dollari, un secondo da 2 mila, un terzo da mille e per gli altri, fino al 25esimo, 100 dollari.

Per finire vi segnalo a questo indirizzo una serie di prove da risolvere per partecipare al meglio alla gara.

Le iscrizioni partiranno giorno 20 dicembre 2010 sulla pagina facebook del progetto

dic 13

La classe graphics, del framework .net, ci permette di manipolare le immagini o addirittura creare un immagine da zero e successivamente inserire forme geometriche come il cerchio , la linea e il quadrato . Iniziamo in questo appuntamento con un semplice esempio , successivamente vi spiegherò come creare un software per timbrare le immagini con un logo .

I metodi della classe in questione sono tanti, proviamo ad analizzarne alcuni .

DrawLine(Pens.Olive, New Point(1, 1), New Point(100, 1))

La sintassi del metodo DrawLine è DrawLine(colore,punto di inizio,punto di fine) e serve a realizzare una linea

Se invece vogliamo disegnare un rettangolo occorre usare la funzione DrawRectangle(colore linea,x,y,larghezza,altezza)

Una visione a 360 gradi della classe grapch la trovate all’indirizzo http://msdn.microsoft.com/it-it/library/5y289054.aspx

Prima di concludere vi posto un semplice esempio di un progetto form con una picturebox

        Dim img As New Bitmap(500, 500)
        Dim eg As Graphics = Graphics.FromImage(img)
        eg.DrawLine(Pens.Olive, New Point(1, 1), New Point(100, 1))
        eg.DrawRectangle(Pens.Orange, New Rectangle(New Point(0, 0), New Size(100, 200)))
        PictureBox1.Image = img

Come potete notare dal codice, prima di inizializzare la classe graphics, occorre creare un oggetto bitmap specificando le dimensioni della nuova immagine .

dic 11

Ninite è un ottimo servizio online che ci permette di installare in un solo colpo piu’ software . Il procedimento è abbastanza semplice: basta andare sul sito www.ninite.com, selezionare i software che vi interessano e fare click su Get Installer in basso a destra . I downloads e le installazioni dei programmi scelti avvengono in modo del tutto automatico . L’unico punto debole a mio avviso è la lista dei software : un po’ povera

www.ninite.com

Ninite è un ottimo servizio online che ci permette di installare in un solo colpo piu’ software . Il procedimento è abbastanza semplice: basta andare sul sito www.ninite.com, selezionare i software che vi interessano e fare click su Get Installer in basso a destra . I download e l’installazione dei programmi scelti avvengono in modo del tutto automatico . L’unico punto debole , a mio avviso, è la lista dei software : un po’ scarna www.ninite.com
ott 13

I widget sono una delle cose piu’ utili di wordpress perchè permettono di gestire il contenuto del sito in modo semplice ed immediato . Per chi non li conoscesse, essi non sono altro che dei box di semplice testo o box con plugin gestibili dal pannello admin.

Il primo passo è quello di dichiarare le aree destinate a questo scopo nella pagina functions.php :

	register_sidebar( array(
		'name' =>'Sidebar',
		'id' => 'sidebar',
		'before_widget' => '
	<li id="%1$s" class="widget-container %2$s">',
		'after_widget' => '</li>
',
		'before_title' => '
<h3 class="widget-title">',
		'after_title' => '</h3>
',
	) );

Nel parametro name inseriamo il nome dell’area . L’id ( secondo parametro ) è la stringa che identifica l’area . Con il terzo e quarto parametro indichiamo il codice che apre e chiude il box widget . Before_title e after_title sono i codici che aprono e chiudono il titolo del box .

Possiamo inserire quante  aree vogliamo , l’importante è dare un id diverso .

Il passo successivo consiste nel richiamare le aree dichiarate nelle pagine dove vogliamo visualizzarle :

 dynamic_sidebar("sidebar");

La funzione dynamic_sidebar accetta come argomento l’id dell’area .

set 16

L’ottimizzazione delle immagini è fondamentale se non si vuole rischiare di perdere utenza a causa della troppa lentezza della pagina. Inoltre molti motori di ricerca, compreso il nostro amato google, utilizzano la velocità di caricamento come parametro di indicizzazione. Quindi è assolutamente necessario saper ottimizzare una immagine per il web.

La maggior parte dei programmi di grafica, come photoshop e fireworks, includono la cosiddetta funzione Salva per il web . Una funzione abbastanza veloce se si convertono un paio di immagini. Ma se dobbiamo convertire 30 , 40 , 50 immagini ?

Alcuni giorni fa mi sono posto la stessa domanda e googlizzando ho trovato un ottimo programma per l’ottimizzazione in massa con un buon algoritmo di compressione. Si tratta di Image Optimizer realizzato da Xat.com .

E’ possibile scaricarlo a questo indirizzo : http://xat.com/io/index.html

Dopo averlo aperto fate click su open , in altro a sinistra, e selezionate tutte le immagini da ottimizzare.

Giunti al secondo step è importante dare dei valori sensati ai parametri  se non volete rischiare di perdere la qualità delle vostre immagini . Con 90 in JPEG Quality e 100 in MagicCompression ho raggiunto una compressione di oltre il 50% con una scarsa perdita di nitidezza . Naturalmente vi consiglio di provare per ottenere delle impostazioni  ottimali .

Dopo aver selezionato la cartella di destinazione procedete al terzo step e fate click su optimize.