tag:blogger.com,1999:blog-9197049878372784022024-03-06T05:43:20.518+07:00kuntoaji.blogspot.com:)Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.comBlogger221125tag:blogger.com,1999:blog-919704987837278402.post-42054409348080410502016-07-20T06:29:00.000+07:002016-07-20T06:29:31.091+07:00Pindah ke kaklabs.comHalo semua, sudah lama tidak update blog ini.<div>
<br /></div>
<div>
Sepertinya ke depannya saya akan fokus update <a href="https://www.kaklabs.com/">kaklabs.com</a>, oleh karena itu artikel - artikel terbaru tidak akan diposting disini dan akan diposting di <a href="https://www.kaklabs.com/">kaklabs.com</a>.<div>
<br /></div>
<div>
Terima kasih.</div>
</div>
Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-67230875741304441422015-01-11T14:57:00.000+07:002015-03-04T22:29:21.725+07:00Cara Install Google Chrome di SlackwareBerdasarkan Google, browser chrome adalah browser yang dibuat untuk tujuan agar cepat, namun juga sederhana dan aman.<br />
<br />
<a name='more'></a>Google Chrome secara tidak merupakan aplikasi default pada Linux Slackware, namun Slackware memberi script untuk mempermudah instalasi Google Chrome melalui Slackbuild. Script ini dibuat oleh Patrick Volkerding dan tersedia difolder yang bernama "extra" yang terletak didalam pohon direktori Slackware.<br />
<br />
Di dalam folder extra tersebut, terdapat folder google-chrome dimana didalamnya terdapat file <a href="http://mirrors.slackware.com/slackware/slackware-current/extra/google-chrome/README">README</a> yang berisi bagaimana cara install google chrome menggunakan script google-chrome.SlackBuild.<br />
<br />
Berikut ini adalah tutorial untuk install google chrome menggunakan script Slackbuild pada Slackware dimana menggunakan google chrome versi 39 dan menggunakan Slackware 14.1:<br />
<ol>
<li>Buka <a href="https://www.google.com/chrome/browser/desktop/index.html">https://www.google.com/chrome/browser/desktop/index.html</a></li>
<li>Klik Download dan pilih:</li>
<ul>
<li>32 bit .deb (for Debian/Ubuntu).</li>
<li>atau 64 bit .deb (for Debian/Ubuntu).</li>
</ul>
<li>Pilih paket sesuai artitektur yang digunakan:</li>
<ul>
<li>32 bit .deb (for Debian/Ubuntu) untuk Slackware 32-bit.</li>
<li>64 bit .deb (for Debian/Ubuntu) untuk Slackware 64-bit.</li>
</ul>
<li>Download paket .deb yang telah dipilih.</li>
<li>Jika memiliki CD/DVD installer Slackware, copy folder extra/google-chrome dan pindahkan ke folder temporari (/tmp/google-chrome atau /opt/google-chrome). Jika online, untuk Indonesia bisa download melalui <a href="http://kambing.ui.ac.id/slackware/slackware-14.1/extra/google-chrome/">http://kambing.ui.ac.id/slackware/slackware-14.1/extra/google-chrome/</a></li>
<li>Pindahkan atau copy paket .deb google chrome (google-chrome-stable_current_i386.deb) ke folder yang sama, misal /opt/google-chrome/</li>
<li>Di dalam terminal, login sebagai root:<br />
<pre class="brush: plain">su -</pre>
</li>
<li>Pindah ke folder temporari:<br />
<pre class="brush: plain">cd /opt/google-chrome
</pre>
</li>
<li>
Jalankan script google-chrome.SlackBuild sebagai root:<br />
<pre class="brush: plain">sh google-chrome.SlackBuild
</pre>
</li>
<li>
Ketika selesai, akan muncul tulisan seperti berikut:<br />
<pre class="brush: plain">Slackware package /tmp/google-chrome-39.0.2171.95-i386-1.txz created.
</pre>
</li>
<li>
Install paket tersebut sebagai root:<br />
<pre class="brush: plain">upgradepkg --install-new /tmp/google-chrome-39.0.2171.95-i386-1.txz
</pre>
</li>
<li>
Selesai. Google Chrome dapat diakses melalui menu applications > internet atau melalui menu search aplikasi.
</li>
</ol>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com1tag:blogger.com,1999:blog-919704987837278402.post-85618740588616964032014-10-27T22:11:00.000+07:002014-10-27T22:11:48.824+07:00Method Select dan Reject pada Array RubyMethod select pada Array di bahasa pemrograman Ruby digunakan untuk memilih elemen array berdasarkan kondisi tertentu dan menghasilkan array baru.<br />
<br />
Contoh dengan Ruby versi 2.1.3:
<br />
<pre class="brush: ruby">my_array = [1,2,3,4,5]
# even? adalah method dari Ruby untuk mengecek bilangan genap
even_array = my_array.select{|element| element.even? }
even_array # => [2, 4]
# versi shorthand
even_array = my_array.select(&:even?)
even_array # => [2, 4]
</pre>
<br />
Kebalikan dari method select, array pada Ruby juga terdapat method reject dimana akan membuang elemen - elemen array tertentu dan menghasilkan array baru.
<br />
<pre class="brush: ruby">my_array = [1,2,3,4,5]
# odd? adalah method dari Ruby untuk mengecek bilangan ganjil
even_array = my_array.reject{|element| element.odd? }
even_array # => [2, 4]
# versi shorthand
even_array = my_array.reject(&:odd?)
even_array # => [2, 4]
</pre>
Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-77893204541737645282014-08-05T07:35:00.000+07:002014-08-05T07:37:21.198+07:00Script Ruby Untuk Download Form C1 KPU Pilpres 2014Script ini digunakan untuk download form C1 Pemilu Presiden 2014 versi komplit dengan format zip. Untuk beberapa hasilnya dapat dilihat di <a href="https://drive.google.com/folderview?id=0B2rvTZ37x4h5Qi1xeHoxTy11R1U&usp=sharing">Google Drive</a>.
<br /><br />
Script versi Gist: <a href="https://gist.github.com/kuntoaji/c2886b227f6cdf888cea">https://gist.github.com/kuntoaji/c2886b227f6cdf888cea</a>
<pre class="brush: ruby">
#!/usr/bin/env ruby
require 'open-uri'
user_agent = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36"
saved_url_list = "saved_list.txt"
accessed_urls = []
accessed_urls = File.readlines(saved_url_list) if File.exists?(saved_url_list)
# tps terbanyak 149
# source: http://kpukotacimahi.com/joomla-overview/40-berita-depan/135-kelurahan-melong-memiliki-tps-terbanyak-dikota-cimahi
# jumlah tps, bisa dimodifikasi
(1..149).each do |tps|
# id kelurahan, bisa dimodifikasi
(1..100_000).each do |kel_id|
url = "http://pilpres2014.kpu.go.id/c1.php?cmd=download&tps=#{tps}&kel_id=#{kel_id}"
# saved_url_list.txt add \n as new line
unless accessed_urls.include?("#{url}\n")
begin
puts "Accessing #{url}"
content = open(url, "User-Agent" => user_agent).read
rescue
puts "Retrying..."
retry
end
file_name = "#{kel_id}_#{tps}.zip"
unless File.exists?(file_name)
if content.size > 7000
File.open(file_name, 'w') {|f| f.write(content) }
saved_file = File.open(saved_url_list, "a")
saved_file.puts url
saved_file.close
puts "#{file_name} is successfully saved"
sleep_in_seconds = Random.rand(10..15)
puts "sleeping for #{sleep_in_seconds} seconds.."
sleep sleep_in_seconds
else
puts "Empty"
end
else
puts "#{file_name} is exist"
end
end
end
end
puts "done"
</pre>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-37190187804962118482014-02-02T21:22:00.001+07:002014-02-02T21:24:16.364+07:00Konfigurasi Nginx Untuk Optimasi Static Assets FilesSelain sebagai <a href="http://kuntoaji.blogspot.com/2014/01/cara-konfigurasi-nginx-load-balancer.html" title="cara konfigurasi nginx sebagai load balancer">load balancer</a>, Nginx juga memiliki performansi yang sangat baik response time atau request per second saat melayani request assets files seperti css, javascript, html, pdf, image atau static files lain.<br /><a name='more'></a>
<br />
Saya sendiri pernah membandingkan response time Nginx dengan yang lain saat mengirimkan request untuk image dan hasilnya adalah Nginx memiliki response time 2 - 3 kali lebih baik. Padahal ukuran filenya lebih besar.<br />
<br />
Berikut ini adalah optimasi Nginx untuk static assets files. Nginx yang digunakan adalah versi 1.4.4. Pada Debian 6, file konfigurasi Nginx terdapat pada direktori <span style="font-family: Courier New, Courier, monospace;">/etc/nginx/nginx.conf</span>.<br />
<br />
<pre class="brush: plain"># asumsi, seluruh assets file seperti js, css, image berada pada directory assets
location ~ ^/assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
# unset ETag. Tidak disarankan menggunakan ETag
# saat ada Last-Modified yang di set melalui "expires".
add_header ETag "";
break;
}
</pre>
<br />
Konfigurasi secara keseluruhan. (Gist: <a href="https://gist.github.com/kuntoaji/8769117">https://gist.github.com/kuntoaji/8769117</a>)<br />
<pre class="brush: plain"># Nginx default configuration
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name example.com www.example.com;
root /home/example/html/public;
# mulai dari ini :)
location ~ ^/assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
add_header ETag "";
break;
}
}
}
</pre>
Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-72830623772720471822014-02-01T21:14:00.000+07:002014-02-02T19:19:37.193+07:00CSS Modal OverlaySalah satu contoh CSS Modal Overlay ditambah dengan jQuery untuk menghitung posisi center secara dinamis saat on load. Untuk hasilnya dapat dilihat melalui <a href="http://jsfiddle.net/kuntoaji/y8UQw/">http://jsfiddle.net/kuntoaji/y8UQw/</a>
<br />
<br />
Gist: <a href="https://gist.github.com/kuntoaji/8763949">https://gist.github.com/kuntoaji/8763949</a>
<br /><a name='more'></a>
<br />
<pre class="brush: html"><!-- HTML - index.html -->
<!DOCTYPE html>
<html>
<head>
<title>CSS jQuery Modal Overlay</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="main.js" type="text/javascript"></script>
<link href="main.css" media="all" rel="stylesheet" type="text/css">
</head>
<body>
<div id="overlay"></div>
<div id="modal">
<div id="content">
<p>Hello World!</p>
</div>
</div>
</body>
</html>
</pre>
<br />
<pre class="brush: css">/* CSS - main.css */
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #000;
opacity: 0.5;
filter: alpha(opacity=50);
z-index: 99;
}
#modal {
position: absolute;
background: rgba(0, 0, 0, 0.2);
border-radius: 14px;
padding: 8px;
z-index: 100;
text-align: center;
font-size: 18px;
}
#content {
border-radius: 8px;
background: #fff;
padding: 20px;
}
</pre>
<br />
<pre class="brush: javascript">// Javascript - main.js
$(document).ready({
var top, left;
// hitung posisi saat on load.
top = Math.max($(window).height() - $("#modal").outerHeight(), 0) / 2;
left = Math.max($(window).width() - $("#modal").outerWidth(), 0) / 2;
$("#modal").css({
top: top + $(window).scrollTop(),
left: left + $(window).scrollLeft()
});
});
</pre>
Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-16949133296262833152014-01-31T15:10:00.002+07:002014-07-31T00:58:50.651+07:00Cara Konfigurasi Nginx Sebagai Load Balancer<pre style="font-size: 12px; font-family: monospace;">
+--------------------+
| Nginx Load Balancer|
+----------+---------+
|
|
+----------------------+---------------------+
| | |
| | |
v v v
+---------------+ +---------------+ +---------------+
| Backend App 1 | | Backend App 2 | | Backend App 3 |
+------+--------+ +-------+-------+ +-------+-------+
| | |
| | |
| | |
| v |
| +---------------+ |
+------------> |Database Server|<------------+
+---------------+</pre>
Nginx selain sudah terkenal sebagai web server, saat ini juga terkenal sebagai <a href="https://github.com/observing/balancerbattle">load balancer dengan performance yang sangat baik</a>. Berikut ini adalah cara konfigurasi Nginx versi 1.4.4 pada Linux Debian 6 dengan asumsi Nginx telah terinstall pada direktori standar Linux Debian.<br /><a name='more'></a>
<br />
1. Buka Konfigurasi <span style="font-family: Courier New, Courier, monospace;">/etc/nginx/nginx.conf</span><br />
<br />
2. Tambahkan baris berikut didalam block <span style="font-family: Courier New, Courier, monospace;">http</span>.<br />
<br />
<pre class="brush: plain">upstream mybackend {
# Weight adalah bobot yang digunakan seberapa sering backend server tersebut dipilih untuk memproses request.
# Default weight adalah 1
server 192.168.0.102;
server mybackend2.example.com:8080 weight=4;
server unix:/tmp/mybackend3;
}
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://mybackend;
# header ini digunakan agar backend app mengenal request domain sebagai example.com atau www.example.com, bukan sebagai mybackend
proxy_set_header Host $http_host;
# header ini digunakan agar IP yang diproses aplikasi backend berasal dari IP client, bukan dari load balancer.
proxy_set_header X-Real-IP $remote_addr;
# beberapa aplikasi atau framework menggunakan X-Forwarded-For untuk mendapatkan alamat IP.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
</pre>
<br />
Konfigurasi keseluruhan kurang lebih seperti dibawah ini (Gist: <a href="https://gist.github.com/kuntoaji/8728290">https://gist.github.com/kuntoaji/8728290</a>).
<br />
<br />
<pre class="brush: plain" style="font-size: 10px;"># default nginx configuration
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
# mulai dari sini :)
upstream mybackend {
server 192.168.0.102:8080;
server mybackend2.example.com:8080 weight=4;
server mybackend3.example.com weight=2;
server unix:/tmp/backend4;
}
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://mybackend;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
</pre>
<br />
3. Setelah selesai edit <span style="font-family: Courier New, Courier, monospace;">/etc/nginx/nginx.conf</span>, login sebagai root, dan restart dengan menjalankan perintah<br />
<pre class="brush: plain">service nginx restart</pre><br />
<br />
Untuk penjelasan lebih lanjut mengenai Load Balancing pada Nginx, saya rekomendasikan artikel <a href="https://www.digitalocean.com/community/articles/how-to-set-up-nginx-load-balancing">How To Set Up Nginx Load Balancing</a> dan <a href="http://wiki.nginx.org/HttpUpstreamModule">Nginx Official Documentation HttpUpstreamModule</a>.Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-20924201701886846992014-01-12T02:15:00.000+07:002014-01-12T02:15:00.532+07:00Tip Cara Mengubah Default Normal Shell Menjadi Login Shell pada Linux SlackwareBerdasarkan pengalaman pribadi setelah melakukan <a href="http://kuntoaji.blogspot.com/2012/11/upgrade-slackware-via-internet-slackpkg.html" title="upgrade linux slackware via slackpkg">upgrade Linux Slackware</a> khususnya KDE, konsole atau terminal yang dibuka dimana biasanya menampilkan username@hostname akan menjadi normal shell seperti dibawah ini.<br />
<pre class="brush: bash">bash-4.2$
</pre>
Karakter "$" diatas menunjukkan user selain root, apabila root maka tanda "$" akan menjadi "#". Berikut adalah tips untuk mengubah normal shell diatas menjadi login shell dimana menampilkan username@hostname pada Linux Slackware 14.<br />
<br />
1. Buka console / terminal.<br />
2. lalu buka <span style="font-family: Courier New, Courier, monospace;">Settings > Manage Profiles > Edit Profile > General</span>.<br />
3. Kemudian dibagian <span style="font-family: Courier New, Courier, monospace;">Command</span>, ubah <span style="font-family: Courier New, Courier, monospace;">bash</span> menjadi <span style="font-family: Courier New, Courier, monospace;">bash -l</span><br />
<br />
Selesai. :)Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-86286586916791947232013-12-05T13:49:00.001+07:002013-12-05T13:58:54.954+07:00Lowongan Pekerjaan Web Developer di JakartaTeman saya sedang membutuhkan web developer untuk perusahaannya di Jakarta, jika berminat silakan kirim lamaran kerja langsung ke email dibawah ini.<br />
<br />
-----------------------------<br />
Dicari!!!<br />
<br />
Programmer berwatak ksatria pemberani dengan semangat membara untuk menaklukkan dunia pemrograman.<br />
<br />
Kami perusahaan komunikasi dan digital yang sedang berkembang dan berlokasi
di Jakarta, membutuhkan beberapa programmer untuk mengembangkan karir
bersama kami dengan kualifikasi sebagai berikut:
<br />
<ol>
<li>Menguasai dan menggunakan salah satu sistem operasi berbasis UNIX seperti Linux atau Mac.</li>
<li>Memahami, menguasai dan berpengalaman dengan OOP.</li>
<li>Mempunyai satu senjata pamungkas berupa penguasaan di salah satu bahasa pemrograman (bebas).</li>
<li>Menguasai version control system khususnya Git. </li>
<li>Paling tidak memahami bagaimana pemrograman web bekerja.</li>
<li>Mempunyai high quality sense of humor.</li>
</ol>
Kami menerapkan agile methodology dan working environment yang dinamis. Kami paling sering menggunakan Ruby dan Javascript untuk menyelesaikan masalah-masalah yang kami hadapi.<br />
<br />
Kami tidak fanatik dengan salah satu bahasa, metodologi atau teknologi apapun, concern kami adalah menghasilkan sesuatu yang excellence dan usefull.<br />
<br />
Oh iya.. Selain gaji, benefit yang kami tawarkan adalah sebagai berikut:
<br />
<ol>
<li>Asuransi kesehatan ditanggung perusahaan.</li>
<li>Jaminan sosial tenaga kerja (Jamsostek).</li>
<li><b>Jatah kerja remote per minggu dan jam kerja yang lebih fleksibel</b>.</li>
<li>Tunjangan Hari Raya (THR)</li>
<li>Performance bonus.</li>
</ol>
Jika anda berminat silahkan kirim resume ke <a href="mailto:dimas.priyanto@gmail.com" target="_blank">dimas.priyanto@gmail.com</a>
dengan title "JOB APPLICATION". Jika ada pertanyaan bisa juga diajukan melalui Twitter <a href="http://twitter.com/dimaspriyanto">@dimaspriyanto</a>. Ditunggu yaa.. kalo misalnya belum
berminat, bisa diforward ke kenalan atau siapapun yang kira-kira
berminat. Batas waktu hingga <b>25 Desember 2013</b>.
<br />
<br />
<br />
Terima Kasih<br />
<br />
PT Bukit Sion IndonesiaAjihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-74169604307579797982013-09-11T18:39:00.000+07:002013-09-11T18:49:50.412+07:00Apa itu Ruby on Rails dan Filosofinya<h3>
Apa Itu Ruby on Rails</h3>
Rails adalah <i>framework</i> untuk pembuatan aplikasi web / <i>website</i> yang ditulis dengan bahasa pemrograman Ruby. Berdasarkan <a href="http://guides.rubyonrails.org/getting_started.html" title="Getting Started with Rails">dokumentasi Rails</a>, tujuan desain Rails adalah untuk mempermudah pemrograman aplikasi web dengan membuat asumsi - asumsi kira - kira apa saja yang diperlukan seorang <i>web developer</i> dalam membuat aplikasi web.<br />
<a name='more'></a><br />
Dengan Rails memungkinkan untuk membuat program dengan lebih sedikit penulisan kode dibandingkan dengan <i>framework</i> atau bahasa pemrograman lain. Bahkan banyak developer menyatakan membuat aplikasi web menjadi menyenangkan.<br />
<br />
Rails adalah <i>opinionated software</i>. Oleh sebab itu Rails membuat asumsi cara terbaik untuk melakukan sesuatu yang berkaitan dengan pembuatan aplikasi web. Rails mengklaim bahwa jika "The Rails Way" dipelajari dengan benar, makan akan meningkatkan produktifitas kita khususnya dalam hal web development. Namun, jika kebiasaan - kebiasaan kita di bahasa pemrograman atau framework lain, kemungkinan besar dapat menciptakan pengalaman yang tidak menyenangkan.<br />
<br />
<h3>
Filosofi Rails</h3>
<ul>
<li><b>DRY --"Don't Repeat Yourself"</b>. Tidak melakukan penulisan kode yang sama berulang kali. Inilah salah kelebihan Rails, yaitu membuat developer web sedikit menulis kode.</li>
<li><b>Convention Over Configuration</b>. Rails melakukan asumsi kira - kira apa saja yang dibutuhkan dalam membangun aplikasi web. Sehingga dengan menggunakan asumsi - asumsi tersebut, Rails dapat melakukan <i>load library</i> yang diperlukan tanpa perlu ditulis satu per satu.</li>
<li><a href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/top.htm">REST</a> (Representational State Transfer). Merupakan best pattern untuk aplikasi web agar aplikasi yang dibangun sesuai dengan protokol REST.</li>
</ul>
<br />
<h3>
Arsitektur MVC</h3>
Arsitektur rails itu sendiri menggunakan Model-View-Controller,sehingga memiliki kelebihan dimana bagian <i>interface</i> / tampilan dan bagian data / lojik dapat dipisahkan sehingga memudahkan <i>maintenance</i>.<br />
<br />
<h4>
Model</h4>
Sebuah model merepresentasikan informasi atau data dan aturan-aturan utnuk menggunakan data tersebut. Rails menggunakan model untuk berinteraksi dengan database dan dalam banyak kasus, sebuah tabel dalam database disamakan dengan sebuah model dalam aplikasi.<br />
<br />
<h4>
<b>View</b></h4>
View merepresentasikan tampilan dari aplikasi. Dengan kata lain, view memegang perananan untuk menampilkan <i>user interface</i> dan data ke web browser.<br />
<br />
<h4>
<b>Controller</b></h4>
Controller merupakan perekat atau jembatan antara model dan view. Dalam Rails, controller bertanggung jawab memproses request yang datang, kemudian memanggil model yang terkait untuk mendapat data, lalu mengirimkan data tersebut ke view yang terkait.<br />
<br />
Sekian dulu pengenalan Ruby on Rails, simak <a href="http://kuntoaji.blogspot.com/">blog ini</a> terus ya untuk artikel lain tentang Ruby dan Ruby on Rails. Semoga bermanfaat!Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com2tag:blogger.com,1999:blog-919704987837278402.post-21816085180080242402013-09-06T23:12:00.000+07:002013-09-12T08:25:09.455+07:00Kumpulan Link Belajar Ruby dan Ruby on RailsKumpulan link untuk belajar bahasa pemrograman Ruby dan <i>framework </i>Ruby on Rails:<br />
<a name='more'></a><ol>
<li>Kunjungi situs <a href="http://wiki.rubyonrails.org/">http://wiki.rubyonrails.org/</a> dan <a href="http://guides.rubyonrails.org/">http://guides.rubyonrails.org/</a>. Kedua situs tersebut merupakan situs resmi dari RoR dan sangat mudah dipahami oleh pemula.</li>
<li>Jika sudah mulai membuat sebuah aplikasi dengan RoR, dokumentasi tentang class serta method dapat diakses melalui <a href="http://api.rubyonrails.org/">http://api.rubyonrails.org</a>. Sesuai namanya, situs tersebut menjelaskan Application Programming Interface (API) pada RoR.</li>
<li> Untuk meningkatkan kualitas sebagai Ruby on Rails programmer, kunjungi <a href="http://railscasts.com/">http://railscasts.com/</a>. Situs tersebut menyediakan video-video yang bermanfaat untuk meningkatkan kemampuan RoR anda.</li>
<li>Ruby on Rails Tutorial - <a href="http://ruby.railstutorial.org/">http://ruby.railstutorial.org/</a></li>
<li>Rails for Zombies, salah satu situs tutorial Ruby on Rails - <a href="http://railsforzombies.org/">http://railsforzombies.org/</a></li>
<li>Terakhir adalah situs yang paling saya sukai untuk belajar Ruby, yaitu Learn Ruby The Hard Way yang dibuat oleh Programmer untuk Programmer - <a href="http://ruby.learncodethehardway.org/book/">http://ruby.learncodethehardway.org/book/</a> </li>
</ol>
Semoga bermanfaat!
<br /><br />
<script type="text/javascript"><!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji leaderboard content */
google_ad_slot = "8504282045";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com2tag:blogger.com,1999:blog-919704987837278402.post-76053422374916003852012-11-18T21:42:00.000+07:002015-01-11T12:32:46.446+07:00Upgrade Slackware via Internet & SlackpkgSelain melalui CD / DVD, update Linux Slackware dapat menggunakan Slackware Package Manager bernama Slackpkg dengan memanfaatkan koneksi Internet untuk mendapatkan paket atau software terbaru untuk di upgrade. Pada artikel ini menggunakan Linux Slackware 14.0 untuk upgrade ke Linux Slackware 14.1 dimana referensi utamanya adalah artikel dari <a href="http://slackware.osuosl.org/slackware-14.1/UPGRADE.TXT">UPGRADE.txt</a> yang merupakan dokumentasi resmi dan <a href="http://alphadi.wordpress.com/2011/05/10/updating-slackware-13-1-to-13-37-operation-successful/">alphadi.wordpress.com</a>.<br />
<a name='more'></a><br />
<h4>
Langkah - Langkah Upgrade Slackware Dengan Slackpkg</h4>
<b>1. Ubah mirror Slackware</b><br />
Ubah untuk <span style="font-family: "Courier New",Courier,monospace;">/etc/slackpkg/mirrors</span> dan tambahkan baris <a href="http://kambing.ui.ac.id/slackware/slackware-14.1/">http://kambing.ui.ac.id/slackware/slackware-14.1/</a> atau pilih repositori lain dengan lokasi terdekat dengan kota tempat upgrade Slackware berada.<br />
<br />
<b>2. Upgrade Linux Slackware</b><br />
login sebagai root dan jalankan perintah - perintah dibawah ini <br />
<pre class="brush: plain">slackpkg update
slackpkg install-new
slackpkg upgrade-all
</pre>
Perintah <span style="font-family: Courier New, Courier, monospace;">slackpkg updat</span>e akan melakukan update repo, <span style="font-family: Courier New, Courier, monospace;">slackpkg install-new</span> akan melakukan instalasi paket yang baru dan yang terakhir <span style="font-family: Courier New, Courier, monospace;">slackpkg upgrade-all</span> akan melakukan upgrade semua paket yang telah di-install. Setelah upgrade selesai, pilih <b>yes</b> saat Slackware menawarkan untuk menjalankan Lilo. Setelah semua perintah diatas selesai dijalankan, maka lakukan reboot komputer.
<br />
<br />
<b>3. Clean Linux Slackware</b><br />
Dikarenakan aplikasi slackpkg itu sendiri juga di upgrade, langkah selanjutnya adalah ubah kembali <span style="font-family: "Courier New",Courier,monospace;">/etc/slackpkg/mirrors</span>, pilih repositori terdekat. Setelah itu jalankan perintah dibawah ini untuk membersihkan dari paket - paket yang tidak digunakan.<br />
<pre class="brush: plain">slackpkg clean-system</pre>
<br />
<b>4. Cek Versi Slackware</b><br />
Setelah upgrade selesai, untuk mengecek versi Slackware yang sedang digunakan, dapat menggunakan perintah berikut:
<pre class="brush: plain">cat /etc/slackware-version</pre>
<br />
Akhir kata, untuk melakukan upgrade dengan slackpkg via internet ini yang perlu dipastikan adalah koneksi internet yang tidak terputus karena saat melakukan upgrade sepenuhnya membutuhkan koneksi internet. Total waktu yang dibutuhkan sekitar 4 jam tergantung koneksi internet.
<br />
<br />
<b>Update</b><br />
Apabila saat booting setelah upgrade terdapat info seperti dibawah ini:
<br />
<pre style="font-size: 9px;">/usr/sbin/alsactl: set_control:1267: failed to obtain info for control #27 (No such file or directory)
/usr/sbin/alsactl: set_control:1267: failed to obtain info for control #28 (No such file or directory)
/usr/sbin/alsactl: set_control:1267: failed to obtain info for control #29 (No such file or directory)
/usr/sbin/alsactl: set_control:1267: failed to obtain info for control #30 (No such file or directory)
/usr/sbin/alsactl: set_control:1267: failed to obtain info for control #31 (No such file or directory)
/usr/sbin/alsactl: set_control:1267: failed to obtain info for control #32 (No such file or directory)
</pre>
Hal itu biasanya disebabkan file <span style="font-family: "Courier New",Courier,monospace;">/var/lib/alsa/asound.state</span> bermasalah setelah upgrade kernel. Solusinya adalah hapus file tersebut dan buat baru.
<br />
<pre class="brush: plain">rm /var/lib/alsa/asound.state
alsactl store
</pre>
Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com1tag:blogger.com,1999:blog-919704987837278402.post-67114302016878437032012-10-21T12:47:00.000+07:002012-10-22T10:57:18.642+07:00Cara Buat Bootable USB Flashdisk via Shell LinuxTutorial ini bertujuan untuk mengetahui cara menginstal linux melalui USB Flashdisk via Shell Linux sehingga tanpa perlu menggunakan CD atau DVD jika hendak melakukan install sistem operasi linux, cukup dengan USB Flashdisk. Saat artikel ini ditulis, sistem operasi linux yang digunakan adalah menggunakan Slackware Linux 13.1 dan sistem operasi yang terpasang di USB Flashdisk menggunakan Ubuntu Desktop 12.04.<br /><a name='more'></a>
<br /><div style="float: right; padding: 5px 0 3px 5px;">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji medium rectangle inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<b>Yang harus dipersiapkan</b><br />
<ol>
<li>USB Flashdisk minimal 1Gb. Pastikan USB tidak menyimpan data penting, karena data akan terhapus semua.</li>
<li>ISO Ubuntu. Jika belum ada, dapat diperoleh melalui <a href="http://www.ubuntu.com/download">download ubuntu</a>. Pada artikel ini, file iso Ubuntu yang telah diunduh diasumsikan disimpan pada direktori folder iso/ubuntu</li>
</ol>
<b>Langkah - Langkah Cara Instal linux Ubuntu Lewat USB Flashdisk</b><br />
<ol>
<li>
Pasang USB Flashdisk pada komputer atau laptop yang menggunakan sistem operasi Linux. Pada artikel ini diasumsikan USB Flashdisk berada pada <span style="font-family: "Courier New",Courier,monospace;">/dev/sdb.</span>
</li>
<li>Setelah USB Flashdisk ditancapkan, pindah direktori tempat file iso ubuntu berada melalui shell linux. Misal, jika terletak
<pre class="brush: plain">cd iso/ubuntu/ </pre>
</li>
<li>Melakukan <i>copy, convert, & format</i> dengan menggunakan perintah <span style="font-family: "Courier New",Courier,monospace;">dd</span>. Perintah linux <span style="font-family: "Courier New",Courier,monospace;">dd</span> adalah <i>command </i>linux yang digunakan untuk melakukan <i>copy</i>, sekaligus <i>convert</i> dan <i>format</i> sesuai operand yang digunakan.
<pre class="brush: plain">dd if=ubuntu-12.04.1-desktop-i386.iso of=/dev/sdb
</pre>
</li>
<li>Selesai. Pastikan saat hendak booting dengan USB pastikan pada BIOS telah konfigurasi untuk USB menjadi prioritas booting lebih dahulu dibandingkan harddisk.
</li>
</ol>
<b>Sekilas Mengenai Perintah dd</b>
<br />
Ada beberapa hal yang bisa dilakukan dengan perintah <span style="font-family: "Courier New",Courier,monospace;">dd</span>. Selain dapat backup harddisk, dengan perintah dd dapat pula digunakan untuk membuat <i>file image</i> yang berekstensi <span style="font-family: "Courier New",Courier,monospace;">.img</span>. <i>Backup harddisk</i> dapat pula berupa f<i>ile image</i> yang berekstensi <span style="font-family: "Courier New",Courier,monospace;">.img</span> dimana dengan begitu akan lebih mudah jika terjadi sesuatu. Misal jika ingin mengakses beberapa file didalamnya, cukup dengan mount image untuk mengakses didalamya. Berikut ini adalah cara buat file image dengan <span style="font-family: "Courier New",Courier,monospace;">dd</span>.
<br />
<pre class="brush: plain">dd if=/dev/sda of=~/harddisk.img
</pre>
Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com4tag:blogger.com,1999:blog-919704987837278402.post-89778461330316942832012-03-02T21:14:00.000+07:002012-10-17T08:33:02.648+07:00PHP 5.4 Dirilis<a href="http://kuntoaji.blogspot.com/search/label/php">PHP</a> 5.4 yang baru ini terdapat fitur - fitur baru diantaranya adalah:<br />
<a name='more'></a><br /><div style="float: right; padding: 5px 0pt 3px 5px;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<ul>
<li>Default charset adalah UTF-8</li>
<li>array dereferencing - <i>$object->method()[$index]</i> sekarang merupakan sintaks yang valid.</li>
<li>shortened array syntax - <i>$array = [1, 2, [1, 2, 3], 4];</i></li>
<li>Operator traits dan the insteadof - <a href="http://php.net/language.oop5.traits.php">http://php.net/language.oop5.traits.php</a></li>
<li>built-in webserver via CLI dimana hal ini langsung mengingatkan saya pada Rails, misal: <i>php -s localhost:8000</i> - <a href="http://php.net/manual/en/features.commandline.webserver.php">http://php.net/manual/en/features.commandline.webserver.php</a></li>
<li>Dihilangkannya magic_quotes dan register_globals</li>
</ul>
<br />
<b>Info lebih lanjut:</b> <a href="http://www.php.net/manual/en/migration54.php">http://www.php.net/manual/en/migration54.php</a><br />
<b>Download: </b><a href="http://php.net/downloads.php#v5">http://php.net/downloads.php#v5</a><br />
<br />
Artikel Terkait<br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/php-cloud.html">PHP Cloud</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-11147645197658790212012-02-29T21:23:00.000+07:002012-02-29T21:23:11.910+07:00Python - Binary ConverterDescription: Binary converter with <a href="http://kuntoaji.blogspot.com/search/label/python">Python</a>.
<br />
<a name='more'></a><br />
<pre class="brush: python">#!/usr/bin/python
# http://kuntoaji.blogspot.com
def dec2bin(dec):
bin = ''
if dec < 0:
raise ValueError, 'Must be a positive value'
elif dec == 0:
return '0'
else:
while dec > 0:
bin = str(dec % 2) + bin
dec = dec >> 1
return bin
def bin2dec(bin):
dec = 0
bin_val = 0
str_len = -1
len_str = len(bin)
len_str -= 1
i = 0
j = len_str
while (i <= len_str):
bin_val = bin[i]
bin_val = int(bin_val)
if ((bin_val == 1) or (bin_val == 0)):
dec = dec + ((2**j)*bin_val)
else:
dec = 'not binary'
break
i += 1
j -= 1
return dec
if __name__ == '__main__':
print '--------------------------'
print '[+] Binary Converter [+]'
print '--------------------------\n\n'
print 'Testing...\n'
print 'Decimal to Binary'
print '20: ', dec2bin(20)
print '100: ', dec2bin(100)
print '192: ', dec2bin(192)
print '168: ', dec2bin(168)
print '\nBinary to Decimal'
print '100: ', bin2dec('100')
print '123: ', bin2dec('123')
print '1111: ', bin2dec('1111')
</pre>
<div style="float: right; padding: 5px 0pt 3px 5px;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
Artikel Terkait<br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-http-server-information.html">Python - HTTP Server Information</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-62533558096369997722012-02-29T21:12:00.000+07:002012-02-29T21:16:46.025+07:00C - Celcius ConverterDescription: Convert Celcius to Fahrenheit or Reamur<br />
<a name='more'></a><br />
<pre class="brush: c">/**
http://kuntoaji.blogspot.com
*/
#include <stdio.h>
void converter(float temp, char temp_type) {
float result;
if (temp_type == 2) {
result = ((9 * temp) / 5) + 32;
printf("\nResult = %.2f Fahrenheit\n", result);
} else {
result = (temp / 5) * 4;
printf("\nResult = %.2f Reamur\n", result);
}
}
int main(void) {
float c;
int temp_type;
printf("---------------------------------------------------\n");
printf("celciusconv.c\n");
printf("Convert Celcius temperature to Reamur or Fahrenheit\n");
printf("---------------------------------------------------\n\n");
printf("Celcius temperature: ");
scanf("%f", &c);
printf("Convert to Reamur/Fahrenheit (1 / 2): ");
scanf("%d", &temp_type);
if ((temp_type == 1) || (temp_type == 2)) {
converter(c, temp_type);
} else {
printf("\nUnknown...Plase input 1 or 2");
}
return 0;
}</stdio.h></pre>
<div style="float: right; padding: 5px 0pt 3px 5px;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-http-server-information.html">Python - HTTP Server Information</a> </li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-46756947043672130192012-02-29T17:17:00.001+07:002012-02-29T17:17:34.372+07:00Python - HTTP Server InformationDescription: This <a href="http://kuntoaji.blogspot.com/search/label/python">Python</a> script will show HTTP information on target host.
<br />
<a name='more'></a><br />
<pre class="brush: python">#!/usr/bin/env python
# http://kuntoaji.blogspot.com
import urllib2, sys, re
from time import sleep
def serverInfo(server):
try:
print "[-]building request"
req = urllib2.Request(server)
sleep(2)
print "[-]sending request"
url = urllib2.urlopen(req)
print "[-]getting information...\n"
server_info = url.info()
sleep(2)
return server_info
except (urllib2.URLError):
status = "address not found"
return status
def welcomeBro():
print "[+] --------------------------------"
print "[+] Get HTTP server infomation"
print "[+] --------------------------------\n"
def error():
print "error bro!"
print "usage: python httpserverinfo.py [target host]\n"
if (__name__ == "__main__"):
welcomeBro()
if (len(sys.argv) == 2):
server = sys.argv[1]
if (not (re.search("http://", server))):
server = "http://"+server
print serverInfo(server)
else:
error()
</pre>
<div style="float: right; padding: 5px 0pt 3px 5px;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-simple-port-scanner.html">Python - Simple Port Scanner</a> </li>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-hello-world-client.html">Python - Hello World Client</a></li>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-hello-world-server.html">Python - Hello World Server</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-16502923912061335602012-02-29T07:39:00.000+07:002012-02-29T07:39:41.988+07:00Normalize.css<a href="http://nicolasgallagher.com/about-normalize-css/">Normalize.css</a> adalah CSS file yang membuat browser seluruh elemen HTML lebih konsisten dengan default styling yang diberika dan sesuai dengan standar modern, yaitu sudah mendukung HTML 5 serta merupakan alternatif dari tradisional CSS reset yang lama.<br />
<a name='more'></a><br />
<div style="float: right; padding: 5px 0pt 3px 5px;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
Dibuat oleh <a href="http://twitter.com/necolas">@necolas</a> dan <a href="http://twitter.com/jon_neal">@jon_neal</a>, banyak situs populer telah menggunakan normalize.css ini, diantaranya adalah:<br />
<ul>
<li><a href="http://html5boilerplate.com/">HTML5 Boilerplate</a></li>
<li><a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a></li>
<li><a href="https://www.gov.uk/">GOV.UK</a></li>
<li><a href="http://css-tricks.com/">CSS Tricks</a></li>
<li><a href="https://tinker.io/">Tinker.io</a></li>
</ul>
<b>Browser Support</b><br />
<ul>
<li>Chrome</li>
<li>Firefox 3+</li>
<li>Safari 4+</li>
<li>Opera 10+</li>
<li>Internet Explorer 6+</li>
</ul>
<b>Demo:</b> <a href="http://necolas.github.com/normalize.css/demo.html">http://necolas.github.com/normalize.css/demo.html</a><br />
<b>Website:</b> <a href="http://nicolasgallagher.com/about-normalize-css/">http://nicolasgallagher.com/about-normalize-css/</a><br />
<b>Source Code:</b> <a href="https://github.com/necolas/normalize.css">https://github.com/necolas/normalize.css</a><br />
<b>Download:</b> <a href="https://github.com/necolas/normalize.css/raw/master/normalize.css">https://github.com/necolas/normalize.css/raw/master/normalize.css</a><br />
<br />
Artikel Sebelumnya<br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/javascript-simple-image-slide-show.html">Javascript - Simple Image Slide Show</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-60345609688092429692012-02-29T07:09:00.000+07:002012-02-29T07:09:30.255+07:00Javascript - Simple Image Slide ShowDescription: Simple image slideshow with pure Javascript. No framework required.
<br />
<a name='more'></a><br />
<pre class="brush: html"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1//EN">
<html>
<head>
<title>Simple Image Slide Show</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
/*
http://kuntoaji.blogspot.com
*/
var i = 0;
var total = 5; // total slide show images
var t = 0;
function initial() {
images[0] = 'path/to/images/1.jpg';
images[1] = 'path/to/images/2.jpg';
images[2] = 'path/to/images/3.jpg';
images[3] = 'path/to/images/4.jpg';
images[4] = 'path/to/images/5.jpg';
}
function timer() {
clearTimeout(t);
t = setTimeout('nextimg()', 3000);
}
function imageError() {
nextimg();
}
function previmg(){
if (i != 0){
i = i - 1;
} else {
i = total;
}
document.banner_show.src = images[i];
}
function nextimg(){
if (i != total){
i = i + 1;
} else {
i = 0;
}
document.banner_show.src = images[i];
}
</script>
</head>
<body>
<img src="path/to/images/1.jpg" onLoad="initial();" onError="imageError" alt="" />
<a onclick="previmg(); return false;">prev</a>
<a onclick="nextimg(); return false;">next</a>
</body>
</html>
</pre>
<div style="padding: 5px 0pt 3px 5px; text-align: center;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/buat-grafik-di-website-dengan-morrisjs.html">Buat Grafik di Website Dengan Morris.js</a></li>
<li><a href="http://kuntoaji.blogspot.com/2012/02/towerjs-full-stack-web-framework-untuk.html">Tower.js - Full Stack Web Framework untuk Node.js</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-61227383799702361452012-02-29T06:32:00.000+07:002012-02-29T07:10:19.727+07:00Python - Simple Port ScannerDescription: Simple Port Scanner with Python.<br />
<a name='more'></a>
<br />
<pre class="brush: python">#!/usr/bin/env python
# http://kuntoaji.blogspot.com
import sys
import socket
import threading
class Scanner(threading.Thread):
def __init__(self, host, port):
threading.Thread.__init__(self)
self.host = host
self.port = port
self.status = ""
def run(self):
self.sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sk.settimeout(0.03)
try:
self.sk.connect((self.host, self.port))
except:
pass
else:
self.status = "open"
self.sk.close()
def error():
print "Usage: python portScanner.py [target] [start port] [end port]"
def welcomeMsg():
print "---------------------------------------------"
print " portScanner.py - A Simple Port Scanner Tool"
print " http://kuntoaji.blogspot.com"
print "---------------------------------------------"
if (__name__ == "__main__"):
if (len(sys.argv) != 4):
error()
else:
welcomeMsg()
target = sys.argv[1]
startPort = int(sys.argv[2])
endPort = int(sys.argv[3])
threads = []
for port in range(startPort, endPort):
thread = Scanner(target, port)
threads.append(thread)
thread.start()
print "Target = ", target
for thread in threads:
if (thread.status == "open"):
print "Port", thread.port, " : ", thread.status</pre>
<div style="padding: 5px 0pt 3px 5px; text-align: center;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-hello-world-server.html">Python - Hello World Server</a></li>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-hello-world-client.html">Python - Hello World Client</a></li>
<li><a href="http://kuntoaji.blogspot.com/2012/02/online-python-tutor.html">Online Python Tutor</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-7052602826047607412012-02-28T16:45:00.000+07:002013-09-12T08:25:09.468+07:00Tower.js - Full Stack Web Framework untuk Node.jsDiinspirasi oleh <a href="http://www.railsmine.net/">Ruby on Rails</a>, <a href="http://tower.js/">Tower.js</a> dibuat diatas Node Connect dan Express. Fitur - fitur seperti generator serta susunan direktori yang dihasilkan sangat mirip sekali dengan <a href="http://www.rubyonrails.org/">Ruby on Rails</a>.<br />
<a name='more'></a><br />
<div style="float: right; padding: 5px 0pt 3px 5px;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
Default Development Stack<br />
<ul>
<li>MongoDB (database)</li>
<li>Redis (background jobs)</li>
<li>CoffeeScript</li>
<li>Stylus</li>
<li>Jasmine (tests)</li>
<li>jQuery</li>
</ul>
Seperti ActiveRecord dan Mongoid pada Ruby, tersedia pula ORM database-agnostic untuk MongoDB dan Browser(memory). Selain itu, controller, routing, template engine, serta asset pipeline juga mirip sekali dengan Ruby on Rails. Bagi yang belum mengetahui, asset pipeline merupakan fitur baru pada Rails 3.2 dimana melakukan minify dan gzip asset seperti javascript, dan css dengan menggunakan hash md5 agar browser caching lebih optimal.<br />
<br />
<b>Requirement</b><br />
<ul>
<li><a href="http://node.js/">Node.js</a></li>
<li><a href="http://npmjs.org/">npm - Node Package Manager</a></li>
</ul>
<br />
<b>Install</b><br />
<pre class="brush: bash">npm install tower -g</pre>
<br />
Website: <a href="http://towerjs.org/">http://towerjs.org/</a><br />
Source Code: <a href="https://github.com/viatropos/towerjs.org">https://github.com/viatropos/towerjs.org</a><br />
<br />
<br />
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/buat-grafik-di-website-dengan-morrisjs.html">Buat Grafik di Website Dengan Morris.js</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-65377927730239916882012-02-28T15:16:00.000+07:002012-02-28T16:08:17.242+07:00Buat Grafik di Website Dengan Morris.jsBerdasarkan pengalaman saya sebagai web developer, membuat Grafik dengan Javascript cukup merepotkan dan kadang tampilannya pun tidak terlalu bagus ketika data sudah banyak. Melihat project Morris.js yang memungkinkan membuat grafik dengan mudah. Morris.js dibuat oleh <a href="http://twitter.com/olly_smith">@olly_smith</a> menggunakan <a href="http://jquery.com/">jQuery</a> dan <a href="http://raphaeljs.com/">Raphael</a> yang pada awalnya dibuat karena kebutuhan pada situs <a href="http://howmanyleft.co.uk/">howmanyleft.co.uk</a>. Kemudian Morris.js di open source-kan.<br />
<a name='more'></a><br />
<div style="float: right; padding: 5px 0pt 3px 5px;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<b>Requirement</b><br />
<ul>
<li><a href="http://jquery.com/">jQuery</a> >= 1.7</li>
<li><a href="http://raphaeljs.com/">Raphael</a> >= 2.0</li>
</ul>
<b>Support</b><br />
<ul>
<li>IE6+</li>
<li>Safari/Chrome/Firefox</li>
<li>iOS 3+</li>
<li>Android 3+</li>
</ul>
<br />
<b>Download</b>: <a href="https://raw.github.com/oesmith/morris.js/master/morris.min.js">https://raw.github.com/oesmith/morris.js/master/morris.min.js</a><br />
<b>Source Code</b>: <a href="https://github.com/oesmith/morris.js">https://github.com/oesmith/morris.js</a><br />
<b>Website</b>: <a href="http://oesmith.github.com/morris.js/">http://oesmith.github.com/morris.js/</a><br />
<br />
Artikel Terkait<br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2011/09/click-counter-with-jquery.html">Click Counter with jQuery</a> </li>
<li><a href="http://kuntoaji.blogspot.com/2012/02/v8js-integrasi-php-dan-v8-javascript.html">v8js - Integrasi PHP dan V8 Javascript Engine</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com2tag:blogger.com,1999:blog-919704987837278402.post-2553172102691872112012-02-27T23:32:00.000+07:002013-09-12T08:25:09.458+07:00HTTP Method PATCHKemarin mendapat artikel pada <a href="http://weblog.rubyonrails.org/2012/2/26/edge-rails-patch-is-the-new-primary-http-method-for-updates">blog Ruby on Rails</a> bahwa HTTP Method PATCH merupakan HTTP Method untuk Update pada <a href="http://www.railsmine.net/">Ruby on Rails </a>menggantikan HTTP Method PUT. Hal ini akan berlaku pada Ruby on Rails versi 4.<br />
<a name='more'></a><br />
<div style="padding: 5px 0pt 3px 5px; text-align: center;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<blockquote class="tr_bq">
PUT in addition is an <i>idempotent</i> method. You should be able to replay a request
as many times as you want and get the same resource, something that sometimes
is violated by conventional idioms for creating children resources using
nested attributes while updating a parent resource.</blockquote>
<blockquote class="tr_bq">
There's nothing theoretical preventing PUT from doing partial updates, but when
HTTP was being standarized the replacement semantics were already deployed. </blockquote>
<blockquote class="tr_bq">
Because of that, the <a href="http://www.rfc-editor.org/rfc/rfc5789.txt">PATCH</a> method was defined in 1995 and standarized later.
PATCH is a method that is not safe,
nor idempotent, and allows <i>full and partial updates</i> and <i>side-effects on other resources</i>.</blockquote>
Bagaimana dengan web server? Saat HTTP Client seperti Curl mengirim PATCH, dapat mengerti request PATCH. Dengan begini, Ruby on Rails semakin RESTful.<br />
<br />
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2009/05/web-server-sederhana-dengan-ruby.html">Web Server sederhana dengan Ruby</a></li>
<li><a href="http://kuntoaji.blogspot.com/2009/11/how-to-install-ruby-ruby-on-rails.html">How to Install Ruby & Ruby on Rails</a> </li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-86396821196424504452012-02-27T08:30:00.000+07:002012-02-27T08:30:41.411+07:00Python - Hello World ClientDescription: Hello World Client.
<br />
<a name='more'></a><br />
<pre class="brush: python">#!/usr/bin/env python
# http://kuntoaji.blogspot.com
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 3000))
print s.recv(1024) # up to 1024 bytes
</pre>
<br />
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-hello-world-server.html"> Python - Hello World Server</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0tag:blogger.com,1999:blog-919704987837278402.post-62162499401452797532012-02-27T08:09:00.000+07:002012-02-29T06:34:30.901+07:00Python - Hello World ServerDescription: Hello World from Python Server.
<br />
<a name='more'></a><br />
<pre class="brush: python">#!/usr/bin/env python
# http://kuntoaji.blogspot.com
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1", 3000))
s.listen(1) # max connection = 1
q,v = s.accept()
q.send("Hello World from Python Server")
</pre>
<br />
<div style="padding: 5px 0pt 3px 5px; text-align: center;">
<script type="text/javascript">
<!--
google_ad_client = "ca-pub-6534047686299981";
/* kuntoaji banner inside post */
google_ad_slot = "9767625179";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
</div>
<b>Artikel Terkait</b><br />
<ul>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-factorial.html">Python - Factorial</a></li>
<li><a href="http://kuntoaji.blogspot.com/2012/02/python-hello-world-client.html">Python - Hello World Client</a></li>
</ul>Ajihttp://www.blogger.com/profile/06940806603027473283noreply@blogger.com0