#linux_command_1
#ls
در اولین قدم، میخوایم با یکی از پرکاربردترین و اساسیترین فرمانها، یعنی ls آشنا بشیم. این فرمان مثل یک چشم عمل میکنه و به شما نشون میده داخل یک دایرکتوری (همون پوشه خودمون!) چه فایلها و پوشههایی وجود داره.
یعنی چی ls ؟
مخفف "list" به معنی "لیست کردن" هست. فکر کنید وارد یک اتاق میشید و میخواید ببینید چه وسایلی داخلشه؛ ls هم دقیقاً همین کار رو برای دایرکتوریهای لینوکس انجام میده!
چطور از ls استفاده کنیم؟ (سینتکس) 📝
ساختار کلی فرمان ls خیلی سادهست:
[آپشنها]: اینها کارهایی هستن که میتونید از ls بخواید براتون انجام بده. مثلاً میتونید ازش بخواید جزئیات بیشتری رو نشون بده یا حتی فایلهای مخفی رو هم لیست کنه. (اختیاریه)
[مسیر_فایل/دایرکتوری]: مسیری که میخواید محتویاتش رو ببینید. اگه هیچی اینجا ننویسید، ls به طور پیشفرض محتویات دایرکتوری فعلی که توش هستید رو نشون میده. (اختیاریه)
چندتا مثال عملی: امتحانش کن! 👨💻
دیدن محتویات دایرکتوری فعلی:
این سادهترین حالته. فقط ls رو بنویسید و اینتر بزنید:
اگه تو دایرکتوری Home خودتون باشید، ممکنه خروجی این شکلی باشه:
دیدن محتویات یک دایرکتوری خاص:
میتونید آدرس یه دایرکتوری دیگه رو هم به ls بدید. مثلاً برای دیدن محتویات دایرکتوری Documents:
خروجی:
آپشنهای جادویی ls ✨
خب ls کلی آپشن کاربردی داره که کارتون رو خیلی راحتتر میکنه. بیاین با چندتا از مهمترینهاشون آشنا بشیم:
با -l (long listing format): جزئیات کامل رو ببین!
این آپشن اطلاعات خیلی بیشتری مثل مجوزها (کی میتونه به فایل دسترسی داشته باشه)، صاحب فایل، حجم، و تاریخ آخرین تغییر رو نشون میده:
خروجی:
به کمک -a (all) هم :
فایلهای مخفی رو هم پیدا کن! 🕵️♂️
توی لینوکس، فایلها و پوشههایی که با نقطه (.) شروع میشن، مخفی هستن. برای دیدن اینها باید از آپشن -a استفاده کنید:
خروجی:
با -h (human readable): حجم رو به زبان آدمیزاد نشون بده! 📏
اگه از -l استفاده کنید، حجم فایلها به بایت نشون داده میشه که ممکنه گیجکننده باشه. -h حجم رو به واحدهای قابل فهمتر مثل کیلوبایت (K)، مگابایت (M) یا گیگابایت (G) تبدیل میکنه:
خروجی:
ترکیب آپشنها:
شما میتونید چندتا آپشن رو با هم ترکیب کنید. مثلاً برای دیدن جزئیات کامل همه فایلها (حتی مخفیها) و نمایش حجم به صورت خوانا:
یا حتی این شکلی:
هر دو فرمان یکسان عمل میکنند!
@softwrteach
------------------------
🌐💻
#linux
#learn_linux
#ls
در اولین قدم، میخوایم با یکی از پرکاربردترین و اساسیترین فرمانها، یعنی ls آشنا بشیم. این فرمان مثل یک چشم عمل میکنه و به شما نشون میده داخل یک دایرکتوری (همون پوشه خودمون!) چه فایلها و پوشههایی وجود داره.
یعنی چی ls ؟
مخفف "list" به معنی "لیست کردن" هست. فکر کنید وارد یک اتاق میشید و میخواید ببینید چه وسایلی داخلشه؛ ls هم دقیقاً همین کار رو برای دایرکتوریهای لینوکس انجام میده!
چطور از ls استفاده کنیم؟ (سینتکس) 📝
ساختار کلی فرمان ls خیلی سادهست:
ls [option] [file_path/directory]
[آپشنها]: اینها کارهایی هستن که میتونید از ls بخواید براتون انجام بده. مثلاً میتونید ازش بخواید جزئیات بیشتری رو نشون بده یا حتی فایلهای مخفی رو هم لیست کنه. (اختیاریه)
[مسیر_فایل/دایرکتوری]: مسیری که میخواید محتویاتش رو ببینید. اگه هیچی اینجا ننویسید، ls به طور پیشفرض محتویات دایرکتوری فعلی که توش هستید رو نشون میده. (اختیاریه)
چندتا مثال عملی: امتحانش کن! 👨💻
دیدن محتویات دایرکتوری فعلی:
این سادهترین حالته. فقط ls رو بنویسید و اینتر بزنید:
ls
اگه تو دایرکتوری Home خودتون باشید، ممکنه خروجی این شکلی باشه:
Desktop Documents Downloads Music Pictures Public Templates Videos
دیدن محتویات یک دایرکتوری خاص:
میتونید آدرس یه دایرکتوری دیگه رو هم به ls بدید. مثلاً برای دیدن محتویات دایرکتوری Documents:
ls Documents/
خروجی:
reports.txt presentations/ notes.md
آپشنهای جادویی ls ✨
خب ls کلی آپشن کاربردی داره که کارتون رو خیلی راحتتر میکنه. بیاین با چندتا از مهمترینهاشون آشنا بشیم:
با -l (long listing format): جزئیات کامل رو ببین!
این آپشن اطلاعات خیلی بیشتری مثل مجوزها (کی میتونه به فایل دسترسی داشته باشه)، صاحب فایل، حجم، و تاریخ آخرین تغییر رو نشون میده:
ls -l
خروجی:
-rw-r--r-- 1 user user 1234 May 20 10:30 file1.txt
drwxr-xr-x 2 user user 4096 Apr 15 08:00 my_directory/
-rw-r--r--: مجوزهای دسترسی
user: اسم کاربر صاحب فایل
1234: حجم فایل (بر حسب بایت)
May 20 10:30: تاریخ و زمان آخرین تغییر
به کمک -a (all) هم :
فایلهای مخفی رو هم پیدا کن! 🕵️♂️
توی لینوکس، فایلها و پوشههایی که با نقطه (.) شروع میشن، مخفی هستن. برای دیدن اینها باید از آپشن -a استفاده کنید:
ls -a
خروجی:
. .. .bashrc .profile Desktop Documents
.: دایرکتوری فعلی
..: دایرکتوری بالاتر
با -h (human readable): حجم رو به زبان آدمیزاد نشون بده! 📏
اگه از -l استفاده کنید، حجم فایلها به بایت نشون داده میشه که ممکنه گیجکننده باشه. -h حجم رو به واحدهای قابل فهمتر مثل کیلوبایت (K)، مگابایت (M) یا گیگابایت (G) تبدیل میکنه:
ls -lh
خروجی:
-rw-r--r-- 1 user user 1.2K May 20 10:30 file1.txt
drwxr-xr-x 2 user user 4.0K Apr 15 08:00 my_directory/
ترکیب آپشنها:
شما میتونید چندتا آپشن رو با هم ترکیب کنید. مثلاً برای دیدن جزئیات کامل همه فایلها (حتی مخفیها) و نمایش حجم به صورت خوانا:
ls -lah
یا حتی این شکلی:
ls -l -a -h
هر دو فرمان یکسان عمل میکنند!
@softwrteach
------------------------
🌐💻
#linux
#learn_linux
🔥2🖕1
#linux_command_2
#cd
در پست قبلی با ls آشنا شدیم و یاد گرفتیم چطور محتویات یه دایرکتوری رو ببینیم. اما دیدن کافی نیست، گاهی وقتا باید حرکت کنیم! اینجاست که فرمان cd به کارمون میاد. این فرمان به شما اجازه میده توی ساختار پوشههای لینوکس جابجا بشید.
یعنی چی cd ؟ 🤔
مخفف "change directory" به معنی "تغییر دایرکتوری" هست. فکر کنید داخل همون اتاقی هستید که قبلاً با ls وسایلش رو دیدید. حالا میخواید از این اتاق به اتاق بغلی یا اتاق اصلی خونه برید؛ cd دقیقاً همین کار رو برای جابجایی بین دایرکتوریها در لینوکس انجام میده!
چطور از cd استفاده کنیم؟ (سینتکس) 📝
ساختار کلی فرمان cd خیلی سادهست:
[مسیر_دایرکتوری]: این همون آدرسیه که میخواید به اونجا برید. میتونه یک دایرکتوری داخل همین دایرکتوری که الان توش هستید باشه، یا یک مسیر کامل از ریشه سیستم. (اختیاریه)
اگر cd رو بدون هیچ آدرسی استفاده کنید، به طور پیشفرض به دایرکتوری خانه (Home Directory) کاربر برمیگردید.
چندتا مثال عملی: 👨💻
رفتن به یک دایرکتوری فرزند (Subdirectory):
فرض کنید الان در دایرکتوری Home هستید و میخواید برید داخل دایرکتوری Documents:
حالا با pwd (فرمان نمایش مسیر فعلی) میتونید ببینید کجا هستید:
خروجی:
برگشتن به دایرکتوری والد (Parent Directory):
برای برگشتن به دایرکتوری قبلی (یک سطح بالاتر)، از دو نقطه استفاده میکنیم:
اگر الان در /home/your_username/Documents باشید، با این دستور به /home/your_username برمیگردید.
رفتن به دایرکتوری خانه (Home Directory):
سه راه برای برگشتن به دایرکتوری خانه وجود داره که خیلی پرکاربرد هستند:
فقط cd رو بزنید:
از علامت ~ (تیلدا) استفاده کنید:
مسیر کامل دایرکتوری Home رو بنویسید (که برای هر کاربر متفاوت هست):
# به جای your_username، نام کاربری خودتون رو بذارید
رفتن به یک مسیر کامل (Absolute Path):
میتونید آدرس کامل دایرکتوری رو از ریشه (/) سیستم عامل وارد کنید. مثلاً برای رفتن به دایرکتوری /var/log:
با این روش، مهم نیست الان کجا هستید، همیشه به همون آدرس مشخص میرید.
برگشتن به دایرکتوری قبلی:
اگه میخواید به دایرکتوری که قبل از دایرکتوری فعلی توش بودید برگردید، از علامت - استفاده کنید:
این فرمان شما رو بین دو دایرکتوری که آخرین بار توشون بودید، جابجا میکنه.
نکات مهم و ترفندها ✨
کامل کردن خودکار (Tab Completion):
این یه قابلیت فوقالعاده در ترمینال لینوکسه! وقتی دارید اسم یه دایرکتوری رو تایپ میکنید، کافیه چند حرف اولش رو بنویسید و بعد دکمه Tab رو بزنید. ترمینال خودش بقیهاش رو کامل میکنه یا اگه چند گزینه وجود داشته باشه، با دو بار Tab زدن لیستشون رو نشون میده. حتماً امتحانش کنید!
دایرکتوریهای دارای فاصله در اسم:
اگر اسم دایرکتوری شما فاصله (Space) داشت، باید اسم رو داخل کوتیشن (" ") بذارید یا قبل از هر فاصله یک بکاسلش (\) قرار بدید.
# یا
@softwrteach
------------------------
🌐💻
#linux
#learn_linux
#cd
در پست قبلی با ls آشنا شدیم و یاد گرفتیم چطور محتویات یه دایرکتوری رو ببینیم. اما دیدن کافی نیست، گاهی وقتا باید حرکت کنیم! اینجاست که فرمان cd به کارمون میاد. این فرمان به شما اجازه میده توی ساختار پوشههای لینوکس جابجا بشید.
یعنی چی cd ؟ 🤔
مخفف "change directory" به معنی "تغییر دایرکتوری" هست. فکر کنید داخل همون اتاقی هستید که قبلاً با ls وسایلش رو دیدید. حالا میخواید از این اتاق به اتاق بغلی یا اتاق اصلی خونه برید؛ cd دقیقاً همین کار رو برای جابجایی بین دایرکتوریها در لینوکس انجام میده!
چطور از cd استفاده کنیم؟ (سینتکس) 📝
ساختار کلی فرمان cd خیلی سادهست:
cd [path_directory]
[مسیر_دایرکتوری]: این همون آدرسیه که میخواید به اونجا برید. میتونه یک دایرکتوری داخل همین دایرکتوری که الان توش هستید باشه، یا یک مسیر کامل از ریشه سیستم. (اختیاریه)
اگر cd رو بدون هیچ آدرسی استفاده کنید، به طور پیشفرض به دایرکتوری خانه (Home Directory) کاربر برمیگردید.
چندتا مثال عملی: 👨💻
رفتن به یک دایرکتوری فرزند (Subdirectory):
فرض کنید الان در دایرکتوری Home هستید و میخواید برید داخل دایرکتوری Documents:
cd Documents/
حالا با pwd (فرمان نمایش مسیر فعلی) میتونید ببینید کجا هستید:
pwd
خروجی:
/home/your_username/Documents
برگشتن به دایرکتوری والد (Parent Directory):
برای برگشتن به دایرکتوری قبلی (یک سطح بالاتر)، از دو نقطه استفاده میکنیم:
cd ..
اگر الان در /home/your_username/Documents باشید، با این دستور به /home/your_username برمیگردید.
رفتن به دایرکتوری خانه (Home Directory):
سه راه برای برگشتن به دایرکتوری خانه وجود داره که خیلی پرکاربرد هستند:
فقط cd رو بزنید:
cd
از علامت ~ (تیلدا) استفاده کنید:
cd ~
مسیر کامل دایرکتوری Home رو بنویسید (که برای هر کاربر متفاوت هست):
cd /home/your_username
# به جای your_username، نام کاربری خودتون رو بذارید
رفتن به یک مسیر کامل (Absolute Path):
میتونید آدرس کامل دایرکتوری رو از ریشه (/) سیستم عامل وارد کنید. مثلاً برای رفتن به دایرکتوری /var/log:
cd /var/log
با این روش، مهم نیست الان کجا هستید، همیشه به همون آدرس مشخص میرید.
برگشتن به دایرکتوری قبلی:
اگه میخواید به دایرکتوری که قبل از دایرکتوری فعلی توش بودید برگردید، از علامت - استفاده کنید:
cd -
این فرمان شما رو بین دو دایرکتوری که آخرین بار توشون بودید، جابجا میکنه.
نکات مهم و ترفندها ✨
کامل کردن خودکار (Tab Completion):
این یه قابلیت فوقالعاده در ترمینال لینوکسه! وقتی دارید اسم یه دایرکتوری رو تایپ میکنید، کافیه چند حرف اولش رو بنویسید و بعد دکمه Tab رو بزنید. ترمینال خودش بقیهاش رو کامل میکنه یا اگه چند گزینه وجود داشته باشه، با دو بار Tab زدن لیستشون رو نشون میده. حتماً امتحانش کنید!
دایرکتوریهای دارای فاصله در اسم:
اگر اسم دایرکتوری شما فاصله (Space) داشت، باید اسم رو داخل کوتیشن (" ") بذارید یا قبل از هر فاصله یک بکاسلش (\) قرار بدید.
cd "My Documents"
# یا
cd My\ Documents
@softwrteach
------------------------
🌐💻
#linux
#learn_linux
🔥1🌚1
#linux_command_3
#pwd
بعد از اینکه یاد گرفتیم با ls محتویات دایرکتوریها رو ببینیم و با cd بینشون حرکت کنیم، حالا وقتشه بدونیم دقیقاً کجاییم! برای این کار، فرمان pwd به کمکمون میاد. این فرمان مثل یک نقشه به شما نشون میده که الان در کدوم دایرکتوری سیستم عامل قرار دارید.
یعنی چی pwd ؟ 🤔
مخفف "print working directory" به معنی "چاپ دایرکتوری کاری" هست. فرض کنید توی یک ساختمون خیلی بزرگ با کلی اتاق و راهرو گم شدید. pwd مثل این میمونه که یکی به شما بگه: "شما الان دقیقاً اینجا هستید!"
چطور از pwd استفاده کنیم؟ (سینتکس) 📝
استفاده از فرمان pwd فوقالعاده سادهست و هیچ آپشن یا پارامتر اجباریای نداره:
فقط کافیه pwd رو تایپ کنید و اینتر بزنید. ترمینال مسیر کامل دایرکتوری فعلی شما رو نمایش میده.
چندتا مثال عملی: 👨💻
دیدن مسیر دایرکتوری فعلی:
وقتی ترمینال رو باز میکنید، معمولاً در دایرکتوری خانه (Home Directory) خودتون هستید. برای مطمئن شدن:
خروجی:
# به جای your_username، نام کاربری شما نمایش داده میشود.
بعد از تغییر دایرکتوری:
حالا بیایید به دایرکتوری Documents بریم و دوباره مکانمون رو چک کنیم:
خروجی:
در یک مسیر سیستمی:
حالا فرض کنید به یک دایرکتوری سیستمی مثل /etc رفتیم:
خروجی:
همونطور که میبینید، pwd همیشه مسیر کامل و مطلق دایرکتوری رو از ریشه سیستم عامل (/) نشون میده.
میرسیم به pwd در مقایسه با ls و cd ✨
ls: لیست محتویات دایرکتوری فعلی یا مشخص شده رو نشون میده.
cd: به شما کمک میکنه جابجا بشید و دایرکتوری فعلی رو تغییر بدید.
pwd: به شما نشون میده که کجا هستید، یعنی مسیر کامل دایرکتوری فعلی رو چاپ میکنه.
این سه فرمان کنار هم، ابزارهای اصلی شما برای ناوبری و کار با فایلها در لینوکس هستند.
@softwrteach
------------------------
🌐💻
#linux
#learn_linux
#pwd
بعد از اینکه یاد گرفتیم با ls محتویات دایرکتوریها رو ببینیم و با cd بینشون حرکت کنیم، حالا وقتشه بدونیم دقیقاً کجاییم! برای این کار، فرمان pwd به کمکمون میاد. این فرمان مثل یک نقشه به شما نشون میده که الان در کدوم دایرکتوری سیستم عامل قرار دارید.
یعنی چی pwd ؟ 🤔
مخفف "print working directory" به معنی "چاپ دایرکتوری کاری" هست. فرض کنید توی یک ساختمون خیلی بزرگ با کلی اتاق و راهرو گم شدید. pwd مثل این میمونه که یکی به شما بگه: "شما الان دقیقاً اینجا هستید!"
چطور از pwd استفاده کنیم؟ (سینتکس) 📝
استفاده از فرمان pwd فوقالعاده سادهست و هیچ آپشن یا پارامتر اجباریای نداره:
pwd
فقط کافیه pwd رو تایپ کنید و اینتر بزنید. ترمینال مسیر کامل دایرکتوری فعلی شما رو نمایش میده.
چندتا مثال عملی: 👨💻
دیدن مسیر دایرکتوری فعلی:
وقتی ترمینال رو باز میکنید، معمولاً در دایرکتوری خانه (Home Directory) خودتون هستید. برای مطمئن شدن:
pwd
خروجی:
/home/your_username
# به جای your_username، نام کاربری شما نمایش داده میشود.
بعد از تغییر دایرکتوری:
حالا بیایید به دایرکتوری Documents بریم و دوباره مکانمون رو چک کنیم:
cd Documents/
pwd
خروجی:
/home/your_username/Documents
در یک مسیر سیستمی:
حالا فرض کنید به یک دایرکتوری سیستمی مثل /etc رفتیم:
cd /etc
pwd
خروجی:
/etc
همونطور که میبینید، pwd همیشه مسیر کامل و مطلق دایرکتوری رو از ریشه سیستم عامل (/) نشون میده.
میرسیم به pwd در مقایسه با ls و cd ✨
ls: لیست محتویات دایرکتوری فعلی یا مشخص شده رو نشون میده.
cd: به شما کمک میکنه جابجا بشید و دایرکتوری فعلی رو تغییر بدید.
pwd: به شما نشون میده که کجا هستید، یعنی مسیر کامل دایرکتوری فعلی رو چاپ میکنه.
این سه فرمان کنار هم، ابزارهای اصلی شما برای ناوبری و کار با فایلها در لینوکس هستند.
@softwrteach
------------------------
🌐💻
#linux
#learn_linux
🔥1👏1🤗1
Forwarded from Linuxor ?
اپل به بزرگای هوش مصنوعی گفته کم شر و ور درباره هوش مصنوعی بگید هوش مصنوعی خیلی فاصله داره تا AGI یا هوش عمومی!
چند تا از این مدلای معروف مثل deepseek و o1 و claude رو برده زیر تست مسئله های جدیدی که تابحال کسی ندیدتشون و هر چقدر هم بهشون منابع قوی اضافه کرده بازم اوسگولانه فکر کردن و مثل بز تسلیم شدن. در واقع این مدلا برای چیزای جدید استدلال نتونستن کنن فقط برای مسائل از قبل حل شده خوب عمل میکردن.
در نهایت اپل از شرکت هایی که توانایی استدلال و فکر کردن مدلشون رو میآن توی شبکه های اجتماعی جشن میگیرن گله کرده و گفته دفه آخرتون باشه
@Linuxor
چند تا از این مدلای معروف مثل deepseek و o1 و claude رو برده زیر تست مسئله های جدیدی که تابحال کسی ندیدتشون و هر چقدر هم بهشون منابع قوی اضافه کرده بازم اوسگولانه فکر کردن و مثل بز تسلیم شدن. در واقع این مدلا برای چیزای جدید استدلال نتونستن کنن فقط برای مسائل از قبل حل شده خوب عمل میکردن.
در نهایت اپل از شرکت هایی که توانایی استدلال و فکر کردن مدلشون رو میآن توی شبکه های اجتماعی جشن میگیرن گله کرده و گفته دفه آخرتون باشه
@Linuxor
🆒1
Forwarded from F3RI
📣 داستان داغ امروز: هک نوبیتکس 🔥💰
خب امروز یه زلزله امنیتی تو فضای کریپتوی ایران رخ داد 😵💫
گروه هکری «گنجشک درنده» (Gonjeshke Darande) ادعا کرده که زده به قلب نوبیتکس، بزرگترین صرافی رمزارز کشور...
و نه فقط یه ادعا ساده – بلکه یه کیفپول گرم با بیش از ۴۸ میلیون دلار رو خالی کرده!💸
چی بردن؟ تقریباً همه چیز...
فقط روی شبکه Tron، چیزی حدود ۴۸.۶ میلیون دلار USDT جابهجا شده و پایان ماجرا نیستش.
تراکنشها خیلی سریع و زنجیرهای بوده تا ردیابی سختتر بشه، و حتی آدرس مقصد هم با پیام سیاسی ضدایرانی طراحی شده (Vanity address). یعنی یه پلن قوی از قبل طراحی شده اومدن.
🔍 حالا چطوری ممکنه این حمله انجام شده باشه؟ بیایید سناریوهای فنی رو بررسی کنیم:
۱. دسترسی به کیفپول گرم (Hot Wallet Access)
نقطه اصلی نفوذ همینجاست.
کیفپول گرم نوبیتکس که برای پردازش سریع برداشتها استفاده میشه، احتمالاً روی یه سرور نیمهمتصل به اینترنت یا شبکه داخلی بوده. اگه کلید خصوصی (Private Key) یا مسیر دسترسی بهش لو بره، بازی تمومه.
چطور ممکنه لو رفته باشه؟
ذخیره کلید در فایل متنی روی سرور (یه اشتباه مرگبار کلاسیک)
یا استفاده از Wallet Management Systemهایی مثل BitGo یا TronLink که بهدرستی ایزوله نشدن.
یا یه اسکريپت cron ساده که رمزگذاری نشده بوده و دسترسی لو رفته.
۲. نفوذ از طریق سرور اطلاعرسانی (Internal Messaging)
نوبیتکس تو اطلاعیه خودش گفته "بخشی از زیرساخت اطلاعرسانی" هم دستکاری شده.
این یعنی هکر نهفقط دزدی کرده، بلکه داخل پنل مدیریت یا سیستمهای نظارتی/پیامرسان داخلی هم نفوذ کرده – شاید برای جلوگیری از تشخیص فوری حمله.
۳. سناریوی نفوذ با VPN / Remote Access
مثل همیشه، یکی از محتملترین مسیرها همینه:
یه VPN سرور Fortigate یا Mikrotik با رمز عبور ضعیف یا 2FA غیرفعال.
یه اسکن ساده با ابزارهایی مثل Shodan کافیه تا به پنل دسترسی پیدا کنن.
از اونجا تا دسترسی به شبکه داخلی و سرور hot wallet فقط یه قدمه.
۴. باگ تو یکی از اسکریپتهای برداشت (Withdrawal APIs)
اگه اسکریپتهای برداشت اتوماتیک بهدرستی ایزوله یا rate-limit نشده باشن، میتونه به یه RCE ساده ختم بشه:
مثلاً یه باگ تو پارامترهای برداشت USDT روی Tron که اجازه داده تراکنشهای سنگین بدون تائید admin اجرا بشه.
یا یه تزریق command به کیفپول داخلی (مثلاً از طریق اسکریپتهایی که با NodeJS یا Python نوشته شدن).
۵.موردی بعدی Insider Threat یا درز داخلی
بهخصوص با توجه به اینکه فقط کیفپول گرم هدف بوده، یکی از سناریوهای محتمل دسترسی از داخل مجموعه یا پیمانکاره.
شاید کسی که به کلیدها، cron jobs یا سیستمهای مانیتورینگ دسترسی داشته، همکاری کرده یا لو رفته.
حتی ممکنه کل سیستم به خاطر یه credential دزدیدهشده در تلگرام یا ایمیل به خطر افتاده باشه.
📡 و حالا چیز جالب: پیام روی بلاکچین!
آدرس مقصد تراکنشها یه Vanity Address سفارشیشده بوده که اسم نوبیتکس توشه + کلمه "terrorists" 😬
یعنی دارن پیام میدن: فقط دنبال پول نبودیم، یه حمله هدفمند و سیاسی هم بوده!
📛 اگه این حمله واقعی باشه (که با شواهد آنچین تقریباً قطعی شده)، اینا فقط دزدی نیست...
یه اخطار بزرگه برای کل صنعت رمزارز ایران – چون خیلی از صرافیها معماری مشابه دارن.
🚨 هشدار برای صرافیها:
کلیدهای کیفپول گرم باید جدا از سرور اصلی و با HSM یا Custodyهای امن نگهداری بشن.
2FA، لاگ مانیتورینگ بلادرنگ، و دسترسی محدودشده برای هر کدوم از ماژولها اجباریه.
سرورها باید با WAF و EDR امنسازی بشن و دسترسی RDP/VPN رمزگذاریشده و لایهبندیشده باشه.
🔥 نتیجه؟ یکی از حرفهایترین حملات روی یه صرافی ایرانی، با پیامی سیاسی، ساختار دقیق، و حجم بالای سرقت.
و حالا همه صرافیها باید یه جمله رو بنویسن جلوشون:
"ما نفر بعدی نباشیم..."
خب امروز یه زلزله امنیتی تو فضای کریپتوی ایران رخ داد 😵💫
گروه هکری «گنجشک درنده» (Gonjeshke Darande) ادعا کرده که زده به قلب نوبیتکس، بزرگترین صرافی رمزارز کشور...
و نه فقط یه ادعا ساده – بلکه یه کیفپول گرم با بیش از ۴۸ میلیون دلار رو خالی کرده!💸
چی بردن؟ تقریباً همه چیز...
فقط روی شبکه Tron، چیزی حدود ۴۸.۶ میلیون دلار USDT جابهجا شده و پایان ماجرا نیستش.
تراکنشها خیلی سریع و زنجیرهای بوده تا ردیابی سختتر بشه، و حتی آدرس مقصد هم با پیام سیاسی ضدایرانی طراحی شده (Vanity address). یعنی یه پلن قوی از قبل طراحی شده اومدن.
🔍 حالا چطوری ممکنه این حمله انجام شده باشه؟ بیایید سناریوهای فنی رو بررسی کنیم:
۱. دسترسی به کیفپول گرم (Hot Wallet Access)
نقطه اصلی نفوذ همینجاست.
کیفپول گرم نوبیتکس که برای پردازش سریع برداشتها استفاده میشه، احتمالاً روی یه سرور نیمهمتصل به اینترنت یا شبکه داخلی بوده. اگه کلید خصوصی (Private Key) یا مسیر دسترسی بهش لو بره، بازی تمومه.
چطور ممکنه لو رفته باشه؟
ذخیره کلید در فایل متنی روی سرور (یه اشتباه مرگبار کلاسیک)
یا استفاده از Wallet Management Systemهایی مثل BitGo یا TronLink که بهدرستی ایزوله نشدن.
یا یه اسکريپت cron ساده که رمزگذاری نشده بوده و دسترسی لو رفته.
۲. نفوذ از طریق سرور اطلاعرسانی (Internal Messaging)
نوبیتکس تو اطلاعیه خودش گفته "بخشی از زیرساخت اطلاعرسانی" هم دستکاری شده.
این یعنی هکر نهفقط دزدی کرده، بلکه داخل پنل مدیریت یا سیستمهای نظارتی/پیامرسان داخلی هم نفوذ کرده – شاید برای جلوگیری از تشخیص فوری حمله.
۳. سناریوی نفوذ با VPN / Remote Access
مثل همیشه، یکی از محتملترین مسیرها همینه:
یه VPN سرور Fortigate یا Mikrotik با رمز عبور ضعیف یا 2FA غیرفعال.
یه اسکن ساده با ابزارهایی مثل Shodan کافیه تا به پنل دسترسی پیدا کنن.
از اونجا تا دسترسی به شبکه داخلی و سرور hot wallet فقط یه قدمه.
۴. باگ تو یکی از اسکریپتهای برداشت (Withdrawal APIs)
اگه اسکریپتهای برداشت اتوماتیک بهدرستی ایزوله یا rate-limit نشده باشن، میتونه به یه RCE ساده ختم بشه:
مثلاً یه باگ تو پارامترهای برداشت USDT روی Tron که اجازه داده تراکنشهای سنگین بدون تائید admin اجرا بشه.
یا یه تزریق command به کیفپول داخلی (مثلاً از طریق اسکریپتهایی که با NodeJS یا Python نوشته شدن).
۵.موردی بعدی Insider Threat یا درز داخلی
بهخصوص با توجه به اینکه فقط کیفپول گرم هدف بوده، یکی از سناریوهای محتمل دسترسی از داخل مجموعه یا پیمانکاره.
شاید کسی که به کلیدها، cron jobs یا سیستمهای مانیتورینگ دسترسی داشته، همکاری کرده یا لو رفته.
حتی ممکنه کل سیستم به خاطر یه credential دزدیدهشده در تلگرام یا ایمیل به خطر افتاده باشه.
📡 و حالا چیز جالب: پیام روی بلاکچین!
آدرس مقصد تراکنشها یه Vanity Address سفارشیشده بوده که اسم نوبیتکس توشه + کلمه "terrorists" 😬
یعنی دارن پیام میدن: فقط دنبال پول نبودیم، یه حمله هدفمند و سیاسی هم بوده!
📛 اگه این حمله واقعی باشه (که با شواهد آنچین تقریباً قطعی شده)، اینا فقط دزدی نیست...
یه اخطار بزرگه برای کل صنعت رمزارز ایران – چون خیلی از صرافیها معماری مشابه دارن.
🚨 هشدار برای صرافیها:
کلیدهای کیفپول گرم باید جدا از سرور اصلی و با HSM یا Custodyهای امن نگهداری بشن.
2FA، لاگ مانیتورینگ بلادرنگ، و دسترسی محدودشده برای هر کدوم از ماژولها اجباریه.
سرورها باید با WAF و EDR امنسازی بشن و دسترسی RDP/VPN رمزگذاریشده و لایهبندیشده باشه.
🔥 نتیجه؟ یکی از حرفهایترین حملات روی یه صرافی ایرانی، با پیامی سیاسی، ساختار دقیق، و حجم بالای سرقت.
و حالا همه صرافیها باید یه جمله رو بنویسن جلوشون:
"ما نفر بعدی نباشیم..."
😈1
Forwarded from F3RI
F3RI
📣 داستان داغ امروز: هک نوبیتکس 🔥💰 خب امروز یه زلزله امنیتی تو فضای کریپتوی ایران رخ داد 😵💫 گروه هکری «گنجشک درنده» (Gonjeshke Darande) ادعا کرده که زده به قلب نوبیتکس، بزرگترین صرافی رمزارز کشور... و نه فقط یه ادعا ساده – بلکه یه کیفپول گرم با بیش از…
📌 فقط یه نکته:
سناریوهایی که بالا گفته شد بیشتر مسیرهای متداول و پیشپاافتادن.
واقعیت اینه که هنوز مکانیزم دقیق حمله مشخص نیست و احتمالاً با یه نفوذ خیلی پیچیدهتر و هدفمندتر طرفیم.
فعلاً باید منتظر اطلاعات رسمیتر بمونیم.
سناریوهایی که بالا گفته شد بیشتر مسیرهای متداول و پیشپاافتادن.
واقعیت اینه که هنوز مکانیزم دقیق حمله مشخص نیست و احتمالاً با یه نفوذ خیلی پیچیدهتر و هدفمندتر طرفیم.
فعلاً باید منتظر اطلاعات رسمیتر بمونیم.
💯1
Forwarded from F3RI
🚁 تونل هوایی ملیشکن چیه؟ با اینترنت ملی هم جهانی بمونیم؟🙄
تو این روزا که اینترنت بینالملل شده یه چیز لوکس و فانتزی، خیلیا دیگه به این فکر میکنن که «اگه همه چی ملی شد، چی میشه؟!» خب، اینجاست که پای یه روش زیرزمینی و باحال وسط میاد: تونل هوایی ملیشکن!
🛰 یه نگاه به سناریو:
فرض کن یه نفر که دستش به استارلینک میرسه (مثلاً همون آقای جاسوس معروف)، میاد یه دیش استارلینک تو ایران میزاره. این دیش مستقیماً از ماهواره اینترنت بینالملل میگیره — بدون سانسور، بدون فیلتر.
حالا این آدم زرنگ، با یه IP استاتیک ایران و دوتا کارت شبکه، یه جادو میکنه:
1. یکی از کارت شبکهها به استارلینکه (اینترنت آزاد)
2. اون یکی به شبکه داخلی ایرانه (مثلاً اینترنت همراه اول یا ایرانسل شما)
3. میاد با یه ابزار مثل SoftEther VPN Server یا حتی SSH، یه VPN سرور راه میندازه روی این گیتوی
4. حالا ترافیک شما، که از موبایلت به سمت یه IP داخل ایران (مثلاً روی ایرانسل) میره، وارد این تونل میشه، و اون سمت، از طریق استارلینک میره تو دل اینترنت آزاد!
📶 چه سودی داره این مدل؟
چون شما داری به یه آیپی ایران وصل میشی، اینترنت ملی بهت اجازه اتصال میده.
چون اون سرِ اتصال به استارلینکه، ترافیکت وارد نت جهانی میشه!
دیگه فایروال هوشمند نمیفهمه که داری VPN میزنی، چون از دیدش، تو داری به یه سرور داخلی وصل میشی.
🧠 چرا بهش میگن "تونل هوایی"؟
چون از یه طرف ورودیاش از ایرانه (زمینی)، ولی خروجیش از استارلینک رد میشه (هوایی). یعنی ترافیکت پَر میکشه و بدون اینکه ردپا از خودش بزاره، از بالا رد میشه. یه جورایی میشه گفت:
سوار یه تاکسی پراید میشی اولش و چند لحظه بعد داخل بوگاتی ویرون نشستی داری گاز میدی
🛠 چی لازم داره؟ (سطح فنی بالا)
دسترسی به استارلینک (واضحه!)
آیپی استاتیک داخل ایران (مثلاً از یه دیتاسنتر یا حتی بعضی خطوط خاص اینترنت ثابت)
سرور با دوتا کارت شبکه (یا یه روتر دوگانه)
دانش شبکه، تنظیمات NAT و Routing Policy
🚫 قابل خرید برای مردم عادی نیست؟
نه، فعلاً این بیشتر یه روش زیرمیزی برای افرادیه که یا توی دیتاسنتر کار میکنن، یا دسترسی به استارلینک دارن. ولی اگه یه روزی شبکهی استارلینک بهطور رسمی به ایران یا اطرافش بیاد، ممکنه این روشها گستردهتر شن.
🧩 چرا فایروال نمیفهمه؟
چون:
1. آیپی مقصد توی ایران تعریف شده.
2. ترافیکت رمزنگاریشدهست ولی شبیه ترافیک داخلی.
3. خروج نهایی از استارلینکه، جایی که فیلترینگ ایران دستش نمیرسه.
@Im_F3ri
تو این روزا که اینترنت بینالملل شده یه چیز لوکس و فانتزی، خیلیا دیگه به این فکر میکنن که «اگه همه چی ملی شد، چی میشه؟!» خب، اینجاست که پای یه روش زیرزمینی و باحال وسط میاد: تونل هوایی ملیشکن!
🛰 یه نگاه به سناریو:
فرض کن یه نفر که دستش به استارلینک میرسه (مثلاً همون آقای جاسوس معروف)، میاد یه دیش استارلینک تو ایران میزاره. این دیش مستقیماً از ماهواره اینترنت بینالملل میگیره — بدون سانسور، بدون فیلتر.
حالا این آدم زرنگ، با یه IP استاتیک ایران و دوتا کارت شبکه، یه جادو میکنه:
1. یکی از کارت شبکهها به استارلینکه (اینترنت آزاد)
2. اون یکی به شبکه داخلی ایرانه (مثلاً اینترنت همراه اول یا ایرانسل شما)
3. میاد با یه ابزار مثل SoftEther VPN Server یا حتی SSH، یه VPN سرور راه میندازه روی این گیتوی
4. حالا ترافیک شما، که از موبایلت به سمت یه IP داخل ایران (مثلاً روی ایرانسل) میره، وارد این تونل میشه، و اون سمت، از طریق استارلینک میره تو دل اینترنت آزاد!
📶 چه سودی داره این مدل؟
چون شما داری به یه آیپی ایران وصل میشی، اینترنت ملی بهت اجازه اتصال میده.
چون اون سرِ اتصال به استارلینکه، ترافیکت وارد نت جهانی میشه!
دیگه فایروال هوشمند نمیفهمه که داری VPN میزنی، چون از دیدش، تو داری به یه سرور داخلی وصل میشی.
🧠 چرا بهش میگن "تونل هوایی"؟
چون از یه طرف ورودیاش از ایرانه (زمینی)، ولی خروجیش از استارلینک رد میشه (هوایی). یعنی ترافیکت پَر میکشه و بدون اینکه ردپا از خودش بزاره، از بالا رد میشه. یه جورایی میشه گفت:
سوار یه تاکسی پراید میشی اولش و چند لحظه بعد داخل بوگاتی ویرون نشستی داری گاز میدی
🛠 چی لازم داره؟ (سطح فنی بالا)
دسترسی به استارلینک (واضحه!)
آیپی استاتیک داخل ایران (مثلاً از یه دیتاسنتر یا حتی بعضی خطوط خاص اینترنت ثابت)
سرور با دوتا کارت شبکه (یا یه روتر دوگانه)
دانش شبکه، تنظیمات NAT و Routing Policy
🚫 قابل خرید برای مردم عادی نیست؟
نه، فعلاً این بیشتر یه روش زیرمیزی برای افرادیه که یا توی دیتاسنتر کار میکنن، یا دسترسی به استارلینک دارن. ولی اگه یه روزی شبکهی استارلینک بهطور رسمی به ایران یا اطرافش بیاد، ممکنه این روشها گستردهتر شن.
🧩 چرا فایروال نمیفهمه؟
چون:
1. آیپی مقصد توی ایران تعریف شده.
2. ترافیکت رمزنگاریشدهست ولی شبیه ترافیک داخلی.
3. خروج نهایی از استارلینکه، جایی که فیلترینگ ایران دستش نمیرسه.
@Im_F3ri
❤2🤓1
فایروال چیست؟
فایروال یا دیواره آتش ( Firewall ) به نرمافزار یا سختافزارهایی گفته میشود که از دسترسی به کامپیوترها جلوگیری کرده و ترافیک رد و بدل شده در شبکه را کنترل میکند. فایروال در حقیقت یک ابزار امنیتی است که میتواند یک برنامهی نرمافزاری یا یک دستگاه اختصاصی شبکه باشد.
هدف استفاده از فایروال چیست؟
هدف اصلی فایرول جداسازی یک دادهی امن از ناحیهی ناامن و کنترل ارتباطات بین این دو است. فایروال میتواند کارهای دیگری نیز انجام دهد اما عمدتاً مسئول کنترل ارتباطات ورودی و خروجی از یک دستگاه به شبکه است.
فایروالها از دسترسی غیر مجاز به شبکهی خصوصی جلوگیری کرده و یک چارچوب امنیتی جامع برای شبکهی شما هستند.
نحوهی عملکرد فایروال
فایروال با استفاده از یک دیوار کد، کامپیوتر شما را از اینترنت جدا میکند. فایروال هر دادهای که میخواهد به کامپیوتر شما وارد شود یا از آن خارج شود را کنترل میکند و بررسی میکند که آیا اجازهی عبور دارد یا باید مسدود شود؟
فایروال یکی از مهمترین لایههای امنیتی شبکههای کامپیوتری بوده و عدم استفاده از آن موجب میشود تا هکرها بهراحتی وارد شبکه یا کامپیوتر شخصی شما شده و بدون هیچ محدودیتی خرابکاریهای خود را انجام دهند.
فایروال در حقیقت فیلتری است که دادهها باید از آن عبور کنند. یک خانه را تصور کنید که افرادی که میخواهند به آن وارد شوند یا از آن خروج کنند باید از درب خانه عبور کنند. محل قرارگیری فایروال در درب ورود و خروج دادهها از کامپیوتر یعنی (Gateway) است.
@softwrteach
------------------------
🌐💻
فایروال یا دیواره آتش ( Firewall ) به نرمافزار یا سختافزارهایی گفته میشود که از دسترسی به کامپیوترها جلوگیری کرده و ترافیک رد و بدل شده در شبکه را کنترل میکند. فایروال در حقیقت یک ابزار امنیتی است که میتواند یک برنامهی نرمافزاری یا یک دستگاه اختصاصی شبکه باشد.
هدف استفاده از فایروال چیست؟
هدف اصلی فایرول جداسازی یک دادهی امن از ناحیهی ناامن و کنترل ارتباطات بین این دو است. فایروال میتواند کارهای دیگری نیز انجام دهد اما عمدتاً مسئول کنترل ارتباطات ورودی و خروجی از یک دستگاه به شبکه است.
فایروالها از دسترسی غیر مجاز به شبکهی خصوصی جلوگیری کرده و یک چارچوب امنیتی جامع برای شبکهی شما هستند.
نحوهی عملکرد فایروال
فایروال با استفاده از یک دیوار کد، کامپیوتر شما را از اینترنت جدا میکند. فایروال هر دادهای که میخواهد به کامپیوتر شما وارد شود یا از آن خارج شود را کنترل میکند و بررسی میکند که آیا اجازهی عبور دارد یا باید مسدود شود؟
فایروال یکی از مهمترین لایههای امنیتی شبکههای کامپیوتری بوده و عدم استفاده از آن موجب میشود تا هکرها بهراحتی وارد شبکه یا کامپیوتر شخصی شما شده و بدون هیچ محدودیتی خرابکاریهای خود را انجام دهند.
فایروال در حقیقت فیلتری است که دادهها باید از آن عبور کنند. یک خانه را تصور کنید که افرادی که میخواهند به آن وارد شوند یا از آن خروج کنند باید از درب خانه عبور کنند. محل قرارگیری فایروال در درب ورود و خروج دادهها از کامپیوتر یعنی (Gateway) است.
@softwrteach
------------------------
🌐💻
💋1
code crafter 🚀
اسم یک سایت جدید توی زمینه اموزش برنامه نویسی
به پیشنهاد یکی از دوستان یه سری به این سایت زدم صرفا جهت کنجکاوی
و حالا چند روزی هست که دیگه حسااابی درگیرش شدم
سیستم CodeCrfter یه پلتفرم نیست که فقط تئوری بخواد پیش بره. اینجا شما رو مستقیم میبره سراغ پیادهسازی ابزارهای واقعی و اوپن سورس دنیای نرمافزار مثل Git، Redis و Kafka.
روش کارشون اینجوریه که هر ابزار رو به تسکهای مرحلهای تقسیم کردن. مثلاً برای Git هفت تا تسک مشخص شده. شما با زبان برنامهنویسی دلخواهتون، کد مربوط به هر مرحله رو از صفر مینویسید و در مخزن (Repository) اختصاصی خودتون تو گیت سایت، پوش میکنید. اگه تستهای خودکار سایت موفقیتآمیز باشه، میتونید برید مرحله بعد.
یکی از بهترین بخشهای این سیستم اینه که بعد از هر مرحله، میتونید کدهای سایر کاربرها رو هم ببینید و از رویکردهای مختلف یاد بگیرید. این یعنی یک یادگیری عملی و جامعهمحور.
این سبک آموزشی که تمرکز رو روی پیادهسازی واقعی و مهندسی نرمافزار گذاشته، باعث میشه مفاهیم رو عمیقتر یاد بگیری و به جای حفظ کردن، واقعاً ساختن رو تجربه کنی.
https://codecrafters.io/
یه سری بهش بزنید😉
@softwrteach
------------------------
🌐💻
اسم یک سایت جدید توی زمینه اموزش برنامه نویسی
به پیشنهاد یکی از دوستان یه سری به این سایت زدم صرفا جهت کنجکاوی
و حالا چند روزی هست که دیگه حسااابی درگیرش شدم
سیستم CodeCrfter یه پلتفرم نیست که فقط تئوری بخواد پیش بره. اینجا شما رو مستقیم میبره سراغ پیادهسازی ابزارهای واقعی و اوپن سورس دنیای نرمافزار مثل Git، Redis و Kafka.
روش کارشون اینجوریه که هر ابزار رو به تسکهای مرحلهای تقسیم کردن. مثلاً برای Git هفت تا تسک مشخص شده. شما با زبان برنامهنویسی دلخواهتون، کد مربوط به هر مرحله رو از صفر مینویسید و در مخزن (Repository) اختصاصی خودتون تو گیت سایت، پوش میکنید. اگه تستهای خودکار سایت موفقیتآمیز باشه، میتونید برید مرحله بعد.
یکی از بهترین بخشهای این سیستم اینه که بعد از هر مرحله، میتونید کدهای سایر کاربرها رو هم ببینید و از رویکردهای مختلف یاد بگیرید. این یعنی یک یادگیری عملی و جامعهمحور.
این سبک آموزشی که تمرکز رو روی پیادهسازی واقعی و مهندسی نرمافزار گذاشته، باعث میشه مفاهیم رو عمیقتر یاد بگیری و به جای حفظ کردن، واقعاً ساختن رو تجربه کنی.
https://codecrafters.io/
یه سری بهش بزنید😉
@softwrteach
------------------------
🌐💻
CodeCrafters
The Software Pro's Best Kept Secret.
Real-world proficiency projects designed for experienced engineers. Develop software craftsmanship by recreating popular devtools from scratch.
🔥2🍌1
امروز داشتم برای استارت یک پروژه کراولر روی اینستاگرام تحقیق میکردم که به چند تا مورد باحال (و البته چالشبرانگیز!) برخوردم. هدفم این بود که بتونم یه تعدادی از کامنت آخر هر پست اینستاگرام رو استخراج کنم. اولش فکر کردم کار سادهایه، اما اینستاگرام خیلی هوشمندانهتر از این حرفاست! (راستش دست کم گرفته بودمش😅)
چرا Scrapy یا BeautifulSoup اینجا کار نمیکنند؟ 🚧
وقتی شروع به کار کردم، سراغ ابزارهای معمولم یعنی Scrapy و BeautifulSoup رفتم. اینها برای وبسایتهای معمولی که محتواشون مستقیماً توی کد HTML هست، فوقالعادهان. اما اینستاگرام یه جور دیگهست! وقتی یه لینک پست اینستاگرام رو باز میکنیم (حتی بدون اینکه لاگین باشیم)، فقط یه نمای کلی از پست رو میبینیم و برای دیدن همه کامنتها، ازمون میخواد لاگین کنیم یا محتوا با جاوااسکریپت به صورت پویا بارگذاری میشه.
اینجاست که Scrapy و BeautifulSoup به مشکل برمیخورن. اونا نمیتونن جاوااسکریپت رو اجرا کنن یا مراحل لاگین رو شبیهسازی کنن(البته میشه یه کارهایی روش انجام داد اماااا...). در واقع، اونا فقط HTML خام صفحه رو میبینن، قبل از اینکه کامنتها اصلاً بارگذاری بشن. برای همین، هرچی تلاش کردم، نتونستم با این ابزارها به کامنتها دسترسی پیدا کنم. 🤦♂️
چاره چی بود؟ سلنیوم (Selenium)! 🚀
بعد از کمی تحقیق، فهمیدم باید سراغ Selenium برم. سلنیوم یه مرورگر واقعی رو شبیهسازی میکنه (مثل کروم یا فایرفاکس) و میتونه جاوااسکریپت رو اجرا کنه. این یعنی میتونم بهش بگم وارد اکانتم بشه، به صفحه پست مورد نظر بره و بعد صبر کنه تا کامنتها بارگذاری بشن و بعد شروع به جمعآوری اطلاعات کنه.
گام بعدی ساخت اکانت مخصوص و ریسکهایش! 😬
تصمیم گرفتم یه اکانت اینستاگرام جدید، فقط برای همین پروژه بسازم. اما اینجا یه نکته مهم هست: حتی با Selenium و اکانت جداگانه، اینستاگرام به شدت با رباتها مبارزه میکنه و احتمال مسدود شدن اکانت شما بالاست! چرا؟ به چند دلیل اصلی:
1-فعالیت بیش از حد و غیرطبیعی (Rate Limiting):
اگه ربات من خیلی سریع و پشت سر هم کار کنه (مثلاً دهها پست رو در عرض چند دقیقه بررسی کنه)، اینستاگرام فوراً مشکوک میشه. کاربران واقعی اینقدر سریع نیستن!
راهحل: باید تأخیرهای تصادفی بین هر عملیات بذارم (مثلاً ۳ تا ۱۰ ثانیه مکث بین اسکرولها یا کلیکها) و بعد از یه تعداد مشخص پست، یه استراحت طولانیتر (مثلاً ۵ تا ۱۵ دقیقه) به ربات بدم. اینجوری کمتر شبیه ربات به نظر میرسم. 😴
2-شناسایی شدن به عنوان ربات (WebDriver Detection):
اینستاگرام میتونه تشخیص بده که دارم از یه مرورگر اتوماتیک استفاده میکنم. رفتارهای رباتیک مثل عدم حرکت ماوس، اسکرولهای خیلی یکنواخت و کلیکهای کاملاً دقیق و سریع، منو لو میدن.
راهحل: باید سعی کنم رفتارهای انسانی رو شبیهسازی کنم؛ مثلاً حرکت تصادفی ماوس، اسکرولهای متغیر (گاهی تند، گاهی کند) و حتی گاهی روی عناصر بیربط کلیک کنم. همچنین باید اکانتی که میسازم، کاملاً طبیعی به نظر بیاد (عکس پروفایل، چند تا پست و فالوور واقعی داشته باشه).
3-استفاده از IPهای مشکوک یا ثابت:
اگه تمام درخواستها از یه آدرس IP ثابت (مخصوصاً اگه IP سرور باشه) ارسال بشن، اینستاگرام خیلی سریع اون IP رو بلاک میکنه.
راهحل: باید از پروکسیهای چرخشی (Proxy Rotation) استفاده کنم، مخصوصاً پروکسیهای Residential که شبیه IP کاربران واقعی هستن. 🌐
4-عدم مدیریت خطا و کپچا:
اگه ربات من خطاهایی مثل "Rate Limit Exceeded" رو نادیده بگیره یا نتونه کپچاها (reCAPTCHA) رو حل کنه، به سرعت اکانت رو مسدود میکنه.
راهحل: باید برنامهام رو جوری بنویسم که در صورت بروز خطا، مکث طولانیتر یا تعویض پروکسی رو انجام بده. برای کپچا هم ممکنه نیاز به استفاده از سرویسهای آنلاین حل کپچا داشته باشم.
در کل، کار جالبیه، اما باید با احتیاط زیاد انجامش بشه. اسکرپینگ از اینستاگرام، حتی با Selenium، یک بازی موش و گربه مداومه! اینستاگرام همیشه داره روشهای تشخیص رباتها رو بهتر میکنه. برای همین، مسدود شدن اکانت من، حتی با رعایت همه این نکات، یه احتمال جدیه.
بهترین و امنترین راه (البته پولی)که من تا الان پیدا کردم، استفاده از APIهای قانونی شرکتهای شخص ثالثه که خودشون تمام این پیچیدگیها و ریسکها رو پوشش میدن.
@softwrteach
------------------------
🌐💻
چرا Scrapy یا BeautifulSoup اینجا کار نمیکنند؟ 🚧
وقتی شروع به کار کردم، سراغ ابزارهای معمولم یعنی Scrapy و BeautifulSoup رفتم. اینها برای وبسایتهای معمولی که محتواشون مستقیماً توی کد HTML هست، فوقالعادهان. اما اینستاگرام یه جور دیگهست! وقتی یه لینک پست اینستاگرام رو باز میکنیم (حتی بدون اینکه لاگین باشیم)، فقط یه نمای کلی از پست رو میبینیم و برای دیدن همه کامنتها، ازمون میخواد لاگین کنیم یا محتوا با جاوااسکریپت به صورت پویا بارگذاری میشه.
اینجاست که Scrapy و BeautifulSoup به مشکل برمیخورن. اونا نمیتونن جاوااسکریپت رو اجرا کنن یا مراحل لاگین رو شبیهسازی کنن(البته میشه یه کارهایی روش انجام داد اماااا...). در واقع، اونا فقط HTML خام صفحه رو میبینن، قبل از اینکه کامنتها اصلاً بارگذاری بشن. برای همین، هرچی تلاش کردم، نتونستم با این ابزارها به کامنتها دسترسی پیدا کنم. 🤦♂️
چاره چی بود؟ سلنیوم (Selenium)! 🚀
بعد از کمی تحقیق، فهمیدم باید سراغ Selenium برم. سلنیوم یه مرورگر واقعی رو شبیهسازی میکنه (مثل کروم یا فایرفاکس) و میتونه جاوااسکریپت رو اجرا کنه. این یعنی میتونم بهش بگم وارد اکانتم بشه، به صفحه پست مورد نظر بره و بعد صبر کنه تا کامنتها بارگذاری بشن و بعد شروع به جمعآوری اطلاعات کنه.
گام بعدی ساخت اکانت مخصوص و ریسکهایش! 😬
تصمیم گرفتم یه اکانت اینستاگرام جدید، فقط برای همین پروژه بسازم. اما اینجا یه نکته مهم هست: حتی با Selenium و اکانت جداگانه، اینستاگرام به شدت با رباتها مبارزه میکنه و احتمال مسدود شدن اکانت شما بالاست! چرا؟ به چند دلیل اصلی:
1-فعالیت بیش از حد و غیرطبیعی (Rate Limiting):
اگه ربات من خیلی سریع و پشت سر هم کار کنه (مثلاً دهها پست رو در عرض چند دقیقه بررسی کنه)، اینستاگرام فوراً مشکوک میشه. کاربران واقعی اینقدر سریع نیستن!
راهحل: باید تأخیرهای تصادفی بین هر عملیات بذارم (مثلاً ۳ تا ۱۰ ثانیه مکث بین اسکرولها یا کلیکها) و بعد از یه تعداد مشخص پست، یه استراحت طولانیتر (مثلاً ۵ تا ۱۵ دقیقه) به ربات بدم. اینجوری کمتر شبیه ربات به نظر میرسم. 😴
2-شناسایی شدن به عنوان ربات (WebDriver Detection):
اینستاگرام میتونه تشخیص بده که دارم از یه مرورگر اتوماتیک استفاده میکنم. رفتارهای رباتیک مثل عدم حرکت ماوس، اسکرولهای خیلی یکنواخت و کلیکهای کاملاً دقیق و سریع، منو لو میدن.
راهحل: باید سعی کنم رفتارهای انسانی رو شبیهسازی کنم؛ مثلاً حرکت تصادفی ماوس، اسکرولهای متغیر (گاهی تند، گاهی کند) و حتی گاهی روی عناصر بیربط کلیک کنم. همچنین باید اکانتی که میسازم، کاملاً طبیعی به نظر بیاد (عکس پروفایل، چند تا پست و فالوور واقعی داشته باشه).
3-استفاده از IPهای مشکوک یا ثابت:
اگه تمام درخواستها از یه آدرس IP ثابت (مخصوصاً اگه IP سرور باشه) ارسال بشن، اینستاگرام خیلی سریع اون IP رو بلاک میکنه.
راهحل: باید از پروکسیهای چرخشی (Proxy Rotation) استفاده کنم، مخصوصاً پروکسیهای Residential که شبیه IP کاربران واقعی هستن. 🌐
4-عدم مدیریت خطا و کپچا:
اگه ربات من خطاهایی مثل "Rate Limit Exceeded" رو نادیده بگیره یا نتونه کپچاها (reCAPTCHA) رو حل کنه، به سرعت اکانت رو مسدود میکنه.
راهحل: باید برنامهام رو جوری بنویسم که در صورت بروز خطا، مکث طولانیتر یا تعویض پروکسی رو انجام بده. برای کپچا هم ممکنه نیاز به استفاده از سرویسهای آنلاین حل کپچا داشته باشم.
در کل، کار جالبیه، اما باید با احتیاط زیاد انجامش بشه. اسکرپینگ از اینستاگرام، حتی با Selenium، یک بازی موش و گربه مداومه! اینستاگرام همیشه داره روشهای تشخیص رباتها رو بهتر میکنه. برای همین، مسدود شدن اکانت من، حتی با رعایت همه این نکات، یه احتمال جدیه.
بهترین و امنترین راه (البته پولی)که من تا الان پیدا کردم، استفاده از APIهای قانونی شرکتهای شخص ثالثه که خودشون تمام این پیچیدگیها و ریسکها رو پوشش میدن.
@softwrteach
------------------------
🌐💻
🎃1
What the f*ck Python! 😱
یکی از مقاله های باحالی بود که توی چند روز گذشته خوندمش
اموزش پایتون با تکه کدهای جالب و کارامد
روش باحالی بود برای درک برنامه نویس و کدینگ
من که باهاش حال کردم
لینک مقاله:
https://github.com/satwikkansal/wtfpython
@softwrteach
------------------------
🌐💻
یکی از مقاله های باحالی بود که توی چند روز گذشته خوندمش
اموزش پایتون با تکه کدهای جالب و کارامد
روش باحالی بود برای درک برنامه نویس و کدینگ
من که باهاش حال کردم
لینک مقاله:
https://github.com/satwikkansal/wtfpython
@softwrteach
------------------------
🌐💻
GitHub
GitHub - satwikkansal/wtfpython: What the f*ck Python? 😱
What the f*ck Python? 😱. Contribute to satwikkansal/wtfpython development by creating an account on GitHub.
👍1👌1🐳1
یه توضیح خیلی باحال از روند باز کردن google.com
تو این مقاله اومدن خیلی ریز و دقیق از اون سیگنالی که وقتی g رو فشار دادید که از کیبورد ساخته میشه تا رندر شدن صفحه توسط GPU داستان جالبیه
github.com/alex/what-happens-when
حوصله میخواد خوندنش😅
اما باحال بود مخصوصا اینکه به صورت پیوسته و مرحله به مرحله دقیق توضیح داده
@softwrteach
------------------------
🌐💻
تو این مقاله اومدن خیلی ریز و دقیق از اون سیگنالی که وقتی g رو فشار دادید که از کیبورد ساخته میشه تا رندر شدن صفحه توسط GPU داستان جالبیه
github.com/alex/what-happens-when
حوصله میخواد خوندنش😅
اما باحال بود مخصوصا اینکه به صورت پیوسته و مرحله به مرحله دقیق توضیح داده
@softwrteach
------------------------
🌐💻
GitHub
GitHub - alex/what-happens-when: An attempt to answer the age old interview question "What happens when you type google.com into…
An attempt to answer the age old interview question "What happens when you type google.com into your browser and press enter?" - alex/what-happens-when
😇1
یه مفهوم جدید که این روزا حسابی تو دنیای نرمافزار و برنامهنویسی سر و صدا کرده، Vibe Coding عه
این مفهوم که جدیدا با اومدن هوش مصنوعیهای مولد مثل Gemini، ChatGPT و Copilot معنی پیدا کرده و خیلیها دارن ازش حرف میزنن.
خب Vibe Coding دقیقاً چیه؟ 🤔
خیلی خلاصه و خودمونی بگم Vibe Coding یعنی شما پادشاه کدنویسیاید، ولی با کمک LLMها و هوش مصنوعی! 🤖
این رویکرد جدید اینطوریه که به جای اینکه از صفر تا صد یه برنامه رو خودمون کد بزنیم، ایدههامون رو با زبون خودمون (فارسی، انگلیسی، فرقی نداره!) به یه مدل زبانی بزرگ (مثل ChatGPT یا Gemini) میگیم. (یه جورایی همون پرامپت اولیه رو میدیم.) بعدش هم با کمک خود AI، کد رو هی بهتر و بهتر میکنیم. 😅
بقول بعضی از دوستان اینقدررر میزنیم تو سرش تا چیزی که میخوایم رو بهمون بده! 😂😂
در واقع، Vibe Coding رو میشه این شکلی تعریف کرد که برنامهنویسی بدون داشتن دانش فنی عمیق و تماماً بر پایه هوش مصنوعی!
باگ خوردیم؟ چیکار کنیم؟
سؤال پیش میاد اگه به باگ خوردیم چطوری حلش کنیم؟ هیچی! باز دوباره فیکس کردن باگ رو به خود هوش مصنوعی میسپاریم. یا اینکه با اضافه کردن یه قابلیت جدید، سعی میکنیم اون باگ رو به یه شکلی دور بزنیم. (این دیگه برمیگرده به خلاقیت خودتون! )
انگار یه بازی پینگپنگ بین ما و هوش مصنوعی با هدف ساختن یه قطعه کد داریم.
کدوم ابزارها بهترن؟
با توجه به تجربه شخصی خودم، مدلهایی مثل Gemini و Canva Code برای این کار خروجی نسبتاً بهتری دارن. امتحانشون کنید!
کی از Vibe Coding استفاده کنیم و حواسمون به چی باشه؟
درسته که این روش خیلی سریع به یه مدل اولیه، طرح اولیه یا MVP (حداقل محصول قابل قبول) از ایدهمون میرسونتمون، اما باید به این نکته هم اشاره کنم که به همین ترتیب، درصد آسیبپذیری امنیتی بسیار بالایی داره.
یه مشکل دیگه اینه که چون کد رو ما ننوشتیم، درک درستی از کد نداریم و همین موضوع باعث میشه توسعههای بعدی یا رفع باگهای پیچیده خیلی سخت بشه و بیشتر مواقع، منجر به دوبارهکاری میشه.
پس، Vibe Coding بیشتر برای موقعهایی که صرفاً میخوایم یه مدل اولیه، طرح اولیه یا MVP از ایدهمون رو پیاده کنیم، برای کد های دم دستی و... عالیه.
@softwrteach
------------------------
🌐💻
#code
#vibe-coding
این مفهوم که جدیدا با اومدن هوش مصنوعیهای مولد مثل Gemini، ChatGPT و Copilot معنی پیدا کرده و خیلیها دارن ازش حرف میزنن.
خب Vibe Coding دقیقاً چیه؟ 🤔
خیلی خلاصه و خودمونی بگم Vibe Coding یعنی شما پادشاه کدنویسیاید، ولی با کمک LLMها و هوش مصنوعی! 🤖
این رویکرد جدید اینطوریه که به جای اینکه از صفر تا صد یه برنامه رو خودمون کد بزنیم، ایدههامون رو با زبون خودمون (فارسی، انگلیسی، فرقی نداره!) به یه مدل زبانی بزرگ (مثل ChatGPT یا Gemini) میگیم. (یه جورایی همون پرامپت اولیه رو میدیم.) بعدش هم با کمک خود AI، کد رو هی بهتر و بهتر میکنیم. 😅
بقول بعضی از دوستان اینقدررر میزنیم تو سرش تا چیزی که میخوایم رو بهمون بده! 😂😂
در واقع، Vibe Coding رو میشه این شکلی تعریف کرد که برنامهنویسی بدون داشتن دانش فنی عمیق و تماماً بر پایه هوش مصنوعی!
باگ خوردیم؟ چیکار کنیم؟
سؤال پیش میاد اگه به باگ خوردیم چطوری حلش کنیم؟ هیچی! باز دوباره فیکس کردن باگ رو به خود هوش مصنوعی میسپاریم. یا اینکه با اضافه کردن یه قابلیت جدید، سعی میکنیم اون باگ رو به یه شکلی دور بزنیم. (این دیگه برمیگرده به خلاقیت خودتون! )
انگار یه بازی پینگپنگ بین ما و هوش مصنوعی با هدف ساختن یه قطعه کد داریم.
کدوم ابزارها بهترن؟
با توجه به تجربه شخصی خودم، مدلهایی مثل Gemini و Canva Code برای این کار خروجی نسبتاً بهتری دارن. امتحانشون کنید!
کی از Vibe Coding استفاده کنیم و حواسمون به چی باشه؟
درسته که این روش خیلی سریع به یه مدل اولیه، طرح اولیه یا MVP (حداقل محصول قابل قبول) از ایدهمون میرسونتمون، اما باید به این نکته هم اشاره کنم که به همین ترتیب، درصد آسیبپذیری امنیتی بسیار بالایی داره.
یه مشکل دیگه اینه که چون کد رو ما ننوشتیم، درک درستی از کد نداریم و همین موضوع باعث میشه توسعههای بعدی یا رفع باگهای پیچیده خیلی سخت بشه و بیشتر مواقع، منجر به دوبارهکاری میشه.
پس، Vibe Coding بیشتر برای موقعهایی که صرفاً میخوایم یه مدل اولیه، طرح اولیه یا MVP از ایدهمون رو پیاده کنیم، برای کد های دم دستی و... عالیه.
@softwrteach
------------------------
🌐💻
#code
#vibe-coding
❤2👻1
سوال اصلی اینه MVT یا MVC ؟🤔
یکی از سوالات مهم توی بحث برنامه نویسی وب که همیشه پیش میاد و حتی میشه گفت پایه ثابت بعضی از جلسات مصاحبه هم هست همین mvt و mvc عه
به طور خلاصه mvt و mvc دو الگوی معماری مهم و پرطرفدار توی برنامه نویسی وب و مهندسی نرم افزار به شمار میره
میشه گفت MVCیا همون (Model-View-Controller)یک الگوی کلاسیک:
این الگوی کلاسیک و پرکاربرد که برنامه رو به سه بخش اصلی تقسیم میکنه
(مدل) Model :
کارش چیه؟ مدیریت دادهها و منطق دیتابیس. یعنی هرچیزی که مربوط به دیتابیس (مثل ذخیره و خوندن اطلاعات) و قوانین اصلی برنامه (مثل اعتبارسنجی و...) باشه، توی مدل انجام میشه.
ویژگی مهم: مدل از View و Controller بیخبره و فقط روی دادهها تمرکز داره.
(نما) View :
کارش چیه؟ مسئول نمایش رابط کاربری (UI) به کاربره. شامل کدای HTML, CSS و JavaScript میشه و فقط اطلاعاتی که از Controller میگیره رو نشون میده.
ویژگی مهم: View هیچ منطق پردازشی نداره و از Model و Controller بیخبره.
(کنترلر) Controller :
کارش چیه؟ نقش واسط و هماهنگکننده بین Model و View رو داره. درخواستهای کاربر (مثل کلیک روی دکمه) رو دریافت میکنه، با Model ارتباط میگیره تا دادهها رو آماده کنه، بعد تصمیم میگیره کدوم View با چه دادههایی به کاربر نشون داده بشه.
ویژگی مهم: Controller هم از Model و هم از View خبر داره و جریان برنامه رو مدیریت میکنه.
یه تعداد از فریمورکهای معروفی که با این معمازی کار میکنن: Laravel (PHP), Ruby on Rails (Ruby), ASP.NET MVC (C#)
مورد دوم MVT یا (Model-View-Template) رویکرد جنگو:
این معماری مخصوص فریمورک جنگو (Django) توی پایتونه. خیلی شبیه MVC هست، اما با یه تغییر توی نقشها و اسمها:
(مدل) Model :
کارش چیه؟ دقیقاً مثل مدل توی MVC، مدیریت دادهها و منطق کسبوکار رو بر عهده داره و با دیتابیس کار میکنه.
(نما در MVT) View :
کارش چیه؟ توی توی جنگو "View" همون کاری رو میکنه که "Controller" توی MVC انجام میده. یعنی درخواستهای کاربر رو پردازش میکنه، با Model ارتباط میگیره و تصمیم میگیره که کدوم Template باید نشون داده بشه.
ویژگی مهم: View در جنگو مسئول منطق پردازش و هماهنگیه.
(قالب) Template :
کارش چیه؟ این همون چیزیه که توی MVC بهش "View" میگفتیم. مسئول نمایش رابط کاربری به کاربره و شامل فایلهای HTML میشه که دادههای پویا رو از View دریافت میکنه.
ویژگی مهم: Templateها هیچ منطق کسبوکاری ندارن و فقط برای نمایش استفاده میشن.
اما تفاوتهای کلیدی :🔑
1 - نقش view :
توی MVC صرفاً نمایش دهنده UI.
اما در MVT مدیریت منطق برنامه و درخواستها (همون نقش Controller توی MVC).
2- نقش controller :
درون MVC یک جزء مشخص و صریح که جریان رو کنترل میکنه.
اما برای MVT جنگو خودش بخش بزرگی از وظایف Controller رو به صورت داخلی مدیریت میکنه و بقیهاش رو به "View" (در مفهوم جنگو) محول میکنه. یعنی یک Controller جدا و صریح نداریم.
@softwrteach
------------------------
🌐💻
#programming
#architecture
یکی از سوالات مهم توی بحث برنامه نویسی وب که همیشه پیش میاد و حتی میشه گفت پایه ثابت بعضی از جلسات مصاحبه هم هست همین mvt و mvc عه
به طور خلاصه mvt و mvc دو الگوی معماری مهم و پرطرفدار توی برنامه نویسی وب و مهندسی نرم افزار به شمار میره
میشه گفت MVCیا همون (Model-View-Controller)یک الگوی کلاسیک:
این الگوی کلاسیک و پرکاربرد که برنامه رو به سه بخش اصلی تقسیم میکنه
(مدل) Model :
کارش چیه؟ مدیریت دادهها و منطق دیتابیس. یعنی هرچیزی که مربوط به دیتابیس (مثل ذخیره و خوندن اطلاعات) و قوانین اصلی برنامه (مثل اعتبارسنجی و...) باشه، توی مدل انجام میشه.
ویژگی مهم: مدل از View و Controller بیخبره و فقط روی دادهها تمرکز داره.
(نما) View :
کارش چیه؟ مسئول نمایش رابط کاربری (UI) به کاربره. شامل کدای HTML, CSS و JavaScript میشه و فقط اطلاعاتی که از Controller میگیره رو نشون میده.
ویژگی مهم: View هیچ منطق پردازشی نداره و از Model و Controller بیخبره.
(کنترلر) Controller :
کارش چیه؟ نقش واسط و هماهنگکننده بین Model و View رو داره. درخواستهای کاربر (مثل کلیک روی دکمه) رو دریافت میکنه، با Model ارتباط میگیره تا دادهها رو آماده کنه، بعد تصمیم میگیره کدوم View با چه دادههایی به کاربر نشون داده بشه.
ویژگی مهم: Controller هم از Model و هم از View خبر داره و جریان برنامه رو مدیریت میکنه.
یه تعداد از فریمورکهای معروفی که با این معمازی کار میکنن: Laravel (PHP), Ruby on Rails (Ruby), ASP.NET MVC (C#)
مورد دوم MVT یا (Model-View-Template) رویکرد جنگو:
این معماری مخصوص فریمورک جنگو (Django) توی پایتونه. خیلی شبیه MVC هست، اما با یه تغییر توی نقشها و اسمها:
(مدل) Model :
کارش چیه؟ دقیقاً مثل مدل توی MVC، مدیریت دادهها و منطق کسبوکار رو بر عهده داره و با دیتابیس کار میکنه.
(نما در MVT) View :
کارش چیه؟ توی توی جنگو "View" همون کاری رو میکنه که "Controller" توی MVC انجام میده. یعنی درخواستهای کاربر رو پردازش میکنه، با Model ارتباط میگیره و تصمیم میگیره که کدوم Template باید نشون داده بشه.
ویژگی مهم: View در جنگو مسئول منطق پردازش و هماهنگیه.
(قالب) Template :
کارش چیه؟ این همون چیزیه که توی MVC بهش "View" میگفتیم. مسئول نمایش رابط کاربری به کاربره و شامل فایلهای HTML میشه که دادههای پویا رو از View دریافت میکنه.
ویژگی مهم: Templateها هیچ منطق کسبوکاری ندارن و فقط برای نمایش استفاده میشن.
اما تفاوتهای کلیدی :🔑
1 - نقش view :
توی MVC صرفاً نمایش دهنده UI.
اما در MVT مدیریت منطق برنامه و درخواستها (همون نقش Controller توی MVC).
2- نقش controller :
درون MVC یک جزء مشخص و صریح که جریان رو کنترل میکنه.
اما برای MVT جنگو خودش بخش بزرگی از وظایف Controller رو به صورت داخلی مدیریت میکنه و بقیهاش رو به "View" (در مفهوم جنگو) محول میکنه. یعنی یک Controller جدا و صریح نداریم.
@softwrteach
------------------------
🌐💻
#programming
#architecture
🔥1🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
یکی از بهترین ویدیو های بصری نحوه عملکرد LLM ها
حین دیدنش قشنگ خاطرات یکی دو سال از دوران دانشگاه از جلو چشمم رد شد😅
@softwrteach
------------------------
🌐💻
حین دیدنش قشنگ خاطرات یکی دو سال از دوران دانشگاه از جلو چشمم رد شد😅
@softwrteach
------------------------
🌐💻
❤2🌭1
یکی از مهم ترین بخش های دولاپ یک پروژه انتخاب مناسب ترین دیتابیس با توجه به نیازها و فیچر های پروژه ست! PostgreSQL یکی از اون دیتابیسهای پرطرفداره که به خاطر قابلیتهای باحالش تو خیلی از پروژهها استفاده میشه. یکی از این قابلیتهای خفن، MVCC یا همون Multiversion Concurrency Control (کنترل همزمانی چندنسخهای)عه.
حالا این MVCC چیه و چرا انقدر مهمه؟
خب MVCC یه جور مکانیزمه که تو دیتابیسها کمک میکنه چند تا تراکنش (Transaction) بتونن همزمان روی دادهها کار کنن، بدون اینکه به هم گیر بدن یا دادهها قفل بشن! به جای اینکه دادهها رو کامل قفل کنه، MVCC نسخههای مختلف دادهها رو نگه میداره. اینجوری هر تراکنش میتونه مستقل کارشو انجام بده.
هدف اصلی MVCC چیه؟
🌟 همزمانی بالا: چند تا کاربر بتونن همزمان بخونن و بنویسن.
🔓 بدون قفل اضافی: خوندن دادهها جلوی نوشتن رو نگیره و برعکس.
✅ دادههای معتبر: هر تراکنش دادههای درست و سازگار ببینه.
خب MVCC چطور کار میکنه ؟
بهتره بگیم MVCC با درست کردن نسخههای مختلف (Snapshots) از دادهها برای هر تراکنش کار میکنه. حالا این یعنی چی؟ بریم قدم به قدم توضیح بدیم:
۱. ساختن نسخههای داده
هر وقت یه تراکنش دادهای رو تغییر بده (مثل INSERT، UPDATE یا DELETE)، PostgreSQL یه نسخه جدید از داده میسازه.
نسخه قدیمی دادهها نگه داشته میشه تا بقیه تراکنشهایی که بهش نیاز دارن، بتونن ازش استفاده کنن.
۲. شناسه تراکنش (Transaction ID)
هر تراکنش یه شناسه منحصربهفرد (XID) میگیره.
هر ردیف تو جدول اطلاعاتی مثل xmin (تراکنشی که ردیف رو ساخته) و xmax (تراکنشی که ردیف رو حذف یا آپدیت کرده) داره.
این اطلاعات به PostgreSQL میگه کدوم نسخه از داده برای یه تراکنش خاص قابل دیدنه.
۳. فرایند Snapshot Isolation
وقتی یه تراکنش شروع میشه، PostgreSQL یه Snapshot از دیتابیس میگیره که نشون میده دادهها تو اون لحظه چه شکلیان.
دادههایی که قبل از شروع تراکنش ثبت شدن و هنوز فعالن (Committed)، قابل دیدنن.
تغییراتی که بعد از شروع تراکنش توسط بقیه اعمال بشن، برای این تراکنش دیده نمیشن.
۴. مدیریت read, write
📖 خوندن (Read): تراکنشها بدون قفل کردن دادهها رو میخونن، چون هر کدوم نسخهای از داده رو میبینن که با Snapshot خودشون جور درمیاد.
✍️ نوشتن (Write): وقتی دادهای تغییر میکنه، یه نسخه جدید ساخته میشه، ولی نسخه قدیمی برای بقیه تراکنشها هنوز در دسترسه.
این روش باعث میشه خوندن و نوشتن بدون گیر کردن همزمان انجام بشن.
۵. پاک کردن نسخههای قدیمی (Vacuuming)
چون MVCC نسخههای قدیمی دادهها رو نگه میداره، ممکنه دیسک پر بشه!
حالا PostgreSQL با یه فرآیند به اسم VACUUM نسخههای قدیمی و بلااستفاده (Dead Tuples) رو پاک میکنه تا فضای دیسک آزاد بشه.
باید مرتب VACUUM و ANALYZE رو اجرا کنی تا عملکرد دیتابیس رو فرم باشه! 🚀
@softwrteach
------------------------
🌐💻
#programming
#SQL
#PosgresSQL
حالا این MVCC چیه و چرا انقدر مهمه؟
خب MVCC یه جور مکانیزمه که تو دیتابیسها کمک میکنه چند تا تراکنش (Transaction) بتونن همزمان روی دادهها کار کنن، بدون اینکه به هم گیر بدن یا دادهها قفل بشن! به جای اینکه دادهها رو کامل قفل کنه، MVCC نسخههای مختلف دادهها رو نگه میداره. اینجوری هر تراکنش میتونه مستقل کارشو انجام بده.
هدف اصلی MVCC چیه؟
🌟 همزمانی بالا: چند تا کاربر بتونن همزمان بخونن و بنویسن.
🔓 بدون قفل اضافی: خوندن دادهها جلوی نوشتن رو نگیره و برعکس.
✅ دادههای معتبر: هر تراکنش دادههای درست و سازگار ببینه.
خب MVCC چطور کار میکنه ؟
بهتره بگیم MVCC با درست کردن نسخههای مختلف (Snapshots) از دادهها برای هر تراکنش کار میکنه. حالا این یعنی چی؟ بریم قدم به قدم توضیح بدیم:
۱. ساختن نسخههای داده
هر وقت یه تراکنش دادهای رو تغییر بده (مثل INSERT، UPDATE یا DELETE)، PostgreSQL یه نسخه جدید از داده میسازه.
نسخه قدیمی دادهها نگه داشته میشه تا بقیه تراکنشهایی که بهش نیاز دارن، بتونن ازش استفاده کنن.
۲. شناسه تراکنش (Transaction ID)
هر تراکنش یه شناسه منحصربهفرد (XID) میگیره.
هر ردیف تو جدول اطلاعاتی مثل xmin (تراکنشی که ردیف رو ساخته) و xmax (تراکنشی که ردیف رو حذف یا آپدیت کرده) داره.
این اطلاعات به PostgreSQL میگه کدوم نسخه از داده برای یه تراکنش خاص قابل دیدنه.
۳. فرایند Snapshot Isolation
وقتی یه تراکنش شروع میشه، PostgreSQL یه Snapshot از دیتابیس میگیره که نشون میده دادهها تو اون لحظه چه شکلیان.
دادههایی که قبل از شروع تراکنش ثبت شدن و هنوز فعالن (Committed)، قابل دیدنن.
تغییراتی که بعد از شروع تراکنش توسط بقیه اعمال بشن، برای این تراکنش دیده نمیشن.
۴. مدیریت read, write
📖 خوندن (Read): تراکنشها بدون قفل کردن دادهها رو میخونن، چون هر کدوم نسخهای از داده رو میبینن که با Snapshot خودشون جور درمیاد.
✍️ نوشتن (Write): وقتی دادهای تغییر میکنه، یه نسخه جدید ساخته میشه، ولی نسخه قدیمی برای بقیه تراکنشها هنوز در دسترسه.
این روش باعث میشه خوندن و نوشتن بدون گیر کردن همزمان انجام بشن.
۵. پاک کردن نسخههای قدیمی (Vacuuming)
چون MVCC نسخههای قدیمی دادهها رو نگه میداره، ممکنه دیسک پر بشه!
حالا PostgreSQL با یه فرآیند به اسم VACUUM نسخههای قدیمی و بلااستفاده (Dead Tuples) رو پاک میکنه تا فضای دیسک آزاد بشه.
باید مرتب VACUUM و ANALYZE رو اجرا کنی تا عملکرد دیتابیس رو فرم باشه! 🚀
@softwrteach
------------------------
🌐💻
#programming
#SQL
#PosgresSQL
🔥3❤1👨💻1
به هر کدوم از مدلهای معروف هوشمصنوعی 10هزار دلار دادن که ترید کنن و تا به امروز ChatGPT بدترین عملکرد رو داشته و پولش به حدود 3هزار دلار رسیده، از اون سمت هم DeepSeek بهترین عملکرد رو داشته و حدود 10 درصد سود کرده.
آمار لحظهایشون رو میتونید تو سایت زیر ببینید:
https://nof1.ai/
@softwrteach
------------------------
🌐💻
آمار لحظهایشون رو میتونید تو سایت زیر ببینید:
https://nof1.ai/
@softwrteach
------------------------
🌐💻
❤2🌭2⚡1🔥1🤣1👻1
واقعیت تلخ یادگیری برنامهنویسی (که هیچکس به شما نمیگوید)
همه میگویند یادگیری برنامهنویسی سرگرمکننده است.
آنها از «ساختن پروژههای خفن»، «گرفتن اولین شغل توسعهدهندگی» و «نوشتن کدهای زیبا» حرف میزنند.
اما واقعیت تلخ اینجاست:
بیشتر روزها، این کار گیجکننده، کلافهکننده و پر از شک و تردید است.
و این کاملاً طبیعی است.
چون یادگیری برنامهنویسی فقط مربوط به سینتکس (syntax) نیست، بلکه به صبر، شکست و دیدگاه مربوط میشود.
مبارزه اولیهای که هیچکس در مورد آن به شما هشدار نمیدهد
وقتی کدنویسی را شروع میکنید، تصور میکنید که قرار است اپلیکیشنهایی شبیه به آموزشها بسازید.
اما در عوض، ساعتها به مانیتور خیره میشوید و از خود میپرسید چرا حلقه (loop) شما اجرا نمیشود یا چرا وقتی «فقط یک خط را تغییر دادید» همهچیز خراب میشود.
شما یک خطا را ۱۰ بار در گوگل جستجو خواهید کرد.
یک جواب تکراری را در Stack Overflow بارها و بارها خواهید خواند.
کدی را کپی میکنید که کار میکند و اصلاً نمیدانید *چرا* کار میکند.
این شکست نیست.
این دقیقاً همان روشی است که تکتک توسعهدهندگان یاد میگیرند.
آموزشها شما را نجات نخواهند داد
همه ما «مرحله آموزش» را پشت سر میگذاریم.
یوتیوب تماشا میکنید، همراه با آن پیش میروید، و همهچیز عالی کار میکند تا زمانی که سعی میکنید خودتان چیزی بسازید.
آن وقت... هیچچیز منطقی به نظر نمیرسد.
این همان لحظهای است که بیشتر مردم جا میزنند.
چون فکر میکنند: «من ذاتاً در برنامهنویسی خوب نیستم.»
اما حقیقت این است...
شما با تماشای کدنویسی دیگران یاد نمیگیرید؛ شما با گیر کردن و پیدا کردن راه خروج (حل کردن مشکل) یاد میگیرید.
مرحله فلات (و اینکه چرا چیز خوبی است)
یک مرحله میانی عجیب وجود دارد که هیچکس در مورد آن صحبت نمیکند.
شما دیگر مبتدی نیستید، اما احساس پیشرفته بودن هم ندارید.
میتوانید چیزهایی بسازید... اما هنوز در کدبیس (codebase) شخص دیگری گم میشوید.
در آن مرحله احساس میکنید که در حال پیشرفت نیستید.
اما در واقع، هستید.
شما در حال ساختن «شهود» هستید؛ آن مهارت آرامی که به شما امکان میدهد کد را بخوانید، باگها را پیشبینی کنید و تصمیمات تمیزتری بگیرید.
این پیشرفت نامرئی است.
و فقط در صورتی خودش را نشان میدهد که ادامه دهید.
آنچه در لینکدین نمیبینید
مردم پست میگذارند: «همین الان اولین شغلم را به عنوان توسعهدهنده گرفتم 💪🏻»
چیزی که پست نمیکنند، آن ۸ ماه شک به خود قبل از آن است.
شبهایی که صرف دیباگ کردن شد.
لحظاتی که به ترک کردن فکر کردند.
«سندروم ایمپاستر» (Imposter Syndrome) که هرگز واقعاً از بین نمیرود.
اگر شما در آن مرحله هستید، کلافه، و از خود میپرسید که آیا این مسیر برای شما مناسب است، به یاد داشته باشید:
کسانی که موفق میشوند، باهوشترینها نیستند.
آنها فقط کسانی هستند که متوقف نشدند.
یادگیری واقعی این شکلی است
✅ خراب کردن چیزی که قبلاً کار میکرد
✅ ساعتها جستجو برای یافتن پاسخ
✅ فهمیدن اینکه یک چیز ساده و پایهای را اشتباه فهمیده بودید
✅ درست کردن آن و فهمیدن *چرایی* آن
این یعنی رشد.
این یعنی یادگیری برنامهنویسی.
جذاب نیست، اما واقعی است.
و این همان چیزی است که مبتدیان را به توسعهدهندگان تبدیل میکند.
چیزهایی که بیشتر از همه به من کمک کرد
چند عادت کوچک همهچیز را برای من تغییر داد:
- پروژههای کوچک بسازید. منتظر «ایده بزرگ» نمانید. فقط *هر چیزی* را بسازید.
- کد بد بنویسید. ماه آینده کد تمیزتری خواهید نوشت.
- کد دیگران را بخوانید. مثل سفر در زمان به مغز شخص دیگری است.
- استراحت کنید. گاهی اوقات فاصله گرفتن از کار، باگهای بیشتری را نسبت به تا دیروقت بیدار ماندن برطرف میکند.
یادگیری برنامهنویسی یک ماراتن است، نه یک هکاتون.
نکات پایانی (از یک توسعهدهنده به توسعهدهنده دیگر)
اگر در حال تقلا برای یادگیری هستید، لطفاً بدانید که عقب نیستید.
هیچ جدول زمانی، هیچ خط پایانی و هیچ «راه درست» واحدی برای یادگیری وجود ندارد.
شما فقط باید به کدنویسی ادامه دهید.
یک باگ، یک پروژه، یک درس در هر زمان.
هر توسعهدهندهای که تحسینش میکنید، زمانی دقیقاً جایی بوده که شما الان هستید: خسته، سردرگم، و در این فکر که آیا هرگز «موفق میشود» (یا 'موضوع را میگیرد').
شما هم خواهید شد.
فقط کافی است دست از تلاش برندارید.
چون واقعیت تلخ این است...
یادگیری برنامهنویسی پر از آشفتگی است، اما به هر خط کدی که مینویسید میارزد .
(ترجمه با هوش مصنوعی)
https://dev.to/hadil/the-hard-truth-about-learning-to-code-that-no-one-tells-you-15c1
@softwrteach
------------------------
🌐💻
همه میگویند یادگیری برنامهنویسی سرگرمکننده است.
آنها از «ساختن پروژههای خفن»، «گرفتن اولین شغل توسعهدهندگی» و «نوشتن کدهای زیبا» حرف میزنند.
اما واقعیت تلخ اینجاست:
بیشتر روزها، این کار گیجکننده، کلافهکننده و پر از شک و تردید است.
و این کاملاً طبیعی است.
چون یادگیری برنامهنویسی فقط مربوط به سینتکس (syntax) نیست، بلکه به صبر، شکست و دیدگاه مربوط میشود.
مبارزه اولیهای که هیچکس در مورد آن به شما هشدار نمیدهد
وقتی کدنویسی را شروع میکنید، تصور میکنید که قرار است اپلیکیشنهایی شبیه به آموزشها بسازید.
اما در عوض، ساعتها به مانیتور خیره میشوید و از خود میپرسید چرا حلقه (loop) شما اجرا نمیشود یا چرا وقتی «فقط یک خط را تغییر دادید» همهچیز خراب میشود.
شما یک خطا را ۱۰ بار در گوگل جستجو خواهید کرد.
یک جواب تکراری را در Stack Overflow بارها و بارها خواهید خواند.
کدی را کپی میکنید که کار میکند و اصلاً نمیدانید *چرا* کار میکند.
این شکست نیست.
این دقیقاً همان روشی است که تکتک توسعهدهندگان یاد میگیرند.
آموزشها شما را نجات نخواهند داد
همه ما «مرحله آموزش» را پشت سر میگذاریم.
یوتیوب تماشا میکنید، همراه با آن پیش میروید، و همهچیز عالی کار میکند تا زمانی که سعی میکنید خودتان چیزی بسازید.
آن وقت... هیچچیز منطقی به نظر نمیرسد.
این همان لحظهای است که بیشتر مردم جا میزنند.
چون فکر میکنند: «من ذاتاً در برنامهنویسی خوب نیستم.»
اما حقیقت این است...
شما با تماشای کدنویسی دیگران یاد نمیگیرید؛ شما با گیر کردن و پیدا کردن راه خروج (حل کردن مشکل) یاد میگیرید.
مرحله فلات (و اینکه چرا چیز خوبی است)
یک مرحله میانی عجیب وجود دارد که هیچکس در مورد آن صحبت نمیکند.
شما دیگر مبتدی نیستید، اما احساس پیشرفته بودن هم ندارید.
میتوانید چیزهایی بسازید... اما هنوز در کدبیس (codebase) شخص دیگری گم میشوید.
در آن مرحله احساس میکنید که در حال پیشرفت نیستید.
اما در واقع، هستید.
شما در حال ساختن «شهود» هستید؛ آن مهارت آرامی که به شما امکان میدهد کد را بخوانید، باگها را پیشبینی کنید و تصمیمات تمیزتری بگیرید.
این پیشرفت نامرئی است.
و فقط در صورتی خودش را نشان میدهد که ادامه دهید.
آنچه در لینکدین نمیبینید
مردم پست میگذارند: «همین الان اولین شغلم را به عنوان توسعهدهنده گرفتم 💪🏻»
چیزی که پست نمیکنند، آن ۸ ماه شک به خود قبل از آن است.
شبهایی که صرف دیباگ کردن شد.
لحظاتی که به ترک کردن فکر کردند.
«سندروم ایمپاستر» (Imposter Syndrome) که هرگز واقعاً از بین نمیرود.
اگر شما در آن مرحله هستید، کلافه، و از خود میپرسید که آیا این مسیر برای شما مناسب است، به یاد داشته باشید:
کسانی که موفق میشوند، باهوشترینها نیستند.
آنها فقط کسانی هستند که متوقف نشدند.
یادگیری واقعی این شکلی است
✅ خراب کردن چیزی که قبلاً کار میکرد
✅ ساعتها جستجو برای یافتن پاسخ
✅ فهمیدن اینکه یک چیز ساده و پایهای را اشتباه فهمیده بودید
✅ درست کردن آن و فهمیدن *چرایی* آن
این یعنی رشد.
این یعنی یادگیری برنامهنویسی.
جذاب نیست، اما واقعی است.
و این همان چیزی است که مبتدیان را به توسعهدهندگان تبدیل میکند.
چیزهایی که بیشتر از همه به من کمک کرد
چند عادت کوچک همهچیز را برای من تغییر داد:
- پروژههای کوچک بسازید. منتظر «ایده بزرگ» نمانید. فقط *هر چیزی* را بسازید.
- کد بد بنویسید. ماه آینده کد تمیزتری خواهید نوشت.
- کد دیگران را بخوانید. مثل سفر در زمان به مغز شخص دیگری است.
- استراحت کنید. گاهی اوقات فاصله گرفتن از کار، باگهای بیشتری را نسبت به تا دیروقت بیدار ماندن برطرف میکند.
یادگیری برنامهنویسی یک ماراتن است، نه یک هکاتون.
نکات پایانی (از یک توسعهدهنده به توسعهدهنده دیگر)
اگر در حال تقلا برای یادگیری هستید، لطفاً بدانید که عقب نیستید.
هیچ جدول زمانی، هیچ خط پایانی و هیچ «راه درست» واحدی برای یادگیری وجود ندارد.
شما فقط باید به کدنویسی ادامه دهید.
یک باگ، یک پروژه، یک درس در هر زمان.
هر توسعهدهندهای که تحسینش میکنید، زمانی دقیقاً جایی بوده که شما الان هستید: خسته، سردرگم، و در این فکر که آیا هرگز «موفق میشود» (یا 'موضوع را میگیرد').
شما هم خواهید شد.
فقط کافی است دست از تلاش برندارید.
چون واقعیت تلخ این است...
یادگیری برنامهنویسی پر از آشفتگی است، اما به هر خط کدی که مینویسید میارزد .
(ترجمه با هوش مصنوعی)
https://dev.to/hadil/the-hard-truth-about-learning-to-code-that-no-one-tells-you-15c1
@softwrteach
------------------------
🌐💻
❤2👍1👏1