• 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 apache

    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
  • RaspberryPi

    Raspberry Pi Print Server

    Instalasi CUPS

    Update ke package terbaru.

    sudo apt-get update
    sudo apt-get upgrade

    Install package untuk server printer.

    sudo apt-get install cups 

    Setelah selesai, selanjutnya menambahkan user kedalam “lpadmin”. Group ini mengizinkan user untuk mengakses fungsi administration pada cups tanpa harus menggunakan super user.

  • Linux

    Qt for Linux/X11

    Requirements for Development Host

    Debian/Ubuntu (apt-get)

    sudo apt-get install build-essential libgl1-mesa-dev

    Fedora/RHEL/CentOS (yum)

    sudo yum groupinstall "C Development Tools and Libraries"
    sudo yum install mesa-libGL-devel

    openSUSE (zypper)

    sudo zypper install -t pattern devel_basis

    Downloading and Installing Qt

    Untuk file installer Qt, dapat diunduh disini.

  • other

    M.2 Family of Form Factors

    Key Card measurements Interfaces Common uses
    A 1630, 2230, 3030 PCIe x2, USB 2.0, I2C, DisplayPort x4 Wi-Fi/Bluetooth, cellular cards
    B 3042, 2230, 2242, 2260, 2280, 22110 PCIe x2, SATA, USB 2.0, USB 3.0, audio, PCM, IUM, SSIC, I2C SATA and PCIe x2 SSDs
    E 1630, 2230, 3030 PCIe x2, USB 2.0, I2C, SDIO, UART, PCM Wi-Fi/Bluetooth, cellular cards
    M 2242, 2260, 2280, 22110 PCIe x4, SATA PCIe x4 SSDs