Closed cstrap closed 7 years ago
Non ho idea se una gemma possa essere una "pluggable app" per rails, ad esempio che si arrangia a fare tutto il giro di registrazione utente o qualche altra cosa, anche un CMS.
Sì, ad esempio devise fa proprio quello con i suoi controller e viste. Inizio ad aggiungere le tue prime osservazioni insieme ad esempi di creazione app Rails e Django con la commit master 01025ba
Brutto default indurre lo sviluppatore a mettere tutti i modelli insieme.
Per spacchettare il file models.py lo si fa diventare un package, riporto l'esempio di django-cms: https://github.com/divio/django-cms/tree/release/3.4.x/cms/models
Disquisivo sul default, che è mettere insieme tutti i modelli in un solo file: django in fondo crea un solo file models.py
per applicazione.
Ho aggiunto il tuo suggerimento nella commit master 967797d, più altre indicazioni.
Nota su implicit/explicit master e011d85
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#fatica
ma davvero si vuol pagare questo prezzo ogni singola volta?
Non capisco. Mancano degli esempi concreti.
E' una sensazione di fondo, un po' come quando da Python o Ruby passi a Java e scrivere codice diventa come camminare nell'acqua. Però credo che qua e là qualche esempio l'ho dato. Mi faccio una nota di spostare la considerazione dove sia più chiaro.
commit master 9e94b31
Per il linguaggio di templating, commit master 8155823 e commit master e3b2ef2
Modificata la sezione su init.py aggiungendo le spiegazioni fornite e l'equivalente Ruby. Spostato altrove il paragrafetto sui due punti.
Commit master 9611a08
Mi sfugge la necessità del concetto di package... vedi master ec4cc39 e anche l'esempio Ruby linkato poche righe sopra nel file, che risolve tutto con i moduli.
Sort e sorted: master 1e69e89
Iteratori e iteritems: la domanda era perché ci sia la necessità di scrivere iteritems(). Che altro potrebbe fare quel loop? :-)
La sezione forse andrebbe accorpata a quella dove scrivo dei generatori.
[master 12da6a1] Alcune fix temporanee su error reporting, split/join, spaziatura
[master 76e3bb3] Considerazioni ed esempio su spaziatura
Tuple: il buon Guido poteva trovare un altro modo di definire le tuple per evitare interferenze con le normali parentesi che raggruppano le espressioni :-)
Ad esempio Elixir usa le graffe e non va in conflitto con nulla.
[master 7c363a6] Nuove informazioni sulle interpolazioni di stringhe
Enum e simboli: master abdae2d
E con questo è completata la issue, ma la prossima volta apriamone una per ogni punto :-)
Tra l'altro le parentesi tonde possono essere creati anche i generators. Riguardo a iteritems mi sembra di aver risposto in altra issue, controllo. Personalmente ho smesso di dare importanza alla sintassi di un linguaggio, quindi mi stanno bene le scelte implementative di sintassi di Python, Ruby ed Elixir. È solo una questione di abitudine. Btw chiudo questa issue e ne aprirò un'altra.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#legacy
Parlo per Django, Web2py l'ho usato in passato, ma i concetti sono molto simili.
Le applicazioni, in Django, sono delle librerie che vanno ad arricchire il progetto. Tali applicazioni possono essere esterne o interne al progetto, utilizzando il file di requirements.txt. Tra l'altro anche le applicazioni sviluppate "internamente" potrebbero risiedere in un repository privato. Per Java c'e` maven central (o non mi ricordo come si chiama), giusto per far capire il concetto di libreria esterna. Chiaro, per Ruby ci sono le gemme. Non ho idea se una gemma possa essere una "pluggable app" per rails, ad esempio che si arrangia a fare tutto il giro di registrazione utente o qualche altra cosa, anche un CMS.
Il deploy lo fai con i sorgenti, anche se in Django potenzialmente hai la possibilita` di pacchettizzare il tuo progetto e installarlo come se fosse un package.
Direi di no, utilizzavo Java proprio in quel periodo e non vedo somiglianze, anzi...
Anche Django fa cosi
, non si fanno girare piu
applicazioni. Che poi la tua applicazione abbia tanti componenti (che guarda caso in Django si chiamano applicazioni) girano sempre sullo stesso server per un fine comune.Riassumo: applicazione Django == package Python == gemma Ruby. Joke: se fossimo in JavaScript avrei dovuto utilizzare
===
e in PHP====
:-DCome per django, se serve un'altra istanza del progetto lo si lancia con un altro interprete.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#il-deploy
Vero non esiste uno standard, esistono diversi package che automatizzano il processo di deploy, ad esempio fabric e Ansible.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#migrazioni-dry
Per spacchettare il file
models.py
lo si fa diventare un package, riporto l'esempio di django-cms: https://github.com/divio/django-cms/tree/release/3.4.x/cms/modelsAnche django lo puo
fare per creare i models, se il db esiste gia
, altrimenti django non edatabase-driven, quindi si scrivono i modelli e man mano il db viene arricchito. Se ROR e
ancora database driven, significa che lo sviluppatore dovrascrivere prima il db e poi iniziare a sviluppare, ecco, questo approccio a me, non e
mai piaciuto. Chiaro che mi affido totalmente alla bontadell'orm, nulla vieta ad andare a fare fine tuning sul db, ma l'orm di django e
sufficientemente potente e versatile da rendere il tuning prossimo allo zero (e dipende sempre da cosa stai sviluppando...)Esattamente quello che succede in django: ciascuna applicazione (che alla fine e` un package, quindi paragonabile ad una gemma Ruby) mantiene al proprio interno le migrazioni.
Qui sta allo sviluppatore, visto che ha la possibilita
di lanciare le migrazioni con un
--dry-rune vedere cosa succede. Sempre lo sviluppatore dovrebbe aver un sentore che qualcosa non va se un model e
sparito per caso :-)https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#import-automatico-vs-esplicito
E` una scelta, anche in Java si deve importare il mondo e anche in C, C++ e altri linguaggi :-D Non lo vedo un difetto, ma una scelta.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#fatica
Non capisco. Mancano degli esempi concreti.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#templating
A dire il vero si puo
utilizzare jinja, ma il template engine di django e
in grado di gestire le situazioni piu` comuni.La risposta e
che potresti preparare diversamente nel contesto la lista da mostrare, magari utilizzando le
namedtuple` Questo dipende molto dalla conoscenza del framework, ma anche della standard lib di Python.https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#alto-livello-vs-basso-livello
Qui e` spiegato molto bene: http://chimera.labs.oreilly.com/books/1230000000393/ch10.html
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#mixed-paradigm
Se usi un modulo si` non cambia, ma se usi un package qualcosa si rompe, vedi punto precedente.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#funzioni-predefinite
sort
eun metodo,
sortede
una funzione che accetta un iterable e puoi applicare anche una funzione di ordinamento. Quindi qualsiasi oggetto con un metodo__iter__
puo` essere ordinato con la funzione sort.https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#iteratori
Perche
in Python c'e
il concetto digenerators
che serve essenzialmente a non sprecare memoria, ma soprattutto "dealing with GIL".https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#error-reporting
In Python 3 le eccezioni sono piu` puntuali, non mi fermerei al framework.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#string-join-e-split
Le stringhe hanno il metodo
split()
ejoin()
, credo sia una questione di stile :-) Di nuovo, il metodojoin()
accetta un iterable, l'iterable potrebbe esser una lista di numeri, tuple ecc, che andranno opportunamente gestite per convertire i valori in stringa.https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#fatiche-di-sintassi
Parere personale, non credo arricchisca il vaolre della discussione.
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#la-spaziatura
Conta, come la scelta del tab, dei quattro spazi. Volendo puoi indentare il codice con uno spazio, l'importatne e` esser coerenti
Se il problema e
copiare o incollare in una REPL... allora ipython e
la soluzione.https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#do-end
Python obbliga lo sviluppatore ad indentare, questa critica e
sollevata da molti amici sviluppatori Java. De gustibus anche disegnare un linguaggio con spaziatura significativa, a mio avviso e
un punto di forza di Python.https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#la-virgola-che-non-si-vede
Sono tuple... e` questione di linguaggio :-)
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#interpolazione-di-stringhe
https://pyformat.info/
https://github.com/pmontrasio/rubynights-20170301/blob/master/ruby-python-elixir-reia.md#simboli
Si potrebbero usare gli enum