феб 072015
 

Android Zarada – Marketing!

Marketing je najvažnija faza posle objavljivanja Vaše aplikacije, koja vodi ka željenom cilju – ostvarivanju velikog broja preuzimanja aplikacije. Što više se posvetite ovoj fazi, bolje je za Vas. Što više raznih metoda za marketing upotrebite imate više šansi da uspete da ostvarite cilj.

10 najpopularnijih metoda marketinga android aplikacija navedene su u narednom tekstu. Vaše sugestije, dopune i preporuke mogu uzeti u obzir, i promeniti tj. dopuniti ovaj tekst

Najpopularnije metode marketinga su navedene u narednom tekstu:

1) Napravite svoj sajt na svom hostingu ili na besplatnom hostingu na nekom od sajtovima koji Vam to nude. Ovo je objašnjeno u članku Android Zarada – Pravilan Početak. Kada imate svoj sajt, na njemu možete da postavite mnogo više sadržaja i objašnjenja sa ključnim rečima i opisom kako Vam odgovara.

2) Nakon pravilno urađene SEO optimizacije Vaše aplikacije objašnjene u prethodnom tekstu (Android Zarada – Saveti Za Optimizaciju), pristupite promociji Vaše aplikacije pomoću što više metoda. Promocija na socijalnim mrežama kao što su facebook, twitter, google+ i druge, su samo neki od sajtova čiju snagu treba upotrebiti upravo sada. Obavezno objavite više puta na svim mrežama na kojima imate nalog postove o Vašoj novoj aplikaciji. Napravite i strane gde će moći ljudi da saznaju vise informacija, i pokušajte da informišete što više ljudi o njima. Ako nemate naloge, otvorite ih i na raznim socijalnim mrežama, i sakupljajte pratioce. Ako nemate odmah veliki broj pratioca, za neko naredno vreme će se taj broj povećati i sugurno će Vam biti korisni.

3) Ako nemate prijatelje i pratioce, a iako ih imate, poboljšajte broj deljenja postova i broj pratioca koristeći sajtove za razmenu informacija poput: admefast.com, like4like.com i dr. Pomoću ovih sajtova možete da poboljšate svoje naloge i demonstrirate internet dominaciju. Internet dominacija je korisna jer, lakše se dobijaju novi pratioci kada već imate na stotine ili hiljade pratioca, nego kada imate nula ili nekoliko pratioca! Kako ovo izvesti? Jednostavno, uložite malo vremena na ovim sajtovima, po 15 minuta dnevno ili više. Za to vreme osvojite poene posmatranjem preporučenih sajtova, videa, ili praćenjem drugih ljudi, deljenjem raznih sadržaja ili slicno. Zatim ove poene iskoristite u svoju korist, za deljenje Vaših postova, dobijanje novih pratioca ili onoga što Vam odgovara. Na ovaj način mnogo ljudi će videti Vašu reklamu, a možete i da dobijete prave prijatelje sa kojima možete da razmenite iskustva.

4) Sledeće što treba da uradite je reklamiranje Vaše aplikacije u što više grupa koje su sa sadržajem sličnim Vašoj aplikaciji. Na primer nađite sve grupe – zajednice koje koriste reč marketing, android i slično na google+ mreži, učlanite se u te grupe i objavite svoj članak. Negde će administratori tih grupa izbrisati Vaš članak, ali negde će doci do pozitivnih komentara što može biti veoma korisno. Pogledajte profile ljudi koji su objavljivali svoje članke u tim grupama, i videćete gde i kako oni reklamiraju svoje aplikacije, pa ih iskopirajte. Pri pisanju pratećeg teksta, koristite ispred ključnih reci znak ‘#’ na primer #android jer na taj način dajete važnost tim rečima i poboljšavate kvalitet članka za pretraživače.

5) Naredna aktivnost je reklamiranje aplikacije po forumima. Reklamiranje aplikacije po forumima može Vam doneti više korisnika koji će videti sadržaj koji želite. Registrujte se u forumima u kojima je dozvoljeno reklamiranje aplikacija. Uložite malo truda i pripremite slike po dimenzijama koje oni traže, i zatim objavite svoje članke. Spisak preporučenih foruma je dat u tekstu sa linkovima.

6) Postoje i sajtovi koji objavljuju recenzije ‘review’ o aplikacijama. Recenzije su možda i najkorisniji vid marketinga. Pošaljite i njima poruke i nadajte se najboljem. Mnogi od njih traže novac za objavljivanje Vaše aplikacije, ali vredi probati. Ko zna…

7) Promovisanje aplikacije na sajtovima čiji je to posao. Potrudite se i da pronađete sajtove koji Vam nude besplatno pronalaženje ljudi koji će preuzeti aplikaciju, kao dokaz da Vam nude kasnije za novac takve usluge. Takav je sajt ayetstudios.com koji Vam nudi 50 preuzimanja sa statistikom. Možete izabrati i u kojoj državi da se preuzimaju aplikacije, i za cenu manju od 0.1€ po preuzimanju, ova ponuda može biti veoma prihvatljiva.

8) Reklame u okviru postojećih aplikacija su jedna od najboljih i najuspešnijih metoda marketinga. Ako imate već neku aplikaciju koja je ostvarila veliki broj preuzimanja, objavite novu verziju, sa reklamom o Vašoj novoj aplikaciji. Ili ako uspete ugradite dodatak koji preuzima Vašu reklamu sa Vašeg sajta sa interneta. Ovo je veoma korisna reklama, koju će zadovoljni korisnici verovatno prihvatiti pozitivno.

9) Reklamiranje na sajtovima sa besplatnim oglasima takođe može biti korisno, i sve još, šta god Vam padne na pamet.

10) Plaćene metode marketinga – trebalo bi da su najkorisnije, ali ne mora da bude tako. Postoje razni sajtovi i pojedinci koji nude svoje usluge tipa reklamiranja, ocenjivanja, instaliranja i slično. Ne mora da znači da je ono što nude na prvi pogled tačno. Dobro obratite pažnju sa kim ostvarujete saradnju. Google često izbriše lažne ocene, pluseve i instalacije, a pri tome, ponekad i kazni valsnika naloga tj. možda Vas, iako čak i niste krivi. Zato pažljivo birajte sa kim ostvarujete saradnju.

Ako se u prvih mesec dana potrudite, možete napraviti silovit start. Tada se nalazite u kategoriji novih aplikacija, gde je konkurencija mnogo slabija, jer su tu aplikacije objavljene u prethodnih 30 dana. Nakon ovog perioda i ostvarenih rezultata zaključite, da li da se još više posvetite reklamiranju iste aplikacije, ili da svoje vreme usmerite na neku drugu aplikaciju.

Vremenom, Google sadržaj se preuzima na mnogim sajtovima koji reklamiraju android aplikacije. Vaša aplikacija će se pojaviti i na njima. Tu dolazi do izražaja priča iz prvog teksta, sa izborom imena Vašeg naloga, koje će se pojavljivati u pretrazi na pretraživacima. Ako želite da zamenite ime naloga kasnije, mnogi linkovi koji postoje će se izgubiti, a to nije dobro.

Korisno

je povremeno objaviti novu verziju aplikacije, jer se tada vidi koliko je puta unapređena aplikacija tj. koliko ima stvarno aktivnih korisnika.

Pratite statistike koje Vam daje Google jer se tamo vidi mnogo važnih stvari, koje mogu da Vam pomognu u izboru daljih aktivnosti vezanih za marketing…

 

Android Zarada

Android Zarada – Marketing

 

Android Zarada

 Android Zarada – Uvod

Android Zarada – Pravilan Početak

Android Zarada – Saveti Za Optimizaciju

Android Zarada – Reklame

Android Zarada – Monetizacija

Android Zarada – Marketing

феб 072015
 

Monetizacija kod besplatnih android aplikacija je osnovni izvor prihoda objavljivačima aplikacija (programerima) i glavni razlog zašto se aplikacije prave. Postoje razne firme koje Vam nude nadogradnju aplikacija dodacima za monetizaciju, ali morate biti veoma pažljivi pri izboru metode za monetizaciju, jer Google ima stroga pravila (pročitajte nekoliko strana o uslovima korišćenja), i ako ih prekršite može doci do gašenja Vašeg naloga. Zato preporučujem korišćenje servisa koji nudi Google nazvanog AdMob koji predstavlja sigurno rešenje, a i zarade koje se ostvaruju njegovim korišćenjem mogu biti sasvim solidne.

Na sajtu za programere Google objašnjava kako funcioniše monetizacija pomoću AdMob servisa kada radite u Java okruženju, dok ako koristite neki drugi programski jezik, morate da dodate u svom paketu specijalne dodatke koji vrše usklađivanje rada sa Javom i pozivanje glavnog servisa koji radi u Javi.

Na sajtu otvorenog koda github.com mogu se besplatno naći pomenuti dodaci za neka programska okruženja, a ovi dodaci se i prodaju na nekim sajtovima, i obično im je cena od 10 – 50 €. Njihovo funkcionisanje je veoma teško kontrolisati, jer im se samo šalje informacija o broju programera odnosno broju reklame – podaci za monetizaciju. Ovi dodaci šalju AdMob servisu predviđene podatke o aplikaciji, korisniku i lokaciji i naravno Vaše podatke za monetizaciju, a ostalo se sve odradi automatski, prikažu se reklame i isključe se kada se sakriju, uklone ili završe planirani posao.

Najpopularnija okruženja pored okruženja Jave u kojima se rade aplikacije za androide koja podržavaju monetizaciju pomocu reklama su Unity3d i Adobe Flash – Air. Za oba okruženja postoji po nekoliko dodataka za povezivanje sa Javom radi monetizacije, a pri izboru posebno obratite pažnju da li su ovi dodaci usklađeni sa najnovijim propisima koje zahteva Google. Oba sistema rade slično.

Dodatak koji ja koristim za monetizaciju pomocu Unity3d okruzenja je: AdmobVNTIS. Kod Unity3d programa treba raspakovati paket koji u sebi ima dosta fajlova sa ekstenzijom ‘.cs’ i ‘.jar’. Za aktiviranje reklama potrebno je na scenu dodati ‘prefab’ objekt i nakon toga na predviđeno mesto popuniti stringove tipa ‘ca-pub-xxx/yyy’ za ‘Banner’ i ‘ca-pub-xxx/zzz’ za ‘Interstitial’ reklamu. Ovi stringovi se dobijaju na sajtu AdMob, kada napravite novu oglasnu jedinicu – reklamu.

Pored ovog potrebno je i paket Google servisa GooglePlayLicenseVerification sa ‘hash’ kodom dodati ili tzv. ‘Base64-encoded RSA public key’, i popuniti na nekoliko mesta string koji se dobija pri prijavljivanju nove aplikacije na Google market. Ovaj kod se na nalazi na glavnom sajtu https://play.google.com/ u okviru aplikacije koju objavljujete u sekciji ‘SERVICES & APIS’ i popunjava se u fajlu ‘CheckLVLButton.cs’. Google automatski priznaje kada popunite ovaj kod, a bez njega ne dozvoljava da postavite aplikaciju na glavnom sajtu.

Takođe je potrebno pripremiti odgovarajuće ikone, i napraviti sertifikat sa Vašim podacima programom Unity3d u okviru opcije ‘File / Build Settings… / Android / PlayerSettings / Publishing Settings / Create New Keystore’, koji morate koristiti ako želite da objavite novu verziju aplikacije.

Davanje imena aplikacije je proizvoljno po Vašoj zelji, a obično se koristi obrnuti zapis domena iza čega ide naziv aplikacije – ‘com.vasdomen.imeaplikacije’ ili slično.

Unity3d mnoge stvari odradi automatski, ali pregledajte sve podatke koje se nalaze u ovom prozoru sa podešavanjima, i popunite ili izmenite šta je još potrebno.

Po kreiranju foldera ‘apk’ sa fajlom sa ekstenzijom ‘.apk’ prekontrolišite kako aplikacija radi na Vašem android uređaju, pre nego sto je objavite, i ako treba ispravite greške ako ih ima.

Adobe dodaci imaju za dodatak fajl tipa ‘.ane’ (android native extenstion) uz fajlove tipa ‘.as’ (action script), a može se naci i tip fajla kao što je ‘.swc’. Njihova implementacija se zasniva na raspakovanje paketa i unošenje stringa Vaše reklame tipa ‘ca-pub-xxx/yyy’ i ‘ca-pub-xxx/zzz’. Ove šifre se dobijaju na sajtu AdMob posebno za reklame tipa ‘Banner’ a posebno za reklame tipa ‘Interstitial’. Unošenjem ovih šifri na predviđeno mesto i pozivanjem reklame tipa ‘Banner’ ili tipa ‘Interstitial’ vrši se jedno prikazivanje reklame. Za ponovno prikazivanje ‘Interstitial’ reklame potrebno je ponovo pozvati ovaj dodatak, i mnogi programeri praktikuju ponovno prikazivanje reklame kada se završi neki ciklus u aplikaciji i/ili kada se napušta aplikacija. Prikazivanje reklame tipa ‘Banner’ se osvežava posle intervala koji se bira kada se kreira oglas na AdMob sajtu (obicno je 60 s). Neki programeri ostavljaju baner na ekranu stalno dok radi aplikacija, dok neki u zavisnosti od toga šta se radi u aplikaciji prikazuju i skrivaju baner. Prikazivanje i sakrivanje banera se radi veoma lako – korišćenjem naredbi ‘showBanner()’ i ‘hideBanner()’, i preporuka je da ne bi stalno pisali u programu ove naredbe uvesti jedno stanje sa nazivom poput ‘ShowAd’, i dodati kod koji na svakih nekoliko sekundi proverava ovo stanje i prikazuje ili sakriva reklamu. Ovo rešenje je mnogo bolje od stalnog pozivanja na odgovarajucim mestima u programu, jer ne možete u potpunosti da kontrolišete dodatak za monetizaciju, a desi se da reklama zakasni i pojavi se posle naredbe za sakrivanje, a retko ko postavi ikonu na koju kada se klikne, dolazi do sakrivanja reklame. Nepažljivim programerima se desi da ta reklama prekrije važne komande za funkcionisanje aplikacije, tako da aplikacija postaje neupotrebljiva.

U narednim linijama dat je opis kojim se najlakše implementiraju, pozivaju i skrivaju reklame u Flash-u koje koriste monetizaciju dodatkom AdMobAne.

Najpre se skine dodatak ‘.zip’ i raspakuje u folderu sa glavnim ‘***.fla’ fajlom. Potrebni folder za dodatak je ovde sa nazivom ‘anes’ u kome se nalaze sledeci fajlovi:

AdMobAne1.0.ane
SingleBanner.as
Interstitial.as

Pomenuti ‘AdMobAne1.0.ane’ fajl je obavezan i ne možete ga menjati, dok je kod za ostala dva fajla i kod u glavnom ‘***.fla’ fajlu dat tako da bude najshvatljiviji, i može se menjati po potrebi. U opcijama Flash-a morate dodati putanju ka ovom ‘AdMobAne1.0.ane’ dodatku ‘File / Publish Settings… / ActionScript Settings / Browse to a Native extension’.

Glavni ***.fla

import com.admob.AdMobManager;
import anes.SingleBanner;
import anes.Interstitial;

try {
var AdMobInterstitial:Interstitial = new Interstitial();
var AdMobBanner:SingleBanner = new SingleBanner();
}
catch (error:Error) {
// error
}
var Mode:String = “Show”;
setTimeout(ShowHideAdMobBanner, 1000);

function ShowHideAdMobBanner():void {
if (Mode == “Show”) {
AdMobBanner.ShowBanner();
}
else {
AdMobBanner.HideBanner();
}
setTimeout(ShowHideAdMobBanner, 1000);
}

function AdMobShowInterstitial():void {
AdMobInterstitial.ShowInterstitial();
}
setTimeout();

Kada je potrebno samo u okviru glavnog ‘***.fla’ fajla pozovete funkciju:

AdMobShowInterstitial();

Odnosno postavite vrednost za prikaz banera:

Mode = “Show”; // “Hide”

SingleBanner.as

package anes {

import com.admob.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;

public class SingleBanner extends Sprite {

public static const banner_id:String = “ca-app-pub-xxx/yyy”;
private var adMobManager:AdMobManager;

public function SingleBanner() {

super();
adMobManager = AdMobManager.manager;
if(adMobManager.isSupported){
adMobManager.verbose = true;
adMobManager.bannersAdMobId = banner_id;
adMobManager.createBanner(AdMobSize.SMART_BANNER_LAND, AdMobPosition.BOTTOM_CENTER, “BottomBanner”, null, true);
}
}

public function ShowBanner() {

if(adMobManager.isSupported) {
adMobManager.showAllBanner();
}
}

public function HideBanner() {

if(adMobManager.isSupported){
adMobManager.hideAllBanner();
}
}
}
}

Na predvidjeno mesto mora se uneti broj reklame koja prikazuje baner.

Interstitial.as

package anes {

import com.admob.AdMobManager;
import flash.display.Sprite;
import flash.utils.*;

public class Interstitial extends Sprite {

public static const full_id:String = “ca-app-pub-xxx/xxx”;
private var adMobManager:AdMobManager;
private var isShow:Boolean = false;
private var waiting:Boolean = false;

public function Interstitial() {

super();
adMobManager = AdMobManager.manager;
if (adMobManager.isSupported) {
adMobManager.verbose = true;
adMobManager.interstitialAdMobId = full_id;
adMobManager.createInterstitial(null, true);
}
}

public function ShowInterstitial() {

if(adMobManager.isSupported) {
if (!waiting) {
waiting = true;
if(adMobManager.isInterstitialLoaded()) {
WaitData();
}
else {
adMobManager.cacheInterstitial();
setTimeout(WaitData, 3000);
}
}
}

function WaitData():void {

if(adMobManager.isInterstitialLoaded()) {
waiting = false;
adMobManager.showInterstitial();
}
else {
setTimeout(WaitData, 3000);
}
}
}
}
}

Na pedvidjeno mesto mora se uneti broj reklame koja prikazuje Interstitial sadrzaj.

Fajlove ‘SingleBanner.as’ i ‘Interstitial.as’ kreirajte sami slično kao i ja ili iskoristite gotove fajlove koji su dati u primeru, uz minimalno prilagođavanje, a za fajl ‘.ane’ ne zaboravite da podesite u podešavanjima putanju ka ovom ‘.ane’ fajlu, kao i verziju za izvršavanje programa za android na 15.0 ili više.

Potrebno je dodati i dozvole u ‘File / Publish Settings… / Player Settings / Permissions’ i ja selektujem prve i poslednje 2 iz menija – prikaz u ‘***-.xml’ fajlu.
Potrebno je ovde i kreirati Vaš sertifikat sa šifrom, koji mora da se koristi pri reviziji aplikacije, a ovde se unose i verzija aplikacije, podržani jezici i ikone.

Takođe je potrebno posle prvog eksportovanja izmeniti fajl ‘***-app.xml’ fajl i tamo dodati redove bez kojih reklame neće da rade.

<application>
<meta-data android:name=”com.google.android.gms.version” android:value=”4452000″ />
<activity android:name=”com.google.android.gms.ads.AdActivity” android:configChanges=”keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize”/>
</application>

Dodajte i red za minimalnu verziju android operativnog sistema na kome funkcioniše program, jer će Vam Google izbaciti u protivnom upozorenje da se podaci ne poklapaju. Dodajte zato red u fajlu ‘***-app.xml’:

<uses-sdk android:minSdkVersion=”10″/>

Linije za izvršavanje dodatka za monetizaciju takođe moraju se naći u ‘***-app.xml’, jer bez njih reklame neće da rade.

<extensions>
<extensionID>com.admob.ane</extensionID>
</extensions>

Tek kada sve ovo završite, možete kreirati naredbom ‘publish’ fajl koji se učitava na androidima tipa ‘.apk’, čije funkcionisanje obavezno trebate proveriti na svom android uređaju. Nakon kreiranja ‘.apk’ fajla morate proveriti da li je novi ‘***-app.xml’ izmenjen i da li na kraju izgleda ovako:

<allowBrowserInvocation>false</allowBrowserInvocation>
<android>
<manifestAdditions>
<![CDATA[<manifest>
<uses-sdk android:minSdkVersion=”10″/>
<uses-permission android:name=”android.permission.INTERNET”/>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>
<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>
<application>
<meta-data android:name=”com.google.android.gms.version” android:value=”4452000″ />
<activity android:name=”com.google.android.gms.ads.AdActivity” android:configChanges=”keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize”/>
</application>
</manifest>]]>
</manifestAdditions>
</android>
<supportedLanguages>en zh cs nl fr de it ja ko pl pt ru es sv tr</supportedLanguages>
<extensions>
<extensionID>com.admob.ane</extensionID>
</extensions>
</application>

Ako je Flash izmenio ‘.xml’ ispavite ga ponovo po gornjem primeru, a zatim ponovo kreirajte ‘.apk’, ali prethodno proverite sve podatke ponovo…

Ovako formirana ‘.apk’ verzija radi kako treba, i prikazuje reklame kako je predviđeno. Još samo da bude mnogo instalacija tj. klikova i blago Vama…

 


 

web monetization


Android Zarada – Monetizacija

 

Android Zarada

 Android Zarada – Uvod

Android Zarada – Pravilan Početak

Android Zarada – Saveti Za Optimizaciju

Android Zarada – Reklame

Android Zarada – Monetizacija

Android Zarada – Marketing

феб 072015
 

Android je platforma za koju su mnogi programski jezici napravili dodatke da rade u njoj. Osnovni paket koji podrzavaju androidi ima ekstenziju ‘.apk’ koja je poput ‘.zip’ paketa zapakovani skup više foldera i fajlova sa raznim ekstenzijama. U okviru ‘.apk’ paketa se nalaze svi zapakovani fajlovi koji služe za instaliranje i pokretanje neke aplikacije.

Osnovni programski jezik koji android podržava je Java, ali pomoću raznih programskih jezika se pravi pomenuti ‘.apk’ paket, koji u sebi moze da ima objašnjenja kako da rade i drugi programski jezici. Da bi se prikazao sadržaj koji je planiran nekim drugim programskim jezikom, potrebno je u ‘.apk’ paket dodati i ‘player’ za reprodukciju tog sadržaja, pa mnogi programski jezici u svaku aplikaciju dodaju ‘player’ koji obično zauzima do 10 MB, sto povećava memoriju potrebnu za aplikaciju (kao što radi Unity3d). Većina korisnika nemaju pojma da je to urađeno, već samo instaliraju aplikaciju i koriste je ne obraćajuci pažnju na bilo šta drugo sem na to da li aplikacija radi i da li im se sviđa. Da bi uštedeli memoriju, neki programski jezici su napravili svoj univerzalni ‘player’ koji se instalira samo jednom, a nakon toga ga koriste sve aplikacije koje koriste taj programski jezik. Takav je ‘Adobe Air Player’ – aplikacija za reprodukciju Adobe Flash ‘.swf’ sadržaja poput ‘Adobe Flash Player’-a za reprodukciju ‘.swf’ sadržaja preko interneta – dodatak za pregledače sadržaja na internetu koga ima skoro svaki kompjuter na svetu. Međutim mnogi ljudi iz svog neznanja smatraju da je ‘Adobe Air‘ virus i kada neka aplikacija traži prvi put na njihovom uređaju da se taj paket instalira, ne prihvataju ga i komentarišu da aplikacija ima virus. Iako neke druge aplikacije imaju već ugradjen taj paket u sebi, ali samo za sebe, oni to ne znaju, i tada je sve u redu. Za njih nema veze što se u svakoj aplikaciji utroši novih 10 MB, važno je da nema obaveštenja o virusu…

Sa programerske strane, javlja se velika dilema: da li praviti aplikacije sa uštedom memorije i pozivom glavnog paketa za reprodukciju sa rizikom da aplikacija dobije loše ocene i bude komentarisana da ima virus, ili dodati u svaku aplikaciju dodatak za reprodukciju sadržaja, sa povećanjem memorije, o čemu obični korisnici nemaju pojma. U poslednje vreme ja sam se opredelio za ovaj drugi slučaj, zbog više negativnih komentara o postojanju virusa, koji narušavaju opšti utisak o kvalitetu aplikacije.

Upoređenje memorije za istu aplikaciju snimljenu bez dodatka i sa dodatkom za reprodukciju bi bilo sledeće: verzija iz prvog slučaja zauzima oko 3 MB zapakovana a oko 6 – 7 MB raspakovana, dok ista verzija po drugoj metodi funkcionisanja zauzima oko 13 MB zapakovana a preko 30 MB raspakovana. Prevelika šteta za korisnika, ali prevelika korist za programera čija ocena bude za jedan umanjena na primer čak 3.5 umesto 4.5, što utice na druge korisnike da preuzmu tu aplikaciju i konačni uspeh aplikacije! Svaki programer može da izabere kako da uradi konačni paket, a svaki korisnik može da oceni rad, i da svoj komentar ako želi.

Što se tiče dodatka za monetizaciju, ovde je priča drugačija. Dodatak za monetizaciju je urađen tako da samo radi na platformama sa android operativnim sistemom, i poziva se iz Jave. Da bi ugradili monetizaciju u neku aplijaciju, potrebno je dodati dodatak koji poziva java funkciju koja prikazuje reklamu. Ovaj dodatak učitava reklamu sa identifikacijom programera, prikazuje je i ako kliknete na reklamu donosi predviđenu zaradu programeru. U zavisnosti od lokacije gde se nalazi korisnik i vrste aplikacije, pomenuti dodatak bira jednu od reklama, i ako je sve u redu posle prikaza reklame, bez obzira da li ste kliknuli na reklamu i videli šta Vam se nudi ili samo ugasili reklamu, glavna aplikacija nastavlja sa radom, kao da ništa nije bilo.

Ponovo napominjem da su ove reklame uglavnom jedini prihod programerima besplatnih aplikacija, i klik na njih predstavlja izražavanje zahvalnosti programerima. Kada niko ne bi kliknuo reklamu, ili kada bi bio premali broj klikova, prestalo bi objavljivanje besplatnih aplikacija, pa se Vi upitajte, da li Vam se isplati da se prikaže reklama, ili više volite da platite 2 – 3 € po aplikaciji i da nema ugrađenih reklama. Mnogi programeri čak i nude mogućnost izbora, tj. kupovinu istovetnih aplikacija u koje nisu ugrađene reklame.

Za skoro sve probleme se nadje rešenje. Naš narod voli da sve bude besplatno, najboljeg kvaliteta, da nema reklama niti bilo kakvih smetnji i da sve radi glatko. Čak se mnogi i bune ako im bilo šta nije po volji, a nikada nisu dali ni cent. Ko misli da može da nadje bolje rešenje od postojećeg, neka proba da iznese svoje teorije. Bilo bi divnih ideja koje bi izazvale puno smeha, a ustvari ko zna, mozda se nađe i novi Tesla…

Android Zarada – Reklame

 

Android Zarada

 Android Zarada – Uvod

Android Zarada – Pravilan Početak

Android Zarada – Saveti Za Optimizaciju

Android Zarada – Reklame

Android Zarada – Monetizacija

Android Zarada – Marketing

феб 072015
 

Optimizacija aplikacija koje rade na uređajima sa android operativnim sistemom je veoma bitna i ima veliki uticaj na konačni uspeh Vaše aplikacije. Postoje mnoge preporuke i saveti za optimizaciju, i nemoguće je sve ispoštovati u složenijim aplikacijama, ali uvek se trudite da uradite sve optimizacije koje su u Vašoj moći.

Google je predvideo da aplikacije budu zapakovane do veličine od 50 MB, ali postoje i veće aplikacije, s tim da Google daje obaveštenje o velikim aplikacijama, koje obično dovodi do odustajanja korisnika da ih instaliraju. I ne samo zbog ovog memorijskog ograničenja, već i zbog male memorije na androidima, uvek pazite na medijalne podatke koje koristite. Većina androida koji se danas koriste sa operativnim sistemom verzije ‘4.x’ ima 512MB ili 1GB ukupne korisne memorije, od čega preko 300 MB zauzima instalacija operativnog sistema i osnovnih aplikacija koje se instaliraju pre nego što kupite telefon. Deo memorije se koristi za aplikacije tipa facebook, twitter, google maps i još mnogo nezaobilaznih aplikacija, tako da memorija koja ostaje za snimanje novih sadržaja i korišćenje novih aplikacija bude obično manja od 200 MB. Memorija koju poseduje spoljašnja kartica nije memorija koju može android da koristi na isti način kao i osnovnu memoriju, tako da je nije moguće koristiti za sve što poželite.
U narednom tekstu navedeni su neki saveti kojih se treba pridržavati jer su veoma uticajni na kvalitet i funkcionisanje aplikacije.

U narednom tekstu navedeno je 10 saveta za optimizaciju android aplikacija:

1) Video filmove velikih dimenzija treba izbegavati, jer oni uvek zahtevaju mnogo memorije. Pomoćna objašnjenja i filmove zato postavite na svom sajtu ili nekom od besplatnih sajtova sa video materijalima poput youtube.com sajta, a u opisu aplikacije ili samoj aplikaciji možete imati preusmeravanje za one koji žele da ih vide.

2) Obratiti pažnju na optimizaciju slika. Iako skoro svi programski paketi vrše optimizaciju slika, trudite se da koristite slike koje ne premašuju dimenzije od 512×512 piksela. Izuzetno koristite i slike dimenzija do 1024×1024 piksela, ali preko toga nikako, jer aplikacije sa slikama većih dimenzijama obično neće da se pokrenu na mnogim telefonima, jer zahtevaju mnogo memorije.

3) Što se tiče muzike, najbolji format je ‘.mp3’, mada dolaze u obzir i drugi formati tipa ‘.wav’ koji pokazuju bolji odziv u određenim situacijama (iako su mnogo veći kada su sami).

4) Korišćenje bilo kojih grafičkih filtera treba izbegavati. Ako je Vaša aplikacija posvećena dinamičkim prikazima u realnom vremenu, upotreba filtera može da je uspori desetine puta i dovede do totalnog zastoja sistema. Zato filtere tipa ‘Shadow’, ‘Glow’ i slične zaobiđite, osim ako ne podesite sve da funkcioniše izuzetno precizno i glatko.

5) Kod programa sa 3d dodacima gde postoji svetlo koje utiče na prikaz na ekranu, obavezno koristite samo jedno svetlo. Upotreba dva ili više osvetljenja preopterećuje procesor i grafičku karticu, tako da se aplikacija uspori toliko da izgleda sve veoma loše. Aplikacije kod kojih broj prikaza slika u sekundi pada ispod 10 su problematične, i nemaju mnogo izgleda da dobiju dobre ocene od korisnika.

6) Obratite pažnju kod 3d objekata na broj tačaka odnosno na broj poligona kojim su oni definisani. Obrada velikog broja poligona u realnom vremenu dovodi do smanjenja broja slika u sekundi, sto se svodi na prethodni slučaj.

7) Posebnu pažnju treba obratiti na to da unapred definišete veličinu ekrana u pikselima, odnosno da na osnovu veličine ekrana uređaja na kome radi aplikacija, formirate veličine svih bitnih elemenata na ekranu koji se vide i na koje može da se klikne. Na primer kod telefona sa rezolucijom 480×800 piksela, slika koja je veličine 40×40 piksela je sasvim solidne veličine, i lako je kliknuti na nju. Međutim ista aplikacija na modernijim telefonima sa rezulucijom 1080×1920 piksela ima sliku od 40×40 pilsela toliko malu, da ju je teško pogoditi prstom. Zato da bi izbegli ovaj problem koristite velicinu ekrana (horizontalnu i/ili vertikalnu) da bi oformili relativne dimenzije elemenata na slici (u ovom primeru Screen.height / 20).

8) Isto se odnosi i na veličinu fonta koji se koristi za prikaz teksta. Font veličine 10 se odlično vidi na ekranu rezolucije 480×800, ali je previše sitan na ekranu rezolucije 1080×1920.

9) Treba obratiti pažnju i na dozvole koje se odobravaju u aplikaciji, koje su podešene obično u fajlu AndroidManifest.xml. Ljudi ne vole da instaliraju aplikacije, koje imaju uvid u njihove lične podatke i sadržaje tipa slika, filmova i slično, tako da često odustanu od instaliranja aplikacija koje ovo zahtevaju.

10) Postoji još mnogo toga na šta treba obratiti pažnju poput isključivanja skripti objekata koji nisu na sceni, rastojanja i ugla vidljivosti kamere, kvaliteta prikaza objekata u zavisnosti od blizine do kamere i još mnogo toga, ali ne postoji standard da se ovo objasni ili definiše.

U zavisnosti od aplikacije i toga šta ona radi, uvek treba probati nekoliko raznih podešavanja skoro svih bitnih faktora koji utiču na brzinu rada, a to morate uraditi sami, i po mogućnostvi izvršiti testiranje na što više uređaja sa što različitijim karakteristikama tipa rezolucije, memorije, brzine i broja procesora i grafičkih kartica. Tek kada se uverite u ispravnost Vaše aplikacije pri različitim uslovima korišćenja objavite je, da bi izbegli negativne komentare i da bi prošli što bolje od samog početka, jer početak funkcionisanja aplikacije i prvih mesec dana od kada se aplikacija objavi su po meni najbitniji za uspeh aplikacije…

 

Android Zarada – Saveti Za Optimizaciju

 

Android Zarada

 Android Zarada – Uvod

Android Zarada – Pravilan Početak

Android Zarada – Saveti Za Optimizaciju

Android Zarada – Reklame

Android Zarada – Monetizacija

Android Zarada – Marketing

јан 162015
 

Od samog početka, obratite pažnju da svi tekstovi koji se odnose na aplikaciju budu napisani tako da koristite korisne reči koje će nadamo se Google priznati za ključne reči vezane za Vašu aplikaciju. Najpre, a moguće su i kasnije promene, potrebno je izabrati pravilno ime aplikacije. Ovaj posao nije nimalo beznačajan, i treba mu veoma ozbiljno pristupiti. Ime treba da bude po mogućstvu jedinstveno, sastavljeno od jedne do nekoliko reči, koje su cenjene na marketu, i koje će nadamo se biti ključne reči aplikacije. Google market Vam ne dozvoljava da sami izaberete ključne reči koje želite kao kod običnih sajtova gde ih navodite u predvidjenoj listi, ali Vam posle određenog vremena od objavljivanja aplikacije dodeljuje neke ključne reci. Obično se reči iz naslova aplikacije priznaju kao ključne reci, ali ne mora da bude tako.

Pri izboru naslova najpre se pozabavite pretragom reči pomocu Google AdWork sistema. Što su veće vrednosti traženih reči, nadajte se da ce veće vrednosti biti i kod androida. Nakon toga posetite sajt searchman i tamo postavite upit za izabrane reči. Dobićete listu od 50 najpopularnijih aplikacija koje koriste željenu reč. Razgledajte prvih nekoliko aplikacija iz liste, i videćete celokupni njihov tekst, sa obojenim ključnim rečima koje koriste. U tri boje su prikazane ključne reci – u jednoj one koje su najkorisnije i sa kojima se ta aplikacija prikazuje u prvih 25 aplikacija kada se traži ta kljucna reč. U drugoj boji su ključne reči sa kojima je aplikacija pozicionirana u prvih 250. U trećoj boji su ostale ključne reči, sa kojima aplikacija nije pozicionirana u prvih 250.

Svaka ključna reč ima svoju vrednost. U zavisnosti od svih ključnih reči i njihovih vrednosti, Vaša aplikacija će imati konačnu vrednost koja se dobija na osnovu svih ključnih reči koje ima, koja ukazuje na to koliko je ona uspešna. Što je ova vrednost veća to bolje za Vas. Pregledom aplikacija koje su u vrhu za zadate ključne reči, videćete koje su reči vrednije i ako postoji mogućnost, obavezno ih upotrebite u opisu svoje aplikacije, da bi uvećali konačnu vrednost u pretrazi. Nekoliko dana nakon objavljivanja aplikacije, i u Vašoj aplikacije će se pojaviti obeležene ključne reči – nažalost na početku sve sa lošim rejtingom, ali vremenom će se možda poboljšati situacija.

Na istom sajtu se može i pratiti pozicija aplikacije u svojoj kategoriji za SAD i Japan, kada – ako se pojavi u prvih 500. Google vrši klasifikovanje aplikacija po mnogo kriterijuma kao sto su najpopularnije u kategoriji, najpopularnije najnovije… Sve ove podele postoje za svaku kategoriju. Veoma je važno znati da ove podele postoje za svaku državu posebno. Ako ste u jednoj državi na prvom mestu u svojoj kategoriji, u drugoj je moguće da niste uopšte u prvih 500. Google posebno broji preuzimanja po državama, i na osnovu toga pozicionira svaku aplikaciju u svakoj državi u svojoj kategoriji.

Dodavanjem specijalnog upita za prikaz lokacije na Google marketu za programere koje Vam nudi Google, možete da pratite koliko se puta Vaša aplikacija preuzima u kojoj državi za razne vremenske intervale. Ovo je veoma korisna informacija, jer Vam ukazuje na to gde imate više šanse da poboljšanjem nekih karakteristika izbijete na sam vrh kategorije. Dodavanje prevoda opisa aplikacije na jezik te države, pravljenje dodataka u aplikaciji na tom jeziku i objavljivanje odgovarajućih slika može takođe da pomogne zauzimanju bolje pozicije.

Obratite pažnju šta Vam Google savetuje da uradite – optimizacija – i ako ste u mogućnosti ispoštujte to. Slike za tablete od 10 inča, 7 inča i mobilne telefone treba objaviti posebno, kao i video o Vašoj aplikaciji. Ako nemate sajt, obavezno napravite jedan, ako nemate mogućnost za plaćeni sajt, otvorite stranu u okviru neke socijalne mreže (facebook na pr.)  ili kao poddomen nekog sajta (wordpress na pr.) i tamo unesite više sadržaja o Vašoj aplikaciji, onako kako Vam odgovara.

Sve ove radnje treba shvatiti kao pripremu za uspešan start pre objavljivanja aplikacije. Kada ih unapred odradite, možete da pristupite kvalitetnije najvažnijoj fazi koja vodi do uspeha u ostvarivanju zarade aplikacije – fazi koja se zove ‘Marketing’. Bez marketinga, Vaša aplikacija ma koliko dobra bila,  prepuštena je sreći, a retko koja aplikacija postigne željeni cilj na sreću.

Android Zarada – Pravilan Početak

 

Android Zarada

 Android Zarada – Uvod

Android Zarada – Pravilan Početak

Android Zarada – Saveti Za Optimizaciju

Android Zarada – Reklame

Android Zarada – Monetizacija

Android Zarada – Marketing

јан 122015
 

Android Zarada Uvod!

Pametni telefoni, tablet računari, a od skoro i pametni televizori čiji se rad zasniva na android operativnom sistemu (u daljem tekstu androidi) su postali najpopularniji uređaji danas. Sve je veći broj korisnika koji se opredeljuje da ih koristi. Jeftina cena, laka upotreba i kvalitetne performanse uz najbrži razvoj u odnosu na konkurenciju su najvažniji faktori koji su doveli do toga da se mnogi korisnici odluče za androide. Ogroman broj aplikacija i igara (u daljem tekstu aplikacija) i to besplatnih koje su u ponudi za android je jos jedna od prednosti u odnosu na konkurenciju. Međutim postavlja se pitanje: ako je aplikacija besplatna, koja je korist izdavača da je nudi svima? Na koji način izdavači – programerski timovi zarađuju, kada krajnji korisnici ne plaćaju ništa? Odgovor je prost – pomoću oglasa – reklama. Mnogi korisnici se bune što se u toku korišćenja aplikacija pojavljuju reklame. Ali to je ustvari cena za korišćenje besplatne aplikacije – da vidite reklamu. Vi možete da je samo isključite ako Vam smeta ili Vam se ne sviđa, a možete da budete fer i da je kliknete ponekad, i zaradite koji cent izdavaču aplikacije, a ujedno i firmi koja ugovara reklame – obično Google.

Kako to funkcioniše? Google nudi firmama prikazivanje reklama koje one žele. Ugovora se cena po pregledu koji se obično priznaje kada neko klikne na reklamu. Reklame mogu biti tekstualne, zvučne, slike ili video. Sve uglavnom funkcionišu na isti način.

Primer!

Neka firma na primer uplati 100€ na Google račun. Ona izabere vrednost od 0.02€ po prikazu jedne reklame. Kada Vi uključite aplikaciju, Google u zavisnosti od toga koja je apkikacija u pitanju i lokacije gde se nalazite, u predviđenom trenutku pojavljuje jednu od reklama. Ako ne kliknete na reklamu ili je isključite ništa se ne dešava i prikaz se ne računa – ne priznaje. Ako kliknete na reklamu, firmi iz gore navedenog primera se smanjuje sa računa predviđena cena prikaza jedne reklame od 0.02€. Ovaj iznos se deli prema odnosu koji je predviđen između Google firme i izdavača aplikacije na primer po 0.01€ svakom. Vi tj. korisnici niste oštećeni, a svi su zadovoljni. Firma se nada da će da ostvari neku korist – prikaže Vam neku informaciju ili proda Vam nešto na primer. Google i izdavač su podelili dogovorenu vrednost klika. Svi su zadovoljni. Dok postoji novac na računu – dok se ne potroše ovih 100€ Google će prikazivati ovu reklamu. U ovom primeru 5.000 puta. Nakon toga ova reklama prestaje da se prikazuje. Na ovaj način funkcioniše ostvarivanje zarade kod većine besplatnih aplikacija. U svetu je to prihvaćeno kao nešto sasvim normalno – kao sistem za informisanje i reklamiranje. Kod nas mnogi ovakav pristup vređaju, i beže od reklama kao da će da plate nešto ako ih kliknu, a nisu uneli ni žiro račun sa koga bi se mogao skinuti novac (na nekim uređajima je to obavezno). Čak pored toga ostavljaju i uvredljive komentare i daju loše ocene zbog reklama – i time samo odvraćaju druge korisnike da koriste te aplikacije, iako su one veoma kvalitetne. Ali takav je narod. Mnogi vole samo da napakoste, ometaju i omalovažavaju sve na šta naiđu, iako nemaju nikakve koristi od toga…

Nastavak!

Koja aplikacija će prikazati reklamu na koju postoji šansa da kliknete, zavisi od popularnosti aplikacije – broja korišćenja aplikacije. Što se više puta aplikacija preuzme odnosno pokrene, veća je šansa da se i klikne na reklamu koja je u njoj prikazana.

Postoje razni sajtovi i marketi – prodavnice za preuzimanje besplatnih aplikacija ili kupovinu aplikacija sa cenom. Reklamiranje aplikacija preko socijalnih mreža kao sto su facebook, google+, twitter, linkedln, tagged, hi5, myspace, flixter, instagram… je veoma korisno. Ali ako nemate veliki broj pratioca i unapred razrađenu strategiju informisanja krajnjih korisnika u problemu ste. Najvažnije je da Vaša aplikacija na Google marketu bude viđena na neki način. Google je predvideo pretragu aplikacija po ključnim rečima i prikaz po odgovarajućim kategorijama. Za svaku ključnu rec Google ima klasifikovanu listu aplikacija, koju prikazuje kada dobije upit. Ova lista se menja u određenim vremenskim intervalima (obično dnevno). Veoma je važno da za glavne ključne reči koje su vezane za aplikaciju, aplikacija bude na vrhu da bi dobila šansu da bude preuzeta i korišćena. Jos važnije od prikaza po ključnim rečima je prikaz aplikacija po kategorijama, jer je to najčešći način pretrage marketa radi preuzimanja aplikacija.

U zavisnosti od nekoliko faktora od kojih je najvažniji broj preuzimanja aplikacija, Google na svom sajtu vrši rangiranje aplikacija po kategorijama. Google svima nudi da preuzmu (ili kupe one koje nisu besplatne) aplikacije sa svog sajta – marketa. Svaka aplikacija je svrstana u neku od kategorija – muzika, karte, akcija… i rangirana je prema broju preuzimanja. Cilj svakog programera je da njegova aplikacija bude što bolje rangirana – da bi je videli slučajni korisnici koji gledaju šta je najpopularnije u nekoj kategoriji. Na to koju će aplikaciju izabrati utiče još mnogo faktora kao što su prosečna ocena, komentari drugih korisnika, dobro objašnjenje, dobar info sa slikama, info sa videom, glavna ikona i još mnogo toga.

Tekstovi!

Da bi došlo do preuzimanja aplikacije, nije dovoljno samo napraviti dobru aplikaciju. Mnoge dobre aplikacije ostaju nepopularne sa samo nekoliko desetina ili stotina preuzimanja. To nije dovoljno za ostvarivanje neke ozbiljne zarade. Naredni tekst je posvećen metodama za postizanje što boljeg mesta u Google marketu – metodama marketinga i objašnjenjima o mnogo bitnih stvari na koje treba obratiti pažnju.

Android Zarada Uvod

 

Android Zarada!

 Android Zarada Uvod!

Android Zarada – Pravilan Početak!

Android Zarada – Saveti Za Optimizaciju!

Android Zarada – Reklame!

Android Zarada – Monetizacija!

Android Zarada – Marketing!

нов 272014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

FLASH I PHP

 

FLASH MAHER – FLASH I PHP

 

Pošto Flash ima ograničenja u radu sa fajlovima i bazom podataka, da bi snimili ili učitali neki sadržaj sa interneta često je potrebno pozvati neki drugi programski jezik koji ima ugrađene i ove mogućnosti. Najpopularniji programski jezik koji se koristi za ovu namenu je ’PHP’ (Php Hypertext Preprocessor). Za razliku od Flash-a koji se izvršava na našem kompjuteru, php se izvršava na serveru, tako da je uz pomoć njega moguće raditi sa informacijama, koje se ne mogu nikako razotkriti – korisno za šifre.

Php je ’open-source software’ i besplatan je za upotrebu. Podržava rad sa bazama podataka raznih tipova: MySQL, Informix, Oracle, Sybase, Solid, PostgreSQL, Generic ODBC i druge. Jedan je od najrasprostranjenih programskih jezika za rad na serverima, i podržavaju ga skoro svi serveri. Da bi ostvarili komunikaciju sa php-om potrebno je osnovno znanje o ovom jeziku. Veoma dobra objašnjenja o tome kako programirati u programskom jeziku php se mogu naći na sajtu: http://www.w3schools.com/php/ gde se mogu naći objašnjenja i za druge programske jezike.

Povezivanje Flash-a i php-a nije komplikovano, ali postoje određena pravila koja se moraju poštovati. Postoji dva načina povezivanja sa programom na serveru koji radi u php-u – jednosmerna komunikacija i dvosmerna komunikacija.
1) Jednosmerna komunikacija
Kao i osnovni sadržaj koji se nalazi na nekoj adresi na internetu, Flash može da startuje i neki php fajl na internetu u svom ili u novom prozoru.
Na primer na adresi http://www.maher.rs/Examples/Php/Example_1.php se nalazi najprostiji program u php-u sa sledećim kodom:

<?php

$UserName = $_GET[“UserName”];

echo “Hi ” . $UserName . ” …”;

?>;

Ovaj kod se poziva iz AS3.0 na sledeći način:

import flash.net.*;

var InternetPath:String = “http://www.maher.rs/Examples/Php/Example_1.php”;

var UrlRequest:URLRequest = new URLRequest(InternetPath);

navigateToURL(UrlRequest, “_blank”);

U ovom primeru u istom prozoru u pregledaču interneta koji koristimo se startuje program sa date putanje. Pošto nismo poslali podatak ‘UserName’ php štampa izlaz: ‘Hi …’.
Naredba ‘navigateToUrl’ može da ima i drugi parameter koji određuje gde se izvršava navedeni php.

navigateToURL(UrlRequest, “_blank”);

Moguće opcije drugog parametra su: “_blank”, “_top”, “_parent” i “_self” (novi prozor, glavni prozor, prozor – roditelj i svoj prozor).
Osnovni model jednosmerne komunikacije sa slanjem podataka je sledeći:

import flash.net.*;

var InternetPath:String = “http://www.maher.rs/Examples/Php/Example_1.php”;

var Variables:URLVariables = new URLVariables();

Variables.UserName = “YourName”;

Variables.Password = “Password”;

var UrlRequest:URLRequest = new URLRequest(InternetPath);

UrlRequest.method = URLRequestMethod.GET;

UrlRequest.data = Variables;

var UrlLoader:URLLoader = new URLLoader();

UrlLoader.addEventListener(Event.COMPLETE, PhpAnswer);

try {

navigateToURL(UrlRequest);

}

catch (e:Error) {

// error

}

Metoda za slanje podataka u ovom slučaju je ‘GET’.
Na ovaj način Flash šalje podatke UserName i Password, koje php može da iskoristi za izvršavanje nekog zadatka – na primer kontrole prijavljivanja. Sada bi php ispisao na enranu: ‘Hi YourName …’.

Međutim ako želimo da dobijemo povratne informacije u isti Flash program, moramo se poslužiti predviđenim naredbama za to.

2) Dvosmerna komunikacija
Da bi se ostvarila dvosmerna komunikacija možemo koristiti primer za php na adresi http://www.maher.rs/Examples/Php/Example_2.php:

<?php

$UserName = $_POST[“UserName”];

$Password = $_POST[“Password”];

if($UserName == “Voja” && $Password == “123456”) {

$Answer = “Answer=Ok&Message=Welcome ” . $UserName . “!”;

}

else {

$Answer = “Answer=No&Message=Wrong data…”;

}

echo $Answer;

?>

Ovaj primer poziva sledeći kod iz AS3.0:

import flash.net.*;

var InternetPath:String = “http://www.maher.rs/Examples/Php/Example_2.php”;

var PostVariables:URLVariables = new URLVariables();

PostVariables.UserName = “Voja”;

PostVariables.Password = “123456”;

var UrlRequest:URLRequest = new URLRequest(InternetPath);

UrlRequest.method = URLRequestMethod.POST;

UrlRequest.data = PostVariables;

var UrlLoader:URLLoader = new URLLoader();

UrlLoader.addEventListener(Event.COMPLETE, ResponseHandler);

try {

UrlLoader.load(UrlRequest);

}

catch (event:Error) {

trace(“Internet error…”);

}

function ResponseHandler(event:Event):void {

UrlLoader.removeEventListener(Event.COMPLETE, ResponseHandler);

UrlLoader = URLLoader(event.target);

var PostVariables:URLVariables = new URLVariables(UrlLoader.data);

if(String(PostVariables.Answer) != “Ok” && String(PostVariables.Answer) != “No”) {

trace(“No answer from php…”);

}

else {

trace(PostVariables.Message);

}

}

Iz ovog primera može da se zaključi da AS3.0 šalje podatke UserName i Password, a php vraća podatke Answer i Message. Razlika od prvog postupka je u tome da se php program izvršava na serveru, bez da se otvara negde u nekom prozoru, a vraća podatke u AS3.0 u standardizovanim parovima: ime_1=vrednost_1&ime_2=vrednost_2… Zbog ovog standarda ne smete da koristite u povratnim informacijama znakove ‘&’ i ‘=’, sem za njihovu namenu.
Kada imate potrebu za bilo kojim izvršavanjem programa u php-u, obavezno koristite povratne informacije da bi znali da li je program u php-u izvršen.

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

нов 252014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE

 

FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE

 

Adobe Flash Professional ima predviđene mogućnosti objektno orijentisanog programiranja koje se odnose i na dizajn (često se naziva objektno orijentisani dizajn) i na kodiranje – programiranje.
OOP u AS3.0 nam olakšava kodiranje u AS3.0, jer se uz pomoć OOP stvaraju pregledniji i razumljiviji kodovi, koje je lakše moguće ispravljati i ponovo koristiti. OOP podrazumeva organizovanje programa u objekte – pakete koda koji mogu da imaju svoje podatke, svojstva, metode i događaje. Praćenje i korišćenje svakog paketa je lakše uz OOP pomoću jednog podatka – instance (kojoj je dodeljen taj paket) pomoću koje je moguće pratiti i menjati sve ono što je vezano za taj paket.
Uobičajeni zadaci koje treba poznavati u OOP su definisanje klasa i definisanje svojstava i metoda – funkcija. Njihovo korišćenje nakon pravilnog definisanja je lako.
Pri OOP se stalno koristi reč klasa (class) koja predstavlja jedan objekat koji ima definisanu strukturu – kod i definisano ponašanje. Klase mogu biti hijerarhiski organizovane, t.j. jedna klasa može da nasleđuje funkcionalnost iz druge. Atributi klasa su karakteristike koje najčešće ukazuju na privatnost svojstava i metoda klasa. Kao i kod simbola, za korišćenje klasa se koriste instance, koje moraju da imaju svoja jedinstvena imena.
Klasa (njen kod) se piše u okviru posebnog fajla sa ’.as’ ekstenzijom, a ne u okviru glavnog fajla sa ’.fla’ ekstenzijom. Sastoji se iz ključnog imena ’class’ nakon koga sledi jedinstveno ime klase i na kraju u okviru velikih zagrada ’{ /*code*/ }’ telo klase. To izgleda ovako:

class MyFirstClass {

trace(“Hello!”);

}

AS3.0 Vam dozvoljava da izaberete glavne atribute klase i to:
internal (klasa vidljiva u okviru sopstvenog paketa – osnovna vrednost)
public (klasa vidljiva svuda)
dinamic (klasa koju je moguće menjati programski)
final (klasa ne moža da bude izvršena iz drugih klasa)

ActionScript fajl ’.as’ mora da ima jednu javno vidljivu definiciju klase označenu sa ’public class’, koja se piše u okviru paketa koji sadrži ključnu reč ’package’ i telo u okviru velikih zagrada ’{ }’. Osnovni izgled bi bio sledeći:

package {

public class MyFirstClass {

trace(“Hello!”);

}

}

Da bi ovaj paket funkcionisao potrebno je da se snimi u istom folderu u kome je i ’.fla’ fajl sa jedinstvenim imenom paketa ’MyFirstClass.as’ u ovom slučaju. Da bi pozvali ovaj paket iz glavnog ’.fla’ fajla potrebno je da u njemu unesete kod za uvoženje ovog paketa (import MyFirstClass;) i da formirate jednu instancu kao klasu:

var MyInstance: MyFirstClass = new MyFirstClass();

Postupak je sličan kreiranju bilo kog podatka ili funkcije:

var MyTraceFunction:Function = function () { trace(“Hi!”); }

To se zajedno kodira na sledći način:

import MyFirstClass;

var MyInstance:MyFirstClass = new MyFirstClass();

AS3.0 Vam dozvoljava da u okviru jednog paketa imate više klasa, koje su vidljive klasama iz ovog paketa, dok je samo glavna klasa ’public’ vidljiva svuda.

package {

public class MyFirstClass {

trace(“Hello!”);

var MySecondInstance:MySecondClass = new MySecondClass()č

}

}

class MySecondClass {

trace(“Hi again!”);

var MyThirdInstance:MyThirdClass = new MyThirdClass();

}

class MyThirdClass {

trace(“Hi, hi, hi!”);

}

Dinamičke klase dopuštaju da im se dodaju programski nove osobine.

package {

public dynamic class MyFirstClass {

trace(“Hello!”);

}

}

Novi ’.fla’ kod:

import MyFirstClass;

var MyInstance:MyFirstClass = new MyFirstClass();

MyInstance.NewValue = “Working…”;

trace(MyInstance.NewValue);

Atributi podataka, svojstava i metoda klase mogu biti:
internal (osnovna vrednost – vidljivo u okviru paketa)
private (vidljivo samo u okviru klase)
public (vidljivo svuda)
protected (vidljivo samo u okviru iste klase i izvedenih klasa)
static (navodi pripadnost klasi)
UserDefinedNamespace (prilagođeno ime koje definiše korisnik)

Možemo definisati podatke:

public var VisibleValue:String = “Use from .as & .fla file.”;

private var PackageValue:String = “Use only from .as file.”;

Slično kao i podaci i metode ili funkcije klase mogu biti:
internal (osnovna vrednost – vidljivo u okviru paketa)
private (vidljivo samo u okviru klase)
public (vidljivo svuda)
protected (vidljivo samo u okviru iste klase i izvedenih klasa)
static (navodi pripadnost klasi)
UserDefinedNamespace (prilagođeno ime koje definiše korisnik)

Kao i ranije funkcije u okviru klase mogu biti definisane na dva načina:

1) public function Example() { /* code */ }

2) public var Example:Function = function () { /* code */ }

Isto važi i za ulazne i izlazne vrednosti funkcija.

AS3.0 dopušta ne samo zamenu javnih vrednosti podataka klasama, već i zamenu metoda – funkcija uz pomoć naredbe ’override’. U sledećem primeru je objašnjeno izračunavanje površine objekta preko klase ’Answer’, s tim da se navodi kojoj klasi objekt pripada ’Square’ ili ’Circle’. Kada se navede kojoj klasi objekt pripada, odgovarajuća klasa menja funkciju klase ’Answer’.

OverrideExample.fla

import Answer;

import Circle;

import Square;

var Object_1:Circle = new Circle();

trace(Object_1.Value(5)); // 78.53981633974483

var Object_2:Square = new Square();

trace(Object_2.Value(5)); // 25

Answer.as

package {

public class Answer {

public function Value(InputValue:Number):Number {

return NaN;

}

}

}

Circle.as

package {

import Answer;

public class Circle extends Answer {

override public function Value(Radius:Number):Number {

return (Radius * Radius * Math.PI);

}

}

}

Square.as

package {

import Answer;

public class Square extends Answer {

override public function Value(Length:Number):Number {

return (Length * Length);

}

}

}

Kada se vidi ovaj primer sve izgleda tako prosto, ali retko ko uspe da oformi izvršenje ovih skripti, jer su na internetu mnoge informacije nepotpuno objašnjene.
U slučaju da imate više ’.as’ skripti i da želite da ih organizujete u foldere, možete i to da uradite uz navođenje putanje ’.fla’ fajlu gde se nalazi željeni ’.as’ fajl. Putanja se ne odvaja pomoću ’/’ već pomoću ’.’ i navodi se na sledeći način:

import Folder_1.Folder_2.Folder_3.File_2;

import Folder_1. File_1;

Odgovarajući paketi ’File_1.as’ i ’File_2.as’ moraju imati u sebi istovetne putanje iza ključne reči ’package’.

File_1.as

package Folder_1 { /* */ }

File_2.as

package Folder_1.Folder_2.Folder_3 { /* */ }

Moguće je i importovanje svih ’.as’ fajlova iz jednog direktorijuma, ako se napiše kod na sledeći način:

import Folder_1.Folder_2.Folder_3.*;

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

нов 102014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

ANIMACIJA

 

FLASH MAHER – ANIMACIJA

 

Da prvo odgovorimo na pitanje šta je to animacija? Animacija bi u prevodu mogla značiti kretanje, davanje života – oživljavanje statičnih slika. Naš cilj je da promenom statičkih slika učinimo da izgleda da se likovi kreću – menjaju kao da su živi. Što smo mi više spretniji to animirano kretanje izgleda realnije. Ne moraju objekti da se kreću da bi postigli željeni efekat. Oni mogu da menjaju oblik, izgled, boju ili neko drugo svojstvo, da bi se postigao odgovarajući cilj. Još dok nije postojao ni TV, veoma uspešno su animirani pokreti crtanjem pojedinačnih listova, i brzim promenama istih je nastajala iluzija kretanja. Animacija se i na TV-u izvršava na sličan način, a naše oko ne stiže da vidi promene statičnih slika, već nam se čini da je sve živo.

Flash ima definisanu pozornicu ‘stage‘ preko koje se prikazuju frejmovi koji nam omogućavaju da stvaramo animacije. Frejmovi (Frames)bi predstavljali slike, koje možemo da kreiramo predviđenim opcijama za dizajniranje iz Flash-a, a možemo i da im menjamo sadržaj koristeći AS3.0. Kao u prethodno navedenom primeru, frejmovi se smenjuju jedan za drugim, a mi imamo kontrolu kojom brzinom se to izvodi i kojim redosledom se prikazuju frejmovi. Ne moraju se frejmovi smenjivati po redu kao što su prikazani na vremenskoj liniji. Uz pomoć AS3.0 Flash nam daje mogućnost da izaberemo koji će sledeći frejm po redu biti prikazan. I ne samo jedan frejm! Vremenska linija (TimeLine) nam omogućava da stvaramo animaciju u više slojeva (Leyers), a u okviru svakog sloja se nalaze frejmovi. To znači da se u istom trenutku prikazuje frejm pod izabranim rednim brojem sa svakog sloja. Svaki frejm ima svoj prioritet za prikaz, i uvek se prikazuju frejmovi jedan ispred drugog po prioritetu, čime može da se veoma lako stvori utisak bližih i daljih obrjekata. Moguće je i da se na jednom istom frejmu duže zadrži po želji, jer se u AS3.0 često koriste i naredbe za crtanje u 2 i 3 dimenzije, pomoću kojih je moguće stvoriti realne animacije.

Istraživanjem je određeno da ljudi posmatrajući ekran već preko 24 frejmova prikazanih u sekundi imaju osećaj da su animacije stvarne, i ne primećuju da se slike menjaju po slajdovima. Što je veći broj frejmova promenjen u sekundi, animacije izgledaju prirodnije, ali obratite pažnju na to da kompjuteri imaju procesore sa limitiranom brzinom, tako da u zavisnosti od složenosti programa, može da dođe do preskakanja nekih delova slike i treperenja. Zato obratite pažnju na izbor brzine menjanja frejmova, a preporuka je da to bude od 12 – 30 po sekundi.

Simboli, instance, svojstva i metode!

Simbol može biti bilo koji objekt, grafika ili dugme ili bolo koja kombinacija. Pri konvertovanju nekog objekta u simbol biramo tip simbola (Movie Clip – film, Button – dugme ili Graphics – grafika), u zavisnosti od zahteva koji treba da izvrši. Da bi simbol bio upotrebljiv u kodu moramo da mu dodelimo ne samo ime nego i klasu koja se koristi u AS3.0, a to se radi tako što uključimo naprednu opciju ’Advanced’, selektujemo ’Export for ActionScript’ i izaberemo i jedinstveno ime klase u polju ’Class’. Bilo koji objekat kada pretvarimo u simbol, pojavljuje se u biblioteci simbola koja se vidi u prozoru ’LIBRARY’. Simbole kreiramo ručno ili kopiramo iz drugih ’fla’ fajlova, a mogu biti i kompajlirani drugim ’fla’ fajlom, pa da samo navedemo putanju do njih na predviđeno mesto. Imaju mogućnosti i animacije i kodiranja kao i glavni ’fla’ fajl. Njihova moć je velika, i veoma je važno razumeti minimum osnovni deo mogućnosti koje nam pružaju.

Njihove kopije kojima se služimo pri programiranju i koje se prikazuju kada se reprodukuje sadržaj kroz Flash Player se nazivaju ’Instance’. Jedan simbol može da ima više aktivnih kopija – instanci.
Svaka instanca ima svoja svojstva – osobine ili karakteristike, a može da ima i metode – akcije koje izvršava. Svaka instanca ima svoje jedinstveno ime, a u prozoru ’PROPERTIES’ su prikazane njene osobine, koje mogu biti različite zavisno od tipa simbola čija je kopija data instanca. Važno je razumeti da možemo da menjamo izgled i osobine svake instance posebno, i time ne utičemo na glavni simbol, a da kada menjamo osobine i izgled simbola, utičemo na sve instance – kopije tog simbola. Svojstva instanci se definišu i menjaju tako što se između imena instance i svojstva stavlja tačka ’.’ koja služi kao separator i pomaže AS3.0 da definiše mapu ili putanju da bi se data komanda izvršila.

Specijalna osbina AS3.0 je to da svojstva objekata ne moraju da budu samo podaci, već mogu da budu i funkcije ili drugi objekti. Ovo je specifičnost objektno orijentisanog programiranja. AS3.0 kod može da odradi poslove višeg nivoa od običnih programskih jezika.

Metode su instrukcije koje ukazuju da nešto treba da se uradi. Oni obično zahtevaju parametre u okviru malih zagrada, koji dodatno definišu pravila za izvršavanje metoda.

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher

нов 052014
 

FLASH MAHER

 

Adobe Flash Professional – Univerzalna knjiga

ACTION SCRIPT 3.0

 

MASKA

 

FLASH MAHER – MASKA

 

Maska je samo jedna od osobina koje su veoma dobro urađene programom Adobe Flash Professional. Masku je moguće uraditi i iz vremenske linije promenom osobine lejera u ’Mask’ i uz pomoć kodiranja. Prva metoda sa dodatkom OOP loadera i kodiranog simbola je prikazana u narednom primeru. Linkovi slika koje se smenjuju su zapisani u ’XML’ fajlu. Takođe su u njemu podaci i o brzini izbleđivanja slike, koeficijentu izbleđivanja slika i dužini trajanja pauze do zamene postojeće slike novom. U ovom primeru se vidi da sem linkova, skoro sve što treba da se podesi možemo da definišemo u ’XML’ bazi, i na taj način olakšamo testiranje programa pri raznim vrednostima podataka.

Primer:

import flash.geom.*;

import flash.filters.*;

import flash.display.*;

import flash.events.*;

import flash.text.*;

import flash.net.*;

import PictureLoader;

var Photos:Array = new Array();

Photos[0] = new MovieClip();

var Text:TextField = new TextField();

Text.width = Text.height = 250;

Text.background = Text.selectable = false;

Text.wordWrap = true;

var FontTextFormat:TextFormat = new TextFormat(“Georgia”, 42, 0xffff00, true, false, false, null, null, “center”);

Text.defaultTextFormat = FontTextFormat;

var FilterShadow:DropShadowFilter = new DropShadowFilter();

var FilterGlow:GlowFilter = new GlowFilter(0x333333, 0.7, 10, 10);

Text.filters = [FilterShadow, FilterGlow];

Text.text = “And\nyou are\ncertainly\ngood!!!”;

Photos[0].addChild(Text);

addChild(Photos[0]);

var OldId:int = 0;

var NewId:int = 1;

var MaxId:int = 0;

var MainXml:XML = new XML();

var XMLLoader:URLLoader = new URLLoader();

XMLLoader.addEventListener(Event.COMPLETE, CompleteHandler);

XMLLoader.load(new URLRequest(“Photos.xml”));

function CompleteHandler(event:Event):void {

XMLLoader.removeEventListener(Event.COMPLETE, CompleteHandler);

MainXml = new XML(event.target.data);

for each(var Picture in MainXml..Picture) {

MaxId += 1;

Photos[MaxId] = new MovieClip();

var NewPictureLoader:PictureLoader = new PictureLoader(Photos[MaxId], String(Picture.Name));

if(MaxId == 2) {

StartNextPhotos();

}

}

}

function StartNextPhotos():void {

Photos[NewId].alpha = 0;

addChild(Photos[NewId]);

var WaitTimer:Timer = new Timer(Number(MainXml.Speed));

WaitTimer.addEventListener(TimerEvent.TIMER, NextPicture);

WaitTimer.start();

function NextPicture(event:TimerEvent):void {

Photos[OldId].alpha -= Number(MainXml.AlphaStep);

Photos[NewId].alpha += Number(MainXml.AlphaStep);

if(Photos[OldId].alpha <= Number(MainXml.AlphaStep)) {

WaitTimer.removeEventListener(TimerEvent.TIMER, NextPicture);

WaitTimer.stop();

Photos[NewId].alpha = 1;

OldId = NewId;

NewId == MaxId ? NewId = 0: NewId ++;

setTimeout(StartNextPhotos, Number(MainXml.Pause));

}

event.updateAfterEvent();

}

}

Simbol ’MainMask’ ima svoj kod:

var RotateTimer:Timer = new Timer(30);

RotateTimer.addEventListener(TimerEvent.TIMER, RotatePicture);

RotateTimer.start();

function RotatePicture(event:TimerEvent):void {

this.rotation += 5;

event.updateAfterEvent();

}

Dodatni fajl u AS3.0 kodu je ’PictureLoader.as’ gde se vidi prost primer OOP:

package {

import flash.display.*;

import flash.events.*;

import flash.geom.*;

import flash.net.*;

public class PictureLoader {

public function PictureLoader(UniObject:MovieClip, Link:String):void {

var MyUILoader:Loader = new Loader();

MyUILoader.load(new URLRequest(Link));

MyUILoader.contentLoaderInfo.addEventListener( Event.COMPLETE, CompleteHandler);

function CompleteHandler(event:Event):void {

MyUILoader.contentLoaderInfo.removeEventListener( Event.COMPLETE, CompleteHandler);

UniObject.BitMap = Bitmap(MyUILoader.content);

UniObject.addChild(UniObject.BitMap);

}

}

}

}

I konačno ’Photos.xml’ je sledećeg koda:

<?xml version=”1.0″ encoding=”utf-8″?>

<Store>

      <Speed>50</Speed>

      <Pause>3000</Pause>

      <AlphaStep>0.05</AlphaStep>

      <Picture>

                  <Name>Picture1.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture2.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture3.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture4.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture5.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture6.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture7.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture8.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture9.jpg</Name>

      </Picture>

      <Picture>

                  <Name>Picture10.jpg</Name>

      </Picture>

</Store>

Kao kod simbola ’MainMask’, svaki simbol može da ima svoj kod. Može da se koristi i animacija i kodiranje svakog simbola posebno, a moguća je i komunikacija između skripti koje su pisane u simbolima, tako da su mogućnosti koje AS3.0 nudi sa simbolima izvanredne.

Drugi primer uz korišćenje samo AS3.0 koda:

import flash.geom.*;

import flash.display.*;

import flash.events.*;

import flash.net.*;

import PictureLoader;

var Photos:MovieClip = new MovieClip();

var PhotosLoader:PictureLoader = new PictureLoader(Photos, “Picture1.jpg”);

addChild(Photos);

var CircleMask:Sprite = new Sprite();

CircleMask.graphics.beginFill(0x000000);

CircleMask.graphics.drawCircle(100, 100, 50);

CircleMask.graphics.endFill();

addChild(CircleMask);

Photos.mask = CircleMask;

Photos.addEventListener(MouseEvent.MOUSE_DOWN, StartDrag);

Photos.addEventListener(MouseEvent.MOUSE_OUT, StopDrag);

Photos.addEventListener(MouseEvent.MOUSE_UP, StopDrag);

function StartDrag(event:MouseEvent):void {

CircleMask.startDrag();

}

function StopDrag(event:MouseEvent):void {

CircleMask.stopDrag();

}

U ovom primeru se poziva isti ’PictureLoader.as’ za učitavanje jedne slike. Moguće je i pomeranje maske mišem komandom ’startDrag()’.

 

FLASH MAHER!
FLASH MAHER – UVOD!
FLASH MAHER – OSNOVNI PODACI!
FLASH MAHER – OPERATORI I USLOVNE NAREDBE!
FLASH MAHER – FUNKCIJE!
FLASH MAHER – DOGAĐAJI!
FLASH MAHER – FILTERI!
FLASH MAHER – GRAFIKA!
FLASH MAHER – MASKA!
FLASH MAHER – ANIMACIJA!
FLASH MAHER – OPP – OBJEKTNO ORIJENTISANO PROGRAMIRANJE!
FLASH MAHER – FLASH I PHP!

VojaMaher