Friday, January 4, 2019

Kembali ke Pebble watch

Pebble adalah smartwatch yang mulai muncul sekitar April 2012 dan support untuk OS Android dan iOS. Pada saat itu, Pebble merupakan satu-satunya smartwatch yang ada, belum ada saingan dari Samsung Gear, Garmin atau iWatch. Pebble Classic adalah smartwatch seri pertama yang diluncurkan oleh Pebble Techology Corporation dan pada bulan Mei 2012 berhasil memperoleh keutungan US$10,3 juta.

Saat itu harga Pebble Classic sekitar $99 dan pada periode promo bisa diorder dengan harga $70-an. Akhir tahun 2013 saya sukses mendapatkan pebble dari searching di Olx dan COD-an di TVRI Jogja dengan harga klo ga salah 800 ribu sekian.

Alasan memiliki Pebble ketika itu adalah: (1)Ga pernah punya jam tangan, (2)Smartwatch yang mendukung notifikasi di Android, (3)Terdapat berbagai macam apps dan watchface yang ada di Pebble Store/Play (Ga tau namanya), (4)Menyediakan Pebble SDK dimana kita dapat mendevelop app atau watcface (Belum kesampaian 😅)

Ternyata seri Pebble Classic ini terdapat kelemahannya, setelah menggunakan sekitar 2 tahun muncul maslaah yaitu layar pada Pebble sering blur/pecah. Setelah mencoba googling, banyak juga yang mengalami masalah ini, istilahnya "pebble screen tearing". Akhirnya saya coba untuk email ke support Pebble dan Alhamdulillah saya akan mendapatkan 1 set Pebble sebagai pengantinya. 💪

Inilah tampilan screen tearing..
Dan sekitar bulan Juli 2015 saya mendapatkan paketnya yang dikirim melalui DHL dan harus menebus sekitar Rp150,000 di Kantorpos. Hmm... seharusnya penerima ga dikenankan biaya lagi, karena ini bukan pembelian barang baru, tapi return dari perusahaan Pebble. Tapi yaa sudahlah.. susah menjelaskan ke pihak yang bersangkutan dan tidak perlu berdebat, banyak-banyak berdoa saja, InshaAllah akan lebih banyak rejeki dari berbagai arah yang tak terduga. 😁😇

Sekitar satu tahun terakhir masalah screen tearing muncul lagi, terakhir kali saya gunakan adalah bulan November 2017 saat trip ke Japan, tapi setelah itu sudah tidak tertolong lagi karena semakin parah. Berhubung perusahaan Pebble sudah  tutup sejak tahun 2016 dan di-informasikan tidak lagi ada supportnya (FYI: Pebble dibeli perusahaan Fitbit dan harga smartwatch-nya mahal-mahal 😑) maka saya pasrahkan saja untuk menyimpan rapat-rapat di kotaknya kembali.

Tetapi 2 hari kemarin koq tiba-tiba di youtube muncul recommended video dengan judul "[GUIDE] Pebble Screen Tearing Fix", penasaran khaan.. dilanjut menyimak dan melihat video-video lainnya. Selanjutnya coba degh buka kembali kotak Pebble dan setelah 1/2 jam bongkar-bongkar berhasil juga fixing Pebble.


Setelah Pebble bisa digunakan kembali rencana meminang Fitbit dibatalkan dulu, karena dari sisi kegunaan smartwatch ini sudah mencukupi. Dan untuk setup kembali ternyata harus install aplikasi rebble sebagai gateway untuk menghubungkan ke aplikasi resmi Pebble. Selanjutnya penggunaan seperti biasa, pilih-pilih watchface, pilih-pilih aplikasi dan nikmati jaman-jaman kejayaan pebble dahulu kala.. ✌😉

Kembali menemani hari-hari yang menyenangkan 😉

Sunday, December 30, 2018

Alasan kenapa update ke Android 9


Setelah dipastikan rilis Android versi 9 atau P dengan codename "Pie" pada tanggal 6 Agustus 2018 kemarin, akhirnya di penghujung tahun 2018 ini kebagian juga update di Mi A1. Seperti pada update-update Android OS sebelumnya, saya tidak begitu tertarik dengan fitur-fitur baru yang ditawarkan. Selama masih oke untuk produktifitas kerjaan dan hoby, fitur-fitur tersebut bagi saya sebagai tambahan saja.

Pada Xiaomi Mi A1, ukuran file update Android P sekitar 1074 MB atau 1GB lebih sedikit. Setelah berhasil update ke Android P, saya coba explore fitur-fitur terbarunya, seperti adaptive battery, adaptive display dan digital wellbeing.

Tetapi pada update Android versi ini, saya tertarik untuk mempelajari aplikasi Digital Wellbeing dari Google. Aplikasi ini dapat meng-identifikasi pengguna ketika melakukan aktivitas di smartphone. Bahkan bisa detail sampai ke setiap aplikasi yang ada. Misal dalam sehari kita menggunakan Whatsapp selama berapa jam, berapa kali membukanya dan berapa jumlah notifikasinya.

Aplikasi Digital Wellbeing
Screen time dan timer limit setiap aplikasi
Bahkan kita bisa mengatur limit dari setiap aplikasi dalam sehari, contohnya Whatsapp bisa kita set sehari maksimal 30 menit, maka setelah lewat dari 30 menit kita tidak dapat membuka aplikasi Whatsapp dan icon menjadi disable. Bagi yang peduli dengan produktivitas aplikasi ini sangat berguna, dengan mempelajari history statistik penggunaan smartphone bisa menjadikan motivasi untuk meningkatkan produktivitas.

Saya sendiri memanfaatkan aplikasi ini untuk mengurangi penggunaan Whatsapp dan meningkatkan penggunaan beHafizh pada beberapa minggu ini, semoga bisa menjadi lebih baik dalam meningkatkan produktifitas dan kebermanfaat banyak orang.

Selamat mencoba untuk mencicipi Pie dari Android 9

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..

Monday, October 8, 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 itu cek apakah phploy dan konfigurasinya sudah sesuai dengan menjalankan perintah di terminal
    [unix/mac]
    ./phploy -v
    
    [windows]
    php phploy -v
    
    [akan menampilkan seperti dibawah ini]
    C:\Users\Arif Laksito\www>php phploy -v
    -------------------------------------------------
    |                     PHPloy                    |
    -------------------------------------------------
    PHPloy v4.8.5
  6. Setelah melakukan perubahan kode-kode program, jalankan perintah git add dan git commit.
  7. Untuk melihat file-file apa saja yang akan di deploy, gunakan perintah berikut di terminal
    ./phploy -l
    
  8. Dan terakhir untuk proses deploy ketikan perintah phploy. Selanjutnya akan muncul proses deploy di terminal, silahkan menunggu proses tersebut.
    ./phploy
    
  9. 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.

Monday, August 20, 2018

Membuat Splash Screen di Android

Pada beberapa aplikasi Android, terdapat splash screen yang akan tampil saat aplikasi pertama di jalankan. Fungsi dari splash screen tersebut bermacam-macam, ada yang digunakan untuk load data, untuk menjalankan file konfigurasi, atau untuk proses suatu algoritma tertentu.

Ada juga splash screen yang tidak ada fungsinya sama sekali, khusus digunakan untuk tampilan awal saja. Pada artikel ini akan saya bahas pembuatan splash screen yang digunakan untuk tampilan saja, tidak ada fungsi khusus di dalamnya. 

Setelah membuat project baru dari AndroidStudio, buat activity baru dengan nama SplashActivity. jadikan activity tersebut sebagai launcher dan tambahkan code untuk file manifests/AndroidManifest.xml sebagai berikut:
<activity android:name=".MainActivity"></activity>
<activity android:configchanges="orientation|keyboardHidden|screenSize" 
    android:name=".SplashActivity" 
    android:theme="@style/AppTheme.Fullscreen">
     <intent-filter>
          <action android:name="android.intent.action.MAIN">
          <category android:name="android.intent.category.LAUNCHER">
     </category></action></intent-filter>
</activity>
Pada code diatas masih muncul error di editor, karena tema yang digunakan SplashActivity tidak ditemukan, selanjutnya tambahkan code berikut di file /res/values/styles.xml:
<style name="AppTheme.Fullscreen">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>
Untuk tampilan layout-nya, kita bisa sesuaikan file /res/layout/activity_splash.xml dengan code dibawah ini:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@color/colorPrimaryDark"
    android:orientation="vertical"
    tools:context=".SplashActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="200dp"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content"
        android:contentDescription="Logo"
        app:srcCompat="@drawable/logo_movie" />
</RelativeLayout>


Dalam pembuatan logo contoh aplikasi ini saya gunakan web online https://logomakr.com/, dimana kita tinggal sesuaikan saja dengan icon dan font yang bisa kita butuhkan dan edit secara online. File logo dalam format png silahkan di-copy pada folder /res/drawable dan di panggil sesuai namanya seperti pada code diatas.

Terakhir, pada file SplashActivity tambahkan code berikut pada fungsi onCreate( ). Code tersebut berfungsi mengarahkan ke MainActivity setelah delay waktu 2 detik.
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}, 2000);
Dan tampilan akhirnya kurang lebih seperti pada gambar dibawah ini:


Silahkan untuk dicoba code diatas untuk membuat splash screen di Android, jika ada yang ingin ditanyakan bisa tinggalkan di kolom pesan yaa

Sunday, August 19, 2018

Bagaimana menyimpan API KEY di Android?

Sebelumnya saya selalu menyimpan API Key dalam suatu class di android pada field tertentu. Ternyata hal ini sangat tidak dianjurkan dalam best practice pengembangan aplikasi Android. Kenapa? 

Karena saat kita menaruh code program kita di suatu repository, misal Github, maka orang lain akan bisa mengakses API Key milik kita, dimana jika ada orang yang menyalahgunakan akan berakibat kerugian dari kita sendiri.

Berikut ini caranya supaya API Key kita tetap aman meskipun code kita dishare melalui repository:
  1. Setelah membuat project dan diintegrasikan dengan version control, misalnya git. Tambahkan file /gradle.properties pada gitignore dari project tersebut. Seperti pada baris ke-11 file .gitignore dibawah ini:
    *.iml
    .gradle
    /local.properties
    /.idea/libraries
    /.idea/modules.xml
    /.idea/workspace.xml
    .DS_Store
    /build
    /captures
    .externalNativeBuild
    /gradle.properties
    
  2. Tambahkan baris kode API berikut pada file project:gradle.properties. Pada contoh berikut saya gunakan 2 API Key dari TheMovieDB dan OpenWeather:
    #API KEY
    TheMovieDBApi = 4b5017168cac6677269cxxxxxx
    TheOpenWeatherApi = 4de4dd041e499ca8axxxxxx
    
  3. Selanjutnya buka file app: build.gradle, tambahkan code seperti pada baris ke-3 sampai dengan baris ke-6 dan code pada baris ke-17 sampai dengan baris ke-20 seperti dibawah ini:
    apply plugin: 'com.android.application'
    
    // Define Variable API Key
    def STRING = 'String'
    def THEMOVIEDB_API_KEY = '"' + TheMovieDBApi + '"' ?: '"Define your The Movie DB API Key!"'
    def OPENWEATHER_API_KEY = '"' + TheOpenWeatherApi + '"' ?: '"Define your The Openweather API Key!"'
    
    android {
        compileSdkVersion 28
        defaultConfig {
            applicationId "net.ariflaksito.katalogfilm"
            minSdkVersion 15
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            each { type ->
                type.buildConfigField STRING, 'TheMovieDBApi', THEMOVIEDB_API_KEY
                type.buildConfigField STRING, 'TheOpenWeatherApi', OPENWEATHER_API_KEY
            }
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:28.+'
        implementation 'com.android.support.constraint:constraint-layout:1.0.2'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.1'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    }
    
  4. Setelah itu anda bisa memanggil API Key tersebut melalui class di Android.
    static String MOVIE_API = BuildConfig.TheMovieDBApi;
    static String WEATHER_API = BuildConfig.TheMovieDBApi;
Alhamdulillah mendapatkan ilmu ini dari masukan reviewer di submission pertama pada project kelas MADE di dicoding, yang belum tau dicoding bisa menuju ke artikel saya yang ini.

Semoga bermanfaat yaa.. 

Thursday, August 16, 2018

Belajar Android dengan Dicoding


Sekitar 2 bulan yang lalu, salah satu rekan dosen mengajak saya untuk mengikuti beasiswa Google dengan kurikulum dari dicoding. Apa itu dicoding? Silahkan pelajari informasi detailnya di https://www.dicoding.com.

Awalnya saya pikir ini seperti online course lainnya yang membosankan dan tidak sesuai dengan kebutuhan industri, lebih enak belajar langsung dari stackoverflow.com degh 😅😁

Ternyata kurikulum di dicoding berbedaa, selain materi yang terstruktur seperti pada dokumentasi resmi di Android Developer dengan cita rasa bahasa indonesia, terdapat juga penjelasan dalam bentuk video oleh pakar-pakar yang berkompeten dan yang paling menarik adalah adanya code review dari setiap submission yang kita kerjakan.

Menurut saya yang paling menarik dan kereen adalah adanya fitur code review di dicoding. Disini kita bisa belajar banyak dari masukan-masukan yang diberikan oleh reviewer untuk code yang kita submit. Selanjutnya kita tinggal ikuti masukan-masukan tersebut untuk submission yang kita kerjakan atau untuk submission selanjutnya. Setelah menyelesaikan kelas Menjadi Android Developer Expert (MADE), banyak sekali pengalaman yang saya dapatkan dalam mengembangkan aplikasi Android kedepannya, dan pastinya sangat bermanfaat untuk teman-teman yang sedang belajar atau yang sudah berkecimpung di industri pengembangan aplikasi Android.

Oiyaa.. bagi mahasiswa aktif atau dosen bisa mendapatkan beasiswa dari Google untuk kelas MADE di dicoding, untuk dosen bisa dipelajari pada tautan berikut ini: https://goo.gl/AhXoWD. Sedangkan untuk mahasiswa bisa menuju ke tautan ini: https://goo.gl/YAt6ea

Bagi mahasiswa dibutuhkan referral dari dosen, silahkan bisa menggunakan link berikut ini:
  1. Belajar Membuat Aplikasi Android untuk Pemula, https://www.dicoding.com/s/G8Mw1nwQ
  2. Menjadi Android Developer Expert (MADE), https://www.dicoding.com/s/vwAvBXvW
Menurut saya, bagi yang benar-benar serius ingin belajar membuat aplikasi Android, beasiswa ini perlu diperjuangkan. Silahkan bisa di cek di tokopedia atau bukalapak untuk harga resmi course ini adalah 2,2 juta rupiah
Saat anda berhasil menyelesaikan suatu course di dicoding, anda akan mendapatkan sertifikat dimana bermanfaat khususnya bagi yang akan apply ke industri-industri aplikasi digital.

Pada artikel berikutnya akan saya bahas tentang salah satu submission di kelas MADE Dicoding.

Semoga bermanfaat.

Wednesday, August 15, 2018

Berkenalan dengan Composer

Pada artikel saya sebelumnya tentang Membangun REST API menggunakan Slim, saya menggunakan suatu package & dependencies manager yang akan saya bahas di posting kali ini.

Beberapa tahun terakhir ini, konsep pemrograman di php mengalami perubahan yang cukup membuat banyak programmer beralih karena kemudahannya. Dengan adanya suatu dependencies manager yang populer akhir-akhir ini yaitu composer, konsep pemrograman di php jadi lebih terstruktur dan rapi.

Dengan composer dan autoload-nya serta namespace, kita bisa bebas mengakses file-file php tanpa harus ribet meng-include atau me-require semua file atau class yang kita butuhkan, autoload dari composer sudah melakukan semua itu out of the box. Sehingga OOP dalam php benar-benar nyamaan.

Kemampuan composer dalam hal dependencies sangat membantu programmer saat menggunakan suatu paket tertentu dimana paket tersebut membutuhkan paket-paket lainnya juga. Secara otomatis composer akan mengatur dan menyesuaikan ketergantungan suatu paket dengan paket lainnya juga.

Paket yang dapat digunakan bisa diakses di https://packagist.org. Sampai saat artikel ini ditulis, jumlah paket yang sudah terdaftar adalah 191, 491.

Berikut ini beberapa kendala yang bisa diselesaikan menggunakan composer:
  1. Mengatasi masalah denpendencies PHP package,
  2. Mengatasi masalah include file dengan autoload,
  3. Mengatasi masalah update paket.

Instalasi Composer

Composer membutuhkan PHP dengan versi 5.3.2+. Berikut cara instalasi di Sistem Operasi Linux & Mac:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Sedangkan untuk pengguna Windows dapat melakukan instalasi dengan download file instaler dari alamat di https://getcomposer.org/Composer-Setup.exe.

Setelah instalasi selesai, anda bisa cek dengan menjalankan perintah berikut di command atau terminal:
composer -V

Penggunaan

Misalkan kita ingin menampilkan tanggal dengan berbagai macam format, disini sudah terdapat paket yang sering digunakan yaitu Carbon. Kita bisa mengetahui nama paket dengan melakukan pencarian pada web https://packagist.org. Setelah menemukan nama paketnya (contohnya disini: nesbot/carbon), kita jalankan perintah berikut di command atau terminal untuk mennggunakannya:
composer require nesbot/carbon
Maka composer akan otomatis mendownload paket tersebut dan membuat file baru composer.json, composer.lock dan folder vendor.

Perhatikan file composer yang otomatis ter-create tadi.
{
    "require": {
        "nesbot/carbon": "^1.33"
    }
}
Disitu terdapat informasi dalam format json dimana kita menggunakan paket nesbot/carbon dengan versi 1.33, jika ingin menambahkan paket yang lain, kita tinggal edit file tersebut dan jalankan perintah composer update.

Selanjutnya kita bisa buat satu file php, misal kita simpan dengan nama index.php. Pada baris awal kita tambahkan fungsi require autoload.php yang otomatis sudah menyertakan semua paket yang kita butuhkan. Kemudian kita bisa gunakan fungsi use untuk instansiasi class nya. Detail code di index.php seperti berikut ini:
<?php require 'vendor/autoload.php';

use Carbon\Carbon;

$date = Carbon::createFromDate(1990, 11, 19);
$now  = Carbon::now();

$str = "Usia anda saat ini %y tahun, %m bulan dan %d hari\n";
printf($date->diff($now)->format($str));
Hasil dari code diatas akan menampilkan usia yang dihitung dari tanggal pada variable date dengan selisih hari ini yang ditampilkan dalam format tahun, bulan dan hari. Lebih detail fitur-fitur yang ada di paket carbon silahkan pelajari pada dokumentasinya di tautan https://carbon.nesbot.com/docs/.

Menambahkan paket baru

Untuk menambah paket yang lainnya, silahkan edit file composer.json dan tambahkan nama paket yang akan digunakan. Contohnya akan ditambahkan paket untuk membuat qr-code dengan nama endroid/qr-code, berikut code di file composer.json setelah diupdate:
{
    "require": {
        "nesbot/carbon": "^1.33",
        "endroid/qr-code": "^3.2"
    }
}
Kemudian jalankan perintah berikut di command atau terminal:
composer update
Setelah proses download dan instalasi secara otomatis dari composer sukses, maka paket tersebut siap digunakan. Untuk menampilkan qr-code menggunakan paket tersebut sama seperti contoh sebelumnya, disini anda tidak perlu lagi meng-include / me-require nama paket yang baru, karena di fungsi require vendor sudah mengakomodasi semua paket yang terdownload melalui composer. Anda tinggal menginstansiasi saja nama class nya menjadi object di code php.

Berikut contoh code untuk menampilkan qr-code yang berisi suatu text "Hello World":
<?php require 'vendor/autoload.php';

use Endroid\QrCode\QrCode;

$qrCode = new QrCode('Hello World');

header('Content-Type: '.$qrCode->getContentType());
echo $qrCode->writeString();
Kesimpulan dari artikel ini, silahkan segera beralih menggunakan composer bagi programmer php yang belum, karena seperti dituliskan diatas ada 3 kemudahan yang didapatkan saat anda mulai menggunakannya.

Yang penting segera dicoba degh 😉

Tuesday, August 14, 2018

Membangun REST API menggunakan Framework Slim PHP

Pada salah satu project penelitian saya tentang sinkronisasi database, dimana terdapat 2 aplikasi yaitu: rest api dan android, saya berkesempatan menggunakan Framework Slim PHP untuk membangun aplikasi rest api. 

Ternyata Slim menawarkan kemudahan dalam membangun rest api. Detailnya bisa langsung menuju ke official web dari Slim di tautan berikut: https://www.slimframework.com/

Untuk memulai menggunakan Slim cukup mudah, silahkan dari command atau terminal ketikan perintah berikut ini:
composer require slim/slim "^3.0"
Jika komputer anda belum terinstal composer, silahkan bisa download dari tautan berikut ini.

Setelah anda jalankan perintah composer tersebut, maka akan akan ter-create folder /vendor dan file composer.json dan composer.lock.

Selanjutnya kita buat 1 file index.php dengin menambahkan code seperti dibawah ini:
<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';
$app = new \Slim\App();

$app->get('/', function (Request $req,  Response $res, $args = []) {
    return $res->getBody()->write('Hello Slim Framework');
});

$app->run();
Anda bisa cek hasilnya melalui browser ke alamat project yang anda buat, atau bisa juga menjalankan menggunakan internal web server dari php dengan menjalankan perintah berikut ini melalui command atau terminal pada path project anda:
php -S localhost:8090
Dan akses melalui browser di alamat http://localhost:8090

Untuk mendapatkan output dalam format json, bisa anda ubah pada baris ke 10 dengan code berikut ini:
$data = array("hello" => "slim framework", "version" => "3.10");
return $res->withJson($data);
Maka akan diperoleh hasil seperti berikut ini:
{"hello":"slim framework","version":"3.10"}
Untuk menambahkan end-point yang lain pada rest api anda tinggal menambahkan code seperti pada baris-9 sampai baris-11 pada contoh code sebelumnya. Misalkan berikut ini end-point yang akan membaca parameter dari alamat web
$app->get('/name/{you}', function (Request $req,  Response $res, $args = []) {
    $name = $args['you'];
    $data = array("hello" => $name, "message" => "have a nice day");
    return $res->withJson($data);
});
Dan anda bisa melihat hasilnya dengan akses ke alamat http://localhost:8090/name/arif laksito, maka akan terlihat hasilnya di halaman browser. Perhatian, untuk web server Apache atau Nginx anda perlu menambahkan file .htaccess pada project anda supaya alamat web tersebut dapat dikenali. Berikut ini script dari file .htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Selain method GET seperti pada contoh diatas, anda bisa juga menggunakan method yang lainnya seperti POST, PUT, DELETE. Begitulah cerita saya dalam menggunakan Slim framework, lebih detail lagi anda bisa menuju ke halaman dokumentasi/manual dari Slim framework yang sudah cukup lengkap di https://www.slimframework.com/docs/.

Untuk contoh file project yang menggunakan Slim bisa anda dapatkan/clone di github saya dengan alamat https://github.com/ariflaksito/web-data-sync. Pilih di branch basic, karena branch master sudah terupdate fitur menggunakan Eloquent dan Middleware untuk validasi token. InshaAllah akan saya share juga artikel tentang penggunaan Eloquent dan Middleware tersebut.

Semoga bermanfaat, jangan lupa untuk dicoba yaa