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
Maykungth Blog
ปล. ผมเองก็รับถ่ายภาพด้วยนะครับ ^^ หากสนใจ สามารถติดต่อ
และชมผลงานภาพถ่ายได้ที่ Maykungth Photographer
วันเสาร์ที่ 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
วันอังคารที่ 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
Read more
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
วันพุธที่ 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
แต่ปรากฏว่าเมื่อติดตั้งโดยใช้ 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 ไปบางส่วนทำให้ติดตั้งได้ ดังรูป
ก็จะติดตั้งได้เสร็จสิ้นเรียบร้อย
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
เสร็จเรียบร้อยจ้า
วันเสาร์ที่ 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
สำหรับ Hbase version ต่ำกว่า 0.94 ให้แก้ไขไฟล์ /etc/hosts ด้วยครับ จากเดิม 127.0.1.1 เป็น 127.0.0.1
(ขั้นตอนนี้ ไม่มีในหนังสือที่สอน Hbase ทำเอาผมรัน Hbase ไม่ได้อยู่พักนึง)เช่น
และเพื่อความสะดวกในการทำงาน เราสามารถเพิ่ม PATH ไปได้ เพื่อให้เรียกใช้งานได้อย่างสะดวก โดยทำการแก้ไข
$vim ~/.bashrc
แล้วเพิ่มข้อความนี้ลงไป
เสร็จแล้ว เราก็มาเริ่มรัน Hbase กันเลย ซึ่งในหมวดการรันนี้ เราจะเรียกว่า standalone mode จะใช้ file local system ในการทำงาน ยังจะไม่ได้ใช้ HDFS ของ Hadoop ในการทำงาน ข้อมูลไฟล์จะถูกเก็บอยู่ใน /tmp/hbase-${USERID} การรันทำได้โดยใช้คำสั่ง
หากเราต้องการให้ Hbase ทำงานใน Pseudo- Distributed Mode (โหมดใช้ HDFS แต่ยังไม่กระจายไปเครื่องอื่นๆ) เราจะสามารถเข้าไปแก้ไขไฟล์
$ vim $HBASE_HOME/conf/hbase-site.xml
เราสามารถแก้ไข ให้ Hbase เก็บข้อมูลที่อื่นแทน /tmp ได้ โดยใส่ที่อยู่อื่นๆ แทน DIRECTORY ด้านล่าง
เมื่อทำการ Config เสร็จก็จะสามารถ Run ได้ โดยใช้คำสั่ง
$ start-hbase.sh
เมื่อรันแล้วก็ลองเข้าไปดูใน log ดูว่าทำงานถูกต้องหรือไม่ด้วย และเมื่อทำงานแล้ว
เราจะสามารถตรวจสอบ Process โดยใช้ คำสั่ง jps ได้ ซึ่งหน้าตาโปรเซสจะอยู่ประมาณนี้
**
Hadoop 2.5.1
Hbase 0.98.6.1--hadoop2
**
สำหรับเว็บ 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 เพิ่มเติมได้จากข้างล่างเลยครับ
ทำได้โดย
$ aptitude update
$ aptitude upgrade
หลังจากนั้นก็ Download ลงมาก่อนเลยครับ แยกไฟล์ให้เรียบร้อย และเริ่มทำการติดตั้งด้วย
หลังจากนั้น เราก็จะสามารถรัน Thrift service ได้เลย โดยใช้คำสั่ง
หลังจากนั้น ผมได้ทดลองใช้่ Happybase ติดต่อไปยัง Hbase ปรากฏว่าไม่มี Error เกิดขึ้นครับ
** ในที่นี้ติดต่อโดยใช้ภาษา python นะคับ
ดูข้อมูลเพิ่มเติม
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
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] เป็น pythrift --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/
วันพฤหัสบดีที่ 20 มีนาคม พ.ศ. 2557
การ execute ไฟล์ ในระบบ linux
โดยส่วนตัวแล้วเป็นคนที่เล่น Linux ไม่ค่อยชำนาญมากนัก บางครั้งเราก็ทำตาม Tutorial ในเน็ตโดยไม่ได้รู้เลยว่า เข้าเข้าถึงไฟล์ ต่างๆ มันเป็นยังไง เช่น ทำไมเราต้อง
Current Directory อยู่ที่ /home/maykungth ซึ่งก็คืออยู่ที่เดียวกับไฟล์เหล่านั้นนะครับ
ต่อไปไฟล์ 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
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 สามารถทำงานได้
~$ ./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 นั่นเอง
วันพฤหัสบดีที่ 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
Read more
ในครั้งนี้ปัญหาเกิดจาก ตัว 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
สมัครสมาชิก:
ความคิดเห็น (Atom)
