Confessions of a Dangerous Mind

Brain.FlushBuffer()
posts - 176, comments - 306, trackbacks - 149

lunedì 11 febbraio 2013

Corso Sviluppo Mobile Multipiattaforma

Negli scorsi mesi, chi di noi non si è mai sentito rivolgere le seguenti domande?

  • Sai sviluppare app per il "telefonino"?
  • Cos'è un'app?
  • E' difficile sviluppare un'app?
  • Una stessa app "gira" su tutti gli smartphone, o devo farne una diversa per ogni piattaforma?

Molti di noi forse sono addirittura stati selezionati ad un colloquio di lavoro in cui era richiesta la specifica capacità di sviluppare app per dispositivi mobili.

Ecco quindi la nostra proposta: organizziamo un corso di due giornate per spiegare tutte le tecnologie per lo sviluppo di applicazioni per dispositivi mobili, in ottica nativa e multipiattaforma.

Il corso è organizzato da Ingenium Software Engineering e i docenti sono il sottoscritto (Davide Senatore) e Andrea Dottor.

Entrambi abbiamo maturato esperienza di sviluppo in ambiente multipiattaforma (Android,iOS,Windows Phone) e possiamo quindi consigliarvi, a seconda del target della vostra app, che tecnologie usare e che strumenti di sviluppo impiegare.

Chi dovrebbe venire al nostro corso? Ovvio, tutti! A parte gli scherzi:

  • Stai progettando un'app ma sei dubbioso per che piattaforma svilupparla?
  • Stai pensando se è meglio fare una "web app" o una "store app"?
  • Ti stai arrovellando per trovare uno strato di servizi che permetta l'interoperabilità?
  • Non ti sei mai posto nessuna di queste domande, ma devi sviluppare un'app e vuoi una panoramica chiara, fornita da due professionisti che hanno già affrontato gran parte delle problematiche che incontrerai?

Beh, allora sei dei nostri!

Se ti interessa saperne di più, visita la landing page del corso training.ingeniumsoft.com, dove troverai il programma e tutti i dettagli. Le iscrizioni sono limitate, quindi se sei interessato non perdere tempo ed effettua la preiscrizione. Ti aspettiamo!

posted @ lunedì 11 febbraio 2013 0.01 | Feedback (0) |

mercoledì 15 febbraio 2012

Il valore della condivisione nella crescita personale e professionale

E’ da tanto che ho in mente di scrivere questo post. Voglio trovare il tempo di farlo, perchè rappresenta un’idea ed una convinzione che ho fatto mia nel tempo, con l’osservazione dei comportamenti di colleghi e persone con le quali ho lavorato e collaborato.

Un tempo si poteva pensare che tenendo per sè il sapere, si avesse una marcia in più, quasi fosse la famosa “bomba” di Fantozzi, da sparare all’ultima curva, salvo poi finire a tavola alla trattoria “Al Curvone”. Molti possono pensare ancora di essere gli unici depositari del sapere, e coltivano l’illusione di sapere tutto, evitando il confronto perchè convinti di essere nel giusto, sempre e comunque.

Io penso, invece, che dal confronto nascano occasioni di riflessione personale ed idee che altrimenti non avrebbero modo di vivere. Dal confronto con colleghi, anche più giovani, ho imparato moltissimo e senza timore di essere smentito, penso che anche loro abbiano imparato molto da me.

Ho imparato dai miei errori, ed imparo tutti i giorni da essi, perchè ne commetto sempre; non li nascondo, ne discuto con colleghi che mi aiutano a comprenderli meglio e a farne tesoro e lezione. Mi confronto e chiedo, non dò mai nulla per scontato e metto sempre in dubbio ciò che faccio. Fosse anche giusto, lo soppeso comunque e lo critico, perchè esiste sempre un modo migliore di fare le cose.

Per questo adoro condividere con tutti voi le mie esperienze, come quando facciamo i meeting di XeDotNet. Perchè voi rappresentate una crescita personale. Adoro ascoltare le vostre esperienze, perchè rappresentano “lavoro vissuto”, occasione di confronto e di crescita professionale.

Per questo dico a tutti voi: condividete le esperienze che fate; non avrete nulla da perdere, bensì tutto da guadagnare. Ne uscirete personalmente arricchiti e professionalmente più forti.

“Se tu hai una mela, e io ho una mela, e ce le scambiamo,
allora tu ed io abbiamo sempre una mela per uno.
Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo,
allora abbiamo entrambi due idee."

George Bernard Shaw

posted @ mercoledì 15 febbraio 2012 23.27 | Feedback (2) |

lunedì 13 febbraio 2012

XeDotNet: Sessione su HTML5 e PhoneGap

Scrivo questo piccolo post essenzialmente per due ragioni: la prima per ringraziare tutti in un modo un pò meno stringato di twitter. Tenere una sessione alle 22.00 di venerdì sera, con un pubblico di 60 persone, tutti belli svegli a far domande e a divertirsi è stato veramente eccezionale. Quindi un grazie di cuore, credetemi, a tutti voi che date un senso alle nottate spese a studiare le slide o il codice. Il feedback che date con la vostra costanza e la vostra presenza è impagabile.

Da parte mia spero di essere stato chiaro: PhoneGap non è il “silver bullet” ma contribuisce a far entrare nel mondo dello sviluppo mobile molti sviluppatori “web skilled”, e questo è molto importante. Per le applicazioni native c’è, e ci sarà, sempre spazio. PhoneGap riesce quindi ad avvicinare anche molte persone che vedevano “lontani” i devices perchè si vedevano già costretti ad imparare diverse tecnologie per poter rendere fruibile la propria applicazione su tutte le piattaforme più diffuse.

La seconda ragione del post è di indicarvi dove si trovano le slide della sessione. Le slide le trovate qui, mentre il codice qui.

Ringraziandovi ancora per l’enorme partecipazione, vi ricordo di non mancare anche agli altri eventi XeDotNet!!!

posted @ lunedì 13 febbraio 2012 11.48 | Feedback (3) |

martedì 27 settembre 2011

Sport, Social Media e Software Gestionale per Impianti Sportivi

Gymmit, il Social Network per lo sport e gli impianti sportivi realizzato da Ingenium, verrà presentato agli imprenditori del settore sportivo durante un evento organizzato da Helpy Services a Roma, il 13 Ottobre 2011, dal titolo “Come aumentare gli iscritti al centro sportivo in tempi di crisi”.

Vedremo come l’impiego del Software Gestionale Gymnasium System, della Business Intelligence, e dei Social Media possano essere di aiuto agli imprenditori del settore sportivo, nonchè facilitare l’avvicinamento al mondo dello sport.

La partecipazione all’evento è gratuita!!

posted @ martedì 27 settembre 2011 16.11 | Feedback (0) |

giovedì 28 luglio 2011

Log4net e la configurazione dichiarativa

Ormai da anni impiego log4net per implementare lo strato di logging nei miei progetti e mi trovo veramente molto bene.

Una delle caratteristiche che amo di più di log4net è la possibilità di cambiare log sink solamente tramite file di configurazione, permettendo così di fatto la gestione del log nella propria applicazione senza preoccupazioni di dove poi questi messaggi vadano a finire o se una certa destinazione del log (ad esempio un DB) sia o meno presente nell’ambiente di produzione.

La configurazione di questo motore di logging avviene tramite sezione del file di configurazione (web.config o <app>.config) e questa configurazione viene “caricata” all’esecuzione del comando:

log4net.Config.XmlConfigurator.Configure()

Vi sono dei casi però, nei quali non siamo sicuri che un’applicazione effettui questa chiamata. Mi riferisco a quei casi in cui la nostra DLL, splendidamente farcita di log, venga chiamata da una file eseguibile il quale, pur avendo un file di configurazione .config che comprende magari anche la sezione di configurazione di log4net, non chiami correttamente il metodo Configure().

In questi casi saremmo noi costretti a controllare se il logger è stato o meno configurato, il che renderebbe tutto molto meno pratico.

Per risolvere la problematica, si può impiegare la seguente strategia:

  1. Rimuovere la configurazione di log4net dal file .config e riportarla in un file log4net.config, da copiare ovviamente nella directory della nostra applicazione
  2. Impostare nel file AssemblyInfo di ogni progetto di tipo Class Library per la quale desideriamo attivare la configurazione del logging l’attributo
    [assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch=true)]

In questo modo otteniamo due interessanti benefici: il primo è quello di isolare la configurazione del logging in un file, rendendola di fatto facilmente riutilizzabile e modificabile. Cambiando infatti SOLO il file log4net.config otterremo un comportamento del logging differente.

Il secondo è quello di poter dare per configurato il loggining nelle nostre dll, che potranno quinidi essere distribuite anche a sviluppatori terzi, senza richiedere loro di referenziare log4net e richiamare il metodo Configure.

posted @ giovedì 28 luglio 2011 15.05 | Feedback (0) |

mercoledì 27 luglio 2011

SQL Server: strano comportamento della clausola IN

Oggi mi è stato sottoposto un problema veramente curioso. Una collega mi ha fatto notare che durante un’operazione di manutenzione di un DB SQL Server 2008 R2 ha lanciato una query di DELETE che non si è comportata come previsto. In pratica, questa query stava cancellando arbitrariamente i dati dalla tabella senza rispettare la clausola WHERE che compariva regolarmente nel testo della query.

Il comando dato al server è il seguente:

DELETE FROM dbo.Utenti WHERE IDUtente IN (SELECT IDUtente FROM dbo.Operatori)

Come mai il comportamento è strano? Perchè effettivamente in questa query c’è un errore! La tabella Operatori NON contiene il campo IDUtente, per cui, lanciato da solo, il comando

SELECT IDUtente FROM dbo.Operatori

Dà un errore di tipo:

Msg 207, Level 16, State 1, Line 1 Invalid column name 'IDUtente'.

Lo stesso errore non viene riportato se la query viene lanciata come subquery della clausola IN, bensì la query viene eseguita completamente, cancellando TUTTI i record dalla tabella Utenti, ignorando per cui la clausola WHERE IDUtente IN (…).

E’ da notare come utilizzando un nome di campo non esistente nè nella tabella Utenti, nè nella tabella Operatori la query vada in errore; per cui è da supporre che il comando non vada in errore proprio perchè il campo IDUtente compare nella tabella Utenti (cosa comunque errata).

Per ricreare il “problema” ed indagare ulteriormente, ho creato un piccolo DB con 2 tabelle, Utenti e Operatori, così strutturate:

  • Utenti
    • IDUtente [int] PK
    • Nome [varchar(50)]
  • Operatori
    • IDOperatore [int] PK
    • Nome [varchar(50)]

nella tabella Utenti ho 5 records (con IDUtente 1,2,3,4,5), mentre in quella Operatori ne ho 2 (con IDOperatore 1,2)

Questa query seleziona tutti gli utenti:

SELECT * FROM dbo.Utenti

Questa query seleziona solo gli utenti 1 e 2

SELECT * FROM dbo.Utenti WHERE IDUtente IN (SELECT IDOperatore FROM dbo.Operatori)

Questa query restituisce un errore:

SELECT IDUtente FROM dbo.Operatori

Msg 207, Level 16, State 1, Line 1 Invalid column name 'IDUtente'.

Questa query, stranamente, restituisce TUTTI gli utenti:

SELECT * FROM dbo.Utenti WHERE IDUtente IN (SELECT IDUtente FROM dbo.Operatori)

Non dovrebbe restituire tutti gli utenti, in quanto il campo IDUtente non fa parte della tabella Operatori. Altrettanto stranamente anche questa query restituisce tutti gli utenti:

SELECT * FROM dbo.Utenti WHERE IDUtente IN (SELECT IDUtente)

Per induzione, penso che SQL interpreti il campo IDUtente come campo dell’unica tabella elencata nella clausola FROM, anche se questo è a mio avviso fuorviante.

Quindi, quando fate una query di delete con una clausola IN, fate particolare attenzione ai nomi dei campi, e magari prima di eseguirla provate a fare una SELECT.

posted @ mercoledì 27 luglio 2011 12.42 | Feedback (21) | Filed Under [ Tech Tips ]

giovedì 28 aprile 2011

Red Gate SQL Doc 2: un tool davvero utile.

Solitamente non faccio pubblicità di prodotti commerciali nel mio blog… ma stavolta, visto che penso si tratti di un tool davvero utile e completo, voglio segnalarvi il tool della Red Gate SQL Doc 2 che permette di documentare un database SQL Server.

Troppe volte si “perde” il significato dei campi presenti nella miriade di tabelle presenti nei nostri database. Troppe volte si passa il tempo a chiedere al collega “Senior” il perchè di un campo o il significato o l’uso di un altro. Se quando si modifica il DB si generasse la documentazione con questo tool, integrandola con la descrizione dei campi che meritano un approfondimento, probabilmente si otterrebbero i seguenti effetti:

  • Essere più “consci” di ciò che cambia nel nostro DB;
  • Facilitare l’ingresso di nuovi colleghi all’interno dell’infrastruttura di sviluppo;
  • Evitare di “riscrivere” funzionalità (SP, Functions) già presenti nel nostro DB ma “ignote”;

La Documentazione può essere generata in .doc, .htm, e in chm, quindi facilmente distribuibile e fruibile.

Nel sito della Red Gate c’è la versione di prova per 14 giorni. Provatela!

posted @ giovedì 28 aprile 2011 11.36 | Feedback (0) |

giovedì 21 aprile 2011

gymmit.com su MSDN Italia!

Oggi è uscito sul blog di MSDN Italia un mio Guest Blog Post sull’integrazione di DotNetNuke con Facebook. Questo articolo di tipo tecnico/divulgativo, spiega come sia stato possibile realizzare l’integrazione tra DotNetNuke e Facebook, integrazione che va dall’autenticazione fino al post di notizie sulla bacheca di Facebook. Nell’articolo si parla anche di gymmit.com, Il Social Network dello Sport che ho realizzato e per il quale ho implementato l’integrazione con Facebook. Visitatelo per vedere all’opera l’integrazione.

Un grazie di cuore a Microsoft e a tutti i ragazzi di MSDN Italia!!!!

posted @ giovedì 21 aprile 2011 11.26 | Feedback (0) |

domenica 17 aprile 2011

Total Smarphone Interoperability: Grazie a tutti!

Volevo spendere due parole di ringraziamento per i feedback positivi che mi sono arrivati per la mia sessione “Total Smarphone Interoperability” tenuta ieri sera in uno degli eventi della nostra community XeDotNet.

Non era una sessione “comune”: per una volta ho voluto avere come “ospite” un sistema operativo (Android) ed un linguaggio (Java) che poco hanno a che fare con XeDotNet, ma tant’è: il mondo è bello perchè è vario e vedere cose nuove aiuta a dare un valore a ciò che già si ha, e a desiderare ciò che si vorrebbe avere.

Ben venga quindi il confronto, come molti di voi mi hanno detto ieri sera; ben venga una valutazione obiettiva degli strumenti e dei tempi di sviluppo; ben vengano le critiche costruttive che ci potranno solo portare a realizzare il nostro lavoro con maggiore consapevolezza ed una professionalità sempre maggiore.

Grazie a tutti voi, quindi, che avete saputo cogliere lo spirito di questa sessione, e che con la vostra curiosità l’avete resa ancora più interessante. Grazie!

posted @ domenica 17 aprile 2011 23.08 | Feedback (0) |

lunedì 11 aprile 2011

Meeting at XEDotNet: Total Smartphone Interoperability – Windows Phone 7 meets Android

In un mondo dove la parola d'ordine è "connected", gli smartphone giocano un ruolo chiave. Sempre più siamo abituati ad interagire con l'informazione ovunque. Twitter, Facebook e servizi di vario genere, ormai consentono l'accesso attraverso dispositivi mobili. La parola chiave per rendere fruibili i nostri servizi? Interoperabilità. E' infatti chiaro che se un servizio non è interoperabile, si potrebbero precludere delle occasioni di marketing per determinati possessori di smartphone a vantaggio di altri. In questo meeting vi parlerò di come realizzare un servizio WCF interoperabile, lo metteremo on line e svilupperemo due client che lo consumino: il primo per Windows Phone 7, ed il secondo per Android. Analizzeremo ambienti di sviluppo, tecniche, pro e contro degli approcci di ciascuna piattaforma, in una atmosfera di confronto produttivo.

Non mancate, la sessione sarà sicuramente stimolante ricca di spunti di discussione!

Venerdì 15 Aprile 2011, ore 19.30, presso il Novotel Castellana a Mestre (VE). Per iscriversi seguite questo link.

posted @ lunedì 11 aprile 2011 10.16 | Feedback (0) |

Powered by: