Gopher Academy
3.34K subscribers
920 photos
40 videos
280 files
2.02K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
system_design_1_fa.pdf
10.7 MB
کتاب ترجمه شده سیستم دیزاین نرم افزار ۱ ( 1 INTERVIEW DESIGN SYSTEM )

نویسنده: Alex Xu

https://system-design.ir/


🕊 @gopher_academy | @GolangEngineers
👍10🍾4
شرکت OpenAI مدل هوش مصنوعی جدید خود به‌نام GPT-4o را معرفی کرد. این مدل، یک شبکه‌ی عصبی multimodal یا omni است. به‌عبارتی می‌تواند پذیرای داده‌ی ورودی از نوع متن، صوت، تصویر و یا ویدئو باشد. خروجی مدل نیز می‌تواند از هر نوعی باشد.

این هوش مصنوعی، جای‌گزینی برای دستیارهای صوتی سنتی مثل Apple Siri یا Amazon Alexa یا Google Assistant است که به مدل‌های بنیادین مانند LLM ها مجهز شده‌ست و می‌تواند تعامل واقعا هوش‌مندانه‌ای شبیه به سامانه‌ی سامانثا در فیلم Her ارائه دهد.

پیش از این، ChatGPT قابلیتی به‌نام Voice Mode داشت که به کاربران اجازه‌ی تعامل از طریق صوت به‌جای نوشتار را می‌داد. اما در این حالت، ابتدا صدای کاربر به مدل OpenAI Whisper که یک مدل ASR است داده می‌شد و متن معادل آن صدا به‌دست می‌آمد. سپس این متن به مدل GPT-4 که یک LLM است داده شده و پاسخ مورد نظر در قالب متنی دیگر به‌دست می‌آمد. در نهایت، این پاسخ متنی به کمک یک مدل ساده‌ی TTS به صوت تبدیل و به کاربر ارائه می‌شد.

این پایپلاین، اگرچه در نوع خود بی‌نظیر بود اما طبیعتا latency قابل توجهی (حدود ۵/۴ ثانیه) داشت که هرگز نمی‌توانست حس یک گپ‌و‌گفت طبیعی را به کاربر منتقل کند. از طرفی کاربر باید منتظر پردازش کامل صحبت قبلی می‌ماند و برخلاف یک گپ‌و‌گفت طبیعی، نمی‌توانست صحبت دستیار را قطع کند. به علاوه اطلاعات مهمی از صحبت کاربر (مانند تون صدا، احساس، نویز محیط و …) به مدل زبانی منتقل نمی‌شد و صدای خروجی نیز عاری از هرگونه ابراز احساسات، خنده، آواز و … بود.

اما مدل GPT-4o یک مدل end-to-end است یعنی از سه مدل مجزا تشکیل نشده و همه‌ی انواع ورودی‌ها از طریق یک شبکه‌ی عصبی یکتا، پردازش می‌شوند. بنابراین این مدل به‌صورت میانگین طی مدت ۳۲۰ میلی‌ثانیه (مشابه سرعت پاسخ‌گویی انسان) پاسخ کاربر را می‌دهد.

کیفیت عمل‌کرد این مدل برروی benchmark های متداول برای نوشتار انگلیسی، کدزنی و استدلال، مشابه با مدل GPT-4 Turbo است اما برای تسک‌های چندزبانی، پردازش صوت و همچنین بینایی، عملکرد به‌تری دارد.

قابلیت پردازش متن و تصویر به کمک مدل GPT-4o از امروز به نسخه‌ی رایگان ChatGPT اضافه شده‌ اما قابلیت پردازش صوت از چندهفته دیگر برای کابران نسخه‌ی Plus در دسترس خواهد بود. توسعه‌دهنده‌گان نیز از امروز می‌توانند به قابلیت‌های پردازش متن و تصویر از طریق API با نصف هزینه‌ی GPT-4 Turbo دسترسی داشته باشند.

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

https://openai.com/index/hello-gpt-4o/

#SchoolOfAI


🕊 @gopher_academy | @GolangEngineers
🍾104👍2
بررسی کد اسمبلی میتونه تو پیدا کردن باتلنک ها کمک کنه

🕊 @gopher_academy | @GolangEngineers
13👍2🍾2
package main

import "fmt"

func main() {
var values = []string{"1", "2", "3", "4", "5"}
for _, value := range values[1:] {
fmt.Println(value)
}
}

ایجاد و استفاده از حلقه for range در زبان گولنگ و همچنین محدود کردن slice مورد نظر آن به کمک اندیس ها

#go_idiom

🕊 @gopher_academy | @GolangEngineers
🍾5👍31
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei

🍾اختصاص Thread به یک Core بخصوص !

بعضی اوقات نیازه تا Thread های مختلف سیستم عاملی (OS Thread) رو به Core های خاصی اختصاص بدیم تا مطمن شیم سیستم عامل اونا رو توسط همون Core ای که مشخص کردیم پردازش میکنه. دلیل این کار اینه که میخوایم مطمن بشیم Context Switch بین ترد های برنامه رو به حداقل رسوندیم و ممکنه حتی تنظیماتی روی سیستم عامل انجام دادیم که Signal ها و Interrupt های نرم افزاری و سخت افزاری رو برای یک Core بسته باشیم و بارشون رو روی بقیه Core ها فرستادیم تا اون Core مورد نظر ما Block نشه سر این اتفاقا. اینجوری ۱۰۰ درصد پردازش اون Core اختصاص داده میشه به برنامه مون.
برای این کار میتونیم از syscall سیستم عاملی sched_setaffinity استفاده کنیم که جزو libc هست و روی سیستم عامل های UNIX ای جواب میده فقط ( احتمال خیلی زیاد مشابه این syscall برای Windows هم وجود داشته باشه)
برای توضیحات تکمیلی و روش استفاده میتونید به لینک زیر برید:
https://lnkd.in/dSuhgQSq

کامند taskset کار مشابه ای انجام میده و شما میتونید با مشخص کردن Process ID و Core مورد نظر برنامه تون رو بفرستید به اون Core.
احتمالا داخل اکثر زبان های سیستمی Library مشابه ای باشه که نیاز نباشه خودتون درگیر syscall زدن بشید. پکیج core_affinity_rs برای Rust همین کارو میکنه و خیلی راحت موقع ترد ساختن میتونید ازش استفاده کنید. اگه از ران تایم tokio هم استفاده میکنید tokio یه handler داره برای ترد هایی که ایجاد میکنه که میتونید از این پکیج اونجا استفاده کنید.

🕊 @gopher_academy | @GolangEngineers
👍44🍾1

🕊 @gopher_academy | @GolangEngineers
👍13🍾51💋1
💜 Feedback-Directed Optimization (FDO)

💸 یک تکنیک بهینه‌سازی است که از داده‌های اجرایی برنامه برای بهبود کارایی آن استفاده می‌کند. این داده‌ها معمولاً شامل اطلاعاتی درباره hot paths و الگوهای استفاده در کد می‌باشد.

💜Profile-Guided Optimization (PGO)

💸 نوع خاصی از FDO است که بهینه‌سازی را بر اساس داده‌های پروفایل جمع‌آوری شده از اجرای برنامه هدایت می‌کند.

🥂مراحل
↙️جمع‌آوری داده‌های پروفایلینگ: برنامه با بار کاری اجرا می‌شود تا داده‌های اجرایی جمع‌آوری شود.
↙️تحلیل داده‌ها: داده‌های جمع‌آوری شده تحلیل می‌شوند تا الگوهای اجرایی و hot paths شناسایی شوند.
↙️بهینه‌سازی: کامپایلر از این داده‌ها برای بهینه‌سازی کد استفاده می‌کند، معمولاً تمرکز بر بهبود عملکرد hot paths است.


🕊 @gopher_academy | @GolangEngineers
👍41
🔴گولنگ و بهینه‌سازی
در گولنگ، بهینه‌سازی‌ها به طور مستقیم از طریق تکنیک‌های FDO یا PGO اشاره نمی‌شود، اما کامپایلر و زمان اجرای گولنگ شامل بهینه‌سازی‌های مختلفی هستند که می‌توانند از داده‌های پروفایلینگ بهره‌مند شوند.

🟢بهینه‌سازی‌های کلیدی در گولنگ:
اInlining: کامپایلر گولنگ می‌تواند توابع کوچک را در جای خود قرار دهد تا هزینه فراخوانی تابع کاهش یابد.
اEscape Analysis: تعیین می‌کند که آیا متغیرها می‌توانند در پشته (stack) به جای هیپ (heap) تخصیص داده شوند، که هزینه‌های جمع‌آوری زباله (garbage collection) را کاهش می‌دهد.
اSSA (Static Single Assignment): کامپایلر گولنگ از فرم SSA برای ایجاد فرصت‌های بهتر بهینه‌سازی استفاده می‌کند.


🕊 @gopher_academy | @GolangEngineers
👍76
❇️استفاده عملی در گولنگ
هرچند گولنگ به طور صریح از اصطلاحات FDO یا PGO استفاده نمی‌کند، شما می‌توانید از ابزارهای پروفایلینگ و تحلیل عملکرد برای بهینه‌سازی برنامه‌های گولنگ خود استفاده کنید.

💋مراحل برای بهینه‌سازی عملکرد در گولنگ:
😊پروفایلینگ: از ابزارهای داخلی گولنگ مانند pprof برای جمع‌آوری داده‌های پروفایلینگ استفاده کنید.
🤔تحلیل: داده‌های پروفایلینگ را تحلیل کنید تا گلوگاه‌ها (bottlenecks)، مسیرهای داغ و مناطق قابل بهبود شناسایی شوند.
🤯بهینه‌سازی: کد خود را بر اساس بینش‌های به دست آمده از پروفایلینگ بازنگری و بهینه‌سازی کنید.

🥱نمونه‌ای از پروفایلینگ و بهینه‌سازی در گولنگ
🫡پروفایلینگ با pprof:

package main

import (
"log"
"net/http"
_ "net/http/pprof"
)

func main() {
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
// your code
}

😜اجرای پروفایلر:
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30

🤬تحلیل پروفایل:
از go tool pprof برای تحلیل داده‌های پروفایل جمع‌آوری شده و شناسایی نقاط داغ استفاده کنید.

😴بهینه‌سازی کد:
بر اساس داده‌های پروفایلینگ، کد خود را بازبینی کرده و بهینه‌سازی کنید.

🕊 @gopher_academy | @GolangEngineers
👍83
💜Escape Analysis

یکی از تکنیک‌های مهم در بهینه‌سازی حافظه در زبان‌های برنامه‌نویسی است. با استفاده از این تحلیل، کامپایلر می‌تواند تصمیم بگیرد که کدام متغیرها باید در stack و کدام‌ها در heap ذخیره شوند، که این امر به بهینه‌سازی مصرف حافظه و عملکرد برنامه کمک می‌کند.

🕊 @gopher_academy | @GolangEngineers
👍53
📱 ربات هوش مصنوعی Copilot مایکروسافت در تلگرام!

مایکروسافت در وبسایت رسمی خود ربات دستیار هوش مصنوعی Copilot که بر پایه ChatGPT است را در پلتفرم تلگرام و حالت beta در دسترس عموم قرار داده است و برای تایید باید از شماره غیر ایران استفاده کنید.

مایکروسافت در حالت کنونی با ۳۰ پرسش در روز از طریق ربات @CopilotOfficialBot در دسترس قرار داده است.


🕊 @gopher_academy | @GolangEngineers
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33
برنامه‌ی git سیستم‌‌هاتون رو اپدیت کنید دوستان. چندتا آسیب‌پذیری داشته اخیرا.

من در مورد CVE-2024-32002 یه مقدار می‌دونم که موقع clone یه ریپو که recursive هست مشکل ایجاد می‌کنه. البته شایان ذکره که فقط رو سیستم‌‌هایی که میسرهاشون case insensetive هست (بله ویندوز) خطرناکه ولی به هر حال شما آپدیت کنید.

اگر هم امکان آپدیت نیست براتون می‌تونید symlinkها رو غیرفعال کنید چون این آسیب‌پذیری از symlink ها استفاده می‌کنه.

git config --global core.symlinks false

توضیحات بیشتر:
https://www.helpnetsecurity.com/2024/05/16/git-cve-2024-32002/


🕊 @gopher_academy | @GolangEngineers
👍10
✍️Rouzbeh SabzeheiRouzbeh Sabzehei

🍾شانس Kill شدن Process تون رو کم کنید !

در بعضی مواقع به دلیل محدود بودن مقدار حافظه فیزیکی , سیستم عامل جوابگوی مقدار حافظه ای که Process های مختلف از اون درخواست میکنن نیست. تو چنین شرایطی سیستم عامل مکانیزمی به اسم OOM (Out of Memory Killer) داره که بر اساس یک سری فاکتور ها میتونه یک یا چند Process باز رو Kill کنه و مقداری حافظه آزاد بشه !

سیستم هایی که footprint زیادی روی حافظه دارن شانس Kill شدنشون توسط سیستم عامل زیاد میشه. اگه خودمون همچین سیستمی رو طراحی کردیم یا از نرم افزار های دیگه ای استفاده میکنیم که footprint زیادی دارن مثل redis و دلمون نمیخواد همچین اتفاقی براشون بیفته میتونیم از روش زیر استفاده کنیم تا شانس Kill شدنشون رو خیلی کمتر کنیم

لینوکس به هر Process یک امتیاز به اسم oom_score اختصاص میده که عددی هست بین -1000 تا 1000 که هر چی این عدد کمتر باشه شانس Kill شدن اون Process کمتره. شما میتونید با کامند زیر مقدار oom_score برنامه موردنظرتون رو ببینید

cat /proc/{PID}/oom_score


برای عوض کردن این مقدار میتونید از دستور زیر استفاده کنید , باید توجه کنید که این یه فایل عادی نیست و نمیتونید با ادیتور هایی مثل vim یا nano بازش کنید و عوضش کنید

echo -100 > /proc/{PID}/oom_score_adj

اگه با این روش مشکل داشتید میتونید از کامند choom هم استفاده کنید

choom --adjust -100 --pid {PID}


البته این مقدار تو restart شدن اون Process تغییر میکنه و میتونید یه Automation براش بنویسید که موقع Start شدن اون برنامه مقدار دلخواه oom_score شما براش ست بشه


🕊 @gopher_academy | @GolangEngineers
👍82🔥1
داده های پروفایلینگ چیه؟🤔🤔
———————————-
داده‌های پروفایلینگ به اطلاعات جمع‌آوری شده از اجرای یک برنامه در محیط واقعی یا آزمایشی اشاره دارد که برای تحلیل و بهینه‌سازی عملکرد برنامه استفاده می‌شود. این داده‌ها شامل جزئیات مختلفی درباره نحوه عملکرد کد و استفاده از منابع در طول اجرای برنامه هستند. پروفایلینگ به توسعه‌دهندگان کمک می‌کند تا گلوگاه‌های عملکردی، نقاط بحرانی و مشکلات مصرف منابع را شناسایی کنند و در نتیجه کد را بهینه‌سازی کنند.
——————————————-
انواع داده‌های پروفایلینگ
cpu
mem profiling
gc profiling
blocking profiling


🕊 @gopher_academy | @GolangEngineers
👍7🍾3
😴 اگر علاقه مند به سی پلاس پلاس هستید
🥱این رو از دست ندید
👾نکات مفیدی رو به اشتراک میذارن

🥸 https://abseil.io/tips/


🕊 @gopher_academy | @GolangEngineers
🍾62

🕊 @gopher_academy | @GolangEngineers
👍243🍾21
🍻این hot paths چیه؟🔥
در واقع این "Hot paths" در زمینه بهینه‌سازی عملکرد نرم‌افزار، به بخش‌هایی از کد اشاره دارد که بیشترین بار پردازشی را دارند و بیشترین زمان CPU را مصرف می‌کنند. به عبارت دیگر، این بخش‌ها نقاط داغ یا مسیرهای داغ (hot spots) برنامه هستند که در طول اجرای برنامه بیشتر تکرار می‌شوند و نیازمند توجه ویژه‌ای برای بهینه‌سازی هستند.

برای شناسای و بهینه سازی هم از ابزار های پروفایلینگ استفاده می کنیم که چند پست گذاشتم در موردشون


🕊 @gopher_academy | @GolangEngineers
9
براساس شنیده‌ها ۳۰ نفر از کارمندان فلایتیو تعدیل و مدیر عامل و مدیران فنی، مارکتینگ، مالی و منابع انسانی استعفا داده‌اند.
براساس این خبر علت استعفای مدیران فلایتیو دخالت سرمایه‌گذاران در مدیریت و ایجاد مشکلات نقدینگی بوده که برخی از کارکنان نیز در لینکدین از عدم پرداخت دستمزد خود خبر داده‌اند.
به گفته کارکنان فلایتیو، این شرکت ساعت ۳ بامداد جمعه گذشته به کارکنان خود خبر از تعدیل نیرو را داده است.
#فلایتیو

🕊 @gopher_academy | @GolangEngineers
42
اموجی خنده که تا چند وقت پیش حرام اعلام شده بود از سوی ادمین😂از این به بعد حلال اعلام شد و می تونید استفاده کنید توی چنل

🕊 @gopher_academy | @GolangEngineers
🤣333🍾1

🕊 @gopher_academy | @GolangEngineers
👍233🤣1