This media is not supported in your browser
VIEW IN TELEGRAM
ایشون با یک دانگل ۱۰ دلاری usb اومده محدودیت استفاده از iPadOS رو برای ایجنتها دور زده :)
دانگل میاد خودش رو به عنوان یک ماوس و کیبورد فِیک جا میزنه و کنترل iPad رو دستش میگیره، یک app هم برای گرفتن اسکرینشات و فرستادن کامندها از طریق MCP داره!
پروژه اُپن سورس هست و میتونید به claude code، codex یا هر ایجنت دیگهای وصلش کنید ولی باید hardware رو داشته باشید:
https://github.com/jamiepinheiro/ipad_computer_use
@DevTwitter | <Amir/>
دانگل میاد خودش رو به عنوان یک ماوس و کیبورد فِیک جا میزنه و کنترل iPad رو دستش میگیره، یک app هم برای گرفتن اسکرینشات و فرستادن کامندها از طریق MCP داره!
پروژه اُپن سورس هست و میتونید به claude code، codex یا هر ایجنت دیگهای وصلش کنید ولی باید hardware رو داشته باشید:
https://github.com/jamiepinheiro/ipad_computer_use
@DevTwitter | <Amir/>
🔥40👍4💔1
این دقیقا همون چیزیه که جلوی خرابکاری AI توی UI رو میگیره
موضوع اینه که Agent میتونه هر استایل و کلاسی که دلش خواست به المانها اضافه کنه حتی اگر کامپوننتهای استاندارد داشته باشین.
با این پکیچ دیگه اجازه نداره هرچی میخواد اضافه کنه
مثلا میگه آقا شما حق نداری padding اصن اضافه کنی.
https://github.com/shadcn-ui/lint
@DevTwitter | <Pooria/>
موضوع اینه که Agent میتونه هر استایل و کلاسی که دلش خواست به المانها اضافه کنه حتی اگر کامپوننتهای استاندارد داشته باشین.
با این پکیچ دیگه اجازه نداره هرچی میخواد اضافه کنه
مثلا میگه آقا شما حق نداری padding اصن اضافه کنی.
https://github.com/shadcn-ui/lint
@DevTwitter | <Pooria/>
❤24👍6
با این skill می تونید Claude رو به یه هکر تمام عیار تبدیل کنید :
https://github.com/SnailSploit/Claude-Red
@DevTwitter | <Reza/>
https://github.com/SnailSploit/Claude-Red
@DevTwitter | <Reza/>
🔥32🍌11❤5
Forwarded from DevTwitter Ads.
🤖 هر روز کلی ابزار AI جدید میاد؛ چندتاشو میشناسی؟
توی @AIToolsFarsi هر روز با جدیدترین ابزارها، ترفندهای کاربردی و مهمترین اخبار دنیای هوش مصنوعی آشنا میشی.
✅ معرفی ابزارهای کاربردی و جدید
✅ معرفی API Key های رایگان
✅ ترفندهای ساده و قابل استفاده
✅ اخبار مهم و بهروز AI
✅ آموزشهای کوتاه و مفید
همه محتواها با توضیحات ساده و بدون حاشیه منتشر میشن تا بتونی از هوش مصنوعی توی کار، درس و زندگی روزمره بهتر استفاده کنی.
👇 همین حالا عضو شو:
@AIToolsFarsi
@AIToolsFarsi
توی @AIToolsFarsi هر روز با جدیدترین ابزارها، ترفندهای کاربردی و مهمترین اخبار دنیای هوش مصنوعی آشنا میشی.
✅ معرفی ابزارهای کاربردی و جدید
✅ معرفی API Key های رایگان
✅ ترفندهای ساده و قابل استفاده
✅ اخبار مهم و بهروز AI
✅ آموزشهای کوتاه و مفید
همه محتواها با توضیحات ساده و بدون حاشیه منتشر میشن تا بتونی از هوش مصنوعی توی کار، درس و زندگی روزمره بهتر استفاده کنی.
👇 همین حالا عضو شو:
@AIToolsFarsi
@AIToolsFarsi
👎6👍5🔥1
یه skill برای نوشتار فارسی AI توی کامیونیتی ها خیلی دیده شد و چون کار قشنگی بود، به نظرم خیلی باید بیشتر دیده بشه...
یه دوست عزیزی یه skill برای برای بهتر کردن خروجی فارسی AI نوشته که خیلی از مشکلات همه رو حل میکنه:
1. قواعد نگارش فارسی مثل نیم فاصله و هکسره و اعداد فارسی و ... رو رعایت میکنه.
2. مشکل rtl نبودن نوشته توی فایل های مختلف رو حل کرده.
3. لحن های متفاوتی داره و برای کار های مختلف از لحن خاص خودش استفاده میکنه.
و چیزای دیگه که خودتون برید داخل ریپوش ببینید:
https://github.com/ali2000hos/persian-writing
@DevTwitter | <Seyed Hossein Mostafavi/>
یه دوست عزیزی یه skill برای برای بهتر کردن خروجی فارسی AI نوشته که خیلی از مشکلات همه رو حل میکنه:
1. قواعد نگارش فارسی مثل نیم فاصله و هکسره و اعداد فارسی و ... رو رعایت میکنه.
2. مشکل rtl نبودن نوشته توی فایل های مختلف رو حل کرده.
3. لحن های متفاوتی داره و برای کار های مختلف از لحن خاص خودش استفاده میکنه.
و چیزای دیگه که خودتون برید داخل ریپوش ببینید:
https://github.com/ali2000hos/persian-writing
@DevTwitter | <Seyed Hossein Mostafavi/>
❤38👍7👎2
کاربری در ردیت با کمک GPT-6 نسخهای دقیق از فتوشاپ رو به صورت رایگان ساخته.
این کار برای او حدود 2000 دلار هزینه داشت، اما نتیجه ارزش داشت
این نرمافزار با نام Photon تقریباً تمام قابلیتهای نسخه پولی رو داره و روی لینوکس، ویندوز و مک قابل استفاده است.
https://tenzen.studio/photon/
@DevTwitter | <Reza/>
این کار برای او حدود 2000 دلار هزینه داشت، اما نتیجه ارزش داشت
این نرمافزار با نام Photon تقریباً تمام قابلیتهای نسخه پولی رو داره و روی لینوکس، ویندوز و مک قابل استفاده است.
https://tenzen.studio/photon/
@DevTwitter | <Reza/>
🔥148👎9🍌7
برای Digikala یه MCP Server ساختم.
جستجوی محصولات، دریافت اطلاعات و مشخصات، بررسی قیمت و تخفیف، مشاهده امتیاز و نظرات کاربران، مقایسه محصولات، بررسی موجودی و پیدا کردن گزینههای مناسب.
۱۶ ابزار، بدون API Key
https://github.com/mmdju/digikala-mcp
@DevTwitter | <Mmdj/>
جستجوی محصولات، دریافت اطلاعات و مشخصات، بررسی قیمت و تخفیف، مشاهده امتیاز و نظرات کاربران، مقایسه محصولات، بررسی موجودی و پیدا کردن گزینههای مناسب.
۱۶ ابزار، بدون API Key
https://github.com/mmdju/digikala-mcp
@DevTwitter | <Mmdj/>
🔥86🍌12👎4
یک ساله یکی از دغدغههام حافظه جانبی هوشمصنوعیه.
۷ ماه پیش MCPedia رو ساختم و چند ماه تستش کردم. ایدههای دیگه مثل codememory و mem0 و ... بررسی کردم. پیادهسازی با embedding و VectorDB رو انجام دادم و تست کردم.
نهایتا خروجی شد برهان:
https://github.com/pouriya/borhan
@DevTwitter | <حضرت آقا پوریا/>
۷ ماه پیش MCPedia رو ساختم و چند ماه تستش کردم. ایدههای دیگه مثل codememory و mem0 و ... بررسی کردم. پیادهسازی با embedding و VectorDB رو انجام دادم و تست کردم.
نهایتا خروجی شد برهان:
https://github.com/pouriya/borhan
@DevTwitter | <حضرت آقا پوریا/>
🍌33❤13🔥1
خبر داغ برای لاراولکارا :)
نسخه Laravel 13.32 تازه منتشر شده و یکی از تغییرات جالبش، اضافه شدن یه Driver جدید برای Mercure توی سیستم Broadcasting هست.
با این قابلیت میتونی از Mercure برای ارسال آپدیتهای لحظهای به سمت کلاینت استفاده کنی. جالبه که برخلاف WebSocketها، این روش بر پایه Server-Sent Events کار میکنه و برای خیلی از پروژهها سادهتر و سبکتره.
این موضوع مخصوصاً برای پروژههایی که نیاز به نمایش اطلاعات لحظهای دارن خیلی کاربردیه. مثلاً:
داشبوردهای زنده
وضعیت سفارشها
نوتیفیکیشنها
یا هر بخشی که باید بدون رفرش شدن صفحه بهروزرسانی بشه
علاوه بر این، این نسخه چند قابلیت دیگه هم آورده که به نظرم ارزش دارن:
متدهای copyToDisk() و moveToDisk() برای Filesystem که کار با فایلها رو راحتتر میکنه
پشتیبانی از Enumها توی Pause و Resume کردن Queueها
در کل اگه از لاراول ۱۳ استفاده میکنی، این نسخه چندتا تغییر کاربردی توی بخشهای مختلف فریمورک به همراه داره و به نظرم ارزش آپدیت کردن داره.
منبع:
https://laravel-news.com/laravel-13-32-0
@DevTwitter | <Amirreza Riahi/>
نسخه Laravel 13.32 تازه منتشر شده و یکی از تغییرات جالبش، اضافه شدن یه Driver جدید برای Mercure توی سیستم Broadcasting هست.
با این قابلیت میتونی از Mercure برای ارسال آپدیتهای لحظهای به سمت کلاینت استفاده کنی. جالبه که برخلاف WebSocketها، این روش بر پایه Server-Sent Events کار میکنه و برای خیلی از پروژهها سادهتر و سبکتره.
این موضوع مخصوصاً برای پروژههایی که نیاز به نمایش اطلاعات لحظهای دارن خیلی کاربردیه. مثلاً:
داشبوردهای زنده
وضعیت سفارشها
نوتیفیکیشنها
یا هر بخشی که باید بدون رفرش شدن صفحه بهروزرسانی بشه
علاوه بر این، این نسخه چند قابلیت دیگه هم آورده که به نظرم ارزش دارن:
متدهای copyToDisk() و moveToDisk() برای Filesystem که کار با فایلها رو راحتتر میکنه
پشتیبانی از Enumها توی Pause و Resume کردن Queueها
در کل اگه از لاراول ۱۳ استفاده میکنی، این نسخه چندتا تغییر کاربردی توی بخشهای مختلف فریمورک به همراه داره و به نظرم ارزش آپدیت کردن داره.
منبع:
https://laravel-news.com/laravel-13-32-0
@DevTwitter | <Amirreza Riahi/>
👍23❤4🔥2
نسخه جدید گو ۱.۲۷ بالاخره منتشر شد
این نسخه ۱۹ آگوست اومد و چند تا تغییر جدی داره که توی کار روزمره قشنگ حس میشه.
اولین و به نظرم مهمترین تغییر، پشتیبانی از generic methodهاست.
تا قبل از این اگه میخواستیم روی متد از جنریک استفاده کنیم، باید خود struct والد جنریک میبود تا متدها بتونن ازش استفاده کنن. حالا میتونیم مستقیم داخل متد type parameter تعریف کنیم. این کار باعث میشه کد مربوط به یه تایپ، تمیزتر و منسجمتر داخل همون تایپ بمونه و مجبور نشیم تابعهای جنریک رو بیاریم بیرون.
دومین تغییر مهم مربوط به encoding/json هست.
عملیات unmarshaling بهبود محسوسی داشته و علاوه بر اون، پکیج encoding/json/v2 هم به شکل رسمی اضافه شده. این نسخه جدید کنترل بیشتری روی نحوه پردازش JSON میده و پیشفرضهاش سختگیرانهتره (مثلاً UTF-8 خراب یا کلید تکراری رو رد میکنه). نسخه قدیمی هم همچنان کار میکنه.
سومین مورد که خیلی کاربردیه، اضافه شدن goroutineleak به runtime/pprof هست.
احتمالاً با این مشکل روبهرو شدی که یه گوروتین ساخته میشه و به هر دلیلی برای همیشه بلاک میمونه و آزاد نمیشه. حالا گو میتونه بخشی از این گوروتینهای گیرکرده رو راحتتر شناسایی کنه و تو پروفایل نشون بده.
چهارمین مورد، اضافه شدن UUID به کتابخانه استاندارد هست.
برای ساختن و پارس کردن UUIDهای معمول، دیگه لزوماً نیازی به کشیدن یه dependency جداگانه نیست.
پنجمین مورد هم بهبود memory allocation هست.
تو تخصیصهای کوچیک (مخصوصاً زیر حدود ۸۰ بایت) هزینه بعضی allocationها تا ۳۰ درصد کمتر شده. برای برنامههایی که زیاد حافظه میگیرن، بهبود کلی حدود ۱ درصد گزارش شده.
در کنار اینا، go fix و go doc هم بهتر شدن و چند تغییر دیگه تو runtime و standard library وجود داره.
در کل Go ۱.۲۷ بیشتر از اینکه یه نسخه پر از قابلیتهای عجیب و غریب باشه، چند تا بخش مهم و پرکاربرد رو پختهتر و کاربردیتر کرده.
مستند تغییرات Go 1.27:
https://go.dev/doc/go1.27
@DevTwitter | <Ali Moradi/>
این نسخه ۱۹ آگوست اومد و چند تا تغییر جدی داره که توی کار روزمره قشنگ حس میشه.
اولین و به نظرم مهمترین تغییر، پشتیبانی از generic methodهاست.
تا قبل از این اگه میخواستیم روی متد از جنریک استفاده کنیم، باید خود struct والد جنریک میبود تا متدها بتونن ازش استفاده کنن. حالا میتونیم مستقیم داخل متد type parameter تعریف کنیم. این کار باعث میشه کد مربوط به یه تایپ، تمیزتر و منسجمتر داخل همون تایپ بمونه و مجبور نشیم تابعهای جنریک رو بیاریم بیرون.
دومین تغییر مهم مربوط به encoding/json هست.
عملیات unmarshaling بهبود محسوسی داشته و علاوه بر اون، پکیج encoding/json/v2 هم به شکل رسمی اضافه شده. این نسخه جدید کنترل بیشتری روی نحوه پردازش JSON میده و پیشفرضهاش سختگیرانهتره (مثلاً UTF-8 خراب یا کلید تکراری رو رد میکنه). نسخه قدیمی هم همچنان کار میکنه.
سومین مورد که خیلی کاربردیه، اضافه شدن goroutineleak به runtime/pprof هست.
احتمالاً با این مشکل روبهرو شدی که یه گوروتین ساخته میشه و به هر دلیلی برای همیشه بلاک میمونه و آزاد نمیشه. حالا گو میتونه بخشی از این گوروتینهای گیرکرده رو راحتتر شناسایی کنه و تو پروفایل نشون بده.
چهارمین مورد، اضافه شدن UUID به کتابخانه استاندارد هست.
برای ساختن و پارس کردن UUIDهای معمول، دیگه لزوماً نیازی به کشیدن یه dependency جداگانه نیست.
پنجمین مورد هم بهبود memory allocation هست.
تو تخصیصهای کوچیک (مخصوصاً زیر حدود ۸۰ بایت) هزینه بعضی allocationها تا ۳۰ درصد کمتر شده. برای برنامههایی که زیاد حافظه میگیرن، بهبود کلی حدود ۱ درصد گزارش شده.
در کنار اینا، go fix و go doc هم بهتر شدن و چند تغییر دیگه تو runtime و standard library وجود داره.
در کل Go ۱.۲۷ بیشتر از اینکه یه نسخه پر از قابلیتهای عجیب و غریب باشه، چند تا بخش مهم و پرکاربرد رو پختهتر و کاربردیتر کرده.
مستند تغییرات Go 1.27:
https://go.dev/doc/go1.27
@DevTwitter | <Ali Moradi/>
❤19👍3
ویژگیهای مهم JWT (فارغ از فریم ورک)
JWT یک توکن امضاشده است که اطلاعات کاربر را درون خودش دارد.
نحوه کار: سرور توکن را میسازد و امضا میکند ← کلاینت آن را در هر درخواست میفرستد ← سرور فقط امضا را چک میکند (بدون دیتابیس).
نکته کلیدی: فقط Encode است، نه Encrypt ← داده حساس داخلش نگذارید.
------------------
ساختار: سه بخش با نقطه جدا میشوند
- Header:
- نوع توکن و الگوریتم امضا
- Payload:
- دادهها (Claims مثل شناسه کاربر، نقش، انقضا)
- Signature:
- امضا برای تأیید دستکاری نشدن
------------------
آیا در میکروسرویسها JWT بهتر است؟
بله، اغلب اوقات. چون Stateless است و هر سرویس بدون کوئری دیتابیس مرکزی میتواند توکن را تأیید کند.
بهترین کاربردها:
- احراز هویت بین میکروسرویسها
- Machine-to-Machine (سرویس به سرویس)
- APIهای عمومی و چندپلتفرمی
- سیستمهای توزیعشده و مقیاسپذیر
بدترین کاربردها:
- نشست کاربران وب (Session جایگزین بهتری است)
- وقتی نیاز به ابطال آنی توکن دارید (مثل logout یا تغییر رمز)
- ذخیره داده حساس در Payload (رمزنگاری نشده)
- توکنهای طولانیمدت بدون Refresh Token
ویژگیهای مهم JWT
Stateless
تمام اطلاعات لازم در خود توکن ذخیره میشود؛ سرور نیازی به ذخیره نشست ندارد.
Self-contained
شامل Header، Payload و Signature است و میتواند Claimهای سفارشی (نقش، مجوزها و...) را حمل کند.
امضاشده (Signed)
با الگوریتمهای HMAC یا RSA امضا میشود؛ دستکاری محتوا قابل تشخیص است.
استاندارد باز (RFC 7519)
مستقل از زبان و پلتفرم است و در هر سیستمعاملی قابل استفاده است.
قابل حمل (Portable)
به راحتی بین سرویسها، دامنهها و میکروسرویسها منتقل میشود.
دارای انقضا (Expiration)
فیلد exp زمان اعتبار توکن را مشخص میکند.
غیرقابل ابطال (Non-revocable)
تا زمان انقضا معتبر میماند؛ ابطال آنی نیاز به Blocklist دارد که Stateless بودن را نقض میکند.
حجیم (Bulky)
به دلیل داشتن Payload، معمولاً بزرگتر از توکنهای ساده است.
رمزنگارینشده (Base64 Encoded)
محتوای Payload فقط Encode شده، نه Encrypt؛ بنابراین نباید داده حساس در آن قرار داد.
آسیبپذیر در صورت لو رفتن
اگر توکن دزدیده شود، مهاجم تا زمان انقضا به آن دسترسی دارد.
@DevTwitter | <Max Shirinzad/>
JWT یک توکن امضاشده است که اطلاعات کاربر را درون خودش دارد.
نحوه کار: سرور توکن را میسازد و امضا میکند ← کلاینت آن را در هر درخواست میفرستد ← سرور فقط امضا را چک میکند (بدون دیتابیس).
نکته کلیدی: فقط Encode است، نه Encrypt ← داده حساس داخلش نگذارید.
------------------
ساختار: سه بخش با نقطه جدا میشوند
- Header:
- نوع توکن و الگوریتم امضا
- Payload:
- دادهها (Claims مثل شناسه کاربر، نقش، انقضا)
- Signature:
- امضا برای تأیید دستکاری نشدن
------------------
آیا در میکروسرویسها JWT بهتر است؟
بله، اغلب اوقات. چون Stateless است و هر سرویس بدون کوئری دیتابیس مرکزی میتواند توکن را تأیید کند.
بهترین کاربردها:
- احراز هویت بین میکروسرویسها
- Machine-to-Machine (سرویس به سرویس)
- APIهای عمومی و چندپلتفرمی
- سیستمهای توزیعشده و مقیاسپذیر
بدترین کاربردها:
- نشست کاربران وب (Session جایگزین بهتری است)
- وقتی نیاز به ابطال آنی توکن دارید (مثل logout یا تغییر رمز)
- ذخیره داده حساس در Payload (رمزنگاری نشده)
- توکنهای طولانیمدت بدون Refresh Token
ویژگیهای مهم JWT
Stateless
تمام اطلاعات لازم در خود توکن ذخیره میشود؛ سرور نیازی به ذخیره نشست ندارد.
Self-contained
شامل Header، Payload و Signature است و میتواند Claimهای سفارشی (نقش، مجوزها و...) را حمل کند.
امضاشده (Signed)
با الگوریتمهای HMAC یا RSA امضا میشود؛ دستکاری محتوا قابل تشخیص است.
استاندارد باز (RFC 7519)
مستقل از زبان و پلتفرم است و در هر سیستمعاملی قابل استفاده است.
قابل حمل (Portable)
به راحتی بین سرویسها، دامنهها و میکروسرویسها منتقل میشود.
دارای انقضا (Expiration)
فیلد exp زمان اعتبار توکن را مشخص میکند.
غیرقابل ابطال (Non-revocable)
تا زمان انقضا معتبر میماند؛ ابطال آنی نیاز به Blocklist دارد که Stateless بودن را نقض میکند.
حجیم (Bulky)
به دلیل داشتن Payload، معمولاً بزرگتر از توکنهای ساده است.
رمزنگارینشده (Base64 Encoded)
محتوای Payload فقط Encode شده، نه Encrypt؛ بنابراین نباید داده حساس در آن قرار داد.
آسیبپذیر در صورت لو رفتن
اگر توکن دزدیده شود، مهاجم تا زمان انقضا به آن دسترسی دارد.
@DevTwitter | <Max Shirinzad/>
❤33🍌12👍5
بدون هیچ اغراقی میگم: ابزار act واقعاً زندگی مهندسی و سلامت روان منو نجات داد!
اگر تا حالا برای تنظیم یک فایل ساده .github/workflows مجبور شدید ۳۰ بار کامیت بزنید با پیامهای حسرتباری مثل fix yaml، test ci 2 و PLEASE WORK... دقیقاً میدونید از چه جهنمی صحبت میکنم.
کابوس روزمرهام قبل از act این بود:
- یک خط تغییر کوچک توی کانفیگ پایپلاین میدادم.
- کامیت و پوش میکردم و منتظر میشدم تا Runner گیتهاب بالا بیاد.
چند دقیقه طول میکشید تا وابستگیها دانلود بشن و آخرش بهخاطر یک Space اضافه یا جابهجا بودن یک Indentation ساده، کلاً Build شکست میخورد!
تاریخچه (Git Log) پروژهام شبیه گورستان کامیتهای اسپم و بیمصرف شده بود.
معجزهای به نام act
تغییر از وقتی شروع شد که act رو وارد workflow خودم کردم. این ابزار کل محیط اجرای GitHub Actions رو مستقیماً روی سیستم خودم و داخل کانتینرهای Docker شبیهسازی میکنه.
حالا فرآیند تست CI برای من این شکلی شده:
بازخورد زیر ۵ ثانیه: بدون اینکه حتی یک کامیت بزنم یا کدی رو پوش کنم، فقط با زدن دستور act pull_request کل پایپلاین (از آنالیز استاتیک و Spotless گرفته تا تستهای یکپارچگی سنگین) روی سیستم محلی اجرا میشه.
تاریخچه گیت کاملاً شفاف و تمیز: فقط و فقط زمانی کامیت میزنم که مطمئن باشم پایپلاین روی سیستم خودم ۱۰۰٪ سبز شده.
پایان الگوی سمی "Push and Pray": دیگه نیازی نیست دست به دعا بشم که آیا این پوش جدید قراره سبز بشه یا قرمز!
اگر روی زمان، تمرکز و پاکیزگی Git Log پروژههاتون تعصب دارید، همین امروز act رو روی سیستمتون نصب کنید و خودتون رو برای همیشه از کابوس تست CI روی سرورهای ابری نجات بدید.
https://www.linkedin.com/pulse/stop-committing-test-your-ci-deep-dive-act-local-amir-goalmoradi-uff9e/
@DevTwitter | <Amir Goalmoradi/>
اگر تا حالا برای تنظیم یک فایل ساده .github/workflows مجبور شدید ۳۰ بار کامیت بزنید با پیامهای حسرتباری مثل fix yaml، test ci 2 و PLEASE WORK... دقیقاً میدونید از چه جهنمی صحبت میکنم.
کابوس روزمرهام قبل از act این بود:
- یک خط تغییر کوچک توی کانفیگ پایپلاین میدادم.
- کامیت و پوش میکردم و منتظر میشدم تا Runner گیتهاب بالا بیاد.
چند دقیقه طول میکشید تا وابستگیها دانلود بشن و آخرش بهخاطر یک Space اضافه یا جابهجا بودن یک Indentation ساده، کلاً Build شکست میخورد!
تاریخچه (Git Log) پروژهام شبیه گورستان کامیتهای اسپم و بیمصرف شده بود.
معجزهای به نام act
تغییر از وقتی شروع شد که act رو وارد workflow خودم کردم. این ابزار کل محیط اجرای GitHub Actions رو مستقیماً روی سیستم خودم و داخل کانتینرهای Docker شبیهسازی میکنه.
حالا فرآیند تست CI برای من این شکلی شده:
بازخورد زیر ۵ ثانیه: بدون اینکه حتی یک کامیت بزنم یا کدی رو پوش کنم، فقط با زدن دستور act pull_request کل پایپلاین (از آنالیز استاتیک و Spotless گرفته تا تستهای یکپارچگی سنگین) روی سیستم محلی اجرا میشه.
تاریخچه گیت کاملاً شفاف و تمیز: فقط و فقط زمانی کامیت میزنم که مطمئن باشم پایپلاین روی سیستم خودم ۱۰۰٪ سبز شده.
پایان الگوی سمی "Push and Pray": دیگه نیازی نیست دست به دعا بشم که آیا این پوش جدید قراره سبز بشه یا قرمز!
اگر روی زمان، تمرکز و پاکیزگی Git Log پروژههاتون تعصب دارید، همین امروز act رو روی سیستمتون نصب کنید و خودتون رو برای همیشه از کابوس تست CI روی سرورهای ابری نجات بدید.
https://www.linkedin.com/pulse/stop-committing-test-your-ci-deep-dive-act-local-amir-goalmoradi-uff9e/
@DevTwitter | <Amir Goalmoradi/>
❤39👍15🍌9
Forwarded from DevTwitter Ads.
اولین پروژهای که ترافیک واقعی گرفت، یه چیزی فهمیدم:
فرق بین کدی که کار میکنه و کدی که scale میشه، زمین تا آسمونه.
اینجا از این فرقها زیاد حرف میزنیم.
https://t.me/+HgGHhDZPg9tlNTU0
فرق بین کدی که کار میکنه و کدی که scale میشه، زمین تا آسمونه.
اینجا از این فرقها زیاد حرف میزنیم.
https://t.me/+HgGHhDZPg9tlNTU0
🍌31👍9👎3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥15🍌1
یک اشتباه به ظاهر ساده در API نویسی که میتواند دسترسی ادمین را دودستی تقدیم هکر کند!
(تله Over-Posting)
خیلی از ما وقتی توی داتنت شروع به ساخت Controller و Endpointهای API میکنیم، برای راحتی کار یا سرعت بیشتر، یک اشتباه کلاسیک انجام میدیم:
ارسال مستقیم Entityهای دیتابیس به ورودی متدها!
[HttpPost]
public async Task<IActionResult> UpdateUser(User user) //
تله بزرگ!
شاید ظاهر قضیه این باشه که Model Binder خودش دادهها رو مپ میکنه و همهچیز سریع کار میکنه، اما پشت صحنه چه اتفاقی میافته؟
خطر Over-Posting (یا Mass Assignment):
کافیه کلاینت (از طریق Postman یا ابزارهای مشابه) فیلدهایی مثل IsAdmin = true یا WalletBalance رو توی بدنه درخواست JSON بفرسته؛ از اونجا که فریمورک بدون تفکیک، مقادیر رو Bind میکنه، دیتای حساس بدون اعتبارسنجی آپدیت میشه!
اصول طلایی یک API تمیز و امن:
همیشه از DTO (Data Transfer Object) استفاده کنیم: فقط فیلدهایی که کاربر مجاز به ارسال یا دریافت اونهاست در قالب کلاسهای سبک تعریف بشن.
قرارداد شفاف (Contract): کلاینت نباید از ساختار جداول دیتابیس و Relationها باخبر بشه؛ API فقط یک پل ارتباطی سبک، مستقل و Stateless است.
اعتبارسنجی دقیق ورودیها (Validation): هیچ دادهای از دنیای بیرون نباید بدون فیلتر وارد لایههای زیرین بشه.
@DevTwitter | <Ehsan Faramarzi/>
(تله Over-Posting)
خیلی از ما وقتی توی داتنت شروع به ساخت Controller و Endpointهای API میکنیم، برای راحتی کار یا سرعت بیشتر، یک اشتباه کلاسیک انجام میدیم:
ارسال مستقیم Entityهای دیتابیس به ورودی متدها!
[HttpPost]
public async Task<IActionResult> UpdateUser(User user) //
تله بزرگ!
شاید ظاهر قضیه این باشه که Model Binder خودش دادهها رو مپ میکنه و همهچیز سریع کار میکنه، اما پشت صحنه چه اتفاقی میافته؟
خطر Over-Posting (یا Mass Assignment):
کافیه کلاینت (از طریق Postman یا ابزارهای مشابه) فیلدهایی مثل IsAdmin = true یا WalletBalance رو توی بدنه درخواست JSON بفرسته؛ از اونجا که فریمورک بدون تفکیک، مقادیر رو Bind میکنه، دیتای حساس بدون اعتبارسنجی آپدیت میشه!
اصول طلایی یک API تمیز و امن:
همیشه از DTO (Data Transfer Object) استفاده کنیم: فقط فیلدهایی که کاربر مجاز به ارسال یا دریافت اونهاست در قالب کلاسهای سبک تعریف بشن.
قرارداد شفاف (Contract): کلاینت نباید از ساختار جداول دیتابیس و Relationها باخبر بشه؛ API فقط یک پل ارتباطی سبک، مستقل و Stateless است.
اعتبارسنجی دقیق ورودیها (Validation): هیچ دادهای از دنیای بیرون نباید بدون فیلتر وارد لایههای زیرین بشه.
@DevTwitter | <Ehsan Faramarzi/>
👍26❤8🍌6
بعضی وقتا حوصله م سر میره و ویندوز متاسفانه دیگه اون بازی های ویندوز ۷ رو نداره که هم سبک و ساده باشن هم سرگرم کننده
واسه همین اومدم ماربازی معروف خودمونو بصورت CLI پیاده سازی کردم.
با دستورات
pip install reznum-snakegame
snakegame
لینک ریپو:
https://github.com/ItsReZNuM/SnakeGame-CLI
@DevTwitter | <Agha Reza/>
واسه همین اومدم ماربازی معروف خودمونو بصورت CLI پیاده سازی کردم.
با دستورات
pip install reznum-snakegame
snakegame
لینک ریپو:
https://github.com/ItsReZNuM/SnakeGame-CLI
@DevTwitter | <Agha Reza/>
🍌74👍16👎5
اگر میخواید دیزاین فیگما بدید به Agentتون کدش رو بزنه، اسکرین شات گرفتن خیلی کار رو دقیق در نمیاره و MCP خود فیگما هم کلا ۶ تا ریکوئست در ماه(!) میذاره بزنید و بعد میگه پول بده.
با این mcp میتونید دورش بزنید و دیگه به API Limit فیگما نمیخورید:
https://github.com/gethopp/figma-mcp-bridge
@DevTwitter | <Mahdi MirMohamadi/>
با این mcp میتونید دورش بزنید و دیگه به API Limit فیگما نمیخورید:
https://github.com/gethopp/figma-mcp-bridge
@DevTwitter | <Mahdi MirMohamadi/>
❤30👎4🔥3
دوباره به شدت Deep learning و الگوریتم هاش و ایده هاش باز داره میاد بالا
چرا چون فهمیدن خیلی از کارای llm رو میشه با هزینه سخت افزاری و نرم افزاری کمتر کارهاشون رو انجام داد
https://youtu.be/BMYvfVk8Ar0
این دوره برای شروع خوبه
@DevTwitter | <Alireza/>
چرا چون فهمیدن خیلی از کارای llm رو میشه با هزینه سخت افزاری و نرم افزاری کمتر کارهاشون رو انجام داد
https://youtu.be/BMYvfVk8Ar0
این دوره برای شروع خوبه
@DevTwitter | <Alireza/>
👍35🍌4🔥3
توی پروژههای فروشگاه اینترنتی طلا، معمولا با یه دوراهی تکراری مواجه میشیم :
قیمتها باید ثانیهای و دقیق باشن ، اما ریکوئست مداوم زدن به وبسرویس بیرونی هم ریسک بلاک شدن لیمیت API رو داره و هم لود سرور رو بالا میبره.
حالا راهکارش شد این افزونه.
روی چی تمرکز کردم؟
اتصال به وبسرویس brsapi برای دریافت پایدار نرخها
پیادهسازی لایه کشینگ با Transients API وردپرس تا هم سرعت لود صفحات حفظ بشه و هم با کمترین فراخوانی ممکن ، قیمتها زنده بمونن.
رعایت دقیق استانداردهای هسته وردپرس برای مسائل امنیتی (ورودیها، Late Escaping و Nonceها)
افزونه رو برای مخزن رسمی وردپرس هم ثبت کردم و الان در صف بررسی تیم وردپرسه.
توی قدم بعدی هم قراره پرووایدرهای بیشتری مثل tgju و نوسانتک رو اضافه کنم تا صاحبان کسبوکار دستشون توی انتخاب وبسرویس بازتر باشه
سورس پروژه کاملا متنبازه. اگر دستی توی توسعه وردپرس یا پروژههای طلا دارید ، خوشحال میشم کدها رو بررسی کنید و بازخوردتون رو بشنوم
https://github.com/amirmarandidev/woocommerce-live-gold-price
@DevTwitter | <Amir/>
قیمتها باید ثانیهای و دقیق باشن ، اما ریکوئست مداوم زدن به وبسرویس بیرونی هم ریسک بلاک شدن لیمیت API رو داره و هم لود سرور رو بالا میبره.
حالا راهکارش شد این افزونه.
روی چی تمرکز کردم؟
اتصال به وبسرویس brsapi برای دریافت پایدار نرخها
پیادهسازی لایه کشینگ با Transients API وردپرس تا هم سرعت لود صفحات حفظ بشه و هم با کمترین فراخوانی ممکن ، قیمتها زنده بمونن.
رعایت دقیق استانداردهای هسته وردپرس برای مسائل امنیتی (ورودیها، Late Escaping و Nonceها)
افزونه رو برای مخزن رسمی وردپرس هم ثبت کردم و الان در صف بررسی تیم وردپرسه.
توی قدم بعدی هم قراره پرووایدرهای بیشتری مثل tgju و نوسانتک رو اضافه کنم تا صاحبان کسبوکار دستشون توی انتخاب وبسرویس بازتر باشه
سورس پروژه کاملا متنبازه. اگر دستی توی توسعه وردپرس یا پروژههای طلا دارید ، خوشحال میشم کدها رو بررسی کنید و بازخوردتون رو بشنوم
https://github.com/amirmarandidev/woocommerce-live-gold-price
@DevTwitter | <Amir/>
🍌22❤19👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍4🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🍌6❤2