การเขียน shell script บน Android แบบไม่ต้องใช้ chmod

การเขียน shell script
การเขียน shell script

เคยมีนักศึกษาสายไอที ถามมา
เพราะสายอื่นเค้าคงไม่ถามแบบนี้หลอก
คำถาม “มีสมาร์ทโฟน เอามาทำอะไรได้บ้าง
แล้วก็คิดได้ว่า โทรศัพท์ที่เค้ามีเป็น android os
สามารถติดตั้ง app เพิ่ม จาก Google play store ได้
งั้นตอบว่า “ใช้เขียน shell script ได้ ลองดูนะ
ไม่ต้องกังวลเรื่อง root ด้วย เพราะไม่จำเป็นต้องทำ
แนะนำว่าต้องโหลดแอพ ดังต่อไปนี้
1. Terminal Emulator
2. Droidedit Free
3. ES File Explorer File Manager
4. Palapa Web Server
อันที่จริง ใช้แอพในข้อ 1 เป็นหลัก
ที่เหลือแนะนำว่า Developer ควรมีไว้ในเครื่อง

ขั้นตอนการเขียน shell script
บน Android แบบไม่ต้องใช้ chmod
1. โหลดแอพ Terminal Emulator
เพื่อเข้าไปจัดการกับ Script ผ่าน Shell บน Android
2. โหลดแอพ Droidedit Free
เพื่อเป็นอีดิเตอร์สำหรับเขียน Script บน Android
เพราะโหลดมาแก้ไข และ Save as ได้
3. สำรวจห้องที่จะเก็บ shell script
โดยใช้เครื่องมือ คือ Terminal Emulator
หรือ ES File Explorer File Manager ก็ได้
เข้าไปดูห้อง /mnt/sdcard
พบว่ามีห้องเก็บข้อมูลมากมาย
อาทิ ห้อง /mnt/sdcard/pws
ที่สร้างจากแอพ Palapa Web Server
4. เขียน Shell script บนแอพ Droidedit Free
แล้ว Save as ชื่อ test1 วางไว้ในห้อง /mnt/sdcard

#!/system/bin/sh
read x
echo $x

5. ใช้ Terminal Emulator สั่ง execute shell script
โดยไม่ต้องใช้คำสั่ง chmod
เพราะใช้ไม่ได้และไม่จำเป็นต้องใช้
หากต้องการใช้ shell script ให้มีคำว่า sh นำหน้า
เช่น $sh test1

6. ตัวอย่าง รับค่าจากแป้นพิมพ์มาทดสอบ

#!/system/bin/sh
read x
echo $x
if [ “$x” == “1” ]
then
echo “one”
elif [ “$x” == “2” ]
then
echo “two”
else
echo “-”
fi

อธิบาย script ว่า
ถ้า execute แล้วเค้าหยุดถาม
หากกรอกเลข 1 จะพิมพคำว่า one ออกมา
หากกรอกเลข 2 จะพิมพคำว่า two ออกมา
หากกรอกอย่างอื่น จะพิมพคำว่า – ออกมา

Review แอพสอนเขียนโปรแกรม .. ลองแล้วจะติดใจ

ถ้า (if) ต้องการเรียนรู้การเขียนโปรแกรม และมี Smartphone อยู่ในอุ้งมือ
และมีเวลานั่งเฉย ๆ ระหว่างรอรถเมย์ รอดูหนัง รอเพื่อนทานข้าว รอเข้างาน รอเรียน
รอลูกเรียนพิเศษ รอแฟนเลิกงาน รอแฟนเข้าร้านเสริมสวย
แล้วอยากหาอะไรอ่าน .. “อ่าน

programming language
programming language

ในสายคอมพิวเตอร์ทั้ง นักศึกษา หรือคนทำงาน
ก็คง “สนใจเรื่องการเขียนโปรแกรมไม่มากก็น้อย
คนใน play store พบแอพพลิเคชั่นเพียบเลย ที่สอนเขียนโปรแกรมต่าง ๆ
แต่มี app หนึ่งที่สอนหลายภาษา และในหลายรูปแบบ
แล้วเค้าก็พัฒนาต่อเนื่อง ปรับทั้งแอพ และเนื้อหาตลอด
คือ Programming Hub ดาวน์โหลดที่ http://www.programminghub.io
ผมนั่งอ่านดูก็สนุกดี
ถ้าเทียบเนื้อหาระหว่าง version บน smartphone กับ web
จะพบว่าบน smartphone ดีกว่าเยอะ ลองแล้วจะติดใจ .. เหมือนผม

programminghub แอพพลิเคชั่นที่สอนเขียนโปรแกรม
programminghub แอพพลิเคชั่นที่สอนเขียนโปรแกรม

Programming hub คือ แอพพลิเคชั่นที่สอนเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ที่มีทั้งบนแอนดรอย (Android) และไอโอเอส (iOS) และสามารถเรียนผ่านเว็บไซต์ (Learn on Web) ได้ที่ programminghub.io โดยแบ่งเนื้อหาเป็นตัวอย่างโค้ด (Program) และเนื้อหาอ้างอิง (Reference) สำหรับแอพพลิเคชั่นบนสมาร์ทโฟนจะมีบางภาษาที่สามารถทำการทดสอบเขียนโค้ด และประมวลผลได้ทันที (Playground) ปัจจุบันมีภาษาโปรแกรมให้ศึกษา ดังนี้ Python, Assembly, HTML, VB.NET, C, C++, C# (C Sharp), JavaScript, PHP, Ruby, R Programming, CSS, Java programming เป็นต้น

c language
c language

ทดสอบการทำงานกับแฟ้มขนาด 1 ล้านไบท์

หน้าตาเว็บเพจที่ทดสอบ
หน้าตาเว็บเพจที่ทดสอบ

ได้มีการเขียนเว็บเพจ และใช้ java script มา 4 เว็บเพจ ทุกเว็บเพจมีขนาด 1 ล้านไบท์เท่ากัน
เพื่อทดสอบการใช้เวลา download ของ script แต่ละเว็บเพจ
ทดสอบใน firefox, chrome และ ie มีประเด็นที่สนใจดังนี้
1. เปิด และปิด script ในเว็บเพจ มีผลอย่างไร
2. การ refresh ของแต่ละ browser เมื่อใช้ no-cache แตกต่างกันหรือไม่

โดยใช้ javascript ในการประมวลผลเวลาของแต่ละหน้า ผลการทดสอบที่น่าสนใจ ดังนี้

การทดสอบที่ 1 พบว่า การส่งค่าผ่าน url จะทำให้ load เว็บเพจทั้งหน้าใหม่
เปิดเว็บเพจ http://www.thaiall.com/html/onemillion.htm ครั้งแรก
ใช้เวลาไป 6186 millseconds
เมื่อคลิ๊กลิงค์ Reload แบบส่ง get ใหม่ ใช้เวลาไป 9784 milliseconds
แต่ถ้า Refresh ผ่าน browser จะเรียก script เดิมจากใน cache ใช้เวลา 23 milliseconds

การทดสอบที่ 2 พบว่า การทำงานใน script เดียว ตั้งแต่ต้นถึงท้าย script จะใช้เวลาน้อยมาก
เปิดเว็บเพจ http://www.thaiall.com/html/onemillionv1.htm ครั้งแรก
ใช้เวลาไป 4 millseconds ซึ่งไม่ได้สะท้อนเวลาจริง
เมื่อเปลี่ยนเป็น Reload หรือ Refresh แบบใด ก็ใช้เวลาเท่าเดิม
เพราะทั้งเว็บเพจมีคำว่า script คำเดียว ทุกอย่างอยู่ใน script เดียว หรือ thread เดียว
ไม่มีการเปิดปิด tag script หลายครั้ง เป็นการทำงานใน thread เดียวกัน
จึงได้เวลาจากการประมวลผลตั้งแต่ต้น thread ถึงท้าย thread ไม่แตกต่างกันมากนัก

การทดสอบที่ 3 พบว่า เป็นการทดสอบที่ยืนยันผลของการทดสอบที่ 1
เปิดเว็บเพจ http://www.thaiall.com/html/onemillionv2.htm ครั้งแรก
ใช้เวลาไป 6077 millseconds
ใช้เทคนิคว่า การเปิด tag script ต้นแฟ้ม และปิดทันที เพื่อบันทึกเวลาเริ่มต้น
แล้วเปิด tag script ท้ายแฟ้ม เพื่อประมวลเวลา และแสดงผล
จะแสดงเวลาที่ใช้ ในการ load เว็บเพจ ใกล้เคียงกับความเป็นจริง
คือ ใช้เวลาประมาณ 6 วินาที หรือ 6000 millisecond ต่อการ load หนึ่งครั้ง
แต่ถ้าโหลดจากใน cache ของ browser ก็จะใช้เวลาน้อยมาก คือ ไม่กี่ millisecond

การทดสอบที่ 4 พบว่า เป็นการทดสอบโดยเพิ่ม no-cache ที่ header
ว่า <meta http-equiv=”cache-control” content=”no-cache”>
เปิดเว็บเพจ http://www.thaiall.com/html/onemillionv3.htm ครั้งแรก
ใช้เวลาไป 9562 millseconds
ให้ผลเหมือนกับกรณีทดสอบที่ 1 เมื่อทดสอบบน firefox และ chrome
แต่บน ie (internet explorer) 11
การ refresh ของ browser ใช้เวลา 3776 milliseconds หรือประมาณนี้
สรุปว่า ie ยอมรับคุณสมบัติ no-cache ทำให้การ refresh จะ load ข้อมูลมาใหม่ทุกครั้ง
และการ force reload ด้วยการกด Ctrl-F5 สามารถใช้ได้กับทุก browser ที่ทดสอบ

สรุปว่า การเปิดปิด script หลายครั้ง มีผลแตกต่างกับการเปิดครั้งเดียว
การนำไปใช้ให้เกิดประโยชน์ ขึ้นอยู่กับการออกแบบเว็บเพจ
และคุณสมบัติ no-cache ก็ใช้ได้กับบาง browser เท่านั้น ไม่ควรไว้วางใจ
และการโหลดภาพไม่มีผลต่อเวลาในการโหลดเว็บเพจ เพราะแยกส่วนกันชัดเจน

ระบบรับข้อมูลหนึ่ง ถูก แ+ฮ+ก ด้วย script

process of solution
process of solution

วันนี้ได้รับแจ้งว่าระบบเก่า ถูก post h-a-c-k_e-d
จึงเข้าไปแกะ script แบบค่อย ๆ ไล่ไปทีละแฟ้ม
เพราะเขียนไว้นาน และหลายคน จำอะไรไม่ได้เลย

1. ดู source ซึ่งเป็นผลลัพธ์ พบว่า
script ไม่ได้เสียหาย แต่มีการ post script เข้ามาเป็นข้อมูล

2. ในข้อมูลมี script จริง แสดงว่าไม่มีการ convert ข้อมูลก่อน insert

3. เข้าไปดูระบบรับข้อมูลพบว่าติด captcha แต่เป็น plain text แบบง่าย
แสดงว่า script ที่เข้ามาในระบบเป็นขั้นเทพ ถึงแกะ captcha ออกได้

4. เพิ่มการป้องกันใน form รับข้อมูล
โดยกำหนดเงื่อนไขว่า form ต้องถูกเรียกจาก script ที่กำหนด
ถ้าเรียกจากที่ไหน ๆ ก็จะไม่เปิดฟอร์ม

5. อันที่จริงควรเปลี่ยนข้อมูลด้วย stripslashes เข้าฐานข้อมูล
เพื่อล้าง script แต่นั่นเป็นการแก้ปลายเหตุ
จึงแก้ต้นเหตุ คือ ไม่ให้ข้อมูลเข้า จากขั้นตอนที่ 4
หรือเพิ่มการตรวจสอบก่อน insert ซึ่งมีอีกหลายวิธี

เปลี่ยนรุ่นของ PHP จาก 4 เป็น 5 แล้ว script ใช้งานไม่ได้

เล่าสู่กันฟัง เรื่องปัญหาการปรับเปลี่ยนรุ่นของ server

URL กับ REQUEST_URIURL กับ REQUEST_URI
URL กับ REQUEST_URI

เนื่องจาก script ที่ใช้เคย สามารถใช้งานได้ปกติ
แต่เกิดปัญหาหลัง upgrade server
ที่ต้องใช้ PHP version ใหม่ ก็พบว่า script เดิมใช้งานไม่ได้
ตรวจดูก็พบว่าค่าของระบบ _SERVER ที่เคยส่งให้กับ script ภาษา PHP
ไม่ยอมส่งค่าให้ตามปกติ คือ ไม่ส่งอะไรคืนมาเลย
ต้องแก้ไขโดยกำหนดการรับค่าจากระบบ เป็นค่าใหม่

เดิมรับค่า “URL” ก็ต้องเปลี่ยนเป็นรับค่า “REQUEST_URI”

ซึ่งเหตุการแบบนี้เกิดขึ้นได้ในปัจจุบัน และเกิดขึ้นอีกอย่างแน่นอนในอนาคต
เมื่อต้องมีการ upgrade server ในปีต่อ ๆ ไป

การแสดงรายชื่อตารางทั้งหมดใน MSSQL

EMS : MSSQL Manager
EMS : MSSQL Manager

มีโอกาสเข้าใช้ MSSql หรือ SQL Server แต่ผู้ดูแลไม่ได้แจ้งว่าตารางที่ผมเข้าถึงได้ คือ ตารางชื่ออะไร
จึงเขียน 2 โปรแกรม สำหรับตรวจสอบข้อมูล
เพื่อจัดทำโปรแกรม insert, delete, update, select ต่อไป

1. โปรแกรมแสดงรายการตารางทั้งหมด

$strSQL = “SELECT * FROM sys.Tables”; // order by name”;
$strQuery =  mssql_query($strSQL);
while($result = mssql_fetch_array($strQuery)) { echo $result[0]  . “<br/>”; }

2. โปรแกรมแสดงรายการเขตข้อมูลทั้งหมด
$strSQL = “SELECT * FROM sys.columns”;
$strQuery =  mssql_query($strSQL);
$f0 = “”;
while($result = mssql_fetch_array($strQuery)) {
if ($f0 != $result[0]) echo “<hr/>”;
echo $result[0]  . ” ” . $result[1]  . “<br/>”;
$f0 = $result[0];
}

ปล. อันที่จริงถ้าใช้ SQL Manager จะดีกว่านั่งเขียน Script เพราะ host กับ user ก็รู้หมดแล้ว

EMS : MSSQL Manager
http://www.sqlmanager.net/en/downloads

Microsoft SQL Server  2008 Management Studio Express
http://www.microsoft.com/en-us/download/details.aspx?id=7593

วางแผ่นใสอีกแผ่นหนึ่งเหนือเว็บเพจ

free samsung galaxy : comparation
free samsung galaxy : comparation

5 มี.ค.55 มีโอกาสปรับ script ใน http://www.nation-u.com/2554/index.php เพื่อแสดงป้าย banner จาก http://www.nation.ac.th ที่มีข้อความสำคัญว่า “ฟรี … Samsung Galaxy Tab 10.1 สำหรับนักศึกษาใหม่ทุกคน เพื่อใช้ในการเรียนที่มหาวิทยาลัยเนชั่น” เมื่อทดสอบการแสดงผลกับ IE8 และ FireFox 3.6.6 พบว่าแสดงผลได้ปกติ
โดยใช้ script วาง layer ดังนี้
<body>
<div style=”position:absolute;width:100%;top:40px;text-align:center”>
<iframe width=”950″ height=”465″
src=”http://www.nation.ac.th/banner.html” frameborder=”0″ scrolling=”no”>
</iframe>
</div>

ค่า Pagerank ได้จาก http://www.checkpagerank.net
พบว่า nation.ac.th มีค่า PR = 5 และ Alexa Rank = 4,270,710
พบว่า nation-u.com มีค่า PR = 5 และ Alexa Rank = 2,405,535

สร้างบริการตรวจข้อมูลบน ldap

ldap checking
ldap checking
29 ก.ย.54 มีโอกาสต้องสืบค้นข้อมูลบน ldap server เดิมทีจะใช้ ldap client ติดต่อเข้าไป ซึ่งเป็นซอฟท์แวร์ที่ต้องมีการติดตั้ง หากต้องการตรวจสอบผ่านเว็บเพจก็ต้องเขียน script ขึ้น เพื่อให้สามารถใช้บริการจากเครื่องใดก็ได้ในระบบ LAN ที่มีไอพีขึ้นต้นด้วย 172 (ตาม script)
มีตัวอย่าง php script ดังนี้
<?
// config
$host = "ldap://xxx.xxx.xxx";
$domain = "xxxxx";
$pass = "xxx";
// form
if (!isset($_POST["act"]) && substr($_SERVER["REMOTE_ADDR"],0,3) == "172"){
?>
<form action="" method="post">uid <input name=uid><br>
<select name=ou size=8>
<option value="ou=MANAGER,ou=SALE">Manager</option>
<option value="ou=STAFF,ou=SALE">Staff</option>
</select>
<br>form password <input name=fpass type=password>
<br><input type=submit name=act value=check>
</form>
<? exit; }
if ($_POST["fpass"] != "xxxx") { echo "invalid"; exit; }
//
$baseDn2 = 'uid='.$_POST["uid"].','.$_POST["ou"].',dc='.$domain.',dc=com';
$baseDn1 = 'cn=Manager,dc='.$domain.',dc=com';
//
$ldap = ldap_connect($host);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$b = ldap_bind($ldap,$baseDn1,$pass) or die("bind died");
if($b) echo "<pre>{$_POST["uid"]} \n";
$result = ldap_search($ldap, $baseDn2,"(cn=*)");
$rec = ldap_get_entries($ldap,$result);
if (!isset($rec[0]["data"][0]))
echo "not found"; else echo $rec[0]["data"][0];
ldap_unbind($ldap);
?>

พบปัญหาการตัดนามสกุลใน e-document script

edit managefile
edit managefile

พบปัญหาการตัดอักษรจากชื่อแฟ้มผิดพลาดในระบบ e-document รุ่นที่ใช้กับมหาวิทยาลัย จากที่เคยทดสอบจะไม่ใช้ . ในชื่อแฟ้ม เพราะ . นิยมใช้กั้นระหว่างชื่อแฟ้มกับนามสกุลแฟ้ม แต่มีผู้ใช้บางท่านใช้ . เป็นบางส่วนของชื่อแฟ้ม ทำให้การแสดงรายชื่อแฟ้มไม่ครบตามที่ผู้ใช้คาดหวัง จึงเพิ่มบรรทัดที่ 142 สำหรับรวบรวมชื่อแฟ้มใหม่ให้ถูกต้อง และเปลี่ยนการแสดงชื่อแฟ้มจากอาร์เรย์ตัวที่ 0 มาเป็น $newcut ในบรรทัด 145 ตามตัวอย่าง (script ตัวนี้ไม่เผยแพร่ เพราะ upgrade สำหรับงานเฉพาะของมหาวิทยาลัย ที่ทำงานร่วมกับระบบภาระงาน และเอกสารประกันคุณภาพแล้ว) แต่รุ่นที่เผยแพร่คือ http://www.thaiall.com/perlphpasp/source.pl?9102

ดึงข้อมูลจากเว็บบอร์ดมานำเสนอ

phpbb
phpbb

18 ต.ค.53 ข้อมูลในเว็บบอร์ดด้วย phpbb นั้น สามารถนำออกมาแสดงด้วยรูปแบบต่าง ๆ ครั้งหนึ่งเคยดึงไปแสดงใน iframe ของระบบวิทยุออนไลน์ (radio online) มาวันนี้ปรับโดยเติม template เดิมของมหาวิทยาลัย แต่มีปัญหา encoding จึงแก้ไข 3 อย่างคือ 1) กำหนด text file เป็นแบบ utf8 2) กำหนด content-type เป็น utf-8 เพียงเท่านี้ก็สามารถดึงข้อมูลจาก phpbb มาแสดงผลได้ตามต้องการ 3) ข้อมูลที่ include เข้ามามีปัญหาเกิดควบคุม ผมจึงคัดลอก html มาวางใน script ตัวใหม่ .. code นี้ยังไม่ผ่านการ optimization เขียนแบบง่ายให้ได้ผลก็พอแล้ว ซึ่งเป็นเทคนิคที่ไม่ดีเลย