Forwarded from DevTwitter | توییت برنامه نویسی
یه مقاله جذاب در مورد نوشتن کد سریع از Shopify
درسته که درباره Ruby on Rails نوشته شده اما اکثر نکاتش به خیلی از زبان و فریمورک های دیگه از جمله گولنگ هم قابل تعمیم دادن هست.
دقت کنید که Shopify در یک مقیاس خیلی بزرگ کار میکنه و نکاتش مهمه.
کدی که با Ruby on Rails نوشته میشه معروفه به کند بودن
اما در Shopify در مقیاس میلیون درخواست در دقیقه داره از Ruby on Rails استفاده میشه
تو این مقاله نکات جالبی رو اشاره میکنه برای اینکه کد سریعتری نوشته بشه
اولین نکته ش در مورد ORM یا همون ActiveRecord هست که باید درک کنید توابع مختلف orm چه رفتاری با دیتابیس دارند.
تو گولنگ همین مشکل با gorm وجود داره که به شدت میتونه لود زیادی روی دیتابیس بندازه بدون اینکه برنامه نویس متوجه این قضیه بشه.
دومین نکته ش باز در مورد دیتابیس هست که میگه از select * پرهیز کنید و فقط ستون هایی که لازم دارید رو انتخاب کنید.
نکته دیگه پرهیز از کوئری زدن به ستون هایی هست که index ندارن و در مقیاس بالا باعث میشه که full scan رخ بده
البته ایندکس اضافه کردن باعث lock شدن دیتابیس ممکنه بشه برای writeها و باید مواظب مایگریشن ایندکس باشیم
نکته بعدی کش کردن همه چیز هست…
Cache All The Things
If you can’t make something faster, a good alternative is to cache it. Things like complex view compilation and external API calls benefit greatly from caching. Especially if the resultant data doesn’t change often.
یه سری چیزارو میشه throttle کرد
Throttle Bottlenecks
But what about operations you can’t cache? Things like delivering an email, sending a webhook, or even logging in can be abused by users of an application. Essentially, any expensive operation that can’t be cached should be throttled.
برای یه سری پروسه ها هم میشه job queue و مکانیزم های async در نظر گرفت
Do It Later (In a Job)
Jobs allow us to defer work to another process through queueing systems often backed by Redis. Exporting a dataset, activating a subnoscription, or processing a payment are all great examples of job-worthy work
پرهیز از متاپروگرمینگ
Use Metaprogramming Sparingly
Changing a program’s structure at runtime is a powerful feature. In a highly dynamic language like Ruby, there are significant performance costs associated to metaprogramming.
دونستن تفاوت O(1) و O(n) برای مقیاس پذیر بودن خیلی مهمه
Know the difference between O(n) and O(1)
What O(n) and O(1) mean is that there are two kinds of operations. O(n) is an operation that scales in time with size, and O(1) is one that is constant in time regardless of size.
مثلا جای آرایه بهتره از hash استفاده بشه چون lookup کردن تو hash فارغ از اندازه O(1) هست
Allocate Less
استفاده و مدیریت Garbage Collector
If used improperly, dangerous methods can lead to unwanted side effects in your code. A best practice to follow is to avoid mutating global state while leveraging mutation on local state.
https://shopify.engineering/write-fast-code-ruby-rails
@DevTwitter | <Hossein Nazari/>
درسته که درباره Ruby on Rails نوشته شده اما اکثر نکاتش به خیلی از زبان و فریمورک های دیگه از جمله گولنگ هم قابل تعمیم دادن هست.
دقت کنید که Shopify در یک مقیاس خیلی بزرگ کار میکنه و نکاتش مهمه.
کدی که با Ruby on Rails نوشته میشه معروفه به کند بودن
اما در Shopify در مقیاس میلیون درخواست در دقیقه داره از Ruby on Rails استفاده میشه
تو این مقاله نکات جالبی رو اشاره میکنه برای اینکه کد سریعتری نوشته بشه
اولین نکته ش در مورد ORM یا همون ActiveRecord هست که باید درک کنید توابع مختلف orm چه رفتاری با دیتابیس دارند.
تو گولنگ همین مشکل با gorm وجود داره که به شدت میتونه لود زیادی روی دیتابیس بندازه بدون اینکه برنامه نویس متوجه این قضیه بشه.
دومین نکته ش باز در مورد دیتابیس هست که میگه از select * پرهیز کنید و فقط ستون هایی که لازم دارید رو انتخاب کنید.
نکته دیگه پرهیز از کوئری زدن به ستون هایی هست که index ندارن و در مقیاس بالا باعث میشه که full scan رخ بده
البته ایندکس اضافه کردن باعث lock شدن دیتابیس ممکنه بشه برای writeها و باید مواظب مایگریشن ایندکس باشیم
نکته بعدی کش کردن همه چیز هست…
Cache All The Things
If you can’t make something faster, a good alternative is to cache it. Things like complex view compilation and external API calls benefit greatly from caching. Especially if the resultant data doesn’t change often.
یه سری چیزارو میشه throttle کرد
Throttle Bottlenecks
But what about operations you can’t cache? Things like delivering an email, sending a webhook, or even logging in can be abused by users of an application. Essentially, any expensive operation that can’t be cached should be throttled.
برای یه سری پروسه ها هم میشه job queue و مکانیزم های async در نظر گرفت
Do It Later (In a Job)
Jobs allow us to defer work to another process through queueing systems often backed by Redis. Exporting a dataset, activating a subnoscription, or processing a payment are all great examples of job-worthy work
پرهیز از متاپروگرمینگ
Use Metaprogramming Sparingly
Changing a program’s structure at runtime is a powerful feature. In a highly dynamic language like Ruby, there are significant performance costs associated to metaprogramming.
دونستن تفاوت O(1) و O(n) برای مقیاس پذیر بودن خیلی مهمه
Know the difference between O(n) and O(1)
What O(n) and O(1) mean is that there are two kinds of operations. O(n) is an operation that scales in time with size, and O(1) is one that is constant in time regardless of size.
مثلا جای آرایه بهتره از hash استفاده بشه چون lookup کردن تو hash فارغ از اندازه O(1) هست
Allocate Less
استفاده و مدیریت Garbage Collector
If used improperly, dangerous methods can lead to unwanted side effects in your code. A best practice to follow is to avoid mutating global state while leveraging mutation on local state.
https://shopify.engineering/write-fast-code-ruby-rails
@DevTwitter | <Hossein Nazari/>
Forwarded from Sadra Codes
هرچی بیشتر یاد میگیری، بیشتر احساس پوچی و نادانی میکنی. بنظرم این زمانی خوبه که این حس تو رو حریصتر کنه.
در مسیری قدم گذاشتی که دوست داشتی شبیه کسی بشی که آخر این مسیره. پس نباید صفحه اول خودت رو با فصل آخر اون شخص مقایسه کنی. :)
در مسیری قدم گذاشتی که دوست داشتی شبیه کسی بشی که آخر این مسیره. پس نباید صفحه اول خودت رو با فصل آخر اون شخص مقایسه کنی. :)
Forwarded from Bardiaism
Media is too big
VIEW IN TELEGRAM
آموزش Qt6 - قسمت پانزدهم - مقدمه QML
این قسمت مقدمهای بر QML است و تو این قسمت توضیح میدیم که QML چیه و چطوری کار میکنه و کجاها بدردمون میخوره و برای یادگیریش بهتره چه دانشهایی داشته باشیم.
در این قسمت درباره سینتکس و قوانین کدنویسی با QML خیلی توضیح خاصی نمیدیم.
لینک ویدیو در یوتیوب:
https://youtu.be/1hojf1CMd3A
@Bardiaism
این قسمت مقدمهای بر QML است و تو این قسمت توضیح میدیم که QML چیه و چطوری کار میکنه و کجاها بدردمون میخوره و برای یادگیریش بهتره چه دانشهایی داشته باشیم.
در این قسمت درباره سینتکس و قوانین کدنویسی با QML خیلی توضیح خاصی نمیدیم.
لینک ویدیو در یوتیوب:
https://youtu.be/1hojf1CMd3A
@Bardiaism
Forwarded from mnr tech
در ابتدا docker و docker compose با هم دیگه یکی نبودن به عبارتی دیگه docker-compose به عنوان یک ماژول اضافه تر باید در کنار داکر نصب میشد و دستوراتش هم به این شکل بود
دقت کنید که یه dash (-) وجود داره.
اما بعد چند سال داکر کمپوز به هسته داکر اضافه شد و دستورش هم فرق کرد و اون dash دیگه نیاز نیست. به این شکل
حالا من به یه پروژه ای برخوردم که یک سری اسکریپت توش هست قبل از اجرای اسکریپت میاد چک میکنه آیا فایل اجرایی برای docker-compose توی path وجود داره یه خیر؟ به بیان ساده تر چک میکنه ببینه فایلی به اسم docker-compose در مسیر
خط کد بالا توی بش این کار رو میکنه. درسته که docker compose الان از دستور قدیمی هم پشتیبانی میکنه ولی این خط کد false میشه چون فایل مورد نظر تو مسیر PATH نیست.
برای حل این مشکل چند راه بود ولی بهترین راهی که میشه انجام داد تا به صورت کامل پشتیبانی بشه توسط همچین اسکریپت هایی این هست 👇🏻
یک فایل به نام docker-compose در یکی از مسیرهای موجود در PATH بسازید:
محتوای زیر را در فایل بنویسید:
به فایل اجازه اجرا بدهید:
درواقع با این کار یه wrapper برای docker compose ایجاد میکنیم که با دستور docker-compose اجرا میشه.
میشه از روش های دیگه هم استفاده کرد مثلا تعریف alias توی bashrc ولی این کار باز هم این مشکل رو حل نمیکنه
یا نصب docker compose v2 plugin با دستور زیر
docker-compose up
دقت کنید که یه dash (-) وجود داره.
اما بعد چند سال داکر کمپوز به هسته داکر اضافه شد و دستورش هم فرق کرد و اون dash دیگه نیاز نیست. به این شکل
docker compose up
حالا من به یه پروژه ای برخوردم که یک سری اسکریپت توش هست قبل از اجرای اسکریپت میاد چک میکنه آیا فایل اجرایی برای docker-compose توی path وجود داره یه خیر؟ به بیان ساده تر چک میکنه ببینه فایلی به اسم docker-compose در مسیر
/usr/local/bin/docker-compose وجود داره یا خیر؟# Ensure docker-compose exists
if hash docker-compose 2>/dev/null; then
خط کد بالا توی بش این کار رو میکنه. درسته که docker compose الان از دستور قدیمی هم پشتیبانی میکنه ولی این خط کد false میشه چون فایل مورد نظر تو مسیر PATH نیست.
برای حل این مشکل چند راه بود ولی بهترین راهی که میشه انجام داد تا به صورت کامل پشتیبانی بشه توسط همچین اسکریپت هایی این هست 👇🏻
یک فایل به نام docker-compose در یکی از مسیرهای موجود در PATH بسازید:
sudo nano /usr/local/bin/docker-compose
محتوای زیر را در فایل بنویسید:
#!/bin/bash
docker compose "$@"
به فایل اجازه اجرا بدهید:
sudo chmod +x /usr/local/bin/docker-compose
درواقع با این کار یه wrapper برای docker compose ایجاد میکنیم که با دستور docker-compose اجرا میشه.
میشه از روش های دیگه هم استفاده کرد مثلا تعریف alias توی bashrc ولی این کار باز هم این مشکل رو حل نمیکنه
یا نصب docker compose v2 plugin با دستور زیر
sudo apt-get update
sudo apt-get install docker-compose-plugin
Forwarded from LinAcademy (Pakrohk)
Forwarded from Sadra Codes
دوستان، محمد زحمت میکشه کانتنت باکیفیت راجع به استکها و ابزارهای محبوب روز دنیا توی این کانال قرار میده. این کارم تبلیغ نیست. خودمم عضو کانالشم و هرازگاهی از پست های خلاصه و مفیدی که میذاره استفاده میکنم. ❤️
https://news.1rj.ru/str/ninja_learn_ir
https://news.1rj.ru/str/ninja_learn_ir
Telegram
Ninja Learn | نینجا لرن
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب بلدن 🤫
📄 Send me post: https://news.1rj.ru/str/NoronChat_bot?start=sec-fdggghgebe
👥 ɢʀᴏᴜᴘ: https://news.1rj.ru/str/+td1EcO_YfSphNTlk
اینجا چیزایی یاد میگیری که فقط نینجاهای وب بلدن 🤫
📄 Send me post: https://news.1rj.ru/str/NoronChat_bot?start=sec-fdggghgebe
👥 ɢʀᴏᴜᴘ: https://news.1rj.ru/str/+td1EcO_YfSphNTlk
Forwarded from Armon technical logs (armon Taheri)
یکی از دوستان گفتن که گوش دادن به ویس ها سخت هست
میتونین ویس هارو تبدیل به متن کنین یا خلاصه اونها رو مطاله کنین
@VoiceToTextMasterBot
@KhanoomJBot
میتونین ویس هارو تبدیل به متن کنین یا خلاصه اونها رو مطاله کنین
@VoiceToTextMasterBot
@KhanoomJBot
Forwarded from Ninja Learn | نینجا لرن
اینم اولین پست go درسال جدید 😂
اگه بد بود یا جاییش اشتباه بود شرمنده
کمی تازه کار هستم در go
اگه بد بود یا جاییش اشتباه بود شرمنده
کمی تازه کار هستم در go
Forwarded from Ninja Learn | نینجا لرن
بچه های خوبی باشید پست بعدی راجب fastapi 😁😂
Forwarded from متخصص وردپرس | پوینا
چند وقت پیش توی چشم ما توی خیابون لیزر زدن
و دیگه نتونستیم به درستی ببنیم و با سیستم کار کنیم
حتی در حد یک دقیقه هم نمیتونستیم و به شدت سر درد و چشم درد میشدیم
و برای کارای واجب واقعا داشتیم دیونه میشیدم
اما چند سال قبل یکی از دوستای خوبمون بهمون یک عینک با فیلتر زرد داده بود گفته بود این فیلتر زرد رو موقع رانندگی توی شب بزن اذیت نمیشی
ما ازش برای پشت مانیتور استفاده کردیم و میتونم بگم واقعا معجزه کرد.
فقط گفتیم بهتون بگیم مراقب سلامتیون باشید و اگر زیاد با سیستم کار میکنید حتما عینک های خوب بزنید
@poinair پوینا
و دیگه نتونستیم به درستی ببنیم و با سیستم کار کنیم
حتی در حد یک دقیقه هم نمیتونستیم و به شدت سر درد و چشم درد میشدیم
و برای کارای واجب واقعا داشتیم دیونه میشیدم
اما چند سال قبل یکی از دوستای خوبمون بهمون یک عینک با فیلتر زرد داده بود گفته بود این فیلتر زرد رو موقع رانندگی توی شب بزن اذیت نمیشی
ما ازش برای پشت مانیتور استفاده کردیم و میتونم بگم واقعا معجزه کرد.
فقط گفتیم بهتون بگیم مراقب سلامتیون باشید و اگر زیاد با سیستم کار میکنید حتما عینک های خوب بزنید
@poinair پوینا
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
🔰در سال جدید 2025 کمی لینوکس را عمیقتر یاد بگیریم:
🔰دستور ulimit
🔹در لینوکس برای تنظیم و نمایش محدودیتهای منابع سیستم برای کاربران و فرآیندها استفاده میشود. در اینجا گزینههای اصلی ulimit به همراه توضیحات کوتاه آورده شدهاند:
گزینههای ulimit:
تمام محدودیتهای فعلی را نمایش میدهد.
حداکثر اندازه فایلهای core dump را تنظیم یا نمایش میدهد. وقتی یک برنامه در لینوکس به دلیل خطا یا مشکل (مانند Segmentation Fault) به طور غیرمنتظرهای خاتمه مییابد، سیستم میتواند یک فایل به نام Core Dump ایجاد کند.
حداکثر اندازه segment دادهها (Data segment) را تنظیم یا نمایش میدهد.
حداکثر اندازه فایلهایی که کاربر میتواند ایجاد کند را تنظیم یا نمایش میدهد.
حداکثر حافظه قفل شده (Locked memory) را تنظیم یا نمایش میدهد.
حداکثر حافظه فیزیکی (Resident set size) را تنظیم یا نمایش میدهد.
حداکثر تعداد فایلهای باز شده (Open files) را تنظیم یا نمایش میدهد.
حداکثر اندازه stack را تنظیم یا نمایش میدهد.
حداکثر زمان CPU (بر حسب ثانیه) را تنظیم یا نمایش میدهد.
حداکثر تعداد فرآیندهای همزمان (Processes) را تنظیم یا نمایش میدهد.
حداکثر حافظه مجازی (Virtual memory) را تنظیم یا نمایش میدهد.
توضیحات دستور کمی طولانی است، در صورت لازم. هر سوالی راجع به دستور داشتید بپرسد
@seilany
📌نویسنده: حسین سیلانی
📌منبع : آکادمی کندوی دانش
https://learninghive.ir
🔰دستور ulimit
🔹در لینوکس برای تنظیم و نمایش محدودیتهای منابع سیستم برای کاربران و فرآیندها استفاده میشود. در اینجا گزینههای اصلی ulimit به همراه توضیحات کوتاه آورده شدهاند:
گزینههای ulimit:
تمام محدودیتهای فعلی را نمایش میدهد.
ulimit -a
حداکثر اندازه فایلهای core dump را تنظیم یا نمایش میدهد. وقتی یک برنامه در لینوکس به دلیل خطا یا مشکل (مانند Segmentation Fault) به طور غیرمنتظرهای خاتمه مییابد، سیستم میتواند یک فایل به نام Core Dump ایجاد کند.
ulimit -c 1024
حداکثر اندازه segment دادهها (Data segment) را تنظیم یا نمایش میدهد.
ulimit -d 2048
حداکثر اندازه فایلهایی که کاربر میتواند ایجاد کند را تنظیم یا نمایش میدهد.
ulimit -f 4096
حداکثر حافظه قفل شده (Locked memory) را تنظیم یا نمایش میدهد.
ulimit -l 8192
حداکثر حافظه فیزیکی (Resident set size) را تنظیم یا نمایش میدهد.
ulimit -m 16384
حداکثر تعداد فایلهای باز شده (Open files) را تنظیم یا نمایش میدهد.
ulimit -n 1024
حداکثر اندازه stack را تنظیم یا نمایش میدهد.
ulimit -s 8192
حداکثر زمان CPU (بر حسب ثانیه) را تنظیم یا نمایش میدهد.
ulimit -t 60
حداکثر تعداد فرآیندهای همزمان (Processes) را تنظیم یا نمایش میدهد.
ulimit -u 512
حداکثر حافظه مجازی (Virtual memory) را تنظیم یا نمایش میدهد.
ulimit -v 32768
توضیحات دستور کمی طولانی است، در صورت لازم. هر سوالی راجع به دستور داشتید بپرسد
@seilany
📌نویسنده: حسین سیلانی
📌منبع : آکادمی کندوی دانش
https://learninghive.ir
Forwarded from IRCF | اینترنت آزاد برای همه
سرعت و کیفیت کم اینترنت و فیلترینگ، بالاتر از تحریم، موثرترین مانع علیه برنامهنویسان است.
🔍 ircf.space
@ircfspace
🔍 ircf.space
@ircfspace
Forwarded from IRCF | اینترنت آزاد برای همه
Forwarded from Ninja Learn | نینجا لرن
خب خب خب پکیج fmt در go
این پکیج (fmt) یکی از پراستفادهترین و مهمترین ابزارهای Go هست که برای کار با ورودی و خروجیها استفاده میشه. بیاین ببینیم چطور کار میکنه.
توابع پرکاربرد fmt 🛠️
پکیج fmt یه سری توابع داره که هر کدوم برای هدف خاصی طراحی شدن. مهمترینشون رو اینجا لیست کردم:
1⃣ Print و Println
برای چاپ اطلاعات روی کنسول:
Output:
2⃣ Printf
برای چاپ با فرمت خاص:
Output:
3⃣ Sprintf
مثل Printf عمل میکنه، ولی خروجی رو به جای چاپ، به صورت رشته برمیگردونه:
Output:
4⃣ Fprintf
اطلاعات رو به جای کنسول، به فایل یا هر io.Writer دیگهای میفرسته:
5⃣ Scan و Scanf
برای گرفتن ورودی از کاربر:
Output (Example input: "Ali", "20"):
پشت پرده fmt: چطور کار میکنه؟ 🧐
حالا که با توابع آشنا شدی، بد نیست بدونی fmt پشت صحنه چطور دادهها رو مدیریت میکنه.
1⃣ استفاده از Interfaces
ـfmt از دو اینترفیس مهم استفاده میکنه:
ـStringer:
مثال:
Output:
2⃣ـ Reflection
پکیج fmt از پکیج reflect استفاده میکنه تا نوع دادهها رو در زمان اجرا بررسی کنه. یعنی وقتی %v یا سایر placeholders رو استفاده میکنی، fmt میتونه بفهمه چه نوع دادهای داری و چطور باید چاپش کنه.
Output:
فرمتدهی دادهها با fmt 🎨
پکیج fmt قابلیتهای فرمتدهی خیلی خوبی داره که بیشتر اوقات به کار میان:
اعداد
Output:
رشتهها
Output:
منطق (Boolean)
Output:
جمعبندی ✍
پکیج fmt یکی از ابزارهای قدرتمند Go هست که با توابع ساده و قابلیتهای فرمتدهی پیشرفته، کار برنامهنویسا رو راحت کرده.
➖➖➖➖➖➖➖➖➖
این پکیج (fmt) یکی از پراستفادهترین و مهمترین ابزارهای Go هست که برای کار با ورودی و خروجیها استفاده میشه. بیاین ببینیم چطور کار میکنه.
توابع پرکاربرد fmt 🛠️
پکیج fmt یه سری توابع داره که هر کدوم برای هدف خاصی طراحی شدن. مهمترینشون رو اینجا لیست کردم:
1⃣ Print و Println
برای چاپ اطلاعات روی کنسول:
ـPrint: متنها رو بدون فاصله چاپ میکنه.
ـPrintln: بین متنها فاصله میذاره و یه خط جدید اضافه میکنه.
fmt.Print("Hello") fmt.Print("World") fmt.Println("Hello") fmt.Println("World") Output:
HelloWorld
Hello
World
2⃣ Printf
برای چاپ با فرمت خاص:
name := "Ali"
age := 20 fmt.Printf(
"Name: %s,
Age: %d\n",
name, age
)
Output:
Name: Ali, Age: 20
3⃣ Sprintf
مثل Printf عمل میکنه، ولی خروجی رو به جای چاپ، به صورت رشته برمیگردونه:
name := "Ali"
greeting := fmt.Sprintf(
"Hello,
%s!",
name
)
fmt.Println(greeting)
Output:
Hello, Ali!
4⃣ Fprintf
اطلاعات رو به جای کنسول، به فایل یا هر io.Writer دیگهای میفرسته:
file, _ := os.Create("output.txt")
fmt.Fprintf(file, "Hello, %s!", "File") 5⃣ Scan و Scanf
برای گرفتن ورودی از کاربر:
ـScan: ورودی ساده رو میخونه.
ـScanf: ورودی رو با فرمت مشخص میخونه.
var name string
fmt.Println("Enter your name:")
fmt.Scanln(&name)
fmt.Println("Your name is:", name)
var age int
fmt.Println("Enter your age:")
fmt.Scanf("%d", &age)
fmt.Println("Your age is:", age)
Output (Example input: "Ali", "20"):
Enter your name:
Your name is: Ali
Enter your age:
Your age is: 20
پشت پرده fmt: چطور کار میکنه؟ 🧐
حالا که با توابع آشنا شدی، بد نیست بدونی fmt پشت صحنه چطور دادهها رو مدیریت میکنه.
1⃣ استفاده از Interfaces
ـfmt از دو اینترفیس مهم استفاده میکنه:
ـStringer:
اگه struct این اینترفیس رو پیادهسازی کرده باشه، متد String() برای چاپ خروجی فراخوانی میشه.ـError:
برای ارورها، متد Error() فراخوانی میشه.
مثال:
type Person struct {
Name string
Age int
}
func (p Person) String() string {
return fmt.Sprintf("Name: %s, Age: %d", p.Name, p.Age)
}
func main() {
person := Person{"Ali", 20}
fmt.Println(person)
} Output:
Name: Ali, Age: 20
2⃣ـ Reflection
پکیج fmt از پکیج reflect استفاده میکنه تا نوع دادهها رو در زمان اجرا بررسی کنه. یعنی وقتی %v یا سایر placeholders رو استفاده میکنی، fmt میتونه بفهمه چه نوع دادهای داری و چطور باید چاپش کنه.
x := 42
fmt.Printf("Type: %T, Value: %v\n", x, x)
Output:
Type: int, Value: 42
فرمتدهی دادهها با fmt 🎨
پکیج fmt قابلیتهای فرمتدهی خیلی خوبی داره که بیشتر اوقات به کار میان:
اعداد
%d: عدد صحیح
%f: عدد اعشاری
%.2f: عدد اعشاری با 2 رقم اعشار
%b: نمایش در مبنای 2
%x: نمایش در مبنای 16
num := 42
pi := 3.14159
fmt.Printf("Decimal: %d, Binary: %b, Hex: %x, Pi: %.2f\n", num, num, num, pi)
Output:
Decimal: 42, Binary: 101010, Hex: 2a, Pi: 3.14
رشتهها
%s: نمایش رشته
%q: رشته با کوتیشن
%+v: struct با نام فیلدها
%v: مقدار خام
type Person struct {
Name string
Age int
}
p := Person{"Ali", 20}
fmt.Printf("Raw: %v, With Fields: %+v\n", p, p) Output:
Raw: {Ali 20}, With Fields: {Name:Ali Age:20}منطق (Boolean)
%t: مقدار True یا False رو چاپ میکنه.
isGoAwesome := true
fmt.Printf("Is Go awesome? %t\n", isGoAwesome)
Output:
Is Go awesome? true
جمعبندی ✍
پکیج fmt یکی از ابزارهای قدرتمند Go هست که با توابع ساده و قابلیتهای فرمتدهی پیشرفته، کار برنامهنویسا رو راحت کرده.
#programming #go
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
Forwarded from DevAcademy
سلام دوستان👋
یکی از همکاران که اخیرا تو فلو مصاحبه برای پوزیشن Front End بود ،یه سری سوالات پرتکرار مصاحبه هاشو معرفی کرد که سعی میکنم پست خوب در موردشون دیدم تو چنل بذارم یا در موردشون پست درست کنم.
یکی از اون سوالات پرتکرار مربوط به متودهای ()bind(),apply(),call بود که من یه پست تو لینکدین در موردشون گذاشتم
اگه دوست داشتید میتونید اینجا بخونید
https://www.linkedin.com/posts/masoud-varzi_javanoscript-webdevelopment-js-activity-7280271128042852352-WxIN?utm_source=share&utm_medium=member_ios
💻@DevAcaademy
💬@DevAcademyGroup
یکی از همکاران که اخیرا تو فلو مصاحبه برای پوزیشن Front End بود ،یه سری سوالات پرتکرار مصاحبه هاشو معرفی کرد که سعی میکنم پست خوب در موردشون دیدم تو چنل بذارم یا در موردشون پست درست کنم.
یکی از اون سوالات پرتکرار مربوط به متودهای ()bind(),apply(),call بود که من یه پست تو لینکدین در موردشون گذاشتم
اگه دوست داشتید میتونید اینجا بخونید
https://www.linkedin.com/posts/masoud-varzi_javanoscript-webdevelopment-js-activity-7280271128042852352-WxIN?utm_source=share&utm_medium=member_ios
💻@DevAcaademy
💬@DevAcademyGroup
Linkedin
#javanoscript #webdevelopment #js #frontenddevelopment #techinterviews #programming #learning #code | Masoud Varzi
A Frequently Asked JavaScript Interview Question!
Call(), Apply(), and Bind()
Why Do We Need Them?
In JavaScript, the value of the "this" keyword is determined by how a function is called. By using the call(), apply(), and bind() methods, you can explicitly…
Call(), Apply(), and Bind()
Why Do We Need Them?
In JavaScript, the value of the "this" keyword is determined by how a function is called. By using the call(), apply(), and bind() methods, you can explicitly…
Forwarded from a pessimistic researcher (Kc)
"در ابتدا تقارن وجود داشت"
از کتاب جزء و کل به نوشتهی آقای Werner Heisenberg.
—————————————
چند روز پیش به یک کتاب Open Source برخورد کردم به نام SYMMETRY که چند نویسنده داره و من یکیشون رو یعنی Ulrik Buchholtz رو میشناختم. از اونجایی که ایشون Type theory کار هستند، حس کردم کتاب باید حرف تازهای برای گفتن داشته باشه. وقتی که راجع به باقی نویسندههای کتاب سرچ کردم فهمیدم که کتاب رو تعدادی TCS کار نوشتن و همونطور که میشه از بکگراند حضرات حدس زد، کتاب بر پایهی univalent mathematics پیش میره و سعی در تعریف یک Foundation برای پاسخ به سوالات مرتبط با Symmetry داره. کتاب با type theory شروع میشه، از group theory عبور میکنه، دستی به Automata Theory میده و به تئوری گالوا میرسه. شاید بد نباشه که کمی شفاف کنم که چرا چنین مبحثی برای شخص خودم اهمیت داره.
بر خلاف خیلی از دوستانی که در ماهای گذشته به جمع ما پیوستن، من رشتهام ریاضی نیست. اما خب توی Theoretical of computer science به خطوط Track B کانسپت Symmetry و مشتقاتش خیلی به دادمون میرسه. مثلا ما یک دنیایی داریم توی این track به اسم Abstract Interpretation که PL ایها و Compiler ایها ازش خیلی استفاده میکنند. به لطف روپاک و رفقاش، verification ای ها هم از ۲۰۰۰ به اینور ازش استفاده میکنند. کانسپت Abstract Interpretation برای اولین بار توسط آقایان Patrick Cousot و Radhia Cousot در دهه ۷۰ میلادی معرفی شد. Semantics فرمالی که این بزرگرواران در دو مقالهی معروف و فوق العاده پیچیدهشون ارائه دادند بر پایهی Lattice Theory و Galois connections بود. یکی دیگه از کاربردای Symmetry توی Model Checking هستش. خیلی از سیستمهای Concurrent ای که ما میخوایم verify شون کنیم، تشکیل شده از process هایی هستند که رفتار identical دارند و با تعریف یک symmetry reduction ای که sound باشه میشه فضای حالت سیستم رو به شدت کاهش داد. یک نسخهی Generalized شدهی Symmetry به ما در verify کردن parameterized concurrent system ها کمک میکنه بدین صورت که اگر اثبات کنیم سیستم بهازای تعداد مشخصی process وریفای میشه، میشه نتیجه گرفت که به ازای بینهایت process هم وریفای میشه و به ما در verify کردن infinite state systems ها کمک میکنه.
اینها رو گفتم تا بیشتر دید بدم بهتون ولی خودم دنبال چیز دیگهای از Symmetry هستم. یکی از پروژههایی که روی JMC نعریف کردیم، verify کردن distributed system هایی هستش که با پترن Executors/Futures کار میکنند. بدین صورت که شما یک Executor دارید که تشکیل شده از یک Thread Pool و یک Runnable Queue هستش و یک سری Task رو به این Executor سابمیت میکنید. وقتی که ما اومدیم این پترن رو به شکل فرمال مدل کردیم و بهش یک semantics مبتنی بر dynamic partial order reduction دادیم، دریافتیم که فضای حالت به شکل سوپرنمایی بزرگ میشه وریفای کردنش خیلی راحت نیست. الان دنبال این هستم که بتونم با توسعه و افزودن یک symmetry reduction به این partial order reduction یک تکنیک sound داشته باشم برای کاهش دادن فضای حالت تا بتونیم یک subclass از این مسائل رو به شکل موثری verify کنیم.
از این جهت این کتاب برام جذاب اومد و گفتم که به شما هم معرفیش کنم. نکتهای که هست اینه که این کتاب در درست نگارشه و برخی از فصلهاش خصوصا فصول انتهاییش کامل نیست. ولی آخرین ورژن Draft این کتاب رو میتونید از طریق این لینک دسترسی داشته باشید. لینک ریپوی این کتاب هم اینجاست.
عنوان پست، جملهای هست که روی جلد کتاب نوشته شده.
از کتاب جزء و کل به نوشتهی آقای Werner Heisenberg.
—————————————
چند روز پیش به یک کتاب Open Source برخورد کردم به نام SYMMETRY که چند نویسنده داره و من یکیشون رو یعنی Ulrik Buchholtz رو میشناختم. از اونجایی که ایشون Type theory کار هستند، حس کردم کتاب باید حرف تازهای برای گفتن داشته باشه. وقتی که راجع به باقی نویسندههای کتاب سرچ کردم فهمیدم که کتاب رو تعدادی TCS کار نوشتن و همونطور که میشه از بکگراند حضرات حدس زد، کتاب بر پایهی univalent mathematics پیش میره و سعی در تعریف یک Foundation برای پاسخ به سوالات مرتبط با Symmetry داره. کتاب با type theory شروع میشه، از group theory عبور میکنه، دستی به Automata Theory میده و به تئوری گالوا میرسه. شاید بد نباشه که کمی شفاف کنم که چرا چنین مبحثی برای شخص خودم اهمیت داره.
بر خلاف خیلی از دوستانی که در ماهای گذشته به جمع ما پیوستن، من رشتهام ریاضی نیست. اما خب توی Theoretical of computer science به خطوط Track B کانسپت Symmetry و مشتقاتش خیلی به دادمون میرسه. مثلا ما یک دنیایی داریم توی این track به اسم Abstract Interpretation که PL ایها و Compiler ایها ازش خیلی استفاده میکنند. به لطف روپاک و رفقاش، verification ای ها هم از ۲۰۰۰ به اینور ازش استفاده میکنند. کانسپت Abstract Interpretation برای اولین بار توسط آقایان Patrick Cousot و Radhia Cousot در دهه ۷۰ میلادی معرفی شد. Semantics فرمالی که این بزرگرواران در دو مقالهی معروف و فوق العاده پیچیدهشون ارائه دادند بر پایهی Lattice Theory و Galois connections بود. یکی دیگه از کاربردای Symmetry توی Model Checking هستش. خیلی از سیستمهای Concurrent ای که ما میخوایم verify شون کنیم، تشکیل شده از process هایی هستند که رفتار identical دارند و با تعریف یک symmetry reduction ای که sound باشه میشه فضای حالت سیستم رو به شدت کاهش داد. یک نسخهی Generalized شدهی Symmetry به ما در verify کردن parameterized concurrent system ها کمک میکنه بدین صورت که اگر اثبات کنیم سیستم بهازای تعداد مشخصی process وریفای میشه، میشه نتیجه گرفت که به ازای بینهایت process هم وریفای میشه و به ما در verify کردن infinite state systems ها کمک میکنه.
اینها رو گفتم تا بیشتر دید بدم بهتون ولی خودم دنبال چیز دیگهای از Symmetry هستم. یکی از پروژههایی که روی JMC نعریف کردیم، verify کردن distributed system هایی هستش که با پترن Executors/Futures کار میکنند. بدین صورت که شما یک Executor دارید که تشکیل شده از یک Thread Pool و یک Runnable Queue هستش و یک سری Task رو به این Executor سابمیت میکنید. وقتی که ما اومدیم این پترن رو به شکل فرمال مدل کردیم و بهش یک semantics مبتنی بر dynamic partial order reduction دادیم، دریافتیم که فضای حالت به شکل سوپرنمایی بزرگ میشه وریفای کردنش خیلی راحت نیست. الان دنبال این هستم که بتونم با توسعه و افزودن یک symmetry reduction به این partial order reduction یک تکنیک sound داشته باشم برای کاهش دادن فضای حالت تا بتونیم یک subclass از این مسائل رو به شکل موثری verify کنیم.
از این جهت این کتاب برام جذاب اومد و گفتم که به شما هم معرفیش کنم. نکتهای که هست اینه که این کتاب در درست نگارشه و برخی از فصلهاش خصوصا فصول انتهاییش کامل نیست. ولی آخرین ورژن Draft این کتاب رو میتونید از طریق این لینک دسترسی داشته باشید. لینک ریپوی این کتاب هم اینجاست.
عنوان پست، جملهای هست که روی جلد کتاب نوشته شده.
Forwarded from کانال مهرداد لینوکس (Mehrdad Linux)
🔥میخواهید برای مصاحبه DevOps آماده بشید ؟
✅بیش از 140 سوال مصاحبه DevOps در مجموعه ای devopscommunity
💠کلمه DevOps از دو کلمهی Development (توسعه)
💠و Operation (عملیات) تشکیل شده
🗓 دواپس بین تیم توسعهی محصول و تیم عملیاتی شرکت، همکاری و تعامل ایجاد میکنه
🗓 تخصص DevOps یک زبان یا یک تکنولوژی خاص نیست بلکه ترکیبی از فلسفه، فرهنگ، شیوهها و ابزارهایی است که کمک میکنند محصولات یا خدمات ما سریعتر به دست مشتریان برسد.
https://github.com/rohitg00/devops-interview-questions
https://www.devopscommunity.in/
❤️ ممنون از حمایت هاتون 💐🌺
#DevOps
✅بیش از 140 سوال مصاحبه DevOps در مجموعه ای devopscommunity
💠کلمه DevOps از دو کلمهی Development (توسعه)
منظور از Development، تیم توسعه است، یعنی تمام کسانی که در ساخت محصول، خطایابی، تست و در نهایت تکمیل محصول نقش دارند
💠و Operation (عملیات) تشکیل شده
منظور از Operation هم IT Operation یا تیم عملیاتی است. افرادی که در حالت کلی، نگهداری تجهیزات سخت افزاری، نرم افزاری، و محیطهای عملیاتی شرکت را به عهده دارند
🗓 دواپس بین تیم توسعهی محصول و تیم عملیاتی شرکت، همکاری و تعامل ایجاد میکنه
🗓 تخصص DevOps یک زبان یا یک تکنولوژی خاص نیست بلکه ترکیبی از فلسفه، فرهنگ، شیوهها و ابزارهایی است که کمک میکنند محصولات یا خدمات ما سریعتر به دست مشتریان برسد.
https://github.com/rohitg00/devops-interview-questions
https://www.devopscommunity.in/
❤️ ممنون از حمایت هاتون 💐🌺
#DevOps