โคดในตำนาน

เมื่อวานได้ช่วยน้องดู Issue อันนึงซึ่งเกี่ยวกับการ Drag & Drop ซึ่งเจอประเด็นน่าใจ

ในวงการ .NET เนี่ย จะมี code ในตำนานอยู่ชุดนึงที่มีคนก๊อบปี้ไปใช้กันมากมาย ซึ่งเป็น code เกี่ยวกับการ drag & drop ไฟล์จาก Microsoft Outlook ซึ่งจะช่วยอำนวยความสะดวกเวลาเราลากไฟล์(หรืออีเมล)จากที่อื่นๆเข้ามาใน application ของเรา ซึ่งการลากจาก MS Outlook จะทำงานไม่เหมือนการลากวางจากที่อื่น ไม่ว่าจะ search ยังไงก็จะวนเวียนมาเจอโคดหน้าตาแบบนี้ล่ะ

คราวนี้เนี่ยโคดที่ก๊อบๆกันไปมันเป็นโคดที่ค่อนข้าง low level มาก ชนิดที่ว่าคนที่ถนัด .NET กว่าครึ่งไม่น่าจะเข้าใจว่าโคดมันทำงานยังไงกันแน่ เพราะมันมีการใช้งานโคดของ Windows เองที่มีพื้นฐานมาจากภาษา C++ คนรู้แค่ว่าก๊อบไปแล้วมันก็ดูเวิร์คนะ ทำงานได้ถูก

ปัญหาก็คือโคดชุดที่ว่าเนี่ย ถูกเผยแพร่ครั้งแรกบนเว็บ codeproject.com เมื่อปี 2008 !!… คนก็ก๊อบๆปใช้กันมากมาย ทั้งๆที่มันมีบัคอยู่ !!

ถ้าเรามานั่งอ่านดีๆจะพบว่า มีคนมา comment ตามหลังอีกสองสามอัน (ในปี 2010) ในเรื่องปัญหากับการทำงานใน 64 bit และปัญหาการจัดการ memory เมื่อลากมาจากบาง app

ในเคสของ Issue ที่เกิดกับตัวเองก็พบว่าใน MS Outlook release ล่าสุด (April 2020, Version 2004 (Build 12730.20250) ) จะมีปัญหาซึ่ง code ที่แก้เรื่องการจัดการ memory ก็แก้ปัญหานี้ด้วยเช่นกัน

สรุปก็คือ code drag & drop จาก MS Outlook ที่มีอายุ มากกว่า 12 ปีนั้นมีบัคอยู่ และมันถูกส่งต่อๆกันไปแบบมีบัคเยอะมาก โดยไม่ได้มีใครเข้าใจมันเท่าไหร่ เลยไม่มีใครดูออกว่ามันมีบัคอยู่ จนเมื่อถึงเวลามันระเบิดนั่นแหล่ะถึงจะต้องมารื้อดูกัน และมีแนวโน้มว่า หลังจากนี้จะมีหลายแอพที่เริ่มพังเพราะ code ที่มีบัคนั้นทำงานไม่ได้กับเวอร์ชันล่าสุดของ MS Outlook

การ copy & paste ก็ไม่ใช่เรื่องง่ายๆอีกต่อไป

ปัจจุบันการใช้ opensource code ผ่านทาง Github และการใช้งานผ่าน Nuget/npm ค่อนข้างได้รับความนิยม การบริหารจัดการก็ดีขึ้นมาก ดีกว่า codeproject ที่เป็น webboard style ปัญหาเหล่านี้น่าจะลดน้อยลงไปได้

ข้อมูลเพิ่มเติมสำหรับผู้สนใจ

Continuous deployment on Azure Website with Kudu

We’re now in the world of automation. For today, just wanna share about how to do Continuous Deployment on Azure Website…

There are many many ways to do continuous deployment. We can have a build machine which do monitoring our source control then trig a service to do a new build and deploy each time we check-in the code. But .. that mean we have to had that build machine. (You may get it for free if you’re using the Visual Studio Team Services (aka. Visual Studio Online) which I don’t want to mention about it now.

For today with Azure website which everyone can get it free for 10 (tiny) instances, we will talk about automate deployment without any build machine. The azure website itself can do continuous deployment for you.

First thing first – Setup deployment source for Azure website.

You can do it by open your Azure Portal then open you website instance.

Go to Settings > Publishing section > Deployment source which you can pick from several souce control you’re using. It may ask you to enter credential to access your git repository and also let you select your project/branch.

Twitter OAuth Changed without notice.

การ Login เว็บต่างๆด้วย Account Twitter นั้น ใช้กระบวนการที่เรียกว่า OAuth ซึ่งใช้กันแพร่หลายมาก

 

(ไว้มีเวลาจะลองเขียนเกี่ยวกับ OAuth อีกที)

 

สองสามวันก่อน เจอว่าล็อกอินเข้าเว็บ Takeatax ด้วย Twitter ไม่ทำงาน เลย ลองมานั่งๆหาสาเหตุ

 

สิ่งที่พบคือ Twitter แก้ไขการล็อกอิน จาก OAuth 1.0 เป็น 1.0A ซึ่งสิ่งที่กระทบคือ

 

ในกระบวนการตรวจสอบ ต้องการค่าจากเว็บ/แอพ ต่างๆเพิ่มขึ้น การเปลี่ยนแปลงแบบนี้เกิดขึ้นได้เสมอ .. แต่สิ่งที่ไม่ปกติคือ

 

ครั้งนี้ Twitter แก้ไข API ของตัวเองโดยไม่ได้ประกาศล่วงหน้า แม้กระทั่งเอกสารในเว็บเองก็ไม่ได้อัพเดทด้วยซ้ำไป

 

จากมุมมองส่วนตัว เหตุการณ์แบบนี้ไม่ควรเกิดขึ้น ยิ่งจากบริษัทที่มี คนอื่นมาใช้ API เยอะขนาดนี้

 

.. ลองคิดภาพว่าวันนึงตื่นเช้ามาแล้วพบว่า ห้ามใส่กางเกงขาสั้นขึ้น BTS โดยไม่ประกาศล่วงหน้า …

 

คำถามคือ คนที่มาถึงแล้วจะทำยังไง (ฟะ) …

 

คิดว่าผลกระทบครั้งนี้เป็นวงกว้างพอสมควร ถ้าเป็นเว็บอาจจะแก้ไม่ยาก

 

แต่ถ้าเป็น Mobile App กว่าจะอัพเดท เทส ส่งขึ้น Store เสียเวลาไปหลายอยู่ น่าหงุดหงิดใจยิ่งนัก

 

แม้ว่าจะมีคนจากทีม Security ของ Twitter ออกมาบอกว่า การแก้ไขที่เพราะต้องการปิดช่องโหว่ของด้าน Security .. ยังไงก็ควรแจ้งก่อนอยู่ดี

 

ข้อมูลเพิ่มเติม https://dev.twitter.com/discussions/16443

 

ดราม่าก็จบลงแต่เพียงเท่านี้

 

Dictionary VS Hashtable

เนื่องด้วยว่าได้รับมอบหมายให้พูดเรื่อง Dictionary ในที่ประชุมฝ่าย เลยขอ Draft ไว้ในนี้ด้วยเลยละกัน

วิธีการนำเสนอได้แรงบรรดาลใจจากที่ไปงาน IgniteBkk 2010 มา


Note – Hashtable == Dictionary?

A Dictionary is closely related to a HashTable. There are many subtle differences between them, but one important difference is that a Dictionary is generally faster than a Hashtable for storing data.

The reason is that a Dictionary takes strongly-typed values as its input, so you do not suffer the performance impact of storing generic Objects and boxing/unboxing them into the proper types during use.

by kirupa

Reference :

Scroll to top