Jun 16

Biasanya, frame rate benar-benar merepotkan bila di Flex. Ada banyak alasan untuk berpendapat seperti itu. Terutama bila dalam membuat sebuah SWF yang mempunyai banyak frame. Flash sudah tentu lebih baik dalam menghasilkan SWF yang tahu bagaimana cara menangani preload dari timeline dengan frame yang banyak, demikian juga dalam menangani playback-nya. Karena Flash lebih baik dalam membuat SWF yang mempunyai content berupa animasi.

Sebaliknya urusan animasi di Flex tidak akan semudah itu, pertama dalam proses pembuatannya tidak dikenal konsep timeline, kemudian dalam playback-nya, akan di-eksekusi “lebih lambat”.
Karena, kita terdogma menerapkan sebuah “state” aplikasi/animasi di Flash berdasarkan frame (frame state navigation) dengan gotoAndStop() atau gotoAndPlay(), atau dengan mengatur visible/ alpha transparansi dari MovieClip.

Tidak demikian dengan Flex, karena Flex mengatur “state” dengan menggunakan DisplayList (Flash Player 9 DisplayList).
DisplayList memungkinkan anda mempunyai sebuah Sprite/MovieClip yang exist, tapi belum di-render di stage. Jadi bila pada animasi yang mempunyai banyak frame di timeline-nya, maka SWF hasil dari Flash akan melakukan preload asset-asset yang akan dimainkan terlebih dahulu. Sedangkan SWF hasil dari Flex tidak menerapkan proses preload seperti itu, sehingga animasi akan dijalankan lebih lambat.

Urusan “state” dalam SWF penting dalam interaksi dengan user, baik untuk navigasi maupun “application state” dan animasi. Di Flash kita terbiasa mengatur sebuah MovieClip dengan visible property ke false, yang artinya MovieClip sudah berada ditempatnya di stage, hanya saja belum terlihat, dan kemudian membuat visible menjadi true pada saat yang diperlukan. Sedangkan pada Flex terdapat mekanisme yang lebih mendasar dalam mengatur state. Pada banyak UI Component di framework Flex mengatur “state” dengan “add” dan “remove children” dari DisplayList. Umumnya sesaat setelah asset di jalankan (di-animasi-kan) akan langsung di “removed” dari DisplayList, dan akan menjadi prioritas utama oleh Garbage Collector untuk disingkirkan dari RAM. Sehingga ketika animasi dijalankan lagi, akan lebih lambat karena asset tadi akan harus di-load lagi ke memory.

Sedangkan di Flash, proses tadi berlangsung simple, karena secara “alami” kita selalu membuat frame awal sebagai preload, untuk memberitahukan Flash Player me-load semua asset – asset animasi sebelum playback. Dan proses “removing asset” yang sudah dimainkan dari RAM oleh Garbage Collector (Flash Player 8) biasanya akan dilakukan secara berkala setiap 60 detik atau ketika penggunaan RAM meningkat 20% atau lebih.

Yang perlu dipertimbangkan lagi adalah sewaktu embedding sound dan image di Flex. Karena di Flex tidak dikenal konsep Library, sehingga anda perlu menggunakan tag embed di code Flex anda untuk meng-asosiasi-kan image dan suara external ke sebuah variable, dan menggunakan variable itu untuk “link” ke asset. Asset-asset external ini di embed ke SWF sehingga anda tidak perlu khawatir tentang preloading misalnya dengan loadMovie atau Sound.loadSound.
Flex membungkus asset ini dengan class-class khusus yang dinamakan Class “Asset”, hampir mirip dengan kondisi ketika anda meng-import sound ke Flash Library dan meng-export-nya dengan linkage.
Bila kita meng-embed sebuah symbol MovieClip dari SWF eksternal, maka Flex akan membungkusnya sebagai class mx.core.MovieClipAsset, dan ketika kita meng-embed sebuah image, Flex akan membungkusnya sebagai class mx.core.BitmapAsset.
Artinya.., akan sulit mengakses class ini di SWF Flash 9. Kecuali dengan menempatkan MovieClipAsset dan BitmapAsset beserta sebagian framework Flex yang terkait di Flash 9 classes directory.

May 16

Overloading & Rest parameters.

Overloading adalah suatu kondisi dimana sebuah object / class mempunyai 2 (dua) atau lebih metode / fungsi dengan nama sama tetapi berbeda argument (parameter). Overloading kerap kita temui di pemrograman java.

Salah satu contoh overloading di java :

 
    /**
     * @langversion java
     *
     *
     * Tutup koneksi cara 1
     * @param ps
     * @param c
     */
    public static void closeConnection(PreparedStatement ps,
Connection c)
    {
        try
        {
            if (ps != null)
            {
                ps.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        try
        {
            if (c != null)
            {
                c.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    } 
 
/**
     * Tutup koneksi cara 2
     * @param c
     */
    public static void closeConnection(Connection c)
    {
        try
        {
            if (c != null)
            {
                c.close();
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
 

Sampai saat ini, Actionscript masih belum mendukung overloading. Tetapi ada bentuk penulisan lain sebagai alternatif untuk overloading yang ada di Actionscript 3.0 yaitu rest parameters. Rest parameter memperbolehkan kita menggunakan 0 (nol) atau lebih parameter tambahan dengan “unknown types” kepada suatu fungsi.
Anda mendeklarasikan rest parameter dengan menggunakan nama parameter yang didahului dengan 3 titik.
Didalam badan metode, nilai dari rest parameter diakses sebagai sebuah array.
Salah satu contoh rest parameter di Actionscript 3.0 :

/**
* @langversion Actionscript 3.0
*
*/
 
function contoh(...rest):String { 
var b:String = "rest terdiri dari :";
 
// akses isi dari rest parameter (Array)
for(var i:uint = 0; i < rest.length; i++) {
 
b += " " + rest[i];
 
}
return b;
}
 
 
// pemanggilan
 
contoh("test");
// output :
// rest terdiri dari : test
 
contoh("test", "satu", "dua", "tiga");
// output :
// rest terdiri dari : test satu dua tiga

Note : Overloading disini tidak sama dengan overloading operator di C++

Apr 27

Traits

Sebelumnya di blog ini sudah pernah di-posting artikel tentang Just in Time Compiler sebagai salah satu cara untuk meningkatkan performance (kecepatan) eksekusi kode Actionscript 3.0 oleh Flash Player 9 (baca di Bookmark April 19 2007).

Masih ada mekanisme lain yang membantu proses peningkatan performance tersebut, yaitu Traits.

Konsep Traits diciptakan di Actionscript 3.0 untuk menanggulangi permasalahan yang kerap terjadi di Actionscript versi sebelumnya.

Pada Actionscript 1.0 / 2.0 proses pencarian nama suatu object merupakan sesuatu yang melelahkan dan memakan waktu bagi Flash Player terutama pencarian object termasuk dengan property-nya (termasuk dengan semua variable, function dan methode yang terdapat di object tersebut) dari dalam suatu framework yang mempunyai package raksasa yang terdiri dari banyak object class.

Sedangkan di Actionscript 3.0 proses tersebut berlangsung lebih efisien dan lebih hemat waktu karena segala properties yang berasal dari superclass (inherited) telah di-copy-kan kedalam traits yang terdapat disetiap subclass. Pemahaman traits itu sendiri sepertinya akan terasa abstract bagi setiap programmer. Sekilas traits lebih mirip sebagai properties, tetapi tidak akan dapat diakses/ viable di daftar properties suatu object class.

Traits di AVM 2 (virtual machine untuk Flash Player 9 - AS 3.0) berfungsi untuk menyediakan segala informasi detail tentang layout dan isi dari suatu class. Dengan informasi tersebut AVM 2 dapat mengurangi waktu eksekusi kode secara signifikan karena dapat menginstruksikan langsung suatu properties/ methode object ke machine tanpa menghabiskan waktu mencari ulang representasi superclass yang mewariskan properties tersebut.

Kehadiran Traits ini terasa dengan peningkatan performance dan pengurangan pemakaian memory (memory usage) Flash Player 9. Dan “penampakan” suatu object di memory system akan lebih kecil secara nyata dibanding dengan “penampakan” object serupa di versi terdahulu dari Actionscript. Contohnya : jika suatu class dideklarasikan secara non dynamic (sealed) maka instance dari class tersebut tentu tidak memerlukan hash table sebagai penampung properties yang ditambahkan secara dynamic, sehingga akan lebih sedikit menampung pointer ke traits yang ada di object tersebut. Hasilnya sebagai perbandingan, bila di Actionscript 2.0 object tersebut memerlukan 200 bytes untuk me-representasi-kan dirinya maka cukup 20 bytes saja yang diperlukan di Actionscript 3.0 untuk melakukan hal yang sama.

Catatan :

  • Dari beberapa sumber disebutkan tidak ada jaminan bahwa feature Traits ini akan tetap digunakan atau diganti/ dibuang pada AVM generasi selanjutnya.
  • Referensi lain tentang hasil benchmark perbandingan waktu eksekusi antara Actionscript 2.0 vs Actionscript 3.0 bisa dicari melalui search engine. Benchmark lain diantaranya yang pernah dibahas oleh Grant Skinner tentang perbandingan loop dengan type Number di AS 2 vs AS 3.0, atau loop antara int, uint dan Number pada Juni lalu.
  • Apr 22

    FLV (Flash Video)

    FLV adalah salah satu format video di internet dengan menggunakan Adobe Flash Player.
    Format FLV adalah proprietari dari Adobe (Macromedia).
    Flash Player bisa menghantarkan format flv dimulai sejak Flash Player versi 6.

    Dengan kemampuan diputar oleh swf atau diembed kedalamnya, flv menjadi salah satu format video yang bisa diputar hampir disemua sistem operasi.
    Browser yang sudah mempunyai plug in flash player akan langsung bisa memutar flv.
    Ini adalah salah satu kunci keuntungan dibanding dengan format video lain yang biasanya memerlukan plug in di browser yang lebih besar (ukuran installer plug in-nya).
    Didukung juga dengan keuntungan lain seperti distribusi penyebaran Flash player yang sangat luas.

    Format Video
    Umumnya flv menggunakan stream bit video yang merupakan salah satu varian dari standar video H.263 (Sorenson Spark).
    Pada Flash Player 8 keatas terdapat fasilitas dukungan untuk memainkan stream bit video On2 TrueMotion VP6 yang mempunyai keunggulan seperti kualitas visual yang lebih tinggi serta kemampuan dalam penggunaan lower bit rates, tetapi karena memerlukan proses render dengan tingkat komputasi yang lebih tinggi maka diragukan format ini dapat berjalan lancar di komputer low end (tua).

    Flv dibuat (encoding) dengan tool yang terdapat di Macromedia Flash 8, atau bisa menggunakan On2’s Flix encoding tools, Sorenson Squeeze, FFmpeg dan tool-tool dari pihak lainnya.

    Format audio
    Audio di flv biasanya di encode sebagai MP3, sedangkan audio yang berasal dari mikropon user akan di encode dengan Nellymoser codec (proprietary format).
    Flv juga mendukung audio yang tidak terkompress atau nama lainnya ADPCM format audio.

    FLV sebagai alasan utama Adobe mengakuisisi Macromedia.
    Dari semua produk unggulan Macromedia dari Coldfusion, Dreamweaver, Firework, Jrun, Authorware, Flash, dan lain-lain. Yang menjadi alasan (nilai beli) yang menggoda Adobe bukanlah produk - produk laris seperti yang disebutkan diatas. Bukan pula Teknologi Animasi flash yang mengubah internet itu, tetapi adalah Flash Video.
    Dikutip dari Mike Downey (Senior Product Manager Adobe Flash) :
    “At the highest levels of Adobe’s corporate agenda is the Flash Video platform, it was officially called out by our CEO that it was one of the main reasons Adobe wanted to acquire Macromedia.”

    Tonggak FLV yang fenomenal : Youtube
    Kisah Youtube bermula dari empat orang (Chad Hurley, Steve Chen, and Jawed Karim) yang sebelumnya adalah karyawan PayPal.
    Domain Youtube.com sendiri baru diaktivasi pada February 15, 2005.
    Pada pertengahan 2006, youtube adalah salah satu site yang paling pesat pertumbuhannya dan menduduki peringkat 5 besar site yang paling terkenal diInternet.
    Pada 9 Oktober 2006 Google mengakuisisi Youtube dengan nilai US$1.65 billion.
    Dari 4 orang pendiri yang bermarkas di garasi, kini Youtube mempunyai 67 karyawan, 100 juta flv yang diakses tiap hari, 65.000 flv baru yang diupload tiap per 24 jam. Diakses 27 juta pengunjung tiap bulan.
    Dengan statistik di atas tidak berlebihan majalah Time memberikan penghargaan ke Youtube sebagai “Invention of the Year” tahun 2006.
    Semua tidak lepas dari keterkaitan dan penggunaan teknologi flv.
    Hal lain yang cukup menggelitik adalah 3 kunci perkembangan flash yang dipaparkan Mike Downey :
    1. IDE (Integrated Developing Tool) / Authoring Flash yang lebih baik.
    2. Flash Mobile device (Flash lite).
    3. Flash Video.
    Ketiga aspek diatas kini masing masing mempunyai ratusan proyek-proyek internal yang terus menerus menggodok flash menjadi lebih matang di release versi berikutnya.

    Bagaimana dengan flv didalam negeri? Salah satu portal yang mengadopsi teknologi flv adalah indonesia.sc , dan tampaknya akan semakin besar karena mempunyai konsep dan konsumen yang jelas.

    Sekali lagi Flash mengubah Internet, kali ini tidak dengan animasi vektornya yang kadang membuat programmer antipati dengan usabiliti flash site yang buruk )*, tapi dengan penghantaran video dengan lebih efisien dan lebih efektif dibanding teknologi sejenis dari pihak lain.

    Note :
    *. Bukanlah flash mempunyai usability yang lebih buruk dibanding html page, tetapi jadilah desainer yang lebih bijak dalam usability dengan flash.
    *. Kadang banyak anggapan programmer tidak bisa menjadi desainer yang baik, demikian pula sebaliknya. Syukurlah bila kita merasa baik - baik saja sebagai keduanya.

    Apr 19

    Actionscript Virtual Machine

    Actionscript Virtual Machine (AVM) merupakan engine yang terdapat di Flash Player untuk mengeksekusi code-code dari bahasa program Actionscript.

    Dalam sejarahnya sampai posting ini dipublish, AVM bisa dibedakan menjadi 2 generasi.

    Generasi pertama atau biasa disebut AVM1 (Actionscript Virtual Machine 1) digunakan pada Flash versi 4 – versi 8.

    Generasi kedua (AVM2) diperkenalkan pada Flash versi 9.

    Pembahasan mengenai AVM tidak lepas dari sejarah actionscript.

    Berikut adalah perkembangan actionscript dari Flash 3 – Flash 8 :

    - Pada Flash 3, actionscript hanya berupa kode perintah sederhana untuk mengatur pergerakan dan kontrol animasi. Movieclip mulai diperkenalkan.

    - Pada Flash 4 pemakaian variable mulai dioptimasi dan dilengkapi interface untuk berhubungan ke CGI (Server).

    - Pada Flash 5 actionscript versi 1 mulai mengikuti ECMAScript. Operasi dengan XML mulai diperkenalkan.

    - Pada Flash 6, di authoring tool Flash MX disertakan component UI yang merupakan penerapan OOP pada actionscript dengan memakai konsep prototype.

    - Pada Flash 7 (Flash MX 2004) actionscript beranjak ke versi 2 dan dibakukan menurut ECMAScript. Tetapi belum 100% “standard compliant”. Pembakuan ini hanya untuk kepentingan aturan notasi dan deklarasi penulisan, dan belum merupakan pembakuan kode dalam arti yang sebenarnya. Karena sewaktu dikompilasi kode-kode actionscript 2 tetap serupa dengan actionscript 1. Demikian juga proses eksekusi bytecode oleh AVM , tidak ada perbedaan berarti antara code actionscript 1 dan actionscript 2.

    - Pada Flash 8 terdapat peningkatan yang nyata pada aspek visual, misalnya Filter dan Glow, Bitmap Caching, optimasi Flash Video (flv), Blend mode dan lain-lain. Sedangkan dalam Core API terdapat API baru yaitu External Interface yang mempunyai fungsi hampir sama dengan fscommand untuk eksekusi kode yang terdapat di host (kontainer ActiveX , Javascript di browser, dll).

    Actionscript Virtual Machine 2 (AVM2) dan Actionscript 3.0

    AVM2 merupakan penulisan ulang (full rewrite) dari AVM1. Dan Actionscript 3.0 adalah versi selanjutnya dari actionscript yang ditujukan untuk AVM2.

    Baik AVM2 dan actionscript 3.0 pertamakali diperkenalkan pada Flash 9 public beta (Flash 8.5) yang direlease akhir 2005.

    Keduanya (AVM2 dan Actionscript 3.0) merupakan kata kunci dalam terminologi flash versi 9.

    Pada awal kemunculan Flash 9 sering muncul kerancuan pada kata lain yaitu “Flex”.

    Flex adalah sebuah framework yang dibangun berdasarkan teknologi Flash.

    Flex pasti Flash dan Flash tidak hanya Flex.

    Framework Flex terdiri dari package raksasa class class actionscript 3.0 yang diperkenalkan oleh adobe (macromedia) untuk membuat aplikasi web di swf.

    Hampir serupa dengan .NET framework yang dibangun di C/C++ oleh Microsoft.

    Sampai saat ini Flex sudah mencapai versi 2, dan ditulis di actionscript 3.0.

    Mengapa bahasa Actionscript diklaim mempunyai keseimbangan baik sebagai static language dan dynamic language?

    - Dikatakan static seperti halnya bahasa C++, C#, dan Java karena sanggup membangun system aplikasi yang komplek dan sempurna dibanding versi sebelumnya.

    - Dikatakan dynamic karena seperti halnya bahasa – bahasa dinamis seperti ECMAScript, Perl, Python; actionscript mampu menawarkan flexibilitas dan lebih expresif.

    Actionscript 3.0 diyakini sudah 100% memenuhi spesifikasi ECMA-262, dan fitur–fitur bahasa yang terbaru yang terdapat didalamnya berdasarkan proposal ECMAScript 4 Netscape.


    Flash Player 9

    Flash player adalah keseluruhan engine yang mengeksekusi file movie (swf) flash. Mulai dari me-render vector graphic, menjalankan animasi sampai sebagai interpreter dari code – code actionscript, yang sebelumnya sudah dirubah menjadi bytecode sewaktu swf di-compile.

    Flash player bisa diakui sebagai salah satu monumen yang terdapat di internet. Salah satu interpreter terkecil dan terluas penyebarannya ke seluruh dunia dan hampir ke seluruh platform sistem operasi.

    Sewaktu masih bersama Macromedia, menjaga ukuran player tetap kecil adalah prioritas utama dari tim enginering flash player. Ada kemungkinan prioritas lain akan bertambah dan berpengaruh sesudah teknologi flash dipegang Adobe.

    Di player versi 9, kedua virtual machine (AVM1 dan AVM2) masing-masing eksis. AVM2 untuk mengeksekusi Flash9 dan AS3, sedangkan AVM1 untuk mengeksekusi flash dan actionscript versi sebelumnya.

    Hal ini memberikan keuntungan dalam kompatibilitas tipe swf yang dieksekusi, dan memberikan kebebasan developer dalam membuat movie tanpa terbatasi oleh versi movie swf yang mereka buat.

    Mengapa actionscript harus dirubah menjadi bytecode sewaktu di-embed ke dalam swf? Salah satu alasannya adalah untuk menjaga ukuran flash player tetap kecil. Karena dengan format bytecode, flash player tidak perlu lagi client-side compiler untuk mengeksekusi-nya. Bayangkan bila client-side compiler tetap dimasukkan ke dalam arsitektur player.., yang pasti akan mempengaruhi ukuran player menjadi lebih besar.

    Perbedaan nyata Flash player 9 dengan versi sebelumnya, di versi ini eksekusi di-klaim lebih cepat 10 kali dari sebelumnya, dan penggunaan memory dihemat 50% bahkan lebih.

    Just-In-Time compiler

    Just-In-Time compiler atau JIT adalah compiler internal yang terdapat dalam setiap Flash Player untuk meng-kompilasi bytecode actionscript menjadi native machine code sewaktu runtime.

    Dengan adanya JIT di Flash player 9 inilah maka eksekusi code actionscript meningkat sangat pesat dibanding versi sebelumnya.

    JIT merupakan solusi untuk memperbaiki kinerja AVM2 sewaktu menjalankan code actionscript. Dan diharapkan kode-kode actionscript kita akan berjalan dengan kecepatan hampir sama dengan kode – kode Java/ C++.

    Mengapa JIT ?

    Karena actionscript yang highly dinamic, loosely typed, dan merupakan bahasa scripting interpreter seperti halnya kebanyakan bahasa scripting dinamis lainnya akan dieksekusi lebih lambat dibanding code – code Java/ C++ yang statis yang telah berupa native machine code sewaktu code (Java/C++) tersebut dikompilasi.

    Sehingga dengan JIT code-code actionscript yang sudah berupa bytecode di swf akan ditranslasi menjadi bahasa mesin. Penggunaan JIT juga dimaksudkan untuk menanggulangi perbedaan arsitekstur mesin / prosessor tempat Flash Player berjalan.