FemtoPlayer - mini free mp3 flash player

Potrzebowałem malutki mp3 player, który wyświetlał by jedynie ikonkę z przyciskiem play i odgrywał wskazany dźwięk mp3. Poszukiwania w googlu dały kilka rezultatów, ale każdy z nich albo był “za bardzo”, albo miał złą licencję. Zamiast tracić dalej czas napisałem te kilkanaście linijek kodu i stworzyłem swój własny FemtoPlayer - Femto to brzmi dumnie ;)

Parametry:

file = pathToMP3 //ścieżka do pliku mp3
autoplay = true|false //czy automatycznie odgrywać dźwięk po wczytaniu

Przykład użycia:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="20" height="25" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
<param name="FlashVars" value="file=test.mp3&amp;autoplay=true" />
<param name="src" value="FemtoPlayer.swf" />
<param name="wmode" value="transparent" />
<embed type="application/x-shockwave-flash" width="20" height="25" wmode="transparent" src="FemtoPlayer.swf" flashvars="file=test.mp3&amp;autoplay=true"></embed></object>

SWF do pobrania: download

Lata ‘90

Moja przygoda z programowaniem rozpoczęła się na początku lat 90, kiedy to istniała tzw. demoscena. Na owej scenie koderzy (programiści) w pocie czoła tworzyli tzw. dema czyli wg współczesnej nomenklatury programy multimedialne, obrazujące możliwości sprzętu, a przede wszystkim umiejętności tychże koderów. Ja sam, kodowałem wpierw na komputerze Commodore 64 z procesorem motorola 6502 oraz całkowitą pamięcią 64kB, a następnie na komputerach Amiga (500, 1200).

Ówczesne produkty demosceny, dzisiaj budzą albo niezrozumienie albo litość. Pamiętajmy jednak, że najlepsze komputery miały wtedy procesory z zegarem 4MHz i 1MB pamięci RAM (po rozszerzeniu), a sprzętowe wspomaganie 3D to był tylko sen wariata. Wszystkie te programy pisało się w assemblerze i optymalizowało dosłownie każdy cykl procesora. Wiele efektów powstawało w wyniku obchodzenia ograniczeń sprzętowych(SIC!) - czyli de facto wykorzystywania sprzętu w sposób, który nie został przewidziany przez jego projektantów. To były czasy!

getURL w ActionScript 3

Dobrze znanej z ActionScript2 metody getURL nie znajdziemy w wersji 3 języka. Zamiast niej możemy posłużyć się metodą

flash.net.navigateToURL(request:URLRequest, window:String):void

Rzucanie cieni w Papervision3D

Andy Zupko, współautor Papervision3D, napisał klasę dzięki której dostajemy możliwość rzucania cieni przez dowolne obiekty na naszej scenie 3D. Muszę przyznać, że działa to znakomicie - oraz dużo szybciej od pierwszej wersji, którą zaprezentował w ubiegłym roku. Klasa ShadowCaster nie została na razie dodana do pakietu z Papervision3D, ale można pobrać jej źródło bezpośrednio ze strony Andiego - tam też znajdziecie demo i przykład wykorzystania.

Pragmatyczny programista

Pragmatyczny programista - od czeladnika do mistrza - to obowiązkowa pozycja każdego programisty. Autorzy, Andrew Hunt i David Thomas, w przyjaznej formie przekazują zdrowe, a jednocześnie nadwyraz skuteczne podejście do programowania. W książce, oprócz powszechnie znanym pojęć jak hermetyczność czy programowanie asertywne, poznamy również takie jak zasada KISS (Keep It Simple, Stupid) czy też sposób wykorzystania Pocisków Smugowych.

Pomimo tego, że książkę przeczytałem już spory czas temu, wiem że nadal mogę ją śmiało polecać programistom na dowolnym etapie ich rozwoju :). Naprawdę - jako jedna z nielicznych trafi ona do tych początkujących jak i całkiem zaawansowanych, a język jakim jest napisana sprawi, że większość przeczyta ją od deski do deski z największą przyjemnością.

Pragmatyczny programista, Wydawnictwo Naukowo Techniczne, 2002.

Wywoływanie metod pomiędzy plikami SWF

Problem: Plik swf utworzony w actionscript2 będzie osadzony w innym pliku swf utworzonym w actionscript3. W jaki sposób z jednego pliku swf wywołać metodę w drugim?

Rozwiązaniem jest użycie klasy LocalConnection. Oto przykładowy kod:

embeded.swf (actionscript 2):

on(release) {
	var localConnection:LocalConnection = new LocalConnection();
	localConnection.send("holderConnection", "myMethod");
}

holder.swf (actionscript 3):

import flash.net.LocalConnection;
 
public class Holder
{
    public function Holder()
    {
        var localConnection:LocalConnection = new LocalConnection();
	localConnection.client = this;
	localConnection.connect("holderConnection");
    }
 
    public function myMethod():void
    {
        trace('metoda myMethod została wywołana');
    }
}

Należy zwrócić uwagę, aby metody które chcemy wywołać były zdefiniowane jako metody publiczne.

Co dalej z PHP

Rozwój PHP zatrzymał się w miejscu. Wersja 5 języka stanęła okrakiem między językami silnie typowanymi, a językami dynamicznymi, wprowadzając na dodatek kilka swoich udziwnień i ciągnąc bagaż wad z poprzednich wersji.

Wydawało by się, że skoro model języka wyraźnie bazuje na Javie (i C++), a Zend wydając wersję 5 powiedział “A”, to powinien powiedzieć “B”, i dokończyć kilka spraw:

  • Wprowadzić możliwość pełnego typowania parametrów - obecnie parametry mogą być typowane, tylko jeżeli typem jest klasa albo array.
  • Umożliwić tworzenie setterów i getterów - magiczne metody nie są wystarczającym rozwiązaniem, gdyż nie komunikują jasno jakie właściwości są obsługiwane.
  • Wprowadzić przeciążanie metod.

Poza tym należałoby się odciąć kreską od poprzednich wersji lub przynajmniej posprzątać, to co posprzątane nie zostało, a więc przede wszystkim:

  • niespójne nazewnictwo funkcji i sposób przekazywania parametrów
  • rozdzielić metody na przestrzenie nazw (podobno w PHP6)
  • wprowadzić pełną obsługę dla UTF

Niestety, PHP 6 nad którym prace podobno trwają od dwóch lat, przyniesie jedynie kosmetyczne poprawki. A więc język ten pozostanie językiem do niczego, cieszącym się popularnością jedynie z siły rozpędu.

Linki:

Lista “todo” dla PHP 6
Statystyki używalności PHP - od trzech lat popularność języka nie rośnie

DateTimePicker komponent

Takie coś kiedyś napisałem (hen dawno temu), a teraz na powrót to odkryłem:

(aby zobaczyć prawidłowo funkcjonujące demo otwórz skrypt w nowym oknie)

Jest to prosty skrypt wyświetlający kalendarzyk, i wstawiający wybraną przez użytkownika datę do pola tekstowego. Wywołanie skryptu jest banalne:

<input id="DateShow" style="width: 80px;" maxlength="10" name="DateShow" type="text" />
<img style="cursor:pointer;" onclick="DateTimePicker.Show(this,'DateShow');" src="calendar.gif" alt="" />

W drugim parametrze przekazujemy id pola tekstowego, do którego chcemy wstawić wybraną przez użytkownika datę. Paczuszkę ze skryptem, stylami i przykładowym użyciem można pobrać tutaj. Jak zajrzycie do kodu źródłowego, to odkryjecie wiele dodatkowych możliwości (ok, zdradzę trochę: można zmienić język w jakim kalendarz jest wyświetlany, albo format zwracanej daty).

Nie gadaj, rób swoje

Zainspirowany pewny młodym startupem (hmm, czyżby pleonazm?) ze Szczecina - a precyzyjniej słowami jego założyciela - w jeden wieczór uruchomiłem w internecie nowy sewis.

Marek Rafałowicz napisał:

Czy pomysł ma taki potencjał, by warto było go stworzyć? No cóż, uznałem, że [...] stworzenie takiej strony jest tańsze niż zastanawianie się nad tym czy warto.

Tak bardzo mnie tym natchnął, że również nie zastanawiając się wiele wykonałem i uruchomiłem niewielki serwis. No cóż, faktyczne koszty jakie poniosłem to kilka godzin pracy oraz 1zł+VAT za rejestrację domeny.

Że co, że takie serwisy już istnieją? No ba, ale mój ma fajną domenę ;)

Postrzelaj sobie do jaguara

Wczesną wiosną, w silnym zespole Epeironu, zrealizowaliśmy kolejną mega-produkcję - polowanie na drapieżnika ;)

A to wszystko z okazji promocji, tfuu.. z okazji narodzin dwóch mały jaguarów w warszawskim zoo. :)

Postrzelać (z aparatu fotograficznego) można tutaj.