<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: praewpraew-p</title>
    <description>The latest articles on DEV Community by praewpraew-p (@praewpraewp).</description>
    <link>https://dev.to/praewpraewp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F288446%2F6bd36096-de2f-4b22-a62b-e2c2f5ae8df6.jpeg</url>
      <title>DEV Community: praewpraew-p</title>
      <link>https://dev.to/praewpraewp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/praewpraewp"/>
    <language>en</language>
    <item>
      <title>Set a fire in your heart with CODE MANIA 🔥</title>
      <dc:creator>praewpraew-p</dc:creator>
      <pubDate>Fri, 03 Jan 2020 07:42:20 +0000</pubDate>
      <link>https://dev.to/prontotools/set-a-fire-in-your-heart-with-code-mania-od9</link>
      <guid>https://dev.to/prontotools/set-a-fire-in-your-heart-with-code-mania-od9</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;🌈 Code Mania 1010: All About Passion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;วนเวียนมาเจอกันอีกครั้งสำหรับงาน &lt;strong&gt;Code Mania&lt;/strong&gt; ซึ่งครั้งนี้มีชื่อตอนว่า &lt;strong&gt;Code Mania 1010: All About Passion&lt;/strong&gt; แค่ฟังก็รู้สึกว่า Passion ในตัวมันฮึกเหิมขึ้นมาทีเดียว 🔥&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_uKXsWAo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/6.jpg%3Ftoken%3DAGZNXF4Q6RZTHN6S7FJ3QXS6B3CR4" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_uKXsWAo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/6.jpg%3Ftoken%3DAGZNXF4Q6RZTHN6S7FJ3QXS6B3CR4" alt="CodeMania1010"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;งานครั้งนี้จัดอยู่ที่ True Digital Park เมื่อเข้าไปลงทะเบียนแล้วจะได้รับป้ายชื่อ เสื้อ กับตารางกำหนดการในงาน แอบขอกรี๊ดนิดนึง เสื้อน่ารักมาก แง้ ละก็ชอบสายคล้องป้ายมาก ทำดีฝุดๆ&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ป้ายชื่อ&lt;/th&gt;
&lt;th&gt;กำหนดการ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--71kjOuuo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/1_1.jpg%3Ftoken%3DAGZNXFZIGQMX6RT4C27OU2C6B3N6S" alt="CodeMania1010"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0OLPHv5A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/2_2.jpg%3Ftoken%3DAGZNXFY2T7QSJWPKIHZCIQS6B3NTO" alt="CodeMania1010"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;อันดับแรกพอเข้าไปในงานก็ว้าวก่อนเลย ว้าวกับ True Digital Park 55555 ตึกสวยสุดๆ ที่งานมีบริษัทหลายบริษัทมาออกบูธกันด้วย ทั้งแนะนำบริษัท รับสมัครงาน เยอะแยะมาก แล้วแต่ละบูธก็มีของมาแจกเพียบ เราก็เลยพลาดไม่ได้ที่จะไปล่าของแจกมาด้วยย แน่น๊อนน ได้มาเพียบเลยล่ะ!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h-8GC3vf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/9.jpg%3Ftoken%3DAGZNXF5E4N76WFKCH5IFATC6B3UKK" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h-8GC3vf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/9.jpg%3Ftoken%3DAGZNXF5E4N76WFKCH5IFATC6B3UKK" alt="CodeMania1010"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oTEJ6Ztt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/4.jpg%3Ftoken%3DAGZNXF6NFXWXMOLWES5GTP26B3SVE" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oTEJ6Ztt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/4.jpg%3Ftoken%3DAGZNXF6NFXWXMOLWES5GTP26B3SVE" alt="CodeMania1010"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ช่วงงานเริ่มจะมี speaker ขึ้นมาพูดในหลากหลายหัวข้อ ซึ่งแต่ละหัวข้อมันเป็นอะไรที่สุดยอด ตื่นเต้นสุดๆ เลยที่ได้มานั่งฟังอะไรใหม่ๆ ที่นี่ หลังจากนั้นช่วงใกล้พักอาหารกลางวันก็จะมีกิจกรรม &lt;strong&gt;Connection Activity&lt;/strong&gt; ขอบอกว่า แอบมาคนเดียวก็ไม่ต้องกลัวเหงาเลยค่ะ เพราะกิจกรรมนี้ก็เพื่อให้ผู้ที่สนใจแลกเปลี่ยนความคิดเห็นในเรื่องเดียวกัน ได้มีโอกาสนั่งคุยกันนั่นเอง ซึ่งก็มีหลากหลายหัวข้อเลยเลยทีเดียว ตั้งแต่ Blockchain ไปจนถึง Video Games เลยค่ะ แต่ถ้าใครมีหัวข้ออื่นที่อยากจะแลกเปลี่ยน ก็เสนอไปได้เลย! 🙌&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--REu45mep--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/8.jpg%3Ftoken%3DAGZNXF6LRXQPID5P2TOLCYK6B3USM" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--REu45mep--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/8.jpg%3Ftoken%3DAGZNXF6LRXQPID5P2TOLCYK6B3USM" alt="CodeMania1010"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fiQOcQCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/5.jpg%3Ftoken%3DAGZNXF2X3D2IPKQT2NXZDFC6B3P6Y" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fiQOcQCz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/praewpraew-p/blog_images_repo/master/codemania1010/5.jpg%3Ftoken%3DAGZNXF2X3D2IPKQT2NXZDFC6B3P6Y" alt="CodeMania1010"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ในช่วงบ่ายก็จะแบ่งการเข้าฟังบรรยายเป็นหัวข้อ แต่ละหัวข้อก็จะมี speaker มาให้ความรู้เยอะแยะเลย ทั้งหัวข้อเกี่ยวกับ Serverless, DevOps, Blockchain หรือจะเป็นฝั่งของ Machine Learning และ Testing อีกด้วย อีกทั้งยังมี workshop เล็ก ๆ ซึ่งจะถูกจัดที่ห้อง Workshop Room มีทั้ง Flutter สำหรับสายโมบายแอป หรือจะเป็น สร้างแบงค์บน Ethereum ด้วย Smart Contract ใครสนใจเรื่องไหน อยากเข้าฟังอะไรเชิญตามสบายค่ะ&lt;/p&gt;

&lt;p&gt;แต่ไม่ต้องกลัวนะคะว่าเราจะได้มาเลือกปุบปับหน้างานว่าจะเข้าอะไรดี ก่อนวันงานทางผู้จัดได้อัพโหลดตารางกิจกรรมให้ทุกคนได้ทราบเพื่อที่จะได้ตัดสินใจกันก่อนอยู่แล้ว ใครที่อยากจะเข้าเวิร์คช็อปจะได้เตรียมแล็ปท็อปมาให้พร้อม 👩‍💻 &lt;br&gt;
&lt;em&gt;(ติดตามข่าวสารได้ที่ &lt;a href="https://www.facebook.com/ThaiProgrammerSociety"&gt;facebook page: สมาคมโปรแกรมเมอร์ไทย&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ช่วงโหวต Session ที่ชอบที่สุด ! ❤️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ถ้าจะต้องเลือกที่ชอบมากจริงๆ ฟังเพลินๆเลยก็จะเป็น &lt;code&gt;Myths of Software Testing&lt;/code&gt; ค่ะ แต่ไม่ได้หมายความว่า session อื่นไม่สนุกน้า อันนี้เราก็ต้องมีเอนเอียงตามความชอบนิดหน่อย แหะๆ จากการฟังก็ทำให้รู้ว่า จริงๆแล้วเนี่ยเรื่องของเทส มันไม่ได้เกี่ยวกับ Tester เพียงคนเดียวค่ะ &lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Software Testing != Tester’s Job”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ทุกๆคนในทีมต่างก็ต้องมีส่วนร่วมในการเทส เพื่อให้เราได้ซอฟต์แวร์ที่มี quality สูงสุดนั่นเอง &lt;em&gt;ว่าแต่คนในทีมจะช่วยได้ยังไงบ้างนะ ?&lt;/em&gt; ยกตัวอย่างกับการทำ unit test เลยค่ะ หลายๆคนพอลงท้ายด้วยคำว่าเทสปุ๊บ อ้ะ หน้าที่ Tester 😢 แต่ถ้ามาดูกันจริงๆแล้ว การทำ  unit test เนี่ย เราต้องการทดสอบส่วนของฟังก์ชันที่ถูกพัฒนาขึ้นโดย Developer ใช่มั้ยคะ มันจะดีกว่ามั้ยถ้าคนที่เขียนโค้ดเหล่านั้นขึ้นมา เป็นคนเขียนเทสเพื่อทดสอบมัน เพราะคงไม่มีใครรู้จักโค้ดเหล่านั้นได้ดีกว่าคนที่เขียนแน่นอน &lt;/p&gt;

&lt;p&gt;โอ้โห นี่แค่น้ำจิ้มจาก session นี้นะคะเนี่ย ยังมีอีกหัวข้อที่น่าสนใจสำหรับผู้เขียน ก็คือ &lt;code&gt;DevOps&lt;/code&gt; นั่นเอง ตอนแรกนี่เดินเข้าไปด้วยความคิดที่ว่า ‘DevOps’ คืออะไร? ได้ยินมาก็บ่อยแต่จริงๆ มันคืออะไรกันนะ? พอเข้าไปฟังก็ทราบทั้งหมดเลย ทั้งความหมายของ DevOps หลักการ แนวคิด และอื่นๆ อีกมาก เป็น DevOps101 จริงๆ ใครที่ไม่มีพื้นฐานมาก่อนไม่ต้องกลัวเลย เพราะ speaker อธิบายตั้งแต่เริ่มต้น ทำความเข้าใจได้ง่ายมากค่ะ &lt;/p&gt;

&lt;p&gt;สุดท้าย อยากบอกว่างานดีๆ แบบนี้มากันเถอะค่ะ สิ่งที่ได้กลับไปไม่ใช่แค่ความรู้แต่เป็นเพื่อน เป็น Community ที่พร้อมจะคุยแลกเปลี่ยนกันในหลายๆ เรื่อง เรียกได้ว่าโลกของเราจะกว้างขึ้นหลังจบงานนี้แน่นอน 💛&lt;/p&gt;

</description>
      <category>codemania</category>
      <category>codemania1010</category>
      <category>community</category>
      <category>passion</category>
    </item>
    <item>
      <title>Python101: น้องงูและถิ่นที่อยู่ 🐍</title>
      <dc:creator>praewpraew-p</dc:creator>
      <pubDate>Wed, 11 Dec 2019 10:09:34 +0000</pubDate>
      <link>https://dev.to/prontotools/python101-4ghb</link>
      <guid>https://dev.to/prontotools/python101-4ghb</guid>
      <description>&lt;p&gt;ก่อนอื่นเลย ก็ต้องแนะนำตัวกันก่อน เพราะนี่เป็นบทความแรกของพวกเรา #ppbb👩‍💻&lt;br&gt;
ใช่ บทความนี้ถูกเขียนโดยเราสองคน ซึ่งได้เข้ามาเป็น intern ที่ Pronto tools 💙&lt;br&gt;
จากเวลาครึ่งวันที่พี่ได้สอน python ฉบับเริ่มต้นให้กับพวกเรา ก็ทำให้บทความนี้ถือกำเนิดขึ้นนั่นเอง !&lt;/p&gt;
&lt;h4&gt;
  
  
  💙 มาทำความรู้จักกับ Python Interpreter
&lt;/h4&gt;

&lt;p&gt;น้องงูของเราเนี่ยถูกพัฒนาขึ้นมาให้เป็นภาษาที่อ่านง่าย ไม่ซับซ้อน แล้วก็มีข้อยกเว้นน้อยกว่าตัวภาษาอื่น ๆ &lt;/p&gt;
&lt;h5&gt;
  
  
  : Python have battery includeeee !
&lt;/h5&gt;

&lt;p&gt;ทำไม python ถึงถูกเรียกว่า Battery include ? เป็นเพราะว่า python เป็นภาษาที่สามารถขับเคลื่อนได้ด้วยตัวของมันเอง กล่าวคือ มี library ในตัวเองมากพอที่จะไม่จำเป็นต้อง import มาจากที่อื่น ฉันสามารถอยู่ได้ด้วยตัวเองนะ!&lt;/p&gt;

&lt;p&gt;ด้วยตัวภาษาของ python เองที่มี library พื้นฐานมาให้มากพอที่จะใช้งาน ทำให้เราไม่จำเป็นต้องติดตั้ง library อื่นๆ เลย เราจึงสามารถเรียกใช้ python และรันโค้ดของเราได้ง่ายๆเหมือนตัวอย่างนี้เลย&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Ll0DHUw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Ll0DHUw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py1.png" alt="alt text" title="python101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;😎 ความลับ (ที่ไม่ลับ) ของ python อีกอย่างหนึ่ง: ตัว interpreter ของ python นั้นสามารถเรียกใช้ script หรือ function บน command line ได้เลย&lt;/p&gt;
&lt;h4&gt;
  
  
  💙 Pip
&lt;/h4&gt;

&lt;p&gt;คำสั่งที่คนทั่วไปมักจะคุ้นเคยในการลง module ของ python เพียงแค่พิมพ์ pip install … module ทั้งหลายที่ต้องการก็จะโผล่พรึบมาอยู่ในเครื่องอย่างง่ายดาย~&lt;/p&gt;

&lt;p&gt;ถามว่า ถ้าเราต้องการ ‘ยืม’ library สำเร็จรูปที่คนอื่นเคยเขียนไว้แล้วมาใช้ได้มั้ย?&lt;br&gt;
  ตอบเลยว่าสำหรับ python นั้น ได้!&lt;/p&gt;

&lt;p&gt;เรามีสิ่งที่เรียกว่า PyPi คือเว็บที่ทุกคนสามารถอัพโหลด package/module ของตัวเองให้เป็นสาธารณะและทุกคนสามารถใช้ร่วมกันได้ เหมือนเขียนหนังสือของตัวเองแล้วไปวางไว้ที่ห้องสมุด เจ๋งสุดๆ ไปเลย!&lt;/p&gt;

&lt;p&gt;แล้วระบบจัดการตัวเองของ python เนี่ย ถือว่าฉลาดมากๆ เลยนะ มันจะไม่ให้ตัวเองทำงานหนัก ทรัพยากรตัวไหนที่สามารถใช้ซ้ำได้มันก็จะใช้ตัวนั้นแหละ พูดง่ายๆ ก็อย่างเช่น &lt;/p&gt;

&lt;p&gt;โปรเจกต์ monday มีการใช้งาน module drinkbeerwithme🍻 อยู่ แล้วโปรเจกต์ friday มีการใช้งาน module sleeplikecrazy🛌 กับ module drinkbeerwithme🍻, python ก็จะไม่ลง module drinkbeerwithme🍻 ใหม่นะ มันจะไปใช้ module ร่วมกับโปรเจกต์ monday เลย ว้าว!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip freeze and pip list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ทั้งสองคำสั่งให้ผลลัพธ์และการแสดงผลคล้ายๆ กัน ต่างกันที่รูปแบบ pip list จะแสดงผล module ทั้งหมดภายในเครื่องในรูปแบบที่เข้าใจง่าย user สามารถดูได้รู้เรื่อง ในขณะที่ pip freeze ก็ใช้ในการแสดงผล module ด้วยเช่นกัน แต่จะอยู่ในรูปแบบของ requirements format แทน&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lUOQdQpc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lUOQdQpc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py2.png" alt="alt text" title="python101"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install -r requirement.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;คำสั่งนี้ใช้ในกรณีที่ต้องการลง module หลายๆ ตัวพร้อมกัน โดยสามารถเขียน module และเวอร์ชันที่ต้องการด้วย format เดียวกับ pip freeze ลงในไฟล์ .txt แล้ว install ทีเดียวได้เลย&lt;/p&gt;

&lt;h4&gt;
  
  
  💙What is Virtualenv ?
&lt;/h4&gt;

&lt;p&gt;ลองนึกถึงเวลาที่เราต้องทำโปรเจกต์หลาย ๆ โปรเจกต์พร้อมกัน แล้วแต่ละโปรเจกต์ก็มีการเรียกใช้ module ไม่เหมือนกัน หรือดันเป็นคนละ version อีก ทีนี้การจะจัดการกับเจ้าตัว module หรือ library พวกนี้ ให้สามารถใช้งานได้กับทุก ๆ โปรเจกต์ของเราก็ดูจะเป็นเรื่องยาก ถูกมั้ย ? &lt;/p&gt;

&lt;p&gt;เจ้าตัว virtualenv นี่แหละที่จะเข้ามาช่วยในการจัดการกับ environment ของเรา โดยเราสามารถแบ่ง environtment ของเราไว้ให้สำหรับแต่ละโปรเจกต์ใช้อีกที ซึ่งก็จะทำให้การจัดการกับ library ในแต่ละโปรเจกต์ของเราเป็นเรื่องง่ายขึ้นนั่นเอง ! ลองมาดูรูปนี้กัน&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UzlfWqGt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/venv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UzlfWqGt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/venv.png" alt="alt text" title="python101venv"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;จากรูปเราจะเห็นว่ามี 2 โปรเจกต์ที่มีความต้องการใช้ library ที่แตกต่างกัน เราจึงจำเป็นที่จะต้องใช้ virtualenv ในการจัดการกับ environment ให้กับทั้งสองโปรเจกต์นั่นเอง&lt;/p&gt;

&lt;p&gt;สำหรับการติดตั้งก็ไม่จำเป็นต้องทำอะไรเลยค่ะ เพราะใน python3 เนี่ยมีเจ้าตัวนี้ให้เราอยู่แล้ว&lt;br&gt;
ทีนี้เราก็จะมาทำการสร้าง environment ของเรากัน โดยใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m venv xPronto
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;สิ่งที่เราจะได้ก็คือ มันจะทำการสร้าง folder สำหรับ environment นี้ขึ้นมา โดยใช้ชื่อว่า &lt;br&gt;
xPronto นั่นเอง&lt;/p&gt;

&lt;p&gt;วิธีเรียกใช้ล่ะ? เราต้องทำการ activate มัน โดยใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source /path/to/ENV/bin/activate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ซึ่งหน้าตาหลังจาก activate ก็จะมีหน้าตาแบบนี้นี่เอง คือจะมี (env) เพื่อบอกเราว่าตอนนี้เราอยู่ใน environment นี้แล้วนะ แล้วเราก็จะสามารถลง library ที่เราต้องการสำหรับโปรเจกต์นี้ได้เลย !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Yf1UVL8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Yf1UVL8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py3.png" alt="alt text" title="python101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ส่วนการจะออกจาก environment เราก็แค่ใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;deactivate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  💙Pyenv
&lt;/h4&gt;

&lt;p&gt;ทีนี้เราจะมาทำความรู้จักกับอีกหนึ่งพระเอกของเราก็คือ Pyenv มันก็คือตัวที่เอามาช่วยในการจัดการกับ python version ของเรา ที่ก็มีออกมาหลาย version ซะเหลือเกิน &lt;/p&gt;

&lt;p&gt;โดยเราก็จะทำการติดตั้งก่อน โดยใช้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install pyenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;และเพื่อให้มั่นใจว่า system จะทำการเรียกใช้ pyenv โดยอัตโนมัติเมื่อเราเปิด terminal เราจะทำการแก้ไขไฟล์ .zshrc (อันนี้ขึ้นอยู่กับ shell ของแต่ละคนเลยค่ะ) โดยเพิ่มคำสั่งข้างล่างนี้ลงไป&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# PYENV INIT
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(command pyenv init - --no-rehash zsh)"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;เท่านี้การติดตั้ง pyenv ของเราก็จะเสร็จเรียบร้อย เราจะมาลองเรียกใช้เจ้าตัว pyenv กัน โดยใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyenv global    
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ตามชื่อของมันก็บอกเลยว่าเป็น global เพราะฉะนั้น python version ที่ปรากฏก็คือ version ของ system นั่นเอง &lt;/p&gt;

&lt;p&gt;ทีนี้ถ้าเราจะลง python ผ่าน pyenv ก็แค่ใช้คำสั่ง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyenv install version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;แล้วถ้าเราอยากจะเปลี่ยน version ให้กับ system ของเครื่อง หรือโปรเจกต์ที่ต้องการล่ะ ? pyenv สามารถจัดการได้ง่ายๆเลย โดยใช้คำสั่งดังนี้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pyenv global version
#กำหนด python version ให้กับ system ของเรา

pyenv local version
#กำหนด python version ให้กับ project ของเรา
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;มาลองดูตัวอย่างข้างล่างนี้กัน เราจะทำการกำหนด python version ให้กับโปรเจกต์ที่มีชื่อว่า changev เราก็จะเข้าไปที่ folder นั้นก่อน แล้วลองตรวจสอบ version ด้วย pyenv version ก่อน ซึ่งจะเห็นว่าเป็น version 3.8.0 &lt;/p&gt;

&lt;p&gt;ทีนี้เราจะกำหนด version ของโปรเจกต์นี้เป็น 3.7.4 แทน จึงใช้คำสั่ง pyenv local 3.7.4 พอลองเรียกใช้ python ดู ก็เป็นอันเสร็จเรียบร้อย !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wnDVQiZg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wnDVQiZg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/bimmin/python101/master/py4.png" alt="alt text" title="python101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;จบไปแล้วกับ python101 ของเรา หลาย ๆ คนก็อาจสงสัยว่าทำไมเราถึงจัดให้มันเป็นส่วนแรกที่จะต้องให้ความสำคัญก่อนการเขียนโค้ด ในกรณีที่เป็นโปรเจกต์เล็ก ๆ อาจจะยังนึกภาพกันไม่ค่อยออก &lt;br&gt;
แต่ถ้าลองนึกถึงโปรเจกต์ที่ใหญ่ขึ้น มีการทำงานร่วมกับหลายทีม ปัญหาในการจัดการกับ library สำหรับทีมนั้นทีมนี้ อื้อหืออ ไม่อยากจะนึกภาพความยุ่งเหยิงพวกนั้นเลย &lt;/p&gt;

&lt;p&gt;วิธีที่ดีที่สุดคือ วางโครงสร้าง และแบ่ง environment ให้กับแต่ละโปรเจกต์ก่อนเลยค่ะ ทีนี้เราก็สามารถเขียนโค้ดได้อย่างสบายใจ โดยไม่ต้องมากังวลกับการนั่งอัพเดต library ทีหลังเลย! 👩‍💻💙&lt;/p&gt;

</description>
      <category>python</category>
      <category>pipenv</category>
      <category>productivity</category>
      <category>virtualenv</category>
    </item>
  </channel>
</rss>
