RSS
 

Archive for November, 2009

Alternative zum Remote Desktop

19 Nov

Mit dem WindowsXP-eigenen Remote-Desktop System gibt es meiner Erfahrung nach häufig Probleme. Gestern war es auch nach einem dreiviertelstündigen Versuch eine Verbindung herzustellen, nicht möglich das Tool zu verwenden. Ich habe dann die Alternative RealVNC gefunden und ausprobiert. Dieses Tool benötigt lediglich die IP-Adresse des hilfesuchenden PCs, um eine Verbindung aufzubauen. Eine kostenlose Version ist erhältlich.

Die Installation ist einfach und unkompliziert, allerdings wird standardmäßig der Server als Service angelegt und gestartet. Nachdem man das Tool normalerweise wohl nicht täglich braucht, ist dies eher unnütz. Startmenü-Einträge machen die Deaktivierung aber denkbar einfach.

 
No Comments

Posted in Tools

 

Rest-Syntax delegieren

03 Nov

Die in ActionScript 3 eingeführte Rest-Syntax, die eine beliebige Anzahl von restlichen Argumenten in einer Funktionsdeklaration erlaubt, kann ganz praktisch sein, wenn man nicht weiß, was kommt. Ein Einsatzbeispiel ist NetConnection.call(), das neben einem String und einem Responder-Objekt eine beliebige Anzahl an Folgeparametern erlaubt. Was aber, wenn man diese Argumente delegieren möchte?

In meinem Fall hatte ich eine Wrapper-Klasse geschrieben, die mir die Verbindungsdetails zu einer externen Datenquelle kapselt. Auch das Responder-Objekt wurde komplett privat verwaltet. Den eigentlichen Aufruf wollte ich aber flexibel halten, so dass der NetConnection-Call nach außen hin in einer eigenen Funktion public gemacht wurde. Das bedeutet, dass meine call-Funktion als call(cmd:String, ... args) deklariert werden sollte. cmd und args sind die einzigen Parameter, die von außen zugesteuert werden können und völlig unabhängig sind. Der Responder ist für die Außenwelt uninteressant, da er ja in meiner Klasse verwaltet wird und daher direkt an die NetConnection gegeben werden kann.

Das Problem: Innerhalb function myCall(cmd:String, ... args):void kann man nicht einfach nc.call(cmd,res,args); aufrufen, weil die restlichen Argumente innerhalb der Funktion in einem Array vorliegen. Das bedeutet, dass nc.call(cmd,res,args) ein einziges Objekt, nämlich ein Array, als Argument erhält und nicht wie gewünscht alle Einzelargumente. Natürlich hätte ich auch einfach das NetConnection-Objekt public machen können, aber das wäre nicht gerade im Sinn der Kapselung und würde zudem auch die Veröffentlichung des Responders erfordern, der ja an den eigentlichen call übergeben werden muss.

Die Lösung: man darf die gewünschte Funktion, in diesem Fall NetConnection.call, nicht direkt aufrufen, sondern muss sie als Funktionsobjekt behandeln und die Methode apply auf ihm aufrufen. apply akzeptiert bzw. verlangt alle Funktionsparameter in Form eines Arrays, was für die restlichen Argumente ja schon zutrifft. Die beiden anderen fest deklarierten Parameter muss man allerdings auch in dieses Array einfügen, da hier eben alles in einem Array liegen muss.

class MyConnector
{
  private nc:NetConnection;
  private res:Responder;
  ...
  function call(cmd:String,... args)
  {
    nc.call.apply(nc,new Array(cmd, res).concat(args));
  }
  ...
}

So… und wenn diesen Beitrag noch jemand versteht: Hut ab! ;-)

 
No Comments

Posted in Air, Flash, Flex

 

JavaScript exe- und dll- Compiler

03 Nov

Wie ich neulich zufällig las, kann JavaScript mittels des frei verfügbaren Microsoft Compilers jsc in .net-Exe-Dateien und -DLLs kompiliert werden. Das kleine Progrämmchen wird offenbar mit einem Servicepack oder .net-Framework (das wiederum in Servicepacks enthalten ist) ausgeliefert, so dass man es wahrscheinlich schon längst auf dem eigenen Rechner hat. Eine kurzer Blick in die Eingabeaufforderung lässt sofort erkennen, ob das der Fall ist.

Quelle: Ausführlicher Artikel hier

 

Event handler not triggered trotz addEventListener

03 Nov

Versucht man in der Flash CS4-Autorenumgebung einen Keyhandler onKeyUp hinzuzufügen, so kann es passieren, dass der folgende Fehler auftaucht, obwohl man die Funktion mittels addEventListener hinzugefügt hat: Warning: 1090: Migration issue: The onKeyUp event handler is not triggered automatically by Flash Player at run time in ActionScript 3.0. You must first register this handler for the event using addEventListener ( 'keyUp', callback_handler).

Des Rätsels Lösung liegt ganz einfach in der Benamung der Funktion. onKeyUp wird, wie das Syntaxhighlighting auch schon andeutet, als Schlüsselwort behandelt und kann daher nicht für die Funktion verwendet werden. Kaum ändert man den Funktionsnamen läft es fehlerfrei.

stage.addEventListener(KeyboardEvent.KEY_UP, doKeyUp);
function doKeyUp(event:KeyboardEvent):void
{
   switch(event.keyCode)
   {
      case Keyboard.RIGHT:
         nextFrame();
      break;
      case Keyboard.LEFT:
         if (currentFrame>2) prevFrame();
      break;
   }
}
 
No Comments

Posted in Flash