BlackBerry, PortfolioFebruary 18, 2012

Square Cam, Simple Photo Camera App for BlackBerry PlayBook – Yesterday, My app Square Cam for BlackBerry PlayBook tablet was approved by BlackBerry App World Team and now it’s already available for free download at App World. Square Cam is simple photo camera application with five basic filters that you can apply to your photos after you’ve taken a photo using camera.

Square Cam for PlayBook

App World : http://appworld.blackberry.com/webstore/content/85997/?lang=en

Here is the screenshots of Square Cam for PlayBook tablet :

Photo camera app for PlayBook

Playbook app

Cute camera app for playbook

Update : Wow… amazing! more than 1500 total downloads on second days after Square Cam released at BlackBerry App World :)

Best photo camera app for PlayBook

Blogsome, Tips & Trik, Weblog, WordpressFebruary 17, 2012

Disable Fungsi Pencarian di Blog WordPress – Beberapa hari yang lalu saya dapat email dari web hosting tempat saya menyewa. Email itu lagi-lagi berisi tentang pemberitahuan kalau akun website saya akan disuspend sementara karena dianggap memberatkan server. Saya jadi bertanya-tanya, kok sering banget kena suspend padahal saya tidak menggunakan plugins wordpress yang aneh-aneh seperti STT2 atau plugins lainnya yang terkenal memberatkan kinerja server hosting. Akhirnya beberapa plugins wordpress di blog saya pun saya copot karena mungkin akibat mereka server hosting jadi berat. Tapi lagi-lagi dapat email pemberitahuan kalau akun website disuspend oleh pihak web hosting.

Disable fungsi pencarian wordpress

Arghhh… berarti bukan plugins wordpress penyebabnya. Setelah saya kontak pihak web hosting, mereka bilang karena pengunjung blog banyak jadi bisa berakibat memberatkan server hosting. Tapi saya heran, masak cuma karena pengunjungnya banyak terus disuspend dan dianjurkan pindah ke VPS. Hihihi… satu blog aja masak harus pake VPS, berat diongkos dunk :p

Memang sih, pengunjung blog ini banyak karena saya mengalihkan traffic blog di blog lama (zawa.blogsome.com) ke sini. Nah, saya curiganya kenapa blog ini bisa memberatkan server mungkin ya akibat ulah blog lama zawa.blogsome.com. Bukan karena traffic kunjungannya sih sebenarnya, tapi karena di blog zawa.blogsome.com tersebut di postingan blog saya sering menggunakan link manual ke searching untuk menggantikan peran tag link. Kenapa saya dulu melakukan hal itu? Hmmm karena engine blogsome menggunakan versi wordpress yang lama dan tidak mempunyai fitur tag. Saya mengakali fitur tag tersebut dengan menggunakan fitur searching yang secara hasilnya hampir mirip. Bedanya cuma kalo tag link proses untuk menampilkan data lebih cepat karena hanya postingan kita yang sudah diberi tag/label tertentu yang akan ditampilkan. Dan hal ini tentunya tidak menghabiskan kerja server hosting yang tinggi.

Nah, bandingkan dengan menggunakan fitur searching. Untuk menampilkan data hasil searching maka akan dilakukan pencarian ke seluruh postingan kita sesuai dengan kata kunci yang telah kita buat di manual link postingan dimana mengarah ke fitur searching. Proses ini tentu saja menghabiskan kerja server hosting yang tinggi karena harus membandingkan kata satu per-satu sesuai kata kunci hingga hasil pencarian selesai. Mungkin kalau penggunaan fitur searching ini tidak terlalu sering maka tidak akan berakibat buruk. Tapi bagaimana jika hal ini sering dilakukan oleh server hosting dengan traffic kunjungan yang tinggi? Hahaha… tentu saja akan berpengaruh ke tingginya kinerja server hosting.

Blog ini terkena imbas dari fitur searching karena saya mengimport blog zawa.blogsome.com ke sini dan menggunakan plugins wordpress find replace untuk merubah semua link yang mengarah ke zawa.blogsome.com menuju blog.zanuzawa.com. Tentu saja fitur searching linknya juga akan mengarah ke blog ini. Saya mengasumsikan bahwa inilah penyebab akun web saya disuspend karena mengakibatkan kerja server hosting menjadi tinggi. Kemudian saya mengambil keputusan untuk disable fitur pencarian di blog. Secara default setahu saya fitur menonaktifkan/disable searching blog tidak tersedia di wordpress, jadi harus menggunakan plugins tertentu atau dengan cara mengakali programming di file functions.php yang ada di themes. Sekedar info, menghilangkan form pencarian di blog wordpress tidak berarti fungsi searching akan otomatis nonaktif/disable karena kita masih bisa mengakses fungsi pencarian melalui link seperti : namablog.com/?s=keyword atau namablog.com/search/keyword.

Untuk menonaktifkan/disable fungsi searching blog, saya lebih senang menggunakan trik mengakalinya di file functions.php yang ada di themes. Trik ini saya dapatkan dari WPBeginner.com. Caranya pun cukup mudah, cukup buka file functions.php di directory themes. Kemudian masukkan kode php berikut :

function fb_filter_query( $query, $error = true ) {
if ( is_search() ) {
	$query->is_search = false;
	$query->query_vars[s] = false;
	$query->query[s] = false;
	if ( $error == true )
		//dialihkan ke halaman 404
		$query->is_404 = true;
		//bisa diganti dengan mengalihkan ke halaman depan dll
		//$query->is_home = true;
	}
}
add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', 'return null;' ) );

Cara kerja dari kode di atas adalah menghilangkan semua query pencarian yang ditujukan ke blog, kemudian mengalihkannya ke halaman 404 atau halaman dimana user tidak menemukan data apapun di blog kita. Sebenarnya bisa saja dialihkan ke halaman blog lainnya tidak harus ke halaman 404. Misal diarahkan ke halaman depan, halaman arsip blog dll.

Bagi pengguna blog di blogsome, untuk mengarahkan traffic blog ke blog yang baru cukup mudah asalkan sama-sama menggunakan platform wordpress. Kenapa harus wordpress? karena secara URL permalinknya bisa kita setting sama. Yang beda mungkin cuma nama domain blognya sehingga memudahkan untuk redirect menggunakan kode javascript+smarty ataupun meta refresh. Berikut kode javascript+smarty dan meta refresh untuk redirect blog di blogsome.

<script type=’text/javascript’>
window.location.href=’http://namablogmu.com{$smarty.server.REQUEST_URI}’;
</script>

atau dengan cara meta refresh :

<meta http-equiv=’REFRESH’ content=’0;url=http://namablogmu.com{$smarty.server.REQUEST_URI}’ />

Nanti kalau sudah menggunakan trik-trik kayak di atas dan ternyata masih juga disuspend sama pihak web hosting providernya, ga tahu lagi deh mau diapain blog ini… *mewek*

Coolsites, TechnoFebruary 5, 2012

Baik komputer maupun laptop saya sudah lama banget tidak terinstall Microsoft Word, kemungkinan sejak kuliah jaman skripsi-an dulu hehehe. Ini soalnya saya tidak begitu membutuhkan Microsoft Word di kehidupan sehari-hari karena memang kerjaan saya tidak berhubungan samasekali dengan surat-menyurat dll. Kalaupun terpaksa harus membuka dokumen dengan Microsoft Word, biasanya saya membukanya di BlackBerry PlayBook karena di tablet tersebut sudah terinstall aplikasi word dan excel (lebih tepatnya males install lagi di windows :p). Nah kali ini saya tidak akan membahas tentang text editor kantoran… Saya akan sedikit membahas tentang text editor untuk kegiatan programming. Dulu awalnya saya senang menggunakan Notepad untuk belajar nulis program, namun karena Notepad bersifat plain atau sangat sederhana banget (ga berwarna) kemudian saya beralih menggunakan Notepad++ (http://notepad-plus-plus.org). Hampir sama sih, tapi Notepad++ mempunyai banyak fitur tambahan yang berguna banget bagi para programmer (khususnya ada warna hurufnya :p).

Kemudian akhirnya ketemu dengan Sublime Text (http://www.sublimetext.com), text editor favorit saya untuk saat ini. Kenapa suka text editor ini? Pertama sih tampilannya yang sederhana tapi powerful. Kemudian fitur autocomplete textnya yang sangat membantu bagi programmer yang males nulis ulang text yang sudah pernah diketik sebelumnya :D. Di luar sana masih banyak lagi text editor yang cocok untuk kegiatan programming, misal Adobe Dreamweaver ataupun yang lebih spesifik ke bahasa program tertentu seperti Adobe Flash Builder/Flash Develop untuk programming berbasis actionscript dsb.

Sekarang tergantung selera kawan-kawan. Pengin pilih text editor sederhana tapi powerful atau lebih suka dengan text editor bawaan software besar kayak Dreamweaver dkk yang tentunya mempunyai fitur yang lebih mewah serta terintegrasi dengan fitur-fitur lainnya. Nah sekian dulu cerita singkat tentang software text editor terbaik menurut saya, apa software text editor terbaik menurut kamu? :p

Adobe Flash Tutorial, All About Flash, FlexJanuary 27, 2012

Global Variables in ActionScript 3 – In ActionScript 2 (AS2) we can easily access the global variable using _global.variableName, but unfortunately _global method is unavailable in ActionScript 3 (AS3). If you want to use global variables in Flash with ActionScript 3 (without using packages or classes) you can use ActionScript on your timeline like this :

Global Variable in AS3

ActionScript on frame 1 of root timeline :

var myPencil:Number = 3;
function say(what:String):void
{
	trace(what);
}

Make a movieclip and then on the timeline of a sub movieclip you can access the myPencil variable in root using ActionScript like this :

var globalVar:MovieClip = root as MovieClip;
trace(globalVar.myPencil); //3
globalVar.myPencil = globalVar.myPencil+4;
trace(globalVar.myPencil); //7

globalVar.say("hello world"); //hello world

//////////// or /////////////

trace(MovieClip(this.root).myPencil); //3
MovieClip(this.root).say("hello world"); //hello world

If your ActionScript 3 project using classes, you can simply create global variable using public static like this :

//Main.as
package {
	public class Main {
		public static var myPencil:Number = 3;
	}
}

//SomeClass.as
package {
	public class SomeClass {
		function SomeClass():void {
			trace(Main.myPencil); //3
			Main.myPencil = Main.myPencil+4;
			trace(Main.myPencil); //7
		}
	}
}

Blog dan BeritaJanuary 11, 2012

Gempa Aceh – Barusan dapat kabar dari Twitter dan Kompas telah terjadi gempa di Aceh dengan kekuatan 7,6 SR. Gempa di Aceh ini berpotensi tsunami. Berdasarkan informasi dari Badan Meteorologi Klimatologi dan Geofisika (BMKG) menunjukkan bahwa gempa Aceh ini berada di koordinat 2.32 LU, 92.82 BT. dengan kedalaman gempa 10 kilometer.

Dengan adanya gempa besar di Aceh ini BMKG telah mengeluarkan peringatan dini adanya potensi gelombang tsunami untuk wilayah Aceh, Sumatera Utara, dan sekitarnya. Semoga saja saudara-saudara kita di Aceh semua baik-baik saja tidak ada korban akibat gempa ataupun tsunami dari peristiwa alam ini. Mari berdoa untuk keselamatan mereka. #PrayforIndonesia

Update : di berita-berita televisi kekuatan gempa Aceh dini hari tadi adalah 7,1 SR menurut BMKG.

Adobe AIR, Adobe Flash, Adobe Flash Tutorial, All About FlashJanuary 10, 2012

Slider Bar with ActionScript 3 – Today I’m going to show you how to make a very simple Slider Bar in Adobe Flash Builder using ActionScript 3 (AS3) and movieclip assets.  Slider bar can be used in many ways in a mobile application or site. For example : to control visibility of movieclip, to control sound, or to adjust the value of a variable.

The first thing you need to do is create “SliderTrack_mc” and also “SliderDragger_mc” movieclips. Don’t forget to give class name “SliderTrack” for SliderTrack_mc movieclip and “SliderDragger” for SliderDragger_mc movieclip. Both of movieclips using base class flash.display.MovieClip. Save this swf file with name “assets.swf”.

SliderTrack MovieClip
SliderTrack movieclip.

SliderDragger MovieClip
SliderDragger movieclip.

Slider Bar ActionScript3
Class name of SliderDragger movieclip.

Slider Bar AS3 Flash
Class name of SliderTrack movieclip.

Slider bar
Preview Slider bar

Now, open the ActionScript editor. In this tutorial I’m using Flash Builder. Create new ActionScript class and then give class name “SliderBar”. Here’s the code of SliderBar class:

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;

	public class SliderBar extends Sprite
	{
		// Embed movieclip
		[Embed(source='assets.swf',symbol='SliderTrack')]
		private var SliderTrack:Class;
		[Embed(source='assets.swf',symbol='SliderDragger')]
		private var SliderDragger:Class;

		// Default sliderValue
		public var sliderValue:Number = 1;

		private var sliderTrack:Sprite = new SliderTrack();
		private var sliderDragger:Sprite = new SliderDragger();
		private var bounds:Rectangle = new Rectangle();

		public function SliderBar()
		{
			// Draggable area, left and right
			bounds = new Rectangle(sliderTrack.x,sliderTrack.y,sliderTrack.width,0);

			// Put sliderDragger position in right of sliderTrack
			sliderDragger.x = sliderTrack.width-1;

			// Put sliderTrack and sliderDragger in display list
			addChild(sliderTrack);
			addChild(sliderDragger);

			sliderDragger.addEventListener(MouseEvent.MOUSE_DOWN, SliderDown);
			sliderDragger.addEventListener(MouseEvent.MOUSE_UP, SliderUp);
			sliderDragger.addEventListener(MouseEvent.MOUSE_OUT, SliderUp);
		}

		protected function SliderUp(e:MouseEvent):void
		{
			sliderDragger.stopDrag();
			sliderDragger.removeEventListener(Event.ENTER_FRAME, Dragger);
		}

		protected function SliderDown(e:MouseEvent):void
		{
			sliderDragger.startDrag(true, bounds);
			sliderDragger.addEventListener(Event.ENTER_FRAME, Dragger);
		}

		protected function Dragger(e:Event):void
		{
			// sliderValue 0-1
			sliderValue = Math.round(sliderDragger.x*10/sliderTrack.width)*0.1;
		}
	}
}

Now you can make a new slider bar object like this:

var mySlider:SliderBar = new SliderBar();
mySlider.x = 200;
mySlider.y = 200;
addChild(mySlider);
trace(mySlider.sliderValue);
Blog dan Berita, Perjalanan di BumiJanuary 1, 2012

Acara tahun baru 2012 tadi malam kayaknya berlangsung meriah. Namun karena di tempat saya hujan deras, saya cukup tahun baru-an di kamar saja sambil tiduran main game Angry Birds di PlayBook. Mungkin karena suasananya mendukung untuk mengantuk, akhirnya malam tahun baru 2012 dilewati dengan tertidur di kamar. Sebelum jam 00.00 saya terbangun karena suara kembang api bersahut-sahutan dengan kerasnya, sehingga ketika lihat jam di hape sempat juga melihat detik-detik pergantian tahun dari 2011 ke 2012. Abis itu tidur lagi setelah sebelumnya membalas beberapa sms dari teman-teman yang ngucapin Selamat Tahun Baru 2012.

Saya sendiri sih sebenarnya biasa saja menanggapi moment tahun baru kali ini. Setidaknya mencoba flashback ke tahun 2011, hal-hal apa yang sudah saya lakukan dan mencoba memperbaikinya di tahun baru 2012 ini. Yah, tentunya dengan beberapa resolusi ke hal-hal yang intinya ke perubahan diri yang lebih baik serta semakin produktif menciptakan sesuatu yang berhubungan dengan minat saya di bidang mobile apps. Sesuatu banget… :p

Di Indonesia tahun baru 2012 secara waktu lebih dulu daripada di Amerika ataupun di Eropa. Setidaknya seolah-olah di Indonesia berasa di masa depan karena lebih dulu merasakan tanggal 1 Januari 2012 dibandingkan di Amerika dan Eropa. Seharusnya hal ini menjadikan Indonesia lebih maju karena sudah berada di masa depan lebih dulu dan bukan sebaliknya malah berkiblat di “hari kemarin” ke negara-negara barat :p

Ah, sudahlah… Yang penting di tahun baru 2012 ini kita semua senantiasa sehat dan terus berusaha untuk mewujudkan harapan-harapan yang sebelumnya belum tercapai. Selamat tahun baru 2012 ya temans :)

Adobe AIR, BlackBerryDecember 30, 2011

Access Rear Camera in BlackBerry PlayBook – If you want to create an application which uses a camera in BlackBerry PlayBook with Camera.getCamera(); function, by default we only able to access front camera. Inorder to get the rear camera in BlackBerry PlayBook you could try like this :

//rear camera
var cam:Camera = Camera.getCamera("1");

//front camera
var cam:Camera = Camera.getCamera("0");
Adobe Flash TutorialDecember 21, 2011

After searching on the internet about how to scrolling movieclip like iPhone-scroll, finally I found ActionScript snippet by svenjoypro that you can use it for your mobile app project.

Make a movieclip with instance name scroll_mc, it’s the movieclip that you want to scroll. Here is the code for scrolling movieclip :

var speed:Number;
var speedArray:Array;
var prevY:Number;
var DRAG:Number = 20;
var HEIGHT:int = 550;
scroll_mc.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
function onDown(evt:MouseEvent):void {
	speedArray = new Array(0,0,0,0,0,0,0,0,0,0);
	speed = 0;
	prevY = this.mouseY;
	stage.addEventListener(Event.ENTER_FRAME, onDownEnter);
	stage.addEventListener(MouseEvent.MOUSE_UP, onUp);
}
function onDownEnter(evt:Event):void {
	var sp = this.mouseY - prevY;
	scroll_mc.y += sp;
	if (scroll_mc.y < (HEIGHT-scroll_mc.height)) {
		scroll_mc.y = (HEIGHT-scroll_mc.height);
	} else if (scroll_mc.y > 0) {
		scroll_mc.y = 0;
	}
	speedArray.push(sp);
	speedArray.shift();
	prevY = this.mouseY;
}
function onUp(evt:MouseEvent):void {
	stage.removeEventListener(Event.ENTER_FRAME, onDownEnter);
	stage.removeEventListener(MouseEvent.MOUSE_UP, onUp);
	speed = 0;
	for (var i:int = 0; i<speedArray.length; i++) {
		speed += speedArray[i];
	}
	speed /= speedArray.length;
	addEventListener(Event.ENTER_FRAME, onEnter);
}
function onEnter(evt:Event):void {
	if (Math.abs(speed) < .5) {
		speed = 0;
	}
	if (speed < 0) {
		if (scroll_mc.y > (HEIGHT-scroll_mc.height) - speed) {
			scroll_mc.y += speed;
			speed -= speed/DRAG;
		} else {
			scroll_mc.y = (HEIGHT-scroll_mc.height);
			speed = 0;
		}
	} else {
		if (scroll_mc.y < 0-speed) {
			scroll_mc.y += speed;
			speed -= speed/DRAG;
		} else {
			scroll_mc.y = 0;
			speed = 0;
		}
	}
}

Source : http://www.actionscript.org/forums/archive/index.php3/t-262417.html

Perjalanan di Bumi, PicturesDecember 19, 2011

Playing Football with the Kids

This photo was taken while playing football with the kids :)