หน้าเว็บ

วันพุธที่ 23 กันยายน พ.ศ. 2552

ปัญหา Firefox is already running, but not responding

ปัญหา Firefox is already running, but not reponding นั้นเจออยู่บ่อยๆ บางครั้งก็แก้ได้ง่ายโดยการปิด process firefox.exe ที่ Task Manager

แต่ว่ามีบางกรณีที่ใน Task Manager ก็ไม่มี firefox.exe อยู่แล้วแต่ก็ยังฟ้องแบบนี้อยู่ มันเกิดอะไรขึ้น??

บางครั้งถึงแม้ตัว Firefox เองนั้นจะปิดไปแล้วก็ตาม แต่ว่าบางครั้งจะมี child process ที่ยังค้างอยู่ ซึ่งอาจเกิดจาก add-on บางตัวที่ไม่ยอมปิดตัวลงไปตาม

ในกรณีนี้ก็แก้ง่ายๆ 2 วิธีด้วยกัน
1. Restart เครื่อง ง่ายมั้ยครับ :P
2. ถ้าในกรณีที่ไม่สามารถ restart เครื่องได้ เช่น เป็นเครื่อง server หรือ run service ที่ต้อง always on เอาไว้ ให้ใช้วิธีการดังนี้

- เข้า cmd (Start->Run พิมพ์ cmd)

- สั่ง taskkill /F /IM firefox.exe /T

เป็นอันเรียบร้อย
โดย taskkill ใช้ในการ kill process
/F คือ force บังคับปิด process
/IM ระบุ image name ในที่นี้คือ firefox.exe
/T ปิด child process ซึ่งเกิดจาก image name นั้นๆด้วย

ระบบที่ทดสอบ
OS: Windows Server 2003
Firefox: 3.5.3

วันพฤหัสบดีที่ 13 สิงหาคม พ.ศ. 2552

จำกัดช่วง port ของ RPC

ปกติแล้ว RPC (Remote Procedure Call) นั้นจะใช้ช่วง port แบบ random ในช่วง 1024 - 65535 ซึ่งถ้าเครื่องที่เป็น server แล้วต้องการให้ผู้อื่นติดต่อผ่าน RPC นั้นจะต้องเปิด port เป็นจำนวนมาก
ดังนั้นวิธีแก้ไขคือทำการจำกัดช่วง port ของ RPC ที่จะ random ให้น้อยๆ โดยวิธีการดังนี้

1. เข้า Registry Editor
Start -> Run -> regedt32

(ต่อไปนี้จะมีการเปลี่ยนแปลง register ดังนั้นควร back up register ไว้ก่อน โดยเลือกที่ File -> export แล้ว save เก็บไว้ที่ใดก็ได้)

2. ไปที่ HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc\Internet (ในกรณีที่ไม่มี Internet ให้ใช้คำสั่ง new key เพื่อเพิ่ม key Internet ใต้ Rpc)

3. คลิกที่ Internet แล้วในหน้าต่างฝั่งขวา ให้คลิกขวา เลือก New -> Multi-String Value แล้วตั้งชื่อว่า Ports

4. ดับเบิ้ลคลิกที่ Ports ที่สร้างขึ้น แล้วให้ระบุช่วง port ในช่อง Value data: เช่น 5000-5100 แล้วกด ok (ควรกำหนดอย่างน้อย 100 port เพราะมีหลาย service ที่จำเป็นต้องใช้ RPC)

5. ในหน้าต่างฝั่งขวา คลิกขวา เลือก New -> String Value แล้วชื่อว่า PortsInternetAvailable

6. ดับเบิลคลิกที่ PortsInternetAvailable แล้วใส่ Value Data: เป็น Y

7. ทำเหมือนข้อ 5 และ 6 แต่ตั้งชื่อว่า UseInternetPorts และให้ Value Data เป็น Y

8. Restart เครื่อง server เป็นอันเรียบร้อย

ระบบที่ทดสอบ
OS: Windows Server 2003 R2

อ้างอิง
http://support.microsoft.com/kb/154596

เปิด Port Windows Firewall แบบระบุ Range

บน Windows ถ้าต้องการเปิด port firewall ปกตินั้น ก็เข้าไปที่ control panel -> windows firewall
แล้วจัดการเพิ่มที่ exception แต่ปัญหาก็คือเพิ่มได้ทีละ port หรือทีละ program เท่านั้น

แต่ถ้าต้องการเพิ่มทีเดียวหลาย port หรือเพิ่มแบบเป็นช่วง port ก็สามารถทำได้เช่นกัน แต่ทำโดยใช้ script ผ่านทาง command line
1. เข้า command line (Start -> Run -> cmd)
2. สั่งคำสั่ง
for /L %i in (beginport, 1, endport)
do netsh firewall add portopening protocol %i "string"

โดย แทน beginport ด้วย หมายเลข port เริ่มต้น
endport ด้วยหมายเลข port สุดท้าย
protocol ด้วยโปรโตคอลที่ต้องการ คือ TCP หรือ UDP
string ด้วยชื่อที่ต้องการที่ให้ปรากฏใน exception ของ windows firewall
เช่น ผมต้องการเปิด port สำหรับ RPC ที่ port 5000-5100 ซึ่งใช้ TCP ก็สั่งว่า
for /L %i in (5000, 1, 5100)
do netsh firewall add portopening TCP %i "RPC %i"

เป็นต้น

ระบบที่ทดสอบ
OS: Windows Server 2003 R2

ที่มา
http://forums.techarena.in/server-networking/890789.htm

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

เปลี่ยน editor ของ git เป็น vi

ปกติถ้าใช้ git (เป็น dvcs (distributed version control system) ประเภทหนึ่ง) แล้วสั่ง commit -a เพื่อให้มันขึ้น editor มาให้ใส่ text นั้น แรกเริ่มเดิมที่มันจะใช้ editor คือ nano (สำหรับ ubuntu ที่ผมใช้อยู่) แต่ว่าผมอยากให้ vi มากกว่า ก็เลยจะเปลี่ยนมันซะ (จริงๆเมื่อก่อนมันเคยเปลี่ยนให้เองโดยไม่ได้ทำอะไร ก็งงเหมือนกันว่ามันเปลี่ยนยังไง)

วิธีเปลี่ยน
สั่งคำสั่ง
git config core.editor "vi"
โดยสามารถเปลี่ยนคำว่า vi เป็น editor ตัวอื่นใดๆก็ได้ที่ชอบ เช่น nano เป็นต้น

ระบบที่ทดสอบ
OS: ubuntu 9.04
git: 1.6.0.4

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

Tomcat เข้าโฟลเดอร์บางชื่อไม่ได้

เมื่อเข้าบาง URL ที่มีโฟลเดอร์อยู่บน webapps แล้วปรากฎ error ดังด้านล่างนี้

The server encountered an internal error () that prevented
it from fulfilling this request.

exception

java.io.FileNotFoundException:
/var/lib/tomcat5/work/Catalina/localhost/dspace/org/apache/jsp/index_jsp.java
(No such file or directory)

java.io.FileOutputStream.open(Native Method)

java.io.FileOutputStream.(FileOutputStream.java:179)

java.io.FileOutputStream.(FileOutputStream.java:70)


org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:188)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:495)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:476)

org.apache.jasper.compiler.Compiler.compile(Compiler.java:464)


org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)


org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)


org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)


org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0 logs.

แต่ว่าถ้าเป็นโฟลเดอร์อื่นจะยังเข้าได้
ซึ่งในกรณีของผมนั้นเกิดจากการที่เคยตั้งโฟลเดอร์นึงไว้ แล้วไปทำอะไรก็ไม่รู้จำไม่ได้ แล้วอยู่ดีๆพอจะเข้า folder นี้มันก็ขึ้น error แบบนี้ซะงั้น แต่ถ้า copy เอา content ไปใส folder อื่นปรากฎว่ามันทำงานได้ซะงั้น

วิธีแก้ไข
ปัญหาเกิดจากการเก็บ cache ของ tomcat ให้แก้โดยการลบไฟล์ใน cache ที่อยู่ที่ /var/cache/tomcat5.5 ทั้งหมดทิ้ง แล้วสั่ง restart tomcat ใหม่

ระบบที่ทดสอบ
OS: Ubuntu 9.04
Tomcat: 5.5

tomcat แสดง encoding เพี้ยน เมื่อส่ง request

เหตุการณ์คือ ระบบ dspace พัฒนาขึ้นนั้น จะมีกล่องสำหรับ search คำ แต่พอผู้ใช้กรอกภาษาไทย แล้วกดปุ่ม search นั้น ระบบกลับแปลง encoding ออกมาเพี้ยน ส่งผลให้หาผล search ไม่เจอด้วย โดยปัญหานี้ต้องแก้ที่ตัว config ของ Tomcat

วิธีแก้
ในไฟล์ server.xml (อยู่ที่ $TOMCAT_HOME/conf/server.xml โดย $TOMCAT_HOME แล้วแต่ระบบ เช่นของผมอยู่ที่ /usr/share/tomcat5.5) ให้ดูที่บรรทัด แล้วเพิ่ม attribute เข้าไปดังนี้
connector port="8080" usebodyencodingforuri="true".......
หรือ
connector port="8080" uriencoding="UTF-8"........
เสร็จแล้วลอง restart tomcat ใหม่อีกรอบเป็นอันใช้ได้

ระบบที่ทดสอบ

OS: Ubuntu Desktop 9.04
Tomcat: Apache Tomcat 5.5 (via apt-get)


ที่มา
http://antikoala.wordpress.com/2007/02/21/tomcat-55-encoding-problem/

Special Thank
@blckct

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

compile TinyOS-2.1.0 แบบ TOSSIM ไม่ได้

อันนี้อาจมีหลายสาเหตุ แต่สาเหตุที่ผมเพิ่งเจอล่าสุดคือ upgrade เป็น ubuntu 9.04 แล้วจากที่เคย compile ได้ก็ไม่ได้ซะงั้น
โดยอาการแรกของผมคือ มันฟ้อง หา g++ ไม่ได้
อันนี้แก้ง่ายมาก
sudo apt-get install g++
เป็นอันเรียบร้อย (g++ เป็น GNU C++ Compiler)

พอพ้น error แรกไปได้ติดปัญหาต่อไปคือ มันงอแงว่า หาไฟล์ Python.h ไม่เจอ
อันดับแรกเลยลองเช็คว่าเรามี file นี้อยู่ในเครื่องรึเปล่า โดยลองสั่ง
sudo find / -name Python.h
เพื่อใช้หา find ดูก็ได้ ถ้าเกิดมันบอกว่าไม่เจอ ซึ่งอาจเกิดจากการที่เราไม่มี python development package หรือไม่ก็เคยมี แแต่เป็นเวอร์ชันเก่า พอ upgrade เป็น 9.04 แล้วมันจะเปลี่ยน python เป็น 2.6 แล้วทำการ remove package ของเวอร์ชันเก่าทิ้ง ก็ให้แก้ download มาลงก่อนด้วย
sudo apt-get install python-dev
หรือถ้าต้องการระบุ version ของ python ก็ใช้เป็น
sudo apt-get install python2.5-dev
โดยเปลี่ยนเลข version ตามอัธยาศัย (ของผมคือลง python2.5 เพิ่มเข้าไปด้วย)

หลังจากลองใช้คำสั่งเดิมในการหาว่า Python.h อยู่ที่ไหนใหม่อีกครั้ง แบบของผมจะไปอยู่ที่
/usr/include/python2.5
ซึ่งให้จำ path นี้ไว้ แล้วไปแก้ในไฟล์ sim.extra ที่อยู่ใน $TOSROOT/support/make โดยให้เติมบรรทัดนี้เข้าไปใต้บรรทัด PFLAGS
CFLAGS += -I/usr/include/python2.5
และเปลี่ยนค่าของ PYTHON_VERSION ให้เป็นตัวที่เราใช้อยู่ ทั้งในไฟล์ sim.extra และ sim-fast.extra
PYTHON_VERSION=2.5
ซึ่งถ้าใครไม่รู้ว่า python ตัวเองเป็น version อะไรสามารถดูได้ด้วยคำสั่ง python -V

แล้วคราวนี้ลอง compile โปรแกรมให้เป็น tossim ใหม่อีกครั้ง ก็น่าจะผ่าน

ระบบที่ทดสอบ

TinyOS: 2.1.0 (via apt-get)
OS: Ubuntu 9.04

ที่มา
http://docs.tinyos.net/index.php/TOSSIM#Appendix_A:_Troubleshooting_TOSSIM_compilation