2013-02-09
XCode 4.6, ARC e Snow Leopard
Verso la fine di Gennaio 2013 è uscita la nuova versione di XCode, la 4.6.
Alcune correzioni e miglioramenti, nessuno molto visibile; un grosso problema, visibile solo a chi ne ha bisogno...
Apple sta consigliando di passare al sistema ARC (Automatic Reference Counting) di gestione della memoria; è un sistema molto semplice, per il quale in sostanza ci si dimentica di gestire la memoria. Durante la compilazione, LLVM si occupa di esaminare il codice e di aggiungere vari comandi retain e release, senza dover essere noi a pensarci; ogni oggetto viene rilasciato immediatamente quando non serve più, con minore occupazione di memoria. Il programmatore ha comunque sempre i mezzi per intervenire e dire al compilatore di gestire in modo diverso.
È un ulteriore passo avanti rispetto alla GC (Garbage Collection), che rilasciava gli oggetti solo in determinati momenti; qui ora può capitare che un oggetto che non viene usato venga distrutto appena creato.
Ok, tutto molto bello. Inoltre, il codice così scritto è indistinguibile da un codice di tempo fa, dove era il programmatore a rilasciare gli oggetti: la sola differenza è che tali istruzioni vengono inserite dal compilatore e non dal programmatore. La stessa Apple invita a non utilizzare più la GC, indubbiamente meno efficiente. Allora, visto che il codice è indistinguibile, un'applicazione compilata in questo modo può girare anche su Snow Leopard (MacOS X 10.6).
Figuratevi la mia sorpresa quando, con XCode 4.6, ho riaperto una app compilata a Dicembre 2012, modificata e, per scrupolo, provata sul 10.6: non partiva nemmeno! Crash immediato!
Ok, torniamo al codice di Dicembre... crash!
Provati un numero innumerevole di esperimenti: nulla! Dato che l'ultimo XCode funzionante su 10.6 era il 4.2 (che però non funziona su MacOS X 10.8, dove gira la versione 4.6), ho collegato i due Mac, aperto da XCode 4.2 il progetto di XCode 4.6 (con un po' di accorgimenti)... il debug diretto non aiutava, anzi: i crash avvenivano in punti diversi ogni volta, come quando c'è un problema nel caricamento dell'interfaccia, che però non aveva senso.
A quel punto è sorto il sospetto: facendo in modo che un oggetto dove avveniva il crash fosse escluso dalla gestione ARC, il crash avveniva in altro oggetto, che, una volta escluso dall'ARC, funzionava.
A quel punto, il sospetto si ingrandiva e potevo fare una ricerca più mirata su Google: eureka!!!
La versione 4.6 si porta dietro un baco (voluto o casuale? Mah...) che impedisce il funzionamento delle app su Snow Leopard!!!
Questo per tutti coloro che vogliono mantenere la compatibilità con Snow Leopard (gli utenti professionali tardano ad aggiornare i loro sistemi, in attesa che tutte le applicazioni acquistate funzionino sul nuovo), si vedono costretti a modificare il codice per tornare al MRC (vedi nota).
La conferma è su questo thread, recentissimo.
Soluzione? Per ora, per quanto ne so, una sola: entrare nel proprio account developer, scaricare XCode 4.5.2 e sostituire con questa l'ultima versione. Appena fatto e tutto funziona.
Ah, sì: fare una segnalazione di baco ad Apple!
EDIT: la nuova versione di Xcode (4.6.1) ha corretto il baco e tornata alla normalità
2010-08-01
Resettare la Macchina del Tempo
Time Machine è in effetti un buon metodo di backup (posto di usare un Mac con almeno MacOS X.5): basta collegare un hard disk di capacità, diciamo, dai 300GB in su (si può usare anche un disco più piccolo, ma in capo a 4 mesi lo avremo riempito!) e Time Machine si occupa di fare il backup ad intervalli regolari, copiando solo i file che hanno subito un cambiamento.
Se usiamo un Mac desktop, si può lasciare collegato il disco e lasciar fare a Time Machine; se invece abbiamo un MacBook, il backup può essere fatto in manuale, lanciandolo dopo aver collegato il disco.
Man mano che il tempo passa, Time Machine si organizza in modo da mantenere tutti i backup per il giorno precedente, un backup al giorno per il mese passato e un backup alla settimana per tutti i mesi precedenti, cancellando il resto. Quando poi il disco si riempie, Time Machine avviserà quando dovrà cancellare un vecchio backup per fare spazio; ma se abbiamo un disco capiente (oggi 1 TeraByte si trova a prezzi accessibilissimi), questo succederà veramente dopo un lasso di tempo molto lungo.
Se poi dobbiamo ricuperare un file o una cartella che abbiamo cancellato per sbaglio, basta chiamare la macchina del tempo e questa ci presenterà la finestra che ci serve (ci si muove come nel Finder) e tutti i suoi stati alle date dei vari backup: basta muoversi nel tempo lungo le date a destra, selezionare quello che cercavamo e recuperarlo: lo ritroveremo al suo posto nel Finder!
-----
Questi i (grandi) vantaggi: nessuno ha mai voglia di fare un backup, quindi meglio che sia il nostro Mac ad occuparsene.
Tuttavia, come ogni software contiene bachi, anche Time Machine non ne è immune.
Il più comune, facilmente risolvibile, è sulle librerie di iPhoto e Aperture: se Time Machine fa il backup con uno dei due software attivi, le loro librerie vengono saltate! Dopo un po' di tempo, Apple stessa ha comunicato il problema, consigliando di far partire manualmente Time Machine quando tali software sono chiusi. Ha inoltre comunicato che avrebbe risolto il problema, ma al momento non c'è nulla di sicuro, per cui se usate spesso iPhoto o Aperture, vi conviene disconnettere il disco di backup e riconnetterlo solo quando avete chiuso entrambi i software.
In seconda battuta, Time Machine è stato studiato per lavorare sempre, senza pensare a bachi: cosa succede quando per qualche motivo non ha funzionato perfettamente? Apple non ha previsto alcun tipo di reset semplice.
Nel mio caso, mi è successo di scoprire che da due giorni venivano aggiornati solamente due file (8kB!); può darsi che si trattasse del problema di Aperture, che non conoscevo, ma ho qualche dubbio in proposito. Fatto sta che bisognava far leggere a Time Machine tutti i cambiamenti che erano avvenuti, senza dover per questo cancellare tutto il backup degli ultimi 3 mesi.
Una veloce ricerca sulla rete... ed eccomi qui ad indicare la soluzione, per coloro che non leggono l'inglese (per chi volesse, il sito, dedicato a Time Machine, si trova a questo indirizzo: troverete molte risposte sull'argomento).
Si tratta di eliminare l'automatismo di Time Machine, con cui si ricorda del disco usato e di quanto fatto finora e poi ripartire. Pronti?
- Prima di tutto, fermiamolo, aprendo le Preferenze di Sistema, click sull'icona di Time Machine, portiamo l'interruttore su OFF;
- smontiamo il disco dalla scrivania, se fosse stato attivo; possiamo anche spegnerlo (non sarebbe necessario, ma così siamo sicuri che non resti qualcosa in memoria);
- da una finestra del Finder, andiamo a cercare il file nella libreria di sistema:
nomeDisco/Library/Preferences/com.apple.TimeMachine.plist
E' il file delle preferenze di Time Machine: buttiamolo nel cestino e per sicurezza svuotiamo il cestino stesso; - attacchiamo nuovamente il disco al Mac;
- riapriamo il modulo di Time Machine nelle Preferenze di Sistema e rifacciamo le operazioni necessarie per settare il disco come target del backup (lo scegliamo e aggiungiamo alla lista le cartelle di cui non vogliamo il backup);
- spostiamo l'interruttore a sinistra su ON: partirà il conto alla rovescia per il backup.
2010-05-06
MacOS X.6.3 e M-Audio
Esiste infatti una icompatibilità insidiosa tra la nuova versione ed il driver fornito dalla M-Audio; non si tratta dell'hardware in sé, tanto che alcuni modelli di interfaccia Midi, quelli che sono già supportati nativamente da Snow Leopard, funzionano benissimo e probabilmente continueranno a farlo anche con gli aggiornamenti futuri. Il problema sta invece in quelli che necessitano del driver.
Al momento del passaggio a SnowLeopard, avevo verificato sul sito M-Audio ed installato il loro driver e tutto funzionava perfettamente. Dato che il grosso era fatto (il driver funziona anche a 64 bit) non mi sono preoccupato di ricontrollare per il passaggio ai successivi 10.6.2 e 10.6.3.
Purtroppo.
Infatti in una FAQ sul loro sito, M-Audio consiglia di non passare alla 10.6.3: i loro driver non sono infatti ancora certificati. A questo post sono arrivato dopo tre giorni di arrabbiature e tentativi per trovare il responsabile di alcuni malfunzionamenti. I sintomi sono strani e per arrivare a capire che si tratta del driver Midi... beh, ci vuole molta fortuna; sono apparsi, praticamente a caso, un po' di spinning ball, la pallina multicolore che indica che il Mac sta aspettando qualcosa, ma non sui programmi Midi! L'interfaccia infatti funzionava! Talvolta succedeva aprendo le preferenze di sistema, un'altra volta aprendo Mail, poi era il Finder a non rispondere, una volta anche EyeTV. Partendo senza estensioni tutto filava liscio e questo mi portava a pensare ad una qualche estensione, ma non avrei mai pensato al Midi, visto che se la collegavo non succedeva nulla di strano. Sì, i problemi c'erano soprattutto quando l'estensione non doveva essere chiamata in causa.
L'unico sospetto era che l'hang (secondo la terminologia Apple) spesso avveniva quando il software per motivi suoi chiamava qualcosa di collegato con l'audio. Col senno di poi, ciò è spiegabile col fatto che il driver M-Audio tratta sia il Midi che appunto l'audio. Per fortuna, prima di decidere che si trattava di un problema legato alla scheda audio o all'hard disk e di portare il mio MacBookPro in assistenza (che avrebbe significato un po' di settimane di attesa), sono incappato, proprio per caso, nel link citato.
Nel frattempo, pensando ad un guasto hardware, avevo fatto una cosa tremenda per un Mac user: ultimo backup, formattazione e re-installazione! Mi pare che questa sia stata la terza formattazione in 20 anni di Mac! Per fortuna ho trovato il link prima di ripassare al 10.6.3!
Quindi: se avete problemi strani e usate un'interfaccia Midi, controllate la compatibilità prima di fare l'upgrade.
Lo strano è che non ci sono motivi per questo problema: l'upgrade non sembra riguardare CoreMidi; c'è solo un non meglio definito "aumento della compatibilità dei dispositivi USB". Fatto sta che per un po' me ne starò con il 10.6.2, attendendo novità da M-Audio.
2010-02-06
SnowLeopard & Applescript Studio
Naturalmente non andrà completamente in pensione, ma è stato sostituito da una nuova versione, chiamata Applescript Objective-C (in breve AsOC), che ha il grosso vantaggio di poter accedere a tutte le classi e metodi di Cocoa, pur mantenendo la semplicità di uno script, senza preoccuparsi delle strutture necessarie dei linguaggi avanzati, ma ottenendo risultati notevoli.
Il problema è rappresentato dai vecchi progetti AsS: come fare per mantenerli?
1) Tenerli entrambi
La cosa più semplice è mantenere entrambe le versioni dei Developer Tools; se leggete nelle istruzioni, viene segnalato (già da qualche versione, a dire il vero) come sia possibile installare una nuova versione di XCode senza eliminare la vecchia (basta fornire una posizione diversa da quella standard durante l'installazione).
Quindi, possiamo utilizzare la vecchia versione per i progetti AsS e quella nuova per progetti nuovi. Inoltre, dato che anche quest'ultima permette di aprire i vecchi progetti, può convenire fare tutte le modifiche con il vecchio XCode e poi, al momento di compilare in release, si fa una copia del progetto, che verrà importata in XCode 3.2, giusto per approfittare della nuova versione del compilatore (non è obbligatorio, si può compilare anche nel vecchio: è solo per approfittare dell'eventuale fix di bachi).
2) Usare XCode 3.2
Sì, perché è ancora possibile aprire e modificare i progetti AsS nella nuova versione dell'IDE di sviluppo; l'unico problema è ora nell'Interface Builder non troviamo più il pannello Applescript, dove è possibile nominare ogni oggetto dell'interfaccia e definire lo script che tratterà un evento; in questo modo diventa possibile solo modificare gli script, ma senza toccare nulla.
Però, c'è una possibilità per tornare ad avere il pannello cercato! Basta chiudere Interface Builder, andare nel Terminale (Cartella /Applicazioni/Utility) e scrivere il seguente comando, che va a modificare le preferenze di Interface Builder, tutto in una riga e dare
defaults write com.apple.InterfaceBuilder3 IBEnableAppleScriptStudioSupport -bool YES
Riavviando Interface Builder, vedremo che l'inspector mostrerà anche il pannello Applescript!
Ora potremo continuare a lavorare sui nostri vecchi progetti. Teniamo però conto che, pian pianino, conviene passare a AsOC, potendo sfruttare tutta la nuova potenza.
2009-11-22
Snow Leopard e MySQL - 2
Per cui ho scaricato dal solito sito MySQL la versione a 64bit; noterete che è indicato solo MacOS X.5, ma funziona benissimo anche con X.6. Scegliamo la versione a pacchetto, così non dovremo preoccuparci di dove mettere i vari file.
Prima di fare qualsiasi cosa, apriamo uno qualunque dei software che usiamo per connetterci al DB (io ho usato il MySQL Administrator, fornito appunto da MySQL) e facciamo un bel backup. Le operazioni da fare dipendono dal software che state utilizzando, ma in genere tutti hanno una voce Backup; nel mio caso, ho selezionato tutti i miei database ed ho salvato il file sulla scrivania. Se possibile, scegliete il formato SQL: è un formato testo apribile con TextEdit, in caso vogliate dargli un'occhiata curiosa!
Dato che avevo installato anche il pannello preferenze di MySQL, il passo successivo è stato di aprire le Preferenze di Sistema, cliccare su MySQL e fermare il server: stiamo per sostituirlo e non potremo farlo se è attivo. Dopo di che, lanciamo il pacchetto di installazione dal dmg appena scaricato e attendiamo che tutto sia finito.
Se vogliamo che il server parta automaticamente dopo un riavvio del Mac, installiamo anche il secondo pacchetto che troviamo nel dmg (Startup Item): tutto va a posto da solo! Non ho invece installato il PreferencePane fornito, in quanto avevo verificato che era la stessa versione che già avevo; in ogni caso, non gli fa male: se non siete sicuri della versione (che al momento è ancora a 32bit), fate un doppio click sul PreferencePane e questo si installerà da solo.
Una volta installato, apritelo subito e avviate il server MySQL: se non ci sono problemi, si avvierà subito, dopo aver chiesto la password di amministratore del Mac.
Ora dobbiamo copiare i nostri db nella nuova installazione: riapriamo il MySQL Administrator, cerchiamo la sezione Restore, scegliamo il file del backup ottenuto prima e... siamo a posto! Da dentro il nostro software potremo vedere i nostri db riapparsi per incanto! Se non li vedete, niente paura: dovete solo dare un refresh (se il software non lo permette, basta uscire e rientrare dal db).
Dato che siamo dei puristi e teniamo allo spazio sul nostro hard disk, apriamo una finestra del Finder, con un Cmd-Shift-G facciamo comparire il campo di input che ci permette di girovagare nel sistema senza usare il Terminale e scriviamo l'indirizzo
/usr/local
e diamo return: verremo portati in una cartella che contiene l'installazione di MySQL, dove noteremo, oltre al resto, tre cartelle con i nomi che cominciano con mysql: una ha una freccetta (è quella che rimanda alla cartella vera) e non dobbiamo toccarla. Le altre due hanno nomi che riportano la versione: facciamo bene attenzione a selezionare quella vecchia (se non siamo sicuri, andiamo a vedere cosa abbiamo scaricato!) e buttiamola nel cestino (ci potrebbe venire richiesta la password).
Abbiamo finito!
Apriamo Monitoraggio Attività e tramite il campo di ricerca, troviamo il processo _mysqld: vedremo nelle ultime colonne la scritta Intel (64bit), che ci ripaga del lavoro svolto!
2009-10-23
Clipboard multiple
Si tratta di ClipMenu . La sua funzionalità è semplice, ma utile: tenere in memoria più Clipboard. Per chi non sapesse cos'è: ogni volta che premiamo Cmd-C (copia) o Cmd-X (taglia) non facciamo altro che portare l'oggetto (testo, immagine, qualunque cosa) in una zona di memoria chiamata Clipboard. Quando poi ci spostiamo nella parte dove vogliamo incollare l'oggetto, basta fare Cmd-V: duplichiamo il contenuto della Clipboard al punto dove ci troviamo.
Nella Clipboard resta l'oggetto copiato, per poter eventualmente ripetere l'operazione. Questo concetto era lo stesso già nel 1984, all'uscita del primo Macintosh ed è rimasto praticamente immutato ai nostri giorni, su tutti i sistemi operativi dove da allora è stato portato.
Tuttavia ha sempre avuto un problema di base: se copiamo e incolliamo del testo e poi ripetiamo la cosa con altro testo, il primo è perso: per incollarlo dovremo di nuovo copiarlo. Altro caso: da un documento dobbiamo copiare alcune parti non consecutive; se la Clipboard potesse tenere più oggetti, potremmo copiare un pezzo dopo l'altro, passare all'altro documento e incollare tutto in un passo solo, invece di andare avanti e indietro da un documento all'altro.
Sono perciò fioriti vari programmini in grado di memorizzare la sequenza di Clipboard e da cui andare a pescare quelle che servono. È un principio molto semplice, tanto che mi sono sempre chiesto perché una simile funzione non sia mai stata inserita di serie nei vari sistemi.
Personalmente ho usato per un lungo periodo la versione free di PTHPasteboard, ma da pochi mesi lo sviluppatore ha deciso di portare avanti solo la versione a pagamento (con funzionalità in più e con un periodo demo), l'unica compatibile con SnowLeopard. Mi sono perciò messo in ricerca sulla rete e tra tutti quelli che ho trovato, ho deciso per ClipMenu.
Una volta lanciata l'applicazione, troviamo una nuova icona sulla barra dei menu a destra (l'icona è molto simile a quella usata fino al MacOS 9 per il file della Clipboard). All'interno del menu si trova una cartella in cui vengono tenute le ultime clipboard (in numero configurabile): scegliendo il singolo menu, il contenuto viene incollato nella finestra attiva come se avessimo premuto Cmd-V. A fianco di ogni elemento compare un'icona che indica il tipo di dato: un documento di TextEdit per indicare il testo, differenziato tra RichText e PlainText, un simbolo @ per gli indirizzi web e così via; per le figure si può scegliere quanto farne comparire (anche se una figura troppo grande farebbe perdere utilità al menu). Sono mostrati i primi caratteri in numero configurabile, ma fermandosi su un menu compare un tooltip che mostra tutto l'intero pezzo copiato. Il tutto è altamente configurabile, fino al punto di poter memorizzare e poi accedere a degli snippets, cioè parole o intere frasi di testo, sempre disponibili in un'altra cartella del menu. Se poi al momento del click per incollare, teniamo premuto Option, abbiamo accesso ad una serie di funzioni: dal togliere le informazioni RichText, al cambio del maiuscolo/minuscolo, conversione tra codifiche di testo, introduzione del testo racchiuso tra tag, eliminazione degli spazi nel testo e moltissime altre; oltre alla possibilità di crearne di nuove.
Senza spendere nulla ci troveremo una vera gestione avanzata della Clipboard; non avremo la condivisione della clipboard sulla rete locale e altri plus forniti dai programma a pagamento, ma nel 90% dei casi avremo tutto quanto serve. Secondo me è un software che vale pena provare; se poi scoprirete di non poterne fare a meno, pensate ad una donazione, come suggerisce l'autore dal proprio sito. Per la cronaca, il codice non è pubblico: la proprietà è dell'autore.
2009-10-18
Snow Leopard e MySQL
La prima risposta è: nulla! L'installazione di MySQL resta al suo posto, assieme ovviamente a tutti i dati che avevamo. Ma non è proprio così tutto liscio: se infatti dopo aver aggiornato da MacOS X.5 a MacOS X.6 e magari dopo aver fatto partire anche il kernel a 64bit, se apriamo le preferenze di sistema troviamo due cose:
- se avevamo usato l'installazione a 32bit, il preference pane che fa partire MySQL è ovviamente anche lui a 32bit, per cui siamo invitati a rilanciare le preferenze a 32bit, ma questo è poca cosa;
- una volta auto-rilanciato, ci accorgiamo che il pulsante di attivazione del server MySQL non dà risultato, come se ci fosse qualcosa che non va.
Proviamo ad andare nella cartella dove si trova l'installazione di MySQL con tutti i nostri dati: dato che si trova in un percorso non visibile, prendiamo il menu Vai e diamo il comando Vai alla cartella... e compare un pannello nella finestra selezionata (lo si ottiene anche con la scorciatoia da tastiera cmd-shift-G) e scriviamo l'indirizzo cercato:
/usr/local
e nella finestra ora ci troviamo la cartella di MySQL, con un nome simile a mysql-versione-sistema; gli sviluppatori di MySQL hanno deciso in questo modo in modo che possiamo sapere che versione abbiamo a prima vista. Ma in realtà, tutti i comandi cercano una cartella chiamata solamente mysql. Nell'installazione originale, questa cartella è semplicemente un link (in MacOS vengono anche chiamati alias) che rimanda a quella col nome lungo. Tale cartella non esiste più: evidentemente l'installer di SnowLeopard la vede come inutile e la cancella!
Quindi dobbiamo ristabilirla. Ma ricordiamoci che siamo in una cartella il cui proprietario è l'utente System (per verificarlo basta selezionare quella col nome lungo e dare cmd-I: sul fondo della finestra vediamo i permessi), per cui è meglio fare l'operazione dal Terminale. Allora apriamolo: anche con SnowLeopard si trova in
Applicazioni/Utility.
Giusto per fare l'abitudine ai comandi, prima dimostriamo quello che abbiamo già visto: cioé che nel percorso cercato si trova solo la cartella col nome lungo; per cui scriviamo il comando (facciamo attenzione agli spazi: se non siamo sicuri possiamo copiare la stringa qui sotto e incollarla nella finestra del Terminale):
cd /usr/local
col quale ci portiamo nella cartella che abbiamo aperto dal Finder e poi cerchiamo tutto quello che comincia con mysql:
ls -ldt mysql*
ed otterremo quello qualcosa del genere:
drwxr-xr-x 17 root wheel 578 4 Ott 11:41 mysql-5.1.36-osx10.5-x86
dove vediamo la cartella di mysql (la versione ovviamente dipende da quella che avete installata), posseduta dall'utente root del gruppo wheel. Dobbiamo perciò creare un link (comando ln) a questa cartella e chiamarlo mysql. E dovremo farlo facendoci passare per un amministratore del sistema, cioé usaremo il comando sudo, pronti a fornire la password:
sudo ln -s mysql-5.1.36-osx10.5-x86
Come previsto, ci viene richiesta la password ed il comando verrà eseguito. Per sicurezza, proviamo a vedere se ora la cartella c'è, usando lo stesso comando di prima:
ls -ldt mysql*
Questa volta il risultato sarà qualcosa del genere
lrwxr-xr-x 1 root wheel 25 12 Ott 00:38 mysql -> mysql-5.1.36-osx10.5-x86/
drwxr-xr-x 17 root wheel 578 4 Ott 11:41 mysql-5.1.36-osx10.5-x86
Notiamo nella prima riga che Unix ci fa sapere che la cartella di nome mysql punta a quella sotto, che è proprio quello che volevamo.
Ora non ci resta che chiudere il Terminale, riaprire le preferenze di sistema, pannello MySQL e vedremo che questa volta il server si avvierà senza problemi!