Setup Nginx and Apache2 Side by Side

Kita bisa memasang Apache2 Web Server dan Nginx Web Server dalam 1 server dengan membedakan port yang digunakan.

Kebetulan, Nginx adalah web server utamanya. Jadi Apache2 yang harus berubah port listening-nya.

Adapun Cara Install Apache2 dapat dilakukan dengan menggunakan bantuan dari tasksel.

$sudo apt-get install tasksel

kemudian jalankan tasksel :

$sudo tasksel

Pilih LAMP Server, kemudian Ok. Tunggu sampai proses installasi selesai. Pada saat instalasi LAMP Server, Anda akan diminta untuk memasukkan password root untuk MySQL Database.

Untuk memasang Nginx Web Server, dapat dilakukan dengan perintah :

$sudo apt-get install nginx
$sudo apt-get install nginx-extras

Jika Anda menghendaki untuk memasang Codeigniter, maka anda akan membutuhkan module php5-fpm. Gunakan perintah :

$sudo apt-get install php5-fpm

Untuk menambahkan modul php5-curl, gunakan perintah

$sudo apt-get install php5-curl

Untuk menambahkan modul php5-pgsql ( untuk akses database Postgresql ) gunakan perintah :

$sudo apt-get install php5-pgsql

Setelah itu ubah port listening Apache2 ke port 8080. Default port listening Apache2 adalah port 80. File config port dapat ditemukan di :

$sudo vim /etc/apache2/ports.conf

Ada baiknya untuk melakukan backup terhadap file config sebelum kita mengubahnya. Untuk backup file config dapat digunakan perintah :

$sudo cp /etc/apache2/ports.conf /etc/apache2/ports.conf.bak

Kemudian ubah port yang ada di ports.conf ke port yang lain, misalnya 8080

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

#Listen 80
Listen 8080

<IfModule ssl_module>
 #Listen 443
 Listen 4443
</IfModule>

<IfModule mod_gnutls.c>
 #Listen 443
 Listen 4443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Kemudian update juga file config sites default apache2 yang ada di :

$sudo vim /etc/apach2/sites-available/00-default.conf

Ubah port listening sesuai dengan konfigurasi port sebelumnya :

<VirtualHost *:8080>
 # 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@localhost
 DocumentRoot /var/www/html

# 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>

Update juga konfigurasi default-ssl.conf nya

<IfModule mod_ssl.c>
 <VirtualHost _default_:4443>
 ServerAdmin webmaster@localhost

DocumentRoot /var/www/html

 

Setelah itu restart service apache2 dengan perintah :

$sudo service apache2 restart

Kemudian ubah config file Nginx seperti contoh di bawah ini :

server {
 listen 80 default_server;
 listen [::]:80 default_server ipv6only=on;

root /usr/share/nginx/html;
 #index index.html index.htm;
 index index.php index.html;

# Make site accessible from http://localhost/
 server_name localhost;

location / {
 # First attempt to serve request as file, then
 # as directory, then fall back to displaying a 404.
 try_files $uri $uri/ =404;
 # Uncomment to enable naxsi on this location
 # include /etc/nginx/naxsi.rules
 }

# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
 #location /RequestDenied {
 # proxy_pass http://127.0.0.1:8080;
 #}

#diaktifkan
 error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
 #
 #diaktifkan
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root /usr/share/nginx/html;
 }

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 #diaktifkan
 location ~ \.php$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

# With php5-cgi alone:
 #fastcgi_pass 127.0.0.1:9000;
 # With php5-fpm:

fastcgi_pass unix:/var/run/php5-fpm.sock;
 fastcgi_index index.php;
 include fastcgi_params;
 }

# deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 #diaktifkan
 location ~ /\.ht {
 deny all;
 }

Kemudian jalankan service Nginx dengan perintah :

$sudo service nginx start

Setelah selesai, kita dapat memastikan bahwa konfigurasi apache2 dan nginx berjalan dengan baik dengan cara mengakses

http://localhost:8080/ --> untuk apache2

dan

http://localhost/ --> untuk Nginx

Untuk detil config dapat ditemukan di akun Github saya.

Mudah-mudahan bermanfaat !

 

 

 

Advertisements

Extends Codeigniter Core Class

Jika ingin menambahkan fungsi-fungsi yang sekiranya akan digunakan oleh semua :

  • Benchmark
  • Config
  • Controller
  • Exceptions
  • Hooks
  • Input
  • Language
  • Loader
  • Log
  • Output
  • Router
  • Security
  • URI
  • Utf8

di Codeigniter, maka dapat dilakukan dengan cara Extends Core Class Codeigniter untuk kemudian menambahkan fungsi-fungsi tersebut. Jika nama fungsi yang ditambahkan sudah digunakan oleh Core Class nya (reserved), maka fungsi itu akan meng-override fungsi aslinya. Jadi berhati-hati dalam memilih nama fungsi.

/** application/core/MY_Controller.php */
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends CI_Controller 
{
  public function __construct()
  {
    parent::__construct();
    $this->load->library('session');
  }

  public function is_loggedin()
  {
    if ($this->session->userdata('username') {
      // user login
      return true;
    } else {
      // user belum login
      return false;
    }
  }
}

Extends Class ini pada dasarnya adalah menduplikat class yang sudah ada untuk kemudian ditambahkan atau dimodifikasi agak sesuai dengan kebutuhan. Sebagai contoh, ketika ingin menambahkan fungsi is_loggedin() yang akan memeriksa apakah user sudah login atau belum di Controller, maka kita dapat melakukannya dengan cara membuat file MY_Controller.php di folder application/core dan yang berisi.

Dan pada saat membuat Controller, kita tidak lagi extends dari CI_Controller, tapi dari MY_Controller yang barusan kita buat tersebut.

/** application/controller/Dashboard.php */
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Controller extends MY_Controller
{
  public function __construct()
  {
    parent::__construct();
    $this->load->helper('url');
  }

  public function index()
  {
    if ($this->is_loggedin()) {
      // user sudah login
      $this->load->view('dashboard/index');
    } else {
      // user belum login
      redirect(base_url());
    }
  }

Untuk lebih lengkapnya bisa dilihat di halaman dokumentasi Codeigniter ini.

Mudah-mudahan bermanfaat ya !

Codeigniter base_url and index_page

Untuk memasang Codeigniter di web server lokal komputer, silahkan lihat halaman ini. Setelah Codeigniter berhasil terpasang, langkah berikutnya adalah memastikan pemasangan Codeigniter sudah benar dengan cara mengakses url pemasangan Codeigniter di web server lokal Anda dengan mengakses

http://localhost/aplikasi

Jika Codeigniter berhasil terpasang, maka seharusnya Anda dapat melihat halaman selamat datang dari Codeigniter seperti gambar di bawah ini.

ci_welcome_page

Gambar 1 : Halaman Selamat Datang Codeigniter.

Setelah itu, coba akses ke http://localhost/halaman404, maka hasilnya akan tampil seperti gambar di bawah ini.

ci_object_not_found

Gambar 2 : Codeigniter Object Not Found

Sebenarnya, di Codeigniter sudah ada halaman 404 Not Found yang ditampilkan saat Codeigniter tidak dapat menemukan controller dari request yang diberikan. Halaman 404 Not Found itu adalah seperti gambar di bawah ini.

ci_404_page

Gambar 3 : Codeigniter Not Found page

Lalu, bagaimana supaya saat Codeigniter tidak dapat menemukan controller yang di-request maka akan menampilkan halaman 404 Not Found tersebut?

Buka file config.php di folder application di aplikasi Codeigniter, kemudian cari konfigurasi $config[‘base_url’], kemudian ubah nilai nya dengan http://localhost/aplikasi ( sesuai dengan nama aplikasi Codeigniter Anda )

$config['base_url'] = 'http://localhost/aplikasi/';

Kemudian cari konfigurasi $config[‘index_page’] dan ubah nilainya menjadi ” ( empty string ), kemudian simpan perubahan tersebut.

$config['index_page'] = '';

Selanjutnya, buat file baru di bawah folder aplikasi ( satu level dengan folder application ) dengan nama .htaccess. Isi file .htaccess ini dengan :

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

kemudian simpan perubahan tersebut.

Sekarang coba akses kembali

http://localhost/halaman404

lagi, dan kali ini seharusnya Codeigntier menampilkan halaman 404 Not Found dan bukan lagi halaman Object not Found seperti sebelumnya.

Oh iya, Halaman 404 Not Found ini dapat Anda ubah sesuai kebutuhan dengan mengubah file application/views/errors/html/error_404.php.

Mudah-mudahan bermanfaat.

Ciri anak yang dominan otak kanannya.

ciri-ciri anak yang lebih dominan otak kanannya versi ayah Edy :
1. Biasanya sulit mengikuti pelajaran sekolah.
2. Biasanya sewaktu kecil termasuk anak yang terlambat berbicara dibanding anak seusianya.
3. Biasanya semasa masih balita lebih kuat tangan kiri atau cenderung lebih kidal.
4. Jika berbicara tidak runtut, tidak sistematis dan cenderung sulit dipahami.
5. Memiliki perasaan yang sangat sensitif atau peka.
6. Sulit mengungkapkan keinginannya dalam kalimat atau sulit menyusun kalimat dalam mengungkapkan perasaanya.
7. Mudah hafal tanda-tanda, tempat atau rute yang pernah dilihat atau dilaluinya meski cuma sekali.
8. Sering bicara tidak nyambung dengan pertanyaannya.
9. Kadang-kadang suka bicara sendiri menceritakan fantasinya.
10. Kadang bercerita tentang suatu tempat yang belum pernah dikunjungi seolah-olah tempat itu nyata baginya.
11. Konsentrasinya seringkali rendah pada pekerjaan atau kegiatan yg kurang disukainya ato yg diperintah oleh gurunya. Tapi memiliki konsentrasi penuh saat melakukan hal2 yg disukainya.
12. Seringkali membuat cara baru dalam menyelesaikan masalah.
13. Lebih suka permainan rancang bangun seperti lego, susun menyusun, gambar menggambar dan sebagainya.
14. Suka keluar dari kelompok dan melakukan aktivitas sendirian.
15. Sebagian ada yg bisa membedakan jenis benda secara detil, seperti merek mobil, type pesawat, jenis2 hewan dsb.
16. Seringkali sulit belajar mengeja suku kata.
17. Sulit membedakan huruf b kecil dan d kecil
18. seringkali terbalik-balik saat menulis huruf b dgn d,w dgn m dsb.
19. Sulit mengerjakan soal matimatika dan logika serta rumus2 kecuali saat kita memberikan contoh analoginya.
20. Sebagian sulit memahami makna soal cerita matematika kecuali diberikan contoh langsung, praktek dan perumpamaan dengan alat bantu.
21. Sering memandang ke atas dan seperti anak yg sedang melamun.
22. Seringkali tidak suka mencatat dan lebih suka memenuh bukunya dengan gambar di sana sini.
23. Kalo sudah bisa membaca, seringkali saat membaca kata2nya sering melompat2 dan beberapa kata terlewati.
24. Jika sudah mengenal huruf atau angka biasanya akan bisa membaca urutannya sama cepat baik dari depan ke belakang maupun dari belakang ke depan.

Jangan kuatir, anak2 dengan ciri2 tersebut bukanlah anak2 yg bermasalah. Anak2 tersebut lebih dominan otak kanannya dan memiliki keunggulan di bidang imajiasi, design, rancang bangun baik di bidang science maupun seni.

Customized Application atau Standard Application

Untuk perusahaan yang sedang berkembang atau bahkan perusahaan besar, kebutuhan akan sistem sudah pasti menjadi satu hal yang tidak bisa ditolerir lagi. Tanpa sistem maka bisa dibayangkan betapa tidak efisiennya pekerjaan yang harus dikerjakan oleh karyawannya secara manual. Kebutuhan sistem ini yang membuat manajemen perusahaan harus memutuskan untuk menggunakan Customized Application (aplikasi terkustomisasi) atau Standard Application (aplikasi jadi).

Tentu saja akan ada banyak sekali faktor yang dijadikan pertimbangan untuk menentukan pilihan, antara lain :
1. Jenis / bidang bisnis yang dijalani
2. Proses bisnis yang unik
3. Resource IT yang dimiliki
4. Anggaran,
5. dsb

Tapi secara garis besar kita bisa melihat kelebihan dan kekurangan dari Customized Application dan Standard Application. Dan berikut adalah ulasan singkatnya.

Standard Application

Keuntungan:
– Langsung bisa dipakai dan tidak usah menunggu proses development yang bisa jadi panjang
– Sudah teruji biasanya ( untuk vendor aplikasi besar pasti punya tim QC untuk produk-produknya )
– Ada support dari vendor ( jika membeli aplikasi yang berlisensi )

Kelemahan :
– Seringkali tidak sesuai dengan proses bisnis yang ada di perusahaan
– Tidak bisa menambah atau mengubah role bisnis yang sudah ada ( kecuali vendor aplikasi menyediakan support itu )
– Relatif mahal harganya, baik beli putus maupun beli lisensi per periode tertentu.

sedangkan untuk Customized Application,

Keuntungan :
– Proses bisnis sudah pasti bisa menyesuaikan dengan aturan perusahaan, bahkan untuk aturan-aturan yang khusus atau unik.
– Dapat menambah atau mengubah role proses bisnis jika ternyata harus ada perubahan
– Lebih bisa yakin terhadap apa yang dilakukan oleh aplikasi karena di develop sendiri.

Kelemahan :
– Butuh tim untuk mengembangkan aplikasi
– Butuh waktu untuk mengembangkan aplikasi

dari beberapa uraian singkat di atas mungkin bisa dijadikan bahan pertimbangan untuk memilih antara Customized Application atau Standard Application.

semoga bermanfaat !

salam,
shes12

Validasi Data Transaksi

Saat kita sedang membuat atau merancang aplikasi database, hampir dapat dipastikan kita akan menemukan yang namanya data transaksi, selain data master tentu saja. Data transaksi ini merupakan rekaman dari transaksi-transaksi yang dilakukan di dalam aplikasi. Biasanya transaksi-transaksi ini melibatkan data master sebagai acuan atau referensi. Dan kali ini saya ingin menulis tentang validasi data transaksi dalam aplikasi, yang terutama berhubungan dengan proses lain. so, mari kita mulai …

Kali ini yang akan kita ambil sebagai contoh adalah data penjualan, bagi mereka yang pernah membuat aplikasi pos atau aplikasi yang memiliki modul penjualan pastinya sudah tidak asing lagi. Tapi jika ternyata Anda belum pernah membuat aplikasi yang memiliki modul penjualan juga tidak masalah, saya tidak akan membahas ini terlalu teknis, lebih kepada pendekatan metode nya saja. Karena jika terlalu teknis, maka setiap programmer memiliki style mereka masing-masing dan begitu pun dengan Anda bukan ?

Transaksi penjualan biasanya melibatkan beberapa data master antara lain, data master barang, data master pembeli atau langganan (jika ada), data master stock (untuk mengetahui apakah item dimaksud masih memiliki stock yang cukup untuk transaksi penjualan) dan data konversi satuan (jika modul penjualan mengakomodasi multi satuan). Sebagai contoh sederhana kita ambil transaksi penjualan dengan satu satuan saja.

Saat transaksi penjualan terjadi dengan 5 item di dalamnya kemudian transaksi tersebut telah di simpan, tidak serta merta data penjualan tersebut meng-update stock barang di tabel stock. (misalnya aturan yang dipakai adalah stock ter-update saat pembayaran terhadap penjualan dilakukan). Jadi data transaksi masih hanya berupa data transaksi saja, belum terkait dengan data stock.

Di tahap ini, jika ternyata data transaksi mengalami perubahan atau penambahan item maka user diperbolehkan meng-edit data penjualan karena data tersebut masih belum terkait dengan stock barang. Tapi pada saat transaksi tersebut sudah dibayar, dan data transaksi penjualan telah di validasi, maka seharusnya data transaksi tersebut sudah TIDAK BOLEH lagi diubah. Dan sudah menjadi data yang fix / mati.

Kenapa? karena pada saat validasi, terdapat proses update stock barang. Jika ternyata data transaksi diubah baik ditambah item atau dikurangi item atau diubah qty nya, maka aplikasi perlu melakukan update ke data stock juga, tapi mekanisme ini akan jauh lebih merepotkan dan tidak konsisten jika kita memakai kartu stock untuk mengontrol keluar masuk barang di aplikasi kita.

Oleh karena itu, pada saat proses validasi selesai dilakukan, data dinyatakan sebagai data yang sudah fix atau mati. Kemudian bagaimana jika ternyata data tersebut salah ? atau terdapat salah entri di dalamnya?? ada beberapa metode yang bisa dilakukan dan kali ini saya hanya akan menunjukkan 2 diantaranya.

1. Batal Validasi
Sebelum mengubah data, maka dilakukan proses batal validasi. Proses ini mengembalikan stock semua item yang ada di data transaksi penjualan dengan qty yang sesuai dengan yang ada di dalam transaksi. Jika di dalam transaksi terjual 10 pc, maka di stock barang akan dikembalikan 10 pc juga, dan seterusnya.

Dengan demikian setelah proses Batal Validasi ini, stock barang yang ada di transaksi seolah-olah dibatalkan, tapi di kartu stock tetap tercatat sebagai pembatalan validasi dari nota penjualan tersebut. Setelah itu baru dilakukan perubahan data transaksi, entah itu mengurangi item, menambah item atau mengubah qty item. Setelah perubahan selesai, kemudian dilakukan kembali proses validasi yang akan meng-update kembali data stock barang sesuai dengan data transaksi yang telah diperbaiki.

Proses ini memiliki resiko bahwa di kartu stock kita akan menjadi lebih panjang dan banyak itemnya jika sering terjadi proses pembatalan transaksi seperti ini. Tapi paling tidak, kita bisa mengetahui kenapa transaksi tersebut dibatalkan, dan jika ternyata banyak transaksi serupa, berarti kita perlu mempertanyakan kinerja dari user entri datanya.

2. Transaksi Koreksi
Pendekatan kedua adalah transaksi koreksi, dimana kita membuat transaksi koreksi dengan mengubah data transaksi yang sudah ada tapi dengan menggunakan transaksi yang berbeda. Jika ternyata ada salah satu item yang ingin dibatalkan di data transaksi tersebut, maka kita bisa membuat transaksi yang menyatakan bahwa item itu di nota penjualan no sekian dinyatakan dibatalkan (dengan flag batal misalnya), dan saat transaksi koreksi ini di validasi, maka dilakukan update data stock barang sesuai dengan transaksi koreksi.

Pendekatan ini hanya fokus pada item yang salah saja, jadi tidak semua item perlu dikembalikan ke data stock barang terlebih dahulu, namun hanya item yang ternyata salah entri saja. Di kartu stock kita masih akan mendapati bahwa terdapat transaksi koreksi dari item tersebut dan kembali lagi, jika ternyata banyak transaksi koreksi yang terjadi, maka kita harus mempertanyakan kembali kinerja user entri data.

Dari kedua pendekatan tersebut, kita bisa memilih salah satunya, yang kemungkinan lebih sesuai dengan kondisi dan situasi yang ada di tempat klien kita, tapi tujuan dari adanya proses seperti di atas adalah agar perubahan di data transaksi tetap dapat terekam dan tercatat di dalam database, serta efek yang ditimbulkan dari perubahan data transaksi tersebut tetap bisa meng-update data stock barang dengan benar.

Gimana? bingung ya? ya sudah tidak apa-apa kalo masih bingung, silahkan baca pelan-pelan lagi dari awal. Tapi jika memang ada yang mau ditanyakan, silahkan komen di post ini atau kontak saya di email yang ada di halaman ME.

Mudah-mudahan bermanfaat !

#me #data #transaksi #validasi