Bash secret powers

This entry is part 2 of 2 in the series Unix swissknife

Bash scripting has evolved a lot in the last ten years.

I get used to relay on bash for all normal “data domination” tasks (like file system refactorings, database extraction and reporting and so on) and switching to python/ruby/perl when the complexity gets bigger. I didn’t imagine bash is even more powerful :) This article by Robert Muth so you new nice tricks: I  add here some other like mapfile and stress the most important one.

Update2016:Last but not least,if you do now know about bash history, this link will teach you a huge set of tricks

Continue reading “Bash secret powers”

How I Structure My Flask Applications

How I Structure My Flask Applications Flask has been my preferred web framework as of late. I think it has a great core feature set and Armin, the main author, has done well to keep its API minimal and easy to digest even for developers that are relatively new to Python. However, given that it is a rather minimal framework, it can be often difficult to decide on how to structure an application after it reaches a certain level of complexity. It tends to be a common question that comes up in the #pocoo IRC channel.In this article I intend to share how I structure Flask applications. To help support this article Ive written a very basic application that Ive arbitrarily named Overholt. If you plan on following along I recommend having the source code open in your browser or a code editor.

via How I Structure My Flask Applications.

Tool Command Language: il papa’ di Java

E’ notizia fresca di stampa il rilascio di Tcl 8.6, che introduce parecchie novità a dispetto del fatto che sia una “minor” release.

 

In particolatre Tcl 8.6 introduce un motore “stackless”, integra nel linguaggio le estensioni OOP, ed aggiunge le coroutine.

Parliamo quindi diffusamente di Tcl, un linuaggio che ho sempre trascurato perché mi sembrava macchinoso e un po’ brutto/fatto  male…ma mi sono dovuto ricredere.

Continue reading “Tool Command Language: il papa’ di Java”

Da Python a Ruby o vicerversa

Preludio

L’ultima volta che ho provato Ruby è stato nell’aprile del 2005. Avevo sviluppato un paio di progetti di test in RubyOnRails, che allora era già produttivo. Ruby era affascinante, ma la libreria base mi sembrava ancora in stato embrionale e lo abbandonai. RubyOnRails non mi è mai sembrato avesse un vantaggio competitivo rispetto a framwork come CakePHP o Python Django.

(dis)Amore per Python

Per molto tempo ho utilizzato Python sia per sviluppare piccole utility di supporto che per i miei progetti personali. Python 2.5 ha una libreria base molto ampia. Purtroppo però Python ha sofferto ultimamente di alcuni limiti

  1. Python 3 è una barca che è partita senza passeggeri. Dopo Python 2.5 sono stati rilasciate ben due versione di traghettamento (Python 2.6 & 2.7) ma l’obiettivo di portare gli sviluppatori verso Python 3, ma senza molto successo.
  2. Contrariamente ad altri linguaggi, Ruby consente di eseguire ridefinizioni al volo di qualsiasi cosa: metodi, moduli, classi, ecc. Per cui è difficile capire “cosa è successo” se si incappa in librerie che fanno allegre ridefinizioni. Ma questo problema non è risolto da Python che soffre degli stesi svantaggi…e nemmeno da Java, tanto che nessuno con un po’ di sale in zucca installa sullo stesso application server più di una applicazione web.
  3. Benché sia Python che Ruby non abbiano forti tool per la programmazione funzionale, la libreria di Ruby fa molto uso di lambda functions (‘blocks’) rispetto a Python, che invece non sfrutta molto questa potente feature. Il risultato è che Ruby di questi tempi ha molto più appeal funzionale di Python, nonostante non dovrebbe, a detta di alcuni e anche di altri.
  4. Ruby ha built in alcune facility come il supporto a un sistema di comunicazione distribuito (distributed Ruby) che Python ha acquisito solo ultimamente con librerie come pyro.
  5. Apparentemente, in Ruby la gestione degli encoding è migliore. Python 2.x mi ha dato parecchi problemi su questo fronte e anche Python 3 non sembra aver migliorato la situazione, almeno a detta di sviluppatori esperti. In particolare Python 2.x è risultato parecchio schizzinoso sugli encoding anche di chiamate xmlrpc, mentre dopo una iniziale confusione in Ruby 1.8, la versione 1.9 supporta bene utf-8, come leggiamo in questa serie di articoli.
  6. Ho trovato estremamente più facile effettuare connessioni SSL via proxy http in Ruby, riuscendo anche ad ignorare la validazione dei certificati SSL. In Python questo risulta impossibile o molto macchinoso.
  7. Nascendo come una evoluzione di Perl, Ruby ha un supporto built-in per le espressioni regolari, ma il codice è mediamente più leggibile dell’equivalente in Perl.

Da Python a Ruby: tools

Come in Python, in Ruby esistono parecchi tool isomorfi. Ecco uno specchietto sia per chi vuole passare da Ruby a Python, che vicerversa

 
Python Ruby Note
virtualenv rvm
distutils gem In Python esistono due sistemi (pip e easy_install) e troppi modi di creare un package
pyro (rmi-like) drb incluso in ruby RMI-like library
gevent Eventless (embrionale?) Librerie per implementare I/O non bloccante
django RubyOnRails Ruby è sinonimo di RubyOnRails, nel senso che è molto usato nell’ambito web
sphinx yard Tool di documentazione evoluto

Trends

Python è usato in prodotti commerciali del calibro di DropBox, ma anche RubyOnRails è usato in parecchi siti in produzione. Il Google Trend da’ una leggera preferenza a Python, ma per il resto i due linguaggi sono quasi alla pari. Scegliete quello che vi piace di più, ma imparateli entrambi!

(How to Write a (Lisp) Interpreter (in Python))

I like a lot of programming languages. I do not love them with the same intensity.

I do not love Lisp for its ((syntax))), but Lisp rocks for its purity: in a tiny bag of concept, you get a lot of stuff.

This article, (How to Write a (Lisp) Interpreter (in Python)) show you how it is easy to write a lisp interpreter in python. It is 113 lines of code, and include the parser the executor and the basic functions to get started.

To try it out issue

python -i lis.py
And at the prompt:

repl();