Ultimamente ho fatto ordine tra gli elementi che compongono la mia Dock (che potete vedere qui accanto).
![]()
Per separare logicamente le applicazioni che compongono la Dock, ho deciso di introdurre alcuni elementi “separatori” (degli spazi vuoti) tra le applicazioni. In questo modo è più facile distinguere tra il gruppo di applicazioni che servono a svolgere un determinato task da un altro.
Come si aggiunge il separatore?
Aprite un terminale e digitate:
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}'; killall Dock
All’ultima posizione della vostra Dock verrà aggiunto un separatore che potrete spostare come un’applicazione.
Per rimuovere il separatore è sufficiente trascinarlo fuori dalla Dock, come una normale applicazione.
Blog
OSX: come aggiungere un separatore tra gli elementi della Dock
Formattare i decimali con Python
Un problema che ho recentemente risolto usando Python e la logica binaria prevedeva di stampare i numeri binari usando lo stesso numero di cifre [ad esempio: nel caso di 8 bit, stampare le parole di 4 bit anteponendo zero per quattro volte]. Tecnicamente, gli zero a sinistra sono ininfluenti ma servono per uniformare la formattazione, e in gergo sono chiamati leading zeros.
Questo ragionamento non vale solo per i numeri in binario, ma per tutti i casi in cui si vuole formattare l’output di Python.Veniamo al codice. Si può formattare la stringa tramite
format, specificando il numero di leading zeros.
Esempio:for i in range(1,101,1): print(format(i, "03d"))In questo caso vengono stampati i numeri usando 3 cifre: si parte quindi da 000 e si arriva a 100. E in più, abbiamo usato una sintassi già compatibile con Python3.
L’imprecisione dilagante del giornalismo tecnologico italiano su iPhone5
Normalmente non scrivo per riportare notizie o imprecisioni, ma spesso è troppo. Criticare è facile, ma riportare informazioni dettagliate e verificate è più difficile. Parlo di quest’articolo di tmnews, Appena nato ha già problemi, l’iPhone 5 ha le “mappe sballate” [linkato da me, ovviamente, in nofollow].
Ci sono diverse imprecisioni:
- Il titolo: il “problema” [se così vogliamo chiamarlo] delle mappe non è di iPhone5, ma del sistema operativo iOS6. Perché si parla di “problema”, anche se non lo è? Con iOS6, Apple ha abbandonato Google come sorgente di dati dell’app “Maps”, utilizzando OpenStreetMap per questioni di “concorrenza” [ma questo è un altro discorso]. Le mappe di OpenStreetMap non sono precise e dettagliate come quelle di Google, e da qui il “problema”.
- iOS 6 è installabile non solo su iPhone 4S, ma anche su iPhone4 e iPhone3GS.
- “Si tratterebbe di un normale assestamento”: Apple rilascerà sicuramente altre versioni di iOS6 in futuro, ma non tornerà sicuramente sui propri passi. E OpenStreetMap non si correggerà nel giro di pochi giorni perché gli utenti Apple sono scontenti delle mappe.
Ma veniamo alla disinformazione: citando le informazioni di cui sopra senza citare quello che sto per dirvi è fuorviante. Google ha un notevole vantaggio tecnologico rispetto a OpenStreetMap, le cui mappe sono crowdsourced dagli utenti. Ovviamente Maps su iOS6 non sarà preciso come Google Maps, e questo può creare situazioni divertenti, ma senza dubbio l’utente è libero di scegliere l’applicazioni per le mappe che desidera: Google Maps è in review da Apple, e se sarà approvata, gli utenti potranno presto utilizzare Google Maps.
Quanto agli utenti scontenti e la class-action: lasciate perdere, vendete subito il vostro iPhone. Non è un telefono per voi. Spendete i vostri soldi in altri oggetti “di moda“.
viaggiatreno-scraper: una libreria Ruby per accedere a viaggiatreno/trenitalia
Un po’ per divertimento e un po’ perché volevo approfondire la mia conoscenza di Ruby e delle regex, oltre che delle espressioni XPath, ho deciso di rilasciare una libreria opensource Ruby che ho creato. Permette infatti di accedere ai dati di viaggiatreno che espone gli orari dei treni di Trenitalia in tempo reale.
Come funziona?
Un paio di anni fa avevo scritto un parser analogo in Python, ma molto meno robusto [proprio perché non utilizzavo le espressioni XPath e le regex]. Il nuovo scraper, scritto in Ruby con l’ausilio di nokogiri, è molto semplice da utilizzare; un esempio:
irb(main):004:0> require './src/Train.rb' irb(main):005:0> train = Train.new(5033) # numero identificativo del treno (vedi Trenitalia.it) => 5033 (REG 5033): Il treno e' arrivato con 8 minuti di ritardo (state: FINISHED, delay: 8, lastUpdate: ) irb(main):007:0> train.status => "Il treno e' arrivato con 8 minuti di ritardo" irb(main):008:0> train.delay => 8 irb(main):009:0> train.lastStop => "[X] BERGAMO = SCHEDULED: 07:46 ACTUAL: 07:53\n" irb(main):010:0> train.trainStops => [[X] LECCO = SCHEDULED: 07:03 ACTUAL: 07:04 , [X] VERCURAGO S.GIROLAMO = SCHEDULED: 07:08 ACTUAL: 07:08 , [X] CALOLZIOCORTE OLGINATE = SCHEDULED: 07:11 ACTUAL: 07:11 , [X] CISANO CAPRINO BERGAMASCO = SCHEDULED: 07:22 ACTUAL: 07:21 , [X] PONTIDA = SCHEDULED: 07:26 ACTUAL: 07:32 , [X] AMBIVERE MAPELLO = SCHEDULED: 07:31 ACTUAL: 07:36 , [X] PONTE S.PIETRO = SCHEDULED: 07:38 ACTUAL: 07:43 , [X] BERGAMO = SCHEDULED: 07:46 ACTUAL: 07:53 ]Di conseguenza, un programma alert per venire avvisati via sms (tramite tinsms) solo quando il treno è in ritardo per più di 10 minuti, o quando il treno non è ancora partito (scioperi, malfunzionamenti, etc.), diventa:
require_relative 'src/Train.rb' require_relative '../sms-utils/sendsms.rb' RECIPIENT = 'num_tel' log = Logger.new('log/viaggiatreno-alert.log') log.level = Logger::DEBUG train = Train.new(ARGV[0]) if train.delay.to_i >= 10 or train.status == "Il treno non e' ancora partito" send_sms(RECIPIENT, train) log.info(train) endHo rilasciato i sorgenti su GitHub: viaggiatreno-scraper – il codice ha licenza GPL, e di conseguenza siete liberi di dire la vostra e soprattutto apportare migliorie!
Un altro esempio di cosa si potrebbe fare?
Ogni giorno alle 11:59PM, si potrebbe raccogliere la situazione di tutti i treni circolati sulla rete ferroviaria; in questo modo, si potrebbero estrarre delle curiose statistiche sul ritardo/anticipo medio, e tanto altro. Scrivere un task MapReduce/Hadoop che fa tutto questo non è per niente complicato…MacBook Pro: sfatiamo un mito, sostituiamo la RAM, e anche qualche consiglio
Ho deciso di raddoppiare la RAM del MacBook Pro che utilizzo quotidianamente, passando da 4GB a 8GB.
Sfatiamo subito un mito: i Mac [Intel] NON necessitano di RAM speciale e/o certificata per funzionare con i computer Apple!
I Mac Intel usano la stessa tipologia di RAM che è compatibile con i normali computer, percui è inutile (oltre che costoso) affidarsi ai rivenditori che si fregiano di avere l’unica RAM che è compatibile con i computer Apple senza nemmeno specificare la marca delle RAM che si stanno per acquistare.
La RAM inclusa all’acquisto è di marca Samsung. Io ho acquistato da Amazon, e più precisamente ho acquistato Corsair, spendendo 36€ [Apple ne chiede 100€ sullo Store per passare da 4GB a 8GB]. Le metriche che ho scelto per decidere, in ordine di priorità:
- Marca [Corsair e Kingston sono le migliori]
- Prezzo
- CAS latency [più bassa è meglio]
Il sito di support Apple ci spiega come determinare la RAM adatta al nostro sistema operativo, e ci spiega anche come installarla attraverso delle figure; come se non bastasse, ci sono anche video che dettagliano come fare passo-passo.
Il procedimento è molto semplice: basta un cacciavite e tenere a mente le norme basic per operare con apparecchiature elettroniche ed evitare le scariche elettrostatiche.
Il punto più difficle da districare è la questione garanzia: la rete è divisa, e alcuni forum affermano che sostituire la RAM invalida la garanzia, mentre altri siti si legge il contrario. Meglio prima fare un giro ad un Apple Store e chiedere informazioni.
Una volta che la RAM è installata, consiglio di testare che la RAM funzioni correttamente senza errori effettuando una sessione intensiva di Apple Hardware Test seguita da una sessione di memtest86+ [che si può trovare sui CD di Ubuntu].
Esportare gli SMS memorizzati su iPhone
iTunes fa una copia di backup di tutto il contenuto di iPhone; tuttavia, per scrupolo, ho deciso di fare una copia di backup anche in un semplice file di testo, degli SMS che ho inviato/ricevuto, in modo che siano indicizzabili da Spotlight.
Per prima cosa, trovate UDID del vostro device e installate il client sqlite3 da linea di comando [sqlite3 è il formato di database utilizzato da iPhone]; dopo aver fatto un backup iTunes del contenuto di iPhone, aprite un terminale e fate un dump CSV dei dati contenuti nel database degli SMS, salvato in un file locale dal backup di iTunes.
cd ~/Library/MobileSync/UDID
cp 3d0d7e5fb2ce288813306e4d4636395e047a3d28 ~/Desktop
cd ~/Desktop
sqlite3 3d0d7e5fb2ce288813306e4d4636395e047a3d28
.header on
.mode csv
.output smsexport.csv
select datetime(date, 'unixepoch', 'localtime') as "date", case when flags=3 then 'sent' else 'received' end as "from", address as phone, text as "message" from message;
.quit
A questo punto sul Desktop troverete un file
smsexport.csvche potete aprire con un editor di testo (o con Excel) che conterra il testo di tutti gli SMS che sono memorizzati su iPhone.Javascript Scope Quiz
Se vi state cimentando nell’apprendimento di Javascript, vi segnalo l’interessante Javascript Scope Quiz, che vi metterà alla prova sugli scope delle variabili. Il quiz non è difficile, ma vi aiuta a capire le particolarità di Javascript per quanto riguarda gli scope, come questa domanda:
Impariamo git con un semplice tutorial
GitHub, il social hoster di codice open source più famoso degli ultimi anni, ha messo a disposizione un semplice tutorial per imparare le basi di git, il SCM ideato da Linus Torvalds e lo standard de facto dei progetti open source.
Il tutorial si trova su Code School – Try Git.
OSX Mountain Lion 10.8: un po’ di customizzazione
Sulla falsariga di quanto avevo già fatto per MacOSX 10.7, e visto che anche questa volta sono stato un early adopter della nuova versione di
MacOSX, ho adattato lo script di customizzazione in modo da adattarsi alle nuove funzionalità di OSX.Mi sono ispirato allo script che trovate qui, facendo una selezione di quello che mi sembrava più ragionevole. Ovviamente, dopo aver inserito questi comandi dal terminale, consiglio un riavvio.
### ### Michele Bologna ### OSX 10.8 Customization kit (based on https://github.com/mathiasbynens/dotfiles/blob/master/.osx?os-x-10.8 ) ### # General # Menu bar: disable transparency defaults write NSGlobalDomain AppleEnableMenuBarTransparency -bool false # Disable opening and closing window animations defaults write NSGlobalDomain NSAutomaticWindowAnimationsEnabled -bool false # Always shows scrollbars defaults write NSGlobalDomain AppleShowScrollBars -string “Always" # Automatically quit printer app once the print jobs complete defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true # Disable “natural" (Lion-style) scrolling defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false # Enable full keyboard access for all controls # (e.g. enable Tab in modal dialogs) defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 # Disable auto-correct defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false # Finder # “Show Status bar in Finder" defaults write com.apple.finder ShowStatusBar -bool true defaults write com.apple.finder PathBarRootAtHome -bool TRUE # “Expand save panel by default" defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true # Expand print panel by default defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true # Finder: disable window animations and Get Info animations defaults write com.apple.finder DisableAllAnimations -bool true # Show icons for hard drives, servers, and removable media on the desktop defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true defaults write com.apple.finder ShowMountedServersOnDesktop -bool true defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true # Finder: show all filename extensions defaults write NSGlobalDomain AppleShowAllExtensions -bool true defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false # Don’t animate opening applications from the Dock defaults write com.apple.dock launchanim -bool false # “Show the ~/Library folder" chflags nohidden ~/Library # Stop Preview.app from using iCloud as default location when saving files defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false # Mission Control # Speed up Mission Control animations defaults write com.apple.dock expose-animation-duration -float 0.1 # Reset Launchpad find ~/Library/Application\ Support/Dock -name "*.db" -maxdepth 1 -delete # Safari # Enable Safari’s debug menu defaults write com.apple.Safari IncludeInternalDebugMenu -bool true # Enable the Develop menu and the Web Inspector in Safari defaults write com.apple.Safari IncludeDevelopMenu -bool true defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true # Add a context menu item for showing the Web Inspector in web views defaults write NSGlobalDomain WebKitDeveloperExtras -bool true # iTunes # Disable the iTunes store link arrows defaults write com.apple.iTunes show-store-link-arrows -bool false # Disable the Ping sidebar in iTunes defaults write com.apple.iTunes disablePingSidebar -bool true # Disable all the other Ping stuff in iTunes defaults write com.apple.iTunes disablePing -bool true # Make ⌘ + F focus the search input in iTunes # To use these commands in another language, browse iTunes’s package contents, # open `Contents/Resources/your-language.lproj/Localizable.strings`, and look # for `kHiddenMenuItemTargetSearch`. defaults write com.apple.iTunes NSUserKeyEquivalents -dict-add "Target Search Field" "@F" # Mail # Disable send and reply animations in Mail.app defaults write com.apple.Mail DisableReplyAnimations -bool true defaults write com.apple.Mail DisableSendAnimations -bool true # Terminal # Only use UTF-8 in Terminal.app defaults write com.apple.terminal StringEncodings -array 4 # Twitter # Enable the hidden ‘Develop’ menu defaults write com.twitter.twitter-mac ShowDevelopMenu -bool true # Open links in the background defaults write com.twitter.twitter-mac openLinksInBackground -bool true # Allow closing the ‘new tweet’ window by pressing `Esc` defaults write com.twitter.twitter-mac ESCClosesComposeWindow -bool true # Reset the open with menu /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user # Show debug menu (useful for "show every partition") on Disk Utility defaults write com.apple.DiskUtility DUDebugMenuEnabled 1 # Reveal IP address, hostname, OS version, etc. when clicking the clock # in the login window sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostNameMonitorare le spese con Moneytrackin
In un momento in cui il termine austerity fa capolino su tutte le testate giornalistiche, la tecnologia ci può venire in aiuto supportandoci nella gestione e nel monitoraggio delle spese che facciamo con i programmi di personal finance (il più famoso è sicuramente Microsoft Money, ormai dismesso da Microsoft).
In poche parole, i software di personal finance permettono di effettuare due semplici operazioni:
- registrare le entrate e le uscite che sosteniamo, categorizzando/taggando ogni spesa con una o più etichette: ad esempio, tutte le spese riguardanti l’automobile (benzina, tagliando, etc.) stanno sotto la categoria ‘automobile’.
- visualizzare le spese sostenute, differenziando la dimensione su cui si vuole esplorare la spesa: tempo (giorni/mesi/anni) oppure etichetta/e (“quanto ho speso quest’anno per l’automobile?”)
Il software di personal finance che ho scelto dopo un po’ di selezione è Moneytrackin. Si tratta di un software online (accedibile quindi da qualsiasi computer) che dispone anche di un’applicazione per iPhone (così posso registrare le spese anche quando non sono al computer). Ovviamente, l’utilizzo di Moneytrackin è gratuito e sicuro (protetto da https).
Il punto di forza di Moneytrackin è proprio nella reportistica: è disponibile sia online che offline (si può generare un report da esportare in PDF) e permette di controllare ogni spesa che abbiamo sostenuto, differenziando le spese in base ai tag (etichette) che abbiamo impostato. Il più famoso software di questo tipo è Mint, disponibile tuttavia solo negli US (e la funzionalità più interessante è che, previa autorizzazione, si collega direttamente all’online banking del vostro conto in modo da risparmiarvi la fatica della fase di inserimento dei movimenti, lasciandovi il piacere di visualizzare i report).
Ma qual è la vera utilità di questi software? La funzione dei software di finanza personale è senza dubbio quella di tenere monitorato le uscite (e le entrate), in modo da aiutarci a capire dove spendiamo (e dove guadagniamo). Personalmente utilizzo Moneytrackin da web (e su iPhone) da più di un anno e sono davvero molto soddisfatto.

