Posts

Showing posts from June, 2009

Update Squid

25/12/2008 เพื่อทำให้ Squid เก็บแพทซ์เกมส์ให้ได้มากกว่าเดิม แก้ไขตรง refresh_pattern ดังนี้ครับ refresh_pattern -i \.(html|htm|/)$ 240 20% 1440 refresh_pattern -i \.(asp\?|aspx\?|php\?) 0 20% 1440 refresh_pattern -i \.(asp|aspx|php)$ 240 20% 1440 refresh_pattern -i \.(jpg|gif|jpeg|png|css|js|bmp|tif|tiff|xbm|png|swf)$ 240 100% 14400 refresh_pattern -i \.(raw|delta|exe|zip|gz|arj|lha|lzh|rar|tgz|tar|Z)$ 4320 80% 43200 override-lastmod reload-into-ims refresh_pattern -i \.(class|pdf|rtf|doc|wp|wp5|cab|kf|pkg|gz|dat|ps|delta|raw|z|div|db|fsh|pak|prn)$ 7200 80% 14400 override-lastmod override-expire reload-into-ims refresh_pattern -i \.(mov|avi|mpg|wav|au|mid|mp3)$ 1440 100% 14400 override-lastmod override-expire reload-into-ims refresh_pattern ^http://patch.sf.* 4320 100% 43200 ignore-reload override-lastmod reload-into-ims refresh_pattern ^http://update.cabal.* 4320 100% 43200 ignore-reload override-lastmod reload-into-ims refresh_pattern ^http://download.cabal.* 4320 100%

Log of PPPoE

ดูข้อมูลการ Connect ของ ppp2 ว่า connect ได้หรือไม่อย่างไร # cat /var/log/syswatch | grep ppp2

การใช้งาน Logrotate

Image
เป็นกลไกของระบบปฏิบัติการลีนุกซ์ที่ช่วยลบ log file ที่เก่ากว่าออกไป แล้วสร้างไฟล์ log ขึ้นใหม่ ซึ่งมีผลทำให้ไฟล์ log ไม่ใหญ่มากเกินไป โดยการสร้าง log file มาใหม่นั้นจะไปสร้างซ้ำกับไฟล์เดิม ในไฟล์ /etc/logrotate.conf จะมี option มากกมายให้เราแก้ไข แต่ พอสรุป ได้ คราวๆ ดังนี้ Weekly-daily-monthly หมายถึง ให้มีการ rotate ใน ทุกๆ อาทิตย์ (weekly) หรือ ทุกๆ วัน (daily) หรือ เดือน (monthly) rotate xx หมายถึง สั่งให้มีการ rotate xx ครั้ง ก่อนลบไฟล์เก่าทิ้งไป compress หมายถึง สั่งให้มีการ zip ไฟล์ที่ถูก rotate ไปแล้ว delaycompress หมายถึง สั่งให้มีการชะลอการ zip ไป 1 ครั้ง ทำให้การ rotate ครั้งแรกเป็นการเปลี่ยนชื่อไฟล์เพียงอย่างเดี่ยว และจะถูก zip ในการ rotate ในครั้งต่อไป notifemply-ifemply หมายถึง ไม่ให้มีการ rotate เมื่อ log file นั้นว่าง postrotate เป็นการกำหนดให้มีการรันคำสั่ง หลังจาก ที่มีการ rotate ไปแล้ว endscript เป็นการจบคำสั่งของ postrotate mail(address) เป็นการสั่งให้ระบบส่ง log file ให้ผู้ดูแลระบบทาง E-mail prerotage/endscript เป็นการกำหนดให้มีกา

การใช้งาน crontab

crontab บน Linux ==================== คำสั่ง crontab เป็นคำสั่งในการทำ schedule ในการสั่งโปรแกรม หรือ script ต่างๆ ทำงานตามเวลาที่กำหนด บนระบบ UNIX/LINUX ซึ่งอำนวยความสะดวกได้มากเลยที่เดียว งานบางอย่างที่จำเป็นต้องทำซ้ำๆในเวลาเดียวกัน ไม่ว่าจะทุกวัน ทุกสัปดาห์ หรือ ทุกเดือน การใช้งาน crontab ------------------------ คำสั่งและ option ของ crontab มีดังนี้ Code: crontab filename การนำเอาคำสั่ง crontab เข้ามาจาก ไฟล์อื่น crontab -e แก้ไข crontab ปัจจุบัน crontab -l ดูคำสั่ง crontab ทั้งหมดที่มีอยู่ crontab -r ลบคำสั่ง crontab ที่มีทั้งหมด crontab -u user เป็นคำสั่งของผู้ดูแลระบบเท่านั้น(administrators) เพื่อใช้ดู แก้ไข ลบ crontab ของ user แต่ล่ะคน เมื่อเรียกคำสั่งตามข้างบนแล้ว crontab จะเข้าสู่ระบบการ กำหนด หรือ แก้ไข ซึ่งการ กำหนด หรือแก้ไขนี้ จะเหมือนกับการใช้งาน vi ครับ ถ้าใครเคยใช้งาน vi แล้วก็จะไม่มีปัญหาอะไร ถ้าไม่เคยใช้ ก็ดูคำสั่งพื้นฐานของ vi ด้านล่างนะครับ เมื่อเรียกโปรแกรม crontab ให้ท

วิธีการเก็บ access.log ของ squid ให้เป็นวันละไฟล์

โดยปกติ CC ก็ทำเองอยู่แล้วแต่จะทำตอน 04.00 แต่ถ้าไม่ได้เปิดเครื่อง 24 ชม. ก็จะไม่ได้ทำงานในส่วนนี้เลย ดังนั้นมาเปลี่ยนให้ CC ทำงานตอน 22.00 กันดีกว่าครับ เข้าไป ใน winscp /etc/crontab 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly แก้เป็น 01 * * * * root run-parts /etc/cron.hourly 00 22 * * * root run-parts /etc/cron.daily (แก้ตรงนี้หรือจะแก้หมดก็แล้วแต่ชอบครับ) 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly Credit : K.Pice @ lunuxthai.org

ตรวจสอบว่าเกมส์ใช้ Port ไหนออก Wan ไหน

สืบเนื่องจากกระทู้ : http://www.linuxthai.org/forum/index.php?topic=2495.0 เริ่มที่จะว่างๆ ผมเลยเกิด idea เด็ดๆ ทำ Script ขึ้นมาให้มิตรรักแฟนเพลงได้ลองกันเลยครับ อีกอย่างผมก็ไม่อยากแอบแซบคนเดียวซะด้วยครับ หลังจาก Download : http://203.154.173.174/multiwan/checkwan.tar.gz ให้ทำการแตกไฟล์ออกมาด้วยคำสั่ง tar ตัวอย่าง : #tar xvfz checkwan.tar.gz จากนั้นทดลองใช้งานด้วยคำสั่ง #./checkwan ต่อด้วย parameter ของ ip เครื่องลูกดังตัวอย่าง ################################### loma:~/wan# ./checkwan.pl 192.168.1.5 Power by Delphi@linuxthai.org version 1.0 protocol source destination sport dport interface tcp 192.168.1.5 61.90.203.53 1369 27931 ppp103 : 117.47.x.xx loma:~/wan# ################################### ทดลองใช้ดูครับ การทำงานเป็นลักษณะ Realtime ส่วน Source code ด้านใน สามารถปรับแต่งเองได้ (ไปศึกษาภาษา Perl เอาเองนะครับ) ปล ใช้ฟรีครับ ใครจะเอาไปแก้ Code ด้านในก็ขอ เครดิตแบบ GNU ของ

Clear Cache

CLEAR CACHE FROX service frox stop sleep 2 rm -rf /var/??/frox/ mkdir -p /var/??/frox sleep 2 chown frox:frox /var/??/frox/ chmod 777 /var/??/frox/ service frox start ?? คือพาร์ทของ cache ที่เก็บครับ แล้วแต่ว่าจะ config ไปที่ไหน CLEAR CACHE SQUID service squid stop sleep 2 rm -rf /var/spool/squid mkdir -p /var/spool/squid sleep 2 chown squid:squid /var/squid chmod 777 /var/spool/squid service squid start Credit : tanutcha99@linuxthai.org

ตรวจสอบสัญญาณอินเตอร์เน็ตของแต่ละเส้น

เมื่อเช็คว่า ppp ครบตามจำนวนสายเน็ตที่มีอยู่ ขั้นตอนต่อไป ให้ทำการตรวจสอบสัญญาณอินเตอร์เน็ตของแต่ละเส้น ว่าปกติหรือไม่ โดยใช้คำสั่ง ping -c 5 -I ppp101 203.144.244.1 ค่า ppp101 ให้เปลี่ยนเป็น ppp ที่ต้องการตามจำนวนเส้นที่ต้องการเช็ค ทดสอบเส้น ppp101 root@cyren:~# ping -c 5 -I ppp101 203.144.244.1 PING 203.144.244.1 (203.144.244.1) from 61.7.167.170 ppp101: 56(84) bytes of data. 64 bytes from 203.144.244.1: icmp_seq=1 ttl=249 time=26.5 ms 64 bytes from 203.144.244.1: icmp_seq=2 ttl=249 time=24.8 ms 64 bytes from 203.144.244.1: icmp_seq=3 ttl=249 time=31.3 ms 64 bytes from 203.144.244.1: icmp_seq=4 ttl=249 time=25.9 ms 64 bytes from 203.144.244.1: icmp_seq=5 ttl=249 time=26.4 ms --- 203.144.244.1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4004ms rtt min/avg/max/mdev = 24.809/27.003/31.319/2.245 ms root@cyren:~# ทดสอบเส้น ppp102 root@cyren:~# ping -c 5 -I ppp102 203.144.244.1 PING 203.144.244.1 (203.144.244.1) from 58.147.54.130 ppp102: 56(84) bytes of da

<< เสียงจาก Mainboard >>

เสียงดัง 1 ครั้ง แสดงว่าขั้นตอนการบูตเครื่องหรือขั้นตอน Post เป็นปกติ เสียงดัง 2 ครั้ง แสดงว่ามีปัญหาในส่วนของแรม เช่น เสียบไม่แน่นหรือแรมเสียทำให้บูตเครื่องไม่ผ่าน ควรตรวจสอบแรม เสียงดัง 3 ครั้ง แสดงว่ามีปัญหาในส่วนของแรม เช่น เสียบไม่แน่นหรือแรมเสียทำให้บูตเครื่องไม่ผ่าน ควรตรวจสอบแรม เสียงดังต่อเนื่อง แสดงว่ามีปัญหาในส่วนของแหล่งจ่ายไฟ เช่น เพาเวอร์ซัพพลาย หรือเมนบอร์ดอาจมีปัญหา ให้ตรวจสอบ เพาเวอร์ซัพพลาย และเมนบอร์ด เสียงดังถี่ๆ แสดงว่ามีปัญหาในส่วนเมนบอร์ด ให้ตรวจสอบสายสัญญาณต่างๆและตัวเมนบอร์ด เสียงดัง 6 ครั้ง แสดงว่ามีปัญหาในส่วนของคีย์บอร์ด ให้ตรวจสอบคีย์บอร์ด เสียงดัง 7 ครั้ง แสดงว่ามีปัญหาในส่วนของซีพียู อาจต้องเปลี่ยนซีพียูใหม่ เสียงดัง 8 ครั้ง แสดงว่ามีปัญหาในส่วนของการ์ดแสดงผล (VGA) ตรวจสอบการ์ดแสดงผลว่าเสียบแน่นดีหรือไม่ หากยังไม่ได้ผลอาจต้องเปลี่ยนการ์ดแสดงผลใหม่ เสียงดังยาว 1 สั้น 2 แสดงว่ามีปัญหาในส่วนของการ์ดแสดงผล (VGA) ตรวจสอบการ์ดแสดงผลว่าเสียบแน่นดีหรือไม่ หากยังไม่ได้ผลอาจต้องเปลี่ยนการ์ดแสดงผลใหม่ เสียงดัง 9 ครั้ง แสดงว่ามีปัญหาในส่วน

ModalPopup Extender อย่างง่าย

ModalPopup ก็เปรียบเสมือนการเขียนด้วย Javascript โดยหลักการคลิ๊กที่ปุ่มแล้วให้แสดงข้อมูลตรงกลางหน้า โดยที่หน้าที่ถูก Popup ทับอยู่จะไม่สามารถทำอะไรได้จนกว่าหน้า Popup จะทำการเสร็จสิ้น Main Page เป็นหน้าหลักที่มี Control ดังนี้ สร้าง CSS ตามดังนี้ .ModalPopupBG { background-color: #000000; filter: alpha(opacity=75); opacity: 0.8;} สร้าง Panel ใช้สำหรับเก็บ Control ต่างๆที่ต้องการให้แสดงตอนกดปุ่ม Popup โดยใน Panel จะมี Control ที่สำคัญอยู่ 2 ปุ่มคือ Ok กับ Cancel เป็นต้น Button สำหรับที่กดปุ่มแล้วให้ ModalPopup ทำงาน และทำการ Add Extender ModalPopup เข้าไปด้วย โดยที่ Extender จะมีค่ากำหนดดังนี้ BackgroupCssClass = ModalPopupBG CancelControlID = Cancel  PopupControlID = Pane *** ปุ่ม OK ที่อยู่ใน Panel ก็สามารถเขียน Code ได้ตามต้องการ

Function of RecordSet

// แสดงจำนวนข้อมูลทั้งหมดมีกี่ Rows $totalrec = mysql_num_rows($result); // การแสดงผลข้อมูลทั้งหมด for ($i = 0; $i < $totalrec; $i++) { echo " "; $row = mysql_fetch_row($result); for ($j = 0; $j < $fields; $j++) { echo "  " . $row[$j] . "  "; } echo " "; } // แสดงจำนวน columns ทั้งหมด $fields = mysql_num_fields($result); // การแสดงผล Columns ทั้งหมด for ($i = 0; $i < $fields; $i++) { echo "< td >< center >< b >" . mysql_field_name($result,$i) . "< /b >< /center >< /td >"; }

Connection MYSQL

$host = "localhost"; $user = "username"; $pass = "password"; $link = mysql_connect($host,$user,$pass); mysql_query("SET NAMES UTF8"); // แก้ปัญหาภาษาไทยเพี้ยน $sql = "SQL Command" $result = mysql_query($sql); mysql_close($link); ?>

Meta of HTML for Thai Problem

< meta http-equiv="Content-Type" content="text/html; charset=utf-8" >

Function include

include("Connection.php");

Function :: แสดงข้อมูลวันที่วันสุดท้ายของเดือน

DateTime.DaysInMonth(Now.Year, Now.Month)

Crystal Report : The maximum report processing jobs limit.

Problem = "The maximum report processing jobs limit configured by your system administrator has been reached." หมายถึงมีการใช้งาน Engine ของ Crystal Report มากเกินกว่าที่ระบบตั้งเอาไว้ที่ 75 ดังนั้นเราสามารถปรับเปลี่ยนได้ โดยการไปที่ regedit แล้วไปที่ HKEY_LOCAL_MACHINE\SOFTWARE\CRYSTAL DECISIONS\10.0\REPORT APPLICATION SERVER\SERVER\PrintJobLimit Value = 75 > Default Value = -1 > Unlimited Jobs

GridView : Summary Data and Display on Footer

1. กำนหนดที่ GridView ให้ ShowFooter = true 2. แล้วสร้าง Method ที่ชื่อ RowDataBound 3. Coding ดังนี้ If (e.Row.RowType = DataControlRowType.DataRow) Then sq_oqua += CDbl(e.Row.Cells(1).Text) ElseIf (e.Row.RowType = DataControlRowType.Footer) Then e.Row.Cells(0).Text = "Total" e.Row.Cells(1).Text = FormatNumber(sq_oqua, 2) End If

Set Dataset to Session for any pages.

Files :: t1.aspx session("a") = ds Files :: t2.aspx dim a as dataset = session("a") gridview.datasource = a.tables("tbl") gridview.databind() -- @@ clear data on session session("a") = nothing

Response.Redirect VS Server.Transfer

เมื่อวันก่อนมีคนมาถามที่ http://www.greatfriends.biz เรื่อง Response.Redirect กับ Server.Transfer ว่าต่างกันอย่างไร ผมเห็นเรื่องนี้มีถามกันบ่อยพอสมควร แม้แต่ใน webboard ต่างประเทศก็มีถามกันบ่อยๆ เลยถือโอกาสนี้เอามาลงบล๊อกซะเลยครับ เรื่องนี้ถือว่าเป็นเรื่องสำคัญเรื่องหนึ่ง จนหนังสือ MCTS 70-528 Microsoft .Net Framework 2.0 Web-based Client Development Book เขียนเป็นหัวข้อสำคัญบทหนึ่งทีเดียว นั่นคือเรื่อง Site Navigation ในหนังสือกล่าวว่า การทำ Navigate Pages หรือการเปลี่ยนหน้า page นั้นสามารถทำได้ 4 วิธีครับ ได้แก่ 1. สร้าง client-side code หรือ markup สำหรับ request page ใหม่ 2. ทำ Cross-page 3. สั่ง client-side browser redirect 4. สั่ง server-side transfer สำหรับวิธีที่1 ได้แก่การเขียนคำสั่ง javascript เช่น หรือจะกำหนดที่ tag ของ Control ก็ได้ เช่น HyperLink สำหรับวิธีที่2 การทำ Cross-paging หมายถึงการที่มีการใส่ข้อมูลที่ page ที่หนึ่ง และทำการ process ข้อมูลที่ page ที่สอง ซึ่งในกรณีนี้ page ที่สองจะมี property ชื่อ ProviousPage สำหรับเก็บ object ของ page ที่หนึ่ง เพื่อที่ page ที่

Language Setting

Property "UICulture" - ใช้กำหนดภาษาที่นำมาใช้ในเพจ Property "Culture" - ใช้กำหนดรูปแบบสัญลักษณ์ของภาษาที่ต้องการใช้ เช่น รูปแบบวันที่ สัญลักษณ์ การเงิน เป็นต้น de-DE German(Germany) en-US English(US) - 01/25/2009 en-GB English(UK) - 25/01/2009 th-TH Thai(Thailand) - 25/01/2552 สามารถกำหนดที่แต่ละไฟล์ aspx ในส่วนของ Page Directory ได้ (ด้านบนสุด) หรือถ้าใช้แบบเดียวกันทั้งเว็บให้กำหนดที่ web.config เลย

Inherits Class

การใช้ Inherits เป็นการสืบทอดสิ่งต่างๆจากพ่อมาสู่ลูก แต่ในที่นี้จะกล่าวถึงการใช้เพื่อช่วยลดการปะรกาศตัวแปรที่ต้องใช้บ่อยๆ เพื่อง่ายต่อการเขียนโปรแกรมหรือการแก้ไขโปรแกรมครับ ข้อดี - ทำให้โปรแกรมเมอร์ไม่ต้องทำการประกาศตัวแปรทุกๆหน้า ลดเวลาการเขียนโปรแกรมไปได้เยอะพอสมควรครับ ^^" 1. สร้างไฟล์ที่เป็น Class.vb ขึ้นมา 1 ไฟล์โดยมี Code ดังนี้ Imports Microsoft.VisualBasic Imports System.Data Imports System.Data.SqlClient Public Class CVariables Inherits System.Web.UI.Page    Public Conn As New SqlConnection(ConfigurationManager.ConnectionStrings("conn_db").ConnectionString) 'ตัวแปรติดต่อฐานข้อมูล โดยให้ไปเอารูปแบบการติดต่อฐานข้อมูลจากไฟล์ web.config    Public Sql As String 'เพื่อเก็บ Sql Query    Public Da As SqlDataAdapter 'ใช้ในการสร้างสะพานเชื่อมต่อระหว่างฐานข้อมูลกับ DataSet    Public ds As New DataSet 'ใช้ในการเก็บข้อมูลในรูปแบบ DataTable    Public SqlTran As SqlTransaction 'ใช้ในการสร้าง Transaction ในกรณีไฟดับข้อมูลที่ฐานข้อมูลจะได้ไ

Using Transaction

การเขียนโปรแกรมในการที่ต้องติดต่อฐานข้อมูลไม่ว่าจะเป็นภาษาอะไรก็ตามนั้น มีความจำเป็นต้องเขียนโปรแกรมให้ Script ต่างๆเหล่านั้น Run ให้เสร็จสมบูรณ์ มิเช่นนั้นระบบอาจได้ข้อมูลที่ไม่ครบถ้วนได้ สมมติเหตุการณ์ ถ้านาย A เป็นพนักงานธนาคารและกำลังทำการนำเงินของลูกค้านาย B เข้าระบบอยู่จังหวะนั้นเกิดไฟดับขึ้น แล้วโปรแกรมที่กำลังทำการเข้าเงินนั้นยังทำไม่สมบูรณ์ ทำให้ข้อมูลของนาย B นั้นไม่สมบูรณ์ ข้อดีของการใช้ Transaction คือทำให้กรณีที่โปรแกรมทำงานได้ไม่สมบูรณ์จะทำการ Rollback (ไม่ใช่ของโลตัสนะ เหอะๆ) ข้อมูลที่เราทำไว้ทั้งหมดคืน เป็นเหมือนก่อนที่เราจะเริ่มรันโปรแกรม 1. ประกาศตัวแปร Transaction Dim SqlTran as SqlTransaction หรือ Dim OleTran as OledbTransaction 2. เปิดการใช้งาน Connection Conn.open 3. เริ่มงานใช้งาน Transaction SqlTran = Conn.BeginTransaction หรือ OleTran = Conn.BeginTransaction 4. กำหนดให้ Adapter ทั้งหลายเข้ามาใช้งานในระดับ Transaction sqlCommand.Transaction = SqlTran ' @@ กรณีที่ใช้เป็น Command sqlAdapter.SelectCommand.Transaction = SqlTran ' @@ กรณีที่ใ

Linux - Setting DVR on Internet by ClarkConnect

หลังจากที่ติดตั้ง ClarkConnect เป็นที่เรียบร้อยแล้ว ถ้าต้องการดูกล้องวงจรปิดผ่านอินเตอร์เน็ตนั้น สามารถทำได้ง่ายๆ โดย 1. เข้าไปที่หน้าเว็บ Config ของ ClarkConnect (https://[ipaddress of cc]:81) 2. เข้าไปที่เมนู Network >> Incoming แล้วทำการเพิ่ม Port 7188 [อันนี้เป็น Port ที่ใช้ในการเข้าชมผ่านเว็บ] Port 5000-5001 [อันนี้เป็น Port ที่ใช้ของกล้อง] 2. เข้าไปที่เมนู Network >> Port Forwarding แล้วทำการเพิ่ม 7188 > 192.168.1.111 Port 80 [เป็นการ Fordwarding จาก 7188 ไปยังเครื่อง IP 192.168.1.111 และ Port 80] 5000-5001 > 192.168.1.111 Port 5000-5001 เข้าไปที่หน้าเว็ยแล้วเข้าเว็บ http://ipaddress:7188 ** Port ขึ้นอยู่กับ Software ของกล้องนะครับ ว่าเค้าใช้งาน Port ไหนบ้าง