Monday, October 29, 2018

Kapan waktu efektif "coding"?



“Coding” istilah populernya.. dimana saat kita fokus mengerjakan modul, mencari solusi algoritma atau tracking error di suatu program biasanya membutuhkan waktu yang tidak sebentar. Kebanyakan programmer malam hari adalah waktu yang nyaman untuk melakukan aktivitas coding, ditemani dengan secangkir kopi panas dan camilan..  PERFECT! pastinya

Selama bertahun-tahun saya juga menikmati aktivitas coding di malam hari sampai dengan pagi. Setelah saya sadari ternyata saya banyak melewatkan hal-hal istimewa di saat pagi, yaitu tidak bisa shalat subuh berjamaah di masjid, karena sering ketiduran pas adzan, melakukan aktivitas seharian tidak fokus, karena masih kurang jatah tidurnya.

Akhirnya saya berusaha untuk merubah pola aktivitas tersebut supaya bisa mendapatkan keistimewaan dan keberlimpahan rejeki di pagi hari. Sekitar jam 8 malam, saya coba untuk mulai istirahat tidur, dan pasang alarm jam 2 atau 3 pagi. Saat bangun cobalah berwudhu dan lanjut shalat tahajud, inshaAllah hilang semua rasa kantuknya, selanjutnya mulailah aktivitas coding + kopi panas.

Alhamdulillah kebiasaan tersebut sudah terpola sejak 2-3 tahun yang lalu.

BangunAwal itu mengundang keberkahan dan keberlimpahan. "Ya Allah, berkahilah umatku di waktu pagi,” inilah doa Nabi Muhammad.

Di kesempatan lain, beliau bersabda, “Berpagi-pagilah dalam mencari rezeki, karena sesungguhnya berpagi-pagi itu membawa keberkahan dan mengantarkan pada kemenangan.”

Itulah salah satu rahasia sukses orang-orang beriman dalam melakukan penaklukan-penaklukan. Mereka melakukannya di waktu pagi. Bahkan hijrah Sang Nabi pun dilakukan di waktu pagi.

Silahkan bagi teman-teman yang ingin merubah pola waktu coding-nya bisa seperti yang saya lakukan, atau masih nyaman dengan menghabiskan waktu malam, silahkan sajaa.. 

Semoga bermanfaat..

Tuesday, October 9, 2018

Membuat ListView dan CustomListView di Android

Penggunaan komponen ListView sangat sering kita jumpai pada aplikasi Android, seperti pada aplikasi yang menampilkan kontak phonebook, menampilkan data report atau yang lainnya. ListView berguna menampilkan data dalam bentuk vertical/horizontal yang bisa kita scroll keatas dan kebawah.

ListView dapat berjalan menggunakan Adapter yang berfungsi mem-binding data yang akan kita tampilkan. Data-data tersebut bisa dari variabel array, file json yang di dapat dari akses ke API atau data-data dari database local seperti SQLite.

Berikut contoh membuat ListView  sederhana menggunakan ArrayAdapter untuk menampilkan data dari variabel array.

1. ListView Sederhana

Pertama siapkan komponen ListView pada file layout xml yang akan anda gunakan untuk menampilkan data
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context=".MyListActivity">

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="8dp" />

</android.support.constraint.ConstraintLayout>

Selanjutnya buatlah variabel ListView dan variabel String array untuk menyiapkan data-data yang akan ditampilkan melalui adapter.
private ListView lvItem;
private String[] players = new String[]{
   "Cristiano Ronaldo", "Paulo Dybala", "Mario Mandžukić",
      "Miralem Pjanić", "Sami Khedira", "Emre Can", "Claudio Marchisio",
      "Medhi Benatia", "Giorgio Chiellini", "Leonardo Bonuci",
      "Wojciech Szczęsny"
};

Dan yang terakhir, pada methode onCreate tambahkan Adapter dan  panggil dari lvItem menggunakan method setAdapter( ), berikut kodenya:
lvItem = (ListView) findViewById(R.id.list_view);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyListActivity.this,
     android.R.layout.simple_list_item_1, android.R.id.text1, players);

lvItem.setAdapter(adapter);

2. Custom ListView

Custom ListView adalah suatu list dari beberapa item dengan tampilan content yang bisa kita sesuaikan dan mendukung multi-content. Misalkan kita ingin menampilkan data dengan beberapa tipe content, kita bisa menggunakan Custom ListView ini.

Pada tutorial ini kita akan coba menambahkan tampilan data position dan number dari data players yang sudah kita buat pada listView sebelumnya. Anda bisa buat Activity baru lagi dan tambahkan variabel array lagi seperti dibawah ini:

private ListView lvCustom;
private String[] players = new String[]{
    "Cristiano Ronaldo", "Paulo Dybala", "Mario Mandžukić",
    "Miralem Pjanić", "Sami Khedira", "Emre Can", "Claudio Marchisio",
    "Medhi Benatia", "Giorgio Chiellini", "Leonardo Bonuci",
    "Wojciech Szczęsny"
};

private String[] pos = new String[]{
    "Forward", "Forward", "Forward",
    "Midfilder", "Midfilder", "Midfilder", "Midfilder",
    "Defender", "Defender", "Defender",
    "Goal Keeper"
};

private int[] num = {7,10,17,5,6,23,8,4,3,19,1};

Untuk Adapter Custom ini, kita perlu siapkan file xml untuk membuat tampilan view yang kita inginkan. Selain itu kita juga perlu membuat Class di java yang merupakan extends/turunan dari BaseAdapter. Untuk layout xml utama masih sama seperti pada point 1 ListView Sederhana, kita harus menambahkan komponen ListView pada layout tersebut. Berikut contoh kode xml yang anda simpan pada file /res/layout/list_players.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="fill_vertical"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/ic_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/tv_player"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="5dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:textColor="#000000"
                android:text="Paulo Dybala"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/tv_number"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="5dp"
                android:paddingLeft="10dp"
                android:paddingRight="16dp"
                android:text="10"
                android:textAlignment="viewEnd"
                android:textColor="@color/colorPrimaryDark"
                android:textSize="18sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv_pos"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingBottom="5dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:text="Forward"
                android:textColor="@color/colorPrimaryDark" />
        </LinearLayout>

    </LinearLayout>

</LinearLayout>

Dan berikut ini adalah kode dari Custom Adapter yang kita siapkan untuk mengatur data dari variabel-variabel array sebeumnya. Kita simpan dengan nama JuveAdapter.java

public class JuveAdapter extends BaseAdapter {

    Context context;
    String[] players;
    String[] positions;
    int[] number;
    LayoutInflater inflater;

    public JuveAdapter(Context context, String[] players, String[] positions,
                       int[] number) {
        this.context = context;
        this.players = players;
        this.positions = positions;
        this.number = number;
        this.inflater = (LayoutInflater.from(context));
    }

    @Override
    public int getCount() {
        return players.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = inflater.inflate(R.layout.list_players, null);
        TextView tvPlayers = (TextView) view.findViewById(R.id.tv_player);
        TextView tvPositions = (TextView) view.findViewById(R.id.tv_pos);
        TextView tvNumbers = (TextView) view.findViewById(R.id.tv_number);

        tvPlayers.setText(players[i]);
        tvPositions.setText(positions[i]);
        tvNumbers.setText(number[i]+"");

        return view;
    }
}

Dan terakhir kita perlu menambahkan kode berikut di method onCreate untuk men-set Custom Adapter yang telah kita buat pada slistview.

lvCustom = findViewById(R.id.list_view);
JuveAdapter adapter = new JuveAdapter(this, players, pos, num);
lvCustom.setAdapter(adapter);

Tampilan ListView dan Custom ListView sebagai berikut:

 

Jika ada pertanyaan dari kode tutorial kode diatas, silahkan tinggal pesan pada kolom komentar, Semoga bermanfaat

Wednesday, October 3, 2018

Deploy Aplikasi menggunakan PHPloy

Bagi pengembang aplikasi web saat ini, baik back-end, front-end ataupun fullstack, seharusnya sudah tidak menggunakan tools FTP Client untuk deploy aplikasi ke server. Sudah tidak lazim drap and drop file dari window satu ke window yang lainnya. Atau tidak perlu lagi menggunakan lagi cpanel file manager untuk upload file zip untuk membuat aplikasinya live di server.

Hehe.. ini menurut pendapat saya looh dan mungkin juga banyak yang setuju koq.. ✌😉

Pengertian deployment di web adalah proses memindahkan kode (terupdate) ke live server. Dan menurut Baki Goxhaj dalam blognya di wplancer.com, banyak developer paham tentang proses ini dan ternyata hanya sedikit orang saja yang melakukanya dengan cara yang professional.

Sudah ada beberapa tools untuk memudahkan proses deployment tersebut, seperti menggunakan Jenkins atau Capistrano. Sebelumnya saya juga menggunakan tools online seperti FTPloy dan Deploybot, tapi disini ada kelemahan yaitu hanya menyediakan 1 project saja untuk deployment, lebih dari itu maka silahkan menyesuaikan dengan tarif yang ada 😅


Untuk menggunakan PHPloy ini pastikan project anda sudah menggunakan Git sebagai code collaboration. Konsep kerja PHPloy ini adalah melakukan perubahan(upload/delete) file-file yang telah ter commit pada git ke server, sangat simple dan mudah digunakan. Proses deployment PHPloy menggunakan command pada terminal dengan perintah-perintah yang telah didefinisikan.

Untuk memulai menggunakan PHPloy anda bisa mengikuti langkah-langkah berikut ini:
  1. Gunakan composer dengan menambah paket di file composer.json. Belum tau apa itu composer? silahkan pelajari artikel di link berikut ini.
    {
        "require": {
            "banago/phploy":"4.8.5"
        }
    }
    
  2. Selanjutnya dari terminal jalankan perintah:
    composer update
    
  3. Copykan file /vendor/banago/phploy/bin/phploy ke root project anda
  4. Buat file baru dengan nama phploy.ini, yang berisi kode konfigurasi berikut
    [production]
    user = username
    pass = s0m3p455w0rd
    host = yourdomain.com
    path = /public_html/folder
    exclude[] = 'phploy'
    exclude[] = 'phploy.ini'
    exclude[] = 'composer.json'
    exclude[] = 'composer.lock'
    port = 21
    passive = true
    
  5. Setelah melakukan perubahan kode-kode program, jalankan perintah git add dan git commit.
  6. Untuk melihat file-file apa saja yang akan di deploy, gunakan perintah berikut di terminal
    phploy -l
    
  7. Dan terakhir untuk proses deploy ketikan perintah phploy. Selanjutnya akan muncul proses deploy di terminal, silahkan menunggu proses tersebut.
    phploy
    
  8. Jika dirasa ingin membatalkan proses deployment tersebut bisa dilakukan rollback dengan perintah:
    phploy –rollback
    
Menurut saya tools ini sangat simple dan mudah sekali dalam penggunaan atau konfigurasinya. Bahkan PHPloy ini bisa juga digunakan untuk deployment ke beberapa server sekaligus.