.: HosiriS :.

Informatica e non solo

Archive for the ‘Progetti Personali’ Category

MeteArduino

Posted by hosiris su dicembre 1, 2011

Analisi iniziale
Il modulo meteo che verrà progettato dovrà soddisfare alcune semplici specifiche:

  • misurarazione di temperatura, pressione e umidità
  • inseririmento automatico dei dati misurati in un database
  • presentazione dei dati in maniera semplice ed intuitiva

La piattaforma di prototipazione che verrà utilizzata sarà Arduino con l’aggiunta di un piccola breadboard per le prime connessioni. La comunicazione tra Arduino e PC avverrà tramite USB.
Sono specifiche di massima, non restrittive, ma scritte solo per dare una linea guida al progetto.

Scelta dei sensori
Per la scelta dei sensori mi sono concentrato maggiormente sul costo degli stessi, in quanto per un progetto casalingo non è richiesta né una grande precisione né molta accuratezza.
Leggi il seguito di questo post »

Annunci

Posted in Arduino, C/C++, IHSys, Javascript, PHP, Progetti Personali, Python, SQL | 1 Comment »

Gestiamo un sensore DHT22 con Arduino

Posted by hosiris su novembre 7, 2011

Tempo fa ho descritto una metodologia che ci permettesse di sfruttare un sensore di temperatura per ottenere delle statistiche sull’andamento di questo parametro.
Al fine di costruire una stazione meteo completa, ho modificato il progetto precedente utilizzando un sensore DHT22 che trova integrati sia un sensore di temperatura che un sensore di umidità.
Leggi il seguito di questo post »

Posted in Arduino, C/C++, Hardware, IHSys, PHP, Progetti Personali | 12 Comments »

Misuriamo la temperatura tramite Arduino

Posted by hosiris su ottobre 3, 2011

Dopo aver introdotto il mio progettino (IHSys) cominciamo con il progettare e realizzare il primo modulo: un misuratore di temperatura.
Leggi il seguito di questo post »

Posted in Arduino, C/C++, Hardware, IHSys, Javascript, PHP, Progetti Personali, Python, temparduino | 1 Comment »

Parliamo di IHSys

Posted by hosiris su settembre 8, 2011

Intelligence for Home automation System: questo è il significato dell’acronimo (costruito cercando di ricordare la dea egizia) scritto nel titolo.
Cosa è? Purtroppo è solo un sogno (che con il passare dei millenni potrà diventare realtà) di un sistema (inteso nel più vasto dei significati) che mi fornirà un supporto domotico.
Perché? no comment… o meglio… il motivo è semplice: voglio imparare a fare nuove e quale miglior metodo se non partire per una impresa impossibile? E poi… se il Tony Stark del film può avere Jarvis, allora io potrò avere IHSys 😀
Leggi il seguito di questo post »

Posted in IHSys, Progetti Personali | Leave a Comment »

ToDoList con PHP e SQLite

Posted by hosiris su marzo 2, 2011

Quando ci si impegna nello sviluppo di una applicazione bisogna, come prima cosa, decidere gli strumenti da usare… reputo inutile sparare ad una mosca con un cannone, come è rischioso pescare squali con una canna da 2 metri. Bisogna, quindi, perdere del tempo per effettuare le giuste scelte.
Per questo motivo, nella realizzazione di una semplice todolist, ho deciso di usare PHP unito a SQLite: la mole di dati sarà molto bassa e l’applicazione server mi permette di accedere alla lista da qualsiasi posto io mi trovi.
Ma cominciamo con calma, vediamo alcuni concetti base per iniziare ad utilizzare un database di tipo SQLite.

SQLite è una applicazione cross platform scritta in C che fornisce la possibilità di organizzare i dati senza l’utilizzo di applicazioni server (come MySQL o Oracle). Concettualmente lavorare con un database di questo tipo, equivale ad aprire un file e scrivere i dati all’interno.
La sintassi è molto simile al linguaggio SQL, quindi non ci saranno novità in questo senso.

La prima cosa da fare è quella di abilitare i moduli php per utilizzare questa tecnologia, su ubuntu è estremamanete semplice perchè installando le librerie verrà automaticamente modificato il php.ini:

$ sudo apt-get install php5-sqlite

Adesso possiamo iniziare a programmare la nostra applicazione. Svilupperemo i componenti principali di un sistema CRUD (al momento ho sviluppato in maniera procedurale, ma sto già lavorando ad un classe specifica):

  • createdb.php: codice per la creazione del db e delle tabelle;
  • insertdata.php: codice per l’inserimento dei dati;
  • selectdata.php: codice per la selezione dei dati dal db;
  • editdata.php: modifica dei dati;
  • deletedata.php: per rimovere dati dal db

Inizializzare un db SQLite vuol dire accedere ad una risorsa, non ad un servizio, nel seguente modo:

$dbLink = sqlite_open("todolistdb.sqlite");
if(!is_resource($dbLink)){
    die ("ERRORE NELLA CREAZIONE DEL DATABASE");
}

Una volta che è stato aperto, possiamo eseguire la query per la creazione del DB:

    $query = "    CREATE TABLE items(
                    id_item INTEGER PRIMARY KEY,
                    item VARCHAR(50),
                    description TEXT,
                    ins_date DATE
                );";
    if(!@sqlite_query($dbLink, $query)){
        die("ERRORE NELLA CREAZIONE DELLA TABELLA") ;
    }

Credo sia inutile scrivere ogni query… il concetto di come funziona il tutto dovrebbe essere chiaro.
Il risultato sarà una cosa del genere:

Allego anche il codice php che comprende tutte le funzioni descritte prima.

DOWNLOAD TODOLIST

Posted in PHP, Progetti Personali, Programmazione, SQLite, ToDoList | Leave a 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 »

G.Li.Ar: adattiamo le query

Posted by hosiris su maggio 19, 2010

Pian pianino il nostro applicativo sta prendendo forma. Dalla bozza iniziale, funzionale, ma imperfetta, pezzo dopo pezzo stiamo raggiungendo ottimi risultati che, lo voglio sottolineare, non richiedono delle conoscenze pazzesche.
Oggi ci dedicheremo alle query di selezione dei dati dal DB. Se avete letto qualcosina su Symfony, saprete che la gestione del modello si appoggia sull’ORM Propel (nel nostro caso, c’è la possibilità di usare Doctrine) e sulla classe Criteria. Di default quando viene creato il modello, il framework genera automaticamento le query di base, ma come facciamo a modificarle per aggiungere ulteriori parametri? Dobbiamo aggiungere solo un po’ di codice alle classi esistenti, ma niente di sconvolgente.
Innanzitutto decidiamo cosa fare. Il mio intento è quello di ordinare alfabeticamente tutte le informazioni, per cui alle nostre query dovremmo aggiungere una condizione “Order By”.
Come nello scorso post, mostrerò come agire prendendo in esempio un solo file, ma bisogna lavorare su ogni modulo ed in particolare sui seguenti file:


lib/model/ArticoliPeer.php
lib/model/AutoriPeer.php
lib/model/CategoriePeer.php
lib/model/EditoriPeer.php
lib/model/LibriPeer.php
lib/model/RivistePeer.php

Apriamo il primo file, noteremo la presenza di una classe vuota (in realtà non lo è, per chi non conoscesse la programmazione ad oggetti la clausola “extends” implica il fatto che questa classe erediti i metodi da una classe madre). Aggiungiamo la seguente funzione:


static public function doOrder(){
  $criteria = new Criteria();
  $criteria->addAscendingOrderByColumn(self::TITOLO);
  return self::doSelect($criteria);
}

da notare l’ordinamento fatto sul campo “TITOLO”, questo va modificato nei vari moduli in base alla colonna da considerare.
Adesso dobbiamo dire al controller di far riferimento alla giusta funzione, quindi modificheremo, rispettivamente:


apps/frontend/modules/articoli/actions/actions.class.php
apps/frontend/modules/autori/actions/actions.class.php
apps/frontend/modules/categorie/actions/actions.class.php
apps/frontend/modules/editori/actions/actions.class.php
apps/frontend/modules/libri/actions/actions.class.php
apps/frontend/modules/riviste/actions/actions.class.php

andremo a modificare l’azione “executeIndex()” in modo che si richiami la nuova funzione, quindi:


public function executeIndex(sfWebRequest $request)
{
  $this->Articolis = ArticoliPeer::doOrder();
}

Posted in GLiAr, PHP, Progetti Personali, Programmazione, Symfony | Leave a Comment »

G.Li.Ar: modifichiamo gli URL

Posted by hosiris su maggio 18, 2010

Forse questa di oggi è la parte più noiosa, ma deve essere fatta per migliorare il nostro applicativo: modificheremo il routing di GLiAr.
Innanzitutto andiamo a creare un nuovo modulo, che ci permetterà di definire la Home Page:


$ ./symfony generate:module main frontend

eliminiamo il codice contenuto nell’azione executeIndex() del nuovo modulo. Andando in “http://gliar/frontend_dev.php/main&#8221; vedrete che sarete reindirizzati su una pagina che ha la struttura da noi definita nel layout, ma vuota nel content; potete modificare la vista del nuovo modulo per fa vedere quello che volete.
Adesso preoccupiamoci di reindirizzare l’applicazione sul nuovo modulo, per fare questo dobbiamo modificare il file apps/frontend/config/routing.yml, modificando la rotta della home page in questo modo:


homepage:
  url: /
  param: { module: main, action: index }

da questo momento sarà sufficiente visitare http://gliar/frontend_dev.php per ritrovarci di fronte alla homepage.
Ho modificato il file di layout aggiungendo il link alla home page e al modulo riviste (dimenticato la volta scorsa).
Attualmente l’url generato ha una forma poco leggibile, ma possiamo fare in modo che il risultato sia come il seguente:

e per farlo dobbiamo modificare nuovamente il file di routing (mostrerò gli esempi per un solo caso, ma questo va ripetuto per ogni modulo):


# apps/frontend/config/routing.yml
show_art:
  url: /articoli/:id/:titolo
  class: sfPropelRoute
  options: { model: Articoli, type: object }
  param: { module: articoli, action: show }
  requirements:
    sf_method: [get]

quello scritto corrisponde al dire a symfony di mostrare una url che abbia una forma del tipo “/articoli/:id/:titolo” dove con il formato “:+nome” diciamo a symfony di aspettarsi una variabile.
Fatto questo siamo costretti a modificare la vista del modulo per fare in modo che siano passati i giusti parametri:


<h2>Lista degli articoli</h2>
<table>
  <thead>
    <tr>
      <th>Titolo</th>
      <th>Data</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($Articolis as $Articoli): ?>
    <tr>
      <td><a href="<?php echo url_for(array(
                                        'module' => 'articoli',
                                        'action' => 'show',
                                        'id'     => $Articoli->getId(),
                                        'titolo' => $Articoli->getTitolo(),
                                     )) ?>"><?php echo $Articoli->getTitolo() ?></a></td>
      <td><?php echo $Articoli->getData() ?></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>
<a href="<?php echo url_for('articoli/new') ?>">Aggiungi Articolo</a>

avrete notato il cambiamento di forma nell’helper “url_for”, questo perchè utilizzando questa metodologia possiamo rendere la chiamata più leggibile.
Scrivere l’intero codice mi sembra una cosa inutile che renderebbe il post illegibile, quindi vi fornisco due metodologie per accedere al codice:

1) SVN: svn co http://osiride.no-ip.org/svn/GLiAr
2) WEB: GLiAr

con il primo metodo, per chi non conoscesse svn, potrete scaricare l’intero progetto sul vostro pc ed inoltre vi permette di mantenere aggiornato il progetto con le modifiche da me apportate.

Per il momento vi consiglio di spendere molto tempo sulle rotte e sulla modifica dei moduli. Cercate di raggiungere ottimi risultati essendo pignoli con voi stessi… si impara solo quando non si è mai soddisfatti.

Buon divertimento

Posted in GLiAr, PHP, Progetti Personali, Programmazione, Symfony | Leave a Comment »

G.Li.Ar: le viste (2)

Posted by hosiris su maggio 15, 2010

Nell’ultimo post avevo presentato una modifica di base sulle viste, nel poco tempo a disposizione ho modificato ulteriormente l’aspetto del mio applicativo, senza raggiungere effetti stilistici spettacolari, ma rendendolo più carino da vedere. Ho principalmente modificato il foglio di stile, producendo una soluzione a due colonne:


<!-- web/css/main.css -->
body {
    font-family: Verdana, Arial;
    width: 800px;
    position: absolute;
    left: 50%;
    margin-left: -400px;
}
div#header h1 {
    border: 1px black solid;
    font-size: 24px;
    text-align: center;
    padding: 10px;
}
div#menu {
    float: left;
    display: block;
}
div#menu ul {
    list-style: none;
    margin: 0;
    padding: 10px;
}
div#menu a {
    font-size: 10px;
    text-decoration: none;
    color: #000;
}
div#menu a:hover {
    background: #000;
    color: #aff;
}
div#content {
    font-size: 10px;
    margin: 0 10px 20px 20px;
    float: left;
}
div#footer {
    clear: both;
}
div#footer h3 {
    border: 1px black solid;
    font-size: 8px;
    text-align: center;
    padding: 5px;
}

il codice dovrebbe essere di facile lettura, ma specifico alcuni passaggi importanti. Il body è centrato, quindi tutto il contenuto verrà automaticamente centrato. La soluzione a due colonne è tableless, utilizzando il metodo “float: left” sul div menu e content, non dimenticate di impostare nel div footer la voce: “clear: both” altrimenti il footer andrà a sovrapporsi alle due colonne. Ho modificato i parametri del menu “ul” eliminando le decorazioni tipiche del tag anchor e aggiungendo un effetto rollover al passaggio del mouse.

Il risultato è il seguente:

Certo il bianco e nero, lo rende ancora bruttino, ma per me è già un seccesso così!
Potrete apprezzare il fatto che, tramite il pattern decorator, la struttura base riamarrà costante nella navigazione, mentre quello che starà nel content va modificato. A tal fine io ho lavorato sui template dei moduli “libri” e “articoli”.
Ad esempio una semplice modifica al file “apps/frontend/modules/libri/templates/editSuccess.php” (se non ricordate i nomi dei template, vi ricordo che la vista per una data azione è data dal nome dell’azione + “Success”) porta a questo risultato:

Alla prossima… e come sempre: Buon divertimento!

Posted in GLiAr, PHP, Progetti Personali, Programmazione, Symfony | 2 Comments »

G.Li.Ar: le viste

Posted by hosiris su maggio 8, 2010

Ci siamo lasciati con la creazione dei modelli. Se avete fatto delle prove avrete di certo notato che quasi tutte le funzionalità sono attive, bisogna sistemare poche relazioni tra modelli.
Ma per il momento preoccupiamoci di che aspetto dovrebbe avere la nostra applicazione… io ho un senso estetico pessimo quindi, a parte le modifiche su symfony, vi consiglio di creavi una vostra interfaccia. Io mi limiterò a posizionare i blocchi lì dove voglio.
Modificheremo il template della pagina principale e il template per i moduli Libri e Articoli.
Per modificare il template del frontend, modifichiamo:


<!-- apps/frontend/templates/layout.php -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <?php include_http_metas() ?>
    <?php include_metas() ?>
    <?php include_title() ?>
    <link rel="shortcut icon" href="/favicon.ico" />
    <?php include_stylesheets() ?>
    <?php include_javascripts() ?>
  </head>
  <body>
    <div id="header">
      <h1>G.Li.Ar: GESTIONE LIBRI E ARTICOLI</h1>
    </div>
    <div id="menu">
      <ul>
        <li><a href="<?php echo url_for('libri/index') ?>">Libri</a></li>
        <li><a href="<?php echo url_for('articoli/index') ?>">Articoli</a></li>
        <li><a href="<?php echo url_for('autori/index') ?>">Autori</a></li>
        <li><a href="<?php echo url_for('categorie/index') ?>">Categorie</a></li>
        <li><a href="<?php echo url_for('editori/index') ?>">Editori</a></li>
      </ul>
    </div>
    <div id="content">
      <?php echo $sf_content ?>
    </div>
    <div id="footer">
      <p>Powered by Se]{eM</p>
    </div>
  </body>
</html>

In questo modo abbiamo creato un menù contenente i link a tutti i moduli e abbiamo dato un titolo al nostro sito.
Se ricordiamo come funziona symfony, possiamo facilmente trovare quali file modificare per definire la vista dei moduli: la vista associata all’azione di index sarà indexSuccess, quindi:


<!-- apps/frontend/modules/libri/templates/indexSuccess.php -->
<h2>Lista dei libri</h2>
<table>
  <thead>
    <tr>
      <th>Titolo</th>
      <th>Data</th>
      <th>Isbn</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($Libris as $Libri): ?>
    <tr>
      <td><a href="<?php echo url_for('libri/show?id='.$Libri->getId()) ?>"><?php echo $Libri->getTitolo() ?></a></td>
      <td><?php echo $Libri->getData() ?></td>
      <td><?php echo $Libri->getIsbn() ?></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>
<a href="<?php echo url_for('libri/new') ?>">New</a>


<!-- apps/frontend/modules/articoli/templates/indexSuccess.php -->
<h2>Lista degli articoli</h2>
<table>
  <thead>
    <tr>
      <th>Titolo</th>
      <th>Data</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($Articolis as $Articoli): ?>
    <tr>
      <td><a href="<?php echo url_for('articoli/show?id='.$Articoli->getId()) ?>"><?php echo $Articoli->getTitolo() ?></a></td>
      <td><?php echo $Articoli->getData() ?></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>
<a href="<?php echo url_for('articoli/new') ?>">New</a>

in questo modo abbiamo presentato solo i dati di interesse. Solo dopo aver cliccato su un elemento verrà mostrata una pagina contenente tutte le informazioni.
Certo questa interfaccia è brutta e magari qualcuno vorrebbe qlcs di più colorito, se conoscete le regole css potete facilmente modificare il file web/style/main.css.
Per il momento è tutto, vedremo come definire le rotte e come trattare le relazioni con cardinalità n ad n, magari definendo prima una interfaccia di login per le operazioni che vogliamo essere fatte solo dal root.

Buon divertimento

Posted in GLiAr, PHP, Progetti Personali, Programmazione, Symfony | Leave a Comment »