Powered By Blogger

27 May 2007

น้ำตาลเทียม_ความหวานเทียม

เมื่อวานซื้อ น้ำอัดลมมากิน
เห็นข้างกระป๋องเขียนเกี่ยวกับ ว่าใช้สารที่ช่วยทำให้หวาน คือ

ใช้สารเอสปาแตม และอะซิซัลเฟม เค เป็นสารให้ความหวาน

ลองหาข้อมูลของ เอสปาแตม ซึ่งพบว่า อาจมีผลกระทบบ้าง ดังนี้

http://my.dek-d.com/writer/story/viewlongc.php?id=96382&chapter=72

ส่วน ใน wikipedia เขียนไว้ดังนี้ นะครับ
http://en.wikipedia.org/wiki/Aspartame

24 May 2007

เห็นกงจักรเป็นดอกบัว

เห็นกงจักร เป็นดอกบัว

เจอเข้ากับตัว เพิ่งรุ้ว่า คำโบราณ ยังขลังจริงๆ

http://www.krusakon.com/sontanaa/view.php?No=2019

23 May 2007

ตัวอย่างโปรแกรม IronPython ( .NET 2.0)

เป็นตัวอย่าง WinForm ด้วย Iron Python for .NET
ซึ่งโปรแกรม นี้ ต้องลง .NET 2.0 Runtime ก่อน
โปรแกรม Iron Python โหลด ได้จาก http://www.codeplex.com/IronPython ขนาดไม่ใหญ่นัก ไม่เกิน 5 MB
แต่ อาจต้อง ติดตั้ง .NET 2.0 Redistribut ที่อาจตัวใหญ่หน่อย
หรือ ถ้า ได้ติดตั้ง VS.NET 2005 Express แล้วก็ไม่ต้อง ติดตั้ง Redistribut อีก

ตัว Ironpython สามารถ integrate เข้ากับ VS.NET ได้ ตามคู่มือ แต่ยังไม่ได้ทดลองทำ
ในตัวอย่าง นี้ลองเขียนด้วย notepad
และ run โดย ใช้


c:\>ipy db.py


โดย db.py จะเป็นไฟล์ที่เก็บ โปรแกรมนี้
ใน package ของ iron python อาจจะไม่มีข้อมูล วิธีการเขียน python นัก
แต่อาจหาได้ โดย อ่าน Help ของ Python 2.5 ที่โหลดและ ติดตั้งจาก http://www.python.org/

ตัวโปรแกรม จะทำหน้าที่ สร้าง Form และ สร้าง Control ตาม Table ตาม
Odbc DataSoure , Database ที่ใช้ เป็น MSAccess และดึงข้อมูล Table เข้า
สร้างเป้น Field Label , TextBox, ComboBox สำหรับ LookupTable ที่หน้าจอ
และ มีการ ผูก Event Click เข้ากับ Function

โค้ด มีดังนี้




import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
clr.AddReference("System.Data")

import System.Windows.Forms as WForm
import System.Drawing as    Draw
import System.Data as    Data
import System.Data.Odbc as    Odbc
import System.Console as Con

class Form1(WForm.Form):
def __init__(self):
Con.WriteLine("OK")
self.Text= "OK"
self._mLeft = 175
self._mTop = 10
#self.BackColor= Draw.Color.White
#self.addControls()
self.addCtrlDb()
@property
def mLeft(self):
return self._mLeft
@property
def mTop(self):
return self._mTop

# not use now
def addControls(self):
t = WForm.TextBox()
t.Text=  "dbApp"
self.Controls.Add( t )
self.Size=  Draw.Size(300 ,200)
def getCon(self):
str1 = "DSN=spt_import_cd";
self.dbg(str1)
cn = Odbc.OdbcConnection(str1)
cn.Open()
self.dbg(" ConnectOK")
return cn
def getDt(self,sql):
cn = self.getCon()
da = Odbc.OdbcDataAdapter(sql , cn)
dt = Data.DataTable()
da.Fill(dt )
return dt

def readToCombo(self ,combo ,sql , fldvalue , flddisplay):
dt  = self.getDt(sql)
for r in dt.Rows :
disp = r[flddisplay] + ''
combo.Items.Add ( disp )

def addCtrlDb(self):
cn = self.getCon()
sql = "select * from cd WHERE idcd = 0 "
da = Odbc.OdbcDataAdapter(sql ,cn )
dt = Data.DataTable()
row =da.Fill(dt )
cn.Close()

#self.AddLabel( "TableCD")
#self.NewLine()

lookupwi = 300
maxwi = 0
for col in dt.Columns:
self.dbg(col.ColumnName )
colname = col.ColumnName
self.AddLabel( colname)
if colname=="ProvID" :
sql2=  "Select * , ProvID & ':' & ProvName as ProvName2 from Province"
wi =self.AddLookupCombo(colname,sql2,"ProvID","ProvName2",lookupwi)
else:
if colname=="WhEnvID" :
sql2=  "Select * , WhEnvID & ':' & Title  as Title2 from WhEnvelope"
wi =self.AddLookupCombo(colname,sql2,"WhEnvID","Title2" ,lookupwi) 
else: 

wi = self.AddTextBox(colname )
if  wi > maxwi :
maxwi = wi
self.NewLine()
self.dbg("ListColAndCloseOK")
self.Height = self.mTop + 50
self.Width = self.mLeft + maxwi + 40
self.Text = "Table CD"

bt =  WForm.Button()
bt.Text = "Close"
bt.Left = self.mLeft
bt.Top = self.mTop
bt.Click += self.OnButtonClose
self.Controls.Add( bt )
self.Height += bt.Height

def AddLabel(self,name):
lb = WForm.Label()
lb.Name = "lb" + name
lb.Left =  20
lb.Top  = self.mTop
lb.Text = name
lb.AutoSize = True
self.Controls.Add(lb)
def AddTextBox(self,name):
t = WForm.TextBox()
t.Name = "tx" + name
t.Left =  self.mLeft
t.Top  = self.mTop
self.Controls.Add(t)
return t.Width
def AddLookupCombo(self,name,sqlsel,fldValue ,fldDisp,wi):
t = WForm.ComboBox()
t.Name = "cblookup" + name
t.Left =  self.mLeft
t.Top  = self.mTop
self.Controls.Add(t)
t.Width = wi
self.readToCombo(t ,sqlsel, fldValue ,fldDisp)
t.DropDownStyle = WForm.ComboBoxStyle.DropDownList

return t.Width
def NewLine (self ):
self._mTop += 23

def ListData(self,dsn):
str1 = "DSN=" + dsn;
self.dbg(str1)
cn = Odbc.OdbcConnection(str1)
cn.Open()
self.dbg(" ConnectOK")
cmd = cn.CreateCommand( )
cmd.CommandText = "SELECt * from cd "
rd = cmd.ExecuteReader()
while (rd.Read()):
self.dbg(str(rd["idcd"]) + ' ' + rd["Title"])
pass
cn.Close()
self.dbg(" CloseOK")
def dbg(self ,str1 ):
#WForm.MessageBox.Show(str1)
Con.WriteLine(str1)
#def OnButtonClose(*arg ):
def OnButtonClose(self ,ctrl, a ):
self.Close()

f = Form1()
WForm.Application.Run( f)











ปัญหา เท่าที่พบ คือ ไม่มี intellisense แต่ถ้าหากใช้กับ VS.NET และ มี Intellisense ได้
ก็น่าจะช่วยแก้ปัญหาได้
และ ปัญหาอีกอย่างที่พบ คือ Python หรือภาษาตระกูล นี้จะให้ความสำคัญกับ ย่อหน้ามากๆ
หาก มีการเปลี่ยนย่อหน้าหลายๆบรรทัดติดกัน การใช้ Editor notepad อาจไม่สะดวก
อาจใช้ editor ตัวอื่นๆ เช่น editplus แทน

และ พบว่า เราสามารถ compile code ของ iron python ให้เป็น .exe ได้
( แต่อาจต้อง ลง iron python ในเครื่อง ที่มี .exe นั้น ) โดย ทำตามขั้นตอนของ
การถามตอบ ดังนี้
http://lists.ironpython.com/pipermail/users-ironpython.com/2006-February/001825.html







In the IronPython distribution, Src/Scripts/Tests/compiler.py should
be enough to get started.

Here's a minimal example in IronPython:

# compiler.py
from IronPython.Hosting import PythonCompiler

from System.Collections.Generic import List
sources = List[str]()
sources.Add('hello.py')
outfile = 'hello.exe'

compiler = PythonCompiler(sources, outfile)
compiler.Compile()

Seo Sanghyeon





หวังว่า สำหรับใครที่ลองดู จะทำให้ งานง่ายขึ้น

รูปโปรแกรม หลังรันกับ database ตัวอย่าง ( ไม่ได้ให้มา ในนี้ )

15 May 2007

asp.net เซ็ต timeout

การ เซ็ต session timeout ของ ASP.NET นะครับ

ที่นี่ครับ

http://msdn2.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx
ใช้ attribute ชื่อ timeout ของ element ที่ชื่อ sessionstate นะครับ

ตัวอย่างเช่น (ลอกมาจาก เวปอ้างอิง )





05 May 2007

Troubleshooting the "The Binding Handle Is Invalid" error in Visual Studio 2005

แก้ปัญหา นี้ ใน ทั้ง Visual C# 2005 Express Edition และ
Visual Web Studio 2005 Express Edition เวลามีปํญหา
เวลารัน แล้ว ขึ้น msgbox ว่า
The Binding Handle Is Invalid
ซึ่ง ทำให้ เข้า Debug Mode ไม่ได้
ทำดังนี้ ตาม ลิงค์


http://blogs.msdn.com/habibh/archive/2005/11/10/491572.aspx

โดย สรุป คือ ให้ Enable Services ชื่อ 'Terminal Services'
เมื่อ ทำแล้ว จะรัน ใน Debug Mode ได้เลย ครับ

ตอนแรก ติดปัญหานี้อยู่เป็นเดือน ไม่ได้ ดีบักเลย นึกว่าลงโปรแกรมผิด
เพิ่งรู้ว่า จริงๆเป็นทริก เล็กน้อย แต่ก็เป็นปํญหาหนัก ถ้าแก้ไขไม่ได้ นะ

04 May 2007

Digital Sign MSAccess VBA

http://office.microsoft.com/en-us/access/HA011071651033.aspx
ถ้าเปิดMS Access 2003 จะพบว่ามีการแจ้งเตือน ด้านความปลอดภัย หากต้องการเปลี่ยนแปลง
ต้องมีการ ทำการ Digital Sign ก่อน ซึ่ง มีขั้นตอน วิธีการคือ
เราจะต้อง มีการลงทะเบียนขอ Certificate กับ บริษัทที่ให้บริการเช่น Vergisign หรือใน ไทยก็มี
ไม่แน่ใจว่า เป้น TOT หรือ กสท หรือบริษัทอื่นๆ อันนี้ไม่ทราบ


http://msdn2.microsoft.com/en-us/library/aa141471(office.10).aspx
แต่ถ้าต้องการ ใช้เฉพาะในเครื่อง หรือเพื่อทดสอบ
ก็ใช้ เครื่องมือชื่อ selfcert.exe ที่อยู่ใน Folder ของ Office 2003
เช่น
C:\Program Files\Microsoft Office\OFFICE11
แล้วป้อน ชื่อ ที่จะใช้เก็บใน certificate มันจะเข้ารหัสไว้ แบบ private-public key
จะไม่เห้น ไฟล์ใหม่ปรากฏขึ้น แต่ ms office จะรับรู้ได้

ให้เปิดไฟล์ msacess นั้นแล้ว เข้าไปที่ Visual Basic Editor
แล้ว ก็ เข้าเมนู Tools > Digital Signatures
แล้วเลือก Certificate ที่ต้องการ ในรายการ กดปุ่ม OK

แล้วปิด MS Access File เมื่อปิดใหม่ จะพบว่าไม่มีการถามแล้ว

ถ้าจะนำไปใช้ ที่เครื่องอื่น ก็ต้องไปรัน selfcert.exe ทำแบบเดียวกันที่เครื่องอื่นก่อนด้วย
แต่เราจะต้องจำ ตัวหนังสือที่เราป้อน ให้กับ selfcert.exe ให้ดี ด้วย หรืออาจใช้ชื่อที่เราใช้ประจำๆ ก็ได้
ปกติ เราก็ใช้แค่แบบเดียว สองแบบ เพราะถ้าใช้งานจริง คงไม่อยากจ่ายเงินให้กับผู้ให้บริการ certificate
หลายๆใบ


การ Sing จาก certificate นั้นจะทำโดย

03 May 2007

sqlcmd

from http://msdn2.microsoft.com/en-us/library/ms162773.aspx
sqlcmd Utility
ยอมให้คุณป้อน T-SQL statement,system procedure, script file ที่ command prompt ได้,
ทั้ง ใน Query Editor ใน SQLCMD mode ,
ใน windows script file
หรือ ใน cmd.exe ของ SQL Server agent job .

โปรแกรมนี้ใช้ OLE DB ในการรัน T-SQL แบบ แบทช์
ข้อสำคัญ
SQL Server Management Studio ใช้ SqlClient Class ใน .NET Framework ในการรันปกติ
และใช้ โหมด SQLCMD ใน Query Editor .

เมื่อ sqlcmd ถูกรันจาก commandline , sqlcmd จะใช้ OLE DB Provider.

เนื่องจากที่มีค่าเริ่มต้นที่ต่างกัน ก็อาจจะเห็นการทำงานที่ต่างกันได้ ในQuery เดียวกัน เมื่อใช้ในSQL Server Management studio ใน SQLCMD mode และใน sqlcmd utility .


...จะเห็นได้ว่า นอกจากจะใช้ graphics tools แล้ว เราก็อาจใช้sqlcmd.exe เพื่อรัน T-SQL ได้เช่นกัน ส่วนรายละเอียดนั้น ค่อนข้างมาก ในที่นี้ เขียนสั้นๆ และแค่มาแนะนำ นะครับ
from
http://msdn2.microsoft.com/en-us/library/ms165588.aspx
Overview of SQL Server Express .

SQL Server 2005 Express Edition เป็น database platform ที่อยู่บนพื้นฐานของ MSSQL Server 2005 , มาแทน MSDE . ทำงานร่วมกันได้กับ MS Visual Studio 2005, SQL Server Express ช่วยให้ง่ายในการสร้างapplicationที่เน้นงานด้านข้อมูล ซึ่งต้องเก้บข้อมูลจำนวนมาก , เพิ่ม ปลอดภัยของการเก็บข้อมูลมากขึ้น และติดตั้งระบบได้เร็วขึ้น

SQL Server 2005 Express Edition with Advanced Service ใน SQL Server Express เป็นรุ่นของ SQL Server Express ที่ได้รวม เครื่องมือ
สำหรับจัดการระบบในแบบ GUI, ความสามารถด้านการทำรายงาน และ ค้นหาแบบ text-based ได้

ทั้งสองรุ่น ให้ดาวน์โหลดฟรี สามารถ redistribute ได้ในเงื่อนไขของข้อตกลง
แต่ละรุ่น สามารถ ทำงานได้ทั้งเป็น client และ basic server database .
รุ่น Express เหมาะสำหรับ ISV , Server user , non-professinonal developers , web developer ,
Web site host , และผู้ที่ทำเป็นงานอดิเรก ซึ่ง สร้าง client application , ถ้าต้องการความสามรถระดับสูงกว่านี้ ควร upgrad เวอร์ชัน

http://msdn2.microsoft.com/en-us/library/ms165636.aspx
SQL Server Express Features
รุ่น Express สนับสนุนความสามารถส่วนใหญ่ของ Database Engine ของ SQLServer

หมายเหตุ
ถ้าเราสร้างและออกแบบ ข้อมูล ใน Express, สามารถปรับแต่งไปเป็น SQLServer 2005 ได้
แต่ไม่สามารถใช้ SQL Server version 2000 หรือต่ำกว่าได้

ต่อไปก็จะเป็นตารางแสดงสิ่งที่ SQL Server 2005 สนับสนุน
[ดูที่ต้นฉบับ]

ส่วนตารางต่อไป จะเป็น เรื่องของ Feature ที่มีใน SQL Server ร่นปกติ
แต่จะไม่มีใน SQL Server Express ซึ่งหลักๆก็คือ
[ดูที่ต้นฉบับ]
Reporting Services , Nofification Services , Integration Services , Analysis Services ,
Full text searcch , OLAP Service /Data Mining

from
http://msdn2.microsoft.com/en-us/library/ms365248.aspx
ส่วน SQL Server Express with Advanced Services Features นั้น
จะมี ฟีเจอร์เพิ่มมาอีกจาก รุ่น Express คือ
  • SQL Server Management Studio Express เป็นเครื่องมือแบบ graphic สำหรับจัดการดูแล SQL Server Database
  • Reporting Services รวม ตัวสร้างรีพอร์ท และสภาพแวดล้อมการออกแบบรายงาน ไว้
  • Full-text Search , เป็น Search Engine ที่ทรงพลังในการ ค้นหา ข้อมูลที่มีลักษณะ text-sensitive
ด้านล่างเป้นตารางว่าความสามารถไหน จะได้รับการสนับสนุน บ้าง จะไม่กล่าวถึง

02 May 2007

from
http://msdn2.microsoft.com/en-us/library/aa172787(SQL.80).aspx
Writing International Transact-SQL Statement

ถ้าต้องการให้ T-SQL Statement portableมากขึ้นให้ทำดังนี้
-เปลี่ยน char, varchar ,text ให้เป็น ncharm , nvarchar , ntext
ซึ่งจะทำให้ไม่ต้องเลือก codepage ในการเปลี่ยนชุดตัวอักษร
- เมื่อประมวลผลเปรียบเทียบ mount / day-of-week ให้ใช้
function dateparts() แทน datename() เพราะว่าแต่ละภาษาจะ ส่งค่ามาต่างกัน
อย่าโค้ด ใน program ให้ผูกกับ function datename เว้นแต่เมื่อจะแสดงผลอย่างเดียวเท่านั้น
- เมื่อ อ้างถึง วัน ในการเปรียบเทียบหรือ เป็น input ของ INSERT หรือ UPDATE
statement ให้ใช้ ค่าคงที่ ซึ่งจะแปลงไปเป็นค่าเดียวกันเสมอ ในทุกๆภาษา
ADO ,OLEDB ,ODBC application จะต้องใช้ รูปประโยคของ timestamp,date , และ time ในแบบ Odbc escape clause ลักษณะนี้
{ ts 'yyyy-mm-dd hh:mm:ss[.fff] '} เช่น: { ts '1998-09-24 10:02:20' }
{ d 'yyyy-mm-dd'} เช่น: { d '1998-09-24' }
{ t 'hh:mm:ss'} เช่น: { t '10:02:20'}

Application ที่ใช้ API อื่น หรือ T-SQL Script Store procedure และ Trigger จะต้องใช้
การเขียนในลักษณะ ที่เป้นตัวเลขที่เชื่อมต่อกันโดยไม่เว้นวรรค ตัวอย่างเช่น yyyymmdd เช่น 19980924

Application ที่ใช้ API อื่น หรือ T-SQL Script Store procedure และ Trigger อาจจะใช้
CONVERT Statement ร่วมกับการระบุ style parameter สำหรับทุกๆการแปลงค่าระหว่าง
ตัวแปรประเภท date และ smalldate และ character string และ data types .
ตัวอย่างเช่น ประโยคต่อไปนี้จะได้รับการแปลแล้วเหมือนกัน ในทุกๆภาษา หรือในทุกๆ การเซ็ตรูปแบบวันที่

SELECT *
FROM Northwind.dbo.Orders
WHERE OrderDate = CONVERT(DATETIME, '7/19/1996', 101)

ข้อมูล เพิ่มเติม ให้ดูที่ CAST และ CONVERT Statement

ทดลองส่งภาพ




ลองเอาภาพ ขึ้น blog เผื่อว่าวันหลังจะได้


นำภาพหน้าจอโปรแกรมที่แนะนำ หรืออื่นๆ มาให้ดูกันครับ




ภาพนี้ทำเอง ด้วย Google SketchUp 6


และ เร็นเดอร์ด้วย software free ที่ชื่อ blender อีกครั้ง




blender นั้น อาจจะสู้ 3D Max ไม่ได้ มีข้อดีอย่างเดียวคือ ฟรีครับ แต่เท่าที่ดู ใช้ยากและยังมี crash ระหว่างทางอีก










ส่วนอันนี้ เป็น iGoogle หรือ เป็นเว็ปที่เราจะ customizeได้ เมื่อ login เข้าสุ่ google Account ซึ่งจะเป็น mail ของเรา mail อะไรก็ได้ ไม่จำเป็นต้องเป็น g-mail แล้วเมื่อเข้าไปแล้ว เรา จะเลือก wiget (ช่องแต่ละช่อง ของ application ) มาใส่ เช่น นาฬิกา ปฏิทิน( บันทึกแก้ไขรายการได้อีกเยอะ) หรือ notepad หรือดิกชันนารี และการ์ตูนการ์ฟิว ข่าว




แต่ปัญหา ของ iGoogle ที่พบ คือ แม้จะเพิ่มหลาย tab แล้ว บางครั้งเมื่อใช้ๆไป


อยุ่ๆ tab หาย , widget ที่ใช้อยู่หาย ก็ต้องมาเพิ่มใหม่ไม่แน่ใจเหมือนกันว่าเพราะอะไร ลองๆเอาหน้าจอมา


ให้ดูกันน่ะครับ การล้อกin ก็จะใช้ Google Toolbar ที่เป็นรูป วงกลมสีเขียวเป็น ตัว singin , singoff


แล้วค่อยกด ตัวหนังสือ google ที่ toolbar เพื่อมาที่หน้าจอนี้