Archive for the ‘Sviluppo’ Category

Cosa sono tutti quei programmi…?

Posted on the February 26th, 2007 under Mac, Programmazione, Sviluppo, Tutorial by Daniele Margutti

Come molti sistemi operativi moderni anche Mac OS X durante una normale sessione tiene aperti molti processi; la maggior parti di essi tuttavia sono semplicemente dei demoni che offrono particolari servizi.
Utilizzando il comando top da terminale o tramite l’utility Activity Monitor e’ possibile visualizzarne la lista completa dei dettagli, quali uso della memoria o risorse del processore.

Ecco una lista abbastanza completa dei processi che potrete incontrare in una normale sessione.
Continua a leggere

[tags]Mac OS X Processes, Mac Processes, Processi Mac OS X[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)

Transmission HDSuck patch

Posted on the February 24th, 2007 under Programmazione, Sviluppo, Tutorial by Daniele Margutti

Utilizzo parecchio il programma suddetto e ogni tanto ne seguo anche lo sviluppo. Transmission è a mio parere il miglior programma per torrents su Mac OS X. Purtroppo, come anche alcuni altri client, ha un brutto difetto: in caso di crash, quit forzato oppure se si cerca di avviare torrent scaricati da altri computer/client parte automaticamente il checking del file, ovvero l’operazione che permette al client - tramite la lettura completa dei dati scaricati - di individuare lo stato di download e le parti mancanti.
Niente di male se non fosse che questa operazione fatta contemporaneamente su tutti i torrent attivi sul programma… e se sono più di due il programma si trasforma in una specie di virus virulento che tramite molte operazione di i/o al disco fa rallentare all’inverosimile il sistema.

Così siccome questa feature è ancora in corso di implementazione ho pensato di metterci la cosidetta pezza - patch - scartabellando per una mezz’ora il codice sorgente.
Il problema principale è che a quanto ne so non è possibile sapere se il file ha bisogno di check fintanto che non viene attivato il download; purtroppo se lo si attiva e lo si disattiva subito e su molti file il programma va a puttane e si rallenta di nuovo anche se per altri motivi.

Quello che ho fatto è semplicemente aggiungere all’avvio tutti i torrent della history list senza avviarli, quindi abilitare un timer che fa partire uno per volta i torrent; fintanto che il torrent attivato per ultimo non ha terminato il check il successivo non partirà; questo eviterà di eseguire troppe operazioni di i/o sul disco rigido. Il tempo di polling con cui viene verificata la situazione è di 2 secondi, ma può essere facilemente aumentato o diminuito (questo dipende dalla dimensione media dei file ma alla fine non saranno certo un paio di secondi in più a velocizzarvi il download).

La patch l’ho applicata alla svn nightly 1516 (di Sabato 24 Feb 07) ma può essere facilemente aggiunta alla build ufficiale 0.6.1 o ad altre build.
Il progetto lo trovate qui, mentre qui c’è il compilato della nightly 0.7 in questione. Di seguito invece quello che è stato cambiato.

Nel file Controller.m andiamo nella funzione awakeFromNib alla ricerca della riga (più o meno alla riga 270)

while ((historyItem = [enumerator nextObject]))

al termine del ciclo while aggiungiamo l’istruzione:

[self startSerialCheckingTimer];

ora creiamo la funzione in questione all’interno della classe stessa:

- (void) startSerialCheckingTimer {
NSLog(@”Start for parallels”);
fStartToDownloadQueueIdx = 0;
fSerialTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0 target: self selector:
@selector(startDownloadingProcessCheckSave) userInfo: nil repeats: YES];
[[NSRunLoop currentRunLoop] addTimer: fSerialTimer forMode: NSModalPanelRunLoopMode];

[fSerialTimer fire];
}

Questo codice crerà un timer ogni 2 secondi che si occuperà di verificare la possibilità di attivazione di un torrent:

- (void) startDownloadingProcessCheckSave {
//don’t want any of these starting then stopping
// finished ?
int totalT = [fTorrents count];
if (totalT == 0 || (fStartToDownloadQueueIdx >= totalT)) {
[fSerialTimer invalidate];
NSLog(@”Stopped parallels timer”);
[self updateTorrentHistory];
[self updateUI: nil];
[self applyFilter: nil];

return;
}

// previous torrent checking?
if (fStartToDownloadQueueIdx >= 1 && [[fTorrents objectAtIndex:fStartToDownloadQueueIdx-1] isChecking] == YES) {
NSLog(@”… waiting for previous checking torrent”);
return;
}

Torrent *current = [fTorrents objectAtIndex:fStartToDownloadQueueIdx];
NSString *torrentWasPaused = [current startupStateIsPaused];//[[[fDefaults objectForKey:@"History"] objectAtIndex:fStartToDownloadQueueIdx] objectForKey: @”Paused”];

NSLog(@”Analizyng torrent (PAUSED: %@) (%d) %@”,torrentWasPaused,fStartToDownloadQueueIdx,[current name]);

fStartToDownloadQueueIdx++;

if ([torrentWasPaused isEqualToString: @"YES"]) { // pass to the next torrent in list
NSLog(@” [IS PAUSED] %@”,[current name]);
[self startDownloadingProcessCheckSave];
} else {
// not paused, is it activated or need to be checked integrity
[current startTransfer];
if ([current isChecking] == NO) { // pass to the next item
NSLog(@” [START... ACTIVATED] %@”,[current name]);
[self startDownloadingProcessCheckSave];
} else { // we need to wait the check
NSLog(@” [START... CHECKING] %@”,[current name]);
}
}

}

Questa funzione non fa altro che partire dal torrent fStartToDownloadQueueIdx (inizialmente 0) e attivare il torrent (solo se non era stato messo in pausa); se il torrent in questione non ha bisogno di checking si passa direttamente a quello successivo, altrimenti si aspetta. Al prossimo intervallo di tempo viene quindi verificato lo stato del check; se è terminato si passa all’attivazione del successivo altrimenti si aspetta ancora.
Purtroppo non sapendo se sia o no possibile conoscere la necessità di check per un determinato torrent questa tecnica ha un limite: file che hanno bisogno di check ma che si trovano dopo un file che è in check non saranno attivati immediatamente. Di per se la cosa non è un problema, ritardi di qualche minuto non uccidono nessuno, ma la cosa non è stilisticamente gradevole comunque.

Un’altra modifica sta nel salvataggio dello stato di pausa (s/n) all’avvio. Ho dovuto creare una variabile stringa che si salva questo stato perchè da qualche parte del codice viene aggiornato e rischio di disattivare o non attivare torrent al prossimo avvio. Quindi nel file Torrent.h aggiungerò tra la lista delle variabili:

NSString *_startupStateIsPaused;

mentre nel Torrent.m alla riga 130 a posto di:

NSString * paused;
if (!(paused = [history objectForKey: @"Paused"]) || [paused isEqualToString: @"NO"]) {
fStat = tr_torrentStat(fHandle);
[self update];
[self startTransfer];
}

ci sarà:

NSString * paused;
if (!(paused = [history objectForKey: @"Paused"]) || [paused isEqualToString: @"NO"]) {
fStat = tr_torrentStat(fHandle);
[self update];
// [self startTransfer];
}
//NSLog(@”ALLOCATED: %@ (%@)”,paused,[self name]);
_startupStateIsPaused = [paused retain];

startTransfer è commentato per evitare che l’allocazione di un torrent all’avvio di Transmission ne provochi anche la contemporanea attivazione.
sempre dentro la classe dovrò aggiungere la funzione:

- (NSString *) startupStateIsPaused {
return _startupStateIsPaused;
}

E questo è tutto. Come dicevo all’inizio la patch è installabile su tutte le release, basta stare attenti a trovare le parti di codice giuste.
[tags]Transmission Patch, BitTorrent Transmission Checking File, Transmission Checking File, Transmission Checking Files Problem[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)

Cos’é e come si usa launchd

Posted on the February 17th, 2007 under Programmazione, Sviluppo, Tutorial by Daniele Margutti

Dopo aver parlato di come Mac OS X esegue il bootstrap cerchiamo di addentrarci nei diversi programmi che svolgono un ruolo chiave durante l’avvio del sistema operativo; tra questi launchd ricopre un ruolo molto importante.
Introdotto con l’avvento della quarta incarnazione di OS X, launchd ha lo scopo di affiancare e sostituire diversi altri programmi classici in ambiente Unix: stiamo parlando in particolare di cron, xinetd, mach_init e anche init che per anni e anni e’ stato il primo processo ad essere lanciato durante il boot di sistema.

Continua… 

[tags]launchd explained, utilizzare launchd, launchd, usare launchd, cos’é launchd, guida launchd[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)

Come funziona Mac OS X all’avvio

Posted on the February 16th, 2007 under Programmazione, Sviluppo, Tutorial by Daniele Margutti

Mi ricordo che anni fà con il vecchio System 9 sapere cosa c’era all’avvio era uno scherzo; se si era a conoscenza di cosa significavano le piccole icone delle estensioni che apparivano in basso era fatta. Oggi Mac OS X da questo punto di vista è diventato più riservato anche se c’è da dire che il concetto di estensioni in se è sparito.

Attualmente in base al modello di Mac, PPC o Intel esistono due diversi BIOS/Basic-Input-Ouput System (ovvero quella porzione di codice eseguito nella prima fase di avvio che si occupa di eseguire la diagnostica dell’hardware, localizzare il sistema operativo e fornire un’interfaccia software per l’accesso alle periferiche collegate), OF (Open Firmware) e EFI (Extensible Firmware Interface).

La sequenza di boot, che descriveremo dettagliatamente più avanti nel corso dell’articolo può essere sommariamente ordinata secondo 6 punti principali…

Continua…

[tags]Sequenza di avvio Mac OS X, Avvio Mac OS X, Boot Mac OS X, Boot Sequence Mac OS X, Bootstrap Mac OS X[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)

Voglia matta di una Vista

Posted on the February 15th, 2007 under Sviluppo by Daniele Margutti

Allora proviamo a tornare al Dicembre scorso; si insomma a un paio di mesi fà. Il 14 dicembre. In una intervista al Mix Conference di Las Vegas il CEO di Microsoft disse che non era per nulla soddisfatto del DRM: “[DRM] causes too much pain for legitmate buyers”. Insomma il DRM è uno straccia maroni mica male, disse, aggiungendo qualche parolaccia qua e là per rafforzare il concetto. “People should just buy a cd and rip it. You are legal then.”

Le dichiarazioni sono poi state riportate in altri articoli tipo questo o questo. Il concetto è poi stato ripreso in qualche modo anche da Steve Jobs, vuoi perchè la cosa effettivamente ha un senso, vuoi per tornaconto anche di Apple che sembra non tenerci molto ad essere accusata di avere un modello di business musicale troppo chiuso (anche se la scelta di non rendere proprio libero l’ecosistema iPod non è stata imposta dall’alto).

Due giorni fà, esattamente il 13 febbraio, un Robbie Bach non qualunque (trattasi del presidente della Sezione Enterainment and Devices di Microsoft), in una intervista della CNET (la branca tech di CNN) ha toccato lo stesso genere di argomenti e riguardo la lettera aperta di Apple ha detto:

“Il lavoro di MS è quello di fornire gli strumenti e la tecnologia richiesti direttamente dagli operatori partner e anche dalle società partner che si occupano di media e contenuti. Finché le compagnie e i consumatori chiederanno i Drm MS farà tutto il possibile per implementarli e renderli operativi nel miglior modo possibile”

Nulla di strano nelle due dichiarazioni di Microsoft; una viene dal presidente che di certo non deve (per forza) entrare nell’ambito tecnico della cosa (Gates ha preso un pò la cosa alla larga puntando l’indice e sbattendo i piedi; un commento tecnico avrebbe messo in cattiva luce la nuova creatura), l’altra è di un manager a diretto contatto con la faccenda. E’ simpatico notare come Bach tiri in mezzo anche gli utenti affermando che i DRM saranno sviluppati nella maniera migliore possibile “finchè le compagnie e i consumatori” lo chiederanno.
Una cosa del tipo “venderemo scarponi per tirare calci nelle palle finchè le persone le chiederanno”; beh magari a qualcuno piacciono i calci nelle palle ma non è una fetta così grande della popolazione (spero)… Bach termina con “Così vedrete Microsoft continuare a realizzare grandi cose sui DRM, perché siamo convinti che faranno parte dello scenario futuro”.
E non ha poi tutti i torti, anzi nel Windows Vista che ho visto oggi riconcorrere all’università da gente che col computer dovrebbe lavorarci (che il computer studia, che un minimo di informazione, che un pò di cervello dovrebbe usarlo anche fuori dalle sedi di esami) c’è proprio tutto quello che Bach ha detto.
Straccia i maroni. Ma li straccia, come siamo abituati, senza fare troppo casino, smorzando i toni, alterando e omettendo frasi che potrebbero non essere molto utili a far vendere.

Fortuna che l’interfaccia 3D, principale motore di spinta (per cui in una giornata di pioggia in uno stand appena all’ingresso dell’università degli idioti si accalcavano reclamando roba che non conoscono ma-che-è-gratis!) riesce a tirar acqua al mulino. Se avete tempo da dedicare alla faccenda provate a dare un’occhiata all’ottimo servizio del Quotidiano alla TSI segnalato da Paolo Attivissimo (versione ADSL) e a questa serie di video prodotti dalla BBC. Tra questi c’è anche la presentazione dell’installazione di Vista, che ha richiesto 2 ore e cinque riavvii della macchina.

E vabè pazienza fosse solo quello il problema non ci sarebbe da blaterare poi troppo. Anche Repubblica in qualche modo (e mi stupisco che per una volta anche loro abbiano scritto roba decente e senza troppe distorsioni, al contrario della marketta fatta tempo fa sul Sole24 Ore, giornale da cui mi aspettavo maggiore autorevolezza) ha messo in chiaro zone che per molti sono oscure.
Certo sicuramente crakkeranno anche quello ma non è questo il punto, non è che se invece di due calci te ne danno uno nei maroni il dolore non c’è… (riporto quindi lo stralcio di articolo)

“Il nuovo sistema di Microsoft conterrà un set di tecnologie chiamate Output Protection Management, che, attraverso un complesso meccanismo di verifiche, possono inibire del tutto o peggiorare la qualità dei contenti audio e video riprodotti sul sistema. Se, ad esempio, si cerca di registrare attraverso il Media Center di Vista un contenuto ad alta definizione protetto, il sistema potrebbe inibire del tutto la riproduzione del contenuto o eseguire un cosiddetto downscaling, ossia riprodurre il contenuto a definizione standard. Ma c’è dell’altro. Vista esegue anche una verifica sull’hardware con cui è equipaggiato il PC, dalle schede grafiche ai monitor: se uno solo di essi non rispettase [sic] gli standard di protezione richiesti dalle major e implementati in Vista, oppure risultasse manomesso o modificato, il contenuto non sarà riprodotto come desiderato, anche se del tutto originale.”

Poi c’è chi dice che questa sarà la tomba per Microsoft, ma non ci credo; dietro a parte Apple che lavora (comunque sempre meno e non è chiaro cosa succederà più avanti sebbene molte tattiche prenderenno a volare proprio in questo anno) ancora in una nicchia la non coesione di Linux non aiuta di certo i passi avanti verso la cessazione del monopolio di Redmond.
[tags]Microsoft Vista, Sicurezza Vista, Microsoft, DRM, DRM Vista[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)

Segnali asincroni

Posted on the February 9th, 2007 under Programmazione, Sviluppo, Tutorial by Daniele Margutti

I meccanismi di segnalazione sono utilizzati come mezzo per sincronizzare più processi o ancora per notificare l’accadimento di particolari eventi del sistema.
Ad una segnalazione può eventualmente seguire una serie di azioni da parte del processo ricevente.

[Continua...]

(Indice)

[Tags]Segnali Asincroni Unix,Kill Signal,Signal Unix[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)

Come funziona la Memoria Virtuale

Posted on the January 29th, 2007 under Blog Cafe, Programmazione, Sviluppo, Tutorial by Daniele Margutti

La memoria virtuale è una tecnica che permette di eseguire processi che possono anche non essere contenuti all’interno della memoria. Il vantaggio principale che offre questa tecnica è quello di permettere che i programmi siano più gandi della memoria fisica che si ha disposizione; questo lo si fa astraendo la memoria centrale in un vettore molto grande e uniforme.

Abbiamo già visto una tecnica simile, l’overlay, tuttavia il vantaggio principale dell’uso della memoria virtuale è quello di sollevare il programmatore dal gestire quale porzione di programma deve entrare e quale uscire dalla RAM di volta in volta.

[continua...]

(indice degli argomenti)

[tags]Memoria Virtuale, Page Fault, Prestazioni Memoria Virtuale, Algoritmi di sostituzione delle pagine, FIFO, LRU, NRU, Algoritmo dell’orologio, Resident Set, Working Set, Dirty Bit, Lock Bit , Thrashing[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)

Al WWDC 2006 su Mac OS X…

Posted on the January 26th, 2007 under Blog Cafe, Mac, Programmazione, Sviluppo by Daniele Margutti

Da qualche giorno Apple ha reso disponibile “Mac OS X State of the Union”, ovvero uno degli interventi più interessanti ed attesi dello scorso WWDC 06.

Alla conferenza hanno partecipato Bertrand Serlet (SVP, Software engineering - quello che sembra avere un’occhio finto?), Simon Patience (VP, Core OS), Peter Graffagnino (Senior Director for Graphics and Imaging) e Scott Forstall, (VP for Platform Experience).
Proviamo ora a fare un riepilogo di ciò che si è discusso, nei prossimi giorni vedremo anche le altre sezioni.

Una delle novità più interessanti di Leopard sarà il pieno supporto ai 64 Bit. Fino a qualche tempo fà ci si aspettava che arrivasse per prima la casa di Redmond, ma stando alle ultime notizie Vista a 64 Bit sarà rimandato ulteriormente alla fine dell’estate.
L’adozione dei 64 bit è stato un processo graduale, iniziato con Tiger dove soltanto una parte del subset di Unix può beneficiare della nuova architettura. Lo spazio di indirizzamento a 64 bit permetterà comunque di far girare applicazioni anche a 32 bit estendendo il supporto anche ai layer alti del sistema, come Carbon e  Cocoa.

Il vantaggio dei 64 bit non è niente di acquisito come si potrebbe pensare; soltanto determinate applicazioni che fanno un uso di strutture dati enormi o che richiedono complessi calcoli computazionali potranno realmente trarne vantaggio (la stessa Apple si guarda dal consigliare di compilare normali applicazioni a 64 bit).

I 64 bit non verranno estesi alle vecchie API di sistema, escludendo così tutte quelle deprecate o vecchie che potrebbe portare il sistema a soffrire un pò. Tra queste API c’è QuickDraw, Sound Manager, CFM. Si tratta per lo più di API ereditate dal System 9.
Processori Intel a 64 bit portano anche un numero maggiori di registri su cui lavorare aiutando anche lo sviluppo software (anche se in questo senso la precedente architettura PPC era una spanna sopra).

La tecnologia dei multicore ha preso il posto della miniaturizzazione ed è diventato il metodo principale con cui aumentare le performance della macchina. Se per un singolo core prima aumentando la frequenza del 20% si otteneva il 13% in più di guadagno, è anche vero che si aumentava il consumo del 73%. L’architettura a più core permette di avere un gadagno del 73% sottraendo appena il 2% di risorse.

Il programmatore potrà accedere a questo aumento di performance in tre differenti modi: il primo è lasciare semplicemente che ci pensi il sistema; il secondo è usando opportunamente i thread (e questo richiede una certa abilità); il terzo è tramite l’uso di alcune nuove API che vanno sotto il nome di NSOperation.

Sempre ai programmatori viene data l’opportunità di farsi servire dal Garbage Collector, entrato finalmente in ObjC, che li solleverà dal dover gestire manualmente l’uso della memoria.
Leopard includerà infatti una nuova versione di Obj-C completo di un nuovo runtime.

Con Leopard si procederà anche lungo l’uso della GPU per i compiti quotidiani legati alle nuove interfaccie utente-macchina. Come è succeso per Tiger la CPU sarà sollevata dal gravoso compito di gestire una GUI sempre più dinamica e interattiva capace di sfruttare le moderne tecnologie di parallelismo delle GPU. Un esempio di qualche mese fà è proprio l’uso delle OpenGL Multi threaded, che permette guadagni in performance anche doppi rispetto al passato e che verranno messe a disposizione del programmatore anche in maniera trasparente con l’uso delle API di Sistema.
Core Image e Core Animation saranno sicuramente tra i più importanti beneficiari.

Core Animation è un engine dinamico che permette di animare facilmente le proprietà degli oggetti. Parte degli oggetti Cocoa utilizzabili tramite Interface Builder utilizzeranno proprio Core Animation.

Poi c’è anche il discorso dell’interfaccia slegata dalla risoluzione che potrà essere utilizzato soltanto portando i propri programmi dal vecchio QuickDraw a Quartz (per i testi e i path non ci sono problemi, per le icone Apple consiglia 512×512 mentre la navigazione sul web non dovrebbe dare noie) e che finalmente permetterà di utilizzare i nostri schermi ben oltre il limite software di 72dpi.

PictureTaker è una nuova API Leopard che permetterà di fare snapshot tramite fotocamera integrata direttamente dalle nostre applicazioni, come già fanno Address Book e iChat.
Sempre correlata alle foto arriva anche la nuova versione di PhotoBooth che sarà in grado di applicare effetti grafici al video in diretta.

Per gli addetti ai video arriva anche QTKit Capture che permetterà di acquisire video da iSight, USB, VDC, Firewire e videocamere DV. Inoltre permetterà di avere un riscontro diretto tramite anteprima e sarà completamente integrata con OpenGL.

Time Machine non è stato invece un argomento trattato in maniera dettagliata visto che c’erano altre sessioni specifiche ad esso dedicate. Probabilmente si appoggerà al nuovo file system ZFS e tramite un deamon a bassa priorità FSEvent eseguirà il monitor dei cambiamenti nell’arco d’uso del computer (tipicamente ogni ora). Un API sarà messa a disposizione per far dare l’opportunità ai programmatori di escludere dal backup particolari file o cartelle.

Nella versione Server di Leopard saranno disponibili Server Assistant e Server Preferences. La prima è quasi un wizard per impostare valori basi, mentre la seconda permetterà di gestire utenti e gruppi ed accedere ai servizi de server. Sarà inoltre accompagnata da un widget che permetterà di monitorare lo stato del server.

Come al solito sia la versione Server che Client utilizzeranno lo stesso kernel che sarà reso disponibile al pubblico sia in PPC che Intel.
Nuove applicazioni server come Calendar, Backup, Spotlight, Wiki, Podcast Producer e Ruby on Rails saranno integrate nella versione server.

L’idea in generale è di creare una nuova piattaforma base per lo sviluppo di software, ponendo l’accento sulla integrazione.
[tags]Mac OS X WWDC 2006 State of Union, WWDC 2006 Leopard, WWDC 2006[/tags]

VN:F [1.0.6_327]
Rating: 0.0/5 (0 votes cast)