The Art of Tar

ที่มาที่ไปของ blog ตอนนี้ก็คือ เนื่องจากว่า tar เป็นคำสั่งยูนิกส์อีกคำสั่งหนึ่งที่คิดว่านักพัฒนาหลายคนควรจะรู้จัก แต่มันเป็นปัญหาของผมเองว่าจะใช้ทีไรก็ต้องมานั่งหา options ที่จะต้องใช้อยู่เรื่อยๆ จำไม่ได้สักที เลยคิดว่ามีทางแก้อยู่ 2 วิธีคือ ใช้นี้คำสั่งบ่อยๆ หรือไม่ก็อ่านให้เข้าใจแล้วจับมาวางไว้ที่ไหนสักที่คงจะทำให้จำได้บ้าง อย่างน้อยก็มีแหล่งข้อมูลที่แน่นอนได้บ้าง

Tar File

Tar File

แล้ว tar คืออะไร

tar มาจากคำว่า “Tape ARchive” เป็นโปรแกรมที่มีจุดประสงค์ตรงไปตรงมาคือเอาไว้สำหรับทำ archive ไฟล์ ลงบน Tape [เป็นอุปกรณ์สำรองข้อมูลสมัยดึกดำบรรพ์] แต่ไม่ใช่เก็บอย่างเดียวเท่านั้นที่ tar ทำได้ เพราะ tar เองก็ยังให้เราปรับปรุงข้อมูลที่อยู่ในไฟล์ได้ตามต้องการ โดยที่ไม่จะเป็นต้องแกะไฟล์ออก แล้วเก็บเข้าไปใหม่ ปัจจุบันเวอร์ที่เขียนออกมา เป็นเวอร์ชั่น 1.22 [ออกเมื่อวันที่ 5 พ.ค. 2552]

วิธีใช้งาน

# tar [OPTIONS...] [FILE...]

วิธีการใช้งานก็ง่ายๆ แบบในตัวอย่าง คือใช้คำสั่ง tar ตามด้วย OPTIONS ที่ต้องการ เมื่อเสร็จแล้วเราจะได้ output เป็น tar file [*.tar] โดยจะมีที่จำเป็นต้องใช้และควรจำดังนี้ครับ

ออฟชั่นหลัก
  -c  สร้าง archive
  -d  หาความแตกต่างระหว่างไฟล์ใน archive และในไฟล์ต้นฉบับ
  -A  เพิ่มไฟล์ใหม่เข้าไปใน archive
  -r  เพิ่มไฟล์ใหม่โดยนำเอาไปต่อท้ายรายการของไฟล์ใน archive
  -t  แสดงรายการของไฟล์ที่มีทั้งหมดใน tar file
  -u  เพิ่มเฉพาะไฟล์ที่มีการแก้ไขเข้าไปใน tar file
  -x  แกะไฟล์ภายใน tar file

บีบอัดไฟล์
  -j  ใช้ filter bzip2 กับ tar file => *.tar.bz2, *.tb2, *.tbz2
  -z  ใช้ filter gzip กับ tar file => *.tgz, tar.gz

ตัวอย่าง

  # tar cf archive.tar foo bar      # สร้าง tar ไฟล์จาก 2 ไฟล์ ได้แก่ foo bar
  # tar tvf archive.tar             # แสดงรายชื่อไฟล์ใน archive.tar
  # tar xf archive.tar              # แกะไฟล์ archive.tar

ข้อมูลจาก
tar –help
Tar – GNU Project
GNU tar – Tutorial Introduction

ทวีตเตอร์ != ทวีสเตอร์

ไม่รู้ว่าคนที่เอาไปใช้หากิน [เช่น สื่อ เป็นต้น] จะให้ความสนใจกับแหล่งที่มา กับความถูกต้องกันแค่ไหน หรือสักแต่เห็นว่าลอยมาตามลมแล้วก็คว้าลงหน้าหนึ่ง [อย่าเอานิสัยหนังสือพิมพ์ไทยมาใช้] เพราะเท่าที่เห็นหลายคนใช้ “ทวิสเตอร์” “ทวิสเตอร์” และ”ทวิสเตอร์” จนไม่มีคนสนใจว่าจริงๆ แล้ว twitter มันอ่านว่า “ทวิตเตอร์” ไม่ใช่ “ทวิสเตอร์” เพราะ “ทวิสเตอร์” คือน้ำส้ม

ผิดครั้งแรกผมทำใจได้เพราะว่าคนเรามันต้องผิดกันบ้าง เล็กๆ น้อยๆ

แต่ครั้งที่ 2 ครั้งที่ 3 และผิดเรื่อยๆ มันแสดงให้เห็นคุณไม่ให้ความสนใจที่จะตรวจสอบความถูกต้องก่อนเผยแพร่

Million Ways to Buy a New Phone

ช่วงนี้เกิดอาการนอยด์หลายอย่างรวมๆ กัน เพราะมีหลายเรื่องมากดดันพร้อมกันทีเดียวหลายเรื่อง ยิ่งเย็นวันพุธที่แล้ว[19 สค. 2552] มีเรื่องให้ปวดใจกันอีกเลยหาเรื่องซื้อของมันซะเลย ของที่ว่าก็คือโทรศัพท์มือถือนั่นเองเพราะว่าเครื่องเก่าก็ 4 ปีเห็นจะได้ ช่วงนี้เครื่องยิ่งเอ๋อๆ อยู่พอดี ในเมื่อโอกาสประจวบเหมาะพร้อมกันหลายอย่างแล้วก็ได้ฤกษ์เสียเงินกันล่ะครับวันนี้ วันพุธตอนเย็นหลังเลิกเรียนก็เลยเดินไปที่ เซ็นทรัลแจ้งวัฒนะ

แน่นอนครับแหล่งขายมือถือมาตรฐานคือชั้นใต้ดิน ก็เลยเดินไปแป๋บแล้วก็ไปหาซื้อเลยครับ มองไปมองมา อ่ะ Nokia Shop มีด้วย ก็เลยแวะดีกว่าอย่างน้อยก็ซื้อจากศูนย์นี่ล่ะ มีอะไรจะได้กลับมาเฉ่งได้เต็มที่ ผมเองเท่าที่หาๆ ข้อมูลมา [ไม่ถึงชั่วโมง] เล็งๆ Nokia 5630 ไว้ เพราะไม่ค่อยชอบโทรศัพท์ฝาพับหรือมีกลไกที่ตัวเครื่องมากเท่าไหร่ เพราะกลัวว่าจะใช้ไม่ทน เข้าไปที่ร้านก็ถามโน่นถามนี่ไปนิดหน่อยว่าใช้โน่นได้ไหม ใช่นั่นล่ะได้หรือเปล่า ความจริงผมว่าลองดูในเว็บจนขึ้นใจแล้วล่ะ แต่อยากลองทำตัวโง่ๆ ดูบ้างดูว่าคนขายจะปล่อยของมาหรือเปล่า สุดท้ายก็เออซื้อนี่ล่ะ แต่เอาเข้าจริงของดันหมดซะงั้นเห็นโทรคุยกันกับที่ร้านใหญ่ ตกลงบอกว่าให้รออีกชั่วโมงถึงจะได้ของระหว่างนี้ให้ทำเรื่องจ่ายเงินไปก่อนแล้วกันนะ [พอดีว่าจะจ่ายด้วยบัตร] ได้ยินแบบนั้นก็เกิดอาการตกใจนิดหน่อย เพราะตอนแรกแกก็บอกว่าให้รอ แต่ไม่คิดว่าจะรอถึงชั่วโมง ผมก็เลยขอไม่ซื้อดีกว่า แล้วก็รีบเดินออกมา กลับมาขึ้นรถเพื่อจะออกมาขึ้นรถที่หน้า ไอที สแควร์

พอเดินผ่านที่หน้าไอทีสแควร์แล้วก็เออนึกได้อย่างน้อยที่นี่มันก็น่าจะมีบ้างล่ะ ลองเดินหาดูก็มีจริงๆ เป็นร้านของ Nokia Shop มาออกบูตลดราคาอยู่อีกที่จากร้านที่ขายประจำ [ที่รู้เพราะว่ามีเรื่องให้ต้องรู้ทีหลัง] เลือกไปเลือกมาก็เห็นรุ่นเดิมนี่ละ ไปถึงก็ถามโน่นถามนี่ตามปกติเช็คของคนขาย สุดท้ายก็ชี้แล้วขอ 1 ตอนนั้นจะเอาสีแดงปรากฎว่าเครื่องที่ร้านตรงนั้นไม่มีอีกแล้วครับ คนขายเลยต้องไปเอามาให้ แต่ติดที่ว่าผมจะจ่ายเป็นเครดิต คนขายเลยจะขอเอาทั้งบัตรเครดิต + บัตรประชาชนไปรูดจ่ายเงิน ติดใจนิดหน่อยเพราะว่าปกติไม่ค่อยอยากใจให้บัตรพวกนี้ใครไปเท่าไหร่ แต่ไม่รู้วันนั้นนึกยังไงก็เลยให้ไป รออยู่เกือบ 20 นาทีได้ คนที่ไปเอามาให้หยิบกล่องโทรศัพท์มาพร้อมสลิปบัตรที่รูดไปแล้วเรียบร้อย มายิ้มๆ ใส่แล้วพูดว่า “พี่ครับ สีแดงไม่มีเลยเอาสีน้ำเงินมาให้” เฮอะๆ ช่วงนั้นปิ๊ดครับ เพราะบอกไปแล้วว่าเอาสีแดง แต่ดันไปเอาสีน้ำเงินมาให้ แล้วอีกอย่างที่ทำให้โกรธก็คือ รูดบัตรไปแล้วเรียบร้อย เอ่อเงินผมนะครับ 8,000 กว่า เอาของมาให้ไม่ตรงกับที่สั่งด้วย เลยบอกว่า “ผมไม่เอาครับ” สุดท้ายก็ต้องเดินไปที่ร้านสาขาใหญ่ของเขาเพื่อไป refund เงินที่จ่ายไปเมื่อกี้ ระหว่างเดินยังมาบอกว่า “ขอโทษนะครับพี่ ผมรีบ แล้วไม่ทันดูตอนที่น้องอีกคนไปเอาของให้” ช่วงนั้นโกรธมากครับ ตัวสั่นกันเลยทีเดียว แต่ไม่ชอบด่าใครแรงๆ เพราะว่ามันดูน็อตหลุดพิกล ผมเลยพยายามคุมสติแล้วตอบกลับไปว่า “ไม่เป็นไรครับ แต่คราวหลังดูด้วยแล้วกัน เพราะแบบนี้มันแสดงว่าคุณทำงานห่วยแตก แล้วอีกอย่างมันทำให้คนอื่นเสียเวลา” ถึงร้านผมเลยขอสำเนาบัตรเครดิตกับบัตรประชาชนคืนแล้วก็ยืนฉีกมันตรงหน้าร้านนั่นล่ะ 555+ [ช่วงนั้นรู้สึกเหมือนพวกโรคจิตมาก] พอคนขายเดินกลับมาแล้วบอกว่า refund เรียบร้อยแล้ว ก็เลยรีบเดินออกจากร้านแบบที่คนขายยังพูดไม่ทันขาดคำเพราะตอนนั้นกลัวพลั้งปากจริงๆ สุดท้ายก็เลยรีบเอา sim ที่ถอดออกมาเตรียมพร้อมจะใส่เครื่องใหม่ ใส่ลงไปในเครื่องเก่า [ตรงนี้ยิ่งทำให้เสียความรู้สึกเพิ่มขึ้นอีก] โทรไปคุยกับทาง call center ของทางบัตรว่ามีรายการขอ refund ไปแล้วหรือยังปรากฎว่ามีครับ ก็อารมณ์ดีขึ้นมาหน่อย สุดท้ายก็นั่งรถกลับรังสิตครับ

แต่ผมก็ยังอยากได้อยู่ :P

กลับมาลงรถที่ฟิวเจอร์รังสิตครับ เห็น Nokia Shop อยู่แล้วล่ะก็เลยเออลองไปดูดีกว่า ลงรถแล้วก็เดินตรงไปที่ร้านเลยครับถามไปก็ 8,400 กว่า พอดีกว่าเดินแถวนี้จนลื่นก็เลยลองไปดูชั้นบนที่ขายโทรศัพท์ดีกว่า แถวไปดูที่ MFA ครับ ปรากฎว่าแพงกว่าอีก สุดท้ายเลยมาจบที่ Nokia Shop จะซื้อ 5630 เหมือนเดิม ชี้ๆ แล้วบอกว่าพี่เอานี่ล่ะสีแดงนะ คนขายหายไปพัก แล้วกลับมาบอกว่า “ไม่มีค่ะ ตอนนี้ของหมด มีแต่สีน้ำเงิน” เอ่อหน้าชาอีกเล็กน้อย หนีสีน้ำเงิน มาเจอสีน้ำเงิน แต่เห็นอีกรุ่นหนึ่งคือ 5800 นี่ล่ะครับเล็งมานานแล้วเหมือนกัน ดูไปดูมาสุดท้ายก็เลยตกลงปลงใจกับ 5800 แบบจำยอมล่ะครับ รู้ไหมผมได้เครื่องสีอะไร

Nokia 5800 “สีน้ำเงิน”

-”- ดวงคงจะต้องได้สีน้ำเงินจริงๆ เพราะเห็นว่ามีสีดำ กับสีน้ำเงิน สีดำเท่าที่ดูแล้วไม่เกิดครับ เลยเอาสีนี้ดีกว่าแต่มีหน้าชาเล็กน้อย สุดท้ายตอนจะจ่ายเงินพนักงานก็พาไปนั่งรอในห้องลับ :P คุยโน่นคุยนี่นิดหน่อย ได้โทรศัพท์ + ร่ม ตอนเปลี่ยน sim คนขายก็บอกว่าให้ไปเปลี่ยน sim นะรุ่นเก่ามันไม่ค่อยรองรับกับโทรศัพท์รุ่นใหม่ๆ สุดท้ายก็เดินตัวปลิวออกจากร้าน แอบมาแวะที่ AIS อีกแป๋บเพื่อเปลี่ยน sim ตอนเปลี่ยน sim ต้องเปิดฝาหลังเครื่องออกมา แต่ตอนนี้โทรศัพท์มันล็อคอยู่ต้องปลดล็อคมันก่อน ปัญหาแรกที่ใช้งานก็คือ “มันปลดล็อคเครื่องตรงไหนฟร่ะ” ให้พนักงานช่วยแกะอยู่นาน สุดท้ายพี่พนักงานก็ต้องไปหาตัวช่วย เท่าที่ดูแล้วรุ่นนี้แกะฝายากมาก ขนาดคนขายเองยังแกะลำบาก และแล้วก็เปลี่ยนเรียบร้อย

ใช้แล้วตอนนี้ก็ไม่มีปัญหานะครับ รู้สึกดีที่ว่าวันถัดมาก็ได้ครั้งแรกก็ได้ใช้เรื่องงานเลย เพราะตั้งค่าอีเมล์แอคเคาท์ก็ได้ใช้เรื่องงานทันที แต่ไม่เข้าใจที่ว่า Nokia ยอมอุทิศปุ่ม 1 ปุ่มเพื่อปลดล็อคเครื่อง เลยแอบงงอยู่นิดหน่อยครับ

Object Oriented Programming with JavaScript I

ช่วงนี้ได้ใช้ JavaScript แบบจริงๆ จังๆ กับเขาบ้าง เพราะต้องเอาไปต่อกับ REST ในหน้าเพจที่ทำแต่เห็นว่าบางอย่างมันต้องเขียนโค้ดแบบเดิมซ้ำไปซ้ำมาอยู่เรื่อยก็เลยเกิดความคิดไปหาวิธีใช้งานแบบ OOP สำหรับ JavaScript ซะหน่อยดีกว่า เคยอ่านผ่านๆ ตาหลายรอบแล้วเหมือนกันแต่ไม่ค่อยได้เอาจริงเอาจังกับมันซะเท่าไหร่ครับ ตอนนี้งาน JavaScript เข้าจังๆ ก็เลยมีเหตุจำเป็นให้ต้องลอง นอกจากนั้นก็เป็นข้อดีหลายอย่างของการเขียน OO ที่ผมชอบก็คือ Reusable, Inheritance และ Encapsulation แต่ต้องบอกก่อนว่าการเขียนโปรแกรมแบบนี้ไม่ใช่เรื่องแปลกอะไร เพราะมันก็ทำได้ตั้งนานแล้วครับ blog ตอนนี้ก็คงเป็นการเอามะพร้าวห้าวมาขายสวนอีกตามเคยครับ :)

ความจริง เท่าที่ได้อ่านวิธีการเขียนก็คงไม่ใช้ OOP เหมือน Java หรือ PHP เท่าไหร่ เพราะใช้วิธีการแปลกๆ ของ JavaScript มาช่วยแต่ถึงอย่างไรวิธีการนี้ก็ใช้แนวคิดของ OO มาช่วยพัฒนาเลยหยวนๆ ถือว่าเป็น OOP แล้วกันครับ :)

hello, world

...
<script type="text/javascript" charset="utf-8">
	function HelloWorld(msg) {
		var defaultMessage = "HELLO, WORLD!!!";
		this.message = msg || "สวัสดีชาวโลก";

		alert('Let me say');

		this.goodie = function(m) {
			m = m || "?";
			alert(m + " " + good());
		}

		var good = function(m) {
			return "good day";
		}
	}

	function sayHi(m) {
		var hi = new HelloWorld();
		hi.goodie(m);
		hi.goodie(hi.message);
		hi.goodie(hi.defaultMessage);
		hi.good("Goodbye");
	}
</script>

</head>

<body id="index" onload="sayHi('สวัสดี')">
...

ด้านบนก็เป็นตัวงอย่างของการเขียน JavaScript แบบ OO ครับ ในที่นี้ “HelloWorld” จะทำหน้าที่เป็นคลาสจะ ให้ function sayHi เรียกใช้งาน โดยที่แนบตัวแปร message ไปให้ด้วย ใน script นี้จะมี alert message ให้เราเห็นทั้งหมด 4 หน้าต่างครับ ตามนี้เลยครับ แต่ก่อนเริ่มอาจจะต้องอธิบายกันนิดหน่อยเพื่อว่าจะมีคนไม่รู้ เครื่องหมาย “||” นี้ผมไม่รู้ชื่อวิธีเรียกมันอย่างเป็นทางการนะครับ แต่วิธีการทำงานก็คือโปรแกรมจะเปรียบเทียบว่าตัวแปรที่อยู่ด้านซ้ายเป็นค่าว่าง (null) หรือเปล่าถ้าใช้จะนำค่าที่อยู่ด้านซ้ายมาให้โดยอัตโนมัติ

Constructor

Constructor

Constructor


เป็น Constructor ของคลาส HelloWorld คิดง่ายๆ ก็คือ ทุกอย่างที่ไม่ได้ครอบไว้ด้วย function จะเป็น Constructor ของคลาสทั้งหมด

Assign

Assign

Assign


ตัวอย่างของการส่งค่าให้กับฟังก์ชั่น goodie ที่เป็น method ที่อยู่ภายในคลาส HelloWorld

Public Access

Public Variable

Public Access


ตัวอย่างการเข้าถึง Public variable ของคลาส “HelloWorld” สังเกตุได้ที่ตัวแปร “message” ที่อยู่ภายในคลาส “HelloWorld” ด้านบนที่นำหน้าด้วย this มีค่าเหมือนกับการใส่ “public”

Private Access

Private Access

Private Access


เป็นการเข้าถึงตัวแปรที่เป็นระบุไว้ว่าเป็น private ผลที่ได้คือไม่สามารถเข้าถึงได้เห็นได้จากค่าทีไ่ด้ออกมาจะเป็น ‘?’

ส่วนหน้าต่างสุดท้ายจะไม่ปรากฎให้เห็นเนื่องจากฟังก์ชั่น ‘good’ ถูกระบุให้มีชนิดการเข้าถึงแบบ private

นอกจากนี้ยังเขียนให้คลาสสามารถสืบทอดคุณสมบัติกันได้เหมือนภาษา OOP ทั่วไป แต่ยังไงก็ขอติดไว้ตอนหน้าแล้วกันครับ

Live Demo

หัวกระดาษ ท้ายกระดาษ กับ Pages

ตอนนี้มีเรื่องให้ทะเลาะกับ Pages เรื่อยๆ วันก็เลยเล่นซนจนได้เรื่องอีกแล้ว เรื่องของเรื่องคือตอนนี้กำลังเขียนรายงานอยู่เล่มครับ ระหว่างแก้ไปก็หยิบหนังสือมาอ่านเห็นอยู่อย่างที่ชอบคือ ที่ด้านล่างบริเวณที่ภาษาฝรั่งเรียกว่า “Footer” ของหนังสือ จะมีชื่อหนังสือ ชื่อบทแล้วก็เลขหน้า ซึ่งด้านซ้าย กับด้านขวาก็ไม่เหมือนกันอีก ก็เลยเกินความอยากลองของครับ เพราะอยากจะรู้ว่า Pages มันทำแบบนี้ได้ไหม ลองหาข้อมูลดูใน Apple Discussions ก็เจอวิธีทำครับ เห็นว่าเจ๋งดีเลยเอามาเขียนไว้ในบล็อกดีกว่า จะได้ไม่ลืม [เอามะพร้าวห้าวมาขายสวนกันดีๆ นั่นเอง]

ใส่ Section

เมื่อเปิด Pages มาแล้วให้เลือกกระดาษเปล่าๆ มา 1 แผ่นครับ จะแนวตั้งหรือแนวนอนก็แล้วแต่สะดวกครับ เพราะไม่มีผลอยู่แล้ว จากนั้นให้เพิ่ม Section เข้าไปครับ วิธีการคือ กดที่ปุ่ม ‘Sections‘ ที่หน้าต่าง Pags หรือเมนู ‘Insert -> Sections‘ ซึ่งก็จะมีให้เลือกอีกล่ะครับ ว่าจะป็น Text Page หรือว่า Blank Page เลือกเอาตามชอบครับตรงนี้ถือว่าสำคัญมากครับ เพราะจะเป็นการใส่เขตรูปแบบที่เราต้องการไม่ให้ไปปะปนกับ Sections อื่นครับ ส่วนตัวผมจะใช้ 1 Section ต่อ 1 บท ครับ เพราะจะสะดวกเมื่อต้องการเปลี่ยนหน้า หรือลำดับบทครับ ลากไปลากมาได้ทั้งบทเลย เมื่อใส่ Section เรียบร้อยแล้ว ลองเปิด Page Thumbnail [option + command + P, View -> Pages Thumbnails] ดูจะมีกรอบสีเหลือง ครอบ Section ที่เราเอาเม้าส์คลิกไว้เหมือนใน Fig.1 ครับ

Fig.1: เลือก Section

Fig.1: เลือก Section

จะเห็นได้ว่าในกระดาษของผมจะมีเส้นสีเทาๆ ด้วยนะครับจะช่วยเรื่องการจัดวางเลเอาท์ครับ ถ้ายังไม่มีให้ไปที่ View -> Show Layout หรือ Shift + Command + L ครับ

ตั้งค่า Section

ก่อนที่จะใส่ข้อความลงไปในหัวกระดาษ และท้ายกระดาษ ก็ต้องเริ่มต้นด้วยการกำหนดค่าให้กับ Section ปัจจุบันที่เราใช้งานอยู่ก่อนครับ [ต้องจำไว้เลยว่า Section จะแยกการกำหนดค่าบางอย่างจะแยกออกเป็นเอกเทศ] ส่วนการกำหนดค่าต่างๆ จะขอพูดแค่หัวกระดาษอย่างเดียวแล้วกันครับ เนื่องจากวิธีการจะเหมือนกัน เพียงแค่เปลี่ยนคำแหน่งกันเท่านั้น การกำหนดให้เปิดหน้าต่าง Inspector ขึ้นมาครับ [option + command + I, Views -> Show Inspector] เข้าไปที่ Layout Inspector จากนั้นเลือกที่ แท็บ Section จะได้เหมือนใน Fig.2 ครับ

Fig.2: หน้าต่าง Layout Inspector ส่วน Section

Fig.2: หน้าต่าง Layout Inspector ส่วน Section

จะเห็นได้ว่ามี 2 ส่วนย่อยๆ ในแท็บ Section นี้นะครับ คือ Page Number และ Configuration แต่ใส่บล็อกตอนนี้จะขอพูดถึงเพียงแค่ Configuration อย่างเดียวก่อนครับ ว่ากันไปทีละเมนูเลยนะครับ

  • First page is different – จะบอกให้ Pages รู้ว่าหน้าแรกของ Section นี้จะมีการกำหนดค่า ต่างออกไปจากหน้าอื่นๆ ของ Section นี้ เช่น หากเราลบเลขหน้าที่ใส่อัตโนมัติก่อนหน้านี้ที่หัวกระดาษ ก็จะไม่ส่งผลกระทบไปยังหน้าอื่นๆ ภายใน Section นี้
  • Left and right pages are different – ตัวเลือกนี้จะกำหนดให้การตั้งค่าต่างๆ ของหน้ากระดาษด้านซ้าย และด้านขวาต่างกัน ภายใน Section ปัจจุบัน เช่น ต้องการให้หัวกระดาษด้านขวามีชื่อบทเป็น ส่วนหัวกระดาษด้านซ้ายเป็นชื่อหนังสือ ก็สามารถทำได้โดยให้เลือกที่ตัวเลือกนี้ก่อน
  • Use previous headers & footers – ง่ายๆ ครับ คือเอา “รูปแบบ” กำหนดค่า header และ footer ของ Section ก่อนหน้านี้มาใช้นั่นเอง แต่มีข้อควรระวังอย่างหนึ่งก็คือ หากเราแก้ไข header หรือ footer ใน Section ที่เลือกตัวเลือกนี้ จะส่งผลกระทบไปยัง Section ต้นแบบด้วย
  • Section starts on: – กำหนดให้หน้าแรก “ที่มีข้อมูล” ของ Section เริ่มต้นที่ด้านไหน จะมีให้เลือกอยู่ 3 ตัวเลือกด้วยกัน คือ “Any Page“, “Right Page” และ “Left Page” ซึ่งค่า default จะอยู่ที่ “Any Page” คือ เริ่มที่หน้าไหนก็ได้ แต่ถ้าไม่พอใจอยากให้เริ่มต้นด้วยหน้าที่เราต้องการก็ได้ครับ ก็เปลี่ยนได้ตามชอบ โดยส่งที่ Pages จะทำคือจะแทรกหน้าว่างเข้าไป 1 หน้า เพื่อเลื่อนให้หน้าแรกที่มีข้อมูลของ Section ไปอยู่ตรงตำแหน่งที่เรากำหนดครับ

เข้าใจว่าถ้าอ่านอย่างเดียวคงไม่ค่อยเห็นภาพครับ ยังไงลองดาวน์โหลดตัวอย่างไฟล์ไปเล่นดูแล้วกันครับ จะเป็น zip ไฟล์ที่ข้างในจะมีไฟล์ Pages + PDF ที่แปลงมาจาก Pages ครับ แต่คุณภาพอาจจะไม่ดีนักครับเนื่องจากต้องการให้เห็นเป็นตัวอย่างเท่านั้น ในไฟล์ Pages จะแบ่งออกเป็น 3 Section ด้วยกันครับ คือ

  • Section 1: มีหน้า 1 หน้าเดียว
  • Section 2: จะมีหน้า เปล่า 1 หน้า (เนื่องจากผมกำหนดให้ section นี้เริ่มที่ด้านขวา) 2, 3 และ 4
  • Section 3: คือที่เหลือครับ คือ 5, 6 และ 7

โปรแกรมที่ใช้: Pages ’09

ขอให้มีความสุขกับการใช้งานโปรแกรมถูกลิขสิทธิ์ครับ

Google Maps :: แสดงผลข้อมูลการจราจรได้แล้ว

ข้อมูลการจราจรจาก อนุเสาวรีย์ชัยสมรภูมิ ไปยัง มหาวิทยาลัยธรรมศาสตร์ ท่าพระจันทร์

ข้อมูลการจราจรจาก อนุเสาวรีย์ชัยสมรภูมิ ไปยัง มหาวิทยาลัยธรรมศาสตร์ ท่าพระจันทร์

เป็นเรื่องดีไม่น้อยเลยครับ [สำหรับคนหลงทางบ่อยๆ แบบผม] เมื่อ Google Maps สามารถแสดงข้อมูลการจราจรของไทยได้แล้วไม่เพียงแค่เส้นทางการเดินทางนะครับ แต่เป็นข้อมูลการขนส่งด้วย เช่น จะขึ้นรถเมล์สายอะไร จากตรงไหน ใช้เวลาเท่าไหร่ และเวลาโดยประมาณที่จะถึงจุดหมายปลายทาง จากตัวอย่างด้านบน[คลิ๊กที่รูปภาพเพื่อดูของจริง] เป็นตัวอย่างที่ผมลองหาเส้นทางจาก จากอนุเสาวรีย์ชัยสมรภูมิ ไปยังมหาวิทยาลัยธรรมศาสตร์ ท่าพระจันทร์ ก็ได้ผลอย่างที่เห็นครับ นอกจากการเดินทางด้วยรถแล้ว ถ้าสังเกตุดีๆ จะเห็นข้อมูลเส้นทางเรือในแม่น้ำเจ้าพระยาด้วย

จากที่ลองค้นดูอีเมล์ที่ Google แจ้งการปรับปรุงให้ทราบเรื่อยๆ [แต่ไม่ได้สนใจ] ก็พบว่าข้อมูลการจราจร[GTrafficOverlay] เพิ่มเข้ามาตั้งแต่เวอร์ชั่น 2.81 ครับ [ปัจจุบันเวอร์ชั่น 2.170 อัพเดตวันที่ 6 สิงหาคม 2552]

Google Maps: http://maps.google.co.th
Issue Tracker: http://code.google.com/p/gmaps-api-issues/wiki/JavascriptMapsAPIChangelog

วิธีทำ “สารบัญ” สำหรับ Pages

“สารบัญ” (Table of Contents – TOC) ถือได้ว่าเป็นอีกเรื่องหนึ่งทำให้ปวดหัวกันได้อีกเรื่องหนึ่ง ช่วงนี้ต้องมีเรื่องให้ทะเลาะกับพวก Word Processing บ่อยๆ ไอ้จะมานั่งจัดเลขหน้าที่ละหน้าก็เคยเจอประสบการณ์อันเลวร้ายช่วงมหาวิทยาลัยมาแล้ว เลยจำฝังใจครับ เลยลองไปหาข้อมูล ได้ความว่า Word Processing ที่เป็นที่รู้จักกันดี [MS Word, OO.o Writer และ Pages] สามารถสร้างสารบัญอัตโนมัติให้เราได้ทุกตัว ส่วนวันนี้จะมาแนะนำ Word Processing ที่อยู่บน OS X ที่ชื่อว่า Pages ครับ

Pages Inspector

Fig.1: Pages Inspector

อย่างแรกให้เปิดหน้าต่าง Inspector ขึ้นมาก่อนเพื่อกำหนดว่าเราจะเอารูปแบบ [Paragraph Style] มาสร้างเป็น สารบัญบ้าง จากรูปให้เลือก Document Inspector -> TOC จะเห็นว่ามี checkbox อยู่ 2 ฝั่งคือซ้าย และขวา ด้านซ้ายจะเป็นส่วนที่บอกว่าจะเอารูปแบบใดมาทำสารบัญ ส่วนด้านขวาจะบอกให้ Pages ใส่เลขหน้าด้วย

Chapter Style

Fig.2: Chapter Style

จากนั้นก็ลงมือเขียนกันเลยครับ โดยต้องจำไว้ว่าเราเลือก Paragraph Style แบบไหน ให้ไปโผล่ที่สารบัญบ้าง ก็ให้เลือกใช้ Paragraph Style ในกับข้อความที่ต้องการ ถ้ากลัวลืมก็เปิดหน้าต่าง Style Drawer เอาไว้ครับ [command + Shift + T]

Insert -> Table of Contents

Fig.3: Insert -> Table of Contents

จากนั้นให้ใส่หน้ากระดาษเปล่าๆ 1 หน้าครับ แล้วเลือกเมนู Insert -> Table of Contents จะได้หน้าสารบัญดังที่เห็นใน Fig. 4 ครับ เนื้อหาภายในจะปรับปรุงอัตโนมัติเมื่อเราเพิ่มหรือเปลี่ยนแปลงเนื้อหา แต่เราก็บังคับให้ Pages ปรับปรุงสารบัญได้โดยกดปุ่ม “Update Now” ใน Fig.1 ครับ

Fig.5: Table of Contents

Fig.4: Table of Contents

อย่างที่บอกครับ ว่า Word Processing ที่เรารู้จักกันสามารถทำ TOC ได้กันหมดแล้ว ศึกษาข้อมูลได้ตามลิงก์ด้านล่างครับ