تلگرام و لینکدین شده پر از پست های GPT و LLM. خیلی وقتا حتی پستی که نوشتن رو نمیخونن. این مورد تو رزومه هم خیلییی دیده میشه!!!
این پستو ببینید،
نوشته مزایاش بهبود عملکرد، و maintainability عه. نگه داری و توسعه اش راحت تره.
بعد تو چالش هاش نوشته پیچیدست و نگه داریش سخته ؟؟؟!!!.
الان این متن پارادوکسه 😁
گرچه پرفومنس قطعا بهتر نمیشه، و قطعا افت میکنه. چون خیلی وقتا یک چیزه کمی از اون کوئری میخواین، ولی مجبورین چون اینترفیسش هست کلشو بگیرین. و یا ممکنه تو گرفتن یک کوئری، جوین هایی بخوره یا مراحلی انجام شه که اصلا نیاز نبوده تو اون یوزکیسی که دارین reuse میکنید از اون کوئری اینترفیس
@PyBackendHub
این پستو ببینید،
نوشته مزایاش بهبود عملکرد، و maintainability عه. نگه داری و توسعه اش راحت تره.
بعد تو چالش هاش نوشته پیچیدست و نگه داریش سخته ؟؟؟!!!.
الان این متن پارادوکسه 😁
گرچه پرفومنس قطعا بهتر نمیشه، و قطعا افت میکنه. چون خیلی وقتا یک چیزه کمی از اون کوئری میخواین، ولی مجبورین چون اینترفیسش هست کلشو بگیرین. و یا ممکنه تو گرفتن یک کوئری، جوین هایی بخوره یا مراحلی انجام شه که اصلا نیاز نبوده تو اون یوزکیسی که دارین reuse میکنید از اون کوئری اینترفیس
@PyBackendHub
👍21😁4❤1
Forwarded from Sadra Codes
من یک پروژه رو چطور توسعه میدم؟ شما چطور توسعه میدید؟!
ابتدای کار، نه خبری از git هست، نه vscode و نه هیچ لینتر یا پلاگین خاصی. صرفا یه ایده زده به سرم و فقط میخوام تست کنم ببینم عملی هست یا نه. (به عبارتی، آیا پتانسیل پیشرفت یا ارزش اینو داره که زمان و انرژی بیشتری روش بذارم؟)
در حدی که کل کار توی یه main.py در میاد! 🫡
اگه پتانسیل رو داشت و به نتایج خوبی رسیدم، راجع بهش پست میذارم و نظر و فیدبک میگیرم. رفقا.. اگه ابزار Xی وجود داشت که مشکلاتی از قبیل W و Y و Z رو حل میکرد، شما ازش استفاده میکردید؟ بنظرتون به چه صورت رلیز شه؟ چطوری در دسترس باشه؟ از قابلیتهایی که دوست دارید داشته باشه بگید و..
محدودیتها رو میسنجم. مشکلاتی که کاربرها ممکنه باهاش روبهرو باشن. موانعی که ممکنه وجود داشته باشه و مانع دسترسیشون به این ابزار باشه. نمیام ابتدا فیدبک بگیرم و بعد تست کنم ببینم آیا پیادهسازی میشه یا نه.
بعد از این مرحله، تصمیم میگیرم مدل پروژه به چه شکل باشه. کاربراش رو تعیین میکنم و یه مدل توسعه خوب به کار میگیرم و شروع میکنم. این مرحله خیلی مفصله و خب فعلا زیاده بهش نمیپردازم اینجا.
افراد زیادی هستن توی مارکت که تحت عنوان Solopreneur کار میکنن. یک سری از ابزارهایی که شما امروز ازش استفاده میکنید (یا شاید پولی بابتش میپردازید) توسط این افراد ساخته شدن. بارها دیدم که یه سریاشون حتی میگن، تمرکزشون صرفا روی دلیور کردن فیچر به هر قیمتیه. حتی از version controller هم استفاده نمیکنن!! فقط push میکنن. هیچ تستی هم ندارن! آنچنان کدبیس سنگینی ندارن و اکثر تمرکزشون روی Shipmentه.
مارک لو (Marc Lou) چند وقت پیش یه توییت زد که یکی از ابزارهایی که قبلا درست کرده بود رو بازخرید کرده. گویا ابزار رو طراحی کرده بود و بخاطر شرایط مالی مجبور شد به قیمت ۱۰ هزارتا واگذار کنه به یه تیم دیگه. چند روز پیش بعد از چند ماه دوباره پروژه رو از اون تیم خرید (رایگان) و داره روش کار میکنه. نکتهای که این وسط هست، زمانی که این پروژه دست Marc نبود، هیچ توسعهای روش انجام نمیشد! حالا خود مارک دلیلش رو دقیق نگفت ولی من حدس میزدم به خاطر همون طرز تفکر تمرکز ۱۰۰ درصدی روی shipment باشه.
یعنی مارک با این طرز تفکر توسعه این ایده رو پیش برده بود و خب خروجی کار نهایتا یه تیکه کده که صرفا کار میکنه، پول میسازه و ظاهرا استیبله ولی به چه قیمت؟ نه تست داره. نه تمیزه. نه داکیومنت درستی داره و واسه onboard شدن روش چارهای جز ریویو کردن کد ندارید. خب تمام این مسائل باعث میشن که توسعه این پروژه واسه یه تیم جدید یه معضل باشه. اگه قرار باشه این ایده پول بیشتری بسازه، همزمان با تغییر نیاز کاربرها باید اون ایده هم تغییر کنه و نیازها رو براورده کنه.
ولی خب اون تیم با این خرید، یه حجم خوبی از مارکت رو از وجود خودش آگاه کرد و خیلیم ضرر نکرد!
توییت مارک: https://twitter.com/marc_louvion/status/1834574006827250020
دوست دارم نظر شما رو هم بدونم. شما چیکار میکنید؟ فلوی توسعه شما به چه شکله؟
ابتدای کار، نه خبری از git هست، نه vscode و نه هیچ لینتر یا پلاگین خاصی. صرفا یه ایده زده به سرم و فقط میخوام تست کنم ببینم عملی هست یا نه. (به عبارتی، آیا پتانسیل پیشرفت یا ارزش اینو داره که زمان و انرژی بیشتری روش بذارم؟)
در حدی که کل کار توی یه main.py در میاد! 🫡
اگه پتانسیل رو داشت و به نتایج خوبی رسیدم، راجع بهش پست میذارم و نظر و فیدبک میگیرم. رفقا.. اگه ابزار Xی وجود داشت که مشکلاتی از قبیل W و Y و Z رو حل میکرد، شما ازش استفاده میکردید؟ بنظرتون به چه صورت رلیز شه؟ چطوری در دسترس باشه؟ از قابلیتهایی که دوست دارید داشته باشه بگید و..
محدودیتها رو میسنجم. مشکلاتی که کاربرها ممکنه باهاش روبهرو باشن. موانعی که ممکنه وجود داشته باشه و مانع دسترسیشون به این ابزار باشه. نمیام ابتدا فیدبک بگیرم و بعد تست کنم ببینم آیا پیادهسازی میشه یا نه.
بعد از این مرحله، تصمیم میگیرم مدل پروژه به چه شکل باشه. کاربراش رو تعیین میکنم و یه مدل توسعه خوب به کار میگیرم و شروع میکنم. این مرحله خیلی مفصله و خب فعلا زیاده بهش نمیپردازم اینجا.
افراد زیادی هستن توی مارکت که تحت عنوان Solopreneur کار میکنن. یک سری از ابزارهایی که شما امروز ازش استفاده میکنید (یا شاید پولی بابتش میپردازید) توسط این افراد ساخته شدن. بارها دیدم که یه سریاشون حتی میگن، تمرکزشون صرفا روی دلیور کردن فیچر به هر قیمتیه. حتی از version controller هم استفاده نمیکنن!! فقط push میکنن. هیچ تستی هم ندارن! آنچنان کدبیس سنگینی ندارن و اکثر تمرکزشون روی Shipmentه.
مارک لو (Marc Lou) چند وقت پیش یه توییت زد که یکی از ابزارهایی که قبلا درست کرده بود رو بازخرید کرده. گویا ابزار رو طراحی کرده بود و بخاطر شرایط مالی مجبور شد به قیمت ۱۰ هزارتا واگذار کنه به یه تیم دیگه. چند روز پیش بعد از چند ماه دوباره پروژه رو از اون تیم خرید (رایگان) و داره روش کار میکنه. نکتهای که این وسط هست، زمانی که این پروژه دست Marc نبود، هیچ توسعهای روش انجام نمیشد! حالا خود مارک دلیلش رو دقیق نگفت ولی من حدس میزدم به خاطر همون طرز تفکر تمرکز ۱۰۰ درصدی روی shipment باشه.
یعنی مارک با این طرز تفکر توسعه این ایده رو پیش برده بود و خب خروجی کار نهایتا یه تیکه کده که صرفا کار میکنه، پول میسازه و ظاهرا استیبله ولی به چه قیمت؟ نه تست داره. نه تمیزه. نه داکیومنت درستی داره و واسه onboard شدن روش چارهای جز ریویو کردن کد ندارید. خب تمام این مسائل باعث میشن که توسعه این پروژه واسه یه تیم جدید یه معضل باشه. اگه قرار باشه این ایده پول بیشتری بسازه، همزمان با تغییر نیاز کاربرها باید اون ایده هم تغییر کنه و نیازها رو براورده کنه.
ولی خب اون تیم با این خرید، یه حجم خوبی از مارکت رو از وجود خودش آگاه کرد و خیلیم ضرر نکرد!
توییت مارک: https://twitter.com/marc_louvion/status/1834574006827250020
دوست دارم نظر شما رو هم بدونم. شما چیکار میکنید؟ فلوی توسعه شما به چه شکله؟
X (formerly Twitter)
Marc Lou (@marc_louvion) on X
I JUST GOT MY FIRST STARTUP BACK 🤩🤩🤩
I sold https://t.co/frmGhcWKcQ a year ago for $10,000 ($500 MRR) because I ran out of money.
It made sense financially but I felt like I lost a part of me (I worked for 6 months on that gamified habit tracker)
Last…
I sold https://t.co/frmGhcWKcQ a year ago for $10,000 ($500 MRR) because I ran out of money.
It made sense financially but I felt like I lost a part of me (I worked for 6 months on that gamified habit tracker)
Last…
👍10❤2🔥2
Sadra Codes
من یک پروژه رو چطور توسعه میدم؟ شما چطور توسعه میدید؟! ابتدای کار، نه خبری از git هست، نه vscode و نه هیچ لینتر یا پلاگین خاصی. صرفا یه ایده زده به سرم و فقط میخوام تست کنم ببینم عملی هست یا نه. (به عبارتی، آیا پتانسیل پیشرفت یا ارزش اینو داره که زمان…
حق!
ایلان ماسک یک حرف قشنگ زد، گفت هرچی قدم ها کوچیک تر باشه و سریعتر باشه، بهتره تا قدم های بلند تر. این موضوع چه استارت آپ چه FAANG صدق میکنه. حالا چرا؟
۳ نقطه تصور کنید تو یک بردار مختصات، اولی میشه software requirement. چیزی که دارید کد میزنیدش. دومی میشه business requirement. چیزی که بیزنس گفته نیاز هست بهش. و سومی میشه user needs. چیزی که واقعا یوزر نیاز داره.
این ۳ نقطه تو واقعیت نزدیک بهم نیستن. چون بیزنس هیچوقت درک ۱۰۰درصدی از نیاز کاربر نداره، و نرم افزار سعی میکنه چیزی که بیزنس گفته رو پیاده کنه. نیاز انسان دائم در حال تغییره، پس نقطه سوم در حال تغییره رو نمودار. حالا منطقیه شما یک مسیر خیلی بزرگ رو برید؟ اون موقع میبینید دیگه اون نیازمندی وجود نداره وقتی به مرحله shipment رسیدین! ولیقدم هاتونو هرچی کوچیک و سریعتر کنید اون نقطه در حال حرکت رو بهش بهش نزدیک تر میشید و دنبالش میکنید.
@PyBackendHub
ایلان ماسک یک حرف قشنگ زد، گفت هرچی قدم ها کوچیک تر باشه و سریعتر باشه، بهتره تا قدم های بلند تر. این موضوع چه استارت آپ چه FAANG صدق میکنه. حالا چرا؟
۳ نقطه تصور کنید تو یک بردار مختصات، اولی میشه software requirement. چیزی که دارید کد میزنیدش. دومی میشه business requirement. چیزی که بیزنس گفته نیاز هست بهش. و سومی میشه user needs. چیزی که واقعا یوزر نیاز داره.
این ۳ نقطه تو واقعیت نزدیک بهم نیستن. چون بیزنس هیچوقت درک ۱۰۰درصدی از نیاز کاربر نداره، و نرم افزار سعی میکنه چیزی که بیزنس گفته رو پیاده کنه. نیاز انسان دائم در حال تغییره، پس نقطه سوم در حال تغییره رو نمودار. حالا منطقیه شما یک مسیر خیلی بزرگ رو برید؟ اون موقع میبینید دیگه اون نیازمندی وجود نداره وقتی به مرحله shipment رسیدین! ولیقدم هاتونو هرچی کوچیک و سریعتر کنید اون نقطه در حال حرکت رو بهش بهش نزدیک تر میشید و دنبالش میکنید.
@PyBackendHub
👍44❤5
Forwarded from Python BackendHub
این meme رو دیدم خیلی جالب بود… عمق دانشنتون از PostgreSQL تا چه حدیه؟ یکم حس بی سوادی دست داد بهم :)) تو یکی از پستا چند روز پیش راجب یکیش پرداخته بودم 😁
Every sql operator is actually a join? WTF?😂
@ManiFoldsPython
Every sql operator is actually a join? WTF?😂
@ManiFoldsPython
👍9🤯8
Python BackendHub
این meme رو دیدم خیلی جالب بود… عمق دانشنتون از PostgreSQL تا چه حدیه؟ یکم حس بی سوادی دست داد بهم :)) تو یکی از پستا چند روز پیش راجب یکیش پرداخته بودم 😁 Every sql operator is actually a join? WTF?😂 @ManiFoldsPython
یک مقاله خیلی خوب برای توضیح دادن این میم:
https://avestura.dev/blog/explaining-the-postgres-meme
@PyBackendHub
https://avestura.dev/blog/explaining-the-postgres-meme
@PyBackendHub
Avestura's Blog
Explaining The Postgres Meme
Have you seen this legendary SQL iceberg meme? Let's talk about it while wearing our PostgreSQL hat!
❤8❤🔥2
یک پست خیلییی خوب دیدم تو لینکدین حیفم اومد باهاتون به اشتراک نذارم!
لینک پست
تو پست بعدی ترجمه شدشو با chatgpt میذارم
@PyBackendHub
لینک پست
تو پست بعدی ترجمه شدشو با chatgpt میذارم
@PyBackendHub
👍18❤2
مدیرها، بیخیال تیمهاتون بشید! لازم نیست کارمندها رو مثل بچههایی که نیاز به مراقبت دائم دارن، کنترل کنید.
اونا نباید برای داشتن زندگی شخصی بیرون از کار معذرتخواهی کنن.
به تیمتون اعتماد کنید که کار رو تحویل بدن. اینجوری یه محیط مثبت و مولد میسازید که همه میتونن توش رشد کنن.
استخدام افراد درست فقط شروع کاره. جادوی واقعی زمانی اتفاق میافته که بهشون اعتماد کنید و قدرت بدید.
اعتماد یعنی اینکه به تیمتون آزادی بدید که کارشون رو بدون دخالت مستقیم شما مدیریت کنن. این نشون میده که بهشون بهعنوان آدمهای بالغی که میتونن هم زندگی کاری و هم زندگی شخصیشون رو مدیریت کنن، احترام میذارید.
این فقط محدود به مرخصی و تعطیلات نیست.
بحث اینه که یه فرهنگ بسازید که آدمها توش احساس کنن میتونن کارشون رو به بهترین شکل ممکن انجام بدن - چه توی دفتر باشن، چه از راه دور کار کنن، یا حتی وسط روز کارهای شخصیشون رو انجام بدن.
تمرکز باید روی نتیجه باشه، نه “micromanagement”.
Micromanagement خلاقیت رو میکشه و انگیزه رو نابود میکنه.
اعتماد، برعکس، آدمها رو به بهترین عملکردشون تشویق میکنه.
وقتی به تیمتون مالکیت کارهاشون رو میدید و بهشون فضا میدید که موفق بشن، میبینید که چطور رشد میکنن.
چطور این فرهنگ رو بسازیم:
- افراد درست رو استخدام کنید: مطمئن شید که مهارت دارن و با ارزشهای شرکت همسو هستن.
- به تیمتون اعتماد کنید: بذارید مالک کارهاشون باشن و خودتون رو از دخالت مستقیم دور نگه دارید.
- آزادی بدید: بهشون اجازه بدید تصمیم بگیرن و ابزارهای لازم رو فراهم کنید.
- رهبران قوی تربیت کنید: مدیرها رو طوری آموزش بدید که بتونن تیمها رو حمایت کنن بدون اینکه کنترل کنن.
- ارتباطات رو باز نگه دارید: فضایی ایجاد کنید که آدمها احساس امنیت کنن و بتونن ایدهها و فیدبکهاشون رو راحت به اشتراک بذارن.
- موفقیتها رو جشن بگیرید: دستاوردها رو بشناسید و انگیزه رو بالا نگه دارید.
- از تعادل بین کار و زندگی حمایت کنید: به تعادل سالم تشویق کنید تا رفاه و بهرهوری بهتر بشه.
♻️ Neha K Puri
@PyBackendHub
اونا نباید برای داشتن زندگی شخصی بیرون از کار معذرتخواهی کنن.
به تیمتون اعتماد کنید که کار رو تحویل بدن. اینجوری یه محیط مثبت و مولد میسازید که همه میتونن توش رشد کنن.
استخدام افراد درست فقط شروع کاره. جادوی واقعی زمانی اتفاق میافته که بهشون اعتماد کنید و قدرت بدید.
اعتماد یعنی اینکه به تیمتون آزادی بدید که کارشون رو بدون دخالت مستقیم شما مدیریت کنن. این نشون میده که بهشون بهعنوان آدمهای بالغی که میتونن هم زندگی کاری و هم زندگی شخصیشون رو مدیریت کنن، احترام میذارید.
این فقط محدود به مرخصی و تعطیلات نیست.
بحث اینه که یه فرهنگ بسازید که آدمها توش احساس کنن میتونن کارشون رو به بهترین شکل ممکن انجام بدن - چه توی دفتر باشن، چه از راه دور کار کنن، یا حتی وسط روز کارهای شخصیشون رو انجام بدن.
تمرکز باید روی نتیجه باشه، نه “micromanagement”.
Micromanagement خلاقیت رو میکشه و انگیزه رو نابود میکنه.
اعتماد، برعکس، آدمها رو به بهترین عملکردشون تشویق میکنه.
وقتی به تیمتون مالکیت کارهاشون رو میدید و بهشون فضا میدید که موفق بشن، میبینید که چطور رشد میکنن.
چطور این فرهنگ رو بسازیم:
- افراد درست رو استخدام کنید: مطمئن شید که مهارت دارن و با ارزشهای شرکت همسو هستن.
- به تیمتون اعتماد کنید: بذارید مالک کارهاشون باشن و خودتون رو از دخالت مستقیم دور نگه دارید.
- آزادی بدید: بهشون اجازه بدید تصمیم بگیرن و ابزارهای لازم رو فراهم کنید.
- رهبران قوی تربیت کنید: مدیرها رو طوری آموزش بدید که بتونن تیمها رو حمایت کنن بدون اینکه کنترل کنن.
- ارتباطات رو باز نگه دارید: فضایی ایجاد کنید که آدمها احساس امنیت کنن و بتونن ایدهها و فیدبکهاشون رو راحت به اشتراک بذارن.
- موفقیتها رو جشن بگیرید: دستاوردها رو بشناسید و انگیزه رو بالا نگه دارید.
- از تعادل بین کار و زندگی حمایت کنید: به تعادل سالم تشویق کنید تا رفاه و بهرهوری بهتر بشه.
♻️ Neha K Puri
@PyBackendHub
👍34❤2👎2👏1
https://jsontopydantic.com/
خیلی خوبه. بهش جیسون میدین, بهتون مدل pydantic اون جیسون رو میده. برای integrate کردن api عالیه که سریع یک مدل داشته باشین.
یک ابزار دیگه هم هست که advance تره. یک cli tool هست که بر اساس openapi یا json یا xml براتون مدل پایندنتیک مینویسه.
https://github.com/koxudaxi/datamodel-code-generator/
@PyBackendHub
خیلی خوبه. بهش جیسون میدین, بهتون مدل pydantic اون جیسون رو میده. برای integrate کردن api عالیه که سریع یک مدل داشته باشین.
یک ابزار دیگه هم هست که advance تره. یک cli tool هست که بر اساس openapi یا json یا xml براتون مدل پایندنتیک مینویسه.
https://github.com/koxudaxi/datamodel-code-generator/
@PyBackendHub
Jsontopydantic
JSON to Pydantic
Convert JSON to Pydantic
🔥11👍3🖕2❤1
۲۷۰ هزار خط جیسون رو تو ۴ ثانیه فایل جنریت کرد.
برای همچین کاری از gpt استفاده نکنید بهتره چون:
۱. امکان خطا خیلی زیاده. جی پی تی یک LLM هست نمیتونه <فکر> کنه صرفا پترن مچ میکنه و یک ضرب و تقسیم ساده هم اشتباه میکنه. پس هیچوقت برای کد جنریت کردن ازش استفاده نکنید.
۲. سواگر یا redoc یا خانواده این ابزار ها همه از openapi استفاده میکنن. openapi یک Specification هست برای نوشتن api های rest. و داره از json schema استفاده میکنه. جیسون اسکیما هم دوباره یک Specification هست که تایپ ولیدیشن رو بین همه زبون ها استاندارد کرده. این ابزار AI نیست. چون تعداد حالت محدوده, و جیسون مشخصه چه چیزایی میتونه داخلش باشه پس میتونه به صورت static درست parse کنه.
اگه از جیسون پایندنتیک بسازین احتمال اینکه یک خروجی باشه که تو اون مثالتون نبوده هست. ولی اگه از json schema پایندنتیک بسازین, دیگه امکان نداره اشتباه parse کنید.
@PyBackendHub
برای همچین کاری از gpt استفاده نکنید بهتره چون:
۱. امکان خطا خیلی زیاده. جی پی تی یک LLM هست نمیتونه <فکر> کنه صرفا پترن مچ میکنه و یک ضرب و تقسیم ساده هم اشتباه میکنه. پس هیچوقت برای کد جنریت کردن ازش استفاده نکنید.
۲. سواگر یا redoc یا خانواده این ابزار ها همه از openapi استفاده میکنن. openapi یک Specification هست برای نوشتن api های rest. و داره از json schema استفاده میکنه. جیسون اسکیما هم دوباره یک Specification هست که تایپ ولیدیشن رو بین همه زبون ها استاندارد کرده. این ابزار AI نیست. چون تعداد حالت محدوده, و جیسون مشخصه چه چیزایی میتونه داخلش باشه پس میتونه به صورت static درست parse کنه.
اگه از جیسون پایندنتیک بسازین احتمال اینکه یک خروجی باشه که تو اون مثالتون نبوده هست. ولی اگه از json schema پایندنتیک بسازین, دیگه امکان نداره اشتباه parse کنید.
@PyBackendHub
👍18👎4❤1🔥1🖕1
Python BackendHub
داشتم کد مینوشتم یک گافه خیلی بد دادم اصلا حواسم نبود. باگه این کد کجاست؟ @PyBackendHub
یک راهنمایی بزرگ:لاجیک کد مشکل نداره.
خروجی کنسول اینه:
در صورتی که باید Ma: Mani و Hir: Hirad باشه. چرا؟
@PyBackendHub
خروجی کنسول اینه:
Ma: Hirad
Hir: Hirad
در صورتی که باید Ma: Mani و Hir: Hirad باشه. چرا؟
@PyBackendHub
🤔1
Python BackendHub
داشتم کد مینوشتم یک گافه خیلی بد دادم اصلا حواسم نبود. باگه این کد کجاست؟ @PyBackendHub
برای اینکه بفهمین چطور کار میکنه، اول یه مثال سادهتر رو در نظر بگیرین:
قاعدتاً باید خروجیها ۴، ۵ و ۶ باشن، درسته؟ چون یه لیست از تابعهای lambda داره که هر کدوم یه عدد میگیرن و x رو بهش اضافه میکنن.
ولی در واقع خروجیها ۶، ۶ و ۶ هستن! چرا این اتفاق میافته؟
چون این lambdaها تو این مثال closure هستن. تو پایتون، توابع closure زمانی اجرا میشن که صدا زده بشن، نه وقتی که تعریف میشن! و به متغیرهایی که تو scopeشون هست رفرنس میزنن.
تو این مثال، x یه بار تو foo تعریف شده و یه بار تو main. وقتی تو main اون closureها رو صدا میزنه که تو foo تعریف شده بودن، xی که استفاده میکنن همونیه که تو foo بوده، نه اون x تو main.یعنی الان تو این مثال x داخل lambda عدد ۳ میشه نه ۵.
چرا؟ چون داخلش توابع closure یک cell هست که arguement رو ذخیره کرده. و تو همون اسکوپی که تعریف شده اون مدام آپدیت میشه اگه تغییر کنه. بنابراین اینجا چون scope تابع main دیگه با closureمون یکی نیست پس دیگه تغییر نمیکنه.
یک مقاله برای درک بهتر این موضوع تو medium
یک بلاگ راجب اشتباهات رایج تو پایتون این شکلی
@PyBackendHub
adders = []
for x in [1, 2, 3]:
adders.append(lambda number: number + x)
for adder in adders:
print(adder(3))
قاعدتاً باید خروجیها ۴، ۵ و ۶ باشن، درسته؟ چون یه لیست از تابعهای lambda داره که هر کدوم یه عدد میگیرن و x رو بهش اضافه میکنن.
ولی در واقع خروجیها ۶، ۶ و ۶ هستن! چرا این اتفاق میافته؟
چون این lambdaها تو این مثال closure هستن. تو پایتون، توابع closure زمانی اجرا میشن که صدا زده بشن، نه وقتی که تعریف میشن! و به متغیرهایی که تو scopeشون هست رفرنس میزنن.
def foo():
adders = []
for x in [1, 2, 3]:
adders.append(lambda number: number + x)
return adders
def main():
adders = foo()
x = 5
for adder in adders:
print(adder(3))
تو این مثال، x یه بار تو foo تعریف شده و یه بار تو main. وقتی تو main اون closureها رو صدا میزنه که تو foo تعریف شده بودن، xی که استفاده میکنن همونیه که تو foo بوده، نه اون x تو main.یعنی الان تو این مثال x داخل lambda عدد ۳ میشه نه ۵.
چرا؟ چون داخلش توابع closure یک cell هست که arguement رو ذخیره کرده. و تو همون اسکوپی که تعریف شده اون مدام آپدیت میشه اگه تغییر کنه. بنابراین اینجا چون scope تابع main دیگه با closureمون یکی نیست پس دیگه تغییر نمیکنه.
یک مقاله برای درک بهتر این موضوع تو medium
یک بلاگ راجب اشتباهات رایج تو پایتون این شکلی
@PyBackendHub
Medium
Late Binding Variables: It’s a Trap!
A quick overview of a Python feature that can produce surprising bugs
🔥11👍1
https://martinheinz.dev/blog/92
یک پست خوب از بنیامین که تو گروه گذاشته بود که چرا نباید از ایمیج Alpine استفاده کنید. سه نکته همیشه موقع تصمیم گیری یادتون باشه:
۱. خیلی کم پیش میاد که یک چیزی خوبه مطلق باشه. همین که قدرت تصمیم گیری تو اپلیکیشن بالغی برای شما فراهم شده یعنی یک ترید آف وجود داشته که maintainer ها گذاشتن خودتون تصمیم بگیرید. اینکه ایمیج سایز کمتر بهتره واقعا جمله چرتیه! درستش اینه که ایمیج چیزه اضافه ای نداشته باشه که نیاز نداشته باشین و مراحل بیلدش درست باشه.
۲. همیشه تحقیق کنید. پیرو مورد یک, خیلی وقتا نیازه که تصمیم گیری کنید. اگه چند تا آپشن دارین, گوگل کنید که چرا اون آپشن بده. و drawback های اون آپشن چیه. درکش کنید چطور کار میکنه. همینطوری از یک توتوریال برندارین کپی پیست کنید.
۳. بهتره داکیومنت که چرا اون تصمیم رو گرفتین. تحقیق کردین, دراوبک هارو متوجه شدید, و طبق یک منطقی یک چیزی رو انتخاب کردین. سعی کنید این پروسه رو داکیومنت کنید, چون ۲ ماه دیگه ممکنه یادتون نباشه چرا اون تصمیم رو گرفتین. و یا هم تیمی هاتون ممکنه بعدا گیج بشن چرا فلان تصمیم گرفته شده. تو این مثال فکر کنید یک نفر بگه خب ما این مشکلی که تو این مقاله گفته شده رو نداریم, پس میریم از ایمیج Alpine استفاده میکنیم. ۱ سال دیگه همون مشکل پیش میاد, چون فرضیاتی که داشتین موقع تصمیم گیری دیگه درست نیست. اشتراک دانش یکی از عناصر مهم پویایی یک تیم و پروداکته.
@PyBackendHub
یک پست خوب از بنیامین که تو گروه گذاشته بود که چرا نباید از ایمیج Alpine استفاده کنید. سه نکته همیشه موقع تصمیم گیری یادتون باشه:
۱. خیلی کم پیش میاد که یک چیزی خوبه مطلق باشه. همین که قدرت تصمیم گیری تو اپلیکیشن بالغی برای شما فراهم شده یعنی یک ترید آف وجود داشته که maintainer ها گذاشتن خودتون تصمیم بگیرید. اینکه ایمیج سایز کمتر بهتره واقعا جمله چرتیه! درستش اینه که ایمیج چیزه اضافه ای نداشته باشه که نیاز نداشته باشین و مراحل بیلدش درست باشه.
۲. همیشه تحقیق کنید. پیرو مورد یک, خیلی وقتا نیازه که تصمیم گیری کنید. اگه چند تا آپشن دارین, گوگل کنید که چرا اون آپشن بده. و drawback های اون آپشن چیه. درکش کنید چطور کار میکنه. همینطوری از یک توتوریال برندارین کپی پیست کنید.
۳. بهتره داکیومنت که چرا اون تصمیم رو گرفتین. تحقیق کردین, دراوبک هارو متوجه شدید, و طبق یک منطقی یک چیزی رو انتخاب کردین. سعی کنید این پروسه رو داکیومنت کنید, چون ۲ ماه دیگه ممکنه یادتون نباشه چرا اون تصمیم رو گرفتین. و یا هم تیمی هاتون ممکنه بعدا گیج بشن چرا فلان تصمیم گرفته شده. تو این مثال فکر کنید یک نفر بگه خب ما این مشکلی که تو این مقاله گفته شده رو نداریم, پس میریم از ایمیج Alpine استفاده میکنیم. ۱ سال دیگه همون مشکل پیش میاد, چون فرضیاتی که داشتین موقع تصمیم گیری دیگه درست نیست. اشتراک دانش یکی از عناصر مهم پویایی یک تیم و پروداکته.
@PyBackendHub
martinheinz.dev
Why I Will Never Use Alpine Linux Ever Again
<p>
Nowadays, Alpine Linux is one of the most popular options for container base images. Many people (maybe including you) use it for anything and everythi...
Nowadays, Alpine Linux is one of the most popular options for container base images. Many people (maybe including you) use it for anything and everythi...
👍16❤1👌1
یک گاز بدید ۴۰۰ ستاره بشه 😁
برای کسایی که نمیدونن این ریپو چیه, یکی از کامل ترین گاید لاین های نوشتن رزومست.
در آینده خیلی نزدیک به همین داکیومنت گایدلاین اختصاصی برای نوشتن رزومه بدون تجربه کاری هم میذارم.
داکیومنت
خود ریپو برای ستاره دادن
با تیم Flowcv هم در ارتباطم و اگه همه چیز خوب پیش بره در آینده کمی دورتر, اینترفیسی خواهیم داشت برای بنچمارک و tailor کردن رزومتون به صورت آنلاین (و یا از طریق CLI به صورت لوکال) با استفاده از نرم افزار رایگانشون.
@PyBackendHub
برای کسایی که نمیدونن این ریپو چیه, یکی از کامل ترین گاید لاین های نوشتن رزومست.
در آینده خیلی نزدیک به همین داکیومنت گایدلاین اختصاصی برای نوشتن رزومه بدون تجربه کاری هم میذارم.
داکیومنت
خود ریپو برای ستاره دادن
با تیم Flowcv هم در ارتباطم و اگه همه چیز خوب پیش بره در آینده کمی دورتر, اینترفیسی خواهیم داشت برای بنچمارک و tailor کردن رزومتون به صورت آنلاین (و یا از طریق CLI به صورت لوکال) با استفاده از نرم افزار رایگانشون.
@PyBackendHub
🔥28👍5
وات د فاک
یک پکیج داریم به اسم is odd تو جاوا اسکریپت
به صورت هفتگی ۳۰۰۰ هزار دانلود داره
و سایز آنپک پکیج هم ۶ کیلو بایته 💀
@PyBackendHub
یک پکیج داریم به اسم is odd تو جاوا اسکریپت
به صورت هفتگی ۳۰۰۰ هزار دانلود داره
و سایز آنپک پکیج هم ۶ کیلو بایته 💀
@PyBackendHub
🥴20😁9👍1🤣1
Forwarded from Python BackendHub (Mani)
یک مشکلی همیشه تو تستا وجود داره وقتی دارین از container استفاده میکنید
اینم اونه که container پورت میگیره. تستون به یک سری hostname و پورت دپندنسی داره و اینا خیلی راحت میتونن باهم conflict بخورن.
و خیلیمشکلات دیگه
و خیلیوقتا ماک یا استفاده از SQLite پاسخگو نیاز نیست مثلا ماگریشن دارین یا functionality خاصی از دیتابیس استفاده میکنید یا … و تستاتون flaky میشه
اکثر این مشکلات رو testcontainer حلشون کرده.
https://testcontainers.com/
@PyBackendHub
اینم اونه که container پورت میگیره. تستون به یک سری hostname و پورت دپندنسی داره و اینا خیلی راحت میتونن باهم conflict بخورن.
و خیلیمشکلات دیگه
و خیلیوقتا ماک یا استفاده از SQLite پاسخگو نیاز نیست مثلا ماگریشن دارین یا functionality خاصی از دیتابیس استفاده میکنید یا … و تستاتون flaky میشه
اکثر این مشکلات رو testcontainer حلشون کرده.
https://testcontainers.com/
@PyBackendHub
Testcontainers
Testcontainers is an opensource library for providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
👍9
Python BackendHub
یک مشکلی همیشه تو تستا وجود داره وقتی دارین از container استفاده میکنید اینم اونه که container پورت میگیره. تستون به یک سری hostname و پورت دپندنسی داره و اینا خیلی راحت میتونن باهم conflict بخورن. و خیلیمشکلات دیگه و خیلیوقتا ماک یا استفاده از SQLite پاسخگو…
من شروع به استفاده testcontainer کردم و واقعا خوبه.
اگه دیتابیستون رو میبرید رو pg چند آپتمایزشن میتونید انجام بدید که سرعت دیتابیستون خیلی بالا بره:
fsync=off
full_page_writes=off
shared_buffers=256MB
checkpoint_timeout=30min
checkpoint_completion_target=0.9
autovacuum=off
اینکه تک تک چی هستن رو توصیه میکنم گوگل کنید تو یک پست نمیگنجه بخوام کلش رو توضیح بدم. آف کردن این چیزا reliability دیتابیس رو به شدت پایین میاره ولی درعوض آپریشن های معمولی خیلی سریعتر انجام میشه مخصوصا fsync. و خب یک دیتابیس موقت تستی که قراره بعد تست بیاد پایین و پاک شه اصلا reliability براش معنایی نداره.
@PyBackendHub
اگه دیتابیستون رو میبرید رو pg چند آپتمایزشن میتونید انجام بدید که سرعت دیتابیستون خیلی بالا بره:
fsync=off
full_page_writes=off
shared_buffers=256MB
checkpoint_timeout=30min
checkpoint_completion_target=0.9
autovacuum=off
اینکه تک تک چی هستن رو توصیه میکنم گوگل کنید تو یک پست نمیگنجه بخوام کلش رو توضیح بدم. آف کردن این چیزا reliability دیتابیس رو به شدت پایین میاره ولی درعوض آپریشن های معمولی خیلی سریعتر انجام میشه مخصوصا fsync. و خب یک دیتابیس موقت تستی که قراره بعد تست بیاد پایین و پاک شه اصلا reliability براش معنایی نداره.
@PyBackendHub
👏9👍5
Forwarded from TorhamDev | تورهام 😳
سادگی همیشه خبر از پیچیدگی میده!
خیلی وقتها ما از کتابخونه و فریمورکها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو برامون خیلی راحت میکنن. اما اینجا یک چیزی گاهی فراموش میشه.
سادگی همیشه خبر از پیچیدگی میده که شما نمیبینیدش.
یا به عبارت دیگه
کدی که شما الان نمیزنید رو قبلا یکی دیگه زده.
و شاید بگید خوب این خوبه دیگه یارو کد برای ما زده و استفاده میکنیم و لذتشو میبریم. تو خیلی از مواقع این درسته، ولی امان از اون روزی که بخوایید یکچیزی رو تغییر بدید که فریمورک/کتابخونه براتون انجام داده :) اونجاست که این سادگی که ازش لذت میبردید تبدیل کابوس میشه :D
این رو نگفتم که بگم از جنگو استفاده نکنید یا فلان کتابخونه بده و ...
این گفتم که بدونید همیشه هر سادگی خوب نیست، گاهی بهتره تن به کار بدید و اون کد خودتون بزنید تا با نیاز شما هماهنگ باشه نه اینکه یک کتابخونه هزارخطی نصب کنید تا از ۱۰۰ خطش استفاده کنید.
@TorhamDevCH
خیلی وقتها ما از کتابخونه و فریمورکها استفاده میکنیم به خاطر اینکه یک کار رو ساده میشه باهاشون انجام داد، از جنگو استفاده میکنیم چون کار باهاش راحته، داخل جنگو از DRF و simple jwt استفاده میکنیم چون ساخت api و لاگین رو برامون خیلی راحت میکنن. اما اینجا یک چیزی گاهی فراموش میشه.
سادگی همیشه خبر از پیچیدگی میده که شما نمیبینیدش.
یا به عبارت دیگه
کدی که شما الان نمیزنید رو قبلا یکی دیگه زده.
و شاید بگید خوب این خوبه دیگه یارو کد برای ما زده و استفاده میکنیم و لذتشو میبریم. تو خیلی از مواقع این درسته، ولی امان از اون روزی که بخوایید یکچیزی رو تغییر بدید که فریمورک/کتابخونه براتون انجام داده :) اونجاست که این سادگی که ازش لذت میبردید تبدیل کابوس میشه :D
این رو نگفتم که بگم از جنگو استفاده نکنید یا فلان کتابخونه بده و ...
این گفتم که بدونید همیشه هر سادگی خوب نیست، گاهی بهتره تن به کار بدید و اون کد خودتون بزنید تا با نیاز شما هماهنگ باشه نه اینکه یک کتابخونه هزارخطی نصب کنید تا از ۱۰۰ خطش استفاده کنید.
@TorhamDevCH
👍35👎4🍌2❤1😁1
میتونید git-fame رو نصب کنید
و با وارد کردن این دستور, ببینید چند خط با یک پسوند الان رو سورس کد وجود داره که شما کامیت کردین؟ (کدایی که قبلا زده شده و پاک شده و دیگه تو سورس کد نیست رو حساب نمیکنه).
@PyBackendHub
و با وارد کردن این دستور, ببینید چند خط با یک پسوند الان رو سورس کد وجود داره که شما کامیت کردین؟ (کدایی که قبلا زده شده و پاک شده و دیگه تو سورس کد نیست رو حساب نمیکنه).
git-fame --incl '(.*)py$'
@PyBackendHub
👍11🔥7🥱2
This media is not supported in your browser
VIEW IN TELEGRAM
حق 👌
درواقع این همین <توهم بدن شناگر> هست. این باور جا افتاده که شناگر ها بدشون عالیه، چون شناگر هستن. درصورتی که این باور توهمه، و اگه کسی مثل شناگر ها ورزش کنه لزوما نمیتونه بدنش عالی باشه.
درواقع ریشه این مشکل اینجاست:
Correlation is not causation
که نمیتونم خوب ترجمش کنم
@PyBackendHub
درواقع این همین <توهم بدن شناگر> هست. این باور جا افتاده که شناگر ها بدشون عالیه، چون شناگر هستن. درصورتی که این باور توهمه، و اگه کسی مثل شناگر ها ورزش کنه لزوما نمیتونه بدنش عالی باشه.
درواقع ریشه این مشکل اینجاست:
Correlation is not causation
که نمیتونم خوب ترجمش کنم
@PyBackendHub
👍48👏6🤡4