Blogroll

SELAMAT DATANG DI BLOG RISKI KURNIAWAN

Konfigurasi Proxy Server Linux

Beberapa waktu belakangan ini saya dibuat pusing dengan konfigurasi Proxy Server. Dari hasil kebingungan tersebut ada beberapa hal yang mesti dicatat sebelum melakukan instalasi dan konfigurasi Proxy server. Untuk yang sempat baca blog ini dan terdapat ada kekurangan atau bahkan kekeliruan mohon dikoreksi.. :) Masih newbie juga sih.

Langkah instalasi :

1. siapkan komputer dengan minimal 2 ethernet card. eth0 untuk koneksi ke jaringan public misalnya lewat ADSL, ASTINET dsb, eth1 untuk koneksi jaringan lokal anda. (192.168.1.0/24)
2. OS Linux ... tentu saja mutlak dibutuhkan, versi berapapun tidak masalah (ini kelebihan linux)

3. Install Linux tersebut dengan minimal paket yang dibutuhkan adalah Squid, Postfix dan beberapa paket server linux.
4. Setelah Terinstall dengan baik coba lihat konfigurasi squid anda, ini adalah contoh konfigurasi squid saya, Anda boleh copy paste disini :


# Edi Widodo PT. GOLDEN MANYARAN# KONFIGURASI DIBAWAH INI SUDAH ADA DI SQUID TINGGAL CONTOhttp_port 192.168.1.254:8080 transparent
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 16 MB
cache_swap_low 90
cache_swap_high 95
maximum_object_size 2000 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 10 KB
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDS
Fauth_param basic children 5
auth_param basic realm 
Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
cache_dir ufs /var/spool/squid 100 16 256

access_log /var/log/squid/access.log squid

# BUAT DAFTAR KONEKSI ANDA DISINI
acl all src 0.0.0.0/0.0.0.0
acl kabehbeh src 191.168.1.0/24
acl udanggoreng src 192.168.1.1-192.168.1.5
acl petiskangkung src 192.168.1.16-192.168.1.41
acl gembusrebus src 192.168.1.42-192.168.1.43
acl babyboy src 192.168.1.10
acl qutebebeh src 192.168.1.111
acl berli src 192.168.1.0/24
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8 


# BUAT WAKTU KONEKSI YANG INGIN ANDA ATUR DISINI
# INGAT WAKTU INI HARUS SESUAI DENGAN HARDWARE CLOCK (BIOS CLOCK)
acl isukisuk time MTWHF 07:45-18:30
acl awanawan time MTWHF 12:00-13:00
acl soresore time MTWHF 15:15-17:00
acl sedino time MTWHF 07:00-19:00

#MTWHF artinya MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY kalo sabtu tambah S SATURDAY

acl SSL_ports port 443 563
acl Safe_ports port 80 8080 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 10000 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

# TULIS KEBIJAKAN ANDA DISINI BISA FULL / JAM TERTENTU
http_access deny manager
http_access allow udanggoreng
http_access allow petiskangkung sedino
http_access allow gembusrebus soresore
http_access allow babyboy sedino
http_access allow qutebebeh
http_access allow manager localhost
visible_hostname proxy.co.id # SESUAIKAN DENGAN HOSTNAME ANDA
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all


4. Konfigurasi Squid sudah diaktifkan, jangan lupa restart squid

# /etc/rc.c/init.d/squid restart (Saya Pake Mandrake, yang lain sesuaikan sendiri)

5. edit file /proc/sys/net/ipv4/ip_forward gunakan editor sesuai selera. ganti nilai 0 menjadi 1
atau bisa juga anda ketik lewat shell # echo 1 > /proc/sys/net/ipv4/ip_forward

6. Forward paket-paket yang menuju ke eth0 yang konek dengan public, jangan sampai salah penentuan eth nya, harus eth yang konek ke jaringan public yang melakkukan POSTROUTING
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

7. Jangan lupa konfigurasi ethernet addressnya yang eth1 dengan alamat lokal, yang eth0 dengan alamat public (kalo punya) kalo adsl gunakan alamat yang sesuai dengan modem adslnya. Buat konfigurasi ipaddress dengan editor biasa 

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.254 # Sesuaikan dengan alamat jaringan anda
NETMASK=255.255.255.0
NETWORK=192.168.1.0 
BROADCAST=192.168.1.255
ONBOOT=yes

buat juga untuk eth1 nya

# vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
# Sesuaikan dengan alamat public anda atau dengan alamat ADSL anda


8. Ediit file /etc/resolve.conf 

nameserver 202.134.0.155 # sesuaikan dengan dns provider anda , Ini telkom
10. sampai disini harusnya proxy anda sudah bisa koneksi ke internet. dan juga sudah bisa berfungsi sebagai proxy server.


11. Duduk dulu ,.. nikmati dulu internet koneksinya

12. Untuk membaca log squid gunakan, 

# tail -f /var/log/squid/access.log

Semoga Membantu...

LATIHAN SINUS , COSINUS, TANGEN



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button2: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure bersihkan;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.bersihkan;
begin
  edit1.Clear;
  edit2.Clear;
  edit3.Clear;
  edit4.Clear;
  edit5.Clear;
  edit6.Clear;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  bersihkan;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  bersihkan;
  edit1.SetFocus;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s,c,t:Extended;
begin
if edit1.Text = '' then
begin
  Application.MessageBox('Isi terlebih dahulu Mohon Ulang Kembali!','Peringatan !',MB_ICONWARNING);
  edit1.SetFocus;
end
else if edit2.Text = '' then
begin
  Application.MessageBox('Isi terlebih dahulu Mohon Ulang Kembali!','Peringatan !',MB_ICONWARNING);
  edit2.SetFocus;
end
else if edit3.Text = '' then
begin
  Application.MessageBox('Isi terlebih dahulu Mohon Ulang Kembali!','Peringatan !',MB_ICONWARNING);
  edit3.SetFocus;
end

else if ((edit1.Text <> '') or (edit2.Text <> '') or (edit3.Text<> '')) then begin

s:= StrToFloat(Edit1.Text);
c:= StrToFloat(Edit2.Text);
t:= StrToFloat(Edit3.Text);

Edit4.Text:= FloatToStr(Sin(s));
Edit5.Text:= FloatToStr(Cos(c));
Edit6.Text:= FloatToStr(Tan(t));

end;
end;

end.

Algoritma Runut-balik (Backtracking)


·       Runut-balik (backtracking) adalah algoritma yang berbasis pada DFS untuk mencari solusi persoalan secara lebih mangkus.

·       Runut-balik, yang merupakan perbaikan dari algoritma brute-force, secara sistematis mencari solusi persoalan di antara semua kemungkinan solusi yang ada.

·       Dengan metode runut-balik, kita tidak perlu memeriksa semua kemungkinan solusi yang ada. Hanya pencarian yang mengarah ke solusi saja yang selalu dipertimbangkan. Akibatnya, waktu pencarian dapat dihemat.

·       Runut-balik merupakan bentuk tipikal  dari algoritma rekursif.

·       Saat ini algoritma runut-balik banyak diterapkan untuk program games (seperti permainan tic-tac-toe, menemukan jalan keluar dalam sebuah labirin, catur, dll) dan masalah-masalah  pada bidang kecerdasan buatan (artificial intelligence).



Properti Umum Metode Runut-balik

1.   Solusi persoalan.
Solusi dinyatakan sebagai vektor dengan n-tuple:
    X = (x1, x2, …, xn),  xi Î himpunan berhingga Si .

Mungkin saja S1 = S2 = … = Sn.

Contoh: Si = {0, 1},
           xi = 0 atau 1

2.   Fungsi pembangkit nilai xk
Dinyatakan sebagai:
    T(k)
T(k) membangkitkan nilai untuk xk, yang merupakan komponen vektor solusi. 

3.   Fungsi pembatas (pada beberapa persoalan fungsi ini dinamakan fungsi kriteria)
Dinyatakan sebagai
      B(x1, x2, …, xk)
Fungsi pembatas menentukan apakah (x1, x2, …, xk)  mengarah ke solusi. Jika ya, maka pembangkitan nilai untuk xk+1 dilanjutkan, tetapi jika tidak, maka (x1, x2, …, xk) dibuang dan tidak dipertimbangkan lagi dalam pencarian solusi.

Pengorganisasian Solusi

·       Semua kemungkinan solusi dari persoalan disebut ruang solusi (solution space).

·       Jika xi Î Si, maka  S1 ´ S2 ´´ Sn  disebut ruang solusi.

·       Jumlah anggota di dalam ruang solusi adalah | S1| × | S2| ×× | Sn |.


·       Tinjau persoalan Knapsack 0/1 untuk n = 3. Solusi persoalan dinyatakan sebagai vektor (x1, x2, x3) dengan xi Î {0,1}.  Ruang solusinya adalah

{0,1} ´ {0,1} ´ {0,1} = {(0, 0, 0),  (0, 1, 0), (0, 0, 1),
   (1, 0, 0), (1, 1, 0), (1, 0, 1),
           (0, 1, 1), (1, 1, 1)}.   

·       Pada persoalan Knapsack 0/1 dengan n = 3 terdapat 2n = 23 = 8 kemungkinan solusi,  yaitu:

        (0, 0, 0), (0, 1, 0), (0, 0, 1),
(1, 0, 0), (1, 1, 0), (1, 0, 1),
(0, 1, 1), dan (1, 1, 1).

·       Penyelesaian secara exhaustive search adalah dengan menguji setiap kemungkinan solusi.

·       Ruang solusi diorganisasikan ke dalam struktur pohon.

·       Tiap simpul pohon menyatakan status (state) persoalan, sedangkan sisi (cabang) dilabeli dengan nilai-nilai xi.

·       Lintasan dari akar ke daun menyatakan solusi yang mungkin.

·       Seluruh lintasan dari akar ke daun membentuk ruang solusi. Pengorganisasian pohon ruang solusi diacu sebagai pohon ruang status (state space tree).

·       Tinjau kembali persoalan Knapsack 1/0 untuk n = 3. Ruang solusinya 



Gambar 7.1  Ruang solusi untuk persoalan Knapsack 0/1 dengan n = 3
Prinsip Pencarian Solusi dengan Metode Runut-balik

1.   Solusi dicari dengan membentuk lintasan dari akar ke daun. Aturan pembentukan yang dipakai adalah mengikuti aturan pencarian mendalam (DFS). Simpul-simpul yang sudah dilahirkan dinamakan simpul hidup (live node). Simpul hidup yang sedang diperluas dinamakan simpul-E (Expand-node).

2.   Tiap kali simpul-E diperluas, lintasan yang dibangun olehnya bertambah panjang. Jika lintasan yang sedang dibentuk tidak mengarah ke solusi, maka simpul-E tersebut “dibunuh” sehingga menjadi simpul mati (dead node). Fungsi yang digunakan untuk membunuh simpul-E adalah dengan menerapkan fungsi pembatas (bounding function). Simpul yang sudah mati tidak akan pernah diperluas lagi.

3.   Jika pembentukan lintasan berakhir dengan simpul mati, maka proses pencarian  diteruskan dengan membangkitkan simpul anak yang lainnya. Bila tidak ada lagi simpul anak yang dapat dibangkitkan, maka pencarian solusi dilanjutkan dengan melakukan runut-balik ke simpul hidup terdekat (simpul orangtua). Selanjutnya simpul ini menjadi simpul-E yang baru.

4.   Pencarian dihentikan bila kita telah menemukan solusi atau tidak ada lagi simpul hidup untuk runut-balik.
Tinjau persoalan Knapsack 0/1 dengan instansiasi:
        n = 3
        (w1, w2, w3) = (35, 32, 25)
        (p1, p2, p3) = (40, 25, 50)
        M = 30

Solusi dinyatakan sebagai X = (x1, x2, x3), xi Î {0, 1}.
Fungsi pembatas:


(a)
(b)

Gambar 7.2 (a) Pohon dinamis yang dibentuk selama pencarian untuk persoalan Knapsack 0/1 dengan n = 3,
w = (35, 32, 25) dan p = (40, 25, 50)
(b) Penomoran ulang simpul-simpul sesuai urutan pembangkitannya

Solusi optimumnya adalah X = (0, 0, 1) dan F =  50.

Skema Umum Algoritma Runut-Balik

(a) Versi rekursif


procedure RunutBalikR(input k:integer)   
{Mencari semua solusi persoalan dengan metode runut-balik; skema rekursif
 Masukan: k, yaitu indeks komponen vektor solusi, x[k]
 Keluaran: solusi x = (x[1], x[2], …, x[n])    
}
Algoritma:
   for tiap x[k] yang belum dicoba sedemikian sehingga
        ( x[k]¬T(k)) and B(x[1], x[2], ... ,x[k])= true do
      if (x[1], x[2], ... ,x[k]) adalah lintasan dari akar ke daun
      then
        CetakSolusi(x)
      endif
      RunutBalikR(k+1)    { tentukan nilai untuk x[k+1]}
   endfor 


           
Pemanggilan prosedur pertama kali:  RunutBalikR(1) 














(b) Versi iteratif


procedure RunutBalikI(input n:integer)   
{Mencari semua solusi persoalan dengan metode runut-balik; skema iteratif.
 Masukan: n, yaitu panjang vektor solusi
 Keluaran: solusi x = (x[1], x[2], …, x[n])    
}
Delarasi:
   k : integer

Algoritma:
   k¬1
   while k > 0 do
      if (x[k] belum dicoba sedemikian sehingga x[k]¬T(k)) and
          (B(x[1], x[2], ... ,x[k])= true)
      then
         if (x[1],x[2],...,x[k]) adalah lintasan dari akar ke daun   
         then
           CetakSolusi(x)
         endif
         k¬k+1   {indeks anggota tupple berikutnya}
      else  {x[1], x[2], …, x[k] tidak mengarah ke simpul solusi }
         k¬k-1   {runut-balik ke anggota tupple sebelumnya}
      endif
   endwhile
  { k = 0 }



Pemanggilan prosedur pertama kali:  RunutBalikI(n)


·       Setiap simpul dalam pohon ruang status berasosiasi dengan sebuah pemanggilan rekursif.
·       Jika jumlah simpul dalam pohon ruang status adalah 2n atau n!, maka untuk kasus terburuk, algoritma runut-balik membutuhkan waktu dalam O(p(n)2n) atau O(q(n)n!), dengan p(n) dan q(n) adalah polinom derajat n yang menyatakan waktu komputasi setiap simpul.

     

TEKNIK BACKTRACKING


·        Pertama kali diperkenalkan oleh DH Lehmer (1950), dirumuskan dalam suatu algortima oleh RJ Walker (1960), aplikasinya dikembangkan oleh Golomb dan Baumert.
·        Dasar dari teknik Backtracking adalah searching.
·        Backtracking merupakan salah satu algotritma yang didasarkan pada pencarian ruang solusi.
·        Pencarian ruang solusi dalam algoritma backtracking menggunakan  teknik pencarian Depth First Search (DFS).
·        Masalah-masalah yang dapat diselesaikan dengan menggunakan algoritma Backtracking adalah :
Ø The 8-Queen Problem
Ø The 4-Queen Problem
Ø Sum of Subsets
Ø Graph Coloring
Ø Hamilton Cycles
Ø Knapsack Problem
Ø The Travelling Salesman Problem

Penyelesaian Sum of Subsets dengan Menggunakan Algoritma Backtracking
           
Masalah utama dari SUM of SUBSETS adalah jika terdapat n bilangan real dan ingin dihitung semua kombinasi yang mungkin dari himpunan bilangan tersebut. Kombinasi yang didinginkan adalahkombinasi yang jumlah seluruh elemen-elemennya sama dengan M (tertentu).

Algoritma Sum of Subset
procedure sumofsub(s,k,r)
global integer M,n
global real w(1:n)
real r,s 
integer k,j
x(k) = 1
if s + w(k) = M then
            print(x(j),j ß 1 to k)
            else
                        if s + w(k) + w(k+1) ≤ M then
                                    call sumofsub(s+w(k), k+1, r-w(k))
                        endif
endif
if s + r-w(k) ≥ M and s + w(k+1) ≤ M then
            x(k) ß 0
            call sumofsub(s, k+1, r-w(k))
endif
end sumofsub

Permasalahan :
Suatu himpunan terdiri dari 6 bilangan yaitu {5, 10, 12, 13, 15, 18} yang disusun secara tidak turun. Akan ditentukan himpunan-himpunan bagiannya yang jumlah seluruh elemennya adalah 30

Penyelesaian :
n=6
W(1:6) = {5,10,12,13,15,18}
M = 30
 Diasumsikan bahwa w(1) ≤ M dan ∑ w(i) ≥ M

Dalam hal ini w(1)= 5 ≤ 30 dan ∑ w(i) = 73 ≥ 30,
k-1
 
                                          
  j=1
 
dan nilai s diperoleh dari    ∑  w(j)x(j)
n
 
 

j=k
 
nilai r diperoleh dari ∑w(j)

                                    

Diperoleh himpunan penyelesaian :

A = {1,1,0,0,1} = 5+10+15=30
B = {1,0,1,1} = 5+12+13 = 30
C = {0,0,1,0,0} = 12+18 = 30

Penerapan Algoritma Backtracking (Runut-Balik) Dalam Permainan Teka-Teki Silang (TTS)

Teka Teki Silang atau disingkat  TTS adalah suatu permainan  di  mana  kita  harus mengisi ruang-ruang kosong (berbentuk  kotak putih) dengan huruf-huruf  yang membentuk sebuah kata berdasarkan petunjuk yang diberikan. Dalam permainan teka-teki silang terdapat papan permainan utama. Papan permainan sendiri terdiri atas kotak-kotak berwarna hitam dan putih.



Permainan ini memang cukup mudah untuk dimainkan, namun sayangnya untuk dapat membuat soal yang valid merupakan hal yang sulit. Perlu suatu program komputer untuk menyelesaikan permasalahan tersebut. Dalam pemecahan masalah, program komputer ini akan menggunakan algoritma backtracking (runut balik). Algoitma  runut-balik (backtracking) akan mampu memberikan hasil apakah deretan-deretan kotak jawaban   yang telah dibuat sudah cocok  dengan   deretan   jawaban   kata   yang disediakan.
Algoritma  backtracking  merupakan algoritma pencarian yang  berbasis pada DFS (Depth-First  Search) atau pencarian mendalam dengan tujuan mencari solusi permasalahan secara lebih praktis. Mekanisme penyelesaian dengan menggunakan backtracking berprinsip pada metode rekursif.
Algoritma  backtracking  dalam permainan ini akan digunakan untuk mengisi kotak-kotak permainan yang sebelumnya telah dibuat.  Kotak-kotak  ini bisa direpresentasikan dengan struktur  data matriks sehingga setiap kotak akan memiliki indeks. Indeks ini akan digunakan untuk melakukan pencarian kata yang cocok. Pada pengisian kata ke dalam kotak-kotak, pertama-tama program akan menentukan deretan kotak awal yang ngin diisi. Program  akan menghitung jumlah kotak pada deretan kotak tersebut kemudian akan mencari kata di dalam database (yang terdiri atas kumpulan  kata/jawaban)  yang memiliki  jumlah karakter sama dengan jumlah kotak tersebut.
Dalam pencarian data kata-kata mungkin akan terdapat beberapa kata yang cocok untuk dimasukkan kedalam  satu deretan kotak,  untuk  itu program akan memilih kata yang berada lebih awal dalam database kata. Langkah selanjutnya, program akan mengidentifikasi indeks pada deretan kotak yang terhubung dengan deretan  kotak lainnya. Program  akan  mencatat  dimana letak   hubungan   antar deretan kotak tersebut kemudian mencatat  indeks dan mengambil  karakter yang terdapat di dalamnya untuk dibandingkan kembali dengan deretan kata yang ada di dalam  database  kata. Jika kata yang dimasukkan berikutnya cocok maka pencarian akan dilanjutkan, namun jika   tidak   terdapat kata yang  cocok maka program akan mematikan kemungkinan jawaban berdasarkan pencarian tersebut dan program akan melakukan backtrack.
Backtrack  dilakukan   dengan   cara   program  akan  menghapus   kata   yang terakhir dimasukkan ke dalam deretan kotak, kemudian program akan mengganti kata  tersebut  dengan kata  lain yang  juga bisa diisikan ke dalam deretan kotak tersebut  dan kemudian program  akan  melakukan   pencarian ulang.   Langkah-langkah diatas akan terus dilakukan secara rekursif, sampai program menemukan solusi  dari  permasalahan  (seluruh kotak  terisi)  atau program  tidak menemukan solusi (tidak ada kemungkinan jawaban yang valid).
Dalam permainan teka-teki silang ini, algoritma Backtracking sudah bisa memberikan jawaban yang pasti sehingga algoritma Backtracking ini bisa dimplementasikan.  Selain itu algoritma Backtrack juga merupakan  algoritma yang sederhana namun cukup praktis dibandingkan dengan algoritma  brute force. Hal ini disebabkan karena pada prinsipnya, kita tidak perlu memeriksa semua  kemungkinan solusi yang ada.  Pencarian hanya mengarah pada solusi yang dipertimbangkan saja.
Meski demikian, algoritma backtracking masih memiliki kelemahan, yaitu hanya bisa   diaplikasikan terbatas  pada tipe permasalahan yang memiliki solusi yang dapat dicari secara sistematis dan bertahap. Terdapat masalah-masalah yang tidak bisa diselesaikan dengan menggunakan backtracking, misalnya menemukan suatu nilai yang diminta pada  tabel yang tidak terurut. Namun ketika algoritma ini  dapat  diaplikasikan, backtracking dapat  bekerja  jauh  lebih cepat dari  brute force karena jumlah  kandidat  solusi   yang dapat dibuang dengan backtracking cukup besar.