yiinotes.com

Yii1.1, Symfony2, jQuery, Php, Javascript, Objective-C, ...

Nascondere i file nascosti

 
posted by on June 17, 2013
 

Per ragioni che ignoro, da qualche giorno vedo tutti i miei file nascosti. Ho chiesto a google come fare per nasconderli e mi ha insegnato questo:

$ defaults write com.apple.Finder AppleShowAllFiles NO


Tags:
Permalink | Comments (0) | Last updated on June 17, 2013
 

$_GET con Node.js

 
posted by on May 28, 2013
 

Anche quest'anno sono stato al PhpDay. Per tutta la durata della conf era presente uno stand in cui era possibile acquistare libri con lo sconto del 40% così, in preda ad un raptus, ho comprato 4 libri e due di questi erano dedicati a Node.js. Ne sentii parlare già al PhpDay2012 ma non mi ero mai spinto a tanto (comprare dei libri su Node.js). Dopo i primi pomodori di lettura, eccomi qui a raccontarvi le mie prime impressioni.

pillole di best practices

Tanto per iniziare, i files node.js sono scritti in javascript. Per convenzione si tende ad assegnare l'estensione .njs in questo modo possiamo distinguerli dai normali .js. Questo ci permetterà di fare una netta separazione tra ciò che è javascript lato client e ciò che è javascript lato server.

il primo server http

In questo primo post dedicato a node.js il mio scopo è scrivere un triviale "Hello Simone" nel browser ottenendo il nome (Simone) attraverso la querystring. Più esattamente, richiamando la pagina http://127.0.0.1:1337/?nome=Simone dal mio browser. Iniziamo subito con le prime righe del mio http.njs:

var http = require('http');
var static = require('node-static');

Queste due righe di codice non fanno altro che caricare dei moduli di Node.js. Il modulo http è built-in dentro node, mentre node-static deve essere installato. Per farlo lanciare il comando

$ npm install node-static

I moduli vengono caricati con la funzione require, presente tra le API di Node.js.

mettersi in ascolto di una porta

Questo è tutto il codice che ci serve per metterci in ascolto della porta 1337 all'indirizzo ip 127.0.0.1 altrimenti noto come localhost. Il nostro codice, sarà in grado di ascoltare una richiesta come questa: http://127.0.0.1:1337/?nome=Simone

http.createServer(function(req, res){
    // niente da fare per il momento
}).listen(1337, '127.0.0.1');

"cloniamo" $_GET di php

In PHP quando abbiamo una variabile passata tramite querystring abbiamo a disposizione un array super globale chiamato $_GET[]. Con Node.js possiamo costruircelo in questo modo. Ovviamente ci sono modi più eleganti per ottenere lo stesso risultato.

    var _GET = {};
    var urlparts = req.url.split('?');
    if(urlparts.length>=2) {
        var query = urlparts[urlparts.length-1].split('&');
        for (var p=0; p<query.length; ++p){
            var pair = query[p].split('=');
            _GET[pair[0]] = pair[1];
        }
    }

Questo invece è lo snippet di codice necessario per dare risposta 200 e trasmettere una pagina di tipo text/html.

    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('hello ' + _GET['ciao']);

Ecco il codice del mio primo server http per intero. Se ...

  • installate node
  • salvate il codice che segue in un file (ad esempio http.njs)
  • e lanciate il comando "$ node http.njs"
  • caricate il link "http://127.0.0.1:1337/?nome=Simone" nel vostro browser ...

otterrete un bel risultato =).

var http = require('http');
var static = require('node-static');
var file = new static.Server();
http.createServer(function(req, res){
    var _GET = {};
    var urlparts = req.url.split('?');
    if(urlparts.length>=2) {
        var query = urlparts[urlparts.length-1].split('&');
        for (var p=0; p<query.length; ++p){
            var pair = query[p].split('=');
            _GET[pair[0]] = pair[1];
            console.log(pair[0] + ' = ' + pair[1]);
        }
    }
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('<?php echo "MOM"; ?> hello ' + _GET['ciao']);
}).listen(1337, '127.0.0.1');
console.log('Server is running');


Tags: Node Javascript
Permalink | Comments (0) | Last updated on May 28, 2013
 

ftp con php? Non pensavo, ma è possibilissimo!!!

 
posted by on May 13, 2013
 

Messo così serve davvero a poco, ma può essere l'inizio di un client FTP scritto in php. Quello che succede qui, altro non è che l'upload di un file. Con qualche altro pezzetto di codice potremmo anche cercare tutti i files di un nostro progetto e magare caricarlo per interno nel server di produzione.

<?php

    $ftp_user_name = FTP_USER_NAME;
    $ftp_user_pass = FTP_PASSWORD;
    $server = FTP_SERVER;
    $source = PATH_LOCAL_FILE;
    $dest = PATH_REMOTE_FILE;
    $connection = ftp_connect($server);
    $login = ftp_login($connection, $ftp_user_name, $ftp_user_pass);
    if (!$connection || !$login) { 
    die('Connection attempt failed!');
    }
    $upload = ftp_put($connection, $dest, $source, FTP_BINARY);
    if (!$upload) {
    echo 'FTP upload failed!';
    }
    ftp_close($connection);




Tags: ftp
Permalink | Comments (0) | Last updated on May 13, 2013
 

Lo sviluppo di yii2 prosegue ...

 
posted by on May 6, 2013
 

Lo sviluppo di yii2 prosegue e la community è decisamente attiva. Ci teniamo al nostro framework. In particolare ho forkato il progetto ieri e prima di scrivere questo post ho fatto una pull request per vedere tutti gli aggiornamenti fatti. PHP5.3 inizia a comparire (con i namespace), e questo mi rende abbastanza contento (anche se non mi dispiacerebbe iniziare a vedere gli array in stile 5.4).

Migrations Per esempio è stata scritta la documentazione che riguarda le migrations. Io adoro questo strumento di lavoro. =) In Yii per creare una migration dobbiamo eseguire questo comando:

$ ./yiic migrate/create che_cosa_fa_la_migration

Questo comando creerà un file simile a questo:

class m101129_185401_create_news_table extends \yii\db\Migration
{
  public function up()
  {
    $this->db->createCommand()->createTable('tbl_news, array(
      'id' => 'pk',
      'title' => 'string NOT NULL',
      'content' => 'text',
    ))->execute();
  }
  public function down()
  {
    $this->db->createCommand()->dropTable('tbl_news')->execute();
  }
}

è una public preview Non dimentichiamoci che si tratta di una public preview. Yii2 non è assolutamente da usare in produzione. Tanto per dirne una i namespace potrebbero cambiare (come stanno facendo) senza alcun tipo di garanzia. La roadmap di yii2 non ha milestone stabili in vista. Io mi aspetto di vedere un prodotto completo nel 2014.


Tags: migration php53 namespaces
Permalink | Comments (0) | Last updated on May 6, 2013
 

yii2 is out!!!

 
posted by on May 4, 2013
 

Finalmente possiamo iniziare a giocare con la Public Preview di Yii2. Ci sono tantissime novità in questa nuova versione del framework. Tanto per cominciare, blueprint è stato soppiantato da bootstrap. Per ora si può fare ben poco ma vi lascio qualche piccola indicazione per provare subito il nostro nuovo giochino =).

clonare yii2

$ git clone git@github.com:yiisoft/yii2
Cloning into 'yii2'...
remote: Counting objects: 7147, done.
remote: Compressing objects: 100% (1698/1698), done.
remote: Total 7147 (delta 5218), reused 7142 (delta 5213)
Receiving objects: 100% (7147/7147), 1.87 MiB | 486 KiB/s, done.
Resolving deltas: 100% (5218/5218), done.

virtualhost

Per provare mi sono costruito un semplice virtualhost con lo stesso nome del repository. Ah! Non dimenticatevi di modificare anche il file /etc/hosts aggiungendo il vostro yii2. No, questo passaggio non è necessario.

<VirtualHost *:80>
    ServerAdmin admin@yourdomain.com
    ServerName yii2
    DocumentRoot /home/UTENTE/Sviluppo/yii2/app
    DirectoryIndex index.php
    <Directory /home/UTENTE/Sviluppo/yii2/app>
            AllowOverride all
    </Directory>
</VirtualHost>

Dentro app troviamo una piccola applicazione di esempio. Il suo solo scopo, in pratica, è mostrarci che le nuove applicazioni create con yii2 sono già integrate con bootstrap.

assets

La cartella assets non ha il permesso di scrittura quindi quel che ho fatto io per evitare di vedere strane eccezioni è:

$ chmod 777 -R yii2/app/assets/

conclusioni

Siamo a poche ore dal rilascio di yii2. Ancora non si può dire nulla.


Tags: yii2 bootstrap
Permalink | Comments (1) | Last updated on May 4, 2013
 

Modificare la homeUrl di Yii

 
posted by on April 23, 2013
 

Uno dei piccoli problemi nei quali ci si imbatte abbastanza spesso, è quello di modificare il redirect di un utente dopo aver effettuato il logout. In effetti, nel sito nel quale stavo operando, al logout venivo sempre ridirezionato alla rotta "/". Nel mio caso specifico la mia "/" è una splash page da mostrare solo al primo accesso dell'utente al mio sito web e la vera home é "/homepage". Così sono andato in SiteController::actionLogout(); per vedere come veniva eseguito prima il logout e poi il redirect:

/**
 * Logs out the current user and redirect to homepage.
 */
public function actionLogout()
{
  Yii::app()->user->logout();
  $this->redirect(Yii::app()->homeUrl);
}

Ci sono diversi modi di modificare il redirect, per esempio potrei semplicemente sostituire Yii::app()->homeUrl con un createUrl oppure, come ho fatto nello snippet che segue, modificare al volo il valore di homeUrl utilizzato il setter messo a disposizione da CApplication.

/**
 * Logs out the current user and redirect to homepage.
 */
public function actionLogout()
{
  Yii::app()->user->logout();
  Yii::app()->setHomeUrl('/homepage');
  $this->redirect(Yii::app()->homeUrl);
}

Trovo questa una soluzione un po' costosa visto che si tira su un intero singleton. Diciamo che si poteva fare di meglio =). Però funziona. Magari con qualche commento potrei anche decidere di arricchire questo post con dei suggerimenti.


Tags: homeUrl yii
Permalink | Comments (0) | Last updated on April 23, 2013
 

-bash: __git_ps1: command not found

 
posted by demo on March 5, 2013
 

Qualche giorno fa ho seguito questa guida che insegna ad impostare il proprio ambiente di sviluppo in OsX. Ad un certo punto però mi sono imbattuto in un guaio. Il guaio è che ad ogni singolo comando, il terminale mi mostrava sempre lo stesso messaggio:

-bash: __git_ps1: command not found

La cosa è un po' fastidiosa, ma grazie a stackoverflow ho risolto. In poche parole ho installato una versione di git-completion.bash dal master dove la funzione __git_ps1 è stata spostata in un nuovo file: git-prompt.sh.

Per risolvere il problema, bisogna scaricare lo script in questione e poi eseguirlo.

$ curl -o ~/.git-prompt.sh \
https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh
$ source ~/.git-prompt.sh

A questo punto, potremo vedere il branch corrente nel nostro prompt =)


Tags: git OsX iTerm
Permalink | Comments (0) | Last updated on March 5, 2013
 

Cambiare l'immagina della navigationBar

 
posted by demo on March 4, 2013
 
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    UIImage * image = [UIImage imageNamed:@"01_navbar_portrait.png"];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}


Tags: ObjectiveC iOS
Permalink | Comments (0) | Last updated on March 4, 2013
 

Modificare la password di blog.db

 
posted by demo on March 2, 2013
 

Ciao a tutti!!! Finalmente mi sono deciso ad eliminare wordpress per ricostruire questo blog usando yii. Per non fare troppa fatica inutile, sono partito dal blog che possiamo trovare scaricando yii.

L'ho fatto per tante ragioni:

  • plugin che non funzionavano facilmente
  • poca conoscenza di wordpress
  • necessità di poter modificare quando e come volevo questo blog
  • ...

In ogni caso mi sono scontrato subito con un problema: modificare la password presente nel file sqlite blog.db.

Ebbene, ce l'ho fatta. Ora vi mostro lo snippet che ho utilizzato:

<?php $user = new User(); ?>
<?php echo crypt('yiinotes', $user->hashPassword('yiinotes')); ?>   


Tags: Yii
Permalink | Comments (1) | Last updated on March 4, 2013
 

Symfony2.2 è uscito

 
posted by demo on March 4, 2013
 

Anche se questo blog ha nel suo titolo Yii, vorrei trattare più temi. Ne ho almeno due particolarmente a cuore. Il primo di cui vi parlo è Symfony2.2. Da pochi giorni, infatti, è uscita la versione 2.2. In verità io attendo la versione 2.3 in quanto avremo a che fare con una LTS. Non vedo l'ora che arrivi il mese di maggio. In quei giorni, infatti, avremo il rilascio di Symfony2.3.


Tags: Symfony2 LTS
Permalink | Comments (0) | Last updated on March 4, 2013
 

Copyright © 2013 by SENSORARIO di Simone Gentili.