Technology Experience
Software

Il supporto di WPF ai files audio: uffa!

Sinceramente? Sarò anche stanco – in questi giorni le giornate lavorative sono più movimentate del solito – però arrivare a sera e vedere che la classe SoundPlayer (namespace System.Media) di Windows Presentation Foundation non mi fa il play di un normale file audio .wav creato domenica mattina con WaveStudio francamente mi lascia senza parole.

Non so se leggete bene l’exception, ma mi viene detto che il file wave che ho passato al metodo PlaySound() deve essere nel formato PCM. Che tristezza!

Ora: ci vorrebbe un attimo ad aprire il file .wav con WaveStudio e vedere di cambiare il formato del file. Il fatto è che in questo momento sono sotto Windows Vista, mentre WaveStudio ce l’ho sotto Windows XP. Perchè non installo WaveStudio sotto Windows Vista? Perchè non si può. WaveStudio fa parte dei driver della mia Sound Blaster Audigy 4, che sotto XP sono una meraviglia, mentre sotto Vista sono una mera schifezza. E non solo perchè mancano tutta una serie di player/lettori multimediali/media center, ma anche per la qualità dell’audio. Non mi sento di dire la colpa nè a Microsoft nè a Windows Vista, ma ALLA CREATIVE.

Cosa aspettate a darmi driver funzionali ?????

Technorati Tags:     

Send to Kindle
Software

WPF: come creare ed usare le ‘tile brush’ con Expression Blend

Sono stanco, perciò la farò breve.

Innanzitutto, cos’è una tile brush? E’ un’immagine che viene usata come texture per riempire una superficie di qualche tipo. Immaginate di cercare immagini su google usando le stringhe “wood texture“. Troverete immagini 512×512, 300×300, 256×256 con superfici legnose che potete usare come background dei controlli o degli oggetti grafici delle vostre applicazioni. Comodo.

IMPORTANTE. il mio è solo un esempio, non è che potete andare su Google e scaricare tutte le immagini che volete: occhio ai diritti di autore, alle immagini protette da copyright e via dicendo.

Comunque, supponete di aver scaricato una texture che fa al caso vostro. La inserite nel vostro progetto creato con Expression Blend: come fate a creare una Tile Brush per riempire i vostri rettangoli, i vostri Canvas o i vostri controlli?

Non è così difficile, ma se proprio avete qualche problema, leggete questo post e quasi sicuramente risolverete tutti i vostri problemi. Meno male che l’ho trovato, perchè stavo per essere preso dalla depressione (dopo l’esultanza di qualche minuto fa!).

Technorati Tags:    

Send to Kindle
Community

Mi potete trovare anche su Facebook (oh mio Dio)

Sabato mattina mi sono svegliato e la prima cosa a cui ho pensato è: “Mi devo iscrivere alla cena di Lorenzo“. Per farlo, mi sono dovuto prima iscrivere su Facebook, perchè il mega-evento viene organizzato da lì. Ho ritrovato anche lì tutti gli amici di UGIdotNET, qualche amico ed amica in più.

Ho scoperto tutti i meccanismi che stanno dietro a questo portale: alcuni mi convincono, mentre altri sinceramente un po’ meno. Quello che sto odiando di più è l’obbligo di invitare amici per sapere il responso finale dei vari quiz che si trovano qua e là, e ai quali si è invitati. Davvero odioso. E’ una pratica che a tutti gli effetti è assimilabile allo spam. Per favore, non chiedetemi più qual’è la posizione del kamasutra che prediligo, oppure in quale città dovrei vivere, oppure a quale prodotto Microsoft assomiglio maggiormente.

Fatelo solo se siete obbligati.
Fatelo solo se avete pochi amici e io sono fra questi. Vi aiuterò, promesso.

Comunque sia, potete trovare il mio profilo a questo indirizzo. Ricordatevi che per poter vedere i profili delle persone su Facebook dovete essere registrati.

Technorati Tags:  

Send to Kindle
VivendoByte.ByteAdventure

[Adventure.02] Alla ricerca del byte perduto

Puntata precedente

Se un puntino luminoso compare sul lato sinistro di un monitor,
e comincia a muoversi verso destra,
probabilmente esso raggiungerà prima o poi il lato destro.
(sulla Predizione – Anonimo)

All’OS questa volta toccava un lavoro urgente. Avrebbe dovuto invocare funzioni a basso livello che non eseguiva da qualche centinaio di reboot. Per esserne sicuro aveva scandagliato a fondo l’Event Viewer di sistema, per trovare un report sull’ultima esecuzione, ma senza trovare alcuna informazione utile. Caricò in un puntatore l’indirizzo della funzione interessata, esso scalò lo stack fino a quando non ne raggiunse la cima. Quando lo scheduler dell’OS lo ritenne opportuno, l’entry-point della funzione venne caricato nel program-counter, e l’esecuzione cominciò.

Nessuno se ne accorse, ma il consumo di energia dell’hardware ebbe un picco verso l’alto, che venne gestito efficacemente dall’alimentatore.

L’OS si accomodò meglio sul suo trono e cominciò a godersi lo spettacolo.

0x7530

Dov’è andato ?” – chiese una voce in modo perentorio.
La risposta non arrivò subito, perchè i due furono presi alla sprovvista.
byte[1] e byte[2] si girarono quasi contemporaneamente verso la direzione dalla quale avevano sentito provenire la voce. Non c’era nessuno.

0x7532

Ve lo ripeto…Dove si è cacciato? Dove è andato ?” – chiese di nuovo la voce. Un po’ più decisa, questa volta.
Chi ?” – fece byte[1] intimidito.
Il byte che era allocato qui fino ad un attimo fa.“. La voce era sempre più irritata.

byte[1] e byte[2] intuirono che qualcosa non andava. Nessuno dei due aveva intenzione di rivelare dove fosse finito byte[0], anche solo per il fatto che nessuno dei due lo sapeva. Ma come potevano dirlo senza suscitare l’ira del loro interlocutore, che sembrava impaziente? A chi apparteneva quella voce che si rivolgeva loro con tanta autorità? Cosa dovevano fare o dire per toglierselo di torno?

0x7534

Non sappiamo dove sia adesso. Se ne è andato e basta.” – rispose alla fine byte[2], scatenendo l’insoddisfazione del proprietario della voce, chiunque fosse.

Nel punto da cui proveniva la voce si materializzò un’entità, che bloccò la strada da tutti i lati. Con un fragore assordante vennero allocate 0x40 celle di memoria intorno ai due bytes, erigendo un’efficiente palizzata di sicurezza per impedire ai due bytes la fuga. Sul volto di byte[2] si stampò un sorriso amaro, e anche byte[1] non era da meno. Di chiunque fosse quella voce, era sicuramente di qualcuno di importante. Qualcuno, forse, con cui era meglio non scherzare. In altri tempi, in altri sistemi, sarebbe bastata una GOTO per scappare via lontano, ma già da molto tempo quell’istruzione era stata bandita nei linguaggi di programmazione. Anche se fosse intervenuta un’altra istruzione, era comunque poco probabile che coinvolgesse le loro due celle proprio in quel momento.

I due bytes si guardarono intorno spaesati. Alle loro spalle la via era boccata da una parete verticale che era praticamente impossibile da scalare. Di fronte a loro c’era un precipizio che si affacciava sulla memoria RAM del sistema, e lanciarsi nel vuoto era pericoloso: non esiste forza di gravità in un sistema binario, ma qualsiasi impatto con il flusso dati di un bus poteva comunque risultare letale. Sulla destra e sulla sinistra i bytes invocati dall’entità chiudevano ogni passaggio. byte[1] e byte[2] si guardarono senza trovare una soluzione. Forse non c’era neppure.

0x7540

Bastarono pochi cicli di clock affinchè i due fossero messi in isolamento rispetto al resto del sistema.

0x004C. Data Memory corrupted. All memory operations in this area has been suspended. 0x029A.“.
La voce assunse un tono più metallico.
Non ci siamo capiti. VOGLIO e DEVO sapere dov’è finito! Non posso permettere che un byte se ne vada in giro per il MIO sistema!

Tutti i 0x40 bytes di sicurezza passarono all’unisono ad un RGB(0x23, 0xE9, 0xFF), un azzurro più intenso che ben si adattava a quello che stava per accadere: il muro cominciò a muoversi pian piano attorno ai due bytes – chiusi al centro – e stringevano sempre più, come un collare attorno al collo di un cane.

Quando non c’era più spazio fra i due bytes e l’armata invocata dal sistema operativo, accadde semplicemente l’inevitabile. I bytes azzurri estrassero dalla loro tuta la l’arma in dotazione, uno shifter verso destra, che avrebbe distrutto sia byte[1] che byte[2] nel modo più naturale possibile. Lo shifter avrebbe spostato verso destra ciascuno degli 8 bit dei due bytes, dimezzandone il valore ad ogni iterazione fino al raggiungimento dello zero assoluto. Rapido, efficace ed indolore.

Tutti i 0x40 bytes di sicurezza puntarono lo shifter verso le due celle e premettero il grilletto tutti insieme, freddi ed implacabili, e senza pensarci due volte.byte[1] e byte[2] non ebbero neppure il tempo per urlare, o soffrire.

Smisero di esistere prima che qualcuno se ne potesse accorgere.

Ciclo di clock 0x7000

La funzione chiamata dal sistema operativo completò la sua esecuzione ritornando il valore 0x00. Esecuzione completata con successo.

La funzione era una Predizione di Esecuzione e gli aveva permesso di dare un’occhiata ai cicli di clock futuri, una sorta di previsione temporale sugli avvenimenti che sarebbero accaduti solo fra circa 0x0500 cicli di clock. Così, l’OS aveva avuto una breve ma importante visione: byte[0] era fuggito, diventando così byte, e si era separato dai suoi due amici di sempre, byte[1] e byte[2]. Al ciclo di clock 0x7540 non avrebbe ancora ritrovato il fuggitivo, ma avrebbe deallocato ed annientato gli altri due, che non avevano voluto cooperare. Che fine avesse fatto il byte, la predizione non glielo aveva detto e quindi non lo sapeva ancora. Evidentemente – si disse – la finestra temporale che aveva esaminato non bastava: le gesta del byte erano più in là nel tempo: avrebbe dovuto utilizzare ancora la stessa funzione, ma non subito. Fece una richiesta WMI all’infrastruttura del framework, e come si aspettava la temperatura del core era sopra la media. Avrebbe dovuto aspettare.

L’OS adesso aveva un solo dubbio: non sapeva se far avverare la predizione oppure no. La funzione gli aveva rivelato cosa sarebbe accaduto se l’OS avesse seguito tutte le procedure standard, non cosa sarebbe accaduto realmente da lì a poco. L’OS – conoscendo il futuro – adesso avrebbe potuto decidere diversamente. Ad esempio: gliene importava davvero di quei due? Sapendo che non gli sarebbe stati d’aiuto, valeva la pena perdere preziosi cicli di clock in un task inutile? Deallocare quei due bytes poteva essere rischioso, perchè l’utilizzo degli shifter avrebbe potuto distruggere quelle due celle di memoria per sempre, riducendo di due miseri bytes la capacità RAM dell’intero sistema. Un bel problema – concluse OS – tanto che alla fine  vi rinunciò. Doveva sfruttare l’unico vantaggio che aveva: di quei due bytes non sapeva che farsene e decise di ignorarli.

Istanziò un nuovo thread per sguinzagliare una banda di classi IDisposable alla ricerca del byte perduto.

Send to Kindle
Software

Subtext: aggiungere pagine custom al proprio blog

L’altro giorno leggendo un po’ di blog tra quelli che ho sottoscritto, mi è capitato questo post intitolato 20 Types of Pages that Every Blogger Should Consider. Ogni blogger dovrebbe scrivere una pagina di About, una di Contact, una per le FAQ, etc. etc.

Al che…mi sono detto…da ignorante di ASP.Net: come faccio ad inserire una pagina custom nel mio blog? La risposta è semplice: basta leggere le FAQ di Subtext alla voce How do I add a custom page? che spiegano tutto. Come dicono le regole dei forum/newsgroup, prima di chiedere a qualcuno, assicurarsi che qualcun’altro non abbia già fatto prima la stessa domanda!

Technorati Tags:  

Send to Kindle
My personal life

Ecco il libro di Philip K. Dick che cercavo

La settimana scorsa ho parlato di Philip K. Dick e del suo racconto Modello Due, da cui è stato tratto il film Screamers – Urla dallo Spazio. Avevo anche accennato al libro Rapporto di minoranza ed altri racconti, che contiene non solo il racconto citato prima, ma anche alcuni altri.

Ho provato a dare un’occhiata ad alcune librerie qua a Milano, ma il volume non l’ho trovato. In compenso, però, ho trovato il libro Next

Il libro contiene i seguenti racconti:

  1. Next
  2. Ricordiamo per voi
  3. Modello Due
  4. Impostore
  5. Rapporto di minoranza
  6. I labirinti della memoria

Tutti racconti di 30-40 pagine l’uno davvero spettacolari. Il mio preferito rimane Rapporto di minoranza, da cui è stato tratto l’omonimo film con Tom Cruise. Il racconto spiega molte cose che secondo me nel film appaiono più nebulose, e comunque Dick affronta in certi momenti aspetti etici (ad esempio…arrestare una persona innocente perchè di fatto il crimine deve essere ancora commesso). Davvero molto bello. E gli altri racconti non sono da meno, e – lo ripeto – hanno dato il via a numerosi film di fantascienza moderni: nella maggior parte dei casi il racconto è molto diverso dalla trasposizione cinematografica, perchè i racconti sono molto più brevi, ma danno comunque lo spunto.

Il libro costa 14 Euro, e se andate nelle librerie vi regalano pure il biglietto per andare a vedere il film Next al cinema, che tra l’altro dovrebbe uscire proprio stasera. Meglio di così!

Send to Kindle
My personal life

Io o lui?

Chi è il più brutto? E il più cattivo? Di chi vi fidereste di più?

Amiche, donne in genere, da chi vi fareste offrire una cena?

Supponendo che ambedue le creature qui sopra dispongano di una patente di categoria B, con quale delle due andreste più volentieri a Reggio Emilia?

Chi dei due vi sembra più abbronzato?

Ma soprattutto…e qui chiudo…chi sarebbe in grado di urlare ad un volume più alto?

Send to Kindle
Software

La mia sveglia la mattina è…

il mio cellulare, un Nokia N70. Ogni tanto mi piace cambiare la canzone che alle 6:30 del mattino mi sveglia. L’ho fatto anche l’altra sera: collego via Bluetooth il Nokia al mio PC e faccio un drag’n’drop di un file mp3 sulla MMC del cellulare. Poi vado ad impostare la sveglia, ma facendo lo sfoglia dei files vedo che Symbian non mi mette i files mp3.

Perchè? Semplice: perchè non sono supportati. Sono invece supportati i files .AAC. E come li creo questi files .AAC? Dove convertire i files mp3 in questo formato? Sì, ma la cosa più veloce che vi conviene fare è usare Nokia Music Manager, utility graficamente piacevole contenuta nel PC Nokia Suite. Questo software vi permette di trasferire files musicali dal PC al cellulare, e si occupa automaticamente della conversione.

P.S. : bravo Fabio, avevi ragione tu!

Technorati Tags:   

Send to Kindle