Wednesday, November 6, 2013

SQL: หาวันที่ต้นเดือนและวันที่สิ้นเดือน

หาวันที่วันแรกของเดือน
SELECT DATEADD(MONTH, DATEDIFF(MONTH,0,getdate()),0)

หาวันที่วันสิ้นเดือน
SELECT DATEADD(d,-1, DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())+1,0))

Wednesday, October 30, 2013

นิทานเปลี่ยนชีวิต: ชาวประมงกับนักลงทุน

นักลงทุนชาวอเมริกันนายหนึ่ง กำลังยืนอยู่บนท่าเรือของชายฝั่งหมู่บ้านเม็กซิกันแห่งหนึ่ง ขณะที่มีเรือประมงลำหนึ่งกำลังแล่นเข้ามาจอด แล้วเขาก็ได้เห็นปลาโอครีบเหลืองตัวโตๆ กองอยู่บนเรือลำนั้น

ชาวอเมริกันเอ่ยชมชาวประมงท้องถิ่นที่จับปลาได้เก่ง ก่อนจะถามว่า “คุณใช้เวลาในการจับปลาพวกนี้นานไหม”

ชาวประมงตอบว่า “ครู่เดียวเท่านั้นแหละครับ”

“อ้าว ถ้าอย่างนั้นทำไมไม่อยู่นานอีกหน่อยเพื่อจะได้ปลามากกว่านี้ล่ะ” เขาสงสัย

คนถูกถามตอบเรียบ ๆ “นี่ก็พอเลี้ยงครอบครัวในวันนี้แล้วครับ”

นักลงทุนผู้มาเยือนถามใหม่ “แล้วคุณเอาเวลาที่เหลือไปทำอะไรล่ะ”

“ผมก็ยุ่งทั้งวันแหละครับ นอนตื่นสายๆ จับปลาวันละนิดหน่อย เล่นกับลูกๆ นอนพักกลางวันกับภรรยาของผม เดินเล่นในหมู่บ้าน จิบไวน์ และเล่นกีต้าร์กับเพื่อนฝูงในตอนเย็นๆ

คนอเมริกันจึงพูดอย่างกระหยิ่มว่า
“ผมจบเอ็มบีเอจากฮาร์วาร์ด สามารถให้คำแนะนำคุณได้นะ อันดับแรกก็คือ คุณน่าจะจับปลาให้เยอะกว่านี้ เพื่อที่จะได้ซื้อเรือลำโตๆ ผลจากการมีเรือลำโต ก็จะทำให้คุณมีเงินมากพอที่จะซื้อเรือเพิ่มขึ้น

จากนั้น คุณก็นำปลาที่จับได้ไปขายให้โรงงาน โดยไม่ต้องผ่านพ่อค้าคนกลางอย่างในตอนนี้ หรือไม่ก็สร้างโรงงานเสียเอง ซึ่งคุณก็จะสามารถควบคุมได้ทั้งหมด นับตั้งแต่กระบวนการผลิต ผลผลิต ตลอดจนการจัดจำหน่าย

ถึงตอนนั้นคุณก็สามารถย้ายจากหมู่บ้านชาวประมงเล็กๆ แห่งนี้ ไปอยู่ที่เมืองเม็กซิโกซิตี้ จากนั้นก็ขยับขยายย้ายไปแอลเอแล้วไปยังนิวยอร์ก ที่ซึ่งคุณจะสามารถขยายกิจการให้เจริญรุ่งเรืองยิ่งขึ้น”

เมื่อฟังมาถึงตอนนี้ ชาวประมงก็ถามว่า
“แล้วทั้งหมดนี้ต้องใช้เวลาสักกี่ปี”

“15 ถึง 20 ปี”

“จากนั้นล่ะ”

คนอเมริกันหัวเราะร่วนและบอกว่า
“ทีนี้ก็จะถึงช่วงสำคัญที่สุดในชีวิตล่ะ เมื่อโอกาสเหมาะ คุณก็ควรจะทำหนังสือชี้ชวนขายหุ้น เพื่อขายหุ้นทั้งหมดแก่สาธารณะ แล้วคุณจะกลายมาเป็นมหาเศรษฐี อาจทำเงินได้เป็นล้านๆ เหรียญเลยก็ได้นะ”

“เป็นล้านๆ … แล้วยังไงล่ะ”

คนอเมริกันแจกแจงต่ออย่างเพลิดเพลิน “จากนั้นคุณก็ค่อยเกษียณตัวเอง ย้ายไปอยู่ที่หมู่บ้านชาวประมงเล็กๆ นอนตื่นสายๆ ตกปลาวันละเล็กๆ น้อยๆ เล่นกับลูกๆ นอนพักกลางวันกับภรรยาที่บ้าน ตอนเย็นก็เดินเล่นในหมู่บ้าน จิบไวน์ และเล่นกีต้าร์กับเพื่อนฝูง…

Tuesday, September 3, 2013

SQL SERVER: Convert DateTime to Formatted Varchar

FormatSQLExample
DD/MM/YYSELECT CONVERT(VARCHAR(8), GETDATE(), 3)31/12/13
DD/MM/YYYYSELECT CONVERT(VARCHAR(10), GETDATE(), 103)31/12/2013
DD/MM/ปี พ.ศ.CONVERT(VARCHAR(10), DATEADD(yyyy,+543,getdate()), 103)31/12/2556
YYMMDDSELECT CONVERT(VARCHAR(6), GETDATE(), 12)170428
YYYYMMDDSELECT CONVERT(VARCHAR(8), GETDATE(), 112)20170428
HH:MMSELECT substring(CONVERT(VARCHAR, GETDATE(), 121),12,5)20:30
YYYY-MM-DDSELECT CONVERT(VARCHAR(10), GETDATE(), 121)2013-12-31
YYYY-MM-DD HH:MI:SS.MMM(24h)SELECT CONVERT(VARCHAR(23), GETDATE(), 121)2013-12-31 23:59:59.789

Friday, August 30, 2013

แผนที่ท่องเที่ยวด้วยจักรยาน

รวมแผนที่ท่องเที่ยวด้วยจักรยานทั่วประเทศ

แผนที่ท่องเที่ยวอยุธยา


แผนที่ท่องเที่ยวจันทบุรี

แผนที่กินเที่ยวในตัวเมืองจันทบุรี


แผนที่กินเที่ยวรอบเมืองจันทบุรี


แผนที่ท่องเที่ยวบางกระเจ้า


Monday, July 29, 2013

รู้จักข้อกฎหมายการขี่จักรยานก่อนออกไปปั่น

กฎหมายที่เกี่ยวข้องกับจักรยานจาก"โครงการศึกษากฎหมายเกี่ยวกับการใช้จักรยานในประเทศไทย" ที่ชมรมจักรยานเพื่อสุขภาพแห่งประเทศไทย ยื่นต่อ สำนักงานกองทุนสนับสนุนการสร้างเสริมสุขภาพ (สสส.) เมื่อ 31 พฤษภาคม 2546 มานำเสนอเป็นเกร็ดความรู้ 

สำหรับรถจักรยาน ควรขับขี่จักรยานอย่างไรในทางจราจร?? 
 
ม.79 ทางใดที่ได้จัดทำไว้สำหรับรถจักรยาน ผู้ขับขี่รถจักรยานต้องขับในทางนั้น
ข้อนี้อธิบาย คือ ถนนเส้นไหนที่มีป้ายจาราจรบอกหรือป้ายสัญลักษณ์ชี้ให้จักรยานใช้ช่องทางนั้น จักรยานต้องใช้ช่องทางนั้นเท่านั้น
ม.82 ผู้ขับขี่รถจักรยานต้องขับให้ชิดขอบทางด้านซ้ายของทางเดินรถ ไหล่ทาง หรือ ทางที่จัดทำไว้สำหรับรถจักรยานให้มากที่สุดเท่าที่จะทำได้ แต่ในกรณีที่มีช่องเดินรถประจำทางด้านซ้ายสุดของทางเดินรถ ต้องขับขี่รถจักรยานให้ชิดช่องเดินรถประจำทางนั้น 
ข้อนี้อธิบาย คือ กรณีมีเลนรถประจำทางอยู่ด้านซ้ายสุดของถนน ต้องขี่รถจักรยานในเลนที่อยู่ทางด้านขวาของเลนรถประจำทาง โดยขี่อยู่ทางด้านซ้ายของเลนนั้น ซึ่งจะชิดกับเลนรถประจำทาง 

กฎหมายจราจรกำหนดให้รถจักรยานต้องมี อุปกรณ์หลัก 4 อย่าง
ม.80 รถจักรยานที่ใช้ในทางเดินรถ ไหล่ทางหรือทางที่จัดทำไว้สำหรับรถจักรยาน ผู้ขับขี่รถจักรยานต้องจัดให้มี
1.กระดิ่งที่ให้เสียงสัญญาณได้ยินได้ในระยะไม่น้อยกว่า30 เมตร
2.เครื่องห้ามล้อ(เบรค)ที่ใช้การได้ดี เมื่อใช้สามารถทำให้รถจักรยานหยุดได้ทันที
3.โคมไฟติดหัวรถจักรยาน(ไฟหน้า)แสงขาวไม่น้อยกว่าหนึ่งดวง ที่ให้แสงไฟส่องตรงไปข้างหน้า เห็นพื้นทางได้ชัดเจนในระยะไม่น้อยกว่า 15 เมตร และอยู่ในระดับต่ำกว่าสายตาของผู้ขับขี่ซึ่งขับรถสวนมา
4.โคมไฟติดท้ายรถจักรยานแสงแดง ไม่น้อยกว่าหนึ่งดวง ที่ให้แสงสว่างตรงไปข้างหลัง หรือ ติดวัตถุสะท้อนแสงสีแดงแทน ซึ่งเมื่อถูกไฟส่องให้มีแสงสะท้อน 



การให้สัญญาณด้วยมือและแขนอย่างถูกต้อง
ม.37การใช้สัญญาณด้วยมือและแขนให้ปฏิบัติดังต่อไปนี้
1.เมื่อจะลดความเร็วของรถให้ยื่นแขนขวาตรงออกไปนอกรถเสมอระดับไหล่และโบกมือขึ้นลงหลายครั้ง
2.เมื่อจะหยุดรถให้ยื่นแขนขวาตรงออกไปนอกรถเสมอระดับไหล่ยกแขนขวาท่อนล่างตั้งฉากกับแขนท่อนบนและตั้งฝ่ามือขึ้น
3.เมื่อจะให้รถคันอื่นผ่านหรือแซงขึ้นหน้าให้ยื่นแขนขวาตรงออกไปนอกรถเสมอระดับไหล่ และโบกมือไปทางข้างหน้าหลายครั้ง
4.เมื่อจะเลี้ยวขวา ให้ยื่นแขนขวาตรงออกไปนอกรถเสมอระดับไหล่
5.เมื่อจะเลี้ยวซ้ายหรือเปลี่ยนช่องเดินรถไปทางซ้าย ให้ยื่นแขนขวาตรงออกไปเสมอระดับไหล่ และงอข้อมือชูขึ้นโบกไปทางซ้ายหลายครั้ง 


หมายเหตุ ภาพประกอบสัญลักษณ์มือนำมาจากเว็บไซต์ต่างประเทศ ซึ่งขับรถพวงมาลัยซ้าย ภาพการทำมือจึงสลับข้างกับเนื้อหาของไทย

สิ่งที่ผู้ขี่จักรยานไม่ควรทำ 7 ประการ
ม.83 ในทางเดินรถ ไหล่ทาง หรือทางที่จัดทำไว้สำหรับรถจักรยาน ห้ามมิให้ผู้ขับขี่รถจักรยาน
1.ขับโดยประมาทหรือน่าหวาดเสียวอันอาจเกิดอันตรายแก่บุคคลหรือทรัพย์สิน
2.ขับโดยไม่จับคันบังคับรถ
3.ขับขนานกันเกินสองคันเว้นแต่ขับในทางที่จัดไว้สำหรับรถจักรยาน
4.ขับโดยนั่งบนที่อื่นอันมิใช่อานที่จัดไว้เป็นที่นั่งตามปกติ
5.ขับโดยบรรทุกบุคคลอื่นเว้นแต่รถจักรยานสามล้อสำหรับบรรทุกคน
6.บรรทุกหรือถือสิ่งของหีบห่อหรือของใดๆในลักษณะที่เป็นการกีดขวางการจับคันบังคับรถหรืออันอาจจะเกิดอันตรายแก่บุคคลหรือทรัพย์สิน
7.เกาะหรือพ่วงรถอื่นที่กำลังแล่นอยู่

และสุดท้ายรู้หรือไม่ว่ารถจักรยาน2ล้อบรรทุกคนไม่ได้ บรรทุกได้แต่สิ่งของเพียง 30 กิโลกรัม (เท่านั้น) 
นั่นแปลว่า หากชายหนุ่มจะให้หญิงสาวซ้อนท้ายบนท้องถนนหลวงแล้วคงต้องคิดให้ดี เว้นแต่ถนนส่วนบุคคลหรือในที่ส่วนบุคคล ไม่น่าจะเป็นอะไร 

เมื่อทำความเข้าใจกับข้อปฏิบัติ และข้อกฎหมายทั้งหมดนี้แล้ว นักปั่นทั้งหลายก็จะใช้ถนนร่วมกับผู้อื่นได้อย่างปลอดภัย สมเกียรติสองล้ออย่างแท้จริง 

Tuesday, July 16, 2013

SQL Server:adding default value

alter table TableName1 add constraint MyConsName1 default GETDATE() for MyDateColumnName

Wednesday, July 10, 2013

SQL Server: Store Procedure สำหรับแปลง Collation ของทุก fields ในทุก table

declare @SQLText nvarchar(500)
declare @TableName nvarchar(100)
declare @ColumnName nvarchar(100)
declare @DataType nvarchar(100)
declare @CharacterMaxLen nvarchar(100)
declare @IsNullable nvarchar(100)
declare @CollationName nvarchar(100)

set @CollationName = 'SQL_Latin1_General_CP1_CI_AS'

DECLARE MyColumnCursor Cursor FOR
SELECT TABLE_NAME,COLUMN_NAME,DATA_TYPE, CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns
WHERE (Data_Type LIKE '%char%' OR Data_Type LIKE '%text%') AND COLLATION_NAME <> @CollationName
ORDER BY TABLE_NAME,ordinal_position
Open MyColumnCursor

FETCH NEXT FROM MyColumnCursor INTO @TableName,@ColumnName, @DataType, @CharacterMaxLen, @IsNullable
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLText = 'ALTER TABLE ' + @TableName + ' ALTER COLUMN [' + @ColumnName + '] ' + @DataType + '(' + CASE WHEN @CharacterMaxLen = -1 THEN 'MAX' ELSE @CharacterMaxLen END + ') COLLATE ' + @CollationName + ' ' + CASE WHEN @IsNullable = 'NO' THEN 'NOT NULL' ELSE 'NULL' END
PRINT @SQLText

FETCH NEXT FROM MyColumnCursor INTO @TableName,@ColumnName, @DataType, @CharacterMaxLen, @IsNullable
END
CLOSE MyColumnCursor
DEALLOCATE MyColumnCursor

Thursday, June 6, 2013

SQL Server: การเพิ่ม email ในหน้า Notifications ของ Job

ถ้าเข้าหน้า Notifications ของ Job แล้วติ๊กให้ส่ง email ปกติใน dropdown จะไม่มีชื่อให้เลือก คุณต้องเข้าไปเพิ่ม Operator เสียก่อน โดย Operators จะอยู่ใน SQL Server Agent เหมือนกันกับ Jobs
คลิกขวาบน Operators เลือก New Operator


กรอกชื่อ ติ๊กถูกที่ Enabled แล้วกรอก Email ลงไป เสร็จเรียบร้อย

กลับมาที่หน้า Notifications ของ Job อีกครั้ง ทีนี้จะมีชื่อให้เลือกตามชื่อที่เราตั้งใน Operators


ที่นี้ก็เลือกได้แล้ว

Monday, February 4, 2013

ดูยังไงว่าเป็นไอโฟนรุ่นไหน


จะดูยังไงว่าไอโฟนที่เราใช้อยู่นี้รุ่นอะไร? เป็น iPhone4 หรือ 4s? ถ้าไม่ใช่แฟนพันธุ์แท้จะรู้ไหมว่าต่างกันตรงที่ไอโฟน 4s มีขีดสีดำระหว่างปุ่มเพิ่มเสียงกับปุ่มปิดเสียง ซึ่ง ไอโฟน 4 ไม่มี
นี่คือรุ่นต่างๆของ iPhone ตั้งแต่เริ่มขายในปี 2007 จนถึงปี 2012
iPhone 5 (GSM model)2012A142816, 32, and 64 GB
iPhone 5 (GSM and CDMA models)2012A142916, 32, and 64 GB
iPhone 5 (CDMA China)2012A144216, 32, and 64 GB
iPhone 4S2011A138716, 32, and 64 GB
iPhone 4S (GSM China)2011A143116, 32, and 64 GB
iPhone 4 (CDMA model)2011A13498, 16 and 32 GB
iPhone 4 (GSM model)2010A13328, 16 and 32 GB
iPhone 3GS front and backiPhone 3GS (China)2009A13258, 16 and 32 GB
iPhone 3GS front and backiPhone 3GS2009A13038, 16 and 32 GB
iPhone 3G front and backiPhone 3G (China)2009A13248 and 16 GB
iPhone 3G front and backiPhone 3G2008A12418 and 16 GB
iPhone front and backiPhone2007A12034, 8, and 16 GB
* ข้อมูลล่าสุด ณ ปี 2012

คุณสามารถดูหมายเลข Model ได้ด้านหลังตัวเครื่อง ตัวเล็กๆ บรรทัดที่ 2

Tuesday, December 11, 2012

CSS font-face with embeded font

ปกติถ้าเราใช้ css คำสั่ง font-family หรือ font-face เครื่องที่เปิดต้องมีฟอนต์นั้นด้วยจึงจะเห็น แต่บางที่เราต้องการใช้ฟอนต์แปลกๆ ที่เครื่องคนอื่นไม่ค่อยมี

ตัวอย่างนี้เป็นการแสดงฟอนต์เป็นบาร์โค้ดโดยที่เครื่องที่เปิดไม่มีฟอนต์บาร์โค้ด

เขียน CSS ตามนี้

@font-face
{
font-family: barcodeFont;
src: url('code128.eot'); /* IE */
src: local('code128'), url('code128.ttf') format('truetype');
}

.barcode {
font-family:barcodeFont;
font-size: 28px
}

ไปหาไฟล์ code128.ttf มาก่อน แล้ว copy ไฟล์ฟอนต์ code128.ttf ไปไว้ในโฟลเดอร์เดียวกันกับไฟล์ css นี้ด้วย ทีนี้พอใช้
<span class="barcode">*1081009*</span>
ก็จะแสดงเป็นบาร์โค้ดที่ใช้เครื่องยิงบาร์โค้ดยิงได้


แต่สำหรับ IE มันยุ่งยากนิดนึงใช้ไฟล์ฟอนต์ .ttf ธรรมดามันไม่ได้ ต้องแปลงเป็น .eot ก่อน
ดาวน์โหลดโปรแกรม ttf2eot มาก่อนจาก http://code.google.com/p/ttf2eot/
ดาวน์โหลดตัวที่เป็น zip พอแตกออกมาก็เอาตัว ttf2eot.exe ไปไว้ในโฟลเดอร์เดียวกับฟอนต์ แล้วใช้ command prompt ใช้คำสั่ง

ttf2eot.exe code128.ttf code128.eot

แค่นี้ก็จะได้ไฟล์ code128.eot ออกมา

ถ้าสั่ง print แล้วมันไม่ออกเป็นบาร์โค้ด ก็ครอบ css ด้วย


@media screen,print
{
...
}

เวลาอัพโหลดขึ้นเซิร์ฟเวอร์ อย่าลืมอัพโหลดไฟล์ code128.ttf กับ code128.eot ไปด้วยล่ะ

Sunday, November 4, 2012

World Largest Bicycle

น่าจะเป็นจักรยานที่ใหญ่(ที่ปั่นไม่ได้)ที่สุดในโลก อยู่ที่บริษัทสยาม รี ยูส อ.บางน้ำเปรี้ยว จ.ฉะเชิงเทรา บริษัทนี้จำหน่ายจักรยานญี่ปุ่นและเสื้อผ้าญี่ปุ่นมือสอง

World Largest Bicycle

ราคาจักรยานก็เริ่มตั้งแต่ 2,500 - 3,000 บาทขึ้นไป มีทั้งจักรยานพับ เสือภูเขา ไฮบริด แม่บ้าน แต่ไม่มีเสือหมอบ

World Largest Bicycle

ส่วนเสื้อผ้าญี่ปุ่น ขายเป็นขีด เริ่มต้นขีดละ 25 บาท

Wednesday, September 19, 2012

SQL Server: check all tables disk space

Table ไหน ใช้พื้นที่เยอะสุด?

คำสั่ง SQL ในการดูว่าแต่ละ Table มีกี่รายการ และใช้เนื้อที่ดิสก์ไปเท่าไหร่

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"



Thursday, August 9, 2012

EXTJS: Continuous Grid Row Number


เวลาใช้ new Ext.grid.RowNumberer() ใน Grid พอข้อมูลเกิน 1 หน้า ขึ้นหน้าใหม่ เลขบรรทัดจะเริ่ม 1 ใหม่เสมอ วิธีแก้ก็เพิ่ม Code นี้เข้าไป แล้ว RowNumberer() ของคุณก็จะนับต่อเนื่องทุกหน้า

Ext.override(Ext.grid.RowNumberer, {
    renderer: function(v, p, record, rowIndex) {
        if (this.rowspan) {
            p.cellAttr = 'rowspan="' + this.rowspan + '"';
        }
        var st = record.store;
        if (st.lastOptions.params && st.lastOptions.params.start != undefined && st.lastOptions.params.limit != undefined) {
            var page = Math.floor(st.lastOptions.params.start / st.lastOptions.params.limit);
            var limit = st.lastOptions.params.limit;
            return limit * page + rowIndex + 1;
        } else {
            return rowIndex + 1;
        }
    }
});