Tag: Fragments

SQLite in Ruby on Rails su OSX

Oggi il mio primo esperimento con SQLite su un progetto rails. Va oremesso che spulciando documentazione ho visto che SQLite sarà integrato come database di default per rails mettendo mysql come scelta opzionale.
Per prima cosa è necessario installare la gemma sqlite3

 sudo gem install sqlite3-ruby

Poi si deve configurare il proprio file database.yml

development:
  adapter: sqlite3
  dbfile: dev.db
test:
  adapter: sqlite
  dbfile: test.db
production:
  adapter: sqlite
  dbfile: prod.db

A questo punto basta sotto lib/task/ un rake db.rake tipo questo:

namespace :db do
  desc 'Inserire i dati default'
  task :install => [:environment, 'db:migrate'] do |t|
    sDbPath = "#{ ENV['RAILS_ROOT'] }/db"
    h = YAML.load_file("#{ ENV['RAILS_ROOT'] }/config/database.yml")
    hConnection = h[ENV['RAILS_ENV']]
     puts "-----"
     puts "eseguo sqlite3 ..."
    `sqlite3 -echo '#{ sDbPath }/#{ hConnection['dbfile'] }' < '#{ sDbPath }/i_miei_dati.sql'`
  end
end

Semplice, efficace, veloce!

SQLite in Ruby on Rails su OSX

Rails: dynamic constant assignment

I’ve got an error  yesterday night that made me loose some time…

<% @myObjects.each{|T| -%>
    <div><%= T.name %></div>
<% end -%>

This returns a compile error “dynamic constant assignment”
I disovered that Rails does expect lowercase names attributes so my T was incorrect

Same code lowercase does works…

<% @myObjects.each{|t| -%>
	<div><%= t.name %></div>
 <% end -%>
January 19, 2008
Rails: dynamic constant assignment

YAML esempi base


Elenco qui alcuni esempi elementari che mi sono stati utili per comprendere meglio la sintassi di YAML.
Più lo uso e più mi piace, è semplice, diretto e intuitivo. Lo uso anche, in maniera abbastanza anturale, quando prendo appunti su qualcosa che non necessariamente è informatico!

Nei miei esperimenti in un paio di lavoretti minori che realizzo in php, sto usando YAML come base dati o configurazione. La libreria (SPYC) che uso è semplice e comoda.

E ricordate: NIENTE TAB, usate SPAZI e la formattazione è tutto!

Commenti

--- # Un commento,      un commento in YAML comincia con il cancelletto
#Di seguito una semplice lista (Array)

- Matteo
- Marco
- Elisa

Array

--- # Array,        una lista può essere sviluppata tra parentesi quadre
# delimitando i valori con virgola e spazio

[milk, pumpkin pie, eggs, juice]

Hashes o Array associativi

--- # Un blocco di un array è composto da chiave: valore

nome: John Smith
anno: 1973

--- # Sviluppandolo in linea

{nome: John Smith, anno: 1973}

Testo

--- |  Un testo per essere messo
  su più righe, come un unico blocco
  non interpretato, comincia nella sua prima righa con
  una "pipe" (|)

Oppure

--- >  Questo lo
  possiamo considerare
  un paragrafo.

  Una linea vuota delinea
  un nuovo paragrafo

Un Array di Array

# In questo esempio abbiamo un Array di persone
# con due soggetti di cui sappiamo nome ed età:

- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27

Oppure un Array di liste che ha come chiave il sesso (men e woman)

men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams

facile facile!
comodo comodo!
(l’articolo da cui la maglietta!)

July 6, 2007
YAML esempi base

A tutto YAML!

Ho da poco scoperto YAML. E devo dire che mi piace veramente un sacco!
Bene, cosa è Yaml? E’ la versione umanamente leggibile di un XML. Svolge la stessa funzione: organizzare dei dati in un file di testo.

Da wikipedia la definizione esatta è:

YAML is a recursive acronym for “YAML Ain’t Markup Language”. YAML is a data serialization language that takes concepts from languages such as XML, C, Python, and Perl, as well as the format for electronic mail as specified by RFC 2822. YAML was first proposed by Clark Evans, and implemented by himself, Brian Ingerson and Oren Ben-Kiki.

Beh, oggi ho avuto necessità, per semplificare la vita ad un cliente, di usare YAML in un piccolo progetto web fatto in php e ho trovato una libreria che mi risulta molto comoda e quindi perchè non segnalarla!

http://spyc.sourceforge.net/

Interpreta in una riga di definizione della classe, i nostri file YAML.

March 30, 2007
A tutto YAML!

Esempi pratici di MySql

Ieri, in occasione di una goirnata di formazione con Joe Yates, ho preso un po’ di appunti sull’utilizzo base di MySql che magari possono risultare utili a chi si approccia a questo DB per la prima volta. E’ stato immaginato di dover creare un database di Film. Questo non vuole essere un tutorial; sono dei semplici appunti.

Le prove sono state fatte su una distribuzione live (Knoppix 5.0); in questo caso è stato necessario avviare il demone come utente “sudo -s”:

/usr/sbin/mysqld &

#1 l’elenco dei comandi

help
/h

#2 elenco dei database presenti sulla macchina

show databases

#3 creare un database

create database films;

#4 selezionare il database

use films u films

#5 creare tabelle (nome colonna – tipo di dato)

CREATE [nome tabella] ([nome campo] [tipo], [nome campo] [tipo], primary key([campo]));
CREATE films (titolo text, anno int); CREATE TABLE registi (id int auto_increment, nome text, cognome text, primary key(id));

il tipo di dato serve a definire che tipo di valore il db si aspetta nella query
può essere un campo testuale, o numerico, o binario ecc
auto_increment genera un campo progressvo
primary key(id) è il campo primario che non è duplicabile e viene controllato direttamente dal sistema.

text (si aspetta un testo lungo)
int (si aspetta un numero)

#6 elenco delle tabelle (se il db è stato precedentemente selzionato nel punto 4)

show tables

#7 per inserire un dato nella tabella

INSERT INTO [tabella] VALUES ([valore colonna 1], [valore colonna 2]);
INSERT INTO [tabella] (colonna3, colonna2, colonna1) VALUES ([valore colonna 3], [valore colonna 2], [valore colonna 1]);
INSERT INTO films VALUES ('pupl fiction', '1994');

se si inserisce una riga senza valori es: insert into films values ();
di default vengono inseriti tutti NULL
NULL non è uno zero e non è nemmeno un campo vuoto del tipo ”
NULL è un valore particolare che vale NULL
Questo vale nei sistemi “seri” tipo postgres, oracle ecc. Mysql converte una stringa vuota ” in NULL

# Se è settato una primary key e un autoincrement non è necessario indicare l’id nell’insert

mysql> INSERT INTO registi (nome, cognome) VALUES ('alfred', 'hitchcok');

in questo caso l’id è asseganto dal sistema am devo indicare quali campi corrispondono ai valori.#8 per visualizzare i record inseriti

SELECT * FROM films;

#9 per eliminare una tabella o un db

DROP table films; DROP database films;

#10 per cancellare record

DELETE FROM [tabella] WHERE [campo]=[valore]; DELETE FROM films WHERE anno=1994; DELETE FROM films WHERE anno is NULL;

#11 modificare i record

UPDATE [tabella] SET [campo]='[valore]' WHERE [campo]=[valore]; update regiti set nome='albert' where id=1;

#12 sapere quale è il massimo valore, tipo per l’id

mysql> SELECT max(id) FROM films;
+---------+
| max(id) |
+---------+
|       1 |
+---------+

Questo sistema può creare “atonicità” negli inserimenti. Non c’è garanzia di ribeccare ciò che hai inserito nel caso che due query agiscono in maniera contemporanea. La cosa si risolve in altri sistemi con le “stored procedure”.

# FOREGIN VALUES
——————————————————————————————-
# Abbiamo due tabelle, films e registi

mysql> SELECT * FROM films;
+------+------------+---------+------+
| id   | id_regista | titolo  | anno |
+------+------------+---------+------+
|    1 |          1 | le iene | 2004 |
+------+------------+---------+------+
mysql> SELECT * FROM films;
+------+------------+---------+------+
| id   | id_regista | titolo  | anno |
+------+------------+---------+------+
|    1 |          1 | le iene | 2004 |
+------+------------+---------+------+

# rendiamo collegate due tabelle;

SELECT * FROM [tabella] INNER JOIN [tabella2] ON [tabella1].[colonna]=[tabella2].[valore];

seleziona tutto dalla tabella films fai unione interna a registi in cui film.regista è uguale a registi.id

mysql> select * FROM films INNER JOIN registi ON films.id_regista=registi.id;
+------+------------+---------+------+------+---------+-----------+
| id   | id_regista | titolo  | anno | id   | nome    | cognome   |
+------+------------+---------+------+------+---------+-----------+
|    1 |          1 | le iene | 2004 |    1 | quentin | tarantino |
+------+------------+---------+------+------+---------+-----------+

#per evitare al riondanza di campi e flusso dati

mysql> SELECT films.id, films.id_regista, films.titolo, registi.nome, registi.cognome FROM films INNER JOIN registi ON films.id_regista=registi.id;
+------+------------+---------+---------+-----------+
| id   | id_regista | titolo  | nome    | cognome   |
+------+------------+---------+---------+-----------+
|    1 |          1 | le iene | quentin | tarantino |
+------+------------+---------+---------+-----------+

# oppure, dato che mysql seleziona le colonne se sono univoche tra 2 tabelle

mysql> SELECT films.id, id_regista, titolo, nome, cognome FROM films INNER JOIN registi ON films.id_regista=registi.id;
+------+------------+---------+---------+-----------+
| id   | id_regista | titolo  | nome    | cognome   |
+------+------------+---------+---------+-----------+
|    1 |          1 | le iene | quentin | tarantino |
+------+------------+---------+---------+-----------+

#possiamo fare selezioni con una determinata condizione. In questo caso vogliamo i film dell’anno 2004

mysql> SELECT films.id, id_regista, titolo,anno, nome, cognome FROM films INNER JOIN registi ON films.id_regista=registi.id WHERE anno=2004;
+------+------------+---------+------+--------+-----------+
| id   | id_regista | titolo  | anno | nome   | cognome   |
+------+------------+---------+------+--------+-----------+
|    1 |          1 | le iene | 2004 | albert | tarantino |
+------+------------+---------+------+--------+-----------+
July 4, 2006
Esempi pratici di MySql