วันเสาร์ที่ 2 กรกฎาคม พ.ศ. 2559

Edit black box when use numbering in MS Word


http://answers.microsoft.com/en-us/office/forum/office_2010-word/ms-word-heading-styles-are-showing-black-boxes/c427b21c-dcda-46ce-a506-b9a16c9f2f3f?auth=1
Read more

วันอังคารที่ 22 มีนาคม พ.ศ. 2559

View historic data from ganglia webfront end when hosts down

I write this post because I want to view historic data from ganglia.
The problem is when hosts go down, we cannot view the historic data of the down's host.

If you restart gmetad service, we will lost list of down's hosts although rrd files still persist in /var/lib/ganglia/rrd . It's hard to dump rrd files to a pretty graph like ganglia web frontend

The way to solve this problem has 2 steps.

First, If hosts go down and list of host still persist in list of cluster but we cannot access the historic data of down's hosts. We can access the data by comment out the block "if ($hosts_down)" in ganglia-webfrontend/hosts_view.php


Second, If you lost the list of hosts. It's hard to recovery the list of hosts but before it losts, we can prepare XML from gmond in normal situation by

$ telnet localhost 8649 > MetaHBaseAll

Keep the 'MetaHBaseAll' file to use in host down situation.
When the hosts go down, we can use this python script to delude the gmetad for all live of gmond.


the python script works as gmond and will always send the metadata to gmetad although all gmonds are dead. By this way, you can access historic data using ganglia webfront end although all hosts down



Read more

วันพุธที่ 1 เมษายน พ.ศ. 2558

pip install error registry บน windows (Python 2.7.9)

ผู้เขียนได้ติดตั้ง pip เสร็จสิ้นเรียบร้อยแล้ว หลังจากนั้นจะติดตั้ง package อื่นๆต่อ (ในที่นี้ขอยกตัวอย่างเป็น pyramid)
แต่ปรากฏว่าเมื่อติดตั้งโดยใช้ pip โดยคำสั่งด้านล่างก็เกิด Error ฟ้องขึ้น

c:\> python -m pip install pyramid

โดยฟ้อง Error ประมาณว่า

File "C:\Python27\lib\mimetypes.py", line 263, in read_windows_registry
with _winreg.OpenKey(hkcr, subkeyname) as subkey:
TypeError: must be string without null bytes or None, not str

เนื่องจาก python มีปัญหากับ Registry บางตัวบน Windows 64 bit
วิธีการแก้ไขมีหลายวิธี ผู้เขียนจึงนำเสนอวิธีที่ผู้เขียนใช้ได้ผล
ซึ่งวิธีอื่นๆสามารถไปอ่านเพิ่มเติมได้ที่ลิง้ค์ข้างล่าง

Thank you for the solution from
http://www.swarley.me.uk/blog/2014/04/23/python-pip-and-windows-registry-corruption/

วิธีการแก้ไขคือ ให้เปิดไฟล์ python27\Lib\mimetypes.py ขึ้นมาแก้ไข
โดยเพิ่มบรรทัดที่มี #new อยู่ข้างหลัง ตามโค้ดด้านล่าง

with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr:
    for subkeyname in enum_types(hkcr):
        try:
            if '\0' in subkeyname: # new
                print "Skipping bad key: %s" % subkeyname # new
                continue # new
            with _winreg.OpenKey(hkcr, subkeyname) as subkey:

หลังจากนั้นก็ Save แล้วก็ลอง install ใหม่ดู
จะพบว่า หลังจากติดตั้งจะมีการ Skip key ไปบางส่วนทำให้ติดตั้งได้ ดังรูป


ก็จะติดตั้งได้เสร็จสิ้นเรียบร้อย

Read more

How to install Python 2.7.9 (Compile from source)

อันดับแรกติดตั้ง Package ที่ใช้ในการ Compile ก่อน

$sudo apt-get install build-essential
$sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

หลังจากนั้นก็ไปโหลด Python มาจากเว็บ Python.org
และก็แตกไฟล์ให้เรียบร้อยโดย
$tar -xvf Python-2.7.9.tgz
$cd Python-2.7.9

หลังจากนั้นสั่งตั้งค่าและ Compile
$./configure
$make
$sudo make install

Finish !

แถมอีกนิด สำหรับคนต้องการลง pip และ virtualenv
โดยปกติ python 2.7.9 จะแถม pip มาให้เลย ก็ไม่เข้าใจเหมือนกันว่าทำไมของผู้เขียนทำไมไม่ติดตั้งมาให้
ติดตั้ง pip โดยไปโหลด get-pip.py จาก 
https://pip.pypa.io/en/latest/installing.html#install-pip

โหลดเสร็จแล้วก็

$sudo python get-pip.py

หลังจากติดตั้งเสร็จสิ้นเรียบร้อยแล้ว ก็ตามด้วย virtualenv

$sudo python -m pip install virtualenv

เสร็จเรียบร้อยจ้า




Read more

วันเสาร์ที่ 22 มีนาคม พ.ศ. 2557

การติดตั้ง Apache Hbase และ Apache Thrift

บทความนี้มุ่งเน้นไปที่การติดตั้ง Apache Hbase และ Apache Thrift นะครับ

Apache Hbase คืออะไร ? Hbase คือ ฐานข้อมูลแบบ Non-relational database ตัวหนึ่งครับ เก็บข้อมูลในลักษณะของ Column family ซึ่งโดยปรกติแล้ว หากเราติดตั่้ง Hbase ได้เสร็จสิ้นแล้ว เราจะสามารถเข้าถึง Hbase่ได้โดยผ่าน Hbase Shell แต่...

หากจะเราใช้โปรแกรมในภาษาอื่นเข้ามาติดต่อ ในที่นี้ผมเลือกใช้ Happybase ซึ่งเป็น lib ของ python ซึ่งใช้ในการติดต่อไปยัง Apache Hbase โดยการติดต่อนั้น เราจะไม่สามารถติดต่อ Hbase ได้โดยตรง แต่เราจะต้องทำการติดต่อผ่านทาง Apache Thrift ซึ่งเป็น Service ตัวหนึ่งที่ิอนุญาติให้โปรแกรมที่ถูกเขียนโดยภาษาอื่นๆ สามารถติดต่อมายังตัว Apache Hbase ได้ครับ

แล้ว บทความนี้ทำอะไรบ้าง
- ติดตั้ง Apache Hbase ให้พร้อมสำหรับการใช้งาน
- ตั้งค่า Apache Hbase ให้สามารถทำงานในโหมด Presudod istributed Mode
- ติดตั้ง Apache Thrift โดยการ Complie from source
- ทดสอบ Happybase ให้ connect ไปยัง Hbase ผ่านทาง Apache Thrift


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

1. การติดตั้ง Apache Hbase
เริ่มแรก ให้เราเข้าไป Download  Hbase มาจาก Mirror ก่อนกันเลย เมื่อ Download เสร็จแล้วก็ให้แตกไฟล์ไว้ที่ /usr/local/

>> % tar xzf hbase-x.y.z.tar.gz
* หมายเหตุ Hbase ต้องการ Java อย่างน้อย v1.6 ด้วย เราต้องทำการเซต JAVA_HOME ก่อน
** ผมใช้ OpenJDK1.7

export JAVA_HOME=/usr/lib/jvm/default-java  

export HBASE_REGIONSERVERS=/home/hduser/hbase/conf/regionservers

export HBASE_MANAGES_ZK=true

สำหรับ Hbase version ต่ำกว่า 0.94 ให้แก้ไขไฟล์ /etc/hosts ด้วยครับ จากเดิม 127.0.1.1 เป็น 127.0.0.1
(ขั้นตอนนี้ ไม่มีในหนังสือที่สอน Hbase ทำเอาผมรัน Hbase ไม่ได้อยู่พักนึง)เช่น
127.0.0.1 localhost            
127.0.0.1 ubuntu.ubuntu-domain ubuntu
** ถ้าหากใช้ Hbase ที่ใหม่กว่านี้ไม่ต้องแก้ครับ


และเพื่อความสะดวกในการทำงาน เราสามารถเพิ่ม PATH ไปได้ เพื่อให้เรียกใช้งานได้อย่างสะดวก โดยทำการแก้ไข

$vim ~/.bashrc

แล้วเพิ่มข้อความนี้ลงไป

% export HBASE_HOME=/home/hduser/hbase export PATH=$PATH:$HBASE_HOME/bin

เสร็จแล้ว เราก็มาเริ่มรัน Hbase กันเลย ซึ่งในหมวดการรันนี้ เราจะเรียกว่า standalone mode จะใช้  file local system ในการทำงาน ยังจะไม่ได้ใช้ HDFS ของ Hadoop ในการทำงาน ข้อมูลไฟล์จะถูกเก็บอยู่ใน /tmp/hbase-${USERID} การรันทำได้โดยใช้คำสั่ง

% start-hbase.sh


หากเราต้องการให้ Hbase ทำงานใน  Pseudo- Distributed Mode (โหมดใช้ HDFS แต่ยังไม่กระจายไปเครื่องอื่นๆ) เราจะสามารถเข้าไปแก้ไขไฟล์

$ vim $HBASE_HOME/conf/hbase-site.xml

เราสามารถแก้ไข ให้ Hbase เก็บข้อมูลที่อื่นแทน /tmp ได้ โดยใส่ที่อยู่อื่นๆ แทน DIRECTORY ด้านล่าง

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>

<property>
<name>dfs.replication</name>
<value>1</value>
</property>

<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hduser/hbase/zookeeper</value>
</property>
</configuration>

เมื่อทำการ Config เสร็จก็จะสามารถ Run  ได้ โดยใช้คำสั่ง
$ start-hbase.sh

เมื่อรันแล้วก็ลองเข้าไปดูใน log ดูว่าทำงานถูกต้องหรือไม่ด้วย และเมื่อทำงานแล้ว
เราจะสามารถตรวจสอบ Process โดยใช้ คำสั่ง jps ได้ ซึ่งหน้าตาโปรเซสจะอยู่ประมาณนี้

**
Hadoop 2.5.1
Hbase 0.98.6.1--hadoop2
**
 4334 HQuorumPeer
 2882 SecondaryNameNode
 4867 Jps
 3207 TaskTracker
 2460 NameNode
 4671 HRegionServer
 4411 HMaster
 2977 JobTracker
 2668 DataNode

สำหรับเว็บ interface

http://localhost:60010 for master
http://localhost:60030 for region server

Ref: http://archanaschangale.wordpress.com/2013/08/31/installing-pseudo-distributed-hbase-on-ubuntu/

=========================================================

2. การลง Apache Thrift

ก่อนจะติดตั้ง เราก็ต้องเตรียม lib ให้พร้อมก่อนครับ เนื่องจาก Apache Thirft จะให้เรา compile ใหม่เลย เราสามารถติดตั้ง lib เพิ่มเติมได้จากข้างล่างเลยครับ

sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev 
หากในการติดตั้งเจอ ปัญหา dependency ของ package เต็มไปหมดเหมือนที่ผมเจอ ให้ลองอัพเดทระบบดูครับ แล้วจะหายเลย
ทำได้โดย

$ aptitude update
$ aptitude upgrade

หลังจากนั้นก็ Download ลงมาก่อนเลยครับ แยกไฟล์ให้เรียบร้อย และเริ่มทำการติดตั้งด้วย

./configure
make
make install
เมื่อทำการติดตั้งเสร็จสิ้นแล้ว เราก็ต้องบอก thrift ว่าเราจะใช้ภาษาอะไร ถ้าใช้ python ให้เปลี่ยนที่ [lang] เป็น py

thrift --gen [lang] [hbase-root]/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift

หลังจากนั้น เราก็จะสามารถรัน Thrift service ได้เลย โดยใช้คำสั่ง
[hbase-root]/bin/hbase thrift start

หลังจากนั้น ผมได้ทดลองใช้่ Happybase ติดต่อไปยัง Hbase ปรากฏว่าไม่มี Error เกิดขึ้นครับ

** ในที่นี้ติดต่อโดยใช้ภาษา python  นะคับ
import happybase

connection = happybase.Connection('127.0.0.1')
NO ERROR เย้ๆ



ดูข้อมูลเพิ่มเติม
https://hbase.apache.org/book/quickstart.html
http://answers.oreilly.com/topic/2183-how-to-install-hadoop-hbase/
http://thrift.apache.org/docs/BuildingFromSource/


Read more

วันพฤหัสบดีที่ 20 มีนาคม พ.ศ. 2557

การ execute ไฟล์ ในระบบ linux

โดยส่วนตัวแล้วเป็นคนที่เล่น Linux ไม่ค่อยชำนาญมากนัก บางครั้งเราก็ทำตาม Tutorial ในเน็ตโดยไม่ได้รู้เลยว่า เข้าเข้าถึงไฟล์ ต่างๆ มันเป็นยังไง เช่น ทำไมเราต้อง

maykungth@maykungth-debain:~$ ./a.out

ในบทความนี้ จะอธิบายเล็กๆ น้อยๆ ตามความเข้าใจส่วนตัวนะครับ

ผมได้ทำการทดลอง โดยผมมีไฟล์อยู่สามไฟล์นะครับ คือ 
- a.out (Binary จากการ Complie ด้วย gcc เขียนด้วยภาษา C สั่งให้ printf Hello World) 
- shell.sh (Shell script ธรรมดาๆ สั่งให้ echo Hello World) 
- activate (Shell script ที่เกิดจากคำสั่ง venv ของ python เป็นการกำหนด Path เพื่อเตรียมสภาพแวดล้อมของ Virtual Environment ที่สร้างขึ้น)

ที่อยู่ของแต่ละไฟล์

สมมุติว่าให้ไฟล์ที่อยู่ /home/maykungth หมดทุกไฟล์นะครับ

สิ่งที่เราสงสัยคือ หากเราจะสั่งให้ไฟล์ๆนึง ทำงาน เราจะต้องใช้อะไร . หรือ ./ หรือ source หรืออะไร เรามาทดลองกันเลยดีกว่า (. และคำสั่ง source คืออันเดียวกันนะ)

Current Directory อยู่ที่ /home/maykungth ซึ่งก็คืออยู่ที่เดียวกับไฟล์เหล่านั้นนะครับ
สำหรับไฟล์ a.out

~$ ./a.out หรือ $/home/maykungth/a.out สามารถทำงานได้
~$ . a.out หรือ $source a.out ไม่สามารถทำงานได้ มันฟ้องว่า ไม่สามารถ exe binary ได้

ต่อไปไฟล์ shell.sh

~$ ./shell.sh หรือ $/home/maykungth/shell.sh สามารถทำงานได้
~$ . shell.sh หรือ $source shell.sh สามารถทำงานได้

ต่อไปไฟล์ activate
~$ ./activate หรือ $/home/maykungth/activate ไม่ฟ้อง Error แต่ไฟล์ activate ไม่ทำงาน
~$ . activate หรีือ source activate ก็ทำงานได้ตามปรกติ

สรุป...

ตามความเข้าใจของผม เราสามารถเข้าถึง executable file ได้โดยตรง ไม่ว่าจะเป็น binary หรือ script ให้มันจะทำงานได้เลย เ้ช่นการใช้ ./ ก็คือการเรียกใช้ executable file ใน current directory หรือเราจะเรียกตรงๆผ่านทาง path ที่อยู่มัน

ส่วนการใช้ . หรือ source มันคือการ sourcing  หรือพูดง่ายๆคือการจัดเตรียมสภาพแวดล้อม กำหนดค่าตัวแปรต่างๆ คล้ายๆกับการ include นั้่นเอง พอเป็นแบบนี้แล้ว มันจึงไม่สามารถเรียก executable ที่เป็น binary ได้ แต่สามารถเรียกที่เป็น script ให้ทำงาน (แต่ผิดวัตถุประสงค์ไปหน่อย) ถ้าจะให้ถูกวัตถุประสงค์ ก็ควรเรียกไฟล์ activate  เพราะข้างในไฟล์เป็นการกำหนดค่าตัวแปรต่างๆไว้

ส่วนสาเหตุที่เราไม่สามารถเรียก ~$ a.out หรือ ~$ shell.sh ได้โดยตรง เพราะว่าการเรียกแบบนี้ มันจะไปหาไฟล์ตาม PATH ที่เราได้ตั้งค่าไว้ก่อนหน้าแล้ว ซึ่งโดยปรกติ  Current Directory ของเรามันก็ไม่ตรงกับ PATH ที่ตั้งค่าไว้ ยกเว้นคุณจะเรียกในพวกไฟล์ใน java ซึ่งได้ถูกเพิ่ม PATH ไว้แล้วในกรณีเครื่องติดตั้ง java ไว้ โดย PATH ที่เพิ่มไว้แล้วคือ java/bin นั่นเอง




Read more

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