mercoledì 31 ottobre 2012

ARC forbids explicit message send of 'dealloc'

Molte volte capita di dover usare librerie di terze parti (o proprie), che non sono predisposte alla compilazione tramite ARC (Automatic Reference Counting), quindi se il tuo progetto invece lo prevede si verifichera' un errore di questo tipo :
ARC forbids explicit message send of 'dealloc'
Per far conciliare le due gestioni della memoria, e' possibile impostare il flag di disabilitazione di ARC per i sorgenti della libreria importata, andando in "Target" -> "Build Phases" -> "Compile Sources" e impostare come "Compiler Flags" l'opzione :
-fno-objc-arc

venerdì 27 luglio 2012

Problema db:migrate con mysql2

All'esecuzione di rake db:migrate si verifica questo errore :


rake aborted!
An error has occurred, all later migrations canceled:
undefined method `rows' for nil:NilClass
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
$ rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:migrate
==  CreateSessions: migrating =================================================
-- create_table(:sessions)
   -> 0.1164s
==  CreateSessions: migrated (0.1165s) ========================================
rake aborted!
An error has occurred, all later migrations canceled:
undefined method `rows' for nil:NilClass
/Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.1/lib/active_support/whiny_nil.rb:48:in `method_missing'
Come risultato viene creato l'oggetto del Migrate ma poi non riesce ad aggiungere, il punto di versione su schema_migrations.

Il problema e' dovuto ad un'incompatibilita' di versione della gem di Mysql2.

Con Rails 3.1.1, provate varie versioni del gem mysql2, tra le quali 0.2.7, 0.3.11, ma alla fine quella che mi ha funzionato e' la 0.3.7.
Quindi aggiunto nel Gemfile la riga :
gem 'mysql2', '0.3.7'

Problema db:migrate con Mysql2 parte 2

Un altro problema si e' presentato utilizzando Rails 3.1.1, con Mysql 5.5, con S.O. OSX

Al lancio del rake db:migrate, si verificava questo errore :

rake aborted!dlopen(/Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/leobenelli/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle
La soluzione trovata e' di impostare una variabile la variabile di ambiente nel seguente modo :
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
a questo punto il la libreria viene trovata e il problema si risolve.

Si verifica pero' un altro errore spiegato al successivo post.

venerdì 18 maggio 2012

gem install json in errore con osx Lion

Dopo essere passato a Lion e installato la versione 4.2 di Xcode, rimuovendo la precedente 3.2.6, non si riesce più a eseguire il "bundle install" durante la creazione di nuovi progetti Rails.

In particolare il problema si manifesta durante l'installazione della Gem di Json, che probabilmente ha bisogno di una compilazione nativa.

Dopo un po' di verifiche e rierche, la soluzione da adottare, e'

  • Installare Xcode 4.2
  • In Xcode da Preference -> Download, installare i "command line tool" (180 mb) 

A questo punto in /usr/bin e' presente il gcc, che e' un Symbolic Link a llvm-gcc-4.2.

Rieseguendo il bundle install continua a non funzionare, dato che cerca il file /usr/bin/gcc-4.2, ho risolto creato un altro symbolic link :
sudo ln -s llvm-gcc-4.2 gcc-4.2

a questo punto eseguendo l'installazione singola della Gem (occorre usare sudo) :
sudo gem install json -v 1.7.3

Viene compilato correttamente e anche il bundle install termina correttamente.


domenica 16 ottobre 2011

Installazione di Ruby via RVM

Per agevolare l'installazione dell'ambiente di sviluppo/runtime e' stato creato un tool molto utile, che facilita il procedimento.

Tramite RVM e' possibile scaricare e installare Ruby nelle varie versioni e soprattutto switchare in modo semplice dall'una all'altra.

Per installare RVM lanciare (vedere le istruzioni per installazioni MultiUser):
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
aggiungere poi la riga nel .bash_profile in modo da poter sfruttare rum da shell :

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" ' >> ~/.bash_profile
 a questo punto l'installazione e' terminata, quindi tramite :
rvm install (esempio : rvm install 1.9.2)
si esegue l'installazione di una nuova versione di ruby.

Per usare una versione si usa : rvm use
Per impostare una versione come default : rvm --default
Se si desiderare tornare alla versione installata con il sistema usare : rum system
Se si desiderare tornare alla versione di default usare : rvm default

MAC OSX Lion, problemi con Mysql da Ruby

Con riferimento al post del 3 aprile 2011, probabilmente dopo l'aggiornamento di Snow leopard a Lion, una serie di problemi tra Mysql e Ruby si sono ripresentati, questa volta in un'altra forma.

  Status: 500 Internal Server Error
  uninitialized constant MysqlCompat::MysqlRes

    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:466:in `load_missing_constant'
    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:106:in `const_missing'
    /Library/Ruby/Gems/1.8/gems/activerecord-2.3.11/lib/active_record/connection_adapters/mysql_adapter.rb:9:in `define_all_hashes_method!'
    /Library/Ruby/Gems/1.8/gems/activerecord-2.3.11/lib/active_record/connection_adapters/mysql_adapter.rb:68:in `mysql_connection'
per poter risolvere il problema ho lanciato i comandi (simile a quello del post precedente) :
sudo gem uninstall mysql
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

malgrado questi un'ulteriore errore e' apparso :

  dlopen(/Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
    /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require'
    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.11/lib/active_support/dependencies.rb:182:in `require'
per risolvere questo problema e' stato necessario lanciare :

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql-2.7/lib/mysql.bundle
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql-2.7/mysql.bundle

con questi passi il problema e' stato risolto.

domenica 3 aprile 2011

MAC OSX problemi con Mysql

Nel processo di spostamento da applicazioni sviluppate su Windows per portarle su MAC OSX, mi sono imbattuto nel ripristinare il funzionamento di varie applicazioni sviluppate in Ruby on Rails con Mysql.

Il primo problema che ho incontrato che non e' presente la Gem di Mysql, quindi il primo punto e' stato eseguire il "gem install" che pero' occorre lanciarlo in una particolare modalita'
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
a questo punto cercando di lanciare i comandi rake per la creazione del DB (rake db:create:all, rake db:migrate, rake db:seed etc..) incorrevo nell'errore :
uninitialized constant ActiveSupport::Dependencies::Mutex (NameError)
Questo problema e' risolvibile aggiungendo sul file boot.rb il require :
require 'thread'
non volevo pero' aggiungere un comando su un file che in teoria non andrebbe cambiato, quindi ho cercato altre soluzioni.
Ho aggiornato la gem rails da 2.3.5 a 2.3.11, tramite :
gem install rails -v 2.3.11
Cambiato il file environment.rb per utilizzare tale versione e aggiornata l'applicazione tramite :
rake rails:update
Malgrado questo il modulo mysql non funziona ancora e' stato necessario impostare una variabile di ambiente tramite :
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib 


a questo punto tutto funziona, ricevo un NOTE di qualcosa che e' diventato deprecato ma tutto funziona.

SourceIndex.new(hash) is deprecated; From /Library/Ruby/Gems/1.8/gems/rails-2.3.11/lib/rails/vendor_gem_source_index.rb:100:in `new'.

MAC OSX Beyond Compare

Mi capita spesso di utilizzare Beyond Compare su Windows per comparare strutture di Directory, adesso su MAC OSX ero alla ricerca di qualcosa di simile.

Il miglior prodotto gratuito che ho trovato e' : Diffmerge

Scaricabile all'indirizzo :  http://www.sourcegear.com/diffmerge

venerdì 1 aprile 2011

Mac OSX Apache - Forbidden su nuove pagine e risorse

Da poco tempo mi sono avvicinato al mondo Mac OSX, e sono alle prese con il "travasare" : documenti, siti e applicazioni sviluppate e create in ambiente Windows su ambiente Mac.

Spostando i vari siti sull'Apache gia' presente su Snow Leopard, al momento dell'apertura ricevevo un "Forbidden".

Su Internet la soluzione prevalente per la risoluzione del problema e' quella di cambiare httpd.conf per disabilitare il deny from all dalla direttiva .

Siccome non volevo modificare un impostazione di generale del server apache, ma volevo agire solo sulla parte lato utente (quindi sulla Root page che insiste su : "/Users//Sites"), ho risolto cambiando le impostazioni di sicurezza dei file da "-rwx------" a "-rwxr-xr-x" tramite il comando :

chmod -R uo+rx *

domenica 21 marzo 2010

Javadoc - plsqldoc

Una cosa delle molte cose su cui Java ha lasciato il segno e' la standardizzazione del modo di gestire la documentazione di utilizzo delle varie classi / interfacce e dei loro metodi, tramite Javadoc.

Molti altri linguaggi hanno adottato un approccio simile, anche Ruby ha il suo RDoc.

Anche per chi programma in Oracle Plsql, puo' appoggiarsi ad un tool che leggendo direttamente le informazioni su DB costruisce le API Reference.

Ci sono principalmente due progetti su questo argomento :
1) http://sourceforge.net/projects/plsqlutils/
2) http://pldoc.sourceforge.net/

Sono tutti e due progetti di qualche anno fa che non hanno avuto una loro evoluzione, anche se il primo sembra piu' "ufficiale", sul quale si appoggia anche un altro progetto "OraDoc", a mio avviso e' il secondo "pldoc" che risulta piu' immediato e maneggevole.
Una volta scaricato e' sufficiente eseguire il batch pldoc.bat (pldoc.sh) indicando il db e i package da leggere e sul percorso corrente (o specificato tramite -d) verranno creati i file html in puro stile Javadoc.
Un esempio di esecuzione e' :
  • pldoc.bat -doctitle testPLSQLDOC -d myfolder -url jdbc:oracle:thin:@mydbmachine:1521:mydbsid -user userx -password userxpassword -sql USERX.MYPACKAGE1,USERX.MYPACKAGE2
Attenzione : ad indicare sul parametro -sql l'utente/schema in maiuscolo altrimenti verra' rilanciato un errore di pacchetto non trovato.

La scrittura della documentazione deve essere fatta nello Spec del package e non nel body.

Se non si hanno troppe pretese, il tool funziona efficaciemente non possiede funzionalita' avanzate, come la possibilita' di trasferire via FTP la documentazione o un interfaccia GUI di gestione etc.. , ma se ne puo' fare tranquillamente a meno.

lunedì 8 marzo 2010

Rails - Controller Routing in Subdirectory

Al fine di razionalizzare e aggregare funzioni specifiche puo' essere utile far rispondere un determinato controller ad un webpath nidificato rispetto a quello normale.
Per fare questo e' sufficiente ci sono una serie di passi da effettuare :
  • creare un controller in subfolder della dir. controller (se desiderate tramite script/generate subfolder/controller, es. ruby script/generate admin/users ).
  • creare le view in un subfolder con lo stesso nome del subfolder.
  • se desiderate potete modificare il routing in routes.rb in modo da puntare la richiesta al nuovo percorso, tramite :
    map.connect 'subfolder/controller/:action/:id', :controller => 'subfolder/controller' o tramite il map.namespace.
Se siamo in presenza di un application layout o in ogni caso in cui occorra puntare al controller corretto indicare nel reference :controller :
  • "subfolder/controller" se si desidera puntare al controller nidificato.
  • "/controller" se si desidera puntare al controller in posizione root.

Utility - GIMP - dbp

Durante la costruzione di siti vetrina, capita di dover eseguire una serie di operazioni (ridimensionamento per i thumbnails, renaming, crop etc..),  su una grossa mole di immagini, per evitare di farne una ad una, esiste un plugin GIMP che viene in soccorso :

http://members.ozemail.com.au/~hodsond/dbp.html

L'interfaccia e' abbastanza spartana, ma efficace nel funzionamento.

Utility - Q-Dir

Spesso capita di avere a che fare con spostamenti, comparazioni, visualizzazione di files distribuiti su diverse directory ed e' cosi' che si inizia con qualche esplora risorse, aperto e si finisce con 10 e piu' finestre e via di interminabili ALT+Tab alla ricerca della finestra giusta.
Un utile strumento che ovviamente non risolve tutti i problemi, ma senza dubbio agevola l'utilizzo e' "Q-Dir" :

Tramite la visualizzazione contemporanea di piu' folder (fino a 4) e' possibile in modo agevole gestire i propri files.


domenica 7 marzo 2010

Ruby on Rails - Ambiente di sviluppo

Dopo il primo progetto costruito senza alcun ambiente di sviluppo, ma semplicemente da riga di comando e editor (cosa consigliabile per evitare di prendere per scontato in fase di apprendimento, concetti che l'uso di un RAD ti maschera), ho deciso di cercare un RAD che potesse un po' velocizzare lo sviluppo.
Abituato agli IDE per Java che, anche se molto potenti, sono sempre piu' invasivi nel progetto e spesso legati all'ambiente di runtime (vedi cartella nbproject di Netbeans, .settings di WebSphere, i vari xml di configurazione di Jdev per il deploy su OC4J), ho cercato per Ruby uno che potesse piu' possibile essere qualcosa di piu' di un semplice editor ad evitare il trauma nel caso di migrazione da RAD a RAD, dopo un po' di ricerche tra i prodotti, la mia scelta e' caduta su RadRails :

http://www.aptana.com/

anche se cerca di installare un po' di Gems utili al debug e altro, disabilitandole l'ambiente rimane pulito, sempre valido e funzionante da riga di comando o da altro RAD.
La piattaforma e' Eclipse e un solo file extra ".project" e' presente, sono presenti inoltre, in perfetto stile Eclipse, plugin di ulteriori funzionalita' quali l'aggancio a server di versioning, stile Subversion etc...

Errori Subdoli - 1 - warning: multiple values for a block parameter (0 for 1)

Mi sono imbattuto in questo errore o meglio warning visto che non mi creava problemi nell'applicazione :
  • C:/Sviluppo/Ruby/WorkSpace_Ruby/geotaggy/app/views/users/passwordforgotten.html.erb:3: warning: multiple values for a block parameter (0 for 1)
    from C:/Sviluppo/Ruby/Ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_view/helpers/capture_helper.rb:36
durante lo sviluppo non si presentava alcun problema, ma non appena fatto un functional test, sulla console si presentava (pur funzionando) questo messaggio.

Il problema era semplicemente dovuto alla presenza del parametro del blocco f sul form_tag sulla view, probabilmente dovuto alla trasformazione da un form_for.
  • form_tag(:controller=>"users" , :action=>"passwordforgotten") do |f|
Siccome si tratta di un form_tag non e' gestito il parametro quindi la sintassi corretta e'
  • form_tag(:controller=>"users" , :action=>"passwordforgotten") do

Della Serie "Errori Subdoli"

La serie riguarda tutti gli errori che per la loro natura "subdola" fanno perdere un sacco di tempo inutilmente.
Quante volte e' capitato di perdere 2 ore e poi accorgersi che il problema era una virgolina fuori posto...

martedì 2 marzo 2010

Rails Api

ci sono diversi siti dove e' possbile trovare le api di ruby e di rails, ma uno dei migliori per la ricerca e per i contenuti e' :

http://apidock.com

Rails I18N Traduzione Modello

Per tradurre il nome del modello e dei suoi attributi, inserire nel file locale ??.yml (es. it.yml), le traduzioni nei seguenti path :

Traduzione del modello :
  • "lingua".activerecord.models."modello"
esempio :
  • it.activerecord.models.user

Traduzione degli attributi :
  • "lingua".activerecord.attributes."modello"."attributo"
esempio :
  • it.activerecord.attributes.user.email

Dove :
"lingua" -> il prefisso della lingua (es. : it)
"modello" -> il nome del modello
"attributo" -> nome dell'attributo

Rails I18N Gestione Errori

Per gestire i messaggi di errore in lingua occorre aggiungere nel file ??.yml (es. it.yml), la traduzione nelle seguenti modalita' :
Traduzione codice di errore per ogni Attributo :
inserire la traduzione in questo path :
  • "lingua".activerecord.errors.models."modello".attributes."attributo"."tipodierrore"
esempio :
  • it.activerecord.errors.models.user.attributes.email.invalid
Traduzione codice di errore a livello generale :
  • "lingua".activerecord.errors.messages."tipodierrore"
esempio :
  • it.activerecord.errors.messages.invalid
Dove :
  • "lingua" -> Il prefisso della lingua (es.: it)
  • "modello" -> il nome della classe del modello.
  • "attributo" -> il nome dell'attributo.
  • "tipodierrore" -> codice di errore secondo lo standard rails (es. blank, too_short etc...)
Per la lista dei tipi di errore e per gli yml utilizzabili per ogni lingua e' possibile visitare il sito su GitHub :

domenica 28 febbraio 2010

Scopi di questo Blog

La finalita' di questo blog e' di condividere informazioni di carattere tecnico informatico quali :
  • Opinioni su siti
  • Opinioni su strumenti
  • Opinioni su tools di sviluppo/librerie etc..
  • Metodi di sviluppo
  • Best Practices
In modo piu' tecnico e veloce rispetto ad un articolo e/o recensione, presente sull'altro mio blog.