Jumat, 18 Agustus 2017

Memperbaiki Nama File dari Hasil Windows Backup

Jika kita melakukan backup dengan program bawaan dari Windows, biasanya nama file dari hasil backup tersebut akan berubah. Windows akan melakukan penambahan timestamp dibelakang nama file. Hal ini mengakibatkan beberapa program tidak dapat berjalan jika namanya tidak diubah seperti semula. Oleh karena itu, dibuat program dengan golang untuk menghapus timestamp dari nama file. Gambar dibawah ini adalah contoh dimana nama file telah berubah.

Untuk memperbaiki hal tersebut, kita dapat membuat program dengan bahasa Go. Pertama kita buka editor kesayangan kita dan kita buat file baru bernama main.go.

Import

Kita memerlukan beberapa paket untuk program ini, seperti os, strings, fmt, dll. Oleh karena itu, kita perlu meng-import paket tersebut pada kode kita.
package main

import (
 "flag"
 "fmt"
 "os"
 "path/filepath"
 "strings"
)

Deklarasi Variabel

var flagPath = flag.String("path", "", "path of file want to rename")
var currentDir = ""
Variabel flagPath berfungsi sebagai parameter inputan untuk direktori yang akan di rename. Hal ini memungkinkan kita untuk menjalankan program dengan cara program.exe -path "direktori".
Variabel currentDir berfungsi sebagai penanda direktori yang sedang aktif / dicek.

Fungsi match()

func match(s string) string {
 i := strings.Index(s, " (2017")
 if i >= 0 {
  j := strings.Index(s, "UTC)")
  if j >= 0 {
   return s[i : j+4]
  }
 }
 return ""
}
Fungsi ini berfungsi untuk mengambil nama dari timestamp yang dibuat oleh windows. Karena timestamp ini berbeda-beda, maka kita gunakan batas, dimana batas awal adalah " (2017" dan akhir adalah "UTC)". Fungsi ini akan mengeluarkan string berupa timestamp dari suatu file, yang nantinya akan digunakan untuk di replace.

Fungsi partialRename()

func partialRename(path string, f os.FileInfo, err error) (e error) {
 if currentDir != filepath.Dir(path) {
  currentDir = filepath.Dir(path)
  fmt.Println("\n" + "--------------------------------------")
  fmt.Println("Go to directory " + currentDir + " ...")
  fmt.Println("--------------------------------------" + "\n")
 }

 if strings.Contains(f.Name(), " (2017") && strings.Contains(f.Name(), "UTC)") {
  base := filepath.Base(path) // file name
  dir := filepath.Dir(path)   // directory name

  r := match(base)
  renameTo := filepath.Join(dir, strings.Replace(base, r, "", 1))
  fmt.Println("Renaming on file " + path + " ...")
  os.Rename(path, renameTo)
  fmt.Println("File has been renamed to : " + renameTo)
 }
 return
}
Fungsi ini berfungsi untuk melakukan rename file. Rename dilakukan dengan cara mereplace string yang kita dapatkan dari fungsi match() dengan string kosong.

Main Program

func init() {
 flag.Parse()
}

func main() {
 if *flagPath == "" {
  flag.Usage()
  os.Exit(0)
 }

 filepath.Walk(*flagPath, partialRename)
}
Fungsi filepath.Walk() berfungsi untuk mengunjungi file dari masing-masing folder.

Full Program

Kode program selengkapnya dapat diakses pada link github berikut.
Read More

Minggu, 09 Agustus 2015

CRUD Polymorphic Relations di Laravel 5

CRUD Polymorphic Relations di Laravel 5 - Berawal dari sebuah masalah, bagaimana caranya menyimpan tabel user yang terdiri dari berbagai macam tipe user. Katakan saja, kita mempunyai user sebagai publisher dan advertiser. Nah, apakah kita akan membuat tabel user dan model user yang berbeda hanya untuk menyimpan nama, email, password, dan kesamaan lainnya?
Mungkin jika kita menggunakan cara naive, bisa menggunakan tabel user, tipe_user, publisher dan advertiser. Kemudian menggunakan foreign_key dan sebagainya (seperti yang diajarkan pada mata kuliah basis data) untuk menghubungkan tabel user dan publisher - advertiser.
Tetapi pada laravel tidak memerlukan itu, hanya perlu menggunakan Polymorphic Relations. Polymorphic Relations konsepnya sama seperti Inheritance pada mata kuliah Obyek Oriented Programming. Jadi publisher dan advertiser adalah turunan dari tabel user, sehingga kita tidak perlu mendefinisikan lagi.
Berikut cara menggunakan Polymorphic Relations pada Laravel 5:

Pertama :

Buat Model Advertiser dan Publisher lengkap dengan migrationnya. Kemudian pada migration user, advertiser, dan publisher tambahkan tabel sesuai kebutuhan. Misalnya seperti ini :
User :
  • id
  • name
  • email
  • pass
  • userable_id
  • userable_type
Advertiser :
  • id
  • pengeluaran
Publisher :
  • id
  • pendapatan
userable_id dan userable_type adalah tabel yang akan menghubungkan antara user dengan advertiser atau publisher.
Misalnya : userable_id = 1 dan userable_type = Advertiser

Kedua : 

Masuk ke dalam App\User.php, kemudian tambahkan kode seperti ini :
public function userable()
{
    return $this->morphTo();
}
Selanjutnya pada App\Advertiser.php dan App\Publisher.php tambah kode seperti ini :
public function user()
{
    return $this->morphMany('App\User', 'userable');
}
Nama fungsi userable karena pada database, kita menggunakan nama tabel userable_id dan userable_type.

Create :

Untuk membuat caranya adalah dengan membuat atau melakukan save dulu pada Advertiser/Publisher lalu menghubungkannya dengan user. Berikut simulasi menggunakan tinker.
$user = new App\User;
$user->name = 'Carolus Gaza';
$user->email = 'carolus@gaza.com';
$user->pass = 'inirahasia';
$publisher = new App\Publisher;
$publisher->penghasilan = 20000000;
$publisher->save();
$publisher->user()->save($user);

Hasilnya akan menjadi seperti ini :

  • name : "Carolus Gaza"
  • email : "carolus@gaza.com"
  • userable_type : "App\Publisher"
  • userable_id : 1

Read Update :

Read dan Update adalah fungsi yang hampir sama. Ketika kita akan melakukan read update ataupun delete, langkah pertama yang dilakukan adalah mencari ID yang akan di read atau update.
$user = App\User::find(1);
Ketika hanya ingin membaca nama atau email maka tinggal lakukan perintah sama seperti biasanya. Tetapi jika ingin melihat database yang ada di publisher, maka gunakan fungsi userable.
$user->email;
"carolus@gaza.com"

$user->userable->penghasilan;
20000000
Untuk melakukan update, sama saja. Tinggal panggil dan ubah mana yang ingin di ubah.

Delete

Untuk melakukan delete, sama seperti read/update, temukan dulu usernya sesuai ID. Kemudian lakukan perintah delete.
$user = App\User::find(1);
$user->userable->delete();
$user->delete();

Itulah sedikit sharing mengenai CRUD Polymorphic Relations di Laravel 5. Mungkin jika ada yang menemukan cara lain yang lebih simple daripada ini, ataupun cara lain untuk menyimpan tabel user, silahkan kita diskusikan di sini.
Read More

Jumat, 07 Agustus 2015

Menambahkan Fungsi Form pada Blade Template Laravel 5

Menambahkan Fungsi Form pada Blade Template Laravel 5 - Secara default Laravel 5 tidak menyediakan fungsi pembuat Form seperti Laravel sebelumnya. Untuk itu kita harus menambahkan paketnya secara manual. Berikut caranya :
  1. Masuk ke command promt, ketik : " composer require illuminate/html ".
  2. Tambahkan baris : " Illuminate\Html\HtmlServiceProvider::class, " pada file config/app.php bagian 'providers'.
  3. Kemudian masih pada file config/app.php, pada bagian aliases tambahkan baris " 'Form'      => Illuminate\Html\FormFacade::class, " dan " 'Html'      => Illuminate\Html\HtmlFacade::class, ".
  4. Kemudian Form siap digunakan pada blade template.
Seperti itulah cara menambahkan fungsi form builder pada blade template laravel 5. Semoga postingan ini bisa bermanfaat buat para pembaca.
Read More

Sabtu, 01 Agustus 2015

Redirect URL Setelah Login/Logout di Laravel 5.1

Redirect URL Setelah Login/Logout di Laravel 5.1 - Postingan kali ini akan membahas mengenai cara mengatur redirect URL setelah login atau logout pada laravel 5. Sebelumnya, di sini saya menggunakan autentikasi bawaan yang sudah disediakan pada laravel 5.
  1. Cari AuthController
  2. Tambahkan baris berikut :
    protected $redirectTo = 'dashboard/profil';
    protected $redirectAfterLogout = 'blog';
    
  3. $redirectTo untuk redirect setelah login.
  4. $redirectAfterLogout untuk redirect setelah logout.
Postingan Redirect URL Setelah Login/Logout di Laravel 5.1 ini hanyalah catatan untuk mengingatkan saja ketika lupa nanti.
Read More

Selasa, 24 Maret 2015

Struktur Project pada Laravel | Laravel Tutorial Part 2

Struktur Project pada Laravel | Laravel Tutorial Part 2 - Sebelum kita belajar lebih lanjut mengenai Laravel, ada baiknya kita mengetahui dulu mengenai apa aja yang terdapat di dalam project Laravel dan gunanya untuk apa. Jika kira buka kembali folder BelajarLaravel yang telah kita buat pada tutorial Installasi Laravel 4.2, maka kita akan menemukan file-file dan folder berikut ini :
Struktur Folder pada Laravel

Lalu, apa sih kegunaan file atau folder di atas? Mari kita bahas satu-persatu.
  • app/
    Folder ini digunakan untuk menyediakan tempat default untuk menyimpan kode yang sudah ditulis atau dikonfigurasi. Pada folder ini lah kita meletakan semua kode projek aplkasi yang dimulai dari konfiguasi, logic dan sebagainya. Didalam folder app juga terdapat beberapa folder dan file yang akan dijelaskan dibawah ini.
    • commands/
      Folder ini berguna untuk menyimpan perintah-perintah artisan yang kita buat untuk keperluan aplikasi yang kita buat.
    • config/
      Folder ini menyimpan konfigurasi framework ataupun aplikasi kita.
    • controllers/
      Folder ini digunakan untuk menyimpan kelas-kelas PHP Controller. Dengan menggunakan controller maka kita bisa memisahkan logika aplikasi kedalam beberapa kelas PHP.
    • databases/Folder ini merupakan tempat untuk menyimpan keperluan basisdata, baik untuk migrasi (migration) maupun untuk memasukkan data kedalam basisdata (seed).
    • lang/
      Folder ini digunakan untuk menyimpan berbagai lokalisasi bahasa untuk keperluan aplikasi, baik bahasa untuk paginasi, validasi dan lainnya. Misal anda ingin menambah dukungan bahasa Indonesia untuk aplikasi anda maka anda dapat membuat folder dengan nama id pada folder lang tersebut lalu memodifikasi value dari array pada file pagination.php, reminders.php dan validation.php sesuai dengan bahasa yang anda inginkan.
    • models/
      Folder ini berisi kelas-kelas model yang kaitannya dengan interaksi ke database.
    • start/
      Folder ini digunakan untuk menyimpan prosedur aplikasi yang kita buat, misalnya saja untuk menangani error dan lain-lain.
    • storage/
      Folder ini berfungsi untuk menyimpan file-file yang dibuat oleh laravel ke hardisk. Misalnya saja untuk membackup database (file .sql), kita tempatkan ke direktori storage/backup. Selain itu, folder ini juga untuk menyimpan log apache, sessions, dan lainnya.
    • tests/
      Folder untuk meyimpan semua unit dan tests untuk keperluan pengembangan aplikasi. Secara default laravel akan mencari test dalam folder ini.
    • views/
      Folder ini merupakan folder yang digunakan untuk menyimpan file-file PHP untuk keperluan tampilan (FrontEnd) pada aplikasi kita.
    • filters.php
      Merupakan file yang berisi daftar filer untuk routes aplikasi. Secara default Laravel sudah menyediakan beberapa filder untuk keperluan standar seperti autentifikasi dan proteksi CSRF.
    • routes.php
      File ini berisi semua route untuk aplikasi khususnya lalu lintas request ke aplikasi.
  • bootstrap/
    Folder ini berisi tentang file-file prosedur untuk framework laravel. Dalam folder ini terdapat beberapa file yang hanya boleh diedit oleh pengguna laravel yang sudah berpengalaman. Berikut ini adalah isi dari folder ini :
    • autoload.php
      File ini berisi sebagian besar prosedur framework laravel.
    • paths.php
      File ini berisi array dari jalur sistem file umum yang digunakan oleh framework laravel.
    • start.php
      File ini berisi tentang prosedur bagaimana framework laravel berjalan.
  • public/
    Folder ini berisi asset-asset yang akan digunakan pada aplikasi kita, misalnya saja file CSS, Javascript, Image, atau file public lainnya. Folder inilah nanti yang akan kita upload kedalam folder public pada hosting kita.
  • vendor/
    Folder ini berisi semua paket composer yang akan kita gunakan dalam aplikasi kita, file framework laravel juga berada pada folder ini.
  • .gitattributes
    File ini merupakan file konfigurasi standar sistem versi kontrol yang sangat populer saat ini yaitu Git.
  • .gitignore
    File ini berisi beberapa informasi folder mana saja yang akan diabaikan oleh Git.
  • artisan
    File ini merpakan file yang berfungsi untuk mengeksekusi atau menjalankan perintahperintah artisan CLI untuk laravel .
  • composer.json dan composer.lock
    Kedua file ini berisi informasi tentang paket-paket composer yang akan kita gunakan untuk keperluan aplikasi.
  • phpunit.xml
    File ini berisi konfigurasi default Unit Testing PHP Laravel. File ini juga menangani pemuatan dependensi composer dan mengeksekusi semua test yang ada pada direktori app/tests.
  • server.php
    File ini berisi tentang prosedur untuk menlakankan Laravel dengna web server internal yang diperkenalkan pada PHP versi 5.4. 

Itulah isi dari folder BelajarLaravel yang telah kita download pada tutorial Laravel sebelumnya. Bagaimana sudah mengerti kan sekarang kegunaan dari masing-masing folder pada framework laravel?
Read More