Oct31

Saya tidak akan mengambil definisi dari buku-buku marketing, paper, wikipedia or whatever, cukup lah seorang Steve Jobs, CEO Apple yang bicara, ini dia

Steve Jobs gave a small private presentation about the iTunes Music Store to some independent record label people. My favorite line of the day was when people kept raising their hand saying, “Does it do [x]?”, “Do you plan to add [y]?”. Finally Jobs said, “Wait wait — put your hands down. Listen: I know you have a thousand ideas for all the cool features iTunes could have. So do we. But we don’t want a thousand features. That would be ugly. Innovation is not about saying yes to everything. It’s about saying NO to all but the most crucial features.

sumber : http://gettingreal.37signals.com/ch05_Start_With_No.php

any thoughts ?

Oct27

Nginx (baca : Engine-X) adalah web server buatan Igor Sysoev, seorang Rusia, digunakan sebagai alternatif dari Apache Web Server, salah satu keunggulan yang menarik dari nginx adalah, nginx relatif lebih kecil dalam memakan resource memory ketimbang Apache, nginx juga sangat cepat dalam menangani file statis (javascript, html, image , css file). Di dunia Rails, nginx seringkali digunakan dalam mode production sebagai Frontend Web Server/Load Balancer

Di artikel ini saya akan mencoba menuliskan bagaimana cara untuk mengcompile,menginstall, mengkonfigurasi dan menjadikan nginx sbg web server untuk Aplikasi Ruby on Rails yang sudah support dengan SSL di Fedora 9/CentOS 5

Install SSL dan PCRE

yum install pcre pcre-devel openssl openssl-devel

Download nginx 0.6.2 (versi Stable terakhir)

wget http://sysoev.ru/nginx/nginx-0.6.32.tar.gz

Ekstrak, konfigurasi, compile lalu install

tar -xzf nginx-0.6.32.tar.gz
cd nginx-0.6.32
./configure –with-http_ssl_module –with-http_dav_module
make
sudo make install

setelah itu kita perlu generate SSL key, supaya situs kita support protokol https

openssl genrsa -des3 -out server.key 1024 #akan menghasilkan server.key

command di atas akan menanyakan passphrase, jangan lupa untuk mengingat passphrase ini

openssl req -new -key server.key -out server.csr

comand tsb akan akan menghasilkan server.csr dengan sebelumnya menanyakan bbrp pertanyaan spt ini

Country Name (2 letter code) [GB]:IN
State or Province Name (full name) [Berkshire]:Cihanjuang
Locality Name (eg, city) [Newbury]:Bandung
Organization Name (eg, company) [My Company Ltd]:Prawirasoft
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server’s hostname) []:Prawirasoft.com
Email Address []:contoh@contoh.com

lalu terakhir, generate file crt

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

copy ketiga file di atas ke direktori tempat konfigurasi nginx berada

sudo cp server* /usr/local/nginx/conf/

setelah itu kita mesti konfigurasi beberapa setting nginx, di bawah ini adalah konfigurasi umum bagaimana nginx yang support ssl bekerja, referensi dasar berasal dari konfigurasi yang dibuat oleh akang Ezra Zygmuntowicz

Buka file /usr/local/nginx/conf/nginx.conf dengan editor kesayangan anda sebagai super user/sudoers, lalu masukan konfigurasi dibawah ini lalu save (sebaiknya melakukan backup terlebih dahulu)

#user  nobody;
worker_processes  2; #jumlah nginx instance
	
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
	
#pid        logs/nginx.pid;
	
events {
    worker_connections  1024;
}
	
http {
    include       mime.types;
    default_type  application/octet-stream;
	
    #log_format  main  '$remote_addr - $remote_user [$time_local] $request '
    #                  '\"$status\" $body_bytes_sent \"$http_referer\" '
    #                  '\"$http_user_agent\" \"$http_x_forwarded_for\"';
	
    #access_log  logs/access.log  main;
	
    sendfile        on;
	
    #keepalive_timeout  0;
    keepalive_timeout  65;
	
   # These are good default values.
    tcp_nopush        on;
    tcp_nodelay       off;
	
    # output compression saves bandwidth
    gzip            on;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_types      text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
	
    # this is where you define your mongrel clusters.
    # you need one of these blocks for each cluster
    # and each one needs its own name to refer to it later.
    upstream thin {
      server 127.0.0.1:3001; #port di mana server backend anda running, bisa lebih dari satu server+port, bisa memakai thin atau mongrel web server
    }
	
    # the server directive is nginx's virtual host directive.
    server {
      # port to listen on. Can also be set to an IP:PORT
      listen 80;
	
      # Set the max size for file uploads to 50Mb
      client_max_body_size 50M;
	
      # sets the domain[s] that this vhost server requests for
      server_name prawirasoft.com www.prawirasoft.com; #nama domain anda, ubah sesuai dengan kebutuhan
	
      # doc root
      root /home/aditya/webapp/prawirasoft/trunk/public; #public RAILS_ROOT, direktory public di mana file2 statis aplikasi rails berada
	
      # vhost specific access log
      access_log  /var/log/nginx.vhost.access.log ;
	
     # this rewrites all the requests to the maintenance.html
     # page if it exists in the doc root. This is for capistrano's
     # disable web task
     if (-f $document_root/system/maintenance.html) {
       rewrite  ^(.*)$  /system/maintenance.html last;
       break;
     }
	
     location / {
       # needed to forward user's IP address to rails
       proxy_set_header  X-Real-IP  $remote_addr;
	
       # needed for HTTPS
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       proxy_redirect false;
       proxy_max_temp_file_size 0;
	
       # If the file exists as a static file serve it directly without
       # running all the other rewite tests on it
       if (-f $request_filename) {
         break;
       }
	
       # check for index.html for directory index
       # if its there on the filesystem then rewite
       # the url to add /index.html to the end of it
       # and then break to send it to the next config rules.
       if (-f $request_filename/index.html) {
         rewrite (.*) $1/index.html break;
       }
	
      # this is the meat of the rails page caching config
      # it adds .html to the end of the url and then checks
      # the filesystem for that file. If it exists, then we
      # rewite the url to have explicit .html on the end
      # and then send it on its way to the next config rule.
      # if there is no file on the fs then it sets all the
      # necessary headers and proxies to our upstream mongrels
      if (-f $request_filename.html) {
        rewrite (.*) $1.html break;
      }
	
      if (!-f $request_filename) {
        proxy_pass http://thin;
        break;
      }
    }
	
      error_page   500 502 503 504  /500.html;
      location = /500.html {
        root   /home/aditya/webapp/prawirasoft/trunk/public; #public RAILS_ROOT, direktory public di mana file2 statis aplikasi rails berada
      }
    }
	
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
	
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
	
    # HTTPS server
    #
      # This server is setup for ssl. Uncomment if
  # you are using ssl as well as port 80.
  server {
    # port to listen on. Can also be set to an IP:PORT
    listen 443;
	
    # Set the max size for file uploads to 50Mb
    client_max_body_size 50M;
	
    # sets the domain[s] that this vhost server requests for
    server_name prawirasoft.com www.prawirasoft.com; ## nama host, ubah sesuai kebutuhan
	
    # doc root
    root /home/aditya/webapp/prawirasoft/trunk/public; #public RAILS_ROOT, direktory public di mana file2 statis aplikasi rails berada
	
    ssl on;
	
    # path to ssl cert
    ssl_certificate server.crt;
    # path to ssl key
    ssl_certificate_key server.key;
	
    # vhost specific access log
    # access_log  /var/log/nginx.vhost.access.log  main;
	
    # this rewrites all the requests to the maintenance.html
    # page if it exists in the doc root. This is for capistrano's
    # disable web task
    if (-f $document_root/system/maintenance.html) {
      rewrite  ^(.*)$  /system/maintenance.html last;
      break;
    }
	
    location / {
      # needed to forward user's IP address to rails
      proxy_set_header  X-Real-IP  $remote_addr;
	
      # needed for HTTPS
      proxy_set_header X_FORWARDED_PROTO https;
	
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect false;
      proxy_max_temp_file_size 0;
	
      # If the file exists as a static file serve it directly without
      # running all the other rewite tests on it
      if (-f $request_filename) {
        break;
      }
	
      # check for index.html for directory index
      # if its there on the filesystem then rewite
      # the url to add /index.html to the end of it
      # and then break to send it to the next config rules.
      if (-f $request_filename/index.html) {
        rewrite (.*) $1/index.html break;
      }
	
      # this is the meat of the rails page caching config
      # it adds .html to the end of the url and then checks
      # the filesystem for that file. If it exists, then we
      # rewite the url to have explicit .html on the end
      # and then send it on its way to the next config rule.
      # if there is no file on the fs then it sets all the
      # necessary headers and proxies to our upstream mongrels
      if (-f $request_filename.html) {
        rewrite (.*) $1.html break;
      }
	
      if (!-f $request_filename) {
        proxy_pass http://thin;
        break;
      }
    }
	
    error_page   500 502 503 504  /500.html;
    location = /500.html {
      root   /home/aditya/webapp/prawirasoft/trunk/public;
    }
  }
	
}

setelah itu pastikan port 80,445 dan 3001 kosong, port 80 dan 445 biasanya dipakai oleh web server apache, oleh karena itu sebaiknya matikan apache-nya dulu, (atau kalou mau, pastikan apachenya ganti port - tapi kalo saya, melakukan hal ini lum pernah berhasil he he)

matikan apache

sudo /sbin/service httpd stop

setelah itu test apakah konfigurasi nginx-nya sudah benar

sudo /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

konfigurasi yang benar akan memunculkan pesan seperti ini

Enter PEM pass phrase:
2008/10/27 01:07:33 [info] 14294#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2008/10/27 01:07:33 [info] 14294#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

setelah itu, silahkan nyalakan nginx-nya

sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

lalu, yang terakhir, nyalakan backend servernya di port 3001 (saya memakai thin), masuk ke direktory RAILS_ROOT, dalam kasus saya berada terletak di /home/aditya/webapp/prawirasoft/trunk/ lalu ketik

thin start -p 3001 -d

lebih lanjut tentang thin bisa dilihat juga di sini

tunggu selama 10-20 detik supaya thin selesai loading, lalu buka browser dan masukan url host yang tadi telah dimasukan ke file konfogurasi nginx, dalam kasus saya ke http://www.prawirasoft.com atau https://www.prawirasoft.com

Oct24

Amien RAILS dan MERBiam Bellina kayaknya cocok dijodohin ma RUBY Wowor wakakakk

Dalam kehidupan, setiap pasangan itu diciptakan bukan untuk saling menyaingi melainkan saling melengkapi, begitu pula di dunia program memprogram, ketika orang-orang antusias dengan yang baru, bukan berarti untuk menyaingi atau mematikan yang lama

Yang baru memang biasanya dalam hal-hal tertentu lebih baik dari yang lama, tapi dia tidak akan ada kalau yang lama nggak pernah eksis, yang baru tercipta selalu akan mengambil hal yang positif dari yang lama, tetapi tidak keburukannya. walaupun begitu setiap teknologi yang tercipta baik yang baru atau yang lama pasti ada kelebihan dan kekurangannya, nah untuk itulah tugas manusia, yang memilih mana yang sesuai dengan KEBUTUHANNYA, jadi seperti yang dihimbau oleh Ezra Zygmuntowicz di artikel ini, STOP untuk membuat peperangan antara Amien RAILS dan MERBiam Bellina, apalagi sampai menjatuhkan, biarkanlah keduanya bermesraan yang dibutuhkan adalah saling mendukung dan berkompetisi sehat, untuk membuat RUBY Wowor Happy

Ya, sebagai penggemar RUBY Wowor, tidak seharusnyalah kita mengadu domba Amien RAILS dan MERBiam Bellina, biarlah kita mendukung keduanya, biar saling melengkapi, saling mengasihi so dengan begitu akan cepat menelurkan keturunan2 terbaik, karena RUBY Wowor sang mak comblang, perlu keturunan2 yang berkualitas atau bahkan mak comblang-mak comblang baru (contoh mak comblang yg dah exist : RUBY jeNIUS dan Jawa RUBY) agar dunia semakin semarak

Oh iya sekedar pemberitahuan, bulan depan MERBiam Bellina sepertinya akan segera memasuki usia matang, seperti yang diberitakan oleh salah satu media gosip terkenal, so siap-siap bagi penggemar yang ingin membeli merchandise-nya, silahkan pilih ada yg murah maupun yang rada mahal

ALL HAIL Rubyist

catatan : yayaya ini emang postingan gak jelas, tapi kalo anda sehari-hari ngoprek batu mirah delima, pasti fehem apa yg saya maksud he he