czwartek, 16 sierpnia 2007

Syntezatory mowy czy telefonia VoIP

Od pewnego czasu śledzę ze zdziwieniem rozwój usług internetowych opartych na komunikacji dźwiękowej pomiędzy użytkownikami.

1 kierunek: telofonia VOIP - pewna firma Ribbit zaproponowała programistom rozwój swojego komponentu RibbitPhone Component

2 kierunek to: obsługa generowanego dźwięku po stronie serwera (przykład po japońsku) na blogu pewnej pięknej japońskiej programistki Yo-suke (jej zdjęcie)

3 kierunek to napisanie własnego syntezatora mowy na przykładzie istniejących bibliotek
do obsługi dźwięku Tymi bibliotekami są syntezator Andre Michelle (kod źródłowy biblioteki BitBoy wraz z przykładami) czy symulator chwytów gitarowych czy bibliotekę PCMAudio.
Dla programistów HaXe tez jest fajne demo oscylatora. Warto zobaczyć wpisy Andre Michelle czy o generowaniu dźwięku, przykład jest też tutaj na japońskim blogu

Interesująco zaczyna być prawda?

poniedziałek, 13 sierpnia 2007

Kolekcja bibliotek Action Script 3

Od pewnego czasu w internecie chodzi po blogach lista bibliotek ActionScript 3

Możemy spróbować dokonać pewnej klasyfikacji

Frameworki architektoniczne AS3
Cairngorm
PureMVC
Guasax
Riavawe
Flest
currents

VEGAS
Indigo

ARP - framework tworzony przez Aral Balkan. Warto przeczytać wpis na jego blogu o stosowaniu tego frameworka pod Flex 2 (na razie jego rozwój jest wstrzymany co można stwierdzić o ilości postów na liście mailingowej)
lowra - Low-level Rework on Actionscript 3.0 - francuski framework tworzony przez Francis Bourre (bazuje na IoC) przy wsparciu firmy Prizee Warto przejrzeć slajdy i materiał video z konferencji w Toronto o tym frameworku.

Frameworki GUI
ASWing
uicomponents-as3 - Lightweight AS3 UI component library

2D
ImageProcessing - biblioteka filtrów graficznych
Springgraph - biblioteka do wizualizacji grafów
Distortion Effect - iluzja trójwymiarowego przejścia
Singularity
Draw Primitive
Fraktal


3D
Papervision 3D
Sandy
Away3D -
ASCollada -

Animacja
asinmotion - Animation Library for AS3
Tweener - Full featured animation library

Fizyka
APE ActionScript Physics Engine


API do serwisów Web 2.0
as3awss3lib - AS3.0 API dla Amazon S3 - usługi składowania danych dla e-biznesu napisana przez Christian Canrtell
mappr - AS3 API dla Mappr usługi zapewniającej geolokalizację grafiki na Flickr
youtube - AS3 API dla YouTube pozwalające na wyszukiwanie filmów na YouTube.
flickr - AS3 API dla Flickr serwisu internetowego pozwalającego na udostępnianie zdjęć przez internet - można przeczytać dokumentacje API z korzystania usług na Flickr
eBay - AS3 API dla eBay serwisu aukcyjnego warto przyjrzeć się ofercie dla programistów do korzystania z usług słynnego serwisu aukcyjnego.
facebook - AS3 API dla Facebook jednego z najbardziej popularnych serwisów społecznościowych Ten serwis ma bogatą platformę programistyczną umożliwiając w różny sposób (bazując na REST, FQL czy FBML) wykorzystanie potencjału takiego serwisu
last.fm AS3 API dla Last.fm pozwalającego na wyszukiwanie muzyki
Salesforce Flex Toolkit - AS3 API narzędzie do tworzenia własnych sklepów online na platformie Salesforce
Odeo AS3 API - narzędzie do wyszukiwania i odsłuchiwania podcastów z Odeo
Yahoo! Answers AS3 API - narzędzie do obsługi zapytań do Yahoo! Answers można obejrzeć przykład jako przykład dawania odpowiedzi na jakieś zagadnienia, jest to serwis w którym ludzie dzielą się wiedzą udzielając odpowiedzi na pytania
Yahoo! Weather AS3 API narzędzie do obsługi zapytań do Yahoo! Weather gdzie można otrzymać informację o pogodzie na dowolnym miejscu na Ziemi Można zobaczyć przykład wykorzystania (uwzględniając kody pocztowe USA) tej biblioteki wraz z wyjaśnieniem
Yahoo! Search AS3 API
Yahoo! Upcoming.org AS3 API
Twitter AS3 API
Digg AS3 API
Box.net AS3 API - http://www.box.net/api/

Mapy
MapQuest
Yahoo! Maps AS3 Communication Kit
Modest Maps http://www.modestmaps.com

Games
as3ds
AS3 Data Structures For Game Developers - biblioteki napisane przez Michael Baczynski który, prowadzi interesującego bloga poświęconego problemom algorytmicznym w Action Script 3
mecheye-as3-libraries - biblioteka napisana dla programistów gier w Flash CS3 udostępniona przez Mecheye Independent Studio
as3card - biblioteka napisana przez Darron Schall do programowania gier karcianych, więcej o tej bibliotece informacji można przeczytać w wpisie na jego blogu
hexagon - zbiór bibliotek dla programistów gier, twórca Sascha Balkau ma bloga poświęconego tej bibliotece

Utils
corelib - MD5 hashing, JSON serialization, advanced string and date parsing,

XML Syndication Library - biblioteka od programistów Adobe umożliwiająca wykorzystanie i pasowanie dokumentów Atom czy wersji RSS od blogów
AS3Crypto - ActionScript 3 Cryptography Library - biblioteka autorstwa Metal Hurlant, która zapewnia wykorzystanie algorytmów kryptograficznych w aplikacjach RIA takich jak RSA, AES, DES, 3DES, BlowFish, XTEA, RC4 czy algorytmów haszujących MD2, MD5, SHA-1, SHA-224, SHA-256 Można zobaczyć demo wraz z kodem źródłowym przedstawiające możliwości tej biblioteki.
FZip - Actionscript 3 class library to load standard ZIP archives and extract/decompress contained files.
XIFF - XMPP client library
flexircclient - klient IRCa
WiiFlash
asSQL Connect from ActionScript directly to mySQL
as3soundeditorlib Actionscript 3.0 library for sound editing

Prana
framework z IoC
di-as3 depedency injection


as3-rpclib - boblioteka do wywoływania procedur zdalnie: AMF0, XML-RPC



Debug
Alcon
Xray
With Firebug http://www.marcosweskamp.com/blog/docs/Console.as
http://osflash.org/luminicbox.log
http://osflash.org/debugit
http://osflash.org/printrdebugger
http://www.senocular.com/flash/actionscript.php?file=ActionScript_3.0/com/senocular/utils/Output.as

Testy jednostkowe
FlexUnit - is a unit testing framework for Flex and ActionScript 3.0 applications
asunit
Sprouts



Komponenty
FlexLib zbiór kontrolek i rozbudowanych komponentów: AdvancedForm, Base64Image, EnhancedButtonSkin, CanvasButton, ConvertibleTreeList, Draggable Slider, Fire, Highlighter, HorizontalAxisDataSelector ImageMap, PromptingTextInput, Scrollable Menu Controls, SuperTabNavigator, Alternative Scrolling Canvases, Horizontal Accordion, TreeGrid, FlowBox, Docking ToolBar, Flex Scheduling Framework

Kompomenty
Animated DragTile Component 0.1
Fisheye Component v0.3
FlexBook
Flickr Roulette
Interactive Calendar
IPE Controls
Landscape Zoomer
RandomWalk component
DisplayShelf Component

Biblioteki z ByteArray.org
Raster
is an open source bitmap drawing class.
MouseGesture is an open source class to perform some Mouse Gesture recognition.
Live JPEG Encoder Class to capture any content into a JPEG file (JPEG Encoding corelib class).
PageFlip is simple low-level class to perform some pageflip drawing. It's supports the 4 corners flip and vertical / horizontal mode.
SMTP Mailer
lets you send HTML e-mails with attached files.
AS3 GIFAnimation Encoder is a GIF encoding class to generate animated GIF from Flash.
AS3 GIFPlayer
is a GIFPlayer class to play animated GIF in AS3.
ASZip
lets you generate Zip files from scratch with AS3.

Biblioteki AS3
od Bena Stucki`ego
com.fusiox.media.ID3Reader
com.fusiox.media.ID3Stream
com.fusiox.skins.CSS3Box
com.fusiox.styles.CSSManager
com.fusiox.ui.Bitmap3D
com.fusiox.ui.Image
com.fusiox.ui.Pixel3D
com.fusiox.ui.Reflection
com.fusiox.ui.Scroller
com.fusiox.ui.Visualization

Komponenty od Alessandro Crugnola
CheckBox 3 state

Advanced ColorPicker
Tree CheckBox

ResizeTool
Labelled Box


Co jeszcze by dopisać?

Flash Remoting
WebOrb
AMFPHP
Fluorine
Saaser
http://as3lrf.riaforge.org/

Dynamiczne tworzenie instancji

Pracując nad przeglądarką multimediów zauważyłem że trzeba wywoływać dynamicznie klasy i ich instancje. Pomyślałem że trzeba całkiem odejść od myślenia i pisania tradycyjnego kodu ActionScript 1.0 czy 2.0. W tym momencie trafiłem na fajny wpis na blogu Kelly Brown z jej przykładem

import flash.utils.getDefinitionByName;

private function addButton():void{
var className:String="mx.controls.Button";
var ClassReference:Class = getDefinitionByName(className) as Class;
var instance:Object = new ClassReference();

instance.label="Test"
this.addChild(DisplayObject(instance));
}


Jest więcej pisania kodu, ale kod jest bardziej elastyczny.
Podobnie rzecz sie ma z inspekcja kodu o czym pisze Eric Cancil
jego introspekcją czy refleksją za pomocą takiego kodu

import flash.utils.describeType;
var simpleInstance = new SimpleClass();
trace(describeType(simpleInstance));


Czasami też przydają się dynamiczne klasy. Są to klasy do których można dodawać nowe pola i metody po utworzeniu ich instancji.

dynamic class Person {
var name:String;
}
Person p= new Person();
p.name=”Joe”;
p.age=25;
p.printMe = function () {
trace (p.name, p.age);
}
p.printMe(); // Joe 25

Nie polecam jednak częstego stosowania dynamicznych klas. Są one bardzo mało wydajne.

Jak zrobić identyczny klon obiektu zamiast jego na nowo wywoływania ? Nie obejdzie sie z jego "zripowaniem" jak to pokazał niko na swoim blogu

piątek, 10 sierpnia 2007

Zabezpieczenia formularzy MXML

Często może być taka sytuacja, że trzeba zabezpieczyć formularz MXML (np: kalkulator kredytowy) przed nieautoryzowanym wykorzystaniem na innych serwisach internetowych. W tej sytuacji wystarczy sprawdzić domenę z której formularz MXML korzysta

Oto kod:

import mx.utils.URLUtil;
import mx.controls.Alert;
private function init():void
{
var name:String = URLUtil.getServerName(Application.application.loaderInfo.url);
if(name != "www.jakisbank.pl")
{
Alert.show("Proszę skorzystać z kalkulatora kredytowego na stronie Banku");
}
}


Innym sposobem ochrony przed nieuczciwymi klientami jest zamieszczenie "bomb czasowych" . Polega to na tym, że klient jak zechce używać aplikacji RIA z formularzem MXML po upływie jakiegoś czasu to wprowadzamy jakieś utrudnienie dla użytkowników. A to jest bardzo proste:

private function initTimer():void
{
var now:Date = new Date();
var end:Date = new Date(2007, 6, 30);
if (end < now)
{
sabotage();
}
}


To są najprostsze zabezpieczenia. Ale dzięki możliwościom ActionScript 3 i samego Flash Playera 9 mamy możliwość tworzenia bardziej zaawansowanych sposobów zabezpieczeń przy pomocy szyfrowania i kryptografii. A także bardziej zmyślnych sposobów dostarczania treści i multimediów w zależności od ich jakości.

poniedziałek, 6 sierpnia 2007

ActionScript językiem robotyki?

Możecie obejrzeć jak ActionScript 3 wkracza tam gdzie nikt się nie spodziewał - w komunikację pomiędzy urządzeniami. W Japonii jak wiadomo robotyka stoi na bardzo wysokim poziomie. Do tego stopnia że nawet rozwinął się ruch OpenSource w wykorzystywaniu pewnych rozwiązań na poziomie elektroniki. Otóż powstała platforma sprzętowa - programistyczna dzięki której można zacząć programować swoje układy scalone w ActionScript. Niewiarygodnie? No chyba że obejrzy sie stronę internetową platformy Gainer Można się zapoznać ze tutorialem a szczególnie z wykorzystaniem ActionScript 2 i Flash 8 Jednak takie zastosowanie może wyglądać bardzo intrygująco. Na tej stronie pokazano że można sobie zaprogramować stół. Jeden programista japoński nawet napisał bibliotekę ActionScript 3 do Gainera.



Oto przykład jak to może wyglądać w praktyce. Na tym japońskim blogu możemy znaleźć informacje i zdjęcia Gainera.




Na tym filmie możemy zobaczyć jak można sterować zabawką z poziomu aplikacji napisanej w ActionScripcie.

Podobnie można dojść jeżeli chodzi o używanie konsoli Wii do sterowania komunikacją z komputerem a szczególnie w grach wieloosobowych



Odo serwis który ma do zaoferowania gry flash pod Wii

Inną koncepcję maja twórcy Chumby tworząc zabawkę z Linuksem którego interfejs graficzny jest w całości plikiem SWF



Czy też ten przykład



Ciekawie zaczyna być w świecie programistów ActionScript

czwartek, 2 sierpnia 2007

Przeglądarka multimediów

Ostatnio zajmuję sie pisaniem odtwarzaczy mp3 i jak video w ActionScript 3 dla serwisu społecznościowego weblisko.com. W tym czasie firma Adobe wypuściła Flash Ajax Video Compoment Koncepcja mi się spodobała. Pomyślałem, że wśród rozwiązań Open Source brakuje rozwiązania, które byłoby podobne do Lightboxa.js ale dawało możliwość odtwarzania plików video, dźwiękowych (koniecznie z jakaś wizualizacją), plików SWF (ze skalowaniem) także i plików graficznych. W przyszłości dodałbym jeszcze obsługę plików obsługiwanych przez Papervision3D. Zastanawiam się, które rozwiązanie wybrać oparte na FlashVars czy na Flex-Ajax Bridge. Do funkcjonalności należałoby też zmienianie wyglądu takiej przeglądarki multimediów za pomocą skompilowanych plików CSS. Całość będzie dostępna na Google Code na licencji GPL. Na razie Rafał Nagrodzki nick:burzaone zaoferował mi pomoc w pisaniu wizualizacji do plików audio. Czekam na propozycje współpracy w pisaniu takiej przeglądarki multimedialnej. W komentarzach proszę wpisywać propozycje nazw dla takiej przeglądarki.