Syntax | سینتکس
رفتن به کانال در Telegram
Focus: Web Lan: Python & Go Website: https://syntaxfa.ir Quick connect: https://quick-connect.syntaxfa.ir Github: https://github.com/syntaxfa Group: https://t.me/Syntax_fa_group
نمایش بیشتر2 990
مشترکین
+724 ساعت
+137 روز
+3230 روز
آرشیو پست ها
2 990
تحلیل BSOD پتچ امنیتی CrowdStrike
مشکل اصلی که در نرمافزار CrowdStrike رخ داد، به دلیل دسترسی نادرست به حافظه از طریق یک اشارهگر تهی (NULL pointer) در زبان برنامهنویسی C++ بود. حافظه در کامپیوتر به صورت یک آرایه بزرگ از اعداد سازماندهی شده است. اگر برنامهای تلاش کند به یک آدرس حافظه نامعتبر دسترسی پیدا کند، سیستمعامل بلافاصله برنامه را متوقف میکند و این موضوع منجر به خرابی سیستم میشود.
در این حالت خاص، برنامه سعی کرد به آدرس حافظه 0x9c (که معادل 156 در مبنای 10 است) دسترسی پیدا کند. این آدرس حافظه نامعتبر است و دسترسی به آن باعث میشود که سیستمعامل برنامه را متوقف کند. این مسئله به دلیل عدم بررسی اشارهگر تهی توسط برنامهنویس اتفاق افتاد.
برای مثال:
struct Obj {
int a;
int b;
};
Obj* obj = NULL;
print(obj->a);
در این مثال، اشارهگر obj تهی (NULL) است. هنگامی که برنامه سعی میکند به عضو a از شیء obj دسترسی پیدا کند، به دلیل تهی بودن اشارهگر، به یک آدرس نامعتبر دسترسی پیدا میکند و باعث خرابی برنامه میشود.
این مشکل بهخصوص خطرناک بود زیرا در یک درایور سیستمی رخ داد. درایورهای سیستمی دسترسیهای سطح بالایی به منابع سیستم دارند و خرابی در این درایورها میتواند منجر به توقف کل سیستمعامل و نمایش صفحه آبی مرگ (BSOD) شود.
برای جلوگیری از چنین مشکلاتی، برنامهنویسان باید همیشه قبل از دسترسی به اشارهگرها، آنها را بررسی کنند. استفاده از زبانهای برنامهنویسی مدرن مانند Rust که از دسترسیهای نادرست به حافظه جلوگیری میکنند، میتواند به کاهش این خطرات کمک کند.
Source:
@GoInsights
#note
@Syntax_fa2 990
👑 این فرصت طلایی رو برای برنامه نویس خفن شدن توی بک اند رو از دست ندید👇👇🔥
🔹آموزش نکات مهم و کلیدی در زبان برنامه نویسی گولنگ
🔹 نکات مهم طلایی در مصاحبه فنی و لایو کد ها
🔹مقالات بروز در زمینه گولنگ
🔹مقالات جدید در مورد اصول مهندسی نرم افزار , سیستم دیزاین , انواع دیتابیس ها و ابزارهای رایج برای بک اند کارها
در کانال گوفر آکادمی👇👇
➖➖➖➖➖➖➖➖
🕊 @gopher_academy
2 990
البته یه نکته رو اضافه کنم:
توی گولنگ ما میتونیم از atomic operation استفاده کنیم.
یک تایپ integer بسازیم که تو سطح پایین(سی پی یو) تضمین میکنه که race condition رخ نمیده
الان مقاله مرتبط باهاشو میفرستم
2 990
+1
تفاوتهای Go و Rust در مدیریت Race Condition
فرض کنید برنامهای می نویسید که چندین ترد یا پروسس به طور همزمان در حال اجرا هستند. این ترد ها ممکن است به داده های مشترکی دسترسی داشته باشند و آنها را بروزرسانی کنند. حال اگر این دسترسی و بهروزرسانی بدون کنترل و نظم انجام شود، به طوری که ترتیب دقیق دسترسی و بهروزرسانی داده ها توسط ترد ها مشخص نباشد، شرایط رقابتی (Race Condition) رخ می دهد. در این مثال، متغیر counter به عنوان یک شمارنده استفاده می شود. 10 تابع به طور همزمان مقدار counter را با استفاده از تابع increment افزایش می دهند.
در Rust با وجود اینکه ما با چندین ترد به شمارنده دسترسی داریم، سیستم مالکیت Rust تضمین میکند که فقط یک ترد میتواند همزمان شمارنده را بهصورت تغییرپذیر یا میوتیبل در اختیار بگیرد و با قطعیت میتوان گفت که عدد ۱۰ چاپ خواهد شد. در Go با استفاده از یک اشاره گر مستقیماً به متغیر شمارنده دسترسی داریم. این یک Race Condition بالقوه ایجاد می کند زیرا چندین گوروتین می توانند همزمان آن را تغییر دهند. مقدار نهایی شمارنده بسته به اینکه کدام گوروتین در مسابقه برای دسترسی به آن "برنده" شود، می تواند غیرقابل پیش بینی باشد. ** البته که در Go هم با مکانیزمهای میشه جلوش رو گرفت ولی بهرحال نبود race condition در زبان راست چیز باحالیه
https://www.linkedin.com/posts/hemanhosseinpana_rust-go-golang-activity-7220074271119736833-26sk?utm_source=share&utm_medium=member_android
2 990
لیستی از چند تا کانال خوب هم حوزه با سینتکس
https://t.me/addlist/z-0bTITt5CIwMGE0
2 990
تستر اول:
من توی دو ساعت پنج تا باگ پیدا کردم 😃
برنامه نویسا:
چی؟ به چه جراتی باگ پیدا کردی؟😠
میزنیم دهنشو سرویس میکنیم 🙁😟
تستر دوم و QA:
منو تو نفر بعدی هستیم
تو پونزده تا باگ پیدا کردی و من بیستو پنج تااا 😥😥😔
#fun
@Syntax_fa
2 990
یک تمرین کاربردی برای کار با فایل و اپلیکیشن های تحت خط فرمان
سیستم مدیریت کتابخانه شخصی
امکانات پروژه:
افزودن کتاب جدید:
کاربران میتوانند کتابهای جدیدی با عنوان، نویسنده، سال انتشار و ژانر اضافه کنند.
اطلاعات کتابها فقط در فایل متنی (txt یا csv و ..) ذخیره میشود.
مشاهده لیست کتابها:
کاربران میتوانند لیستی از همه کتابهای موجود را مشاهده کنند.
نمایش اطلاعات کتابها شامل عنوان، نویسنده، سال انتشار و ژانر.
ویرایش اطلاعات کتابها:
کاربران میتوانند اطلاعات کتابهای موجود را ویرایش کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و ویرایش جزئیات مانند عنوان، نویسنده، سال انتشار و ژانر.
حذف کتابها:
کاربران میتوانند کتابها را از سیستم حذف کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و حذف آن از فایل ذخیرهسازی.
جستجوی کتابها:
امکان جستجوی کتابها بر اساس عنوان، نویسنده، سال انتشار یا ژانر.
نمایش نتایج جستجو به کاربر.
علامتگذاری کتابها به عنوان خوانده شده/نشده:
کاربران میتوانند وضعیت کتابها را به عنوان خوانده شده یا نشده علامتگذاری کنند.
امکان فیلتر کردن کتابها بر اساس وضعیت خوانده شده یا نشده.
نیازمندیهای پروژه:
ساختار فایل:
استفاده فقط از فایل txt و csv و ... برای ذخیره اطلاعات کتابها.
هر کتاب شامل فیلدهای عنوان، نویسنده، سال انتشار، ژانر و وضعیت خوانده شده.
رابط کاربری CLI:
پیادهسازی دستورات مختلف برای افزودن، مشاهده، ویرایش، حذف و جستجوی کتابها.
ارائه منوی انتخاب به کاربر برای اجرای دستورات.
مدیریت ورودی و خروجی فایل:
خواندن و نوشتن اطلاعات کتابها به/از فایل.
اطمینان از حفظ اطلاعات موجود در فایل و جلوگیری از از دست رفتن دادهها.
این پروژه به کاربران اجازه میدهد تا کتابهای خود را به راحتی مدیریت کنند و یک سیستم کامل برای مدیریت کتابخانه شخصی خود داشته باشند.
(اگه نوشتید به اشتراک بذارید تا با هم بررسیش کنیم و اشکالاتش رو رفع کنیم )
#exercise
@Syntax_fa
2 990
EOF
ارور EOF یا "End of File" به معنی پایان فایل است و یکی از ارورهایی است که هنگام خواندن فایلها در برنامهنویسی ممکن است با آن مواجه شوید. این ارور نشاندهنده این است که عملیات خواندن به انتهای فایل رسیده و دیگر دادهای برای خواندن وجود ندارد. کاربردها و اهمیت EOF در برنامهنویسی به چندین مورد مختلف برمیگردد:
کاربردهای EOF
1. پایاندادن به خواندن فایل:
- EOF به برنامهنویس اطلاع میدهد که دیگر دادهای برای خواندن در فایل موجود نیست. این به ویژه زمانی مفید است که شما نمیدانید طول فایل چقدر است و میخواهید کل محتوا را پردازش کنید.
2. کنترل حلقههای خواندن:
- هنگام خواندن دادهها از فایل با استفاده از حلقهها، EOF به شما کمک میکند تا بدانید چه زمانی باید از حلقه خارج شوید. این امر باعث جلوگیری از تلاش برای خواندن دادههای غیرموجود و در نتیجه جلوگیری از خطاهای برنامه میشود.
3. ارتباط با منابع خارجی:
- در ارتباط با منابع خارجی مانند شبکهها یا پایگاههای داده، EOF میتواند نشاندهنده پایان جریان داده باشد. به عنوان مثال، وقتی اطلاعات از یک API دریافت میکنید، EOF میتواند نشان دهد که تمام دادهها دریافت شدهاند.
4. مدیریت دادههای ورودی و خروجی:
- در برنامههای تعاملی که ورودی از کاربر دریافت میکنند، EOF میتواند نشاندهنده پایان ورودی باشد. این امر به ویژه در برنامههای خط فرمان و اسکریپتهای پایپلاین مفید است.
مثالهایی از کاربرد EOF در زبانهای مختلف
مثال در زبان Go
در زبان گو، EOF هنگام خواندن فایلها استفاده میشود تا بدانیم چه زمانی به انتهای فایل رسیدهایم.
package main
import (
"bufio"
"fmt"
"os"
"io"
)
func main() {
file, err := os.Open("filename.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer func() {
if err := file.Close(); err != nil
{
fmt.Errorf(...)
}
}
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
// اگر به انتهای فایل رسیدیم، از حلقه خارج شویم
break
}
fmt.Println("Error reading file:", err)
return
}
fmt.Print(line)
}
}
مثال در زبان Python
در زبان Python، هنگامی که به انتهای فایل میرسیم، تابع read() یا readline() یک رشته خالی برمیگرداند که نشاندهنده EOF است.
with open('filename.txt', 'r') as file:
while True:
line = file.readline()
if not line:
break
print(line, end='')
#EOF
@Syntax_fa2 990
سوال:
تو پایتون چطور از string builder استفاده کنیم؟
جواب:
تو سایت real python یه مقاله خوب راجبش هست که. یکی از مثال هایی که زده:
from io import StringIO
sentence = StringIO()
while True:
word = input("Enter a word (or './!/?' to end the sentence): ")
if word in ".!?":
sentence.write(word)
break
if sentence.tell() == 0:
sentence.write(word)
else:
sentence.write(" " + word)
print("The concatenated sentence is:", sentence.getvalue())
لینک:
https://realpython.com/python-string-concatenation/
#python #string_builder
@Syntax_fa2 990
https://t.me/boost/Syntax_fa
جای بوس کردن بقیه، کانال سینتکسو بوس کنید روزی یه استوری زیبا میذارم براتون
2 990
الگوریتم Luhn
تاحالا شده که از کاربر شماره کارت و ... رو بگیرید اما نمیدونید چطور میشه در سطح برنامتون اعتبارسنجیش کنید!؟ این پست قراره درباره الگوریتم luhn صحبت کنیم و آخر کار تو کد یه مثال از نحوه اعتبار سنجی شماره حساب بانکی با الگوریتم luhn رو براتون میزنم.
خب قسمت توضیح چت جی بی تی عزیز زحمتو کشیده🤌😘:
الگوریتم Luhn که به عنوان "فرمول Luhn" نیز شناخته میشود، یک الگوریتم ساده برای اعتبارسنجی شمارههای شناسایی است. این الگوریتم توسط Hans Peter Luhn، محقق IBM، در سال 1954 اختراع شده است. الگوریتم Luhn به طور گسترده در اعتبارسنجی شمارههای کارت اعتباری، شمارههای شناسایی ملی، و شمارههای شناسایی دیگر استفاده میشود.
### نحوه عملکرد الگوریتم Luhn
1. ورودی:
- یک رشته از ارقام که باید اعتبارسنجی شود. این رشته معمولاً شامل شماره کارت اعتباری یا شماره شناسایی است.
2. مراحل:
- از سمت راست به چپ شروع کنید و هر عدد دوم را دو برابر کنید. اگر دو برابر کردن یک عدد منجر به یک عدد دو رقمی شد (یعنی بزرگتر یا مساوی 10)، جمع ارقام آن عدد را به دست آورید (برای مثال، 18 تبدیل به 1 + 8 = 9 میشود).
خراب کردی هوش مصنوعی جان😒😒
بذار با یه روش ساده توضیح بدم:
از عدد سمت چپ شروع میکنیم. یکیو ضربدر دو میکنیم. بعدی رو ضربدر یک و حاصل رو جمع میکنیم. اگه موقعی که داریم ضربدر دو میکنیم، عدد بزرگ تر از 9 شد، 9 تا ازش کم میکنیم.
مثلا عدد ما 7 هستش ضربدر دو میشه 14 چون از 9 بزرگ تر شده منهای 9 میکنیم پس میشه 5.
در نهایت حاصل جمعی که بدست آوردیم باید باقی موندش به پیمانه که 10 هستش صفر بشه.
مثال
فرض کنید شماره کارت این شخص عزیز که نمیدونیم کی هستش رو میخوایم اعتبارسنجی کنیم. "6037697646845005" است:
1. از چپ به راست شروع می کنیم اولی ضربدر دو، دومی ضربدر یک، سومی ضربدر دو و ... اگه هم بزرگ تر از 9 شده منهای 9 میکنیم:
result = 3 + 0 + 6 + 7 + 3 + 9 + 5 + 6 + 8 + 6 + 7 + 4 + 1 + 0 + 0 + 5حاصل جمعشون مساوی میشه با 70 پس شماره کارت معتبر هستش 🍸 خب هوش مصنوعی ادامه توضیحاتو بده: کاربردهای الگوریتم Luhn 1. اعتبارسنجی شمارههای کارت اعتباری: - تمامی کارتهای اعتباری صادر شده توسط شرکتهای مالی معتبر از الگوریتم Luhn برای اعتبارسنجی شماره کارتها استفاده میکنند. 2. شمارههای شناسایی ملی: - برخی کشورها از الگوریتم Luhn برای اعتبارسنجی شمارههای شناسایی ملی استفاده میکنند. 3. شمارههای شناسایی محصول: - برخی از کدهای محصول و شمارههای سریال از این الگوریتم برای اطمینان از صحت دادههای ورودی استفاده میکنند. 4. سیستمهای مالی و بانکی: - در بسیاری از فرآیندهای پرداخت و انتقال وجه، الگوریتم Luhn برای بررسی صحت شمارههای حساب و کارتها استفاده میشود. ### مزایا و محدودیتها مزایا: - سادگی و کارایی: الگوریتم بسیار ساده است و به راحتی پیادهسازی میشود. - جلوگیری از خطاهای تایپی: بیشتر خطاهای تایپی در وارد کردن شمارههای شناسایی را تشخیص میدهد. محدودیتها: - امنیت: الگوریتم Luhn برای امنیت طراحی نشده است و نمیتواند از جعل شمارهها جلوگیری کند. - تشخیص محدود: تنها قادر به تشخیص خطاهای ساده است و نمیتواند همه انواع خطاها را شناسایی کند. الگوریتم Luhn به دلیل سادگی و کارایی بالا، به طور گسترده در سیستمهای مختلف برای اعتبارسنجی شمارههای شناسایی مورد استفاده قرار میگیرد. بریم سراغ پیاده سازیش تو گولنگ:
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(Valid("6037697646845005"))
}
func Valid(cardNumber string) bool {
var sum int
for i := 0; i < len(cardNumber); i++ {
intNum, _ := strconv.Atoi(string(cardNumber[i]))
if (i+1)%2 != 0 {
if intNum*2 > 9 {
sum += (intNum * 2) - 9
} else {
sum += intNum * 2
}
} else {
sum += intNum
}
}
return sum%10 == 0
}
#luhn
@Syntax_Fa2 990
خب من بعد مدتها تصمیم گرفتم یه پست بذارم و اونم نتیجه یه تجربه که شاید خیلیا مث من دوس دارن چیزای جدید و بروز رو استفاده کنن.
من روی سیستم شرکت از اوبونتو ۲۳.۰۴ فردای روزی که نسخه lts جدید اومد اپگرید کردم به ۲۴.۰۴ و باگای عجیبی رو دیدم که کافر نبینه و مسلمون نشنوه.
از مصرف زیادی منابع تا پر شدن خیلی سریع حافظه تا اخرین بایت ممکن بخاطر لاگ سیستمی.
ریپورت باگ زدم و بهم توصیه کردن از مطالب فوروم اوبونتو کمک بگیرم :(
باگ عجیبترش این بود که وقتی یه برنامه ای رو مکسیمایز میکردی، حدود یک سوم از صفحه که میشد سمت راست صفحه رو نمیشد با موس انتخاب و کلیک کرد :|
با اپدیت های متوالی هم درست نشد و مجبور شدم حدود یه ماه باهاش سر کنم یه جوری و بیشتر کارامو به سیستم ویندوزی کنم تا سر فرصت داونگرید کنم.
دیروز هم اپدیت ۳۰۰ مگابایتی اومد براش، نصب کردم و دیدم اوکی شده مشکلاتش (بجز حجم زیاد لاگ تولیدی که با روشایی که قبلا لاگ رو لیمیت میکردم جواب نداد)
و کلام اخر اینکه اگه میخواید حدودا بدونید چه زمانی مناسبه که به اوبونتو جدید اپگرید کنید، به نظرم زمانی که مینت میخواد نسخه جدید بده زمان مناسبیه (چون مینت بر پایه اوبونتو هستش).
و من الله توفیق...
@Syntax_fa
2 990
یه روش آوردم صد درصد جوابه💅
میگه:
هربار که یه سوال برنامه نویسی دارم و واقعا به کمک نیاز دارم. میرم تو ردیت پستش میکنم بعد با یه اکانت دیگه یه جواب خیلی پرت میدم.
ملت براشون مهم نیست بهم کمک کنن ولی خیلی دوست دارن جواب اشتباهو تصحیح کنن
#fun
@Syntax_fa
2 990
من هنوز فکر میکنم توضیح بیشتر نیازه ولی این دیگه آخریشه 😂
پس میشه گفت encoding زمانی اتفاق می افتد که یک byte array را به یک فرمت دیگه از byte array تبدیل کنیم ؟
دقیقاً. Encoding فرایندی است که طی آن یک byte array (آرایه ای از بایت ها) به یک فرمت دیگر از byte array تبدیل میشود. هدف از encoding معمولاً این است که دادهها به شکلی تبدیل شوند که برای انتقال، ذخیرهسازی یا نمایش آسانتر یا امنتر باشند.
توضیح بیشتر با مثال
مثال 1:
Base64 Encoding
یک روش encoding است که دادههای باینری را به یک رشته متنی تبدیل میکند که شامل تنها کاراکترهای قابل چاپ (A-Z، a-z، 0-9، +، /) است. این روش معمولاً برای انتقال دادههای باینری به صورت متنی در پروتکلهایی مانند HTTP یا ایمیل استفاده میشود.
import base64
data = b'This is some binary data.'
encoded_data = base64.b64encode(data)
print(encoded_data) # Output: b'VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRhLg=='
# Decoding
decoded_data = base64.b64decode(encoded_data)
print(decoded_data) # Output: b'This is some binary data.'
#### مثال 2: URL Encoding
URL encoding (یا percent encoding)
فرایندی است که طی آن کاراکترهای خاص در یک URL به یک فرمت خاص تبدیل میشوند که برای انتقال از طریق URL مناسب باشد.
import urllib.parse
data = 'This is a string with spaces and symbols: !@#'
encoded_data = urllib.parse.quote(data)
print(encoded_data) # Output: 'This%20is%20a%20string%20with%20spaces%20and%20symbols%3A%20%21%40%23'
# Decoding
decoded_data = urllib.parse.unquote(encoded_data)
print(decoded_data) # Output: 'This is a string with spaces and symbols: !@#'
#encoding
@Syntax_fa
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
