11/11/2009 - autor: riasol
zmodyfikowany przykład z dokumentacji php. Oryginalny kod na windows nie pokazywał w której linii/kolumnie jest błąd – problem z końcami linii
public function validateXml($inStr){
libxml_use_internal_errors(true);
$inStr=preg_replace("/\r/","\n",$inStr);
$doc = simplexml_load_string($inStr);
$xml = split("\n", $inStr);
$ret=false;
if (!$doc) {
$ret='';
$errors = libxml_get_errors();
foreach ($errors as $error) {
$ret.= $this->formatXmlError($error, $xml);
}
libxml_clear_errors();
}
return $ret;
}
private function formatXmlError($error, $xml)
{
$return = $xml[$error->line - 1] . "\n";
$return .= str_repeat('-', $error->column) . "^\n";
switch ($error->level) {
case LIBXML_ERR_WARNING:
$return .= “Warning, code $error->code: “;
break;
case LIBXML_ERR_ERROR:
$return .= “Error, code $error->code: “;
break;
case LIBXML_ERR_FATAL:
$return .= “Fatal Error, code $error->code: “;
break;
}
$return .= trim($error->message) .
“\n Line: $error->line” .
“\n Column: $error->column”;
if ($error->file) {
$return .= “\n File: $error->file”;
}
return “$return\n”.str_repeat(‘.’, 40).”\n\n”;
}
Napisane w 1 | Komentarze są wyłączone
21/10/2009 - autor: riasol
package flashprolib.fix {
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.TimerEvent;
import flash.utils.Timer;
/**
* Poprawka bedu występującego w iexpore 8: stage.stageWidth ( stage.stageHeight ) ma wartość 0
* przy korzystaniu z swf zapisanego w cache
*/
public class IEStage extends Sprite {
private var handle:Function
private var tmr:Timer;
/**
* @param container DisplayObjectContainer do którego dołączony zostanie fix
* @param method Function metoda która zostanie wywołana po zaistnieniu wartości stageWidth>0
* Using:
* var fix:IEStage=new IEStage(this,startDisplayObejcts)
*/
function IEStage(container:DisplayObjectContainer, method:Function) {
handle=method
container.addChild(this)
tmr=new Timer(20)
tmr.addEventListener(TimerEvent.TIMER, testStageSize)
tmr.start()
testStageSize()//wywołanie, które zadziała dla browser != ie8, żeby nie było opóźnień
}
private function testStageSize(e:TimerEvent=null):void {
if(stage.stageWidth > 0 && stage.stageHeight > 0) {
tmr.removeEventListener(TimerEvent.TIMER, testStageSize)
handle.apply(parent)
parent.removeChild(this)
}
}
}
}
Napisane w actionscript3 | Komentarze są wyłączone
18/10/2009 - autor: riasol
Kroki niezbędne do kompilacji projektu
- We FLEX_SDK_HOME/bin: copylocale.exe en_US pl_PL
- Zakładając standardowy projekt flexbuildera, *.properties w katalogu src/locale/pl_PL. Parametry mxmlx -source-path+=${workspace}/${ant.project.name}/src/locale/{locale} -locale pl_PL lub -locale=en_US,pl_PL
Napisane w flex | Komentarze są wyłączone
24/07/2009 - autor: riasol
Frustrujący komunikat flexbuildera. Powodem był forma zapisu opcji w .actionScriptProperties
winno być -target-player=10 zamiast -target-player 10 .
Napisane w flex | Komentarze są wyłączone
02/07/2009 - autor: riasol
removed before created ;)
container generuje zdarzenia Event.REMOVED_FROM_STAGE w trakcie tworzenia, prawdopodobnie przy sprawdzaniu scrollbars. Tak więc nie wolno w mxml ustawić chandlerów creationComplete i removedFromStage gdyż drugi wywoła się wcześniej, można np. w as w chandlerze creationComplete dodać manualnie obsługę Event.REMOVED_FROM_STAGE
ref: http://jonathanbranam.net/book/export/html/1
Ogólne rozwiązanie może wynikać z przypadków uzycia obsługi _REMOVED_FROM_STAGE – zazwyczaj to czyszczenie pmięcie przy usuwaniu elementu z widzianych elementów. Można więc zastosowac algorytm, że przed prawdziwym usunięciem ustawia się z zewnątrz flage i tylko wówczas w ciele metody obsługi zdarzenia wykona się blok kodu. Dla ModuleLoader bedzie to taki pseudokod:
//loader jest instancją ModuleLoader, BaseModule to klasa rozszerzająca Module
if(loader.child is BaseModule){
BaseModule(loader.child).unloading=true
}
//w obsłudze REMOVED_FROM_STAGE w klasie rozszerzającej BaseModule
if(unloading){//wykonaj blok
}
Napisane w actionscript3, flex | Komentarze są wyłączone
02/07/2009 - autor: riasol
- Podwójna instancja obiektu na timeline w jedenej klatce może spowodować że w kolejnej klatce nie można uzyskać odniesienia do obiektu o takiej samej nazwie.
Napisane w actionscript3 | Zostaw Komentarz »
09/06/2009 - autor: riasol

Model 3d w fp
punkt zanikania jest ustawiany raz – przy starcie, przy zmianach rozmiaru filmu trzeba go ekstra ustawiać
root.transform.perspectiveProjection.projectionCenter=new Point(stage.stageWidth/2,stage.stageHeight/2);
flexbuilder3 kompiluje przy użyciu flex sdk4.0 beta
tester możliwości 3d
Napisane w 3d | Komentarze są wyłączone
02/06/2009 - autor: riasol
Dla testu postanowiłem zainstalować flashplayer na ubuntu. Nie znalazłszy pakietu pobrałem archimum z adobe i skopiowałem bibliotekę *.so do /usr/lib/flashplayer-installer
Napisane w flash | Komentarze są wyłączone
23/05/2009 - autor: riasol
Można więcej w actionscript. Zamiast pisać równolegele w javascript możliwe jest stworzenie kodu js z wnętrza swf. np.
if(ExternalInterface.available) {
ExternalInterface.call('document.insertScript=function(){window._getTitle=function(){' +
'return document.title;' +
'};}')
}
Najważniejsze jest wywołanie ..document.insertScript… – jest to używcie metody, która tworzy nową metodę w DOM oszadzającego dokumentu. Sprawdzone we flex
Napisane w actionscript3 | Komentarze są wyłączone
19/05/2009 - autor: riasol
Kolejny raz problem z swf który lezy w cache proxy. Mam pomysł na globalne rozwiązanie, może znajdę czas by go zrealizować. Pomysł: zakładam że html osadzający, czy js, czy statyczny nie będzie cacheowany.
- Wstawiam w kod html znacznik cache,
- w pliku swf wkoplilowuję zmienną równą znacznikowi cache. Wkopilowanie jest proste jeśli to flex sdk, dla swf typu baner kompilowany przez grafika musi to być zmiana kodu as, może jslt (ale chyba nie bo nie ma tam generowania zdarzenie np. onsave)
- kod (w as3, 2 może nawet 1) porównuje i jeśli różne to komunikuje się z js który jeszcze raz wygeneruje kod osadzający ze zmiennymi dodanymi do ścieżki swf ( .swf?v123 ). Musiałby tu być znacznik z zapisem do LocalSharedObject żeby ograniczyć możliwość wystąpienie wielokrotnego ładowania
Na serwerze testowym chyba najprościej użyć mod_header w apache
LoadModule headers_module modules/mod_headers.so
<FilesMatch “\.swf$”>
Header set Cache-Control no-store
</FilesMatch>
Napisane w actionscript3, flex, swf | Zostaw Komentarz »