Exploit [Italian] e-zine 'HitNote' 6

Exploiter

Хакер
34,644
0
18 Дек 2022
EDB-ID
17625
Проверка EDB
  1. Пройдено
Автор
UHJ
Тип уязвимости
PAPERS
Платформа
MULTIPLE
CVE
N/A
Дата публикации
2011-08-05
Код:
     __  _____________   ______  ____________
    / / / /  _/_  __/ | / / __ \/_  __/ ____/
   / /_/ // /  / / /  |/ / / / / / / / __/
  / __  // /  / / / /|  / /_/ / / / / /___       
 /_/ /_/___/ /_/ /_/ |_/\____/ /_/ /_____/ [0x06 :: April 2011]
                 Hackkappatoio Isn't The Name Of This Ezine

http://hitnote.gotdns.org :: http://unofficialhj.gotdns.org


**********************************
* HITNOTE 0x06 :: Open Your Eyes *
**********************************


Davvero siamo davanti a un cambiamento epocale??
Abbiamo un potere che fino a trent'anni fa pareva fantascienza degna di spock
e del capitano kirk, pensate che in questo momento centinaia di persone sapranno
nel giro di qualche minuto quello che penso. Stupefacente come cosa. Non sto
parlando di... chessò, telepatia, pensiero collettivo, chiaroveggenza o chissà
che cosa. Sto parlando di internet.
Abbiamo un potere che ci rende intellettualmente superiori a qualunque altra
cultura/società/sistema. La cosa farà piacere a persone con manie di grandezza.
La nostra società è arricchita come l'uranio da questo potere. Forse troppo
e troppo accessibile.

Grazie a facebook l'egitto ha un dittatore in meno, la Libia presto pure.
Siamo forti, internet è il futuro. Siamo superiori, ne sono certo.

No.

Guardiamo bene la realtà dei fatti. sia la Libia che L'Egitto sono dei paesi 
"Arretrati" come concezione. Non fraintendete quello che voglio dire; 
Non intendo dire che vivono come nel medioevo o che sono dei morti di fame. 
Non è qui che voglio arrivare.

La Libia è sorretta da un capo che per certi versi è pari a un monarca, la vita
si basa ancora per lo più su cose concrete simili per concezione nostra a quello
che capitava più o meno cento anni fa. Dal punto di vista organizzativo.
Facebook, internet invece hanno portato una rivoluzione. 
E' il futuro e l'evoluzione: come in natura il più forte vince.
Ma qui non si parla di facebook, dittatori e monarchia, la realtà è che grazie 
all'immenso potere che internet ha concesso a una popolazione sottomessa 
avviene una rivoluzione.

E dopo Mubarak/Gheddafi? Arriverà la democrazia, elezioni libere. Non abbiamo
dimenticato nessuno? Ah già, arriveranno prima i jeans, la coca cola e la tv.
Non che prima non ci fossero, ma è un fatto che l'Egitto e la Libia avevano
una concezione "orientale" di stato e non "occidentale". Al termine di questa
cosa qua, l'occidente forse sarà un po' più grosso e si rivolgerà verso sud.

Porteremo il nostro sistema occidentale, lo imporremo e loro saranno felici e 
ci sorrideranno. Di certo una dittatura non è una bella cosa, ma noi non siamo 
liberi tanto da poterci sentire "superiori". Abbiamo una parvenza di libertà
che ci fa sentire bene, ma in realtà la nostra è solo una forma evoluta di 
dittatura. 

Combattere per la libertà. Chi di noi, io compreso, sa cosa significa essere
liberi? La verità è che a noi ci va bene così, le scelte difficili preferiamo
lasciarle ad altri. È più importante andare su facebook che vivere. Siamo
prigionieri della nostra libertà.

Non siamo liberi, ma ci va bene comunque perchè abbiamo questo immenso potere
apparente. Siamo così liberi da poter parlare con ogni persona che conosciamo
in modo quasi istantaneo. 
Noi usiamo questo potere per dirci "LOL KyKina km 6 figa", ma sfido chiunque 
a dire in faccia ciò che veramente pensa in una situazione difficile.

Non dico che sia impossibile, ma una volta fatto compare un sintomo post 
traumatico che ti lascia una strana sensazione, che non è sempre piacevole.
Stiamo perdendo il potere di dire quello che pensiamo.

Forse siamo più schiavi noi che quei guerrieri ribelli giù in libia dopo 40 anni
di oppressioni.

+-----------------------------------------------------------------------------+
| . . . . . . . . . . ___ .__ . ___ .___. __. .__ . _ _ . . . . . . . . . . . |
|. . . . . . . . . . |__ .|__) |_. .|_ . | .\./. \ | V | . . . . . . . . . . .|
| . . . . . . . . . .|. . | .\.|___ |___.|__/ \__/.|. .|. . . . . . . . . . . |
|. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .|
|.............................................................................|
|                               _,,---.._                                     |
|                             ,'   .-'''-:                                    |
|                            /   ,'         .                                 |
|                           |   /          .!\.-:                             |
|                           |   |        <:    <                              |
|                           |   `.         '|/'-:                             |
|                            \   `.         '                                 |
|                             `..  `-...-;                                    |
|                                ``---''                                      |
|.............................................................................|
|: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :|
| : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : |
|: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :|
| : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : |
+-----------------------------------------------------------------------------+

"Dio salvi la regina, che i turisti sono soldi".
 [cit. Manuale del nuovo ordine globale]

Turbocotoletta MMXI


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Indice:

* 0x00 . TCP Scanning
* 0x01 . IrssiBook
* 0x02 . Videodrome
* 0x03 . Lo zaino delle emergenze
* 0x04 . Sfida mentale ed ingegneristica
* 0x05 . Introduzione alla programmazione con SVGALib in C
* 0x06 . Goodbye blue sky
* 0x07 . Il cubo di resistori
* 0x08 . Riddle
* 0x09 . Ringraziamenti


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


************************
* 0x00 :: TCP Scanning *
************************


Tanto per cominciare, tutto ciò che segue non vuole essere una vera e propria
guida a tutti i metodi possibili per effettuare un port scanning, 
bensì una semplice introduzione per schiarire le idee a chiunque
le abbia confuse a riguardo.
Tratteremo qui di seguito uno dei metodi più semplici per quanto riguarda
questa tecnica: il TCP scanning, ovvero la scansione delle porte TCP.
Molto semplicemente, tale tipo di portscanning avviene inviando all'host
con il quale è aperta una connessione, dei pacchetti TCP per l'appunto,
il risultato dell'operazione poi lo si evincerà dalla risposta che si otterrà
dall'host stesso.
Per renderla più semplice immaginiamo che il nostro host sia un hotel e,
che ogni pacchetto sia rappresentato da un cameriere.
Il nostro cameriere viene incaricato di dirigersi alla porta n. TOT dell'host
e da bravo cameriere svolge il suo incarico.
Una volta arrivato di fronte alla camera il cameriere può trovarsi
in 3 diverse situazioni.

1)Bussa e la porta gli viene aperta;
2)Porta chiusa, cartello non disturbare;
3)Bussa e nessuno risponde;

Ora, per quanto riguarda il primo caso c'è da precisare che
quando una porta è in "listening" ovvero è aperta, significa che è utilizzata
da un servizio che la tiene aperta .
Per quanto riguarda il secondo e terzo caso, entrambi ci dicono che la porta
è inaccessibile al nostro cameriere:
Nel secondo caso l'host ci comunica espressamente che la porta è irraggiungibile
e le connessioni in entrata su quella porta non saranno accettate;
nel terzo invece la situazione cambia, la porta è filtrata, controllata 
probabilmente da un firewall(uomo cattivo), il quale rapisce il nostro cameriere
non facendo pervenire dalla porta nessuna risposta.

Di seguito è allegato un sorgente scritto in perl e opportunamente commentato,
per far capire ancora meglio la dinamica dello scanning tcp.


#!/usr/bin/perl
#usage: portscan.pl <host> <minrange> <maxrange>

use IO::Socket;

$ip=@ARGV[0];    #Indirizzo dell'host
$min=@ARGV[1];   #porta minima
$max=@ARGV[2];   #porta massima

print "ip: $ip\nminimum range: $min\nmaximum range: $max\n\n";

#Fino a che il numero minimo di porta non supera quello massimo
while($min<=$max){  
    $err = 0;

    #Viene effettuata una connessione all'host
    my $sock=IO::Socket::INET->new(
                     PeerAddr=>$ip,
                     PeerPort=>$min, # sulla porta indicata da $min
                     Proto=>'tcp') || $err++; #Ogni volta che la connessione
                                              #non è possibile stando agli 
                                              #ultimi due casi spiegati, si 
                                              #incrementa la variabile di errore

    #e successivamente viene chiusa la connessione con 
    #l'host per poi aprirne nuovamente un'altra
    shutdown($sock,2); 

    #se invece la connessione viene accettata dall'host, e il socket esiste
    if ($sock){                                                  
        #il sorgente aggiunge la porta alla nostra lista @ports
        push(@ports,$min);                                           
    }

    #e il numero di porta minima viene incrementato per poi riprendere il ciclo
    $min++;                                                      
}

#e stampare poi a processo terminato, la lista con le porte aperte
print "\nopen ports: @ports\n";                             


Per quanto riguarda invece la variabile di errore, siete liberi di utilizzarla
come meglio credete, per poter stilare una lista delle porte chiuse,
o del numero di porte chiuse.
Credo che come prima lezione basti a darvi una prima idea di come avviene
lo scanning delle porte aperte sull'host remoto,
alla prossima .

skerno a.k.a riot


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


**********************
* 0x01 :: IrssiBook  *
**********************


Diciamocelo: Facebook è talmente "infiltrato" nella rete sociale che spesso può
essere vitale accedervi per rimanere in contatto con una buona fetta dei propri
amici -- gli amici-AMICI, quelli veri, quelli in 'real-life' che magari si
organizzano per una pizza in centro solo tramite il social network.  Però è
anche vero che per alcuni, come il sottoscritto, non è esattamente gradito il
dover visitare Facebook.com, leggere tonnellate di inutili 'blabla' e link
condivisi e via dicendo.

Con questo breve articolo si vedrà come utilizzare la chat Facebook attraverso
il client IRC irssi e BitlBee in locale.  Questa guida è stata stesa utilizzando
Arch Linux come sistema host, ma è possibile sfruttare software e script qui
descritti sulla propria Linux box, qualunque essa sia, senza difficoltà
particolari.

Per introdurre un minimo agli strumenti utilizzati, abbiamo irssi, un potente
client IRC per l'utilizzo da riga di comando particolarmente interessate per
l'utente in quanto particolarmente estendibile grazie a script PERL; e BitlBee,
nvece, è un gateway che, basandosi sul protocollo IRC, permette di
usufruire di molti canali di messaggistica quali Twitter, XMPP, AIM e
così via.

Per tutte le informazioni a riguardo, rimando ai siti web dei due progetti:
	 - <http://irssi.org>
	 - <http://bitlbee.org>

Grazie al fatto che Facebook ha "aperto i confini" della propria chat,
utilizzando il protocollo XMPP, è ormai da tempo possibile accedervi da
client standalone multi-protocollo come Empathy e Pidgin (tramite
apposito plugin).  Naturalmente, utilizzando BitlBee lo
stesso tipo di protocollo, è possibile (e immediato) configurare BitlBee
per comunicare con i nostri contatti Facebook.

>> Perchè usare irssi?
Perchè il supporto a BitlBee è ottimo, perchè irssi è un *ottimo* client, perchè
irssi+screen è un'accoppiata vincente e perchè gli script disponibili per irssi
permettono di ottenere più o meno qualsiasi cosa si voglia durante la propria
esperienza d'utilizzo.

>> Installazione
Come già detto in precedenza, si utilizzerà Arch Linux come sistema ospite per
questo articolo; qualsiasi altra distribuzione ovviamente permetterà di ottenere
gli stessi risultati. Per utenti Debian, ad esempio, sarà molto semplice
cambiare il comando 'pacman' in 'apt-get install'; per tutti gli altri utenti,
rimando ai pacchetti disponibili per la propria distribuzione o molto
più semplicemente ai sorgenti di irssi/bitlbee.

Per prima cosa, installiamo irssi e BitlBee:

	  ~$ yaourt -S irssi bitlbee

Dopodichè, andiamo a modificare il file ~/.irssi/config, aggiungendo alla lista
servers il record:

	 { address = "localhost"; chatnet = "Bitlbee"; port = "6667"; use_ssl =
			 "no"; ssl_verify = "no"; autoconnect = "no" ; }

Fatto questo, andiamo a preparare bitlbee per l'avvio in locale, editando il
file '/etc/bitlbee/bitlbee.conf'. In questo file dovremo aggiungere
(o decommentare) le linee

	  RunMode = ForkDaemon

e

	  User = bitlbee

lasciando invariate le altre impostazioni.

A questo punto, siamo pronti per lanciare il demone bitlbee.  Per farlo, con i
privilegi di root eseguiamo

	  # /etc/rc.d/bitlbee start

Naturalmente questo path è relativo al sistema Arch Linux; per gli utenti
Debian, ad esempio, si dovrà utilizzare il percorso '/etc/init.d/'.

Nota: essendo un demone, è possibile (a propria scelta) di lanciare o meno il
demone bitlbee all'avvio della propria macchina.


>> Configurazione dell'account e utilizzo

Lanciare irssi e digitare il comando
	 
/connect localhost

A questo punto, se Bitlbee è correttamente in funzione, saremo pronti per
configurare il nostro account Facebook (ma non solo, ovviamente). È necessario,
per poter utilizzare FB con bitlbee, avere a disposizione un
username del tipo 'http://www.facebook.com/LOLEPHANT' (supponendo che
il vostro username sia LOLEPHANT).  Se per qualche strano motivo non
vi fosse un username associato al vostro account, è possibile
crearne uno visitando il link

	  http://www.facebook.com/username

Nota fondamentale per il proseguimento dell'articolo: NON saranno spiegate le
funzioni basilari, per esempio, per muoversi all'interno delle tab di irssi o
dei comandi di chat. Per quelli, rimando alla completissima documentazione
ufficiale di irssi reperibile sul sito del progetto; stesso dicasi per BitlBee.

Iniziamo configurando la nostra identità BitlBee per l'uso in irssi:

	  register PASSWORD

Una volta lanciato irssi e connessi a bitlbee, basterà utilizzare il comando

	  identify PASSWORD

per connetterci ai nostri account.

Andiamo ora a creare un account Bitlbee locale per l'uso di facebook: nel tab di
irssi &bitlbee, diamo il comando

	  account add jabber [email protected] LULZPWD

dove, di nuovo, LOLEPHANT e LULZPWD sono rispettivamente i nostri username
(http://facebook.com/LOLEPHANT) e password Facebook.

[INCISO]

>> Fix dei nomi dei contatti
A questo punto l'account è già pronto all'uso, salvo una spiacevole
particolarità: al posto dei nick dei nostri contatti, vedremmo una lista
alquanto incomprensibile di codici numerici del tipo -XYZABCD. Posto che è
possibile risalire all'utente associato a tale codice attraverso il comando
/info CODICE tale rappresentazione risulta ovviamente alquanto scomoda.

Questo inconveniente può essere risolto in due modi: attraverso un settaggio di
bitlbee oppure tramite uno script esterno da caricare in irssi. 
Con versioni >= 3 di bitlbee è possibile visualizzare i propri contatti
nella forma

	  NomeCognome

dando il comando

	  account facebook set nick_source full_name

Utilizzo correntemente BitlBee 3.0.1-1 e questo comando ha risolto il problema.
Stando a quanto riporta il wiki di BitlBee, per le versioni precedenti è
possibile sostituire tale comando con

	  account set facebook/nick_source full_name

ma personalmente ho fatto un test e riscontrato dei problemi (in ogni caso, se
siete in questa situazione, provate).

Se invece preferite usare uno script esterno, ce ne sono vari che permettono di
ottenere lo stesso risultato.  Un esempio è lo script 'bitlbee_rename.pl' di Tim
Angus, opportunamente modificato da Lakitu7, reperibile a questo indirizzo:
<http://browsingtheinternet.com/temp/bitlbee_rename.txt>

Come consueto per gli script irssi, bisognerà spostare tale file (rinominato in
.pl) nella cartella .irssi/scripts/ e caricarlo da irssi con il comando

	  /script load SCRIPT_NAME

[/INCISO]

A questo punto, andiamo ad attivare l'account dando il comando

	  account on

E, se quanto detto sopra è stato fatto correttamente, entreremo nel "chan" della
chat di FB e otterremo una lista dei contatti online. Ricordo che il comando per
visualizzare gli utenti online è '/names' .

Ovviamente, non essendo un vero e proprio channel IRC, per dialogare con i
nostri contatti sarà necessario farlo nella classica modalità private di IRC.
Per iniziare una query con un contatto è sufficiente usare

	  /q NOMECONTATTO

che aprirà una nuova tab di irssi riservata alla nostra conversazione con
NOMECONTATTO. La stessa cosa avverrà quando un nostro contatto vorrà parlare con
noi.  Da notare che il contatto con cui parleremo vedrà come mittente i nostri
Nome e Cognome impostati su Facebook e non il nick impostato nella parte
'settings' di '~/.irssi/config'.

Unica cosa da tenere presente è che se utilizzando la chat integrata del sito
web di Facebook o un client di messaggistica classico l'arrivo di un nuovo
messaggio è facilmente riscontrabile, non è così immediato con irssi e rischiamo
di perdere il messaggio di un amico che in quanto non ci accorgiamo della query
nei nostri confronti.

Di nuovo, esistono due vie per risolvere:

Modo 1: Utilizzare uno script esterno per avere notifiche irssi; ce ne sono
davvero per tutti i gusti e le necessità, come ad esempio un irssi notifier per
dzen. Una breve ricerca su Google vi fornirà ciò di cui avete bisogno.

Modo 2: Settare irssi per switchare tab portando in primo piano l'ultima tab
creata da una query ricevuta; per fare ciò basterà dare il comando
	  
	  /set window_auto_change ON

Le due soluzioni sono ugualmente valide, quindi a voi scegliere quella che più
vi può risultare utile (o entrambe).

A questo punto avrete irssi e BitlBee configurati e perfettamente funzionanti
per utilizzare la chat di FB direttamente dalla vostra shell preferita.
Personalmente, da quando utilizzo l'accoppiata bitlbee/irssi non ho più avuto
bisogno di aprire Facebook.com, se non sporadicamente e per casi eccezionali.

In conclusione, ricordo che una volta usciti da irssi, le proprie impostazioni
resteranno inalterate; per connettersi alla chat di FB in seguito basterà, una
volta lanciato irssi, dare i comandi

	  /connect localhost

seguito da, nella tab '&bitlbee',

	  identify PASSWORD

dove PASSWORD corrisponde a quella scelta inizialmente con il comando
'register'.

Buon divertimento e buon IRC a tutti.

tragic0mic


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


**********************
* 0x02 :: Videodrome *
**********************


Questo non è il solito splatter dove sangue e maceti la fanno da padrona..
è più concentrato su temi quali la televisione e la sua influenza sul nostro
modo di pensare:
"Come altre opere dell'autore, affronta il tema della mutazione della carne e
della fusione fra tecnologia e uomo."

Da Wikipedia l'enciclopedia del sistema

In effetti non si può parlare di videodrome senza parlare di tecnologia e di 
come da essa siamo diventati dipendenti; il personaggio principale di questo 
film è il proprietario di una televisione privata che trasmette film porno 
e simili. Andando avanti nel film si trovano ottimi spunti per riflettere, 
geniale è la premessa del film: Videodrome è la televisione che è più reale 
dela realtà e che evolve l'essere umano dandogli un nuovo organo che di fatto 
è lo strumento chiave di Videodrome: un tumore celebrale. Questo film, 
in chiave fantascientifica ha gettato le basi di varie correnti psicologiche. 
Possiamo davvero dire di non essere influenzati dalla televisione? 
Videodrome c'era già arrivato.

Non è un film facile da spiegare, ma lo potete vedere voi stessi su MegaVideo o 
comprandolo in un negozio specializzato.

Trama:			  3.5/5 Temi nuovi e ancora attuali, molto contorto il che non 
						lo rende adatto a visioni "così tanto per"
						
Effetti speciali: 4/5	Considerando che sono stati fatti negli 80s si può dire 
						magnifici!
						
Personaggi: 	  3.5/5	Solita storia all'americana, capo figo, segretaria figa,
						troiona di turno e alla fine muoiono tutti.
						
Interpretazioni:  4/5   Ottimo il personaggio principale e veramente geniale 
						O'blivion, uomo che si rifiuta di farsi vedere se non 
						in televisione e che parla solo tramite essa. 
						Un po' meno carini sono le interpretazioni della figlia
						di quest'ultimo, tratti troppo "secchi" della 
						personalità che non si addicono.
						
Anti commerciale: 4.5/5 Non il solito film dove i buoni vincono sempre e 
						diventano eroi. E' un film che fa pensare, cosa che 
						Hollywood ha smesso di inserire nei suoi film 
						commerciali.
						
Pesantezza:		  1/5   Si segue con interesse.

---------------------------------------------
Voto globale 4/5  
Un film non immune a errori ma che comunque lascia il segno 
all'interno delle persone che l'hanno visto. 
Consigliato se siete in vena di sperimentare. 
Un po' meno se siete distrutti. 

Turbocotoletta MMXI


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


************************************
* 0x03 :: Lo zaino delle emergenze *
************************************


Dio non voglia che accada qualcosa di simile,
ah ah ah, davvero non ce la faccio ad iniziare così.

I media hanno spostato, come di dovere, la loro attenzione negli ultimi giorni
sull'evento drammatico avvenuto al largo delle coste del Giappone, ossia il
terremoto di magnitudo 8.9 con susseguente onda anomala («tsunami») che ha
provocato danni così ingenti e sbalorditivi che le seguenze girate dagli 
operatori in questi giorni non differiscono di molto dal graficamente 
elaborato ma ultrafantascientifico film 2012.
Vedere case incendiate attorniate da masse d'acqua trascinanti fanghiglia,
detriti ed automobili mi ha fatto riflettere su cosa sarebbe accaduto in 
questo paese se una scossa tellurica di tale portata si fosse verificata nel
nostro bel Paese là dove 'l si suona.
E credetemi che mi sono spaventato.

Se osserviamo attentamente il sito dell'INGV (istituto nazionale di geologia
e vulcanologia) senza difficoltà troveremo una infografica riportante i punti
in cui ultimamente sono avvenuti terremoti in Italia e nel Sud-Est Asiatico.
Facilmente ci renderemo conto che quest'ultimi generano una sorta di eco nel
meridione d'Italia, alquanto preoccupante.

Ecco perché, da buon uomo che tiene alla sopravvivenza del suo codice genetico
ho pensato bene di preparare uno zaino d'emergenza, la cui utilità non è 
tuttavia circoscritta al caso in cui la terra voglia sobbalzare, ma quand'anche
i fiumi vogliano straripare, il mare infuriarsi e lambire le zone interne delle
coste, le slavine rovinare sulle valli, le dighe cedere, vostra suocera 
pranzare la domenica in cui avevate previsto un «Meeting sull'attento studio 
dell'incremento dell'efficenza lavorativa settimanale in relazione alla visione
di partite di calcio in compagnia di fidi amici sotto l'effetto di sostanze
blandamente alcooliche quali la tradizionale birra o il vino».

Cominciamo dalla scelta dello zaino: deve essere resistente, privo di fronzoli
estetici, di lacci che possano impigliarsi, di cerniere facili ad aprirsi (così
che possa cascarvi tutto no?), di stoffe che possano bagnarsi o strapparsi.

Cosa portare con sé? Ognuno deve rispondere a questa domanda prevedendo quale
possa essere l'evento catastrofico che possa accadere più probabilmente, 
o che si teme maggiormente.
Dato che abbiamo introdotto l'argomento parlando di terremoti, ecco un set da 
me predisposto nell'eventualità che possa verificarsene uno:

- Cerotti di varie dimensioni
- Garze STERILI
- Coltellino svizzero, possibilmente non fasullo (tributo a turbocotoletta)
- Accendino
- Piede di porco (non immaginate quanto possa servirvi dopo :D)
- Batteria da 12v 1200mA caricata
- Fili e led in pacco sigillato
- Vestiti "da mezzo tempo", ossia indossabili facilmente in aggiunta al pigiama
- Acqua potabile
- Flacone con zucchero, ermeticamente chiuso (avrete una scorta sufficente a 
    sopravvivere all'evento traumatico e all'intensa attività fisica che farete 
    nel prestare soccorso ai feriti)
- Soldi (meglio se molti)
- Matita e quadernetto (utilissimi a prendere nota di ogni dettaglio importante,
    nonché a mantenervi lucidi nelle tristi serate)
- Copia delle chiavi di casa e della macchina

In aggiunta medicinali se ne avete di bisogno e un manuale di pronto soccorso,
nel caso in cui non possediate le nozioni di base dell'intervento paramedico.

In ultimo, collocate il tutto, ben chiuso, in un punto facilmente raggiungibile
e possibilmente protetto (quale un incavo presso la soglia della porta, sopra un
mobile al riparo sotto una trave, sotto il vostro letto.

Non sono scientificamente preparato ad un evento naturale, né posseggo 
qualifiche professionali.
Questo è il mio semplice consiglio che intendo condividere con voi
affinché vi sia di salvifico spunto per la vostra salvaguardia.

Piston Churchell


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


*******************************************
* 0x04 :: Sfida mentale ed ingegneristica *
*******************************************


In questo articolo vi propongo un gioco, un gioco diverso dal solito
un gioco che dura da milioni di anni.
Lo ripropongo sotto forma di sfida di capacità ingenieristiche e mentali.
Ecco in cosa consiste:
costruire una macchina che sia in grado di auto-alimentarsi per rimanere accesa.
Cosa centra con la sopravvivena? Io sono un patito di robotica e proprio
in questo momento sto costruendo il mio..fatemi contare..quattordicesimo 
robot; questa volta è diverso, la sfida si rende più appetibile:
ho scelto l'energia solare perchè è l'unica che mi è venuta in mente
abbastanza sensata: ho pensato anche ad un macchinario che si caricasse con
il vento, ma è difficile trovare vento dove abito io.
Ora buttiamo giù un po di regole:
La macchina può essere di qualunque tipo con qualunque tipo di alimentazione.
Può non possedere attuatori meccanici ma deve segnalare in qualche modo 
che "è viva" (luci, suoni, ecc).
Una volta caricata per la prima volta non deve essere toccato da esseri umani.

Ora il gioco è semplice: sopravvivere più tempo possibile.

Nel mio caso ho optato per un cervello "leggero" un PIC16F648A che richiede
una corrente molto bassa per funzionare, è limitato per il fatto che
non ha integrati convertitori AD ma va bene lo stesso. Come alimentatore 
un pannellino da 5V 1W massimo. Non è il migliore ma è pur sempre buono.

Ora prendiamo come esempio il basare il robot sul pannello solare,
i B.E.A.M.ers che ci leggono si sentiranno a casa ;) .



Il bello di questa sfida è il trovare le soluzioni a problemi come 
"quando è notte con cosa lo alimento?" "se li non c'è luce il resto del giorno?"
ovviamente si potrebbe attaccare un leddino ad una piccola batteria ricaricabile
un phototransistor e un pannellino solare sotto ad una forte lampada, se volete
siete liberi di farlo, ma che gusto c'è? Oltre a entrare nel club 
"amici dell'enel" vi annoiereste a morte.

L'unico consiglio che do ai meno esperti è che se decidono di usare il pannello
solare devono ricordarsi di mettere un interruttore per il carico.
Perchè? perchè con carico non carica molto bene e finiremmo per avere una
batteria "parassita".
 
Detto questo è molto importante(grazie morbido6868) è di mettere dei 
riduttori all'eventuale motore, altrimenti non avremo abbastanza torsione
nemmeno per sognare una rotazione.
I riduttori per chi non lo sa sono ingranaggi, puleggie ecc...
servono a diminuire i giri dell'albero a giovo della torsione.
Degli ottimi ingranaggi possono essere trovati nei videoregistratori:
ne ho smontati un paio e ho uno scatolone pieno.
Per quanto riguarda l'elettronica va bene di tutto, purchè non si usino
ovviamente motori da aviomodellismo che assorbono 30Ampere.

Ahimè i fan di arduino saranno un pelo in difficoltà: dico per esperienza 
personale che è un po "ingordo" e tende al reset sotto basse energie,
bastano tre servomotori da 6V per renderlo "narcolettico" anche a batteria
carica. Si potrebbe risolvere con un driver per servi ma come lo alimentiamo?

Ora ho detto tutto e non mi resta altro che finire il progetto,
tra poco sarà acceso il prototipo e vedremo quanto sopravviverà.


********************************
********************************
**Io sto già giocando, e voi? **
********************************
********************************-----------------------------------------------+
                                                                               |
Per chi è interessato alla robotica o vorrebbe cominciare                      |
il mio gioco è nient'altro che una corrente della                              |
robotica B.E.A.M. un po esaltata. Ottima sia per esperti che per principianti, |
amanti del riciclo, degli insetti e che non amano spendere capitali            |
per cose che potrebbero costruirsi :)                                          |
-------------------------------------------------------------------------------+

d0ct0r


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


*************************************************************
* 0x05 :: Introduzione alla programmazione con SVGALib in C *
*************************************************************


Il linguaggio C, a differenza di altri linguaggi di programmazione «moderni» non
presenta una libreria standard per la gestione della grafica e di volta in volta
sta al programmatore scegliere a quale libreria appoggiarsi per lo sviluppo 
delle proprie applicazioni.
Sebbene al giorno d'oggi sia spesso scartata a favore di prodotti più «completi»
e moderni, la libreria SVGALib è stata un punto fermo per molti anni nello 
sviluppo, ad esempio, di videogiochi ed altri programmi che necessitavano di
output grafico evoluto su sistemi *nix in assenza di X11.
In particolare, per citare un esempio famoso, il videogioco Doom è stato 
sviluppato utilizzando per l'appunto SVGALib per la parte video (e un set di 
campioni free per la parte audio).

SVGALib offre una gestione abbastanza completa dello schermo e una serie di 
primitive per la gestione dei colori, delle forme geometriche e via dicendo; in
questo articolo vedremo un'introduzione all'uso di tale libreria e alla sua 
applicazione per lo sviluppo di un semplice puzzle-game utilizzando il 
linguaggio C. In particolare, utilizzeremo le librerie `vga.h` e `vgagl.h`,
un'estensione di vga che fornisce una serie di primitive aggiuntive "evolute"
che permettono svariate operazioni non direttamente accessibili da `vga.h`.

Prerequisiti:
- conoscenza minimamente decente della sintassi del linguaggio C;
- saper utilizzare il compilatore GCC;
- conoscenza del proprio hardware;
- S.O. Linux o FreeBSD.

Ulteriore premessa: la documentazione di SVGALib è costituita quasi
esclusivamente dall'output di `man`; non mi tratterrò troppo a lungo sulla
sintassi delle singole funzioni/primitive e costanti di SVGALib in quanto `man
bla bla` vi fornirà tutto il supporto necessario (è ovviamente necessario quindi
saper leggere le pagine del manuale).


INSTALLAZIONE DI SVGALIB
=========================
Installare SVGALib non dovrebbe essere un problema per un qualsiasi utente 
Linux/FreeBSD: questo grazie al fatto che le maggiori distribuzioni includono in
qualche maniera una versione pre-pacchettizzata della libreria; nel caso non
fosse questa la vostra situazione, basterà scaricare i file sorgenti dal sito 
ufficiale di SVGALib (http://www.svgalib.org) e compilarli.
Per utenti Arch Linux, ad esempio, è sufficiente installare da AUR `svgalib` e 
`svgalib-helper`, ricordandosi di caricare il modulo svgalib-helper con il 
comando `# modprobe svgalib-helper`; per utenti Ubuntu, per continuare con un 
altro esempio, basta installare i pacchetti `libsvga1-dev`, `libsvga1` e 
`svgalib-bin`.


CONFIGURAZIONE
===============
Posto che SVGALib probabilmente funzionerà out-of-the-box, è probabile che voi 
dobbiate settare il chipset video corretto nel file di configurazione di 
svgalib; editate il file `/etc/vga/libvga.config` (o path equivalente o, se
presente, `~/.svgalibrc`) decommentando la riga 
	`# chipset XYZ  ....`
dove XYZ indica il nome del chipset disponibile adatto al vostro hardware; nel
caso non fosse presente, è sempre possibile utilizzare il chipset VESA che 
tendenzialmente funzionerà in ogni situazione.
SVGALib può anche gestire l'utilizzo del mouse; è necessario configurare 
anch'esso, nel caso lo si voglia utilizzare nelle proprie applicazioni, sempre 
tramite il file di configurazione di cui sopra.

IL GIOCO
=========
Il puzzle-game che andremo a sviluppare sarà una versione molto semplice del 
"Gioco del 15": in una griglia 4x4 sono disposti casualmente i primi 15 numeri
naturali, mentre una cella rimane vuota; è possibile muovere ortogonalmente la 
cella vuota in una delle caselle adiacenti. Scopo del gioco è, ovviamente, 
ordinare i numeri della griglia portando, infine, la cella vuota nella posizione
4x4.
L'implementazione che vedremo in questo articolo sarà piuttosto basilare in 
quanto ci servirà solo come pretesto per vedere le caratteristiche basilari 
delle librerie SVGA; starà poi a voi e alla vostra fantasia migliorare il gioco
nelle sue parti. Per come verrà impostato lo sviluppo, sarà possibile con il 
semplice cambio di una macro impostare griglie di lato N, per il vostro 
divertimento :-)

PIANIFICAZIONE
===============
La parte progettuale dell'algoritmo di gioco è piuttosto semplice, vediamo 
velocemente COSA andremo a costruire; la parte di interazione con l'utente 
avverrà con le primitive di SVGALib, come vedremo in seguito:
- Una matrice 4x4 viene riempita con i primi 15 numeri naturali posti in 
posizioni casuali; il 16o elemento viene considerato come casella vuota.
- L'utente sposta la casella vuota in una delle quattro celle adiacenti 
aggiornando il contenuto della matrice; quando ogni n-esima riga della matrice 
contiene in ordine gli elementi da n a n+4 (n+3 nel caso della 4^ riga), il 
puzzle è risolto e il gioco termina; il gioco mostra il numero delle mosse 
impiegate a risolverlo.

La libreria SVGALib si occuperà di disegnare la matrice a schermo come una 
griglia 4x4 evidenziando la casella vuota riempiendola con un colore vivace; 
ciclicamente si attenderà che l'utente prema un tasto; quando il tasto sarà uno 
di quelli scelti come direzionali, la matrice verrà ridisegnata spostando la 
casella vuota nella nuova posizione e stesso dicasi per la cella sostituita. Al 
termine della partita una dialog box informerà l'utente dell'esito del gioco 
indicando le mosse impiegate.

Vediamo ora, passo-passo, la realizzazione del programma, con particolare
attenzione alle funzioni proprie di SVGALib:

INIZIO: righe 1-21
===================
	#include <stdlib.h>
	#include <vga.h>
	#include <vgagl.h>
	#include <time.h>

	#define DIM 4
	#define BLANK 16
	
	#define UP 65
	#define DOWN 66
	#define RIGHT 67
	#define LEFT 68
	#define QUIT 'q'
	
	#define BGCOLOR 0
	#define LINECOLOR 4
	#define FONTCOLOR 15
	#define BLANKCOLOR 12
	#define DIALOGLINE 9
	
	#define BLOCKDIM 50

Le direttive #include mi sembrano alquanto autoesplicative: vga.h e vgagl.h sono
 le librerie di SVGALib di nostro interesse; stdlib.h e time.h servono per le
 funzioni accessorie come rand() e time().
Vediamo le macro in successione:
- DIM: la dimensione della riga della matrice; nel "classico" gioco del 15, si
tratta appunto di una griglia di lato 4.
- BLANK: il valore intero 16 identifica la cella vuota.
- UP, DOWN, RIGHT e LEFT: codici interi riferibili ai tasti direzionali della 
tastiera; se si volesse controllare la matrice con i tasti WASD, basterebbe, ad 
esempio, sostituire `UP 65` con `UP 'w'`.
- QUIT: il tasto associato all'uscita dal gioco in qualsiasi momento; premendo 
'q' il programma termina.
- BGCOLOR: il colore di sfondo per la griglia, lo schermo e il testo.
- LINECOLOR: colore di base per le linee.
- FONTCOLOR: colore del font.
- BLANKCOLOR: colore di sfondo della cella vuota, per differenziarla e renderla 
più visibile.
- DIALOGLINE: colore delle linee di bordo della finestra di dialogo.
- BLOCKDIM: lunghezza del lato di ogni cella della griglia.
Piccolo appunto sui colori: di base SVGALib fornisce 16 colori da utilizzare 
nello schermo, numerati da 0 a 15:
- 0 Nero
- 1 Blu
- 2 Verde
- 3 Ciano
- 4 Rosso
- 5 Magenta
- 6 Marrone
- 7 Grigio
- 8 Grigio scuro
- 9 Azzurro
- 10 Verde chiaro
- 11 Ciano chiaro
- 12 Rosa
- 13 Magenta chiaro
- 14 Giallo
- 15 Bianco


CONTESTI GRAFICI: righe 23-24
==============================

	GraphicsContext *physical;
	GraphicsContext *virtual;

Visibili globalmente, i due puntatori `*physical` e `*virtual` identificano 
quelli che in SVGALib si chiamano "Contesti grafici", ovvero delle 
rappresentazioni in memoria di uno "schermo"; come comunemente accade nella
programmazione con librerie grafiche, per ovvi motivi di efficienza le nostre 
modifiche andranno ad agire su uno "schermo virtuale" - di fatto invisibile 
all'utente; quando lo riterremo necessario, semplicemente passeremo allo 
"schermo fisico" il contenuto di quello virtuale, ottenendo come risultato la
visualizzazione concreta, sul monitor, di quanto presente nel dato momento sullo
schermo virtuale.


FUNZIONI ACCESSORIE/ PROTOTIPI: righe 26-29
============================================

	void shuffleBoard(int board[][DIM], int *x, int *y);

Questa funzione si occupa di riempire la griglia con numeri da 1 a DIM^2 in 
posizioni casuali; ritorna per riferimento tramite le variabili `x` e `y` le 
coordinate della cella vuota (contenente il valore DIM^2).

	void drawBlock(int x, int y, int number);

Questa funzione disegna alla posizione x,y dello schermo virtuale un quadrato 
("blocco") di lato BLOCKDIM con, al centro, il numero intero `number`.

	void drawBoard(int board[][DIM]);

Funzione che si occupa di disegnare concretamente la griglia, richiamando 
ciclicamente la funzione `drawBlock(...)`, piazzando la griglia al centro dello
 schermo (virtuale).

	int isCompleted(int board[][DIM]);

La funzione si controlla se i valori all'interno della matrice `board` sono 
ordinati in senso crescente; in caso affermativo, ritorna il valore 1, indicando
che il puzzle è stato risolto; in caso contrario ritorna il valore 0.


FUNZIONE MAIN: righe 31-127
============================

	int board[DIM][DIM]={0}, k, blank_x, blank_y, tmp, moves=0;
		
	srand(time(NULL));
			
	shuffleBoard(board, &blank_y, &blank_x);

Qui dichiariamo le variabili necessarie all'interno del main:
- board[DIM][DIM]: la matrice di gioco, con tutti i valori, per il momento,
impostati a 0.
- k: variabile che conterrà di volta in volta il tasto premuto dall'utente.
- blank_x/y: le coordinate della cella vuota.
- moves: contatore delle mosse effettuate, inizializzato a 0.
Dopodichè viene lanciato srand per inseminare la funzione rand (utilizzando 
time(NULL)) e la matrice viene riempita utilizzando la funzione shuffleBoard (di
 cui si vedrà il contenuto in seguito).

        vga_init();
	           
        vga_setmode(G640x480x256);
        gl_setcontextvga(G640x480x256);
				            
        physical = gl_allocatecontext();
        gl_getcontext(physical);
							        
        gl_setcontextvgavirtual(G640x480x256);
									           
        virtual = gl_allocatecontext();
        gl_getcontext(virtual);
											     
        gl_setcontext(virtual);

        gl_setwritemode(FONT_COMPRESSED);
	   gl_setfont(8,8,gl_font8x8);
	   gl_setfontcolors(BGCOLOR, FONTCOLOR);

Ecco finalmente un po' di lavoro con SVGALib :-)
vga_init() è la funzione che inizializza la libreria; da notare che vga_init() 
necessita dei permessi di root e questo è il motivo per cui è necessario
lanciare il programma con i privilegi di root (con sudo o con su -c ), come 
spiegato più avanti.
Dopodichè vga_setmode e gl_setcontextvga si occupano di impostare la modalità 
video a 640x480 pixel a 256 colori; questa ovviamente non è l'unica 
configurazione disponibile; SVGALib permette di lavorare con MOLTE modalità 
diverse, tutte elencate nella pagina di manuale di vga_setmode.
La modalità caricata viene poi passata al puntatore `physical` che viene 
richiamato da gl_getcontext(physical) che semplicemente salva il contesto 
attuale nella variabile `physical`.
La stessa modalità (virtuale) viene poi associata a `virtual` permettendo di 
poter lavorare su di esso; le ultime tre righe invece sono quelle che permettono
di lavorare concretamente con i font: la funzione 
`gl_setwritemode(FONT_COMPRESSED)` permette di lavorare con font bitmap senza
doverli espandere. Il font viene poi impostato a un font default 8x8 i cui 
colori di background e foreground vengono impostati con gl_setfontcolors.
Annotazione 1: le funzioni gl_* vengono dalla libreria vgagl.h; le funzioni
vga_* vengono dalla sola vga.h.
Annotazione 2: come premesso a inizio articolo, non mi addentro più di tanto
nella trattazione dettagliata delle singole funzioni per un motivo ben preciso: 
installando SVGALib installerete automaticamente anche le pagine di manuale 
relative (che sono comunque anche reperibili online) che forniscono, nella nota 
forma ambivalente prolissa/essenziale tipica delle pagine man, tutte le 
possibili informazioni necessarie che vorrete sapere (ma non avete mai osato 
chiedere!). Volendo essere un articolo introduttivo e "stuzzicante" a 
programmare con SVGALib, mi sembra più che sufficiente quanto detto sopra.


	   gl_printf(WIDTH/2-23*8,HEIGHT/2-48,"                F I F T E E N\n\n
	   \n  A simple puzzle game written with SVGALib.\n\n\nPress any key to 
	   start or 'q' anytime to quit.");
	   gl_copyscreen(physical);

A questo punto, utilizzando la funzione gl_printf, scriviamo a centro schermo un
semplice messaggio introduttivo del programma; la funzione gl_printf utilizza la
stessa sintassi della normale printf della standard i/o library, eccezion fatta
per i due parametri iniziali che indicano la posizione iniziale da cui iniziare
a scrivere. Per chi ha utilizzato un po' le librerie ncurses, si tratta dell'
equivalente di mvprintw(), con la differenza che il primo parametro indica le
ascisse e il secondo le ordinate. Da notare l'uso delle macro WIDTH e HEIGHT che
 corrispondono, come facilmente intuibile, alla dimensione dello schermo su cui 
 si sta lavorando (nel nostro caso, 640x480).
La funzione gl_copyscreen si occupa di copiare sullo schermo fisico il contenuto 
dello schermo virtuale (su cui noi stiamo lavorando); senza questa essenziale 
funzione le modifiche effettuate in output NON SARANNO VISIBILI sullo schermo 
fisico. C.V.D. ;-)

Vediamo ora il ciclo di gioco vero e proprio:

        while((k = vga_getch()) != QUIT)
	{

Inizia un ciclo while che ad ogni iterazione attende la pressione di un tasto da
 parte dell'utente con la funzione vga_getch(), memorizzandone il valore in `k`; 
 nel caso in cui tale valore fosse equivalente alla macro QUIT, il ciclo termina 
 e con esso il gioco.
	       	
		switch(k)
        	{
        		case LEFT:
        			if(blank_x>0)
        			{
        				moves++;
        				tmp = board[blank_y][blank_x-1];
        				board[blank_y][blank_x-1] = board[blank_y][blank_x];
        				board[blank_y][blank_x] = tmp;
        				blank_x--;
        			}
        			break;
       			case RIGHT:
        			if(blank_x<DIM-1)
        			{
        				moves++;
        				tmp = board[blank_y][blank_x+1];
        				board[blank_y][blank_x+1] = board[blank_y][blank_x];
        				board[blank_y][blank_x] = tmp;
        				blank_x++;
        			}
        			break;
        		case DOWN:
        			if(blank_y<DIM-1)
        			{
        				moves++;
        				tmp = board[blank_y+1][blank_x];
        				board[blank_y+1][blank_x] = board[blank_y][blank_x];
        				board[blank_y][blank_x] = tmp;
        				blank_y++;
        			}
        			break;
        		case UP:
        			if(blank_y>0)
        			{
        				moves++;
        				tmp = board[blank_y-1][blank_x];
        				board[blank_y-1][blank_x] = board[blank_y][blank_x];
        				board[blank_y][blank_x] = tmp;
        				blank_y--;
        			}
        			break;
        	}

Questo switch controlla il movimento della casella vuota: se il valore del tasto
 premuto equivale a uno di quelli delle macro direzionali, nel caso in cui lo 
 spostamento della cella non dovesse comportare l'uscita dalla griglia (ad
  esempio spostare in una colonna di indice > 4):
- viene incrementato il contatore delle mosse;
- nella variabile `tmp` viene memorizzato il valore contenuto nella cella in cui 
verrà spostata quella vuota;
- viene spostata la cella vuota;
- il valore in `tmp` viene ora memorizzato nella precedente posizione della 
cella vuota;
- viene modificata conseguentemente la variabile contenente l'ascissa o
 l'ordinata della cella vuota.

        	gl_clearscreen(BGCOLOR);
		drawBoard(board);
		gl_printf(WIDTH/2-16, HEIGHT/2+(BLOCKDIM*DIM/2)+8,"%d x %d", 
blank_x+1, blank_y+1);
        	gl_copyscreen(physical);

Dopo aver controllato il movimento della cella, andiamo ad aggiornare l'output: 
per prima cosa viene pulito lo schermo con la funzione gl_clearscreen, che
 riempie lo schermo con il colore passato per argomento; poi viene disegnata la
  griglia con `drawBoard`, seguita, in basso al centro, da una stringa "di 
  supporto" contenente le coordinate correnti della cella vuota; infine tutte 
  le modifiche vengono applicate e inviate allo schermo fisico con 
  `gl_copyscreen(physical)`.


        	if(isCompleted(board))
        	{
        		gl_fillbox(WIDTH/2-(15*8), HEIGHT/2-(5*8), 30*8, 64,
 DIALOGLINE);
        		gl_fillbox(WIDTH/2-(15*8)+1, HEIGHT/2-(5*8)+1, 30*8-2, 
 62, BGCOLOR);
        		gl_printf(WIDTH/2-(14*8), HEIGHT/2-(4*8), 
 "           YOU WIN!\n\nPuzzle completed in %d %s.\n\n\n   Press any key to 
quit.", moves, moves>1?"moves":"move");
        		gl_copyscreen(physical);
        		vga_getch();
			break;
        	}        	        	
	}

Per chiudere il ciclo di gioco, viene controllato infine se il puzzle allo stato
 corrente è risolto, chiamando `isCompleted`; nel caso in cui lo sia, viene 
 disegnata una dialog box con un messaggio di congratulazioni e il conteggio 
 delle mosse impiegate per risolvere il puzzle. Infine, viene attesa la 
 pressione di un tasto cui segue l'uscita dal ciclo.


Fuori dal ciclo di gioco, la funzione main() viene chiusa con

        gl_clearscreen(BGCOLOR);
        vga_setmode(TEXT);
	
        return 0;
}

`gl_clearscreen` pulisce lo schermo, la modalità VGA viene settata nuovamente a 
quella testuale e il programma termina.


FUNZIONI ACCESSORIE/ DEFINIZIONI: righe 149-187
================================================

	void drawBlock(int x, int y, int number)
	{
		gl_fillbox(x,y, BLOCKDIM, BLOCKDIM, LINECOLOR);
	
	       	gl_fillbox(x+1,y+1, BLOCKDIM-2,BLOCKDIM-2, BGCOLOR);

       		if(number < 10) 
       			gl_printf(x-4+BLOCKDIM/2, y-4+BLOCKDIM/2, "%d", number);
	       	else if(number != 16)
			gl_printf(x-9+BLOCKDIM/2, y-4+BLOCKDIM/2, "%d", number);
		else
		       	gl_fillbox(x+1,y+1, BLOCKDIM-2,BLOCKDIM-2, BLANKCOLOR);
	}

Questa funzione, come detto, disegna alla posizione x,y dello schermo un 
quadrato di lato BLOCKDIM con al centro il numero `number` passato per 
argomento.
Per prima cosa, utilizzando due volte la primitiva gl_fillbox, che serve a
 disegnare rettangoli PIENI di un determinato colore, viene disegnato il blocco,
  di cui si vedrà solo il bordo.
Viene poi, utilizzando gl_printf, scritto centralmente il numero in questione 
(spostandolo di 5 pixel nel caso sia > 10) oppure viene colorato con il colore 
BLANKCOLOR nel caso in cui il numero passato sia 16.

	void drawBoard(int board[][DIM])
	{
		int i, j, posx=WIDTH/2-(DIM*BLOCKDIM/2), posy=HEIGHT/2-
(DIM*BLOCKDIM/2);
	
		for(i=0; i<DIM; i++)
		{
			for(j=0; j<DIM; j++)
			{
				drawBlock(posx, posy, board[i][j]);
				posx+=BLOCKDIM;
			}
			posy+=BLOCKDIM;
			posx=WIDTH/2-(DIM*BLOCKDIM/2);
		}
	}

Dichiarate posx e posy individuando la posizione iniziale per ottenere la 
griglia centrata nello schermo, `drawBoard` richiama DIM^2 volte `drawBlock` 
passando ad essa l'n-esimo elemento della matrice `board`.

	int isCompleted(int board[][DIM])
	{
		int c=1, completed=1, i, j;
		for(i=0; i<DIM; i++)
			for(j=0; j<DIM; j++)
				if(board[i][j] != c++)
					completed=0;
		return completed;
	}

Infine, la funzione isCompleted: inizializzata a 1 la variabile `completed`, se
 il contatore c non equivale ad ogni iterazione dei cicli innestati 
 all'ixj-esimo elemento di `board`, completed viene portato a 0.
Ritornando il valore di completed, la funzione quindi ritornerà un valore 
interpretabile come TRUE nel caso in cui i numeri di `board` siano crescenti 
da 1 a DIM^2, FALSE in caso contrario.


CODICE SORGENTE COMPLETO
=========================
In questo articolo è presente l'intero listato del programma del gioco del 15 
sviluppato da me per l'occasione.
Nel caso voi foste pigri (come me) e non voleste perdere tempo in ricopiature 
e "copincollature" che possono portare ad errori, faccio presente che il 
sorgente può anche essere recuperato facilmente a questo indirizzo:

	http://sprunge.us/NIQi?c
	http://sprunge.us/NIQi (senza syntax highlighting)

COMPILAZIONE ED ESECUZIONE
===========================
Il sorgente può essere compilato con varie opzioni, in generale il modo più 
semplice è

	$ gcc fifteen.c -o fifteen -lvgagl -lvga

Da notare che `-lvgagl` va invocato PRIMA di `-lvga`.
Il lancio dell'eseguibile invece, come tutti i programmi che fanno uso di 
SVGALib, necessita dei privilegi di root; questo è "causato" da SVGALib stessa 
ed è spiegato sul sito ufficiale della libreria, svgalib.org, da cui cito:

 "[...] While SVGAlib apps must be setuid root, that privilege is given up 
 immediately after execution. There is no need to be concerned."

Nel caso ci fossero problemi di visualizzazione sullo schermo, consultare la 
documentazione di SVGALib e/o controllare le impostazioni di `libvga.config`.


CONCLUSIONI
============
SVGALib è una libreria abbastanza duttile, con cui lavorare in molti frangenti. 
Oltre alle primitive qui descritte, ce ne sono per la visualizzazione di bitmap, 
per il disegno di altre forme geometriche e così via.
Si tratta di software che ha goduto di grossa popolarità, ma che ormai è 
abbastanza snobbato in favore di alternative più potenti e moderne. Senza 
dubbio, però, per chi non avesse bisogno di feature particolari o per la prima
 volta si affaccia a librerie grafiche, può essere un buono strumento. 
 Personalmente ritengo siano delle valide librerie.
Sicuramente, oltre a non avere praticamente documentazione ulteriore a quella 
delle pagine `man`,  hanno lo "svantaggio" di essere quasi unicamente per 
sistemi Linux e FreeBSD; ma, d'altro canto, se c'è gente che programma con le 
librerie Allegro, perchè diamine non dovremmo programmare con SVGALib? :-)

Detto ciò, ringrazio tutta la combriccola di HITNOTE e di UHJ che mi danno la 
possibilità di scrivere per loro.
Ringrazio anche chi avrà la pazienza di leggere questo articolo e vi invito a 
joinare il canale IRC di UHJ e nel farlo vi rimando al sito 
unofficialhj.gotdns.org.

Buona programmazione a tutti.

tragic0mic <[email protected]> <tragic0mic.users.anapnea.net>


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


****************************
* 0x06 :: Goodbye blue sky *
****************************


       Guerre,crisi economica, catastrofi e teorie complottistiche: 
            quanto c'e' di vero in quello che ci raccontano?


Tutti abbiamo visto o sentito ciò che è accaduto al Giappone in questi giorni,
e Hitnote è profondamente vicina al dolore della popolazione nipponica.
Uno dei piu' violenti terremoti mai registrati sulla terra, a cui purtroppo è 
seguito uno tsunami con onde alte piu' di dieci metri, che hanno spazzato via
tutto quello che hanno incontrato sulla loro strada...
Purtroppo le vittime sono migliaia e in continuo aumento, e anche i dispersi
sono tantissimi...
A tutto questo cè da aggiungere l'allarme nucleare, alcune centrali infatti
hanno subito gravi danni, soprattutto quella di Fukushima dove ci sono state 
gia' diverse esplosioni ed incendi. 
Le ultime notizie purtroppo non ci rassicurano affatto, uno dei reattori ha 
iniziato a sprigionare del fumo che non preomette nulla di buono, gli altri 
sono danneggiati e si cerca di raffreddarli il piu' possibile.
Nell'arco di 30 chilometri dalla centrale, il governo giapponese ha
disposto l'evaquazione delle famiglie, ed ha invitato le altre persone a non 
uscire di casa e a razionare energia e provviste.
La nube anche se in piccolissima parte, sta sorvolando anche l'Europa, l'acqua
a Tokyo e' contaminata e il panico inizia ad imperversare in molte città...


In Italia il dibattito sulle centrali nucleari si è "magicamente" riaperto.
Sono molti ad urlare a voce alta che bisogna attuare una svolta nella produzione
di energia nel nostro paese, appoggiando la creazione di nuove e moderne 
centrali che  soddisferebbero in buona percentuale il nostro fabbisogno 
energetico, sono molti pero' anche quelli che nel "nucleare italiano" vedono
delle possibili ripercussioni negative, possibili "appalti truccati" ad esempio,
problemi con lo smistamento delle scorie, rischi di gravi danni ambientali e 
perdite radiottive.
La legge della domanda e dell'offerta è spietata, la storiella che il petrolio
sta finendo e che stiamo inquinando il pianeta devastandolo è vera purtroppo,
il tutto è condito da guerre con relativi blocchi di importazioni di energia,
da un "fare" mafioso, dove tutto e' un enorme gabola e da catastrofi ambientali 
che ci fanno sempre piu' pensare ad un imminente fine del mondo, che fino a 
qualche tempo fa ritenevamo improbabile (imho, anche ora è rimane comunque poco 
probabile). È comunque degli ultimi giorni la notizia che il nostro Governo 
abbia fatto un mezzo passo indietro sulla questione del nucleare, 
forse spaventato dal caos e dal clima di incertezza che si sono venuti a creare 
addirittura in un paese come il Giappone, dove solitamente tutto è rigoroso e 
funziona alla perfezione.

Questa era solo una delle mie solite introduzioni noiose, ma credo che questa
volta fosse davvero d'obbligo.
In realta' mi vorrei focalizzare su temi che stanno più sullo sfondo, 
ma che riguardano comunque guerre, catastrofi ambientali e le varie crisi 
economiche che stanno affliggendo il nostro pianeta ultimamente.


Partiamo dal presupposto che tutti ci dovremmo essere accorti che qualcosa
non va...
Con "qualcosa" intendo una serie di avvenimenti negli ultimi anni, che si sono
susseguiti a catena, apparentemente senza un filo logico, ma che in realta'
hanno fin troppe coincidenze.
Tutto forse ha avuto inizio in quell'ormai "lontano" 11 Settembre 2001, 
data difficile da scordare, da allora in poi tante cose sono successe,
attentati, tsunami, pandemie, crolli vertiginosi in borsa...
Tante cose, tante cose che la storia ci insegna accadere solitamente nell'arco 
di centinaia di anni, successe in un decennio.
Coincidenze, normale "ciclo della vita" o cè qualcosa di piu'?
La teoria del complotto è una teoria molto generale che tende a schematizzare 
dei possibili aspetti complottistici riguardo i piu' disparati avvenimenti.
Questa teoria (e ribadisco TEORIA), è applicabile un po a tutto ciò di strano 
o catastrofico accada in un determinato giorno o in un determinato periodo al
fine di trovare appunto "qualcosa di losco"...
Ovviamente nella maggior parte dei casi queste sono solo simpatiche storielle,
poco credibili, spesso inutili e fastidiose, più simili a leggende 
metropolitane che a fatti che realmente si possono verificare.
Vi invito a leggere questo articolo di Wikipedia per fare piu' chiarezza: 
http://it.wikipedia.org/wiki/Teoria_del_complotto


Detto cio'proviamo ad analizzare alcuni degli avvenimenti degli ultimi anni.

-11 Settembre 2001, tragedia a New York, cadono le Torri Gemelle, dopo che due
aerei di linea americani dirottati, si vanno a schiantare contro i due 
grattacieli.
Migliaia di morti e feriti, caos, allarme terrorismo, guerra in Afghanistan.
Ecco qui il punto, le Torri Gemelle cadono, gli Stati Uniti hanno un buon 
"pretesto" per bombardare l'Afghanistan di Bin Laden, terra di terroristi
che vuole annientare gli USA, terra di terroristi che opprime il suo popolo,
terra di dirottatori di aerei, dirottatori addestrati proprio negli USA...
Cosa ci sarebbe di complottistico? I due aerei di linea americani non sarebbero 
stati due aerei di linea, bensì due aerei dell' esercito.
Inoltre il terzo l'aereo, che si schiantò sul Pentagono, secondo alcune fonti
e ricostruzioni non era un aereo, bensì un missile.
Tutto questo lo potete trovare in un famoso "documentario" reperibile in rete.
Coincidenze, o cè qualcosa di piu'?

-Crisi economica: si è venuta a creare pian piano, nel corso degli anni, col
succedersi delle guerre, dei rispettivi blocchi di importazioni ed esportazioni,
con le catastrofi "naturali", ma soprattutto con la crisi dei mutui e delle 
banche...
Tutto è iniziato nelle banche britanniche (e non negli States come tutti 
credono) che hanno attuato un operazione di trasformazione dei mutui in pure e 
semplici obbligazioni, vendute poi in tutto il mondo, tramite numerosi 
e complessi passaggi.
Morale, le banche di tutto il mondo si sono arricchite a dismisura negli ultimi
periodi, creando una bolla che inevitabilmente e' esplosa, visto che la maggior 
parte della gente non è riuscita piu' a pagare dei mutui preparati perfettamente.
Le banche d'altro canto hanno e continuano a dichiararsi impoverite da questo
"blocco del mercato immobiliare", molte di queste banche hanno quindi
dichiarato fallimento, ovviamente per nascondere il tutto...
Anche qui, tutto "regolare" oppure è stata un operazione studiata a tavolino
dai vari organismi economici mondiali?

-Guerra in libia: qui la questione è molto semplice...
Perchè fare una guerra in Libia? Ovviamente il petrolio, e le riserve di altri 
materiali di cui è "ricco" questo paese c'entrano, 
ma non sono il fulcro di tutto...
Come è nata la rivolta del popolo libico? Internet...
I giovani Libici che hanno avuto sempre più accesso alla rete, hanno scavalcato 
la barriera della censura...
Quei giovani ben pensanti e che finalmente hanno il coraggio addirittura in un 
paese oppresso come la Libia di esprimere le loro idee, diventano semplicemente
un pericolo per l'occidente...
E allora ecco il pretesto della poca democrazia, delle rivolte violente 
ineccepibili, per fare una nuova guerra, ancora una volta un conflitto inutile,
per i soliti motivi...

-N1H1 e la cura per il cancro: Ci ricordiamo tutti dell'influenza n1h1?
Ma come mai non ne sentiamo piu' parlare?
Semplicemente perchè è stata un enorme bufala!
L'influenza che avrebbe dovuto "decimare" l'umanità, ha fatto meno vittime di 
una normale influenza, secondo le fonti ufficiali questo è accaduto grazie 
all'ottimo vaccino che è stato prodotto e distribuito su scala mondiale in 
fretta e furia e che è stato in grado di curare tutti.
Le stime parlano di circa 600 milioni di vaccini somministrati...
Ma era proprio necessario questo vaccino? Assolutamente no, semplicemente perchè
ripeto, questa era un influenza uguale a tutte le altre...
Ci hanno spaventato, "pubblicizzato" un prodotto che non ci serviva, al fine di
farci spendere, e ancora una volta chi ci ha guadagnato sono state le 
multinazionali, le aziende farmaceutiche in questo caso.
Ovviamente non è la prima volta che vengono create finte pandemie col solo scopo
di farci spendere, e ovviamente non sarà nemmeno l'ultima.
Qualche tempo fa inoltre lessi un'interessante teoria sul cancro...
In questo breve "articolo" si parlava della possibilità che il cancro fosse in 
realtà curabilissimo, che la cura DEFINITIVA fosse stata trovata già da anni, 
un semplice vaccino che avrebbe debellato per sempre questa malattia bruttissima.
Ma allora perchè questo vaccino non è già nelle nostre vene, e perchè forse non 
sarà mai nemmeno in quelle dei nostri figli?
Anche in questo caso la risposta è molto semplice.
Le aziende farmaceutiche (queste sconosciute...), le stesse che hanno 
"progettato" questo vaccino, producono tutte quelle medicine e quei macchinari 
che servono per "curare" il cancro, che sappiamo tutti essere una malattia ormai 
curabile, ma che comunque abbrevia la durata della vita, e soprattutto ne 
abbassa la qualità.
Per farvi capire meglio vi farò un esempio, un po aggressivo ed esagerato, ma 
per fare capire bene alle persone come le cose possono stare, questo ed altro...
La signora Gina Pinella (nome OVVIAMENTE di fantasia) a 30 anni purtroppo 
scopre di avere il cancro. Ovviamente cerca di curarsi, e cerca di farlo con la 
sanità pubblica, che attenzione non è affatto gratuita, perchè la paghiamo 
salatamente con alcune tasse.
Come sappiamo non sempre la sanità pubblica ci viene incontro 
(visite disponibili solo dopo molti mesi, qualità del servizio bassissima,...) 
e allora la signora Gina è costretta anche a ricorrere a visite e cure private, 
ovviamente per far prima, il tempo è prezioso per tutti, figuriamoci per un 
malato...

Morale: la signora Gina dopo cinque anni ha sconfitto il cancro, spendendo circa 
sei mila euro tra visite, medicine, eccetera...
È brutto fare questa domanda, ma...Chi ci ha guadagnato?
Ovviamente ancora una volta le aziende farmaceutiche!
Quanto ci avrebbe guadagnato un azienda farmaceutica con il vaccino? Circa cento 
volte di meno di quanto non ha fatto curando lentamente la signora Gina, bene, 
ora allargate questo discorso ad una fetta di popolazione molto ampia, fate 2+2, 
e forse capirete...

-Haarp: ed eccoci arrivati purtroppo alla catastrofe verificatasi ultimamente 
nel Sol levante. Partiamo da un "allegra storiella" per tentare di spiegare 
cosa è effettivamente l'Haarp...
Il Giappone da anni sperimenta l'"energia fredda", un energia pulita, a basso
costo, che di fatto renderebbe addirittura obsoleto il petrolio.
L'intensità del sisma in Giappone è stata incredibile, è stato
uno dei sette terremoti piu' potenti mai registrati su questo pianeta.
Il Giappone è uno dei paesi (se non il paese) con la "struttura antisismica"
meglio organizzata del mondo.
Sia la prima devastante scossa, che tutte le altre scosse di "assestamento"
successive, sono avvenute alla stessa profondità , ovvero a circa 10 km sotto 
il livello del mare.
Ci sono anche in rete alcuni grafici prodotti da magnetronomi, strumenti che
sono in grado anche di valutare la quantità di "perturbazioni" nella 
ionosfera, che mostrano dei livelli sconsiderevoli di queste perturbazioni
proprio nel periodo del terremoto.
Detto cio' tentiamo di capire che cosa è realmente  l'HAARP.
Innanzitutto, HAARP sta per High-Frequency Active Auroral Research Program, 
ovvero (citando Wikipedia) "un'installazione civile e militare in Alaska 
per la ricerca scientifica sugli strati alti dell'atmosfera e della ionosfera.
Un altro scopo è la ricerca sulle comunicazioni radio per uso militare."
Da cosa è composta questa installazione? Da un trasmettitore molto potente,
e da 180 antenne alimentate da potenti motori diesel.
L'uso ufficiale dell'HAARP è quello di creare piccolissime perturbazioni, per
studiare come esse possano influire nelle comunicazioni militari a lunga 
distanza. Il principio è molto semplice: se si manda un onda radio verso la
ionosfera quest'ultima si surriscalda e crea piccoli mutamenti climatici.
Con lo stesso principio, secondo alcune persone, si potrebbero creare anche dei
sismi di incredibile potenza a migliaia e migliaia di chilometri, utilizzando
l'enorme "potenza" che l'HAARP può generare.

Ci tengo ancora una volta a precisare che tutto ciò che ho scritto sono 
semplici teorie cospirazioniste, quindi non è detto che corrispondano al vero,
ma è anche possibile che un briciolo (se non più di un briciolo) di verità
ci sia.
Meditate: chi ha potere, può tutto...

P.S: 
Solidareetà anche al popolo libico, o meglio a quella parte di popolo che 
da diversi anni è oppresso da un regime barbaro e ingiusto e cerca la libertà,
la VERA libertà.
Disgusto, verso chi ancora appoggia le dittature, siano essi facenti parte del
"popolo" o siano essi potenti imprenditori e/o politici. 
Disgusto, verso quegli stati occidentali che nel corso dei secoli hanno reso in 
schiavitù molte popolazioni africane (e non solo), quegli stessi stati che ora 
dipingono il nord Africa e il Medioriente come l'officina del terrorismo, 
quegli stessi stati che da anni sono i primi terroristi (ecco un esempio per i 
più scettici http://it.wikipedia.org/wiki/Operazione_Northwoods).
Ribrezzo, verso l'ONU, la Francia, la Gran Bretagna, la Danimarca, la Norvegia,
gli Stati Uniti e l'Italia, e tutti quegli altri stati che ancora una volta
stanno conducendo una guerra inutile.

PP.S: Questa volta voglio andare un po fuori dagli schemi, e fare una sorta di 
spam, e ringraziare nonchè "pubblicizzare" un sito molto valido che mi ha dato
ancora una volta una grande mano nella stesura di questo "articolo":
http://www.disinformazione.it


dany15gni


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


********************************
* 0x07 :: Il cubo di resistori *
********************************


Allego un simpatico rompicapo che mi ha regalato Morbido6868(grazie!:D)
lo ritengo ottimo per imparare a calcolare sulle reti:

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

 Dedicated to d0ct0r
           by Morbido6868

...............................................................................


                             Il cubo di resistori
                             --------------------

Calcolare la R totale di una rete resistiva costruita come un cubo avente un
resistore da 1 ohm su ciascuno spigolo e la V applicata a due vertici
diagonalmente opposti:


                   [VCC]
                      \
                       \
                        \
                         \_________R3__________
                         |\                   |\
                         | \                  | \
                         |  R                 |  R
                         |   4                |   2
                         |    \               |    \
                         R     \________R1 ___|_____\
                         8      |             |      |
                         |      |             R      |
                         |      |             7      |
                         |      R             |      |
                         |      5             |      |
                         |______|____RC_______|      R
                          \     |              \     6
                           \    |               \    |
                            R   |                R   |
                             9  |                 B  |
                              \ |                  \ |
                               \|_________RA________\|
                                                     \
                                                      \
                                                       \
   R1 = R2 = R3 = R4 = R5 = R6 =                      [GND]
 = R7 = R8 = R9 = RA = RB = RC = 1 ohm


...............................................................................
                                                                              /
                                                                             /
                                                                            /
                                                                           /
                                                                          /
                                                                         /
                                                                        /
                                                                       /
                                                                      /
                                                            ____     /
                                                           / ___|   /
                                                           \___ \  /
                                                            ___) |/
                                                           |____//
                                                        ___     /
                                                       / _ \   /
                                                      | | | | /
                                                      | |_| |/
                                                  _    \___//
                                                 | |       /
                                                 | |      /
                                                 | |___  /
                                                 |_____|/
                                              _   _    /
                                             | | | |  /
                                             | | | | /
                                             | |_| |/
                                              \___//
                                         _____    /
                                        |__  /   /
                                          / /   /
                                         / /_  /
                                        /____|/
                                     ___     /
                                    |_ _|   /
                                     | |   /
                                     | |  /
                                    |___|/
                                ___     /
                               / _ \   /
                              | | | | /
                              | |_| |/
                               \___//
                         _   _     /
                        | \ | |   /
                        |  \| |  /
                        | |\  | /
                        |_| \_|/
                    _____     /
                   | ____|   /
                   |  _|    /
                   | |___  /
                   |_____|/
                         /
                        /
                       /
                      /
                     /
                    /
                   /
                  /
                 /
                /
               /
              /
             /
            /
           /
          /
         /
        /
       /
      /
     /
    /
   /
  /
 /
/
...............................................................................


                                  Soluzione
                                  ---------

Occorre scomporre la rete per trovare le equivalenti sezioni minime.
R3, R4, R8 sono collegati allo stesso vertice di potenziale iniziale VCC perciò
possono essere considerati come tre resistori in parallelo dato che la VCC si
distribuisce equamente fra i tre; e lo stesso vale per R6, RA, RB che sono
collegati allo stesso vertice di potenziale finale GND:


                sezione_1 :       [VCC]
                                    |
                                    |
                                    |
                                .---+---.
                                |   |   |
                                |   |   |
                                R   R   R
                                3   4   8
                                |   |   |
                                |   |   |
                                '---+---'
                                    |
                                    |
                                    |
                                  [AAA]



                sezione_2 :       [BBB]
                                    |
                                    |
                                    |
                                .---+---.
                                |   |   |
                                |   |   |
                                R   R   R
                                6   A   B
                                |   |   |
                                |   |   |
                                '---+---'
                                    |
                                    |
                                    |
                                  [GND]




Dopodichè rimangono solo 6 resistori (R1, R2, R5, R7, R9, RC) tra i punti
estremi AAA e BBB della rimanente sezione di circuito:


                                           [AAA]
                                              _
                                              |\
                                              | \
                                              |  R
                                              |   2
                             [AAA]            |    \
                                ________R1 ___|_____\
                                |             |
                                |             R     [BBB]
                                |             7
                                R             |
                      [AAA]     5             |
                          ______|____RC_______|
                          \     |
                           \    |            [BBB]
                            R   |
                             9  |
                              \ |
                               \|

                               [BBB]



I quali 6 possono essere collegati secondo i circuiti equivalenti:


                 [AAA]
                   |
                   |
                   |                           .-------+-------.
             .-----+-----.                     |       |       |
             |     |     |                     |       |       |
             |     |     |                     |       |       |
             R     |     R                     R       |       R
             1     |     2                     1       |       2
             |     |     |                     |       |       |
             |     |     |                     |       |       |
       .-----+     |     +-----.        .------+     [AAA]     +------.
       |     |     |     |     |        |      |       |       |      |
       |     |     |     |     |      [BBB]    |       |       |    [BBB]
       |     R     |     R     |               R       |       R
       |     5     |     7     |               5       |       7
       |     |     |     |     |               |       |       |
       |     |     |     |     |               |       |       |
       |     +-----+-----+     |               +-------+-------+
       |     |           |     |               |               |
       |     |           |     |               |               |
       |     R           R     |               R               R
       |     9           C     |               9               C
       |     |           |     |               |               |
       |     |           |     |               |               |
       |     '-----+-----'     |               |               |
       |           |           |             [BBB]           [BBB]
       '-----------+-----------'
                   |
                   |
                   |
                 [BBB]


                                      sezione_3 :       [AAA]
                                                          |
                                                          |
                                                          |
                                                  .---+---+---+---+---.
                                                  |   |   |   |   |   |
                                                  |   |   |   |   |   |
                                                  R   R   R   R   R   R
                                                  1   5   9   C   7   2
                                                  |   |   |   |   |   |
                                                  |   |   |   |   |   |
                                                  '---+---+---+---+---'
                                                          |
                                                          |
                                                          |
                                                        [BBB]




Quindi non rimane che sommare le tre sezioni trovate, riconducibili al
circuito equivalente:


                           [VCC]
                             |
                             |
                             |
                         .---+---.
                         |   |   |
                         |   |   |
    sezione_1 :          R   R   R
                         3   4   8
                         |   |   |
                         |   |   |
                         '---+---'
                             |
                             | [AAA]
                             |
                     .---+---+---+---+---.
                     |   |   |   |   |   |
                     |   |   |   |   |   |
    sezione_3 :      R   R   R   R   R   R
                     1   5   9   C   7   2
                     |   |   |   |   |   |
                     |   |   |   |   |   |
                     '---+---+---+---+---'
                             |
                             | [BBB]
                             |
                         .---+---.
                         |   |   |
                         |   |   |
    sezione_2 :          R   R   R
                         6   A   B
                         |   |   |
                         |   |   |
                         '---+---'
                             |
                             |
                             |
                           [GND]



E calcolare infine la R totale della rete resistiva:


    R_sezione_1 = 1/((1/R3)+(1/R4)+(1/R8)) =

                = 1/((1/1)+(1/1)+(1/1)) =

                = 1/3 =

                = 0,333333 ohm


    R_sezione_3 = 1/((1/R1)+(1/R5)+(1/R9)+(1/RC)+(1/R7)+(1/R2)) =

                = 1/((1/1)+(1/1)+(1/1)+(1/1)+(1/1)+(1/1)) =

                = 1/6 =

                = 0,166666 ohm


    R_sezione_2 = 1/((1/R6)+(1/RA)+(1/RB)) =

                = 1/((1/1)+(1/1)+(1/1)) =

                = 1/3 =

                = 0,333333 ohm


    R_totale = R_sezione_1 + R_sezione_3 + R_sezione_2 =

             = 1/3 + 1/6 + 1/3 =

             = 2/6 + 1/6 + 2/6 =

             = 5/6 =

             = 0,833333 ohm è la R totale del cubo di resistori :)


:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


d0ct0r & Morbido6868


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


******************
* 0x08 :: Riddle *
******************


Soluzione dello scorso riddle(HITNOTE 0x05):
La prima pagina da visitare era:
http://hitnote.gotdns.org/riddle/0x05.jpg

Un'immagine..uhm... la parte in basso a destra risulta danneggiata..
Aprendo l'immagine con un semplice editor di testo si poteva scorgere qualche
byte prima della fine la scritta 

PASSWORD: 2865
hitnote.gotdns.org/riddle/RD05.htm

Visualizzando il source di http://hitnote.gotdns.org/riddle/RD05.htm
si leggeva una scritta: <!-- SDVVZRUGLVQLQHQLQHQLQH <3 -->
Che decodificata usando il cifrario di cesare, si arrivava a:
PASSWORDISNINENINENINE
e quindi
PASSWORD: 999

Abbiamo due vincitori: 
gumis 				=> Livello 1
Piston Churchell 	=> Livello 1 + Livello 2

---------------------------------------------

Da questo numero abbiam deciso di sospendere i riddle... 
ma non temete, abbiamo nuove idee per il futuro ;)


r0b0t82


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


**************************
* 0x09 :: Ringraziamenti *
**************************

Per questo numero si ringrazia, in ordine alfabetico:
dany15gni, d0ct0r, Morbido6868, Piston Churchell, 
r0b0t82, riot, tragic0mic, turbocotoletta

La ezine HITNOTE è a cura dell' Unofficial HJ Forum:
http://unofficialhj.gotdns.org

Il sito ufficiale di HITNOTE è:
http://hitnote.gotdns.org

Insultateci, criticateci, inviateci tutto quel che vi passa per la testa a:
[email protected]

Il canale IRC su cui ci incontriamo è:
#hj @ unofficialhj.gotdns.org:6667 [6697 via SSL]
#hjssl @ unofficialhj.gotdns.org:6697 [solo via SSL]


HITNOTE 0x06 [April 2011] -- Released under Creative Commons
 
Источник
www.exploit-db.com

Похожие темы