Dev Perfects – Telegram
Dev Perfects
41 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
Analyzing E2E Bot
Twitter Space
x.com/i/spaces/1OdKrXdDgweJX

اسپیس توییتر با میزبانی یاشو و صحبت‌های یاشا (پسر)، محمد جرجندی، صفا صفری و سایر دوستان در رابطه با ربات جدید ناشناس:

#note #news
@amiria703_channel
Forwarded from کداکسپلور | CodeExplore (تبلیغات 📢)
هرماه، تو این کانال به صورت اشتراکی، اکانت chat gpt تهیه میکنم و با دوستایی که مایل باشن، به صورت اشتراکی با هم هزینه اون اکانت رو پرداخت می‌کنیم


این یه فرصت خوب، برای کاهش هزینه هامون و تهیه اکانت chat gpt plus هست


از اونجایی که شرکت open ai محدودیتی تو ورود به اکانت chat gpt نگذاشته، این یه راه خیلی خوب برای کاهش هزینه هامونه😍

اگه دوست دارید تو این کامیونیتی باشید و با هزینه خیلی کم، اکانت gpt plus داشته باشید،‌ تو اینجا منتظرتونیم👇

https://news.1rj.ru/str/+T4cO7OlORGc1Zjc0
Forwarded from AndroPX
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 هم برای مدیریت فایل‌های آپلودی استفاده می‌شه.

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

@ninja_learn_ir
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (SeYeD.Dev)
یک پروژه ربات تلگرام دارم که دیتای زیادی ذخیره نمیکنه اما مدام در حال اپدیت دیتا هستش، برای همین ترجیح میدم از ردیس استفاده کنم برای ذخیره داده هام

یک کد سمپل با gpt زدم جنریت بشه با ترکیب pydantic و redis ، چقدر ناز میشن این دوتا کنار هم، رسما انگار دیتابیس داری و اونقدر key, value بودن ردیس اذیتت نمیکنه و به صورت ساختار مند میتونی ذخیره کنی

@SEYED_BAX
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from کداکسپلور | CodeExplore (ᎷᎪᎻᎠᏆ)
🛡️ میدونستی امن ترین سیستم عامل دنیا چیه...؟!

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

▪️حالا اگه بهت بگم که یه سیستم عامل هست که از بقیه خیلی جلوتره و حتی توسط افراد حرفه‌ای و امنیتی توصیه میشه، چقدر کنجکاو میشی؟ اون سیستم عامل، Qubes OS نام داره.

▪️سیستم عامل Qubes OS بر پایه هسته لینوکس ساخته شده، اما خودش به عنوان یک توزیع مستقل در نظر گرفته می‌شود و مستقیماً از توزیع خاصی مشتق نشده و طوری طراحی شده که حتی اگه یه بخشش تحت حمله قرار بگیره، بقیه سیستم و اطلاعاتت امن بمونه. این کار رو با استفاده از تکنولوژی مجازی‌سازی انجام میده.

▪️یعنی هر بخش یا اپلیکیشن توی یه محیط جداگانه (VM) اجرا میشه. اینطوری، هیچ وقت نمی‌ذاره یه مشکل کوچیک به یه فاجعه بزرگ تبدیل بشه. اگه به امنیتت اهمیت میدی، Qubes OS می‌تونه بهترین انتخابت باشه.

☕️ @CodeExplore
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Code Module | کد ماژول (𔓙)
اگه برای تمرین و کدنویسی دنبال ui خاصی میگردید، این طرح فیگما رو به هیچ وجه از دست ندید 💀

🔵 Link

#figma
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from 
t.me/Lethike/2

گروه کوهنوردی در محوطهٔ تهران و کرج:

#موقت #معرفی
Forwarded from Syntax | سینتکس (Daimon)
بررسی نحوه کارکرد توکن 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
👍1
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 نمایش مدت مطالعه متن با جاوا اسکریپت

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
👨‍💻 اگه شور و اشتیاق زیادی به مسائل سایبری و کامپیوتر دارید و همیشه تشنه یادگیری هستین تبریک می‌گم تو قراره دوست خوب من شی. 🥰

👨‍💻 اینجا ما به اعماق دنیای کامپیوترها میریم و هرچیز جالبی ببینیم رو به شماهم نشون میدیم


🤖 از هوش مصنوعی گرفته تا معرفی انواع ابزار های کاربردی و نرم‌افزارهای آزاد، همه چی پیدا میشه

👥 دوستاتون رو هم دعوت کنید تا کنار هم از همدیگه یادبگیریم.

🚀 منتظر چی هستی؟

💢@Geek_Spot

💢@Geek_Spot

💢@Geek_Spot


🔥⬆️🤍⬆️🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Python BackendHub (Mani)
چند نفر تو پیوی ازم پرسیدن چطور به این نتیجه رسیدم و این لایبری رو نوشتم. گفتم شاید بهتر باشه تو کانال در موردش صحبت کنم چون نکته مهمیه که همیشه به درد می‌خوره.

ببینید من نه مهندس معکوسم، نه تو امنیت کار کردم. یکی از پروژه‌هایی که داشتم روی کراولینگ بود. یه روز دیدم سایتی که کراول می‌کردم همه درخواست‌هارو بلاک می‌کنه. یه درخواست با curl زدم، نتیجه رو ذخیره کردم و دیدم. فهمیدم مشکل چالش Cloudflare هست. جالبه که با مرورگر وقتی همون درخواست رو می‌زدم، سریع جواب می‌گرفتم.

من قبلاً کتابی در مورد HTTP و TLS خونده بودم و می‌دونستم معجزه‌ای در کار نیست. وقتی درخواست می‌زنی، سرور جوابی می‌ده. پس یه چیزی تو curl داره اشتباه می‌شه که تو مرورگر نمی‌شه. درخواست مرورگر رو دقیقاً با curl کپی کردم، ولی بازم فیل شد! ترافیک سیستم رو پروکسی کردم، یک بار همون curl رو زدم و یک بار هم با مرورگر. مقایسه‌شون کردم و دیدم تفاوت اصلی توی Hello Client هست. همینو تو پایتون پیاده کردم و بایپس شد.

کل این پروسه ۲۰ دقیقه طول کشید. یه سرچ کردم ببینم کلاینت پایتونی برای Cloudflare هست یا نه. دو تا پروژه پیدا کردم که نه کار می‌کردن نه توضیح داده بودن چطور این کارو کردن. حتی اگه کارم می‌کردن، استفاده نمی‌کردم. هیچ‌وقت لایبری که نمی‌دونی چیکار می‌کنه رو تو پروداکشن استفاده نکن. بعداً سورس کد یکیشونو دیدم که وسطش یه کار عجیب می‌کرد که باعث مموری لیک می‌شد!

نکات مهم این داستان:

۱. دانشی که به‌صورت تئوری دارید، زود یادتون می‌ره. وقتی ازش استفاده عملی کنید، بیشتر تو ذهنتون می‌مونه. استفاده عملی از یک نیاز میاد. نه اینکه یک کتاب بخونید ببینید کد هاشو کپی پیست کنید.
۲. همیشه تحقیق کنید و سولوشنی که پیاده کردید رو بفهمید. من اگه اون لایبری رو استفاده می‌کردم، مموری لیک می‌خوردم و این لایبری هم نوشته نمی‌شد.
۳. برای یادگیری از GPT استفاده نکنید. تئوری یاد بگیرید بهتر از اینه که از GPT بپرسید. چون GPT تئوری رو ناقص می‌گه و نمی‌تونه دقیقاً مشکل رو تشخیص بده. همین الان هم این سوال رو ازش پرسیدم با بهترین prompt ای که میشد داد. و جوابشو ببینید خودتون
۴. با تمرین و تکرار مهارتتون بالا می‌ره. این پروسه ۲۰ دقیقه طول کشید چون بارها ترافیک سیستم عاملمو پروکسی کرده بودم و می‌دونستم Network Tab مرورگر خیلی سطح بالاست و بعضی HTTP Headerها رو نشون نمی‌ده. هیچ مجیکی وجود نداره، تمرینه که دستتو سریع می‌کنه. شاید یک نفری که ندونه اینارو و نکرده این تسک چند هفتش میشد.


@PyBackendHub
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
#fun

- سنگر آخر
میدونین چیکار میکنه دیگه ؟ 😂 ( بدون اطلاع کامل استفاده نشود )

@coolycode
Forwarded from Sadra Codes
روی Hey یه آپدیت ریز دادم. حالا می‌تونید آدرس سرویس LLM دلخواه خودتون رو ست کنید واسه پروژه. اینجوری آپدیت کنید:


pip install -U hey-mindsdb


و اینجوری از کانفیگ جدید استفاده کنید:


hey config create
hey config edit


اگه نگران پاک شدن کانفیک قبلی هستید (چون config create کانفیگتونو بازنویسی می‌کنه)، فقط این رو اضافه کنید به کانفیگ فعلیتون:


...
"service": "https://llm.mdb.ai",
...


بصورت پیشفرض تنظیم شده به سرویس MindsDB که می‌تونید از این به بعد تغییرش بدید. و اینکه ورژن قبلی هنوز به خوبی کار می‌کنه. اگه احیانا می‌خواید سرویس رو تغییر بدید اپدیت کنید.
#لاس

تو واسم مثل یه Api میمونی که به خوبی داکیومنت شده و استفاده ازش راحته :))

@DevTwitter
Forwarded from Golden Code (علی 🇨🇴)
در لاراول برای تعیین نام جدول pivot به صورت customize شده در رابطه "many to many" از کدوم متود استفاده میشه؟
Anonymous Quiz
27%
PivotTable()
10%
Table()
52%
WithPivot()
11%
Using()
1
Forwarded from CleverDevs (Mahdi)
Good 🆚 Bad Refactor


وقتی یه پروژه رو میخوایم ریفکتور کنیم چیکارا نکنیم که وضع بدتر شه؟ (این پارت یکه.)

1. Don't Change The Base


بیس کد فعلی رو تا حد امکان تغییر ندید، صرفا شرایط فعلی رو بهتر کنید. مثال:

قبل:
function processUsers(users: User[]) {
const result = [];
for (let i = 0; i < users.length; i++) {
if (users[i].age >= 18) {
const formattedUser = {
name: users[i].name.toUpperCase(),
age: users[i].age,
isAdult: true
};
result.push(formattedUser);
}
}
return result;
}


بعد از یه ریفکتور بد:
import * as R from 'ramda';
const processUsers = R.pipe(
R.filter(R.propSatisfies(R.gte(R.__, 18), 'age')),
R.map(R.applySpec({
name: R.pipe(R.prop('name'), R.toUpper),
age: R.prop('age'),
isAdult: R.always(true)
}))
);


بعد از یه ریفکتور خوب:
function processUsers(users: User[]): FormattedUser[] {
return users
.filter(user => user.age >= 18)
.map(user => ({
name: user.name.toUpperCase(),
age: user.age,
isAdult: true
}));
}


توی ریفکتور اول بیس کد کلا تغییر کرد و از یه پکیج جدید استفاده شد و احتمال زیاد بقیه کسایی که تو پروژه هستن باهاش آشنایی ندارن و کار برای همه سخت میشه.

#CleanCode SRC
@CleverDevs @CleverDevsGp
Forwarded from Python Hints
راهنمای ایرانسل برای تنظیم اینترنت روی گوشی، مثلاً به انگلیسی، متن نوشته شده :

Dar: Settings>More>Mobile Networks>Access Point Names "APN" ra ezafe



برسونید به دست بچه‌های ایرانسل، الان فهمیدم چرا بعضی توریست‌ها دربه‌در دنبال یکی میگردن تنظیمات اینترنت رو براشون راه بندازه.

باقی متون انگلیسی ایرانسل هم همینجوری هست ؟


البته همینجا بگم، همراه اول هم وضعیت بهتری نداره ها!
Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 خطای کلاس Normalizer برای نصب لاراول در لینوکس ویندوز

این کلاس Normalizer که بخشی از پسوند intl PHP است در محیط شما موجود نیست. این کلاس برای عادی سازی یونیکد استفاده می شود و برای عملیات خاصی، به ویژه در چارچوب Symfony و Laravel ضروری است.

خطا:
PHP Fatal error:  Uncaught Error: Class "Normalizer" not found


برای حل این خطا بسته زیر را نصب کنید.

Ubuntu/Debian:

sudo apt install php-intl


Red Hat/CentOS:

sudo yum install php-intl


Fedora:

sudo dnf install php-intl


Windows:

اگر از زمپ یا لاراگون استفاده می کنید باید اکستشن php_intl.dll در فایل php.ini فعال کنید و برای فعال سازی سمی‌کالِن یا ویرگول ; زیر را حذف کنید.

extension=php_intl.dll


راه اندازی مجدد وب سرور

Apache:

sudo systemctl restart apache2


Nginx with PHP-FPM:

sudo systemctl restart php-fpm


یا دستور زیر از نصب شدن بسته intl مطمئن شوید.

php -m | grep intl



#linux
#windows
#laravel

@TheRaymondDev
Forwarded from Pishro App
#نکته #داکر

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

🔥 هر دستور RUN در Dockerfile یک لایه اضافی در تصویر نهایی ایجاد می کند.
پس  بهترین روش این است که تعداد لایه ها را محدود کنید تا تصویر سبک بمونه.

برای نمونه به جای این:
RUN curl -SL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" --output nodejs.tar.gz
RUN echo "$NODE_DOWNLOAD_SHA nodejs.tar.gz" | sha256sum -c -
RUN tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1
RUN rm nodejs.tar.gz
RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs

به این صورت استفاده کنید:
RUN curl -SL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz" --output nodejs.tar.gz \
&& echo "$NODE_DOWNLOAD_SHA nodejs.tar.gz" | sha256sum -c - \
&& tar -xzf "nodejs.tar.gz" -C /usr/local --strip-components=1 \
&& rm nodejs.tar.gz \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs


🧠 پس موقع نوشتن داکر فایل سعی کنید از دستور RUN بصورت بهینه استفاده کنید

👾 @pishroapp
Please open Telegram to view this post
VIEW IN TELEGRAM