Forwarded from Syntax | سینتکس (Daimon)
تو چند دقیقه نحوه کار با Redis Pub/Sub رو تو پایتون یاد بگیر
Pub/Sub
(انتشار/اشتراک) یک الگوی معماری است که به برنامهها اجازه میدهد تا به صورت غیرمستقیم با یکدیگر ارتباط برقرار کنند. در این الگو، تولیدکنندگان اطلاعات (Publisher) پیامها را منتشر میکنند و مصرفکنندگان (Subscriber) به موضوعات (Topics) خاصی که به آنها علاقهمند هستند، اشتراک میگذارند. این سیستم اجازه میدهد تا بدون نیاز به وابستگی مستقیم با یکدیگر، اطلاعات را تبادل کنند.
مزایای Pub/Sub
- کاهش وابستگیها: تولیدکنندگان و مصرفکنندگان نیازی به شناخت یکدیگر ندارند.
- مقیاسپذیری: میتوان به سادگی مصرفکنندگان و تولیدکنندگان جدیدی اضافه کرد.
- توزیعپذیری: میتوان سیستمها را به صورت توزیعشده پیادهسازی کرد.
مثال ساده با Redis Pub/Sub
در این مثال، از Redis به عنوان سیستم Pub/Sub استفاده خواهیم کرد. ابتدا باید Redis را نصب و راهاندازی کنید.
نصب Redis
تو ریپازیتوری ای که لینکشو آخر پست میذارم، سرویس ردیس رو توی docker-compose.yml مشخص کردم و روی داکر اجراش میکنیم.
همچنین داخل فایل .env تنظیمات ردیس رو میتونید مشخص کنید.
پیادهسازی در پایتون
برای این کار به کتابخانه
در این مثال، یک Publisher و یک Subscriber خواهیم داشت.
Publisher (server.py):
در قدم اول کانکشن با ردیس رو می سازیم.
با متد ping میتونیم چک کنیم وضعیت کانگشنمون اوکی هست یا نه(جنبه آموزشی نوشتمش)
بعد مشخص کردیم که topic ما اسمش چیه.
دیتایی که قراره داخل payload مسیج قرار بدیم رو مشخص کردیم که بصورت دیکشنری هستش و بعدش اومدیم به json تبدیلش کردیم و مسیح رو پابلیش کردیم.
Subscriber (client.py):
در قدم اول یک کانکشن ردیس گرفتیم. بعد تاپیکی که subscribe میکنیمش رو مشخص کردیم(میتونیم چندین تا تاپیک رو سابسکرایب کنیم)
در قدم بعدی داخل یک long running میایم به مسیج های جدیدی که میاد گوش میدیم و یک switch case زدیم و براساس تاپیک ها میتونیم کارهای خاص خودش رو انجام بدیم.
نحوه اجرا
1. در یک ترمینال،
2. در یک ترمینال دیگه server.py رو اجرا کنید که با هربار اجرا یک مسیج رو پابلیش میکنه.
سورس کد:
https://github.com/alireza-fa/redis-pub-sub-example
#redis_pub_sub #pub_sub #event_driven #python
@Syntax_fa
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
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
میدونین Headless Cms چیه و چیکار میکنه ؟؟؟
Forwarded from Gopher Academy
درود دوستان اپدیت جدید تلگرام(البته خیلی وقت پیش) که ری اکشن جدیدی به نام استارز فعال شده که با زدن اون میتونید به چنل هایی که دوست دارید استارز هدیه بدین و ازشون حمایت کنید.
استارز هایی که شما اهدا میکنید به موجودی چنل ها اضافه میشه و قابلیت برداشتش برای ادمین ها فراهم میشه
این استارز رو ما اضافه کردیم توی reaction های چنل
⭐
➖➖➖➖➖➖➖➖
👑 @gopher_job
استارز هایی که شما اهدا میکنید به موجودی چنل ها اضافه میشه و قابلیت برداشتش برای ادمین ها فراهم میشه
این استارز رو ما اضافه کردیم توی reaction های چنل
⭐
➖➖➖➖➖➖➖➖
👑 @gopher_job
Forwarded from Laravel News
LCS #5 - Patricio: Mingle JS, PHP WASM, VoxPop https://laravel-news.com/lcs-patricio
Laravel News
LCS #5 - Patricio: Mingle JS, PHP WASM, VoxPop - Laravel News
PatricioOnCode joins us to talk about Mingle JS which allows you to mix React and Vue components in Livewire.
Forwarded from کداکسپلور | CodeExplore (Koorosh)
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
⭐️بهبودهای در حال انجام برای مدیریت بسته APT در توزیع دبیان
مدیر بستهAPT که مخفف "Advanced Package Tool" است، یکی از رایج ترین مدیران بسته در بین توزیع های مبتنی بر دبیان مانند اوبونتو است. از زمان معرفی آن در سال ۱۹۹۸، APT با وصلههای مداوم برای همگام شدن با دنیای در حال تحول توزیعهای لینوکسی، بهتر شده است.
🔹برنامه APT 2.9.3 و Solver3: گامی رو به جلو در مدیریت بستهها
نسخه اخیر APT، یعنی 2.9.3، با معرفی یک حلکننده وابستگی آزمایشی به نام Solver3، پیشرفت قابل توجهی در مدیریت بستهها برای سیستمهای مبتنی بر دبیان ایجاد کرده است. این حلکننده نوآورانه قصد دارد روش حل وابستگیها را متحول کند و بهبودهای بالقوهای در عملکرد و قابلیت اطمینان ارائه دهد.
🔹الگورینم Solver3 یک الگوریتم حل وابستگی برای APT است که با یک مجموعه خالی از بستهها شروع میشود، به تدریج هر بسته نصبشده به صورت دستی را اضافه میکند و سپس به طور خودکار هر بسته مفقود شده را برای حل وابستگیها نصب میکند.
🔹در حال حاضر، انتشار آزمایشی به عنوان مشارکت اختیاری برای نسخه بعدی دبیان ۱۳ با نام رمز "Trixie" برنامهریزی شده است که گفته میشود در حدود فوریه ۲۰۲۵ عرضه میشود.
اگر همه چیز طبق برنامه با نسخه بتا پیش برود، نسخه بعدی دبیان ۱۴ با نام رمز "Forky" نامزد اصلی برای پیش فرض شدن Solver3 است.
نویسنده: حسین سیلانی
منبع : کانال لینوکسی: لینوکس تی ان تی
linuxtnt
http://seilany.ir
——————————————————
⭐️حمایت از کانال
https://zarinp.al/learninghive.ir
https://daramet.com/hossein_seilani
مدیر بستهAPT که مخفف "Advanced Package Tool" است، یکی از رایج ترین مدیران بسته در بین توزیع های مبتنی بر دبیان مانند اوبونتو است. از زمان معرفی آن در سال ۱۹۹۸، APT با وصلههای مداوم برای همگام شدن با دنیای در حال تحول توزیعهای لینوکسی، بهتر شده است.
🔹برنامه APT 2.9.3 و Solver3: گامی رو به جلو در مدیریت بستهها
نسخه اخیر APT، یعنی 2.9.3، با معرفی یک حلکننده وابستگی آزمایشی به نام Solver3، پیشرفت قابل توجهی در مدیریت بستهها برای سیستمهای مبتنی بر دبیان ایجاد کرده است. این حلکننده نوآورانه قصد دارد روش حل وابستگیها را متحول کند و بهبودهای بالقوهای در عملکرد و قابلیت اطمینان ارائه دهد.
🔹الگورینم Solver3 یک الگوریتم حل وابستگی برای APT است که با یک مجموعه خالی از بستهها شروع میشود، به تدریج هر بسته نصبشده به صورت دستی را اضافه میکند و سپس به طور خودکار هر بسته مفقود شده را برای حل وابستگیها نصب میکند.
🔹در حال حاضر، انتشار آزمایشی به عنوان مشارکت اختیاری برای نسخه بعدی دبیان ۱۳ با نام رمز "Trixie" برنامهریزی شده است که گفته میشود در حدود فوریه ۲۰۲۵ عرضه میشود.
اگر همه چیز طبق برنامه با نسخه بتا پیش برود، نسخه بعدی دبیان ۱۴ با نام رمز "Forky" نامزد اصلی برای پیش فرض شدن Solver3 است.
نویسنده: حسین سیلانی
منبع : کانال لینوکسی: لینوکس تی ان تی
linuxtnt
http://seilany.ir
——————————————————
⭐️حمایت از کانال
https://zarinp.al/learninghive.ir
https://daramet.com/hossein_seilani
seilany.ir
حسین سیلانی - وب سایت شخصی
این وب سایت شخصی حسین سیلانی است.فعال در زمینه لینوکس و متن باز.بسیاری از آموزشهای شامل:کتابها،فیلم ها،پست های آموزشی، همچنین توزیع های لینوکسی ایجاد شده را در این وب سایت قرار داده ام، تا دسترسی سریع به همه موارد را داشته باشید
Forwarded from Spark | اسپارک
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
⭐️ اولین دوره سمینارهای اسپارک با حمایت مرکز کارآفرینی دانشگاه صنعتی شریف
🔹 همراه با حضور ١٢ شرکت مطرح تکنولوژی و برگزاری در تاریخ ٨ و ٩ شهریور به صورت مجازی
🔹 فرصت استثناییِ بهرهمندی از تجارب مهندسین شرکتهای دیوار 🔖، بازار🔖، ترب 🔖، یکتانت🔖، همروش🔖، تپسل🔖، جاباما 🔖، تبدیل 🔖، رمزینکس🔖، گپیفای🔖، زرینپال🔖و اسمارتک🔖
🔹امکان حضور در ١٢ ارائه و دو میزگرد همراه با گواهی رسمی حضور از طرف مرکز کارآفرینی شریف، ارسال رزومه برای تمامی حامیان و فرصت استخدام در شرکتها تنها با پرداخت ١٠٠ هزار تومان .هدف اصلی این سمینار آشنا کردن دانشجوها با فاز صنعتی مشاغل کامپیوتری و چالشهای اون هست
🔹 فرصت رو از دست نده و همین حالا ثبتنام کن:
🔗 ce-spark.com
👤 در صورت وجود هرگونه سوال، با اکانت پشتیبانی به آدرس @CE_Spark_Support در ارتباط باشید.
⚡️ اسپارک؛ جرقهی ارتباط با صنعت
🔗 LinkedIn ◽️ 🌐 Instagram
🔗 @ce_spark◽️ ✏️ Register Now
🔹 همراه با حضور ١٢ شرکت مطرح تکنولوژی و برگزاری در تاریخ ٨ و ٩ شهریور به صورت مجازی
🔹 فرصت استثناییِ بهرهمندی از تجارب مهندسین شرکتهای دیوار 🔖، بازار🔖، ترب 🔖، یکتانت🔖، همروش🔖، تپسل🔖، جاباما 🔖، تبدیل 🔖، رمزینکس🔖، گپیفای🔖، زرینپال🔖و اسمارتک🔖
🔹امکان حضور در ١٢ ارائه و دو میزگرد همراه با گواهی رسمی حضور از طرف مرکز کارآفرینی شریف، ارسال رزومه برای تمامی حامیان و فرصت استخدام در شرکتها تنها با پرداخت ١٠٠ هزار تومان .هدف اصلی این سمینار آشنا کردن دانشجوها با فاز صنعتی مشاغل کامپیوتری و چالشهای اون هست
🔹 فرصت رو از دست نده و همین حالا ثبتنام کن:
🔗 ce-spark.com
👤 در صورت وجود هرگونه سوال، با اکانت پشتیبانی به آدرس @CE_Spark_Support در ارتباط باشید.
⚡️ اسپارک؛ جرقهی ارتباط با صنعت
🔗 LinkedIn ◽️ 🌐 Instagram
🔗 @ce_spark◽️ ✏️ Register Now
Analyzing E2E Bot
Twitter Space
x.com/i/spaces/1OdKrXdDgweJX
اسپیس توییتر با میزبانی یاشو و صحبتهای یاشا (پسر)، محمد جرجندی، صفا صفری و سایر دوستان در رابطه با ربات جدید ناشناس:
#note #news
@amiria703_channel
اسپیس توییتر با میزبانی یاشو و صحبتهای یاشا (پسر)، محمد جرجندی، صفا صفری و سایر دوستان در رابطه با ربات جدید ناشناس:
#note #news
@amiria703_channel
Forwarded from کداکسپلور | CodeExplore (تبلیغات 📢)
هرماه، تو این کانال به صورت اشتراکی، اکانت chat gpt تهیه میکنم و با دوستایی که مایل باشن، به صورت اشتراکی با هم هزینه اون اکانت رو پرداخت میکنیم
این یه فرصت خوب، برای کاهش هزینه هامون و تهیه اکانت chat gpt plus هست
از اونجایی که شرکت open ai محدودیتی تو ورود به اکانت chat gpt نگذاشته، این یه راه خیلی خوب برای کاهش هزینه هامونه😍
اگه دوست دارید تو این کامیونیتی باشید و با هزینه خیلی کم، اکانت gpt plus داشته باشید، تو اینجا منتظرتونیم👇
https://news.1rj.ru/str/+T4cO7OlORGc1Zjc0
این یه فرصت خوب، برای کاهش هزینه هامون و تهیه اکانت chat gpt plus هست
از اونجایی که شرکت open ai محدودیتی تو ورود به اکانت chat gpt نگذاشته، این یه راه خیلی خوب برای کاهش هزینه هامونه😍
اگه دوست دارید تو این کامیونیتی باشید و با هزینه خیلی کم، اکانت gpt plus داشته باشید، تو اینجا منتظرتونیم👇
https://news.1rj.ru/str/+T4cO7OlORGc1Zjc0
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
〰💎 آپلود فایل توی باکت S3 در node.js 💎〰
امروز میخوام در مورد یکی از موضوعات پرکاربرد و جذاب در دنیای Node.js صحبت کنم: آپلود فایل با استفاده از باکت S3! 🎉
📦 چی هست این S3 و چرا باید ازش استفاده کنیم؟
باید بدونید S3 (Simple Storage Service) یکی از سرویسهای معروف و محبوب آمازون وب سرویس (AWS) هست که به شما اجازه میده فایلهاتون رو روی فضای ابری ذخیره کنید. 🤓 این سرویس به خاطر قابلیتهای زیادی مثل مقیاسپذیری بالا، امنیت و سرعت زیادش خیلی طرفدار داره.
فرض کن یه پروژه داری که توش کلی فایل (مثل عکس، ویدیو یا حتی فایلهای بزرگ) باید ذخیره بشه. به جای اینکه این فایلها رو روی سرور خودت نگه داری و مدام نگران فضای ذخیرهسازی باشی، میتونی از S3 استفاده کنی تا همه چیز روی فضای ابری مدیریت بشه. 🚀
🎯 حالا چطور میتونیم با Node.js فایل آپلود کنیم؟
بریم سراغ اصل مطلب! 😊 برای آپلود فایل در S3 با Node.js چند تا مرحله باید انجام بدیم:
📥 نصب پکیجهای مورد نیاز:
اول از همه باید پکیجهای aws-sdk و multer رو نصب کنیم. aws-sdk کتابخانهای هست که AWS رو به Node.js متصل میکنه و multer هم برای مدیریت فایلهای آپلودی استفاده میشه.
⚙ کانفیگ AWS:
حالا باید کلاینت AWS رو کانفیگ کنیم. برای این کار نیاز به accessKeyId و secretAccessKey دارید که باید از کنسول AWS بگیرید.
🔧 ساختن تابع آپلود:
حالا بیایم یه تابع ساده برای آپلود فایل بسازیم. این تابع فایل رو از کلاینت میگیره و به S3 آپلود میکنه:
🧾 مدیریت فایلهای آپلودی:
از multer برای گرفتن فایلها از فرم استفاده میکنیم. به این شکل که فایلها به عنوان buffer به تابع uploadFile پاس داده میشن:
توی این کد، وقتی کاربر فایلی رو آپلود میکنه، ما از طریق multer اون فایل رو میگیریم و با استفاده از aws-sdk اونو به S3 ارسال میکنیم.
💡 نکات اضافی و پیشنهادها
🛡 ایمنسازی: حواستون باشه که accessKeyId و secretAccessKey رو توی کد قرار ندید. به جای اونها از متغیرهای محیطی (environment variables) استفاده کنید.
📟 استفاده از presigned URLs: اگه میخواید کاربر مستقیماً از کلاینت خودش فایل رو آپلود کنه، میتونید از presigned URLs استفاده کنید که امنیت و عملکرد بهتری داره.
🔬 مانیتورینگ و مدیریت فایلها: با استفاده از امکاناتی مثل CloudWatch یا S3 Events میتونید عملیاتهای مختلف روی فایلها رو مانیتور کنید.
امیدوارم این آموزش به دردتون بخوره و بتونید به راحتی فایلهاتون رو با Node.js توی S3 آپلود کنید.
امید وارم براتون مفید بوده باشه :) ❤️
#node.js #s3 #aws #clound_storage
@ninja_learn_ir
امروز میخوام در مورد یکی از موضوعات پرکاربرد و جذاب در دنیای Node.js صحبت کنم: آپلود فایل با استفاده از باکت S3! 🎉
📦 چی هست این S3 و چرا باید ازش استفاده کنیم؟
باید بدونید S3 (Simple Storage Service) یکی از سرویسهای معروف و محبوب آمازون وب سرویس (AWS) هست که به شما اجازه میده فایلهاتون رو روی فضای ابری ذخیره کنید. 🤓 این سرویس به خاطر قابلیتهای زیادی مثل مقیاسپذیری بالا، امنیت و سرعت زیادش خیلی طرفدار داره.
فرض کن یه پروژه داری که توش کلی فایل (مثل عکس، ویدیو یا حتی فایلهای بزرگ) باید ذخیره بشه. به جای اینکه این فایلها رو روی سرور خودت نگه داری و مدام نگران فضای ذخیرهسازی باشی، میتونی از S3 استفاده کنی تا همه چیز روی فضای ابری مدیریت بشه. 🚀
🎯 حالا چطور میتونیم با Node.js فایل آپلود کنیم؟
بریم سراغ اصل مطلب! 😊 برای آپلود فایل در S3 با Node.js چند تا مرحله باید انجام بدیم:
📥 نصب پکیجهای مورد نیاز:
اول از همه باید پکیجهای aws-sdk و multer رو نصب کنیم. aws-sdk کتابخانهای هست که AWS رو به Node.js متصل میکنه و multer هم برای مدیریت فایلهای آپلودی استفاده میشه.
npm install aws-sdk multer
⚙ کانفیگ AWS:
حالا باید کلاینت AWS رو کانفیگ کنیم. برای این کار نیاز به accessKeyId و secretAccessKey دارید که باید از کنسول AWS بگیرید.
const AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: 'YOUR_ACCESS_KEY_ID',
secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
region: 'YOUR_REGION'
});
const s3 = new AWS.S3();🔧 ساختن تابع آپلود:
حالا بیایم یه تابع ساده برای آپلود فایل بسازیم. این تابع فایل رو از کلاینت میگیره و به S3 آپلود میکنه:
const uploadFile = (file) => {
const params = {
Bucket: 'YOUR_BUCKET_NAME',
Key: file.originalname,
Body: file.buffer
};
return s3.upload(params).promise();
};🧾 مدیریت فایلهای آپلودی:
از multer برای گرفتن فایلها از فرم استفاده میکنیم. به این شکل که فایلها به عنوان buffer به تابع uploadFile پاس داده میشن:
const multer = require('multer');
const upload = multer();
app.post('/upload', upload.single('file'), async (req, res) => {
try {
const result = await uploadFile(req.file);
res.send(result);
} catch (error) {
res.status(500).send(error);
}
});توی این کد، وقتی کاربر فایلی رو آپلود میکنه، ما از طریق multer اون فایل رو میگیریم و با استفاده از aws-sdk اونو به S3 ارسال میکنیم.
💡 نکات اضافی و پیشنهادها
🛡 ایمنسازی: حواستون باشه که accessKeyId و secretAccessKey رو توی کد قرار ندید. به جای اونها از متغیرهای محیطی (environment variables) استفاده کنید.
📟 استفاده از presigned URLs: اگه میخواید کاربر مستقیماً از کلاینت خودش فایل رو آپلود کنه، میتونید از presigned URLs استفاده کنید که امنیت و عملکرد بهتری داره.
🔬 مانیتورینگ و مدیریت فایلها: با استفاده از امکاناتی مثل CloudWatch یا S3 Events میتونید عملیاتهای مختلف روی فایلها رو مانیتور کنید.
امیدوارم این آموزش به دردتون بخوره و بتونید به راحتی فایلهاتون رو با Node.js توی S3 آپلود کنید.
#node.js #s3 #aws #clound_storage
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
یک پروژه ربات تلگرام دارم که دیتای زیادی ذخیره نمیکنه اما مدام در حال اپدیت دیتا هستش، برای همین ترجیح میدم از ردیس استفاده کنم برای ذخیره داده هام
یک کد سمپل با gpt زدم جنریت بشه با ترکیب pydantic و redis ، چقدر ناز میشن این دوتا کنار هم، رسما انگار دیتابیس داری و اونقدر key, value بودن ردیس اذیتت نمیکنه و به صورت ساختار مند میتونی ذخیره کنی
✅ @SEYED_BAX
یک کد سمپل با gpt زدم جنریت بشه با ترکیب pydantic و redis ، چقدر ناز میشن این دوتا کنار هم، رسما انگار دیتابیس داری و اونقدر key, value بودن ردیس اذیتت نمیکنه و به صورت ساختار مند میتونی ذخیره کنی
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from کداکسپلور | CodeExplore (ᎷᎪᎻᎠᏆ)
▪️وقتی صحبت از امنیت سیستم عاملها میشه، همه دنبال اون سیستمی هستیم که بتونه جلوی هر گونه تهدید سایبری رو بگیره.
▪️حالا اگه بهت بگم که یه سیستم عامل هست که از بقیه خیلی جلوتره و حتی توسط افراد حرفهای و امنیتی توصیه میشه، چقدر کنجکاو میشی؟ اون سیستم عامل، Qubes OS نام داره.
▪️سیستم عامل Qubes OS بر پایه هسته لینوکس ساخته شده، اما خودش به عنوان یک توزیع مستقل در نظر گرفته میشود و مستقیماً از توزیع خاصی مشتق نشده و طوری طراحی شده که حتی اگه یه بخشش تحت حمله قرار بگیره، بقیه سیستم و اطلاعاتت امن بمونه. این کار رو با استفاده از تکنولوژی مجازیسازی انجام میده.
▪️یعنی هر بخش یا اپلیکیشن توی یه محیط جداگانه (VM) اجرا میشه. اینطوری، هیچ وقت نمیذاره یه مشکل کوچیک به یه فاجعه بزرگ تبدیل بشه. اگه به امنیتت اهمیت میدی، Qubes OS میتونه بهترین انتخابت باشه.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Code Module | کد ماژول (𔓙)
اگه برای تمرین و کدنویسی دنبال ui خاصی میگردید، این طرح فیگما رو به هیچ وجه از دست ندید 💀
🔵 Link
#figma
@CodeModule
#figma
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from ⚝
Forwarded from Syntax | سینتکس (Daimon)
بررسی نحوه کارکرد توکن jwt
یک توکن JWT از سه بخش تشکیل شده است:
Header:
در هدر، الگوریتم مورد استفاده برای امضا مشخص میشود. این میتواند الگوریتمهای مختلفی باشد که در ادامه توضیح داده خواهد شد.
Payload:
در این بخش، اطلاعات مورد نیاز قرار میگیرد. بهصورت پایهای،
Signature:
این بخش برای صحتسنجی توکن استفاده میشود که در ادامه روش آن توضیح داده خواهد شد.
بنابراین، توکن ما سه بخش دارد. قسمتهای header و payload بهصورت یک آبجکت با کلید و مقدار هستند. بهعنوان مثال، هدر به این صورت است:
و قسمت payload به این صورت:
برای بازگرداندن یک رشته یکپارچه به کلاینت، این سه بخش را به روش زیر ترکیب میکنیم:
1. Base64Url Encoding:
قسمتهای header و payload را به Base64Url تبدیل میکنیم. Base64Url رشتهای برمیگرداند که شامل کاراکترهای ASCII اصلی است.
2. ترکیب بخشها:
پس از تبدیل به Base64Url، بخشهای header و payload را با
3. ساخت Signature:
بر اساس header.payload و با استفاده از الگوریتم مشخصشده و یک کلید محرمانه در سرور، امضا ساخته میشود. سپس امضا را با . به رشته اضافه میکنیم:
استفاده از 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
یک توکن 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
👍1
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 نمایش مدت مطالعه متن با جاوا اسکریپت
HTML:
JavaScript:
#javanoscript
@TheRaymondDev
HTML:
<p id="time"></p>
JavaScript:
// Get the article text
const articleText = document.getElementById('article').innerText;
const time = document.getElementById('time');
// Split the text into an array of words
const wordsArray = articleText.split(' ');
// Count the number of words in the array
const wordCount = wordsArray.length;
// Calculate the estimated reading time
const wordsPerMinute = 200;
const readingTime = Math.ceil(wordCount / wordsPerMinute);
// Display the estimated reading time
time.innerHTML = 'This will take ' + readingTime + ' minute(s) to read';
#javanoscript
@TheRaymondDev
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
ایا با وجود داکر و یا لیست کردن requirements ها باز هم میشه گفت برنامه رو سیستم من ران شده و مشکلی نیست، اما رو سرور ران نمیشه؟ بله ممکنه
توضیحات کامل توی ویس
✅ @SEYED_BAX
توضیحات کامل توی ویس
Please open Telegram to view this post
VIEW IN TELEGRAM