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 กม. แล้วหลังจากนั้นรถคงพังพอดี^^