Forwarded from Armon technical logs (armon Taheri)
تئوری ارزش های سهگانه و حل مسائل کامیونیتی تهلاگ
Forwarded from DevTwitter | توییت برنامه نویسی
یکی از رپو هایی که تغییراتش واقعا جذابه
لیست mcp server هایی که هر روز داره بهش اضافه میشه هر کدوم میتونه نحوه کارهای کلاسیک رو توی محدوده خودش تغییر بده
https://github.com/modelcontextprotocol/servers
@DevTwitter | <Shahin/>
لیست mcp server هایی که هر روز داره بهش اضافه میشه هر کدوم میتونه نحوه کارهای کلاسیک رو توی محدوده خودش تغییر بده
https://github.com/modelcontextprotocol/servers
@DevTwitter | <Shahin/>
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
رئیس مرکز ملی فضای مجازی: حادثه اخیر برای بانک سپه «سرقت داده» بوده و نه «هک».
این اتفاق بدون نفوذ خارجی و از طرقی مانند افشای داخلی یا خطای انسانی رخ داده است.
نتایج بررسیها بهزودی منتشر خواهد شد.
@TheRaymondDev
این اتفاق بدون نفوذ خارجی و از طرقی مانند افشای داخلی یا خطای انسانی رخ داده است.
نتایج بررسیها بهزودی منتشر خواهد شد.
@TheRaymondDev
Forwarded from Geek Alerts
خانه ۵۰ هزار دلاری Boxabl ایلان ماسک
ایلان ماسک یه دونه از این خونهها داره که البته خبرگذاریها به اشتباه نوشتن اینجا زندگی میکنه
ولی در واقع این خونه مهمونی گرفتنش هست که خارج از شهره و خودش داخل تگزاس خونه داره
استارتاپ این خونهها که تاحالا ۲۰۰ خونه ماژولار ساخته این خونههارو بین ۱۵۰۰۰ تا ۵۰ هزار دلار میفروشه، و لوکیشن دلخواه شما ارسال و نصب میکنه
مزیتشون نسبت به خونههای پیشساخته اینه که چون ماژولار هستن میشه خونههای بزرگ رو با ۱ کامیون ارسال کرد و در محل نصبش کنن.
https://geekalerts.org/boxabl-tiny-housetiny-home-logistics-elon-musk/
@geekalerts
ایلان ماسک یه دونه از این خونهها داره که البته خبرگذاریها به اشتباه نوشتن اینجا زندگی میکنه
ولی در واقع این خونه مهمونی گرفتنش هست که خارج از شهره و خودش داخل تگزاس خونه داره
استارتاپ این خونهها که تاحالا ۲۰۰ خونه ماژولار ساخته این خونههارو بین ۱۵۰۰۰ تا ۵۰ هزار دلار میفروشه، و لوکیشن دلخواه شما ارسال و نصب میکنه
مزیتشون نسبت به خونههای پیشساخته اینه که چون ماژولار هستن میشه خونههای بزرگ رو با ۱ کامیون ارسال کرد و در محل نصبش کنن.
https://geekalerts.org/boxabl-tiny-housetiny-home-logistics-elon-musk/
@geekalerts
Forwarded from کدنویس یکروزه
This media is not supported in your browser
VIEW IN TELEGRAM
پر کردن فرم بدون کیبورد با میکروفون
STT یا قابلیت Speech To Text
این قابلیت در هستهی مرورگر Chrome و Edge کاملاً تست شده و همونطور که می بینید در موبایل هم مرورگر کروم داره به خوبی جواب میده.
طبعاً نمیشه انتظار داشت چنین قابلیتی در هر مرورگر دیگه مثل فایرفاکس هم باشه یا در سافاری (اپل) هم احتمالاً دستورات متفاوتی برای ساختش لازمه.
کدی که گذاشته ام براتون کاملاً کامنت گذاری شده تا نمونه های کاربردی دیگه رو باهاش بسازیم.
بدون نیاز به هیچ هوش مصنوعی مستقل یا اجرای کتابخانهی کد خارجی!
STT یا قابلیت Speech To Text
این قابلیت در هستهی مرورگر Chrome و Edge کاملاً تست شده و همونطور که می بینید در موبایل هم مرورگر کروم داره به خوبی جواب میده.
طبعاً نمیشه انتظار داشت چنین قابلیتی در هر مرورگر دیگه مثل فایرفاکس هم باشه یا در سافاری (اپل) هم احتمالاً دستورات متفاوتی برای ساختش لازمه.
کدی که گذاشته ام براتون کاملاً کامنت گذاری شده تا نمونه های کاربردی دیگه رو باهاش بسازیم.
بدون نیاز به هیچ هوش مصنوعی مستقل یا اجرای کتابخانهی کد خارجی!
Forwarded from کدنویس یکروزه
form-mic.htm
54.3 KB
فرم قابل پر کردن با میکروفون!
بهتره اینو فقط در مرورگرهای Chrome یا Edge ران کنید و حتماً روی یک سِرور مثل XAMPP باشه.
تمام خطوط کامنت گذاری شدن که بشه با خوندنش انواع فرمهای مشابه رو ساخت!
فیلمی هم الان در موردش میذارم.
بهتره اینو فقط در مرورگرهای Chrome یا Edge ران کنید و حتماً روی یک سِرور مثل XAMPP باشه.
تمام خطوط کامنت گذاری شدن که بشه با خوندنش انواع فرمهای مشابه رو ساخت!
فیلمی هم الان در موردش میذارم.
Forwarded from کدنویس یکروزه (پدرام رحیمی)
لینک های آموزشی وردپرس
همین که بدونیم ۳۰ درصد از سایت های وب با این نرم افزار ساخته شدن کافیه که برنامه ای برای یادگیری اون داشته باشیم. بنابراین با جستجوی کلمه ی wordpress در کانال "کدنویس یکروزه" مطالب مختلف دیگه و کتاب های لازم رو و همچنین جزوه ی PHP رو دریافت کنید.
نصب وردپرس در آندروید
ساخت قالب و افزونه وردپرس
افزایش امنیت در وردپرس
ویدیوی آموزش کامل وردپرس
ساخت سریع فروشگاه در وردپرس
نصب سریع وردپرس آفلاین
#wordpress #وردپرس
همین که بدونیم ۳۰ درصد از سایت های وب با این نرم افزار ساخته شدن کافیه که برنامه ای برای یادگیری اون داشته باشیم. بنابراین با جستجوی کلمه ی wordpress در کانال "کدنویس یکروزه" مطالب مختلف دیگه و کتاب های لازم رو و همچنین جزوه ی PHP رو دریافت کنید.
نصب وردپرس در آندروید
ساخت قالب و افزونه وردپرس
افزایش امنیت در وردپرس
ویدیوی آموزش کامل وردپرس
ساخت سریع فروشگاه در وردپرس
نصب سریع وردپرس آفلاین
#wordpress #وردپرس
Forwarded from کدنویس یکروزه
گروه L L M - O P S برپانمای هوش مصنوعی
جامع ترین مرجع محتوای این علم به فارسی
👇 .:: کلیک کن ::. 👇
به نشانی : https://t.iss.one/LLM_OPS
هم آوردی خودمانی و پر نشاط از علاقمندان به
جدیدترین دستاورد فن آورانهی بشر
عضویت آزاد برای علاقمندان
و مرجعی بی نظیر از
ابـزار ها و اخبــار و آمـوزش ها
...
جامع ترین مرجع محتوای این علم به فارسی
👇 .:: کلیک کن ::. 👇
به نشانی : https://t.iss.one/LLM_OPS
هم آوردی خودمانی و پر نشاط از علاقمندان به
جدیدترین دستاورد فن آورانهی بشر
عضویت آزاد برای علاقمندان
و مرجعی بی نظیر از
ابـزار ها و اخبــار و آمـوزش ها
...
Forwarded from یه شعر (Poem Bot)
حافظ | غزلیات | غزل شمارهٔ ۱۸۹
طایر دولت اگر باز گذاری بکند
یار بازآید و با وصل قراری بکند
دیده را دستگه در و گهر گر چه نماند
بخورد خونی و تدبیر نثاری بکند
دوش گفتم بکند لعل لبش چاره من
هاتف غیب ندا داد که آری بکند
کس نیارد بر او دم زند از قصه ما
مگرش باد صبا گوش گذاری بکند
داده ام باز نظر را به تذروی پرواز
بازخواند مگرش نقش و شکاری بکند
شهر خالی ست ز عشاق بود کز طرفی
مردی از خویش برون آید و کاری بکند
کو کریمی که ز بزم طربش غم زده ای
جرعه ای درکشد و دفع خماری بکند
یا وفا یا خبر وصل تو یا مرگ رقیب
بود آیا که فلک زین دو سه کاری بکند
حافظا گر نروی از در او هم روزی
گذری بر سرت از گوشه کناری بکند
#حافظ | گنجور
📍@iipoem
طایر دولت اگر باز گذاری بکند
یار بازآید و با وصل قراری بکند
دیده را دستگه در و گهر گر چه نماند
بخورد خونی و تدبیر نثاری بکند
دوش گفتم بکند لعل لبش چاره من
هاتف غیب ندا داد که آری بکند
کس نیارد بر او دم زند از قصه ما
مگرش باد صبا گوش گذاری بکند
داده ام باز نظر را به تذروی پرواز
بازخواند مگرش نقش و شکاری بکند
شهر خالی ست ز عشاق بود کز طرفی
مردی از خویش برون آید و کاری بکند
کو کریمی که ز بزم طربش غم زده ای
جرعه ای درکشد و دفع خماری بکند
یا وفا یا خبر وصل تو یا مرگ رقیب
بود آیا که فلک زین دو سه کاری بکند
حافظا گر نروی از در او هم روزی
گذری بر سرت از گوشه کناری بکند
#حافظ | گنجور
📍@iipoem
Forwarded from Gopher Academy
🔵 عنوان مقاله
Mockery v3: Create Mock Implementations of Interfaces
🟢 خلاصه مقاله:
در این مقاله، ادعا شده است که Mockery v3 توانایی کنار زدن تمام فریمورکهای مبتنی بر رابط برنامهنویسی در محیط برنامهنویسی گو را دارد. نویسنده با بررسی ویژگیهای Mockery v3 و مقایسه آن با سایر فریمورکهای موجود، تلاش میکند تا این ادعای بزرگ را ثابت کند. همچنین، خوانندگان تشویق میشوند که برای بررسی دقیقتر و استفاده از این ابزار به صفحه اصلی آن مراجعه کنند، جایی که میتوانند اطلاعات کامل، نظرات کاربران، و دستورالعملهای دانلود را پیدا کنند.
🟣لینک مقاله:
https://golangweekly.com/link/168167/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Mockery v3: Create Mock Implementations of Interfaces
🟢 خلاصه مقاله:
در این مقاله، ادعا شده است که Mockery v3 توانایی کنار زدن تمام فریمورکهای مبتنی بر رابط برنامهنویسی در محیط برنامهنویسی گو را دارد. نویسنده با بررسی ویژگیهای Mockery v3 و مقایسه آن با سایر فریمورکهای موجود، تلاش میکند تا این ادعای بزرگ را ثابت کند. همچنین، خوانندگان تشویق میشوند که برای بررسی دقیقتر و استفاده از این ابزار به صفحه اصلی آن مراجعه کنند، جایی که میتوانند اطلاعات کامل، نظرات کاربران، و دستورالعملهای دانلود را پیدا کنند.
🟣لینک مقاله:
https://golangweekly.com/link/168167/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
topofmind.dev
Announcing Mockery v3 - Top of Mind
The last Go code generation framework you'll ever need.
Forwarded from DevTwitter | توییت برنامه نویسی
واقعاً از گشتن تو چتهای بلند با AI خسته شده بودم، امروز نشستم یه اکستنشن کروم ساختم
روی هر پیام شماره میزنه، با دو تا دکمه هم میتونی راحت بالا پایین بری
فعلاً از ChatGPT، Claude و Grok پشتیبانی میکنه
اسمش: AI Chat Scroller
https://github.com/H120/AI-Chat-Scroller
@DevTwitter | <Hossein/>
روی هر پیام شماره میزنه، با دو تا دکمه هم میتونی راحت بالا پایین بری
فعلاً از ChatGPT، Claude و Grok پشتیبانی میکنه
اسمش: AI Chat Scroller
https://github.com/H120/AI-Chat-Scroller
@DevTwitter | <Hossein/>
Forwarded from Md Daily (Mahan)
قسمت اول
داشتم رایتاپ I Thought It Was a Safe Deploy… Until Checkout Disappeared رو میخوندم نکات جالبی توش داشت. طرف مسئول بخش payments بوده. شروع میکنه به استقرار نسخه ی جدید. تست ها گرفته شده بوده و روی محیط Dev همه چی اوکی به نظر میرسید. همه چیز آروم بوده تا اینکه Slack اشون پر شده بود از پیام های: «صفحه چکاوت لود نمیشه.»، «صفحه سفیده هیچی نمیاد.» ، «اپل پِی (Apple Pay) کار نمیکنه.».
این یعنی قطعی کل فرایند پرداخت. نویسنده میگفت با اینکه قبلا راجب outage یا همون از کار افتادن ها خونده بوده ولی این اولین تجربش بوده و از همه بدتر توی محیط پروداکشن اتفاق افتاده بوده. اون لحظه هایی که آدرنالین زده بالا، سعی میکنی خودت رو آروم نشون بدی ولی مغزت داره از فکر و خیال و استرس میترکه.
دقیقا چیشده بود؟
بخش payments از اون جاهاست که وقتی همه چی مرتب و درست کار میکنه، خیلی ساکت و آروم اون پشتصحنه به کارش ادامه میده... اما وای به روزی که یه جای کارش بلنگه و یه چیزی خراب بشه؛ اونوقته که تبدیل به یه هرج و مرج میشه.
چند وقت پیش SDK مربوط به Apple Pay رو آپدیت کرده بودند چون نسخهای که داشتن استفاده میکردن، دیگه توسط خود تیم اپل پشتیبانی نمیشد و منسوخ شده بود. نسخهی جدید هم یه سری تغییرات توی API contract داشت—که بیشترش مربوط به این بود که موقع شروع کار و مقداردهی اولیه ورودیها چطوری باید بهش داده بشن. اینا هم تغییرات لازم رو انجام داده بودن، همه چی رو روی محیط توسعه تست شده بود و به نظر میرسید همه چی ردیفه. یه مدت میگذره و میبینن هشدار های تعداد خطاهای مربوط به Apple Pay یهو خیلی بالا رفته. فهمیدن که اون SDK آپدیتشده، به یه تابع خاص وابسته بود که توی بعضی از مرورگرهای قدیمیتر پشتیبانی نمیشد. نتیجهاش این بود که همون اولِ فرآیند پرداخت، یه خطای زمان اجرا اتفاق میافتاد؛ یعنی انقدر زود این خطا رخ میداد که کلاً کل تجربهی چکاوت رو از کار مینداخت. نه دیگه خبری از Apple Pay بود. نه هیچ روش پرداخت دیگهای کار میکرد. فقط یه صفحهی سفیدِ خالی جلو چشم کاربر بود.
⚠️ اول از همه: با دیباگ کردن شروع نکنید!
قبل از اینکه وارد جزئیات بشیم، یه درس خیلی مهم هست:
چون وقتی پای کد شما وسطه، مغزتون اتوماتیک میره تو این فاز که:
«خب، باگ کجاست؟ چی خراب شده؟ باید زود پیداش کنم و درستش کنم.»
ولی نکته اینجاست: دیباگ کردن زمانبره.
و در تمام مدتی که شما دارین لاگها رو زیر و رو میکنین و فرضیههای مختلف رو تست میکنین، کاربرهای واقعی اون بیرون گیر افتادن و نمیتونن کارشون رو انجام بدن.
درآمد شرکت داره کم میشه و از همه مهمتر، کاربرها دارن یه تجربهی خیلی بد رو از سر میگذرونن.
مگه اینکه دقیقاً بدونین مشکل چیه و صددرصد مطمئن باشین که راه حلش امنه و میشه خیلی سریع دیپلویاش کرد، وگرنه بهترین و عاقلانهترین کار اینه:
کامیتی که باعث مشکل شده رو برگردونین عقب (Revert). کد قبلی رو دوباره دیپلوی کنین (Redeploy). اوضاع رو پایدار کنین.
شاید این کار خیلی قهرمانانه به نظر نرسه، ولی این مسئولانهترین و درستترین کاریه که در اون لحظه میتونین انجام بدین.هدف اصلی تو اون شرایط این نیست که زیر فشار و استرس دیباگ کنین. هدف اینه که جلوی ضرر بیشتر رو بگیرین بعدش، وقتی بحران تموم شد، اون موقع با خیال راحت وقت دارین که برین و دقیق بفهمین که واقعاً چی خراب شده بود.
این ها هم دقیقا همین کارو کردن اون کامیت مشکلساز رو رولبک کردن و اون صفحهی سفید خالی غیبش زد. بخش چکاوت دوباره برگشت سر جاش. کاربرا دوباره میتونستن پرداختهاشون رو انجام بدن. حالا وقشته که کشف کرد دلیلش چی بود. شروع کردن به بررسی لاگها، تست کردن مرورگرها، و تلاش برای بازتولید مشکل تو یه محیط کنترلشده...
—-
⬅️ ادامه در قسمت بعدی
💡 تا قسمت بعدی مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
داشتم رایتاپ I Thought It Was a Safe Deploy… Until Checkout Disappeared رو میخوندم نکات جالبی توش داشت. طرف مسئول بخش payments بوده. شروع میکنه به استقرار نسخه ی جدید. تست ها گرفته شده بوده و روی محیط Dev همه چی اوکی به نظر میرسید. همه چیز آروم بوده تا اینکه Slack اشون پر شده بود از پیام های: «صفحه چکاوت لود نمیشه.»، «صفحه سفیده هیچی نمیاد.» ، «اپل پِی (Apple Pay) کار نمیکنه.».
این یعنی قطعی کل فرایند پرداخت. نویسنده میگفت با اینکه قبلا راجب outage یا همون از کار افتادن ها خونده بوده ولی این اولین تجربش بوده و از همه بدتر توی محیط پروداکشن اتفاق افتاده بوده. اون لحظه هایی که آدرنالین زده بالا، سعی میکنی خودت رو آروم نشون بدی ولی مغزت داره از فکر و خیال و استرس میترکه.
دقیقا چیشده بود؟
بخش payments از اون جاهاست که وقتی همه چی مرتب و درست کار میکنه، خیلی ساکت و آروم اون پشتصحنه به کارش ادامه میده... اما وای به روزی که یه جای کارش بلنگه و یه چیزی خراب بشه؛ اونوقته که تبدیل به یه هرج و مرج میشه.
چند وقت پیش SDK مربوط به Apple Pay رو آپدیت کرده بودند چون نسخهای که داشتن استفاده میکردن، دیگه توسط خود تیم اپل پشتیبانی نمیشد و منسوخ شده بود. نسخهی جدید هم یه سری تغییرات توی API contract داشت—که بیشترش مربوط به این بود که موقع شروع کار و مقداردهی اولیه ورودیها چطوری باید بهش داده بشن. اینا هم تغییرات لازم رو انجام داده بودن، همه چی رو روی محیط توسعه تست شده بود و به نظر میرسید همه چی ردیفه. یه مدت میگذره و میبینن هشدار های تعداد خطاهای مربوط به Apple Pay یهو خیلی بالا رفته. فهمیدن که اون SDK آپدیتشده، به یه تابع خاص وابسته بود که توی بعضی از مرورگرهای قدیمیتر پشتیبانی نمیشد. نتیجهاش این بود که همون اولِ فرآیند پرداخت، یه خطای زمان اجرا اتفاق میافتاد؛ یعنی انقدر زود این خطا رخ میداد که کلاً کل تجربهی چکاوت رو از کار مینداخت. نه دیگه خبری از Apple Pay بود. نه هیچ روش پرداخت دیگهای کار میکرد. فقط یه صفحهی سفیدِ خالی جلو چشم کاربر بود.
⚠️ اول از همه: با دیباگ کردن شروع نکنید!
قبل از اینکه وارد جزئیات بشیم، یه درس خیلی مهم هست:
وقتی با یه مشکل جدی و قطعی (outage) تو محیط پروداکشن روبرو میشین، اولین غریزهتون نباید این باشه که بپرین سراغ دیباگ کردن.
چون وقتی پای کد شما وسطه، مغزتون اتوماتیک میره تو این فاز که:
«خب، باگ کجاست؟ چی خراب شده؟ باید زود پیداش کنم و درستش کنم.»
ولی نکته اینجاست: دیباگ کردن زمانبره.
و در تمام مدتی که شما دارین لاگها رو زیر و رو میکنین و فرضیههای مختلف رو تست میکنین، کاربرهای واقعی اون بیرون گیر افتادن و نمیتونن کارشون رو انجام بدن.
درآمد شرکت داره کم میشه و از همه مهمتر، کاربرها دارن یه تجربهی خیلی بد رو از سر میگذرونن.
مگه اینکه دقیقاً بدونین مشکل چیه و صددرصد مطمئن باشین که راه حلش امنه و میشه خیلی سریع دیپلویاش کرد، وگرنه بهترین و عاقلانهترین کار اینه:
کامیتی که باعث مشکل شده رو برگردونین عقب (Revert). کد قبلی رو دوباره دیپلوی کنین (Redeploy). اوضاع رو پایدار کنین.
شاید این کار خیلی قهرمانانه به نظر نرسه، ولی این مسئولانهترین و درستترین کاریه که در اون لحظه میتونین انجام بدین.هدف اصلی تو اون شرایط این نیست که زیر فشار و استرس دیباگ کنین. هدف اینه که جلوی ضرر بیشتر رو بگیرین بعدش، وقتی بحران تموم شد، اون موقع با خیال راحت وقت دارین که برین و دقیق بفهمین که واقعاً چی خراب شده بود.
این ها هم دقیقا همین کارو کردن اون کامیت مشکلساز رو رولبک کردن و اون صفحهی سفید خالی غیبش زد. بخش چکاوت دوباره برگشت سر جاش. کاربرا دوباره میتونستن پرداختهاشون رو انجام بدن. حالا وقشته که کشف کرد دلیلش چی بود. شروع کردن به بررسی لاگها، تست کردن مرورگرها، و تلاش برای بازتولید مشکل تو یه محیط کنترلشده...
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from جامعهٔ فارسی زبان کیدیای (Sohrab)
در جدید ترین نگارش این هفته در کیدیای، تغییراتی روی میزکار و برنامههای اون صورت گرفته.
پایشگر سامانه کیدیای در نگارش ۶.۴.۰ در زبانه برنامه، برنامههایی که در پس زمینه درحال اجرا هستند رو به شما در یک گروه نشون میده بدون اینکه نیاز به تغییر زبانه داشته باشید.
@kde_fa
پایشگر سامانه کیدیای در نگارش ۶.۴.۰ در زبانه برنامه، برنامههایی که در پس زمینه درحال اجرا هستند رو به شما در یک گروه نشون میده بدون اینکه نیاز به تغییر زبانه داشته باشید.
@kde_fa
Forwarded from جامعهٔ فارسی زبان کیدیای (Sohrab)
ماژول بلوتوث در نسخه ۶.۴.۰ کیدیای این امکان رو داره تا نشون بده به چند دستگاه همزمان متصل هستید.
@kde_fa
@kde_fa
Forwarded from محتوای آزاد سهراب
جز اینکه اولین کاری که بعد از نصب اوبونتو باید کرد، نصب دبیان یا یک توزیع دیگس، ولی جدی هدف از نوشتن این دست مقالات مضحک چیه؟😂
بازش کنی کارهای ابتدایی که هرکس بعد از نصب هرچیزی میکنه، اپدیت، تنظیم داک و......
@SohrabContents
بازش کنی کارهای ابتدایی که هرکس بعد از نصب هرچیزی میکنه، اپدیت، تنظیم داک و......
@SohrabContents
Forwarded from Linuxor ?
دنبال انیمیشن Html Css برای Loading میگشتم اینو پیدا کردم توش کلی Loading های حوصله سر نبر داره از ساده بگیر تا آونگ و ماشین لباس شویی ...
cssloaders.github.io
@Linuxor
cssloaders.github.io
@Linuxor
Forwarded from DevTwitter | توییت برنامه نویسی
تو مراحل توسعه ایجنت، رسیدم به مرحلهای که باید با مدل کاری میکردم که بتونه کوئری بزنه و تو دیتابیس برگرده و دیتا استخراج کنه
برا همین یه دیتابیس بزرگ ساختم تا روش این کارو بکنم
تو این ریپازیتوری میتونید دیتابیس و اطلاعات کاملش رو ببینید
https://github.com/AbbasRafatpanah/ecommerce-database
@DevTwitter | <عباس رفعتپناه/>
برا همین یه دیتابیس بزرگ ساختم تا روش این کارو بکنم
تو این ریپازیتوری میتونید دیتابیس و اطلاعات کاملش رو ببینید
https://github.com/AbbasRafatpanah/ecommerce-database
@DevTwitter | <عباس رفعتپناه/>
Forwarded from Ninja Learn | نینجا لرن (Denver)
سیستم مدیریت وابستگی در FastAPI
یکی از بهترین ویژگی های FastAPI، سیستم مدیریت وابستگی(Dependnecy Injection) اون هست، این سیستم باعث میشه کد ما تمیز تر، تست پذیر تر و قابل توسعه تر بشه.
بهتره برای درک بهتر این پست درمورد Dependency Injectionرو مطالعه کنید تا با پایه و اساس این مبحث آشنا بشین.
Depends چیه؟
این کلاس توی FastAPI، برای مدیریت وابستگی ها استفاده میشه. به زبان ساده Depends یه راهه که بتونیم بک تابع یا آبجکت رو به صورت خودکار به فانکشن های دیگه تزریق کنیم بدون اینکه دستی اونارو صدا بزنیم یا بخونیم.
با یه مثال ساده شروع میکنیم:
اینجا
FastAPI به صورت خودکار
چرا این سیستم خوبه؟
وابستگی ها مدیریت شده و قابل کنترل میشن
کد تست پذیر تر میشه
ساختار پروژه ماژولار میشه
لاجیک لایه های مختلف جدا میشه و تغییرات ساده تر میشن
اگه ازش استفاده نکنیم چی؟
خب با استفاده نکردن از این ویژگی یه کمک بزرگ رو از دست میدین. به طور مثال اگه وابستگی ها تو در تو باشن شما میتونید فقط با همین ویژگی کلی به تمیزی کدتون کمک کنید.
توی مثال بالا میتونید چندین لایه از وابستگی رو ببینید که به خوبی با Depends مدیریت شدن. حالا اگه این سیستم وجود نداشت چی؟
اگه اون سیستم وجود نداشت باید قبل از هرکاری دونه دونه سرویس ها و لایه های پایین تر رو صدا میزدین و نتیجه اونهارو به همدیگه پاس میدادین. درواقع Depends میاد هر وابستگی ای که تعیین کرده باشین رو قبل از ورود به بدنه ی فانکشن اجرا میکنه و نتیجه ی وابستگی رو به آرگومان فانکشن پاس میده. در نتیجه شما در اولین خط بدنه ی فانکشن همه ی نتایجی که میخواین رو از طریق آرگومان ها در اختیار دارین.
پشت صحنه چه اتفاقی میوفته؟
FastAPI از بالا شروع کرد به نگاه کردن:
دید require_admin به get_current_user نیاز داره، بعد دید get_current_user هم به get_token نیاز داره، پس اول get_token اجرا شد، بعد get_current_user بعد هم require_admin. هربار خروجی یه فانکشن، ورودی فانکشن بعدی شد. درنهایت اگه مشکلی نباشه میرسیم به endpoint.
از کجا فهمید چی رو به کجا بفرسته؟
خب باید بگم که FastAPI به شدت به تایپ هینت ها وابسته است و خیلی ازشون استفاده میکنه. همین Depends هم با استفاده از تایپ هینت ها جای مقادیر رو درک میکنه. یه فانکشن توی پایین ترین لایه یه آرگومان با تایپ Header داره؟ خب Depends اون آرگومان رو توی درخواست دریافت میکنه به اون فانکشن میرسونه.
کجا ازش استفاده کنیم؟
هر وابستگی ای که نیاز داره یه پارامتری رو مستقیما از درخواست بگیره و روش پردازش انجام بده، و به نحوی قبل از فانکشن endpoint اجرا بشه و نتیجه ی آماده داشته باشه(درست همونطور که گفتم، قبل از بدنه ی اصلی فانکشن) باید با Depends استفاده بشه. مثلا گرفتن توکن از هدر یا چک کردن دسترسی ها، اتصال به دیتابیس
اما اگه فانکشنی که میخواید استفاده کنید ارتباط مستقیم با بدنه و اطلاعات ورودی از درخواست نداره و فقط برای انجام کاری یا پردازش داخلی باشه نیازی به Depends نداره. مثل ثبت نام کاربر که ممکنه دیتای خام و پردازش نشده ای از درخواست نیاز نداشته باشه و صرفا اطلاعات رو توی دیتابیس ذخیره میکنه
سعی کردم هر سوالی که برای خودم توی فرآیند این سیستم پیش اومد رو به بهترین شکل پوشش بدم. اگه مشکلی توی درک داشتین یا سوالی براتون مونده بود توی کامنت ها بپرسین.
➖➖➖➖➖➖➖➖➖➖
یکی از بهترین ویژگی های FastAPI، سیستم مدیریت وابستگی(Dependnecy Injection) اون هست، این سیستم باعث میشه کد ما تمیز تر، تست پذیر تر و قابل توسعه تر بشه.
بهتره برای درک بهتر این پست درمورد Dependency Injectionرو مطالعه کنید تا با پایه و اساس این مبحث آشنا بشین.
Depends چیه؟
این کلاس توی FastAPI، برای مدیریت وابستگی ها استفاده میشه. به زبان ساده Depends یه راهه که بتونیم بک تابع یا آبجکت رو به صورت خودکار به فانکشن های دیگه تزریق کنیم بدون اینکه دستی اونارو صدا بزنیم یا بخونیم.
با یه مثال ساده شروع میکنیم:
from fastapi import FastAPI, Depends
app = FastAPI()
def get_db():
db = "Database Connection"
try:
yield db
finally:
print("Closing DB connection")
@app.get("/items/")
def read_items(db = Depends(get_db)):
return {"db_connection": db}
اینجا
read_items خودش مستقیم سشن دیتابیس رو نمیسازه، فقط میگه: من به یه سشن دیتابیس نیاز دارم.FastAPI به صورت خودکار
get_db رو صدا میزنه و نتیجه رو به db میده.چرا این سیستم خوبه؟
وابستگی ها مدیریت شده و قابل کنترل میشن
کد تست پذیر تر میشه
ساختار پروژه ماژولار میشه
لاجیک لایه های مختلف جدا میشه و تغییرات ساده تر میشن
اگه ازش استفاده نکنیم چی؟
خب با استفاده نکردن از این ویژگی یه کمک بزرگ رو از دست میدین. به طور مثال اگه وابستگی ها تو در تو باشن شما میتونید فقط با همین ویژگی کلی به تمیزی کدتون کمک کنید.
from fastapi import Header, HTTPException, APIRouter, Depends
router = APIRouter()
def get_token(token: str = Header(...)):
return token
def get_current_user(token: str = Depends(get_token)):
user = {"username": "abolfazl", "role": "admin"}
return user
def require_admin(user: dict = Depends(get_current_user)):
if user["role"] != "admin":
raise HTTPException(status_code=403, detail="Not authorized")
return user
def list_users_service():
return [{"username": "a"}, {"username": "b"}]
@router.get("/users")
def list_users(admin_user: dict = Depends(require_admin)):
users = list_users_service()
return users
توی مثال بالا میتونید چندین لایه از وابستگی رو ببینید که به خوبی با Depends مدیریت شدن. حالا اگه این سیستم وجود نداشت چی؟
def list_users():
token = get_token()
user = get_current_user(token)
admin_user = require_admin(user)
...
اگه اون سیستم وجود نداشت باید قبل از هرکاری دونه دونه سرویس ها و لایه های پایین تر رو صدا میزدین و نتیجه اونهارو به همدیگه پاس میدادین. درواقع Depends میاد هر وابستگی ای که تعیین کرده باشین رو قبل از ورود به بدنه ی فانکشن اجرا میکنه و نتیجه ی وابستگی رو به آرگومان فانکشن پاس میده. در نتیجه شما در اولین خط بدنه ی فانکشن همه ی نتایجی که میخواین رو از طریق آرگومان ها در اختیار دارین.
پشت صحنه چه اتفاقی میوفته؟
FastAPI از بالا شروع کرد به نگاه کردن:
دید require_admin به get_current_user نیاز داره، بعد دید get_current_user هم به get_token نیاز داره، پس اول get_token اجرا شد، بعد get_current_user بعد هم require_admin. هربار خروجی یه فانکشن، ورودی فانکشن بعدی شد. درنهایت اگه مشکلی نباشه میرسیم به endpoint.
از کجا فهمید چی رو به کجا بفرسته؟
خب باید بگم که FastAPI به شدت به تایپ هینت ها وابسته است و خیلی ازشون استفاده میکنه. همین Depends هم با استفاده از تایپ هینت ها جای مقادیر رو درک میکنه. یه فانکشن توی پایین ترین لایه یه آرگومان با تایپ Header داره؟ خب Depends اون آرگومان رو توی درخواست دریافت میکنه به اون فانکشن میرسونه.
کجا ازش استفاده کنیم؟
هر وابستگی ای که نیاز داره یه پارامتری رو مستقیما از درخواست بگیره و روش پردازش انجام بده، و به نحوی قبل از فانکشن endpoint اجرا بشه و نتیجه ی آماده داشته باشه(درست همونطور که گفتم، قبل از بدنه ی اصلی فانکشن) باید با Depends استفاده بشه. مثلا گرفتن توکن از هدر یا چک کردن دسترسی ها، اتصال به دیتابیس
اما اگه فانکشنی که میخواید استفاده کنید ارتباط مستقیم با بدنه و اطلاعات ورودی از درخواست نداره و فقط برای انجام کاری یا پردازش داخلی باشه نیازی به Depends نداره. مثل ثبت نام کاربر که ممکنه دیتای خام و پردازش نشده ای از درخواست نیاز نداشته باشه و صرفا اطلاعات رو توی دیتابیس ذخیره میکنه
سعی کردم هر سوالی که برای خودم توی فرآیند این سیستم پیش اومد رو به بهترین شکل پوشش بدم. اگه مشکلی توی درک داشتین یا سوالی براتون مونده بود توی کامنت ها بپرسین.
#️⃣ #fastapi #python #backend
➖➖➖➖➖➖➖➖➖➖
🥷🏻 CHANNEL | GROUP