Indonesia Linux Conference 2012

No Comments

Indonesia GNU/Linux Conference (ILC) merupakan kegiatan tahunan berskala nasional, sebagai ajang bertemunya insan penggiat, pengguna, pemerhati dan vendor open source, khususnya sistem operasi GNU/Linux (baca: Linux). ILC yang awal mulanya sebagai ajang diskusi para penggiat dan aktivis GNU/Linux seluruh Indonesia, sekarang tidak hanya sekedar diskusi saja, tetapi sudah menjadi rangkaian kegiatan yang diawali dengan seminar, workshop, training, pameran dan pada akhir acara ditutup dengan diskusi.

ILC Malang Raya

Diskusi diikuti oleh para penggiat dan aktivis GNU/Linux dari seluruh Indonesia yang diwakili oleh organisasi-organisasi penggiat GNU/Linux seperti Kelompok Pengguna Linux Indonesia (KPLI), Linux User Grup (LUG), dan Kelompok Studi Linux (KSL). Kelompok-kelompok ini mewakili kalangan umum, hobiis, mahasiswa dan akademisi.

ILC sendiri dilaksanakan dengan harapan dapat mendorong pemanfaatan GNU/Linux di semua bidang baik di lingkungan rumah tangga, bisnis, pendidikan serta pemerintahan. Selain menjadi media sosialisasi dan advokasi GNU/Linux, ILC juga menjadi forum untuk membahas masalah-masalah dalam implementasi GNU/Linux dan menemukan serta sharing solusi bersama yang diharapkan bisa diterapkan secara regional maupun nasional.

Indonesia Linux Conference dilaksanakan pertama kali pada tahun 2006 di Kota Surabaya. Pada tahun ini Indonesia Linux Conference akan digelar di Kota Malang, acara ini nantinya akan menjadi konferensi linux tingkat nasional yang ketujuh kalinya. Indonesia Linux Conference kali ini diselenggarakan bersama Yayasan Penggerak Linux Indonesia (YPLI) dan Komunitas Linux Arek Malang (KOLAM) dibantu oleh rekan-rekan sesama aktivis Linux dan Open Source di daerah Malang Raya. Salah satu acara utama ILC 2012 adalah KPLI Meeting yang akan diikuti oleh ratusan peserta dari perwakilan seluruh KPLI dan komunitas linux dari seluruh Indonesia. Sebelum KPLI Meeting digelar, akan didahului dengan rangkaian acara berupa diskusi panel, lomba blog dan desain, serta workshop dan lomba hardening server.

Tujuan dari ILC 2012 ini adalah :
1. Memperluas pengenalan manfaat Linux dan Open Source kepada masyarakat.
2. Memberikan rekomendasi terhadap kebijakan pemerintah di bidang IT.
3. Meningkatkan konstribusi Indonesia dalam penggunaan dan pengembangan Linux dan Free Open Source Software (FOSS).
4. Meningkatkan pengembangan bisnis melalui pemanfaatan Linux dan FOSS.

Rangkaian Acara ILC 2012

1. Panel Discussion – 1 September

2. Linux Open Day – 2 September

3. Poster Design Contest – 2 September

4. Blogging Contest – 2 Agust – 2 Sept

5. Hardening Server – 8 – 9 September

6. KPLI Meeting – 14 – 16 September

Info lebih lengkap silahkan kunjungi : http://ilc.linux.or.id

Jangan lupa ikuti perkembangannya di : ilc 2012 malang

 

Repost from: http://regional.kompasiana.com/2012/07/12/indonesia-linux-conference-2012/

Menjadikan Javascript lebih Modular

No Comments

Modularisasi kode javascript bisa dilakukan dengan teknik module pattern. Teknik ini diperkenalkan oleh Douglas Crockfold, orang sama yang memperkenalkan JSON sebagai data interchange format. Sebenarnya tujuan utama dari teknik ini adalah menghindari penggunaan variabel global secara berlebihan. Sedikit variabel global yang kita ciptakan tentunya memiliki performa baik dari sebuah web aplikasi.

Dalam pemrograman javascript, baik variabel dan fungsi bersifat global atau publik, tidak ada scope private dan protected layaknya bahasa pemrograman lain seperti C, php, java. Tapi bukannya tidak bisa, kita bisa memberikan efek yang sama(scope variable) dengan memanfaatkan anonymous function dan single global variable yang nantinya juga memiliki efek sama dengan namespace.

Anonymous Function

(function () {
...
}());

Kode diatas merupakan bentuk dari anonymous function, ditambah dengan operator parentheses atau ‘()’ yg tujuan nya langsung meng-call anonymous function. Anonymous function merupakan bagian fundamental dari kode javascript, semua kode yang berada didalam fungsi merupakan kode tertutup(closure) yang tidak akan bisa diakses dari luar. Kode akan terlihat lebih bersih dan kekawatiran kode memiliki nama yang sama atau collisions objek/variabel akan kecil kemungkinannya.

Single Global Variable

var myApp = {}; // Definisi single global variable object
myApp.messageHello='Hello'; // Membuat variabel didalam objek
myApp.sayHello = function() { // Menciptakan objek method sayHello
console.log(myApp.messageHello); // Display properti objek di console
};
myApp.sayHello(); // Memanggil method objek

myApp merupakan single global variable yang mereferensikan sebuah objek. Efek dari teknik ini, variabel dan fungsi dalam objek akan aman dari modifikasi script laen diluar objek myApp dan pemborosan global variabel pun juga tidak akan terjadi.

Module Pattern

Dengan memahami anonymous function dan single global variable, kita bisa menentukan variabel-variabel mana yang bisa bersifat global dan mana yang cukup hanya diakses diwilayah fungsi/lokal saja. Bukan hanya itu, kode seperti ini dapat memiliki efek sama dengan saat kita bekerja dengan modul-modul kode yang independen. Berikut adalah contoh kode saat kita menggabungkan kedua teknik ini.

var MODULE = (function () {
var my = {},

privateVariable = 1;
function privateMethod() {
...
}

my.moduleProperty = 1;
my.moduleMethod = function () {
console.log('Private variable: '+privateVariable);
console.log('MODULE variable: '+my.moduleProperty);
};

return my;
}());
MODULE.moduleMethod();

MODULE adalah variabel global yang dibuat dengan anonymous function, dengan me-return objek my. Variabel yang berada langsung di bawah anonymous function memiliki sifat scope private sedangkan properti dan fungsi dari objek my, bisa diakses dari luar/publik, tentu saja dengan menyebutkan nama “modul” nya jika hendak mengaksesnya.

Hal ini sangat bagus, selain kode yang kita buat tampak seperti modular, ada banyak bentuk pengembangan dari teknik ini yang tentunya akan sangat bermanfaat saat kita berada di pemrograman front-end seperti nested namespacing dan lazy loading code. Dan berikut adalah manfaat dari apa yang bisa kita ambil dari module pattern yang saya kutip dari tulisan Brian Cray di blog-nya:

  • Scalable. Modules are isolated pieces of code that when well designed.
  • Team-ready. Building a large-scale javascript application is simpler with the module pattern.
  • Localized. Anonymous wrappers automatically create a new “namespace” for the whole module.
  • Cross-instantiation private variables.
  • Extensible. Want to dynamically add additional methods to a module? No problem.
  • Deferrable. Another advantage of its isolation and containment is that you can inject it on demand without worrying about its impact on other modules.

ODM(Object Document Mapping) FuelPHP

No Comments

Beberapa hari lalu saya ketemu dengan istilah ini, Object Document Mapping. Yah hampir mirip dengan istilah ORM (Object Relational Mapping) kan!!!. Tujuan dari kedua model ini sama saja, dia merepresentasikan data yang ada di database menjadi objek yang nantinya dipakai oleh programmer untuk berinteraksi dengan database. Kedua model ini hanya berbeda dari jenis database yang dipakai, kalo ORM biasa akan kita temui pada database yang berjenis RDBMS, nah kalo ODM ini untuk database yang berjenis document oriented kayak mongoDB.

Tidak seperti ORM, ternyata ODM ini masih belum dimasukkan ke dalam paket instalasi pada fuel meskipun penggunaan database nosql kayak mongodb ini sudah ada dalam dokumentasi framework ini. Setelah saya cari2, akhirnya ketemu sebuah package fuel untuk penggunaan ODM ini di link salah satu developer fuel yaitu phil.
https://github.com/philsturgeon/fuel-mongo-odm
Paket librari ini sebenarnya buatan Colin Mollenhour dan digunakan di kohana framework, tapi kemudian mungkin phil membuatnya agar bisa digunakan di fuel.

Mongodb ODM is a simple object wrapper for the Mongo PHP driver classes which makes using Mongo in your PHP application more like ORM, but without the suck. -Colin Mollenhour

Satu yang kurang dari librari ini yaitu dokumentasinya, baik phil maupun colin tidak menyediakan dokumentasi yang baik bagaimana menggunakannya. Kebanyakan saya mengetahui bagaimana pakainya sesudah saya melihat sourcenya langsung yang ditulis oleh colin. Tapi meskipun begitu bukan alasan untuk tidak menggunakan librari ini jika anda memutuskan bekerja dengan database mongodb di project anda. Satu yang menurut saya sangat baik adalah penggunaan table data gateway dan row data gateway untuk berinteraksi dengan mongodb dan lagi pemakaiannya yang sangat mudah.

Design Principles
- Don’t become overly complex. There are some features that could be implemented, but if they are not it is because they would increase the complexity too much, sacrificing elegance and usability.
- Keep Mongo schema-less. I like schema-less. Requiring schema’s in your model definitions is not schema-less. This library let’s you be schema-less.
- Follow Mongo driver convention. In many ways, using this library will be pretty similar to using the official driver.
- Do not add unnecessary overhead. Sure, it is not as fast as using the driver directly, but I’m quite sure you won’t notice the difference.
- Don’t Repeat Yourself. Very little code will be repeated while using this library.
- Reduce the number of database requests/updates. Prevent redundant requests and multiple updates to the same document.
- Choose your favorite design pattern. This library now supports using Mongo_Orm_Collection directly as a convenience wrapper, or choose between two ActiveRecord like patterns that resemble either the Table Data Gateway pattern or the Row Data Gateway pattern

Unit Testing pada Fuelphp

No Comments

Bagi saya, pekerjaan testing program merupakan pekerjaan yang membosankan. Selama ini saya biasanya hanya mencoba mengkondisikan program seperti ini itu, kemudian menjalankan program dan melihat hasilnya ada yang error atau kagak. Saya sadari cara ini akan memakan banyak waktu untuk hanya menemukan bug dari program yang kita buat, dan belum lagi perbaikan bug-nya.

testing

Debugging sucks

Apa yang membedakan programer yang baik dengan programer buruk? Programer yang baik akan menggunakan “test” untuk mencari kesalahannya sedini mungkin. Semakin cepat ditemukan kesalahan, maka semakin besar kemungkinan untuk memperbaikinya dengan cost yang sedikit. Itu sebabnya mengapa melakukan testing ketika software/website siap untuk dirilis sungguh merupakan sebuah hal yang bermasalah. -Garry, Computesta Blog

Membaca ulasan Fuel Framework 1.1 rc1 yang barusan direlease, dikatakan bahwa fuel versi ini support unit testing phpunit. Kemudian saya coba untuk mencari dokumentasinya dan ternyata belum dibuatkan oleh developernya, yang saya temukan hanya perintah untuk menjalankan unit test ini pada oil yang bisa sseperti ini

php oil t --group=Core /*Untuk testing code pada domain Core*/
php oil t --group=App /*Untuk testing code pada domain App*/
php oil t --group=Package /*Untuk testing code pada domain Package*/

Kalo kita lihat baris code yang ada di /fuel/packages/oil/classes/command.php, ternyata opsi t pada oil akan menjalankan perintah phpunit dengan beberapa parameter yang jadinya akan tampak seperti ini

phpunit -c "/var/www/MyProject/fuel/core/phpunit.xml" --group App /*untuk group App*/

Opsi c diatas akan memerintahkan phpunit untuk membaca file konfigurasi yang berada di /fuel/core/phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" stopOnFailure="false" bootstrap="bootstrap_phpunit.php">
 <php>
 <server name="doc_root" value="../../"/>
 <server name="app_path" value="fuel/app"/>
 <server name="core_path" value="fuel/core"/>
 <server name="package_path" value="fuel/packages"/>
 </php>
 <testsuites>
 <testsuite name="core">
 <directory suffix=".php">../core/tests</directory>
 </testsuite>
 <testsuite name="packages">
 <directory suffix=".php">../packages/*/tests</directory>
 </testsuite>
 <testsuite name="app">
 <directory suffix=".php">../app/tests</directory>
 </testsuite>
 </testsuites>
</phpunit>

Dari file konfigurasi terlihat bahwa –group=Core akan menjalankan semua test case yang berada pada folder /fuel/core/tests/, sedangkan –group=App akan menjalankan semua test case pada folder /fuel/app/tests/ dan begitu juga untuk group package akan menjalankan semua test case pada folder tests di tiap package.

Okeh dari sini, sudah jelas bahwa untuk menggunakan unit testing pada fuel framework, maka kita harus menginstall dulu phpunit nya.

Instalasi phpunit di ubuntu 10.10
PHPUnit adalah sebuah tool buatan Sebastian Bergmann (seorang pioner di bidang quality assurance dalam projek PHP) yang digunakan untuk testing pengembangan web php. Bagi seorang developer yang belum pernah membuat unit testing sebelumnya (seperti saya), PHPUnit API sangat mudah dipelajari dan digunakan.
Instalasi phpunit bisa dilakukan seperti ini

sudo apt-get install phpunit

Sayangnya perintah diatas akan menginstall phpunit tanpa paket PEAR, dan jika kita menginginkan agar oil fuel bisa mengaksesnya juga, maka jangan menginstall dengan cara ini. Install dulu paket pear nya kemudian jalankan perintah berikut untuk menginstall phpunit nya.

pear config-set auto_discover 1
sudo pear install pear.phpunit.de/PHPUnit --alldeps

Membuat TestCase untuk fuel
Berikut adalah contoh test case yang saya buat untuk menguji sebuah fungsi yang berada pada domain app/module fuel, dan test case ini harus diletakkan pada /fuel/app/tests/

//test.php
namespace FuelApp;
/**
* Test class tests
*
* @group App
* @group Test
*/
class Tests_Test extends TestCase{
/**
* Tests Test::signin()
*
* @test
*/
public function test_signin(){
Fuel::add_module('signin');
$val=SigninSignclass::display_message();
$this-&gt;assertEquals($val,'Welcome...');
}
}

Setelah itu jalankan test case dengan perintah berikut

php oil t --group=App

Yang perlu diperhatikan adalah penggunaan anotasi pada class TestCase (saya kurang tau tentang detail anotasi ini). Pada contoh hanya menguji apakah fungsi ‘display_message’ pada module Signin dan pada class Signclass memiliki keluaran ‘Welcome…’. Dengan cara ini anda bisa menguji fungsi-fungsi module apakah dia berfungsi seperti yang kita harapkan atau tidak.
Demikian apa yang bisa saya share tentang ini, dan saya juga berharap dokumentasi-nya bisa segera selesai agar kita bisa belajar lebih lanjut lagi tentang unit testing ini.

Menggunakan Shortcode pada Fuel Framework

1 Comment

Sebenarnya udah lama dapat nih package, tapi baru kali ini bisa coba2 menggunakannya. Sulit juga mempelajari bagaimana menggunakan package ini, itu karena pembuatnya tidak menyertakan catatan “how to” pada paketannya. setelah melihat beberapa source codenya, akhirnya ketemu juga cara pakenya dan berikut adalah langkah2 yang dapat kita ikuti:
pertama, download dan tempatkan pada folder packages fuel.

https://github.com/umefarooq/fuel_shortcode

 

kedua, tambahkan shortcode pada app/config.php untuk load otomatis package

'always_load'	=> array(
	'packages'	=> array(
			'orm',
			'auth',
			'shortcode',
		),
)

ketiga, untuk membuat sebuah fungsi shortcode dapat kita letakkan di file /packages/shortcode/class/codes.php, daftar kan fungsi yang kita buat sebagai static contohnya adalah sebagai berikut

public static function quotes_func($atts, $content=''){
	return '<div class="quotes">'.$content.'</div>';
}

keempat, kemudian daftarkan shortcode function yang barusan kita buat pada file /packages/shortcode/config/config.php.

return array(
    'codes'=>array(
     'tabgroup'=>'Codes::jqtools_tab_group',
     'quotes'=>'Codes::quotes_func',
 )
);

kelima, terakhir kita bisa test pada sebuah controller dengan cara seperti ini

$ouput=Shortcode::do_shortcode('[quotes]Logic will get you from A to B. Imagination will take you everywhere. -Albert Einstein[/quotes]');

Demikian tutorial singkat yang bisa saya share, moga bermanfaat bagi anda yang lagi mempelajari framework baru ini.

Menggunakan FirePHP di Fuel

No Comments

Firephp merupakan sebuah tool untuk penerapan sistem logging. Tool ini dapat sangat membantu untuk mengirimkan pesan debugging pada console firebug.

 

firephp

Logging

 

Untuk menggunakannya di fuel framework anda dapat mengikuti langkah-langkah dibawah ini:

pertama, download packagenya pada link ini

http://www.4shared.com/file/sqfMh8FZ/firephp.html

kedua, setelah itu extrak pada folder packages di framework anda

ketiga, jika menginginkan package ini otomatis terload, anda dapat menambahkan firephp pada file /app/config/config.php

'always_load'	=> array(
	'packages'	=> array(
		'orm',
		'auth',
		'firephp',
	),
	...
)

Ada beberapa fungsi yang dapat anda gunakan diantaranya adalah:

Fb::log($message, $label=null);
Fb::warn($message, $label=null);
Fb::error($message, $label=null);
Fb::info($message, $label=null);
Fb::trace($label);
Fb::dump($key, $variable);
Fb::table($label, $table);

Server-side javascript NodeJS

2 Comments

Kira-kira seminggu lalu saya mengikuti sebuah workshop tentang mobile platform Blasst, disitu dikatakan bahwa Blaast bekerja diatas nodejs. Penasaran dengan nodejs, akhirnya saya dapati bahwa nodejs itu adalah javascript, tapi bedanya, yang biasanya kita kenal javascript bekerja untuk client-side tapi ini bekerja disisi server dengan model asynchronous event-driven. Dengan Model ini membuat aplikasi yang menjalankan beberapa perintah secara pararel(multithreating) akan sangat mudah sekali.

Node.js is an event-driven I/O server-side JavaScript environment based on V8. It is intended for writing scalable network programs such as web servers.[1] It was created by Ryan Dahl in 2009, and its growth is sponsored by Joyent, which employs Dahl
–Wikipedia

Pembuatan website menggunakan nodejs
Perlu diketahui, sampai saat ini nodejs hanya optimal dijalankan di *nix base OS. Untuk instalasi anda dapat mengikuti petunjuk dari link berikut ini. http://nodenode.com/post/1197688151/installing-node-js-on-ubuntu-screencast-tutorial
Kemudian ada beberapa module yang perlu kita masukkan untuk membuat website diantaranya adalah express yaitu sebuah framework yang akan memudahkan kita saat bekerja dengan nodejs. Setelah itu adalah jade dan stylus, kedua module ini dipake saat kita bekerja dengan format html dan css. Untuk instalasinya lakukan perintah berikut setelah nodejs sukses terinstall

npm install express
npm install jade
npm install stylus
npm

npm

Oke sebelum membuat sebuah project, tidak ada salahnya anda test dengan perintah berikut ini untuk mengetahui versi berapa nodejs yang anda gunakan

node -v

Setelah semua beres, generate sebuah project dengan mengetikkan baris perintah berikut

../node_modules/express/bin/express -t jade -c stylus
express

express

Kita dapati dari gambar akan ada beberapa file project yang digenerate, diantaranya adalah file utama app.js, file htmlnya jade akan berada di folder /views dan file cssnya stylus akan berada di /public/stylesheet. Jika kita lihat, app.js akan melakukan beberapa konfigurasi project, memaping request user dan menjalankan server pada port 3000. Hal yang terakhir adalah menjalankan aplikasi yang telah kita buat dengan mengeksekusi baris perintah berikut

node app.js
node

node

/* File app.js */
var express = require('express');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(require('stylus').middleware({ src: __dirname + '/public' }));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', function(req, res){
  res.render('index', {
    title: 'Express'
  });
});

// Only listen on $ node app.js

if (!module.parent) {
  app.listen(3000);
  console.log("Express server listening on port %d", app.address().port);
}

Setelah aplikasi jalan di port 3000, anda dapat mengaksesnya pada browser di localhost:3000

page

page

Older Entries