สร้าง business workflow process system ด้วย networkx.org

ในทุกๆ 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 คืออะไร ?"