Dev Perfects – Telegram
Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://news.1rj.ru/str/dev_perfects/455


ارتباط:
https://news.1rj.ru/str/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Syntax | سینتکس (Daimon)
دوستان اگه اپلیکیشن رو بصورت مونولیت مینیوسید، کار خوبی میکنید، اما aggregation pattern رو جدی بگیرید، کمک بزرگی میکنه به حفظ loosely coupled بودن ماژول و سرویس هاتون.

یه اشتباه رایجی که باعث میشه خیلی راحت همه چیز در هم تنیده و coupled بشه نیازهای بیزینسی ای هست که دیتای aggregate شده از چند domain مختلف رو میخواد از شما. تو حالت مونولیت خیلی ساده ست که شما در هر domain به دیتابیس یه domain دیگه درخواست بزنی و یا حتی تو interactor/service دیگه یه متد جدید تعریف کنی که دیتای مد نظر رو بده. که معمولا باعث در هم تنیده شدن و چاق شدن سرویس هاتون میشه.

بهتره سرویس یا همون interactorهاتون کارهای خیلی کوچیک و well-definedی رو انجام بدن و اگه نیازمندی های aggregationطور دارید، یه سری service دیگه بسازید که وابستگی خواهد داشت به سرویس های مختلف و دیتاهای raw رو میگیره و پردازش میکنه که دیتای نهایی رو آماده کنه.

بعضی وقت ها از طریق gateway هم ممکنه بتونید aggregate کنید. بعضی وقت ها ممکنه تو همون لایه دلیوری (کنترلر) تون بتونید دو تا سرویس رو فراخوانی کنید و کار رو در بیارید، گاهی هم پیچیده تر میشه و لازمه یه سرویس(interactor) بنویسید که کار aggregation رو انجام بده
https://learn.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation

باز خود aggregate کردن حالت های مختلفی داره، اینجا میتونید بیشتر بخونید در موردش
https://medium.com/geekculture/design-patterns-for-microservices-aggregation-pattern-1b8994516fa2

Source:
https://news.1rj.ru/str/gocasts

@Syntax_fa
Forwarded from Linuxor ?
الگوریتم Shor's یکی از الگوریتم‌های مشهور کوانتومی هست که می‌تونه اعداد رو به عوامل اولشون تجزیه کنه. این الگوریتم پتانسیل داره که رمزنگاری‌های کلاسیک مثل RSA رو بشکنه.

کامپیوتر 127-کیوبیتی IBM یکی از پیشرفته‌ترین کامپیوترهای کوانتومی فعلیه.
اما تجزیه کردن عدد 15 به 3 و 5 (که عوامل اولش هستن)، کاری بسیار ساده است و حتی یه دانش‌آموز ابتدایی هم می‌تونه این کار رو انجام بده.

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

@Linuxor
Forwarded from Morteza Bashsiz مرتضی باشسیز (Morteza Bashsiz)
نيما يوشيج در تولد يك سالگي فرزندش نوشت:
فرزندم يك بهار
يك تابستان
يك پائيز
و يك زمستان را ديدي
از اين پس همه چيز تكراري است
به جز مهرباني
پس تا مي توانی مهربان باش
یه مقاله جذاب در مورد نوشتن کد سریع از 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/>
Forwarded from Sadra Codes
هرچی بیشتر یاد می‌گیری، بیشتر احساس پوچی و نادانی می‌کنی. بنظرم این زمانی خوبه که این حس تو رو حریص‌تر کنه.

در مسیری قدم گذاشتی که دوست داشتی شبیه کسی بشی که آخر این مسیره. پس نباید صفحه اول خودت رو با فصل آخر اون شخص مقایسه کنی. :)
Forwarded from Bardiaism
Media is too big
VIEW IN TELEGRAM
آموزش Qt6 - قسمت پانزدهم - مقدمه QML

این قسمت مقدمه‌ای بر QML است و تو این قسمت توضیح میدیم که QML چیه و چطوری کار میکنه و کجاها بدردمون میخوره و برای یادگیریش بهتره چه دانش‌هایی داشته باشیم.
در این قسمت درباره سینتکس و قوانین کدنویسی با QML خیلی توضیح خاصی نمیدیم.

لینک ویدیو در یوتیوب:
https://youtu.be/1hojf1CMd3A

@Bardiaism
Forwarded from mnr tech
در ابتدا docker و docker compose با هم دیگه یکی نبودن به عبارتی دیگه docker-compose به عنوان یک ماژول اضافه تر باید در کنار داکر نصب می‌شد و دستوراتش هم به این شکل بود

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 Armon technical logs (armon Taheri)
تجربه اولین محیط کاری که مشغول بودم
Forwarded from LinAcademy (Pakrohk)
🎄سال نو میلادی به همه دوست داران تکنولوژی مبارک 🎄

@LinAcademy
Forwarded from Sadra Codes
دوستان، محمد زحمت می‌کشه کانتنت باکیفیت راجع به استک‌ها و ابزارهای محبوب روز دنیا توی این کانال قرار می‌ده. این کارم تبلیغ نیست. خودمم عضو کانالشم و هرازگاهی از پست های خلاصه و مفیدی که می‌ذاره استفاده می‌کنم. ❤️

https://news.1rj.ru/str/ninja_learn_ir
Forwarded from Armon technical logs (armon Taheri)
یکی از دوستان گفتن که گوش دادن به ویس ها سخت هست
میتونین ویس هارو تبدیل به متن کنین یا خلاصه اونها رو مطاله کنین
@VoiceToTextMasterBot
@KhanoomJBot
اینم اولین پست go درسال جدید 😂
اگه بد بود یا جاییش اشتباه بود شرمنده
کمی تازه کار هستم در go
بچه های خوبی باشید پست بعدی راجب fastapi 😁😂
مثل اینکه امروز رو مود دیسلاکید 😂
چند وقت پیش توی چشم ما توی خیابون لیزر زدن

و دیگه نتونستیم به درستی ببنیم و با سیستم کار کنیم

حتی در حد یک دقیقه هم نمیتونستیم و به شدت سر درد و چشم درد می‌شدیم

و برای کارای واجب واقعا داشتیم دیونه میشیدم

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

ما ازش برای پشت مانیتور استفاده کردیم و میتونم بگم واقعا معجزه کرد.

فقط گفتیم بهتون بگیم مراقب سلامتیون باشید و اگر زیاد با سیستم کار میکنید حتما عینک های خوب بزنید

@poinair پوینا
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
🔰در سال جدید 2025 کمی لینوکس را عمیقتر یاد بگیریم:
🔰دستور 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
سرعت و کیفیت کم اینترنت و فیلترینگ، بالاتر از تحریم، موثرترین مانع علیه برنامه‌نویسان است.

🔍 ircf.space
@ircfspace
Forwarded from Linuxor ?
یک بار از کن تامسون پرسیده شد که اگر یونیکس را دوباره خلق می‌کرد، چه چیزی را در آن تغییر می‌داد. او پاسخ داد : "فراخوان سیستمی creat را با e در انتهایش می‌نوشتم"


@Linuxor
خب خب خب پکیج 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