Scrivere un immagine ISO da MacOS-OSX su una chiavetta USB

Ormai le unità CD/DVD sono completamente scomparse dai nostri Mac, ma spesso rimane la necessità di installare qualche distro Debian o Ubuntu su un PC che a sua volta non ha il DVD.

Il problema nasce una volta scaricato il file ISO dal sito della distro: come faccio a metterlo sulla chiavetta?

Fortunatamente il Mac ha tutto quello che serve a bordo, ma dobbiamo operare da command line, quindi cominciamo con l’aprire il terminal.

La prima cosa da fare è trasformare l’immagine ISO in un formato avviabile da chiavetta USB, perchè nel suo formato base non è “Bootable”.

Il comando da esegire è:

hdiutil convert -format UDRW -o Downloads/ubuntu.img  Downloads/ubuntu-16.04.2-desktop-i386.iso

Il file che otterremo ha l’estensione .dmg, è un default del Mac, ma va bene lo stesso.

Il passo successivo è infilare la chiavetta USB nello slot, e vedere come è stata montata dal sistema.

per fare ciò, eseguiamo il seguente comando:

diskutil list

il risultato sarà:

dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage Macintosh HD 499.4 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3

/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Macintosh HD +499.0 GB disk1
Logical Volume on disk0s2
3AE302D4-9B15-463E-911C-87EF564A95E9
Unencrypted

/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *7.9 GB disk2
1: EFI 209.7 MB disk2s1

Il device che andremo ad utilizzare è quello marcato come External – Physical, nel mio caso il /dev/disk2, ma può variare a seconda delle configurazioni.

Prima di tutto andiamo a recuperare tutto lo spazio utile con:

diskutil partitionDisk /dev/disk2 1 "Free Space" "unused" "100%"

Attenzione, questa operazione cancellera tutto il conetenuto della chiavetta.

Quindi proseguiamo con linstallazione dell’immagine appena creata con il seguente comando:

sudo dd if=~/Downloads/ubuntu.img.dmg of=/dev/rdisk3 bs=1m

Ci vuole un pò di pazienza, perchè la scrittura non da evidenza della progressione, quindi attendiamo finchè il cursore non ritorna riportando la quantità di dati scritti.

Probabilmente il sistema ci restituirà anche un bell’errore, perchè il Mac non riconosce il filesystem. Se vi capita, semplicemente confermate l’espulsione, altrimenti, date il segente comando:

diskutil eject /dev/disk2

A questo punto avete la vostra chiavetta avviabile con l’installazione pronta per essere eseguita sul vostro PC.

La strategia di Microsoft per eliminare del tutto Windows server 2003

Purtroppo ci sono ancora molti clienti che hanno server Windows 2003, e di certo non si possono obbligare a buttare via tutto per installare il Framework 4.5 che non va con questo OS.
Ci siamo detti “poco male” e “porca Microsoft”, rinuciamo a tutte le nuove chicche di questo FW, e ci teniamo il 4.0 almeno per i prossimi 3 anni.
Invece questo piano è fallito perchè oggi ho scoperto che dal 2015 non si potranno più ottenere certificati in SHA-1, e per le authority diventerà obbligatoria l’emissione di certificati in SHA-2.
Qual’è il problema? Beh se leggiamo sul sito di M$, troviamo questa frase:

“.NET Framework 4.5 has chosen SHA-256 algorithm to sign the manifest by default. However, SHA-1 is used by .NET Framework 4.0. We may get a CryptographicException telling that “the manifest may not be valid or the file could not be opened” when running a ClickOnce 4.5 application on a machine with only .NET Framework 4.0 installed.”

Ora collegando i puntini, viene fuori che senza FW 4.5 non si può leggere certificati SHA-2, che dal 2015 saranno obbligatori.
Quindi come risultato man mano che il prossimo anno i certificati di Code-Sign saranno rinnovati, le applicazioni tipo Click-Once non si installeranno più, con buona pace di tutti i clienti.

Error handling in javascript utilizzando Google Analytics

E’ buona norma avere un log degli errori anche sulle pagine web, specie se si fa uso di librerie javascript come JQuery.

Io ero solito redirigere l’evento window.onerror e scrivere su un backend apposito per registrare l’errore, ma se non si vuole/può realizzarlo?

La soluzione è semplicissima. Si possono registrare gli errori in Google Analytics insieme alle statistiche sulle visite del sito. Un ottimo modo per venirne a capo no?

window.onerror = function(message, file, line) {
   _gaq.push(['_trackEvent', 'JS Error', file + ':' + line + '\n\n' + message]);
};

https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide?hl=it

Due giorni tra XML e JSON

Approfittando di questi giorni estivi, mi sono dedicato a “testare” alcune idee che mi frullavano per la testa da tempo.

In particolare volevo convertire parte della struttura dell’ App Mobile di Tustena da XML in Json per risparmiare un pò di spazio nel DB e vedere se aumentavano le performance.

Per fare ciò ho scritto delle funzioni che mantenessero parzialmente la compatibilità del codice, visto che gli schemi rimangono comunque in XML.

L’esperimenti è fallito perchè a livello di performance non c’erano miglioramenti, e la mancanza degli attributi ha compromesso parte delle funzionalità.

Quindi rimane così com’è, ma condivido le funzioni di conversione che sono alquanto interessanti, specie quella di compatibilità tra la sintassi xPath di XML come pseudo-selettore in Json.

Sviluppo Agile con Tustena CRM e PivotalTracker

Sono sempre stato un fun dello sviluppo Agile-Scrum e da tempo sto portando avanti una mia web application per gestire questo tipo di progetti.

Purtroppo il tempo da dedicargli e poco, e procede troppo a rilento.

Mi sono quindi guardato in giro e ritengo che tra gli strumenti web più adatti a questo scopo ci si PivotalTracker.

Ho provato ad utilizzarlo per gestire le assegnazioni sulle customizzazioni di Tustena CRM, e devo dire che la piattaforma è molto ben fatta anche se mancano alcune cose che nel mio progetto ritenevo fondamentali e che prima o poi me lo faranno riprendere in mano. 

Comunque per poterlo utilizzare in modo strutturato non potevo pensare di procedere di copia incolla tra i ticket aperti in Tustena CRM e le story in PivotalTracker, quindi ho scritto un connettore per il CRM e l’integrazione risulta particolarmente comoda.

Per chi volesse utilizzarlo, allego il file da inserire nella directory ticket di Tustena CRM. Basterà quindi chiamarlo da PivotalTracker, dopo aver configurato le impostazioni di integrazione per trovarsi magicamente i bug anche sul tracker.

Si può fare anche di meglio passando i dati indietro, ma a quanto pare i ragazzi di PivotalTracker non hanno pensato di esporre l’ExternalId nei WebHook, quindi per il momento non ci sono soluzioni eleganti per gestire il ritorno.

pivotalservice.aspx (4,17 kb)

La dimensione standard dei font di OSX

Lo schermo del MacBook Pro è eccezionale, ma alla lunga i font piccini piccini ti fanno tirare gli occhi.

Ho guardato un pò in giro ed ho scoperto che sul Mac non hanno previsto il cambio delle dimensione dei font di sistema!

Incredibile. Windows lo fa da sempre e qui non si può fare? Possibile?

Investigando ulteriormente ho scoperto che si possono cambiare, ma non hanno previsto l’interfaccia per farlo.

Ci viene però in aiuto uno sviluppatore tedesco che ha messo a punto un “pannello di controllo” alternativo che tira fuori tutte le funzionalità nascoste di quello originale.

Lo trovate su http://www.bresink.com/osx/TinkerTool.html

I font della Mail di OSX

Da due giorni sono il fortunato possessore di un MacBook Pro e mi sto avventurando nei meandri del mondo OSX.

La prima cosa che ho notato è la risoluzione pazzesca del monitor, che non è compatibile con le mie capacità visive.

Messi gli occhiali riprovo e finalmente funziona 🙂

Ma il dramma lo riscontro su XMail, il client di posta nativo di OSX, che visualizza i font delle email talmente piccoli che ci vuole la lente d’ingrandimento per leggerle.

Ma a tutto c’è una soluzione, e anche qui ne ho trovata una. Aprendo il terminal si può digitare:

defaults write com.apple.mail MinimumHTMLFontSize 13 

e definire qual’è la dimensione minima a cui devono essere visualizzati i font delle email. Niente di più facile e comodo.

Quello che in Javascipt non bisogna mai fare

È d’uso comune utilizzare l’operatore “!” per valutare se una variabile null o undefined.

var a = getSomething();
if(!a){
...
}

Bello, semplice ed elegante. Ma c’è un problema con il quale si può convivere, ma che prima o poi ti frega. 

Se “a” vale 0 allora la condizione è vera e avremo comportamenti inaspettati e potenzialmente dei mal di testa a cercare cosa non va.

La sintassi corretta in questi casi é l’utilizzo del doppio punto esclamativo “!!” che ci mette al riparo da questi problemi.

“!!a” in questo caso viene valutato a false in tutte questi casi:

  • false
  • NaN
  • undefined
  • null
  • "" (stringa vuota)
  • 0

Come aggiornare tutti i moduli Perl in un colpo solo?

Dopo qualche tempo sono tornato a combattere con SpamAssassin che era diventato troppo lento. Mi sono subito accorto che molti dei problemi dipendevano da versioni obsolete dei moduli Perl che andavano aggiornati ad uno ad uno.

Per evitare di perderci troppo tempo, ho scoperto che esiste un comando molto semplice per forzare l’aggiornamento di tutte le librerie:

perl -MCPAN -e ‘CPAN::Shell->install(CPAN::Shell->r)’

E’ un post stupido, ma mi serve per ricordare 🙂