tag:blogger.com,1999:blog-44398916144529540002008-05-18T09:01:48.381+02:00BoB0!bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comBlogger35125tag:blogger.com,1999:blog-4439891614452954000.post-50412198014064190972008-05-18T08:58:00.003+02:002008-05-18T09:01:48.507+02:00Un sito web per l'Ingegnere Lorenzo MorettiHo messo online un nuovo <a href="http://www.lorenzomoretti.com">sito web dedicato alla mia professione di Ingegnere</a>. Lo aggiornerò di tanto in tanto con le mie attività e con informazioni relative alla mia professione.<div><br /></div><div style="text-align: center;"><a href="http://www.lorenzomoretti.com"><span class="Apple-style-span" style="font-weight: bold;">www.lorenzomoretti.com</span></a></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-76852600291651638952008-05-11T07:58:00.003+02:002008-05-11T08:07:19.651+02:00Explorer, Mozilla e Safari non indentano uguale UL e LISarò ingenuo, ma ancora mi stupisco quando trovo differenze di comportamento così abissali tra Safari (che ormai uso abitualmente), Mozilla ed Internet Explorer. <div>Questa volta sono incappato in un'anomalia dell'indentatura dei tag UL e LI: la visualizzazione era perfetta sul mio bel Mac (che cosa non è perfetto quando usi un Mac ??? :), ma guardando il risultato con Internet Explorer mi è venuto male: in una barra dei menu del mio portale di <a href="http://www.deamoneta.com/">vendita monete</a> tutte le voci erano orribilmente rientrate. </div><div>Morale: ho impiegato 2 ore prima di trovare <a href="http://devedge-temp.mozilla.org/viewsource/2002/list-indent/">questo articolo </a>che spiega come<span class="Apple-style-span" style="font-weight: bold;"> Internet Explorer, Mozilla e Safari utilizzano diversamente <span class="Apple-style-span" style="font-style: italic;">padding</span> e <span class="Apple-style-span" style="font-style: italic;">margin</span> per indentare le liste</span>...</div><div><br /></div><div><br /></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-47257191063332508662008-04-30T18:44:00.000+02:002008-04-30T18:46:03.950+02:00Micro assurdità...<a href="http://support.microsoft.com/kb/276304">... la Microsoft non si smentisce mai ...</a><div><a href="http://support.microsoft.com/kb/276304"><br /></a></div><div><br /></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-4532598941958937522008-04-28T18:00:00.002+02:002008-04-28T18:01:18.256+02:00Debug con XCode: break on exception raiseSe ti trovi inguaiato per un crash imprevisto nella tua applicazione, forse ho un aiuto per te! Metti un breakpoint al sollevarsi di un'eccezione!<br />Ogni volta che viene sollevata un eccezione, in XCode si interromperà, e da un'analisi dello stack forse capirai qualcosa di più<br /><br /><span style="font-family: courier new;">Run > Magage Breakpoints > Add Symbolic Breakpoint</span><br /><br />E poi inserisci nella finestra di dialogo:<br /><br /><span style="font-family: courier new;">-[NSException raise]</span><br /><br />Comodo, anzi comodissimo...bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-24054234684777949862008-04-28T17:45:00.001+02:002008-04-28T17:47:45.033+02:00La sintesi dello sviluppo softwareOggi un amico mi ha inviato questa immagine. Cosa dire? E' la sintesi della consulenza e dello sviluppo software :)<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_LNlO3iYF3pE/SBXxYqVapdI/AAAAAAAAABI/vg1e3DVr4WA/s1600-h/sviluppo-software.jpg"><img style="cursor: pointer;" src="http://bp3.blogger.com/_LNlO3iYF3pE/SBXxYqVapdI/AAAAAAAAABI/vg1e3DVr4WA/s400/sviluppo-software.jpg" alt="" id="BLOGGER_PHOTO_ID_5194323151225005522" border="0" /></a><br /></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-1829017115538016212008-04-28T12:53:00.001+02:002008-04-28T12:53:55.105+02:00iPhone + Objective-C: rivelazione?Se voglio sviluppare per iPhone, devo sviluppare in Objective-C. E così mi risono messo a studiare. E sono contento, perchè è proprio un bel linguaggio. Objective-C è in effetti un C con un'estensione ad oggetti molto razionale e pulita (a differenza del C++, che con la sua libertà e, diciamo pure, potenza, ti gettava in un inferno di sintassi e core dump).<br /><br />Integra tutti i pattern più noti e svela che all'Apple ci sanno fare, non solo graficamente. Da un punto di vista di Ingegneria del Software, mi pare di essere tornato indietro all'Università a lezione dal Prof. Bellavia... che tempi allegri :)<br /><br />Basti parlare del meccanismo di Reference Counting: io me l'ero implementato, illuminato dalle lezioni del Prof. Bellavia, 5 anni fa per gestire un motore grafico per un videogioco. Oggi me lo ritrovo qui, bello e funzionante, e anche meglio del mio.<br /><br />Quello che non riesco a capire, oggi, è questo: come ho potuto vivere nel mondo dello software per oltre 10 anni senza essere entrato a contatto con Apple? C'era veramente bisogno dell'iPhone e dell'iPod perche la ditta di Cupurtino diventasse popolare tra gli sviluppatori? E pensare che quando ho provato a programmare con MFC per windows sono rimasto nauseato...bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-57007787018989518802008-04-21T14:26:00.001+02:002008-04-21T14:27:46.146+02:00Verso Apple WWDC 2008Così ho deciso, quest'anno parteciperò all'<span style="font-weight: bold;">Apple World Wide Developers Conference 2008</span>. Ho preso i biglietti ieri, e mi preparo ad una settima di full immersion nel mondo Mac, ma soprattutto nello sviluppo software iPhone. Infatti da quel che ho visto quasi tutto verterà su questo splendido cellulare/palmare.<br /><br />Quello che più mi interessa sono gli scenari di <span style="font-weight: bold;">applicazione web per iPhone</span>, ma ho anche un certo interesse per l'<span style="font-weight: bold;">integrazione con servizi aziendali</span> (email, documenti condivisi, etc). Ormai la connettività è tutto... e non appena iPhone arrivierà in Italia, voglio essere pronto :)<br /><br />Vi prometto che vi terrò aggiornato sulle novità...bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-49205288811976266842008-03-08T10:09:00.002+01:002008-03-08T10:12:05.281+01:00è arrivato l'SDK per iPhoneE' appena stata rilasciata dalla Apple l'SDK per sviluppare applicazioni per iPhone native...<br /><br /><a href="http://developer.apple.com/iphone/index.action">http://developer.apple.com/iphone/index.action</a><br /><div><br /></div><div><br /></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-61718580719533777012008-03-02T14:29:00.005+01:002008-03-02T16:02:28.646+01:00Hello world, iPhone!Detto fatto, compilata il gcc per iphone (vedi il mio post precedente), ecco il primo, il classico, l'immancabile, l'inimitabile "Hello World":<br /><br />helloworld.c:<pre><br />#include <stdio.h><stdio.h><stdio.h><br /><br />int main() {<br />printf("Hello world!\n");<br />return 0;<br />}<br /><br /></stdio.h></stdio.h></pre><br /><br />Per compilarlo:<br /><pre><br />$ arm-apple-darwin-gcc hello.c -o hello<br /></pre><br /><br />Per eseguirlo, inviatelo via sftp (con Transmit, per esempio) alla vostra root dell'iphone, poi fate ssh nell'iphone ed eseguite:<br /><br /><pre><br />./hello<br /></pre><br /><br />Ecco l'inizio della programmazione su iphone :Dbob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-16343367922075366582008-03-02T08:39:00.005+01:002008-03-02T14:29:14.029+01:00programmare l'iphoneIn attesa che la Apple ci regali l'SDK per le applicazioni native, ecco una guida per compilare tutti gli strumenti necessari per cross-compilare dal proprio Mac:<br /><br /><a href="http://code.google.com/p/iphone-dev/wiki/Building">http://code.google.com/p/iphone-dev/wiki/Building</a><br /><br />Forse i miei anni di esperienza in C/C++ torneranno utili e di nuovo svilupperò qualcosa in C!bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-54483897377966958462008-02-26T21:24:00.005+01:002008-02-26T21:38:37.533+01:00iphone wardrivingNon credevo, ma più che un telefono l'iphone è un piccolo computer che sta in una mano.Per telefonare non è un granchè , ma la connettività wifi è super! Dopo la super cantenna e la schedina orinoco gold, questo telefono è la più grande rivalazione per il wardriving! <div>Basta camminare e, senza dare nell'occhio, si elencano tutte le reti a portata :D</div><div>E poi basta che dire della shell bash disponibile? Forse ho un miraggio, ma mi sembra di avera na linux box nel palmo!</div><div><br /></div><div>Ecco le applicazioni che uso al monento:</div><div><br /></div><br /><script type="text/javascript">google_ad_client = "pub-3278393085393360";google_ad_slot = "2084463104";google_ad_width = 728;google_ad_height = 15;</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br /><div><br /></div><div>term-vt100</div><div>stumbler</div><div>il rilevatore che di reti direttamente disponibile in impostazioni</div><div><br /></div><div>Se pensate poi che si può installare python, e scriptare... le possibilità sono infinite!</div><div>Aggiornamenti al più presto!</div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-40471854200738046262008-02-24T10:54:00.003+01:002008-02-26T21:34:39.818+01:00Un iPhone per il mio compleanno!Oggi è il mio compleanno, ed i miei mi hanno regalato un iPhone! E proprio ieri è arrivata la novità che tutti gli iphone si sbloccano senza modifiche hardware! Date un'occhiata qui...<div><br /></div><div><a href="http://isimone.blogspot.com/2008/02/ci-tengo-precisare-che-questa-guida.html">sbloccare l'iphone in 5 minuti</a></div><div><br /></div><div>Che dire? Ora ho un mini terminale unix con wifi incorporato... più che un telefono è un vero e proprio mini portatile :D</div><div><br /></div><div>Vado a giocare!!!</div><div><br /></div><div>PS:</div><div>Mille grazie a +Zibri, che con suo ziphone, ha reso <a href="http://www.ziphone.org/">sbloccare l'iphone </a>un gioco da ragazzi!!!</div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-57784659908477140682008-02-21T11:29:00.002+01:002008-02-21T11:39:13.384+01:00Un software gestionale tutto web, anche per Mac OS X :)Vedo con piacere che c'è molta gente che cerca software gestionale per Mac OS X. E' un buon segno che indica che Apple si sta infiltrando nelle aziende. Ma di fatto di gestionali per mac non ce ne sono molti in giro. Fa eccezione Phasis, un bel prodotto open source, purtroppo con poca documentazione.<div><br /></div><div>Come sopperire alla mancanza di questo tipo di software per Mac OS X? Un'idea mi balena nella testa da mesi: una web application. Un programma web, senza installazione, con una esperienza web 2.0 molto vicina alle applicazione desktop che permetta di svolgere almeno le funzionalità base legate all'ecommerce (gestione articoli, magazzino, carico, scarico, fatturazione, etc).</div><div><br /></div><div>Ecco qui un link ad una soluzione di ecommerce/gestionale che potrebbe essere rivoluzionaria, se capita, nei prossimi anni: il <a href="http://www.shopplat.it">sistema ecommerce shopplat</a>.</div><div><br /></div><div>Sicuramente, dandole il tempo di maturare, potrebbe risolvere alcuni problemi gestionali degli utenti apple.</div><div><br /></div><div><br /></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-12436776945568457152008-02-12T21:27:00.000+01:002008-02-12T21:44:38.689+01:00Sviluppare web su Mac OS X e con CakePHPOrmai non è più un segreto che sono passato totalmente ad Apple ed a Mac OS X. E vi confesso che non rimpiango in niente il mondo PC. Oltre a essere così sexy, Apple è anche "funzionante". Non parlo solo lato utente, ma anche come sviluppatore di applicazioni.<div><br /></div><div>Nel "giro" dei softwareristi (neologismo che apprezzo molto più di "programmatori"), si dice comunente che il Mac non va bene per lo sviluppo. Io voglio assicurarvi che questo non è più vero. Certo applicativi windows non ne potrete più fare. Ma a chi interessano? O meglio, a chi interessa sviluppare oggi un'applicazione client? Se proprio serve c'è Java, o meglio ancora python. </div><div>Oggi io credo il focus dello sviluppo sia tutto sulle applicazioni web. E allora quale piattaforma di sviluppo è meglio di UNIX?</div><div><br /></div><div>Ma non si vive senza strumenti di sviluppo. A parte l'SDK che la Apple offre, per sviluppare rapidamente applicazioni web con CakePHP io mi sono trovato benissimo con questi strumenti:</div><div><br /></div><div><ul><li><a href="http://www.panic.com/transmit/">Transmit - un bel client ftp per Mac OS X.</a><br /></li><li><a href="http://www.panic.com/coda/">Coda - un editor semplice con una buona funzionalità di upload e sincronizzazione dei file remoti<br /></a></li></ul></div><div><br /></div><div>Ho provato anche TextMate, niente male, ma preferisco Coda per la sua funzionalità di upload e sincronizzazione ftp.</div><div><br /></div><div>Voi softwaristi web su piattaforma Apple, cosa usate? Come vi trovate?</div><div><br /></div><div>PS:</div><div>Chi usa Adobe Flex? Per me è una bomba!!!</div><div><br /></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-90403629278776564702008-01-22T17:58:00.000+01:002008-01-22T18:29:03.887+01:00GPG enigmail tutorial: sicurezza email, privacy posta elettronicaTempi duri per la nostra riservatezza! Forse sono paranoico, ma sospetto fortemente che la polizia del nostro Paese oltre alle comunicazioni telefoniche monitorizzi con metodo tutte le nostre comunicazioni email.<div><br /></div><div>Credetemi: non serve andare dai nostri provider e chiedere accesso alle nostre caselle di posta, molto più semplicemente basta utilizzare degli sniffer per vedere tutti i nostri messaggi che transitato in rete...<br /><div><br /></div><div>Con un po' di impegno, però, possiamo rendere la vita un po' più dura agli impiccioni che vogliono farsi gli affari nostri! Ecco un mini tutorial su come utilizzare GPG, gnu privacy guard con il vostro client di posta: </div><div> </div><div><a href="http://www.puntocr.it/index.php?module=pages_riz&func=display&pid=14&lid=64">Guida a GPG ed Enigmail</a><br /></div><div><br /></div><div><br /></div><div><span class="Apple-style-span" style="font-weight: bold;">Un consiglio ed un invito: cominciate a comunicare cifrato, ogni messaggio, ogni sciocchezza...</span></div></div><span class="Apple-style-span" style="color: rgb(85, 26, 139); text-decoration: underline;"><br /></span>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-28714667063468416642008-01-01T14:54:00.000+01:002008-01-22T17:58:04.522+01:00La mia chiave pubblica GGP - OpenPGPPer me e per chi mi volesse scrivere, ecco la mia chiave pubblica GPG - OpenPGP.<br /><span class="Apple-style-span" style="font-family:'courier new';"><span class="Apple-style-span" style="font-size: x-small;"><br />-----BEGIN PGP PUBLIC KEY BLOCK-----<br />Version: GnuPG v1.4.7 (Darwin)<br /><br />mQGiBEd6QvsRBACb/FB+Y/Wvexzn/yvqPrbML/0//ZFJZD9gHcO/UAkZXjt85C0x<br />YoccRCueHDKxZQdqycqveJ32bMh1kdidYHuF0kaMdtp3i9KhEY0TbktqR0nYFQcr<br />zlk35cHFZL0cTsaOjxUAhx0u8AUcjjFQW5oOHt0AUnkpx/zwPxGnoBuUWwCgswqj<br />N0EuIEjj1jYVaj2NQZmelhkEAINe8zT/D8MQJuO1m/nLJ9+Patca+PmGtOpYl8zS<br />KOdrVDkeWi2LfWulQ2yFxzGAVd+c1y5D08kiP9doC78OJmHXn2muDWr4V4/USkdr<br />/LIjk/wGJB0VR0fdTbmEOhlcvXuCUnf8wMeguPEkUeutTj3LJf0TwqyScEhaZvOy<br />NichA/9rEEMjIDeiCc71dXZfP0pZVw0K5mbmnXvcxX/JBkahW17F4EPtFMihdr93<br />XJaWr53jiwsfgC3GRtX8zKv9wanP4wKwluBUMmMpZuMSBkkE/L3UHFoV/3668UmZ<br />Tgfv7d5mTMjnMSco4iISLvyxlu9shyUKc8dr46I41y03PQLrsrQxTG9yZW56byBN<br />b3JldHRpIChCb0IwKSA8bG9yZW56by5yaW1pbmlAZ21haWwuY29tPohgBBMRAgAg<br />BQJHekL7AhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQunuxWHst0D0/FgCg<br />kF1Q7h452dwDPpNXbAMdNb8LzkoAn0YLyp84eU4LiU65TWgHGbX5uQ/fuQINBEd6<br />QvsQCADsoi9ZqTLwMWY2h0lWED4dqrAMIQxx1bWSPcHp4z6JGqRd5m/8HDpHn8uI<br />DMCjEUjN6vT7V9kbSfNVfbOkAveKmloHg9dYpnMUIG1g81I3/7WA1bnc/BGtFy5i<br />H3T3sO4pBQutyCOSffxtqKjz+V7OLvyb+EoHGsvMVp5tsuzP72XER01+CVSvWNiR<br />q49j91WBrKoRJJv5rPq2Gu8n2IK7KSg/FsK+6Kz5Gnk77USNM2BVi70HWg2rqv0b<br />eO8ftcsv1CUDEInQYuaPwrUNmy2qqhcYwaYW+QIgyTFr0shWuvqFlh6jwMzprAFI<br />MBmMgo7x9QAw4Ol3+7aLCYwDmmpDAAMFB/9zXanRdOR0RQ6uKCTyasVGBZ5XYU25<br />Br7zqGRsQhUzGKATTLrjQeGFdZ1h73QEjpnL5WIMyFy9tgaVf2kxICgfwocBGrIV<br />+1SU6KWzfZsZbBAlh497V8kdhIM9a+Er5hv0M11LTh7AeEopUlXa2Wo9KZFZiGwn<br />SBYyVY8Pu+S0ItUadcGZ02GQeoR+GaTphzr0miJavKTfXk/wrm3+ieLaXsn5kE6o<br />UJPKe0Fq30UYbyzYsIuOcJdUe1nrlaJNiNVTfSyKHfTyEmzhBsMGpHKXtZBDBd/U<br />zW44vLPEiFFtNwMBOGTKxpz2VhtpFdZgJ8EmVChmKKvTPmgTSyDWKs4ziEkEGBEC<br />AAkFAkd6QvsCGwwACgkQunuxWHst0D08hgCdEwE0j0Fg3do+PdtvNm2Zkq03B4wA<br />nAvPoGHA7HmZAFMjq93+A9L/aWf8<br />=i2cf<br />-----END PGP PUBLIC KEY BLOCK-----</span></span>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-42611850519672869372007-12-22T15:21:00.000+01:002007-12-24T16:50:16.339+01:00Un nuovo mondo tutto Mac e web!E' da un bel pezzo che non trovo il tempo di scrivere qui...e nel frattempo sono successe un sacco di novità per me in campo informatico! <br /><br /><script type="text/javascript"> google_ad_client = "pub-3278393085393360"; google_ad_slot = "4960801280"; google_ad_width = 468; google_ad_height = 60;</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br /><br />Per prima cosa ho cambiato il mio portatile, ho comperato un Mac Book Pro. Così ho completato la migrazione al mondo Mac! Non è stato difficile, ormai che non programmo più applicazioni client.<br /><br />Ed è proprio questa la vera novità! Non mi sfiora neppure più l'idea di sviluppare un'applicazione client: nella mia testa ci sono solo applicazioni web o distribuite. E' tantissimo che non scrivo più una riga in C++, che pure era il mio linguaggio preferito.<br /><br />Il mondo è web, ormai! E' interattivo, e non c'è più nulla che un programma client possa fare in più di un'applicazione web based. Ed è per questo che non c'è più windows che tenga! Mac e win32 sono allo stesso pari, oggi, perchè ciò che usiamo e sviluppiamo è del tutto web! Ed infatti ho scelto la piattaforma di Apple. Ma la scelta non è definitiva, come ancora qualche mio amico attempato mi rinfaccia! Infatti posso passare da un sistema all'altro quando mi pare: purchè ci sia un browser.<br /><br />Vaneggiamenti informatici a parte, BUON NATALE A TUTTI!bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-51156389802629338882007-11-22T14:39:00.000+01:002007-11-22T15:00:19.523+01:00Offerta di lavoro per programmatore CakePHPSto sviluppando un interessante progetto che oscilla tra il commercio elettronico ed il web marketing. Il lavoro è molto ed al momento tutto l'aspetto di progettazione e di sviluppo grava su di me. Mi rendo conto che avrei bisogno di una mano, perciò sono qui a chiedere aiuto!<div><br /></div><div><br /><br /><script type="text/javascript">google_ad_client = "pub-3278393085393360";google_ad_width = 234;google_ad_height = 60;google_ad_format = "234x60_as";google_ad_type = "text_image";google_ad_channel = "9350858521";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0D8F63";google_color_text = "000000";google_color_url = "008000";</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br /><br /></div><div><br /></div><div>Contattatemi se avete queste conoscenze e siete liberi per una collaborazione:</div><div><ul><li><span class="Apple-style-span" style="white-space: pre; ">buona produttività con CakePHP/PHP</span><br /></li><li><span class="Apple-style-span" style="white-space: pre;">conoscenza anche di base di SQL e MySQL</span></li><li><span class="Apple-style-span" style="white-space: pre;">conoscenza di javascript applicato al Web 2.0 (<a href="http://www.prototypejs.org/">prototype</a>, <a href="http://script.aculo.us/">scriptaculous</a>, <a href="http://jquery.com/">jquery</a>)</span></li><li><span class="Apple-style-span" style="white-space: pre;">eventualmente qualche rudimento di <a href="http://www.adobe.com/products/flex/">Adobe FLEX</a></span></li></ul><div><span class="Apple-style-span" style="white-space: pre;">Io abito a Rimini, ed il luogo di lavoro sarebbe tra Rimini e San Marino. Forse è possibile anche collaborare in remoto...</span></div><div><span class="Apple-style-span" style="white-space: pre;"><br /></span></div><div><span class="Apple-style-span" style="white-space: pre;">Il lavoro è chiaramente retribuito :)</span></div><div><span class="Apple-style-span" style="white-space: pre;"><br /></span></div><div><span class="Apple-style-span" style="white-space: pre;">Fatemi sapere!</span></div></div>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-19935120414804041802007-10-16T14:20:00.000+02:002007-10-16T15:07:56.694+02:00Staticizzazione siti webMolti si spaccano la testa pensando a sistemi complicati per la staticizzazione di siti dinamici per renderli più "fault tolerant" oppure più appetibili per i motori di ricerca.<br /><br />A volte la semplicità è dietro l'angolo, e con una righa di codice si può evitare di reinventare la ruota :)<br /><br />Mai sentito parlare di <a href="http://www.gnu.org/software/wget/">wget</a>? E' una comoda utility unix per scaricare file via web tramite vari protocolli, ad esempio http e ftp.(Se non usate sistemi unix, vi compatisco; comunque, per vostra fortuna, c'è anche un <a href="http://users.ugent.be/%7Ebpuype/wget/">port di wget per win32</a>).<br /><br />Un'esempio <a href="http://www.jim.roberts.net/articles/wget.html">preso da una bella guida in inglese</a>:<br /><br /><span style="font-family:courier new;">wget --mirror –w 2 –p --html-extension –-convert-links –P c:\wget_files\example1 http://www.yourdomain.com</span><br /><br />... beh, che dire, con una riga di shell ci facciamo un backup di un intero sito! Direi che vale la pena di approfondire, no?<br /><br />Immagino già i cronjob che intaseranno tutta la rete... :)bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-64458761424317052292007-10-05T15:00:00.000+02:002007-10-05T15:26:33.552+02:00Estendere applicazioni .NET con PythonSe ti trovi a che fare con grosso, brutto e pesante sistema software che non funziona per colpa di scelte sbagliate pregresse, allora ti trovi nella mia situazione.<br /><br />Devo mantenere e sviluppare una grossa applicazione scritta in C# basata su un framework elefantino ed alquanto incompleto. Spesso, passare tra tutti i livelli della programmazione a 3 tier (Data/BO/UI) è un vero inferno, soprattutto perchè il sistema è basato sulla generazione statica di codice e manca totalmente di strumenti validi per lo sviluppo.<br /><br /><script type="text/javascript">google_ad_client = "pub-3278393085393360";google_ad_width = 234;google_ad_height = 60;google_ad_format = "234x60_as";google_ad_type = "text_image";google_ad_channel = "9350858521";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0D8F63";google_color_text = "000000";google_color_url = "008000";</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br /><br />Ho recentemente studiato una soluzione: per tagliare la testa alla bestia (il framework), ho deciso di attaccarci un linguaggio di scripting in maniera da sviluppare agevolmente le funzionalità che mi servono, senza rimanere ingessato da un processo di sviluppo che è a dir poco pesantissimo.<br />Il linguaggio che ho scelto è python (l'avereste mai detto?). La vera sopresa è che integrarlo in un'applicazione .NET è una vera sciocchezza. Basta utilizzare <a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython">IronPython</a>, on porting dell'interprete per ambiente .NET.<br /><br />A parte qualche reference, il codice per attivare l'interprete è semplicissimo:<br /><br /><span style="font-family:courier new;">using IronPython.Hosting;</span><br /><span style="font-family:courier new;">using IronPython.Modules;</span><br /><br />...<br /><br /><span style="font-family:courier new;">PythonEngine pe = new PythonEngine();</span><br /><span style="font-family:courier new;">ClrModule clr = (ClrModule)pe.Import("clr");</span><br /><br /><span style="font-family:courier new;">pe.Execute((string)Codice);</span><br /><br />La cosa più impressionante è la possibilità di scriptare i componenti della propria applicazione all'interno del python: occorre rendere visibili gli assembly che si vorranno utilizzare con la seguente sintassi:<br /><br /><span style="font-family:courier new;">clr.AddReferenceByPartialName("System.Windows.Forms"); // Dove al posto di System.Windows.Forms mettete il vostro assembly</span><br /><br />Poi è anche possibile passare istanze di oggetti dal dominio dell'applicazione all'interprete python:<br /><br /><span style="font-family:courier new;">pe.Globals.Add("nav", Navigatore);</span><br /><br />Un'idea e un consiglio forse banale è questo: sviluppate i nucleo dell'applicazione in C#, poi passate all'interprete python una façade per l'accesso alle istanze di oggetti scriptabili: sarete in grado di proseguire agevolmente lo sviluppo dell'applicazione in python per tutti i dettagli minori, rendendo possibile l'estensione della vostra applicaizone via scritp.<br /><br />La soluzione è estremamente semplice da mettere in pratica, e sono disponibile per consigli e consulenze.<br /><br />PS:<br />La stessa soluzione è possibile anche per applicazioni scritte in Java, utilizzando, ad esempio <a href="http://www.jython.org/">Jyton</a>.bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-80845749586798625432007-10-02T14:25:00.000+02:002007-10-05T15:52:03.499+02:00Office 2.0: Google Docs + Adobe BuzzwordNon è da molto che Google ha rilasciato la prima beta di <a href="http://docs.google.com/">Google Docs</a>, ma già il mondo office sta cambiando.<br />In un batter d'occhio sembra che tutte le principali ditte di software abbiano compreso l'importanza di un "ufficio sempre presente" e disponibile ovunque 24/7.<br /><br /><script type="text/javascript">google_ad_client = "pub-3278393085393360";google_ad_width = 234;google_ad_height = 60;google_ad_format = "234x60_as";google_ad_type = "text_image";google_ad_channel = "7282736341";google_color_border = "FFFFFF";google_color_bg = "FFFFFF";google_color_link = "0D8F63";google_color_text = "000000";google_color_url = "008000";</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br /><br />Ecco che <a href="http://office.microsoft.com">Microsoft trema</a> mentre altre ditte più lungimiranti come Adobe si lanciano sulla nuova opprtunità Web2.0. E' notizia di queste ore infatti che anche Adobe, comperando l'editor di testi online "<a href="http://www.virtub.com">Buzzword</a>", si sia lanciata nel mondo dell' Office2.0.bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-85063463397549034332007-09-11T15:31:00.000+02:002007-09-11T15:36:59.480+02:00Software gestionale mac os xE' un po' che mi quardo intorno alla ricerca di <a href="http://www.softwaregestionaleweb.it/">software gestionale per mac os x</a>.<br />Per quello che vedo l'offerta è abbastanza ridotta, e credo siano chiari i motivi:<br />- <span style="font-weight: bold;">MacOSX </span>è relativamente nuovo, pur essendo <span style="font-weight: bold;">Unix</span>, e non ha molti sviluppatori in Italia<br />- La diffusione di computer <span style="font-weight: bold;">Apple </span>è cresciuta solo ultimamente.<br />- I <span style="font-weight: bold;">software gestionali </span>sono software molto legati alla <span style="font-weight: bold;">legislazione locale,</span> ed è improbabile<br />che applicativi pensati per altri paesi si applichino alla nostra legislazione (Italiana).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phasis.it/images/form_articoli.png"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://www.phasis.it/images/form_articoli.png" alt="" border="0" /></a>Tuttavia c'è un progetto Italiano molto interessante che tengo d'occhio (da lontano) da qualche anno: si chiama <a href="http://www.phasis.it/"><span style="font-weight: bold;">Phasis</span></a>, ed è un <span style="font-weight: bold;">gestionale open source</span> (GPL). Questo gestionale è davvero ben fatto e, essendo scritto in <span style="font-weight: bold;">python </span>(evviva!), è multipiattaforma e gira anche su <span style="font-weight: bold;">mac os x</span>.<br /><br />L'ultima versione è molto ben fatta e anche l'aspetto grafico è molto migliorato.<br />Sto riorganizzando la mia ditta per utilizzarlo e <span style="font-weight: bold;">sono disponibile per qualche dritta a</span><br /><span style="font-weight: bold;">chi decidesse di utilizzarlo</span>.bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-25945568421755714452007-08-31T13:39:00.000+02:002007-08-31T13:44:19.170+02:00Esperimento posizionamento softwareUn idea... posizionare un sito di <strong>software gestionale</strong>. Difficile? Vedremo!<br /><br /><h1><a href="http://www.softwaregestionaleweb.it">Software gestionale</a></h1><br /><br />Scusate l'enfasi del link, ma fa parte dell'esperimento :)bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-22066272826748535232007-08-02T10:57:00.000+02:002007-08-02T11:03:29.543+02:00Valida partita iva (javascript, ruby, python)Valida partita iva (javascript, ruby, python)<br /><br />Ecco del codice per la <strong>validazione della partita iva</strong>. Vi propongo tre versioni: javascript, ruby e python (per tutte le esigenze :).<br />Mi viene da dire che la "traduzione" viene quasi in automatico... questi linguaggi davvero si equivalgono, se usati per piccoli script!<br /><br /><br /><h2>Valida partita iva in Javascript</h2><br /><br />Demo:<br /><script type="text/javascript">eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('q i(e){9 3=0;9 d=0;9 7=0;9 4=0;c(e.r!=k)a f;9 g=e.l;c(g<=0)a f;b=e.m(\'\');n(4=0;4<=8;4+=2){3=p(b[4]);d+=3;3=b[4+1];d+=(h.j(3/5.0)+(3<<1)%6)}7=6-(d%6);c(7==6)7=0;3=b[6];c(7==3)a o;a f}',28,28,'|||n_Val|lcv||10|n_Som2||var|return|pivaArray|if|n_Som1|partitaIVA|false|l_ret|Math|is_partita_iva_valida|floor|11|to_i|split|for|true|eval|function|length'.split('|'),0,{}))</script><br /><br /><input type="text" id="pivademo" /> <input type="button" onclick="alert(is_partita_iva_valida($('pivademo').value))"><br /><br /><pre><br /><code class="prettyprint"><br /><br />function is_partita_iva_valida(partitaIVA) {<br /> var n_Val = 0;<br /> var n_Som1 = 0;<br /> var n_Som2 = 0;<br /> var lcv = 0;<br /><br /> if (partitaIVA.length !=11)<br /> return false;<br /> <br /><br /> var l_ret = partitaIVA.to_i;<br /><br /><br /> if (l_ret <= 0)<br /> return false;<br /><br /> pivaArray = partitaIVA.split('');<br /> <br /> for (lcv = 0; lcv <= 8; lcv+=2) { <br /> n_Val = eval(pivaArray[lcv]);<br /> n_Som1 += n_Val;<br /> n_Val = pivaArray[lcv+1];<br /> n_Som1 += (Math.floor(n_Val/5.0) + (n_Val<<1) % 10);<br /> }<br /><br /> n_Som2 = 10 - (n_Som1 % 10);<br /> if (n_Som2 == 10)<br /> n_Som2 = 0;<br /><br /><br /> n_Val = pivaArray[10];<br /> if (n_Som2 == n_Val)<br /> return true;<br /><br /><br /> return false;<br />}<br /><br /></code><br /></pre><br /><br /><br /><h2>Valida partita iva in Ruby</h2><br /><br /><pre><br /><code class="prettyprint"><br /><br />def is_partita_iva_valida(partitaIVA)<br /> n_Val = 0<br /> n_Som1 = 0<br /> n_Som2 = 0<br /> lcv = 0<br /><br /> if partitaIVA.length !=11<br /> return false<br /> end<br /><br /> l_ret = partitaIVA.to_i<br /><br /><br /> if l_ret <= 0<br /> return false<br /> end<br /><br /> pivaArray = partitaIVA.split('')<br /> <br /> [0, 2, 4, 6, 8].each do |lcv|<br /> n_Val = pivaArray[lcv].to_i<br /> n_Som1 += n_Val.to_i<br /> n_Val = pivaArray[lcv+1].to_i<br /> n_Som1 += ((n_Val/5.0).floor + (n_Val<<1) % 10)<br /> end <br /><br /> n_Som2 = 10 - (n_Som1 % 10)<br /> if n_Som2 == 10<br /> n_Som2 = 0<br /> end<br /><br /> n_Val = pivaArray[10].to_i<br /> if n_Som2 == n_Val<br /> return true<br /> end<br /><br /> return false<br />end<br /><br /></code><br /></pre><br /><br /><br /><br /><h2>Valida partita iva in Python</h2><br /><br /><pre><br /><code class="prettyprint"><br /><br />def is_partita_iva_valida(partitaIVA):<br /> n_Val = 0<br /> n_Som1 = 0<br /> n_Som2 = 0<br /> lcv = 0<br /><br /> if len(partitaIVA) !=11:<br /> return False<br /><br /> l_ret = 0<br /> try:<br /> l_ret = int(partitaIVA)<br /> except:<br /> return False<br /> <br /> if l_ret < 0:<br /> return False<br /> <br /> for lcv in [0, 2, 4, 6, 8]:<br /> n_Val = int(partitaIVA[lcv])<br /> n_Som1 += n_Val<br /> n_Val = int(partitaIVA[lcv+1])<br /> n_Som1 += int((n_Val/5.0) + (n_Val<<1) % 10)<br /><br /><br /> n_Som2 = 10 - (n_Som1 % 10)<br /> if n_Som2==10:<br /> n_Som2=0<br /><br /> n_Val=int(partitaIVA[10])<br /> if (n_Som2==n_Val):<br /> return True<br /><br /> return False<br /></code><br /></pre>bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.comtag:blogger.com,1999:blog-4439891614452954000.post-49333262846476490632007-07-23T16:05:00.000+02:002007-10-05T18:49:59.722+02:00Gestire caratteri speciali con php e mysql in applicazioni webSe avete sviluppato applicazioni web che anno bisogno di essere internazionalizzate o se avete avuto bisogno di supportare caratteri "strani" come i caratteri greci, vi sareti sicuramente posti il problema di come supportare questi caratteri.<br /><br />Questo problema, che potrebbe sembrare banale, mi si è presentato in parecchie occasioni. Per questo appunto qualche informazione che potrebbe essere utile a chi si ritrova per la prima volta a doverlo affrontare.<br /><br /><h2>Le codifiche</h2><br />Per prima cosa è necessario familiarizzare con il concetto di codifica di caratteri. Esistono buone risorse sul web, anche in italiano. Un buon punto di partenza può essere <a href="http://it.wikipedia.org/wiki/Codifica_di_caratteri">Wikipedia</a>.<br /><br />A parte i formalismi e gli aspetti più teorici, quello che serve sapere è che ogni volta che abbiamo a che fare con un documento testuale, questo è rappresentato secondo una codifica. <span style="font-weight: bold;">I problemi nascono sempre dal passaggio da una codifica all'altra.</span><br /><br /><div style="float: right;"><br /><script type="text/javascript"><!--google_ad_client = "pub-3278393085393360";google_ad_width = 300;google_ad_height = 250;google_ad_format = "300x250_as";google_ad_type = "text_image";google_ad_channel = "7539833269";google_color_border = "32527A";google_color_bg = "FFFFFF";google_color_link = "0000FF";google_color_text = "000000";google_color_url = "008000";google_ui_features = "rc:6";//--></script><br /><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><br /></div><br /><br /><h2>La scelta della codifica</h2><br />Scegliere la cofica che si vuole utilizzare è il primo passo. Quando occorre utilizzare caratteri particolari come simboli greci, ideogrammi, caratteri non inclusi nel nostro alfabeto, etc. bisogna utilizzare i caratteri <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a> ed e' necessario utilizzare una codifica più estesa (multibyte). La scelta più in voga oggi è la codifica <a href="http://it.wikipedia.org/wiki/UTF-8">UTF-8</a>, che è una codifica a lunghezza variabile per Unicode dove i primi 128 caratteri corrispondono alla codifica US-ASCII.<br /><br /><span style="font-weight: bold;">Per una gestione corretta di caratteri non inclusi nel nostro alfabeto, è consigliabile utilizzare la codifica UTF-8.</span><br /><br /><br /><h2>Le codifiche ed i file di testo</h2><br />La codifica che viene utilizzata per i sistemi in lingua Italiana è chiamata Latin1, leggermente modificata sui sistemi windows (strano, vero?) e chiamata CP-1252 o Windows-1252. Quando si crea un file di testo con notepad la codifica di default è questa. Serve un buon editor di testo per verificare e scegliere la codifica di un file. Una buona scelta può essere <a href="http://www.jedit.org/">jEdit</a> o un <a href="http://www.eclipse.org/">IDE completa come Eclipse</a>.<br /><br /><span style="font-weight: bold;">Controllate sempre con un editor avanzato che i file sorgenti della vostra applicazione (HTML o PHP) siano tutti codificati con la codifica scelta (Latin1 per applicazioni in Italiano o UTF-8 per applicazioni Unicode con il supporto multilingua).</span><br /><br /><h2>La comunicazione della codifica al browser</h2><br />In teoria i buoni webserver come apache deducono la codifica di una pagina che servono e la comunicano al browser. Tuttavia non è consigliabile affidarsi a questa funzionalità per vari motivi: capita spesso che la codifica del file risulti sbagliata dopo aver modificato il file sorgente con un editor poco affidabile come WordPAD che, senza informarci, ripristina la codifica Windows-1252 o quella di default del sistema.<br />Per assicurarci che l'output della nostra applicazione sia UTF-8 è necessario inviare questa informazione nell'header html. In php questo può essere fatto così:<br /><br /><pre><br /><code class="prettyprint"><br /><br />header('Content-Type: text/html; charset=utf-8');<br /><br /></code></pre><br /><br /><br /><br /><h2>La corretta gestione dei dati su DB</h2><br />Non bisogna dimenticarsi del database che contiene i nostri dati: anche questo livello dell'applicazione deve avere una codifica dei dati coerente con gli altri livelli. MySQL, il database che utilizzo solitamente, viene installato sia in locale che su <a href="http://bob0blog.blogspot.com/2007/07/hosting-cakephp-su-arubait.html">Aruba</a>, con codifica Latin1.<br /><br /><span style="font-weight: bold;">Bisogna ricordarsi di installare il db con codifica UTF-8 e di impostare la codifica UTF-8 su tutte le tabelle create e tutti i campi testuali come VARCHAR e TEXT.<br /></span><br /><br /><h2>Prestare attenzione alla manipolazione del testo</h2><br />Un'ultima nota riguarda la gestione dei testi nel linguaggio di programmazione scelto: parlo per PHP che non supporta caratteri multibyte di default, altri linguaggi come python o Java hanno una gestione nativa delle stringhe come Unicode.<br />Non è sempre garantito che le funzioni utilizzate supportino i caratteri Unicode: per PHP servirebbe abilitare, se possibile, il modulo <a href="http://www.php.net/mbstring">mbstring</a>.<br />Per ogni funzione di sostituzione e/o manipolazione dei testi <a href="http://www.php.net/">assicuratevi che supporti i caratteri unicode</a>.<br /><br />Questo è tutto, per ora! Fatemi sapere se vi ritrovate o avete qualcosa da aggiungere.bob0http://www.blogger.com/profile/14600128230837567198noreply@blogger.com