jump to navigation

Dan klakson pun beralih fungsi ? Juli 5, 2009

Posted by samsonasik in kehidupan.
add a comment

Ceritanya, pada malam kamis kemarin, saya dan teman2 saya berkunjung  ke tempat dosen saya yg lagi sakit. Kami berkendara naik  motor, saya sama temen saya andri. Pas lagi nungguin salah satu temen kami yang lagi menyusul dari simpang jalan (pas lagi berhenti), ada bunyi klakson yang keras sekali dari belakang. Eh, ternyata klakson itu berasal dari angkot yang ada di belakang saya. Seketika waktu itu, saya menyadari bahwa posisi saya agak kurang kepinggir, lalu saya kepinggir. Eeeeh, ternyata klakson masih dibunyikan oleh sang sopir angkot, Lhoh, saya balik badan, (hendak marah ceritanya neh :D ), terus teman saya, andri, bilang, “Sekarang mah, klakson udah berubah fungsi san, buat nyari penumpang, bukan buat memperingatkan orang yg ada di depannya”. Weleh2, batin saya…

Version Control menggunakan Bazaar Juni 20, 2009

Posted by samsonasik in Teknologi, tips and tricks.
Tags: , , ,
add a comment

Version control atau biasa kita sebut SCM (Source code Management) adalah management source ,dokumen, program, dan file komputer yang lain. Dengan adanya Version Control ini, segala perubahan akan dicatat dan diidentifikasikan dengan revision number, –akan sangat berguna untuk kerja tim, agar pekerjaan tidak tumpang tindih, dan untuk control revisi source–. Ada banyak Version control yang bisa kita download, antara lain: SVN, Git, Mercurial, Bazaar, dan lain-lain. Pada dokumentasi kali ini, kita akan coba mengupas tentang Bazaar,  Jika kita menggunakan ubuntu, kita bisa install dengan cara apt-get install bzr bzrtools , kalau yg lain, bisa download sendiri , nah, bagaimana cara mempergunakan tools ini ? Berikut langkah2 yang harus dilakukan :


1. Membuat repository

Direktori ini berisi file2 yang nantinya bisa dicloning oleh banyak user. Untuk lebih jelasnya, akan saya beri contoh sederhana :

a. Saya buat direktori /media/disk-1/repositories/documentation

b. Buat direktori di dalamnya bernama RepoDocumentation

c. Buat contoh file yang akan kita clone, misal RepoTest.java

class RepoTest {

public RepoTest() {

System.out.println(”object RepoTest terbentuk”);

}

public static void main(String args[]) {

new RepoTest();

}

}

d. Init repo:

e. Add file-file dalam direktori

f. Kalau ada file yg ditambahkan, berarti ada perubahan, maka kita harus commit perubahan tersebut agar bisa diclone jg oleh user lain :


2. Checkout

Untuk mengkloning file repository kita, maka kita harus mengkloning dengan cara checkout, atau bisa juga branch, untuk dokumentasi kali ini, saya akan mencoba memakarkan tentang checkout saja.

Misal, user A ingin kloning seluruh file  di folder repository Repocumentation di direktory /media/disk-1/workspace/A

Lalu, user B ingin kloning seluruh file  di folder repository Repocumentation di direktory /media/disk-1/workspace/B

3. Update

Ceritanya, user A, melakukan perubahan di file RepoTest.java

class RepoTest {

public RepoTest() {

System.out.println(”object RepoTest terbentuk”);

}

public void go()

{

System.out.println(”Start the Game”);

}

public static void main(String args[]) {

new RepoTest().go();

}

}

user menambahkan method go() dan menambahkan .go() setelah new RepoTest() , maka user A harus meng-commit file tersebut agar user B bisa mendapatkan file paling up to date.

Kemudian, user B bisa mengupdate perubahan tersebut (sebelumnya, bisa mengecek status up to date file):

maka, otomatis, user B telah mengupdate perubahan yg terjadi .

4. Konflik

Pada kasus di atas, tidak akan terjadi masalah karena user B mengupdate file dari perubahan user A tanpa melakukan perubahan terlebih dahulu. Akan tetapi, jika user B melakukan perubahan pula, dan user A melakukan commit file terlebih dahulu (jika beda line , maka akan saling melengkapi, jika pada line yang sama, maka bazaar akan membuat 3 versi file, yaitu file sebelum diubah (BASE), file setelah diubah user B (THIS), dan file yg telah dicommit oleh user A (OTHER)).

Contoh user A mengganti method go() menjadi method mulai() lalu melakukan commit, kemudian user B mengganti method go() menjadi method start() :

maka ketika user B, melakukan bzr up , akan tampil seperti berikut :

Lalu, setelah dicek, benar akan terjadi 3 file :

Nah, di sinilah waktu nya user A dan user B berkomunikasi, he..he.., setelah itu menentukan file mana yg benar, punya A, punya B, atau mau dibalikkan ke kondisi seperti semula :

anggap saja yg benar adalah file punya B, berarti kita harus copykan isi file yang THIS ke file yang diubah,setelah itu, kita tentukan kebenaran file dengan cara di resolve :

jangan lupa, harus dicommit lagi :

setelah itu, user A bisa mengupdate :

Laju Perahuku Juni 11, 2009

Posted by samsonasik in puisi.
2 comments

Terdampar di sebuah pulau yang ramai
Tapi, ternyata yang terlihat cuma kamu
Apakah kau punya tanda cinta yang bisa menarikku
Atau benang merah yang tak kan bisa terpotong oleh waktu
Atau, taifun-mu yang menghempaskanku, sampai kamu?

Kolaborasi Flex dan Zend (Zend_Amf_Server) Juni 7, 2009

Posted by samsonasik in Flex.
Tags: ,
add a comment

Kolaborasi Flex dengan zend bisa dengan berbagai cara, salah satunya kita bisa gunakan zend_amf sebagai jembatannya, zend_db sebagai library koneksi db nya. Berikut cara yg bisa kita lakukan dengan menggunakan zend_amf.
Pertama, kita siapkan dulu zend kita, sehingga tersusun seperti simulasi gambar berikut (tergantung documentroot masing2) :
– di sini, documentroot saya berada di /media/disk-1/web –

direktori config berisi file konfigurasi (terutama dengan database dan management environment. contoh isi file nya seperti berikut :


[production]
 database.adapter       = "PDO_MYSQL"
 database.params.host = "localhost"
 database.params.dbname = "dokumentasiflexzend"
 database.params.username = "root"
 database.params.password = ""

 [development : production]
 database.adapter       = "PDO_MYSQL"
 database.params.dbname = "dokumentasiflexzend"

 [testing : production]
 database.adapter       = "PDO_MYSQL"
 database.params.dbname = "dokumentasiflexzend"

direktori library berisi library zend 1.7.4

direktori models berisi model logic program, biasanya default nya mendefinisikan relasi table (walaupun sebenarnya bisa juga digunakan untuk kebutuhan logic yg lain)
contoh isi filenya : (ceritanya, kita punya table exampletable, field2nya id dan name)


<?php
 if ( ! defined('flexzendapp')) exit('No direct script access allowed');
 class Exampletable extends Zend_Db_Table
 {
 protected $_name    = "exampletable";
 protected $_primary = "id";

public function getAll($keyword = null)
 {
 $fetch = array();

if ($keyword==null) {
 $fetch = $this->fetchAll();
 } else {
 $fetch = $this->fetchAll("name like '%$keyword%'");
 }

return $fetch;
 }
 }
 ?>

direktori services , untuk koneksitas terhadap flex,  di sini saya buat contoh dua kelas, yakni ExampletableClass.php (pendefinisian field-field table) dan ExampletableService.php untuk penghubung antara models zend dan flex.
contoh source code ExampletableClass.php :


<?php
 class ExampleTableClass
 {
 var $id;
 var $name;
 }
 ?>

contoh source code ExampletableService.php


<?php
 require_once('ExampletableClass.php');
 //connection info

class ExampletableService {

private $Exampletable;

public function __construct()
 {
 $this->Exampletable = new Exampletable();
 }

public function getData($keyword=null)
 {
 $result = array();
 $fetch = $this->Exampletable->getAll($keyword);

foreach($fetch as $key=>$val)
 {
 $ExampletableObj = new ExampletableClass();
 $ExampletableObj->id = $val->id;
 $ExampletableObj->name = $val->name;

$result[] = $ExampletableObj;
 }
 return $result;
 }
 }
 ?>

File includer.php berisi source load konfigurasi :


<?php
 if ( ! defined('flexzendapp')) exit('No direct script access allowed');

require_once "Zend/Loader.php";
 Zend_Loader::registerAutoload();

// CONFIGURATION - Setup the configuration object
 $configuration = new Zend_Config_Ini('app.ini', 'production');
 $dbAdapter = Zend_Db::factory($configuration->database);
 Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);
 $registry = Zend_Registry::getInstance();
 $registry->configuration = $configuration;
 $registry->dbAdapter     = $dbAdapter;
 $locale = new Zend_Locale('id');
 Zend_Registry::set('Zend_Locale', $locale);

?>

Nah, file index.php berisi source untuk memanggil zend_amf :


<?php
define('flexzendapp', 'flexzendapp');

set_include_path('./library' . PATH_SEPARATOR . get_include_path());
 set_include_path('./config' . PATH_SEPARATOR . get_include_path());
 set_include_path('./models' . PATH_SEPARATOR . get_include_path());

require_once 'includer.php';

$server = new Zend_Amf_Server();
 $server->addDirectory('./services/');
 echo($server -> handle());

OK, Let’s go to Flex :
Pertama : Buat sebuah project flex :

Biasakan membuat project location tidak berada di documentroot kita, supaya aman. dan supaya load data cuma flex saja (tidak campur dengan zend).

Setelah itu , klik Next
maka akan tampil seperti berikut :

PERHATIKAN OUTPUT folder, jangan sampai menimpa aplikasi kita yang lain.
Klik Next dan Finish.
maka kita akan menjumpai direktori debugging seperti ini :

Langkah selanjutnya adalah membuat file konfigurasi berbentuk xml untuk compiler setting sehingga tampil seperti berikut :

contoh isi file service-config.xml sebagai berikut :


<?xml version="1.0" encoding="UTF-8"?>
 <services-config>
 <services>
 <service id="amfphp-flashremoting-service" messageTypes="flex.messaging.messages.RemotingMessage">
 <destination id="zendamf">
 <channels>
 <channel ref="myamfphp"/>
 </channels>
<properties>
 <source>*</source>
 </properties>
 </destination>
 </service>
 </services>
 <channels>
 <channel-definition id="myamfphp">
 <endpoint uri="../zend_backend/index.php"/>
 </channel-definition>
 </channels>
 </services-config>

Nah, sekarang, setting compilernya , dengan cara, klik kanan project kita, klik properties, pilih flex compiler, tambahkan -services “services-config.xml” :

klik OK

Let’s coding in flex :


<?xml version="1.0" encoding="utf-8"?>
 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="absolute" creationComplete="getDataExample()">
 <!-- remote object untuk meremote service -->
 <mx:RemoteObject id="remoteExample" destination="zendamf" source="ExampletableService"
 showBusyCursor="true" fault="faultListener(event)">
 <mx:method name="getData" result="getDataListener(event)"/>
 </mx:RemoteObject>

<mx:Script>
 <![CDATA[
 import mx.controls.Alert;
 import mx.rpc.events.FaultEvent;
 import mx.rpc.events.ResultEvent;
 import mx.collections.ArrayCollection;

//siapkan array
 [Bindable]
 private var exampledata :ArrayCollection;

private function getDataListener(event:ResultEvent):void
 {
 exampledata = new ArrayCollection(event.result as Array) ;
 }

private function faultListener(event:FaultEvent):void
 {
 Alert.show(event.fault.message, "Error");
 }

private function getDataExample():void
 {
 //load data
 remoteExample.getData();
 }
 ]]>
 </mx:Script>

<mx:DataGrid id="myGrid" dataProvider="{exampledata}">
 <mx:columns>
 <mx:DataGridColumn headerText="id" dataField="id" draggable="true" />
 <mx:DataGridColumn headerText="name" dataField="name" draggable="true"/>
 </mx:columns>
 </mx:DataGrid>

</mx:Application>

Jika tampil seperti berikut, berarti kita sudah berhasil :) :

Selamat mencoba .

mendapatkan url parameter dari servlet Juni 1, 2009

Posted by samsonasik in Tutorial JSP, Tutorial Servlet.
add a comment

Pemanggilan url yang sering kita pakai pada framework2 php seperti CodeIgniter atau pun Zend ataupun framework php yang lain dapat kita gunakan pula di JSP, dengan servlet. misal, kita gunakan url parameter edit data :


<url-pattern>/detailbrg/kode/*</url-pattern>

Nah, cara panggil di servlet nya bisa seperti ini :


//------------------------------------
response.setContentType("text/html;charset=UTF-8");
 PrintWriter out = response.getWriter();
 String[] spliturl = request.getRequestURL().toString().trim().split("/");

 String kode = null;
 for(int i=0;i<spliturl.length;i++) {
 if (spliturl[i].equals("kode")) {
 kode  = spliturl[i+1];
 }
 }

 out.print("Kode Barang yang dipilih"+kode);
//-------------------------

Kalau mau, ya bisa juga dijadikan function tersendiri :) .

Menonaktifkan work Offline pada mozilla firefox Mei 31, 2009

Posted by samsonasik in tips and tricks.
3 comments

Kalau kita pakai ubuntu, pas ceritanya lg ga ada koneksi internet, selalu saja mozilla firefox kita work offline.Hal ini menjadikan saya jengkel ketika harus manual mengklik file->work offline supaya ga work offline(ceritanya saya mau memanggil aplikasi php, jsp, or whatever).
Nah, untuk menonaktifkannya, kita bisa langsung menghack firefoxnya :
1. Masuk ke konfigurasi firefoxnya, dengan cara menuliskan about:config di browser firefox kita:
Screenshot-about:config - Mozilla Firefox Klik I’ll be carefull , i promise.

Nah, setelah itu, ketikkan di textfield bagian filter, isikan ‘networkmanager’ tanpa tanda kutip :
Screenshot-about:config - Mozilla Firefox-1 set valuenya dari false menjadi true.

Menambahkan command line sendiri di Linux Mei 13, 2009

Posted by samsonasik in tips and tricks.
add a comment

Sering kita terjebak oleh penggunaan command line yang ada saja, padahal kita sebenarnya bisa lho menambahkan sendiri command dengan mengacu pada executable file yang ada. Berikut saya contohkan untuk pengaksesan executable file komodo yg saya taruh di /opt/komodo/bin/komodo, saya ingin memanggil langsung dimanapun, maka saya gunakan command line :
addcommand

semoga bermanfaat, amin.

Doraemon itu ternyata asalnya dr Jawa Mei 6, 2009

Posted by samsonasik in lucu2.
3 comments

Doraemon itu ternyata asalnya dari Jawa : Saudaranya ada 12..
Yg Buta Namanya DoraWeruh,
yg bodo namanya DoraMudeng,
yang Sakitan namanya DoraSehat,
yang minggatan namanya DoraBali,
yg rai gedhek namanya DoraDuweisin,
yg bisanya bohong namanya DoraJujur,
Yg suka Porno namanya DoraKathokan,
yg jomblo DoraMbojo,
yg nganggur DoraNyambutGawe,
yg nyaleg2saat ini DoraNgilo,
yg jadi anggota Dewan DoraGableg,
Yg jd Mentri DoraNggenah,

siji maning lah sing moco iki po DoraCekikik- an

Menangani blank screen pada saat switch user (Jaunty – ubuntu 9.04) Mei 5, 2009

Posted by samsonasik in Uncategorized.
Tags: ,
2 comments

Fyuh…, ternyata permasalahan bukan cuma display, sound, dan wifi. Kemarin pada saat saya coba untuk switch user, eh.., ternyata malah jadi blank screen. Akhirnya harus secara paksa dimatiin tuh kompie, hua..hua….. Setelah mencari berhari2, akhirnya saya menemukan solusinya di web : https://bugs.launchpad.net/ubuntu/+source/linux-restricted-modules-2.6.20/+bug/112518 .
Solusinya begini :
1. Ubah konfigurasi /etc/X11/xorg.conf dengan menambahkan :

Load “extmod”
SubSection “extmod”

Option “omit sync”
EndSubSection

2. Restart configurasinya : sudo dpkg-reconfigure -phigh xserver-xorg
——
Sekarang, coba switch user :)

Template helper menggunakan Servlet Mei 3, 2009

Posted by samsonasik in Tutorial JSP, Tutorial Servlet.
add a comment

Hm…, lama nih saya ga `nyentuh` servlet & JSP, hitung2 membuka lagi memori lama(cie…cie..), kemarin saya baca buku “Web Development with Java Using Hibernate, JSPs, and Servlets” karya Tim Downey, ternyata banyak hal yang saya belum ketahui, contohnya tentang materi yang akan kita bahas kali ini.
Konsep penggunaan template helper pada berbagai macam framework maupun bahasa pemrograman selalu mengacu pada reuse template include, yang pada intinya akan memudahkan programmer dan designer itu sendiri, serta menghemat memori karena menghemat source code yang ada.
Dalam Java Web Development, kita bisa menggunakan servlet untuk menginclude header & footer secara otomatis. Secara class diagram dapat digambarkan sebagai berikut :

class-diagram

Berikut Source Code untuk class HelperBase :


package Helpers;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author samsonasik
 */
public class HelperBase extends HttpServlet {
    protected HttpServletRequest request;
    protected HttpServletResponse response;

    public HelperBase(){}

    public HelperBase(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.request = request;
        this.response = response;
    }

}

Kemudian, source code untuk ControllerHelper :


package Helpers;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;

/**
 *
 * @author samsonasik
 */
public class ControllerHelper extends HelperBase {

    public ControllerHelper(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        super(request, response);
    }

    public void doGet(String address) throws ServletException, IOException {
        request.getSession().setAttribute("helper", this);

        request.getRequestDispatcher("/header.jsp").include(request, response);
        request.getRequestDispatcher("/"+address).include(request, response);
        request.getRequestDispatcher("/footer.jsp").include(request,response);
    }
}

———–
Nah, sekarang kita sudah punya ControllerHelper, sekarang,kita bisa gunakan untuk berbagai macam controller, tinggal instansiasi kelas ControllerHelper dan gunakan method doGet(address) seperti di bawah ini :


package Controllers;

import Helpers.ControllerHelper;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author samsonasik
 */
public class TestController extends HttpServlet {

    ControllerHelper helper ;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
      helper = new ControllerHelper(request, response);
      helper.doGet("index.jsp");
    } 

}

Referensi : Web Development With Java Using Hibernate, JSPs,and Servlets – Tim Downey : 2007