วันพฤหัสบดีที่ 5 ธันวาคม พ.ศ. 2556

Network unmanaged

ในบางครั้ง อยู่ดีๆ การ์ดแลนของเราก็ขึ้น network unmanaged ขึ้นมา เนื่องจากด้่วยสาเหตุใดก็ไม่ทราบ

ในครั้งนี้ปัญหาเกิดจาก ตัว Gnome ไม่มีสิทธิ์เข้าไปแก้ไขไฟล์ /etc/network/interface เนื่องจากในครั้งล่าสุด เราอาจจะ update linux ไปทำให้ไฟล์ดังกล่าวถูกแก้โดย root

ในวันนี้ได้ทำการแก้ไขปัญหา โดยเข้าไป disable การ auto DHCP ใน /etc/network/interface

โดย vim  /etc/network/interfaces และแก้ไขดังนี้

# The primary network interface
allow-hotplug eth0
# iface eth0 inet dhcp

จากนั้น รีสตาร์ท เน็ตเวิร์ค

sudo service network-manager restart
Read more

วันพฤหัสบดีที่ 13 มิถุนายน พ.ศ. 2556

Installation pydoop and happybase on python3

Hi everybody.

Now I will describe how to install pydoop (version 0.9.1) and happybase (0.6) on python3.x

What is pydoop ? >> pydoop is python api for MapReduce and HDFS. you can googling for more details.
What is happybase ? >> happybase is python api for hbase. as same above, googling for more details.

Why cannot install pydoop and happybase directly to python3? >> For reason is both api are implemented on python 2.x cannot install directly to python3

ok we will know about problem. Start to install.

- Install Hadoop, You can see this article.

- Install libboost. (get install by $ sudo aptitude install libboost-python-dev)

- Create python virtual environment. You can see this article (Thai Language)

- Set Environment path by add these line to end of .bashrc file. ($ vim .bashrc)

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HADOOP_HOME="/usr/local/hadoop"
export HADOOP_VERSION=1.0.4

- Reset Shell or $ source .bashrc
- Active your virtual environment
$ source [your virtual environment]/bin/active

-Install pydoop
$ pip install pydoop

If you get error "SyntaxError: invalid syntax" don't worry conern it. You must convert all 2.x python code to 3.x python code.

Run the script to convert all .py files (2.x python code) to 3.x python code. (Put the script in pydoop directory, pydoop should be in /tmp/pip-build-xxx-xxxx/pydoop)

After run the script finish type pip again.

$ pip install pydoop

pydoop installation successful.

-Install happybase
$ pip install happybase

You will get error same as pydoop installation. You can convert all .py 2 to 3 same as pydoop.
There are 2 path to convert /tmp/pip-build-xxx-xxxx/happybase and /tmp/pip-build-xxx-xxxx/thrift
If you convert every .py in 2 above directory. you will get successful.










Read more

How to convert python2 to python3

Hi every body.
It just simply to convert python2 to python3. You can convert by using the command name "2to3" that give in python3.x. to convert

If you want to convert example.py (Implenment on python2.x) type bellow.

$ python3
>>> 2to3 -w example.py

-w option is to replace the converted code to original code.

So if you want to convert all .py in folder. You can to shell script to do it. That is bellow

  #!/bin/sh
  for i in $( find . -name "*.py");
  do
  echo "start 2to3 $i";
  2to3 -w $i
  done;


Thank for P'boat for coding ^^
Read more

วันพุธที่ 5 มิถุนายน พ.ศ. 2556

Prepare environment for python programming

สวัสดีครับ วันนี้ผมจะขอมาเขียนในหัวข้อการเตรียม Virtual Environment(venv) สำหรับการเขียนภาษา python

คำถาม: venv คืออะไร ดีอย่างไร จำเป็นต้องทำหรือไม่ ?

คำตอบ: venv เป็นการจำลองสภาพการทำงานในการเขียนภาษา python ครับ ขอยกตัวอย่าง สมมุติผมสร้าง venv ขึ้นมาใหม่และได้ลง python3.3 และลง framework pyramid1.4 หากระบบได้ทำการอัพเกรดเป็น python3.4 ไปแล้ว งานของเราที่อยู่ใน venv ก็ยังคงใช้ python3.3 และ pyramid1.4 เช่นเดิม เนื่องจากงานของเราได้สร้างไว้ใน venv ที่เราได้สร้างขึ้นมา สำหรับข้อดีคือ หาก library ใหม่ได้ถอนชุดคำสั่งเก่าบางคำสั่งออกไป จะทำให้เราสามารถใช้งานlibrary นั้นต่อไปได้(เนื่องจากอยู่ใน venv ที่ได้สร้างไว้แล้ว)

$ pyvenv-3.3 pyramid/pyramid-1.4
#หากใช้ python ก่อนหน้าเวอร์ชั่น3.3 จะไม่มีคำสั่ง pyvenv-3.3 (Python Virtual Environment 3.3 ) โดยที่คำสั่งนี้จะทำการสร้าง Virtual Environment ใน Directory pyramid/pyramid1.4

$ source pyramid/pyramid-1.4/bin/activate
# ทำการเปิดใช้ venv นี้ หากต้องการยกเลิกการใช้งาน venv ต้องสั่ง deactivate
# source มีค่าเท่ากับ . เอาไว้สั่ง Shell Script ให้ทำงาน (activate เป็น Shell Script)

หลังจากนี้จะเป็นการติดต้ัง api ต่างๆ เช่น pyramid api ซึ่งเป็น Web framework api

$ curl http://python-distribute.org/distribute_setup.py
# Download Script สำหรับติดตั้งปลั๊กอินเพิ่มเติม โดย distribute_setup.py ทำให้ venv มีคำสั่งสำหรับ install package อื่น (คำสั่ง easy_install)

$ python distribute_setup.py
# Run Script นี้แล้วจะสามารถทำให้ใช้คำสั่ง easy_install ได้

$ easy_install-3.3 pip
# ทำการติดตั้ง python install package ไว้สำหรับติดตั้ง python plugin ต่างๆ
# สามารถใช้ easy_install ติดตั้ง python plugin ได้เช่นกัน แต่ว่า easy_install เมื่อทำการติดตั้งไปแล้ว
จะไม่สามารถถอนการติดตั้งได้ คำสั่ง pip (python install package) เป็นคำสั่งใหม่กว่า หาก plugin มีปัญหา
สามารถถอนการติดตั้งได้

$ pip install pyramid
# ติดตั้ง pyramid framework ซึ่งเป็น framework สำหรับช่วยพัฒนาเว็บ ติดตามรายละเอียดเพิ่มเติมที่ http://www.pylonsproject.org/

$ pcreate -s starter myexample
# สร้าง Project ชื่อ myexample

$ python setup.py develop
คำสั่งนี้จะทำการติดตั้งโปรเจคที่ได้สร้างขึ้น เราจำเป็นต้องใส่คำสั่ง develop หากการติดตั้งของเราอยู่ในกระบวนการพัฒนาอยู่ แต่หากเมื่อนำไปใช้จริง ให้ใส่คำว่า install แทน develop เนื่องจาก option install นั้นจะทำการ Copy Source code จาก current directory ไปยัง main directory ซึ่งหากเราใช้ virtual env ก็จะเข้าไปอยู่ใน env นั้น ทำให้เมื่อเราเปลียนแปลง source code ใน Current directory จะทำให้ไม่มีผลต่อโปรแกรมที่รัน เพราะว่ามันจะหา package หลักจากในตัว env ก่อนซึ่งเราก็ได้ติดตั้งลงไปแล้ว แต่ถ้าใช้ develop มันก็สร้างเพียงแค่ link ไปยัง Current directory
หากเราทำการติดตั้งลงไปแล้วด้วย install เราสามารถ uninstall ได้ แล้วสั่ง develop ใหม่ได้

$ cd myexample
# สามารถเข้าไปดู directory ที่สร้างได้

$ git init
# Set as config as pydev


หากต้องการรันโปรเจคที่ได้สร้างขึ้นมา ก็ให้ใช้คำสั่ง
$ pserve --reload development.ini

โดยคำสั่งนี้จะทำการจำลอง server ขึ้นมาครับ ส่วนตัวเลือก --reload นั้นมีไว้สำหรับเมื่อเราเปลี่ยนแปลงไฟล์ใดๆ ที่ใช้ในการเขียน มันจะทำการ reload server ให้ใหม่ครับ

สุดท้ายนี้ต้องขอบคุณพี่โบ๊ต(sdayu.blogspot.com) ที่สอนการติดตั้ง venv ครับ :)



Read more

วันจันทร์ที่ 3 มิถุนายน พ.ศ. 2556

My First python programming

เนื่องจากในช่วงนี้ผมกำลังอยู่ช่วงศึกษาการเขียนโปรแกรมด้วย python และผมก็ได้โจทย์จากพี่โบ๊ต (พี่ป.เอก ที่ภาค) ผู้ซึ่งชักชวนให้มาเขียน python เป็นโจทย์ที่ไม่ยากมาก แต่แสดงให้เห็นถึงความสามารถของ pythom ครับ

ติดตาม blog ของพี่โบ๊ตได้ที่ http://sdayu.blogspot.com/

โจทย์มีอยู่ว่า
ที่มาของโจทย์ http://sdayu.blogspot.com/2013/04/blog-post_30.html

A = [random.randint(1, 150) for i in range(0,100)]

หาค่าเฉลี่ยของสมาชิกของ A ที่ละ 10 ค่า ให้อยู่ในรูปของลิสท์

หลังจากที่ผมนั่งอ่าน syntax การใช้งาน python อยู้่ช่วงระยะหนึ่ง ก็เขียน Code แก้ปัญหาดังกล่าวได้ดังนี้

import random
A = [random.randint(1, 150) for i in range(0,100)]
C=[]
for i in range(0,10):
 B= [A[j] for j in range(i*10,(i*10)+10)]
 C.append(sum(B)/len(B))
print(C)

แต่ว่าเฉลยของพี่โบ๊ตสั้นกว่า ลองไปดูกันครับ
 
import random
A = [random.randint(1, 150) for i in range(0,100)]
length = 10
average = [sum(A[a:a+length]) / len(A[a:a+length]) for a in range(0, len(A), length)]
print(average)

เราใช้ความสามารถทำ subset โดยใช้เครื่อง (Colon,:) ครับเช่น 
A=[1,2,3,4,5,6,7,8,9,10] 
print A[1:4]

ผลลัพธ์ก็จะออกมาคือ [2,3,4,5] 


**หมายเหตุ คำสั่ง range(1,6) ใน python เวอร์ชั่น 2.7 จะ return ออกเป็นลิสด์
 ในขณะที่ python 3.3 จะ return ออกมาเป็น object ถ้าเราสั่ง print(range(1,6)) ใน python3 จะได้ผลลพัธ์เป็น object แต่หากเราต้องการให้ผลลัพธ์ออกเป็น list เราจะต้องทำการ casting ค่า โดย list(range(1,6))
Read more

วันอาทิตย์ที่ 2 มิถุนายน พ.ศ. 2556

Recommend Package for Debian

สวัสดีครับ วันนี้จะขอแนะนำ สิ่งที่ต้องทำหลังจากติดตั้ง Debian ไปแล้วนะครับ

ในขั้นตอนแรกเลย เราก็ควรจะสร้าง  User ของเราเองก่อนครับ และเพิ่ม User ของเราเข้าไปในกลุ่ม sudo

$ sudo usermod -a -G sudo maykungth
# -a หมายถึง append ต้องใช้คู่กับ -G หมายถึงกลุ่ม sudo )

หลังจากนั้นเราจะต้องเข้าไปทำการอัพเดทรายชื่อ repository เพื่อเวลาที่เราสั่งอัพเดท package
จะได้ทำการ Download ได้อย่างรวดเร็วโดยใช้คำสั่ง vi เข้าไปที่ /etc/apt/source.list และเปลี่ยนในไฟล์ดังกล่าวเป็นค่าดังนี้

deb http://ftp.th.debian.org/debian/ sid main contrib non-free
deb-src http://ftp.th.debian.org/debian/ sid main contrib non-free
deb http://ftp.th.debian.org/debian/ testing main contrib non-free
deb http://ftp.th.debian.org/debian/ experimental main contrib non-free
                                                                     
$ aptitude update
#อัพเกรด list App ที่มีอยู่ใน repository

$ aptitude dist-upgrade
#อัพเกรด Distribution จากค่าเดิม Wheskly เป็น sid)

เมื่อเราอัพเกรด repository เรียบร้อยแล้ว เราก็มา install package กันต่อครับ

$ aptitude install firmware-linux
#ปรากฏว่าจากคำสั่งดังกล่าวซึ่งใช้ในเครื่องผม ไม่สามารถลงโปรแกรมได้ครบ และฟ้อง error ว่าไม่สามารถลง Driver รหัส d8169 ได้ ดังนั้นจึงทำการแก้ไขโดยใช้วิธีการ

$ aptitude search ~d8169
#การใส่เครื่องหมาย ~d แปลว่าทำการค้นหาใน Description ด้วย
*เมื่อใช้ $ aptitude search ในการค้นหาจะแสดงสัญลักษณ์ i คือทำการลงเรียบร้อยแล้ว หรือ p คือยังไม่ได้ติดตั้ง

$ aptitude install xfonts-thai chormium git g++ python3-dev python-dev python3-setuptools python-setuptools ntp

**คำสั่งน่ารู้
$ history 
# แสดงคำสั่งที่เคยใช้ไปล่าสุด
หากเราได้ใช้คำสั่ง history ไปแล้ว เราจะสามารถใช้เครื่องหมาย ! และตามด้วยความเลขคำสั่งที่ต้องการเรียกใช้ซ้ำครับ เช่น !3 หรือ  !vi ในกรณีนี้แปลว่าเราจะเรียกใช้คำสั่ง vi ครั้งล่าสุดด้วย option และ parameter เดิม


Read more

วันพุธที่ 15 พฤษภาคม พ.ศ. 2556

eth0 หาย แก้ไขยังไงดี ??

ก่อนอื่นเลยครับ ปัญหาเกิดจากที่ผมย้ายไฟล์ VMs ของ Virtual Box จากเครื่องหนึ่งมายังอีกเครื่องหนึ่ง
เมื่อเปิดขึ้นมา พบว่าเครื่องใหม่ที่ย้ายไฟล์ไปนั้น สามารถทำงานได้ตามปรกติ แต่ว่า ไม่สามารถเชื่อมต่อ internet ได้

เลยตรวจสอบโดยใช้คำสั่ง ifconfig ดู ก็พบว่า มีแต่ interface lo ไม่มี interface eth0 หลังจากนั้นก็ใช้ ifconfig -a ก็พบว่าเจอแค่ eth1 ไม่พบ eth0 ครับ

ทำไงดีล่ะครับทีนี้ ต้องขอขอบคุณ ข้อมูลดีๆ จากเว็บ http://www.oknation.net/blog/print.php?id=491917 ที่สามารถทำให้ผมแก้ไขปัญหานี้ได้ครับ

เอาล่ะ มาเริ่มกันเลย

เหตุผลที่ eth0 หาย ก็เพราะว่า เราเปลี่ยนเครื่องที่ใช้ทำ VM ครับ ก็เปรียบเสมือนว่าเราเปลี่ยนการ์ดแลนในเครื่องครับ ทำให้ MAC Address มันถูกเปลี่ยนแปลงไป ทำให้เจ้า Linux มองเป็นการ์ดอีกใบครับ

จริงๆแล้ว เราแค่ renew ip ใหม่ ของ interface eth1โดยใช้ คำสั่ง ด้านล่าง ก็สามารถทำให้เล่นเน็ตได้แล้วนะครับ แต่ว่าเราก็ยังไม่ได้ eth0 กลับมา

$ sudo dhclient eth1 
#วิธีการแก้ไขคือ เราต้องเข้าไปแก้ไขไฟล์ /etc/udev/rules.d/70-persistant.net-rules อาจจะใช้ Vim เข้าไปแก้ไขก็ได้นะคัรบ โดยพิมพ์

$ vim etc/udev/rules.d/70-persistant.net-rules 
#เข้าไปแล้วก็จะเห็นรายชื่อ interface eth0 และ eth1 อยู่นะครับ เราก็จัดการโดยการลบ eth0 ของเดิมออก และเปลี่ยนชื่อ interface eth1 เป็น eth0 ครับ แล้วก็ restart เครื่อง หรือ พิมพ์คำสั่งด้านล่างเพื่อ restart network


$ /etc/init.d/networking restart

เพียงเท่านี้ก็เรียบร้อยครับ อิอิ
Read more

วันจันทร์ที่ 29 เมษายน พ.ศ. 2556

The Basic of Vim

ก่อนอื่นเลยเรามาทำความรู้จักกับ โปรแกรมทั้งสองตัวนี้ก่อนเลยนะครับ Vi คือโปรแกรม Text Editor (โปรแกรมไว้แก้ไขข้อความในระบบคอมพิวเตอร์) ส่วน Vim คือ Vi Improved หรือ Vi ที่เพิ่มความสามารถมาใน Vi เวอร์ชันเดิม 

ก่อนอื่นเลยครับ เรามาตั้งค่าให้เราสามารถใช้โปรแกรมได้อย่างสะดวกยิ่งขึ้นครับ
โดยการสร้างไฟล์ .vimrc ใน /home/user แล้วใส่ Code ด้านล่างนี้ลงไป
 
syntax on
set nu
set smartindent
set tabstop=4
set shiftwidth=4

บรรทัดที่ 1 ตั้งค่าให้ทำการ Hilight Code
บรรทัดที่ 2 ตั้งค่าแถบบรรทัด
บรรทัดที่่ 3 ตั้งค่าการย่อหน้าแบบสมาร์ท (ไม่แน่ใจว่าเป็นอย่างไร)
บรรทัดที่ 4 ตั้งค่าให้ขนาด Tap = 4 ตัวอักษร
บรรทัดที่ 5 ตั้งค่าให้เวลาใช้ >> ให้เลื่อนข้อความไปทางขวา 4 ตัวอักษร

สามารถดูการตั้งค่าเพิ่มเติมได้ที่
http://vim.wikia.com/wiki/Indenting_source_code

มาดู Key ต่างๆ กันดีกว่าครับ (มีเยอะกว่านี้นะครับ อันนี้เฉพาะที่ผมใช้)

  • กด i เพื่อเข้าสู่โหมด insert ในหมวดนี้เราจะสามารถเข้าไปแก้ไขข้อความต่างๆได้ครับ
  • ในการควมคุม Cursor ของ Vim จะใช้ Arrow Key หรือว่าใช้ปุ่ม h l j k เพื่อเลื่อน ซ้าย ขวา ล่าง บน
  • :q เพื่อออกจากโปรแกรม :q! ออกจากโปรแกรมแบบบังคับ :wq ออกและบันทึก
  • กด v เพื่อลากคลุมข้อความ
  • กด y เพื่อ Copy หรือกด d เพื่อ Cut (โดยต้องกด v เพื่อคลุมข้อความก่อน)
  • กด p เพื่อวางข้อความ
  • กด dd เพื่อลบบรรทัดนั้น กด 5 dd เพื่อลบ 5 บรรทัด
  • กด dw เพื่อลบคำที่ Cursor ชี้อยู่
  • กด x เพื่อลบตัวที่ Cursor ชี้อยู่
  • :30 ไปที่บรรทัดที่ 30
  • :w ชื่อไฟล์  เพื่อบันทึกไปยังไฟล์ใหม่
  • /aข้อความ ค้นหาข้อความ


Read more

วันอาทิตย์ที่ 28 เมษายน พ.ศ. 2556

Java 7 JDK install on Ubuntu

สมัยก่อนการติดตั้ง Java 6 จะติดตั้งโดยใช้ชื่อ Package ว่า sun-java6-jdk 
แต่เมื่อเวลาเปลี่ยนไป Oracle ยักษ์ใหญ่รายหนึ่งแห่งวงการ IT ได้ทำการเข้าซื้่อ JAVA ของบริษัท SUN microsystem ทำให้อะไรหลายๆอย่างเปลี่ยนไป


ตอนนี้การติดตั้ง Java 7 นั้นทำได้ดังนี้ครับ (ณ เวลาที่เขียน blog เป็น Java 7 Build 21)**ขอบคุณการวิธีการติดตั้ง Java 7 ด้วยครับ จาก webupd8.org

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
ตอนแรกก็งงว่าทำไมต้องกำหนด repository เพิ่ม หลังจากไปถามผู้รู้จึงได้คำตอบว่า java มันไม่ได้มีอยู่ใน repository หลักของ ubuntu นี่เอง (เพราะ Oracle ซื้อไปป่าวหว่า)
เมื่อติดตั้งเสร็จสิ้นแล้ว ก็ลองทดสอบว่าการติดตั้งทำได้เสร็จสมบูรณ์หรือไม่ โดยการใช้คำสั่ง

$ java -version

หากขึ้น Version ของ Java ขึ้นมาก็แปลว่าติดตั้งเสร็จสิ้นเรียบร้อยแล้วครับ
หากเวอร์ชันของ Java ไม่ได้เป็นเวอร์ชันตามที่เราต้องการ สามารถใช้คำสั่งนี้ได้ครับ

$ sudo update-java-alternatives -s java-7-oracle

สามารถอ่านรายละเอียดเพิ่มเติมการติดตั้ง ในลิ้งค์ต้นฉบับได้เลยนะครับ
Read more

บทความแรกของ blog ของผม :D

สวัสดีผู้เข้ามาเยี่ยมชม Blog ทุกท่าน

จริงๆแล้ว ผมเองก็ไม่เคยคิดเลยว่าตัวเองต้องมาเริ่มต้นเขียน Blog จริงๆแล้ว เป็นคนที่ไม่ค่อยชอบเขียนไดอารี่เท่าไหร่ด้วย แต่ก็เอาเถอะครับ ที่ตั้งใจเขียนขึ้นมานี่ ก็เพราะว่า ในบางครั้งการที่เราได้เรียนรู้อะไรต่างๆมา เมื่อเวลาผ่านไป เราอาจจะจำมันไม่ได้ เช่น ในตอนนี้เองผมเพิ่งจะติดตั้ง Ubuntu Server 12.04 LTS ไป ซึ่งโดยปรกติแล้ว ทักษะของผมในการใช้ OS ตระกูล Linux นี่ถือว่าต่ำเลยทีเดียว ติดตั้ง Ubuntu Server เสร็จแล้ว ไม่มี GUI ให้ใช้เป็นอันงงกันเลยทีเดียว 555+ จะใช้ Text Editor ยอมฮิตชื่อ VIM ก็จำ Key ต่างๆไม่ได้ซะแล้ว ทั้งๆที่แต่ก่อนก็เคยใช้งานได้พอประมาณเลยทีเดียว เลยเป็นที่มาของความคิดที่จะเขียน Blog นี้ขึ้นมาครับ

สำหรับวันนี้ก็ขอพอแค่นี้ก่อน ราตรีสวัสดิ์สนะครับทุกๆท่าน

Read more