Gak bisa masuk ke AWS EC2 instance karena kehilangan keyPair? try this


Skenario
– EC2 instance, OS ubuntu, region xx-nc (selanjutnya kita sebut A1)
– Keypair file (andi_aws.pem) yang tersimpan di hardisk hilang, hardisknya corrupt.
– Tidak bisa ssh login ke server untuk deployment
– Deployment harus tetap dilakukan atau working progress akan terhambat.

Solusi
– Buat keypair baru, simpan. (selanjutnya disebut key_new.pem)
– Matikan instance A1.
– Detach primary volume milik A1, (dev/sda1), (selanjutnya kita sebut VA1)
– Buat dan hidupkan instance baru, micro aja cukup, INGAT: setup OS yang sama, region yang sama dengan A1 (selanjutnya kita sebut A2).
– Assign key_new.pem sebagai key untuk akses ke intance ini.
– Login ke A2,

ssh -i key_new.pem user@public_ip_of_A2

– Attach VA1 ke instance A2, default ke /dev/sdf atau /dev/xvdf
– Buat directory sementara untuk tempat mounting VA1 (mkdir /mnt/tmp)
– Mount VA1,

sudo mount /dev/xvdf /mnt/tmp

– Kopikan file authorized_keys yang ada di A2 ke dalam VA1,

cp ~/.ssh/authorized_keys /mnt/tmp/home/user/.ssh/authorized_keys

– Matikan instance A2
– Detach VA1 dari A2
– Attach VA1 ke A1 sebagai dev/sda1
– Hidupkan instance A1
– Coba akses menggunakan key_new.pem

ssh -i key_new.pem user@public_ip_of_A1

– Happy ending

Bagaimana cara extends validation library di CI.2


Extending Library Validation CI.2

Mengenai form validation librarynya CI bisa dibaca di siniĀ http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html
Tujuan extends library validation ini adalah untuk menambahkan fungsi-fungsi validasi yang diperlukan dalam project tapi tidak disediakan secara default oleh CI, artikel ini hanya mencakup penambahan satu fungsi custom validasi saja.

Condition:

  1. Dalam table products terdapat field bernama code, pos_setting_id dan field2 lain, code ini harus unique untuk tiap-tiap pos_setting_id, artinya code bisa sama untuk pos_setting_id yang berbeda tapi tidak boleh sama untuk pos_setting_id yang sama.
  2. Terdapat multi column index yang isinya dua kolom yaitu code dan pos_setting_id. UNIQUE(code,pos_setting_id)
  3. Validation rule yang digunakan sebelumnya adalah is_unique[products.code]
  4. Validation ini tidak tepat karena tidak memenuhi kriteria dalam point 1 di atas.
  5. Value dari pos_setting_id diambil dari session(‘pos_setting_id’).

Expected result :

  1. Validation library yang mensupport pengecekan product_code dan setting_id sebagai satu multi column index key.
  2. Nama method: is_unique_product()
Rules:
  1. Nama class yang mengextends core library harus menggunakan prefix MY_, contoh: class MY_Form_Validation extends CI_Form_Validation.
  2. File disimpan dengan nama yang sama dengan nama library extender, MY_Form_Validation.php, letakkan dalam folder application/libraries.
The library: MY_Form_Validation.php
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation {
  public $CI;
  // --------------------------------------------------------------------
  /**
  * Find product_code with same pos_setting_id
  *
  * @access	public
  * @param	string
  * @param	field
  * @return	bool
  */
  function is_unique_product($str, $field) {
    list($table, $field) = explode('.', $field);
    $where = array($field => $str,'pos_setting_id' => $this->CI->session->userdata('pos_setting_id'));
    $query = $this->CI->db->limit(1)->get_where($table, $where);
    return $query->num_rows() === 0;
  } 
// -------------------------------------------------------------------- 
} 
/* End of file MY_Form_validation.php */
/* Location: ./application/libraries/MY_Form_validation.php *
The Controller:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Products extends CI_Controller {
  function __construct() {
    parent::__construct();
    $this->load->library('form_validation');
  }
  
  function index() {
    $this->form_validation->set_rules('code','product_code','is_unique_product[products.code]');
   
    if($this->form_validation->run() == true) {
      echo "the data did not pass validation rules".validation_errors();
    } else {
      echo "OK, do something with the data";
    }
  }
}

Perang hacker indonesia vs hacker australia,


Barusan baca status temen sekampung tentang isu perang hacker indonesia vs hacker aussie. Perang ini kalo memang terjadi maka merupakan perang konyol, kenapa? Karena yang ngaku hacker2 itu pada pake akun anonim, gak jelas.

Ke-enggakjelasan ini ibarat mau nembakin rudal ke musuh tapi gak tau musuhnya ada di mana, akhirnya maen tembak weh, “spray and pray” tembakin aja sambil doa mudah-mudahan yang kena peluru kita itu beneran kombatan musuh.

Pihak yang mengatasnamakan hacker indonesia, yang marah karena presidennya disadap Aussie, terus maen hajar aja websites .au yang bisa dihajar ga peduli siapa yang punya n apa kaitannya dengan penyadapan, ini menurutku adalah tindakan emosional, reaksioner, sumbu pendek, yang bisa memunculkan carut marut permasalahan yang lebih besar.

Salah satu prinsip hukum perang yang diajarkan oleh Rasulullah SAW adalah “hanya memerangi kombatan dari pihak musuh”. Nah kalo yang perang pada anonymous gitu, gimana mau mastiin bahwa target yang diserang itu adalah infrastuktur tempur punya musuh?
Bisa jadi itu cuman website pabrik kerupuk rumahan, website taman kanak-kanak yang ga ada sangkut pautnya sama infrastuktur penyadapan pemerintah australia.

Konon kabarnya ada serangan yang ditujukan ke website badan intelejen australia tapi kemudian ada serangan gelombang kedua ke website .au lainnya, menurut legiun hacker anonymous australia serangan yang kedua itu menyasar ke website yang ga ada sangkut pautnya sama kasus penyadapan. Nampaknya pelaku serangan pertama dan kedua adalah dua pihak yang berbeda, yang satu serangannya tepat sasaran, yang satu lagi asal ngerusuh aja, bahasa anak medannya PTT, “Pantang Tak Top”.

Harapan saya selaku warga negara Indonesia dan pengguna internet semoga yang katanya perang ini tidak terjadi, kalopun mau perang sebaiknya kalian buat rulenya, misal pihak A tanggungjawab mengamankan server X, pihak B bertanggungjawab mengamankan server Y, nah pada perang di situ aja biar targetnya jelas dan gak merembet kemana-mana.

Tapi menurut saya itu juga ribet sih, mendingan kalian perang di http://travian.com aja.

Bagaimana cara sinkronisasi svn dan git menggunakan git-svn?


Contoh Kasus

Ente udah lama ninggalin svn dan beralih ke git, kini ente dapat project dimana clientnya masih pake svn dan gak berminat pindah ke git. Apakah ente harus balik lagi ke svn dan ninggalin git? jawabannya enggak. Pake aja git svn :D.

Variabel – variabel yang digunakan dalam kasus ini, sbb:

- project_name: the_example - git_remote_url: https://github.com/example/example.git - svn_remote_url: http://example.com/example/ - git_tracking_branch: master - svn_tracking_branch: svnbranch

Catatan:
Kolaborasi kode tetap dikumpulin di svn, maxudnya kalo client juga punya developer sendiri mereka pake svn yang sama sebagai repo, [git_remote_url] cuman buat ente and team ente doang.Ntar kalo nemu string seperti ini [project_name] artinya yang digunakan sebenernya adalah the_example, perhatiin variabel di atas.
contoh nih

$ cd [project_name]

ini artinya waktu nulis di console sebenernya gini

$ cd the_example

Pisahin tempat tracking history git dan svn

Buat branch untuk tracking history dari git

$ mkdir [project_name]
$ cd [project_name]
$ git init
$ git remote add [git_remote_url]
$ vim README (kalo ane biasanya suka bikin .gitignore duluan sebagai initial commit, supaya gak susah nge "ignore already tracked files")
$ git add README
$ git commit -m 'initial commit'
$ git push origin master
$ git log (copy commit ID nya ntar dipake buat create svn tracking branch)

Continue reading

Perintah dasar Git


Setting awal git repo

  • git init
    Perintah ini digunakan untuk bikin repository baru, atau nge-git-kan project yang belum pake repo git. Perintah ini akan nambahin dir namanya .git, isinya metadata yang dipake sama repo.
    git init

    ngetransform direktori jadi Git repository.

    git init [directory]

    ngebuat folder kosong sebagai repo Git yang baru, di dalamnya bakal ada folder .git

    git init --bare [project-name].git

    ngebuat git repo baru sebagai sentral repo, dijalanin di servernya git aja.

    contoh kasus bare repo:
    – sysadmin login ke server yang khusus buat dijadiin remote repository,
    – beliau initiate repo namanya my_project.git
    – para engineer ngeclone my_project.git ke repo lokalnya masing-masing untuk mulai koding.

  • git clone
    Perintah ini digunakan untuk ngekopi git repo yang udah ada di server. Ngejalannin perintah ini otomatis bikin remote connection namanya “origin” yang terkoneksi ke server git.
    git clone ssh://git@example.com:222/project_name.git

    ngeclone project_name.git dari remote repository di server example.com ke repo lokal, akses ke remote repo ini pake SSH port 222, protokol lain seperti HTTP/S juga support. Di komputer lokal bakal ngecreate folder baru namanya project_git.

    git clone ssh://git@example.com:222/project_name.git [directory]

    sama kayak yang diatas tapi gak bikin folder baru melainkan diarahin ke folder [directory] yang udah ada.

  • Continue reading

Firefox 10 di Ubuntu 10.11


Pagi ini ada notifikasi update dari Ubuntu untuk upgrade firefox ke versi 9, tapi ternyata firefox9 gak kompatibel dengan firebug, padahal firebug adalah toolpenting untuk pekerjaan saya. Akhirnya saya install firefox10 yang kompatibel dengan firebug. Masalahnya, sampai Postingan ini dibuat Ubuntu 10.11 hanya nyediain firefox9 di repository.
Jadi instalasi manual adalah jalan keluarnya, berikut ini step by stepnya

1. Download versi firefox10 dari website mozilla firefox
2. Extract ke /usr/local, jadi nanti akan ada /usr/local/firefox
3. Backup symbolic link firefox lama
- cd /usr/bin/
- sudo mv firefox firefox-old

4. Buat symbolic link firefox baru
- sudo ln -s /usr/bin/firefox/firefox firefox

Selesai.

Kalo misalnya ada error “another instance of firefox already running” lakukan ini
– pastikan firefox sudah tertutup
– hapus profile firefox (menghapus folder .mozilla di home direktory user)
rm -rf ~/.mozilla/firefox

Semoga bermanfaat

Costumisasi WP permalink menggunakan .htaccess


Dengan menggunakan permalink kita bisa mendapatkan url yang cantik, bahasa inggrisnya pretty url. Contohnya url biasa seperti ini http://www.gethuk.co.id/beli.php?rasa=durian&warna=biru nah saya pengen pretty urlnya jadi http://www.gethuk.co.id/beli/durian/biru,bisa gak ya?

Ya biisaaaa laaah ;).
Caranya dengan menggunakan RewriteRule pada .htaccess.

RewriteRule ^/beli/(.+)/(.+)/?$ /beli.php?rasa=$1&warna=$2

Jangan lupa mod RewriteEngine harus di On kan :), kode lengkapnya seperti ini.

RewriteEngine On
RewriteBase /
RewriteRule ^/beli/(.+)/(.+)/?$ /beli.php?rasa=$1&warna=$2

Nah, sekarang gimana make RewriteRule seperti ini di wordpress?

Perlu diketahui, wordpress akan menulis ulang file .htaccess setiap hali halaman settings->permalink di load, yang ditulis ulang adalah semua yang berada di antara

 #BEGIN Worpress ... #END WordPress

Hal ini membuat sekrip RewriteRule yang kita tambahin secara manual diantara Rulenya wordpress akan terhapus.
Supaya tidak terhapus gunakan wp codex Rewrite API: add_rewrite_rule pada functions.php,
Contohnya:

if( !function_exists('gethuk_pretty_url') ):
function gethuk_pretty_url() {
  add_rewrite_rule('/beli/(.+)/(.+)/?$','beli.php?rasa=$1&warna=$2','top');
}
//load the function before everything else get load add_action('init','gethuk_pretty_url'); endif;

Function ini akan menambahkan RewriteRule pada file .htaccess pada saat halaman settings->permalink di load. Jadi jangan lupa untuk reload halaman settings->permalink setelah menambahkan function ini.
Dah.siap itu aja, Selamat mencoba ya.