خب من بعد مدتها تصمیم گرفتم یه پست بذارم و اونم نتیجه یه تجربه که شاید خیلیا مث من دوس دارن چیزای جدید و بروز رو استفاده کنن.
من روی سیستم شرکت از اوبونتو ۲۳.۰۴ فردای روزی که نسخه lts جدید اومد اپگرید کردم به ۲۴.۰۴ و باگای عجیبی رو دیدم که کافر نبینه و مسلمون نشنوه.
از مصرف زیادی منابع تا پر شدن خیلی سریع حافظه تا اخرین بایت ممکن بخاطر لاگ سیستمی.
ریپورت باگ زدم و بهم توصیه کردن از مطالب فوروم اوبونتو کمک بگیرم :(
باگ عجیبترش این بود که وقتی یه برنامه ای رو مکسیمایز میکردی، حدود یک سوم از صفحه که میشد سمت راست صفحه رو نمیشد با موس انتخاب و کلیک کرد :|
با اپدیت های متوالی هم درست نشد و مجبور شدم حدود یه ماه باهاش سر کنم یه جوری و بیشتر کارامو به سیستم ویندوزی کنم تا سر فرصت داونگرید کنم.
دیروز هم اپدیت ۳۰۰ مگابایتی اومد براش، نصب کردم و دیدم اوکی شده مشکلاتش (بجز حجم زیاد لاگ تولیدی که با روشایی که قبلا لاگ رو لیمیت میکردم جواب نداد)
و کلام اخر اینکه اگه میخواید حدودا بدونید چه زمانی مناسبه که به اوبونتو جدید اپگرید کنید، به نظرم زمانی که مینت میخواد نسخه جدید بده زمان مناسبیه (چون مینت بر پایه اوبونتو هستش).
و من الله توفیق...
@Syntax_fa
من روی سیستم شرکت از اوبونتو ۲۳.۰۴ فردای روزی که نسخه lts جدید اومد اپگرید کردم به ۲۴.۰۴ و باگای عجیبی رو دیدم که کافر نبینه و مسلمون نشنوه.
از مصرف زیادی منابع تا پر شدن خیلی سریع حافظه تا اخرین بایت ممکن بخاطر لاگ سیستمی.
ریپورت باگ زدم و بهم توصیه کردن از مطالب فوروم اوبونتو کمک بگیرم :(
باگ عجیبترش این بود که وقتی یه برنامه ای رو مکسیمایز میکردی، حدود یک سوم از صفحه که میشد سمت راست صفحه رو نمیشد با موس انتخاب و کلیک کرد :|
با اپدیت های متوالی هم درست نشد و مجبور شدم حدود یه ماه باهاش سر کنم یه جوری و بیشتر کارامو به سیستم ویندوزی کنم تا سر فرصت داونگرید کنم.
دیروز هم اپدیت ۳۰۰ مگابایتی اومد براش، نصب کردم و دیدم اوکی شده مشکلاتش (بجز حجم زیاد لاگ تولیدی که با روشایی که قبلا لاگ رو لیمیت میکردم جواب نداد)
و کلام اخر اینکه اگه میخواید حدودا بدونید چه زمانی مناسبه که به اوبونتو جدید اپگرید کنید، به نظرم زمانی که مینت میخواد نسخه جدید بده زمان مناسبیه (چون مینت بر پایه اوبونتو هستش).
و من الله توفیق...
@Syntax_fa
👍9❤2
الگوریتم 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 میکنیم:
حاصل جمعشون مساوی میشه با 70 پس شماره کارت معتبر هستش🍸
خب هوش مصنوعی ادامه توضیحاتو بده:
کاربردهای الگوریتم Luhn
1. اعتبارسنجی شمارههای کارت اعتباری:
- تمامی کارتهای اعتباری صادر شده توسط شرکتهای مالی معتبر از الگوریتم Luhn برای اعتبارسنجی شماره کارتها استفاده میکنند.
2. شمارههای شناسایی ملی:
- برخی کشورها از الگوریتم Luhn برای اعتبارسنجی شمارههای شناسایی ملی استفاده میکنند.
3. شمارههای شناسایی محصول:
- برخی از کدهای محصول و شمارههای سریال از این الگوریتم برای اطمینان از صحت دادههای ورودی استفاده میکنند.
4. سیستمهای مالی و بانکی:
- در بسیاری از فرآیندهای پرداخت و انتقال وجه، الگوریتم Luhn برای بررسی صحت شمارههای حساب و کارتها استفاده میشود.
مزایا و محدودیتها
مزایا:
- سادگی و کارایی: الگوریتم بسیار ساده است و به راحتی پیادهسازی میشود.
- جلوگیری از خطاهای تایپی: بیشتر خطاهای تایپی در وارد کردن شمارههای شناسایی را تشخیص میدهد.
محدودیتها:
- امنیت: الگوریتم Luhn برای امنیت طراحی نشده است و نمیتواند از جعل شمارهها جلوگیری کند.
- تشخیص محدود: تنها قادر به تشخیص خطاهای ساده است و نمیتواند همه انواع خطاها را شناسایی کند.
الگوریتم Luhn به دلیل سادگی و کارایی بالا، به طور گسترده در سیستمهای مختلف برای اعتبارسنجی شمارههای شناسایی مورد استفاده قرار میگیرد.
بریم سراغ پیاده سازیش تو گولنگ:
#luhn
@Syntax_Fa boost
تاحالا شده که از کاربر شماره کارت و ... رو بگیرید اما نمیدونید چطور میشه در سطح برنامتون اعتبارسنجیش کنید!؟ این پست قراره درباره الگوریتم 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_Fa boost
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3🔥3
Syntax | سینتکس
bytes buffer and string builder یکی از انواع داده ای که در اکثر زبانهای برنامه نویسی وجود دارد و در استفاده از آن باید دقت داشته باشیم نوع string است. قطعه کد زیر را در نظر بگیرید: var query string = "select " query += "name, family " query…
سوال:
تو پایتون چطور از string builder استفاده کنیم؟
جواب:
تو سایت real python یه مقاله خوب راجب اینکه چطور بصورت بهینه با رشته ها کار کنیم هست یکی از مثال هایی که زده اینه:
لینک:
https://realpython.com/python-string-concatenation/
#python #string_builder
@Syntax_fa
تو پایتون چطور از 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_fa
🔥7👍1🙏1
EOF
ارور EOF یا "End of File" به معنی پایان فایل است و یکی از ارورهایی است که هنگام خواندن فایلها در برنامهنویسی ممکن است با آن مواجه شوید. این ارور نشاندهنده این است که عملیات خواندن به انتهای فایل رسیده و دیگر دادهای برای خواندن وجود ندارد. کاربردها و اهمیت EOF در برنامهنویسی به چندین مورد مختلف برمیگردد:
کاربردهای EOF
1. پایاندادن به خواندن فایل:
- EOF به برنامهنویس اطلاع میدهد که دیگر دادهای برای خواندن در فایل موجود نیست. این به ویژه زمانی مفید است که شما نمیدانید طول فایل چقدر است و میخواهید کل محتوا را پردازش کنید.
2. کنترل حلقههای خواندن:
- هنگام خواندن دادهها از فایل با استفاده از حلقهها، EOF به شما کمک میکند تا بدانید چه زمانی باید از حلقه خارج شوید. این امر باعث جلوگیری از تلاش برای خواندن دادههای غیرموجود و در نتیجه جلوگیری از خطاهای برنامه میشود.
3. ارتباط با منابع خارجی:
- در ارتباط با منابع خارجی مانند شبکهها یا پایگاههای داده، EOF میتواند نشاندهنده پایان جریان داده باشد. به عنوان مثال، وقتی اطلاعات از یک API دریافت میکنید، EOF میتواند نشان دهد که تمام دادهها دریافت شدهاند.
4. مدیریت دادههای ورودی و خروجی:
- در برنامههای تعاملی که ورودی از کاربر دریافت میکنند، EOF میتواند نشاندهنده پایان ورودی باشد. این امر به ویژه در برنامههای خط فرمان و اسکریپتهای پایپلاین مفید است.
مثالهایی از کاربرد EOF در زبانهای مختلف
مثال در زبان Go
در زبان گو، EOF هنگام خواندن فایلها استفاده میشود تا بدانیم چه زمانی به انتهای فایل رسیدهایم.
مثال در زبان Python
در زبان Python، هنگامی که به انتهای فایل میرسیم، تابع
#EOF
@Syntax_fa
ارور 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_fa
❤4👍2🔥1🥰1👌1💋1
یک تمرین کاربردی برای کار با فایل و اپلیکیشن های تحت خط فرمان 🍸
سیستم مدیریت کتابخانه شخصی
امکانات پروژه:
افزودن کتاب جدید:
کاربران میتوانند کتابهای جدیدی با عنوان، نویسنده، سال انتشار و ژانر اضافه کنند.
اطلاعات کتابها فقط در فایل متنی (txt یا csv و ..) ذخیره میشود.
مشاهده لیست کتابها:
کاربران میتوانند لیستی از همه کتابهای موجود را مشاهده کنند.
نمایش اطلاعات کتابها شامل عنوان، نویسنده، سال انتشار و ژانر.
ویرایش اطلاعات کتابها:
کاربران میتوانند اطلاعات کتابهای موجود را ویرایش کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و ویرایش جزئیات مانند عنوان، نویسنده، سال انتشار و ژانر.
حذف کتابها:
کاربران میتوانند کتابها را از سیستم حذف کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و حذف آن از فایل ذخیرهسازی.
جستجوی کتابها:
امکان جستجوی کتابها بر اساس عنوان، نویسنده، سال انتشار یا ژانر.
نمایش نتایج جستجو به کاربر.
علامتگذاری کتابها به عنوان خوانده شده/نشده:
کاربران میتوانند وضعیت کتابها را به عنوان خوانده شده یا نشده علامتگذاری کنند.
امکان فیلتر کردن کتابها بر اساس وضعیت خوانده شده یا نشده.
نیازمندیهای پروژه:
ساختار فایل:
استفاده فقط از فایل txt و csv و ... برای ذخیره اطلاعات کتابها.
هر کتاب شامل فیلدهای عنوان، نویسنده، سال انتشار، ژانر و وضعیت خوانده شده.
رابط کاربری CLI:
پیادهسازی دستورات مختلف برای افزودن، مشاهده، ویرایش، حذف و جستجوی کتابها.
ارائه منوی انتخاب به کاربر برای اجرای دستورات.
مدیریت ورودی و خروجی فایل:
خواندن و نوشتن اطلاعات کتابها از فایل.
اطمینان از حفظ اطلاعات موجود در فایل و جلوگیری از از دست رفتن دادهها.
این پروژه به کاربران اجازه میدهد تا کتابهای خود را به راحتی مدیریت کنند و یک سیستم کامل برای مدیریت کتابخانه شخصی خود داشته باشند.
امکان رجیستر پ لاگین کردن کاربر آپشنال هستش و اگه بخواید میتونید اضافه کنید
(اگه نوشتید به اشتراک بذارید تا با هم بررسیش کنیم و اشکالاتش رو رفع کنیم)
#exercise
@Syntax_fa
سیستم مدیریت کتابخانه شخصی
امکانات پروژه:
افزودن کتاب جدید:
کاربران میتوانند کتابهای جدیدی با عنوان، نویسنده، سال انتشار و ژانر اضافه کنند.
اطلاعات کتابها فقط در فایل متنی (txt یا csv و ..) ذخیره میشود.
مشاهده لیست کتابها:
کاربران میتوانند لیستی از همه کتابهای موجود را مشاهده کنند.
نمایش اطلاعات کتابها شامل عنوان، نویسنده، سال انتشار و ژانر.
ویرایش اطلاعات کتابها:
کاربران میتوانند اطلاعات کتابهای موجود را ویرایش کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و ویرایش جزئیات مانند عنوان، نویسنده، سال انتشار و ژانر.
حذف کتابها:
کاربران میتوانند کتابها را از سیستم حذف کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و حذف آن از فایل ذخیرهسازی.
جستجوی کتابها:
امکان جستجوی کتابها بر اساس عنوان، نویسنده، سال انتشار یا ژانر.
نمایش نتایج جستجو به کاربر.
علامتگذاری کتابها به عنوان خوانده شده/نشده:
کاربران میتوانند وضعیت کتابها را به عنوان خوانده شده یا نشده علامتگذاری کنند.
امکان فیلتر کردن کتابها بر اساس وضعیت خوانده شده یا نشده.
نیازمندیهای پروژه:
ساختار فایل:
استفاده فقط از فایل txt و csv و ... برای ذخیره اطلاعات کتابها.
هر کتاب شامل فیلدهای عنوان، نویسنده، سال انتشار، ژانر و وضعیت خوانده شده.
رابط کاربری CLI:
پیادهسازی دستورات مختلف برای افزودن، مشاهده، ویرایش، حذف و جستجوی کتابها.
ارائه منوی انتخاب به کاربر برای اجرای دستورات.
مدیریت ورودی و خروجی فایل:
خواندن و نوشتن اطلاعات کتابها از فایل.
اطمینان از حفظ اطلاعات موجود در فایل و جلوگیری از از دست رفتن دادهها.
این پروژه به کاربران اجازه میدهد تا کتابهای خود را به راحتی مدیریت کنند و یک سیستم کامل برای مدیریت کتابخانه شخصی خود داشته باشند.
امکان رجیستر پ لاگین کردن کاربر آپشنال هستش و اگه بخواید میتونید اضافه کنید
(اگه نوشتید به اشتراک بذارید تا با هم بررسیش کنیم و اشکالاتش رو رفع کنیم)
#exercise
@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1👀1
تستر اول:
من توی دو ساعت پنج تا باگ پیدا کردم😃
برنامه نویسا:
چی؟ به چه جراتی باگ پیدا کردی؟😠
میزنیم دهنشو سرویس میکنیم🙁 😟
تستر دوم و QA لید:
منو تو نفر بعدی هستیم
تو پونزده تا باگ پیدا کردی و من بیستو پنج تااا😥 😥 😔
#fun
@Syntax_fa
من توی دو ساعت پنج تا باگ پیدا کردم
برنامه نویسا:
چی؟ به چه جراتی باگ پیدا کردی؟
میزنیم دهنشو سرویس میکنیم
تستر دوم و QA لید:
منو تو نفر بعدی هستیم
تو پونزده تا باگ پیدا کردی و من بیستو پنج تااا
#fun
@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14🤣8👍1
تفاوتهای Go و Rust در مدیریت Race Condition
فرض کنید برنامهای می نویسید که چندین ترد یا پروسس به طور همزمان در حال اجرا هستند. این ترد ها ممکن است به داده های مشترکی دسترسی داشته باشند و آنها را بروزرسانی کنند. حال اگر این دسترسی و بهروزرسانی بدون کنترل و نظم انجام شود، به طوری که ترتیب دقیق دسترسی و بهروزرسانی داده ها توسط ترد ها مشخص نباشد، شرایط رقابتی (Race Condition) رخ می دهد. در این مثال، متغیر counter به عنوان یک شمارنده استفاده می شود. 10 تابع به طور همزمان مقدار counter را با استفاده از تابع increment افزایش می دهند.
در Rust با وجود اینکه ما با چندین ترد به شمارنده دسترسی داریم، سیستم مالکیت Rust تضمین میکند که فقط یک ترد میتواند همزمان شمارنده را بهصورت تغییرپذیر یا میوتیبل در اختیار بگیرد و با قطعیت میتوان گفت که عدد ۱۰ چاپ خواهد شد. در Go با استفاده از یک اشاره گر مستقیماً به متغیر شمارنده دسترسی داریم. این یک Race Condition بالقوه ایجاد می کند زیرا چندین گوروتین می توانند همزمان آن را تغییر دهند. مقدار نهایی شمارنده بسته به اینکه کدام گوروتین در مسابقه برای دسترسی به آن "برنده" شود، می تواند غیرقابل پیش بینی باشد. ** البته که در Go هم با مکانیزمهای میشه جلوش رو گرفت ولی بهرحال نبود race condition در زبان راست چیز باحالیه
Source:
Link
#race_condition
@Syntax_fa
فرض کنید برنامهای می نویسید که چندین ترد یا پروسس به طور همزمان در حال اجرا هستند. این ترد ها ممکن است به داده های مشترکی دسترسی داشته باشند و آنها را بروزرسانی کنند. حال اگر این دسترسی و بهروزرسانی بدون کنترل و نظم انجام شود، به طوری که ترتیب دقیق دسترسی و بهروزرسانی داده ها توسط ترد ها مشخص نباشد، شرایط رقابتی (Race Condition) رخ می دهد. در این مثال، متغیر counter به عنوان یک شمارنده استفاده می شود. 10 تابع به طور همزمان مقدار counter را با استفاده از تابع increment افزایش می دهند.
در Rust با وجود اینکه ما با چندین ترد به شمارنده دسترسی داریم، سیستم مالکیت Rust تضمین میکند که فقط یک ترد میتواند همزمان شمارنده را بهصورت تغییرپذیر یا میوتیبل در اختیار بگیرد و با قطعیت میتوان گفت که عدد ۱۰ چاپ خواهد شد. در Go با استفاده از یک اشاره گر مستقیماً به متغیر شمارنده دسترسی داریم. این یک Race Condition بالقوه ایجاد می کند زیرا چندین گوروتین می توانند همزمان آن را تغییر دهند. مقدار نهایی شمارنده بسته به اینکه کدام گوروتین در مسابقه برای دسترسی به آن "برنده" شود، می تواند غیرقابل پیش بینی باشد. ** البته که در Go هم با مکانیزمهای میشه جلوش رو گرفت ولی بهرحال نبود race condition در زبان راست چیز باحالیه
Source:
Link
#race_condition
@Syntax_fa
👍5🔥4😱1
Syntax | سینتکس
تفاوتهای Go و Rust در مدیریت Race Condition فرض کنید برنامهای می نویسید که چندین ترد یا پروسس به طور همزمان در حال اجرا هستند. این ترد ها ممکن است به داده های مشترکی دسترسی داشته باشند و آنها را بروزرسانی کنند. حال اگر این دسترسی و بهروزرسانی بدون کنترل…
البته یه نکته رو اضافه کنم:
ما میتونیم از atomic operation استفاده کنیم.
یک متغیر integer بسازیم که تو سطح پایین(سی پی یو) تضمین میکنه که race condition رخ نمیده
پست مرتبط با atomic operation که قبلا گذاشتم:
https://news.1rj.ru/str/Syntax_fa/1995
ما میتونیم از atomic operation استفاده کنیم.
یک متغیر integer بسازیم که تو سطح پایین(سی پی یو) تضمین میکنه که race condition رخ نمیده
پست مرتبط با atomic operation که قبلا گذاشتم:
https://news.1rj.ru/str/Syntax_fa/1995
🔥5👍2❤1
تحلیل BSOD پتچ امنیتی CrowdStrike
مشکل اصلی که در نرمافزار CrowdStrike رخ داد، به دلیل دسترسی نادرست به حافظه از طریق یک اشارهگر تهی (NULL pointer) در زبان برنامهنویسی C++ بود. حافظه در کامپیوتر به صورت یک آرایه بزرگ از اعداد سازماندهی شده است. اگر برنامهای تلاش کند به یک آدرس حافظه نامعتبر دسترسی پیدا کند، سیستمعامل بلافاصله برنامه را متوقف میکند و این موضوع منجر به خرابی سیستم میشود.
در این حالت خاص، برنامه سعی کرد به آدرس حافظه 0x9c (که معادل 156 در مبنای 10 است) دسترسی پیدا کند. این آدرس حافظه نامعتبر است و دسترسی به آن باعث میشود که سیستمعامل برنامه را متوقف کند. این مسئله به دلیل عدم بررسی اشارهگر تهی توسط برنامهنویس اتفاق افتاد.
برای مثال:
در این مثال، اشارهگر obj تهی (NULL) است. هنگامی که برنامه سعی میکند به عضو a از شیء obj دسترسی پیدا کند، به دلیل تهی بودن اشارهگر، به یک آدرس نامعتبر دسترسی پیدا میکند و باعث خرابی برنامه میشود.
این مشکل بهخصوص خطرناک بود زیرا در یک درایور سیستمی رخ داد. درایورهای سیستمی دسترسیهای سطح بالایی به منابع سیستم دارند و خرابی در این درایورها میتواند منجر به توقف کل سیستمعامل و نمایش صفحه آبی مرگ (BSOD) شود.
برای جلوگیری از چنین مشکلاتی، برنامهنویسان باید همیشه قبل از دسترسی به اشارهگرها، آنها را بررسی کنند. استفاده از زبانهای برنامهنویسی مدرن مانند Rust که از دسترسیهای نادرست به حافظه جلوگیری میکنند، میتواند به کاهش این خطرات کمک کند.
کلام آخر: شاید تاحدی شرکت CrowdStrike بدلیل بی دقتی باعث این اتفاق شده است ولی مقصر اصلی شرکت مایکروسافت هست که هنوز کرنل را درست آب بندی نکرده که بواسطه یک درایور اینطوی کرش نکند.
Source:
@GoInsights
#note
@Syntax_fa | boost
مشکل اصلی که در نرمافزار 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 که از دسترسیهای نادرست به حافظه جلوگیری میکنند، میتواند به کاهش این خطرات کمک کند.
کلام آخر: شاید تاحدی شرکت CrowdStrike بدلیل بی دقتی باعث این اتفاق شده است ولی مقصر اصلی شرکت مایکروسافت هست که هنوز کرنل را درست آب بندی نکرده که بواسطه یک درایور اینطوی کرش نکند.
Source:
@GoInsights
#note
@Syntax_fa | boost
👍11😱2
خبر دارین که میتونین با js به اس ام اس OTP دسترسی پیدا کنید دیگه ؟
اینو فکنم 6 ماه پیش بهش بر خوردم و دارم الان پستشو میسازم
توی خیلی از PWA هایی که توسعه دادم سعی میکردم که شبیه به native اپ ها بشن و این حس خوبی بهم میداد
ولی وقتی به قسمت OTP میرسید قشنگ میخورد تو ذوقم
به دنبال راهی بودم که بتونم OTP SMS رو بخونم ولی Js و Browser چنین امکانی رو بهم نمیداد
اما پس از سرچ بسیار متوجه شدم که Chrome ای پی ای جدیدی ارائه داده به اسم WebOTP API /Web Auth Api
که به شما تحت شرایطی اجازه میده با استفاده از js و این API به پیام OTP دسترسی پیدا کنید و کد رو بخونید و دیگه کاربر مجبور نباشه که بره پیام رو بخونه کد رو حفظ کنه و بیاد وارد کنه
و شاید باورتون نشه خیلی حرکت خفن و کولی میباشد این حرکت 😁
لینک پیاده سازی و استفاده ازش:
https://developer.chrome.com/docs/identity/web-apis/web-otp
Source:
Link
#note
@Syntax_fa
اینو فکنم 6 ماه پیش بهش بر خوردم و دارم الان پستشو میسازم
توی خیلی از PWA هایی که توسعه دادم سعی میکردم که شبیه به native اپ ها بشن و این حس خوبی بهم میداد
ولی وقتی به قسمت OTP میرسید قشنگ میخورد تو ذوقم
به دنبال راهی بودم که بتونم OTP SMS رو بخونم ولی Js و Browser چنین امکانی رو بهم نمیداد
اما پس از سرچ بسیار متوجه شدم که Chrome ای پی ای جدیدی ارائه داده به اسم WebOTP API /Web Auth Api
که به شما تحت شرایطی اجازه میده با استفاده از js و این API به پیام OTP دسترسی پیدا کنید و کد رو بخونید و دیگه کاربر مجبور نباشه که بره پیام رو بخونه کد رو حفظ کنه و بیاد وارد کنه
و شاید باورتون نشه خیلی حرکت خفن و کولی میباشد این حرکت 😁
لینک پیاده سازی و استفاده ازش:
https://developer.chrome.com/docs/identity/web-apis/web-otp
Source:
Link
#note
@Syntax_fa
🔥18👍4❤1👌1
درود دوستان سینتکسی! 👋
ما در انجمن Persian CC Books قصد داریم کتابهای رایگان و آزاد را در زمینه برنامهنویسی منتشر کنیم.
یکی از اهداف ما نگارش مجموعه کتابهای آموزشی PHP است. برای تولید محتوای با کیفیت و درست این مجموعه کتاب PHP، نیاز به مشارکت شما عزیزان در یک نظرسنجی داریم. نظرسنجی در ابتدا دارای سوالات عمومی جهت احراز هویت و افزایش کیفیت نظرسنجی میباشد؛ تمام اطلاعات شما نزد ما محفوظ خواهد ماند.
با تشکر. کوچیک شما، محمد از PCCBs.😇
#public
@Syntax_fa | boost
ما در انجمن Persian CC Books قصد داریم کتابهای رایگان و آزاد را در زمینه برنامهنویسی منتشر کنیم.
یکی از اهداف ما نگارش مجموعه کتابهای آموزشی PHP است. برای تولید محتوای با کیفیت و درست این مجموعه کتاب PHP، نیاز به مشارکت شما عزیزان در یک نظرسنجی داریم. نظرسنجی در ابتدا دارای سوالات عمومی جهت احراز هویت و افزایش کیفیت نظرسنجی میباشد؛ تمام اطلاعات شما نزد ما محفوظ خواهد ماند.
🚀 آدرس نظرسنجی (از طریق پلتفرم پرسلاین):💎 https://survey.porsline.ir/s/tdca0t0f
با تشکر. کوچیک شما، محمد از PCCBs.
#public
@Syntax_fa | boost
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3👍1👏1
✏️ مقدمه: همه ما برنامهنویسان با کمی پیشرفت در حوزه کاری خودمون، کم کم متوجه میشویم که باز دانشمون کافی نیست. معمولا تحقیقات خودمون رو با زبان فارسی شروع میکنیم؛ اما پس از مدتی میفهمیم که اطلاعات به زبان فارسی آنطور که فکر میکنیم هم کاربردی نیستند. اینجاست که متوجه یک موضوع مهم میشویم: زبان انگلیسی بهترین ابزار یادگیری برنامهنویسی است.
– با توجه به اهمیت فراوان این موضوع تصمیم گرفتم برخی نکات کاربردی در مسیر یادگیری را به شما آموزش بدم. پس Let's Go سینتکسیها!
مهمترین نکته در مسیر یادگیری انگلیسی، منبع یادگیری این زبان شیرین است. با انتخاب منبع و روش مطالعه مناسب در این مسیر اصلا احساس ناامیدی نخواهید کرد و با هر بار مطالعه بیشتر به ارتقا دانشتون کمک خواهد نمود.
با توجه به ویژگی شخصیتی خودتون انتخاب کنید که روش خودآموزی برای شما مناسبتر است یا کلاس رفتن. معمولا افرادی که تازه قصد شروع یادگیری را دارند کلاس زبان به آنها توصیه میشود. اما اگر تا حدودی با انگلیسی آشنایی دارید و قصد دارید آن را تقویت سازید روش خودآموزی میتواند برای شما انتخاب خوبی باشد. در کنار خودآموزی میتوانید یک منتور هم داشته باشید.
یادگیری زبان انگلیسی مانند هر مهارت دیگر نیز، نیاز به تمرین زیاد دارد. با داشتن استمرار در فرایند یادگیری زبان انگلیسی، نکاتی را که یادگرفتهاید را فراموش نخواهید کرد و به مرور خواهید توانست حتی انگلیسی فکر کنید!
آیا پس از تولد، برای یادگیری زبان مادری نیاز به زبان دیگری داشتهاید؟ جواب قطعا خیر است؛ پس سعی کنید انگلیسی را حتما با انگلیسی یادبگیرید. توصیه میشود از دیکشنری English To English استفاده کنید و برای فهم جملات و کلمات اصلا نگران نباشید. در صورتی که توضیحات برای شما قابل فهم نباشد کافی است صبر داشته باشید تا به مرور زمان درک نمایید. همچنین میتوانید با جستجو کلمات و دیدن تصاویرشان آنها را به خاطر بسپارید و متوجه شوید.
جملهسازی توسط خودتان سبب به حافظهسپردن میشود و کمتر انگلیسی را فراموش خواهید کرد. با بلند خواندن جملات، عضلات صورت و حنجره خود را به تلفظ واژگان انگلیسی عادت میدهید.
طبق نکته سوم ما برای یادگیری زبان مادری خود فقط تکرار کردهایم. پس در اوایل یادگیری خود مانند اوایل تولد خود فیلسوف نباشید. وسواس داشتن بر گرامر در نهایت سبب گیج شدن شما و در نهایت ناامیدی خودتان میشود.
با استفاده از چنین تکنیکهایی میتوانید مهارت زبان انگلیسی را در بخشهای Listening, Reading, Speaking و Writing تقویت سازید. یکی از معروفترین و کاربردیترین این تکنیکها، تکنیک شادوئینگ است. این تکنیک بسیار ساده است و در طولانی مدت معجزه میکند.
#public #english
@Syntax_fa | boost
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1👌1
Syntax | سینتکس
درود دوستان سینتکسی! 👋 ما در انجمن Persian CC Books قصد داریم کتابهای رایگان و آزاد را در زمینه برنامهنویسی منتشر کنیم. یکی از اهداف ما نگارش مجموعه کتابهای آموزشی PHP است. برای تولید محتوای با کیفیت و درست این مجموعه کتاب PHP، نیاز به مشارکت شما عزیزان…
دوستان بخدا کیک نیست واقعیه. داوطلبانه کتاب مینویسیم لطفا شرکت کنید. شرکت نکنید حقیقتا انگیزهای نمیمونه برای ما.
هدف ما کاملا غیر تجاریه. دوست داریم کل بچههای ایران زمین به آموزش با کیفیت رایگان دسترسی داشته باشند. دوست نداریم به زبان فارسی همش مطالب تکراری و دورههای بی کیفیت تولید بشه. اون هم دورههایی که بیشتر با هدف درامدزایی انجام میشه و نتیجهای جز پکیج فروشهای اینستاگرامی نداره.
حتی شما هم میتونید همکاری کنید. از کتاب نوشتن تا ترجمه. اما بزرگترین و سادهترین کمک شما دوستان همین شرکت در نظرسنجی هست.
ببخشید که زیاد صحبت کردم. پیام موقتی هست.
هدف ما کاملا غیر تجاریه. دوست داریم کل بچههای ایران زمین به آموزش با کیفیت رایگان دسترسی داشته باشند. دوست نداریم به زبان فارسی همش مطالب تکراری و دورههای بی کیفیت تولید بشه. اون هم دورههایی که بیشتر با هدف درامدزایی انجام میشه و نتیجهای جز پکیج فروشهای اینستاگرامی نداره.
حتی شما هم میتونید همکاری کنید. از کتاب نوشتن تا ترجمه. اما بزرگترین و سادهترین کمک شما دوستان همین شرکت در نظرسنجی هست.
ببخشید که زیاد صحبت کردم. پیام موقتی هست.
👍6👎2❤1
پکیج `python-decouple`
یک ابزار مفید برای جداسازی تنظیمات و پیکربندیهای پروژههای پایتون است. این کار باعث میشود که کد شما از وابستگیهای محیطی جدا باشد و تنظیمات را به راحتی تغییر دهید بدون اینکه نیاز به تغییر در کد داشته باشید. این پکیج به خصوص برای مدیریت متغیرهای محیطی و تنظیمات حساس مانند کلیدهای API، اطلاعات پایگاه داده و غیره بسیار مفید است.
ویژگیها
- مدیریت متغیرهای محیطی: متغیرهای محیطی را از فایل
- پشتیبانی از انواع دادهها: قابلیت تبدیل مقادیر متغیرها به انواع دادهای مختلف مانند
- مقدار پیشفرض: امکان تعریف مقادیر پیشفرض برای متغیرهایی که ممکن است در محیط تنظیم نشده باشند.
نصب
برای نصب پکیج
نحوه استفاده
1. ایجاد فایل `.env`:
ابتدا یک فایل با نام
2. استفاده از `config` در کد پایتون:
در کد پایتون خود، پکیج
3. توضیحات بیشتر:
-
این خط مقدار متغیر
-
این خط مقدار متغیر
-
این خط مقدار متغیر
مثال کامل
فرض کنید یک پروژه ساده دارید که از Flask استفاده میکند و میخواهید تنظیمات خود را با استفاده از
1. ایجاد فایل `.env`:
2. کد پایتون:
این کد یک برنامه ساده Flask ایجاد میکند که تنظیمات خود را از فایل
#python_decouple
@Syntax_fa
یک ابزار مفید برای جداسازی تنظیمات و پیکربندیهای پروژههای پایتون است. این کار باعث میشود که کد شما از وابستگیهای محیطی جدا باشد و تنظیمات را به راحتی تغییر دهید بدون اینکه نیاز به تغییر در کد داشته باشید. این پکیج به خصوص برای مدیریت متغیرهای محیطی و تنظیمات حساس مانند کلیدهای API، اطلاعات پایگاه داده و غیره بسیار مفید است.
ویژگیها
- مدیریت متغیرهای محیطی: متغیرهای محیطی را از فایل
.env بارگذاری میکند.- پشتیبانی از انواع دادهها: قابلیت تبدیل مقادیر متغیرها به انواع دادهای مختلف مانند
int`، `float`، `bool و ...- مقدار پیشفرض: امکان تعریف مقادیر پیشفرض برای متغیرهایی که ممکن است در محیط تنظیم نشده باشند.
نصب
برای نصب پکیج
python-decouple میتوانید از دستور زیر استفاده کنید:pip install python-decouple
نحوه استفاده
1. ایجاد فایل `.env`:
ابتدا یک فایل با نام
.env در ریشه پروژه خود ایجاد کنید و تنظیمات مورد نظر خود را در آن وارد کنید. برای مثال:DEBUG=True
SECRET_KEY=mysecretkey
DATABASE_URL=postgres://user:password@localhost:5432/mydatabase
2. استفاده از `config` در کد پایتون:
در کد پایتون خود، پکیج
decouple را وارد کرده و از Config استفاده کنید:from decouple import config
DEBUG = config('DEBUG', default=False, cast=bool)
SECRET_KEY = config('SECRET_KEY')
DATABASE_URL = config('DATABASE_URL')
3. توضیحات بیشتر:
-
config('DEBUG', default=False, cast=bool):این خط مقدار متغیر
DEBUG را از فایل .env میخواند و آن را به نوع bool تبدیل میکند. اگر این متغیر در فایل .env موجود نباشد، مقدار پیشفرض False استفاده میشود.-
config('SECRET_KEY'):این خط مقدار متغیر
SECRET_KEY را از فایل .env میخواند.-
config('DATABASE_URL'):این خط مقدار متغیر
DATABASE_URL را از فایل .env میخواند.مثال کامل
فرض کنید یک پروژه ساده دارید که از Flask استفاده میکند و میخواهید تنظیمات خود را با استفاده از
python-decouple مدیریت کنید.1. ایجاد فایل `.env`:
DEBUG=True
SECRET_KEY=mysecretkey
DATABASE_URL=sqlite:///mydatabase.db
2. کد پایتون:
from flask import Flask
from decouple import config
app = Flask(__name__)
app.config['DEBUG'] = config('DEBUG', default=False, cast=bool)
app.config['SECRET_KEY'] = config('SECRET_KEY')
app.config['SQLALCHEMY_DATABASE_URI'] = config('DATABASE_URL')
@app.route('/')
def home():
return "Hello, World!"
if __name__ == '__main__':
app.run()
این کد یک برنامه ساده Flask ایجاد میکند که تنظیمات خود را از فایل
.env میخواند. با این کار، میتوانید به راحتی تنظیمات خود را تغییر دهید بدون اینکه نیاز به تغییر در کد داشته باشید.#python_decouple
@Syntax_fa
👍3🔥2❤1👌1