.: HosiriS :.

Informatica e non solo

Archive for dicembre 2010

Gestire le relazioni molti a molti con CakePHP

Posted by hosiris su dicembre 30, 2010

Eccoci al motivo che mi ha spinto a provare CakePHP: la gestione delle relazioni!
Quando ho iniziato con le prime prove credevo di dovermi impelagare in qualcosa di complesso, ed invece dopo 5 min riuscivo a gestire ogni tipo di relazione… direi che la vera potenza è questa!

Allora, come possibile esempio prendo in considerazione la necessità di memorizzare dati degli utenti di un sistema, ognuno di questi utenti apparterrà ad un o più gruppi che daranno accesso a molte funzionalità.
Il DB sarà quindi composto dalle tabelle:

  • users(id, name, surname, username, password, last_connection)
  • groups(id, name, permissions)

La relazione tra queste tabelle è di tipo molti a molti, quindi dobbiamo creare una tabella aggiuntiva di servizio:

  • memberships(id, user_id, group_id)

Dopo aver creato le tabelle del DB, passiamo alla scrittura dei componenti del pattern MVC: controller, model e view.
I controller users_controller e groups_controller saranno costituiti da sole due linee di codice, perchè ci avvaleremo degli scaffold, e di conseguenza le viste saranno generate automaticamente (il nostro scopo è mostrare le relazioni.):

<?php
//app/controller/users_controller.php
class UsersController extends AppController {
  var $name = 'Users';
  var $scaffolds;
}
?>


<?php
//app/controller/groups_controller.php
class GroupsController extends AppController {
  var $name = 'Groups';
  var $scaffolds;
}
?>

Andiamo a trattare la parte più importe: il model. In questo andremo a scrivere le informazioni necessarie alla nostra applicazione per conoscere la struttura del nostro DB. Creaimo due file nella cartella app/model:

<?php
//app/model/user.php
class User extends AppModel {
  var $name = 'User';
  var $displayField = 'name';
  var $hasAndBelongsToMany = array(
    'Group' => array(
      'className' => 'Group',
      'joinTable' => 'memberships',
      'foreignKey' => 'user_id',
      'associationForeignKey' => 'group_id',
      'unique' => true,
      'conditions' => '',
      'fields' => '',
      'order' => '',
      'limit' => '',
      'offset' => '',
      'finderQuery' => '',
      'deleteQuery' => '',
      'insertQuery' => ''
    )
  );
}
?>


<?php
//app/model/group.php
class Group extends AppModel {
  var $name = 'Group';
  var $displayField = 'name';
  var $hasAndBelongsToMany = array(
    'User' => array(
      'className' => 'User',
      'joinTable' => 'memberships',
      'foreignKey' => 'group_id',
      'associationForeignKey' => 'user_id',
      'unique' => true,
      'conditions' => '',
      'fields' => '',
      'order' => '',
      'limit' => '',
      'offset' => '',
      'finderQuery' => '',
      'deleteQuery' => '',
      'insertQuery' => ''
    )
  );
}
?>

Come si può notare tutte le informazioni relative alle relazioni tra le tabelle sono contenute nell’attributo $hasAndBelongsToMany.
Salvate e tramite il browser aprite l’indirizzo “http://localhost/users&#8221; provate a fare degli inserimenti, non notate che sono presenti i campi della tabella “groups”?

Questo attributo ci permette. quindi, di gestire le relazioni molti a molti, ma abbiamo molti altri attributi per gestire ogni tipo di relazione: $hasMany, $toBelongs, etc…

Buon divertimento.

Posted in CakePHP, CMS&MVC, Programmazione | 1 Comment »

Informazione… visiva: OVO

Posted by hosiris su dicembre 28, 2010

Cos’è OVO? E’ un progetto italiano che secondo me ha dello straordinario.

Immagino che in molti conoscano Wikipedia, immaginate che invece di dover leggere tutto quello che vi è scritto, una voce vi racconti tutto… e se questa voce fosse accompagnata da delle immagini? Il risultato sarebbe un insieme di documentari, e proprio questo è OVO: una raccolta di documentari su ogni argomento.
Certo con 3 min non c’è la possibilità di avere molte info, ma può essere un ottimo spunto.

Buon divertimento

Posted in Informatica, Svago | 1 Comment »

Evviva le torte, ovvero ora tocca a CakePHP

Posted by hosiris su dicembre 26, 2010

A forza di suonare sinfonie ti vien fame, no (;P)? E quindi mi sono buttato a capofitto nello studio di CakePHP.
Certamente non ho le competenze per poter dare giudizi obiettivi, ma posso riferire quelle che sono le espressioni di un utente. A prima vista CakePHP sembra una applicazione molto più semplice di Symfony, la distinzione tra i vari componenti MVC è più netta rendendo più lineare la logica di programmazione. D’altro canto, Symfony è molto potente, rendendo possibile ogni progetto complesso. In conclusione non ho una preferenza e sono felice di portare nel mio bagaglio di conoscenze entrambi questi strumenti.
Voglio però riproporre un progetto che tempo fa sviluppai usando Symfony: la ToDo List. La versione di cake che sto utilizzando è la 1.3 e per l’installazione rimando alle guide che stanno sul sito. Una volta scompattato il tutto ci troviamo di fronte ad una semplice architettura. La cartella più importante è la app, all’interno della quale troviamo cartelle riguardanti le configurazioni, controller, model e view.
Cominciamo con il configurare la connessione al DB. Apriamo il file app/config/database.php (rinomiamo quello esistente) e modifichiamolo come segue:

<?php
class DATABASE_CONFIG {
  var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'port' => 3306,
    'login' => 'user',
    'password' => 'pass',
    'database' => 'db',
  );
}
?>

Creiamo il nostro database con una tabella (items) composta da:

id: primary key;
item: varchar(255);
description: text;
created_at
modified_at

Se ricordate a questo punto con Symfony avremmo creato applicazioni e moduli, i modelli venivano automaticamente generati dalla stessa applicazione. Con CakePHP, per lo meno in questa fase di conoscenza, creeremo manualmente i modelli (in questo caso parliamo di una sola tabella, quindi niente di complesso). Spostiamoci nella cartella app/controllers e creiamo il file items_controller.php:

<?php
class ItemsController extends AppController {
  var $name = 'Items';
  var $scaffolds;
}
?>

salviamo e spostiamoci in app/models e creiamo un file chiamato item.php:

<?php
class Item extends AppModel {
  var $name = 'Item';
  var $displayField = 'item';
}
?>

Immagino che già vi è passata la voglia… allora vi consiglio di andare con il vostro browser alla pagina http://vostrosito/items 😀 Siete stupiti vero?
è tutto praticamente pronto… tutto funziona ed il segreto sta all’interno della variabile $scaffolds. Ho scelto di iniziare dalla via difficile (che poi tanto difficile non è) perchè vorrei trasmettere la mia abitudine di sprofondare all’interno delle cose. Il motivo è semplice, se si comprendo i meccanismi di base non ci sarà più niente che potrà fermarci.
Continuando a leggere il manuale di cake comincerete a migliorare la vostra applicazione, conoscerete gli standard sul naming, conoscerete come trattare le view e come aggiungere azioni al controller.

Vien da se che il prossimo progetto che rivedrò sarà GLiAr, anche qui il motivo è semplice… purtroppo non sono riuscito a trovare supporto per imparare a gestire le relazioni molti a molti e CakePHP mi ha reso possibile questa attività dopo solo 1 ora di studio…

Buon divertimento.

Posted in CakePHP, CMS&MVC, Progetti Personali, Programmazione, ToDoList | Leave a Comment »

Guardando il cielo

Posted by hosiris su dicembre 24, 2010


LINK

Prima di continuare a leggere vi prego di cliccare sul link in alto… muovete il cursore prima verso sinistra, osservate quante cose non possiamo conoscere… poi spostate verso destra… ammirate l’universo, la perfezione del tutto (pensate che un essere molto grande vedrà noi come noi vediamo i quark o le stringhe?)

Avete mai osservato il cielo? Non parlo di stare sulla spiaggia, la notte di S. Lorenzo, sperando che qualche “stella cadente” attraversi il cielo e renda più magica la notte. Mi riferisco al concentrarsi sul cielo, cercando di spingere la propria vista al di là delle nuvole, al di là dell’azzurro, al di là del buio…
Siete mai stati consapevoli che non state osservando solo un insieme di luci attaccate al soffitto? Vi siate mai resi conto che quel bagliore ha percorso distanze inimmaginabili sopravvivendo nel tempo, portando con se informazioni. Ma che tipo di informazioni? Pensate che ci sono raggi luminosi che giungono a noi da distanze di migliaia di anni luce! Cosa vuol dire questo? Semplicissimo: questo raggio che stiamo osservando è partito dalla fonte migliaia di anni fa e solo oggi ci ha raggiunti, quindi non stiamo osservando la stella oggi, ma nel passato. Se fosse presente un essere vivente su quella stella e stesse osservando nella nostra direzione, vedrebbe il nostro sole come era milioni di anni fa, quindi quell’essere su quella stella non sarebbe in grado di capire che su un pianeta di quel sistema esiste la vita!
Purtroppo, con le conoscenze che abbiamo, non saremo mai in grado di stabilire se esiste un’altra forma di vita oltre la nostra.
Ci sono altre cose che non conosceremo mai (avete spostato il cursore fino alla massima destra?): ad oggi siamo (nel senso di genere umano, io non ho avuto modo di dare contributi ;)) riusciti ad osservare fino a circa 14.000.000.000 di anni fa (in questo tempo la luce ha percorso una distanza incredibile)… cosa c’è oltre quel confine? Il tempo ci farà capire altro… l’eternità ci darebbe una spiegazione migliore. Ma la cosa veramente importante è questa: cosa c’è oltre il confine? Una situazione omogenea a quella già conosciuta? l’universo “finisce”? e cosa c’è oltre questa fine? magari l’universo è tutto un continuo e dopo aver percorso una grandissima distanza ci ritroveremmo sulla terra?
Quante domande e nessuna risposta!
Questa notte miliardi di essere umani saranno accomunati da una serie di riti, ma quanti partecipano a questi momenti coscienti di cosa sta succedendo? Quanti si sono mai fatti domande che superino le limitazioni umane?
In questa infinità, supponiamo che esista un ente supremo, capace di plasmare tutto. Chiediamoci: si sarà mai accorto che in un pianeta (che rapportato alle reali dimensioni dell’universo rappresenta un granello di polvere) si è sviluppata una strana forma dell’essere?
Ipotizziamo che se ne sia accorto, che volutamente ci ha creati, che il suo amore infinito lo ha portato a donarci la vita, a farci a sua immagine e somiglianza. Ma dico io… con tanto spazio proprio su un granello di polvere ci dovevi mettere? (non voglio essere irrispettoso, quindi spero di non offendere nessuno e se dovessi farlo sarei felice di correggere le frasi offensive… mi sto solo facendo delle domane) Tu che ci hai creati, sapevi che nel nostro intimo siamo guerrafondai (chiamiamolo istinto di sopravvivenza), spargici un po’ di qua ed un po’ di là… che ne so 4 sulla terra, 4 da un altra parte… fai tu… e prima che riempiamo sto mondo aivoja a te!
Cosa penso veramente? Quando si è “intelligenti”, come noi umani presumiamo di essere, si è quasi costretti a trovare un fine alle proprie azioni, perchè viviamo? perchè studiamo? perchè? Tanti perchè, dettati solamente dall’incapacità di comprendere noi stessi come parte di un equilibrio che è chiamato vita. Confondiamo molti nostri comportamenti con le volontà di un essere invisibile e a questo crediamo fermamente, ma non riusciamo a credere a quello che ci sta davanti gli occhi. Questa realtà non rispetta la nostra grandezza e quindi non è accettabile, l’uomo è superiore a tutto e non può mescolarsi con il normale andamento biologico; deve esistere un motivo per la nostra esistenza.
Poi magari il motivo della nostra esistenza, diventa anche il motivo della nostra disfatta: datemi tutte le spiegazioni che volete e cercate di convincermi su tutto, ma se pretendete che io dimentichi 2000 anni di storia solo perchè “siamo uomini” è inutile fare ogni tipo di ragionamento. Si è ucciso in nome di colui che ci ama, si continua ad uccidere in nome di un dio che come dimostrazione di amore obbliga alla morte…

Posted in Personal | 1 Comment »

Sito per la risoluzione di equazioni

Posted by hosiris su dicembre 22, 2010

Saltellando da sito in sito mi sono imbattuto in una simpaticissima applicazione: Wolfram Alpha.

una volta inserita l’equazione, clicchiamo su “=” e…

Bello no? Se solo lo avessi conosciuto al Liceo… ed ad analisi???
Vi lascio con questa bella equazioncina:

Posted in Matematica | Leave a Comment »

Quando Ubuntu torna utile anche ad utenti Microsoft

Posted by hosiris su dicembre 20, 2010

Certo che questa possibilità non migliora la mia stima verso quella sottospecie di OS (se qualcuno avesse dubbi parlo di Windows), ma ci sono occasioni in cui una persona è costretta ad usarlo (ad esempio a lavoro non ho possibilità di usare altro) e quindi non mancano le occasioni per imbattersi in problematiche varie!
Quella della perdita della password di accesso potrebbe essere un grossissimo problema ed ecco una piccola soluzione a questo grande problema. Quello di cui abbiamo bisogno è un semplice CD che ci permetterà di avviare Ubuntu in modalità live (anche una pennetta USB va bene).
Dopo aver avviato il sistema da CD, con il PC connesso ad internet, aprite un terminale (Applicazioni->Accessori->Terminale) e digitate i seguenti comandi:

$ sudo apt-get update
$ sudo apt-get install chntpw

I passaggi successivi possono essere poco chiari a chi non ha mai avuto in mente di usare GNU/linux in generale ed è giusto così, perchè una mano inesperta potrebbe fare solo danni.
Montiamo la partizione con Windows:

$ sudo mount -t "vfat/ntfs" "/dev/partwin" /media/WINDOWS

naturalmente dovremmo impostare il giusto filesystem ed impostare la giusta partizione.
Spostiamo nella cartella in cui sono contenute le SAM:

$ cd /media/WINDOWS/WINDOWS/SYSTEM32/CONFIG
$ sudo chntpw SAM

Ci verranno mostrate tutte le info necessarie… sarà sufficiente utilizzare il MENU per cancellare la password dell’utente. Ed eccovi garantito l’accesso!

Buon divertimento.

Posted in Informatica, Ubuntu, Windows | Leave a Comment »

Web framework in C++

Posted by hosiris su dicembre 18, 2010

CppCMS è un framework web gratuito. Differisce dagli altri framework in quanto:

  • E’ progettato per la gestione di grossi carichi
  • Utilizza il C++ come linguaggio
  • E’ rivolto allo sviluppo di siti Web piuttosto che alle applicazioni web “GUI like”

Posted in C/C++, CMS&MVC, Programmazione | Leave a Comment »

Distro specifica per il recupero file

Posted by hosiris su dicembre 16, 2010

Stavo cercando di mettere su un insieme di software specializzati per il recupero di dati, quando mi sono imbattuto in una distro appositamente disegnata per questo scopo. RIPLinux è una distro molto leggera che è possibile far partire da una pennetta USB o da un CD. E’ possibile utilizzarla in due versioni: con server X e senza. L’unico vantaggio nell’uso della versione con GUI è che ci permette l’uso di software di software come GParted o Firefox.

I software principali sono:

  • TestDisk per il ripristino di partizioni cancellate (FAT, NTFS, ext2/3/4, ReiserFS 3/4, XFS, etc.)
  • PhotoRec per il ripristino di file (non solo foto)
  • fdisk, cfdisk, parted, and GParted
  • ntfsprogs (ntfsresize, ntfsclone, ntfsfix, mkntfs, etc.) per la gestione di partizioni NTFS
  • GNU ddrescue

Posted in Linux | Leave a Comment »

Gli ultimi buffoni

Posted by hosiris su dicembre 15, 2010

Che Berlusconi non sia stato sfiduciato, in fondo, non mi risulta indigesto: sarebbe stata dura la scelta di un sostituto capace di risistemare le cose.
E’ il modo con cui il tutto è successo che mi da un fastidio indescrivibile!
Voglio provare a riassumere cosa è successo ieri:

  • esponenti dell’IdV hanno votato contro la sfiducia
  • esponenti del PD hanno votato contro la sfiducia
  • esponenti di FLI si sono astenuti

Personalmente mi sento umiliato! Perchè? Perchè se questi buffoni riescono a divertirsi prendendomi in giro, DEVO sentirmi offeso; perchè se questi buffoni sono convinti che possono prendermi in giro, DEVO sentirmi offeso. Ma se questi buffoni continuano a fare quello che vogliono, hanno vinto e posso solo sentirmi umiliato, perchè magari sono più intelligente di tutti loro messi insieme, ma posso solo osservare.

Sta degenerando tutto quanto, la corruzione è ai massimi storici, l’individualismo sta sconfiggendo lo Stato.

La tristezza più grande è stata nell’osservare le reazioni di questa bestia moribonda. Così come un toro moribondo, l’Italia cerca di reagire colpendo, però, a vuoto. Manifestazioni inutili, volte a dimostrare che la democrazia esiste! Ma dove? Quale democrazia? Se degli ignoranti vanno a fare danni in giro per l’Italia non fanno altro che dimostrare lo stato pietoso in cui siamo ridotti. La vera manifestazione è stata fatta da chi continua a lavorare o a studiare, da chi giornalmente continua a combattere per un nazione che non riesce a restituire un minimo di soddisfazioni.

Si queste sono solo parole. Ho sempre detto che quando una persona parla senza agire non merita di essere ascoltata… se volete, cambiate sito perchè non trovo un modo di agire. Anzi, il modo è ben chiaro nella mia mente, ma passerei in un istante dalla parte del torto, perchè se potessi cancellare tutta la feccia, così come si toglie del gesso da una lavagna, senza che lo Stato mi consideri un dittatore fascista (anche se giornalmente chi mi sta intorno mi ricorda che in effetti lo sono), lo farei senza esitazione. Ho sempre creduto che quello della democrazia è un concetto inventato per tenere buone le persone, ma adesso più che mai è necessario che delle forze ribaltino la situazione!

Posted in Attualità, Politica | 2 Comments »

Estraiamo le immagini dai PDF

Posted by hosiris su dicembre 14, 2010

Spesso mi dicono che sono pazzo, ma in genere non raggiungo livelli che possano far preoccupare seriamente. Da qualche giorno ho superato quel limite: ho deciso di portare in formato testo tutti i pdf che ho. Non mi riferisco ai pdf da 100 pagine in su (che stanno nella cartella libri e così rimarranno), ma tutti quei file di 3 pagine che occupano spazio solo per il fatto di essere PDF.
Magari non molti vedono la pazzia, ma chi mi conosce sa che da quando per la prima volta accesi il computer (circa 10 anni fa) non ho mai cancellato un file…
Veniamo a noi… questa opera mi ha costretto a prendere delle decisioni come ad esempio il dover scrivere il tutto secondo formalismi che, se necessario, mi permetteranno di compilare i file con latex (causa formule principalmente).
Cosa farne delle immagini? Molti articoli presentano grafici o esempi… li butto? Non si può… allora li estraggo ed il tutto semplicemente con un comando:

$ pdfimages -j file.pdf images

cosa abbiamo detto al nostro terminale? Semplicissimo, gli abbiamo detto di salvare delle immagini che abbiano come radice del nome “images” prelevate dal file “file.pdf” che vengano salvate come jpeg (-j) utilizzando il programma pdfimages!
Appena terminato avrete modo di vedere le immagini nella stessa cartella del file.

Buon divertimento

Posted in Linux, Ubuntu | Leave a Comment »