Visualizzazione post con etichetta Tutorial. Mostra tutti i post
Visualizzazione post con etichetta Tutorial. Mostra tutti i post

giovedì 29 luglio 2010

-NO AUDIO- Dead Space Extraction e USB Loader


Sperimentando Dead Space Extraction PAL sul mio Wii, ho notato che il gioco fila liscio come l'olio se non fosse per il fatto che a eccezione dei loghi inziali, tutto il gioco è senza audio.

La soluzione è presto detta: semplicemnte basta settare nelle impostazioni dell USB Loader (e se necessario anche nelle impostazioni personalizzate per il gioco, per capirci quelle visibili al primo 'click' col wii mote), nella voce Game Load, l'opzione -default language-, ossia il linguaggio usato dalla console.

Come per magia, l'audio tornerà. Buon gioco a tutti

For English users: 

Just set up your usb loader game language in 'default language'. For any problems contact me

venerdì 28 maggio 2010

Windows Seven 7: disattivare controllo autenticità (WAT)


Il WAT (Windows Activation Technology) è un sistema che si occupa di verificare la genuiinità del  vostro SO.

Con l'aggiornamento KB971033 molti crack fino a ieri perfettamente efficienti sono stati improvisamente rilevati e inattivati, facendo comparire il famigerato messaggio di cui sopra.

Per eliminare questo controllo, occore scaricare il tool di rimozione del WAT, disponibile tramite il Windows Seven Downloader

Link: Download

mercoledì 26 maggio 2010

TrovaTutorials: se non lo trovi, lo trovo io per te


Ho deciso di intraprendere una iniziativa che nelle intenzioni dovrebbe semplificare la vita a chiunque cerchi un tutorial su internet ma non riesce a trovarlo: il TrovaTutorial.

Se avete bisogno di una guida in particolare, ma non la trovate, o è in Inglese e non la capite, mandatemi una mail o commentate questo post dandomi indicazioni su cosa vi serve. Lo troverò io per voi e lo pubblicherò sul mio blog.

domenica 23 maggio 2010

[KB971033] Aggiornamento Windows Seven anti-pirateria

Oggi mi è arrivato questo avviso di aggiornamento Windows Update:


L'id è KB971033. In pratica è un contro-crack che permette di rilevare casi di contraffazione della copia. Chi di voi avesse una copia attivata con metodi non legali, si vedrebbe de-attivare il sistema operativo.

L'unico modo per scampare a questa mietitura di falsi product key è evitare l'installazione di questo aggiornamento, levandogli la sposta e nascondendolo cliccandoci sopra con il tasto destro.

Tuttavia, se l'aveste erroneamente installato, c'è un modo per riparare al danno. Rimanete sintonizzati per un tutorial tra breve.

Tutorial di rimozione del WAT

mercoledì 19 maggio 2010

PSP Custom Firmware 5.50 Gen-B


Ecco la guida per installare il CFW 5.50 Gen-B, attualmente il più recente.
Tra poco sarà disponibile anche la guida al 6.20

Detto questo vediamo il changelog

* Possibilità di riprodurre giochi protetti da copyright come Evangelion Jo (JP).iso
* Migliorato il menù VSH
* Enable/Disable Pandora battery from VSH menu

Di cosa abbiamo bisogno:

* PSP Fat (PSP1000) o PSP2000
* CFW5.50. GEN-A già installato e funzionante
* Livello della batteria almeno 78%
* Non necessita di Pandore.

Come installare il Custom Firmware 5.50 Gen-B?

1. Download del Custom Firmware 5.50 GEN-B
2. Decomprimete il file, e otterrete una cartella chiamata “5.50-genB-update”
3. Connettete la PSP via USB cable
4. Selezzionate la connessione a PC
5. Copiate la cartella 5.50-genB-update nel percorso /PSP/GAME/ della vostra Memory Stick
6. Disconnettete la PSP, e andate nel menu Game, dove vedrete quanto appena copiato
7. Premete X sull'icona di installazione
8. Controllate tra le specifiche e vedrete che l'aggiornamento è fatto!


Read more about psp by www.pspsx.com

martedì 18 maggio 2010

PSP Custom Firmware 5.50



Vediamo le migliorie di questo nuovo custom firmware (in inglese):

* Able to use 5.50 main firmware for play new games such as Kidou Senshi Gundam – Senjou no Kizuna Portable ( Which these games required psp firmware 5.05 or above ).
* Added information board menu in PlayStation Network (PSN).
* Now you can use PlayStation Store, though you’re not yet installed PlayStation Network Account.
* In this firmware, almost every game required fewer spaces than other games in previous versions.
* Display content as subfolder in Photo, Music, and video sections.
* Limit the use of PSP over the internet.

Di cosa abbiamo bisogno per installare il Firmware 5.50 GEN-A.

* Una PSP1000 and PSP2000.
* Deve avere installato correttamente uno dei seguenti firmware: 3.52M33-4, 3.71M33, 3.80M33,3.90M33, 3.95GEN, 4.01M33, 5.00M33 or 5.02 GEN-A
* Il livello di carica devve essere almeno al 78%
* non necessita di Pandore.

Come installare il Custom Firmware 5.50 GEN-A

1. Download il Custom Firmware 5.50 GEN-A -
2. Fate l'unzip del pacchetto e vedrete una cartella UPDATE (dentro PSP/GAME/)
3. Connettete la PSP al computer tramite USB
4. Impostate Setting: USB Connection (nella PSP)
5. Copiate la cartella UPDATE in /PSP/GAME/
6. A copia conclusa, scollegate la PSP
7. Per far partire l'installazione selezionatela dalla lista giochi della Memory stick
8. Premete X per installare
9. Se tutto è andata bene, verrete reindirizzati alla pagina di update, quindi seguite le istruzioni.
10. E' tutto!

A breve la guida per installare il 5.50 Gen-B


Read more about Dark Alex by www.pspsx.com

martedì 4 maggio 2010

Creare apps per iPhone con Flash CS5


Con il rilascio della nuova Creative Suite 5 sono stati aggiornati numerosi ambienti di sviluppo. Una delle migliorie più significative (eh, ahimè, presto inutili) è l'iPhone Packager, ossia un compiler in grado di convertire un sorgente ActionScript 3.0 in un eseguibile per iPhone.

Giusto per testare le effettive capacità del packager, ho provato a implemntare una banale app che reagisca all'inclinazione del telefono. Per farlo occorre utilizzare le nuove classi del package flash.sensor (implementate proprio in vista dei nuovi smartphone).

Vediamo nel dettaglio il codice

import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;

stage.scaleMode = StageScaleMode.NO_SCALE;//blocca lo scale dello stage
stage.align = StageAlign.TOP_LEFT;//allinea lo stage in alto a sx (utile per posizionare oggetti al suo interno)
//stage.cacheAsSurface = true;//boh...

Innanzitutto importiamo i package che ci servono. In teoria questi import non servono se non quando si implementa una nuova classe, ma Flash CS5 le ha inserite non appena ho dichiarato gli oggetti, per cui...



var xSpeed:Number = 0;
var ySpeed:Number = 0;
const RADIUS = 20;


Inizializzo le variabili di cui ho bisogno:
  1. accelerometer contiene eventi e relative informazioni riguardo i sensori X,Y,Z dello smartphone.
  2. timer regolerà la frequenza di aggiornamento del movimento della pallina
  3. xSpeed/ySpeed sono le varibili Number della velocità della pallina nel piano
  4. RADIUS è una costante che dovrebbe indicare l'ingombro della pallina nello stage. Ovvio che è a vostra discrezione...

if (Accelerometer.isSupported)
{
    var accelerometer = new Accelerometer();
    accelerometer.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler);
    var timer = new Timer(40);
    timer.addEventListener(TimerEvent.TIMER, timerHandler);
    timer.start();
}

Il metodo statico isSupported della classe Accelerometer rileva la configurazione dello SP in modo da capire se ha o no i sensori di accelerazione e se sono abilitati dal suo O.S. E' utile per prevenire eventuali errori in caso di mancato funzionamento di questi ultimi.
  1. Istanzio quindi l'oggetto accelerometer
  2. Creo l'ascoltatore per l'ebento UPDATE, ossia l'evento scatenato al movimento dello SP
  3. Istanzio il timer. Questo oggetto scatena un evento Timer ad intevalli predefiniti specificato nel costruttore in millisec. Ho settato l'evento ogni 40 ms supponendo una framerate dell'iPhone di 25fps: 1000ms/25fps = 40ms, ossia una volta per frame. Un intervallo più basso sarebbe inutile in quanto non visualizzabile dallo SP
  4. Creo l'ascoltatore all'evento TIMER
  5. Faccio partire il timer

franco.x = stage.stageWidth / 2;
franco.y = stage.stageHeight / 2;
addChild(franco); 

Setto la posizione di partenza della pallina e la aggiungo allo stage.


function accUpdateHandler(event:AccelerometerEvent):void
{
xSpeed += event.accelerationX * 2;
ySpeed -= event.accelerationY * 2;
}

Questa funzione viene richiamata ad ogni evento di tipo AccelerometerEvent, ossia ogni volta che lo smartphone assume una posizione fuori asse. L'attributo accelerationX/Y contiene al suo interno un Number indicante l'accellerazione a cui lo SP è sottoposto (nota: qui sarebbe necessaria una distinzione tra Accellerometri e Giroscopi, che rimando a un post futuro): per la cronaca, l'unità di misura è metro/secondo^2, chi ha qualche riminescenza di meccanica classica capirà.

function movefranco():void
{
    var newX:Number = franco.x + xSpeed;
    var newY:Number = franco.y + ySpeed;
    if (newX < 20)
    {
        franco.x = RADIUS;
        xSpeed = 0;
    }
    else if (newX > stage.stageWidth - RADIUS)
    {
        franco.x = stage.stageWidth - RADIUS;
        xSpeed = 0;
    }
    else
    {
        franco.x +=  xSpeed;
    }

    if (newY < RADIUS)
    {
        franco.y = RADIUS;
        ySpeed = 0;
    }
    else if (newY > stage.stageHeight - RADIUS)
    {
        franco.y = stage.stageHeight - RADIUS;
        ySpeed = 0;
    }
    else
    {
        franco.y +=  ySpeed;
    }
}

Queste if altro non fanno che bloccare la pallina quando questa arriva a toccare i bordi. Senza entrare nel dettaglio (anche perchè credo sia tutto molto elementare) si considera l'ingombro determinato dal radius calcolando così quando la pallina deve smettere di muoversi.

function timerHandler(event:TimerEvent):void
{
    movefranco();
}

Questa funzione, richiamata dall'evento TimerEvent scatenato dall'oggetto timer si occupa di aggiornare la posizione della pallina in base alle possibile nuove inclinazioni dello SPhone.

Ecco il codice per esteso

import flash.sensors.Accelerometer;
import flash.events.AccelerometerEvent;
import flash.display.MovieClip;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//stage.cacheAsSurface = true;

var accelerometer:Accelerometer;       
var timer:Timer;
var xSpeed:Number = 0;
var ySpeed:Number = 0;
const RADIUS = 20;

function accUpdateHandler(event:AccelerometerEvent):void
{
    xSpeed +=  event.accelerationX * 2;
    ySpeed -=  event.accelerationY * 2;
}

function movefranco():void
{
    var newX:Number = franco.x + xSpeed;
    var newY:Number = franco.y + ySpeed;
    if (newX < 20)
    {
        franco.x = RADIUS;
        xSpeed = 0;
    }
    else if (newX > stage.stageWidth - RADIUS)
    {
        franco.x = stage.stageWidth - RADIUS;
        xSpeed = 0;
    }
    else
    {
        franco.x +=  xSpeed;
    }

    if (newY < RADIUS)
    {
        franco.y = RADIUS;
        ySpeed = 0;
    }
    else if (newY > stage.stageHeight - RADIUS)
    {
        franco.y = stage.stageHeight - RADIUS;
        ySpeed = 0;
    }
    else
    {
        franco.y +=  ySpeed;
    }
}

function timerHandler(event:TimerEvent):void
{
    movefranco();
}
var ciccio: MovieClip = new MovieClip
//-----------------------------------------------------
if (Accelerometer.isSupported)
{
    accelerometer = new Accelerometer();
    accelerometer.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler);
    timer = new Timer(100);
    timer.addEventListener(TimerEvent.TIMER, timerHandler);
    timer.start();
}
franco.x = stage.stageWidth / 2;
franco.y = stage.stageHeight / 2;
addChild(franco);

Link: download

lunedì 3 maggio 2010

Windows 7 Downloader - Scaricare tutte le iso di Windows Seven


R27 per Windows 7 Blog e R27 Blog ha sviluppato un utile utility per il download delle Iso di Windows Seven nelle sue varie versioni (Basic, Home, Professional e Ultimate) oltre poi ai vari crack/loader per la sua attivazione.
In pratica si connette come un client e scarica quello che volete voi, evitando così le varie ricerche su Google/P2P.

Link: Win 7 downloader 1.5

sabato 24 aprile 2010

[Wii] Come avviare il backup/iso di Monster Hunter 3 Tri PAL


Chi di voi avesse tentato di far partire Monster Hunter 3 con un qualsiasi loader, sia esso USB Loader GX, NeoGamma o WiiFlow, avrà sicuramente riscontrato un problema di freezing, ossia alla schermata "inizia partita", dopo aver premuto A, il gioco si blocca producendo un beep ininterrotto.

Su internet girano milioni di ipotetiche soluzioni che si basano su aggiornamenti più o meno recenti del cIOS o del loader, oppure su strane impostazioni da settare al momento della scelta del gioco. In realtà queste soluzioni valgono solo per una strettissima minoranza, mentre la maggior parte degli utenti non riesce comunque a sbloccare il freezing.

Il punto infatti non è la versione del cIOS (che può essere 17-18-19), ma le sue impostazioni al momento dell'installazione:
  1. Scaricate un cIOS (link alla rev19,) (link megaupload)
  2. Copiate la cartellina cIOS revXXX all'interno della cartella apps della SD
  3. Fate partire l'installazione dall'HomeBrew Channel
  4. Al momento dell'installazione, scegliete nella prima schermata IOS249
  5. Nella seconda schermata, alla voce "Select base IOS version" selezionate IOS37 vXXXX
  6. Procedete con l'installazione da network (online)
  7. Attendete la fine dell'intallazione e riavviate la console
  8. Et Woilà, il vostro Monster Hunter 3 non si frizza più!
Ho testato personalmente questa configurazione e ha risolto tutti i miei problemi di freeze and beep.
Se qualcuno di voi ha delle domande, posti pure nei commenti.

don't worry, be Creative ;-D

domenica 18 aprile 2010

[Actionscript 3] XMLLoader: Creare una classe che legga e prepari XML

In questo post tratterò di come creare una classe Actionscript 3 che carichi da se un file xml, semplicemente passandole un path, e a caricamenti avvenuto generi un evento ACTION da me definito.


Questa classe non fornisce metodi e proprietà per il parsing (navigazione/lettura/scrittura), dato che quanto fornito di default da AS3 mi sembrava più che sufficiente. Vien da sè che chiunque decida di reimplementarla migliorandola è ben accetto.


La classe è composta solo da poche righe, tuttavia avendo notato che sono praticamente sempre le stesse in qualsiasi progetto Flash, ho preferito raggrupparle tutte in una classe definita. Questo ha snellito i miei progetti e permesso di gestire meglio tutto il procersso di caricmaneto dati da XML.

package _classi{

import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class LoadXML extends EventDispatcher{
public static var ACTION:String = "action";
public var xmlData:XML = new XML();
public var objPath:String;
public var isLoaded:Boolean = false;
private var urlR:URLRequest=new URLRequest();
private var urlLoader:URLLoader = new URLLoader();

public function LoadXML(path) {
objPath = path;
urlR.url=objPath;
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errHandler);
urlLoader.addEventListener(Event.COMPLETE, xmlLoader);
urlLoader.load(urlR);
}
public function xmlLoader(e:Event = null):void {

xmlData=XML(urlLoader.data);
dispatchEvent(new Event(LoadXML.ACTION));
trace(xmlData.@src);
}

private function errHandler(e:IOErrorEvent):void {

trace("url errato");
trace(e.toString());
}

}
}

Innanzitutto definiamo il package (ossia la cartella all'interno della quale salvare la nostra classe. Io normalmente utilizzo "_classe", ma è ovvio che ognuno la definisce a suo piacimento e a seconda della sua posizione relativamente all'SWF che poi la utilizzerà.

Successivamente importiamo i package a noi necessari, quindi tutti gli eventi, il loader (colui che caricherà/conterrà fisicamente l'XML), l'URLRequest (che si occuperà di fornire al loader l'url da cui caricare).
package _classi{

import flash.events.*;


import flash.net.URLLoader;


import flash.net.URLRequest;
Ecco la prima nozuione interessante: definiamo la classe come estensione della EventDispatcher (traducibile all'incirca con 'Dispensatrice di Eventi').
Questa scelta è motivata dalla necessità di poter creare un evento proprio della classe che indichi quando l'XML è stato caricato. Eviteremo l'ingombro di dover definire ogni volta un ascoltatore dell'evento Event.COMPLETE nel nostro ipotetico SWF con tutti i relativi annessi e connessi (cosa fare se l'url dell'XML non esiste).
Ci basterà infatti definire nell'SWF target un ascoltatore all'evento ACTION, qui definito, senza preoccuparci di errori di url, che saranno tutti gestiti internamente alla classe.
public class LoadXML extends EventDispatcher{
public static var ACTION:String = "action";


public var xmlData:XML = new XML();//sarà il contenitore finale del nostro XML


public var objPath:String;//il path dell'XML


public var isLoaded:Boolean = false;//una variabile flag, che cambierà valore a caricamento ultimato


private var urlR:URLRequest=new URLRequest();//il contenitore dell'url dell'XML


private var urlLoader:URLLoader = new URLLoader();//il loader
Vediamo il costruttore. La prima azione che svolge è quella di associare assegnare alla proprietà url dell'oggetto URLRequest quanto passatogli nel parametro path. Assegnamo poi all'oggetto URLLoader (da non confondere con Loader) un ascoltatore che ci avvisi di eventuali errori nel url che andremo ad assegnargli e un ascoltatore che richiami la funzione xmlLoader, in caso l'url sia esatto, dell'avvenuto caricamento dei dati da XML.

Ora che tutti gli ascoltatori sono definiti, passiamo pure l'url all'oggetto URLLoader.
public function LoadXML(path) {
objPath = path;

urlR.url=objPath;


urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errHandler);


urlLoader.addEventListener(Event.COMPLETE, xmlLoader);


urlLoader.load(urlR);
}
La funzione XMLLoader è quella che si occupa di 'travasare' i dati dall'URLLoader all'oggetto XML.

Ci si potrebbe chiedere come mai è necessario questo travaso, e perchè non far tutto con l'uno o con l'altro. Semplicemente perchè le proprietà/metodi dell'oggetto XML non sono sufficienti a caricare fisicamente i dati da file e le proprietà dell'oggetto URLLoader non sono sufficienti a gestire lalettura/navigazione dei dati una volta caricati. Dall'oltreonde, se così fosse, non avremo bisogno di implementare questa classe ;-)

Questo metodo viene richiamato a caricamento dati ultimato. Nella proprietà data dell'oggetto URLLoader avremo dunque, in sequenza binaria, il contenuto del nostro file XML. Da notare che ci saremo potuti appoggiare alla proprietà target dell'oggetto e, che tutti sappiamo puntare al 'target' dell'evento, e cioè urlLoader. O preferito tralasciare questa finezza per una maggiore chiareza del codice.

A questo punto utilizziamo il metodo dispatchEvent(), della classe EventDispatcher, che 'lancera' l'evento ACTION. Non abbiamo bisogno di instanziare un oggetto di questa classe per utilizzarla, in quanto ereditandola disponiamo gia adesso di tutti i suoi metodi/proprietà (esclusi i protected).

Questo metodo vuole come parametro l'oggetto Event che dall'esterno sarà il segnale che l'XML è stato caricato ed è pronto ad essere utilizzato. L'oggetto Event a sua volta vuole come parametro la stringa che lo identifica, notare che saràè la stessa proprietà statica che verrà utilizzata poi nell'ascoltatore che creeremo nell'SWF esterno.

Infine facciamo un trace del path dell'xml, a testimonianza che tutto è andato nel verso giusto.

public function xmlLoader(e:Event = null):void {

xmlData=XML(urlLoader.data);


dispatchEvent(new Event(LoadXML.ACTION));

trace(xmlData.@src);
}

Ora che la nostra classe, è completata, non ci resta che testarla all'interno di un qualsiasi SFW. Se tuttò va bene, otteremo un oggetto LoadXML la cui proprietà xmlData conterrà il nostro tanto agognato XML.

Spero di essere stato sufficientemente chiaro, buon lavoro a tutti in attesa del nostro prossimo tutorial! :D