Syntax | سینتکس – Telegram
تو چند دقیقه نحوه کار با Redis Pub/Sub رو تو پایتون یاد بگیر

Pub/Sub
(انتشار/اشتراک) یک الگوی معماری است که به برنامه‌ها اجازه می‌دهد تا به صورت غیرمستقیم با یکدیگر ارتباط برقرار کنند. در این الگو، تولیدکنندگان اطلاعات (Publisher) پیام‌ها را منتشر می‌کنند و مصرف‌کنندگان (Subscriber) به موضوعات (Topics) خاصی که به آن‌ها علاقه‌مند هستند، اشتراک می‌گذارند. این سیستم اجازه می‌دهد تا بدون نیاز به وابستگی مستقیم با یکدیگر، اطلاعات را تبادل کنند.

مزایای Pub/Sub
- کاهش وابستگی‌ها: تولیدکنندگان و مصرف‌کنندگان نیازی به شناخت یکدیگر ندارند.
- مقیاس‌پذیری: می‌توان به سادگی مصرف‌کنندگان و تولیدکنندگان جدیدی اضافه کرد.
- توزیع‌پذیری: می‌توان سیستم‌ها را به صورت توزیع‌شده پیاده‌سازی کرد.

مثال ساده با Redis Pub/Sub


در این مثال، از Redis به عنوان سیستم Pub/Sub استفاده خواهیم کرد. ابتدا باید Redis را نصب و راه‌اندازی کنید.

نصب Redis

تو ریپازیتوری ای که لینکشو آخر پست میذارم، سرویس ردیس رو توی docker-compose.yml مشخص کردم و روی داکر اجراش میکنیم.
همچنین داخل فایل .env تنظیمات ردیس رو میتونید مشخص کنید.

docker-compose up -d


پیاده‌سازی در پایتون

برای این کار به کتابخانه redis نیاز داریم. می‌توانید آن را با pip نصب کنید:

pip install redis



در این مثال، یک Publisher و یک Subscriber خواهیم داشت.

Publisher (server.py):

import json

from redis import StrictRedis


server = StrictRedis(host="localhost", port=6399, password="redis_password", db=0)

# redis ping
print(server.ping())

topic = "example_topic"

data = {
"name": "alireza",
"age": 22,
}

server.publish(channel=topic, message=json.dumps(data))


در قدم اول کانکشن با ردیس رو می سازیم.
با متد ping میتونیم چک کنیم وضعیت کانگشنمون اوکی هست یا نه(جنبه آموزشی نوشتمش)
بعد مشخص کردیم که topic ما اسمش چیه.
دیتایی که قراره داخل payload مسیج قرار بدیم رو مشخص کردیم که بصورت دیکشنری هستش و بعدش اومدیم به json تبدیلش کردیم و مسیح رو پابلیش کردیم.

Subscriber (client.py):

import json

from redis import StrictRedis


client = StrictRedis(host="localhost", port=6399, password="redis_password", db=0)

topic = "example_topic"

pubsub = client.pubsub()

pubsub.subscribe(topic)

print("waiting for message...")

while True:
for message in pubsub.listen():
if message["data"] == 1:
continue
match message["type"]:
case topic:
# TODO - change serialization. json is not good
data = json.loads(message["data"])
print("received message", data["name"], data["age"])

در قدم اول یک کانکشن ردیس گرفتیم. بعد تاپیکی که subscribe میکنیمش رو مشخص کردیم(میتونیم چندین تا تاپیک رو سابسکرایب کنیم)
در قدم بعدی داخل یک long running میایم به مسیج های جدیدی که میاد گوش میدیم و یک switch case زدیم و براساس تاپیک ها میتونیم کارهای خاص خودش رو انجام بدیم.

نحوه اجرا

1. در یک ترمینال، client.py را اجرا کنید
2. در یک ترمینال دیگه server.py رو اجرا کنید که با هربار اجرا یک مسیج رو پابلیش میکنه.

سورس کد:
https://github.com/alireza-fa/redis-pub-sub-example

#redis_pub_sub #pub_sub #event_driven #python

@Syntax_fa
🔥6💋4👍31👎1🙏1
بررسی نحوه کارکرد توکن jwt

یک توکن JWT از سه بخش تشکیل شده است:

Header:
در هدر، الگوریتم مورد استفاده برای امضا مشخص می‌شود. این می‌تواند الگوریتم‌های مختلفی باشد که در ادامه توضیح داده خواهد شد.

Payload:
در این بخش، اطلاعات مورد نیاز قرار می‌گیرد. به‌صورت پایه‌ای، user_id کاربری که توکن برای او صادر شده و فیلد exp برای تاریخ انقضای توکن (به صورت timestamp) ضروری است.

Signature:
این بخش برای صحت‌سنجی توکن استفاده می‌شود که در ادامه روش آن توضیح داده خواهد شد.

بنابراین، توکن ما سه بخش دارد. قسمت‌های header و payload به‌صورت یک آبجکت با کلید و مقدار هستند. به‌عنوان مثال، هدر به این صورت است:
{"alg": "HS256"}

و قسمت payload به این صورت:
{"user_id": 1, "exp": 111222558}


برای بازگرداندن یک رشته یکپارچه به کلاینت، این سه بخش را به روش زیر ترکیب می‌کنیم:

1. Base64Url Encoding:
قسمت‌های header و payload را به Base64Url تبدیل می‌کنیم. Base64Url رشته‌ای برمی‌گرداند که شامل کاراکترهای ASCII اصلی است.

2. ترکیب بخش‌ها:

پس از تبدیل به Base64Url، بخش‌های header و payload را با . به یکدیگر متصل می‌کنیم:

   header.payload

3. ساخت Signature:
بر اساس header.payload و با استفاده از الگوریتم مشخص‌شده و یک کلید محرمانه در سرور، امضا ساخته می‌شود. سپس امضا را با . به رشته اضافه می‌کنیم:
   header.payload.signature


استفاده از JWT:

کلاینت توکن را در هر درخواست احراز هویت ارسال می‌کند (معمولاً در هدر درخواست).
توکن با «نقطه» به سه بخش جدا می‌شود:

1. دیکود کردن Header:

هدر را از Base64Url دیکود کرده و الگوریتم آن را بررسی می‌کنیم.

2. اعتبارسنجی Signature:

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

3. بررسی Payload:

پیلود را دیکود کرده و فیلد exp را با زمان فعلی مقایسه می‌کنیم. اگر زمان انقضا گذشته باشد، توکن نامعتبر است. در غیر این صورت توکن معتبر است و می‌توان از user_id برای دسترسی به اطلاعات کاربر استفاده کنیم.

تفاوت بین Access Token و Refresh Token:

هر دو ساختار مشابهی دارند. در برخی پروژه‌ها، در payload فیلدی به نام type اضافه می‌کنیم که مشخص می‌کند توکن access است یا refresh. از access token برای احراز هویت کاربر و از refresh token برای دریافت یک access token جدید استفاده می‌شود.

یکی از دلایل استفاده از دو نوع توکن که استفاده کردم:
- Access Token:

ممکن است شامل اطلاعات بیشتری مانند نقش‌ها و پروفایل کاربر باشد. اگر نقش کاربر تغییر کند (مثلاً دیگر ادمین نباشد)، می‌توان access tokens او را نامعتبر کرد و با استفاده از refresh token یک access token جدید صادر کرد که نقش ادمین ندارد.

- Refresh Token:

معمولاً فقط شامل user_id و exp است و برای امنیت بیشتر می‌توان ip_address و device_name را نیز اضافه کرد. این اطلاعات برای ایجاد یک access token جدید استفاده می‌شود.

#jwt

@Syntax_fa
👍20👌3💋3
دات نت کارها: وردپرس کارهای دنیای برنامه‌نویسی

وقتی صحبت از دنیای برنامه‌نویسی می‌شود، هر زبان و فریمورکی جایگاه خاص خودش را دارد. اما دات نت کارها در این میان جایگاهی دارند که شاید خیلی‌ها به آن توجه نکرده باشند: وردپرس کارهای دنیای برنامه‌نویسی!

ورود به دنیای دات نت

ورود به دنیای دات نت مثل ورود به یک فروشگاه بزرگ است که همه چیز در آن وجود دارد. از ابزارهای مدیریتی گرفته تا کتابخانه‌های مختلف و فریمورک‌های پیشرفته. دات نت کارها با افتخار از ابزارهای مایکروسافت استفاده می‌کنند و همیشه آماده‌اند تا با آپدیت‌های جدید ویژوال استودیو به‌روز شوند. درست مثل وردپرس کارها که همیشه منتظر آپدیت افزونه‌ها و قالب‌های جدید هستند!

سفارشی‌سازی آسان

دات نت کارها به‌راحتی می‌توانند پروژه‌های خود را سفارشی‌سازی کنند. ابزارهای ساده و در عین حال قدرتمند، به آن‌ها اجازه می‌دهد تا با چند کلیک ساده، ویژگی‌های جدیدی به پروژه‌هایشان اضافه کنند. وردپرس کارها هم با چند کلیک ساده می‌توانند سایت‌های خود را به یک شاهکار تبدیل کنند!

جامعه‌ی خاص

جامعه‌ی دات نت کارها مثل یک کافه‌ی شلوغ است که همه در حال بحث درباره‌ی چیزهای شت هستند. دات نت کارها همیشه در حال بحث درباره‌ی جدیدترین آپدیت‌های مایکروسافت هستند، درست مثل وردپرس کارها که درباره‌ی بهترین افزونه‌های سئو صحبت می‌کنند.
(داداش آپدیت جدیدو دیدی عجب خفنه کلی فیچر اضافه کرده!)

پیمان وفاداری

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

#fun

@Syntax_fa
🤣28👍4👎3👌2💋2
⭐️ فعالسازی امکانات ویژه فیگما به صورت رایگان

فیگما یا Figma یکی از خفن‌ترین ابزارها برای طراحی رابط کاربری است که محبوبیت زیادی دارد. در فیگما می‌توانید حتی کاور پست‌های خودتون رو به ساده‌ترین روش ممکن طراحی کنید و یا انیمیشن بسازید!

فیگما دارای پلن‌های مختلف کاربری است؛ متاسفانه فعالسازی آن به دلیل تحریم و مشکلات اقتصادی چالش برانگیز است. اما خبر خوب این است که می‌توانید به صورت رایگان نیز امکانات پیشرفته هر چند با محدودیت فعال کنید!

چجوری اکانتمون رو ارتقا بدیم؟
برای اینکار کافی است که از طریق لینک درج شده در انتهای پست، به فیگما درخواست فعالسازی اکانت education ارسال کنید.


⚠️هشدار

توجه داشته باشید که با فعالسازی اکانت به این روش، شما حق استفاده از فیگما برای بیزنس‌های خودتون رو نخواهید داشت! لذا در صورت استفاده بیزنسی احتمال مسدود شدن اکانتتان وجود دارد و به دلیل تحریم هم امکان درخواست فعالسازی مجدد اکانت وجود ندارد.
‌‌
چه اطلاعاتی نیاز هست؟
شما باید به عنوان دانش‌آموز، دانشجو یا مدرس درخواست را ارسال کنید. اما به دلیل تحریم ایران ممکن است اکانت شما به طور کل مسدود شود(تحریم دانشگاه‌های ایرانی). بنابراین در یودمی یا کورسرا دوره ui/ux یا آموزش فیگما که رایگان باشد را ببینید و بعد در صفحه درخواست گواهی پایان دوره رو ارسال کنید.

📎 Link: https://www.figma.com/education/


#Figma

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤‍🔥2
حق:
من این مشکل رو زیاد دیدم؛ بیش از حداقل 20% پروژه‌های خدماتی که دوستان روش کار می‌کنن. می‌بینم که Postgresql به معنای واقعی کلمه OverKill هست. مخصوصا وقتی Sqlite کار رو در میاره.

شاید به روی خودتون نیارید ولی خیلی از شما هم ازین پروژه‌ها دیدید دیگه.

خواستم هم اهمیت SQLite رو یادآوری کنم
هم بگم پروژه‌هایی مثل rqlite هم وجود داره‌ها

مثال:
کاری به درست و غلط بودن دیزاین و ... ندارم و بحثم فقط همین مورد Sqlite هست.
یک کدی رو دیدم؛ طرف یک سیستم verification جدا براش طراحی کرده بود و تمام پروژه‌هاشون ازین سرویس استفاده می‌کرد. فکر کنم این سرویس یا .net بود یا golang بعد بحث اصلی سر این بود که Postgres بذارند یا MsSql من درجا پیشنهاد SQlite رو دادم.
این دیتابیس خیلی اهمیت زیادی نداره؛ هر کد قراره نهایتا ۱۰ دقیقه valid باشه. در صورت پاک شدن هم طرف یکبار دیگه درخواست میده (که من تاحالا پاک شدن خود به خود توش ندیدم).

چرا می‌خواید شر درست کنید برای تیم devops, server, database, ...
خیلی ها مشکلشون این هست که اطلاعات ندارند (هیچ‌وقت هم جرات تجربه کردن نداشتند)؛ خود SQLite روی SSD طبق بنچمارک‌ها.
بیش از 500 هزار insert در ثانیه رو پشتیبانی می‌کنه و برای read هم این مورد به بیش از 1 میلیون میرسه و این مورد بدون config های پرفورمنسی هست که توی داکیومنت خودش ارائه شده.
روی NVMe هم چندسال قبل تست کردیم؛ اعداد بهتر هم میشه.

اضافه کنم :
اینم rqlite اگر حتی خواستید SQlite رو بصورت distributed داشته باشید (قبلا توی اون کی کانال راجبش صحبت کردم با   K8s )

Source
👍11❤‍🔥21👎1🔥1🥰1👌1💋1
چند نکته درباره وب سوکت و توضیح ساده برای درک بهتر

فرآیند ارتباط وب‌سوکت

1. شروع با HTTP/HTTPS:
- کلاینت ابتدا یک درخواست HTTP به سرور می‌فرستد. این درخواست شامل هدرهای خاصی است که نشان‌دهنده تمایل به ارتقاء ارتباط به وب‌سوکت است. این هدرها شامل موارد زیر هستند:
- Upgrade: websocket
- Connection: Upgrade

2. ارتقاء به وب‌سوکت:
- سرور درخواست را دریافت کرده و بررسی می‌کند. اگر شرایط درست باشد، با یک پاسخ خاص به کلاینت، ارتباط را به وب‌سوکت ارتقاء می‌دهد. این پاسخ شامل وضعیت 101 Switching Protocols است.

3. استفاده از ws:// و wss://:
- پس از ارتقاء، ارتباط به‌صورت دائمی و دوطرفه برقرار می‌شود.
- ws://
نشان‌دهنده استفاده از پروتکل وب‌سوکت بر روی HTTP است.
- wss://
نشان‌دهنده استفاده از پروتکل وب‌سوکت بر روی HTTPS است (که رمزنگاری شده است).

چرا ws:// استفاده می‌شود؟


- ws://localhost:8080
- این URL نشان می‌دهد که ارتباط نهایی به‌صورت وب‌سوکت انجام می‌شود.

نکته:
در HTTP/2، مکانیزم آپگرید به وب‌سوکت از طریق هدرهای HTTP/1.1 استفاده نمی‌شود. HTTP/2 به صورت ذاتی از این روش پشتیبانی نمی‌کند. برای ارتباط وب‌سوکت در HTTP/2، معمولاً از HTTP/1.1 برای ایجاد و ارتقاء ارتباط استفاده می‌شود یا از روش‌های دیگری برای مدیریت ارتباطات بلادرنگ بهره می‌گیرند.

روش‌های دیگه برای مدیریت ارتباطات بلادرنگ:
1. Server-Sent Events (SSE):
- یک ارتباط یک‌طرفه است که سرور می‌تواند به‌طور پیوسته داده‌ها را به کلاینت ارسال کند.
- مناسب برای برنامه‌هایی که نیاز به ارسال داده‌های بلادرنگ از سرور به کلاینت دارند.

2. Long Polling:
- کلاینت یک درخواست HTTP ارسال می‌کند و سرور تا زمانی که داده‌ای برای ارسال وجود ندارد، پاسخ را معلق نگه می‌دارد(یک تایم اوت مشخص هم دارد مثلا 20 ثانیه)
- پس از ارسال داده، کلاینت بلافاصله یک درخواست جدید ارسال می‌کند.

3. HTTP/2 Streams:
- استفاده از قابلیت چندپخشی و استریم‌های همزمان در HTTP/2 برای ارسال و دریافت داده‌های بلادرنگ.

4. gRPC:
- یک فریم‌ورک RPC بر پایه HTTP/2 که از ارتباطات بلادرنگ و استریمینگ پشتیبانی می‌کند.


چرا نیاز به درخواست HTTP اولیه است؟

وب‌سوکت‌ها به‌عنوان یک پروتکل ارتقاء بر روی HTTP طراحی شده‌اند تا با زیرساخت‌های موجود وب سازگار باشند. این امر به کلاینت‌ها و سرورها اجازه می‌دهد تا از همان پورت‌ها و مکانیزم‌های امنیتی استفاده کنند.

مثال در گولنگ:
package main

import (
"fmt"
"net/http"
"github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
// checking conditions
return true
},
}

func handleConnections(w http.ResponseWriter, r *http.Request) {
// upgrade http request to websocket
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
fmt.Println(err)
return
}
defer ws.Close()

// messages
for {
messageType, msg, err := ws.ReadMessage()
if err != nil {
fmt.Println(err)
break
}
fmt.Printf("Received: %s\n", msg)

err = ws.WriteMessage(messageType, msg)
if err != nil {
fmt.Println(err)
break
}
}
}

func main() {
http.HandleFunc("/", handleConnections)
fmt.Println("Server started on :8080")
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println("Error starting server:", err)
}
}

#websocket

@Syntax_fa
👍7💋6👌21
استخدام شدن برنامه نویسا تو سال 2020:
تسلط به روشن و خاموش کردن سیستم. بقیه چیزا مهم نیست خودمون بهت یاد میدیم 🎉

استخدام شدن برنامه نویسا تو سال 2024:
😥😳

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣27👍3😁2😱2
نحوه احراز هویت با OAuth

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

1. درخواست مجوز: کاربر به اپلیکیشن شما اجازه می‌دهد به حساب کاربری‌اش در سرویس‌دهنده (مثل گوگل) دسترسی پیدا کند.
2. دریافت توکن دسترسی: پس از تأیید مجوز کاربر، اپلیکیشن شما یک توکن دسترسی (Access Token) دریافت می‌کند.
3. دسترسی به منابع: با استفاده از توکن دسترسی، اپلیکیشن شما می‌تواند به منابع کاربر دسترسی پیدا کند.

مراحل لاگین با اکانت گوگل


1. ثبت‌نام اپلیکیشن در کنسول گوگل

ابتدا باید اپلیکیشن خود را در https://console.cloud.google.com/. در اینجا ثبت کنید:

- یک پروژه جدید ایجاد کنید.
- OAuth 2.0 client ID ایجاد کنید.
- URL کال بک (Redirect URI) را مشخص کنید.

پس از این مراحل، یک Client ID و Client Secret دریافت خواهید کرد.

2. درخواست مجوز

هنگامی که کاربر روی دکمه "ورود با گوگل" کلیک می‌کند، شما باید او را به URL زیر هدایت کنید:

https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code&scope=email%20profile


در اینجا:

- YOUR_CLIENT_ID: شناسه کلاینت شما
- YOUR_REDIRECT_URI: URL کال بک شما
- scope: اطلاعاتی که می‌خواهید از کاربر بگیرید (مثل ایمیل و پروفایل)

3. دریافت کد تأیید

پس از اینکه کاربر مجوز را تأیید کرد، گوگل کاربر را به URL کال بک شما باز می‌گرداند و یک پارامتر code به همراه خواهد داشت.

4. تبادل کد برای توکن دسترسی

شما باید یک درخواست POST به URL زیر ارسال کنید تا کد را برای توکن دسترسی مبادله کنید:

POST https://oauth2.googleapis.com/token


بدنه درخواست باید شامل موارد زیر باشد:

{
"code": "CODE_RECEIVED_FROM_GOOGLE",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"redirect_uri": "YOUR_REDIRECT_URI",
"grant_type": "authorization_code"
}


5. دریافت توکن دسترسی


اگر درخواست موفق باشد، شما یک پاسخ JSON دریافت می‌کنید که شامل access_token و اطلاعات دیگر است.

6. احراز هویت و دسترسی به اطلاعات کاربر

با استفاده از `access_token`، می‌توانید اطلاعات کاربر را از API گوگل دریافت کنید. برای مثال:

GET https://www.googleapis.com/oauth2/v2/userinfo
Authorization: Bearer ACCESS_TOKEN


7. وریفای توکن

برای اطمینان از صحت توکن، می‌توانید توکن را به یکی از انتهای API گوگل ارسال کنید تا اطلاعات مربوط به توکن و اعتبار آن را دریافت کنید.

#oauth

@Syntax_fa
👍13🔥3💋3
برنامه‌نویس‌های ادایی: قهرمانان سلفی‌گیر! 🤓

برنامه‌نویس‌های ادایی، آن دسته از افراد در دنیای فناوری هستند که بیشتر از اینکه به کدنویسی بپردازند، به گرفتن سلفی‌های خفن با لپ‌تاپ و قهوه‌شان مشغول‌اند. بیایید نگاهی به دنیای رنگارنگ آن‌ها بندازیم!

سلفی‌های جذاب با لپ‌تاپ

اولین نشانه‌ی برنامه‌نویس ادایی، سلفی‌های بی‌نظیرش است. این افراد به‌طور مداوم در حال گرفتن عکس از خود در کنار لپ‌تاپ و کتاب‌های مهندسی نرم‌افزار هستند. شاید فکر کنید که آن‌ها در حال کدنویسی هستند، اما واقعیت این است که در حال تنظیم نور و زاویه دوربین برای گرفتن عکس بعدی‌شان هستند!

"نگاه کن من دارم کد میزنم"
در واقع، آن‌ها فقط در حال چک کردن فید اینستاگرامشان هستند!

بحث درباره clean architecture همه جا!
همیشه همراه خود کتاب های برنامه نویسی خفن را حمل میکنند حتی در کافه و مهمانی ها!
تا بحث درباره برنامه نویسی شود، کتاب های که درباره clean architecture و ddd و ... خوانده اند صحبت میکنند اما هنوز نمی‌توانند یک پروژه todo را با ساختار مناسب پیاده سازی کنند!

میز کار به سبک هنری 😀

میز کار این برنامه‌نویس‌ها مثل یک گالری هنری است؛ قهوه‌ساز، کتاب‌های مهندسی نرم‌افزار، و چندین ماگ با نوشته‌های خنده‌دار. آن‌ها با افتخار به شما نشان می‌دهند که "این کتاب رو تازه خریدم!" در حالی که هیچ‌وقت حتی یک صفحه از آن را نخوانده‌اند. گویی که داشتن کتاب‌های مهندسی نرم‌افزار به‌عنوان یک اکسسوری مهم است!

پوشش‌های خاص با تی‌شرت‌های برنامه‌نویسی 😀

این افراد معمولاً تی‌شرت‌های با طرح‌های مرتبط با برنامه‌نویسی می‌پوشند، مثل "Code is my cardio" یا "I'm silently correcting your code". گویی لباسشان بهترین بیانیه‌ی حرفه‌ای آن‌هاست!

رویدادهای کافه‌ای ☕️

برنامه‌نویس‌های ادایی معمولاً در کافه‌ها جمع می‌شوند تا نمیدونم واقعا چیکار کنن ☹️

بحث‌های پرشور درباره buzzword ها

وقتی دو برنامه‌نویس ادایی با هم ملاقات می‌کنند، یک بحث پرشور درباره جدیدترین فریم‌ورک‌ها یا زبان‌های برنامه‌نویسی شروع می‌شود. در واقع، این بحث‌ها بیشتر شبیه به مسابقه‌ی خودستایی است تا تبادل دانش واقعی!
اوه از همه بدتر وقتی با یه برنامه نویس ادایی صحبت میکنید کلمات و اصطلاحاتی رو بکار میبره که خداهم تاحالا نشنیده!
بازورد چیه؟ #buzzword

مبادا مثل آدم کد بزنی!

کد های یک برنامه نویس ادایی رو فقط یک برنامه نویس ادایی دیگه میفهمه!
تا جای ممکن سعی میکنن کدی بنویسن که پیچیده و غیرقابل فهم باشه.
چیزی که فکر میکنن:
پشمام چه کدی زدی😱
ولی واقعیت موضوع:
این چه کدشریه دیگه😒

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣25👍5😁1💋1
یک مقاله درباره تفاوت بین stateless و stateful بودن

https://medium.com/@saeidlaalkaei/stateful-and-stateless-sets-across-different-technologies-5ad1d06caf98

اهمیت Stateless در برنامه‌های Cloud Native


یکی از استانداردهای اصلی در طراحی برنامه‌های کلاد نیتیو Stateless بودن آن‌ها است. دلایل این موضوع به شرح زیر است:

1. مقیاس‌پذیری آسان:
برنامه‌های Stateless به راحتی می‌توانند در محیط‌های ابری مقیاس‌پذیر شوند. به دلیل عدم وابستگی به وضعیت، می‌توان به سادگی تعداد نمونه‌های برنامه را افزایش یا کاهش داد.
مثلا فرض کنید ما اومدیم یدونه لیمیت بر اساس ip address کاربر درست کردیم که توی یک مپ داخل برناممون ذخیرش کردیم. خب در این شرایط وقتی instance برناممون رو بیشتر کنیم چه اتفاقی برای لیمیتی که نوشتیم میوفته؟ stateless بودن این دغدغه هارو حذف میکنه.

2. مدیریت بهتر منابع: در برنامه‌های Stateless، منابع به راحتی می‌توانند بین نمونه‌های مختلف توزیع شوند، زیرا هر نمونه هیچ‌گونه وابستگی به دیگر نمونه‌ها ندارد.

3. قابلیت تحمل خطا: اگر یک نمونه از برنامه به هر دلیلی دچار مشکل شود، می‌توان به سرعت آن را جایگزین کرد بدون اینکه تأثیری بر روی وضعیت کاربران دیگر داشته باشد.

4. استقرار سریع‌تر: در محیط‌های ابری، زمان استقرار بسیار مهم است. برنامه‌های Stateless به دلیل سادگی و عدم نیاز به ذخیره وضعیت، سریع‌تر می‌توانند مستقر شوند.

#stateless #stateful

@Syntax_fa
👍6🥰2🔥1👌1
Syntax | سینتکس
ساخت یک Dockerfile مناسب برای پروژه های پایتونی: خیلی خوب توضیح داده. https://luis-sena.medium.com/creating-the-perfect-python-dockerfile-51bdec41f1c8 #python #Dockerfile @Syntax_fa
و اما Docekrfile که من از توضیحات ایشون رسیدم بهش:
FROM python:3.11-slim as builder

# avoid stuck build due to user prompt
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
apt-get install -y --no-install-recommends ...

# create and activate virtual environment
RUN python -m venv /home/myuser/venv
ENV PATH="/home/myuser/venv/bin:$PATH"

# install requirements
COPY ./requirements .
RUN pip3 install --upgrade --no-cache-dir pip
RUN pip3 install --no-cache-dir wheel
RUN pip3 install --no-cache-dir -r production.txt

FROM python:3.11-slim

RUN useradd --create-home myuser
COPY --from=builder /home/myuser/venv /home/myuser/venv

USER myuser
RUN mkdir /home/myuser/code
WORKDIR /home/myuser/code
COPY . /home/myuser/code

EXPOSE $DJANGO_PORT

# make sure all messages always reach console
ENV PYTHONUNBUFFERED=1

# activate virtual environment
ENV VIRTUAL_ENV=/home/myuser/venv
ENV PATH="/home/myuser/venv/bin:$PATH"

# /dev/shm is mapped to shared memory and should be used for gunicorn heartbeat
# this will improve performance and avoid random freezes
# CMD ["gunicorn","-b", "0.0.0.0:8000", "-w", "4", "-k", "gevent", "--worker-tmp-dir", "/dev/shm", "--chdir", "config config.wsgi:application"]


نظر بدید

#python #dockerfile

@Syntax_fa
🔥6👍1🤣1🤨1
ما تو فکر چی هستیم، بقیه تو فکر چی هستن 🙂
تا حالا به این فکر کردی که response time سیستم ت در حد میکروثانیه باشه؟ مثلا به میلی ثانیه و اینا نرسه اصلا؟

احتمالا تو نسل بعدی دیتاسنترها بیشتر میشنویم ازشون
https://x.com/petereliaskraft/status/1830294745563951329?t=LxJ9z3qlt7uREui7hUCAyg&s=35

Shenango: Achieving High CPU Efficiency for Latency-sensitive Datacenter Workloads
https://www.usenix.org/conference/nsdi19/presentation/ousterhout

Source

@Syntax_fa
👍8😱3👀2
Syntax | سینتکس
ما تو فکر چی هستیم، بقیه تو فکر چی هستن 🙂 تا حالا به این فکر کردی که response time سیستم ت در حد میکروثانیه باشه؟ مثلا به میلی ثانیه و اینا نرسه اصلا؟ احتمالا تو نسل بعدی دیتاسنترها بیشتر میشنویم ازشون https://x.com/petereliaskraft/status/183029474556395…
سرور های قدرتمند ایران:
۱. با latency زیر ده ثانیه
۲. پهنای باند باور نکردنیه پنجاه مگابایت
۴. دسترسی به اینترنت داخلی
۵. اینترنت نامحدود با طرح مصرف منصفانه
۶. قیمت ها کاملا اقتصادی
و کلی ویژگی دیگر
🤣21🔥1😁1
This media is not supported in your browser
VIEW IN TELEGRAM
یاد این افتادم😂
معرفیه اولین گوشی هوشمند ایرانی
🤣16😁1
آشنایی با GitHub Codespaces

تو دنیای مدرن توسعه نرم افزار امروزی، سهولت و سرعت تو راه‌اندازی محیط‌های توسعه اهمیت زیادی داره. GitHub Codespaces یکی از ابزارهای نوآورانه‌ای هستش که به برنامه‌نویسا اجازه میده تا بتونن همه جا به راحتی به پروژه هاشون دسترسی داشته باشن، اجراشون کنن و به راحتی تو یه محیط ابری کدهاشون رو تغییر بدن.
همچنین codespaces بطور کامل روی GitHub ادغام شده که همین یکی از مزیت های بزرگشه.

چند تا از ویژگی ها
ش:
۱. از ویرایشگرهای مختلف از جمله Visual Studio Code و فکر کنم Jetbarins پشتیبانی میکنه.
۲. مثل یک محیط توسعه که روی سیستم خودتون نصبه، میتونید سفارش سازی کنید
۳.  به تیم‌ها این امکانو میده که به راحتی با همدیگه همکاری کنن.
۴.از اونجا که codespaces یک محیط ابری در اختیار شما قرار میده، میتونید از هر نقطه بهش دسترسی داشته باشید.
فرض کنید به سیستمون دسترسی ندارید و حالا نیازه یه سری باگ هارو رفع کنید. کافیه وارد محیط codespaces بشید، تغییرات رو بدید بعد کدتون رو تو codespaces ران و تست کنید.

این قابلیت هاشو من خیلی دوست داشتم:

۱. بهتون پلن رایگان میده که برای استفاده شخصی فکر میکنم کافیه
2 بهتون چیزی شبیه به یه سرور مجازی میده که منابع کمی هم نداره تو پلن رایگانش میتونید تا 4 هسته و 16 گیگ رم استفاده کنید.
3. از داکر و یا چیز های مختلف دیگه ای که نیاز دارید هم میتونید استفاده کنید.
4. میتونید پروژتون رو روی یه پورتی اجرا کنید و دسترسی پرایوت یا پابلیک بدید تا از طریق اینترنت بهش دسترسی داشته باشید. برای ران کردن نمونه کارا خوبه.
و ...

هنوز زیاد ازش استفاده نکردم. نحوه اجرا کردنش خیلی سادس ولی اگه خواستید توضیح میدم

#github #codespaces

@Syntax_fa
👍8💋4🔥21
Syntax | سینتکس
آشنایی با GitHub Codespaces تو دنیای مدرن توسعه نرم افزار امروزی، سهولت و سرعت تو راه‌اندازی محیط‌های توسعه اهمیت زیادی داره. GitHub Codespaces یکی از ابزارهای نوآورانه‌ای هستش که به برنامه‌نویسا اجازه میده تا بتونن همه جا به راحتی به پروژه هاشون دسترسی داشته…
نحوه راه اندازی یه GitHub codespaces:

خب خیلی سادس:
۱. رو codespaces کلیک میکنید
۲. بعد روی new codespaces
۳. تو این بخش مشخص میکنید میخواید برای کدوم ریپوزیتوری codespace رو بسازید و ریجن سرورش چی باشه و منابع چقدر داشته باشه. یه نکته رو دقت کنید. بصورت ماهانه تو پلن رایگان فقط پونزده گیگ میتونید فایل و ... رو تو codespace هاتون استفاده کنید. همچنین 120 ساعت در ماه از cpu تو پلن رایگان میتونید استفاده کنید که این رو درست متوجه نشدم. فکر کنم منظورش اکتیو بودن codespace هستش.
۴. بعد اینکه روی create codespace کلیک کردید یکم طول میکشه ساخته شه. بهتره از شکنی چیزی استفاده کنید در غیر اینصورت ممکنه درست اجرا نشه.
۵. بعد اینکه وارد محیط codespace شدید میتونید به راحتی با داکر سرویس هاتونو بالا بیارید و پروژتون رو پشت یه پورتی اجرا کنید. Codespace به شما اجازه میده که یه tpc connection رو باز کنید و بهش از طریق اینترنت دسترسی داشته باشید.
همچنین اگه پروژه پرایوت هستش میتونید بصورت پرایوت دسترسی بدید تا هرکی به پروژه دسترسی دارن بتونن ببینن یا اینکه بصورت public اجازه بدید تا همه بتونن دسترسی داشته باشن.

#github #codespace

@Syntax_fa
7👍6🔥1