Trafiłem ostatnio na dość dziwny problem. Potrzebowałem mianowicie wysłać z poziomu Flexa dane formularza, które po stronie serwera zostałyby odebrane przez PHP (lub inny język server-side).
Jednak cały kłopot polegał na tym, że:
dane te miały wykorzystać istniejący już kod obsługiwany przez formularz w HTML’u – czyli niejako miałem się podszyć pod zwykłą stronę www, nie wykorzystując żadnych udogodnień typu AMF, Webservice czy RemoteObject,
chciałem wysłać jednocześnie dane tekstowe (np. dane rejestracyjne) oraz binarne (np. obrazki JPG), bez limitu ilości,
obrazki nie były pobierane z dysku użytkownika przez FileReference.browse, ale tworzone w locie jako zrzuty komponentów przez ImageSnapshot i trzymane w pamięci w zmiennych typu ByteArray.
Jedyne co udało mi się znaleźć to artykuł na blogu Neer’a Friedman’a i jego projekt na Google Code. Był to dobry początek do zmian…
BTW: niejaki Mike Stead, którego komentarz widnieje pod wpisem Neer’a też zajmował się tym problemem i zdaje się, że nawet go jakoś elegancko rozwiązał, jednak jego stronka padła kompletnie i nie ma jej nawet w Google Cache…
Wywaliłem kod odpowiedzialny za używanie Socketów zamieniając go na zwykłego URLLoader’a oraz troche zrefaktoryzowałem kod (uporzadkowałem). Tym sposobem pojawiła się biblioteka MultipartRequestLoader
private function init():void { loader = new MultipartRequestLoader('http://flex.imrahil.com/work/multipart_loader/upload.php'); var variables:MultipartVariables = new MultipartVariables(); var myByteArray:ByteArray = new ByteArray();
// we will create a fake file content here, you should replace this with the binary data you want to upload for(var i:int=0; i<100;i++) { myByteArray.writeUTFBytes("123by\nAR\r\nRA\x65\x0156"); }
Adobe i Facebook ogłosiły dzisiaj, że łączą wysiłki w celu ułatwienia deweloperom Flash Platform pracy nad aplikacjami działającymi na Facebook Platform. W tym celu opublikowana została oficjalna biblioteka AS3 umożliwiająca korzystanie z API Facebook’a z poziomu aplikacji Flex/Flash. Pojawił się także specjalny dział na stronach Adobe Devnet poświęcony temu zagadnieniu.
Serwis InsideRIA.com będzie od przyszłego tygodnia publikował tutoriale pokazujące w jaki sposób wykorzystać w praktyce nowe facebook’owe AS3 API.
Edit: Ryan Stewart opublikował niesamowite demo pokazujące możliwości Facebook API oraz Adobe Flash Collaboration Services (AFCS – dawniej Cocomo)
Alchemy to projekt mający na celu umożliwienie kompilowania kodu C lub C++ do postaci AVM2 (ActionScript Virtual Machine), czyli mówiąc wprost dający możliwość skompilowania kodu do SWF czy SWC i uruchomienia go w Flash Playerze 10 lub AIR 1.5.
Przykładem wykorzystania Alchemy mogą być portowane z C/C++ kodeki audio OggVorbis czy biblioteki silnego szyfrowania (aktualnie niedostępne w AS3).
Wyśmienitym przykładem jest także sportowany do Flash Platform i śmigający bezproblemowo Doom 1.
Całość jest aktualnie dostępna do ściągnięcia za darmo na Adobe Labs .
Trick godny zapamiętania. Pomocny w momentach gdy podczas tworzenia serii nowych obiektów, oprócz dodania do nadrzędnego komponentu, potrzebujemy mieć do nich wskaźniki w podręcznej tablicy.
[source="as3"]
var newBtn:Button = new Button();
var childsArray:Array = new Array();
Poniżej mały, naprędce skompilowany przykład (źródło pod prawym przyciskiem myszy)
This movie requires Flash Player 9
Niestety nie udało mi się odpalić tej biblioteki w aplikacji AIR. Wypluwało dziwny błąd związany z sandboxem…
Edit:
znany błąd. można na niego zagłosować na gmaps-api-issues.
Ogólnie całość sprawia wrażenie trochę niedopracowanego. Czasem sypie błędami, coś się nie wczytuje, etc
UMap
Jakby tego było mało, chwilę później dostałem informację mailem, że konkurencja z AFComponents nie śpi i nie marnuje czasu, tylko pracuje nad kolejnymi wersjami swojej obsługi map Google (jak też i innych), czyli UMap w najnowszej wersji 0.9.1 – showcase na umapper.com
Edit:
Wygląda na to, że Panowie z Google i Panowie z AFComponent jednak się lubią. Wskazuje na to przykład na oficjalnym blogu Google Maps.
Google App Engine to testowa i darmowa (na dzień dzisiejszy) oferta hostingowa udostępniona przez Google dająca możliwość umieszczania aplikacji pisanych w Pythonie i korzystających z tej samej infrastruktury co wyszukiwarka Google. Parametry to: max 3 aplikacje po maksimum 500MB trzymanych w bazie BigTable, 5 milionów odsłon i 10TB transferu miesięcznie. Umożliwiony jest dostęp do usług Google takich jak: GMail, Google Accounts i innych.
PyAMF to kompatybilna z Flash Playerem implementacja protokołu AMF (Action Message Format) stworzona w Pythonie. Jest to binarny protokół służący wymiany danych pomiędzy aplikacją Flash/Flex i serwerem za pomocą zdalnego wywoływania procedur (RPC).
Wywołania mogą być przesyłane poprzez protokół HTTP/HTTPS lub też poprzez RTMP/RTMPS. Dzięki serializacji obiektów do postaci binarnej zwiększa się wydajność wywołań co pozwala wczytywać dane 10 razy szybciej niż gdyby działo się to za pomocą tekstowych formatów takich jak XML czy SOAP. Porównanie wydajności można przeprowadzić na stronie Jamesa Warda.
Przykłady zastosowania PyAMF dostępne są na stronie projektu, a ja polecam jedno z ciekawszych rozwiązań, czyli PyAMF Python Shell Demo.