• Java

    Install Maven Local Repository

    Download Apache Maven disini.

    Tambahkan maven ke path pada Environment Variables.

    Jalankan command berikut ini:

    mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> 

    Jika file JAR di hasilkan oleh Apache Maven:

    mvn install:install-file -Dfile=<path-to-file> 

    Jika menggunakan pom-file:

    mvn install:install-file -Dfile=<path-to-file> -DpomFile=<path-to-pomfile> 

    Keterangan:
    <path-to-file> lokasi file jar
    <group-id> nama group id (misal: org.akhal)
    <artifact-id> nama library (misal: kbbi)
    <version> versi library
    <packaging> jenis packaging (misalkan: jar)

  • Linux

    Menjalankan Program Java sebagai Service pada Ubuntu

    Buat sebuah Service

    sudo nano /etc/systemd/system/myjava.service

    Copy/paste kode berikut ini ke dalam file myjava.service

    [Unit]
    Description=My Java Service
    
    [Service]
    User=ubuntu
    # The configuration file application.properties should be here:
    
    #change this to your workspace
    WorkingDirectory=/home/ubuntu/workspace
    
    #path to executable. 
    #executable is a bash script which calls jar file
    ExecStart=/home/ubuntu/workspace/start
    
    SuccessExitStatus=143
    TimeoutStopSec=10
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target

    Buat file Bash Script untuk memanggil Service

    nano /home/ubuntu/workspace/start

    Copy/paste kode berikut:

    #!/bin/sh 
    /usr/bin/java -jar myjava.jar

    Start Service

    sudo systemctl enable myjava.service
    sudo systemctl start myjava.service
  • Linux

    Command SSH on CentOS

    Install

    sudo yum install openssh-server openssh-clients

    Configuration

    sudo nano /etc/ssh/sshd_config

    Create ssh keygen

    ssh-keygen -t rsa

    Start

    sudo systemctl start sshd.service

    Stop

    sudo systemctl stop sshd.service

    Restart

    sudo systemctl restart sshd.service

    Enable auto start

    sudo systemctl enable sshd.service

    Disable auto start

    sudo systemctl disable sshd.service
  • macOS

    Install Apache, MySQL, PHP on macOS Mojave 10.14

    Pada macOS Mojave, aplikasi apache sudah terinstall sebagai program bawaan. Yang perlu dilakukan hanya menjalankannya dengan command:

    sudo apachectl start 

    Command berikut untuk mematikan apache:

     sudo apachectl stop 

    Command berikut untuk me-restart apache:

     sudo apachectl restart 

    Jika ingin mengetahui versi apache yang terinstall dapat menggunakan command berikut:

     httpd -v 

    Secara default, system document root untuk web server dapat dilihat di:

     /Library/WebServer/Documents/ 

    Selain menggunakan lokasi yang ada pada sistem, dapat juga menggunakan lokasi yang ada pada user (User Level Root) yang ada pada folder Sites. Tambahkan username.conf pada directory:

     /etc/apache2/users/ 

    Buka terminal, kemudian ketikkan command berikut:

     cd /etc/apache2/users 
     sudo nano username.conf 

    nama file username.conf sesuaikan dengan nama username yang digunakan. Kemudian tambahkan kode berikut:

    <Directory "/Users/username/Sites/"> 
    AllowOverride All
    Options Indexes MultiViews FollowSymLinks
    Require all granted
    </Directory> 

    Dengan konfigurasi file permission:

     -rw-r--r--   1 root  wheel  298 Jun 28 16:47 username.conf 

    Jika belum seperti di atas, file permission dapat diganti dengan menggunakan perintah:

     sudo chmod 644 username.conf 

    Langkah selanjutnya, buka file httpd.conf, kemudian edit konfigurasi untuk beberapa module.

     sudo nano /etc/apache2/httpd.conf 

    Pastikan module berikut dalam kondisi uncomment.

    LoadModule authz_core_module libexec/apache2/mod_authz_core.so
    LoadModule authz_host_module libexec/apache2/mod_authz_host.so
    LoadModule userdir_module libexec/apache2/mod_userdir.so
    LoadModule include_module libexec/apache2/mod_include.so
    LoadModule rewrite_module libexec/apache2/mod_rewrite.so

    Jika menggunakan php, uncomment module berikut:

    LoadModule php7_module libexec/apache2/libphp7.so

    Jika ingin menggunakan user home directories, uncomment baris berikut:

    Include /private/etc/apache2/extra/httpd-userdir.conf 

    Langkah berikutnya, buka config lain untuk apache:

    sudo nano /etc/apache2/extra/httpd-userdir.conf 

    Uncomment baris berikut:

    Include /private/etc/apache2/users/*.conf 

    Kemudian restart apache server:

    sudo apachectl restart 

    Untuk level system document root, dapat dilihat di url:

    http://localhost/ 

    Untuk level user document root, dapat dilihat di url:

    http://localhost/~username/ 

    Jika ingin mengijinkan .htaccess untuk meng-override default setting, dapat menggunakan cara berikut:

    sudo nano /etc/apache2/httpd.conf 

    Dan jangan lupa, uncomment module mod_rewrite.

    LoadModule rewrite_module libexec/apache2/mod_rewrite.so 

    Untuk melihat konfigurasi dari apache server, dapat membuat file phpinfo.php pada document root.

    <?php phpinfo(); ?> 

    Secara default, MySQL tidak ter-install sebagai aplikasi bawaan dari macOS Mojave, sehingga perlu di-install secara manual. Aplikasi MySQL dapat diunduh disini.

    Setelah berhasil diunduh, install MySQL dan ikuti langkah-langkahnya sampai instalasi selesai.

    Setelah instalasi MySQL selesai, langkah berikutnya mengganti password user root untuk MySQL.

    Stop MySQL

    sudo /usr/local/mysql/support-files/mysql.server stop 

    Start MySQL dalam safe mode:

    sudo mysqld_safe --skip-grant-tables 

    Buka tab terminal baru, kemudian login ke MySQL dengan user root, kemudian ganti password untuk root.

    mysql -u root 
    FLUSH PRIVILEGES; 
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 
    \q 

    Start MySQL

    sudo /usr/local/mysql/support-files/mysql.server start 

    Connect PHP and MySQL

    mkdir /var/mysql 
    ln -s /tmp/mysql.sock /var/mysql/mysql.sock
    sudo apachectl restart 
  • CodeIgniter

    Codeigniter untuk Pemula

    Download versi terakhir dari framework Codeigniter. Frame work dapat di unduh disini.

    Ektrak zip file, kemudian rename menjadi nama yang dikehendaki (misalken Codeigniter).

    Upload file yang ada di folder Codeigniter ke server (misalkan localhost).

    Buka url menggunakan browser pada url http://localhost/codeigniter/. Jika berhasil, maka akan nampak seperti gambar berikut ini:

    Buka file application/config/config.php kemudian edit pada bagian $config['base_url'] menjadi:

    $config[‘base_url’] = ‘http://localhost/codeigniter/’;

    Jika membutuhkan koneksi database, edit file application/config/database.php

    • hostname– Database host name.
    • username– Database username.
    • password– Database password.
    • database– Database name.

    Buka folder application/controllers/, kemudian buat file php dengan nama file Home.php.

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Welcome extends CI_Controller {
    
        public function index()
        {
            $this->load->view('v_home');
        }
    }

    Buka folder application/views/, kemuian buat file php dengan nama v_home.php.

    <?php
    defined('BASEPATH') OR exit('No direct script access allowed');
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Welcome to Home</title>
    
        <style type="text/css">
    
        ::selection { background-color: #E13300; color: white; }
        ::-moz-selection { background-color: #E13300; color: white; }
    
        body {
            background-color: #fff;
            margin: 40px;
            font: 13px/20px normal Helvetica, Arial, sans-serif;
            color: #4F5155;
        }
    
        a {
            color: #003399;
            background-color: transparent;
            font-weight: normal;
        }
    
        h1 {
            color: #444;
            background-color: transparent;
            border-bottom: 1px solid #D0D0D0;
            font-size: 19px;
            font-weight: normal;
            margin: 0 0 14px 0;
            padding: 14px 15px 10px 15px;
        }
    
        code {
            font-family: Consolas, Monaco, Courier New, Courier, monospace;
            font-size: 12px;
            background-color: #f9f9f9;
            border: 1px solid #D0D0D0;
            color: #002166;
            display: block;
            margin: 14px 0 14px 0;
            padding: 12px 10px 12px 10px;
        }
    
        #body {
            margin: 0 15px 0 15px;
        }
    
        p.footer {
            text-align: right;
            font-size: 11px;
            border-top: 1px solid #D0D0D0;
            line-height: 32px;
            padding: 0 10px 0 10px;
            margin: 20px 0 0 0;
        }
    
        #container {
            margin: 10px;
            border: 1px solid #D0D0D0;
            box-shadow: 0 0 8px #D0D0D0;
        }
        </style>
    </head>
    <body>
    
    <div id="container">
        <h1>Welcome to Home</h1>
    
        <div id="body">
            <p>Ini merupakan halaman contoh.</p>
        </div>
    
        <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo  (ENVIRONMENT === 'development') ?  'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p>
    </div>
    
    </body>
    </html>

    Untuk melihat hasilnya, buka url berikut:

    http://localhost/codeigniter/index.php/home

    Untuk menghilangkan index.php, dapat menggunakan cara ini.

  • Android

    Android Bounce Animation

    Buat android project.

    Langkah selanjutnya adalah membuat layout dengan menggunakan ImageButton.

    <?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"
        tools:context=".MainActivity">
    
        <ImageButton
            android:id="@+id/ibtn_book"
            android:layout_width="180dp"
            android:layout_height="180dp"
            android:background="@null"
            android:scaleType="fitCenter"
            android:src="@drawable/img_book"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </android.support.constraint.ConstraintLayout>

    Buat transisi untuk bounce.

    • Klik kanan pada res, kemudian buat folder anim.
    • Untuk membuat animasi yang berjalan terus menerus, tambahkan atribut android:repeatCount="infinite" pada elemen <scale>.
    • Buat file bounce.xml, kemudian tambahkan code berikut:
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
        <scale
            android:duration="2000"
            android:fromXScale="0.4"
            android:toXScale="1.0"
            android:fromYScale="0.4"
            android:toYScale="1.0"
            android:pivotX="50%"
            android:pivotY="50%" />
    </set>

    Buat class QBounceInterpolator.java sebagai interpolator pada animasi yang akan dibuat.

    package org.akhal.example.buttonanimation;
    
    import android.view.animation.Interpolator;
    
    public class QBounceInterpolator implements Interpolator {
        private double mAmplitude = 1;
        private double mFrequency = 10;
    
        public QBounceInterpolator(double amplitude, double frequency) {
            mAmplitude = amplitude;
            mFrequency = frequency;
        }
    
        public float getInterpolation(float time) {
            return (float) (-1 * Math.pow(Math.E, -time/ mAmplitude) *
                    Math.cos(mFrequency * time) + 1);
        }
    }

    Agar menjadi animasi, tambahkan code AnimationUtils pada MainActivity.java sehingga menjadi superti berikut:

    package org.akhal.example.buttonanimation;
    
    import android.content.Context;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageButton;
    
    public class MainActivity extends AppCompatActivity {
    
        private Animation bounceAnimation;
        private Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            bounceAnimation = AnimationUtils.loadAnimation(this, R.anim.bounce);
            QBounceInterpolator interpolator = new QBounceInterpolator(0.2, 20);
            bounceAnimation.setInterpolator(interpolator);
    
            final ImageButton imageButton = findViewById(R.id.ibtn_book);
            imageButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    imageButton.startAnimation(bounceAnimation);
                }
            });
    
            imageButton.startAnimation(bounceAnimation);
        }
    }

    Jalankan aplikasi, sehingga nampak seperti gambar berikut ini:

    Untuk program lengkapnya, dapat diunduh di link di bawah ini:

  • Java

    Format Currency Rupiah pada Java

    Import file:

    import java.text.DecimalFormat;
    import java.text.DecimalFormatSymbols;

    Format:

    DecimalFormat id = (DecimalFormat) DecimalFormat.getCurrencyInstance();
    DecimalFormatSymbols rp = new DecimalFormatSymbols();
    
    rp.setCurrencySymbol("Rp");
    rp.setMonetaryDecimalSeparator(',');
    rp.setGroupingSeparator('.');
    id.setDecimalFormatSymbols(rp);
    
    Double harga = 1000,10;
    id.format(harga);
  • Android

    BottomAppBar

    Salah satu komponen yang diperkenalkan pada acara Google I/O 2018 atalha BottomAppBar yang merupakan extension dari Toolbar yang peletakannya berada pada bagana bawah jendela aplikasi. Bersaam dengan BottomAppBar penempatan Floating Action Button (FAB) juga telah berubah. Dengan dessin baru, FAB data ditempatkan pada posisi yang bervariasi. Pada artikel kali ini, akan ditunjukkan bagaimana cara menggunakan material BottomAppBar pada sebuah layout.

    Langkah pertama adalah buat project baru.

    Tambahkan dependency pada file build.gradle.

    implementation 'com.android.support:design:28.0.0'

    untuk AndroidX

    implementation 'com.google.android.material:material:1.0.0'

    Langkah selanjutnya adalah membuat layout.

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout
        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"
        tools:context=".MainActivity">
    
        <android.support.design.bottomappbar.BottomAppBar
            android:id="@+id/bottom_appbar"
            android:layout_gravity="bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:navigationIcon="@drawable/ic_menu_black"
            style="@style/Widget.MaterialComponents.BottomAppBar.Colored">
    
        </android.support.design.bottomappbar.BottomAppBar>
    
        <android.support.design.widget.FloatingActionButton
            android:id="@+id/floating"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_camera_alt_black"
            app:backgroundTint="@color/colorPrimary"
            app:fabSize="normal"
            app:layout_anchor="@id/bottom_appbar" />
    
    </android.support.design.widget.CoordinatorLayout>

    Langah berikutnya adalah membuat file menu dengan nama file bottomappbar_menu.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
    android:id="@+id/app_bar_share"
    android:icon="@drawable/ic_share_black"
    android:title="Share"
    app:showAsAction="ifRoom"/>

    <item
    android:id="@+id/app_bar_favorite"
    android:icon="@drawable/ic_favorite_black"
    android:title="Favorite"
    app:showAsAction="ifRoom"/>
    </menu>

    Untuk menangani tombol ketika diklik, buat beberapa tambahan program pada file activity.

    package org.akhal.example.bottomappbar;
    
    import android.content.Context;
    import android.os.Bundle;
    import android.support.design.bottomappbar.BottomAppBar;
    import android.support.design.widget.FloatingActionButton;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        private BottomAppBar bottomAppBar;
        private FloatingActionButton fab;
        private Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            context = this;
            bottomAppBar = findViewById(R.id.bottom_appbar);
            bottomAppBar.replaceMenu(R.menu.bottomappbar_menu);
    
            bottomAppBar.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "On click menu!", Toast.LENGTH_SHORT).show();
                }
            });
    
            fab = findViewById(R.id.floating);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "On click camera!", Toast.LENGTH_SHORT).show();
                }
            });
    
            bottomAppBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem menuItem) {
                    int item = menuItem.getItemId();
                    switch (item)  {
                        case R.id.app_bar_share:
                            Toast.makeText(context, "On click share!", Toast.LENGTH_SHORT).show();
                            break;
                        case R.id.app_bar_favorite:
                            Toast.makeText(context, "On click favorite!", Toast.LENGTH_SHORT).show();
                            break;
    
                    }
                    return false;
                }
            });
    
        }
    }




  • Linux

    Ubuntu 18.04 Setup SSH Public Key Authentication

    Langkah pertama adalah membuat key pair pada computer.

    ssh-keygen

    Jika berhasil, akan dihasilkan dua file, yaitu file private key dan file public key. File public key biasanya diakhiri dengan extension .pub.

    Langkah berikutnya adalah mengunggah file public key ke remote server.

    ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<ip_remote_server>

    Langkah terahir adalah tes login dengan menggunakan key yang telah dibuat.

    ssh -i ~/.ssh/id_rsa <username>@<ip_remote_server>
  • CodeIgniter

    Menghilangkan Index.php Pada CodeIgniter

    Langkah pertama adalah hidupkan module mod_rewrite.

    sudo a2enmod rewrite
    sudo systemctl restart apache2

    Jika module mod_rewrite sudah berhasil dihidupkan, kemudian buka file config.php pada application/config/config.php, cari pengaturan index_page.

    $config['index_page'] = 'index.php'; 

    kemudian ganti menjadi seperti berikut ini:

     $config['index_page'] = ''; 

    Langkah selanjutnya adalah membuat file .htaccess pada direktori root codeigniter (sejajar dengan folder application), dan ketikkan code berikut:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

    Simpan file .htaccess, kemudian akses url tanpa index.php