วันพุธที่ 23 พฤศจิกายน พ.ศ. 2554

windows delayed write failed คือ

อาจเป็นเพราะใน HD properties ถูกเซ็ทให้ Enable write Caching on the disk ซึ่งการเซ็ทในลักษณะนี้จะเพิ่มศักยภาพการทำงานของ HD ให้ดีขึ้น แต่เมื่อไหร่ที่มีไฟตก หรือ อุปกรณ์ เช่น UPS เสียหรือมีปัญหาอาจทำให้ข้อมูลสูญหายได้ ถ้ากลัวว่าจะเกิดเหตุการณ์แบบนี้ขอแนะนำให้ไปเอา Setting นี้ออก โดยไปที่ Device Manager (คลิกขวาที่ My Computer --> Manage) เข้า

ไปที่ Disk Drives คลิ๊กขวาที่ Harddisk เลือก Properties --> Policies แล้วเอาติ๊กข้างหน้า Enable write Caching on the disk ออก แล้วคลิ๊ก OK เท่านี้ก็จะไม่มี warning message ขึ้นมาให้กวนใจอีก

หากอาการนี้ไม่หายให้สงสัยไว้ได้ในอีกหนึ่งกรณี คือ HDD ของท่านกำลังจะลาไปแล้ว

วันจันทร์ที่ 14 พฤศจิกายน พ.ศ. 2554

การแสดง title แต่ละหน้าของ maxsite ให้สัมพันธ์กับเนื้อหา

การแสดง title แต่ละหน้าของ maxsite ให้สัมพันธ์กับเนื้อหา สไตล์ narongrit.net
ผมเคยอ่านเจอกระทู้เก่าๆ เกี่ยวกับการแสดง title ให้แตกต่างกันโดยใช้โครง maxsite นี้ ซึ่งถ้าจำไม่ผิด จะต้องเพิ่มไฟล์อีกหลายๆ ไฟล์ และต้องมีการปรับยกใหญ่เลย
ก็เลยเกิดไอเดียว่าน่าจะมีวิธีที่ง่ายกว่านั้น จนเกิดเป็นการปรับแต่งดังที่ผมจะบอกเล่าต่อไปนี้ครับ
ไอเดียผมก็คือว่า ปรับแค่ไฟล์เดียวเลย คือ index.php ที่ path หลักแต่อาศัยดึงข้อมูลจากฐานข้อมูลมาแสดงเพื่อให้ title กับเนื้อหาสัมพันธ์กัน โดยใช้ id และ name เป็นตัวแปรในการเชื่อมโยง 
มาเริ่มวิธีการกันเลยครับ
1. เปิดไฟล์ index.php ที่ path หลักนะครับ ซึ่งเป็นไฟล์ที่คลุมหน้าโมดูลต่างๆ เอาไว้
2. เพิ่มโค้ดดังบรรทัดข้างล่างนี้เข้าไป
เอาไว้้ต่อจากบรรทัด GETMODULE($_GET[name],$_GET[file]);
 
01if ($_GET['name']=='index') { $showtitle='Narongrit.net [ปี2] : หน้าแรก';} 
02elseif ($_GET['name']=='knowledge') { $showtitle='Narongrit.net : บทความ';
03//ดึงข้อมูลกระทู้ 
04$db->connectdb(DB_NAME,DB_USERNAME,DB_PASSWORD);
05$Explainselect = $db->fetch($db->select_query("SELECT * FROM ".TB_KNOWLEDGE." WHERE id = '".$_GET[id]."' "));
06$db->closedb ();
07if ($_GET[id]){
08$explain=" เรื่อง ".$Explainselect[topic].""; }
09else {$explain='';}
10}
11elseif ($_GET['name']=='webboard') { $showtitle='Narongrit.net [ปี2] : เวบบอร์ด';
12$db->connectdb(DB_NAME,DB_USERNAME,DB_PASSWORD);
13$Explainselect = $db->fetch($db->select_query("SELECT * FROM ".TB_WEBBOARD." WHERE id = '".$_GET[id]."' "));
14$db->closedb ();
15if ($_GET[id]){
16$explain=" เรื่อง ".$Explainselect[topic].""; }
17else {$explain='';}
18}
19elseif ($_GET[name]=="aboutus") { $showtitle="ข้อความเกี่ยวกับเรา";}
20elseif ($_GET[name]=="calendar") { $showtitle="ปฏิทินกิจกรรม";}
21else { $showtitle="ข้อความอื่นๆ ที่ไม่เข้าเงื่อนไขใดๆ"; }
ตัวอย่างด้านบนนี้ ผมยกมาแค่ 2 โมดูลนะครับ หากมีอื่นๆ อีก เช่น ดาวน์โหลด หรือสมาชิก ก็ต้องเพิ่มโค้ดคล้ายๆ กันเข้าไป คือ
 
1elseif ($_GET['name']=='webboard') { $showtitle="ข้อความหรือชื่อโมดูล"';
2$db->connectdb(DB_NAME,DB_USERNAME,DB_PASSWORD);
3$Explainselect = $db->fetch($db->select_query("SELECT * FROM ".ชื่อตารางที่อ้างอิง." WHERE id = '".$_GET[id]."' "));
4$db->closedb ();
5if ($_GET[id]){
6$explain=" เรื่อง ".$Explainselect[topic].""; }
7else {$explain='';}
8}
สำหรับโค้ด elseif นี้ผมแนะนำให้หาอ่านหนังสือ หรือจากเวบต่างๆ ว่าใช้งานยังไง จะวางตรงไหนนะครับ เพราะน่าจะเข้าใจได้ดีกว่าที่ผมอธิบาย
3. ยังไม่จบครับ สำหรับการแสดงผลในส่วนของ title เวบนั้น ก็ต้องเพิ่มโค้ดนี้เข้าไป จากเดิมคือ <TITLE><?=WEB_TITLE;?></TITLE>
ก็แก้ให้เป็นดังนี้ครับ
 
1<title><? echo "".$showtitle."".$explain."" ;?></title>
 จากนั้นก็ลองทดสอบผลได้เลยครับ
ลองสังเกตุจากตัวอย่างเวบผมนี้นะครับ แต่ละหน้าแต่ละโมดูล ข้อความที่ title จะแตกต่างกัน และถ้าคลิกเข้าไปดูบทความหรือกระทู้ต่างๆ ก็จะมีการแสดงหัวข้อของกระทู้หรือบทความนั้นๆ บน web title ด้วย
หวังว่าบทความนี้คงเป็นประโยชน์ต่อหลายๆ ท่านนะครับ มีข้อสงสัย สอบถามได้ที่เวบบอร์ดนะครับ

เขียนและเรียบเรียงโดย
คุณฉุย เว็บ http://www.narongrit.net/
ปรับปรุงเมื่อ 25/2/2552

วันอังคารที่ 1 พฤศจิกายน พ.ศ. 2554

วิธีการ Set Default ให้ Arcview GIS รู้จักภาษาไทย

วิธีการ Set Default ให้ Arcview GIS รู้จักภาษาไทย

Set Default ให้ Arcview GIS รู้จักภาษาไทย
ตอนไปฝึกอบรมเจ้าหน้าที่องค์กรปกครองส่วนท้องถิ่นและแกนนำชุมชนในพื้นที่หรือสอนนักศึกษาเกี่ยวกับการใช้โปรแกรม Arcview GIS ให้แสดงข้อมูลในช่องสารบัญชั้นข้อมูล(Table of Content :TOC) จากฐานข้อมูลที่เป็นภาษาไทยเจอคำถามทำไมของเครื่องที่เขาใช้เป็นภาษาต่างด้าว ไม่เหมือนกับในจอที่ฉายจาก LCD ของวิทยากรเลย ก็เครื่องของผมได้ Set Default โปรแกรมรู้จักภาษาไทยแล้วครับ (ก็อยากจะให้เขา Set เป็น กลับไปได้ใช้งานได้สะดวก)วิธีการ ไม่ยากครับ
   
s = TxSym.Make
s.SetFont(NFont.Make("AngsanaUPC","Bold"))
s.SetSize(18)
TOC.SetDefaultSymbol(s)
 
' ArcView's startup file, which runs before default.apr is read.
' Check for a valid project workspace -- the directory must be writable.
haveHOMEPath = false
for each var in {"HOME", "TEMP", "CWD", "AVHOME"}
  path = System.GetEnvVar(var)
  if (path <> NIL) then
    if (File.Exists(path.AsFileName) and File.IsWritable(path.AsFileName)) then
      System.SetEnvVar("HOME", path)
      haveHOMEPath = true
      break
    end
  end
end
if (Not haveHOMEPath) then
  MsgBox.Warning("Cannot find a writable project directory. Please set environment variable HOME to a writable directory.", "")
end
' Check for a valid TEMP under Windows -- let user know if it is not set.
' Required for themes based on TXT type annotation and for editing.
if (system.GetOS = #SYSTEM_OS_MSW) then
  haveTEMPPath = false
  for each var in {"TEMP", "HOME", "CWD", "AVHOME"}
    path = System.GetEnvVar(var)
    if (path <> NIL) then
      if (File.Exists(path.AsFileName) and File.IsWritable(path.AsFileName)) then
        System.SetEnvVar("TEMP", path)
        haveTEMPPath = true
        break
      end
    end
  end
  if (Not haveTEMPPath) then
    MsgBox.Warning("Cannot find TEMP directory. Please set environment variable TEMP to a writable directory.", "")
  end
end
' Check for a valid TMPDIR under UNIX.
if (system.GetOS = #SYSTEM_OS_UNIX) then
  home = System.GetEnvVar("HOME")
  if (Not (File.IsWritable(home.AsFileName))) then
    path = System.GetEnvVar("TMPDIR")
    if (path <> NIL) then
      if (Not (File.Exists(path.AsFileName) and File.IsWritable(path.AsFileName))) then
        MsgBox.Warning("TMPDIR directory " + path.AsString + " is not writable . " +
           "Please set environment variable TMPDIR to a writable directory.", "")
      end
    else
      System.SetEnvVar("TMPDIR","/tmp")
    end
  end
end
MsgBox.Banner("$AVHOME/etc/banner".AsFileName, 1, "")
av.SetName("ArcView GIS 3.3 ")
avExt = FN.Make("$AVHOME")
avExt.MergePath("ext")
System.SetEnvVar("AVEXT", avExt.GetFullName)
avBin = FN.Make("$AVHOME")
avBin.MergePath("bin")
System.SetEnvVar("AVBIN", avBin.GetFullName)
'
' The USEREXT variable is used by the extension manager dialog. 
' That dialog looks for additional extensions in the directory specified by 
' it. You can change it's value if you want to keep additional extensions in 
' some other location.
'
if (System.GetEnvVar("USEREXT") = NIL) then
  System.SetEnvVar("USEREXT", System.GetEnvVar("HOME"))
end
'
' The default font size used by ArcView's script editor is approximately
' 14 pt (courier). That font size is identified by the enumeration element
' #SED_FONTSIZE_MEDIUM. You can use the elements #SED_FONTSIZE_SMALL
' or #SED_FONTSIZE_LARGE to make the default font size smaller (12 pt)
' or larger (14 pt).
SEd.SetDefaultFontSize(#SED_FONTSIZE_SMALL)
if (system.GetOS = #SYSTEM_OS_MSW) then
  Script.Make("DDEServer.Start").DoIt(NIL)
  if (system.GetOSVariant = #SYSTEM_OSVARIANT_MSW16) then
    System.SetEnvVar("AVBIN", System.GetEnvVar("AVHOME")+"\bin16")
    System.SetEnvVar("AVEXT", System.GetEnvVar("AVHOME")+"\ext16")
    if (FN.FindInSystemSearchPath("winsock.dll") <> nil) then
      System.LoadLibrary("$AVBIN/avrpc.dll".AsFileName)
    end
    System.LoadLibrary("$AVBIN/avexec.dll".AsFileName)
  else 'for WinNT and Win95
    System.SetEnvVar("AVBIN", System.GetEnvVar("AVHOME")+"\bin32")
    System.SetEnvVar("AVEXT", System.GetEnvVar("AVHOME")+"\ext32")
    if (FN.FindInSystemSearchPath("wsock32.dll") <> nil) then       
      System.LoadLibrary("$AVBIN/avrpc.dll".AsFileName)
    end
  end 'MSW16 case
end 'MSW case
'
' Load the Shapes.dll
if (system.GetOS = #SYSTEM_OS_MSW) then
  System.LoadLibrary("$AVBIN/shapes.dll".AsFileName)
end 'MSW case
if (system.GetOS = #SYSTEM_OS_UNIX) then
  if (File.Exists("$AVHOME/lib/libshapes.so".AsFileName)) then
    System.LoadLibrary("$AVHOME/lib/libshapes.so".AsFileName)
  else
    if (File.Exists("$AVHOME/lib/libshapes.sl".AsFileName)) then
      System.LoadLibrary("$AVHOME/lib/libshapes.sl".AsFileName)
    else
      if (File.Exists("$AVHOME/lib/libshapes.a".AsFileName)) then
        System.LoadLibrary("$AVHOME/lib/libshapes.a".AsFileName)
      end
    end
  end
end
'
' Load the dnsgm.dll
if (File.Exists("$AVBIN/dnsgm.dll".AsFileName)) then
  System.LoadLibrary("$AVBIN/dnsgm.dll".AsFileName)
end
'
' Load the avimgexp.dll
if (File.Exists("$AVBIN/avimgexp.dll".AsFileName)) then
  System.LoadLibrary("$AVBIN/avimgexp.dll".AsFileName)
end
'
' Load the avdlog.dll
if (File.Exists("$AVBIN/avdlog.dll".AsFileName)) then
  System.LoadLibrary("$AVBIN/avdlog.dll".AsFileName)
end
 
s = TxSym.Make
s.SetFont(NFont.Make("AngsanaUPC","Bold"))
s.SetSize(18)
TOC.SetDefaultSymbol(s)
 
 

  • ใช้โปรแกรม Notepad เปิด file ที่เก็บ Source code คำสั่งภาษาไทย เช่น ของผมคือ Thai.txt
  • ใช้เมนูคำสั่ง Edit -->Select all -->Copy (หรือทางลัดอื่นแล้วแต่ถนัดครับ)
 
  • เปิด file ที่ควบคุมคำสั่งของโปรแกรมคือ C:\ESRI\AV-GIS30\ARCVIEW\ETC\start up

  • แล้วก็ Edit -->Paste (ต่อท้าย)

  • อย่าลืม Save
  • แล้ว Restart เครื่องคอมพิวเตอร์ใหม่
แค่นี้ให้โปรแกรมแสดงข้อมูลภาษาไทยปุ๊บรู้จักแล้วโชร์ให้ดูซะเลย