• 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

  • Linux

    Install phpMyAdmin pada Ubuntu 18.04

    Sebelum melakukan instalasi, pastikan untuk melakukan update repository.

    sudo apt update
    sudo apt upgrad

    Install phpMyAdmin dan package pendukungnya serta masukkan konfigurasi untuk phpMyAdmin.

    sudo apt install phpmyadmin php-mbstring php-gettext 

    Jika instalasi selesai, hidupkan php extension untuk mbstring dan restart apache service.

    sudo phpenmod mbstring
    sudo systemctl restart apache2

    Edit file apache2.conf

    sudo nano /etc/apache2/apache2.conf 

    Tambahkan kode berikut ini pada akhir file:

    # phpMyAdmin Configuration
    Include /etc/phpmyadmin/apache.conf

    Restart apache service.

  • Linux

    Reverse Proxy

    Nyalakan module yang diperlukan pada apache.

    sudo a2enmod proxy 
    sudo a2enmod proxy_http
    sudo a2enmod proxy_balancer
    sudo a2enmod lbmethod_byrequests

    Restart apache server.

    sudo systemctl restart apache2 

    Buat virtulhost.

    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName
      ProxyPreserveHost On ProxyPass / http://192.168.0.2:80/
    ProxyPassReverse / http://192.168.0.2:80/
    </VirtualHost>

    Restart apache.

    sudo systemctl restart apache2
  • Linux

    Menjalankan VirtualBox dari Console

    Untuk mengetahui daftar virtual machine yang ada pada VirtualBox, dapat dilihat dengan menggunakan command berikut:

    vboxmanage list vms

    Untuk menjalankan VirtualBox dapat menggunakan command berikut:

     /usr/bin/vboxheadless -s NamaVirtualBox

    Agar VirtualBox dapat jalan secara otomatis, dapat dibuat service.

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

    Tambahkan code berikut:

    [Unit]
    Description=VM service
    After=network.target vboxdrv.service

    [Service]
    ExecStart=/usr/bin/vboxheadless -s NamaVirtualBox
    ExecStop=/usr/bin/vboxmanage controlvm NamaVirtualBox acpipowerbutton

    [Install]
    WantedBy=multi-user.target