วันพฤหัสบดีที่ 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