Tempo addietro ho forkato Mojolicious su github per commitare un’implementazione.
Col tempo, il mio repo forkato è rimasto indietro e volendo proporre una nuova modifica avevo necessità di allinearmi con il repository di Kraih.
Così…
$ git remote add –track master kraih git://github.com/kraih/mojo.git
$ git fetch kraih
$ git merge kraih/master
$ git remote set-url origin git@github.com:simotrone/mojo.git
$ git push
Info raccolte da qua.
PS: Ma possibile che non ci sia un pulsantino comodo su github per aggiornare i fork… bah.
Alcune specifiche che vorrei tenere raccolte (pur tenendo conto che il protocollo è estensibile).
Header generici per un messaggio http.
- Cache-Control
- Connection
- Date
- Pragma
- Trailer
- Transfer-Encoding
- Upgrade
- Via
- Warning
Header specifici per request.
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Authorization
- Expect
- From
- Host
- If-Match
- If-Modified-Since
- If-None-Match
- If-Range
- If-Unmodified-Since
- Max-Forwards
- Proxy-Authorization
- Range
- Referer
- TE
- User-Agent
Header specifici per response.
- Accept-Ranges
- Age
- ETag
- Location
- Proxy-Authenticate
- Retry-After
- Server
- Vary
- WWW-Authenticate
Metodi per request.
- OPTIONS
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
- CONNECT
Entity header relativi l’entity body o alla risorsa richiesta. Possono essere aggiunti ai messaggi http.
- Allow
- Content-Encoding
- Content-Language
- Content-Length
- Content-Location
- Content-MD5
- Content-Range
- Content-Type
- Expires
- Last-Modified
“Le mazzette le prendono anche in Spagna e Francia, però hanno il senso della misura”.
Mi pareva divertente…
E non mi invento niente… LightDM
LightDM is an X display manager that aims to be light, fast, extensible and multi-desktop.[1] It uses a WebKit backend to draw HTML-based login interfaces
E’ leggero e veloce… con WebKit come backend. Se, vabbè.
21:02 < cls> ubuntu-like people always have a weird view of what's light
and what isn't.
Orco mondo… qui onestamente… cadono le braccia.
Direttamente dal Miur… http://www.istruzione.it/web/ministero/cs230911 (no, non lo linko… ve lo copiate nel browser…)
Ufficio Stampa
Roma, 23 settembre 2011
Dichiarazione del ministro Mariastella Gelmini
“La scoperta del Cern di Ginevra e dell’Istituto Nazionale di Fisica Nucleare è un avvenimento scientifico di fondamentale importanza.”Rivolgo il mio plauso e le mie più sentite congratulazioni agli autori di un esperimento storico. Sono profondamente grata a tutti i ricercatori italiani che hanno contribuito a questo evento che cambierà il volto della fisica moderna.
Il superamento della velocità della luce è una vittoria epocale per la ricerca scientifica di tutto il mondo.Alla costruzione del tunnel tra il Cern ed i laboratori del Gran Sasso, attraverso il quale si è svolto l’esperimento, l’Italia ha contribuito con uno stanziamento oggi stimabile intorno ai 45 milioni di euro.
Inoltre, oggi l’Italia sostiene il Cern con assoluta convinzione, con un contributo di oltre 80 milioni di euro l’anno e gli eventi che stiamo vivendo ci confermano che si tratta di una scelta giusta e lungimirante”.
No, non pretendo che tutti sappiano come funzionano le radiazioni, ecc. ecc. No problem su questo.
Ma… cazzo… proprio “un tunnel [...] attraverso il quale si e’ svolto l’esperimento” dovevano dire?
Ora ho capito perchè i neutrini vanno così veloci… c’hanno la strada spianata.
Smanettando con l’OOP in Perl mi capita di appoggiarmi a Moose/Mouse per una serie di comodità legate al constraint check del tipo, getter/setter automatici, ecc. – non apprezzo particolarmente i framework complicati, ma sicuramente ci sono contesti in cui li trovo comodi.
Avendo creato una classe con un attributo che conteneva un array di altri oggetti, stavo pensando a come gestire eventuali duplicati dei contenuti che non volevo. La situazione era più o meno così:
use Mouse;
use Player;
has ‘players’ => (
isa => ‘ArrayRef[Player]‘,
is => ‘rw’,
default => sub {[]}
);
before ‘add_player’ => sub {
my ($self, $passed_player) = @_;
# wanna check
};
sub add_player {
my ($self, $passed_player) = @_;
push @{$self->players}, $passed_player;
return $self;
}
sub add_players {
my ($self,@wannabe_players) = @_;
$self->add_player($_) for (@wannabe_players);
return $self;
}
#…
Nel before era mia intenzione mettere un check per controllare ed evitare i duplicati (controllo dell’elemento passato rispetto alla lista dei presenti).
La cosa in teoria sarebbe pure possibile, peccato che non ci sia modo di interrompere il flusso – quindi chiamato add_player che fa scattare il before che viene elaborato, non c’è modo di interrompere l’azione intrapresa: unica soluzione che mi era venuta in mente era fare un unshift che seguisse il push in caso di record già presente con un after (poco elegante, ma efficace).
Fatto sta che dopo una breve indagine mi è stato consigliato Set::Object che “This module implements a set of objects, that is, an unordered collection of objects without duplication.”.
La mia classe è diventata molto più snella:
use Mouse;
use Set::Object;
use Player;
has ‘players’ => (
isa => ‘Set::Object’,
is => ‘rw’,
default => sub { Set::Object->new() },
handles => {
add_player => ‘insert’,
add_players => ‘insert’,
}
);
#…
e in più sono agevolato da alcuni metodi di S::O particolarmente utili (come size, insert, e altri) – e infatti delego con handles senza vergogna.
In effetti devo ancora vedere se fa tutto quello che vorrei, ciò nonostante è una chicca.
Odio i framework per lo svilupppo web facilitato. Non tutti, solo molti. Non è colpa loro, è colpa mia.
Tutte le volte che qualcosa dovrebbe aiutarmi, permettermi di sviluppare più veloce, e cose del genere, mi ritrovo in una marea di guano incomprensibile.
Joomla, Drupal… tutti fichissimi, hanno idee bellissime (CCK, Views), ma io non mi ci trovo.
E secondo me neanche altri, anche se le usano… Ho visto (tanti) siti fatti con ‘sti cosi
- che mostravano le chiavi primarie dei record
- che manco nascondono il logo
- che c’hanno milioni di pagine vuote, che non ho capito se i path sono di default e poi uno li deve riempire…
Sarà che io le mie cagate provo a farmele un byte alla volta con roba tipo Catalyst, Mojolicious, Perl CGI e pure in PHP… prima la struttura con le sue funzioni, poi i css, poi javascript…
Ci metto una vita, lo so. Non sono uno che sviluppa in fretta, in nessun caso.
Magari ci metto un paio di giorni a tirare fuori qualcosa che altri han già pronto.
Ma non mi piace un sito buttato lì – che va “a mezzo” con delle costrizioni legate a chissà che.
Lo so che c’è gente che da ‘sti cosi ci tira fuori prodotti coi controfiocchi, semplicemente io non sono in grado (per ora). E non mi piacciono.
So che la lentezza è un difetto in questo mondo frenetico in cui l’idea deve essere sviluppata prima che un giro della ventola sia compiuto, ma io non ci riesco.
E poi son leeenti. Mazza quanto sono lenti. Per elaborare una pagina sembra che debbano rispedire l’Endeavour nello spazio.
Io ogni tanto ci provo, ma non riesco.
Come quando tento di mangiare di nuovo i peperoni, anche se so che non mi piacciono. Ci provo, poi mi viene il vomito, e penso a quanto son scemo.
Ed è così che nasce l’odio fra me e la robba pre-fatta, come Drupal.
PS: Sì, anche WordPress ci starebbe lì in mezzo, ma WP è abbastanza straight da funzionare senza beghe se non si hanno pretese: “Vuoi un blog?” WP funzia. Basta. E fa il blog.