ความสามารถของระบบ SimpiEcommerce ( ECommerce System )

ระบบนี้เขียนด้วย Django web framework ที่เขียนด้วยภาษา python ซึ่งในปัจจุบันเป็นภาษาที่ใช้ในการพัฒนา AI ( Artificial Intelligence ) และมี software package คลอบคลุมหลากหลายวงการ

simpliShop มีรองรับระบบดังต่อไปนี้

  • Product management system ระบบบริหารจัดการสินค้า
    • Product Category system ระบบหมวดหมู่สินค้า
    • Product Stock ระบบ stock สินค้า
  • Shopping Cart system ระบบตะกร้าสินค้า
  • Order management system ระบบจัดการการสั่งซื้อ
  • Promotion management system ระบบจัดการโปรโมชั่น
    • Coupon  Online / Offline
    • Campaign  ทั้งร้าน หรือหมวดหมู่สินค้า และเงื่อนไขต่างๆ
    • Flashsale
  • Review management system ระบบจัดการรีวิวสินค้า
  • Content management system ( CMS ) ระบบจัดการเนื้อหาต่างๆ ในเว็บไซต์
  • Responsive web รองรับการแสดงผลในอุปกรณ์ต่างๆ
  • System Dashboard แสดงภาพรวมความเคลื่อนไหวในระบบ
  • รองรับการปรับแต่งตามความต้องการของลูกค้า
  • รองรับการลงทะเบียนผ่านระบบ OTP ทั้ง email, SMS
  • มี Web service API รองรับการเชื่อมต่อกับระบบต่างๆ ในบริษัทของคุณลูกค้า
  • Chatbot integration รองรับการเชื่อมต่อกับ chatbot ได้อย่างราบรื่น
  • User authentication / authorization  , Social Account integration สามารถ login ผ่าน Line, Facebook, Google ได้
  • Recommender system  ระบบแนะนำสินค้าด้วย AI ( Machine learning system )  โดยใช้ตัวแปรในการคำนวณแบบผสมผสาน
  • Google Analytic , Google Merchant Integration ( Product feed )
  • System Alert system ระบบแจ้งเตือนความเคลื่อนไหวของ ecommerce
    • Low level stock: ระบบแจ้งเตือนสินค้าใกล้หมด
    • InCart high level: แจ้งเตือนสินค้าในตะกร้า ( กรณีที่ลูกค้าใส่สินค้าในตะกร้าไว้ก่อน เพื่อใช้กับ campaign ต่างๆ )
  • Web API ( JSON web api )
  • Mobile app integration ( iOS/Android)

เราจะทำให้ program ที่มีขั้นตอนการทำงานที่ซับซ้อน และ ต้องแบ่งงานให้กับ programmer หลายๆ คนได้อย่างไร ?

หลายๆคน คงได้อ่านหนังสือเกี่ยว software engineering มาหลายๆ เล่ม  ก็จะมีข้อเสนอแนะหลายวิธี แต่วันนี้ผมจะมาพูดถึงการควบคุมลำดับการทำงานของ program ที่ซับซ้อน  ให้ง่ายขึ้นด้วยการสร้าง workflow engine system ขึ้นมาใช้เอง ลองกลับไปอ่านบทความก่อนหน้านี้  สร้าง business workflow process system ด้วย networkx.org

Continue reading "เราจะทำให้ program ที่มีขั้นตอนการทำงานที่ซับซ้อน และ ต้องแบ่งงานให้กับ programmer หลายๆ คนได้อย่างไร ?"

สร้าง 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