Forwarded from متخصص وردپرس | پوینا via @vote
به نظر شما درآمد سایت فروش فایل بیشتره یا فروش محصولات فیزیکی ؟
anonymous poll
فروش فایل – 213
👍👍👍👍👍👍👍 75%
فروش محصولات فیزیکی – 71
👍👍 25%
👥 284 people voted so far.
anonymous poll
فروش فایل – 213
👍👍👍👍👍👍👍 75%
فروش محصولات فیزیکی – 71
👍👍 25%
👥 284 people voted so far.
Forwarded from Reza Jafari
از بنچمارکهای عمومی تا بنچمارکهای داخلی؛ چرا باید جدیشون بگیریم؟
ساختن internal benchmarks برای ارزیابی مدلهای زبانی بزرگ (LLM) یکی از مهمترین ابزارها برای درک واقعی از تواناییها و محدودیتهای مدل در کاربردهای خاصه. معیارهای عمومی که معمولا در تحقیقات یا گزارشهای رسمی منتشر میشن، بیشتر برای سنجش عملکرد کلی طراحی شدن و لزوما با نیازهای سازمان یا پروژه ما هماهنگ نیستن. به همین خاطر، وقتی میخوایم مدلی رو وارد محیط عملیاتی کنیم، لازم داریم معیارهایی طراحی کنیم که دقیقا همراستا با وظایف واقعی و اهداف ما باشن.
اولین قدم در طراحی benchmark داخلی اینه که مشخص کنیم دقیقا چه وظایف یا tasksی برای ما اهمیت دارن. مثلا ممکنه سازمان به توانایی مدل در خلاصهسازی، تولید کد، پاسخگویی به سؤالات تخصصی یا تحلیل متون نیاز داشته باشه. بعد از این مرحله باید دادهها و ورودیهایی جمعآوری بشن که بهخوبی بازتابدهنده همون حوزه باشن. این دادهها بهتره تنوع داشته باشن؛ بعضی ساده، بعضی متوسط و بعضی دشوار تا عملکرد مدل در سطوح مختلف بررسی بشه.
در گام بعد باید معیارهای ارزیابی یا evaluation metrics رو مشخص کنیم. این معیارها تنها به دقت یا accuracy محدود نمیشن، بلکه میتونن شامل شاخصهایی مثل روانی متن (fluency)، واقعگرایی و درستی اطلاعات (factuality)، ارتباط پاسخ با پرسش، و حتی پایداری (consistency) باشن. وزن هر معیار هم بسته به اهداف سازمان قابل تغییر و تنظیمه. بعد از اجرای مدل روی این ورودیها و جمعآوری نتایج، باید تحلیل دقیقی روی خطاها انجام بشه. این تحلیل کمک میکنه بفهمیم مدل دقیقا در چه موقعیتهایی ضعف نشون میده و چه الگوهای مشترکی در خروجیهای نامطلوب دیده میشن.
ساختن benchmark یک فرآیند ایستا نیست؛ بلکه نیازمند بازبینی و اصلاح مداومه. ممکنه بعد از چند بار اجرا لازم باشه دادههای جدید اضافه کنیم، ورودیها رو متنوعتر کنیم یا حتی وزن معیارها رو تغییر بدیم تا نتایج واقعیتر بشن. این چرخه تکراری باعث میشه benchmark به مرور دقیقتر و ارزشمندتر بشه. علاوه بر این، حتی بعد از اینکه مدل در محیط عملیاتی مستقر شد، لازمه همچنان benchmark داخلی اجرا بشه تا افت عملکرد یا تغییر رفتار مدل بهموقع شناسایی بشه.
البته این مسیر چالشهای خودش رو هم داره. تولید دادههای متنوع و باکیفیت زمانبره، و همیشه خطر overfitting روی دادههای benchmark وجود داره؛ یعنی مدل فقط برای همون ورودیها خوب جواب بده ولی در دنیای واقعی ضعیف عمل کنه. از طرف دیگه، معیارهایی مثل factuality یا اخلاقی بودن جوابها بهخاطر نداشتن پاسخ مطلق، سختتر قابل اندازهگیری هستن. به همین خاطر، همیشه باید تعادلی بین سادگی معیار و قدرت تفکیکدهندگی اون برقرار بشه.
بهطور خلاصه، internal benchmark ابزاریه که اگر درست طراحی و مدیریت بشه، میتونه به ما کمک کنه تصویری دقیقتر از تواناییهای واقعی LLM داشته باشیم و اطمینان پیدا کنیم که مدل در شرایط واقعی همون عملکردی رو نشون میده که انتظار داریم.
🔤 🔤 🔤 🔤 🔤 🔤 🔤
🥇 اهورا ارائه دهنده زیرساختهای هوش مصنوعی مبتنی بر GPU
🌐 لینک ارتباط با اهورا
@reza_jafari_ai
ساختن internal benchmarks برای ارزیابی مدلهای زبانی بزرگ (LLM) یکی از مهمترین ابزارها برای درک واقعی از تواناییها و محدودیتهای مدل در کاربردهای خاصه. معیارهای عمومی که معمولا در تحقیقات یا گزارشهای رسمی منتشر میشن، بیشتر برای سنجش عملکرد کلی طراحی شدن و لزوما با نیازهای سازمان یا پروژه ما هماهنگ نیستن. به همین خاطر، وقتی میخوایم مدلی رو وارد محیط عملیاتی کنیم، لازم داریم معیارهایی طراحی کنیم که دقیقا همراستا با وظایف واقعی و اهداف ما باشن.
اولین قدم در طراحی benchmark داخلی اینه که مشخص کنیم دقیقا چه وظایف یا tasksی برای ما اهمیت دارن. مثلا ممکنه سازمان به توانایی مدل در خلاصهسازی، تولید کد، پاسخگویی به سؤالات تخصصی یا تحلیل متون نیاز داشته باشه. بعد از این مرحله باید دادهها و ورودیهایی جمعآوری بشن که بهخوبی بازتابدهنده همون حوزه باشن. این دادهها بهتره تنوع داشته باشن؛ بعضی ساده، بعضی متوسط و بعضی دشوار تا عملکرد مدل در سطوح مختلف بررسی بشه.
در گام بعد باید معیارهای ارزیابی یا evaluation metrics رو مشخص کنیم. این معیارها تنها به دقت یا accuracy محدود نمیشن، بلکه میتونن شامل شاخصهایی مثل روانی متن (fluency)، واقعگرایی و درستی اطلاعات (factuality)، ارتباط پاسخ با پرسش، و حتی پایداری (consistency) باشن. وزن هر معیار هم بسته به اهداف سازمان قابل تغییر و تنظیمه. بعد از اجرای مدل روی این ورودیها و جمعآوری نتایج، باید تحلیل دقیقی روی خطاها انجام بشه. این تحلیل کمک میکنه بفهمیم مدل دقیقا در چه موقعیتهایی ضعف نشون میده و چه الگوهای مشترکی در خروجیهای نامطلوب دیده میشن.
ساختن benchmark یک فرآیند ایستا نیست؛ بلکه نیازمند بازبینی و اصلاح مداومه. ممکنه بعد از چند بار اجرا لازم باشه دادههای جدید اضافه کنیم، ورودیها رو متنوعتر کنیم یا حتی وزن معیارها رو تغییر بدیم تا نتایج واقعیتر بشن. این چرخه تکراری باعث میشه benchmark به مرور دقیقتر و ارزشمندتر بشه. علاوه بر این، حتی بعد از اینکه مدل در محیط عملیاتی مستقر شد، لازمه همچنان benchmark داخلی اجرا بشه تا افت عملکرد یا تغییر رفتار مدل بهموقع شناسایی بشه.
البته این مسیر چالشهای خودش رو هم داره. تولید دادههای متنوع و باکیفیت زمانبره، و همیشه خطر overfitting روی دادههای benchmark وجود داره؛ یعنی مدل فقط برای همون ورودیها خوب جواب بده ولی در دنیای واقعی ضعیف عمل کنه. از طرف دیگه، معیارهایی مثل factuality یا اخلاقی بودن جوابها بهخاطر نداشتن پاسخ مطلق، سختتر قابل اندازهگیری هستن. به همین خاطر، همیشه باید تعادلی بین سادگی معیار و قدرت تفکیکدهندگی اون برقرار بشه.
بهطور خلاصه، internal benchmark ابزاریه که اگر درست طراحی و مدیریت بشه، میتونه به ما کمک کنه تصویری دقیقتر از تواناییهای واقعی LLM داشته باشیم و اطمینان پیدا کنیم که مدل در شرایط واقعی همون عملکردی رو نشون میده که انتظار داریم.
@reza_jafari_ai
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from یه شعر (Poem Bot)
حافظ | غزلیات | غزل شمارهٔ ۱۰۹
دیر است که دل دار پیامی نفرستاد
ننوشت سلامی و کلامی نفرستاد
صد نامه فرستادم و آن شاه سواران
پیکی ندوانید و سلامی نفرستاد
سوی من وحشی صفت عقل رمیده
آهو روشی کبک خرامی نفرستاد
دانست که خواهد شدنم مرغ دل از دست
وز آن خط چون سلسله دامی نفرستاد
فریاد که آن ساقی شکر لب سرمست
دانست که مخمورم و جامی نفرستاد
چندان که زدم لاف کرامات و مقامات
هیچم خبر از هیچ مقامی نفرستاد
حافظ به ادب باش که واخواست نباشد
گر شاه پیامی به غلامی نفرستاد
#حافظ | گنجور
📍@iipoem
دیر است که دل دار پیامی نفرستاد
ننوشت سلامی و کلامی نفرستاد
صد نامه فرستادم و آن شاه سواران
پیکی ندوانید و سلامی نفرستاد
سوی من وحشی صفت عقل رمیده
آهو روشی کبک خرامی نفرستاد
دانست که خواهد شدنم مرغ دل از دست
وز آن خط چون سلسله دامی نفرستاد
فریاد که آن ساقی شکر لب سرمست
دانست که مخمورم و جامی نفرستاد
چندان که زدم لاف کرامات و مقامات
هیچم خبر از هیچ مقامی نفرستاد
حافظ به ادب باش که واخواست نباشد
گر شاه پیامی به غلامی نفرستاد
#حافظ | گنجور
📍@iipoem
Forwarded from DevTwitter | توییت برنامه نویسی
یه مینیاپ که متدهای استرینگ توی جاوااسکریپت رو با توضیح و مثال نشون میده.
دم دست و سریع، مخصوص وقتایی که یادت میره کدوم متد چی کار میکنه.
دموی آنلاین:
https://js-string-methods.vercel.app
سورسکد:
https://github.com/DevTwitter/js-string-methods
@DevTwitter
دم دست و سریع، مخصوص وقتایی که یادت میره کدوم متد چی کار میکنه.
دموی آنلاین:
https://js-string-methods.vercel.app
سورسکد:
https://github.com/DevTwitter/js-string-methods
@DevTwitter
Forwarded from Gopher Academy
🔵 عنوان مقاله
Go Allocations Explorer Extension for VSCode
🟢 خلاصه مقاله:
این افزونه با نام Go Allocations Explorer Extension برای VS Code به برنامهنویسان Go کمک میکند تا محل و میزان تخصیص حافظه را بر پایه بنچمارکهای موجودشان مستقیماً داخل ویرایشگر ببینند. با اجرای go test -bench و استفاده از -benchmem، نتایج تخصیصها جمعآوری و به فهرستی قابل پیمایش تبدیل میشود تا بتوانید بهسرعت هاتاسپاتها را یافته و از همان ورودیها به کد مربوطه بپرید. امکان اجرا و تکرار بنچمارکها، مشاهده و مقایسه سریع نتایج، و مرتبسازی/فیلتر کردن بر اساس پکیج، تست یا تابع فراهم است. راهاندازی ساده است، فقط نیاز به ابزار Go دارد و روی macOS، Linux و Windows کار میکند. خروجیها در خود VS Code به شکل قابل فهم ارائه میشوند تا کاهش تخصیصها، کم شدن فشار GC و بهبود تأخیر بهصورت مستمر و در جریان کدنویسی انجام شود.
#Go #VSCode #Golang #Performance #Benchmarking #MemoryAllocations #Profiling #DeveloperTools
🟣لینک مقاله:
https://golangweekly.com/link/174659/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Go Allocations Explorer Extension for VSCode
🟢 خلاصه مقاله:
این افزونه با نام Go Allocations Explorer Extension برای VS Code به برنامهنویسان Go کمک میکند تا محل و میزان تخصیص حافظه را بر پایه بنچمارکهای موجودشان مستقیماً داخل ویرایشگر ببینند. با اجرای go test -bench و استفاده از -benchmem، نتایج تخصیصها جمعآوری و به فهرستی قابل پیمایش تبدیل میشود تا بتوانید بهسرعت هاتاسپاتها را یافته و از همان ورودیها به کد مربوطه بپرید. امکان اجرا و تکرار بنچمارکها، مشاهده و مقایسه سریع نتایج، و مرتبسازی/فیلتر کردن بر اساس پکیج، تست یا تابع فراهم است. راهاندازی ساده است، فقط نیاز به ابزار Go دارد و روی macOS، Linux و Windows کار میکند. خروجیها در خود VS Code به شکل قابل فهم ارائه میشوند تا کاهش تخصیصها، کم شدن فشار GC و بهبود تأخیر بهصورت مستمر و در جریان کدنویسی انجام شود.
#Go #VSCode #Golang #Performance #Benchmarking #MemoryAllocations #Profiling #DeveloperTools
🟣لینک مقاله:
https://golangweekly.com/link/174659/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Visualstudio
Go Allocations Explorer - Visual Studio Marketplace
Extension for Visual Studio Code - An extension that helps locate Go allocations, using your benchmarks.
Forwarded from نوشتههای ترمینالی
دوستان اکتبر شروع شده و باز برنامه هکتوبرفست در جریانه.
قضیه از این قراره که اگه توی ماه اکتبر ۶ تا مرج ریکویست ارسال کنید که مرج بشه، بج هکتوبرفست میگیرید. قبلا تیشرت هم میدادن البته ولی با توجه به سواستفاده ها دیگه انگار خبری نیست. :)
https://hacktoberfest.com
قضیه از این قراره که اگه توی ماه اکتبر ۶ تا مرج ریکویست ارسال کنید که مرج بشه، بج هکتوبرفست میگیرید. قبلا تیشرت هم میدادن البته ولی با توجه به سواستفاده ها دیگه انگار خبری نیست. :)
https://hacktoberfest.com
Hacktoberfest
Hacktoberfest 2025
Hacktoberfest: a month-long celebration of open-source projects, their maintainers, and the entire community of contributors.
Forwarded from Programming Hobby
Forwarded from DevTwitter | توییت برنامه نویسی
استارهای روی پست از استارهای روی ریپو بیشترن 🥲
Forwarded from DevTwitter | توییت برنامه نویسی
میخوام یک وب سایت خیلی خوب برای گولنگ بهتون معرفی کنم، https://awesome-go.com/
این وب سایت فوق العادس برای دیدن کد تو هر موضوعی که فکرشو کنید در کانکارنسی، CLI، وب و هرچیز دیگه ای.
کافیه برین داخلش عنوان ابزار، کتابخونه یا حتی نمونه کد مورد نظر خودتون رو پیدا کنید و ریپازیتوری اوپن سورس مرتبطش رو باز کنید و داکیومنشن یا کدش رو بخونید.
واقعا جذابه پیشنهاد میکنم حتما ببینید
@DevTwitter | <Abolfazl Alizadeh/>
این وب سایت فوق العادس برای دیدن کد تو هر موضوعی که فکرشو کنید در کانکارنسی، CLI، وب و هرچیز دیگه ای.
کافیه برین داخلش عنوان ابزار، کتابخونه یا حتی نمونه کد مورد نظر خودتون رو پیدا کنید و ریپازیتوری اوپن سورس مرتبطش رو باز کنید و داکیومنشن یا کدش رو بخونید.
واقعا جذابه پیشنهاد میکنم حتما ببینید
@DevTwitter | <Abolfazl Alizadeh/>
Forwarded from DevTwitter | توییت برنامه نویسی
Forwarded from Gopher Academy
میخوام یک وب سایت خیلی خوب برای گولنگ بهتون معرفی کنم، https://awesome-go.com/
این وب سایت فوق العادس برای دیدن کد تو هر موضوعی که فکرشو کنید در کانکارنسی، CLI، وب و هرچیز دیگه ای.
کافیه برین داخلش عنوان ابزار، کتابخونه یا حتی نمونه کد مورد نظر خودتون رو پیدا کنید و ریپازیتوری اوپن سورس مرتبطش رو باز کنید و داکیومنشن یا کدش رو بخونید.
واقعا جذابه پیشنهاد میکنم حتما ببینید
<Abolfazl Alizadeh/>
این وب سایت فوق العادس برای دیدن کد تو هر موضوعی که فکرشو کنید در کانکارنسی، CLI، وب و هرچیز دیگه ای.
کافیه برین داخلش عنوان ابزار، کتابخونه یا حتی نمونه کد مورد نظر خودتون رو پیدا کنید و ریپازیتوری اوپن سورس مرتبطش رو باز کنید و داکیومنشن یا کدش رو بخونید.
واقعا جذابه پیشنهاد میکنم حتما ببینید
<Abolfazl Alizadeh/>
Awesome-Go
A curated list of awesome Go frameworks, libraries and software - Awesome Go
A curated list of awesome #Golang frameworks, libraries and software
Forwarded from Gopher Academy
🔵 عنوان مقاله
Building Conway’s Game of Life with raylib-go
🟢 خلاصه مقاله:
یک پروژه تفننی و آموزشی است: پیادهسازی Conway’s Game of Life با استفاده از raylib-go در Go. برنامه یک پنجره باز میکند، شبکهای دوبعدی از سلولها میسازد و هر فریم سلولهای زنده و مرده را بهصورت مستطیلهای رنگی رسم میکند. قوانین استاندارد (شمارش ۸ همسایه و اعمال قوانین کمجمعیتی، بقا، تراکم و تولیدمثل) با double-buffering اجرا میشوند تا محاسبات نسل بعدی تمیز و قابل اتکا باشد و در صورت نیاز امکان دورپیچی مرزها هم در نظر گرفته شده است. تعاملها شامل توقف/ادامه، گامبهگام، تنظیم سرعت، پاکسازی یا تصادفیسازی صفحه و تغییر وضعیت سلولها با کلیک ماوس است؛ ذخیره/بارگذاری الگوهای ساده هم قابل افزودن است. حلقه بهروزرسانی مستقل از نرخ رندر زمانبندی میشود تا اجرای روان و کارآمد حفظ شود و روی Windows، macOS و Linux بهخوبی اجرا میشود. کد نهایی ارائه شده و برای توسعه ایدههایی مانند کتابخانه الگوها، کنترلهای بهتر زوم/پن، گرادیانرنگ بر اساس سن سلول و ارزیابی عملکرد قابل گسترش است.
#ConwaysGameOfLife #raylib #raylibgo #Go #GameDev #CellularAutomata #GraphicsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174642/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Building Conway’s Game of Life with raylib-go
🟢 خلاصه مقاله:
یک پروژه تفننی و آموزشی است: پیادهسازی Conway’s Game of Life با استفاده از raylib-go در Go. برنامه یک پنجره باز میکند، شبکهای دوبعدی از سلولها میسازد و هر فریم سلولهای زنده و مرده را بهصورت مستطیلهای رنگی رسم میکند. قوانین استاندارد (شمارش ۸ همسایه و اعمال قوانین کمجمعیتی، بقا، تراکم و تولیدمثل) با double-buffering اجرا میشوند تا محاسبات نسل بعدی تمیز و قابل اتکا باشد و در صورت نیاز امکان دورپیچی مرزها هم در نظر گرفته شده است. تعاملها شامل توقف/ادامه، گامبهگام، تنظیم سرعت، پاکسازی یا تصادفیسازی صفحه و تغییر وضعیت سلولها با کلیک ماوس است؛ ذخیره/بارگذاری الگوهای ساده هم قابل افزودن است. حلقه بهروزرسانی مستقل از نرخ رندر زمانبندی میشود تا اجرای روان و کارآمد حفظ شود و روی Windows، macOS و Linux بهخوبی اجرا میشود. کد نهایی ارائه شده و برای توسعه ایدههایی مانند کتابخانه الگوها، کنترلهای بهتر زوم/پن، گرادیانرنگ بر اساس سن سلول و ارزیابی عملکرد قابل گسترش است.
#ConwaysGameOfLife #raylib #raylibgo #Go #GameDev #CellularAutomata #GraphicsProgramming
🟣لینک مقاله:
https://golangweekly.com/link/174642/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
packagemain.tech
Building Conway’s Game of Life in Go with raylib-go
A step-by-step tutorial on building Conway’s Game of Life in Go, using raylib-go for graphics. Learn how to draw grids, apply the rules of life, and simulate evolving patterns.
Forwarded from Reza Jafari
سلام بچهها
برای منتورینگ یه ظرفیت باز شده، در مورد ساز و کار منتورینگ بالا توضیح دادم و اگر سوالی داشتین به آیدی زیر پیام بدین تا در موردش صحبت کنیم.
مرسی
@rzdjafari
برای منتورینگ یه ظرفیت باز شده، در مورد ساز و کار منتورینگ بالا توضیح دادم و اگر سوالی داشتین به آیدی زیر پیام بدین تا در موردش صحبت کنیم.
مرسی
@rzdjafari
Forwarded from کانال اطلاعرسانی توزیع پارچ
«تَهِ ده» نزدیک است، با پارچ به رایانه خود جانی دوباره ببخشید!
در کمتر از ۲ هفته دیگر (۱۴ اکتبر/۲۲ مهرماه) پشتیبانی از ویندوز ۱۰ به پایان میرسد و چند ملیون رایانه را در معرض خطرات امنیتی قرار میدهد.
با مهاجرت به گنو/لینوکس میتوانید به رایانه خود جانی دوباره ببخشید.
مطالعه از بلاگ پارچ
مهاجرت به پارچ در ۵ قدم
https://wiki.parchlinux.com/fa/windows-to-parch-migration
برای سازمانها و شرکتهایی که قصد مهاجرت دارند، بهزودی اخباری از آپادانا منتشر خواهد شد، منتظر باشید..
@ParchLinux
در کمتر از ۲ هفته دیگر (۱۴ اکتبر/۲۲ مهرماه) پشتیبانی از ویندوز ۱۰ به پایان میرسد و چند ملیون رایانه را در معرض خطرات امنیتی قرار میدهد.
با مهاجرت به گنو/لینوکس میتوانید به رایانه خود جانی دوباره ببخشید.
مطالعه از بلاگ پارچ
مهاجرت به پارچ در ۵ قدم
https://wiki.parchlinux.com/fa/windows-to-parch-migration
برای سازمانها و شرکتهایی که قصد مهاجرت دارند، بهزودی اخباری از آپادانا منتشر خواهد شد، منتظر باشید..
@ParchLinux
Forwarded from Gopher Academy
مشکل "mutex copying" در Go یعنی کپی کردن یک mutex به جای استفاده از pointer به آن. این کار باعث میشه که mutex اصلی و کپی شده دو شیء جداگانه بشن و قفلگذاری درست کار نکنه.
چرا مشکل ساز است؟
وقتی یک mutex رو کپی میکنی، حالت داخلی اش (locked/unlocked) کپی نمیشه به درستی و هر کدوم مستقل عمل میکنن. این یعنی race condition و عدم هماهنگی بین goroutine ها.
1. همیشه از pointer receiver استفاده کن وقتی mutex داری:
2. هرگز mutex رو به صورت value پاس نده:
3. ا Go vet ابزار خوبیه که این مشکل رو پیدا میکنه:
4. اگه struct رو embed میکنی**، حواست باشه که اون رو کپی نکنی
5. **انواع Mutex ها همه این مشکل رو دارن:
این یکی از رایجترین اشتباهات تو Go هست، خصوصا برای کسایی که تازه شروع کردن!
چرا مشکل ساز است؟
وقتی یک mutex رو کپی میکنی، حالت داخلی اش (locked/unlocked) کپی نمیشه به درستی و هر کدوم مستقل عمل میکنن. این یعنی race condition و عدم هماهنگی بین goroutine ها.
1. همیشه از pointer receiver استفاده کن وقتی mutex داری:
func (c *Counter) method()2. هرگز mutex رو به صورت value پاس نده:
func badFunc(mu sync.Mutex) 3. ا Go vet ابزار خوبیه که این مشکل رو پیدا میکنه:
go vet ./...
4. اگه struct رو embed میکنی**، حواست باشه که اون رو کپی نکنی
5. **انواع Mutex ها همه این مشکل رو دارن:
sync.Mutex, sync.RWMutex,
sync.WaitGroup, sync.Condاین یکی از رایجترین اشتباهات تو Go هست، خصوصا برای کسایی که تازه شروع کردن!
Forwarded from Gopher Academy
💙نمونه استفاده درست👇
package main
import (
"fmt"
"sync"
"time"
)
type Counter struct {
mu sync.Mutex
value int
}
func (c *Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
fmt.Printf("Value: %d\n", c.value)
}
func goodFunction(c *Counter) {
c.mu.Lock()
defer c.mu.Unlock()
c.value = 100
}
func main() {
counter := &Counter{}
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func() {
defer wg.Done()
counter.Increment()
}()
}
wg.Add(1)
go func() {
defer wg.Done()
goodFunction(counter)
}()
wg.Wait()
fmt.Printf("Final value: %d\n", counter.value)
}
type SafeMap struct {
mu sync.RWMutex
data map[string]int
}
func NewSafeMap() *SafeMap {
return &SafeMap{
data: make(map[string]int),
}
}
func (sm *SafeMap) Set(key string, value int) {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.data[key] = value
}
func (sm *SafeMap) Get(key string) (int, bool) {
sm.mu.RLock()
defer sm.mu.RUnlock()
val, ok := sm.data[key]
return val, ok
}
Forwarded from Gopher Academy
❤️نمونه اشتباه
package main
import (
"fmt"
"sync"
"time"
)
type Counter struct {
mu sync.Mutex
value int
}
func (c Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.value++
fmt.Printf("Value: %d\n", c.value)
}
func badFunction(c Counter) {
c.mu.Lock()
defer c.mu.Unlock()
c.value = 100
}
func main() {
counter := Counter{}
for i := 0; i < 5; i++ {
go counter.Increment()
}
go badFunction(counter)
time.Sleep(time.Second)
fmt.Printf("Final value: %d\n", counter.value)
}
Forwarded from DevTwitter | توییت برنامه نویسی
This media is not supported in your browser
VIEW IN TELEGRAM
اگه از این coding agent ها استفاده نمیکنید سخت در اشتباهید. اگه مشکل پرداخت دلاری و کلا گرون بودن دارید این ۳ تا واقعا پلن های رایگانشون خیلی عالی هست. گوگل gemini که روزی ۱۰۰۰ تا request رایگان میده. مدل Qwen هم همینطور. با CLI هاشون کار کنید توی ترمینال یا vscode یا هر جایی که کد میزنید. opencode پلن رایگان نداره ولی راحت میتونید یک مدل اپن سورس را دانلود کنید و به صورت لوکال اجرا کنید. این CLI ها چون حالت agentic دارند خیلی خوب کار میکنند. حتا برای کارهای غیر از کدنینگ هم میتونید استفاده کنید. اگه از این ابزارها استفاده کنید وارد یک لِوِل دیگه ای میشید! اینجا برای خیلی از شرکت ها استفاده از این coding agent ها انتخاب نیست و یکجور نیازه.
-Gemini cli: https://github.com/google-gemini/gemini-cli
-Qwen cli: https://github.com/QwenLM/qwen-code
-Opencode: https://opencode.ai
@DevTwitter | <Mehdi Allahyari/>
-Gemini cli: https://github.com/google-gemini/gemini-cli
-Qwen cli: https://github.com/QwenLM/qwen-code
-Opencode: https://opencode.ai
@DevTwitter | <Mehdi Allahyari/>
Forwarded from 🎄 یک برنامه نویس تنبل (Lazy 🌱)
🔶 قیمت دامنههای ir از اول آبان بیش از ۵۰ درصد گران میشود
مدیرعامل سایتهای «رند» و «نام» همچنین در پاسخ به این که آیا این موضوع به معنی دوبرابر شدن هزینههای ثبت دامین خواهد شد یا خیر به زومیت گفت:
احتمالا افزایش قیمتها بیشتر از دو برابر خواهد بود. رقم ۴۵ هزار تومان فقط برای خرج یونیتها مصرف میشود و باید به این رقم مبلغ مالیات و ارزش افزوده و هزینههای جاری دیگر را اضافه کنیم. در واقع، باید بگوییم هزینهها حداقل دو برابر میشود ولی احتمالا تا ۸۵ الی ۱۰۰ هزار تومان میرسد. نمایندگان هم احتمالا هزینه تمام شدهشان کمی بیشتر از دو برابر قیمت قبل خواهد شد.
#خبر
@TheRaymondDev
مدیرعامل سایتهای «رند» و «نام» همچنین در پاسخ به این که آیا این موضوع به معنی دوبرابر شدن هزینههای ثبت دامین خواهد شد یا خیر به زومیت گفت:
احتمالا افزایش قیمتها بیشتر از دو برابر خواهد بود. رقم ۴۵ هزار تومان فقط برای خرج یونیتها مصرف میشود و باید به این رقم مبلغ مالیات و ارزش افزوده و هزینههای جاری دیگر را اضافه کنیم. در واقع، باید بگوییم هزینهها حداقل دو برابر میشود ولی احتمالا تا ۸۵ الی ۱۰۰ هزار تومان میرسد. نمایندگان هم احتمالا هزینه تمام شدهشان کمی بیشتر از دو برابر قیمت قبل خواهد شد.
#خبر
@TheRaymondDev
زومیت
قیمت دامنههای ir از اول آبان بیش از ۵۰ درصد گران میشود
از ابتدای آبانماه ۱۴۰۴ هزینه ثبت دامنههای ir با تصمیم ایرنیک بیش از دو برابر میشود.
Forwarded from کانال مهرداد لینوکس
📄 دستور touch در لینوکس
✅ دستور touch در لینوکس بیشتر برای ایجاد فایل خالی یا تغییر زمان آخرین دسترسی/تغییر (timestamp) استفاده میشه.
اپشنهای متداول:
🔥 ترفندهای ترکیبی و خلاقانه
برای مدیریت فایل های پروژه
#دیوار_لینوکس
@MehrdadLinuxchannel
#Linux #لینوکس
#linux_command
✅ دستور touch در لینوکس بیشتر برای ایجاد فایل خالی یا تغییر زمان آخرین دسترسی/تغییر (timestamp) استفاده میشه.
اپشنهای متداول:
touch file.txt
touch file1.txt file2.txt file3.txt
touch -t 202509261230 file.txt تغییر زمان
touch -r source.txt target.txt کپی زمان از یک فایل دیگه
🔥 ترفندهای ترکیبی و خلاقانه
touch file{1..5}.txt سری فایل
touch * بهروزرسانی زمان همه فایل هابرای مدیریت فایل های پروژه
touch project/{src/main.py,README.md,docs/guide.md} #دیوار_لینوکس
@MehrdadLinuxchannel
#Linux #لینوکس
#linux_command