uz
Feedback
Gopher Academy

Gopher Academy

Kanalga Telegram’da o‘tish
3 813
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
+230 kunlar
Obunachilarni jalb qilish
Avgust '26
Avgust '26
+2
0 kanalda
Iyul '26
+58
0 kanalda
Get PRO
Iyun '26
+67
0 kanalda
Get PRO
May '26
+45
0 kanalda
Get PRO
Aprel '26
+24
5 kanalda
Get PRO
Mart '26
+10
0 kanalda
Get PRO
Fevral '26
+79
1 kanalda
Get PRO
Yanvar '26
+29
8 kanalda
Get PRO
Dekabr '25
+103
7 kanalda
Get PRO
Noyabr '25
+72
0 kanalda
Get PRO
Oktabr '25
+598
1 kanalda
Get PRO
Sentabr '25
+61
6 kanalda
Get PRO
Avgust '25
+84
9 kanalda
Get PRO
Iyul '25
+99
10 kanalda
Get PRO
Iyun '25
+47
7 kanalda
Get PRO
May '25
+45
1 kanalda
Get PRO
Aprel '25
+63
8 kanalda
Get PRO
Mart '25
+90
8 kanalda
Get PRO
Fevral '25
+91
3 kanalda
Get PRO
Yanvar '25
+96
3 kanalda
Get PRO
Dekabr '24
+113
7 kanalda
Get PRO
Noyabr '24
+94
2 kanalda
Get PRO
Oktabr '24
+116
4 kanalda
Get PRO
Sentabr '24
+138
4 kanalda
Get PRO
Avgust '24
+101
2 kanalda
Get PRO
Iyul '24
+187
5 kanalda
Get PRO
Iyun '24
+173
11 kanalda
Get PRO
May '24
+301
2 kanalda
Get PRO
Aprel '24
+185
3 kanalda
Get PRO
Mart '24
+172
3 kanalda
Get PRO
Fevral '24
+154
0 kanalda
Get PRO
Yanvar '24
+207
0 kanalda
Get PRO
Dekabr '23
+215
4 kanalda
Get PRO
Noyabr '23
+77
2 kanalda
Get PRO
Oktabr '23
+79
0 kanalda
Get PRO
Sentabr '23
+70
0 kanalda
Get PRO
Avgust '23
+108
0 kanalda
Get PRO
Iyul '23
+68
0 kanalda
Get PRO
Iyun '23
+106
0 kanalda
Get PRO
May '23
+211
0 kanalda
Get PRO
Aprel '23
+142
0 kanalda
Get PRO
Mart '23
+56
0 kanalda
Get PRO
Fevral '23
+70
0 kanalda
Get PRO
Yanvar '23
+62
0 kanalda
Get PRO
Dekabr '22
+14
0 kanalda
Get PRO
Noyabr '22
+24
0 kanalda
Get PRO
Oktabr '22
+15
0 kanalda
Get PRO
Sentabr '22
+78
0 kanalda
Get PRO
Avgust '22
+47
0 kanalda
Get PRO
Iyul '22
+36
0 kanalda
Get PRO
Iyun '22
+26
0 kanalda
Get PRO
May '22
+27
0 kanalda
Get PRO
Aprel '22
+14
0 kanalda
Get PRO
Mart '22
+21
0 kanalda
Get PRO
Fevral '22
+13
0 kanalda
Get PRO
Yanvar '22
+24
0 kanalda
Get PRO
Dekabr '21
+51
0 kanalda
Get PRO
Noyabr '21
+107
0 kanalda
Get PRO
Oktabr '21
+13
0 kanalda
Get PRO
Sentabr '21
+31
0 kanalda
Get PRO
Avgust '21
+29
0 kanalda
Get PRO
Iyul '21
+41
0 kanalda
Get PRO
Iyun '21
+29
0 kanalda
Get PRO
May '21
+26
0 kanalda
Get PRO
Aprel '21
+49
0 kanalda
Get PRO
Mart '21
+376
0 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
01 Avgust+2
Kanal postlari
🔵 عنوان مقاله soup 2.0: A Beautiful Soup-Inspired Web Scraper 🟢 خلاصه مقاله: در دنیای توسعه وب و تحلیل داده‌ها، ابزارهای قدرتمند برای استخراج اطلاعات از صفحات اینترنتی نقش مهمی ایفا می‌کنند. یکی از معروف‌ترین این ابزارها، کتابخانه "بیوتیفول سوپ" (Beautiful Soup) در زبان پایتون است که برای جمع‌آوری و تجزیه و تحلیل محتواهای وب بسیار پرکاربرد است. این کتابخانه قابلیت بارگذاری صفحات، تفکیک عناصر HTML و ناوبری آسان در میان عناصر صفحه را فراهم می‌کند، به گونه‌ای که کاربر می‌تواند اطلاعات مورد نیاز خود را به سادگی استخراج کند و تحلیل‌های خود را انجام دهد. در پاسخ به نیازهای توسعه‌دهندگان و تحلیل‌گران داده، ابزار جدیدی با نام "سوپ ۲.۰" طراحی شده است که کاملاً الهام‌گرفته از قدرت و سادگی بیوتیفول سوپ است. این ابزار امکاناتی از قبیل بارگذاری صفحات وب، تجزیه و تحلیل ساختارهای HTML و ناوبری در میان عناصر آن را ارائه می‌دهد. هدف اصلی این پروژه، تسهیل فرآیند استخراج داده‌های وب و فراهم کردن یک رابط کاربری ساده و کارآمد برای کاربران است تا بدون صرف زمان زیاد، بتوانند اطلاعات مورد نیاز خود را به‌درستی و کارآمد استخراج کنند. این ابزار نه تنها برای برنامه‌نویسان و توسعه‌دهندگان وب، بلکه برای پژوهشگران حوزه تحلیل داده و علاقه‌مندان به جمع‌آوری اطلاعات از وب نیز بسیار مناسب است. به این ترتیب، "سوپ ۲.۰" با ارائه قابلیت‌هایی مشابه نمونه‌های محبوب و با امکانات توسعه یافته‌تر، حالا گزینه‌ای مطمئن و موثر برای کاربری آسان و سریع در پروژه‌های مختلف محسوب می‌شود. #وباسکریپینگ #تحلیل_وب #استخراج_داده #برنامه‌نویسی 🟣لینک مقاله: https://github.com/anaskhan96/soup ➖➖➖➖➖➖➖➖ 👑 @gopher_academy

2
امکان تغییر آدرس ایمیل 📧✨ اگر این قابلیت برای حسابت فعال شده باشد، می‌توانی آدرس @gmail.com خودت را بدون ساختن حساب جدید تغییر بدهی. این قابلیت به‌صورت تدریجی برای کاربران منتشر شده و ممکن است هنوز برای همه فعال نباشد. (Google Help) روش اول (کامپیوتر - پیشنهاد گوگل) 💻🔍 وارد حساب گوگلت شو: Google Account از منوی سمت چپ روی Personal info (اطلاعات شخصی) کلیک کن. بخش Contact info را باز کن. روی Email کلیک کن. گزینه Google Account email را انتخاب کن. اگر گزینه Change Google Account email یا تغییر آدرس ایمیل گوگل را می‌بینی: روی آن کلیک کن. نام جدید دلخواهت را وارد کن. اگر آزاد باشد، ادامه بده. کد تأیید یا مراحل امنیتی را انجام بده. 🔒✅ بعد از تأیید: ایمیل جدید، آدرس اصلی حسابت می‌شود. ایمیل قبلی به‌عنوان Alternate Email (آدرس جایگزین) باقی می‌ماند. ایمیل‌هایی که به آدرس قدیمی ارسال شوند نیز همچنان به همان Inbox می‌رسند. (Google Help) اگر این گزینه را نمی‌بینی 🚫 اگر در مرحله ۶ گزینه Change Google Account email وجود ندارد، یعنی هنوز این قابلیت برای حسابت فعال نشده است. گوگل آن را به‌صورت مرحله‌ای منتشر می‌کند و ممکن است چند هفته یا چند ماه دیگر برای حسابت فعال شود. (Google Help) قبل از تغییر این نکات را بدان 📝👀 همه ایمیل‌ها، فایل‌های Drive، عکس‌های Photos و اطلاعات حسابت حفظ می‌شوند. 💾 می‌توانی با ایمیل قدیمی و جدید وارد حسابت شوی. 🔑 برخی تنظیمات دستگاه یا برنامه‌ها ممکن است نیاز به ورود مجدد داشته باشند. فقط هر ۱۲ ماه یک‌بار می‌توانی آدرس را تغییر دهی و تعداد تغییرها نیز محدود است. (Google Help)
62
3
نه تنها بنزین گران شد بلکه سهمیه نیز کمتر شد. https://t.me/+Bp8JeTpQoiUwMjVk
نه تنها بنزین گران شد بلکه سهمیه نیز کمتر شد. https://t.me/+Bp8JeTpQoiUwMjVk
123
4
🔵 عنوان مقاله Adding Go to a Browser Code Runner 🟢 خلاصه مقاله: در دهه اخیر، توسعه‌دهندگان همواره به دنبال راه‌هایی بوده‌اند تا تجربه برنامه‌نویسی در مرورگرهای وب را آسان‌تر و کاراتر کنند. یکی از چالش‌های رایج، اجرای کدهای زبان‌هایی مانند Go در محیط مرورگر است. در مقالات و پروژه‌های مختلف، معمولاً راه‌حل‌هایی برای این منظور ارائه شده است که البته هر کدام با موانع و محدودیت‌هایی همراه هستند. در این مطلب، نگاهی می‌اندازیم به فرآیند افزودن زبان برنامه‌نویسی Go به یک اجراکننده کد در مرورگر، دلایل عدم موفقیت رویکرد‌‌های معمول مانند تنظیم متغیر GOOS=js در محیط‌های مختلف، و نحوه‌ی حل این مشکل با کامپایل کردن مفسر Yaegi به استاندارد WASI، که نهایتاً اجرای کدهای Go را در مرورگر به صورت روان و بدون مشکل ممکن ساخت. در ابتدا، باید بدانیم که راه‌حل‌های رایج برای اجرای کدهای Go در بستر مرورگر، تلاش برای تغییر تنظیمات سیستم‌عامل مجازی و یا استفاده از ابزارهای شبیه‌ساز است. یکی از این روش‌ها، تنظیم متغیر محیطی GOOS برابر با js است، که به طور معمول اجازه می‌دهد کدهای Go برای اجرا در محیط‌های مبتنی بر JavaScript ساخته شوند. اما در عمل، این رویکرد در محیط‌های جداشده و ماشین‌های مجازی مانند V8 isolation، چندان مؤثر نبود و نتایج قابل قبول حاصل نکرد. مشکل اصلی در اینجا، محدودیت‌های ایزوله‌سازی V8 و ناتوانی در اجرای برنامه‌های ساخته‌شده بر اساس تنظیمات خاص سیستم‌عامل مجازی است. پس از بررسی این موضوع، تیم توسعه اقدام به کامپایل کردن مفسر Yaegi، یک مفسر بسیار قابل انعطاف برای زبان Go، به استاندارد WASI کرد. این کار باعث شد که مفسر به خوبی در محیط‌های جداشده اجرا شده و کدهای Go بدون نیاز به تغییرات زیاد، در مرورگرها به اجرا درآیند. در نتیجه، این استراتژی، راه‌حلی پایدار و جامع برای اجرای زبان Go در فضای مرورگر بود، که برخلاف رویکردهای اولیه، توانست مشکلات مربوط به محدودیت‌های محیط‌های ایزوله و سازگاری با استانداردهای وب را حل کند. این تجربۀ موفقیت‌آمیز نشان می‌دهد که مرزهای فناوری‌های وب به تدریج در حال درنوردیدن هستند و دسترسی به زبان‌های متنوع در مرورگرهای مدرن امکان‌پذیر شده است. #برنامه‌نویسی #گو #مرورگر #WASI 🟣لینک مقاله: https://blog.lvmbdv.dev/posts/adding-go-to-a-browser-code-runner/ ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
153
5
🔵 عنوان مقاله Gore 0.7: A Full-Featured Go REPL Environment 🟢 خلاصه مقاله: گور ۰.۷: محیط برخط توسعه‌ی کامل و حرفه‌ای زبان گو در نسخه‌ی جدید گور، تمامی امکانات و ویژگی‌هایی که در یک محیط توسعه‌ی تعاملی نیاز دارید، در اختیار شما قرار گرفته است. این محیط، امکاناتی نظیر ویرایش خطوط کد، دسترسی به تاریخچه‌ی دستورات، وارد کردن کدهای چند خطی، ارزیابی عبارات و expressions، امکان وارد کردن و استفاده از پکیج‌ها، و حتی در نسخه‌ی ۰.۷، ایجاد aliasهای مختص وارد کردن پکیج‌ها را دارد. همچنین، این محیط به صورت قدرتمند از فناوری gopls برای تکمیل خودکار کد بهره می‌برد که کار برنامه‌نویسان را بسیار راحت‌تر و سریع‌تر می‌کند. نسخه‌ی ۰.۷ گور، تمامی ابزارهای لازم برای توسعه‌ی سریع و موثر در زبان گو را در قالب یک محیط کاربرپسند فراهم می‌کند و تجربه‌ی کاربا زبان این برنامه‌نویس را به سطح جدیدی ارتقاء می‌دهد. #برنامه‌نویسی #گو #توسعه #کدزی 🟣لینک مقاله: https://github.com/x-motemen/gore ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
200
6
🔵 عنوان مقاله Watching Go's New Garbage Collector Move Through the Heap 🟢 خلاصه مقاله: در نسخه ۱.۲۶ زبان برنامه‌نویسی گو، مجموعه جمع‌آوری زباله یا گاربیج کالکتر جدید این زبان به عنوان گزینه پیش‌فرض معرفی شد. این تحولی بزرگ در مدیریت حافظه در گو بود که باعث بهبود چشمگیر در کارایی برنامه‌ها شد. تیم توسعه دهندگان از ابزارهای متفاوتی برای بررسی و ارزیابی عملکرد این گاربیج کالکتر جدید استفاده کردند، که یکی از آن‌ها «perf» است، ابزاری قدرتمند برای تحلیل عملکرد برنامه‌ها و بررسی فرآیندهای مختلف در حافظه. در این مطالعه، فیل به بررسی حرکت و عملکرد این جمع‌آوری زباله جدید در حافظه اختصاصی گو می‌پردازد. او با استفاده از ابزار perf، نقشه‌ای ساده و قابل فهم بر پایه ASCII طراحی کرده است که نموداری تصویری از نحوه کارکرد و حرکت گاربیج کالکتر در heap، بخش‌های مختلف حافظه را نشان می‌دهد. این نقشه به توسعه‌دهندگان کمک می‌کند تا بهتر روند پاک‌سازی حافظه را درک کنند و نقاط ضعف احتمالی را شناسایی نمایند. این نحوه تحلیل و نمایش گام به گام به توسعه‌دهندگان اجازه می‌دهد تا فرآیندهای داخلی مدیریت حافظه را بهتر درک کنند و بتوانند برنامه‌های خود را بهینه‌تر کنند. این اطلاعات تصویری و تحلیلی باعث می‌شود کاربران و توسعه‌دهندگان درک دقیق‌تری از فرآیندهای حافظه در گو داشته باشند و بتوانند با اطمینان بیشتری از نسخه جدید بهره‌برداری کنند. #گو #پایش_حافظه #برنامه‌نویسی #تحلیل_عملکرد 🟣لینک مقاله: https://theconsensus.dev/p/2026/07/19/observing-gos-garbage-collector-old-and-new.html ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
202
7
🔵 عنوان مقاله Go's Proposals for Generic Collection Types in Go 1.28 🟢 خلاصه مقاله: در راستای توسعه زبان برنامه‌نویسی Go، گروه کاری Collections پیشنهادهای جامع و مهمی را برای اضافه کردن انواع مجموعه‌ای عمومی در نسخه ۱.۲۸ این زبان ارائه داده است. هدف اصلی این پیشنهادها، بهبود قابلیت‌های مجموعه‌ها و ایجاد استانداردی قوی برای ساختارهای داده‌ای است که در برنامه‌نویسی روزمره بسیار پرکاربرد هستند. این طرح، قرار است مجموعه‌ای از ساختارهای داده‌ای مرسوم مانند لیست‌ها، مپ‌ها و مجموعه‌ها را در قالبی استاندارد و قابل استفاده در تمامی پروژه‌ها تعریف و به کتابخانه استاندارد زبان اضافه کند. پیشنهادهای این مجموعه، قرار است قابلیت‌هایی مدرن، انعطاف‌پذیر و کاربرپسند را در اختیار توسعه‌دهندگان قرار دهند تا بتوانند بدون نیاز به پیاده‌سازی مجدد، از قوی‌ترین و رایج‌ترین ساختارهای داده بهره‌مند شوند. این گام مهم، می‌تواند توسعه و کارایی برنامه‌های نوشته‌شده در زبان Go را به شکل قابل ملاحظه‌ای افزایش دهد و هماهنگی بیشتری را میان کدهای مختلف ایجاد کند. در نهایت، هدف این گروه این است که با ارائه این مجموعه‌های عمومی و استاندارد، زبان Go را به سمت زبان قدرتمندتر، مدرن‌تر و کاربرپسندتر برساند. این پیشنهاد هم‌اکنون در مرحله بررسی و توسعه قرار دارد و می‌تواند تغییرات چشمگیری در آینده نزدیک در اکوسیستم زبان Go ایجاد کند. #زبان_برنامه‌نویسی #Go #مجموعه_های_عمومی #توسعه_نرم‌افزار 🟣لینک مقاله: https://github.com/golang/go/issues/80590 ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
187
8
🔵 عنوان مقاله pgx.CollectRows or Why Nice APIs Don't Have To Be Slow 🟢 خلاصه مقاله: در بسیاری از برنامه‌های کاربردی، سرعت و کارایی اهمیت ویژه‌ای دارد. یکی از مشکلات رایج در توسعه نرم‌افزارهای پایگاه داده، کندی عملیات مربوط به جمع‌آوری داده‌ها و تبدیل نتایج است. در این زمینه، ابزارها و کتابخانه‌هایی مانند pgx با امکاناتی مانند CollectRows و RowToStructByName ارائه شده‌اند تا فرآیند استخراج و سازماندهی داده‌ها را ساده‌تر کنند. اما در عمل، مشاهده شده است که این ابزارها در مقایسه با حلقه‌های دست‌نویس شده، بسیار کندتر عمل می‌کنند. این مشکل باعث شد که توسعه‌دهندگان به دنبال راه‌حل‌های بهینه‌سازی و اصلاح عملکرد آن‌ها بگردند. خوشبختانه، توسعه‌دهندگان این کتابخانه توانستند در نسخه ۵، اصلاحاتی در قالب کشینگ و ذخیره‌سازی داده‌ها انجام دهند که قابل توجه بود و به بهبود چشمگیر سرعت این ابزارها منجر شد. این اصلاحات باعث شدند عملیات جمع‌آوری و تبدیل داده‌ها بسیار سریع‌تر و مؤثرتر انجام شود و کاربران دیگر نیاز نداشته باشند بین سادگی و سرعت یکی را انتخاب کنند. نتیجه نهایی این است که APIهای قدرتمند می‌توانند هم ساده، کاربرپسند و هم سریع باشند، بدون اینکه کاربر مجبور باشد کارایی را فدای راحتی کنند. در نهایت، این بروزرسانی نشان می‌دهد که APIهای خوب و کاربرپسند لزوماً نباید کند باشند، بلکه با همکاری و توسعه مداوم، می‌توانند همزیستی خوبی بین سادگی و سرعت برقرار کنند و تجربه کاربری بهتری را رقم بزنند. #برنامه‌نویسی #پایگاه‌داده #پایگاه‌دادهپایدار #کارایی 🟣لینک مقاله: https://zolstein.substack.com/p/pgxcollectrows-nice-apis-dont-have ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
201
9
هفته جاری برای جامعه Go با چند تصمیم مهم در حوزه کتابخانه استاندارد و آینده این زبان همراه بوده است. مهم‌ترین خبر، پذیرش پیشنهاد اضافه شدن Kernel TLS (kTLS) به بسته crypto/tls است؛ قابلیتی که سال‌ها درباره آن بحث می‌شد و اکنون به‌طور رسمی چراغ سبز دریافت کرده است. پشتیبانی از kTLS به Go این امکان را می‌دهد که در سیستم‌عامل‌های پشتیبان، بخشی از پردازش TLS را به کرنل واگذار کند. این رویکرد می‌تواند در برخی سناریوها باعث کاهش سربار پردازشی، بهبود کارایی انتقال داده و استفاده بهینه‌تر از منابع سیستم شود؛ به‌ویژه در سرویس‌هایی که حجم بالایی از ارتباطات رمزنگاری‌شده را مدیریت می‌کنند. در کنار این خبر، گروه کاری Collections نیز پیشنهاد بسته container/... برای ارائه ساختارهای داده عمومی مبتنی بر جنریک‌ها را با هدف انتشار در Go 1.28 مطرح کرده است. این موضوع نشان می‌دهد که تمرکز توسعه‌دهندگان Go بیش از گذشته بر بهبود زیرساخت‌های کتابخانه استاندارد و ارائه ساختارهای داده مدرن معطوف شده است. از سوی دیگر، یکی دیگر از پیشنهادهای پذیرفته‌شده به توسعه‌دهندگان اجازه می‌دهد مثال‌های (Examples) مستندات Go، محدود به امضای تابع فعلی نباشند. این تغییر با استقبال جامعه Go روبه‌رو شده است، زیرا نوشتن مثال برای توابع کمکی و سناریوهایی که پیش‌تر امکان مستندسازی مناسبی نداشتند، از این پس ساده‌تر خواهد شد. مجموع این تغییرات نشان می‌دهد که مسیر توسعه Go همچنان بر بهبود عملکرد، غنی‌تر شدن کتابخانه استاندارد و ارتقای تجربه توسعه‌دهندگان متمرکز است. #GoLang #کتابخانه_استاندارد #برنامه_نویسی #توسعه_نرم‌افزار
355
10
BDD (Behavior-Driven Development) یا توسعه نرم‌افزار مبتنی بر رفتار یک روش توسعه نرم‌افزار است که تمرکز آن بر رفتار مورد انتظار سیستم از دید کاربر یا کسب‌وکار است، نه صرفاً جزئیات فنی پیاده‌سازی. در واقع تکامل‌یافته‌ی TDD (Test-Driven Development) است، اما به جای اینکه فقط برنامه‌نویس‌ها تست بنویسند، تلاش می‌کند توسعه‌دهندگان، تسترها و افراد کسب‌وکار (Business Analysts/Product Owners) همه با یک زبان مشترک درباره رفتار سیستم صحبت کنند. ایده اصلی BDD به جای اینکه بگوییم: این متد باید مقدار X را برگرداند. می‌گوییم: وقتی کاربر رمز عبور درست وارد می‌کند، باید وارد حساب کاربری خود شود. یعنی تمرکز از کد به رفتار سیستم منتقل می‌شود. ساختار معروف BDD معمولاً از قالب زیر استفاده می‌کند: Given When Then که به آن Gherkin Syntax گفته می‌شود. مثال ساده فرض کنید سیستم Login داریم. Feature: User Login Scenario: Successful Login Given the user is on the login page And the user has a valid account When the user enters the correct username and password Then the user should be redirected to the dashboard And a welcome message should be displayed معنی هر بخش Given شرایط اولیه Given the user has an account یعنی: کاربر قبلاً ثبت‌نام کرده است. When اتفاقی که رخ می‌دهد When the user clicks Login Then نتیجه مورد انتظار Then the dashboard is displayed مثال دیگر فرض کنید ATM داریم. Feature: Withdraw Money Scenario: Successful Withdrawal Given my account balance is $500 When I withdraw $100 Then my balance should become $400 کاملاً شبیه زبان طبیعی است. حتی مدیر پروژه هم می‌تواند آن را بخواند. در TDD ممکن است تستی مانند این بنویسید: func TestAddUser(t *testing.T) { } اما در BDD همان موضوع به این صورت بیان می‌شود: Given a valid user When the user is created Then the user should exist in the database مزایای BDD ۱. مستندات زنده (Living Documentation) سناریوها هم تست هستند و هم مستندات پروژه. ۲. کاهش سوءتفاهم همه دقیقاً می‌دانند سیستم باید چه رفتاری داشته باشد. ۳. تست‌های خوانا به جای: Test_Create_User_Valid_Name دارید: Given a valid name When creating a user Then the user is stored ۴. ارتباط بهتر تیم با Product Owner QA Developer همه یک زبان مشترک دارند. ابزارهای معروف BDD اگر زبان Go کار می‌کنید: Ginkgo Gomega Godog (پیاده‌سازی Gherkin برای Go) مثال با Godog: Feature: Calculator Scenario: Add two numbers Given I have entered 10 And I have entered 20 When I press add Then the result should be 30 سپس برای هر مرحله، کد Go نوشته می‌شود: func iHaveEntered(arg int) error { ... } func iPressAdd() error { ... } func theResultShouldBe(arg int) error { ... } مثال واقعی فروشگاه اینترنتی Feature: Buy Product Scenario: Product in stock Given a product has quantity 5 When the customer buys 2 items Then the stock should become 3 And the order should be created اگر موجودی کافی نباشد: Scenario: Product out of stock Given a product has quantity 1 When the customer buys 2 items Then the purchase should fail And an "Out of stock" message should be shown چرخه BDD Discuss Behavior ↓ Write Scenario (Given/When/Then) ↓ Run Scenario (Fail) ↓ Write Code ↓ Scenario Passes ↓ Refactor چه زمانی از BDD استفاده کنیم؟ بیشترین ارزش را در پروژه‌هایی دارد که: نیازمندی‌های کسب‌وکار پیچیده هستند. چند تیم (توسعه، QA و محصول) روی یک پروژه کار می‌کنند. می‌خواهید رفتار سیستم به‌صورت مستند و قابل اجرا باقی بماند. برای پروژه‌های کوچک یا ابزارهای ساده، استفاده از BDD ممکن است هزینه‌ی نگهداری بیشتری نسبت به مزایایش داشته باشد. جمع‌بندی فقط یک روش نوشتن تست نیست؛ بلکه یک شیوه‌ی همکاری و طراحی نرم‌افزار است. در این رویکرد، ابتدا رفتار مورد انتظار سیستم با زبانی قابل فهم برای همه‌ی اعضای تیم (معمولاً با قالب Given–When–Then) تعریف می‌شود، سپس این سناریوها به تست‌های خودکار تبدیل شده و در نهایت کد به گونه‌ای نوشته می‌شود که آن رفتارها را برآورده کند. نتیجه این است که تست‌ها، مستندات و نیازمندی‌های کسب‌وکار همسو و همیشه به‌روز باقی می‌مانند.
338
11
🔵 عنوان مقاله Qualcomm Posts Linux Patches For X2 Elite Extreme Powered ASUS Zenbook A16 🟢 خلاصه مقاله: شرکت کوالکام در ادامه تلاش‌های خود برای بهبود سازگاری پردازنده‌های Snapdragon، اکنون مجموعه‌ای جدید از اصلاحات (پچ‌ها) را برای هسته لینوکس منتشر کرده است. این پچ‌ها به هدف راه‌اندازی لپ‌تاپ‌های مجهز به پردازنده X2 Elite Extreme، مانند لپ‌تاپ ASUS Zenbook A16، هنگام بوت شدن در سیستم‌عامل لینوکس طراحی شده است. این اقدام پس از انتشار اصلاحاتی بود که اجازه می‌داد لپ‌تاپ‌های Lenovo Yoga Slim 7x Gen11 و HP EliteBook X G2q X2 Elite، بدون نیاز به ویندوز ۱۱ بر پایه ARM، راه‌اندازی شوند و کار کنند. حال، مهندسان کوالکام به دنبال توسعه این مسیر هستند تا دستگاه‌های مبتنی بر X2 Elite Extreme را نیز با موفقیت در لینوکس به کار بیاندازند و تجربه کاربری بهتر و آزادی بیشتری برای کاربران فراهم آورند. #کوالکام #لینوکس #گجت‌های_هوشمند #توسعه فناوری 🟣لینک مقاله: https://www.phoronix.com/news/Qualcomm-Zenbook-A16-X2EE ➖➖➖➖➖➖➖➖ 👑 @Linux_Labdon
291
12
در هفتمین رویداد تک‌وتاک - سلسله رویدادهای تخصصی در حوزه توسعه نرم‌افزار همکاران سیستم - که به‌ صورت #رایگان و #آنلاین برگزار
در هفتمین رویداد تک‌وتاک - سلسله رویدادهای تخصصی در حوزه توسعه نرم‌افزار همکاران سیستم - که به‌ صورت #رایگان و #آنلاین برگزار می‌شه، با رویکرد توسعه نرم‌افزار مبتنی بر رفتار (BDD) آشنا می‌شیم و درباره این صحبت می‌کنیم که چطور می‌تونیم با ایجاد یه زبان مشترک بین توسعه‌دهندگان، کارشناسان تست و ذی‌نفعان کسب‌وکار، نیازمندی‌ها رو شفاف‌تر تعریف و مستند کنیم. همینطور با ساختار Given / When / Then و نقشی که در بهبود همکاری تیمی و توسعه نرم‌افزار داره آشنا می‌شیم. سرفصل‌های این رویداد عبارتند از: ✅ آشنایی با Behavior-Driven Development ✅ چرا BDD رو انتخاب کردیم؟ ✅ در سیستم ما BDD چگونه پیاده‌سازی شده؟ ✅ یک مثال واقعی از پروژه ✅ استفاده از AI در فرآیند BDD 👨🏻‍💻 ارائه‌دهنده: امیر حصاری | تیم‌لید همکاران سیستم 📅 پنج‌شنبه ۸ مردادماه | ساعت ۱۰ تا ۱۲ 🔴 شرکت در رویداد فقط در صورت ثبت‌نام امکان‌پذیره. 👈🏻 اطلاعات بیشتر و ثبت‌نام: https://B2n.ir/ds9896 لینکدین | اینستاگرام
304
13
براساس داده‌های تله‌متری بیش از 22 هزار توسعه‌دهنده در 4 هزار تیم در faros: تعداد باگ‌ها حدود ۵۴٪ افزایش یافته. نسبت Incident به Pull Request بیش از ۳ برابر شده. زمان Review به شکل قابل توجهی افزایش پیدا کرده. حدود ۳۱٪ Pull Requestهای بیشتری بدون Review انسانی Merge میشه این گزارش نشون میده که هنوز جامعه مهندسی نرم افزار به بلوغ استفاده از ابزارهای هوش مصنوعی نرسیده و تا حالا بیشتر به سرعت توسعه و خروجی محصول از کد توجه شده تا امنیت و code review. https://faros.ai/research/ai-acceleration-whiplash @ | <Ramin Farajpour Cami/>
292
14
اینم نمی‌دونم دیدید یا نه؟ Anthropic یک سری پرامپت آماده copy-paste در Claude Code مربوط به جنبه‌های مختلف توسعه نرم‌افزار در مستنداتش داره. پرامپت‌های ساده‌ای هستند و زیر هر کدوم هم توضیح داده شده که چرا کار می‌کنند. https://code.claude.com/docs/en/prompt-library @ | <Hamed/>
300
15
شایان اویس‌قَرَن، پژوهشگر ایرانی علوم رایانه و استاد دانشگاه واشینگتن، مدال آباکوس سال ۲۰۲۶ اتحادیه بین‌المللی ریاضیات را دریافت کرده است؛ جایزه‌ای که به دستاوردهای برجسته پژوهشگران جوان در بخش‌های ریاضی علوم رایانه تعلق می‌گیرد. کمیته این جایزه می‌گوید اویس‌قرن با وارد کردن ابزارهایی از شاخه‌هایی چون هندسه چندجمله‌ای‌ها، نظریه احتمال و نظریه طیفی گراف‌ها، شیوه تحلیل الگوریتم‌ها را گسترش داده و برای حل چند مسئله قدیمی علوم رایانه راه‌های تازه‌ای گشوده است. پژوهش‌های او به‌ویژه در دو زمینه مورد توجه قرار گرفته‌اند: یافتن مسیرهای نزدیک به بهینه و نمونه‌گیری تصادفی از مجموعه‌های بسیار بزرگ و پیچیده. مدال آباکوس هر چهار سال یک‌بار اهدا می‌شود و ادامه جایزه‌ای است که تا سال ۲۰۱۸ به نام رولف نوانلینا شناخته می‌شد. نامزد دریافت آن باید در آغاز سال برگزاری کنگره جهانی ریاضی‌دانان هنوز به ۴۰ سالگی نرسیده باشد. این جایزه از مهم‌ترین افتخارات بین‌المللی در علوم رایانه نظری به شمار می‌رود. اما اهمیت کار اویس‌قرن تنها با فهرست کردن اصطلاح‌های تخصصی روشن نمی‌شود. بخش مهمی از مسیر علمی او به یکی از مشهورترین پرسش‌های علوم رایانه بازمی‌گردد: چگونه می‌توان کوتاه‌ترین مسیر ممکن را برای سفر میان چندین شهر پیدا کرد و در پایان به نقطه آغاز بازگشت؟ این پرسش که «مسئله فروشنده دوره‌گرد» نام دارد، در ظاهر ساده است. یک فروشنده، راننده یا مأمور توزیع باید از چند شهر یا مقصد عبور کند، هر کدام را یک بار ببیند و به نقطه نخست بازگردد. با افزایش شمار مقصدها، تعداد مسیرهای ممکن چنان سریع زیاد می‌شود که بررسی همه آنها عملاً ممکن نیست. در چنین مواردی، پژوهشگران به جای یافتن پاسخ دقیق، الگوریتمی می‌خواهند که در مدت معقول مسیری نزدیک به بهترین مسیر را پیدا کند و بتوان تضمین کرد که نتیجه آن از حد معینی بدتر نخواهد بود. https://t.me/futurepulse_persian
333
16
🔵 عنوان مقاله Go's Stuck Goroutine Problem (And Why to Let It Fail) 🟢 خلاصه مقاله: در زبان برنامه‌نویسی Go، یکی از مشکلات رایج، گیر کردن روروتین‌ها یا همان گوروتین‌هایی است که به طور ناخواسته متوقف می‌شوند یا توقف نمی‌کنند. این وضعیت معمولا زمانی رخ می‌دهد که عملیات بلندمدت یا بی‌وقفه درون گوروتین‌ها گرفتار شوند و نتوانند به درستی پایان یابند. این مشکل باعث می‌شود که برنامه‌های چندوظیفه‌ای به طور ناخوشایند کند شوند یا در برخی موارد متوقف شوند، که این امر می‌تواند روند توسعه و نگهداری برنامه را دشوارتر کند. یکی از دلایل اصلی این مشکل، محدودیت‌های مدل اجرای همزمان در زبان Go است. برخلاف زبان‌هایی مانند Erlang که بر پایه سیستم‌های مقاوم در برابر خطا ساخته شده‌اند، Go اجازه نمی‌دهد که گوروتین‌ها مستقیم کشته شوند، زیرا این کار می‌تواند منجر به مشکلاتی مانند وضعیت‌های ناپایدار یا ناپایدارهای حافظه شود. در نتیجه، معمولاً راهکارهای سنتی برای پایان دادن به گوروتین‌ها از جمله ارسال سیگنال‌های توقف یا کانال‌های لغو، در مواقعی کارآمد نیستند یا ممکن است موجب مشکلات دیگری شوند. در این زمینه، نسخه ۰.۴۰ از زبان برنامه‌نویسی River بر اساس فلسفه‌ای الهام گرفته از Erlang، رویکرد «بگذار کار خودش را انجام دهد» یا همان "let it crash" را پیاده‌سازی کرده است. در این رویکرد، به جای تلاش برای کنترل کامل و دخالت در روند اجرای گوروتین‌ها، آنها را رها می‌کنیم - به عبارت دیگر، اگر یک گوروتین خراب شد یا گیر کرد، برنامه این مشکل را قبول می‌کند و اجازه می‌دهد در صورت نیاز خودش خاموش شود و دوباره راه‌اندازی گردد. این روش یکی از راهکاری است که به برنامه‌نویسان کمک می‌کند تا سیستم‌های مقاوم‌تر و پایدارتر ساخته و نگهداری کنند، به خصوص در مواردی که وظایف پس‌زمینه یا عملیات بلندمدت اهمیت زیادی دارند و نیاز به مدیریت خطاهای پیش‌بینی‌شده ندارند. در نتیجه، در مواجهه با گوروتین‌های گیر کرده، بهترین راه‌حل ممکن این است که به جای تلاش بی‌وقفه برای کنترل کامل، اجازه دهیم خطاها رخ دهند و سیستم خود را بازیابی کند؛ همان روشی که در اکوسیستم Erlang بسیار رایج است و در حال حاضر با رویکرد جدید River و فلسفه «بگذار کار خودش را بکند»، می‌تواند راهکار مفیدی باشد. #برنامه‌نویسی #Go #سیستم‌های مقاوم #توسعه‌دهی 🟣لینک مقاله: https://riverqueue.com/blog/go-stuck-jobs ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
346
17
🔵 عنوان مقاله GoMLX: Accelerated Machine Learning Framework for Go 🟢 خلاصه مقاله: چارچوب یادگیری ماشین GoMLX که مخصوص زبان برنامه‌نویسی Go طراحی شده، راه‌حلی سریع و مؤثر برای توسعه مدل‌های هوشمند است. این فریم‌ورک بدون نیاز به زبان پایتون ساخته شده و جایگزینی ایده‌آل برای کتابخانه‌های معروفی مانند TensorFlow یا PyTorch محسوب می‌شود، در حالی که کاملاً در قالب و سبک برنامه‌نویسی Go می‌گنجد. در نسخه‌های اخیر، این ابزار پیشرفت‌های قابل توجهی داشته است؛ از جمله پشتیبانی بهتر از دستورالعمل‌های SIMD که عملکرد پردازشی را بسیار بهبود بخشیده، و افزوده شدن صفحه اصلی جدید، همراه با مستندات جامع و کامل. علاوه بر این، قابلیت پشتیبانی از مدل‌های متنوع از پروژه Hugging Face به صورت مستقیم، امکانات فوق‌العاده‌ای را برای توسعه دهندگان فراهم کرده است. به کمک این به‌روزرسانی‌ها، توسعه‌دهندگان می‌توانند مدل‌های یادگیری ماشین را با سرعت و سهولت بیشتری در زبان Go پیاده‌سازی کنند، و مسیر توسعه پروژه‌های هوش مصنوعی در این زبان برنامه‌نویسی را هموارتر سازند. در نتیجه، GoMLX به عنوان ابزاری قدرتمند و کارآمد در عرصه یادگیری ماشین با زبان Go شناخته شده است که امکاناتی جامع و به روز را در اختیار کاربران قرار می‌دهد. #یادگیری_ماشین #گوامدل #هوش_مصنوعی #برنامه_نویسی 🟣لینک مقاله: https://gomlx.github.io/ ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
283
18
🔵 عنوان مقاله oapi-codegen 2.8.0: Now with OpenAPI 3.1 Support 🟢 خلاصه مقاله: نسخه ۲.۸.۰ ابزار oapi-codegen به‌روزرسانی شد و اکنون از استاندارد جدید OpenAPI 3.1 پشتیبانی می‌کند. این ابزار مدت‌هاست که به عنوان روشی موثر و معتبر برای تولید کدهای پایه و استانداردهای مشتری و سرور در زبان گو توسعه یافته است. با این بروزرسانی، توسعه‌دهندگان می‌توانند از قابلیت‌های پیشرفته و به‌روز OpenAPI 3.1 بهره‌مند شوند و فرآیند ساخت و یکپارچه‌سازی APIها را به شکل ساده‌تر و دقیق‌تری انجام دهند. این تغییرات فرصت‌های جدیدی را برای بهبود کیفیت و سرعت توسعه سرویس‌های مبتنی بر API فراهم می‌آورد و نشان‌دهنده توسعه مداوم این ابزار قدرتمند است. #OpenAPI #برنامه‌نویسی #توسعهAPI #گو 🟣لینک مقاله: https://github.com/oapi-codegen/oapi-codegen/releases/tag/v2.8.0 ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
306
19
🚀 اگر قصد داری زبان انگلیسی رو تقویت کنی، از صفر شروع کنی یا برای مهاجرت آماده بشی، یکی از بهترین اساتیدی که می‌شناسم استاد منصوریان هست. 🇬🇧 اگر به دنبال یادگیری اصولی، منظم و کاربردی زبان هستی، پیشنهاد می‌کنم حتماً پیج ایشون رو دنبال کنی. 📚✨ 📅 ظرفیت کلاس‌های فعلی: یکشنبه و پنجشنبه: ساعت ۱۴:۳۰ 🕒 شنبه و چهارشنبه: ساعت ۱۹:۰۰ 🕖 👇👇👇👇 Https://t.me/RaziyehMansourian 🔗
215
20
🔵 عنوان مقاله go-diskfs: Manipulate Disks and Disk Images from Go 🟢 خلاصه مقاله: در دنیای مدیریت و ویرایش دیسک‌ها، ابزارهای مختلفی وجود دارند که به کمک آن‌ها می‌توان قسمت‌های مختلف یک دیسک را تنظیم یا فایل‌سیستم‌های مختلف را بر روی آن پیاده‌سازی کرد. ابزارهایی مانند fdisk، mkfs، vfat و mtools جزو ابزارهای اصلی و رایج در این حوزه هستند که هر یک نقش خاص خود را در کارهای مربوط به پارتیشن‌بندی، ساخت فایل‌سیستم و مدیریت فایل‌های سیستم‌های مختلف ایفا می‌کنند. در این میان، کتابخانه go-diskfs برای زبان برنامه‌نویسی Go طراحی شده است که هدف آن فراهم کردن امکان کار با دیسک‌ها و تصاویر دیسک به صورت برنامه‌نویسی و بدون نیاز به اجرای ابزارهای خارجی است. این کتابخانه به توسعه‌دهندگان این امکان را می‌دهد تا قسمت‌های مختلف دیسک‌ها، پارتیشن‌ها، فایل‌سیستم‌ها و فایل‌های ایمیج را به راحتی و با قابلیت برنامه‌ریزی مدیریت کنند. بنابراین، در مواردی که نیاز دارید عملیات مشابه آن‌هایی که با fdisk، mkfs یا mtools انجام می‌شود، اما در داخل برنامه و به صورت خودکار انجام دهید، این ابزار بسیار کاربردی است. استفاده از go-diskfs مزایای زیادی دارد؛ اول اینکه توسعه‌دهندگان می‌توانند فرآیندهای مدیریت دیسک را در برنامه‌های خود وارد کرده و کنترل کامل بر عملیات‌های پارتیشن‌بندی و ساخت فایل‌سیستم‌ها داشته باشند. این ابزار مخصوصاً در پروژه‌هایی که نیاز به کار اتوماتیک و مستقیم با دیسک‌ها دارند، بسیار مؤثر است و باعث ساده‌سازی کارهای پیچیده می‌شود. در نهایت، این کتابخانه، راهکاری قدرتمند برای رسیدن به مدیریت حرفه‌ای و برنامه‌نویسی دیسک و ایمیج‌ها در زبان برنامه‌نویسی محبوب Go است. #مدیریت_دیسک #برنامه‌نویسی #ایمیج_دیسک #go 🟣لینک مقاله: https://github.com/diskfs/go-diskfs ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
307