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
https://github.com/ItsReZNuM/4InARowTelBot

سورس بازی 4InARow
این بازی باید معرف حضور همتون باشه اگه هم نمی‌دونید چیه یه سرچ کنید
قابلیت بازی دو نفره هم به صورت اینلاین هم داره و هم میشه با ربات توی سه سطح مختلف بازی کرد

@DevTwitter | <Agha Reza/>
Forwarded from Philocode
یه باگ داشتم، متوجه شدم یه اشتباه عجیب کردم. این دو حالت رو ببینید:

var_dump([$someVariable]);
var_dump((array) $someVariable);

وقتی که مقدار someVariable نال باشه، اولی مشکل ایجاد می‌کنه. چون خروجی‌ها این‌طور می‌شه:

array(1) {
[0]=>
NULL
}
array(0) {
}

دیگه اولی یه آرایه‌ی خالی نیست.
Forwarded from Armon technical logs (armon Taheri)
مثل اینکه خبر ها حاکی از اون عه اقا وصال
@Vesal_J
روی کور یوتولیتی راست ( شامل کامند های اصلی لینوکس مثل cp , ls , pwd , ... )مشارکت کردن
این به معنی اون که در آینده نه چندان دور کدی که ایشون اضافه کردن در تمام دیسترو های اصلی لینوکس دنیا الردی نصب و قابل دسترس خواهد بود
https://github.com/uutils/coreutils/pull/8565
اگر پخش زنده آکادمی ۲۰۲۵ و همینطور تصاویری که از کی‌دی‌ای لینوکس منتشر شده رو دیده باشید و درمورد موز 🍌 براتون سوال شده که چی هستش، داستانش از این قراره، طبق ویکی کی‌دی‌ای:


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

کمی تاریخچه: در ابتدا از https://files.kde.org/kde-linux/ به عنوان محل به‌روزرسانی استفاده می‌کردیم. این به طرز بدی شکاف تغییر نام به kde-linux را پر کرد و در نهایت برای مهاجرت rootfsv2 از هم پاشید. حالا به جای آن این کار را می‌کنیم:
‏* https://files.kde.org/kde-linux/ حاوی تصویر دیسک .raw و همچنین .torrent مربوط به آن است
‏* https://files.kde.org/kde-linux/sysupdate/*/ حاوی همه مصنوعات sysupdate است
‏* https://files.kde.org/kde-linux/sysupdate/v2/ و غیره نسخه‌های مختلف هستند
‏* https://files.kde.org/kde-linux/vacuum.yaml کدگذاری می‌کند که کدام بیلدها را باید برای همیشه نگه داشت (آنها را سنگ قبر می‌نامند). همچنین تصاویر طلایی را کدگذاری می‌کند (یعنی آنهایی که می‌خواهیم نگه داریم چون می‌دانیم خوب هستند)

درست. پس. چگونه سنگ قبر بسازیم؟ ابتدا با دقت زیاد درباره این مسئله فکر کنید چون تا حدودی مهم است که دقیقاً بفهمید چه کاری می‌خواهید انجام دهید...

بیایید مثال از v2 به v3 را در نظر بگیریم: می‌خواهیم نسخه‌ای در v2 ایجاد کنیم که آخرین نسخه باشد تا بتوان گفت. وظیفه این نسخه این است که یک نسخه v2 باشد در حالی که تغییرات sysupdate.d برای v3 را فراهم کند. شاید آن جمله را تا زمانی که جا بیفتد بخوانید. مصنوعات سنگ قبر باید شبیه آنهای v2 باشند، اما دستورالعمل‌های به‌روزرسانی (یعنی فایل‌های sysupdate.d) درون سنگ قبر باید شبیه آنهای v3 باشند.

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

* اطمینان حاصل کنید v2 (یعنی git master) واقعاً کار می‌کند
‏* v3 را آماده کنید (احتمالاً در یک شاخه) و شاید کمی آن را آزمایش کنید تا مطمئن شوید پیکربندی‌های ارتقا کار می‌کنند
* نسبت به دسترسی کلید امضا فوق‌العاده مراقب باشید. شاخه‌های تصادفی به طور پیش‌فرض امضا ندارند!
* upload.sh را در شاخه v3 به‌روزرسانی کنید تا خط به‌روزرسانی v3 را شروع کند
* تعدادی بیلد v3 برای آزمایش بسازید
* یک بیلد v2 با پیکربندی‌های sysupdate.d نسخه v3 بسازید
* یک بیلد v3 بسازید تا نسخه بالاتری داشته باشید
* ارتقا را آزمایش کنید
‏* vacuum.yaml را ویرایش کنید یا از مدیر سیستم بخواهید تا بیلد v2 (و احتمالاً اولین v3 خوب) را به عنوان سنگ قبر (و احتمالاً طلایی) علامت‌گذاری کند.



https://community.kde.org/KDE_Linux/Banana_Split

@kde_fa
چقدر به این فکر می کنید که یک روزی برسه که مجبور بشید توی مدت زمان خیلی کوتاه از مخازن پابلیک گیت‌هاب خودتون یا بقیه، بک آپ بگیرید ؟

عددش هرچقدر که هست، در مورد این، می‌تونید به Magnet اعتماد کنید و خب، طبق معمول این روزها، با Rust نوشتمش.

https://github.com/naseridev/magnet

@DevTwitter | <Nima Naseri/>
Forwarded from Linuxor ?
ابزار پایتونی ArchiveBox یه ابزار متن‌باز و self-hosted برای بایگانی وب هستش که به شما این امکانو می‌ده تا صفحات وب، و منابعی مثل Pocket یا Pinboard رو ذخیره کنین. این ابزار محتوای صفحات رو به صورت HTML، JavaScript، PDF، تصاویر، ویدیوها و دیگر فرمت‌ها ذخیره می‌کنه.

archivebox.io

@Linuxor
Forwarded from محتوای آزاد سهراب (Sohrab)
برای اولین بار توی این کانال:


ایده‌هاتونو بریزید وسط می‌خوام آپدیت ماژور بدم.

از هرچیز مفیدی استقبال میشه.


#موقت
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 بسیاری از مهندسان ارشد و مدیران از این می ‌ترسند که حقوق بالاتر، گزینه ‌های جابجایی شغلی را محدود کند. نظر من این است...

بله، جبران خدمات بیشتر (حقوق بالاتر) یعنی گزینه ‌های کمتری برای انتخاب خواهید داشت، اما «کمتر» به معنای «هیچ» نیست. تا زمانی که بتوانید تأثیر قابل اندازه ‌گیری نشان دهید، همیشه در هر سطح حقوقی فرصت ‌هایی وجود خواهد داشت.

شرکت‌ها زمانی خوب پرداخت می‌کنند که باور داشته باشند شما می‌توانید تحولی ایجاد کنید.

به همین دلیل ساختن سابقه کاری قوی و ارائه نتایج ملموس بسیار مهم است. در سطوح بالاتر، تأثیر شما باید دقیق و شفاف باشد و مستقیماً با یکی از این موارد هم ‌راستا شود: صرفه‌جویی در درآمد، کاهش زمان، توسعه تیم یا ساخت سیستم‌ها.

اگر سابقه قوی نداشته باشید، احتمالاً در موقعیت فعلی گیر می‌کنید.

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

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

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

هرچه بالاتر می‌روید، باید روی نقاط قوت خود بیشتر سرمایه‌گذاری کنید تا تأثیرتان چندبرابر شود.

@TheRaymondDev
Forwarded from Linuxor ?
این سایته توش همه الگوریتم های مهمی که با C پیاده شدن رو جمع کرده توی کامنت های هر بخش توضیحات هر الگوریتم رو نوشته می‌تونید بخونیدش:

thealgorithms.github.io/C

@Linuxor
اگر احتمالا دنبال زیرنویس هستین و ترجمه به زبونی که میخواین وجود نداره میتونین از Workflow زیر تو n8n استفاده کنین :
https://gist.github.com/MrOplus/1436ec3c8d84e8a692e6e98f7807d4aa

@DevTwitter | </dev/nvram/>
Forwarded from یه شعر (Poem Bot)
مولانا | دیوان شمس | رباعیات | رباعی شمارهٔ ۴۲۵

مینال که آن ناله شنو همسایه است
مینال که بانک طفل مهر دایه است
هرچند که آن دایه جان خودرایه است
مینال که ناله عشق را سرمایه است

#مولانا | گنجور
📍@iipoem
خب این بنچمارک خیلی جالبی شد:)
برای اجرای 10هزار بار یک تابع wrangling
با Zero Copy تقریبا 50% حجم خط های کد افزایش داشت و عملکرد رو بدتر کرد
بهترین عملکرد رو Cython داشت و دردسر و over head کمتری نسبت به rust توی PyO3 داشت
انتخابم از این به بعد کد پایتون بهینست بدون اضافات :)

@DevTwitter | <Soroush Moosapour/>
هیچ ملتی تا ابد در زنجیر نمی‌ماند.

#NepoKids

🔍 ircf.space
@ircfspace
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
این GIL پایتون چقدر دردسر سازه 😬
Forwarded from Abolfazl Devs (ixAbolfazl)
فرض کن مسئول فنی توییتری، ساعت ۸ شبه و یه نفر با ۳۰ میلیون فالوور یه توییت میزنه، تو چند ثانیه، سیستم تو باید توییت رو ببره تو تایم لاین همه فالوراش
حالا سؤال اینه: چطوری سیستم شما باید با کمترین هزینه و بیشترین سرعت این توییت رو بزاره تو تایم لاین فالورا؟

این مشکلی بود که توییتر تو سال 2012 باید حلش میکرد اما راه حلشون چی بود؟
دوتا راهکار روبروشون بود
1- توییت یکبار تو دیتابیس ذخیره شه و هر بار کاربرا با باز کردن تایم لاین یه کوئری بزنن ببینن اونایی که فالو کردن چیا توییت کردن
2- تویتت به محض ارسال تو کش تایم لاین همه فالورا ذخیره بشه
اون اولا توییتر راه اول شماره 1 رو انتخاب کرد که این باعث میشه هر کاربر موقع باز کردن صفحه اول توییتر یک کوئری read بزنه (مثل عکس) که به مرور با افزایش تعداد خواننده ها که تقریبا دوبرابر نویسنده ها بودن بازدهیش اومد پایین!

پس توییتر اومد سویچ کرد رو حالت دوم که با زدن هر توییت میومد تو کش تایم لاین فالورا اون توییت رو اضافه میکرد اینطوری برا نوشتن یه توییت پردازش بیشتری میکرد اما این به سرعتش می ارزید اما خب همچنان یه مشکلی بود!

مشکل این بود ممکن بود یه نفر 30 میلیون فالور داشته باشه و خب نوشتن و قرار دادن اون توییت جدید برای 30 میلیون فالور پردازش و زمان زیادی میخواست و این باز سرعتو میورد پایین
راه حل جدید چی بود؟
ترکیبی از این دوتا روش!

به این صورت که برای اونا که فالورشون کم بود توییت هاشونو میزاشت تو کش تایم لاین فالوراشون و کنارش میومد برای افراد با فالور زیاد هم کوئری read میزد و بعد بر اساس زمان سورتش میکرد

البته احتمالا تا الان باید نحوه کار خیلی تغیر کرده باشه و روش ها بهتری رو انتخاب کرده باشن

📌 ixAbolfazl | @abolfazl_devs
Forwarded from Reza Jafari
آشنایی با MiniCPM-V و MiniCPM-o؛ هوش مصنوعی‌ اپن سورسی که متن، تصویر و صدا رو با هم می‌فهمه

مدل MiniCPM-V در واقع یک خانواده از مدل‌های هوشمند چندوجهی (Multimodal LLMs) هست که می‌تونه تصویر، ویدیو و متن رو بگیره و در نهایت متن باکیفیت تحویل بده. این مدل‌ها طوری طراحی شدن که هم عملکرد خیلی قوی داشته باشن و هم بشه راحت روی دستگاه‌های شخصی (end-side) اجراشون کرد. تازه از فوریه ۲۰۲۴ تا حالا ۷ نسخه مختلف ازش منتشر شده و هدف اصلیشون همیشه همین دو نکته بوده: قدرت بالا و اجرا بهینه.

بین همه نسخه‌ها، MiniCPM-V 4.5 از همه جدیدتر و قوی‌تره. این مدل ۸ میلیارد پارامتر داره و جالبه بدونید که حتی از GPT-4o-latest، Gemini-2.0 Pro و Qwen2.5-VL 72B هم توی بخش vision-language بهتر عمل می‌کنه. ویژگی‌های تازه‌ای هم داره، مثل اینکه می‌تونه ویدیوهای طولانی رو با نرخ فشرده‌سازی خیلی بالا (تا 96x) پردازش کنه، یا اینکه بین سرعت و عمق پردازش کاربر بتونه انتخاب داشته باشه (fast/deep thinking). علاوه بر این، توی خوندن دست‌خط، جدول‌های پیچیده و اسناد خیلی دقیق عمل می‌کنه. از اون طرف هم ویژگی‌های محبوب نسخه‌های قبل مثل پشتیبانی چندزبانه، رفتار قابل اعتماد و امکان اجرا روی دستگاه‌های شخصی رو هم ارتقا داده.

اما MiniCPM-o کمی متفاوت‌تره. این مدل علاوه بر متن، تصویر و ویدیو، می‌تونه صدا رو هم به‌عنوان ورودی بگیره و حتی خروجی رو به شکل speech بده. آخرین و قوی‌ترین نسخه‌اش یعنی MiniCPM-o 2.6 هم مثل سری V, تعداد 8 میلیارد پارامتر داره و از نظر توانایی‌ها در حد GPT-4o-202405 شناخته می‌شه. چیزی که این نسخه رو خاص می‌کنه، پشتیبانی از گفت‌وگوی دوطرفه‌ی زنده و بلادرنگ با قابلیت انتخاب صدا و حتی کنترل احساس، سرعت و سبک صحبت کردنه. تازه امکانات جالبی مثل voice cloning و role play هم داره. نکته مهم‌تر اینه که برای اولین بار تونسته live streaming چندوجهی رو روی دستگاه‌هایی مثل iPad اجرا کنه، که خودش یک جهش جدی در این حوزه حساب می‌شه.

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

🔗 لینک ریپو

🔤🔤🔤🔤🔤🔤🔤

🥇 اهورا اولین اپراتور هوش مصنوعی راهبردی ایران در حوزه ارائه خدمات و سرویس‌های زیرساخت هوش مصنوعی

🛍کد تخفیف ۱۰ درصدی محصولات اهورا برای اعضای کانال
AHURA5

🌐 لینک وب‌سایت اهورا

@reza_jafari_ai
Please open Telegram to view this post
VIEW IN TELEGRAM
در مورد اهمیت متن آگهی استخدامی برای استخدام افراد خفن!

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

https://news.ycombinator.com/item?id=3804134
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
یه پست بعدا راجبش میسازم که چرا دردسر سازه و چجوری میشه دورش زد :)
دلیل اینکه در زبان‌هایی مثل Go یا Rust یا حتی C دچار سردرگمی میشید، بخاطر این هست که میخواهید ساختارهایی که از زبان‌های شی‌گرا در ذهن دارید رو دقیقا به همون شکل در این‌ها هم داشته باشید. این زبان‌ها هم تا حدی این توهم رو ایجاد میکنند که اینکار شدنی هست؛ و میتوان گفت که همینطور است، ولی فقط در ظاهر!

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

مثلا اگر امروز به یک برنامه‌نویس Go یا Rust یک پروژه‌ی بانکی یا یک سیستم فروشگاه رو محول کنید، به احتمال زیاد این پروژه رو مبتنی بر DDD انجام خواهد داد! حتی یک برنامه‌نویس Clojure هم احتمالا همین رویه را دنبال خواهد کرد! الان احتمالا در ذهن شما این سوال پیش آمده که DDD؟ چطور همچین چیزی ممکن هست؟ مگه این برای شی گرایی نیست؟ خیر، «شما» اون رو با شی گرایی یاد گرفتید، ولی خودش یک ایده‌ی عمومی است.

شما به شکلی آموزش دیده‌اید که یونیت‌های کد را در قالب کلاس ها ببینید. و وقتی به زبان‌هایی میرسید که دارای کلاس نیستند، اولین چیزی که به فکرتان میرسد این است که کلاس را در آن‌ها شبیه سازی کنید. درست است؟

این دیدگاه، شما را دچار مشکل میکند، و دلیل اصلی اش این است که شما حتی در زبان‌های شی‌گرا هم به درستی درک نکرده بودید که کلاس چیست! و همان دیدگاه اشتباه خود درباره کلاس رو به سایر زبان‌ها هم انتقال میدهید!

وقتی حرف از کلاس میشود، بیشتر افراد میکنند کلاس یک بلاک از کد است که تعدادی فیلد و متد را بین دو {} گرد هم آورده است.

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

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

ویژگی‌هایی وجود دارد که باعث میشود کلاس، کلاس بشود:

۱. کلاس دارای مکانیزم وراثت است.
۲. کلاس پلی مورفیسم مبتنی بر وراثت را فراهم میکند (متدهای virtual)
۳. از روی کلاس، میتوان آبجکتی در حافظه تولید کرد.
۴. کلاس آبجکت‌ها را دسته بندی میکند (برای همین اسمش class است). یعنی باید بتوان جواب این سوال را جویا شد: ایا فلان آبجکت جزو فلان کلاس است؟
۵. آبجکت‌های ساخته شده از روی کلاس، دارای لایف تایم متفاوتی از سایر بلاک ها هستند. ابجکت‌ها حالت رفرنس دارند. به این معنی که تقریبا در تمام زبان‌ها، در هیپ قرار میگیرند.

اینکه دیتا و توابع را کنار هم و در یک بلاک به اسم کلاس جمع کردن‌اند، به خاطر این است که یک کانتکست یکپارچه پدید آورند که در قالب آن بتوانند همه‌ی ویژگی‌های بالا را برآورده کنند.

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

یا مثلا در C یا سایر زبان‌ها، فیلد‌ها و متدها را در ماژول‌ها گرد هم میاورند. ایا با اینکار آن ماژول تبدیل به کلاس شده است؟

اتفاقی که این وسط افتاده این است:
۱. شما در حین یادگیری شی گرایی بدرستی درک نکردید که کلاس چیست!
۲. بر مبنای آن درک اشتباه، فکر کردید شی گرایی یعنی کنار هم قرار دادن فیلدها و متدها در یک بلاک.
۳. اصرار به این دارید که این درک اشتباه را در زبان‌هایی که اصلا دارای کلاس نیستند پیاده سازی کنید.

این همان جایی است که در زبان‌هایی مانند Go و Rust و Zig و C سایرین به مشکل بر میخورید. برای همین هست که میگویند این‌ها را با زبان‌های شی گرا اشتباه نگیرید. چون این‌ها از نظر ظاهری، شاید شرایطی را فراهم کنند که به چشم شما مشابه چیزی باشد که در شی گرایی به یاد داشتید، ولی از نظر Semantics با زبان‌های شی گرا متفاوت اند.

@DevTwitter | <Amirreza Gh/>
Forwarded from Linuxor ?
اینم یه فونت که برای برنامه نویسی و چیزای کدی ساخته شده

نصب‌ و توضیحات :
typeof.net/Iosevka

@Linuxor