วันอังคารที่ 25 มิถุนายน พ.ศ. 2556

Mikrotik การติดตั้ง Package Usermanager

ไปดาวน์โหลด 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

วันจันทร์ที่ 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ต้องทำงานหนัก และเสียได้ก่อนเวลาอันควรครับ

วันพุธที่ 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

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

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

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 เป็นค่าเริ่มต้นครับ

การแปลงไฟล์แผนที่ GIS จาก MapInfo เป็น Shapefile

           การแปลงไฟล์แผนที่ GIS จาก MapInfo เป็น shapefile จริงแล้วจะต้องใช้เครื่องมือที่มีอยู่ในโปรแกรม MapInfo หรือโปรแกรมเสริที่จะรับไฟล์ดังกล่าวมาแสดง อย่างเช่นใน ArcView เป็นต้น แต่ก็ยังมีโปรแกรมเฉพาะเล็กๆที่ไม่ต้องพึ่งโปรแกรมดังกล่าว โดยสามารถแปลงได้ด้วยอย่างดายและสะดวกได้แก่ ogr2gui 
          Download จาก http://www.ajarnveerapong.com/download/ogr2gui.zip

วันอังคารที่ 11 มิถุนายน พ.ศ. 2556

การแปลงค่าพิกัดจากองศา ลิปดา ฟิลิปดา เป็น แบบองศาทศนิยม

การแปลงค่าพิกัดจาก องศา ลิปดา ฟิลิปดา (hddd?ddd’ddd.ddd’’) และ องศา ลิปดา ฟิลิปดา (hddd?ddd.ddd’
เป็น แบบองศาทศนิยม (hddd.ddd?)
ตัวอย่างที่ องศา ลิปดา ฟิลิปดา (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.764916N
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.537972E
สรุป
Lat  13? 45 53.7’’ N                        Lat  13.764916N
Long  100? 32' 17.9’’ E                    Long  100.537972E