Set Up Apache Virtual Hosts on Ubuntu 16.04

Virtual Hosts berguna untuk membuat banyak domain/website dalam satu alamat ip. Pada tutorial ini akan dibahas setup Virtual Hosts pada ubuntu 16.04.

Install Apache Webserver

Install apahe webserver terlebih dahulu. Disini menggunakan Lamp.

sudo apt-get install lamp-server^
sudo service mysql start
sudo service apache2 start

Setelah selesai install lamp, test apakah web server yang dibuat sudah aktif atau belum dengan cara ketik ip server pada browser. Jika sudah jalan, akan muncul tampilan seperti berikut ini:

Setup Apache Virtual Hosts

Misal domain yang akan dibuat adalah sub1.akhal.org dan sub2.akhal.org. Pada contoh ini digunakan sub domain dari akhal.org.

  1. Buat Virtual Directory
    sudo mkdir -p /var/www/sub1.akhal.org/public_html
    sudo mkdir -p /var/www/sub2.akhal.org/public_html
  2. Setting Ownership dan Permissions
    sudo chown -R $USER:$USER /var/www/sub1.akhal.org/public_html
    sudo chown -R $USER:$USER /var/www/sub2.akhal.org/public_html

    $USER merukan user yang digunakan untuk login.
    Set permission untuk apache web root (/var/www/html/), sehingga semua user dapat membaca file yang ada di dalam directory.

    sudo chmod -R 755 /var/www/html/
  3. Buat Virtual Hosts Files
    Secara default, virtual hosts files mempunya nama 000-default.conf berlokasi di /etc/apache2/sites-available. Copy file tersebut dengan nama sub1.akhal.org.conf.

    cd /etc/apache2/sites-available
    cp 00-default.conf sub1.akhal.org.conf

    Ganti isi file sesua dengan domain yang digunakan.

    nano sub1.akhal.org.conf
    <VirtualHost *:80>
            # The ServerName directive sets the request scheme, hostname and port that
            # the server uses to identify itself. This is used when creating
            # redirection URLs. In the context of virtual hosts, the ServerName
            # specifies what hostname must appear in the request's Host: header to
            # match this virtual host. For the default virtual host (this file) this
            # value is not decisive as it is used as a last resort host regardless.
            # However, you must set it for any further virtual host explicitly.
            #ServerName www.example.com
    
            ServerAdmin webmaster@akhal.org
            ServerName sub1.akhal.org
            ServerAlias www.sub1.akhal.org
            DocumentRoot /var/www/html/sub1.akhal.org/public_html
            <Directory /var/www/html/sub1.akhal.org/public_html>
                AllowOverride all
            </Directory>
    
            # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
            # error, crit, alert, emerg.
            # It is also possible to configure the loglevel for particular
            # modules, e.g.
            #LogLevel info ssl:warn
    
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    
            # For most configuration files from conf-available/, which are
            # enabled or disabled at a global level, it is possible to
            # include a line for only one particular virtual host. For example the
            # following line enables the CGI configuration for this host only
            # after it has been globally disabled with "a2disconf".
            #Include conf-available/serve-cgi-bin.conf
    </VirtualHost>

    Buat virtual hosts file yang kedua dengan nama sub2.akhal.org.conf, dan ganti isinya juga sesuai dengan domain yang akan digunakan.

    cp sub1.akhal.org.conf sub2.akhal.org.conf
    <VirtualHost *:80>
            # The ServerName directive sets the request scheme, hostname and port that
            # the server uses to identify itself. This is used when creating
            # redirection URLs. In the context of virtual hosts, the ServerName
            # specifies what hostname must appear in the request's Host: header to
            # match this virtual host. For the default virtual host (this file) this
            # value is not decisive as it is used as a last resort host regardless.
            # However, you must set it for any further virtual host explicitly.
            #ServerName www.example.com
    
            ServerAdmin webmaster@akhal.org
            ServerName sub2.akhal.org
            ServerAlias www.sub2.akhal.org
            DocumentRoot /var/www/html/sub2.akhal.org/public_html
            <Directory /var/www/html/sub2.akhal.org/public_html>
                AllowOverride all       
            </Directory>
    
            # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
            # error, crit, alert, emerg.
            # It is also possible to configure the loglevel for particular
            # modules, e.g.
            #LogLevel info ssl:warn
    
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    
            # For most configuration files from conf-available/, which are
            # enabled or disabled at a global level, it is possible to
            # include a line for only one particular virtual host. For example the
            # following line enables the CGI configuration for this host only
            # after it has been globally disabled with "a2disconf".
            #Include conf-available/serve-cgi-bin.conf
    </VirtualHost>

    Setelah membuat virtual hosts files yang baru, non aktifkan virtual hosts files default dan aktifkan virtual hosts files yang baru.

    sudo a2dissite 000-default.conf
    sudo a2ensite sub1.akhal.org.conf
    sudo a2ensite sub2.akhal.org.conf

    Kemudian restart apache service

    sudo systemctl restart apache2
  4. Testing Virtual Hosts
    Untuk mencobanya, buka domain yang sudah ditambahkan dengan browser. Jika berhasil akan nampak seperti gambar dibawah ini:

Mengembalikan UEFI boot setelah install ulang windows

Karena suatu hal, kita perlu install ulang Windows sehingga boot Linux yang ada akan hilang. Pada boot yang menggunakan model UEFI, sebenarnya boot Linux tidaklah terhapus seluruhnya, melainkan hanya urutannya saja yang terhapus. Untuk mengembalikannya, dapat dilakukan dengan menggunakan live cd ataupun live usb Linux.

  1. Jalankan live cd atau live usb Linux. Untuk tutorial ini, digunakan Ubuntu 15.04.
  2. Buka terminal, kemudian install “efibootmgr”.
    sudo apt-get install efibootmgr
  3. Setelah “efibootmgr” berhasil diinstall, ketikkan “sudo efibootmgr -v” untuk mengetahui daftar boot yang ada pada komputer.
    ubuntu@ubuntu:~$ sudo efibootmgr -v
    BootCurrent: 0008
    Timeout: 0 seconds
    BootOrder: 000C,0006,0007,0008,0009,000A
    Boot0000  BIOS Setup        FvFile(721c8b66-426c-4e86-8e99-3457c46ab0b9)
    Boot0001  Boot Menu FvFile(86488440-41bb-42c7-93ac-450fbf7766bf)
    Boot0002  Diagnostic Screen FvFile(a7d8d9a6-6ab0-4aeb-ad9d-163e59a7a380)
    Boot0003  Recovery and Utility FvFile(0b150fda-3bdd-4406-9859-448177476993)
    Boot0004  Diagnostic Program FvFile(29f85733-2b1a-4821-8f61-2614778c0c73)
    Boot0005  Diagnostic Progrogram ROM VenMsg(bc7838d2-0f82-4d60-8316-c068ee79d25b,c0f527e7c05f4d498df59dc81ac2cfdd00)
    Boot0006* Floppy Disk Drive: VenMsg(bc7838d2-0f82-4d60-8316-c068ee79d25b,6ff015a28830b543a8b8641009461e49)
    Boot0007* Drive0 HDD: VenMsg(bc7838d2-0f82-4d60-8316-c068ee79d25b,91af625956449f41a7b91f4f892ab0f600)
    Boot0008* USB HDD: VenMsg(bc7838d2-0f82-4d60-8316-c068ee79d25b,33e821aaaf33bc4789bd419f88c50803)
    Boot0009* USB CD/DVD: VenMsg(bc7838d2-0f82-4d60-8316-c068ee79d25b,d630a9056829ce41861e8c380ff2225a)
    Boot000A* NETWORK: VenMsg(bc7838d2-0f82-4d60-8316-c068ee79d25b,78a84aaf2b2afc4ea79cf5cc8f3d3803)
    Boot000B* Erase Disk FvFile(43f9b080-c902-4737-b306-487050f7caa5)
    Boot000C* Windows Boot Manager HD(2,GPT,d35a43c9-1f37-4b08-a45e-e9ebff564374,0xe1800,0x31800)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................
    Boot000D* ubuntu HD(2,GPT,d35a43c9-1f37-4b08-a45e-e9ebff564374,0xe1800,0x31800)/File(\EFI\ubuntu\shimx64.efi)
  4. Pada daftar diatas, boot Linux terdapat di “Boot000D*”, akan tetapi pada BootOrder tidak ada, sehingga “Boot000D*” perlu ditambahkan pada BootOrder. Untuk menambahkan BootOrder gunakan perintah sudo efibootmgr -o {list}”.
    ubuntu@ubuntu:~$ sudo efibootmgr -o 000D,000C,0006,0007,0008,0009,000A
    BootCurrent: 0008
    Timeout: 0 seconds
    BootOrder: 000D,000C,0006,0007,0008,0009,000A
    Boot0000  BIOS Setup       
    Boot0001  Boot Menu
    Boot0002  Diagnostic Screen
    Boot0003  Recovery and Utility
    Boot0004  Diagnostic Program
    Boot0005  Diagnostic Progrogram ROM
    Boot0006* Floppy Disk Drive:
    Boot0007* Drive0 HDD:
    Boot0008* USB HDD:
    Boot0009* USB CD/DVD:
    Boot000A* NETWORK:
    Boot000B* Erase Disk
    Boot000C* Windows Boot Manager
    Boot000D* ubuntu
  5. Seletah berhasil ditambahkan pada BootOrder, langkah selanjutnya adalah restart.

Bluetooth Stack untuk windows

Untuk menggunakan bluetooth stack pada windows, dapat menggunakan driver bluetooth dari Toshiba.

  1. Download disini.
  2. Edit registry di:
    HKEY_CURRENT_USER\Software\Toshiba\BluetoothStack\V1.0\Mng
  3. Tambahkan DWORD key dengan nama TestVersion dan nilainya 1.

 


Disable Hibernate pada Windows

Untuk mematikan fitur hibernate pada windows, dapat dilakukan melalui command melalui cmd.

  1. buka cmd dengan status administrator (run as administrator).
  2. ketikkan command berikut:
    powercfg -h off
  3. restart komputer.

Sedangkan untuk mengaktifkan kembali fitur hibernate dapat dilakukan dengan langkah-langkah sebagai berikut:

  1. buka cmd dengan status administrator (run as administrator).
  2. ketikkan command berikut:
    powercfg -h on
  3. restart komputer.

Proxy Authentication pada Ubuntu

  1. Buka direktori “/etc/apt”.
  2. Buat file “apt.conf”.
  3. Tambahkan kode berikut:
    Acquire::http::proxy "http://username:password@proxyserver:port/";
    Acquire::https::proxy "https://username:password@proxyserver:port/";
    Acquire::socks::proxy "socks://username:password@proxyserver:port/";
    

Automount usb drive menggunakan pmount

  1. Tambahkan file “automount.rules” pada “/etc/udev/rules.d”.
  2. Tambahkan baris kode berikut:
    ACTION=="add",KERNEL=="sda*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
    ACTION=="remove", KERNEL=="sda*", RUN+="/usr/bin/pumount -l %k"
    ACTION=="add",KERNEL=="sdb*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
    ACTION=="remove", KERNEL=="sdb*", RUN+="/usr/bin/pumount -l %k"
    ACTION=="add",KERNEL=="sdc*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
    ACTION=="remove", KERNEL=="sdc*", RUN+="/usr/bin/pumount -l %k"
  3. Reliad udev rules dengan command:
    udevadm control --reload-rules
  4.  Mount pointnya akan berada di /media/sd**.
    sd** sesuai dengan /dev/sd**.
  5. Jika ingin menggunakan mount point sesuai dengan nama label flash drive, gunakan baris kode berikut:
    KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
    
    # Import FS infos
    IMPORT{program}="/sbin/blkid -o udev -p %N"
    
    # Get a label if present, otherwise specify one
    ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
    ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
    
    # Global mount options
    ACTION=="add", ENV{mount_options}="relatime"
    # Filesystem-specific mount options
    ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
    
    # Mount the device
    ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
    
    # Clean up after removal
    ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
    
    # Exit
    LABEL="media_by_label_auto_mount_end"

 

Sumber:
http://www.monperrus.net/martin/automounting+usb+flash+drives+on+linux+with+udev+and+pmount
http://unix.stackexchange.com/questions/11472/automount-usb-drives-with-no-gui-requirement-halevt-replacement


301 Redirects

Terkadang kita ingin mengalihkan laman halaman web ke halaman atau situs yang lainnya. Ini dapat dilakukan dengan menggunakan htaccess. Untuk format yang digunakan adalah sebagai berikut:

Redirect 301 /old-page http://www.yoursite.com/new-page

Contoh:

Redirect 301 /download http://download.akhal.org

Using Arduino Libraries in Atmel Studio

Pada artikel ini, akan ditunjukkan bagaimana cara menggunakan Arduino libraries untuk pemograman dengan Atmel Studio. Pemrograman yang dimaksud disini bukan pemrograman dengan ino file, melainkan dengan cpp.

Tahap awal yang harus dilakukan adalah install Atmel Studio dan Arduino IDE. Arduino IDE diperlukan untuk diambil librarynya saja. Pada artikel ini, yang digunakan adalah Arduino 1.6.4 dan Atmel Studio 6.2.

Buat project baru

Buka Atmel Studio, kemudian buat project baru.
File > New > Project.

Buat structure file

Buka Solution Explorer, kemudian lakukan langkah-langkah berikut:

Hapus Arduino.cpp

Buat folder dengan struktur sebagai berikut:

src
- arduino
- - avr
- - -  cores
- - - - arduino
- - - libraries
- - - variants
- - - - standard
- ProjectFiles

Buka folder instalasi Arduino 1.6, kemudian copy semua file yang ada di folder berikut:

“arduino-1.6.0\hardware\arduino\avr\cores\arduino” ke “src\arduino\avr\cores\arduino”
“arduino-1.6.0\hardware\arduino\avr\libraries” ke “src\arduino\avr\libraries” (opsional).
“arduino-1.6.0\hardware\arduino\avr\variants\standard” ke “src\arduino\avr\variants\standard”.

Tambahkan file-file yang sudah dicopy, ke dalam project, sehingga menjadi seperti pada gambar berikut ini:

Buat project file

Buat file “ProjectMain.cpp” dan “ProjectMain.h” di “ProjectFiles”. Berikut adalah contoh program sederhana yang dibuat.

ProjectMain.h

/*
 * ProjectMain.h
 *
 * Created: 16/06/2015 20:58:47
 *  Author: Akhal
 */ 


#ifndef PROJECTMAIN_H_
#define PROJECTMAIN_H_

#include 




#endif /* PROJECTMAIN_H_ */

ProjectMain.cpp

/*
 * ProjectMain.cpp
 *
 * Created: 16/06/2015 20:59:16
 *  Author: Akhal
 */ 

#include "ProjectMain.h"

void setup()
{
	pinMode(13, OUTPUT);
	
}

void loop()
{
	
	  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
	  delay(5000);              // wait for a second
	  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
	  delay(5000);              // wait for a second
}

Seting properties

Buka project properties dengan cara: Project > Arduino Properties (Alt+F7).

Lihat pada bagian AVR/GNU C Compiler > Symbols, kemudian tambahkan F_CPU=16000000UL.

Lihat pada bagian AVR/GNU C Compiler -> Directories, kemudian tambahkan path file yang telah dicopy sebelumnya.

../src
../src/arduino
../src/arduino/avr
../src/arduino/avr/cores
../src/arduino/avr/cores/arduino
../src/arduino/avr/libraries
../src/arduino/avr/variants
../src/arduino/avr/variants/standard
../src/ProjectFiles

Lihat pada bagian AVR/GNU C++ Compiler -> Symbols, kemudian tambahkan F_CPU=16000000UL.

Lihat pada bagian AVR/GNU C++ Compiler -> Directories, kemudian tambahkan path file yang telah dicopy sebelumnya.

../src
../src/arduino
../src/arduino/avr
../src/arduino/avr/cores
../src/arduino/avr/cores/arduino
../src/arduino/avr/libraries
../src/arduino/avr/variants
../src/arduino/avr/variants/standard
../src/ProjectFiles

Build program

Build -> Build Solution (F7), dan lihat outputnya.

........
Done executing task "RunCompilerTask".
Task "RunOutputFileVerifyTask"
Program Memory Usage 	:	3010 bytes   9,2 % Full
Data Memory Usage 		:	217 bytes   10,6 % Full
Done executing task "RunOutputFileVerifyTask".
Done building target "CoreBuild" in project "Arduino.cppproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.2\Vs\Avr.common.targets" from project "Q:\KYU\Atmel\Arduino\Arduino\Arduino.cppproj" (entry point):
Done building target "Build" in project "Arduino.cppproj".
Done building project "Arduino.cppproj".

Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Kernel Driver Not Installed (rc=-1908) on OpenSUSE 13.2 1

  

Jika mengalami kesulitan untuk menjalankan VirtualBox di openSUSE karena error berikut:

 Kernel Driver Not Installed (rc=-1908)

Mungkin solusi berikut ini dapat membantu:

  • Jalankan perintah berukut:
    sudo zypper in make gcc gcc-c++ kernel-source kernel-syms
  • Lanjutkan dengan perintah berikutnya:
    sudo /etc/init.d/vboxdrv setup
  • Jalankan VirtualBox.

Simpan Layout sebagai Image

   

 

Ketika kita membuat suatu aplikasi, terkadang membutuhkan dokumentasi berupa gambar (image).

Berikut adalah salah satu cara untuk membuat image dari layout yang telah dibuat.

Buat method untuk konversi dari view ke bitmap:

private Bitmap getBitmap(View view) {
    view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    view.buildDrawingCache(true);
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);

    Drawable background =view.getBackground();
    if (background!=null) {
        background.draw(canvas);
    }else{
        canvas.drawColor(Color.WHITE);
    }
    view.draw(canvas);
    
    return bitmap;
}

Buat method untuk simpan ke dalam bentuk file:

public void save(Bitmap image, String path) {
    try {
        FileOutputStream output = new FileOutputStream(path);
        image.compress(Bitmap.CompressFormat.PNG, 100, output);
        output.close();
        Toast.makeText(context,"File berhasil disimpan di: "+path+".",Toast.LENGTH_LONG).show();
    } catch (FileNotFoundException e) {
//        e.printStackTrace();
        Log.e(TAG, e.toString());
        Toast.makeText(context,"Gagal menyimpan file.",Toast.LENGTH_LONG).show();
    } catch (IOException e) {
//        e.printStackTrace();
        Log.e(TAG, e.toString());
        Toast.makeText(context,"Gagal menyimpan file.",Toast.LENGTH_LONG).show();
    }
}

Panggil method yang telah dibuat:

image = getBitmap(layout);

Buat fungsi untuk menyimpan image:

btnSave.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String path = Environment.getExternalStorageDirectory()+"/image.png";
        save(image, path);
    }
});
 Buat fungsi untuk menampilkan image:
btnView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        bmImage.setImageBitmap(image);
    }
});

 

Source code:
download