Di seguito gli interventi pubblicati in questa sezione, in ordine cronologico.
L'altroieri per questioni professionali mi sono imbattuto nel problema di stabilire computazionalmente un qualsiasi punto interno di un poligono. Supponiamo che vi si dia un poligono P costituito da N vertici: voi dovete rispondere con P_int, cioè dovete dotarmi di una procedura computazionale (cioè un algoritmo) che consenta di stabilire le coordinate di un punto (P_int) che si è certi essere contenuto nel poligono e non sul bordo. Tengo a precisare che la procedura deve funzionare con un qualsiasi poligono, cioè anche con uno concavo, altrimenti è troppo facile.
Nel caso di un poligono convesso, la soluzione sarebbe semplicemente di rispondere con la formuletta del calcolo del centroide (punto medio tra tutti i vertici) o del baricentro.
Tra le varie ipotesi fantasiose, verosimili ed inverosimili, la più stupida che ho trovato nella rete è stata questa: "basta guardarlo il poligono e indicare un punto interno". A dir poco geniale!
Le soluzioni algoritmiche più comuni a questa problematica si basano di solito sul ragionamento dell'attraversamento: provo ad attraversare il poligono. Alla prima intersezione entro nel poligono, alla successiva esco. Se il poligono è convesso, sono sicuro che entro una sola volta ed esco una sola volta. Se il poligono è concavo, a seconda della retta di attraversamento, potrei entrare ed uscire più volte, pertanto basta contare il numero di volte che ho incontrato un segmento del perimetro per dire se sono dentro o fuori. Se ne ho già incontrato un numero dispari di segmenti, mi trovo dentro il poligono; se invece ho incontrato i segmenti del poligono per un numero pari di volte, sono certamente fuori.
In una versione algoritmica la cosa difficile è proprio stabilire bene una buona retta di attraversamento:
- costruisco il bounding box (rettangolo contenitore) che contiene completamente il poligono (AABB)
- stabilisco un punto di prova che si trova dentro uno degli quattro quadranti al di fuori del bounding box: tale punto è sicuramente fuori dal poligono
- stabilisco la retta di attraversamento congiungendo tale punto ed il centro del bounding box
- determino tutte le intersezioni tra i segmenti del poligono e la retta di attraversamento
- se ho scelto opportunamente la retta di attraversamento, avrò sicuramente almeno un paio di intersezioni
- il risultato della computazione, cioè la risposta al problema, è il punto medio tra la prima e la seconda intersezione
Questo approccio algoritmico è però da evitare, perché potrebbe essere necessario dover cambiare la retta di attraversamento alcune volte. In più la retta di attraversamento potrebbe incrociare "malamente" qualche segmento, perché le è esattamente parallela, con tutti i problemi del caso. In tal caso non riusciamo a stabilire se l'intersezione che non è puntuale, ma è a tutti gli effetti un segmento vero e proprio, ci faccia entrare o uscire dal poligono. La gestione di questa casistica porterebbe a scrivere del codice specifico e comunque saremmo in presenza di approssimazioni nella valutazione dell'intersezione tra due segmenti pressoché paralleli.
Ce l'avete voi un'idea migliore per trovare una semplice soluzione al problema? Vi dico subito che c'è - è elegante e molto affascinante - e che l'ho già implementata, però ve la espongo più avanti.
Appena messo sul mio sito l'installer di BitmapToPolar 1.0b1.
E' necessario avere Microsoft .NET Framework 2.0 installato, ma chi ha da tempo gli aggiornamenti di Windows attivi da tempo, ce lo ha di sicuro. Anche chi ha Windows Vista o Windows 7, non ha nessuno problema.
Clicca qui per scaricare l'installer (file ZIP, 514 KB)
Ho scritto questa procedura per consentirvi di inserire dentro il vostro Polar il logo preferito.
E' necessario che mettiate pertanto a punto il logo di vostra preferenza dentro un qualche programma di manipolazione grafica - io uso Adobe Fireworks, ma potete usare benissimo Adobe Photoshop o anche il gratuito Gimp o semplicemente il Paint preinstallato di Microsoft.
Ricordatevi alcune caratteristiche deve avere l'immagine:
- immagine possibilmente già scalata alle dimensioni 64x22 pixel
- immagine possibilmente a toni di grigio o meglio monocromatica
- immagina salvata in formato BMP, meglio a 24 bit
Per poter personalizzare il tutto è necessario possedere uno dei seguenti ciclocomputer Polar:
Dovete avere installato anche una delle ultime versioni di Polar ProTrainer: io sto usando adesso la versione 5.40.172. Dovete essere in possesso anche della chiavetta ad infrarossi Polar, ma si riesce anche con chiavette IRDA di concorrenza, anche se queste ultime hanno non pochi problemi con Vista, per il fatto che i driver non sono certificati o sono scritti maluccio, causando di tanto in tanto qualche crash del sistema.
Questa la procedura per travasare il tutto:
- preparare l'immagine bitmap monocromatica a 64x22 pixel
- lanciare la mia applicazione BitmapToPolar
- scegli la voce Open... e selezionare il file bitmap appena preparato
- impostare opportunamente la soglia (threshold) per controllare l'effetto finale ottenuto
- riposizionare eventualmente il rettangolo rosso per centrare l'immagine desiderata, se l'avete preparata più grande del riquadro da 64x22 pixel
- scegliere la voce Save e salvare il file di estensione PMB
- lanciare Polar ProTrainer 5
- assicurarsi di avere la chiavetta USB/IRDA collegata al proprio dispositivo
- andare al menu Strumenti e scegliere la voce Modifica impostazioni prodotto Polar...
- impostare il proprio Polar (CS400) in modalità pronto per la Connessione: dalla schermata principale premere il tasto GIU' sul fianco destro, poi premere OK fino a quando dovrebbe comparire sul ciclocomputer l'indicazione Comunicazione infrarossi
- Polar ProTrainer dovrebbe colloquiare col dispositivo e leggere alcuni dati
- andare all'ultima pagina Logo nel dialogo che si è su Polar ProTrainer
- cliccare la seconda icona Apri
- cercare il file PMB che avete salvato poco fa con BitmapToPolar
- cliccare sul bottone a destra in basso Trasferisci per operare la modifica nel Polar
A questo punto il Polar dovrebbe uscire dalla modalità di connessione e mostrare la schermata iniziale col nuovo logo.
Effettivamente non ho mai capito perché Polar, l'azienda che si occupa della costruzione dei ciclocomputer più diffusi in circolazione non abbia mai fatto qualcosa per agevolare la personalizzazione dei propri dispositivi.
Mi riferisco ad una limitazione del software Polar Pro Trainer, che consente di disegnare al suo interno i loghetti da caricare dentro il proprio Polar, ma non è prevista la possibilità di convertire o importare immagini provenienti da altri formati grafici.
E' così che mi son messo dietro per realizzare BitmapToPolar, una semplicissima applicazione che consente di convertire qualsiasi immagine bitmap - un qualsiasi formato GIF, BMP, PNG o JPG può andare bene - nell'immagine in formato PMB, che è il formato interno con cui Polar salva i file nell'installazione locale del Polar Pro Trainer.
Sto finalizzando in questi minuti l'installazione del software e poi potrete scaricarvela direttamente dal mio sito.
Ho trovato un interessante articolo di Joe Wilcox al riguardo dell'ultimo servizio lanciato da Apple, iCloud. L'articolo originale lo trovate a questo URL. Io mi limito a tradurlo e a riassumerlo per la vostra curiosità.
Vale sempre il proverbio "meglio tardi che mai". Anche questa volta Apple probabilmente è arrivata in ritardo. E' successo in passato per Apple, è successo questa volta e aspettatevi che succeda ancora in futuro dalla casa di Cupertino.
Apple è arrivata in ritardo con la musica, quando nel gennaio del 2001 ha lanciato iTunes. La rivoluzione di Napster si era spinta parecchio in avanti e grazie a questo i produttori di macchine Windows erano riusciti a vendere un sacco di masterizzatori CD. Guardate invece adesso alla Apple e alla musica. Stessa cosa nella fonia, Apple è arrivata in ritardo con gli smartphone e i tablet. Adesso che ha già rilasciato più di 200 milioni di dispositivi con iOS, di cui 25 milioni di iPad in soli 14 mesi. La lista potrebbe andare avanti, ma avete capito il concetto.
Ora Apple arriva in ritardo anche col cloud e voilà, che tempismo! Il servizio di Apple, iCloud, è fondamentalmente diverso dai servizi di cloud computing che si sono visti sino ad ora. E' vero che i Mac fanatici potrebbero obiettare che Apple non è arrivata affatto in ritardo, perché prima c'era già MobileMe. Solo che quest'ultimo era un servizio assolutamente incompleto, se confrontato con l'offerta di Google. Apple però si rimboccata le maniche, ha preso e sorpassato Google in un colpo, cambiando sostanzialmente la modalità con cui i servizi della nuvola vengono erogati. Pertanto vediamo subito in 5 punti quali sono le cose da sapere sulla "nuvola" di Apple.
1. iCloud è più push che pull. Detto così in italiano non si capisce un granché. La maggioranza dei servizi cloud posta verso il server i contenuti, più che scaricarli o distribuirli in giro. Questo è quello che fa Google. Gli utenti memorizzano i messaggi e-mail nella nuvola o ci caricano su la musica allo scopo di ascoltarla nuovamente in streaming sui vari dispositivi. Stessa cosa per le foto. I documenti Google Apps sono creati addirittura sulla nuvola e rimangono lì; è sempre l'utente che si prende la briga di scaricarli se li va ad esportare.
La differenza è molto semplice: la maggioranza dei servizi di cloud computing richiede processi manuali per caricare o scaricare i contenuti. iCloud invece fa il grosso del lavoro automaticamente ed è concepito più per scaricare i contenuti verso i dispositivi più che conservarli sulla nuvola.
2. iCloud è principalmente un servizio di sincronizzazione. Per tanti utenti abituati coi servizi come Dropbox o anche Windows Live SkyDrive, iCloud sembrerà né più né meno che un servizio di storage online. Non è così, anche se tale prestazione è comunque disponibile. La memorizzazione c'è per facilitare la sincronizzazione tra i dispositivi - computer Mac, PC Windows, smartphone, player MP3 e tablet vari. Altri servizi si sincronizzano primariamente con la nuvola, mentre il servizio di Apple usa la nuvola per sincronizzare il contenuto tra i dispositivi.
Nel 2006 qualcuno aveva cominciato ad decantare l'importanza della sincronizzazione ed il fatto di essere una killer app. Ed infatti Apple ha intrapreso un miglior approccio verso la sincronizzazione, concentrandosi sul beneficio fondamentale per gli utenti: la semplicità. Non è pertanto sorprendente che Apple abbia un approccio di sincronizzazione tra tutti i dispositivi. Dopo tutto la società genera il grosso del suo fatturato dalla vendita dell'hardware e non offrendo servizi cloud.
Icloud può sincronizzare calendari, contatti, documenti, e-mail, foto e anche musica, oltre ad altre categorie di contenuti.
3. iCloud rimpiazza iTunes come principale centro della sincronizzazione Apple. Questa è probabilmente la funzione più significativa da un punto di vista strategico. La sincronizzazione è stata la killer feature di iTunes sin dal rilascio del primo iPod nell'ottobre 2001. Col passare degli anni iTunes è diventato in principale connettore per la sincronizzazione per Apple, solo che era nel posto sbagliato, soprattutto per le grosse aziende che hanno bisogno di amministrare iPad e iPhone. Il player musicale di Apple è stato uno strumento di sincronizzazione antiquato per troppo tempo, soprattutto quando Google si è messa ad offrire un eccellente sincronizzazione coi dispositivi Android.
iCloud rimpiazza iTunes e ne estende ulteriormente le sue capacità, come ad esempio sincronizzare più tipologie di contenuti. Anche le applicazioni e la muscia sono sincronizzate dal cloud, mentre non c'è affatto bisogno di usare iTunes.
4. iCloud non è un servizio di streaming di musica. Questa era una delle indiscrezioni che erano circolate sul conto di iCloud prima che uscisse: iCloud, un servizio di streaming musicale. Ma non lo è.
Le speculazioni parlavano di un servizio come Amazon o come Google, cioè un qualcosa che di fatto esisteva già e che la gente già utilizzava. Amazon ha lanciato il suo Cloud Player e i Cloud Drive Services a marzo 2011. Google Music è invece ancora in beta. Quello invece che ha fatto Apple è decisamente meglio. Sempre mantenendo il download automatico come principio principale, iCloud distribuisce il contenuto all'utente proprio attraverso lo scaricamento e la sincronizzazione tra i dispositivi. I due servizi di Amazon e di Goole invece consente agli utenti di caricare le loro librerie. Da parte di Apple invece la sua tecnologia push è una gran cosa. Apple sa già benissimo qual è la musica che hai comprato da iTunes.
5. MobileMe adesso è gratis. Apple chiedeva 99 dollari all'anno per quel servizio e anche di più per il servizio per cinque membri familiari attraverso il Family Pack. Con iCloud MobileMe diventa gratis e ci sono ben 5 GB di spazio disponibile. Ma Apple non considera le applicazioni comprate, gli ebook, la musica e le foto nel calcolo delle dimensioni dello storace. Perché? Come è stato scritto prima, iCloud non è un servizio di memorizzazione, ma solo sincronizzazione.
La parte di MobileMe è oltretutto senza pubblicità, che è assolutamente inusuale per i servizi cloud in questo periodo.
Per tutti quanto lo spazio del cloud sarà oltre i 5 GB, dietro un compenso di 25 dollari annuali. Per la musica che la gente non ha comprato da Apple, il servizio scansiona i brani e li riconosce usando il catalogo di 18 milioni di canzoni. Queste canzoni vengono aggiunte alla libreria e messe a disposizione per la sincronizzazione o il download in formato AAC a 256 kbps. Ancora una volta è tecnologia push. Gli utenti non devono buttare sulla nuvola niente.
I've never understood in several years of regular usage and development why Visual Studio Form Designer, hangs out while drawing and adjusting any form generated by itself.
You are forced to modify manually the Visual Basic or C# code in its #Region " Windows Form Designer generated code ", updated at your last successful creation modification.
I needes to add another TabPage in a TabControl, but I forgot to add also in the final part of the InitializeComponent() method these function calls:
Me.tabFiles.ResumeLayout(False)
Me.tabFiles.PerformLayout()
If you miss those ones, you are out of luck with docking and control anchoring in the TabPage. At runtime your controls contained in the page won't resize or fit correctly with respect of TabPage borders and you'll get an headache for sure while searching your bug.
Non ho mai capito perché il Visual Studio Form Designer, che uso da anni per disegnare le form delle applicazioni dei clienti, spesso va completamente in tilt e non è più in grado di rivisualizzare nuovamente form che sono state disegnate proprio da lui.
Si è costretti pertanto a procedere a modificare il codice dentro l'area #Region " Windows Form Designer generated code ", prodotta dal designer all'atto della creazione o dell'ultima modifica avvenuta con successo.
Dovevo semplicemente aggiungere una nuova TabPage dentro un TabControl, peccato che mi sia dimenticato di mettere anche queste istruzioni nella parte finale del metodo InitializeComponent():
Me.tabFiles.ResumeLayout(False)
Me.tabFiles.PerformLayout()
Se le dimenticate, non c'è verso che funzioni il docking o l'anchoring in esecuzione con grandi mal di testa alla vana ricerca dell'errore.
Non solo il mondo Apple, il mondo dell'informatica ed Internet, ma tutta la società moderna stamattina apprende la notizia che è venuto meno uno dei più grandi uomini della contemporaneità, Steve Jobs. Ha guidato per parecchi anni la Apple e solo nelle ultime settimane ha deciso di ritirarsi e passare il testimone a Tim Cook.
Il sito della Apple stamattina toglie i riflettori da Apple iPhone 4S e dà il massimo tributo a Steve Jobs, uno dei due fondatori, nonché massimo rappresentante dello spirito Apple.
Steve, semplicemente un grande. Grazie Steve.
E' una soluzione, quando si è costretti dalle soluzioni di database che si è scelti, cioè quando è necessario duplicare un database da un server ad un altro, un'operazione che sarebbe peraltro relativamente semplice e automatica, nel caso in cui uno dei due server sia una versione completa di Microsoft SQL Server.
Quando invece avete a che fare con due istanze di Microsoft SQL Server Express Edition, non vi rimane che il logshipping come "ultima spiaggia" per la replica, a meno che non decidiate di implementare una procedura manuale e più laboriosa per il travaso monodirezionale dei dati di un database:
RESTORE DATABASE myDatabaseName FROM DISK =
'C:\SWSoft\Plesk\Databases\MSDE\MSSQL\Backup\myDatabaseName.bak'
WITH INIT, STANDBY='standbyfilename.dat'
BACKUP DATABASE myDatabaseName TO DISK =
'C:\SWSoft\Plesk\Databases\MSDE\MSSQL\Backup\myDatabaseName.bak'
WITH INIT
Io ho preferito, in una problematica di un mio cliente, procedere con la scrittura di una procedura manuale, semplicemente perché la replica dei dati è anzitutto monodirezionale e l'aggiornamento incrementale dei dati è fattibilissimo a causa di una scarsa variabilità dei dati nel tempo.
Come da oggetto, metto in vendita un paio di banchi RAM da 1 GB cadauno. Trattasi di SO-DIMM RAM DDR3 PC10600S a 1333 MHz.
Questa RAM proviene da un hardware nuovo di casa Apple ed è stata usata si e no per tre settimane. Può essere installata in tantissimi portatili di nuova generazione o in parecchie serie di Mac Book, Mac Book Pro e Mac mini.
Il prezzo è 25 Euro, trattabilissimi. Se siete interessati, contattatemi pure via e-mail, Facebook o come volete.
|