ไม่เคยเขียนโปรแกรมมาก่อนควรเริ่มต้นอย่างไร

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

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

โปรแกรมส่วนใหญ่ที่เราใช้งานอยู่ทุกวันนี้ไม่ว่าจะเป็น Facebook, Twitter, Instagram, YouTube มันก็มาจากหลักง่ายๆพวกนี้ทั้งสิ้น ดังนั้นถ้าเกิดเราอยากรู้ว่าโปรแกรมนั้นสร้างอย่างไร เราต้องคิดขั้นตอนต่างๆให้ออกมาชัดเจน คิมพิวเตอร์นั้นเปรียบเหมือนเด็กอายุประมาณ 3 ขวบที่ไม่สามารถคิดหรือทำอะไรด้วยตัวเองได้ แต่คอมพิวเตอร์สามารถคำนวณได้เก่งมากๆ หมายความว่าสามารถคำนวณตัวเลขได้เป็นล้านครั้งใน 1 วินาที

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

จะเขียนโปรแกรมคอมพิวเตอร์ เราต้องรู้ว่าต้องเริ่มจากอะไรดี เล่น goldenslot โดยที่สามารถเริ่มจากภาษาอะไรก็ได้เพราะภาษาของคอมพิวเตอร์ก็เปรียบได้เหมือนเครื่องมืออันหนึ่งเท่านั้น แต่ถ้าจะให้ยกตัวอย่าง ถ้าคุณอยากพัฒนาโรแกรมคอมพิวเตอร์แบบปกติ ขอแนะนำให้ใช้ภาษา C, C# หรือ Java แต่ถ้าเกิดต้องการเขียนแอพลิเคชั่นบน Android ถ้าใช้ Java จะดีที่สุด หรือถ้าต้องการพัฒนาเว็บไซต์ แนะนำให้ใช้ HTML, PHP หรือ JavaScript

Posted in ไม่มีหมวดหมู่ | Leave a comment

nginx 502 bad gateway cause by setcookie

just add this nginx config

server {
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 32k
...
}
Posted in knowledge | Leave a comment

jwt จะโดน hack ได้อย่างไรบ้าง

jwt จะโดน hack ได้อย่างไรบ้าง
1. SDK library โดน hack ไปแก้โค้ด ส่งไปหา hacker ขโมย jwt จำนวนมาก
2. Private key โดน hack ไปสร้าง token ปลอมขึ้นมาเอง แต่เขาจะต้องรู้ subject (key) เพื่อเอามาเรียก api ที่ access resource จาก server ถ้าเขารู้
3. Third-party ไม่ยอมใช้ SDK library และไม่ยอม verify signature ของ jwt และเขียนเก็บ store ลง storage อาจโดนขโมย jwt จำนวนมากได้
4. “Man in the middle ดักฟัง network traffic ระหว่าง client กับ server ทุกครั้งที่ส่งข้อมูลระหว่างกันจะต้องผ่าน HTTPS เท่านั้น

# hack ตัวเองไม่นับ (รู้แค่ของตัวเอง เครื่องๆนึง ไม่ใช่จำนวนมาก) เหมือนแกะ cookie session ตัวเอง แก้ไขด้วยการกำหนด expire ของ token => https://stackoverflow.com/a/35817603/2090568

ประโยชน์ jwt
1. client จะ trust เฉพาะ issue ที่ verify digital signature ผ่าน โดยที่ไม่ต้องเรียกไป server
2. performance รวดเร็ว และ ลดโหลด server stateless

Posted in json web token (jwt), ไม่มีหมวดหมู่ | Leave a comment

BigQuery interval date Legacy SQL to Standard SQL

อ้างอิงจาก BigQuery Partitioned Tables Limitations section

“You cannot use legacy SQL to query partitioned tables or to write query results to partitioned tables.”

ดังนั้น เมื่อเราทำ Partition Table เพื่อ Performance และลด Cost ในการ query เราจึงต้องแก้ไข query จาก Legacy SQL ให้เป็น Standard SQL

ตัวอย่าง แก้ไขการ Compare Datetime

Legacy SQL

select REQUEST_DATETIME from TABLE where REQUEST_DATETIME >= TIMESTAMP(DATE_ADD("2018-04-27 10:48:34",-7,"HOUR"))

Standard SQL
1. แก้ไข TABLE เป็น `TABLE`
2. เพิ่ม #standardSQL ที่บรรทัดแรกเพื่อบอกว่า query ข้างล่างจะเป็นแบบ Standard SQL
3. ใช้ DATETIME_ADD function แทน DATE_ADD function

#standardSQL
select REQUEST_DATETIME from `TABLE` where
REQUEST_DATETIME >= TIMESTAMP(DATETIME_ADD("2018-04-27 10:48:34",INTERVAL -7 HOUR))

REQUEST_DATETIME type is TIMESTAMP

As google bigquery > Query Editor

BigQuery interval date Legacy SQL to Standard SQL

References
https://cloud.google.com/bigquery/docs/reference/standard-sql
https://cloud.google.com/bigquery/docs/reference/legacy-sql

Posted in BigQuery, technology | Leave a comment

ImageIO.read can’t read input file BufferedImage always null no error

I assume your image path is /resources/image.png. Below code show you how to read image from spring class path

if you got error

javax.imageio.IIOException: Can’t read input file!

or

java.lang.IllegalArgumentException: URI is not hierarchical

You should be using

getResourceAsStream(...);

when the resource is bundled as a jar/war or any other single file package for that matter.

then just change your code from

private BufferedImage getOverly() throws IOException {
   File classPathInput = null;
   try {
      classPathInput = new File(getClass().getResource("/image.png").toURI());
   } catch (URISyntaxException e) {
      e.printStackTrace();
   }
   return ImageIO.read(classPathInput);
}

to

private BufferedImage getOverly() throws IOException {

    InputStream in = getClass().getResourceAsStream("/image.png");

    return ImageIO.read(in);
}

ImageIO.read(*…) will only load these image types GIF, PNG, JPEG, BMP, and WBMP.

Any other image type(ICO,WEBP) will return BufferedImage is null without error. You can’t rename the extension of file but you must convert image data to available image types.

reference: http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

https://stackoverflow.com/a/15726292/2090568

Posted in spring boot | Leave a comment