2007-11-22

nuovo blog

il mio nuovo blog è qui

my new blog it's here

2007-10-26

polverizzati 2000 anni di filosofia

questo articolo è stato recuperato dal mio vecchio sito

Scritto da Dam
sabato 22 aprile 2006
Poche, semplici, quasi stupide righe di una canzone hanno polverizzato 2000 anni di filosofia.

Imbarazzante ;)
(G.Curreri, S.Grandi, V.Rossi - V.Rossi, S.Grandi)

Voglio trovare un senso a questa sera
Anche se questa sera un senso non ce l’ha

Voglio trovare un senso a questa vita
Anche se questa vita un senso non ce l’ha

Voglio trovare un senso a questa storia
Anche se questa storia un senso non ce l’ha

Voglio trovare un senso a questa voglia
Anche se questa voglia un senso non ce l’ha

Sai che cosa penso
Che se non ha un senso
Domani arriverà...
Domani arriverà lo stesso
Senti che bel vento
Non basta mai il tempo
Domani un altro giorno arriverà...

Voglio trovare un senso a questa situazione
Anche se questa situazione un senso non ce l’ha

Voglio trovare un senso a questa condizione
Anche se questa condizione un senso non ce l’ha

Sai che cosa penso
Che se non ha un senso
Domani arriverà
Domani arriverà lo stesso
Senti che bel vento
Non basta mai il tempo
Domani un altro giorno arriverà...
Domani un altro giorno... ormai è qua!

Voglio trovare un senso a tante cose
Anche se tante cose un senso non ce l’ha

onore al venturin.net

questo tool è bellissimo: fa una serie di snapshots dei siti web di tutto il mondo e ne mantiene una cronologia. non funziona perfettamente (e ci sono un sacco di validi motivi tecnici per giustificare questi malfunzionamenti) ma mi piace comunque.

ad es. mi ha permesso di ricordare che la prima edizione di venturin.net risale al 2002

http://web.archive.org/web/*/http://www.venturin.net

itinerario per i Navigli

questo è un articolo prelevato dal mio vecchio sito

Scritto da Dam
martedì 02 agosto 2005
probabilmente non interessa a nessuno ma serve a me per imparare le strade.
questo è l'itinerario per arrivare ai navigli dall'autostrada senza passare per la tangenziale est
PERCORSO
in auto:
autostrada -> viale De Gasperi -> via Elia -> Piazzale Lotto -> viale Migliara -> viale Murillo -> Viale Ranzoni -> viale Bezzi -> viale Misurata (standa) -> viale Foppa (suzuki) -> viale Papiniano -> p.ta Genova -> parcheggio

CMS - WPF e case study

questo è un articolo prelevato dal mio vecchio sito

Scritto da dam
domenica 14 agosto 2005
CMS - WPF : Content Management System e Web Publishing Framework. Sono sistemi di editing che oggi sono oggetto di continuo sviluppo. Offrono incredibili possibilità specialmente alle aziende. Ma danno anche parecchi grattacapi. Questo è il contesto che sto studiando maggiormente in questo periodo. Di seguito illustrerò ciò che sto ricercando.

NOTA INTRODUTTIVA
Tra i CMS Mambo risulta essere molto completo. Questo sito è fatto con Mambo. Questo sito rappresenta un modo per conoscere meglio Mambo e i limiti che ha.
Tra i WPF Apache Forrest mi da particolari soddisfazioni.
Il problema è che prima di dire che qualcosa è soddisfaciente, bisognerebbe capire quali esigenze soddisfa.
Gli assidui utilizzatori di Mambo probabilmente pensano che Mambo sia perfetto praticamente per tutto. Infatti è dotato di una quantità di moduli e funziona piuttosto bene. Ha anche un buon numero di temi che appagano l'occhio.
Proprio per sintetizzare io penso che Mambo sia perfetto per gestire un sito web che vive on line.

AMBIENTE
Immaginiamo però un'azienda, ammettiamo uno studio associato di architetti. Il loro lavoro consta principalmente in:
  1. pubbliche relazioni, con questo intendo contatti con i clienti, con colleghi, con partner, con fornitori
  2. progettazione e documentazione, generata digitalmente con vari strumenti e i vari formati.
Se lo studio vuole produrre un semplice sito web allora Mambo è perfetto. Ma ammettiamo invece che voglia generarsi un framework per il lavoro di gruppo. Beh qui le cose cambiano radicalmente. Mambo a mio parere non basta più.

ESIGENZE
Quali sarebbero le esigenze per il framework?
Immagino queste: (se ci sono architetti all'ascolto si facciano avanti)
  • condivisione di documenti di ogni tipo:
    • doc. di tipo office
    • doc. in html
    • pdf
    • immagini
    • progetti autocad
    • documenti protocollati (generalmente anch'essi pdf)
  • archivio per la consultazione delle leggi e delle normative
  • ambiente di produzione delle procedure aziendali
  • archivio per la consultazione delle procedure aziendali
  • agenda dell'ufficio o del gruppo di lavoro (todo list)
  • calendario dell'ufficio o del gruppo di lavoro
  • gestione di progetti
  • software per la parcellazione
probabilmente sarebbero anche graditi:
  • interfaccia di consulatazione della posta
  • archivio della posta compresa quella in carta digitalizzata
  • archivio dei fax in entrata ed in uscita




Naturalmente il framework dovrebbe essere fruibile attraverso browser per un possibile uso anche al di fuori della rete aziendale. Questo soprattutto per possibili estensioni future (es. sede delocalizzata, accesso di partner, oppure accesso alle risorse anche dalla spiaggia di Rimini [sembra che oggi tutti vadano in vacanza per lavorare dalla spiaggia! si vede che a loro non entra la sabbia nei rasamenti delle ventole di raffreddamento e che rioscono ad ignorare agevolmente i bikini o i monokini])

Il tutto dovrebbe essere usabile da persone che abbiano una conoscenza media del pc (che tradotto in termini informatici equivale a: persone che sanno accendere il pc)

Un ambiente di lavoro come questo è molto più simile a Workplace della IBM che non a un CMS.
Estendere Mambo sino a coprire tutte le necessità significa altrerare completamente la sua natura di CMS. Ammesso che sia comunque possibile ritengo che la complessità del progetto sarebbe davvero notevole.
Basti pensare al rendering di documenti office in pagine in qualche modo compatibili con il browser affinche siano navigabili on line. Oppure alle procedure aziendali. Pensiamo a che significa scrivere delle intere procedure aziendali usando Mambo. Una vera follia.

QUINDI?
Ok, se si scarta Mambo... che alternative rimangono?. Io provato diversi (non tutti) CMS e Groupware rilasciati sotto licenza GPL o affine (magari poi li elenco), ma con nessuno di questi credo si possa arrivare a realizzare un framework come quello indicato.
La mia intezione al momento è quella di cercare in internet porzioni di software che possano essere incollate insieme per ottenere un framework, magari anche malconcio che possa avvicinarsi a quello desiderato.

FRUGANDO
Cercando in internet si trovano cose interessanti tipo queste:
http://cocoon.zones.apache.org/daisy/cocooninaction/g4/15.html
e queste:
http://cocoon.zones.apache.org/demos/release/samples/blocks/tour/intro/docs/what-is-cocoon.html

I progetti relativi a Cocoon sono una guera. Ci vuole un sacco di tempo per capire cosa fanno e sono una miriade. Seguire i link presenti in questi siti è come seguire i cartelli dell'autostrada a Milano: gira gira ti ritrovi da qualche e non sai neanche perchè sei li.
Dopo averli bazzicati per un po' ho capito che:
  1. sono ignorante come una talpa
  2. i progetti basati su cocoon sono tantissimi e ultra specializzati. nel caso di forrest è più difficile capire quello che fa che non usarlo e metterlo in pratica
[ to be continued ]

Autenticazione Utenti. Voglio uno standard!

questo è un articolo prelevato dal mio vecchio sito:

Scritto da Dam
giovedì 18 agosto 2005
Pensate di voler fondere Mambo con OWL o con un altro progetto.
Ora pensate di gestire utenti di Mambo e quelli di OWL. Guera eh???

Presumibilmente vorreste usare l'utente admin per entrambi i progetti e non sarebbe male avere un'unica interfaccia di log-in.
In seguito all'autenticazione sareste l'admin di entrambi i progetti.
Ok i sogni sono finiti. Ve lo potete scordare. Perchè?

Ovvio.. Mambo fa il login in un modo, OWL in un altro.

Ora la domanda è: non esiste uno standard (che eviterebbe anche ad entrambi i progetti di mantenere tutta la sezione di sicurezza e login) oppure sono io che non ho cercato abbastanza bene?

E ancora .. cosa si cerca in questi casi? "standard login php" "login platform php" "user authentication php"

Ogni aiuto è gradito.

incredibile ma vero

man diskseekd

Name
diskseek, diskseekd - disk seek daemon; simulates Messy Dos' drive cleaning effect

Description
Several people have noticed that Linux has a bad tendency of killing floppy drives. These failures remained completely mysterious,
until somebody noticed that they were due to huge layers of dust accumulating in the floppy drives. This cannot happen under Messy
Dos, because this excuse for an operating system is so unstable that it crashes roughly every 20 minutes (actually less if you are
running Windows). When rebooting, the BIOS seeks the drive, and by doing this, it shakes the dust out of the drive mechanism.
diskseekd simulates this effect by seeking the drive periodically. If it is called as diskseek, the drive is seeked only once.

:)) imbarazzante :))

elimino il mio sito

ho dedicato un po' di tempo ai nuovi strumenti del web 2. ho capito che per me non ha senso avere un sito web anche perchè i blog piu avanzati, come quello di wordpress non ne fanno sentire la mancanza.

quindi sto eliminando il mio sito web www.venturin.net e sto portando qui gli articoli che avevo scritto.

guera concept

Guera è un concetto. Se lo adotti un modo di vivere.

Io sono arrivato al concetto di guera in modo empirico, ragionando su come faccio quel che faccio.
Da qui la constatazione che mi piacciono le cose intricate che abbiano come obiettivo qualcosa che mi piace.
Quindi in definitiva guera è lottare sempre anche e soprattutto quando si è in condizioni di svantaggio per arrivare alla meta. Cadere, risollevarsi, rianalizzare e lottare di nuovo.
Perchè? perchè è fico no?

2007-10-06

cisco: backup di ios

alcune guide utili per effettuare il backup dell'immagine ios

come fare il backup

come installare tftp su ubuntu

2007-09-27

check spam status

utile tool per verificare se un certo dominio è presente in alcune delle piu famose black list
http://torrentialwebdev.com/tools/rbl-surbl

2007-08-23

roadmap: prendere sul serio ldap

questo ldap è interessante. e nemmeno cosi difficile nella forma. l'uso invece ... non è cosi semplice. forse perchè si utilizzano logiche e strumenti lontani anni luce dai normali database.

references:
glossario ldap
archivio di objectclass e attributi comuni
data types

tools:
ottimo ldap editor

stralci interessanti:

When you create an entry in a DIT its data contents are contained in attributes which are grouped into objectclasses which are packaged into schemas

Everything in LDAP is hierarchical

All objectclasses and all attributes are defined inside schemas

objectclasses are the means for including attributes

objectclasses may be STRUCTURAL in which case they are used to create entries (data objects) or AUXILIARY in which case they may be added into any convenient entry

objectclasses define whether an attribute is mandatory (MUST be present) or optional (MAY be present)

To use an attribute in an entry its objectclass must be included in the entry definition and its objectclass must be included in a schema which must be identified to the LDAP server.

An attribute definition may be part of a hierarchy in which case it inherits all the properties of its parents e.g. commonName (cn), givenName (gn), surname (sn) are all children of the name attribute.

An attribute definition includes its form e.g. string, number etc.

questo esempio mostra come si definisce un attributo:

attributetype ( 2.5.4.46 NAME 'dnQualifier'
EQUALITY caseIgnoreMatch
ORDERING caseIgnoreOrderingMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 )
EQUALITY, ORDERING,SUBSTR vengono definite come matcing rules: descrivono alcune carattestiche dell'attributo in oggetto. le matching rules sono in genere built-in ldap

questo comando offre una (interminabile) lista delle matching rules built-in ldap:
ldapsearch -H ldap://localhost -x -s base -b "cn=subschema" "(objectclass=*)" matchingrules

questo comando offre la lista degli objectclass riconosciuti dall'ldap server
ldapsearch -H ldap://localhost -x -s base -b "cn=subschema" objectclasses


2007-08-21

roadmap: gestire contatti - Parte 3

CAMPI "LOCKATI" DI EVOLUTION

con l'objectclass evolutionPerson definito nello schema standard di evolution alcuni campi non sono editabili.
























includendo lo schema calentry.schema in slapd.conf ecco che i campi Calendar: e Free/Busy: diventano editabili

























questo è il calentry.schema


#RFC2739 calEntry schema for OpenLDAP 2.x

# Version of RFC 2739 schema translated by Terrelle Shaw (xytek@xxxxxxxxx)
# Nov. 7, 2002
# Modifications by Peter Marschall
# Nov. 9, 2002

# Notes:
# * RFC2739 seems to be a bit sloppy about attribute type and
# objectclass definitions syntax and also about attribute syntax
# and matching rules.
# (It even counts the attributes in the calEntry objectclass wrong ;-)
# * The following changes have been applied to correct the schema
# - added description to each attributetype definition
# - changed SYNTAX from 'IA5String' to corresponding OID
# to make matching rules and syntax consistent
# - replaced illegal keyword SUBSTRING by SUBSTR
# - changed SUBSTR from caseIgnoreIA5Match to caseIgnoreIA5SubstringsMatch
# - removed illegal keyword MULTI-VALUE
# - added keyword SINGLE-VALUE where appropriate
# - removed USAGE since cwuserApplications is the default
# - added description to the objectclass defintion
# - corrected typo in objectclass definition
# - added the attributetypes defined but not used to the objectclass


# 2.4.4.1 calCalURI
attributetype ( 1.2.840.113556.1.4.478
NAME 'calCalURI'
DESC 'URI to a snapshot of the users entire default calendar'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-VALUE )

# 2.4.4.2 calFBURL
attributetype ( 1.2.840.113556.1.4.479
NAME 'calFBURL'
DESC 'URI to the users default free/busy time data'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-VALUE )

# 2.4.4.3 calCAPURI
attributetype ( 1.2.840.113556.1.4.480
NAME 'calCAPURI'
DESC 'URI used to communicate with the users calendar'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-VALUE )

# 2.4.4.4 calCalAdrURI
attributetype ( 1.2.840.113556.1.4.481
NAME 'calCalAdrURI'
DESC 'URI to which event requests should be sent for the user'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-VALUE )

# 2.4.4.5 calOtherCalURIs
attributetype ( 1.2.840.113556.1.4.482
NAME 'calOtherCalURIs'
DESC 'URIs to snapshots of non-default calendars belonging to the user'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# 2.4.4.6 calOtherFBURLs
attributetype ( 1.2.840.113556.1.4.483
NAME 'calOtherFBURLs'
DESC 'URIs to non-default free/busy data belonging to the user'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# 2.4.4.7 calOtherCAPURIs
attributetype ( 1.2.840.113556.1.4.484
NAME 'calOtherCAPURIs'
DESC 'URIs to non-default calendars belonging to the user'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# 2.4.4.8 calOtherCalAdrURIs
attributetype ( 1.2.840.113556.1.4.485
NAME 'calOtherCalAdrURIs'
DESC 'URIs of destinations for event requests to non-default calendars'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )

# 2.4.3.1 calEntry
objectclass ( 1.2.840.113556.1.5.87
NAME 'calEntry'
DESC 'Calendering and free/busy information'
SUP top AUXILIARY
MAY ( calCalURI $ calFBURL $ calCAPURI $ calCalAdrURI $
calOtherCAPURIs $ calOtherCalURIs $ calOtherFBURLs $
calOtherCalAdrURIs ) )

# EOF


stessa sorte per i campi dedicati all'instant messaging. ma in questo caso non so che schema usare. se qualcuno ne sa posti un commento per favore.
ad ogni modo i campi di istant messaging non sono cosi importanti almeno fino a quando non ci sarà una migliore integrazione tra gaim ed evolution
























------
CAMPI CODICE FISCALE E PARTITA IVA
non ho trovato alcuno schema che possa descrivere i campi codice fiscale e partita iva perciò ne
ho scritto uno semplice ma non ancora definitivo. lo schema descrive un nuovo oggetto che ho chiamato juridicPersonIT. A giorni Iana mi dovrebbe rilasciare un PEN e a quel punto potrò riscrivere correttamente gli OID che per ora mi sono inventato. (sempre che non mi capiti di trovare uno schema bello e pronto)

ecco il risultato:














l'esperimento funziona. i campi aggiuntivi sono disponibili aggiungendo l'objectclass juridicPersonIT a ciascun contatto della rubrica di evolution. quindi questa sarà una delle attività che dovrà fare il modulo per la scrittura contatti dell'erp.

------
EKIGA
voglio ora osservare se la rubrica condivisa di evolution puo essere utilizzata anche da altre applicazioni, in virtu di quanto detto nella Parte 1.

provo con Ekiga:
ekiga supporta più rubrica remote su ldap ma il manuale di Ekiga non è molto chiaro. ci ho messo un po a farlo funzionare ma questo è il risultato







uno dei limiti della rubrica di ldap è che prevede un solo campo telefonico, pertanto sono costretto a definire la rubrica "cellulari", "fisso" etc.
inoltre il campo sensibile viene sempre inteso come numero VOIP e viene ignorata la possibilità di elencare anche normali numeri telefonici, quindi il "+" che precede i prefissi internazionali viene troncato; non è un gran problema perchè si puo correggere manualmente dopo aver cliccato sul contatto.
sarebbe interessante se il gruppo di lavoro di ekiga lavorasse su questi dettagli. proverò a fare una richiesta.

------
CONTACT LOOKUP APPLET
questa magnifica applet per gnome si appoggia all'evolution data server e consente di reperire velocemente le informazioni legate ad un contatto. anche questo software funziona con la rubrica di ldap :-D

ecco uno screenshot










------
THUNDERBIRD
ho trovato un'interessante howto che spiega come rendere compatibili una rubrica ldap per thunderbird ed outlook. quindi penso che si possa estendere il concetto anche ad una rubrica di evolution.....
gli skill necessari per raggiungere questo obiettivo vanno ben oltre un howto. è quindi ora di dedicarsi a un whyto. :-D

quindi mi cimento nello studio vero e proprio di ldap con questa guida. ritornerò su questo punto quando avrò sufficienti competenze

ULTIME SCOPERTE
altre persona alla ricerca dello schema perduto:
Christian Weiske
Creating a well defined LDAP directory query interface for email clients
e ancora


roadmap: gestire contatti - Parte 2

riparto da dove mi ero fermato.

obiettivo:
capire se ldap può aiutare nella gestione dei c.c.f.p.

referenze:
demystifying LDAP part 1
demystifying LDAP part 2
qualcuno che la pensa come me
ottima guida ldap

il percorso è stato tortuoso ma ha dato alcuni frutti, anche se ho dovuto accettare qualche compromesso che però non penalizza affatto il progetto, anzi sotto certi punti di vista possono essere considerati compromessi positivi.

osservo gia da tempo la rubrica condivisa di evolution e la trovo sempre piu interessante.



















(per chi avesse problemi a configurare ldap affinchè possa ospitare una rubrica condivisa di evolution può usare questa guida)

ho verificato che la rubrica condivisa di evolution basata sullo schema evolution.schema funziona bene. è potenzialmente accessibile anche da altri email-client come thunderbird e outloook. probabilmente è accessibile anche per ekiga e gaim.
l'idea di utilizzare questa rubrica come punto di partenza mi piace molto perchè è costruita mediante componenti standard. cfr Iana OIDs 1.3.6.1.4.1.8506
questa scelta però comporta l'estensione del concetto di contatto. il concetto di contatto deve comprendere anche i soggetti giuridici ovvero anche la aziende. quindi utilizzando la rubrica di evolution come base impedirà di registrare un'azienda senza specificare almeno un contatto (nome e cognome).
da una parte questo è un vantaggio perchè ogni azienda è costituita da almeno una persona e non ha molto senso registrare un'azienda senza un riferimento umano.
dall'altra parte ci sono dei problemi:
- lo schema di evolution non comprende i campi codice fiscale e partita iva
- si dovranno gestire le aziende duplicate. infatti inserendo in rubrica piu di un contatto appartenente a una certa azienda si avranno in rubrica diversi riferimenti all'azienda.

entrambi i problemi sono sorpassabili. il primo estendendo lo schema di evolution, il secondo accettando un secondo compromesso: l'inserimento e la modifica dei contatti deve avvenire attraverso un modulo dedicato dell'erp. tutte le altre applicazioni che avranno accesso alla rubrica avranno accesso in lettura. ma questo è un bene perchè evita accidentali perdite di dati e garantisce un maggior controllo delle informazione. sicuramente sarebbe interessante se il modulo erp potesse importare vcard prodotte da altre applicazioni.
vincolando l'inserimento al solo erp si può gestire la duplicazione delle aziende puntando sul campo partita iva. si può anche gestire, per quanto riguarda la produzione di documenti fiscali, la divisione tra soggetti giuridici e non.

lo schema inetOrgPerson definisce il campo uid. questo potrebbe essere il campo che consente di collegare i contatti della rubrica con database relazionali esterni.

lo schema evolutionPerson definisce il campo category. è un campo multivalore che posso utilizzate per etichettare un contatto come fornitore e/o cliente e/o personale. il campo category viene visualizzato anche in evolution.

a questo punto il cerchio sembra essere chiuso:
- l'atomo diventa il singolo contatto.
- scrivo un contatto una volta solo.
- posso accedere alle informazioni del contatto da piu applicazioni.
- posso referenziare un contatto in un database relazionale.

sembra esserci tutto. ora la roadmap è:
- capire perchè alcuni campi di evolution risultano non editabili quando si trovano su ldap
- aggiungere i campi partita iva e codice fiscale
- verificare quali sono le applicazioni che effettivamente hanno accesso alla rubrica


{ todo: [campi lockati in evolutin, Single Sign-on, thunderbird, outlook, gaim, ekiga] }

centro! :-D

2007-08-20

roadmap: gestire contatti - Parte 1

problema:
cercando di realizzare un erp per la mia azienda (e ci ho provato varie volte) mi sono sempre imbattutto nella problematica della gestione dei contatti, dei clienti, dei fornitori e del personale.
Contatti, clienti, fornitori e personale sono gli attori del grande film "operatori economici al lavoro".
Tutto ciò che è "attività aziendale" si origina dalle interazioni di questi attori. Le aziende sono il contenitore in cui queste attività si svolgono.

Volendo fare un esempio con la chimica, le molecole e gli atomi sono gli attori (contatti,clienti,fornitori,personale), le reazioni chimiche sono il risultato delle interazioni tra questi attori(attività aziendali). L'ambiente è il contenitore in cui le reazioni chimiche hanno luogo (azienda).

Definisco ora le singole categorie di attori:
contatto: è una persona che ha avuto a che fare "in qualche modo" con l'azienda. ad es. un rappresentante che dopo un colloquio ci lascia un biglietto da visita è un contatto.
cliente: è una persona o un'instituzione o un'azienda che ha acquistato un prodotto o un servizio dall'azienda. Ogni cliente ha ricevuto almeno una fattura.
fornitore: è una persona o un'instituzione o un'azienda dalla quale l'azienda ha acquistato un prodotto o un servizio. ogni fornitore ha inviato almeno una fattura.
personale: è una persona che lavora per l'azienda. il personale, mediante l'uso di strumenti, fa si che le attività aziendali possano essere completate. Facendo il solito parallelismo con la chimica, fa da catalizzatore per le reazioni.

D'ora in poi il gruppo degli attori contatti+clienti+fornitori+personale, lo chiamo c.c.f.p.

Quindi i c.c.f.p. vengono definiti in relazione all'azienda di riferimento.

Le definizioni stesse dei c.c.f.p. mettono in luce una serie di problemi:
- un contatto puo essere in alcuni casi anche un cliente e anche un fornitore
- l'oggetto "persona" è assai diverso dall'oggetto azienda o ente. Basta pensare che una persona può essere parte di un'azienda ma un'azienda non puo essere parte di una persona.
- l'oggetto "persona" ha un trattamento fiscale diverso dall'azienda. In generale le persone non hanno la partita iva ma non esistono aziende che non abbiano la partita iva. Poi ci sono persone, come i professionisti, con la partita iva.

A complicare la situazione ci si mettono i canali di comunicazione. I c.c.f.p comunicano fra loro mediante i canali di comunicazione: sono paragonabili ai tipi di legami che le varie molecole instaurano tra di loro.
Tralasciando i canali di comunicazione broadcast, dove un attore lancia il proprio messaggio a chiunque sia in ascolto (siti web, blog, radio, televisione, urlare fuori dalla finestra ...) i canali di comunicazione point-to-point e point-to-multipoint piu diffusi sono:
- comunicazione verbale
- telefono
- posta elettronica
- mailing list
- posta
- sms
- chat
- video conferenza

la maggior parte di questi canali sono utilizzabili mediante dispositivi di comunicazione che sempre più spesso sono digitali (cellulare,smart-phone,voip-phone) e che utilizzano almeno una parte delle informazioni proprie di ciascun singolo attore c.c.f.p..
tra i dispositivi, estendendone un poco il concetto, si possono anche annoverare i software (email client etc)

ma ci sono anche alcuni dispositivi non direttamente necessari alla comunicazione ma che utilizzano le informazioni proprie di ciascun singolo attore. Ad es. i navigatori satellitari utilizzano l'indirizzo civico ma non possono essere propriamente definiti dispositivi di comunicazione. E non saprei nemmeno come definirli.

poi ci sono attività aziendali che usufruiscono delle informazioni legate agli attori.
ad esempio gli strumenti di fatturazione, bollettazione ed ordini che utilizzano informazioni proprie del singolo attore c.c.f.p. come l'indirizzo civico. ma non solo: le attività aziendali legate alla produzione possono richiedere informazioni che vanno al di la del semplice indirizzo di fatturazione. un dentista deve risalire alla scheda interventi del paziente, un informatico alla scheda interventi e anche alla scheda che definisce la struttura informatica del cliente. questo è un esempio di come, dalle informazioni legate agli attori discendano una miriade di dipendenze fondamentali per l'azienda anche in fase operativa non solo in fase marketing o gestionale/amministrativa. Ed ecco perchè degli errori strutturali nella gestione delle informazioni dell'insieme c.c.f.p. possono causare gravi problemi in tutti i comparti aziendali.

quindi per "gestione dei c.c.f.p." intendo l'utilizzo di un contenitore/sistema (magari compartimentato) per l'insieme dei c.c.f.p. a cui porre domande mediante diversi dispositivi ed ottenere risposte compatibili per il dispositivo in uso.
Ho detto utilizzo perchè la gestione dei c.c.f.p. non dovrebbe costringere l'attore a porsi domande del tipo:
- Mario Rossi è un fornitore?
- in quale archivio sta Mario Rossi?
- con che strumento recupero l'indirizzo di Mario Rossi?
- è possibile che l'indirizzo di Mario Rossi che ho ottenuto dopo l'interrogazione sia obsoleto perchè nel frattempo le nuove informazioni sono state stoccate da un altro attore in un diverso contenitore/sistema?

Quindi gestire i c.c.f.p. significa per esempio:
voler:
- inserire i dati di Mario Rossi a partire da un unico punto di accesso
- consentire l'accesso alle informazioni di Mario Rossi al solo personale autorizzato
- frammentare le informazioni relative a Mario Rossi affinchè informazioni sensibili siano disponibili al solo personale competente
- accedere ai numeri telefonici dei ccfp utilizzando il client di posta.
- accedere ai numeri telefonici dei ccfp utilizzando lo smat-phone o il cellulare o il voip-phone
- accedere alle email dei ccfp utilizzando il client di posta
- accedere alle email dei ccfp utilizzando lo smart-phone o il palmare

non voler:

- trovare i dati di Mario Rossi sparpagliati in piu punti e soprattutto discrepanti fra loro
- riscrivere i dati di Mario Rossi sui vari dispositivi che utilizzo per stabilire comunicazioni
- esportare/imporare dati tra vari contenitori al fine di poter accedere alle informazioni mediante i vari dispositivi. se l'attivita di esportazione, importazione è proprio necessaria a causa delle incompatibilità tra i vari dispositivi allora deve essere il sistema a gestire queste attività. L'attore è un utilizzatore delle informazioni, non un componente del sistema informativo.

quindi:
la situazione è assai complessa. non sono un esperto nel settore e magari sto solamente vaneggiando, ma personalmente non ho mai trovato un contenitore/sistema che possa davvero risolvere i problemi sopra esposti. ho la netta impressione che l'atteggiamento generale dell'informatica di fronte a questo scenario sia qualcosa del tipo:
vaneggio on
"ok è un gran casino. semplifichiamo: i contatti non esistono. Il personale e le autorizzazioni le gestiamo da un'altra parte per i windows, mentre per i linux ... rimandiamo la decisione, i mac ... ma la apple non era fallita? :-D => esistono solo clienti e fornitori.... Accedere a clienti e fornitori attraverso il palmare? attraverso il software per la posta elettronica? non se ne parla neanche. Tralasciamo l'uso attraverso il web perchè tanto non lo usa nessuno e poi ci vuole un sacco a svilupparlo ..."
vaneggio off
risultato: tante soluzioni tutte decisamente limitanti sotto tutti i punti di vista. possibile che non si possa fare qualcosa di piu ??? ... porco cane siamo andati sulla luna ma facciamo ancora fatica a trovare un numero di telefono.
ok ok ci saranno sicuramente dei compromessi da accettare ma forse la sfida di partenza dovrebbe essere: compromessi zero o quasi ...
un compromesso accettabile potrebbe essere quello di utilizzare solo alcuni tipi di dispositivi piuttosto che altri (nokia piuttosto che sony, tanto per dire), quello di utilizzare un browser piuttosto che un set di applicazioni java, quello di usare mozilla piuttosto che internet explorer. sicuramente è inaccettabile penalizzare un sistema operativo o un altro, oppure l'idea di utilizzare contenitori/sistemi eterogenei per accedere alle informazioni obbligando l'utente a diventare parte del sistema informativo.

studiando la faccenda la domanda che ricorre piu spesso nella mia mente è: possibile che non esistano sistemi per la gestione di questo marasma? in effetti i sistemi ci sono e chissa quanti. il punto è che non sono per tutti. ci sono soluzioni offerte dai grandi player come IBM, SUN etc. ma costano e sono molto molto complesse. è addirittura difficile capire che cosa offrono. chiaramente c'è bisogno di un supporto da parte del produttore gia dalla fase di valutazione del sistema.
è pero impensabile che piccole aziende possano usufruire di tali sistemi ... anche se, a pensarci bene, non vedo grandi differenze di utilizzo di tali informazioni tra grandi e piccole imprese. tant'è che io stesso mi sto concentrando su queste cose.
e poi diciamocelo chiaro ... le soluzioni non-open-source non sono poi cosi simpatiche :-D

allora voglio vedere se il mondo open-source mi offre dei "componenti" con cui posso assemblare qualcosa di interessante.

divagazioni

questo l'ho trovato qui durante la lettura di alcuni interessanti articoli su ldap. mi piace questo Ron Peterson ;-)

"What happened was the gradual habituation of the people, little by little, to be governed by surprise, to receiving decisions deliberated in secret; to believe that the situation was so complicated that the government had to act on information which the people could not understand, or so dangerous that, even if people could understand it, it could not be released because of national security. "

~ an anonymous German Professor from 'They Thought They Were Free: The Germans 1939-1945', by Milton Mayer

2007-08-11

roadmap: strumenti per la progettazione di un erp php-based

references:
un blogger e i suoi tool di sviluppo
un'altro
php best practices

lo studio di symfony mi ha portato a scoprire una serie di tool e di metodologie veramente interessanti quando si vuole, come nel mio caso, costruire l'erp per la propria azienda.

di seguito vado a descrivere gli strumenti che reputo interessanti e le mie esperienze:

IDE per php:
non sono un esperto di ide ma eclipse mi è sempre piaciuto. ha tutto quello che mi serve:
* una struttura a plugin
* il supporto per cvs
* la gestione di piu progetti, anche scritti in linguaggi diversi

fino ad oggi ho utilizzato easyeclipse per php. in 2 parole è una collezione gia pronti di plugin adatti per lo sviluppo di php. basta scaricare e decomprimere e si è subito al lavoro.
oggi pero ho scoperto alcuni limiti: se si vogliono caricare dei plugin che richiedono alcune dipendenze con altri plugin .. le cose si possono complicare.

quindi ho pensato di partire da eclipse 3.3. classico scaricabile da qui
è importante che si utilizzi la virtual machine 1.5. utilizzando la jvm 1.4 ho avuto problemi (cpu al 100, crash etc)

eclipse gode di una miriade di plugin. elenco quelli che ritengo interessanti:
- PDT anche conosciuto come PHP-IDE.
ho scaricato il plugin attraverso il tool "software update" di eclipse.
- BIRT reporting tool. per chi conosce "agata" .. è qualcosa di molto simile. c'è un filmato flash
questi gli step per l'installazione:

























poi basta seguire il video in flash


per symphony c'è un howto che spiega come configurare eclipse per costruire progetti con eclipse

2007-08-09

roadmap di avvicinamento a symfony

references:
paolo mainardi

symfony è un framework per php di cui mi hanno parlato molto bene nella chat #symfony di irc.azzurra.org

dopo aver valutato p4a e (parzialmente) zend-framework ho deciso di provare piu approfonditamente symfony.

punti di forza:
- l'integrazione con pear, a cui sono molto affezionato:
"PEAR è il sistema più professionale per installare librerie in PHP. symfony suggerisce caldamente di utilizzare PEAR, in maniera tale da avere un punto centrale di installazione sul quale creare diversi progetti. Il plug-ins di symfony sono pacchetti PEAR dotati di particolari configurazioni. Lo stesso symfony framework è disponibile come pacchetto PEAR."
- l'interazione con i database
"Propel is an Object-Relational Mapping (ORM) framework for PHP5. It allows you to access your database using a set of objects, providing a simple API for storing and retrieving data."
- struttura MVC (Model-View-Controller)

Il tutto puo' essere efficaciemente sintetizzato in questo schema:



























di seguito descrivo la strada che seguo per apprendere e provare questo framework. chi volesse seguirmi in questa roadmap si faccia vivo sul canale di azzurra o postando qui

references:
sito
manuale (addirittura in italiano!)
(ma serve aiuto per completarne la traduzione)
24 tutorial per conoscere symfony

il punto di partenza che ho scelto dopo un primo giro nel sito è stato il manuale.
Nei primi due capitoli vengono presentati le metodologie di programmazione:
RAD Rapid Application development
ASD Agile software development
per poi passare ai concetti di MVC ed ai primi esempi.

INSTALLAZIONE
la parte importante arriva con l'installazione, al capitolo 3.

PREREQUISITI:
- apache2 con supporto per php5 e pear

non installo sandbox: voglio qualcosa di definitivo, non un ambiente da test. lo faccio installando symfony mediante pear come descritto nella guida.
io uso ubuntu feisty e tutto fila liscio come l'olio

damko@radioshocked:~$ sudo pear channel-discover pear.symfony-project.com
Password:
Adding Channel "pear.symfony-project.com" succeeded
Discovery of channel "pear.symfony-project.com" succeeded

damko@radioshocked:~$ sudo pear install symfony/symfony
downloading symfony-1.0.6.tgz ...
Starting to download symfony-1.0.6.tgz (1,905,514 bytes)
......................done: 1,905,514 bytes
install ok: channel://pear.symfony-project.com/symfony-1.0.6

inizializzo il primo progetto:

mkdir projects/dam/correnti/sym
cd projects/dam/correnti/sym
symfony init-project myproject

ed ottengo la seguente struttura di directory
.
|-- apps
|-- batch
|-- cache
|-- config
| |-- config.php
| |-- databases.yml
| |-- propel.ini
| |-- properties.ini
| |-- rsync_exclude.txt
| `-- schema.yml
|-- data
| |-- model
| `-- sql
|-- doc
|-- lib
| `-- model
|-- log
|-- plugins
|-- symfony
|-- test
| |-- bootstrap
| | |-- functional.php
| | `-- unit.php
| |-- functional
| `-- unit
`-- web
|-- css
| `-- main.css
|-- images
|-- js
|-- robots.txt
`-- uploads
`-- assets

ora inizializzo la prima applicazione

symfony init-app myapp

ecco il risultato:












aggiusto un po le cose:
- in /var/www/ creo un collegamento alla directory "web" del progetto (ovvero laddove viene
"renderizzato" il sito vero e proprio)
- creo un virtual host per apache di nome sym seguendo questi step:
echo "
NameVirtualHost sym

DocumentRoot "/var/www/web/"
DirectoryIndex index.php
Alias /sym "/var/www/web/"

Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128

" > /etc/apache2/sites-available/sym

cd /etc/apache2/sites-enabled

ln -s ../sites-available/sym .

/etc/init.d/apache2 restart

echo "127.0.0.1 sym" >> /etc/hosts

ora posso aprire un browser e digitare http://sym e trovarmi all'interno della directory
/var/www/web


TUTORIAL
sono pronto per seguire il primo tutorial, come descritto nel manuale

creo il primo modulo:
symfony init-module myapp mymodule

e questo è il risultato che posso vedere puntando il browser su
http://sym/myapp_dev.php/mymodule/index












tutto funziona e sono pronto per il classico "Hello world".

in symfony, la logica di una pagina è memorizzata nelle azioni, mentre la presentazione
in template. Le pagine senza una logica avranno bisogno comunque di un'azione vuota.

seguo passo passo la guida:

rm templates/indexSuccess.php

e riscrivo il file delle azioni ( actions/actions.class.php ) includendo un'azione vuota

forward('default', 'module');
}
*/
public function executeMyAction()
{
}
}

ora scrivo il file della view (template)
echo "

Hello World!

" > templates/myActionSuccess.php

questo è il risultato che visualizzo puntando il browser su
http://sym/myapp_dev.php/mymodule/myAction (come spiegato piu avanti nel libro questo è
l'output dell'ambiente di sviluppo, mentre l'output di produzione è visibile puntando su
http://sym/index.php/mymodule/myAction)



A questo punto ho terminato il quarto capitolo del manuale e sono "in grado" di scrivere
la mia prima applicazione.

CONFIGURAZIONE DI SYMFONY
Il quinto capitolo verte tutto sulla configurazione di symfony e dei relativi file yaml.
Secondo il mio modo di vedere le cose allo stato attuale quelle informazioni non sono di grande
utilità. C'è però da sapere che symfony ha un meccanismo proprio per la definizione delle
costanti per l'applicazione. Quindi in corso di sviluppo dell'applicazione sarà bene ricordarlo
ed utilizzare tale meccanismo per trarne tutti i vantaggi.


2007-07-28

ricreare source list per ubuntu

un tool interessante per creare il sourcelist di apt

http://www.ubuntu-nl.org/source-o-matic/