giovedì 3 maggio 2012

Hash e Array in Ruby / Debug in Rails 3

Hash

#Differenza tra un array ed un hash
hash = {title:'Snowboard',place:'Sahara'}
array = [evento_1,evento_2,evento_3]

#Hash metodi
hash = { :one => "uno", :two => "dos" }
assert_equal 2, hash.values.size
assert_equal __, hash.values.include?("uno")
assert_equal __, hash.keys.include?(":one")
assert_equal __, hash.values.class

La classe Hash è fatta di chiavi e valori.
Sia la chiave che i valori sono array che vengono tra loro associati.
Trattasi di un matrimonio di array.

L'esplorazione avviene con due metodi: le parentesi quadre [] e il metodo fetch.
Le due proprietà principali della classe Hash sono keys e value.
Entrambi se esplorate permettono di utilizzare il metodo .include?

* hash = Hash.new
* hash.size
* hash[:one] #prende l'elemento one
* hash.fetch(:one) #prendere l'elemento one, la differenza è che il fetch scatena un IndexError nel caso in cui si invochi una chiave non esistente
* hash.keys.size
* hash.keys.include?(:two)
* hash.values.include?("uno")
* Hash.new("default value") # quando viene esplorato una chiave non presente

Render Partial

Per caricare una vista parziale
<%= render nome_della_vista %>
Il nome della vista nel file system deve avere l'underscore davanti (ad esempio "_nome_della_vista.erb").
Il metodo render può accettare anche dei parametri aggiuntivi che permettono di specificare un layout per una specifica vista.

<%= render partial: nome_della_vista layout: 'layout_tuo' %>

Debug in Rails 3

Nella vista
debug variabile
Nel controller
logger.warn / logger.info etc.

Fonte: Ruby on Rails Guides · MrWebmaster · Ruby documentation

Code Igniter e la sua arrogante semplicità.

Vuoi prendere tutti dati in post?
$data = $this->input->post();
Fonte CodeIgniter User Guide Codeigniter sessions best practices

Configurare Sublime Text 2 per controllare la sintassi di Ruby e Javascript.


Per controllare la sintassi di ruby in Sublime Text è sufficiente installare il package SublimeLinter di Kronuz.

Ruby


Se volete utilizzare la sintassi di Ruby 1.9 e utilizzate rvm probabilmente vedrete che non correggerà in modo corretto la nuova sintassi.

Per risolvere il problema si può cambiare il file di configurazione del package in questo modo
"sublimelinter_executable_map":
    {
        "ruby": "/users/tuo_nome/.rvm/rubies/ruby-1.9.3-p0/bin/ruby"
    }
Dove il percorso indicato corrisponde alla posizione dell'installazione di Ruby.

Javascript

Per quanto riguarda Javascript utilizzo queste opzioni aggiuntive che mi permettono di evitare l'obbligo di punto e virgola nel finale delle righe js.





Fonte :
SublimeLinter · Stackoverflow · Sublime Text · Liorhakim

lunedì 6 febbraio 2012

Utilizzare l'emulatore android su mac os x

Scaricare la sdk ed installarla.

Attraverso il terminale infilarsi nella cartella di installazione

cd /Users/%Nome del computer%/Public/android-sdk-mac_x86

Creare un profilo avd con il seguente comando

./android create avd -n mionome -t 2

Lanciare il simulatore

./emulator @mionome

Dopo aver atteso un bel pò di tempo tutto funziona (molto lentamente.. il confronto con il simulatore iphone è decisamente impietoso).

Fonte: Android Developer - Managing avds cmdline

mercoledì 10 agosto 2011

Symfony 2 e Mamp, prove di convivenza.

Installazione di Symfony 2

Scaricare il pacchetto e posizionarlo nella root di apache (solitamente htdocs).
fonte Symfony - The Big Picture

Configurazione di Mamp

Una volta inserito nella vostra directory il pacchetto di Symfony, nella pagina di config (http://localhost/symfony/web/config.php) potreste incorrere in questo messaggio:

Major problems have been detected and must be fixed before continuing : Upgrade your APC extension

Personalmente ho provato complicate soluzioni a linea di comando per attivarlo. Poi mi sono accorto che senza alcuna fatica APC si può attivare dal pannello preferenze di Mamp.

mercoledì 29 giugno 2011

Cocos 2D - gestione del tocco dell'utente, azioni e cambio di immagini dinamico.

Per gestire il "tocco" dell'utente è necessario aggiungere dei delegati tramite lo shareddispatcher ed il metodo addTargetedDelegate. SwallowsTouches se è impostato su true impedisce la propagazione degli eventi ad oggetti che sono posizionati al di sotto.

Fondamentale ricordarsi di richiamare i metodi super sia in entrata che in uscita altrimenti molte cose non funzioneranno come previsto.

-(void)onEnter {
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:TRUE];
[super onEnter];
}
In uscita è buona norma rimuoverlo attraverso il metodo removeDelegate.
-(void)onExit{
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
[super onExit];
}

Il set di azioni è tra gli strumenti più comodi che cocos2d fornisce. L'utilizzo è semplice e rapido.

martedì 24 marzo 2009

AS3: navigazione a frame e acesso ai figli.

Con la riscrittura di ActionScript c'è stato un sostanziale cambiamento sul come ActionScript interagisce con la timeline e con la navigazione a frame. Un esempio specifico riguarda la navigazione verso un nuovo frame con un movie clip interno a questo frame.

In as2 sarebbe stato sufficente scrivere qualcosa come:

target.gotoAndStop(10);
target.child._rotation = 90;

Dove il figlio del movie clip è un movie clip annidato nel frame 10 del target. Usando target.child._rotation = 90; il movie clip si sarebbe ruotato senza problemi.

Questo non è più possibile in ActionScript 3.

martedì 24 febbraio 2009

Heredoc, php e dreamweaver

Dreamweaver non colora il codice in maniera coretta se nel php si utilizza l'heredoc. La soluzione la fornisce un utente di Ultrashock.

  • Aprire il file: C:\Program Files\Macromedia\Dreamweaver 8\Configuration\CodeColoring\PHP.xml
  • Tra il tag <blockStart> e <blockEnd>, aggiungere:
    <blockStart doctypes="PHP_MySQL" scheme="customText"><![CDATA[HEREHTML;]]></blockStart><blockEnd><![CDATA[<<<HEREHTML]]></blockEnd>

Heredoc e html ora si colorano in maniera appropriata.

martedì 20 gennaio 2009

Align as3

Impostare l'allineamento in alto a sinistra e il noscale dell'swf è una esigenze ricorrente. Su Kirupa si può trovare la seguente document class:

package {
import flash.display.MovieClip;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class Test extends MovieClip {
public function Test() {
initStage();
}
private function initStage():void {
stage.align=StageAlign.TOP_LEFT;
stage.scaleMode=StageScaleMode.NO_SCALE;

stage.addEventListener(Event.RESIZE, resizeHandler);
}
private function resizeHandler(event:Event):void{
AppMain.x = (stage.stageWidth-AppMain.width)/2
AppMain.y = (stage.stageHeight-AppMain.height)/2
}
}
}

martedì 13 gennaio 2009

giovedì 4 dicembre 2008

Teorema di Pitagora e ActionScript

In un sistema cartesiano come quello di flash è possibile ottnere la distanza tra due punti utilizzando il teorema di Pitagora.

Teorema: La lunghezza della ipotenusa è pari alla radice della somma delle aree costruite sui due cateti.

In Flash ottenuti i 2 punti di partenza e i 2 punti di arrivo sull'asse x e sull'asse y si può procedere per ottenere la lunghezza della "linea di movimento" con il teorema.

Problema di esempio
La sfera è a x 10 e y 10.
La sfera deve andare a x 30 e y 46.
Quale è la distanza che intercorre tra i due elementi?

trace(calcolaDistanza(10, 30, 10, 46));

function calcolaDistanza(x1:Number, x2:Number, y1:Number, y2:Number):Number {
var distanzaX:Number = x2 - x1;
var distanzaY:Number = y2 - y1;
return Math.sqrt(distanzaX * distanzaX + distanzaY * distanzaY);
}

Soluzione
La soluzione è ottenere la distanza dei punti sull'asse x e sull'asse y. Una volta ottenuti si hanno i due cateti del triangolo. A quel punto applicare il teorema di pitagora per trovare l'ipotenusa.

venerdì 28 novembre 2008

Inerzia - Easing

Per ottenere un effetto inerzia: calcolare la distanza tra i due punti. L'oggetto che deve spostarsi si sposta a metà della distanza da percorrere. E poi di nuovo a metà della metà. E poi di nuovo. Fino a raggiungere un approsimazione prossima allo zero. Questo ovviamente in un enterFrame per ottenere l'animazione.

La formula generica che potrete facilmente memorizzare:
PassoSuccessivo=(DoveVoleteArrivare-DoveSieteAdesso)/ValoreInerzia;

da http://www.webmasterpoint.org/appunti/flash/83.asp

inerzia = 2;

palla_mc._x = 0
palla_mc._y = 200

var posPallaX:Number = this.palla_mc._x
var posPallaY:Number = this.palla_mc._y
var posMouse:Number = _root._xmouse

this.onEnterFrame = function () {
asseX()
asseY()
}

function asseX() {
//si calcola la distanza tra due punti e si fa andare la palla a metà poi ancora a metà della metà e così via
posMouse = _root._xmouse;
posPallaX = palla_mc._x;
distX = posMouse - posPallaX;
distXMeta = distX / 2;
palla_mc._x += distXMeta;
}

function asseY() {
posMouse = _root._ymouse;
posPallaY = palla_mc._y;
distY = posMouse - posPallaY;
distYMeta = distY / 2;
palla_mc._y += distYMeta;
}