• Solo Great Sale

    Solo Great Sale Powered By Circle Card 2015

  • Solo Great Sale

    Solo Great Sale Powered By Circle Card 2015

  • Oracle Java Magazine

    As Cover of Oracle Java Magazine March/April 2012 issue

  • Launching jDuchess Indonesia

    Gunadarma University 2011

    www.jduchess.or.id

  • Launching jDuchess Indonesia

    Gunadarma University 2011

    www.jduchess.or.id

  • Launching Java 7

    Binus University 2011

  • Eclipse Democamp

    Microsoft Indonesia 2011

  • Oracle Academy

    SMK PGRI 3 Malang 2010

  • Launching JENI 2.0

    ITB Bandung 2012

  • Oracle Academy

    SMK PGRI 3 Malang 2010

  • Java and Android Roadshow

    SMK PGRI 3 Malang 2012

  • Oracle Academy

    SMK PGRI 3 Malang 2010

  • Launching JENI 2.0

    ITB Bandung 2012

  • Oracle Academy

    SMK PGRI 3 Malang 2011

  • Java and Android Roadshow

    SMK Plus Darussalam Kediri 2012

  • Oracle Academy Seminar

    LIKMI Bandung, 2012

  • Oracle Academy Seminar

    Indonesia University, 2012

  • Seminar Android

    Universitas Budi Luhur 2010

  • Java and Android Roadshow

    SMK Hasan Kafrawi Jepara 2012

  • Sosialisasi Kurikulum 2013

    LPMP Surabaya 2013

  • IOSA

    Indonesia Open Source Award 2011

  • Java Training

    SMKN 02 Sukabumi 2010

  • Sosialisasi Kurikulum

    SMKN 01 Tulungagung 2011

  • Sosialisasi Kurikulum 2013

    LPMP Surabaya 2013

Thursday, October 2, 2014

Posted by Netty Herawaty
| 10:50 PM
Well, softskill Universitas Gunadarma di semester 7 ini adalah tentang Pengantar Bisnis Informatika. Sejauh ini menurut saya softskill yang paling menarik daripada semester-semester sebelumnya. Bicara masalah bisnis dan informatika, ada dua kata kunci yang akan saya bahas disini, yaitu "Technopreneur" dan "Startup".


Sebagai bagian dari pengembang dunia IT kita tentunya tidak asing dengan kata Technopreneur. Kata ini berasal dari kata "technology" dan "entrepreneur". Technopreneur artinya pengusaha yang berbasis teknologi. Sejak zaman SMK dulu mindset saya sudah di setting untuk jadi seorang technopreneur yang mandiri, jadi membangun sebuah Startup sudah menjadi planning saya sejak tahun 2011 lalu.

Untuk membangun sebuah Startup tentunya tidak mudah, namun berbekal pengalaman kerja selama 3,5 tahun ini sebagai programmer dan pengalaman sebagai Bizdev (Business Development), saya dan partner saya akhirnya sekarang punya Startup sendiri yang bernama Tic and Tech. Tic and Tech memposisikan diri sebagai konsultan IT yang memberikan solusi pengembangan Desktop Apps, Web Apps, Mobile Apps serta Networking Infrastructure. Untuk info lebih lanjut tentang Tic and Tech bisa Anda lihat di www.ticandtech.com .


Saat ini Tic and Tech masih mempunyai satu produk yang bernama Student Care. Student Care adalah sebuah sistem informasi sekolah terpadu untuk semua jenjang sekolah yang bisa diakses secara online dengan menggunakan laman web (situs). Student Care akan memudahkan pihak sekolah dalam mengelola administrasi akademik dan menjadi media komunikasi antara guru dan wali murid, sehingga orang tua siswa dapat memantau kegiatan belajar mengajar dan perkembangan prestasi akademik siswa di sekolah.

Berikut tahap-tahap yang sudah dan yang akan saya jalankan agar Tic and Tech dari perusahaan Startup bisa menjadi Middle Up dan bahkan menjadi skala Nasional dan Global. Here we go ..

1. Quotation Letter and Price Proposal

Meskipun Tic and Tech termasuk baru, tapi kita sudah mulai masuk ke beberapa sekolah SMA dan SMP favorit di Jakarta untuk menawarkan aplikasi Student Care. SMA yang sudah kita tawarkan untuk menggunakan Student Care yaitu:

  1. SMAN 6 Jakarta
  2. SMAN 8 Jakarta
  3. SMAN 14 Jakarta
  4. SMAN 18 Jakarta
  5. SMAN 39 Jakarta
  6. SMAN 48 Jakarta
  7. SMAN 61 Jakarta
  8. SMAN 70 Jakarta
  9. SMAN 81 Jakarta

Sedangkan proposal penawaran yang sudah masuk ke SMP yaitu :
  1. SMPN 19 Jakarta
  2. SMPN 103 Jakarta
  3. SMPN 115 Jakarta

2. Hire the Best Programmer to be My Startup Team

Untuk saat ini masih 2 orang yang menjalankan Tic and Tech. Peran kami berdua masih campur aduk. Saya sendiri berperan sebagai CTO, programmer, system designer, project manager dan Bizdev. Sedangkan partner saya berperan sebagai CEO, system designer dan integrator. 

Ketika semakin banyak sekolah-sekolah yang ingin implementasi aplikasi Student Care ini, maka saya akan hire programmer lain untuk jadi team kita. 

3. Quitting My Corporate Job for My Startup 

Well, jika Tic and Tech sudah mempunyai produk dan team yang kuat, saya akan mengambil keputusan untuk berhenti dari perusahaan saya bekerja sekarang dan akan fokus mengembangkan Tic and Tech.

4. My Own Office

This's the part i like most. Saya akan menyewa gedung untuk kantor Tic and Tech dengan interior yang nyaman dan menyenangkan agar karyawan betah dan lebih bersemangat kerja.

5. Student Care as National Standard

Jika sekolah-sekolah di Jakarta sudah banyak yang mengimplementasikan Tic and Tech, kita akan mengajukan proposal ke Kementerian Pendidikan Nasional (Kemdiknas) agar Student Care menjadi standar nasional untuk sistem informasi terpadu sekolah.

Sementara ini Tic and Tech lebih fokus ke solusi pengembangan aplikasi dibidang pendidikan dan saat ini kita masih di tahap no 1. Namun saya target dalam 3-5 tahun kedepan sudah bisa ke tahap 5. Tentu saja Tic and Tech akan terus berinovasi untuk menciptakan solusi-solusi baru dengan teknologi terkini untuk membantu sistem pendidikan di Indonesia.


P.S : Dari dulu saya selalu ingin memberikan sesuatu untuk membantu sistem pendidikan di Indonesia, namun tidak secara langsung seperti misal menjadi guru atau dosen. Jadi mungkin dengan Student Care inilah saya bisa ikut berpartisipasi dalam memajukan pendidikan di Indonesia.

Saturday, March 15, 2014

Posted by Netty Herawaty
| 3:09 AM
Yesterday i got an invitation from Agnes Crepet (who is she? you can read my previous post about jDuchess Indonesia ) to attend Devoxx 2014 in Paris. Devoxx (formerly named JavaPolis) is an annual European Java, Android and HTML5 conference created in 2001. Now, Devoxx became the biggest Java conference in the world.


In this conference Google offer "Women in Tech Conference and Travel Grants" for female Computer Scientists with grants include :

  1. Free Registration
  2. Up to 1000 EUR towards travel and accomodation costs (to be paid after conference)

To be eligible for a conference grant, the candidate must :

  1. Be a woman working on studying Computer Science, Computer Engineering or a technical field related to the conference subject
  2. Have a strong academic background
  3. Demonstrate leadership in the workplace or in school
  4. Attend the core day(s) of the main conference

If you're interested to join in this conference, you can submit this form . Unfortunately when i will submit the form, it already entered deadline registration. Perhaps i'll try to submit the form to another conference. The eligible conferences for this Women in Tech Conference and Travel Grants are :

  1. Devoxx France 2014 (deadline : 10 March)
  2. Craft (deadline : 25 March)
  3. HITBSecConf2014 - Amsterdam / HITB Haxpo  (deadline : 10 April)
  4. Devoxx UK (deadline : 16th May)
For more information please visit Google for Education

Sunday, January 5, 2014

Posted by Netty Herawaty
| 12:33 AM
Spring MVC framework digunakan untuk aplikasi Java berbasis web. Seperti Struts framework, Spring MVC juga berdasarkan Java EE Servlet dan teknologi JSP yang mengimplementasikan Model-View-Controller design pattern.

Pada postingan kali ini kita akan membuat contoh sederhana yaitu menampilkan Hello World dengan menggunakan STS (Spring Tools Suite) sebagai IDE (Integrated Development Environment). Sebenarnya bisa juga menggunakan Eclipse atau Intellij IDE, namun SpringSource sudah menyediakan STS sebagai IDE dan VMware vFabruic tc Server sebagai servernya yang di built di atas Apache Tomcat.

Download STS disini , saya menggunakan STS 3.5.1.M1 . Kemudian instal dan jalankan sehingga tampak seperti gambar berikut 

Jika Anda tidak ingin menggunakan STS dan ingin tetap menggunakan Eclipse, Anda bisa download plugin STS di Eclipse Marketplace. Contoh plugin dibawah ini bagus untuk Eclipse Kepler


Dan jika Anda tidak ingin menggunakan SpringSource server, Anda bisa deploy aplikasi dengan menggunakan container Java EE yang lain seperti Tomcat, JBoss, Jetty, Netty dll. Disini saya menggunakan server yang sudah disediakan oleh SpringSource yaitu VMware vFabruic tc Server.

Setelah IDE dan server kita siap, mari kita mulai membuat Spring MVC project sederhana untuk menampilkan Hello World

Step 1

Buat Spring Project baru dari menu


Step 2

Pada project window beri nama dengan "SpringMVCProject" dan pilih template "Spring MVC Project". Ketika pertama kali menggunakan template ini, STS akan mendownloadnya dari website SpringSource. 


Step 3

Klik next dan isikan nama package. Package ini akan digunakan sebagai base-package pada komponen Spring. misal package saya beri nama com.netyherawaty.springmvcexample


Step 4

Ketika project berhasil dibuat oleh Spring MVC template, berikut struktur projectnya


Spring Controller Class

HelloController.java dibuat otomatis oleh SpringSource dengan method home()
package com.netyherawaty.springmvcexample;

import java.text.DateFormat;

import java.util.Date;

import java.util.Locale;



import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;



/**

 * Handles requests for the application home page.

 */

@Controller

public class HomeController {


private static final Logger logger = LoggerFactory.getLogger(HomeController.class);


/**
* Simply selects the home view to render by returning its name.
*/

@RequestMapping(value = "/", method = RequestMethod.GET)

public String home(Locale locale, Model model) {

logger.info("Welcome home! The client locale is {}.", locale);

Date date = new Date();

DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

String formattedDate = dateFormat.format(date);

model.addAttribute("serverTime", formattedDate);

return "home";

}

}

@Controller adalah annotation yang menunjukkan controller class

@RequestMapping digunakan dengan kelas dan method untuk redirect client request pada handler method. Handler method mengembalikan nilai String yang diambil dari nama JSP pages. 

Pada class diatas return "home" , artinya HomeController.java mengembalikan nilai dari home.jsp dibawah ini

Java Server Pages

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ page session="false" %>

<html>

<head>

	<title>Home</title>

</head>

<body>

<h1>

	Hello world! 

</h1>



<P>  The time on the server is ${serverTime}. </P>

</body>

</html>

Menjalankan Project Spring MVC di Server

Tambahkan prroject pada server dengan klik kanan pada VMware vFabric tc Server kemudian pilih Add and Remove seperti gambar berikut


Pilih project SpringMVCExample kemudian klik Add dan tekan button Finish


Setelah project selesai ditambahkan start server dan panggil URL localhost:8080/SpringMVCExample pada browser


Saturday, December 14, 2013

Posted by Netty Herawaty
| 7:52 PM
Kali ini saya akan membahas custome listview dengan image dan text. Contoh kasus yang saya gunakan adalah pada postingan saya sebelumnya tentang navigation drawer . Jadi kita tinggal memodifikasi dari class dan layout yang sudah ada.

Pada pembahasan tentang navigation drawer, ketika menu Voucher di klik akan tampil halaman fragment baru. Nah, sekarang kita modifikasi agar ketika di klik menu Voucher tampil form fragment yang berisi listview. 

Sebelum kita mulai memodifikasi layout dan class nya, kita siapkan dulu list selector yang berisi background style ketika listview normal dan ketika di klik

Buat file xml baru pada res/drawable

1. voucher_list_selector.xml

Untuk memberikan background state atau keadaan pada background list. normal state ketika list normal dan pressed state ketika list di klik
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">     <item      android:state_selected="false"         android:state_pressed="false"         android:drawable="@drawable/gradient_bg" />     <item android:state_pressed="true"         android:drawable="@drawable/gradient_bg_hover" />     <item android:state_selected="true"       android:state_pressed="false"         android:drawable="@drawable/gradient_bg_hover" /> </selector>

2. gradient_bg.xml

Memberikan gradient warna untuk background list yang normal state
<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">

  <gradient

      android:startColor="#f1f1f2"

      android:centerColor="#fcfcfc"

      android:endColor="#cfcfcf"

      android:angle="270" />

</shape>

3. gradient_bg_pressed.xml

Memberikan gradient warna pada list yang pressed state atau ketika di klik
<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">

  <gradient

      android:startColor="#55AADC"

      android:centerColor="#55AADC"

      android:endColor="#55AADC"

      android:angle="270" />

</shape>

Buat file xml baru pada res/layout

1. voucher.xml

Membuat ListView dengan id yang akan dipanggil pada class VoucherFragment
<?xml version="1.0" encoding="UTF-8"?>

<ListView xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@android:id/list"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:background="#ffffff"

    android:divider="#b5b5b5"

    android:dividerHeight="1dp"

    android:listSelector="@drawable/voucher_list_selector"

    android:scrollbars="none">

</ListView>

2. voucher_row_item.xml

Untuk membuat list row yang berisi image dan text
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:background="@drawable/voucher_list_selector"

    android:orientation="horizontal"

    android:padding="5dip" >



    <LinearLayout

        android:id="@+id/thumbnail"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_marginRight="5dip"

        android:background="@drawable/image_bg"

        android:padding="3dip" >



        <ImageView

            android:id="@+id/imageView1"

            android:layout_width="50dip"

            android:layout_height="50dip"

            android:src="@drawable/noimage" />

    </LinearLayout>



    <TextView

        android:id="@+id/textView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignTop="@+id/thumbnail"

        android:layout_toRightOf="@+id/thumbnail"

        android:text="Burger King"

        android:textColor="#040404"

        android:textSize="15dp"

        android:textStyle="bold"

        android:typeface="sans" />



    <TextView

        android:id="@+id/textView2"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_below="@id/textView1"

        android:layout_marginTop="1dip"

        android:layout_toRightOf="@+id/thumbnail"

        android:text="Free 1 Burger Alacarte"

        android:textColor="#343434"

        android:textSize="10dip" />



    <ImageView

        android:id="@+id/imageView2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentRight="true"

        android:layout_centerVertical="true"

        android:src="@drawable/icon_arrow" />



    <TextView

        android:id="@+id/textView3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/textView2"

        android:layout_below="@+id/textView2"

        android:layout_marginTop="1dip"

        android:text="Exp: 25-Feb-2014 / 23:59"

        android:textColor="#343434"

        android:textSize="10dip" />



    <ImageView

        android:id="@+id/imageView3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerVertical="true"

        android:layout_toLeftOf="@+id/imageView2"

        android:src="@drawable/icon_new" />



</RelativeLayout>

Buat class baru pada package model

1. VoucherModel.java

Untuk mendefinisikan variable-variable yang kita butuhkan dari listview
package com.netyherawaty.slidingmenu.model;



public class VoucherModel {

 

  public int img;

  public String title;

  public String desc;

  public String expired;

 

  public VoucherModel(int img, String title, String desc, String expired) {

   

    this.img = img;

    this.title = title;

    this.desc = desc;

    this.expired = expired;

  }

}

Buat class baru pada package adapter

1. VoucherAdapter.java

Pada class ini memanggil layout voucher_row_item.xml dan memanggil id dari masing-masing komponen yang ada didalamnya (TextView, ImageView dll)
package com.netyherawaty.slidingmenu.adapter;


import com.netyherawaty.slidingmenu.R;

import com.netyherawaty.slidingmenu.model.VoucherModel;


import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.TextView;


public class VoucherAdapter extends ArrayAdapter<VoucherModel> {


  public VoucherAdapter(Context context) {

    super(context, 0);

  }


  public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {

      convertView = LayoutInflater.from(getContext()).inflate(R.layout.voucher_row_item, null);

    }

   

    ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);

    TextView title = (TextView) convertView.findViewById(R.id.textView1);

    TextView desc = (TextView) convertView.findViewById(R.id.textView2);

    TextView expired = (TextView) convertView.findViewById(R.id.textView3);



    imageView.setImageResource(getItem(position).img);

    title.setText(getItem(position).title);

    desc.setText(getItem(position).desc);

    expired.setText(getItem(position).expired);

    return convertView;

  }

}

Modifikasi VoucherFragment

Langkah terakhir adalah modifikasi VoucherFragment.java dengan menambahkan list yang kita butuhkan dengan perintah adapter.add() . Perhatikan bahwa class extends bukan extend Fragment namun extends ke ListFragment sehingga kita butuh memanggil id list dari voucher.xml
package com.netyherawaty.slidingmenu;


import android.app.ListFragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;


import com.netyherawaty.slidingmenu.adapter.VoucherAdapter;

import com.netyherawaty.slidingmenu.model.VoucherModel;


public class VoucherFragment extends ListFragment{

        
      public VoucherFragment(){}
      

      @Override

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   

          View rootView = inflater.inflate(R.layout.voucher, container, false);


          return rootView;

      }

     
      @Override

    public void onActivityCreated(Bundle savedInstanceState) {

      super.onActivityCreated(savedInstanceState);

      VoucherAdapter adapter = new VoucherAdapter(getActivity());

      adapter.add(new VoucherModel(R.drawable.iloyal_burgerking, "Burger King", "Free 1 Burger Alacarte", "Exp : 2014-03-15 till 2014-04-15"));  

      adapter.add(new VoucherModel(R.drawable.iloya_ten, "Ten Ten", "Free 1 Tempura Donburi", "Exp : 2014-03-01 till 2014-03-10"));

      adapter.add(new VoucherModel(R.drawable.iloyal_blitz, "Blitz Megaplex", "Free 1 Regular Movie Ticket", "Exp : 2014-02-20 till 2014-02-28"));

      adapter.add(new VoucherModel(R.drawable.iloyal_pepperlunch, "Pepper Lunch", "Free 1 Red Velvet Dessert + Drink", "Exp : 2014-02-10 till 2014-02-20"));

      adapter.add(new VoucherModel(R.drawable.iloyal_dairyqueen, "Dairy Queen", "Free 1 Moolatte Cappucino", "Exp : 2014-01-01 till 2014-01-30"));

      getListView().setAdapter(adapter);

    }

}

Sekarang run project dan hasilnya seperti berikut



Saturday, December 7, 2013

Posted by Netty Herawaty
| 12:25 PM
Satu tahun yang lalu saya pernah membahas tentang Android Dashboard. Silahkan dilihat disini . Nah sekarang dashboard sudah digeser dengan UI pattern untuk sliding menu yang baru diperkenalkan Google yang bernama "Navigation Drawer".

Sejak Google memperkenalkan Navigation Drawer, kita mulai banyak menemukan aplikasi mobile apps Android yang menggunakan "hamburger" style ini. 

Navigation Drawer ini letaknya disembunyikan dan dapat dilihat dengan menggeser screen dari kiri atau dengan menekan button "hamburger" dan app icon di action bar. Perhatikan contoh sliding menu yang ada di Facebook dan Google Play Store berikut ini

                               

Nah sekarang kita akan membuat sliding menu yang menyerupai contoh diatas

Membuat Project Baru

1. Download "hamburger" icon

Download "hamburger" icon dan simpan pada res/drawable

2. Membuat project baru

Buat project baru dari File > New > Android Application Project


3. Membuat String variable

Buka strings.xml pada folder res/value dan tambahkan array item untuk navigation drawer
<?xml version="1.0" encoding="utf-8"?>

<resources>


    <string name="app_name">Navigation Drawer</string>

    <string name="action_settings">Settings</string>

    <string name="hello_world">Hello world!</string>

    <string name="drawer_open">Slider Menu Opened</string>

    <string name="drawer_close">Slider Menu Closed</string>

    
    <!-- Nav Drawer Menu Items -->

    <string-array name="nav_drawer_items">

        <item >Home</item>

        <item >Directory</item>

        <item >Promotion</item>

        <item >Event</item>

        <item >Voucher</item>

        <item >My Account</item>

        <item >Logout</item>

    </string-array>


    <!-- Nav Drawer List Item Icons -->

    <!-- Keep them in order as the titles are in -->

    <array name="nav_drawer_icons">

        <item>@drawable/icon_home</item>

        <item>@drawable/icon_directory</item>

        <item>@drawable/icon_promo</item>

        <item>@drawable/icon_event</item>

        <item>@drawable/icon_voucher</item>

        <item>@drawable/icon_myaccount</item>

        <item>@drawable/icon_logout</item>

    </array>
    

    <!-- Content Description -->

    <string name="desc_list_item_icon">Item Icon</string>


</resources>

4. Membuat DrawerLayout

UI element untuk navigation drawer adalah DrawerLayout. tambahkan kode berikut pada activity_main.xml di folder res/layout. FrameLayout untuk menampilkan Fragment dan ListView untuk menampilkan slider menu
<android.support.v4.widget.DrawerLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/drawer_layout"

    android:layout_width="match_parent"

    android:layout_height="match_parent">


    <!-- Framelayout to display Fragments -->

    <FrameLayout

        android:id="@+id/frame_container"

        android:layout_width="match_parent"

        android:layout_height="match_parent" />


    <!-- Listview to display slider menu -->

    <ListView

        android:id="@+id/list_slidermenu"

        android:layout_width="280dp"

        android:layout_height="match_parent"

        android:layout_gravity="start"

        android:choiceMode="singleChoice"

        android:divider="@color/list_divider"

        android:dividerHeight="1dp"      

        android:listSelector="@drawable/list_selector"

        android:background="@color/list_background"/>

</android.support.v4.widget.DrawerLayout>

Membuat Layout Custom ListView

Untuk membuat custome listview kita membutuhkan Adapter class dan custom layout untuk masing-masing list item pada listview. Sebelum kita membuat Adapter class, kita persiapkan dulu kebutuhan layout nya.

5. Membuat State ListItem

Kita membutuhkan 4 file xml, 2 file xml untuk membuat 2 state list item, yaitu ketika normal state dan pressed state atau ketika list item ditekan dan 1 file xml untuk menggabungkan keduanya (list selector) dan 1 file untuk membuat counter background

a. Normal State
Buat xml file di dalam res/drawable dan beri nama list_item_bg_normal.xml (jika belum tersedia folder drawable, silahkan create new folder dan beri nama drawable)
<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">

  <gradient

      android:startColor="@color/list_background"

      android:endColor="@color/list_background"

      android:angle="90" />

</shape>

b. Pressed State
Buat xml file di dalam res/drawable dan beri nama list_item_bg_pressed.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle">

  <gradient

      android:startColor="@color/list_background_pressed"

      android:endColor="@color/list_background_pressed"

      android:angle="90" />

</shape>

c. List Selector
Buat xml file di dalam res/drawable dan beri nama list_selector.xml
<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">


    <item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/>

    <item android:drawable="@drawable/list_item_bg_pressed" android:state_pressed="true"/>

    <item android:drawable="@drawable/list_item_bg_pressed" android:state_activated="true"/>


</selector>

d. Counter Background
Buat xml file di dalam res/drawable dan beri nama counter_bg.xml
<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

    android:shape="rectangle" >


    <!-- view background color -->

    <solid android:color="@color/counter_text_bg" >

    </solid>


    <!-- If you want to add some padding -->

    <padding

        android:right="3dp"

        android:left="3dp" >

    </padding>


    <!-- Here is the corner radius -->

    <corners android:radius="2dp" >

    </corners>

</shape>

Sampai disini pasti layout yang kalian buat banyak yang error, karena kita belum menambahkan file xml untuk menampung color atau warna-warna yang kita gunakan pada listview. Color ini harus diletakkan di dalam res/values

e. Color
Buat xml file di dalam res/values dan beri nama color.xml
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <color name="list_item_title">#000000</color>

    <color name="list_background">#FAFAFA</color>

    <color name="list_background_pressed">#55AADC</color>

    <color name="list_divider">#272727</color>

    <color name="counter_text_bg">#626262</color>

    <color name="counter_text_color">#FFFFFF</color>

</resources>

6. Membuat Layout Drawer ListItem

Buat xml file di dalam res/layout dan beri nama drawer_list_item.xml Drawer ListItem ini unuk mendefinisikan masing-masing list row. RelativeLayout yang ada di file ini berisi title, icon dan counter listview
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="48dp"

    android:background="@drawable/list_selector">



    <ImageView

        android:id="@+id/icon"

        android:layout_width="25dp"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_marginLeft="12dp"

        android:layout_marginRight="12dp"

        android:contentDescription="@string/desc_list_item_icon"

        android:src="@drawable/icon_home"

        android:layout_centerVertical="true" />



    <TextView

        android:id="@+id/title"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:layout_toRightOf="@id/icon"

        android:minHeight="?android:attr/listPreferredItemHeightSmall"

        android:textAppearance="?android:attr/textAppearanceListItemSmall"

        android:textColor="@color/list_item_title"

        android:gravity="center_vertical"

        android:paddingRight="40dp"/>


    <TextView android:id="@+id/counter"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:background="@drawable/counter_bg"

        android:layout_alignParentRight="true"

        android:layout_centerVertical="true"

        android:layout_marginRight="8dp"

        android:textColor="@color/counter_text_color"/>


</RelativeLayout>

Membuat Class Custom ListView

Masing-masing list item berisi title, icon dan counter. Jadi kita membuat model untuk merepresentasikan ketiga elemen tersebut

7. Buat Model DrawerItem

Buat package baru untuk meletakkan class model. Package saya com.netyherawaty.slidingmenu.model
Buat class NavDrawerItem.java dan tambahkan kode berikut
package com.netyherawaty.slidingmenu.model;



public class NavDrawerItem {



  private String title;

  private int icon;

  private String count = "0";

  // boolean to set visiblity of the counter

  private boolean isCounterVisible = false;



  public NavDrawerItem() {

  }



  public NavDrawerItem(String title, int icon) {

    this.title = title;

    this.icon = icon;

  }



  public NavDrawerItem(String title, int icon, boolean isCounterVisible,

      String count) {

    this.title = title;

    this.icon = icon;

    this.isCounterVisible = isCounterVisible;

    this.count = count;

  }



  public String getTitle() {

    return this.title;

  }



  public int getIcon() {

    return this.icon;

  }



  public String getCount() {

    return this.count;

  }



  public boolean getCounterVisibility() {

    return this.isCounterVisible;

  }



  public void setTitle(String title) {

    this.title = title;

  }



  public void setIcon(int icon) {

    this.icon = icon;

  }



  public void setCount(String count) {

    this.count = count;

  }



  public void setCounterVisibility(boolean isCounterVisible) {

    this.isCounterVisible = isCounterVisible;

  }

}

8. Membuat Adapter DrawerItem

Buat package baru untuk meletakkan class adapter. Package saya com.netyherawaty.slidingmenu.adapter Buat class NavDrawerListAdapter.java dan tambahkan kode berikut
package com.netyherawaty.slidingmenu.adapter;



import java.util.ArrayList;



import com.netyherawaty.slidingmenu.R;

import com.netyherawaty.slidingmenu.model.NavDrawerItem;



import android.app.Activity;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;



public class NavDrawerListAdapter extends BaseAdapter {

 

  private Context context;

  private ArrayList<NavDrawerItem> navDrawerItems;

 

  public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){

    this.context = context;

    this.navDrawerItems = navDrawerItems;

  }



  @Override

  public int getCount() {

    return navDrawerItems.size();

  }



  @Override

  public Object getItem(int position) {  

    return navDrawerItems.get(position);

  }



  @Override

  public long getItemId(int position) {

    return position;

  }



  @Override

  public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {

            LayoutInflater mInflater = (LayoutInflater)

                    context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

            convertView = mInflater.inflate(R.layout.drawer_list_item, null);

        }

        

        ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon);

        TextView txtTitle = (TextView) convertView.findViewById(R.id.title);

        TextView txtCount = (TextView) convertView.findViewById(R.id.counter);

        

        imgIcon.setImageResource(navDrawerItems.get(position).getIcon());       

        txtTitle.setText(navDrawerItems.get(position).getTitle());

       

        if(navDrawerItems.get(position).getCounterVisibility()){

          txtCount.setText(navDrawerItems.get(position).getCount());

        }else{

          txtCount.setVisibility(View.GONE);

        }

       

        return convertView;

  }



}

9. Update class MainActivity

tambahkan kode berikut pada class MainActivity.java
package com.netyherawaty.slidingmenu;



import java.util.ArrayList;



import com.netyherawaty.slidingmenu.adapter.NavDrawerListAdapter;

import com.netyherawaty.slidingmenu.model.NavDrawerItem;



import android.os.Bundle;

import android.app.Activity;

import android.app.Fragment;

import android.app.FragmentManager;

import android.content.res.Configuration;

import android.content.res.TypedArray;

import android.support.v4.app.ActionBarDrawerToggle;

import android.support.v4.widget.DrawerLayout;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;



public class MainActivity extends Activity {



  private DrawerLayout mDrawerLayout;

  private ListView mDrawerList;

  private ActionBarDrawerToggle mDrawerToggle;

  private CharSequence mDrawerTitle;

  private CharSequence mTitle;

  private String[] navMenuTitles;

  private TypedArray navMenuIcons;



  private ArrayList<NavDrawerItem> navDrawerItems;

  private NavDrawerListAdapter adapter;



  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);



    mTitle = mDrawerTitle = getTitle();

   

    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);



    navMenuIcons = getResources()

        .obtainTypedArray(R.array.nav_drawer_icons);



    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);



    navDrawerItems = new ArrayList<NavDrawerItem>();



    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1), true, "5"));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true, "2"));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1), true, "12"));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(6, -1)));

   

    navMenuIcons.recycle();



    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

   

    adapter = new NavDrawerListAdapter(getApplicationContext(),

        navDrawerItems);

    mDrawerList.setAdapter(adapter);



    getActionBar().setDisplayHomeAsUpEnabled(true);

    getActionBar().setHomeButtonEnabled(true);



    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,

        R.drawable.ic_drawer,

        R.string.app_name,

        R.string.app_name

    ) {

      public void onDrawerClosed(View view) {

        getActionBar().setTitle(mTitle);

        invalidateOptionsMenu();

      }



      public void onDrawerOpened(View drawerView) {

        getActionBar().setTitle(mDrawerTitle);

        invalidateOptionsMenu();

      }

    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);



    if (savedInstanceState == null) {

      displayView(0);

    }

  }



  private class SlideMenuClickListener implements

      ListView.OnItemClickListener {

    @Override

    public void onItemClick(AdapterView<?> parent, View view, int position,

        long id) {

      displayView(position);

    }

  }



  @Override

  public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);

    return true;

  }



  @Override

  public boolean onOptionsItemSelected(MenuItem item) {

    if (mDrawerToggle.onOptionsItemSelected(item)) {

      return true;

    }

    switch (item.getItemId()) {

    case R.id.action_settings:

      return true;

    default:

      return super.onOptionsItemSelected(item);

    }

  }



  @Override

  public boolean onPrepareOptionsMenu(Menu menu) {

    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);

    menu.findItem(R.id.action_settings).setVisible(!drawerOpen);

    return super.onPrepareOptionsMenu(menu);

  }



  private void displayView(int position) {

    // update the main content by replacing fragments

    Fragment fragment = null;

    switch (position) {

    case 0:

      fragment = new HomeFragment();

      break;

    case 1:

      fragment = new DirectoryFragment();

      break;

    case 2:

      fragment = new PromotionFragment();

      break;

    case 3:

      fragment = new EventFragment();

      break;

    case 4:

      fragment = new VoucherFragment();

      break;

    case 5:

      fragment = new MyAccountFragment();

      break;

    case 6:  

      break; 

     

    default:

      break;

    }



    if (fragment != null) {

      FragmentManager fragmentManager = getFragmentManager();

      fragmentManager.beginTransaction()

          .replace(R.id.frame_container, fragment).commit();



      mDrawerList.setItemChecked(position, true);

      mDrawerList.setSelection(position);

      setTitle(navMenuTitles[position]);

      mDrawerLayout.closeDrawer(mDrawerList);

    } else {

      Log.e("MainActivity", "Error in creating fragment");

    }

  }



  @Override

  public void setTitle(CharSequence title) {

    mTitle = title;

    getActionBar().setTitle(mTitle);

  }



  @Override

  protected void onPostCreate(Bundle savedInstanceState) {

    super.onPostCreate(savedInstanceState);

    mDrawerToggle.syncState();

  }


  @Override

  public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);

    mDrawerToggle.onConfigurationChanged(newConfig);

  }

}

Sampai disini Anda akan menemukan error di bagian kode berikut
  private void displayView(int position) {

    // update the main content by replacing fragments

    Fragment fragment = null;

    switch (position) {

    case 0:

      fragment = new HomeFragment();

      break;

    case 1:

      fragment = new DirectoryFragment();

      break;

    case 2:

      fragment = new PromotionFragment();

      break;

    case 3:

      fragment = new EventFragment();

      break;

    case 4:

      fragment = new VoucherFragment();

      break;

    case 5:

      fragment = new MyAccountFragment();

      break;

    case 6:  

      break; 

    default:

      break;

    }

Kode diatas adalah sebagai handling navigation ketika salah satu sliding menu di klik. Jadi buatlah class dan layout untuk menu Home, Directory, Promotion, Event, Voucher dan MyAccount. Saya beri contoh untuk class dan layout menu Voucher.

10. Membuat Fragment View

Buatlah class baru dengan nama VoucherFragment.java dan tambahkan kode berikut
package com.netyherawaty.slidingmenu;

import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;
public class VoucherFragment extends Fragment {


      public VoucherFragment(){}

      @Override

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


          View rootView = inflater.inflate(R.layout.fragment_voucher, container, false);

          return rootView;

      }

}

Kemudian untuk layoutnya buat file xml dengan nama fragment_voucher.xml
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">
 

    <TextView

        android:id="@+id/txtLabel"

         android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerInParent="true"

        android:textSize="16dp"

        android:text="Voucher View"/>


    <ImageView android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_below="@id/txtLabel"

        android:src="@drawable/icon_voucher"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="10dp"/>

</RelativeLayout>

Lakukan hal yang sama untuk menu lain. Perhatikan struktur project yang sudah kita buat sampai saat ini



Sekarang run project, klik pada hamburger icon dan navigation drawer akan tampil seperti gambar dibawah ini.


Ketika di klik pada menu Voucher, maka akan tampil fragment layout yang telah kita buat di langkah no 10 dan navigation drawer akan hilang (hidden)


Sunday, December 1, 2013

Posted by Netty Herawaty
| 7:58 PM
Wah tidak terasa saya sudah membahas Android sejak tahun 2010 dari Android masih versi Cupcake sampai sekarang sudah versi KitKat. Semakin baru versi yang dirilis semakin banyak fitur baru yang menarik. Tidak hanya dari sisi user atau pengguna, tapi dari sisi developer atau pengembang juga menemukan banyak sekali fitur back end yang menarik untuk dicoba.

Salah satunya adalah Android menyediakan holo theme yaitu (Holo Dark, Holo Light dan Holo Light with Dark Action Bar), activity type (Blank Activity, Fullscreen Activity dan Master/Detail Flow), navigation type (Fixed Tabs + Swipe, Scrollable Tabs + Swipe, Dropdown)

1. Holo Theme

Silahkan pilih tema ketika membuat new android project



a. Holo Dark
Contoh tema Holo Dark adalah pada Gmail



b. Holo Light
Contoh holo light adalah pada setting



c. Holo Light with Dark Action Bar
Tema warna terang dengan action bar warna gelap

3. Navigation Type

a. Fixed Tabs + Swipe
Tipe navigasi dengan tab menu yang fix atau tetap tidak bisa bergerak dan form swipe atau bisa digeser


b. Scrollable Tabs + Swipe
Tipe navigasi dengan menu tab yang bisa di scroll ke kanan dan ke kiri dan form yang bisa di geser atau swipe


c. Dropdown
Terdapat dropdown pada action bar

Saturday, September 7, 2013

Posted by Netty Herawaty
| 1:20 AM
Seperti yang kalian ketahui bahwa penamaan versi Android adalah dengan nama makanan. Sejak versi JellyBean keluar saya selalu penasaran kira-kira utuk versi Android "K" namanya apa ya? Ketupat? Ketoprak ? Kelepon? dan akhirnya misteri terpecahkan :D

Ternyata Google memilih KitKat sebagai nama dari Android versi 4.4 dengan API 19. Android KitKat ini resmi di rilis Google pada tanggal 3 September lalu. Konon sih katanya inspirasi nama KitKat diambil dari nama coklat yang selalu tersedia di dapur untuk menemani para programmer Google yang lembur. Jadi Google meminta izin ke Nestle yang mempunyai hak paten KitKat untuk memakai nama tersebut sebagai nama Android versi terbaru. 

Sebelumnya saya pernah baca berita kalau Google akan memakai nama Key Lime Pie. Syukurlah tidak jadi memakai nama itu, karena di telinga pun kurang familiar nama dan bentuk makanannya :D Sedangkan KitKat pasti semua tahu donk dengan jargonnya yang terkenal "Ada break? ada KitKat"



Nah tentu saja para user Android maupun developer Android penasaran kan bagaimana fitur-fitur baru yang ditawarkan KitKat? Berikut bocoran fiitur barunya :

1. Fitur "OK Google" di homescreen untuk memulai pencarian menggunakan Google search

2. Fitur baru bernama "Immersive Mode" yang memungkinkan swipe dari pinggir screen untuk mengembalikan status baru dan tombol navigasi

3. Mengurutkan contact berdasarkan orang-orang yang sering di telepom

4. Caller ID untuk nomor yang tidak dikenal. Ini ditujukan untuk local business

5. Emoji pada keyboard app

6. Hangouts app versi baru dilengkapi fitur SMS

7. Google Cloud Print untuk HP ePrint 

8. QuickOffice desain baru 

Wednesday, June 5, 2013

Posted by Netty Herawaty
| 3:02 AM

Apa itu MVC ?

MVC adalah sebuah design pattern yang memisahkan tiga layer penting dari sebuah  aplikasi yaitu Model, View dan Controller. MVC dibuat  oleh  Trygve  Reenskaug,  seorang  computer  engineer berkebangsaan Norwegia  yang  bekerja  pada  Smalltalk-80  pada  tahun  1979.



MVC = Model View Controller

Model

Model merepresentasikan struktur data atau digunakan untuk melakukan koneksi ke basis data. Kelebihan dalam pattern ini adalah detail dari data dan operasinya dapat ditempatkan pada area yang ditentukan (Model) jadi tidak tersebar ke seluruh lingkup aplikasi. Hal ini memberikan keuntungan dalam proses pemeliharaan data

View 

View merepresentasikan user interface atau tampilan. Di dalam View tidak berisi logika-logika kode tetapi hnya berisi variabel-variabel yang berisi data siap ditampilkan. View hanya dikhususkan untuk menampilkan data-data hasil dari Model dan Controller.

Penggunaan layer View ini memiliki kelebihan, yaitu memudahkan penggabungan divisi desain dalam development team. Jadi para designer web bisa berkonsentrasi pada style, look and feel di layer ini tanpa harus memikirikan layer lainnya

Controller

Controller merepresentasikan hubungan antara Model dan Controller yaitu sebagai "otak" atau business logic yang menggabungkan keduanya. Di dalam Controller inilah terdapat class, fungsi-fungsi dan variable yang akan ditampilkan di View serta memanggil Model untuk melakukan akses basis data.

Mengapa MVC ?

Keuntungan menggunakan arsitektur MVC ini adalah pemisahan terhadap basis kode, fokus  dalam  proses development  karena  terbagi  menjadi  tiga  layer  dan pengembangan dapat dilakukan secara paralel oleh tim yang berbeda. Dari ketiga keuntungan  tersebut  bisa  dilihat  bahwa  dengan  pendekatan  model  ini, development dapat dilakukan lebih cepat dan terstruktur. Selain itu, arsitektur ini adalah  yang  paling  banyak  digunakan  oleh  vendor  dalam  industri  software khususnya yang berbasis aplikasi web.

Thursday, May 16, 2013

Posted by Netty Herawaty
| 2:18 AM
Setelah postingan sebelumnya membahas tentang pengenalan Apache Maven sekarang kita akan membahas instalasi Maven di Ubuntu dan Windows.

1. Verifikasi Instalasi Java

Meskipun Maven dapan berjalan pada Java 1.4, kita mengasumsikan anda menjalankan setidaknya pada Java 6. Gunakanlah  Java Deveopment Kit (JDK)  terbaru yang tersedia untuk sistem operasi anda. Anda bisa menggunakan Java 6 atau Java 7.

$ java -version
java version "1.7.0_17"
OpenJDK Runtime Environment (fedora-2.3.8.3.fc18-i386)
OpenJDK Server VM (build 23.7-b01, mixed mode)

Maven bekerja dengan semua Java TM yang tersertifikasi compatible development kits dan juga untuk beberapa implementasi Java non-sertifikasi

2. Mengunduh Maven

Anda dapat mengunduh Maven dari halaman website proyek Apache Maven pada http://maven.apache.org/download.html.   Ketika  mengunduh  Maven  anda  dapat mengunduh versi terbaru dari Maven 3. Versi terbaru dari Maven 3 sekarang adalah 3.0.5. Jika anda belum terbiasa dengan lisensi Apache Software Foundation, maka anda harus membiasakan diri dengan dengan syarat dan ketentuan sebelum anda menggunakan produk tersebut. Informasi lebih lanjut tentang lisensi Apache dapat anda lihat di http://maven.apache.org/license.html

3. Mengunduh Maven 3

Untuk mengunduh Maven 3, kunjungi  http://maven.apache. org/download.html  dan pilih format arsip yang sesuai dengan platform anda. Gambar di bawah menunjukkan bagian dari halaman unduh yang berisi tautan ke arsip Apache Maven 3.0.5.


4. Menginstal Maven pada Ubuntu

Proses instalasi Maven pada semua sistem operasi relatif mudah. Bagian berikut akan menjelas-kan cara terbaik yang direkomendasikan untuk menginstal Maven pada berbagai sistem operasi. Anda dapat mengunduh rilis file binary Maven terbaru pada http://maven.apache.org/. Letakkan pada direktori yang dikehendaki dimana Maven akan bekerja dan ekstrak arsip pada lokasi tersebut. 

Jika anda mengekstrak pada direktori /usr/local/apachemaven-3.0.5, anda perlu membuat link agar Maven mudah diakses dan mencegah kemungkinan perubahan konfigurasi  environment ketika anda melakukan upgrade terhadap versi terbaru.

$ cd /usr/local
$ ln -s apache-maven-3.0.5 maven
$ export M2_HOME=/usr/local/maven
$ export PATH=${M2_HOME}/bin:${PATH}

Setelah  maven  terinstal,  anda  perlu  melakukan  beberapa  hal  berikut  untuk membuatnya bekerja dengan baik. Anda perlu menambahkan direktori bin dari direktori (dalam contoh ini, /usr/local/maven/bin) ke dalam command path. Anda juga perlu mengatur environment variable M2_HOMEmenjadi direktori top-level dimana Maven diinstal (dalam contoh ini, /usr/local/maven). 

5. Menginstal Maven pada Windows

Instalasi maven pada Windows tidak jauh berbeda dengan proses instalasi pada Linux, perbedaan utama adalah pada lokasi instalasi dan pengaturan  environment variable. Misal instalasi Maven berada pada  C:\Program Files\apache-maven-3.0.5. Setelah anda mengekstrak Maven pada direktori instalasi, anda perlu mengatur dua environment variable PATHdan M2_HOME. Untuk mengatur varibel-variabel tersebut, ketik perintah berikut :

C:\Users\user > +set M2_HOME=c:\Program Files\apache-maven-3.0.3+
C:\Users\user > +set PATH=%PATH%;%M2_HOME%\bin+

Perintah  pada  command-line  diatas  akan  menjalankan  Maven  hanya  pada  saat perintah tersebut dijalankan. Namu jika anda menambahkannya ke dalam  System environment variable  melalui  control panel, perintah di atas akan dieksekusi setiap kali anda masuk ke dalam sistem. Anda harus memodifikasi kedua  environment variabletersebut melalui Control Paneldalam Microsoft Windows.

6. Menjalankan Instalasi Maven

Untuk mengecek versi dengan perintah mvn -vdari command-line. Jika maven telah terinstal, maka akan tampil output sebagai berikut :

$ mvn -v
Apache  Maven  3.0.5  (rNON-CANONICAL_2012-11-09_15-39_mockbuild;  2012-11-09
22:39:59+0700) 
Maven home: /usr/local/maven 
Java version: 1.7.0_17, vendor: Oracle Corporation 
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.17/jre 
Default locale: en_US, platform encoding: UTF-8 
OS  name:  "linux",  version:  "3.8.7-201.fc18.i686",  arch:  "i386",  family:
"unix" 

Jika output yang tampil seperti di atas maka Maven telah  terinstal dan siap untuk digunakan.  Jika  output  tersebut  tidak  muncul  dan  sistem  operasi  tidak  dapat menemukan  perintah  mvn,  maka  pastikan  bahwa  PATH dan  M2_HOME pada environment variabletelah di-set dengan benar.

Tuesday, May 7, 2013

Posted by Netty Herawaty
| 1:54 AM

Mengapa Maven ?


Ketika kita ingin membuat sebuah project Java, apa yang akan kita lakukan pertama kali? Biasanya kita akan langsung membuka IDE lalu mulai membuat project dari sana. Sekilas tampak tidak ada masalah, namun yang terjadi adalah project yang kita buat dengan IDE tertentu belum tentu bisa dibuka dari IDE yang lain (bisa tapi dengan cara  yang  cukup  melelahkan)  karena  masing  -  masing  IDE  memiliki  standarnya
sendiri. 

Kemudian kita akan coba menambahkan library ke dalam project tadi. Dengan cara manual kita bisa mendownload semua file yang kita butuhkan dan meletakkannya didalam classpath project. Tetapi kadang tidak semudah itu, bisa jadi library itu membutuhkan dependency library yang lain dan dependency library itu membutuhkan dependency  library  yang  lain  lagi  dan  seterusnya.  Bayangkan  kalo  harus  mencari  satu
persatu, tentu saja akan sangat melelahkan. 

Masalah belum berhenti sampai disini, contoh kasus lain misal ketika kita ingin berbagi project dengan orang lain. Biasanya kebanyakan orang malas untuk mengikutkan library dari project yang akan dibagikan tersebut, karena library yang banyak mengakibatkan file membesar dan dengan bandwidth yang minimum akan memakan waktu lama pada saat upload. Akibatnya adalah orang lain yang ingin memanfaatkan project ini harus mencari library yang dibutuhkan satu persatu dan ini sangat tidak praktis. 

Untuk mengatasi permasalahan diatas kita bisa menggunakan tools dari Apache yang bernama  Maven. Maven  memiliki  struktur  project  standar  yang  membuat  maven ramah terhadap IDE apapun. Maven juga menyediakan online repository yang memudahkan kita untuk download secara otomatis library yang kita butuhkan beserta dependencynya. 

Apa itu Maven ?

Maven  adalah  salah  satu  build  tool  populer  yang  dikembangkan  oleh  Apache Foundation dan berfungsi sebagai project management atau pengaturan proyek yang berdasarkan konsep Project Object Model (POM)

Apa Kegunaan Maven ?

Jawabannya tergantung dari perspektif Anda sendiri. Sebagian pengguna Maven akan menyebut  sebagai "alat  pembangun"  yaitu  sebuah  alat  yang  digunakan  untuk membangun  artefak  yang  dapat  di-deploy dari  suatu  kode  sumber.  Seorang pengembang atau developer dan project manager mungkin akan menyebut Maven sebagai sesuatu yang lebih komperhensif yaitu sebuah alat manajemen proyek. 

Apa bedanya Maven dengan Build Tool lain ?

Ant  difokuskan  hanya  pada  pra-pemrosesan,  kompilasi,  pemaketan,  testing  dan distribusi. Sedangkan sebuah alat manajemen proyek seperti Maven menyediakan satu set fitur yang dapat ditemui pada build tool. Selain menyediakan kemampuan membangun, Maven dapat menjalankan laporan, meng-generate  sebuah situs web, serta memfasilitasi komunikasi diantara tim kerja.


Untuk instalasi Maven akan saya bahas on my next post.