Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Gopher Academy
🔵 عنوان مقاله
Mockery v3: Create Mock Implementations of Interfaces

🟢 خلاصه مقاله:

در این مقاله، ادعا شده است که Mockery v3 توانایی کنار زدن تمام فریمورک‌های مبتنی بر رابط برنامه‌نویسی در محیط برنامه‌نویسی گو را دارد. نویسنده با بررسی ویژگی‌های Mockery v3 و مقایسه آن با سایر فریمورک‌های موجود، تلاش می‌کند تا این ادعای بزرگ را ثابت کند. همچنین، خوانندگان تشویق می‌شوند که برای بررسی دقیق‌تر و استفاده از این ابزار به صفحه اصلی آن مراجعه کنند، جایی که می‌توانند اطلاعات کامل، نظرات کاربران، و دستورالعمل‌های دانلود را پیدا کنند.

🟣لینک مقاله:
https://golangweekly.com/link/168167/web


👑 @gopher_academy
واقعاً از گشتن تو چت‌های بلند با AI خسته شده بودم، امروز نشستم یه اکستنشن کروم ساختم
روی هر پیام شماره می‌زنه، با دو تا دکمه هم می‌تونی راحت بالا پایین بری
فعلاً از 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 بود. نه هیچ روش پرداخت دیگه‌ای کار می‌کرد. فقط یه صفحه‌ی سفیدِ خالی جلو چشم کاربر بود.

⚠️ اول از همه: با دیباگ کردن شروع نکنید!

قبل از اینکه وارد جزئیات بشیم، یه درس خیلی مهم هست:

وقتی با یه مشکل جدی و قطعی (outage) تو محیط پروداکشن روبرو می‌شین، اولین غریزه‌تون نباید این باشه که بپرین سراغ دیباگ کردن.


چون وقتی پای کد شما وسطه، مغزتون اتوماتیک می‌ره تو این فاز که:
«خب، باگ کجاست؟ چی خراب شده؟ باید زود پیداش کنم و درستش کنم.»

ولی نکته اینجاست: دیباگ کردن زمان‌بره.

و در تمام مدتی که شما دارین لاگ‌ها رو زیر و رو می‌کنین و فرضیه‌های مختلف رو تست می‌کنین، کاربرهای واقعی اون بیرون گیر افتادن و نمی‌تونن کارشون رو انجام بدن.
درآمد شرکت داره کم می‌شه و از همه مهم‌تر، کاربرها دارن یه تجربه‌ی خیلی بد رو از سر می‌گذرونن.

مگه اینکه دقیقاً بدونین مشکل چیه و صددرصد مطمئن باشین که راه حلش امنه و می‌شه خیلی سریع دیپلوی‌اش کرد، وگرنه بهترین و عاقلانه‌ترین کار اینه:

کامیتی که باعث مشکل شده رو برگردونین عقب (Revert). کد قبلی رو دوباره دیپلوی کنین (Redeploy). اوضاع رو پایدار کنین.

شاید این کار خیلی قهرمانانه به نظر نرسه، ولی این مسئولانه‌ترین و درست‌ترین کاریه که در اون لحظه می‌تونین انجام بدین.هدف اصلی تو اون شرایط این نیست که زیر فشار و استرس دیباگ کنین. هدف اینه که جلوی ضرر بیشتر رو بگیرین بعدش، وقتی بحران تموم شد، اون موقع با خیال راحت وقت دارین که برین و دقیق بفهمین که واقعاً چی خراب شده بود.

این ها هم دقیقا همین کارو کردن اون کامیت مشکل‌ساز رو رول‌بک کردن و اون صفحه‌ی سفید خالی غیبش زد. بخش چک‌اوت دوباره برگشت سر جاش. کاربرا دوباره می‌تونستن پرداخت‌هاشون رو انجام بدن. حالا وقشته که کشف کرد دلیلش چی بود. شروع کردن به بررسی لاگ‌ها، تست کردن مرورگرها، و تلاش برای بازتولید مشکل تو یه محیط کنترل‌شده...

—-

⬅️ ادامه در قسمت بعدی

💡 تا قسمت بعدی مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
در جدید ترین نگارش این هفته در کی‌دی‌ای، تغییراتی روی میزکار و برنامه‌های اون صورت گرفته.


پایشگر سامانه کی‌دی‌ای در نگارش ۶.۴.۰ در زبانه برنامه، برنامه‌هایی که در پس زمینه درحال اجرا هستند رو به شما در یک گروه نشون میده بدون اینکه نیاز به تغییر زبانه داشته باشید.


@kde_fa
ماژول بلوتوث در نسخه ۶.۴.۰ کی‌دی‌ای این امکان رو داره تا نشون بده به چند دستگاه همزمان متصل هستید.



@kde_fa
جز اینکه اولین کاری که بعد از نصب اوبونتو باید کرد، نصب دبیان یا یک توزیع دیگس، ولی جدی هدف از نوشتن این دست مقالات مضحک چیه؟😂


بازش کنی کارهای ابتدایی که هرکس بعد از نصب هرچیزی می‌کنه، اپدیت، تنظیم داک و......


@SohrabContents
Forwarded from Linuxor ?
دنبال انیمیشن Html Css برای Loading می‌گشتم اینو پیدا کردم توش کلی Loading های حوصله سر نبر داره از ساده بگیر تا آونگ و ماشین لباس شویی ...

cssloaders.github.io


@Linuxor
تو مراحل توسعه ایجنت، رسیدم به مرحله‌ای که باید با مدل کاری میکردم که بتونه کوئری بزنه و تو دیتابیس برگرده و دیتا استخراج کنه
برا همین یه دیتابیس بزرگ ساختم تا روش این کارو بکنم
تو این ریپازیتوری میتونید دیتابیس و اطلاعات کاملش رو ببینید
https://github.com/AbbasRafatpanah/ecommerce-database

@DevTwitter | <عباس رفعت‌پناه/>
Forwarded from Ninja Learn | نینجا لرن (Denver)
سیستم مدیریت وابستگی در FastAPI
یکی از بهترین ویژگی های 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
Forwarded from Linuxor ?
یه سری سایتا مد شده که قدرت پسوردتون و زمان هک شدنش رو بهتون نشون می‌ده

البته چیزی که بهتون نشون می‌ده تا قبل از وارد کردن پسوردتون توی input اعتبار داره !


@Linuxor
Forwarded from Meitix
https://meitix.hashnode.dev

آدرس بلاگم برای مقالات فنی
من خیلی گیم نمیزنم فقط شطرنج اونم گاهی .. ولی این بازی رو الان یروزه بکوب دارم بازی میکنم! بازی یه چیزی تو سبک Colossal Cave Adventure ولی با دستورات لینوکسی!
https://github.com/phyver/GameShell

@DevTwitter | <Nik/>
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
💎 #golden_sentence


Make it work, make it right, make it fast.

اول کدی بزن که درست کار کنه، بعد کدی بزن که خوب کار کنه، بعد کدی بزن که سریع کار کنه.


Kent Beck

𝗖𝗛𝗔𝗡𝗡𝗘𝗟  |  𝗚𝗥𝗢𝗨𝗣
🚨‏ Serverless کلاه‌برداریه؟

برخلاف اسمش، "Serverless" (بی‌سرور) به این معنی نیست که سروری در کار نیست. یعنی:

لازم نیست نگران مدیریت سرور باشید. همه‌ی اون کارها (مقیاس‌پذیری، پچ کردن، مانیتورینگ و غیره) رو سرویس‌دهنده‌ی ابری انجام می‌ده 😎

چطوری کار می‌کنه؟
تو فقط کدی که باید اجرا بشه رو می‌نویسی (مثلاً یه تابع یا API کوچیک).
اونو می‌ذاری روی یه پلتفرم Serverless (مثل GCF ، AF, AL و ...)
وقتی یه درخواست بیاد، اون تابع اجرا می‌شه. وقتی نیاز نباشه، هیچی اجرا نمی‌شه → یعنی مصرف صفر🤩.

🚨بهت گفتن Serverless یعنی بدون دردسر!
«تو فقط کدت رو بنویس؟»🤣
🧠واقعیت اینه:
اجرای توابع محدود به زمانه
کدت به یه پلتفرم خاص قفل می‌شه
دیباگ کردنش روانیتون میکنه (مدیونید فکر کنید الان خودم را میگم 😁)
همون کانتینر ساده‌تره، شفاف‌تره، قابل کنترل‌تره.😅🐳

به نظر من ایده‌ی Serverless صرف نظر محدودیت‌های زمانی اجرای توابع و cold start و Stateless بودن و هزینه‌های پیش‌بینی‌نشده بیشتر یه ترفند بازاریابیه تا یه راه‌حل واقعی بی‌دردسر.
سرور حذف نشده فقط قایمش کردن»

@MehrdadLinuxchannel
Forwarded from ASafaeirad
‏توی صفحه پرداخت بانک پاسارگاد، اگر developer tools باز باشه و دکمه دریافت رمز پویا رو بزنید، می‌ره حالت debugger! فکر می‌کردم حداقل بانک‌ها روی سرور دیباگ نمی‌کنند :)) . حالا Code Review نمی‌کنید حداقل قبل کامیت یک دور بخونیدش.

https://pep.shaparak.ir/ThemeFiles/ServerFiles_637495792930000000/PaymentPageScript.js :1501

@DevTwitter | <Amir Ali Akbari/>
Forwarded from Go Casts 🚀
سرویس شما چه لودی رو میتونه تحمل کنه؟

یکی از دوستان در یکی از جلسات تیمسازی GoCasts سوالی پرسید در مورد اینکه یه grpc server آیا لود میلیون درخواست بر ثانیه (یا دقیقه) رو میتونه handle کنه؟
تلاش میکنم جوابی که به ایشون دادم رو به شکل دیگه ای اینجا بیان کنم

احتمالا تا حالا با مقالاتی از این دست روبرو شدید
How to Easily Handle 200k RPS with Golang
https://medium.com/@nikitaburov/how-to-easily-handle-200k-rps-with-golang-8b62967a01dd

پیشنهاد میکنم قبل از اینکه بخواید به این فکر کنید که http frameworkی که انتخاب می کنید آیا توانایی پاسخ به تعداد خیلی درخواست رو داره یا نه، به این فکر کنید که اپلیکیشن شما چه کاری رو داره انجام میده و کاری که انجام میشه با چه نوعی از مقیاس پذیری مواجه میشه. آیا قراره تعداد درخواست ورودی تصاعدی زیاد بشه، یا قراره حجم داده ذخیره شده تصاعدی زیاد بشه و یا مصرف منابع شما خیلی زیاد بشه؟
اصلا endpointی که شما توسعه دادید چه flowی داره و در این flow با چه سرویس های خارجی ای صحبت میکنه؟


از نظر من به شخصه سرویسی که ۵ تا ۱۰ هزار درخواست بر ثانیه رو به درستی در مدت زمان قابل قبول (بسته به نوع درخواست ممکنه ۱۰ میلی ثانیه معقول باشه یا ۱ ثانیه…) پاسخ بده، سرویس مقیاس پذیری هست. چرا؟ چون معمولا در چنین لودی ماژول های دیگه سیستم شما از جمله دیتابیس و سرویس های خارجی دیگه با چالش های جدی مواجه میشن که لازمه اول بهینه سازی های مختلفی رو به کمک الگوهای مختلف بهبود مقیاس پذیری به کار بگیرید.

در واقع چالش های واقعی مقیاس پذیری، خیلی زودتر از چیزی که فکرش رو بکنید سراغ شما و اپلیکیشن شما و سرویس های وابسته ش میاد، لازم نیست یه روزی بیاد که http server شما بتونه ۱ میلیون درخواست رو پاسخ بده که شما بخواید بقیه قسمت های سیستم رو مقیاس پذیر کنید، بلکه روند کاملا معکوس هست، احتمالا در خیلی از شرایط http server شما آخرین ماژولی از سیستم شما میشه که مشکلات مقیاس پذیری سراغش میاد.

مثلا در مقاله ای که ارسال کردم، همه چیز رو حذف کرده، صرفا یه مپ درون اپلیکیشن در نظر گرفته و سعی کرده همون رو serve کنه، قطعا موافقم که استفاده از لایه های مختلف کش از جمله کش درون برنامه خیلی به بهبود زمان پاسخگویی کمک میکنه، اما اینطور ساده سازی کردن چالش های مختلف به یک حالت ساده، واقع بینانه نیست.

نکته ای که میخوام بگم اینه که به دنبال اعداد و ارقام فضایی نباشید، و فکر نکنید که باید اون اعداد و ارقام فضایی رخ بده که شما با چالش های مقیاس پذیری روبرو بشید. اینطوری واقع بینانه تر به دنبال راه حل های جدی تری برای مقیاس پذیری سرویس تون خواهید بود تا اینکه بخواید صرفا http server یا ماژول دیگه ای از سرویس تون رو تغییر بدید.

خوشحال میشم بشنوم سرویسی که شما توسعه دادید بیشترین لودی که تحمل کرده چقدره؟



دوره +‌ تیمسازی بکند و گولنگ Go Casts
تخفیف ویژه بهار
۵۰ درصد + ۱ میلیون و ۱۰۰ هزار تومان تخفیف
کد بهار
BAHAR

خرید از سایت
https://gocasts.ir

همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.iss.one/gocasts/434

تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.iss.one/gocasts/441

دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4


@gocasts
Forwarded from Gopher Academy
🔵 عنوان مقاله
Fuzzing Go Binaries with LibAFL

🟢 خلاصه مقاله:

سGoLibAFL یک ابزار جدید است که با استفاده از کتابخانه فازینگ LibAFL ساخته شده‌ با زبان برنامه‌نویسی Rust، تکنیک‌های پیشرفته فازینگ را در اختیار توسعه‌دهندگان زبان Go قرار می‌دهد. این مقاله GoLibAFL را با راه‌حل‌های موجود مقایسه کرده، نمونه‌هایی از کاربرد آن را نشان می‌دهد و به تفصیل در مورد چگونگی سفارشی‌سازی LibAFL برای موارد استفاده در Go بحث می‌کند. GoLibAFL امنیت و روند توسعه برنامه‌های نوشته شده به زبان Go را بهبود می‌بخشد.

🟣لینک مقاله:
https://golangweekly.com/link/168161/web


👑 @gopher_academy
یک پلاگین Expo ساختم که کمک می‌کنه مثلا رنگ‌های DatePicker اندروید رو تغییر بدین
درواقع بدون نیاز به eject کردن میتونین فایل styles.xml اندروید رو از طریق کانفیگ اکسپو تغییر بدین
برای نیاز خودم زدمش اما اگه تغییری به نظرتون میرسید بگین یا انجام بدین، مرسی
https://github.com/siavashh/expo-config-plugin-android-styles

@DevTwitter | <Siavash/>
یک نمونه از توانمندی های nextJs و VueJs
توسعه اپ دسکتاپ بورد مدیریت پروژه بر اساس روش Kanban - کاملا آفلاین و بدون نیاز به حساب کاربری!

https://github.com/kanriapp/kanri

@DevTwitter | <MJ/>