Showing posts with label awk(1). Show all posts
Showing posts with label awk(1). Show all posts

Thursday, March 1, 2012

FlOSS และงานด้านวิทยาศาสตร์


และในที่สุด วิทยาศาสตร์เอง ที่ว่าต้องเผยแพร่ผลงานออกมานั้น กว่าจะเปิดเผยออกมาให้เป็นที่ยอมรับได้ มันต้อง ทำซ้ำแล้ว ซ้ำเล่า แทบแม้กระทั้งว่า คนกวาดถนน ก็ยังทำซ้ำกับเจ้าของเรื่อง และให้ผลลัพธ์เหมือนกันด้วย

ข้อจำกัดทุกวันนี้ มีมากขึ้น เมื่อ งานด้านวิทยาศาสตร์ ต้องพึ่งพา คอมพิวเตอร์ ทั้งตัว hardare และ software แม้ว่าตัว โปรแกรมคอมพิวเตอร์ เอง ซึ่งที่สุดแล้ว ต้องตีพิมพ์ออกมาสู่สาธารณะนั้น กลับไม่ให้เปิดเผย

Reproducibility คืออะไรล่ะ อันนี้ นักวิทยาศาสตร์เองน่าจะให้คำตอบที่ดีที่สุดได้น่ะ

จากอุปสรรค หรือข้อจำกัด ด้านนี้ ทำให้ความต้องการที่จะใช้ Free & libre open source software มีมากขึ้น เพราะมันทำไม่ให้ขัด กับ หลักเกณฑ์ทางด้านวิทยาศาสตร์

ต่างประเทศ เขาเริ่มกันแล้ว ทั่วโลก บางส่วนนั้นก็ใช้กัน เพียงจำกัดกันในวงแคบๆ ในหมู่คณะที่ร่วมกันทำงาน เช่นที่ แคนาดา ที่ มะไฟ เคยไปรับทราบสักเมื่อร่วมยี่สิบปีที่แล้วมานั้น เขาก็ใช้ linux กัน หรือแม้กระทั่งเดี๋ยวนี้ หากพวกท่าน ท่านใดท่านนึง เคยได้ยินเพื่อนๆพูดว่า

ใช้กว้อคซิ

นั่นแหละ กว้อค ก็คือ gawk ซึ่งตัว g เองก็เป็นตัวเดียวกันกับ และแทน GNU นั่นเอง

ตื่นได้แล้วมั้ง ส่วนราชการไทย อย่ามัวแต่คุยโวโอ้อวดสรรพคุณผ่านทางตัวหนังสือ วิไสยทัด สาระพัด (สาระ)พัน(ธุร)กิจ เลย มันฟังไม่ขึ้นหรอก software แต่ละตัว มันแพง กลับไปซื้อ ทั้งที่ก็พอเขียนเองได้

ไม่อายรึไง

หลวงพ่อ Mitsuo ท่านเทศน์ให้ฟังเรื่องความอาย ที่เมืองกาญจน์ กลับไม่จำ น่ากลัวว่าคงต้องให้ ขี้แตกคากางเกง ซะล่ะกระหมั่งหนาถึงจะสำนึกรู้สึกตัว

Saturday, February 18, 2012

FreeBSD: system administrators tasks, package

ทุกข์ - อุปาทานในขันธ์ ๕
เจ็บนี้อีกนาน เจ็บจริงๆ
ความที่ใช้งานในสภาพแวดล้อมรุนแรง ความร้อนสูง ฝุ่นเยอะ ใช้งานต่อเนื่องนาน ... ฯลฯ ดังนั้นจึงเกิดกรณีที่เครื่องดับโดยไม่ทันได้ สั่งเสีย อะไรเลย กล่าวคือ ยังไม่ได้ unmount file systems และ shutdown operating system

ผลน่ะหรือ เมื่อเปิดเครื่องมาอีกครั้ง ก็จำต้องลงไปสู่ single user mode และสั่ง

# fsck -y

เท่านั้นเอง ซึ่งมันเป็นเหตุให้ บางส่วนของข้อมูล หายไป แล้วเราก็ไม่รู้ด้วยว่า ส่วนไหน หายไป โดยดูจาก messages ระหว่างที่ทำ ฟี้สกี้, fsck -y, นั้นแล้วบอกได้ว่า

อ้อ ส่วนนี้เน้าะ ที่หายไป ไม่เป็นไร นั่นมันแฟ้มขยะ ...

ไม่มีทางบอกได้เลยในขณะนั้น

ในครั้งนี้ ที่มันเกิดเหตุขึ้นมา ก็เพราะไปเผลอทำ portupgrade เข้า ข้อมูลส่วนที่ขาดหายไปจึงเป็นเพียง, เท่าที่รู้, package informations, ของหลายๆ packages เท่านั้น

ก็ยังนับว่าโชคดีไม่ใช่น้อยเลย

ที่ว่า ไม่ใช่น้อยนั้น ก็เพราะทุกครั้งที่ลงโปรแกรมผ่าน ports มักจะเก็บ binaries เอาไว้ในรูปแบบของ package เสมอ ก็ลำบากเพียงสั่ง

# make package

ก่อนสั่ง

# make clean

เท่านั้นเอง การนี้ มีข้อเสียคือเปลืองเนื้อที่ใน hard disk นอกนั้นแล้ว ไม่ว่าจะคิดในแนวไหนก็ล้วนแต่เป็นข้อดีไปทั้งสิ้น

กับอุบัติเหตุครั้งนี้ทำให้แฟ้มบางแฟ้มเสียหาย เวลาใช้งาน แม้จะไม่มีผลอะไร เพราะโปรแกรมที่ลง ก็ยังอยู่ครบ แต่เมื่อจะทำ portupgrade กลับพบว่า มีปัญหา เพราะเขาบอกว่า บางโปรแกรม นั้น ยังไม่ลง ทั้งๆที่ก็ได้ลงไปแล้ว  .... ฐานข้อมูลส่วนนี้ หายไปนั่นเอง หายไปจากอุบัติเหตุดังกล่าวมาแล้ว

ก็เลยตรวจดูว่ามีโปรแกรมไหนบ้าง ที่ package info[rmations] หายไปด้วยคำสั่ง

# pkg_info

แล้วดูผลลัพธ์ ที่บอกว่า

pkg_info: the package info for package '.....' is corrupt

นั่นแหละ โปรแกรม ..... นั่นแหละ ฐานข้อมูลเสียหาย

แก้ไม่ยาก ก็ลงโปรแกรมนั้นผ่าน port เสียใหม่อีกครั้ง ก็จบ

แฮ่ เครื่องของผม มันเก่ามาก และ  กรอบ มาก ทำงานหนักอีกไม่ไหวแล้วคร้าบ เพราะมั้นตั้ง ร่วมสามสิบโปรแกรม ที่เสียหายในลักษณะนี้

ยังนับว่าโชคดี ที่มี binaries ของโปรแกรมที่ข้อมูลส่วนที่เสียหายนี้อยู่ ครั้งที่สั่ง make package โน้น

เมื่อทราบดั่งนี้แล้ว แนวทางแก้ไขก็คือ
  1. ลบโปรแกรมเดิมที่ลงไว้แล้วนั้นออกไป
  2. ลงโปรแกรมเดิมนี้ จากคำสั่ง pkg_add โดยชี้ไปยังที่เก็บแฟ้มที่เราได้สร้างไว้แต่คราวสั่ง make package นั้น
เราทราบว่า โปรกรมดังกล่าว ดูได้ หรือ รู้ได้จากคำสั่ง pkg_info แล้วบรรทัดไหที่ขึ้นต้นด้วย pkg_info: ก็ นั่นแหละ โปรกรมนั้นแหละ ที่ฐานข้อมูลมันเสียหาย เราก็กรองเอามา ดังนี้

# pkg_info | grep ^pkg_info >  packages-info-brokens

จากนั้นก็ส่งไปเก็บไว้ในแฟ้ม ชื่อ packages-info-brokens อีกทีหนึ่ง โดยการ redirection ธรรมดาๆ

ตัวอย่างของแฟ้มที่ ฐานข้อมูลเสียหายก็ประมาณนี้

pkg_info: the package info for package 'mousepad-0.2.16_8' is corrupt
pkg_info: the package info for package 'mplayer-1.0.r20111218_3' is corrupt
pkg_info: the package info for package 'org-mode.el-emacs23-7.4' is corrupt
pkg_info: the package info for package 'p5-Compress-Raw-Bzip2-2.048' is corrupt
pkg_info: the package info for package 'p5-Parse-Yapp-1.05' is corrupt
pkg_info: the package info for package 'p5-Switch-2.16' is corrupt
pkg_info: the package info for package 'p5-XML-DOM-1.44' is corrupt
pkg_info: the package info for package 'p5-XML-RegExp-0.03' is corrupt
pkg_info: the package info for package 'p5-XML-XQL-0.68' is corrupt
pkg_info: the package info for package 'p5-YAML-Syck-1.19' is corrupt
pkg_info: the package info for package 'qt4-network-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-opengl-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-porting-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-qt3support-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-script-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-sql-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-sqlite-plugin-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-svg-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-uic3-4.7.4' is corrupt
pkg_info: the package info for package 'smplayer-0.6.10' is corrupt
pkg_info: the package info for package 'wxgtk2-common-2.8.12' is corrupt
pkg_info: the package info for package 'wxgtk2-contrib-2.8.12' is corrupt
pkg_info: the package info for package 'wxgtk2-contrib-common-2.8.12' is corrup

ตัวโปรแกรมนั้น จะอยู่ระหว่างเครื่องหมาย single quote ก็ง่ายเลย ใช้ awk(1) เขียน sh script มาจัดการได้เลย ง่ายๆสำหรับการลบออก

#  awk -F\' 'BEGIN {print "#\!/bin/sh\nset -x\n"} {print "/usr/sbin/pkg_delete -f "$2}' packages-info-brokens > z-d-pkgs-brokens

และการลงโปรแกรมที่ได้ลบออกไปด้วย

#  awk -F\' 'BEGIN {print "#\!/bin/sh\nset -x\n"} {print "/usr/sbin/pkg_add -ifF /kaitag/packages/All/"$2".tbz"}' packages-info-brokens > z-a-pkgs-brokens


แล้วก็กำหนด permission mode ให้เป็น +x ทั้งคู่


# chmod +x z-d-pkgs-brokens z-a-pkgs-brokens


ที่สุดก็ลำบากเพียงสั่ง


# ./z-d-pkgs-brokens
# ./z-a-pkgs-brokens


เท่านั้นเอง ก็ได้แต่หวังว่า คงพอเกิดประโยชน์กับเพื่อนๆบ้าง และ หวังว่าคงเกิดประโยชน์แต่เพียงประเทืองปัญญา แต่ไม่ได้หวังว่าจะได้ใช้ น่ะครับ
อ้อ ลืมไป ปกติ เวลาสั่ง make package นั้น binaries จะเก็บไว้ใน /usr/ports/packages/ ครับ แต่ ผมกำหนดให้ไปเก็บที่ /kaitag/packages/ ครับ และเขาจะนำไปเก็บภายใต้ ..../All/ นั้น อีกเตาหนึ่ง

ลืมไปอีกครับ  ยังคงลืมไป (ติดใจอยากอยู่ต่อ) เราต้องทำ pkgdb -F ด้วย เพื่อให้ฐานข้อมูลส่วนที่ขาดหายไปนี้ กลับมามีคืนดั่งเดิม

ทุกข์ ควรกำหนดรู้


    View My Stats