<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python on תומרקוד</title><link>https://tomercode-hugo-blog.pages.dev/tags/python/</link><description>Recent content in Python on תומרקוד</description><generator>Hugo</generator><language>he-IL</language><lastBuildDate>Mon, 01 Feb 2021 07:35:57 +0000</lastBuildDate><atom:link href="https://tomercode-hugo-blog.pages.dev/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>הקמת שרת PyPI ב-5 דקות</title><link>https://tomercode-hugo-blog.pages.dev/2021/02/pypi.html</link><pubDate>Mon, 01 Feb 2021 07:32:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2021/02/pypi.html</guid><description>&lt;p&gt;לאחרונה יצא לי לדבר בבלוג לא מעט על הצד היותר ״devopsי״ של פיתוח תוכנה. דיברנו קצת על &lt;a href="https://tomercode-hugo-blog.pages.dev/2020/11/venv.html"&gt;סביבות וירטואליות&lt;/a&gt;, על &lt;a href="https://tomercode-hugo-blog.pages.dev/2020/12/pip-203.html"&gt;pip&lt;/a&gt;, על &lt;a href="https://tomercode-hugo-blog.pages.dev/2021/01/pip-setuptools-5.html"&gt;יצירת חבילות&lt;/a&gt;, ואפילו על &lt;a href="https://tomercode-hugo-blog.pages.dev/2020/09/git-submodules.html"&gt;git submodules&lt;/a&gt;. הפוסט הזה ממשיך את הפוסטים הקודמים לו ומדבר עלי איך אנחנו יוצרים שרת אליו ניתן להעלות חבילות פייתון, וכן, לצרוך אותן.&lt;/p&gt;</description></item><item><title>מה ההבדל בין אוטומציה לפיתוח רגיל</title><link>https://tomercode-hugo-blog.pages.dev/2021/01/blog-post_18.html</link><pubDate>Mon, 18 Jan 2021 07:38:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2021/01/blog-post_18.html</guid><description>&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://tomercode-hugo-blog.pages.dev/images/posts/2021/01/blog-post_18/image-01-fbbb3fd6c8.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="מבוא"&gt;מבוא&lt;/h2&gt;
&lt;p&gt;בתעשייה יש כיום שיח סוער מאוד על ההבדל בין אוטומציה לבין פיתוח. בעוד שיש אנשים שאומרים שאוטומציה זה פיתוח לכל דבר ומי שכותב אוטומציה צריך להסתכל על עצמו כעל מפתח, יש אנשים שרואים בפיתוח אוטומציה כתחום ששווה פחות, מתגמל פחות ודורש פחות הכשרה.
הפוסט הזה אינו עוד שיחת מוטיבציה עם מסר של ״גם מפתחי אוטומציה הם מפתחים וצריך להתייחס אליהם ככה״.
מטרת הפוסט היא להציג את נקודת מבטי האישית על תחום האוטומציה, על ההבדל בינו לבין תחום פיתוח התוכנה ה״רגיל״ לנסות לתת מענה לשאלה - מדוע אנשים רואים פער בין התחומים?&lt;/p&gt;</description></item><item><title>יצירת חבילת pip ב-5 דקות</title><link>https://tomercode-hugo-blog.pages.dev/2021/01/pip-setuptools-5.html</link><pubDate>Sun, 10 Jan 2021 06:29:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2021/01/pip-setuptools-5.html</guid><description>&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://tomercode-hugo-blog.pages.dev/images/posts/2021/01/pip-setuptools-5/image-01-c73cae79e7.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="מבוא"&gt;מבוא&lt;/h2&gt;
&lt;p&gt;כתבנו קוד, אנחנו מרוצים ממנו וחושבים שהוא יכול להועיל לעוד אנשים, אולי בתוך אותו ארגון בו אנחנו עובדים ואולי פשוט להוציא את החבילה לשימוש העולם.&lt;/p&gt;
&lt;p&gt;יש הרבה דרכים לחלוק קוד עם הקהילה, אבל אחת הנפוצות מבניהן היא יצירת חבילה שכל מה שהמשתמש יצטרך לעשות על מנת לצרוך אותה זה &lt;a href="https://tomercode-hugo-blog.pages.dev/2020/11/venv.html"&gt;pip install&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>פוסט אורח: Data Objects בפייתון - מ tuple ועד dataclass</title><link>https://tomercode-hugo-blog.pages.dev/2020/12/data-objects-tuple-dataclass.html</link><pubDate>Wed, 23 Dec 2020 07:05:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/12/data-objects-tuple-dataclass.html</guid><description>&lt;p&gt;פוסט אורח מאת &lt;a href="https://www.linkedin.com/in/lior-elbaz-991685199/"&gt;ליאור אלבז&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ליאור הוא מפתח תוכנה צעיר ומוכשר מאוד, עובד כעת בחברת &lt;a href="http://deepinstinct.com/"&gt;דיפ אינסטינקט&lt;/a&gt;. ליאור משקיע את מרבית שעות היום שלו בפיתוח ובלמידה של טכנולוגיות חדשות. לא צריך לדבר איתו יותר מ5 דק׳ כדי להבין שהוא חי את עולם התוכנה ועוד יעשה דברים גדולים.&lt;/p&gt;</description></item><item><title>הגרסה החדשה של pip - 20.3</title><link>https://tomercode-hugo-blog.pages.dev/2020/12/pip-203.html</link><pubDate>Sun, 13 Dec 2020 07:12:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/12/pip-203.html</guid><description>&lt;p&gt;אתם בטח שואלים את עצמכם - למה שאכתוב פוסט על גרסה כל כך ספציפית של pip?&lt;/p&gt;
&lt;p&gt;אז התשובה פשוטה. לפני מספר חודשים המפתחים של pip הכריזו על גרסה עם שינוי גדול ולפני כשבועיים בתאריך 30/11/20 יצאה גרסה 20.3 שכוללת שינוי די רציני. כל כך רציני שהמפתחים אשכרה עשו על זה סרטון.&lt;/p&gt;</description></item><item><title>איך decorators עובדים (פייתון)</title><link>https://tomercode-hugo-blog.pages.dev/2020/12/decorators.html</link><pubDate>Mon, 07 Dec 2020 08:16:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/12/decorators.html</guid><description>&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://tomercode-hugo-blog.pages.dev/images/posts/2020/12/decorators/image-01-8d18edda1b.png" alt=""&gt;&lt;/p&gt;
&lt;h3 id="מה-זה-decorators"&gt;מה זה decorators?&lt;/h3&gt;
&lt;p&gt;דקורטורים הם קונספט פשוט ועוצמתי שקיים כמעט בכל שפת high level, נמצא בשימוש נרחב כמעט בכל פרויקט ומאפשר למשתמש להוסיף פונקציונאליות לפעולות מבלי להתערב במימוש הפעולה.&lt;/p&gt;
&lt;p&gt;לדוגמה:&lt;/p&gt;
&lt;p&gt;יכולה להיות לי הפונקציה הבאה say_hello שמדפיסה את המחרוזת hello&lt;/p&gt;</description></item><item><title>ניהול חבילות וסביבות בפייתון - pipenv</title><link>https://tomercode-hugo-blog.pages.dev/2020/11/pipenv.html</link><pubDate>Tue, 17 Nov 2020 07:55:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/11/pipenv.html</guid><description>&lt;p&gt;בפוסט הקודם](/2020/11/venv.html) דיברתי על היתרון של סביבה וירטואלית בפייתון והצגתי את הכלי venv.&lt;/p&gt;
&lt;p&gt;בשנת 2018 נוצר הכלי pipenv שמטרתו לפתור בעיות נפוצות ב pip, ב venv ובעבודה עם קובץ ה requirements עליו דיברנו בפוסט הקודם.&lt;/p&gt;</description></item><item><title>סביבות מבודדות בפייתון - venv &amp; pip</title><link>https://tomercode-hugo-blog.pages.dev/2020/11/venv.html</link><pubDate>Thu, 05 Nov 2020 07:56:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/11/venv.html</guid><description>&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://tomercode-hugo-blog.pages.dev/images/posts/2020/11/venv/image-01-d1b73718c6.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="הקדמה"&gt;הקדמה&lt;/h2&gt;
&lt;p&gt;כשאנחנו עובדים עם פייתון ורוצים להשתמש ביכולות הקהילה העצומות שלה, נרצה להשתמש בחבילות שאנשים אחרים כתבו.&lt;/p&gt;
&lt;p&gt;לשם שיתוף החבילות, מפתחי פייתון יצרו את &lt;strong&gt;pip&lt;/strong&gt; package installer for python שמטרתו לאפשר התקנה ושדרוג פשוטים של חבילות פייתון אל מול מקור מסוים.&lt;/p&gt;</description></item><item><title>מחשבות על coupling ועל dependency injection</title><link>https://tomercode-hugo-blog.pages.dev/2020/10/coupling-dependency-injection.html</link><pubDate>Sun, 25 Oct 2020 07:23:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/10/coupling-dependency-injection.html</guid><description>&lt;p&gt;אם הייתי צריך לבחור עקרון אחד לכתיבת קוד טוב וללכת איתו, זה היה לכתוב קוד שהוא loosely coupled.&lt;/p&gt;
&lt;p&gt;הפוסט הבא מדבר על החשיבות של כתיבת קוד בצימודיות נמוכה ועל איך הזרקת תלויות יכולה לעזור לנו עם הנושא.&lt;/p&gt;</description></item><item><title>מה זה singleton ולמה לא כדאי להשתמש בו?</title><link>https://tomercode-hugo-blog.pages.dev/2020/10/singleton.html</link><pubDate>Sun, 18 Oct 2020 10:35:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/10/singleton.html</guid><description>&lt;p&gt;זהו פוסט קצר שמטרתו להציג את תבנית העיצוב singleton ומדוע אינני ממליץ להשתמש בה.&lt;/p&gt;
&lt;p&gt;הפוסט הינו חלק מסדרה שמטרתה לדבר על כתיבת קוד רע ו-anti-patterns בתחום עיצוב התוכנה.&lt;/p&gt;
&lt;h2 id="מה-זה-סינגלטון"&gt;מה זה סינגלטון&lt;/h2&gt;
&lt;p&gt;סינגלטון היא תבנית עיצוב ממשפחת ה creational, שמטרתה להגביל את יצירת המופעים של מחלקה מסוימת למופע יחיד, משתמשים בתבנית הזו על מנת שלא ליצור התנגשות בין אובייקטים בפעולות כמו כתיבה לזכרון, קובץ דאטאבייס וכו׳.&lt;/p&gt;</description></item><item><title>מה חדש בפייתון 3.9</title><link>https://tomercode-hugo-blog.pages.dev/2020/10/39.html</link><pubDate>Mon, 12 Oct 2020 07:03:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/10/39.html</guid><description>&lt;p&gt;בשבוע שעבר שוחררה גרסת &lt;a href="https://www.python.org/downloads/"&gt;פייתון 3.9&lt;/a&gt; והיא כרגיל מביאה עמה כל מיני דברים מעניינים.&lt;/p&gt;
&lt;p&gt;כשמשתחררת גרסה של פייתון, בדרך כלל ה release notes מחולקים לנושאים כמו:&lt;/p&gt;
&lt;p&gt;syntax features, built-in features, new features in the standard library, Interpreter improvements, and new library modules.&lt;/p&gt;</description></item><item><title>הפרדה לתתי פרויקט באמצעות git submodules</title><link>https://tomercode-hugo-blog.pages.dev/2020/09/git-submodules.html</link><pubDate>Thu, 24 Sep 2020 06:29:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/09/git-submodules.html</guid><description>&lt;p&gt;פעמים רבות כשאנחנו מתחילים פרויקט איננו יודעים מה יהיה גודלו הסופי, כמה מחלקות הוא יכיל, ואיך יראו התלויות. לפעמים, כמה שלא ננסה לתכנן את הכל מראש, נגיע למצב בו אנחנו רוצים להפריד חלק מה-codebase שלנו לפרויקט נפרד.&lt;/p&gt;</description></item><item><title>הדרך הנכונה היחידה לכתוב קוד?</title><link>https://tomercode-hugo-blog.pages.dev/2020/09/blog-post.html</link><pubDate>Sun, 13 Sep 2020 18:37:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2020/09/blog-post.html</guid><description>&lt;p&gt;בחמש השנים שאני כותב קוד, יצא לי לקרוא לא מעט קוד רע ולכתוב אפילו יותר קוד רע.&lt;/p&gt;
&lt;p&gt;אם אני צריך לקחת את כל חתיכות הקוד הרעות שכתבתי ולמצוא מה משותף לכולן - כנראה שהתשובה תהיה כמות הפרטים בשכבות האבסטרקציה העליונות. מטרת הפוסט הקרוב היא להעביר באופן קצר וקולע, מה היא הדרך היחידה בעיני לכתוב קוד טוב ואיך לגרום לזה לקרות כמעט כמו קסם.&lt;/p&gt;</description></item><item><title>עיצוב תוכנה - Top-down programming</title><link>https://tomercode-hugo-blog.pages.dev/2019/09/top-down-programming.html</link><pubDate>Sat, 28 Sep 2019 19:53:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2019/09/top-down-programming.html</guid><description>&lt;p&gt;בפוסט של היום אני רוצה לדבר על קונספט שישמע תחילה בסיסי ומובן מאליו, אבל לאורך הקריאה אני ממליץ מאוד לשאול את עצמינו בשיא הביקורתיות - האם כך אני באמת כותב קוד? ואם לא, אולי כדאי לי להתחיל?
כולנו יודעים שרוב התוכנות, המערכות, ואפילו הסקריפטים שאנחנו כותבים לא מסתכמים בפונקצייה אחת ולא בשתיים. ככל שתוכנה שאנחנו כותבים מורכבת יותר וככל שאנחנו נרצה להפוך את הקוד שלנו לקריא יותר וגנרי יותר כנראה יהיו בו יותר קלאסים ופונקציות.
במקום לדבר הרבה ולנסות להסביר את המונח באופן אבסטרקטי, פשוט אצלול לדוגמה (top-down לא?).
דמיינו שאתם עובדים בצוות בו עובדים עם מכונות וירטואליות על גבי vcenter (פלטפורמת ניהול vms של vmware) והאוטומציה שרצה מייצרת הרבה מכונות. את המכונות הללו אנחנו רוצים לנקות בסוף כל יום עבודה כדי לא לצבור עומס מיותר, בהנחה שאם מישהו יצטרך את אחת המכונות הוא פשוט יזיז אותם לתיקייה אחרת.&lt;/p&gt;</description></item><item><title>Stop using time.sleep everywhere!</title><link>https://tomercode-hugo-blog.pages.dev/2019/03/stop-using-timesleep-everywhere.html</link><pubDate>Sun, 31 Mar 2019 07:46:00 +0000</pubDate><guid>https://tomercode-hugo-blog.pages.dev/2019/03/stop-using-timesleep-everywhere.html</guid><description>&lt;p&gt;I think that almost every automation infrastructure that I have seen has the &lt;strong&gt;time.sleep()&lt;/strong&gt; method at least once.&lt;/p&gt;
&lt;p&gt;Sometimes it comes from laziness and sometimes from a lack of knowledge, but I believe that in at least 90% of the times, sleep methods should not appear in our code.&lt;/p&gt;</description></item></channel></rss>