วิธี set PATH Solaris เพื่อ configure กับ make file

ช่วงนี้มีเรื่องให้ต้อง compile โปรแกรมบน Solaris 10 x86 แล้วก็ติดปัญหาเรื่อง set compiler path หลายครั้งจนขอจดไว้ต้อง set อะไรบ้าง

พอโหลด source มา untar file เสร็จสั่ง configure ก็ขึ้นแบบนี้มาเลย

# ./configure
checking build system type... i386-pc-solaris2.10
checking host system type... i386-pc-solaris2.10
checking target system type... i386-pc-solaris2.10
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/disk2/opt/ruby':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
#

ไปค้นๆ ดู ต้องไปหา gcc ครับ ซึ่ง default ของ Solaris ในกรณีที่ไม่ได้ลง Sun Studio มันอยู่ที่ /usr/sfw/bin เราก็ export PATH ไป

# export PATH=/usr/sfw/bin:$PATH

พอสั่ง ./configure ก็จะเจอ error ว่าไม่มี make -*-

checking for prefix of external symbols... ./configure: line 18702: conftest.o: command not found
NONE
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking if make is GNU make... ./configure: line 18909: make: command not found
no
checking for safe null command for make... configure: error: no candidate for safe null command

ไปค้นๆ ดู make ไม่ได้อยู่ใน /usr/sfw/bin แต่อยู่ใน /usr/ccs/bin ต่างหาก -*-

ดังนั้นวิธีการ export ที่ถูกต้องเพื่อที่จะ configure และ make ได้คือ

# export PATH=/usr/ccs/bin:/usr/sfw/bin:$PATH

ที่นี่ก็จะ build ได้ พอ make install โปรแกรมก็จะไปอยู่ใน /usr/local แล้วเราก็ค่อยไปสร้าง softlink อีกทีครับ

วิธีสร้าง JSON Message ด้วย Java

ผมเขียนถึงวิธีการสร้าง JSON message บน Java ผ่าน entry นี้มาแล้วรอบนึง หลังจากนั้นผมก็ไปค้นเจอทีหลังว่าจริงๆ แล้ว Java มันสนับสนุน JSON โดยไม่ต้องพึ่ง 3rd Party lib แล้ว เลยมาแนะนำกันครับ

สิ่งที่ผมจะสร้างคือ JSON หน้าตาแบบนี้

{
   "service":"quote",
   "user":"plynoi",
   "symbols":["Nokia"],
   "fields":["BID","ASK","HIGH"]
}

ขอเปรียบเทียบกับวิธีใช้ 3rd Party ก่อน ตัวที่ผมเลือกเพราะ google เจออันดับแรกๆ คือ json-simple ซึ่งมันก็ใช้ง่ายๆ ตรงไปตรงมา doc อ่านง่ายดีมาก จะขอยกตัวอย่างตัดมาจาก entry Java อันนั้นอีกทีนะครับ

import org.json.simple.*;

private void createJSON(){

	JSONObject request_msg = new JSONObject();
	request_msg.put("service","quote");
        	request_msg.put("user","plynoi");

        	JSONArray itemArray = new JSONArray();
        	itemArray.add("Nokia");

        	JSONArray filterArray = new JSONArray();
        	filterArray.add("BID");
        	filterArray.add("ASK");
       	filterArray.add("HIGH");

        	request_msg.put("symbols",itemArray);
        	request_msg.put("fields",filterArray);
	
	//JSON message "request_msg" is ready to process
}

เทียบกับตัว Native ของ Java เองอย่าง JSR 353 แล้วส่วนตัวผมมองว่าที่ Java ให้มาอยู่แล้วยุ่งยากกว่าเยอะ แต่โชคดีที่ doc เขียนละเอียดดีโฮกๆ (แต่ก็อ่านยากกว่าเช่นกัน :p)

import javax.json.Json;
import javax.json.JsonObject;

private void createJSON(){

	JsonObject request_msg = Json.createObjectBuilder()
		.add("service","quote")
		.add("user","plynoi")
		.add("symbols",Json.createArrayBuilder()
                    		.add("Nokia")
               	 )
                	.add("fields",Json.createArrayBuilder()
                    		.add("BID")
                    		.add("ASK")
                    		.add("HIGH")
                	)
                .build();
	
	//JSON message "request_msg" is ready to process
}

จะไปใช้ตัวไหนก็แล้วแต่นะครับ ส่วนตัวผมชอบ simple-json มากกว่าตรงที่มันดูตรงไปตรงมากว่านี่แหละ

ruby/python จัดการ command line arguments

มี server นึง (เขียนด้วย C/C++) ในบริษัทผมที่ผมต้องใช้งาน ต้องขอข้อมูลจากมันเป็นประจำ การที่จะเอา software เต็มๆ ไปขอข้อมูลจากมันบางทีก็เป็นเรื่องยุ่งยาก เขาก็เลยมีตัว test connection (เขียนด้วย C/C++ เช่นกัน) ไว้ทดสอบขอข้อมูลจาก server ตัวนั้นเพื่อดูว่ามันได้ข้อมูลไหม หรือเราลงถูกรึเปล่า ทีนี้ไอ้ตัว simple tool ตัวนี้มันใช้ยากพอดูเลย

$> ./runaction -s <server service> -h <server IP/Host> -e <encryption ไหม ตอบได้ yes/no> -p <server port> -f <file ใส่ชื่อ item ที่จะขอ>

จะเห็นว่าชื่อ parameter มันยาก แถมผมต้อง save ชื่อ item ที่จะขอลง file ถ้าจะขอหลาย item ก็ต้องเคาะบรรดทัดไปเรื่อยๆ แบบนี้

$> cat item.txt
facebook
oracle
ibm

แล้วก็ต้องใส่ item.txt ลงไปใน -f ข้างบน แล้ว server ก็จะส่งข้อมูลของ facebook, oracle และ ibm มาให้ แถมยังต้องใส่ env variable “ACTION_PATH” ไปที่ folder ของตัว simple tool นั้นอีก

ที่นี้ผมมีเรื่องที่จะต้องเปลี่ยน item บ่อยๆ เพื่อทดสอบอะไรบางอย่าง เลยอยากจะให้ใส่ชื่อ item ลงใน command เลยไม่ต้องไปสร้าง file เอง แถมทดสอบกับ server เดียวกันซ้ำๆ ก็ใส่ค่า default ไปเลย สรุป requirement ได้ดังนี้

  • ผมใส่ชื่อ item เป็น facebook,apple,vodaphone แล้วมันไปสร้าง file ชื่อ item ให้
  • มี default host, service, port, encryption ผมไม่จำเป็นต้องใส่ถ้าต่อกับ default server แต่ถ้าผมจะต่อกับ server ตัวอื่น ก็ต้องใส่ parameter อะไรไปในรูปแบบที่ง่ายกว่านี้
  • เฉพาะ item เป็น field ที่ต้องใส่เสมอ

Continue reading “ruby/python จัดการ command line arguments”