RSS
 

Grafiktablett Pinseldruck in PS unter Win7

07 Mar

Wenn mich etwas aufregt, dann Dinge, die unnötig wertvolle Zeit kosten, weil man z.B. stundenlang irgendwelches Zeug auseinander friemeln muss. So auch wieder in diesem Beispiel. Ich habe eine grafische Idee, die ich als Skizze schnell in Photoshop anlegen will. Würde alles funktionieren, wäre das kein Problem und die Sache wäre fix erledigt. So aber habe ich erst mal wieder eine Ewigkeit damit verbracht, herumzusuchen, warum in Photoshop CS3 die Drucksensitivität meines Grafiktabletts nicht funktioniert.

Nach einiger Konfiguriererei fiel mir dann schließlich das Problem auf: Die seit Windows Vista automatisch mit installierte Tablet PC-Eingabe wertet das Gerät automatisch aus und verhindert so, dass PS die richtigen Daten erhält. Aufgefallen ist mir das, weil der Klick-Kreis der Tablet PC-Eingabe auch ständig in Photoshop erschien. Die Lösung lag letzlich darin, den Tablet PC-Service einfach auszuschalten und zu deaktivieren, so dass er beim nächsten Hochfahren auch nicht mehr neu startet. Kaum war das getan, lief das Grafiktablett inklusive Druckerkennung einwandfrei. :-)

Ein entsprechender Beitrag befindet sich auch hier.

 
 

Build Version Increment Script mit HTA

21 Feb

Nachdem mir die zuletzt gepostete bat-Version zur automatischen Erstellung einer Build-Version in FlashDevelop nicht wirklich zugesagt hat, habe ich mich erneut damit auseinander gesetzt. Die letzte Lösung war ja nur ein Workaround mit einer pseudo-Build-Nummer, die aus dem Datum konstruiert wird. Die neue Version ist jetzt mit JavaScript geschrieben und läuft als hta-Anwendung. Das macht vieles in diesem Script imho erheblich leichter und die Build-Nummer wird jetzt ‘richtig’ inkrementiert. Das Script kann hier heruntergeladen werden. Eine readme-Datei ist auch dabei :) .

 
No Comments

Posted in Air, Flash, Flex, Tools

 

Eigene Build-Version für ActionScript unter FlashDevelop

30 Dec

Nach einer gefühlten Ewigkeit der Suche habe ich nun endlich eine *.bat-Datei schreiben können, die mir bei jedem Compilierungsvorgang in FlashDevelop eine neue Versionsnummer in eine ActionScript-Datei schreibt. Diese kann dann problemlos im restlichen ActionScript-Projekt wie gewohnt verwendet werden, so dass ich nun in jedem compilierten SWF automatisch eine neue Versionsnummer habe.

Der Code der updateVersion.bat ist folgender:

REM Writes the date and time as current version into src/org/buehling/Version.as
 
@echo off
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%c_%%b_%%a
REM @echo %cdate%
FOR /F "tokens=1,2,3,4,5 delims=/: " %%a in ('time/T') do set CTIME=%%b_%%a
REM @echo %ctime%
 
SET VERSIONFILE=src\org\buehling\Version.as
SET VERSION=%CDATE%_%CTIME%
 
del "%VERSIONFILE%"
 
echo package org.buehling >> %VERSIONFILE%
echo { >> %VERSIONFILE%
echo //CAUTION: >> %VERSIONFILE%
echo //THIS FILE IS CREATED AUTOMATICALLY BY updateVersion.bat AT EACH COMPILATION! >> %VERSIONFILE%
echo //Any changes will be overridden and lost! >> %VERSIONFILE%
echo public class Version { >> %VERSIONFILE%
echo public static const VERSION:String = "%VERSION%"; >> %VERSIONFILE%
echo } >> %VERSIONFILE%
echo } >> %VERSIONFILE%

Die Datei liegt im Wurzelordner des FlashDevelop-Projekts und wurde mit der Zeile $(ProjectDir)\updateVersion.bat in die “Pre-Build Command Line” Tools der Projekteigenschaften aufgenommen. Vor jedem Compilieren ruft FD die Datei auf, die wiederum die Datei src/org/buehling/Version.as neu anlegt und darin das aktuelle Datum der Form YYYY_MM_DD_hh_mm in eine String-Variable schreibt.
Listing der Version.as:

package org.buehling
{
   //CAUTION:
   //THIS FILE IS CREATED AUTOMATICALLY BY updateVersion.bat AT EACH COMPILATION!
   //Any changes will be overridden and lost!
   public class Version {
      public static const VERSION:String = "2009_12_30_25_23";
   }
}

In anderen Projektteilen, binde ich den Wert dann ganz normal ein, z.B. in ein Flex-Label: <mx:Label text="{Version.VERSION}" />

Update: In diesem Post schreibe ich über die Erzeugung einer Build-Version-Nummer auf Basis eines echten Zählers mittels hta.

 
1 Comment

Posted in Flash, Flex

 

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

 

Zusätzliche Ressourcen in .air aufnehmen

20 Oct

Um in FlashDevelop zusätzliche Dateien in die .air Distribution aufzunehmen, genügt es, diese Dateien in den bin-Unterordner des Projekts zu kopieren. Der dort platzierte Inhalt steht nicht nur beim Ausführen von der Entwicklungsumgebung aus zur Verfügung, sondern wird auch in das .air-File kopiert und somit auch in den Anwendungsordner mit installiert. Das kann beispielsweise nützlich sein, wenn man Ressourcen in externe swfs auslagern und dynamisch zur Laufzeit laden will, um so etwa den Compiler zu entlasten.

 
No Comments

Posted in Air, Flash

 

Halloween-Gebäck

17 Oct

Zitronenkuchen in Kürbiskopfform

Ich habe mal wieder in der Küche experimentiert und einen Kuchen gestaltet. Saisongemäß ist es diesmal ein Kürbiskopf geworden. Die Grundlage ist eine gewöhnliche Backmischung für einen Zitronenkuchen. Diesen habe ich normal nach Packungsanleitung zubereitet und in einer Springform gebacken. Dabei ergab sich durch den aufgehenden Teig praktischer Weise schon eine nützliche Hügelform, die der beabsichtigen Endform schon nahe kam. Nach etwas Abkühlzeit habe ich den Kuchen dann in Form geschnitten und den groben Kürbis so modelliert. Augen und Mund sind ebenfalls herausgeschnitten.

Für die Färbung habe ich den Zuckerguß der Backmischung ledlich mit Lebensmittelfarben (gelb+rot) ergänzt und den Kuchen damit überzogen. Beim grünen Strunk habe ich nochmal etwas Zuckergruß angerührt, da die Packungsmischung ohnehin gerade so für den Kürbis gereicht hat.

Einen Tag später habe ich die Augen und Mund mit dunkler Kuvertüre ausgefüllt und den Teller mit einigen Schokoladenblättern verziert.

 
 

Einstellungen-Fenster – Feeds-Abschnitt

13 Oct

Wer sich wundert, wo der frühere “Feeds”-Button in den Firefox-Einstellungen hingekommen ist, findet hier die Antwort: Einstellungen-Fenster – Feeds-Abschnitt

Die Verknüpfung zwischen Feed und zu öffnender Anwendung wurde in die Liste der Anwendungen für die Behandlung diverser Dateitypen integriert. Dort gibt es nun auch den Eintrag “Web-Feed”.