Wednesday, October 30, 2024

เทคนิคถ่ายภาพกีฬา

1.Mode S หรือ Tv

แนะนำ ใช้โหมด Shutter Priority (S/Tv) หรือ Manual เพื่อควบคุม shutter speed เพราะเราต้องการจับความเร็ว 


2.Sutter Speed ที่ 1/500 ถึง 1/1000

ความเร็วชัตเตอร์ที่แนะนำคือ 1/500s ขึ้นไปสำหรับกีฬาที่มีความเร็วสูง เช่น ฟุตบอล รักบี้ หรือ 1/1000s สำหรับ การถ่ายกีฬา ที่เร็วมาก เช่น แข่งรถ


3.ISO 1600 ขึ้นไป          

ตั้งค่า ISO ให้สูงพอที่จะได้ shutter speed ที่เร็วขึ้น แต่จะแลกมากับการเกิด noise แต่กล้องสมัยใหม่มีความสามารถที่จัดการ noise ได้ดี บวกทั้งยังมีโปรแกรมจัดการ niose อีก  เราสามารถใช้ ISO 1600-6400 ได้อย่างนำไปใช้งานได้ และคุณภาพงานที่พอรับได้


4.Focus AI Servo/Continuous AF

จุดโฟกัสแนะนำ AI Servo/Continuous AF เพื่อติดตามวัตถุที่เคลื่อนไหว ตั้งค่าจุดโฟกัสเป็น single point หรือ zone AF แทน all points เพื่อความแม่นยำ


5.Continuous Shooting

ใช้โหมด burst/continuous shooting หรือถ่ายภาพต่อเนื่อง เพื่อถ่ายหลายภาพติดต่อกัน ช่วยเพิ่มโอกาสได้ภาพที่สมบูรณ์แบบ แต่ต้องระวังเรื่องความเร็วการเขียนข้อมูลของ memory card ของเราด้วยว่าจะเขียนได้ทันไหม

6.Lense Tele

เลนส์ telephoto ระยะยาว (70-200mm, 100-400mm)  เพื่อถ่ายจากระยะไกลได้คมชัด เลนส์ที่มี aperture กว้าง (f/2.8) จะช่วยให้ถ่ายในแสงน้อยได้ดี


Thursday, May 4, 2023

เปลี่ยนผ้าเบรค Triumph Bonneville T100 ราคาประหยัด

 ผ้าเบรคหลังของ T100 ใช้เบอร์เดียวกับ ผ้าเบรคหน้า Kawasaki KLX 140,KLX 150, KR150 หน้าซ้าย

เช่น

bendix general ct md9 ใน shopee ขาย 98 บาท!



Wednesday, July 13, 2022

By His Bootstraps - Robert Heinlein


ปี 1952 ตัวละครนักศึกษาหนุ่มนาม บ๊อบ วิลสัน ขังตัวเองในห้องพักของเขาเพื่อจะเขียนวิทยานิพนธ์ระดับปริญญาเอกให้เสร็จ วันส่งงานคือพรุ่งนี้  หัวข้อวิทยานิพนธ์เป็นเรื่องการเดินทางข้ามเวลา เขาตอกเครื่องพิมพ์ดีดนานต่อเนื่อง ชั่วขณะหนึ่งก้านพิมพ์ขัดกัน เขาพยายามแก้ไขมัน ทันใดนั้นก็มีเสียงใครคนหนึ่งพูดกับเขาว่า อย่าไปยุ่งกับเครื่องพิมพ์ดีดเลย ไม่ได้ความหรอก เขาสะดุ้งเฮือก ปรากฏใครคนหนึ่งในห้องของเขา เขาไม่รู้ว่าชายคนนี้โผล่มาได้อย่างไร เพราะห้องพักของเขาอยู่ที่ชั้นสาม ประตูกับหน้าต่างปิดสนิท

ใครคนนั้นบอกว่าเขาชื่อ โจ รูปร่างพอๆ กับเขา ข้างๆ โจเป็นทรงกลมประหลาดเส้นผ่าศูนย์กลางหกฟุตลอยอยู่เหนือพื้น โจชี้ไปที่ทรงกลม บอกว่าเขาเดินทางมาจากอนาคตโดยผ่านประตูเวลา (Time Gate) โจโน้มน้าวใจบ๊อบให้เดินทางไปในอนาคตหลายพันปีข้างหน้า บ๊อบไม่เชื่อ โจจึงสาธิตโดยการโยนหมวกเข้าไปในประตูเวลา มันหายวับไปเหมือนมายากล

บ๊อบ วิลสัน คิดหนักและลังเล ทันใดนั้นชายคนที่สามโผล่เข้ามาในห้อง หน้าตาคล้ายโจมาก ชายคนที่สามทะเลาะกับโจ ระหว่างถกเถียงและต่อสู้กัน บ๊อบถูกลูกหลงชกหลุดหายไปในประตูเวลา

บ๊อบ วิลสัน พบตัวเองในสถานที่แห่งหนึ่ง เป็นวังขนาดใหญ่ เขาพบชายคนหนึ่งผมขาว หนวดเคราขาว แนะนำตนเองว่าชื่อ ดิกเตอร์ (Diktor) ดิกเตอร์บอกบ๊อบว่าเขากำลังอยู่ในเวลาสามหมื่นปีในอนาคต มนุษย์ในยุคสามหมื่นปีหลังต่างจากยุคของ บ๊อบ วิลสัน มาก

บ๊อบ วิลสัน ต้องการกลับไปในเวลาของเขา แต่ดิกเตอร์บอกเขาว่าไม่ต้องรีบร้อน มีอนาคตที่ยิ่งใหญ่รอเขาอยู่ ดิกเตอร์เลี้ยงอาหารเช้าบ๊อบ มีสาวใช้คนหนึ่งบริการเขา หญิงสาวคนนั้นสวยงามบาดใจ บ๊อบชอบเธอมาก ดิกเตอร์จึงยกหญิงงามคนนั้นให้บ๊อบ บอกว่าคนในยุคนี้มีแต่คนงามทั้งนั้น

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

ดิกเตอร์ขอให้บ๊อบเดินทางกลับไปในเวลาเดิมของเขาผ่านประตูเวลา เพื่อนำใครคนหนึ่งกลับมา บ๊อบพบตัวเองอีกครั้งในห้องพักของเขา เห็นใครคนนั้นในห้องพัก กำลังพิมพ์วิทยานิพนธ์ เขารู้ทันทีว่าชายคนที่ดิกเตอร์ต้องการให้พากลับไปอนาคตก็คือตัวเขาเอง! ตัวเขาที่กำลังพิมพ์วิทยานิพนธ์ถามว่าเขาเป็นใคร บ๊อบอึกอัก แล้วตอบว่าเขาชื่อ โจ เพื่อไม่ให้สับสนกับตัวตนจริงของเขา เขาต้องการให้บ๊อบหมายเลข 1 เข้าไปในประตูเวลา แต่ทันใดชายอีกคนหนึ่งก็โผล่เข้ามา ชายคนนั้นหน้าตาเหมือนเขา ก็คือบ๊อบหมายเลข 3 เขาถกเถียงกับบ๊อบหมายเลข 3 แล้วบ๊อบหมายเลข 1 ก็หลุดหายไปในเวลา

หลังจากนั้น บ๊อบ วิลสัน เข้าไปในประตูเวลาอีกครั้ง เดินทางกลับไปในอนาคต เขาพบดิกเตอร์อีกครั้ง ดิกเตอร์ขอให้เขากลับไปยังศตวรรษที่ 20 ในปี 1952 เพื่อไปซื้อข้าวของตามรายการที่ให้มาแล้วนำมันกลับมายังอนาคต เขาจึงกลับไปยังอดีตอีกครั้ง

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

เขาพบของบางอย่างในส่วนควบคุมประตูเวลา เป็นสมุดบันทึกพจนานุกรมภาษาทาสในอนาคตกับภาษาอังกฤษ ซึ่งเชื่อว่าเป็นผลงานของดิกเตอร์

ด้วยข้าวของที่เตรียมมาและพจนานุกรม บ๊อบ วิลสัน ก็กลายเป็นใหญ่ในโลกอนาคต เขาสั่งคนของเขาให้เฝ้าระวังการปรากฏตัวของดิกเตอร์ แต่ไม่พบร่องรอยของชายหนวดเคราขาว

เวลาผ่านไป อายุของ บ๊อบ วิลสัน มากขึ้น สถานะราชาของเขามั่นคง กระนั้นเขาก็ยังหวาดระแวงว่าดิกเตอร์จะหวนกลับมาแย่งตำแหน่งของเขาคืนไป

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

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

--

ตีพิมพ์ครั้งแรกเมื่อตุลาคม 1941

Tuesday, June 14, 2022

ทำรูป HDR ด้วย Lightroom เบื้องต้น

- Highlights -100
- Shadows +100
- Whites กับ Blacks พอประมาณ
- Clarity 60 ขึ้นไป
- Detail -> Noise Reduction 40
- Adjustment Brush -> Clarity 100 ป้ายส่วนที่จะให้เด่น
รูป HDR ด้วย Lightroom เบื้องต้น


 

Tuesday, May 17, 2022

All You Zombies - Robert Heinlein

ในปี 1970 ที่บาร์แห่งหนึ่ง ชายหนุ่มขี้เมาคนหนึ่งเล่าเรื่องของเขาให้บาร์เทนเดอร์ฟัง เขาบอกว่าเขามีอาชีพเขียนเรื่องเกี่ยวกับผู้หญิงลงนิตยสาร เขารู้เรื่องผู้หญิงดีเพราะเขาเคยเป็นผู้หญิงมาก่อน!

เขาเกิดในปี 1945 เป็นทารกที่ถูกทิ้งไว้หน้าสถานเลี้ยงเด็กกำพร้า ใช้ชื่อว่า เจน

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

บาร์เทนเดอร์เสนอตัวช่วยเจนแก้แค้นชายที่ทอดทิ้งเขา(เธอ)  เจนตกลง ทั้งคู่จึงเข้าเครื่องเดินทางข้ามเวลาซึ่งตั้งอยู่หลังร้าน บาร์เทนเดอร์ส่ง ‘เจน’ ไปในปี 1963 เจนในสภาพผู้ชายพบหญิงสาวคนหนึ่ง และทำให้เธอคนนั้นตั้งท้อง

บาร์เทนเดอร์เดินทางต่อไปอีกเก้าเดือน ลักพาตัวทารกหญิงนั้นจากโรงพยาบาล และส่งทารกหญิงไว้ที่สถานเลี้ยงเด็กกำพร้าที่คลีฟแลนด์ในปี 1945 หลังจากนั้นบาร์เทนเดอร์ก็เดินทางกลับมาในปี 1963 รับตัวเจนในสภาพผู้ชายไป แล้วพาเจน (ผู้ชาย) ไปในปี 1985 เพื่อเข้าทำงานที่หน่วยงานเกี่ยวกับการเดินทางข้ามเวลา เมื่อนั้นบาร์เทนเดอร์ก็หวนกลับมาที่บาร์ในปี 1970 ไม่กี่นาทีหลังจากเขาหายไปหลังร้าน 

หลังจากบาร์ปิด บาร์เทนเดอร์ก็เดินทางกลับเวลาจริงของเขา คือ 1993 เขาก็คือเจนคนที่ไปทำงานที่หน่วยเดินทางข้ามเวลา เขาลูบรอยแผลเป็นของเขาที่เกิดจากการผ่าตัดทำคลอดเมื่อครั้งที่เขาเป็นหญิงสาวนาม เจน

--

เรื่องนี้ถูกนำไปสร้างเป็นหนังชื่อ Predestination

Wednesday, April 13, 2022

หา Field Name เพื่อแก้ข้อมูลใน Outlook Properties (Update 2022)

เมื่อคลิกขวา -> Open Outlook Properties บนชื่อของคนที่ส่งอีเมลมาหาคุณใน Outlook จะสามารถดูข้อมูลของคนนั้นได้(เท่าที่เขากรอกมานะ) เราสามารถแก้ไขข้อมุลเหล่านี้ โดยยิง api ไปแก้ใน AD โดยระบุชื่อฟิลด์ให้ถูก ว่า Filed Name อะไร จะส่งค่าอะไรไปอัพเดท ตาม ADUserId ของคนนั้น แน่นอนว่าต้องมีรหัสที่มีสิทธิ์แก้ข้อมูลของ AD ของ Domain นั้นได้ จึงจะยิงได้


ชื่อที่แสดงAD Field Name
FirstgivenName
Initialsinitials
Lastsn
รูปภาพthumbnailPhoto
DisplaydisplayName
AliasmailNickname
AddressstreetAddress
Cityl (L ตัวเล็ก)
Statest
Zip CodepostalCode
Country/Regionsc
Titletitle
Companycompany
Departmentdepartment
OfficephysicalDeliveryOfficeName
Assistantassistant
PhonetelephoneNumber

Thursday, March 17, 2022

Triumph T100 ใส่แบตเตอรี่ RR รุ่น YT12-JS (12V 12Ah)

 Triumph T100 ใส่แบตเตอรี่ RR รุ่น YT12-JS (12V 12Ah) ได้พอดีเลยครับ ขนาดเท่ากันเป๊ะ

ของเดิมติดรถเป็น Yuasa YTX12-TX ราคาประมาณ 2,5xx แต่ของ RR ราคาประมาณแค่พันเดียวเท่านั้น เห็นเขาใช้กันเลยลองซื้อมาใช้บ้าง หาซื้อได้ตาม Lazada, Shopee ทั่วไป


Wednesday, February 23, 2022

DBCC SHRINKFILE แล้วเจอ Error Could not locate file

เมื่อ Log File ใน MS SQL Server ใหญ่เกิน เราก็ต้อง Shrink Log

ถ้าใช้คำสั่ง

DBCC SHRINKFILE(SomeDB_log, 1)

แล้วเจอ Error


 Msg 8985, Level 16, State 1, Line 1

Could not locate file 'SomeDB_log2' for database 'SomeDB' in sys.database_files. The file either does not exist, or was dropped.

Completion time: 2022-02-24T09:31:56.6528604+07:00


แสดงว่าชื่อ log SomeDB_log ผิด ต้องใช้ชื่อในช่อง Logical Name ไม่ใช่ชื่อไฟล์ log จริงๆ

คลิกขวาตรง Database ->Properties -> Files ดูชื่อในช่อง Logical Name ที่ File Type เป็น LOG


กลายเป็น

DBCC SHRINKFILE(SomeLogicalName_log, 1)

ก็จะ shrink log ลงได้

Friday, January 7, 2022

MongoDB log ใหญ่เกินไป ทำไง?

ใช้ putty ssh เข้าไปที่ server ที่ลง mongodb ไว้ ถ้าจำไม่ได้ว่า path ของ mongoDB อยู่ไหน ก็ลองใช้คำสั่ง

$ grep -i dbPath /etc/mongod.conf

ถ้าอยากรู้ว่า log file อยู่ไหน ก็เปลี่ยนเป็น

$ grep -i log /etc/mongod.conf

ปกติก็จะอยู่ที่ /var/log/mongodb/


ถ้าเจอว่ามีไฟล์เดียว mongodb.log ขนากหลาย GB แสดงว่าไม่ได้ทำ auto rotate ไว้ ก็เริ่มทำ rotate manual ได้เลย

1.พิมพ์ mongo เพื่อเข้าใช้งาน shell ของ mongodb

2.พิมพ์ use admin เพื่อใช้ database ที่ชื่อ admin

3.พิมพ์ db.adminCommand( { logRotate : 1 } )

เพื่อให้ mongod.log ไฟล์เดิมที่ใหญ่เกินเปลี่ยนชื่อเป็น mongod.log.2018-09-14T11-29-54

แล้วมันจะสร้าง mongod.log ไฟล์ใหม่ว่างๆ เพื่อเขียน log ให้

4.พิมพ์ exit ออกจาก mongodb


มันมีวิธีการตั้งให้ rotate log แบบ auto รายวันด้วย เดี๋ยวมาเขียนต่อ


คำสั่ง basic อื่นๆที่จำเป็น

$ df -h                                    เอาไว้ check disk space

$ free -m                                ดูว่าใช้ RAM ไปเท่าไหร่

Friday, December 10, 2021

Convert UNIX epoch timestamp (bigint) to DateTime in SQL Server

ปกติ Timestamp จะใช้ format 2022-01-11T03:28:38Z

แต่ Unix timestamp จะเป็นตัวเลขหมดเลย เช่น 1641751802

แต่สิ่งที่เราอยากได้คือ DateTime แบบ yyyy-mm-dd hh:ii:ss.000

ก็ใช้คำสั่ง DateAdd

Select 
    dateadd(S, [unixtime], '1970-01-01')
From [Table]

เช่น Select dateadd(S, 1641751802, '1970-01-01') จะได้ 2022-01-09 18:10:02.000

ถ้าจะ convert กลับ จาก DateTime ให้กลายเป็น Unix time ก็ใช้คำส่ง DateDiff

Select DATEDIFF(SECOND,'1970-01-01',GETDATE())


Monday, November 15, 2021

วิธีการ Renew แล้วใช้ Command Update Cert SSL/HTTPS บน Linux

Cert https หมดอายุ เว็บขึ้น Not secured เข้าไม่ได้ ทำไง?

ปวดหัวทีเดียวเมื่อมาเจอ Server จอดำๆใช้แต่ command แบบ linux ปกติใช้แต่ Windows -_-'

ก็ไปต่ออายุ SSL Certificate มาเสียก่อน ก็จะได้ไฟล์ cert ที่หลักๆต้องมี 2 ไฟล์คือ publiccert.pem กับ privatekey.pem

1. หา username/password ของ root มาให้ได้ก่อน

2. ใช้ putty connect ไปที่ ip เครื่องนั้น

3. พิมพ์คำสั่งเพื่อหาว่าไฟล์ cert ที่เราต้องไปอัพเดทอยู่ที่ไหน

grep -i -r "SSLCertificateFile" /etc/httpd/

ปกติก็จะอยู่ที่ /etc/httpd/ssl/public.crt ซึ่งมันต้องใช้คู่กับไฟล์ private.key

4. ใช้ FileZilla เปิด sftp เข้าเครื่องนั้น ปกติเราใช้รหัส root จะเข้าได้ทุก folder ก็เข้าไปที่ /etc/httpd/ssl
ลากไฟล์ publiccert.pem จากเครื่อง Windows ของเรา เข้าไปเครื่อง Linux แล้ว rename เป็น public.crt
ลากไฟล์ privatekey.pem จากเครื่อ Windows ของเรา เข้าไปเครื่อง Linux แล้ว rename เป็น private.key

ถ้ามีไฟล์เดิมชื่อนี้อยู่ อย่าลืม backup ไว้

5.Run คำสั่งเช็กดูว่าไฟล์ถูกต้องหรือไม่

apachectl configtest

ถ้าขึ้นว่า Syntax OK ก็ใช้ได้ ถ้าขึ้นอย่างอื่น แสดงว่าไฟล์ cert ที่เราเอามา มันไม่ใช่ หามาใหม่ 

6.Restart apache เลย

apachectl stop
apachectl start

มันควรจะไม่มี error อะไร แล้วลองเปิดเว็บใหม่ดู ก็จะเปิดได้ ^^

ถ้าเข้าไม่ได้อยู่เหมือนเดิม แสดงว่าเราเอาไปวางผิดโฟลเดอร์ ลองพิมพ์คำสั่งในข้อ 3 ใหม่ แล้วเข้าไปดูโฟลเดอร์อื่น คือถ้าเว็บมี subdomain เยอะๆ มันอาจจะมี ssl cert อยู่หลายที่ หาให้เจอว่าเว็บที่เราเปิดอยู่โฟลเดอร์ไหนกันแน่


Sunday, October 17, 2021

การตัดข้อ ปักชำ ออมชมพู Syngonium Pink Spot

ถ้า Pink Splash จะเป็นเงินไหลมา ส่วน Pink Spot คือออมชมพู 😁 มี Milk Confetti อีกต้นที่คล้ายๆกัน แต่นั่นใบใหม่จะเป็นสีเขียวพาสเทลมาเลยแล้วมีจุดชมพู ส่วนออมชมพูใบใหม่จะชมพูมาก่อน ตระกูล Syngonium มันคล้ายกันมาก

1.เลือกต้นที่แก่พอยาวพอที่จะตัด

2.ตัดเลยจ้า อยากได้เยอะก็ 1 ข้อ 1 ใบ อยากได้โตไวก็ 2 ข้อก็ดี ใช้มีดคมๆ ตัดตรงกลางก้านเขียวๆระหว่างข้อ 2 ข้อ แบบชึ้บเดียวขาด อันนี้เราตัดแบ่งออกมา 3 ต้น รอยตัดทาปูนแดงแล้วปล่อยไว้ให้แห้ง ทาต้นแม่ด้วย

3.วัสดุที่ใช้ปลูก ก็เหมือนเดิม กาบมะพร้าวสับแช่น้ำ 1 คืน เทน้ำทิ้ง เขาบอกว่าสารสีน้ำตาลในกาบมะพร้าวมันทำให้ต้นไม่ไม่ค่อยโต เอามาผสมเพอไลท์เม็ดสีขาวๆ โรยด้วยปุ๋ยละลายช้า ออสโมโคท


4.เมื่อปูนแดงแห้ง ก็ปักลง กลบๆให้มิดราก ไม่ต้องกดแน่นมาก เดี๋ยวรากช้ำ

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

3 สัปดาห์ ต่อมา ...

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



Sunday, September 12, 2021

การขยายพันธุ์ยางอินเดียด่าง

 จริงๆจะด่างไม่ด่างก็ใช้วิธีเดียวกัน 😁 

1.เริ่มด้วยหาต้นเหยื่อสักต้น อาจจะเป็นต้นที่เราซื้อมา 250 แล้วขยายกระถางให้ใหญ่ หรือปลูกลงดิน สัก 3-4 เดือน ต้นมันจะโตขึ้นเยอะ ก็ตัดยอดมาเลย ให้ติดสัก 6-7 ใบ

2.เอามาตัดข้อละใบ ตัดกลางๆข้อ อย่าให้ติดใบเกิน ได้ 6 ข้อ ก็คือต้นใหม่ 6 ต้น

3.ผสมน้ำเปล่า(น้ำประปาธรรมดาๆนี่แหละ) กับน้ำยาเร่งราก B-1 (หาซื้อได้ตามร้านต้นไม้ทั่วไปหรือ shopee) อัตราส่วนประมาณ น้ำขวด 1.5 ลิตร ใช้น้ำยาเร่งราก 1 ฝา

4.หาแก้วกาแฟที่เรากินแล้วทิ้ง ล้างให้สะอาด ใส่น้ำที่ผสมแล้ว ใส่กิ่ง 1 ข้อ 1 ใบของเราลงไป เทน้ำให้ท่วมกิ่งพอดี อย่าเยอะเกิน

5.รอ 1 เดือน รากจะงอก บางกิ่นรากยาว บางกิ่งรากสั้นจะแช่น้ำต่อรอรากมันยาวก็ได้

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

ส่วนต้นแม่มันก็แตกกิ่งใหม่ตั้งแต่ 2 สัปดาห์ที่แล้ว


#ยางอินเดีย

Thursday, August 12, 2021

การขยายพันธุ์มอนสเตอร่า

 ช่วงนี้เขาฮิตไม้ใบเราก็เล่นกับเขาด้วย แต่ของเราไม่ด่าง ราคาเลยถูกกว่าเขาหลายพันเท่า 😁 แต่ถึงไม่ด่างใบมันก็สวยนะ


1.หาต้นแม่พันธุ์ อาจจะเป็นต้นที่เราซื้อมา 80 บาท จากร้านสวนป้าอินทร์ คลอง 15 แล้วมาปลูกลงดินไว้ มันแตกใบใหม่เดือนละใบจนต้นยาวแล้ว ก็ใช้มีดคมๆตัดมา ให้เหลือติดต้นไว้อย่างน้อย 4 ใบ มันแข็งนะ ตอนตัดออกแรงหน่อย


2.ตัดข้อละ 1 ใบ 1 ราก ปกติตรงข้ามใบจะมี 1 ราก ก็ตัดกลางๆข้อ อย่าให้ชิดใบมาก เพราะตามันจะอยู่ใกล้ๆใบ เอาปูนแดง(หาซื้อจาก shopee)ทารอยตัดทั้งบนและล่างด้วย รอให้ปูนแห้งสักแป๊บ


3.ผสมวัสดุปลูก ใช้กาบมะพร้าวสับ (แช่น้ำทิ้งไว้ 1 คืน แต่ถ้ารีบ แช่สัก 30 นาทีก็ได้) ผสมกับเพอร์ไลท์(เม็ดสีขาวๆ หาซื้อได้ทาง shopee)คลุกเค้าให้เข้ากัน

4.ใส่วัสดุปลูกสักครึ่งกระถาง ใส่กิ่งที่เราตัดลงไป ม้วนรากมันรอบๆกระถางให้ดีๆ อย่าให้หัก เอาวัสดุปลูกกลบให้มิด รดน้ำให้ชุ่ม

5.เอาไปอบ โดยการเอากระถางใส่ถุงพลาสติกใสใบใหญ่ๆ ใส่ถุงละหลายๆต้นได้ มัดปากถุงให้สนิทไม่ให้อากาศเข้าออก ไม่ต้องกลัว มันไม่ตาย แล้วตั้งทิ้งไว้ในที่ร่มแต่สว่าง ประมาณ 20-30 วัน 

6.ระหว่างรอ แน่นอนเราต้องเดินมาดูเกือบทุกวันเพื่อลุ้น ก็จะเจอไอน้ำเกาะที่ถุงเพียบ ใบมันยังเขียวอยู่


7.ครบ 20 วันก็เอาออกจากถุงได้ หรือจะรอเพื่อความชัวร์ก็ให้เห็นว่าตาใหม่มันงอกแล้วค่อยเอาออกจากถุง 


ก็เป็นอันเสร็จพิธี ทีนี้ก็รอตาใหม่ที่งอกแตกออกเป็นใบ ใบแรกๆจะเป็นใบเล็กไม่มีรู ใบต่อๆมามันจะใหญ่ขึ้นและมีรูเอง


#monstera #มอนสเตอร่า

Thursday, July 15, 2021

SQL to count rows of all tables in database

Table ไหน มีข้อมูลเยอะที่สุด? (มีจำนวน row เยอะที่สุด) มันเก็บอยู่ใน sysindexes ใช้คำสั่งต่อไปนี้


SELECT o.NAME, i.rowcnt 

FROM sysindexes AS i

  INNER JOIN sysobjects AS o ON i.id = o.id 

WHERE i.indid < 2  AND OBJECTPROPERTY(o.id, 'IsMSShipped') = 0

ORDER BY o.NAME



Friday, November 20, 2020

สูตรผสมปูน

 ก่ออิฐ

ปูน 1 + ทราย 3 + น้ำ 1


ฉาบ (ครั้งแรก)

ปูน 1 + ทราย 2.5 + น้ำ 1


ฉาบ (ครั้งที่ 2)

ปูน 1 + ทราย 3 + น้ำ 1


เทคอนกรีต

ปูน 1 + ทราย 2 + หิน 4 + น้ำ 0.5




Thursday, October 29, 2020

ฝึกเขียน web ด้วย python ใช้ django กับ database sqlite

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

1.หน้าลงทะเบียน - ก็ต้องทำฟอร์ม submit ข้อมูล insert เข้า db sqlite

2.หน้าเช็คว่าเคยมี ID นี้หรือยัง - มีฟอร์มให้กรอก ID แล้วไป search ใน sqlite ถ้าเจอข้อมูลก็แสดงออกมา


ก่อนเริ่มเขียน

1.ลง python ในนี้ใช้ python 2.7 เพราะผมเรียนคอร์สเก่าที่สอนมาหลายปีแล้ว ผมลงไว้ใน C:\python27

2.ลง python เสร็จ จะ run pip ได้ ก็ run คำสั่งนี้ต่อ: pip install virtualenvwrapper

3.ลง django ผมลงไว้ใน C:\Python27\Django-1.8.19 จะได้หาง่าย

4.ลง sqlite เลือก sqlite-tools-win32-x86-3330000.zip ผมลงไว้ที่ C:\sqlite มีไฟล์ exe อยู่ 3 ไฟล์เอง

5.ลง PyCharm เลือกตัว Community ใช้ฟรี เป็น studio ช่วยให้เขียน python มีสีสันขึ้น

ผมเขียนบน Windows ไม่จำเป็นต้องใช้ Mac หรือ Ubuntu

หน้าตา pycharm

ลงมือเขียน

เริ่มสร้าง app ด้วยทำสั่ง

C:\Python27\Django-1.8.19\med\>py manage.py startapp client

client คือชื่อ app ที่ผมตั้ง (จริงๆควรใช้ชื่อ patient แต่ตั้งไปแล้วก็แล้วกันไป^^)

settings.py

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'client', # เพิ่มชื่อ app เราตรงนี้
)

ข้อความหลัง # ข้อความ คือ comment ตัดออกได้

โจทย์บอกให้หน้า home อยู่ที่ http://domainเรา/commoninfo ก็ต้องไปแก้ไฟล์ urls.py ดังนี้

หน้า register อยู่ที่ http://domainเรา/commoninfo/add

หน้า search อยู่ที่ http://domainเรา/commoninfo/fetch

urls.py

from django.conf.urls import patterns, include, url
from client import views #อันนี้ import เพิ่ม
from django.contrib import admin

urlpatterns = [
url(
r'^$/', 'client.views.index', name='index'), #ถ้าไม่ import views ด้านบน เขียนแบบนี้
url(r'^commoninfo/$', views.index, name='home'), #ถ้า import views แล้ว เขียนแบบนี้
url(r'^commoninfo/fetch/$', views.fetch, name='fetch'),
url(r'^commoninfo/add/$', views.add, name='add'),
url(r'^admin/', include(admin.site.urls)),
]

พอเปิด http://domainเรา/commoninfo มันจะไปหาไฟล์ index ก็ต้องไปเพิ่มใน views.py ว่าหน้า index จะแสดงอะไร

views.py

from django.shortcuts import render
from client.models import UserInfo
# ตรงนี้ import เพิ่ม เพื่อให้รู้จัก object UserInfo
from django.utils import timezone
# import เพิ่ม เพื่อให้ใช้ฟังก์ชั่นเกี่ยวกับเวลาได้

def index(request):
context = {
'patient_num': len(UserInfo.objects.all())
# ส่งตัวแปร patient_num = จำนวนคนไข้ทั้งหมดที่มี
}
return render(request, 'index.html', context)

หน้า index ไม่มีอะไร แค่ให้เปิดไฟล์ index.html แต่พิเศษตรงมีการส่งตัวแปรผ่าน context ด้วย

ภายใน context ก็ประกอบด้วย 'ชื่อตัวแปร' : ค่าที่จะส่ง ถ้ามีหลายตัวก็ใส่ comma คั่น

แล้วต้องไปสร้างไฟล์ index.html ต่อ

views.py (ต่อ)

def add(request):
if request.POST:
username = request.POST.get('username', '')
email = request.POST.get('email', '')
password = request.POST.get('password', '')
firstName = request.POST.get('firstName', '')
lastName = request.POST.get('lastName', '')
uniqueID = request.POST.get('uniqueID', '')
dateOfBirth = request.POST.get('dateOfBirth', '')
if uniqueID != "":
UserInfo(username=username, email=email, password=password,
firstName=firstName, lastName=lastName, uniqueID=uniqueID,
dateOfBirth=dateOfBirth).save()
result = 'successfully added!!'
else:
result = ''
context = {'today': timezone.now().strftime('%Y-%m-%dT%H:%M:%S'), 'result': result}
return render(request, 'add.html', context)

1 def คือ 1 หน้า หน้านี้คือเปิดมาจาก http://domainเรา/commoninfo/add แล้วต้องทำอะไรบ้าง

เริ่มต้นเป็นการเช็กค่าว่ามีการโพสต์มาไหม แล้วก็รับค่าที่โพสต์ เอาไป insert ลง db แค่ใช้ UserInfo(ชื่อฟิลด์=ค่า).save() แค่นี้เสร็จ

ส่งผลลัพธ์คือ result เข้าไปใน context แล้วส่ง context ไปให้ไฟล์ add.html

ส่วน today ส่งไปเล่นๆ เอาไว้ให้ตั้ง default ให้ฟิลด์วันที่ในหน้าฟอร์มลงทะเบียน

ต้องไปสร้างไฟล์ add.html ต่อ

views.py (ต่อ)

def fetch(request):
uniqueID = request.POST.get('uniqueID', '')
# รับค่า uniqueID ที่กรอกมาจากฟอร์ม
if request.POST: # เช็คว่ามีการโฟสต์มาหรือเปล่า
result = UserInfo.objects.filter(
uniqueID=uniqueID) # filter คือการ where ใน db
else:
result =
'[]'
if len(result) > 0: # เช็คว่ามีผลลัพธ์ไหม ตรงนี้ผมเขียนมั่วๆเอา น่าจะมีวิธีที่ดีกว่านี้
user = result[
0]
else:
user =
'[]'
context = {'user': user, 'uniqueID': uniqueID} # return ข้อมุล user และ uniqueID
return render(request, 'fetch.html', context)

นี่คือหน้า search หลังจากเปิด http://domainเรา/commoninfo/fetch ก็จะไปเปิดไฟล์ fetch.html โดยส่ง context ไปเหมือนกัน

ต้องไปสร้างไฟล์ fetch.html ต่อ

models.py

from django.db import models

class UserInfo(models.Model):
username = models.CharField(max_length=100)
email = models.CharField(max_length=200)
password = models.CharField(max_length=100)
firstName = models.CharField(max_length=100)
lastName = models.CharField(max_length=100)
uniqueID = models.CharField(max_length=100)
dateOfBirth = models.DateTimeField(max_length=100)

ไฟล์นี้เป็นตัวบอก sqlite ว่าให้สร้าง table ชื่อ UserInfo โดยมีฟิลด์ดังต่อไปนี้

คำสั่งให้สร้าง db คือ

C:\Python27\Django-1.8.19\med\>py manage.py makemigrations

คำสั่งให้ run web server เพื่อให้เราเปิดเว็บได้คือ

C:\Python27\Django-1.8.19\med\>py manage.py runserver


index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>AB Hospital</title>
</head>
<body>
<p />
Number of patients: {{ patient_num }}
<!- เอาตัวแปร patient_num จาก context มาแสดง -->
<p />

<a href="/commoninfo">Home</a> |
<a href="/commoninfo/add">Register</a> |
<a href="/commoninfo/fetch">Check</a>

</body>
</html>

หน้าแรกไม่มีอะไร ใส่แค่ลิ้งค์ กับเอาจำนวน record ใน db มาโชว์

add.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
{{ result }}
<form method="post" action=".">
{% csrf_token %}
Username: <input type="text" name="username" /><br/>
Email: <input type="text" name="email" /><br/>
Password: <input type="text" name="password" /><br/>
Re-type: <input type="text" name="retype" /><br/>
First name: <input type="text" name="firstName" /><br/>
Last name: <input type="text" name="lastName" /><br/>
Unique ID: <input type="text" name="uniqueID" /><br/>
Date of Birth: <input type="text" name="dateOfBirth" value="{{ today }}" /><br/>

<input type="submit" value="REGISTER" />

</form>

<p />

<a href="/commoninfo">Home</a> |
<a href="/commoninfo/add">Register</a> |
<a href="/commoninfo/fetch">Check</a>

</body>
</html>

เป็นหน้าฟอร์มลงทะเบียน มีรับค่า today จาก context มาเป็นค่า default ในช่อง Date Of Birth ด้วย

fetch.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Check</title>
</head>
<body>

<form method="post" action=".">
{% csrf_token %}

UniqueID: <input type="text" name="uniqueID" /><br />

{% if user.uniqueID %}
<h1>User Info</h1>
User's Name: {{ user.firstName }} {{ user.lastName }} <br />
Unique ID: {{ user.uniqueID }}<br />
Dob: {{ user.dateOfBirth }}<br />
{% endif %}

<input type="submit" value="SUBMIT" />
</form>
<p />

<a href="/commoninfo">Home</a> |
<a href="/commoninfo/add">Register</a> |
<a href="/commoninfo/fetch">Check</a>

</body>
</html>

หน้า search มีช่องกรอกค่า Unique ID เพื่อ search 

ตรง action="." คือกดโพสต์แล้วมาหน้าตัวเอง

หลังจากไป search ใน db ตามคำสั่งใน views.py แล้ว ก็มีการเช็ก if ค่ามีค่า user.uniqueID มาหรือเปล่า คือถ้า search เจอ ให้แสดงข้อความที่อยู่ในช่วง

{% if xxx %} กับ {% endif %}

จบข่าว!

ถ้าติดปัญหาอะไร ให้ search google ไม่ต้องถามผม เพราะผมก็เพิ่งหัดเหมือนกัน ^^

Tuesday, October 29, 2019

ถ่ายรูปรถกำลังวิ่งด้วยการแพนกล้อง

 เทคนิคถ่ายรูปรถกำลังวิ่งด้วยการแพนกล้องตามรถ แล้วรูปจะออกมาเหมือนรถวิ่งเร็วมาก รูปรถจะชัด ฉากหลังจะเบลอแบบ motion blur ทำได้ง่ายมาก

1. ใช้ mode S (Nikon) หรือ Tv (Canon) ให้กล้องปรับรูรับแสงหรือค่า f อัตโนมัติ

2.ตั้งค่า S คือ Shutter Speed ให้ช้าๆ ถ้ามือไม่นิ่งเท่าไหร่ใช้ 1/40 ถ้ามือนิ่งหรือมีขาตั้งขาเดียวช่วย ใช้ 1/8 วินาทีไปเลย

3. ตั้ง ISO 100

ทีนี้ก็เล็งไปที่รถหรือเรือหรืออะไรก็ตามที่กำลังเคลื่อนที่ กดโฟกัส แล้วหมุนกล้องตามที่วัตถุกำลังวิ่ง แล้วแชะ! 

รูปก็จะออกมาประมาณนี้





Mode ของกล้อง Canon และ Nikon



Tuesday, January 16, 2018

ตารางเอามอเตอร์ไซค์ไปเช็ค Honda CB500X

ทีละ 6,000 กม. เริ่มตั้งแต่ 1,000 - 6,000 - 12,000 - 18,000 - 24,000 - 30,000 - 36,000 - 42,000 - ... - 96,000 กม. แล้วหลังจากนั้นรถคงพังพอดี^^