Archiwum z Kwiecień, 2007

FlexFTP: ApolloImpl ;-)

środa, Kwiecień 25th, 2007

FlexFTP (draft)

Wiadomo, że sockety ssą. Dotknęło mnie to właśnie przy pisaniu biblioteki FTP do Apollo. Póki co traktuję to bardziej jako pilot project, niż coś do używania. Na początku pomyślałem sobie, że najłatwiej będzie wzorować się na jakiejś jawowej implementacji. Jednak wszystko co znalazłem było... Jawowe. Znaczy obsługa socketu/bufora sprowadzała się zwykle do:

JAVA:
  1. while ((bytesRead = input.read(buffer)) != -1)
  2. {
  3. output.write(buffer, 0, bytesRead);
  4. }
  5. output.flush();

co w przypadku flashowego modelu zdarzeń się nie sprawdzi.

Aktualnie wygląda to tak, że mamy klienta FTPClient i komendy FTPCommand i odpowiedzi serwera FTPResponse. Klient wysyła podstawowe zdarzenia FTPEvent.CONNECTED po podłączeniu, COMMAND po wysłaniu komendy i RESPONSE po otrzymaniu odpowiedzi. Na czas wysłania komendy, czy raczej serii operacji komenda-odpowiedź klient jest blokowany, żeby nie wbić się w kolejkę akcji. Wiadomo taki jest FTP. Wszystkie akcje powinny dziedziczyć po klasie FTPInvoker. Jej interfejs zapewnia początek wywołania execute(), obsługę odpowiedzi responseReceived() i sfinalizowanie bieżącej transakcji finalize().

Nie wykluczone, czy może na pewno ostatecznie wyglądać to będzie zupełnie inaczej. Bo już na dzień dzisiejszy nie podoba mi sie sposób tworzenia pasywnego połączenia i implementacja eftepowych akcji. Aktualnie klient podłącza się do serwera, listuje katalogi i zwraca ich zawartość jako tablicę obiektów FTPFile, ściąga pliki na lokalny dysk i wysyła. Z wysyłaniem wiadomo jak jest. Postępu poznać w stanie nie jesteśmy. Bo Adobe se odpuścił na socketach... Więc jeśli ktoś ma wolne łącze, lub wgrywa duuuży plik będzie sobie musiał poczekać na FTPEvent.UPLOAD.

JSFL w Adobe Flash CS3 == JavaScript 1.6

wtorek, Kwiecień 24th, 2007

Nic dziwnego, że JSFL w nowym Flashu lubi E4X, skoro został uaktualniony do wersji 1.6. Parz:
[instal]Adobe Flash CS3/en/Configuration/Third Party Source Code/JavaScript Interpreter/Notes.htm
Miło, chociaż jeszcze milej byłoby widzieć najnowszą wersję 1.7, która posiada parę fajnych bajerków jak iteratory. Użyteczne przy masowym rzezaniu plików FLA. Pewnie w kolejnym Flashu zobaczymy w końcu JS2.0 na Tamarinie.

Adob Ekstęszyn Menadżer

wtorek, Kwiecień 24th, 2007

Do ściągniecia jest już Adobe Extension Manager w wersji 1.8, potrzebny do zainstalowania Flex Component Kit for Flash CS3 o którym pisał już Michał. O samym zestawie komponentów rozpisywał się zatem już nie będę. To co jest ciekawe, to to, że AEM, łącznie z helpem jest w wersji polskiej. A raczej polskawej. Po otworzeniu helpa pierwsze co rzuciło mi się w oczy to: "Przeprowadź dokładne sprawdzanie swojego rozszerzenia" w rozdziale Korzystanie z programu Extension Manager / Pakowanie i wysyłanie rozszerzeń > Pakowanie rozszerzenia. Brzmi to chyba jeszcze bardziej drętwo niż "Extension Manager wyświetla tylko rozszerzenia, które zostały zainstalowane za pomocą programu Extension Manager".
Już boję się myśleć jak może wyglądać polski Flasz. A jeszcze bardziej: jego plik pomocy. Przypomina mi to fotoszopowskie "rozmyj gaussowsko", czy inne zmiękczanie. Niektóre rzeczy, jak cytaty, treść kultowych piosenek, czy programy komputerowe, nie powinne być nigdy tłumoczone.
A czy nie wystarczyło napisać: "Przeprowadź dokładny test stworzonego rozszerzenia"? Może ze mną coś nie tak, ale "swoje rozszerzenie" bardziej brzmi dla mnie jak "moje przyrodzenie". Aż strach pomyśleć jak odbierze to kobieta, czytając o "swoim rozszerzeniu".

flash.net.Socket::flush()

niedziela, Kwiecień 22nd, 2007

Jak nie urok to sraczka. Po sześciu godzinach, rozmowie z inou i mooską i przeczytaniu tego, stwierdziłem, że się poddaję. Wygląda na to, że nie ma żadnego sposobu na poznanie statusu bufora wyjściowego flashowego socketa. Dla bufora wejściowego, czyli danych nadchodzących mamy Socket::bytesAvailable, oraz zdarzenie ProgressEvent.SOCKET_DATA. Niestety w przeciwieństwie do informacyjnego rozpasania wejścia na wyjściu mamy biedne Socket::flush(). Żadnej informacji, że nasze dane już u dotarły do adresata (część bufora się wypróżniła ;>). Przy małej ilości danych to żaden ból, jeśli jednak w ten sposób chcemy wysłać bitmapę, czy plik i pokazać postęp to problem już jest poważny. Jeśli usługa nasłuchująca po drugiej stronie nie da nam odpowiedzi, że już wszystko zebrała, to możemy sobie czekać do usranej śmierci.

Próbowałem wszystkiego, łapania wyjątków, sprawdzania bieżącej pozycji czytanego ByteArray'a, nasłuchiwania  wszystkiego co się da i na drzewo nie ucieka. Nada. Nic...

JSFL lubi E4X

czwartek, Kwiecień 19th, 2007

Podczas gdy wszyscy zachwycają się Copy Motion as ActionScript 3.0 ja zachwycam się supportem E4X w JSFL. W końcu, bo nawet w ósemce nie było żadnego supportu XML (nie mówiąc o E4X). Oczywiście pomijam implementacje w JS, które można było i tu wykorzystać. Cała mechanika myku z kopiowaniem opiera się właśnie na 81kB JSFLowej bibliotece ([Adobe Flash CS3]\en\First Run\Javascript\MotionXML.jsfl), która namiętnie korzysta z dobrodziejstw E4X.

JavaScript:
  1. //JSFL:
  2. myX = new XML("<n1><n2 id="mali">1</n2><n2 id="boo">2</n2></n1>");
  3. alert(myX..n2..@id); //Output: maliboo