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
Thursday, December 29, 2011
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
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.
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)
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.
add this line before exit 0
$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
aravir@aravir-VirtualBox:~$ mountIt's like the vbox is successfully mounted TWO times, however:
/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:~$
- 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
aravir@aravir-VirtualBox:~$ sudo vi /etc/rc.local
mount -t vboxsf vbox /home/aravir/vbox
so the /etc/rc.local become like this
#!/bin/sh -eRestart the machine and voila, its success
#
# 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
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.
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.
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
Here's the screenshot
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(
"&", "&").replace(">", ">").replace("<", "<")
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()
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
Execute it
input
Execute it
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
Here the result in Safari, Mac OS X Lion
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.
:8080 and get this
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, HTTPServerAccess it using web browser in localhost:8080 from your computer running code above, or
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()
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.
Access with browser in address localhost:8080 or <whatever your ip address>:8080 and get this
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 |
Django ain't for This
While I'm searching for tutorial about creating simple static web page using Django, I surprised that i found almost nothing. There is Django documentation for it but I think it's too much; creating microblogger, forum, note, wiki, etc.
According what I found after surfed a while, Django isn't for this. I was suggestet to use basehttpserver instead.
Here what I found
"I have python scripts which provides output and I need to have this output on the web."
That is not what Django is for. What you want to do can be achieved with something as simple as this:
Tested with Python 2.6.4, accessed the server with Chrome browser.
..........
If you need a quick web server running and you don't want to mess with setting up apache or something similar, then Python can help. Python comes with a simple builtin HTTP server. With the help of this little HTTP server you can turn any directory in your system into your web server directory. The only thing you need to have installed is Python.
Practically speaking this is very useful to share files inside your local network. Implementing this tiny but hugely useful HTTP server is very simple, its just a single line command.
Assume that I would like to share my home directory
Open up a terminal and type:
That's it! Now your http server will start in port 8000. You will get the message:
If you on computer that is running server, you can also access it via:
If the directory has a file named index.html, that file will be served as the initial file. If there is no index.html, then the files in the directory will be listed.
If you wish to change the port that's used start the program via:
According what I found after surfed a while, Django isn't for this. I was suggestet to use basehttpserver instead.
Here what I found
"I have python scripts which provides output and I need to have this output on the web."
That is not what Django is for. What you want to do can be achieved with something as simple as this:
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServerObserve the self.wfile.write line. Whatever you write there ends up in the browser. If it matters, you can use self.path in the Handler to check which file was requested.
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()
Tested with Python 2.6.4, accessed the server with Chrome browser.
..........
If you need a quick web server running and you don't want to mess with setting up apache or something similar, then Python can help. Python comes with a simple builtin HTTP server. With the help of this little HTTP server you can turn any directory in your system into your web server directory. The only thing you need to have installed is Python.
Practically speaking this is very useful to share files inside your local network. Implementing this tiny but hugely useful HTTP server is very simple, its just a single line command.
Assume that I would like to share my home directory
Open up a terminal and type:
$ cd
$ python -m SimpleHTTPServer
That's it! Now your http server will start in port 8000. You will get the message:
Serving HTTP on 0.0.0.0 port 8000 ...Now open a browser and type the computer address like:
http://192.168.1.1:8000
If you on computer that is running server, you can also access it via:
http://127.0.0.1:8000
If the directory has a file named index.html, that file will be served as the initial file. If there is no index.html, then the files in the directory will be listed.
If you wish to change the port that's used start the program via:
$ python -m SimpleHTTPServer 8080
If you want to only serve on localhost you'll need to write a custom Python program such as:import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
HandlerClass = SimpleHTTPRequestHandler
ServerClass = BaseHTTPServer.HTTPServer
Protocol = "HTTP/1.0"
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8000
server_address = ('127.0.0.1', port)
HandlerClass.protocol_version = Protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()
Saturday, December 17, 2011
Get a List of Link of a Website using Php
It'll be convenient if we could grab all link on a website just like firefox add-on--DownThemAll, and put it in our pages.
Fortunately, PHP has fopen function we could use for it. Here the code. It'll get this blog source, search for link, and print to screen the result.
<?php
$url = 'http://aravir-rose.blogspot.com';
$f = @fopen($url,"r");
while( $buf = fgets($f,1024) )
{
$buf = fgets($f, 4096);
preg_match_all("/<\s*a\s+[^>]*href\s*=\s*[\"']?([^\"' >]+)[\"' >]/isU",$buf,$words);
for( $i = 0; $words[$i]; $i++ )
{
for( $j = 0; $words[$i][$j]; $j++ )
{
$cur_word = strtolower($words[$i][$j]);
print "$cur_word<br>";
}
}
}
?>
Here the screenshot
Fortunately, PHP has fopen function we could use for it. Here the code. It'll get this blog source, search for link, and print to screen the result.
<?php
$url = 'http://aravir-rose.blogspot.com';
$f = @fopen($url,"r");
while( $buf = fgets($f,1024) )
{
$buf = fgets($f, 4096);
preg_match_all("/<\s*a\s+[^>]*href\s*=\s*[\"']?([^\"' >]+)[\"' >]/isU",$buf,$words);
for( $i = 0; $words[$i]; $i++ )
{
for( $j = 0; $words[$i][$j]; $j++ )
{
$cur_word = strtolower($words[$i][$j]);
print "$cur_word<br>";
}
}
}
?>
Here the screenshot
From php |
LLVM-GCC on OS X Lion
I confused about GCC version brought by XCode 4.2 on OS X Lion, so I surfing and landing on several sites to find out what is this llvm version.
Here some result.
Llvm stand for low level virtual machine
The LLVM Project (llvm.org) is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them.
The llvm-gcc command is the LLVM C front end. It is a modified version of gcc that compiles C/ObjC programs into native objects, LLVM bitcode or LLVM assembly language, depending upon the options.
By default, llvm-gcc compiles to native objects just like GCC does. If the -emit-llvm and -c options are given then it will generate LLVM bitcode files instead. If -emit-llvm and -S are given, then it will generate LLVM assembly.
Being derived from the GNU Compiler Collection, llvm-gcc has many of gcc's features and accepts most of gcc's options. It handles a number of gcc's extensions to the C programming language. See the gcc documentation for details.
Clang vs GCC (GNU Compiler Collection)
Clang ( /ˈklæŋ/)[2] is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages. It uses the Low Level Virtual Machine (LLVM) as its back end, and Clang has been part of LLVM releases since LLVM 2.6.
Its goal is to offer a replacement to the GNU Compiler Collection (GCC). Development is sponsored by Apple. Clang is available under a free software license.
The Clang project includes the Clang front end and the Clang static analyzer among others.[3]
Pro's of GCC vs clang:
Pro's of clang vs GCC:
From forum (http://www.cocos2d-iphone.org/forum/topic/7923)
"Have you experienced any incompatibility between LLVM compiler and GCC compiler ?
I found one strange issue:
If you compile ParticleTests with GCC and if you try sub-test "issue 872", it works as expected: a particle system will emit particles.
But if you compile it with LLVM 1.5, you won't see any particle at all. I'm not sure what's the problem, but I'll investigate it a bit further.
I can only reproduce this bug on the simulator. It seems that this bug can't be reproduced on the devices.
I tested it both in Release & Debug mode using Xcode 3.2.3"
............
"A developer at Apple (guy working on LLVM) highly suggested moving away from GCC immediately. He says Apple is no longer fixing bugs in GCC, and in XCode 4 GCC-LLVM will be the default option.
I've noticed sometimes LLVM will not compile against really old libraries compiled with GCC (gives errors about built in runtime functions not found). I can fix that by using GCC-LLVM (gcc parser, LLVM code generator).
A few days ago I noticed a bug in my code that only showed up when using LLVM (but not GCC). I tracked it down to a non initialized local variable that was being read from, and GCC would always initialize to zero (even with O3 optimizations). Since the variable value should be undefined, LLVM was giving the correct behavior of using whatever was in that memory already (even though it's clearly not the desired result). I'd speculate something similar is going on with ParticleTests.
I did a quick test, and compiling Cocos2D with GCC-LLVM works correctly with issue 872."
Here some result.
Llvm stand for low level virtual machine
The LLVM Project (llvm.org) is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them.
The llvm-gcc command is the LLVM C front end. It is a modified version of gcc that compiles C/ObjC programs into native objects, LLVM bitcode or LLVM assembly language, depending upon the options.
By default, llvm-gcc compiles to native objects just like GCC does. If the -emit-llvm and -c options are given then it will generate LLVM bitcode files instead. If -emit-llvm and -S are given, then it will generate LLVM assembly.
Being derived from the GNU Compiler Collection, llvm-gcc has many of gcc's features and accepts most of gcc's options. It handles a number of gcc's extensions to the C programming language. See the gcc documentation for details.
Clang vs GCC (GNU Compiler Collection)
Clang ( /ˈklæŋ/)[2] is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages. It uses the Low Level Virtual Machine (LLVM) as its back end, and Clang has been part of LLVM releases since LLVM 2.6.
Its goal is to offer a replacement to the GNU Compiler Collection (GCC). Development is sponsored by Apple. Clang is available under a free software license.
The Clang project includes the Clang front end and the Clang static analyzer among others.[3]
Pro's of GCC vs clang:
- GCC supports languages that clang does not aim to, such as Java, Ada, FORTRAN, etc.
- GCC has a few C++'11 features that Clang does not yet support.
- GCC supports more targets than LLVM.
- GCC is popular and widely adopted.
- GCC does not require a C++ compiler to build it.
Pro's of clang vs GCC:
- The Clang ASTs and design are intended to be easily understandable by anyone who is familiar with the languages involved and who has a basic understanding of how a compiler works. GCC has a very old codebase which presents a steep learning curve to new developers.
- Clang is designed as an API from its inception, allowing it to be reused by source analysis tools, refactoring, IDEs (etc) as well as for code generation. GCC is built as a monolithic static compiler, which makes it extremely difficult to use as an API and integrate into other tools. Further, its historic design and current policy makes it difficult to decouple the front-end from the rest of the compiler.
- Various GCC design decisions make it very difficult to reuse: its build system is difficult to modify, you can't link multiple targets into one binary, you can't link multiple front-ends into one binary, it uses a custom garbage collector, uses global variables extensively, is not reentrant or multi-threadable, etc. Clang has none of these problems.
- For every token, clang tracks information about where it was written and where it was ultimately expanded into if it was involved in a macro. GCC does not track information about macro instantiations when parsing source code. This makes it very difficult for source rewriting tools (e.g. for refactoring) to work in the presence of (even simple) macros.
- Clang does not implicitly simplify code as it parses it like GCC does. Doing so causes many problems for source analysis tools: as one simple example, if you write "x-x" in your source code, the GCC AST will contain "0", with no mention of 'x'. This is extremely bad for a refactoring tool that wants to rename 'x'.
- Clang can serialize its AST out to disk and read it back into another program, which is useful for whole program analysis. GCC does not have this. GCC's PCH mechanism (which is just a dump of the compiler memory image) is related, but is architecturally only able to read the dump back into the exact same executable as the one that produced it (it is not a structured format).
- Clang is much faster and uses far less memory than GCC.
- Clang aims to provide extremely clear and concise diagnostics (error and warning messages), and includes support for expressive diagnostics. GCC's warnings are sometimes acceptable, but are often confusing and it does not support expressive diagnostics. Clang also preserves typedefs in diagnostics consistently, showing macro expansions and many other features.
- GCC is licensed under the GPL license. clang uses a BSD license, which allows it to be used by projects that do not themselves want to be GPL.
- Clang inherits a number of features from its use of LLVM as a backend, including support for a bytecode representation for intermediate code, pluggable optimizers, link-time optimization support, Just-In-Time compilation, ability to link in multiple code generators, etc.
- Clang's support for C++ is more compliant than GCC's in many ways (e.g. conformant two phase name lookup).
From forum (http://www.cocos2d-iphone.org/forum/topic/7923)
"Have you experienced any incompatibility between LLVM compiler and GCC compiler ?
I found one strange issue:
If you compile ParticleTests with GCC and if you try sub-test "issue 872", it works as expected: a particle system will emit particles.
But if you compile it with LLVM 1.5, you won't see any particle at all. I'm not sure what's the problem, but I'll investigate it a bit further.
I can only reproduce this bug on the simulator. It seems that this bug can't be reproduced on the devices.
I tested it both in Release & Debug mode using Xcode 3.2.3"
............
"A developer at Apple (guy working on LLVM) highly suggested moving away from GCC immediately. He says Apple is no longer fixing bugs in GCC, and in XCode 4 GCC-LLVM will be the default option.
I've noticed sometimes LLVM will not compile against really old libraries compiled with GCC (gives errors about built in runtime functions not found). I can fix that by using GCC-LLVM (gcc parser, LLVM code generator).
A few days ago I noticed a bug in my code that only showed up when using LLVM (but not GCC). I tracked it down to a non initialized local variable that was being read from, and GCC would always initialize to zero (even with O3 optimizations). Since the variable value should be undefined, LLVM was giving the correct behavior of using whatever was in that memory already (even though it's clearly not the desired result). I'd speculate something similar is going on with ParticleTests.
I did a quick test, and compiling Cocos2D with GCC-LLVM works correctly with issue 872."
Robert Cross Edge Detection using Python on OS X Lion
The code below will convert an image to grayscale, get its pixel value and save it in array. With its pixel value in array, it's easy to apply Robert Cross Edge detect operation.
This operator is simpler than Sobel's.
Image source
Gray-scaled image
Edge-detected image
This operator is simpler than Sobel's.
print 'Program Python Deteksi Tepi'Here, the result
print 'oleh Nugroho Adi Pramono'
'''Komentar diantara tiga-tanda petik tidak akan dibaca
oleh python'''
#komentar setelah tanda pagar juga tidak di baca oleh python
import Image #memanggil modul untuk olah gambar
import os,sys #memanggil modul untuk mengakses file
import numpy as np #memanggil modul untuk operasi maatematika matrik/array
gb = Image.open('../gambar.jpg') #memasukkan gambar ke variabel gb
print 'format awal: ' ,gb.format, "%dx%d" % gb.size, gb.mode
print 'konversi ke grayscale'
gbw = gb.convert("L")
gbw.save('gambarBW.jpg') #simpan hasil konversi ddg nama gambarBW.jpg
gbw = Image.open('gambarBW.jpg') #masukkan gambar grayscale hasil konversi ke variabel gbw
print 'format: ',gbw.format, "%dx%d" % gbw.size, gbw.mode
ukuran=gbw.size #mengambil nilai resolusi gambar
'''buat array r dan s berukuran sama dengan ukuran gambar'''
r=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
s=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
print 'Mengambil nilai piksel, masukkan ke array r'
for i in range (ukuran[0]):
for j in range (ukuran[1]):
r[i,j]=gbw.getpixel((i,j))
print 'Deteksi tepi menggunakan operator Robert'
gx=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
gy=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
g=np.zeros((ukuran[0],ukuran[1]),dtype=np.float)
for i in range (ukuran[0]-1):
for j in range (ukuran[1]-1):
gx[i,j]=r[i,j]-r[i+1,j+1]
gy[i,j]=r[i,j+1]-r[i+1,j]
g=np.sqrt(np.power(gx,2)+np.power(gy,2))
print 'Atur threshold'
for i in range (ukuran[0]-1):
for j in range (ukuran[1]-1):
if (g[i,j]<11):
s[i,j]=0
else:
s[i,j]=255
print 'update gambar'
for i in range (ukuran[0]):
for j in range (ukuran[1]):
gbw.putpixel((i,j),s[i,j]) #letakkan pixel yang telah dimodifikasi ke posisi i,j
print 'Menyimpan gambar'
gbw.save('gambarRobert.jpg') #simpan dengan nama gambarRobert.jpg
print 'Gambar tersimpan'
print 'Program Selesai'
Image source
From python |
Gray-scaled image
From python |
Edge-detected image
From python |
Vertical Sobel Operator Manual Edge Detection using Python and PIL
This python code is used to detect the edge, of course, using Sobel Operator. The 'manual' word in this post title means I apply it manually as scipy python module has it capability. This code convert a jpeg image to grayscale and then detect its edge.
Here the code, I used vertical detection only as my horizontal code result is scrambling. I will update it as soon as all code success
Image source
Gray-scaled image
Edge-detected image
Here the code, I used vertical detection only as my horizontal code result is scrambling. I will update it as soon as all code success
print 'Program Python Deteksi Tepi'And here the result
print 'oleh Nugroho Adi Pramono'
'''Komentar diantara tiga-tanda petik tidak akan dibaca
oleh python'''
#komentar setelah tanda pagar juga tidak di baca oleh python
import Image #memanggil modul untuk olah gambar
import os,sys #memanggil modul untuk mengakses file
import numpy as np #memanggil modul untuk operasi maatematika matrik/array
gb = Image.open('../gambar.jpg') #memasukkan gambar ke variabel gb
print 'format awal: ' ,gb.format, "%dx%d" % gb.size, gb.mode
print 'konversi ke grayscale'
gbw = gb.convert("L")
gbw.save('gambarBW.jpg') #simpan hasil konversi ddg nama gambarBW.jpg
gbw = Image.open('gambarBW.jpg') #masukkan gambar grayscale hasil konversi ke variabel gbw
print 'format: ',gbw.format, "%dx%d" % gbw.size, gbw.mode
ukuran=gbw.size #mengambil nilai resolusi gambar
'''buat array r dan s berukuran sama dengan ukuran gambar'''
r=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
s=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
print 'Mengambil nilai piksel, masukkan ke array r'
for i in range (ukuran[0]):
for j in range (ukuran[1]):
r[i,j]=gbw.getpixel((i,j))
print 'Deteksi tepi menggunakan operator Sobel'
gx=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
gy=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
g=np.zeros((ukuran[0],ukuran[1]),dtype=np.float)
for i in range (1,ukuran[0]-1):
for j in range (1,ukuran[1]-1):
gy[i,j]=r[i+1,j-1]+2*r[i+1,j]+r[i+1,j+1]-r[i-1,j-1]-2*r[i-1,j]-r[i-1,j+1]
print 'Atur threshold'
print 'update gambar Vertikal'
for i in range (ukuran[0]):
for j in range (ukuran[1]):
gbw.putpixel((i,j),np.abs(gy[i,j])) #letakkan pixel yang telah dimodifikasi ke posisi i,j
print 'Menyimpan gambar Vertikal'
gbw.save('gambarSobelVertikal.jpg') #simpan dengan nama gambarSobelVertikal.jpg
print 'Gambar tersimpan'
print 'Program Selesai'
Image source
From python |
Gray-scaled image
From python |
Edge-detected image
From python |
JPEG Support for Python 2.7's PIL Module on OS X Lion
My PIL module refuse to process jpeg image. It says that there is no decoder jpeg on my system. It's no good since I want to process that kind of file using PIL in future, and my older iPhoto picture on my 13 inch MacBook Pro is generally in jpeg format too.
Here the snapshot
Here the snapshot
Nugrohos-MacBook-Pro:olah gambar nugroho$ python olahgambar.py
Program Image Enchancement
Oleh Nugroho Adi Pramono
275514
===========================
format awal: JPEG 2448x3264 RGB
konversi ke grayscale
Traceback (most recent call last):
File "olahgambar.py", line 14, in
gbw = gb.convert("L")
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/Image.py", line 679, in convert
self.load()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/ImageFile.py", line 189, in load
d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL/Image.py", line 385, in _getdecoder
raise IOError("decoder %s not available" % decoder_name)
IOError: decoder jpeg not available
Nugrohos-MacBook-Pro:olah gambar nugroho$
So I googling for it and found libjpeg at http://www.ijg.org/files/, download, exctract and install it using magic UNIX words ./configure, make, make install
Nugrohos-MacBook-Pro:~ nugroho$ cd Downloads/jpeg-8c/
Nugrohos-MacBook-Pro:jpeg-8c nugroho$ ./configure
Nugrohos-MacBook-Pro:jpeg-8c nugroho$ make
Nugrohos-MacBook-Pro:jpeg-8c nugroho$ make test
rm -f testout*
./djpeg -dct int -ppm -outfile testout.ppm ./testorig.jpg
./djpeg -dct int -bmp -colors 256 -outfile testout.bmp ./testorig.jpg
./cjpeg -dct int -outfile testout.jpg ./testimg.ppm
./djpeg -dct int -ppm -outfile testoutp.ppm ./testprog.jpg
./cjpeg -dct int -progressive -opt -outfile testoutp.jpg ./testimg.ppm
./jpegtran -outfile testoutt.jpg ./testprog.jpg
cmp ./testimg.ppm testout.ppm
cmp ./testimg.bmp testout.bmp
cmp ./testimg.jpg testout.jpg
cmp ./testimg.ppm testoutp.ppm
cmp ./testimgp.jpg testoutp.jpg
cmp ./testorig.jpg testoutt.jpg
Nugrohos-MacBook-Pro:jpeg-8c nugroho$ sudo make install
reinstall PIL
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform darwin 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
--------------------------------------------------------------------
--- TKINTER support available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
Friday, December 16, 2011
Ubuntu 11.10 Oneiric Ocelot On OS X Lion's VBox (NAT and Host-Guest Sharing Folder)
After installing Ubuntu 11.10 on Mac OS X Lion using VirtualBox, here first impression of Oneiric Ocelot
There is dock at left, like on Mac.
Network is works flawlessy, I can surf internet using firefox, its NAT configuration come by default while installing it.
Firefox run at fullscreen(I mean ubuntu screen), just like Lion's or iPad's Safari (Lion's version of firefox didn't auto fullscreen yet). We can windowed-mode-ed it by hovering mouse at top edge of screen, it'll show menu-bar too
Hover mouse at top
It's windowed firefox
If we click dash home, we'll got launchpad like (just like iPad or Lion's launchpad). At second tab, there's apps available to download.
To access shared folder on Lion named vbox, I opened terminal by clicking Dash home and type terminal on search box
First create directory
mount shared vbox on lion using this command
at screenshot you know it generate error because ubuntu did'nt recognize vboxsf filesystem. To introduce it, guest addition must be installed.
Failed. Guest addition need root privilege.
After guest addition installed and the system restarted (it's support full screen on my Macbook monitor now), retype the command above, and done
Vbox directory before mounted
After mounted
There is dock at left, like on Mac.
Network is works flawlessy, I can surf internet using firefox, its NAT configuration come by default while installing it.
From Oneiric Ocelot |
Firefox run at fullscreen(I mean ubuntu screen), just like Lion's or iPad's Safari (Lion's version of firefox didn't auto fullscreen yet). We can windowed-mode-ed it by hovering mouse at top edge of screen, it'll show menu-bar too
Hover mouse at top
From Oneiric Ocelot |
From Oneiric Ocelot |
From Oneiric Ocelot |
To access shared folder on Lion named vbox, I opened terminal by clicking Dash home and type terminal on search box
From Oneiric Ocelot |
First create directory
aravir@aravir-VirtualBox:~$mkdir vbox
mount shared vbox on lion using this command
aravir@aravir-VirtualBox:~$sudo mount -t vboxsf vbox vbox
at screenshot you know it generate error because ubuntu did'nt recognize vboxsf filesystem. To introduce it, guest addition must be installed.
From Oneiric Ocelot |
From Oneiric Ocelot |
From Oneiric Ocelot |
From Oneiric Ocelot |
aravir@aravir-VirtualBox:~$cd /Media/VBOXADDITIONS_4.1.6_74713
$sudo ./VBoxLinuxAdditions.run
After guest addition installed and the system restarted (it's support full screen on my Macbook monitor now), retype the command above, and done
Vbox directory before mounted
From Oneiric Ocelot |
From Oneiric Ocelot |
Thursday, December 15, 2011
Installing Python-2.7's Imaging Library Module on OS X Lion
PIL, as its name suggest, is an imaging library for python. I used PIL to get every pixel of an image as 2x2 array information. With that I could modify it with many possibilities; edge detection, black and white transformation, log transformation, creating watermark, etc.
{update: I install this PIL module on my OS X El Capitan too, :), and easier }
Installing PIL is an easy task, if we have its prerequities installed. Just download it and extract it and then install using this command
I have gcc 4.2 from Xcode4.2, which actually llvm-gcc. My existing gcc is gcc-4.6.2 so I cheated… I created symlink named gcc-4.2 on /usr/bin pointing /usr/local/bin/gcc
Still error, :(
Hm, maybe if I'm linking /usr/bin/gcc-4.2 to /usr/bin/llvm-gcc-4-2; it's gcc-4.2 after all, if we ignore llvm (don't know what is it stand for). It doesn't hurt if I'm trying, so..
Wow, success
Well, no need gcc4.6.2 afterall, just create symbolic link of llvm-gcc-4.2 named gcc-4.2,:)
test
{update: I install this PIL module on my OS X El Capitan too, :), and easier }
Installing PIL is an easy task, if we have its prerequities installed. Just download it and extract it and then install using this command
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$ python setup.py installOops, it is failed to install, it tell me that there is no gcc-4.2 on my machine, and that's true. I've modified my /usr/bin/gcc to point /usr/local/bin/gcc.
running install
running build
running build_py
creating build
creating build/lib.macosx-10.6-intel-2.7
...
unable to execute gcc-4.2: No such file or directory
error: command 'gcc-4.2' failed with exit status 1
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$
I have gcc 4.2 from Xcode4.2, which actually llvm-gcc. My existing gcc is gcc-4.6.2 so I cheated… I created symlink named gcc-4.2 on /usr/bin pointing /usr/local/bin/gcc
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$ ln -s /usr/local/bin/gcc /usr/bin/gcc-4.2
ln: /usr/bin/gcc-4.2: Permission denied
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$ sudo ln -s /usr/local/bin/gcc /usr/bin/gcc-4.2
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$
Still error, :(
gcc-4.2: error: x86_64: No such file or directory
gcc-4.2: error: unrecognized option ‘-arch’
gcc-4.2: error: unrecognized option ‘-arch’
error: command 'gcc-4.2' failed with exit status 1
Hm, maybe if I'm linking /usr/bin/gcc-4.2 to /usr/bin/llvm-gcc-4-2; it's gcc-4.2 after all, if we ignore llvm (don't know what is it stand for). It doesn't hurt if I'm trying, so..
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$ sudo rm /usr/bin/gcc-4.2
Password:
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$ sudo ln -s /usr/bin/llvm-gcc-4.2 /usr/bin/gcc-4.2
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$ python setup.py install
running install
running build
running build_py
running build_ext
-
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform darwin 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
--------------------------------------------------------------------
--- TKINTER support available
*** JPEG support not available
--- ZLIB (PNG/ZIP) support available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
creating /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/PIL.pth
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$
Wow, success
Well, no need gcc4.6.2 afterall, just create symbolic link of llvm-gcc-4.2 named gcc-4.2,:)
test
Nugrohos-MacBook-Pro:Imaging-1.1.7 nugroho$ python
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import image
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named image
>>> import Image
>>>
OK
Install GCC 4.6.2 on OS X Lion (success)
Still failed, for not able to access gcc-4.6.2 automatically (have to access ~/gcc462/bin), I install binary GCC from HPC. So I'm extracted gcc-lion.tar.gz. For my surprise, it's extracted with some hierarchy like usr/local/bin, usr/local/include, … and I supposed to copy it to root folder. In that case, my Xcode4.2's gcc would still intact because it's in /usr/bin .
I wonder if all gcc compilation result'll stored to /usr/local if we didn't pass any parameter, so I checked my /usr/local/bin directory
There is gcc in it. Is in gcc-4.2?
Yes, it is gcc-4.6.2? So, I replace gcc symlink previously pointed to /usr/bin/llvm-gcc to /usr/local/bin/gcc
I wonder if all gcc compilation result'll stored to /usr/local if we didn't pass any parameter, so I checked my /usr/local/bin directory
Nugrohos-MacBook-Pro:/ nugroho$ cd usr/local/bin/
Nugrohos-MacBook-Pro:bin nugroho$ ls
2to3gfortran python-config smtpd.py
2to3-2.7 idle python2.7 smtpd2.7.py
c++ idle2.7 python2.7-32 x86_64-apple-darwin11.2.0-c++
cpp jcf-dump python2.7-config x86_64-apple-darwin11.2.0-g++
g++ pydoc pythonw x86_64-apple-darwin11.2.0-gcc
gcc pydoc2.7 pythonw-32 x86_64-apple-darwin11.2.0-gcc-4.6.2
gcj python pythonw2.7 x86_64-apple-darwin11.2.0-gcj
gcov python-32 pythonw2.7-32 x86_64-apple-darwin11.2.0-gfortran
There is gcc in it. Is in gcc-4.2?
Nugrohos-MacBook-Pro:bin nugroho$ ./gcc --version
gcc (GCC) 4.6.2
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Yes, it is gcc-4.6.2? So, I replace gcc symlink previously pointed to /usr/bin/llvm-gcc to /usr/local/bin/gcc
Nugrohos-MacBook-Pro:bin nugroho$ which gccHooray, HPC binary is left untouched, :)
/usr/bin/gcc
Nugrohos-MacBook-Pro:bin nugroho$ which llvm-gcc
/usr/bin/llvm-gcc
Nugrohos-MacBook-Pro:bin nugroho$ sudo ln -s gc
gcc gcj gcov
Nugrohos-MacBook-Pro:bin nugroho$ sudo ln -s gcc /usr/bin/gcc
Password:
ln: /usr/bin/gcc: File exists
Nugrohos-MacBook-Pro:bin nugroho$ sudo mv /usr/bin/gcc /usr/bin/gccOLD
Nugrohos-MacBook-Pro:bin nugroho$ sudo ln -s gcc /usr/bin/gcc
Nugrohos-MacBook-Pro:bin nugroho$ gcc
gcc: fatal error: no input files
compilation terminated.
Nugrohos-MacBook-Pro:bin nugroho$ gcc --version
gcc (GCC) 4.6.2
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Nugrohos-MacBook-Pro:bin nugroho$
Ubuntu 11.10 Oneiric Ocelot on OS X Lion via Virtual Box
It's long time since my MacBook Pro had ubuntu installed. Curious about new release of ubuntu, I decided to download .iso file via torrent network and installed it on my Mac via VirtualBox as I don't want to dual booting my Mac again (the way I did several years ago).
I downloaded 64-bit version of Oneiric Ocelot and it's installed without problem.
From screenshot below, we know ubuntu team has improved their installation method. While the system is busy copying file, we're prompted to fill our detail of instalation; keyboard, time zone, username. Such an efficient method.
I downloaded 64-bit version of Oneiric Ocelot and it's installed without problem.
From screenshot below, we know ubuntu team has improved their installation method. While the system is busy copying file, we're prompted to fill our detail of instalation; keyboard, time zone, username. Such an efficient method.
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
Wednesday, December 14, 2011
Installing GCC 4.6.2 on OSX Lion
After searching how to's, compiling from source, installing Snow Leopard version of Xcode (on its DVD) and installing light alternate gcc 4.2 version without success (or success but not satisfied), I installed Xcode 4.2 on my OS X Lion. Alas, Apple ship its own GCC compiler, llvm-gcc, instead GCC. So I download tar.gz version of GCC-4.6.2 from GNU and try to install it
check to know what dependencies I don't have by typing
the result is
So, I download it mpc (http://www.multiprecision.org/index.php?prog=mpc&page=download), mpfr(http://www.mpfr.org/mpfr-current/#download) and gmp(http://gmplib.org/). I don't know why gmp's download always ended by error, duh. Trying to 'torrenting' it via burnbit but still get error. I was forced to use ftp connection via Finder (Command-K) and done. Installing these dependencies is easy task, just unzip/untar these archive, cd to its directory and type three magical UNIX installation words.
OK, now it's GCC time. Extract GCC zipped file, cd to its directory
You can add make command to make -j 4 if you have multicore processor and want to make process processed in parallel. "Make" process is very long time process.
Look at gnumake, cc1 , sh , and llvm-gcc-4.2 processes. They're processed in parallel.
OMG, after long awaiting time, I got an error, something about libgfortran. (update: it's succeed indeed despite of error, it actually compiled gcc but not in Lion path, so Lion's still use llvm-gcc version , I post the update here) After a minute of thinking, I decide to compile just C for now, and build on separate directory and output-ed it on my home directory
These command will build GCC on 'build' directory and store the compilation result on gcc462 directory on my home folder. If you are interested in building only a limited set of languages, just like me, you could also specify this option in the configure line. For example if you need only C, C++ and Fortran just append this to the above line: --enable-languages=c,c++,fortran
From Blogsy Photos |
From Blogsy Photos |
./configure
the result is
…
configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+.
…
So, I download it mpc (http://www.multiprecision.org/index.php?prog=mpc&page=download), mpfr(http://www.mpfr.org/mpfr-current/#download) and gmp(http://gmplib.org/). I don't know why gmp's download always ended by error, duh. Trying to 'torrenting' it via burnbit but still get error. I was forced to use ftp connection via Finder (Command-K) and done. Installing these dependencies is easy task, just unzip/untar these archive, cd to its directory and type three magical UNIX installation words.
$./configure
$make
$sudo make install
OK, now it's GCC time. Extract GCC zipped file, cd to its directory
./configure
make
sudo make install
You can add make command to make -j 4 if you have multicore processor and want to make process processed in parallel. "Make" process is very long time process.
Look at gnumake, cc1 , sh , and llvm-gcc-4.2 processes. They're processed in parallel.
From Blogsy Photos |
From Blogsy Photos |
From Blogsy Photos |
OMG, after long awaiting time, I got an error, something about libgfortran. (update: it's succeed indeed despite of error, it actually compiled gcc but not in Lion path, so Lion's still use llvm-gcc version , I post the update here) After a minute of thinking, I decide to compile just C for now, and build on separate directory and output-ed it on my home directory
Nugrohos-MacBook-Pro:gcc-4.6.2 nugroho$ mkdir build
Nugrohos-MacBook-Pro:gcc-4.6.2 nugroho$ cd build
Nugrohos-MacBook-Pro:build nugroho$ ../configure --prefix=$HOME/gcc462 --enable-languages=c
These command will build GCC on 'build' directory and store the compilation result on gcc462 directory on my home folder. If you are interested in building only a limited set of languages, just like me, you could also specify this option in the configure line. For example if you need only C, C++ and Fortran just append this to the above line: --enable-languages=c,c++,fortran
Subscribe to:
Posts (Atom)
My sky is high, blue, bright and silent.
Nugroho's (almost like junk) blog
By: Nugroho Adi Pramono
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)