Archivi tag: OSX

Ottimizzare la shell per Git

Oh-My-Zsh è un framework per gestire al meglio la configurazione della shell Zsh. Include oltre 40 plugin (rails, git, OSX, ecc.) e oltre 80 temi. E’ facile da installare sul vostro sistema OSX e già la configurazione base aiuta notevolmente nell’utilizzo dei Repository Git, ad esempio. Come si vede dall’immagine sopra la shell riconosce che nella directory in cui si è posizionati vi è un repository Git e ne segnala il branch corrente. Io, oltre a git, ho abilitato anche il plugin per OSX:

  • aprire il file ~/.zshrc
  • modificare la riga: plugins=(git osx)

Chrome su OSX Lion lento (domini local)

Come ambiente di sviluppo sul mac utilizzo Zend Server CE e configuro i vari applicativi con domini locali del tipo:

esempio1.local
esempio2.local
ecc.

La configurazione è nel file /etc/hosts.

Chrome, il browser che prediligo per lo sviluppo, su questi domini risultava lento in fase di caricamento. In realtà era estremamente lenta la fase di interrogazione DNS per risolvere i vari nomi a dominio locali (come quelli sopra riportati). In un question su Stackoverflow ho scoperto che l’estensione .local (TLD) “it’s reserved for some Multicast DNS features (used by Bonjour)“. Rinominando i domini di cui sopra in:

esempio1.localdev
esempio2.localdev
ecc.

la velocità è tornata quella di sempre (estremamente veloce, trattandosi di domini locali).

Dropbox su OSX: sincronizzare cartelle esterne a quella di sistema

Utilizzo Dropbox per mantenere sincronizzati i miei files tra PC, MacBook Air, iMac e iPhone.

A volte può capitare di non voler spostare una cartella dalla sua posizione originale alla cartella di sistema Dropbox. Tutto ciò che è contenuto nella cartella Dropbox viene sincronizzato tra le varie macchine, ma se non posso (o non voglio) spostare una cartella?

Su OSX esiste una soluzione semplice che si basa sulla creazione di un link simbolico (Unix).
Per effettuare questa operazione è necessario lanciare un comando da Terminale (Applicazioni -> Utility -> Terminale).
Il comando da lanciare è:

ln -s /Users/username/Documents/foldername /Users/path/to/dropbox/Files/

/Users/username/Documents/foldername è la cartella sorgente
/Users/path/to/dropbox/Files/ è la cartella di destinazione ( in questo caso Files dentro Dropbox)

Se non avete molta dimestichezza col Terminale potete sempre trascinare le cartelle sorgente e destinazione dentro il Terminale, OSX provvederà a creare il percorso completo delle cartelle. E’ importante che controlliate le / (slash) finali: nel percorso della cartella sorgente non deve esserci, in quello di destinazione invece sì.
Una volta creato il link simbolico Dropbox dovrebbe iniziare a lavorare…

Tratto da Mac OSX Hints

HUAWEI E220 su OSX Snow Leopard (10.6.x)

huawei logo

Quest’anno, a differenza dell’anno scorso (Condivisione connessione 3G via WiFi su Windows XP), ho deciso di installare il modem Huawei E220 sul mio iMac e condividere la connessione rendendola disponibile all’iPhone e al netbook.

Per prima cosa è necessario aggiornare il firmware del modem Huawei E220.

Dopo aver eseguito questa operazione collegate il modem alla porta USB del Mac. Ora aprite le “Preferenze di sistema“, poi “Network“. Dovreste vedere nell’elenco in colonna destra 3 nuove voci: HUAWEI Mobile, DIAG e PCUI.

HUAWEI Mobile - Impostazioni Network

Cliccate su HUAWEI Mobile ed inserite il numero di telefono secondo le impostazioni del vostro provider (nel mio caso Tim, il numero è *99#), poi Nome account e Password (per Tim lasciare vuoti, come da schermata sopra). Poi cliccate su Avanzate.
Nella finestra seguente selezionate il tab Modem e inserite:

HUAWEI Mobile - Impostazioni avanzate

Fornitore: Generico
Modello: GPRS (GSM/3G)
APN: (quello fornito dal vostro provider, per Tim: ibox.tim.it)
CID: 1

I DNS (secondo tab) vengono forniti in automatico dopo la connessione.
Nel tab PPP invece potrete personalizzare alcune impostazioni. Nel mio caso ho spuntato “Abilita resoconto dettagliato“.

A questo punto potete cliccare su OK per chiudere la schermata Avanzate e tornare alla schermata base delle impostazioni Network, cliccate su Collega (Connetti) e verificate il funzionamento della connessione.

Se tutto è andato a buon fine siete connessi, in caso contrario verificate ogni parametro con quelli forniti dal vostro provider (operatore telefonico).
Quanto descritto finora è stato personalmente verificato su Snow Leopard (OSX 10.6). Per sistemi operativi precedenti le schermate sono leggermente diverse ma i passi da eseguire e le impostazioni sono molto simili.

A questo punto mi mancava solo un tool in grado di monitorare al meglio la situazione, qualcosa in grado di tenere anche traccia del totale del traffico (inviato e ricevuto) generato. Dopo un po’ di ricerche ho trovato CheetahWatch dell’ottimo Patrick Quinn-Graham. Un piccolo grande tool dedicato ai modem Huawei USB. Una volta installato comparirà un’icona nella Menù bar la quale vi darà accesso alle informazioni (e impostazioni) fondamentali:

icona Menù bar

menù CheetahWatch

La voce di menù Status apre una piccola finestra con preziose informazioni sullo stato della connessione e sull’utilizzo di banda:

Status CheetahWatch

 

Patrick ha rilasciato i sorgenti di CheetahWatch sotto licenza BSD. Mi sono messo in contatto con lui per tradurre l’app in Italiano. Non appena avrò novità aggiornerò questo post.

Buona navigazione con l’ottimo e sempre grande Huawei E220!

 

 

 

 

 

WordPress, risolvere problema Informazioni Connessioni FTP

Oggi ho deciso di risolvere, in ambiente di sviluppo (macchina locale), una volta per tutte il problema dell’installazione (via download diretto) di plugins, temi, ecc, di WordPress. Sviluppo su iMac 27′ su cui ho installato Zend Server CE (LAMP).

Ogni volta che, in locale ( in produzione, ad esempio, mai avuto problemi!), tentavo di installare un plugin, un tema o un aggiornamento mi ritrovavo di fronte alla schermata sopra. Oggi ho approfondito alcuni aspetti e ho scoperto che si tratta di un problema di permessi.

WordPress, durante questi processi di installazione, ha necessità di lavorare sul Filesystem. Deve poter scrivere e modificare i permessi/proprietari dei files. Se per qualsiasi motivo non riesce a fare questa operazione rimanda l’utente alla schermata sopra nel tentativo di eseguire l’operazione via FTP. In questa pagina è spiegato molto bene tutto il meccanismo, viene anche evidenziata la procedura che WP utilizza per verificare se può scrivere sul Filesystem (vedi sotto).

Su OSX in pratica avevo questo contrasto nei permessi:

L’utente daeomn del gruppo wheel è quello con cui WP scrive sul filesystem (in pratica l’utente utilizzato da Apache). La procedura che effettua la suddetta verifica è questa:

// The following code is from the get_filesystem_method()
// method in the wp-admin/includes/file.php file:
 
if( function_exists('getmyuid') && function_exists('fileowner') ){
    $temp_file = wp_tempnam();
    if ( getmyuid() == fileowner($temp_file) )
        $method = 'direct';
    unlink($temp_file);
}

Nel mio caso non dà esito positivo e quindi si finisce alla schermata di inserimento dei dati account FTP. In pratica l’utente dello script che scrive sul filesystem deve essere lo utente con cui apache viene eseguito. Nel mio caso sopra infatti non è così.

Come risolvere il problema?

Non so se quella scelta è la via corretta e nemmeno mi sono preoccupato di eventuali problemi relativi alla sicurezza (per i quali vi consiglio il plug-in WP-Security) perchè, come ho evidenziato sopra, si tratta della macchina di sviluppo interna.

La mia soluzione è stata quella di cambiare il proprietario dell’intera directory che ospita WordPress impostando daemon come utente e wheel come gruppo:

chown -R daemon:wheel m4ss

Problema risolto!

GMail: Backup incrementale e Time Machine su OSX

Come sistema di backup di GMail fino a qualche giorno fa utilizzavo un qualsiasi client IMAP (nello specifico Thunderbird) con le varie impostazioni per creare una copia in locale. Da tempo però avevo smesso di utilizzarlo come client email. La posta la leggo via web su GMail o via iPhone.

Mi son messo così alla ricerca di una soluzione un po’ più furba del dover aprire periodicamente Thunderbird. Ho trovato GMail Backup che, opportunamente configurato, esegue un backup incrementale quotidiano. La Time Machine fa il resto. Vediamo come.

Per prima cosa mi son creato una directory in Documenti/Backup chiamata GMail:
/Users/gullo/Documents/Backup/GMail/

In questa ho scompattato l’ultima versione di GMail Backup (al momento la 0.107) e ne ho creato una in cui posizionare il lunghissimo elenco di email: Backup. Poi un link simbolico che punta all’ultima versione di gmail-backup. In questo modo abbiamo:

iMacJazzo:GMail gullo$ pwd
/Users/gullo/Documents/Backup/GMail
iMacJazzo:GMail gullo$ ls -all
total 24
drwxr-xr-x      6 gullo  staff     204  3 Feb 13:58 .
drwxr-xr-x      4 gullo  staff     136  2 Feb 15:50 ..
-rw-r--r--@     1 gullo  staff    6148  3 Feb 14:00 .DS_Store
drwxr-xr-x  18598 gullo  staff  632332  3 Feb 14:20 backup
lrwxr-xr-x      1 gullo  staff      25  3 Feb 13:58 gmail-backup -> gmail-backup-0.107-linux/
drwxr-xr-x@    14 gullo  staff     476  3 Feb 14:19 gmail-backup-0.107-linux

In gmail-backup ho creato un file bash che esegue il backup incrementale:
makeBackup.sh

#!/bin/bash
DATASTART=`date -v -1d "+%Y%m%d"`
cd /Users/gullo/Documents/Backup/GMail/gmail-backup
./gmail-backup.sh backup ../backup/ xxxxxx@gmail.com passwd $DATASTART

La variabile DATASTART viene settata col giorno precedente rispetto al momento in cui lanciate lo script (con il formato corretto come richiesto da gmail-backup). In realtà gmail-backup effettua già un controllo tra ciò che ha già archiviato in locale e le novità presenti online ma se lanciate il comando senza alcuna data come parametro l’operazione può diventare estremamente lunga, soprattutto se avete qualche anno di email nel vostro account! Ecco perchè conviene impostare come parametro una data di partenza. Ci basta andare indietro di 1 giorno per avere la certezza di non perdere nulla.

Prima di passare alla pianificazione dello script ricordatevi di lanciare solo la prima volta il comando primo del parametro data:

./gmail-backup.sh backup ../backup/ xxxxxx@gmail.com passwd

In questo modo potrete creare il primo backup completo di tutte le email presenti in GMail, dalla prima all’ultima. Una volta concluso questo primo backup potremo pianificare l’operazione con launchd. A questo punto vi consiglio questo ottimo Tutorial su come pianificare operazioni con launchd su OSX.
La cartella backup (quella in cui archivierete il tutto) conterrà migliaia di file, uno per ogni email. La Time Machine farà il resto perchè, effettuando anch’essa backup incrementali, archivierà solo le email che di giorno in giorno verranno aggiunte nella suddetta directory.

Ultima consiglio: consultate la pagina delle FAQ nel caso in cui lo script dia errori. A me è risultata molto utile!!

Aggiornamento del 16/02/2011

In realtà mi sono accorto che la soluzione sopra è un po’ precaria: se non viene lanciata tutti i giorni si rischia di perdere qualche email. La soluzione corretta è memorizzare la data in cui il backup viene effettuato per poi recuperarla ogni volta, prima di procedere al nuovo backup.

In pratica il nuovo codice del file makeBackup.sh è:
makeBackup.sh

#!/bin/bash
DATASTART=`cat lastUpdate`
cd /Users/gullo/Documents/Backup/GMail/gmail-backup
./gmail-backup.sh backup ../backup/ xxxxxx@gmail.com passwd $DATASTART
date -v -1d "+%Y%m%d" > lastUpdate

Noterete che si fa riferimento ad un file di nome lastUpdate. Tale file viene creato automaticamente dopo la prima esecuzione dello script, poi semplicemente aggiornato alla fine di ogni backup. Il file memorizza la data del giorno precedente in modo da esser sicuri di recuperare tutto!

Aggiornamento del 19/01/2012

Da qualche giorno ho rilasciato un’App dedicata al backup di Gmail.
L’app è semplice e leggera, si installa nella Status Bar e, dopo una rapida configurazione, esegue in “silenzio” il backup. Puoi selezionare dove salvare il tutto e quando, se ogni ora o una volta al giorno ad un orario preciso.

Per chi non ha voglia di smanettare tra righe di comando e file di configurazione consiglio l’installazione di BackUp Gmail (disponibile sull’App Store).

svn: Cannot rename file … entries

smartsvn icon

Lavoro in ambiente OSX e uso Eclipse per scrivere codice e SmartSVN come client Subversion.
Avevo necessità di aprire un vecchio progetto (proveniente da macchina Windows) di un copia in locale prima di effettuare operazioni sul repository. Ho provato a fare un Relocate della copia locale in modo da poterlo poi sincronizzare con il repository ma ho ricevuto questo errore:

Relocate: Cannot rename file ‘/project/css/.svn/tmp/entries’ to ‘/project/css/. svn/entries’

La soluzione ai miei problemi l’ho trovata su StackOverflow dove si legge:

If you’re changing workspaces on OS X and you import an SVN-based project into your new workspace, some of your files may have the uchg flag set. SubClipse/SVN will not be able to update this project.

Effettivamente le cose stavano così anche nel mio caso e per sistemare correttamente il flag uchg (“user immutable flag“) basta dare il comando (al livello più alto della directory del progetto) da riga di comando:

chflags -R nouchg .

iPhone Developer Program, certificati di sviluppo e distribuzione App

iPhone Apple

Stamattina mi dedico al nuovo (per me!) mondo dello sviluppo su iPhone e, perchè no, sul nuovo iPad.
In settimana mi sono iscritto all’iPhone Developer Program in modo da poter testare le App sviluppate direttamente sull’iPhone, installarle su altri 10o (per testarlo con gli amici) e distribuirle tramite Apple Store.

Vi segnalo due guide su devAPP (molto ben fatte!) sui passi fondamentali per poter iniziare:

Rispetto alle guide qui sopra segnalo, come evidenziato in questo post sul Developers Forum, che, prima di procedere, dovete verificare di aver il certificato WWDR (Apple Worldwide Developer Relations Certification Authority). Le operazioni, procedendo senza aver prima installato questo certificato, non andranno a buon fine. Il WWDR lo trovate nella sezione Certificates del Program Portal (iPhone Developer Program).

Nel caso in cui aveste già installato il tutto (come da procedura della guida) senza il WWDR è necessario ripartire da zero. Per prima cosa dovete seguire quanto descritto nel suddetto post:

1 Delete the WWDR certificate and your developer certificates from Keychain Access
2 Ensure that the login keychain is set as the default keychain in Keychain Access
3 Download the WWDR certificate and add it to your keychain in the login section
4 Use Keychain Access to generate a CSR (Certificate Assistant… Request a Certificate…) for a developer
5 Submit the CSR to the Apple portal
6 When the developer certificate is ready, download it to your Mac and add it to your keychain in the login section
7 In the Apple portal, specify the unique device ID (UDID) of your iPhone or iPod touch. You can find the device’s UDID in the Window… Organizer section of Xcode. The ID is the 40 character “Identifier” string in the “Summary” tab (e.g. 4ada8edc85bfdd3947696cb3277a8c7f731fb6c3)
8 In the Apple portal, choose an App ID name. This can be anything, it is not related to any other data. However, the Bundle Identifier that you choose here MUST match the Bundle Identifier used in your Xcode .plist file, e.g. “com.mydomain”
9 In the Apple portal, create a provisioning profile. The 3 ingredients for this are the name(s) of your developer certificates, your unique device ID(s) (UDID(s)), and your App ID. When you download this file, it will have a .mobileprovision extension. After you have downloaded it, open it in Finder, and drag it to the Xcode icon in your dock. The profile should now appear in Xcode. To check, go to the Xcode “Window… Organizer” menu and look under “iPhone Development… Provisioning Profiles”. If all is ok, you should not see any yellow error messages, and your profile should appear in the “Name” list.
10 Do a clean build, so that previous precompiled headers and object files are deleted. In Xcode, choose “Build… Clean All Targets”, then “Build… Build and Run”. If your code compiles with no errors, Xcode will upload the app to your iPhone or iPod touch, using the USB cable attached to your device.

Infine ricordatevi di ripulire anche il vostro iPhone. Io ho seguito la procedura qui sopra diverse volte prima di trovare questo utilissimo post. Sul vostro iPhone quindi andate in Impostazioni -> Generale -> Profili e cancellateli, poi riprovate di nuovo.
Forza e coraggio… vedere la prima installazione creata da voi che gira sul proprio iPhone merita davvero! 🙂