ในทุกๆ business จะต้องประกอบด้วย workflow ( ขั้นตอนการทำงาน ) มากมาย ในหนึ่ง Workflow จะประกอบด้วย หลายๆ process ยกตัวอย่างเช่น
Continue reading "สร้าง business workflow process system ด้วย networkx.org"วิธีการออกแบบเพื่อลดการซับซ้อนของ software
ควรออกแบบให้เป็น Layer และ แต่ละ Layer ควรกำหนดจุดประสงค์ให้ชัดเจน

ภาพจากหนังสือ https://www.amazon.com/Grokking-Simplicity-software-functional-thinking/dp/1617296201
จากภาพด้านบนเราควรจะกำหนดวัตถุประสงค์ของแต่ละ layer ให้ชัดเจน และ call graph ก็ไม่ควรจะยุ่งเหยิง หรือมีลูกศรที่ข้าม layer และใน layer เดียวกันก็ไม่ควรจะมีที่เรียกกันเอง ( ถ้า function นั้นๆ เรียก function ใน layer เดียวกัน function นั้นก็ต้องอยู่บน layer ที่สูงกว่า )
Continue reading "วิธีการออกแบบเพื่อลดการซับซ้อนของ software"Facebook Pixel ทำงานอย่างไร ?
Facebook Pixel ใช้หลักการของ web cookie เพื่อใช้ในการติดตามเส้นทางของลูกค้าที่คลิกจาก Facebook Ads ใน Marketing Campaign ของเราที่สร้างขึ้นเพื่อเพิ่มยอดขาย เมื่อทาง Facebook นี้ได้ข้อมูลการเดินทางของลูกค้าของเรา Facebook ก็จะสามารถทำ Analytic ได้ เราในฐานะคนซื้อ Ads ก็จะสามารถตรวจสอบดูค่าต่างๆ ของ Marketing campaign ของเราว่า ads ไหนที่ได้ผลดี เพื่อเป็นการพัฒนาการทำ online marketing
Continue reading "Facebook Pixel ทำงานอย่างไร ?"ข้อแนะนำพัฒนา E-Commerce Website ด้วย Shopify

ทุกวันนี้ธุรกิจต่างๆ ล้วนต้องเพิ่มช่องทางการขายจาก Offline สู่ Online และ E-Commerce online platform ที่เป็นที่นิยมมีอยู่หลายตัวเช่น WooCommerce, Shopify, Magento แต่ในบทความนี้ผมจะเขียนถึง Shopify เพราะเพิ่งพัฒนา website โดยใช้ Shopify มาไม่นานนี้
Continue reading "ข้อแนะนำพัฒนา E-Commerce Website ด้วย Shopify"บางทีความรู้ก็เป็นสิ่งที่จำกัดความคิดสร้างสรรค์ได้เหมือนกัน
พูดถึงประสบการณ์ส่วนตัว หลายๆครั้ง เราสามารถคิดออก แล้วทำ project ไปได้สักระยะหนึ่ง แล้วก็หยุดทำ เพราะเรามีความรู้มากเกินไป ทำให้เรารู้ว่าเราจะต้องทำอะไรต่อ จนทำให้ท้อไปเลย แล้วก็ไม่ทำ project นั้นต่อ ผมขอเรียกความรู้สึกนี้ว่า กำดักของความรู้ การที่เราไปยึดติดกับความรู้จากภายนอกมากเท่าไหร่ ก็จะทำให้เราเพิกเฉยกับเสียงภายในใจของเรา จะเรียกกว่ากึ๋น หรือปัญญาที่เกิดจากภายในใจของเราเองมากเท่านั้น ปลายทางของเส้นทางนี้คือ การหมดไฟ และ ไร้ซึ่งจินตนาการ
Web Socket คืออะไร
Web socket คือ technology ที่ใช้สื่อสารระหว่าง web browser และ server เป็นการสื่อสารแบบสองทาง ข้อดีของ web socket คือ program ในฝั่ง web browser ไม่ต้องเขียนในลักษณะของการเรียก function ในแบบ interval วนไปเรื่อยๆ แต่ใช้วิธีการ Event listening สรุปง่ายๆ คือ ถ้าเราเขียน code ว่า เราสนใจใน event นี้ เมื่อ event นั้นๆ เกิดขึ้นมา code ที่เราผูกกับ event. นั้นก็จะนำ event data ไป process
Continue reading "Web Socket คืออะไร"เทคนิคที่ช่วยให้เขียน program ให้ดีขึ้นอย่างรวดเร็ว
ข้อแรกเราต้องเข้าใจปัญหาของระบบที่เราต้องการจะแก้ โดยเราจะต้องค้นหาว่าอะไรคือปัญหาหลักๆ เมื่อเราค้นพบแล้ว เราก็ควรจะออกแบบโครงสร้างของระบบ และลองร่าง code ในระดับที่เพียงพอจะทดสอบแนวคิดของเราได้ เราอาจจะเขียนใส่กระดาษก็ได้
Continue reading "เทคนิคที่ช่วยให้เขียน program ให้ดีขึ้นอย่างรวดเร็ว"มาสร้าง Blockchain ของเราเองกันเถอะ ( 2 ) , Mining

Mining ( ขุด ) คือกระบวนการสร้าง block. ใหม่ แล้วเพิ่มเข้าไปใน blockchain
มีขั้นตอนการทำงานดังต่อไปนี้
const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
const blockHash = bitcoin.hashBlock(previousBlockHash, currentBlockData, nonce);
const newBlock = bitcoin.createNewBlock(nonce, previousBlockHash, blockHash);
เรามาดู code ของ function เหล่านี้กันดีกว่า
Blockchain.prototype.createNewBlock = function(nonce, previousBlockHash, hash) {
const newBlock = {
index: this.chain.length + 1,
timestamp: Date.now(),
transactions: this.pendingTransactions,
nonce: nonce,
hash: hash,
previousBlockHash: previousBlockHash
};
this.pendingTransactions = [];
this.chain.push(newBlock);
return newBlock;
};
Blockchain.prototype.hashBlock = function(previousBlockHash, currentBlockData, nonce) {
const dataAsString = previousBlockHash + nonce.toString() + JSON.stringify(currentBlockData);
const hash = sha256(dataAsString);
return hash;
};
Blockchain.prototype.proofOfWork = function(previousBlockHash, currentBlockData) {
let nonce = 0;
let hash = this.hashBlock(previousBlockHash, currentBlockData, nonce);
while (hash.substring(0, 4) !== '0000') {
nonce++;
hash = this.hashBlock(previousBlockHash, currentBlockData, nonce);
}
return nonce;
};
เราควรจะเริ่มดูที่ hashBlock function ซึ่งถูกเรียกใช้บ่อย function นี้ไม่มีอะไรซับซ้อนมาก แค่ทำการ hash ค่าของ previousBlockHash + nonce + currentBlockData ด้วย sha256
proofOfWork function คือการหา hash ที่ขึ้นต้นด้วย 0000 ให้เจอ เราจะเห็นว่า nonce คือตัวแปรที่เพิ่มค่าไปเรื่อยๆ ใน while loop เมื่อเราเจอ nonce ที่ถูกต้องแล้ว function ก็จะ return
const nonce = bitcoin.proofOfWork(previousBlockHash, currentBlockData);
const blockHash = bitcoin.hashBlock(previousBlockHash, currentBlockData, nonce);
const newBlock = bitcoin.createNewBlock(nonce, previousBlockHash, blockHash);
กลับมาดู code ที่พูดในตอนแรกจะเห็นได้ว่า createNewBlock เพียงแค่รับ parameter ที่ได้จาก output ของ proofOfWork และ hashBlock
มาสร้าง Blockchain ของเราเองกันเถอะ ( 1 )
Blockchain คือ การบันทึกข้อมูล ที่ยากในการแก้ไข ( แทบจะเป็นไปไม่ได้ ) ที่จะเปลี่ยนแปลงข้อมูล, hack ระบบ, หรือโกงได้

องค์ประกอบของ blockchain จะประกอบด้วย Block ซึ่งเป็นที่เก็บข้อมูลที่เราต้องการบันทึก เมื่อมี block ใหม่เข้ามา ก็จะทำการไปต่อท้ายเหมือนเป็นสายโซ่ ( chain ) เราเลยเรียกว่า Blockchain แต่การที่จะเพิ่ม block เข้าไปใหม่ใน blockchain network จะมีขั้นตอนที่เรียกว่า proof of work ( การสร้าง hash key ที่ตรงตามเงื่อนไขที่เรากำหนดไว้ เราอาจจะรู้จักขั้นตอนนี้ว่า "ขุด" mine )
Continue reading "มาสร้าง Blockchain ของเราเองกันเถอะ ( 1 )"decentralized network system คืออะไร ?
เราอาจจะเคยได้ยิน Bitcoin หรือพวก cryptocurrency ต่างๆ ที่ทำงานอยู่บน Blockchain ที่ทำงานบน decentralize network ก่อนที่เราจะทำความเข้าใจในรายละเอียดของ Blockchain และ decentralize network เราลองมาดู network ในรูปแบบต่างๆ
Continue reading "decentralized network system คืออะไร ?"