Nugroho's blog.

Wednesday, September 19, 2012

Simulate Circular Motion using Visual Python


This little code below show how to move an object in VPython. There’s two object in program, a box and a sphere. The latter object move in circular using simple sin and cos formula. 

I set the angular speed 10 and radius of the motion (not the sphere) is 10. I use label to show sphere’s x and y position. 

Here the result





Here the code

from visual import *

kotak = box(pos=vector(0, 0, 0), length=14, height=14, width=1, color = (0.7,0.7,0.7))

ball=sphere(color=color.green,radius=5)
ball.pos=vector(10,10,0)

timestep = 0.05
a=10
t = .0
omega= 10
px = label(pos=(0,-1,0), text='x = %1.5f' % pi)
py = label(pos=(0,+1,0), text='y = %1.5f' % pi)
while (1==1):
rate(100)
ball.pos.x = a*sin(omega*t)
ball.pos.y = a*cos(omega*t)
px.text = 'x = %1.5f' % ball.pos.x
py.text = 'y = %1.5f' % ball.pos.y
t=t+0.01

Thursday, May 10, 2012

Searching Song using Melody

A moment ago when I'm waking up in the morning suddenly I had a jolt on my ear that make me jump and run in to front door and burst into my front yard with almost out of breath.

No, not an earthquake nor fire. It is a sound of music from a running fast car across street in front of my home. Yeah, it's music I used to listen when I was boy. I want to have that song badly. The problem is, I don't know what song is it--title, singer, band.


I always manage to google a song with no title, provided I know the artist. Without artist I am still, hardly, able to obtain a certain song if I know a word or to of its lyric.

But in this case, I'm finished. I just remember the melody of this song; no title no artist, no lyric. There's iOS application that have ability to detect an anonymous music named Shazam, but it's no use for me as Shazam need the song as sample to identify.

I hope there's music searching machine that have ability to search a melody, even with whistling. :)

Wednesday, May 2, 2012

Supernova: Partikel; Wow!

"Akar?" Elektra berbisik.

"Kamu--Petir?" bisik Bodhi.

Akhirnya Elektra dan Bodhi bertemu, yeah...

Supernova: Partikel; Romantisme a la Dee

Romantisme ala Dee memang beda. Masih ingatkah dengan tiga Supernova terdahulu?

Ksatria mencintai istri orang
Ruben pacaran dengan sesama jenis
Gio sang perjaka menyerahkannya kepada Diva, supermodel sekaligus The High Class PSK

Star mengejar Bodhi si biksu
Bodhi mengejar Kell, (yang ini agak absurd)
Kell, yang tak bekerja, menjadi suami beberapa wanita yang tersebar di berbagai benua

Hubungan Elektra dengan mpret yang aneh.
Watty yang pindah agama karena jatuh cinta dengan kang Atam yang shaleh (dan kaya raya)

Di Partikel, kisah cinta dua manusia dipaparkan secara 'biasa-biasa saja'

Kisah malam pertama diceritakan secara datar. Beda dengan buku lain yang menceritakan berlembar-lembar secara berbunga-bunga, penuh nafsu, romantis yang beda tipis dengan novel porno.

Kisah roman yang penuh haru di Partikel justru kisah antara manusia dengan orangutan, manusia dengan jamur, manusia dengan tumbuhan.

Kisah roman manusia memang ada, namun dijadikan semacam lelucon ironi oleh Dee. Kisah tentang wanita alim dengan orang tua yang setara kiai namun tega mengubur cucunya yang baru lahir hidup-hidup.

Kisah tentang ayah yang jarang di rumah karena melakukan riset yang ambisius di sebuah bukit yang ia capai dengan bersepeda.

Kisah tentang ibu yang bersepeda meninggalkan anak-anaknya tiap malam untuk pengajian, ibadah dan seabreg kegiatan keagamaan lain sebagai pelarian. Belakangan si ibu membawa bapak baru ke rumah. bapak yang punya tiga mobil.

Tuesday, May 1, 2012

Supernova: Partikel

Setelah menunggu bertahun-tahun akhirnya dapat juga kubertemu dengan Zarah.

Sore ini baru baca beberapa puluh halaman, namun tak diragukan lagi bahwa untuk keping yang satu ini bergenre gelap. Terutama saat baca proses kelahiran adik Zarah dan Hara.

Sunday, April 29, 2012

World War IV

I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones. - Albert Einstein

Thursday, April 19, 2012

Lebah tanpa Sengat (Apis Trigona)

Bukan, dia bukan lebah. Dia menghasilkan madu, ya, tetapi bukan lebah.

Dia tidak punya sengat. Senjatanya berupa perekat, yeah, mungkin itu bukan senjata.

Tempat madu mereka bukan berupa bangun heksagonal seperti lebah melainkan lebih mirip bentuk buah asam.

Telur mereka sebesar buah merica.

Di daerahku mereka disebut klanceng.

Sunday, April 15, 2012

Sport or Art

Konon seseorang dilahirkan sebagai bertipe sport atau art. Mungkin itu benar. Terbukti di sini, pagi-pagi di acara workshop di sebuah hotel, kegiatan peserta terbagi dua. Yang satu bangun pagi-pagi untuk olahraga, sedangkan yang lain seperti saya malah nyantai duduk-diduk di balkon, ngopi sambil update blog atau bahkan masih tidur.

Yeah, tipe sport memacu jantung dengan jogging; tipe art memacu jantung dengan kopi.

Saturday, April 14, 2012

Friday, April 13, 2012

Arloji Alami

Saat berkendara pagi-pagi di jalur ngantang-malang, karena tidak mungkin terus-terusan melihat jam, ada dua jenis penunjuk waktu yang menentukan apakah dapat mencapai SD Lab UM sebelum jam 7

Arloji alami, begitu sering kupikirkan, yang pertama adalah sorot sinar matahari yang sangat jelas akibat efek Tyndall di bukit-bukit Ngantang yang berkabut. Jika sorotnya masih ke atas, itu berarti hari masih pagi, belum jam enam. Sorotnya tepat horizontal, harus ngebut jika tak mau telat. Jika sorotnya ke bawah tak perlu ngebut, toh pasti telat.

Arloji alami lainnya ada di Pujon. Jika setelah pasar sayur pandangan silau, maka kita belum terlambat, jika tidak silau maka matahari sudah terlalu tinggi, harus ngebut.

Thursday, April 12, 2012

Never miss a chance to speak kind words.

Kind words are short and easy to speak, but their echoes are truly endless. - Mother Teresa

Tuesday, April 10, 2012

Hornet

Dia masih ingat rumahnya.

Saat pertama menempati Lazy Home, dia sudah ada di depan rumahku, bernyanyi. Meski menakutkan, kuputuskan untuk tidak mengusirnya, kubiarkan dia tinggal, toh dia memang lebih dulu tinggal di sini.

Dia seekor kumbang, semacam lebah tapi besar. Ada yang menyebut "tawon endhas" (lebah kepala). Dia tinggal di kayu pelisir depan rumahku. Aku jadi harus berhati-hati saat keluar rumah atau masuk rumah karena konon sengatannya bisa sangat menyakitkan dan selalu menyerang bagian kepala. Dan tidak seperti lebah kecil yang mati setelah menyengat (sengatnya adalah tulang belakang, dan akan tertinggal di tubuh kita, jadi lebah alan mati), tawon ini bisa menyengat berkali-kali.

(saat menulis ini, dia sedang terbang mondar-mandir di clauster rumah. Saat akan kupotret mendadak dia mengejarku hingga terbirit-birit ke dapur. Eh, dia membuntuti ke dapur. Maka jadilah aku di sini. Di kamar mandi dengan pintu tertutup rapat.)

Namun kehati-hatianku terbukti tak berguna. Dia tak akan menyengat jika tak diganggu jadi kuanggap dia sebagai penjaga pintu rumahku.

Sekitar dua tahun yang lalu rumahku direnovasi. Bongkar atap sekaligus pelisir (tentu saja) yang lapuk karena rayap. Si Tawon terbang kesana-sini seakan protes tempat tonggalnya digusur, membuat keki para pekerja rumah, hihihi.

Setelah renovasi selesai ternyata si kumbang mulai membangun rumah yang baru dipelisir rumahku yang baru di titik yang sama, wow.

Bulan lalu bagian depan rumah dibongkar total, diganti dengan model cor, tanpa atap. Praktis rumah si kumbang tidak ada lagi bahkan, dengan denah rumah yang baru, rumah si kumbang berada di clauster rumahku, semacam lorong dari ruang tamu ke ruang tengah; tak ada kayu untuk dilubangi. Sebuah penggusuran paksa.

Tadi, saat lihat spongebob, kudengar nguing-nguing suaranya kembali. Dia berada di clauster rumah, weleh. Apakah dia punya semacam bioGPS ditubuhnya?





Keberanian tuk Diam

Courage is what it takes to stand up and speak; courage is also what it takes to sit down and listen. - Winston Churchill

Jalur Ngantang-Malang

Jalur yang berkelok mirip seperti di game real-racing.

Bagi pengendara sepeda motor, jalur ini cocok untuk pamer skill mirip Rossi; menyalip di tikungan. Tidak cocok untuk pamer top speed karena praktis kecepatan rata-rata hanya 80kpj saja.

Bagi pengendara mobil, jalur ini cocok untuk "bersosialisasi"; istilah lain untuk susah mendahului.

Karena secara alami kecepatan rata-rata hanya 60kpj saja, jalur ini cocok untuk berlatih engine-braking, double-clutching, bahkan heel and toe untuk shifting di jalan raya, hehehe.

Monday, April 9, 2012

Array di Delphi

Array dapat digunakan sebagai penyimpanan sementara. Array dapat dipandang sebagai sebuah variabel yang berisi barisan variabel di dalamnya.

Berikut adalah contoh penggunaan array di delphi sekaligus penggunaan listbox dan radiobutton.



Buat sebuah form dengan satu edit, satu button, satut listbox dan tiga radiobutton.

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
ListBox1: TListBox;
RadioButton3: TRadioButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
nama:array [0..100] of string;
n:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
radiobutton1.Caption:='input';
radiobutton2.Caption:='tampilkan';
radiobutton3.Caption:='semua';
edit1.Text:='';
radiobutton1.Checked:=true;
button1.Caption:='OK';
n:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
if (radiobutton1.Checked=true) and not(edit1.Text='') then begin
listbox1.Items.add(edit1.Text);
n:=n+1;
nama[n]:=edit1.Text;
end;
if radiobutton2.Checked=true then begin
listbox1.Clear;
if (edit1.Text<='9') and (edit1.Text>='0') and not(edit1.Text='') then begin
listbox1.Items.Add(nama[strtoint(edit1.Text)]);
end;
end;
if radiobutton3.Checked=true then begin
listbox1.Clear;
for i:=1 to n do begin
listbox1.Items.Append(nama[i]);
end;
end;
end;

end.


Tolerance (Einstein)

Laws alone cannot secure freedom of expression; in order that every man present his views without penalty there must be spirit of tolerance in the entire population. -Albert Einstein

Simple Animation using Mathematica

Using Manipulate, we are able to create animation using Walfram's Mathematica. Basically it allow a variable to walk along its range.

Here the code, or, for me, a template to create animation.




Manipulate[
Graphics[{
Blue,
Circle[{t, 0}, 1]
},
PlotRange -> {{-10, 10}, {10, -10}},
ImageSize -> {400, 300},
Background -> GrayLevel[0.9],
Axes -> True
],
{t, 0, 5}
]
and here the result

Musik

Musik adalah pelepas dahaga yang mengisi cangkir keheningan

Sunday, April 8, 2012

Paku dan Papan

Di awal malam sekitar enam tahun yang lalu, aku dan Anggun sedang "ngleyeh" di kamarku di Lazy Home. Mungkin saat itu hari sabtu malam; biasanya Anggun ke rumah hari sabtu, kujemput.

Anggun mengerjakan tugas akademi kebidanannya yang segunung sedangkan aku sedang santai sambil otak-atik Fruity Loop dan Cool Edit di laptop Eeyor. Komputer Pentium 2 di ruang depan menyiarkan siaran Dhamma TV, ada semacam ceramah dari Biksu yang sudah ku kenal namun namanya tidak ku hafal.

Kami tidak perlu bersusah payah lihat TV karena toh gambarnya lebih menyerupai semut daripada gambar Kelenteng. Jika memasang antenna di belakang rumah, memang seperti itu, pilihannya adalah gambar jelek namun suara bagus, atau gambar bagus dengan suara berkeresak. Jika pasang di depan rumah pilihannya adalah gambar bagus dengan suara jernih dan resiko antenna sudah tidak ada saat pulang dari kampus, hm... mungkin itu bukan pilihan.



Diantara suara kertas dan buku yang dibolak-balik dan suara gedebak-gedebuk drum mentah hasil manipulasiku, kudengar kisah Sang Biksu tentang seorang tua dan pemuda. Aku lupa konteksnya, mungkin si pemuda ingin berguru pada sang tua, entahlah

"...seorang tua berkata pada pemuda pemarah 'Nak, cobalah hal ini saat kau marah, tancapkanlah sebuah paku pada papan di pintu depan rumahmu. Saat amarahmu telah reda cabutlah paku yang telah kau tancapkan tadi. Kembalilah padaku saat tidak ada satu paku pun di papan '

Dan begitulah, si pemuda tiap marah menancapkan paku pada papan dan mencabutnya saat amarahnya telah reda. Terkadang ada beberapa paku yang tertancap pada papan karena saat amarahnya belum reda dia kembali marah.

Saat dia telah berhasil mengendalikan amarahnya, si pemuda menemui biksu untuk menunjukkan bahwa tidak ada paku di papan pintu rumahnya.

'Baiklah, sebagai awal akan kuberi engkau sebuah pelajaran sederhana. Mari kita lihat pintu rumahmu'

'Nak, lihatlah. Engkau telah berhasil mengendalikan amarahmu, terbukti tidak ada satupun paku yang tertancap di papan ini. Namun lihatlah bekas-bekas paku yang kau tancapkan, meski paku telah kau cabut, bekasnya masih ada.

Begitulah amarah, saat engkau marah, engkau tidak dapat mengendalikan diri dan mungkin melampiaskan amarahmu ke orang-orang disekitarmu, melukai mereka; mungkin fisik, mungkin jiwa. Lambat laun amarahmu pasti akan mereda, orang-orang yang telah kau lukai mungkin juga telah memaafkanmu, namun kejadian itu telah menjadi catatan kehidupanmu, seperti lubang di papan bekas tancapan paku... '

...
"
(lupa lanjutannya)


Friday, April 6, 2012

Sebuah Relic Berusia Ribuan Tahun

Berikut adalah pemikiran dari seseorang yang menolak perilaku ekstrim; semacam memiskinkan atau memperkaya diri. Yang berpikir bahwa makan terlalu banyak akan menimbulkan berbagai penyakit namun berpuasa ekstrim juga akan membuat badan lemas, mata berkunang-kunang dan suplai nutrisi ke otak berkurang.

***

-kehidupan manusia itu pada dasarnya tidak bahagia;

-sebab-musabab ketidakbahagiaan ini adalah memikirkan kepentingan diri sendiri serta terbelenggu oleh nafsu;

-pemikiran kepentingan diri sendiri dan nafsu dapat ditekan habis bilamana segala nafsu dan hasrat dapat ditiadakan;

-menimbang benar, berpikir benar, berbicara benar, berbuat benar, cari nafkah benar, berusaha benar, mengingat benar, meditasi benar;


Wednesday, April 4, 2012

Record di Delphi

Record dapat dikatakan sebagai sebuah obyek di Delphi, semacam variabel yang memiliki variabel. Seperti Button yang memiliki caption atau edit yang memiliki text, kita dapat membuat sebuah obyek yang memiliki variabel sendiri.


Berikut adalah contoh program menggerakkan sebuah kotak (menggunakan shape). Kita membuat record baru bernama tkotak yang memiliki variabel x, y, vx, vy, ax, ay. Variabel kotak merujuk pada record tkotak.


Tombol jika diklik akan menjalankan perintah pada prosedur proses. Prosedur proses adalah metode Euler untuk mengupdate posisi dan kecepatan kotak berdasarkan posisi dan kecepatan awal.







Kode lengkapnya adalah sebagai berikut


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Shape1: TShape;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
tkotak=record
x,y,vx,vy,ax,ay:real;
end;
var
Form1: TForm1;
jalan:boolean;
kotak:tkotak;
dt:real;

implementation

{$R *.dfm}
procedure proses;
begin
kotak.vx:=kotak.vx+kotak.ax*dt;
kotak.x:=kotak.x+kotak.vx*dt;
form1.Shape1.Left:=round(kotak.x);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
button1.Caption:='jalan';
jalan:=false;
kotak.x:=0;
kotak.y:=0;
kotak.vx:=5;
kotak.vy:=0;
kotak.ax:=10;
kotak.ay:=0;
dt:=0.1;
shape1.Left:=round(kotak.x);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
jalan:=not(jalan);
if jalan=true then button1.Caption:='stop' else button1.Caption:='jalan';
while jalan=true do begin
proses;
application.ProcessMessages;
sleep(100);
end;
end;

end.

Tuesday, April 3, 2012

Tahlil Bilingual

Beberapa hari yang lalu saya pintu kamar mandi saya digedor-gedor tetangga.

"Woi, lagi mandi ya!!!"
"Iya..." sahut bibiku yang lagi mandi

"Ups, sori,..." ganti dia gedor-gedor WC
"Woi, lagi di WC ya!!!" walah..., gimana mau jawab. Aku diam aja, mood-ku langsung hilang.

"Eh, kok diam saja? lagi di dalam WC ya?" ckckck...

"Ada apa Gus?" kataku nongol dari pintu WC
"Baru dari WC?" Busyet dah...




Aku menyerah
"Iya" sambil ngeloyor ke depan TV mau lihat Spongebob sore

"Nanti habis maghrib diundang syukuran di Pak Wari" kata Gus sambil nguntit aku. Waduh, gak bisa lihat Spongebob nih!

"Soalnya aku sakit perut" jawabku sekenanya

"eh?"

Begitulah suasana desa, ngobrol dengan seseorang yang sedang konsentrasi penuh di WC dianggap biasa. Dan pertanyaan yang terus diulang walaupun sudah tahu jawabannya. Basa-basi memang kadang merepotkan.

******

Habis maghrib aku ke rumah Pak Wari yang rumahnya melewati tritisan rumah Pakde di utara rumahku. Sudah ada beberapa orang di sana.

"Memang acara apa Pak"

"40 harinya mbah Prapti"

Aku lega tidak bertanya "Memang syukuran apa?", dasar Gus!

Biasanya, acara semacam itu diisi dengan baca Surat Yaa-Sin, sekitar setengah jam, dilanjutkan dengan bacaan tahlil, beberapa surat pendek dan beberapa potongan surat panjang dan doa-doa entah apa namanya.


Namun malam itu tidak. Pak Ja'i Mengumumkan kalau acaranya hanya diisi bacaan tahlil saja, wow, masih bisa lihat Spongebob nih. Dan bukan hanya aku yang lega, hehehe. Eh, bukan berarti semua yang diundang juga pengin cepat-cepat pulang lihat Spongebob; waktu antara maghrib dan isya' adalah waktu ngleyeh di desaku.

Tahlil berlangsung lima belas menit dan makanan pun dihidangkan. Setelah puas melahap soto, bingkisan berkat untuk dibawa pulang pun dibagikan.

Aku siap-siap menunggu Shalawat Dongkrak ketika Pak Sutomo, sesepuh Dusun mengambil mic dan...

"Salamalekum,  dinten menika kula dalah panjenengan sedaya dumugi wonten mriki minangka .... mugi pinaringan kawilujengan..."

Whaaaat???!!!

Ternyata ada semacam "Tahlilan Jawa" setelah berkat dibagikan dan lebih lama dari "Tahlil Arab". Tahlil jawa ini diucapkan dalam bahasa kawi yang isinya berupa penjelasan kenapa kami beada di sini, acara apa dan semoga tuan rumah terkabul hajatnya.

Karena diucapkan dalam bahasa jawa, maka kata "amin" yang biasa diucapkan bersama-sama diganti dengan "inggih..." (iya).

Saat pulang, aku senyum-senyum sendiri sambil terkenang-kenang jaman SMP saat aku bersusah payah menghafalkan suluk pembuka pagelaran wayang di halaman belakang Kembang Setaman.

"Swuh rep data pitana. Anenggih negari kapundi ta kang kaeka adi dasa purwa. Eka marang sawiji adi luwih dasa sepuluh purwa wiwitan. Nadyan katah titahing jawata kang kasongan ing akasa kasangga ing pratiwi kaapit ing samudra...

negara dwarawati ya dwaraka negara kang panjang punjung pasir wukir. Panjang dawa pocapane, punjung luhur kawibawane,  pasir samudra wukir gunung... gemah ripah loh jinawi tata tentrem kerta raharja"

Nostalgia...



Monday, April 2, 2012

Toggle di Delphi

Toggle adalah sebuah tombol dengan sifat jika saat itu on maka jika ditekan akan off jika ditekan lagi on jika ditekan lagi akan off dan seterusnya.

Di Delphi kita dapat membuat tombol jenis ini.

Buat sebuah aplikasi baru, letakkan sebuah tombol di form. Berikut adalah perintah lengkapnya.




unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
jalan:boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
jalan:=not(jalan);
if jalan=true then button1.Caption:='stop' else button1.Caption:='jalan';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
jalan:=false;
end;

end.

Shape di Delphi

Shape adalah sebuah object berupa bentuk-bentuk dasar di Delphi.

Di Delphi ada beberapa cara untuk menggambar; diantaranya menggunakan Shape. Cara lain menggunakan canvas dengan perintah moveto+lineto+fill. Meskipun cara terakhir menawarkan felkesibilitas bentuk yang tinggi, mereka tidak dapat digerakkan dengan mudah; kita harus menghapus dan membuat lagi dari awal.



Shape dapat dengan mudah digerakkan karena memiliki properties top dan left. Berikut adalah cara menggerakkan sebuah Shape dengan fitur kecepatan dan percepatan serta sebuah tombol toggle jalan/stop.

Buat aplikasi baru, letakkan dua edit, satu shape dan satu button.

Berikut adalah perintah lengkapnya.
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Shape1: TShape;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
jalan:boolean;
ax,vx,xx,dt:real;
implementation

{$R *.dfm}

procedure proses;
begin
xx:=xx+vx*dt;
vx:=vx+ax*dt;
with form1 do begin
edit2.Text:=floattostr(vx);
shape1.Left:=round(xx);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
jalan:=false;
edit1.Text:='0';
edit2.Text:='1';
dt:=0.1;
button1.Caption:='jalan';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
jalan:=not(jalan);
ax:=strtofloat(edit1.Text);
vx:=strtofloat(edit2.Text);
xx:=shape1.left;
if jalan=true then button1.Caption:='stop' else button1.Caption:='jalan';
while jalan=true do begin
proses;
application.ProcessMessages;
sleep(100);
end;
end;

end.

Stringgrid di Delphi

Buat aplikasi baru
Letakkan sebuah tombol, edit dan stringgrid di form
Kosongkan bagian text pada edit1
Ubah caption pada button1 menjadi input
Pada properties stringgrid1, ubah colcount-&gt;7 kemudian rowcount -&gt; 17
Dobelklik form1, ketikkan perintah berikut
  stringgrid1.Cells[0,0]:='No';
stringgrid1.Cells[1,0]:='Nama';
stringgrid1.Cells[2,0]:='U1';
stringgrid1.Cells[3,0]:='U2';
stringgrid1.Cells[4,0]:='U3';
stringgrid1.Cells[5,0]:='U4';
stringgrid1.Cells[6,0]:='Nil'; 
Jalankan program. Kini stringgrid1 memiliki judul pada baris pertama tiap kolom.



Untuk mengisi kolom nama pada stringgrid, kita gunakan tombol input.
Agar dapat otomatis berganti baris kita perlu membuat sebuah variabel global n bertipe integer.
Dobelklik tombol input, ketikkan perintah berikut
  stringgrid1.Cells[1,n]:=edit1.Text;
stringgrid1.Cells[0,n]:=inttostr(n);
n:=n+1;
Jalankan program. Ketikkan sebarang nama di edit1, kemudian klik tombol input, lakukan berulang-ulang.










Tuesday, March 27, 2012

Loop di Delphi

Buat aplikasi baru

Tempatkan sebuah edit dan dua buah tombol, isi edit dengan nilai nol, ganti caption tombol masing-masing “Jalan” dan “Stop”

Buat variabel global “jalan” berjenis boolean

Dobelklik tombol “Jalan”, ketikkan perintah sebagai berikut



jalan:=true;
x:=strtoint(edit1.Text);
while jalan=true do begin
x:=x+1;
edit1.Text:=inttostr(x);
application.ProcessMessages;
sleep(1000);
end;

(jangan lupa membuat variabel lokal “x” berjenis integer sebelum begin)

Dobelklik tombol “Stop”, ketikkan perintah sebagai berikut

jalan:=false
jalankan program. Jika gagal, ubah deklarasi x dari x:int; menjadi x:integer;

Preman (lagi)

Tadaa…

Masih tentang "pengemis" atau mungkin lebih tepat jika disebut preman kemanusiaan, karena jika benar-benar diperhatikan, mereka tidak masuk kategori pengemis ataupun preman meski

Pernahkah anda melihat pengemis di perempatan jalan? Bagaimana penampilannya

Jaman dulu

Kebanyakan tua
pakaian compang-camping
pake sandal jelek bahkan telanjang kaki
bawa selendang tuk tempat uang



"Pengamen" atau "pengemis" sekarang

semua umur
pakaian lusuh tetapi tetap melindungi kulit dari sengatan matahari
pakai sandal nyaman, ada yang bersepatu
memakai tas ransel, atau selendang bagi yang bawa bayi

Apa yang "dijual" oleh mereka? Kita tahu bahwa pengamen menjual suara merek lewat lagu, di bus kita bahkan sering terhibur dengan lirik-lirik lagu yang kadang mereka ciptakan sendiri. Kita juga tahu pengemis (tanpa tanda petik) menjual keadaan mereka; kemiskinan, penyakit bahkan mungkin harga diri.

Di perempatan memang ada pengamen dan dan pengemis yang sesungguhnya; anak-anak punk yang memang terjun ke jalan. Anak-anak jalanan ini benar-benar menyanyi meskipun tentu saja kita tidak bisa menikmati keseluruhan lagu seperti di bus, dan tentu saja mereka patut untuk mendapatkan imbalannya, sekeping lima ratus rupiah.

Bahkan saya pernah di panas terik dimintai "belas kasihan" oleh seorang "pengemis" kecil; dia minum jus melon sambil ngobrol seru dengan temannya yang memakai tas pinggang Eiger. Dengan keadaan demikian tentu saja saya tidak bisa berbelas kasihan, saya tidak begitu bodoh untuk

Tidak bisakah mereka menjadi pengemis yang profesional? Dengan pakaian dinas yang sesuai dan tingkah laku profesional layaknya pengemis sesungguhnya? Saya kira tidak, mereka sudah terlalu nyaman dengan rutinitas mereka meskipun saya yakin jika mereka bisa bertingkah laku secara profesional, pendapatan harian mereka bisa meningkat.

Tidak pernah ada yang tahu jalan pikiran mereka, tetapi tidak sulit untuk ditebak. Mereka turun ke perempatan-perempatan yang berlampu merah dengan pikiran optimis bahwa jika mereka meminta pasti diberi karena mereka pikir para pengendara menyangka mereka patut dikasihani; dan orang yang patut dikasihani tentu saja harus dikasih uang. Mereka mengeksploitasi rasa belas kasihan kita saat melihat pengemis. Mereka memaksa kita untuk berbelas kasihan meskipun sebenarnya dalam hati beberapa dari kita pasti bertanya “apa iya mereka ini benar-benar patut dikasihani?”.

Cara ini sedikit banyak berhasil. Ironisnya pengendara kebanyakan mengabaikan anak-anak punk yang terkadang malah benar-benar menjual suara mereka dan cenderung memberikan recehan mereka pada anak-anak kecil. Bias ini bisa dimaklumi tentu saja, lihat pakaian anak punk jalanan itu. Namun apakah belas kasihan kita telah benar pada tempatnya?

Memberi recehan pada anak kecil di perempatan mungkin melegakan kita; membantu anak yang kekurangan. Namun anak yang kita beri recehan tersebut sangat mungkin untuk tetap di situ bertahun-tahun kemudian. Mereka telah mendapatkan mata pencaharian yang gampang, mereka tidak butuh sekolah karena lebih enak di jalanan. Dengan memberi mereka recehan kita telah menghancurkan kemungkinan mereka untuk sadar akan pentingnya pendidikan.

Radiobutton di Delphi

Buat aplikasi baru

Tempatkan 2 buah edit, dua buah label, empat radiobutton dan satu tombol pada form

Ubah sedemikian rupa sehingga menjadi seperti gambar kedua

Dobelklik tombol “Hitung”, isi dengan perintah berikut



if radiobutton1.Checked=true then begin
edit3.Text:=inttostr(strtoint(edit1.Text)+strtoint(edit2.Text));
end else if radiobutton2.Checked=true then begin
edit3.Text:=inttostr(strtoint(edit1.Text)-strtoint(edit2.Text));
end else if radiobutton3.Checked=true then begin
edit3.Text:=inttostr(strtoint(edit1.Text)*strtoint(edit2.Text));
end else if radiobutton4.Checked=true then begin
edit3.Text:=floattostr(strtoint(edit1.Text)/strtoint(edit2.Text));
end;

jalankan program

sebagai pelengkap, tambahkan perintah pada radiobutton sedemikian sehingga jika kita memilih “Pengurangan”, maka otomatis label1 menjadi “-”

Berkenalan dengan Delphi

Perkenalan dengan Delphi

Buat aplikasi baru

Buat sebuah label di dalam form, pada caption di properties, ubah tulisan “label1” menjadi “Hello World”


Buat satu tombol di dalam form, pada caption di properties ubah “button1”menjadi “Halo Dunia”




Dobel klik tombol “Halo Dunia”, tuliskan perintah berikut untuk mengubah tulisan “Hello World” menjadi “Halo Dunia”
form1.Label1.Caption:='Halo Dunia';


Jalankan program dengan menu Run->Run atau tombol F9


Ketikkan perintah berikut untuk mengubah warna font pada label 1
form1.Label1.Font.Color:=cllime;


Ketikkan perintah berikut untuk mengubah warna background pada label
form1.Label1.Color:=clred;


cllime, clred adalah warna-warna yang dikenali oleh Delphi. Warna-warna yang lain dapat dilihat di bagian properties


Buat tiga edit dan sebuah tombol

di properties bagian text pada masing-masing edit, ganti dengan angka nol
ganti caption pada tombol dengan “Hitung”

Dobelklik tombol “Hitung” dan ketikkan perintah berikut
edit3.Text:=edit1.Text+edit2.Text;

Jalankan program, klik tombol “Hitung”, apa yang terjadi? Ubah angka-angka pada kotak input (edit1 dan edit2) kemudian klik tombol hitung, apa yang terjadi?

Angka yang ada pada edit diperlakukan sebagai string (huruf) oleh Delphi sehingga jika kita menambahkan angka pada edit1 dengan angka pada edit2, maka mereka tidak menjumlahkan angka melainkan menambahkan angka edit2 di samping edit1.

Agar angka pada edit1 diperlakukan sebagai angka, maka harus kita konversi dengan perintah strtoint(edit1)

Namun karena hasil penjumlahan antara strtoint(edit1)+strtoint(edit2) adalah angka, kita tidak dapat memasukkannya ke edit3; kita harus mengkonversi kembali menjadi string sehingga perintah lengkapnya adalah
edit3.Text:= inttostr(strtoint(edit1)+strtoint(edit2));

jalankan program untuk melihat bedanya

Monday, February 20, 2012

Preman Kemanusiaan

Apakah aku merasa kasihan terhadap pengemis yang menggendong bayinya?

Tidak. Aku kasihan kepada bayinya.

Kenapa tidak diadopsi saja?

Tentu saja, tapi tak mungkin ibunya mau, pasti pendapatannya turun karena tak punya nilai jual lagi di perempatan.

Thursday, February 2, 2012

Kebersihan Sebagian dari Iman

Pagi tadi setelah sarapan aku langsung melompat ke dalam mobil dan memulai perjalanan rutin 50 km tanpa sempat melakukan aktivitas lain karena jarum jam sudah diambang

Di dinding toilet tertulis "harap disiram karena kebersihan sebagian dari iman". Hm, dengan menyiram bersih toilet saja saya sudah memiliki sebagian iman.

Jika ditambah dengan cinta tanah air, maka iman saya sudah penuh, karena cinta tanah air adalah sebagian lainnya, hehehe.

Pernah dengar saat SMP, mungkin ustadz, mungkin guru agama, aku lupa yang mana. Beliau mengartikan kalimat di atas secara lain: "Kebersihan adalah perwujudan dari iman".

Sepertinya aku lebih suka definisi yang terakhir.

Thursday, December 29, 2011

Tinycore Linux on Lion's Virtual Box

I installed it on new machine. Though it's not really installing for I just running the iso. My virtual machine is set without harddisk.

The OS boot very quick. But here the problem arise.

While GUI is included in this 8 Mb distro, I can't used it effectivelly soon. You know, my mac has dvorak keyboard layout, so what I typed come out as gibberish. There is  kmaps.tcz and I applied it but it has no effect

Saturday, December 24, 2011

Tiny Core Linux


Just wandering around and landed in ibiblio, glaring at my mac screen the tiny core linux, just 10 Mb linux distro with GUI, wow… and I thought damnsmalllinux is small enough.

This distribution is based on nothing, I mean it didn't based on large or old distro like ubuntu, debian or slackware like other mini distros that usually is stripped down version of its big distro.



here some excerpt from (http://distro.ibiblio.org/tinycorelinux/intro.html)
Tiny Core is:


  • Very Small. At 10 megabytes, Tiny Core is 1/400 to 1/100 the size of the most widely used operating systems in the world (even compared to most Linux distros). That makes Tiny Core flexible enough to be stored and run from usb sticks, a just-about-full CD, or even embedded devices. hardware.




  • Linux. Tiny Core uses the Linux Kernel and a set of command-line (text interface) tools including busybox.




  • A GUI Desktop. Tiny Core has a flexible and fully-customizable Graphical User Interface Desktop. Mouse, keyboard, and screen support basically works out-of-the-box thanks to FLWM, the FLTK Desktop. You can also quickly install and try out a variety of other desktops and interfaces including Fluxbox, XFCE, OpenBox, IceWM, Joe's WM, LXDE, and others.




  • Minimal. Tiny Core does not 'ship' with most end-user software. Instead, Tiny Core lets you quickly and easily compare, select, download, and install your preferred web browser, word processor, music player, and other software.




  • Unusually Stable. Every time Tiny Core loads, it is brand-spanking new. That means Tiny Core just doesn't get a blue screen. Instead of installing programs into the system file space and risking damage to the system files, Tiny Core uses program 'extensions' that are re-prepared at each reboot ... and they are prepared fast.




  • Unusually Fast. Unlike most operating systems, the Tiny Core can run completely from RAM. Individuals with RAM to spare can even use Tiny Core to load and run their programs from RAM (you didn't know your computer could run Open Office and Firefox so quick). Experienced users can still install Tiny Core to disk, but Tiny Core can run in 48 megabytes of RAM ... or less.




  • Internet ready. Tiny Core almost always finds your network card right right away. You'll be adding applications and tools after an unusually quick boot. You can even come back here and ransack the forums if you find you need help.




  • Available even smaller. Linophiles that get things done without a GUI can get the MicroCore, a version of Tiny Core without X that is under 7 MB.




  • An open source community. Tiny Core is under active community development, led by a team of really dedicated people. You can find answers and ask questions in the forum, add your own experiences to the wiki, help add extensions (programs) to the Tiny Core Repository, and read enough Tiny Core to make your head spin.



What are the minimum requirements?
An absolute minimum of RAM is 46mb. TC won't boot with anything less, no matter how many terabytes of swap you have.
Microcore runs with 28mb of ram.
The minimum cpu is i486DX (486 with a math processor).


A recommended configuration:
Pentium 2 or better, 128mb of ram + some swap


Is Tiny Core for me?
If Linux and distributions are confusing to you, then Tiny Core might not be for you. To help you decide, you need to know a few things about Tiny Core.


To get started, Tiny Core is:



  • Not a duplicate of another really common operating system. Tiny Core doesn't have a pretty boot screen, or stock wallpaper, and Tiny Core certainly doesn't have its own advertising campaigns.




  • Not a 'turnkey' operating system. Tiny Core can help you do what you need to do, but Tiny Core stays tiny by not including tools like a browser or word processor (but Tiny Core can help you download and install those really quickly).




  • Not for everyone. Tiny Core is fast, powerful, and flexible. You can use Tiny Core without much technical knowledge, but, like any strong tool, Tiny Core becomes really useful if you know how to use it. Great starter skills could include command line usage, simple shell scripting, and Linux file and permission management, and some reasonably fast typing skills.



If you aren't scared off yet, you need to know that there are some characteristics that make Tiny Core a really unique Linux distribution.



SSH Tunnelling Firefox on Oneiric Ocelot behind Virtual Box's NAT

I have Ubuntu 11.10 guest installation on my VBox on OS X Lion host. What the point of it? Yeah, first I want to create isolated environment that won't bring the headache if it destroyed. Second, I want to break that isolated environment so it can reach the world wide.



For start, I begin with ssh tunneling. I used ssh connection to tunnel firefox's data. It look like firefox isn't connect through NAT but through my ssh server instead.

To be able to do this. I have to have access to some server outside via ssh. Fortunately, now free shell access is widely available, just google for it and subscribe.

To make connection through ssh for tunneling use this command

ssh -ND 7777 yourusername@shellserver.com 

It will bring a prompt ask for password and then nothing, that N means, it will not bring interactive shell

On firefox side, open edit, preferences, advanced, network, setting
Choose manual configuration and type on SOCKS host: localhost port 7777

Now firefox's connection have been tunnelled.

Friday, December 23, 2011

Automounting Shared Folder on Ubuntu 11.10 Oneiric Ocelot as Guest in OS X Lion VirtualBox

My Ubuntu 11.10 Oneiric Ocelot on virtual box have shared folder with host OS X Lion named 'vbox'. I used to typing command after login to mount that folder to my home directory. I mount it to falder named 'vbox' too using this command

$sudo mount -t vboxsf vbox vbox.  

However, at old time, I used to auto mount other partition that refused to automount (usually ntfs or other linux distros partition) at login by editing /etc/fstab



(using vi, press k to scrolldown and press i or a to edit the last line)
aravir@aravir-VirtualBox:~$ sudo vi /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda1 during installation
UUID=3c8759e3-314b-4e42-a39e-efe9c18a130c / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=1b64eb34-42af-4ada-8bf1-0273d572cdb6 none swap sw 0 0
#virtualbox shared folder
vbox /home/aravir/vbox vboxsf auto 0 0

press :wq! to save and quit vi session


Restart the machine. 


After the machine is back, well, there is no sign that my tweak above worked. Curious, I want to take a peek of what kind and what are already mounted by system.


aravir@aravir-VirtualBox:~$ mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro,commit=0)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
vbox on /home/aravir/vbox type vboxsf (rw)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
vbox on /media/sf_vbox type vboxsf (rw,gid=1001)
gvfs-fuse-daemon on /home/aravir/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=aravir)
aravir@aravir-VirtualBox:~$
It's like the vbox is successfully mounted TWO times, however:
  • vbox did mount on /home/aravir/vbox but it's no file at all 
  • vbox mounted on /media/sf_vbox but only root have access to it 
So the last resort is playing with rc.local
aravir@aravir-VirtualBox:~$ sudo vi /etc/rc.local 

add this line before exit 0 

mount -t vboxsf vbox /home/aravir/vbox 

so the /etc/rc.local become like this
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
mount -t vboxsf vbox /home/aravir/vbox
exit 0
Restart the machine and voila, its success

Thursday, December 22, 2011

Lagu dengan Ketukan Nada Ganjil

Saat terbaring kaku karena obat tidur dosis super, aku buka iTunes dan memainkan keseluruhan koleksi  lagu-lagu secara shuffle. Enak sekali tidur tanpa bisa bergerak sambil diiringi lagu-lagu yang kadang sangat sering kuputar, kadang ada yang sudah lama tidak kuputar, bahkan lupa kalu pernah punya lagu itu.

Saat lagu "Tidurlah-tidur"nya Katon selesai, mulailah ketenangan tidurku terusik ketika "Under A Glass Moon"-nya Dream Theather mulai dimainkan oleh si Apple Mac. Lagu ini memiliki ketukan-ketukan yang berganti-ganti. Awalnya 6/4, sudah aneh, coba anggukkan kepala mengikuti nada-nadanya, anda akan dipaksa menganggukkan kepala saat seharusya anggukkan anda masih di atas. Saat melodi, hm , anda sakti kalo tahu itu birama berapa. Banyak lagu-lagu Dream Theather yang memiliki karakter seperti ini



Di "Metropolis", coba anggukkan kepala mengikuti ketukan di section 3, pasti anda akan dipaksa menghentikan kepala sejenak untuk mensinkronkan anggukkan kepala anda dengan musik. Itu di bagian saat ada bait "I was told there's a miracle for each day that I try, I was told there's new love is born for each one that's die, I was told there'll be no one to call on when I feel alone and afraid, I was told if You dream of the next world, you'll find yourself swimming in the lake of fire..."

Saat bagian melodi pun, sudah menjadi ciri khas DT, biramanya kebanyakan ganjil dan meloncat-loncat. Saat-saat awal mendengarkan lagu-lagu Dream Theater, aku sudah langsung berpikir "aku tidak akan mencoba memainkan lagu-lagu ini" Bukan karena tidak suka, tapi terlalu rumit untuk sebuah band jazz-latin-bossa, hehehe

Lagu-lagu yang memiliki birama tidak lazim sangat banyak.

Steve Vai, gitaris, mempunyai lagu-lagu seperti Incantation dengan birama 5/4, bayangkan gimana otak drummernya. Bagian melodi akustik di "Freak Show Excess" juga memiliki birama ganjil.

Naif punya lagu "Elton John" dengan birama 14/16 di bait awal

Beatless di lagu pertama side B album The Best of, birama 5/4

Dan yang paling sering kita dengar tahun lalu sebagai theme song di ISL adalah Damage Control, dari album solo John Petrucci (Gitaris Dream Theater). Lagu ini memang terkesan sporty dan heavy saat intro awal yang hanya dibawakan dengan gitar. Belum tampak keganjilan ketukannya, namun begitu drum dan bass masuk, coba anggukkan kepala anda, pasti beberapa saat kemudian anda akan dipaksa mensinkronkan kembali anggukan kepala anda dengan ketukan lagu, hehehe.

Obat Tidur Dosis Super

Saat ini aku susah bergerak, bahkan untuk batuk pun susah karena perut terasa kram. Bukan karena terkena penyakit tertentu, melainkan karena obat tertentu.

Tiga hari ini, tenggorokan terasa panas, bukan seperti batuk pilek biasa. Setelah periksa ke bidan desa, ternyata tenggorokanku ada semacam sariawan!!! Difteri, hm, sudah hampir dua tahun tidak mengalami lagi, bukannya ingin sakit sih, cuma gak bisa lupa sakit yang dua tahun lalu, suaraku sampe berubah jadi pecah kayak robot. Kalo bisa diatur agar suaranya bisa suara prime-tertz-quin sih tidak masalah, :(



"Suntik mas?" (waduh...)
"Hehehe..."
"Ok"

Bidan ambil alat suntik dan mencobloskan jarumnya ke ampul obat putih bening, seperempat dari isi keseluruhan alat suntik. Setidaknya yang disuntikkan tidak banyak, pikirku. Eh, tapi kok obatnya aneh?

"Bu, kok obatnya bening. Kayaknya dulu warnanya merah deh"
"Memang, lha ini yang merah" bu bidan mencobloskan jarum lagi ke ampul merah. Sekarang sudah setengah alat suntik terisi cairan, deg...deg..deg.
"Pernah alergi obat Mas?"Aku cuma bisa geleng, mulutku gak bisa kupercaya untuk mengeluarkan sepatah kata tanpa bergetar.

"Kalo gitu tak tambahkan ini" Sekarang alat suntik sudah berisi PENUH cairan obat yang akan disuntikkan ke tubuhKU..., duh gusti...

"AAAOOOUUUWWW..."

"Walah, sudah bolak balik ke sini berpuluh tahun kok ya masih sama gayanya"

"AAUUWWW..."

Semenit kemudian barulah dicabut. Aku cemberut.

Beberapa menit kemudian
"Nah, yang ini diminum kalo diare, 2 buah pil, jika dan hanya jika diare lho. Kalo nggak diare nggak usah di minum. Yang putih kecil ini untuk pilek tiga kali sehari , tapi minumnya besok, soalnya di suntikkan tadi sudah ada. Nah kalo yang untuk pusing bisa disimpan untuk suatu saat kalo pusing lagi, tiga kali sehari, kalo sudah tidak pusing hentikan minumnya, yang ini antibiotik....blablabla..."

Begitulah aku diberi obat 11 macam pil yang fungsinya macam-macam, dari diare, pusing, pilek, demam, sariawan ditenggorokan sampai jamur di usus. Hm, setidaknya aku masih tahan tidak pingsan mendengarnya, kalau pil sih, kecil... Suntikan? No Way...

Malamnya langsung minum obat, tidak ada masalah

Dini hari. Terbangun, keringat dingin yang melimpah tanda sembuh, mau merubah posisi tidur, eh loh? Kok badanku kaku? Coba menengokkan kepala, tidak bisa. Kupaksa bangun dengan cara normal, YA AMPUN, perutku rasanya seperti baru sit-up tujuhratus tujuhpuluh tujuh kali, njarem (ngilu). Pasrah, tidur lagi dengan posisi yang sama, obat tidurnya masih berpengaruh kuat.

Subuh terbangun lagi, mau menggeser kaki pun rasanya seperti habis lari marathon tanpa pemanasan. Kupaksa bangun sambil teriak-teriak, rasanya seluruh tubuhku habis digebuki orang (hm, mungkin rasanya gitu, gak pernah digebuki orang), tetap kupaksa bangun, ingin pipis.

Jalanku seperti robot, tangan kanan membantu mengangkat kaki kanan, yang kiri juga sama. Dekat kamar mandi ketemu Anggun

"Mas, kenapa"
"Gak tahu, kaku semua. Apa memang obatnya berpengaruh seperti ini?"
"Harusnya enggak, mana obatnya, tak lihatnya" Anggun juga bidan
"(nggremeng) hm, ni obat pilek ada CTM-nya, antibiotiknya ok, demakolin, loh, ini kan ada CTM-nya juga? wah ni harus diminum salah satu tok, nah kalo yang ini gak papa terus yang...."

....

"Wah, ini sampeyan dapat dua jenis pil yang ada obat penenangnya, efeknya sampeyan seperti dibius, efek sampingnya bisa kayak saya dulu, leher kaku, eh kalo sampeyan sekujur tubuh kaku, hehehe..."

Duh, dan beginilah, untuk batuk saja malah lebih susah dari sebelum diobati. Mungkin maksudnya memberi efek jera agar tidak bisa batuk, tapi... Setidaknya demam dan pilek sudah hilang, walau masih terbujur kaku.

Monday, December 19, 2011

Python-based Web Page to Compute Function with User Input Flexible Function

This is improved from my python-based web based to display function. In this version, users have ability to input a function and then display it with it value for given variable to python-based web page.

The code below will get input from users (if no input, the default value is sin(x)), parsed it to function python understand, and then eval it for given variable (in this code, x=10). After computed, it's inserted to template that resembling html code. Thus, since it's displayed in html style, we could add our customization (background, css, etc)



Here's the code


#!/usr/bin/python
# -*- coding: utf-8 -*-
import BaseHTTPServer, urllib, re
import sys,parser
from math import *

class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
    template = u"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>%s</title>
        </head><body><h1>%s</h1><pre>%s</pre>Function<form action="" method="POST"
        class="editor"><div><textarea name="text">%s</textarea><input type="submit"
        value="Compute"></div></form></body></html>"""
    
    def escape_html(self, text):
        """Replace special HTML characters with HTML entities"""
        return text.replace(
                            "&", "&amp;").replace(">", "&gt;").replace("<", "&lt;")
    
    def link_repl(self, match):
        """Return HTML for link"""
        title = match.group(1)
        if title in self.server.pages:
            return u"""<a href="%s">%s</a>""" % (title, title)
        return u"""%s<a href="%s">?</a>""" % (title, title)
    
    def do_HEAD(self):
        """Send response headers"""
        self.send_response(200)
        self.send_header("content-type", "text/html;charset=utf-8")
        self.end_headers()
    
    def do_GET(self):
        """Send page text"""
        self.do_HEAD()
        page = self.escape_html(urllib.unquote(self.path.strip('/')))
        text = self.escape_html(self.server.pages.get(page, "sin(x)"))
        parsed = re.sub(r"\[\[([^]]+)\]\]", self.link_repl, text)
        #hitung fungsi
        fungsi=parser.expr(parsed).compile()
        x = 10
        y = eval(fungsi)
        tout = 'The value of  ',parsed, ' on x = ',x,' is ',y
        tout = str(tout)
        tout = re.sub(r",", "", tout)
        tout = re.sub(r"\'", "", tout)
        tout= tout[1:]
        tout= tout[:-1]
        self.wfile.write(self.template % (page, page, tout, text))
    
    def do_POST(self):
        """Save new page text and display it"""
        length = int(self.headers.getheader('content-length'))
        if length:
            text = self.rfile.read(length)
            page = self.escape_html(urllib.unquote(self.path.strip('/')))
            self.server.pages[page] = urllib.unquote_plus(text[5:])
        self.do_GET()

if __name__ == '__main__':
    server = BaseHTTPServer.HTTPServer(("", 8080), Handler)
    server.pages = {}
    server.serve_forever()

Here's the screenshot
From python

Sunday, December 18, 2011

User Input on Python during Runtime

Eventually, we want interactivity when executing Python script. We want user to give input for some variable. It'll useful for, lets call, application form where user have to input her/his name, age, etc. On math field, user will have flexibility to input the function and range of variable used to computation.



There is raw_input command and input command we can used.

raw_input command will translate all we type to string, while input command treat it as command

Here difference between the two

raw_input
x=raw_input('type anything \n')
print 'you typed ', x

Execute it
Nugrohos-MacBook-Pro:python nugroho$ python input.py 
type anything
a
you typed a
Nugrohos-MacBook-Pro:python nugroho$ python input.py
type anything
12
you typed 12
Nugrohos-MacBook-Pro:python nugroho$ python input.py
type anything
sin(x)+x**2
you typed sin(x)+x**2
Nugrohos-MacBook-Pro:python nugroho$

input
c='sin(x)+x**2'
me='Hello folks, Aravir here'
x=input('type anything \n')
print 'you typed ', x

Execute it
Nugrohos-MacBook-Pro:python nugroho$ python input.py 
type anything
a
Traceback (most recent call last):
File "input.py", line 3, in
x=input('type anything \n')
File "", line 1, in
NameError: name 'a' is not defined
Nugrohos-MacBook-Pro:python nugroho$ python input.py
type anything
12
you typed 12
Nugrohos-MacBook-Pro:python nugroho$ python input.py
type anything
sin(x)+x**2
Traceback (most recent call last):
File "input.py", line 3, in
x=input('type anything \n')
File "", line 1, in
NameError: name 'sin' is not defined
Nugrohos-MacBook-Pro:python nugroho$ python input.py
type anything
c
you typed sin(x)+x**2
Nugrohos-MacBook-Pro:python nugroho$ python input.py
type anything
me
you typed Hello folks, Aravir here
Nugrohos-MacBook-Pro:python nugroho$

Displaying Calculation Output of Python on Web (customizing)

After success displaying output using python based web, it's normal if we want to display the value of function with a range of variable.

The code below will create web page hosted by Python 2.7 BaseHttpServer module. The page contains list of value of function sin(x)+x**2 at -7<x<7



from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import sys,parser
from math import *
import numpy as np

class Handler(BaseHTTPRequestHandler):
def do_GET(self):
n=10
x1=-7
x2=7
y = 'sin(x)+x**2'
z = parser.expr(y).compile()

self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()

self.wfile.write("Hi Folks, Aravir here")
self.wfile.write("")
self.wfile.write("Hi Folks, Aravir here
")
self.wfile.write("
")
for i in (range(x1,x2)):
x=i
self.wfile.write("The value of ")
self.wfile.write(y )
self.wfile.write(" on x = " )
self.wfile.write(x)
self.wfile.write(" is " )
self.wfile.write(eval(z) )
self.wfile.write("
")

self.wfile.write("")

if __name__=="__main__":
try:
server = HTTPServer(("", 8080), Handler)
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()


Here the result in Safari, Mac OS X Lion

From python

Displaying Calculation Output of Python Script to Web Page using Python-based Web Server

It'll be convenient if we could displaying output from our Python code to web page.

To convert calculation output of Python script to web page we need BaseHTTPServer, a Python-based web server. With it, we could write any python code and display it in no time. It has advantage in form of simplicity, we don't need php to convert our result or typing it to static html code, we just used python alone (it's possible to write html and php code on python though).
This code below will display python script calculating value of a function (sin(x)+x^2) to web page. As it behave as web server too, we don't need apache or other web server to broadcast it.

Here the code. It's written in Python 2.7 on Mac OS X Lion with numpy module and sys, parser and basehttpserver built in module.

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import sys,parser
from math import *
import numpy as np

class Handler(BaseHTTPRequestHandler):
def do_GET(self):
n=10
x=7
y = 'sin(x)+x**2'
z = parser.expr(y).compile()

self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()

self.wfile.write("Hi Folks, Aravir here")
self.wfile.write("")
self.wfile.write("Hi Folks, Aravir here
")
self.wfile.write("
")
self.wfile.write("The value of ")
self.wfile.write(y )
self.wfile.write(" on x = " )
self.wfile.write(x)
self.wfile.write(" is " )
self.wfile.write(eval(z) )

self.wfile.write("")

if __name__=="__main__":
try:
server = HTTPServer(("", 8080), Handler)
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()

Access it using web browser in localhost:8080 from your computer running code above, or :8080 and get this


From python

Creating Web Page using Python including its Webserver (basehttpserver module)

It's possible to create web page using Python, even self hosted it using Python built in webserver (basehttpserver module)

Here the code. It'll create web server with port 8080 and if it's accessed, it'll show a page. In the code below, page showed for us is just plain text "magic content goes here". I am planning to investigate this self.wfile.write behavior.




from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()

self.wfile.write("magic content goes here")

if __name__=="__main__":
try:
server = HTTPServer(("", 8080), Handler)
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()

Access with browser in address localhost:8080 or <whatever your ip address>:8080 and get this

From python

323f (5) amp (1) android (12) apple (7) arduino (18) art (1) assembler (21) astina (4) ATTiny (23) blackberry (4) camera (3) canon (2) cerita (2) computer (106) crazyness (11) debian (1) delphi (39) diary (286) flash (8) fortran (6) freebsd (6) google apps script (8) guitar (2) HTML5 (10) IFTTT (7) Instagram (7) internet (12) iOS (5) iPad (6) iPhone (5) java (1) javascript (1) keynote (2) LaTeX (6) lazarus (1) linux (29) lion (15) mac (28) macbook air (8) macbook pro (3) macOS (1) Math (3) mathematica (1) maverick (6) mazda (4) microcontroler (35) mountain lion (2) music (37) netbook (1) nugnux (6) os x (36) php (1) Physicist (29) Picture (3) programming (189) Python (109) S2 (13) software (7) Soliloquy (125) Ubuntu (5) unix (4) Video (8) wayang (3) yosemite (3)