Archive for category Prosa

We are closed

Come forse qualcuno sa già, Prosa sta chiudendo i battenti.

Molti mi hanno chiesto perché e tanti (li ringrazio) si sono pure offerti per cercare di fare qualcosa. Non ho intenzione, ne voglia, di spiegare tutti i motivi che hanno portato a questa decisione ma almeno un post dovevo dedicarlo a questa cosa.

Il tutto è nato da miei problemi di salute (grazie, ma sono in via di guarigione), quindi un forzato minor coinvolgimento in Prosa e da li’ sono scattate tutta una serie di decisioni che probabilmente avremmo dovuto prendere tempo fa.

Il risultato rimane lo stesso: l’idea di avere un business basato esclusivamente sul software libero e che anteponesse il servizio al profitto (vedi “Piedone il finnico“), non ha funzionato.

Non che non possa funzionare in generale, io ne rimango convinto, ma le possibilità sono decisamente esigue e l’Italia, purtroppo, non è l’ambiente ideale per queste “imprese” (nota il doppio senso); vuoi per la mancanza di cultura informatica, vuoi per la convinzione che si faccia tutto solo per i soldi, vuoi per la burocrazia del sistema fiscale che impedisce di concentrarsi sulla propria attività.

Sarei pronto a scommettere che in altri paesi, potrebbe funzionare, anche se credo non funzionerebbe mai in una scala tale da poter essere considerato un caso d’esempio da qualche economista.

Fatto sta che noi stavamo sopravvivendo: economicamente non in rosso certo, ma sempre sulla soglia della sopravvivenza, con il risultato che per il software libero stavamo facendo ben poco o nulla, presi dalla necessità di pensare a tutt’altro.

Questo il motivo finale percui abbiamo deciso di chiudere: non ne valeva la pena.

Con questo post mi permetto, infine, nuovamente di ringraziare tutti quelli che appena saputa la notizia, hanno voluto fare sentire la propria solidarietà e hanno offerto aiuto: non finirò mai di stupirmi dell’affetto che ha sempre circondato Prosa. Grazie.

No Comments

Proge

Non mi avete più sentito parlare di PROGE, vero? Beh, perché è in completa riscrittura, quindi tutto il lavoro che ci stiamo facendo sopra in realtà ha prodotto al momento un gran casino. Speriamo di finire presto questa riscrittura e poter rilasciare una nuova versione il mese prossimo …

No Comments

Cerchiamo sviluppatore

Stiamo cercando per Prosa, uno sviluppatore web 2.0, con possibilmente conoscenze di Ruby on Rails o almeno l’intenzione di impararlo. Qualche conoscenza base di database, di networking e di sistemistica di base, costituiscono nota di merito.

Interessa soprattutto che abbia molta voglia di imparare, anche cose non strettamente informatiche, voglia di mettersi in gioco e una passione smodata per il mondo del software libero.

Se si preferisce telelavorare, per noi va benissimo, basta sapere collaborare bene con i classici strumenti che si usano nei progetti liberi (da IRC, a mailing-list, da subversion a wiki, etc.) e essere disponibili a spostarsi quando il cliente lo richiede.

La richiesta, ce ne rendiamo conto, è vaga, ma l’esigenza è vaga. Ci serve una mano nel lavoro e per fare qualche ricerca qua e la’ su nuove tecnologie. Se qualcuno è interessato, mi contatti (paci chiocciola prosa . it).

, ,

No Comments

Currency e globalize

Proge, il semi-quasi-gestionale in ruby on rails che sto cercando di scrivere, deve ovviamente gestire dei campi monetari; basta pensare all’ammontare di una fattura, o alla registrazione in contabilità di un movimento. Dato che sto usando il plugin globalize per l’i18n dell’applicazione (anche se al massimo, la userò solo io :-) ), ho pensato di avere il campo monetario localizzato a sua volta.

La documentazione mi ha un po’ tratto in inganno, percui lascio un paio di appunti sul blog a futura memoria e sperando che possano essere d’aiuto anche a altri.

Quello che volevo fare era avere un campo “price” salvato sul database come integer (sul perché è un male gestire queste cose con un float, c’è parecchia documentazione in giro) e che potesse essere gestito con la localizzazione.

Nel modello dell’oggetto, chiamiamolo nell’esempio “prodotto”, la documentazione dice di aggiungere:

composed_of :price, :class_name => “Globalize::Currency”, :mapping => [ %w(price cents) ]

Quando in una view farò <%= @product.price %> questo mi verrà visualizzato opportunamente localizzato.

E fin qua è facile. Il problema era che non capivo come salvare quel campo, lasciando libero l’utente di inserire un valore nel campo price seguendo le convenzioni della locale impostata. Insomma, se sono italiano, voglio essere libero di inserire 6,52 per esperimere 6 euro e 52 centesimi, e inserire 7.64 per inserire 7 dollari e 64 centesimi se sono americano: il controller dovrà salvare rispettivamente 652 e 764 nel database.

Nella view del classico _form.rhtml avrò l’ancora più classico:



<%= text_field 'pp', 'price' %>

Mentre nel controller, avrò:

@product.price = Currency.parse(@params[:pp][:price]).cents

In pratica devo fare il parsing del valore passato nel form, tramite la funzione della classe Currency e dovrò poi prendere l’attributo cents; dalla documentazione questo non era chiaro, sembrava che parse avrebbe fatto tutto, invece leggendo il codice ho capito dove stava l’inghippo.

Ah, infine, affinché il parse funzioni con qualsiasi locale bisogna patchare globalize con questa patch, altrimenti lui capisce solo valute americane.

, ,

No Comments

preview per Freego

Da quando uso Typo per il blog, mi sono abituato alla preview: quando sto inserendo un articolo, questo viene visualizzato “al volo” così come dovrebbe apparire nel blog.

Ho pensato, quindi, di aggiungerlo a Freego, che essendo scritto in Ruby on Rails mi facilita il “porting” di questa feature. Tra l’altro su Freego mi torna utile: le news che inserisco li’, infatti, sono spesso piene di link e non ci si accorge di errori sull’html se non visualizzando la news già salvata.

Aggiungere la preview di una news (o qualsiasi altra cosa simile) è stato molto semplice.

Nella view news/new.rhtml ho aggiunto (partendo dallo scaffold):

<%= javascript_include_tag :defaults %>

Il start_form_tag ora ha un id, per poterlo identificare:

<%= start_form_tag ({:action => 'create'}, :id => 'form_edit_news') %>
  <%= render :partial => 'form' %>
  <%= submit_tag "Invia" %>
<%= end_form_tag %>

Poi ho aggiunto una chiamata AJAX:

<%= observe_form "form_edit_news",
                    :frequency => 3.0,
                    :update    => 'ajaxWrapper',
                    :loading_text => "Retrieving data...",
                    :complete  => "Element.hide('spinner')",
                    :before    => " Element.show('spinner')",
                    :url       => {:action=>'preview', :o nly_path => false} %>

Questa chiamata controlla modifiche al form per l’editing della news, ogni 3.0 secondi, e aggiorna l’elemento ‘ajaxWrapper’, chiamando l’azione ‘preview’. Quello che segue è l’elemento ‘ajaxWrapper’, che tramite un partial rende la preview della news.

<div id='ajaxWrapper'>
<%= render :partial=>'preview', :o bject => @new_news, :layout => false %>
</div>

Piuttosto banale, eh? Qui ho descritto solo le parti fondamentali; se qualcuno vuole proprio vedere il codice intero, ricordo che Freego è GPL.

, ,

No Comments

Proge, globalize

Oggi ho aggiunto a Proge, il “gestionale” di cui parlavo alcuni giorni fa che sto sviluppando con Ruby On Rails, il supporto per l’internazionalizzazione. In realtà non ho fatto molto, dato che come al solito in Ruby On Rails è sufficiente installare un plugin e iniziarlo a usarlo. Giusto mentre lo stavo usando, è uscito un articolo in italiano a tal proposito su therubymine.com.

Proge comincia a avere la sua consistenza e gestisce ad oggi (più o meno correttamente :-) ):

  • clienti/fornitori
  • prodotti e servizi
  • registrazione fatture attive e passive
  • categorie (di prodotti, servizi o altro)
  • progetti e ticketing system con priorità
  • movimentazione merci, carico, scarico, trasferimenti
  • lotti/partite di merci, in acquisto e vendita
  • magazzini/porti, vettori e altro utile alla movimentazione merci

Il tutto senza aver scritto quasi una riga di codice. Dico quasi, perché la situazione di magazzino non sono riuscito a farla senza.

Pur avendo detto che magazzini has_many :lotti, :through quantità, non sono riuscito a fare qualcosa tipo Magazzino.quantità.sum(:group quantità) e ho dovuto farmi un find_by_sql a mano. Amen.

,

No Comments