ไปดาวน์โหลด Package ที่เป็นแบบแยกที่
ก่อนอื่น Upgrade ก่อนครับ โดยโหลดไฟล์
http://download.mikrotik.com/routeros-mipsbe-4.10.npk
วิธีการ Upgrade ก็ไม่ยาก แค่ ไปที่ปุ่ม Files ใน Mikrotik แล้วลากไฟล์ของ routeros-mipsbe-4.10.npk ไปไว้ แล้ว System --> Reboot
หลังจาก Reboot จะใช้เวลาประมาณ 5 นาที ห้ามทำไฟดับครับห้ามปิดเปิดเครื่องจนกว่ามันจะ boot มาเอง
ไม่งั้นต้องใช้ net install แก้ และต้องใช้สาย Console ด้วยครับ
หลังจากนั้นไปดาวน์โหลด แบบแยก Package โดยโหลดไฟล์
http://download.mikrotik.com/all_packages-mipsbe-4.10.zip
ในไฟล์นี้จะมีไฟล์แยกมาเป็นแต่ละส่วน และมีไฟล์ Packages ของ Usermanager ด้วยครับ
วิธีการติดตั้งก็ไม่ยาก แค่ ไปที่ปุ่ม Files ใน Mikrotik แล้วลากไฟล์ของ Usermanger ไปไว้ แล้วไปที่ System--> Reboot
วันอังคารที่ 25 มิถุนายน พ.ศ. 2556
วันจันทร์ที่ 24 มิถุนายน พ.ศ. 2556
Solar Cell : UPS ห้ามต่อกับอะไรบ้าง
ที่มา : http://topicstock.pantip.com/wahkor/topicstock/2011/01/X10144635/X10144635.html
-ห้ามใช้เกินกำลังเครื่อง เช่น UPS 525VA จ่ายโหลดได้ประมาณไม่เกิน 350W ก็ไม่สามารถใช้กับอุปกรณ์ไฟฟ้าที่ใช้กำลังไฟเกิน 350Wได้ เลเซอร์ปริ๊นซ์เตอร์นั้นกินกระแสสูงมากจึงไม่สามารถใช้กับ UPSขนาดเล็กๆได้(แน่นอนว่าถ้าเป็น UPSขนาด 10kVAก็สามารถต่อใช้งานได้ไม่มีปัญหา) ถ้าใช้เกินตามคู่มือเค้าจะเรียกอาการนี้ว่า"โอเวอร์โหลด" คือใช้ไฟเกินกำลังที่เครื่องจะรับได้ครับ (บางรุ่นเวลาเสียบใช้ไฟอาคารจะใช้งานได้ปกติ แต่เวลาไฟดับเครื่องจะฟ้องโอเวอร์โหลดต้องระวังเวลาใช้ครับ)
-โหลดประเภทมอเตอร์ ไม่เหมาะสมนักที่จะใช้กับเครื่องสำรองไฟระบบธรรมดาแบบ Line interactive เพราะรูปคลื่นที่ UPSจ่ายออกมาเวลาไฟดับนั้นเป็นแบบเสต็ปเวฟ ซึ่งคนละแบบกับรูปคลื่นแบบซายน์เวฟแบบของการไฟฟ้า โหลดที่เป็นมอเตอร์เช่นพัดลมนั้นจะสะดุดเป็นจังหวะๆเมื่อเวลา UPS ทำการจ่ายไฟสำรองออกมา(ไฟดับ) อย่างไรก็ดี ได้มี UPSหลายยี่ห้อได้ผลิต UPSแบบ Line interactive แบบใหม่ ที่สามารถสร้างรูปคลื่นซายน์เวฟแบบของการไฟฟ้าได้ ซึ่งส่วนมากจะเรียกว่า Pure Sine Wave ซึ่งจะสามารถใช้งานกับโหลดประเภทมอเตอร์ได้ แต่ก็ไม่แนะนำครับ
-โหลดประเภทตู้เย็น/ตู้แช่/แอร์ เครื่องใช้ไฟฟ้าประเภทนี้จะมีคอมเพรสเซอร์ทำงานอยู่เป็นระยะๆ การต่ออุปกรณ์ประเภทนี้เข้ากับ UPS จะทำให้ UPS ทำงานหนักและอายุการใช้งานสั้นลง เพราะเมื่อคอมเพรสเซอร์ทำงานจะเกิดไฟกระชากขึ้นในชั่วขณะ ทำให้ UPSต้องทำงานหนัก และเสียได้ก่อนเวลาอันควรครับ
-ห้ามใช้เกินกำลังเครื่อง เช่น UPS 525VA จ่ายโหลดได้ประมาณไม่เกิน 350W ก็ไม่สามารถใช้กับอุปกรณ์ไฟฟ้าที่ใช้กำลังไฟเกิน 350Wได้ เลเซอร์ปริ๊นซ์เตอร์นั้นกินกระแสสูงมากจึงไม่สามารถใช้กับ UPSขนาดเล็กๆได้(แน่นอนว่าถ้าเป็น UPSขนาด 10kVAก็สามารถต่อใช้งานได้ไม่มีปัญหา) ถ้าใช้เกินตามคู่มือเค้าจะเรียกอาการนี้ว่า"โอเวอร์โหลด" คือใช้ไฟเกินกำลังที่เครื่องจะรับได้ครับ (บางรุ่นเวลาเสียบใช้ไฟอาคารจะใช้งานได้ปกติ แต่เวลาไฟดับเครื่องจะฟ้องโอเวอร์โหลดต้องระวังเวลาใช้ครับ)
-โหลดประเภทมอเตอร์ ไม่เหมาะสมนักที่จะใช้กับเครื่องสำรองไฟระบบธรรมดาแบบ Line interactive เพราะรูปคลื่นที่ UPSจ่ายออกมาเวลาไฟดับนั้นเป็นแบบเสต็ปเวฟ ซึ่งคนละแบบกับรูปคลื่นแบบซายน์เวฟแบบของการไฟฟ้า โหลดที่เป็นมอเตอร์เช่นพัดลมนั้นจะสะดุดเป็นจังหวะๆเมื่อเวลา UPS ทำการจ่ายไฟสำรองออกมา(ไฟดับ) อย่างไรก็ดี ได้มี UPSหลายยี่ห้อได้ผลิต UPSแบบ Line interactive แบบใหม่ ที่สามารถสร้างรูปคลื่นซายน์เวฟแบบของการไฟฟ้าได้ ซึ่งส่วนมากจะเรียกว่า Pure Sine Wave ซึ่งจะสามารถใช้งานกับโหลดประเภทมอเตอร์ได้ แต่ก็ไม่แนะนำครับ
-โหลดประเภทตู้เย็น/ตู้แช่/แอร์ เครื่องใช้ไฟฟ้าประเภทนี้จะมีคอมเพรสเซอร์ทำงานอยู่เป็นระยะๆ การต่ออุปกรณ์ประเภทนี้เข้ากับ UPS จะทำให้ UPS ทำงานหนักและอายุการใช้งานสั้นลง เพราะเมื่อคอมเพรสเซอร์ทำงานจะเกิดไฟกระชากขึ้นในชั่วขณะ ทำให้ UPSต้องทำงานหนัก และเสียได้ก่อนเวลาอันควรครับ
วันพุธที่ 19 มิถุนายน พ.ศ. 2556
String Split in vba
Sub SplitValue() Dim avarSplit As Variant Dim intIndex As Integer avarSplit = Split(Range("A1").Value, ",") For intIndex = LBound(avarSplit) To UBound(avarSplit) MsgBox "Item " & intIndex & " is " & avarSplit(intIndex) & _ " which is " & Len(avarSplit(intIndex)) & " characters long", vbInformation Next End Sub
วันเสาร์ที่ 15 มิถุนายน พ.ศ. 2556
VBA Create Table
Function Create_NCD_Table()
Dim rsp As Recordset
Dim table_name As String
Set dbs = CurrentDb
Set rsp = CurrentDb.OpenRecordset("SELECT ncd_code FROM ncd_disease WHERE ncd_code<>'' GROUP BY ncd_code")
Do While Not rsp.EOF
ncd_code = rsp.Fields("ncd_code")
table_name = "ncd_" & ncd_code
If TableExists(table_name) Then
CurrentDb.TableDefs.Delete (table_name)
End If
Set TBL = dbs.CreateTableDef(table_name)
Set fld = TBL.CreateField("pcucode", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("pid", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("cid", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("chronic", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("vhid", dbText, 8)
TBL.Fields.Append fld
Set fld = TBL.CreateField("sick_year", dbText, 4)
TBL.Fields.Append fld
Set fld = TBL.CreateField("death_year", dbText, 4)
TBL.Fields.Append fld
Set fld = TBL.CreateField("birth_year", dbText, 4)
TBL.Fields.Append fld
'Set fld = TBL.CreateField("Field3", dbInteger)
'TBL.Fields.Append fld
'Set fld = TBL.CreateField("Field4", dbCurrency)
'TBL.Fields.Append fld
dbs.TableDefs.Append TBL
dbs.TableDefs.Refresh
rsp.MoveNext
Loop
End Function
Dim rsp As Recordset
Dim table_name As String
Set dbs = CurrentDb
Set rsp = CurrentDb.OpenRecordset("SELECT ncd_code FROM ncd_disease WHERE ncd_code<>'' GROUP BY ncd_code")
Do While Not rsp.EOF
ncd_code = rsp.Fields("ncd_code")
table_name = "ncd_" & ncd_code
If TableExists(table_name) Then
CurrentDb.TableDefs.Delete (table_name)
End If
Set TBL = dbs.CreateTableDef(table_name)
Set fld = TBL.CreateField("pcucode", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("pid", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("cid", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("chronic", dbText, 15)
TBL.Fields.Append fld
Set fld = TBL.CreateField("vhid", dbText, 8)
TBL.Fields.Append fld
Set fld = TBL.CreateField("sick_year", dbText, 4)
TBL.Fields.Append fld
Set fld = TBL.CreateField("death_year", dbText, 4)
TBL.Fields.Append fld
Set fld = TBL.CreateField("birth_year", dbText, 4)
TBL.Fields.Append fld
'Set fld = TBL.CreateField("Field3", dbInteger)
'TBL.Fields.Append fld
'Set fld = TBL.CreateField("Field4", dbCurrency)
'TBL.Fields.Append fld
dbs.TableDefs.Append TBL
dbs.TableDefs.Refresh
rsp.MoveNext
Loop
End Function
Ms Access&Visual Basic Connector/ODBC Using ADO, DAO and RDO
ที่มา : http://dev.mysql.com/doc/refman/5.0/es/myodbc-examples-programming.html
Private Sub myodbc_ado_Click() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim fld As ADODB.Field Dim sql As String 'connect to MySQL server using MySQL ODBC 3.51 Driver Set conn = New ADODB.Connection conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};"_ & "SERVER=localhost;"_ & " DATABASE=test;"_ & "UID=venu;PWD=venu; OPTION=3" conn.Open 'create table conn.Execute "DROP TABLE IF EXISTS my_ado" conn.Execute "CREATE TABLE my_ado(id int not null primary key, name varchar(20)," _ & "txt text, dt date, tm time, ts timestamp)" 'direct insert conn.Execute "INSERT INTO my_ado(id,name,txt) values(1,100,'venu')" conn.Execute "INSERT INTO my_ado(id,name,txt) values(2,200,'MySQL')" conn.Execute "INSERT INTO my_ado(id,name,txt) values(3,300,'Delete')" Set rs = New ADODB.Recordset rs.CursorLocation = adUseServer 'fetch the initial table .. rs.Open "SELECT * FROM my_ado", conn Debug.Print rs.RecordCount rs.MoveFirst Debug.Print String(50, "-") & "Initial my_ado Result Set " & String(50, "-") For Each fld In rs.Fields Debug.Print fld.Name, Next Debug.Print Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next rs.MoveNext Debug.Print Loop rs.Close 'rs insert rs.Open "select * from my_ado", conn, adOpenDynamic, adLockOptimistic rs.AddNew rs!Name = "Monty" rs!txt = "Insert row" rs.Update rs.Close 'rs update rs.Open "SELECT * FROM my_ado" rs!Name = "update" rs!txt = "updated-row" rs.Update rs.Close 'rs update second time.. rs.Open "SELECT * FROM my_ado" rs!Name = "update" rs!txt = "updated-second-time" rs.Update rs.Close 'rs delete rs.Open "SELECT * FROM my_ado" rs.MoveNext rs.MoveNext rs.Delete rs.Close 'fetch the updated table .. rs.Open "SELECT * FROM my_ado", conn Debug.Print rs.RecordCount rs.MoveFirst Debug.Print String(50, "-") & "Updated my_ado Result Set " & String(50, "-") For Each fld In rs.Fields Debug.Print fld.Name, Next Debug.Print Do Until rs.EOF For Each fld In rs.Fields Debug.Print fld.Value, Next rs.MoveNext Debug.Print Loop rs.Close conn.Close End Sub
วันพฤหัสบดีที่ 13 มิถุนายน พ.ศ. 2556
FWTools การแปลงระบบพิกัดอ้างอิงสำหรับตำแหน่งในข้อมูลภาพ (Image Correction)
gdalwarp –s_srs epsg: 32647 –t_srs epsg:4326 D:\TH_CAT_090204101807501_1\ IMAGERY.tif D:\theos4\IMAGERY4326.tif”
FWTools การลดรายละเอียดภาพ (Reduce resolution)
gdalwarp -tr 1 10 -r cubic D:\TH_CAT_090204101807501_1\IMAGERY.tif D:\Theos3\ IMAGERY4_Red.tif
FWTools การเพิ่มความคมชัดให้ข้อมูลภาพถ่ายดาวเทียม (Image Enhancement)
gdalenhance –ot byte –equalize D:\TH_CAT_090204101807501_1\IMAGERY.TIF D:\theos2\IMAGERY2_Enh.tif
FWTools การบีบอัดข้อมูลภาพ
- แบบไม่มีการสูญเสียรายละเอียด
gdal_translate -of GTiff -co COMPRESS=LZW D:\TH_CAT_090204101807501_1\ IMAGERY.tif D:\theos3\IMAGERY14_ LZW.tif
- แบบมีการสูญเสียรายละเอียด
gdal_translate –of GTiff -co COMPRESS =JPEG D:\TH_CAT_090204101807501_1\ IMAGERY.tif D:\theos3\IMAGERY15_ JPEG.tif
gdal_translate -of GTiff -co COMPRESS=LZW D:\TH_CAT_090204101807501_1\ IMAGERY.tif D:\theos3\IMAGERY14_ LZW.tif
- แบบมีการสูญเสียรายละเอียด
gdal_translate –of GTiff -co COMPRESS =JPEG D:\TH_CAT_090204101807501_1\ IMAGERY.tif D:\theos3\IMAGERY15_ JPEG.tif
FWTools การ merge ภาพหลายๆ ไฟล์ด้วย gdal_merge
ที่มา:http://sawarino.blogspot.com/2009/07/gdalmerge.html
การใช้งาน gdal_merge อย่างง่าย โดยจะขอทดลองกับข้อมูล GDEM โดยการใช้งาน gdal_merge นั้นจะแตกกต่างกับคำสั่ง gdal อื่นๆ คือ ต้องระบุผลลัพธ์ (Output file) ก่อนแล้วจึงระบุไฟล์ต้นฉบับ การใช้งานเบื้องต้นเป็นไปตาม syntax ดังนี้ครับ
#gdal_merge [option] [output file] [input files] ซึ่งตัวอย่างการใช้งานดังนี้ครับ
#gdal_merge -of GTiff -o output.tif abc1.tif abc2.tif abc3.tif abc4.tif
จากตัวอย่างดังกล่าว จะเห็นว่าการระบุไฟล์ต้นฉบับที่มากกว่า 1 ไฟล์นั้นค่อนข้างยุ่งยาก เราสามารถใช้เครื่องหมาย * เข้ามาช่วยในคำสั่งได้ดังนี้ครับ
#gdal_merge -of GTiff -o sample.tif *.tif
การใช้งาน gdal_merge อย่างง่าย โดยจะขอทดลองกับข้อมูล GDEM โดยการใช้งาน gdal_merge นั้นจะแตกกต่างกับคำสั่ง gdal อื่นๆ คือ ต้องระบุผลลัพธ์ (Output file) ก่อนแล้วจึงระบุไฟล์ต้นฉบับ การใช้งานเบื้องต้นเป็นไปตาม syntax ดังนี้ครับ
#gdal_merge [option] [output file] [input files] ซึ่งตัวอย่างการใช้งานดังนี้ครับ
#gdal_merge -of GTiff -o output.tif abc1.tif abc2.tif abc3.tif abc4.tif
จากตัวอย่างดังกล่าว จะเห็นว่าการระบุไฟล์ต้นฉบับที่มากกว่า 1 ไฟล์นั้นค่อนข้างยุ่งยาก เราสามารถใช้เครื่องหมาย * เข้ามาช่วยในคำสั่งได้ดังนี้ครับ
#gdal_merge -of GTiff -o sample.tif *.tif
Resampling ภาพด้วย gdalwarp
ที่มา:http://sawarino.blogspot.com/2011/08/resampling-gdalwarp.html
การ resampling ข้อมูลภาพเพื่อให้มีขนาดหรือจำนวนจุดภาพเท่าที่ต้องการ ตัวอย่างเช่น ภาพเดิมมีขนาด 300x300 จุดภาพ แต่ต้องการเพิ่มให้เป็น 1200x1200 จุดภาพ เรามาดูวิธีการกันเลยนะครับ
คำสั่งหรือโปรแกรมประยุกต์ที่ใช้คือ gdalwarp ส่วน option หรือ ทางเลือกที่จะใช้คือ -ts width height ดังนี้ครับ
>>>gdalwarp -ts width height inputfile outputfile
ตัวอย่างการใช้งานมีดังนี้ครับ
>>>gdalwarp -ts 1200 1200 abc300.tif abc1200.tif
ปล. หากต้องการระบุวิธี resampling ให้เพิ่มทางเลือก -r xxxx นะครับ เช่น -r bilinear, cubic, cubicspline หรือ lanczos. แต่ถ้าไม่ระบุโปรแกรมจะใช้วิธี nearest เป็นค่าเริ่มต้นครับ
คำสั่งหรือโปรแกรมประยุกต์ที่ใช้คือ gdalwarp ส่วน option หรือ ทางเลือกที่จะใช้คือ -ts width height ดังนี้ครับ
>>>gdalwarp -ts width height inputfile outputfile
ตัวอย่างการใช้งานมีดังนี้ครับ
>>>gdalwarp -ts 1200 1200 abc300.tif abc1200.tif
ปล. หากต้องการระบุวิธี resampling ให้เพิ่มทางเลือก -r xxxx นะครับ เช่น -r bilinear, cubic, cubicspline หรือ lanczos. แต่ถ้าไม่ระบุโปรแกรมจะใช้วิธี nearest เป็นค่าเริ่มต้นครับ
การแปลงไฟล์แผนที่ GIS จาก MapInfo เป็น Shapefile
Download จาก http://www.ajarnveerapong.com/download/ogr2gui.zip
วันอังคารที่ 11 มิถุนายน พ.ศ. 2556
การแปลงค่าพิกัดจากองศา ลิปดา ฟิลิปดา เป็น แบบองศาทศนิยม
การแปลงค่าพิกัดจาก องศา ลิปดา ฟิลิปดา (hddd?ddd’ddd.ddd’’) และ องศา ลิปดา ฟิลิปดา (hddd?ddd.ddd’)
เป็น แบบองศาทศนิยม (hddd.ddd?)
ตัวอย่างที่ 1 องศา ลิปดา ฟิลิปดา (hddd?ddd’ddd.ddd’’)
Lat 13? 45’ 53.7’’ N
Long 100? 32' 17.9’’ E
ขั้นตอนที่ 1 หาค่าลิปดา นำค่าลิปดาหารด้วย 60 จะได้
Lat 13? 45’ 53.7’’ N
ลิปดา = 45/60
ลิปดา = 0.75
Long 100? 32' 17.9’’ E
ลิปดา = 32/60
ลิปดา = 0.533
ขั้นตอนที่ 2 หาค่าฟิลิปดา นำค่าฟิลิปดาหารด้วย 3600 จะได้
Lat 13? 45’ 53.7’’ N
ฟิลิปดา = 53.7/3600
ฟิลิปดา = 0.014916
Long 100? 32' 17.9’’ E
ฟิลิปดา = 17.9/3600
ฟิลิปดา = 0.004972
ขั้นตอนที่ 3 นำค่าลิปดาจากขั้นตอนที่ 1 + ค่าฟิลิปดาจากขั้นตอนที่ 2
Lat 13? 45’ 53.7’’ N
ลิปดา = 45/60
ลิปดา = 0.75
Lat 13? 45’ 53.7’’ N
ฟิลิปดา = 53.7/3600
ฟิลิปดา = 0.014916
Lat 13? 45’ 53.7’’ N
= 13? + (0.75+0.014916)
= 13? + 0.764916
ดังนั้น Lat = 13.764916? N
Long 100? 32' 17.9’’ E
ลิปดา = 32/60
ลิปดา = 0.533
Long 100? 32' 17.9’’ E
ฟิลิปดา = 17.9/3600
ฟิลิปดา = 0.004972
Long 100? 32' 17.9’’ E
= 100? + (0.533+0.004972)
= 100? + 0.537972
ดังนั้น Long = 100.537972? E
สรุป
Lat 13? 45’ 53.7’’ N = Lat 13.764916? N
Long 100? 32' 17.9’’ E = Long 100.537972? E
สมัครสมาชิก:
บทความ (Atom)