Friday, August 31, 2012

PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 4)


       บทความสุดท้ายแล้วนะครับในเรื่องการทำปฏิทิน โดยก่อนหน้านี้เราได้ทำปฏิทินที่สามารถเลื่อนเปลี่ยนเดือนได้มาแล้ว ในบทความเรื่อง


       ซึ่งเราจะพบว่าหากเรานำไปใช้กับเนื้อหาภายในเว็บไซต์หนึ่งๆนั้นเมื่อเราคลิกเพื่อเลื่อนไปดูเดือนอื่นๆ เราจะพบว่าหน้าเว็บไซต์เราจะต้องถูก รีเฟรช ไปด้วยซึ่งมันอาจจะทำให้เราไม่สะดวกในทุกๆครั้งที่เลื่อนไปดูเดือนต่างๆ (ซึ่งหากเราจะคลิกไปดูเดือนต่างๆ มันก็ไม่สะดวกอยู่แล้ว เดี๋ยวบทความต่อไปเราจะมาเลือกดูเดือนต่างๆแบบง่ายๆกัน)



       ดังนั้นวิธีที่ดีที่สุดคือการทำให้มันไม่ต้องรีเฟรชหน้าใหม่ในทุกๆครั้งที่เลื่อนไปเดือนต่างๆ แล้วเราจะทำอย่างไร วิธีนี้เราสามารถใช้ความสามารถของ Ajax มาใช้ได้ครับนั่นคือ การที่เราต้องทำหน้าที่แสดงปฏิทินขึ้นมาส่วนหนึ่ง และส่วนที่เป็นระบบการสร้างปฏิทินอีกส่วนหนึ่ง โดยการเรียกการทำงานผ่านรูปแบบของ Ajax โดยการใช้ JavaScript นั่นแหละครับ การทำงานแบบนี้เป็นส่วนหนึ่งของรูปแบบที่เรียกว่า XHTML นั่นเอง
       ขั้นตอนที่เราต้องทำงานนี้ ผมขอแบ่งไฟล์เพื่อให้สะดวกในการจัดการใหม่เลยนะครับ โดยใช้ไฟล์เดิมจากบทความที่แล้วมานั่นแหละ แต่เรามาแยก ทำใหม่ให้ดูง่าย จัดการง่ายไปอีกขั้นแค่นั้นเอง

       ไฟล์ที่ต้องใช้

1. ไฟล์ calendar_4.php สำหรับเป็นส่วนของการแสดงผลปฏิทิน

2. ไฟล์ ajaxCalendar.php สำหรับเป็นส่วนของ ระบบที่ใช้สร้างปฏิทิน

3. ไฟล์ styles.css เป็นส่วนของ CSS ใช้สำหรับกำหนดการแสดงผลในหน้าเว็บไซต์

4. ไฟล์ ajax_framework.js ใช้สำหรับเป็นเฟรมเวิร์คของ A่jax

       เริ่มกันเลยนะครับ ก่อนอื่นก็ขอให้คัดลอกโค้ดจากไฟล์ต่างๆตามนี้ไปบันทึกไว้ให้ครบครันกันก่อน แล้วมาอธิบายกันหลังจากนี้ครับ (บันทึกไว้ที่เดียวกันนะครับ)

ไฟล์ calendar_4.php
<html>
<head>
<title>ปฏิทินเบื้องต้น</title>
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="ajax_framework.js"></script>
<script>
function calendar(now){
 var data= "now=" + now;
 var url = "ajaxCalendar.php";
 ajaxLoad('get',url,data,'mk_calendar');
}
</script>
</head>
<body>
<span id=mk_calendar><script>calendar('');</script></span>
<br />
<span id=sh_time>หน้านี้โหลดเมื่อ : <?echo(date('j F Y') . " @ " . date('G:i:s'));?></span>
</body>
</html>

Wednesday, August 29, 2012

PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 3)

       สวัสดีครับวันนี้เรามาทำปฏิทินต่อจากบทความที่ผ่านมา ซึ่งบทความตอนที่แล้วนั้นเราได้ใส่สีสันให้กับปฏิทินเราด้วยเทคนิค CSS จนมีหน้าตาสวยงามไปแล้วนะครับ ดูได้จาบทความนี้นะครับ


       สำหรับวันนี้เราก็จะมาทำการเพิ่มเติมรูปแบบปฏิทินของเราให้มีฟังก์ชั่นที่น่าใช้งานมากยิ่งขึ้นอีก นั่นคือการเพิ่มการเลื่อนแสดงปฏิทินไปเดือนที่ผ่านมา / เดือนก่อนหน้านะครับ 

       หลักการทำงานของเราก็ง่ายๆเพียงเราเพิ่มลิงค์ที่ใช้สำหรับการเลื่อนดูปฏิทินที่ส่วนหัวของตาราง แล้วก็เก็บค่า Timestamp ของเดือนนั้นๆไว้มาทำงานต่อในส่วนของการสร้างปฏิทินนะครับ เรามาลุยกันเลย


เริ่มต้นก็ขอให้คัดลอกโค้ดนี้ไปก่อนนะครับ แล้วเรามาอธิบายโค้ดคำสั่งต่างๆกัน

ไฟล์ calendar_3.php

<html>
<head>
<title>ปฏิทินเบื้องต้น</title>
<style>
     .sunday{color: white;background-color:red;}
     .saturday{color: white;background-color:#9900CC;}
     .default{color: black;background-color:white;}
     .today{color: blue;background-color:yellow;}
</style>
</head>
<body>
<?
$now = strtotime("now");

if(isset($_GET['now']) && !empty($_GET['now'])){
 $now = $_GET['now'];
}

$month = date('n',$now);
$year = date('Y',$now);
$first = strtotime("$year-$month-1");
$first_day = date('w',$first);
$num_day = date('t',$now);
$today = date("Y-n-j");
$TH_Day = array("อา.","จ.","อ.","พ.","พฤ.","ศ.","ส.");
$TH_Month = array(1 => "มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน",
"กรกฏาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม");
$TH_Year = $year+543;

$class = "default";

$url_togo = $_SERVER['PHP_SELF'] . "?now=";
$last_month = strtotime("-1 month $year-$month");
$next_month = strtotime("+1 month $year-$month");

$url_lastMonth = "<a href=\"" . $url_togo . $last_month . "\">&laquo;</a>";
$url_nextMonth = "<a href=\"" . $url_togo . $next_month . "\">&raquo;</a>";

echo("<table border=0 cellspacing=1 cellpadding=7 bgcolor=#FFCC99>
<tr>
 <th>$url_lastMonth</th>
 <th colspan=5>พุทธศักราช  $TH_Year<p>$TH_Month[$month]</th>
 <th>$url_nextMonth</th>
</tr>
<tr bgcolor=#FFFACD><th>" . implode("</th><th>",$TH_Day) . "</th></tr>");

$start = 1 - $first_day;
$w = 1;
for($d = $start; ;$d++){
     $class = "default";
     $date = "$year-$month-$d";

     if($w == 1){
          $class = "sunday";
          echo("<tr align=center class=$class>");
     }else if($w == 7){
          $class = "saturday";
     }else{
          $class = "default";
     }

     if($d < 1){
          echo("<td class=$class>&nbsp;</td>");
     }else if($d >= $num_day){
          if($d == $num_day){
                 if($today == $date){
                        $class = "today";
                 }
                 echo("<td align=center class=$class>$d</td>");
         }else{
                 if($w == 7){
                        $class = "saturday";
                 }else{
                        $class = "default";
                 }
                 echo("<td class=$class>&nbsp;</td>");
        }
        if($w == 7){
             echo("</tr>");
             break;
        }
    }else{
         if($today == $date){
              $class = "today";
         }
         echo("<td align=center class=$class>$d</td>");
    }

    if($w == 7){
        echo("</tr>");
        $w = 1;
    }else{
        $w++;
    }

}
?>
</table>
</body>
</html>



อธิบายการทำงาน

       ผมได้นำไฟล์เดิมจาก calendar_2.php ในบทความตอนที่แล้วมาทำการแก้ไขเพิ่มเติมนะครับ โดยผมขออธิบายในส่วนที่เพิ่มเติมเข้ามานะครับ (ผมปรับปรุงการแสดงผลนิดหน่อย หาดูเองนะไม่ยาก อิอิ)

       ขั้นแรกเวลาเราจะสร้างปฏิทินโดยสามารถเลื่อนไปเดือนก่อนหน้า และเดือนถัดไปได้นั้น เราจะต้องมีตัวแปรตัวหนึ่งมาเก็บค่า Timestamp ของเดือนนั้นๆได้ 
$now = strtotime("now");

if(isset($_GET['now']) && !empty($_GET['now'])){
 $now = $_GET['now'];
}

Saturday, August 25, 2012

ความรู้ทั่วไป : เรื่องของสถานีบริการน้ำมัน (ตอนที่ 1 : เด็กปั๊ม ป.ตรี ขอบ่น)

       เมื่อช่วงบ่ายวันนี้ (วันที่ 25 สิงหาคม 2555) ผมถึงกับตกใจกับคอลัมน์หนึ่งของเว็บไซต์หนังสือพิมพ์ไทยรัฐ เว็บไซต์นี้ครับ

http://www.thairath.co.th/content/life/286043

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




       ผมขออนุญาตนำภาพที่ผมได้จากการ PrintScreen หน้าเว็บไซต์มาอ้างอิงด้วยนะครับ

1.

       ผมตลกกับข้อแรกก่อนเลย ส่วนใหญ่สถานีบริการจะปรับราคาน้ำมันขึ้้นหรือลง ได้นั้นต้องมีการแจ้งจากทางหน่วยงานที่เกี่ยวข้องเช่น บริษัทค้าน้ำมันยี่ห้อต่างๆ หรือรัฐบาลที่ประกาศชดเชยราคาน้ำมัน โดยที่จะต้องมีเวลาแจ้งกำกับมาด้วยทุกครั้ง อาจจะเป็นหลังเที่ยงคืน ประกาศทันที โดยส่วนใหญ่จะมีผลหลังเที่ยงคืนของวันที่ประกาศ เพราะจะทำให้มีผลบังคับใช้ในวันถัดไป แต่สาเหตุที่มีการปรับกันช่วงตี 5 เพราะเป็นช่วงที่สถานีบริการเปิดทำการ ใครจะตื่นมาปรับราคาน้ำมันช่วง "เที่ยงคืน"
       แต่ที่ผมตลกไปมากกว่านั้น คือเหตุผลที่ต้องเติมน้ำมันช่วงเช้าเพราะเชื่อว่าจะได้ปริมาณน้ำมันที่มากกว่า ห๊า.... อธิบายเป็นวิทยาศาสตร์ง่ายๆนะครับ สสารใดๆที่ได้รับพลังงานจนอุณหภูมิสูงขึ้นมันจะขยายตัว ถูกต้องที่เมื่ออุณหภูมิโดยรอบค่อนข้างต่ำ น้ำมันจะอยู่ในลักษณะที่ไม่พองตัว แต่อย่าลืมนะครับว่าน้ำมันไม่ได้ออกจากถังแล้วออกสู่หัวจ่ายเลยโดยตรง มันผ่านการตวงลิตรมาก่อนที่เรียกว่า Flow Meter ที่อยู่ในตู้หัวจ่ายทุกตู้ โดยเป็นลักษณะพู 4 พูทำหน้าที่ในการตรวจสอบน้ำมันในแต่ละครั้งที่เติมว่า ผู้บริโภคจะได้น้ำมันเต็มลิตรในลักษณะที่ยอมรับได้  ลักษณะที่ยอมรับได้คืออะไร คือลักษณะที่น้ำมันที่เราได้รับอยู่ในช่วง +,- ของปริมาณที่ทางหน่วยงานที่เกี่ยวข้องกำหนด โดยการวัดแบบนี้ที่เรียกว่า การตวงลิตร จะมีหน่วยงานราชการที่เกี่ยวข้องมากำกับดูแลโดยเฉพาะคือ สำนักชั่งตวงวัดในแต่ละเขตุพื้นที่ที่รับผิดชอบ จะมาทำการตรวจสอบทุกปี เพื่อให้มีมาตรฐานที่สุดจึงต้องมีการทดสอบโดยการใช้อุปกรณ์ชั่งตวงวัดน้ำมันเชื้อเพลิง ดังภาพ

Friday, August 24, 2012

Python : Replace ข้อมูลในไฟล์แบบตามสั่ง



       เจ้างูน้อยน่ารักในชื่อ Python นี้หลายคนคงสงสัยนะครับว่ามันเป็นโปรแกรมภาษาแบบไหน มันดีอย่างไร มันคืออะไร เอาเป็นว่าไปศึกษาที่นี่เลย Python.org ไม่ขอบอกในที่นี้ แต่บอกใบ้ให้นิดๆว่า Google ที่เราใช้กันประจำๆ ก็เกิดมาจาก Python นี่หล่ะครับ

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


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

2. ใช้วิธีแปลงข้อมูลเป็นไบนารี่แล้วถอดมาแก้ไข โอ้ววววววว...เมพ
ข้อดึ : ตามฉบับไบนารี่ข้อมูลที่ถูกถอดออกมาจะกระจางแจ้งแดงแจ๋ จะดูส่วนไหน แก้ไขส่วนไหนละเอาเลย ไม่ว่าไฟล์ประเภทไหนอย่างไร รู้หมด
ข้อเสีย : ยุ่งยากแน่ๆหากข้อมูลที่เราต้องการเปลี่ยนแปลงมันซับซ้อนเราต้องมานั่งหาอินเด็กไฟล์ หาตำแหน่งที่ถูกต้อง อีกยังต้องมานั่งเทียบ Hash ไฟล์อีก ไม่นะ..

3. ใช้คำสั่งในโปรแกรมภาษาต่างๆแก้ไข
ข้อดี : แน่นอนเมื่อเป็นชุดคำสั่งในโปรแกรม เราสามารถที่จะควบคุมมันได้ ให้ทำตามสั่งได้ ไร้ปัญหาแน่นอน แม้แต่ข้อมูลเข้ารหัสยังยากที่จะต่อกร(หากเรารู้ถึงคีย์ของมัน อิอิ)
ข้อเสีย : ตามธรรมดาของภาษาโปรแกรมที่จะต้องพูดถึงเรื่องประสิทธิภาพการทำงาน และการใช้งาน เช่น ภาษานู้นทำไวกว่า ภาษานี้เขียนง่ายกว่า ภาษานั้นสั้นกว่า

       ผมเลือก ตัวเลือกที่ 3 เป็นคำตอบสุดท้ายครับ ทำไมหล่ะ ก็ข้อข้างบนอธิบายไว้หมด มันคงยังไม่ต้องถึงกับใช้ไบนารี่หรอกมั้ง ฮ่าๆๆๆ แล้วผมจะเลือกใช้ภาษาโปรแกรมใดหล่ะ ... ในที่นี้ผมตอบแบบไม่ต้องคิดว่า ใช้ Python สิจอร์จ เพราะใช้แล้วเครื่องฟิต สตาร์ทติดง่าย!! .. ไม่ใช่ เพราะว่ามันทำงานได้เนียนที่สุดในบรรดาภาษาทั้งหลายแหล่ที่ผมพอจะสัมผัสมา เนียน... ไม่ใช่ดีที่สุด แต่ มันเข้าใจง่าย ทำง่าย คนไม่รู้ภาษาทางโปรแกรมก็ทำได้ หากเข้าใจในจิตวิญญาณของมัน สำหรับผม Python เป็นสิ่งที่ท้าทายที่สุดในชีวิต ที่เมื่อคุณลองแล้วจะติดเหมือนยาเสพย์ติดกันเลยทีเดียว ผมรู้จักมันมา สิบกว่าปี(ตั้งแต่ พ.ศ.2539) จนถึงทุกวันนี้ผมยังไม่รู้จักมันทั้งหมดเลย ฮ่าๆๆๆ ฟังผมโม้มาซะนานเรามาเริ่มลองทำกันดูเลยนะครับ

Wednesday, August 22, 2012

PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 2)

       ในบทความนี่เรามาปรับปรุงปฏิทินต่อจากบทความที่แล้วกันนะครับ ซึ่งการปรับแต่ปฏิทินในครั้งนี้เราจะใช้ เทคนิคการจัดรูปแบบเอกสารตามมาตรฐานของ WWW แบบใหม่นั่นก็คือ CSS หรือเรียกชื่อเต็มๆว่า Cascading Style Sheets โดยในส่วนของรายละเอียดในการจัดรูปแบบต่างๆนั้นขอแนะนำให้ไปศึกษาเพิ่มเติมเองนะครับ
       ทำไมถึงต้องเป็น CSS นั่นก็เพราะรูปแบบ CSS นั้นถูกนำมาใช้เพื่อเสริมการทำงานของ HTML ให้มีประสิทธิภาพมากยิ่งขึ้น โดยเน้นไปที่การจัดรูปแบบและโครงร่างของเอกสารเป็นหลัก ทำให้เราสามารถที่จะกำหนดรูปแบบเอกสารให้หลากหลายมากยิ่งขึ้น แก้ไขง่าย จัดการง่าย ควบคุมง่าย ตามสไตล์ของ CSS นั่นเอง
       สำหรับการจัดรูปแบบปฏิทินในวันนี้เราจะมาตกแต่งใส่สีสันลงไปเพื่อเพิ่มความสวยงาม โดยมีส่วนที่ต้องตกแต่งอยู่ 5 ส่วนด้วยกัน คือ

  1. ส่วนหัวปฏิทิน
  2. ส่วนหัวสัปดาห์
  3. ส่วนที่แสดงเป็นวันอาทิตย์
  4. ส่วนที่แสดงเป็นวันเสาร์
  5. ส่วนแสดงวันที่ปัจจุบัน

       เนื่องจากเราต้องจัดการกำหนดรูปแบบที่หลากหลายเช่นนี้ CSS จึงเหมาะกับการทำงานดังกล่าว เรามาลองเริ่มจัดรูปแบบปฏิทินกันเลยครับ

Sunday, August 19, 2012

Ubuntu : ฟอร์แมตพาร์ติชั่นด้วย Disk Utility

       ปัจจุบันเรามีการเก็บข้อมูลบนคอมพิวเตอร์ด้วยวิธีต่างๆมากมายทั้งการบันทึกลงฮาร์ดดิส ใส่แผ่นซีดี/ดีวีดี ใส่แฟลชไดร์ฟ หรือบันทึกใส่สื่อบันทึกดิจิตอลต่างๆ หลายท่านที่บันทึกลงฮาร์ดดิสแบบพกพาหรือที่เรียกกันว่า Portable Harddisk (Hard Drive) คงจะมีการแบ่งพื้นที่ฮาร์ดดิสออกเป็นหลายๆส่วนที่เรียกว่า พาร์ติชั่น(Partition) บางครั้งอาจจะอยากปรับปรุงเปลี่ยนแปลงพาร์ติชั่นดังกล่าว ในบทความนี้ผมจะนำเสนอเฉพาะการ ฟอร์แมตพาร์ติชั่น บนระบบปฏิบัติการ Ubuntu โดยใช้เครื่องมือพื้นฐานอย่าง Disk Utility ที่มีมาให้อยู่แล้ว




       ขั้นแรกก็ให้เรานำเจ้าฮาร์ดดิสแบบพกพาของเราต่อเข้ากับคอมพิวเตอร์เราซะก่อนเราจะเห็นว่ามันมีพาร์ติชั่นมากมายถูกเมาท์ขึ้นมาที่แถบด้านข้าง (Side Panel)  จากนั้นก็ให้คุณเข้าเมนูพิมพ์ว่า disk ดังภาพก็พอจะมีโปรแกรมมาให้เลือก ให้เราเลือก Disk Utility ดังภาพ




Saturday, August 18, 2012

PHP : มาสร้างปฏิทินกันเถอะ (ตอนที่ 1)

       หลายคนคงเคยเห็นปฏิทินที่แสดงบนหน้าเว็บไซต์ต่างๆมาแล้ว อาจเกิดความสงสัยกันนะครับว่าปฏิทินที่เราเห็นกันนั้นมันทำได้อย่างไรกันนะ ผมก็อดสงสัยไม่ได้เช่นกันก็เลยนำความสงสัยนั้นมาลองทำเล่นๆดูจนได้เป็นบทความนี้นั่นเอง ฮ่าๆๆ  สำหรับบทความนี้จะมีเนื้อหาต่อจากบทความที่แล้วนะครับ ในเนื้อหาเรื่อง



ซึ่งลองเข้าไปอ่านดูกันก่อนนะครับจะได้มีพื้นฐานเบื้องต้นก่อน




       เริ่มกันเลยนะครับ