Syntax | سینتکس – Telegram
تا وقت هست برید زیرمجموعه گیری 😂
یاد شرکتای هرمی میوفتم

#fun

@Syntax_fa
🤣13👍1
سی شارپ کار ها وقتی برنامه نویس دیگه زبونارو میبینن
(نکنه زیرمجموعه گیریه مایکروسافت بهشون چیزی میده ما خبر نداریم!)

#fun

@Syntax_fa
🤣29😁1
پستای این کانال با هشتگ
#domain_driven_design
رو دنبال کنید اگه دنبال آموزش ddd هستید «آقای بهزاد آزادی» در موردش کلی پست گذاشته
@code_crafters
🔥11
Foreign Function Interface (FFI)
یک مکانیسم است که به ما اجازه می دهد تا از توابع و رویه‌های نوشته شده در زبان‌های دیگه، تو زبان برنامه نویسی دیگه ای استفاده کنیم. این مکانیزم به برنامه‌نویسا این امکانو میده تا از قابلیت‌ها و کارایی زبان‌های دیگه در برنامه‌های خودمون استفاده کنیم.

استفاده از قدرت زبان راست در پایتون 😏
راست یک زبان برنامه‌نویسی مدرن است که به دلیل کارایی بالا و ایمنی حافظه محبوبیت زیادی پیدا کرده است. ترکیب پایتون و راست به شما این امکان را می‌دهد که از مزایای هر دو زبان بهره‌مند شوید: سادگی و قدرت کتابخانه‌های پایتون و کارایی بالای راست.

Pydantic
یک کتابخانه پایتونی برای مدیریت و اعتبارسنجی داده‌ها است که به دلیل استفاده از تایپ‌ها و انوتیشن‌های (annotations) تایپینگ پایتون، کارایی و کاربرپسندی بالایی دارد. این کتابخانه با استفاده از راست (Rust) برای بهبود کارایی استفاده می‌کند.

Pydantic

پایدانتیک به شما اجازه می‌دهد تا مدل‌های داده با تایپ‌های قوی بسازید و اعتبارسنجی داده‌ها را به صورت خودکار انجام دهید. این کتابخانه با استفاده از کتابخانه rust-typed که یک موتور اعتبارسنجی سریع به زبان راست است، کارایی بالایی دارد.

استفاده از راست در پایدانتیک
پایدانتیک با استفاده از کتابخانه‌های راست مانند
rust-typed
برای اعتبارسنجی سریع داده‌ها استفاده می‌کند. این امر به Pydantic اجازه می‌دهد که با سرعت و کارایی بالا اعتبارسنجی داده‌ها را انجام دهد. استفاده از راست در Pydantic باعث شده که این کتابخانه بتواند حجم بالایی از داده‌ها را به سرعت پردازش کند.

پکیج‌های دیگر که از راست استفاده می‌کنند


علاوه بر Pydantic، کتابخانه‌های دیگری نیز هستند که از راست برای بهبود کارایی استفاده می‌کنند. برخی از این کتابخانه‌ها عبارتند از:

1. Polars:
یک کتابخانه سریع برای تحلیل داده‌ها که با استفاده از راست ساخته شده است.

2. PyO3:
یک کتابخانه برای نوشتن افزونه‌های پایتون با راست.

3. RustPython:
یک مفسر پایتون که به زبان راست نوشته شده است و به منظور اجرای کدهای پایتون با کارایی بالاتر طراحی شده است.

استفاده از راست در پایتون به شما امکان می‌دهد که از مزایای کارایی و ایمنی حافظه راست در کنار سادگی و قدرت پایتون بهره‌برداری کنید. Pydantic نمونه‌ای عالی از این ترکیب موفق است که به شما اجازه می‌دهد مدل‌های داده‌ای کارآمد و قابل اعتماد بسازید.

#FFI

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
یکی از سوال هایی که تو اکثر مصاحبه ها ازتون پرسیده میشه ☹️
(البته با خوندن این پست قرار نیست سوالات مصاحبه رو بخوبی جواب بدید😒
ولی میتونه بهتون دید بده تا بیشتر در خصوصش بخونید و یاد بگیرید)

درباره SQL و NoSQL بگو
SQL (Structured Query Language)
و
NoSQL (Not Only SQL)
دو نوع اصلی از سیستم‌های مدیریت پایگاه داده (DBMS) هستند که هر یک دارای مزایا و معایب خود می‌باشند. تفاوت‌های اصلی بین این دو شامل موارد زیر می‌شود:

تفاوت‌های اصلی SQL و NoSQL

1. ساختار داده‌ها:
- SQL
: از جداول با ساختار ثابت استفاده می‌کند که در آن‌ها داده‌ها به صورت سطرها و ستون‌ها سازمان‌دهی می‌شوند. این ساختار معمولاً نیازمند طراحی دقیق و پیش‌فرضی است.

- NoSQL:
انعطاف‌پذیرتر است و می‌تواند از انواع مختلفی از مدل‌های داده شامل سندی، ستونی، گرافی و مبتنی بر کلید-مقدار استفاده کند. این امر به راحتی در برخورد با داده‌های غیرساختاریافته و تغییرپذیر کمک می‌کند.

2. زبان پرس و جو:
- SQL:
از یک زبان پرس و جوی ساختاریافته (SQL) استفاده می‌کند که استاندارد و ثابت است.
- NoSQL:
زبان پرس و جوی خاصی ندارد و هر سیستم NoSQL ممکن است از روش‌های متفاوتی برای دسترسی و مدیریت داده‌ها استفاده کند.

3. نرمال‌سازی داده‌ها:
- SQL:
داده‌ها به صورت نرمال با روابط تعریف‌شده بین جداول ذخیره می‌شوند.
- NoSQL:
نرمال‌سازی کمتری دارد و داده‌ها به صورت غیرنرمال و بدون نیاز به روابط پیچیده ذخیره می‌شوند.

شرایط استفاده از SQL

1. پیچیدگی و انسجام داده‌ها:
- زمانی که داده‌ها دارای روابط پیچیده و متعددی هستند و نیاز به حفظ انسجام داده‌ها داریم، SQL انتخاب مناسبی است.

2. استانداردهای صنعتی:
- SQL
به دلیل سابقه طولانی و استاندارد بودن در بسیاری از صنایع و برنامه‌ها مورد استفاده قرار می‌گیرد.

3. پشتیبانی تراکنش‌های ACID:
- اگر برنامه نیاز به پشتیبانی از تراکنش‌های اتمی، یکپارچه، ایزوله و پایدار (ACID) دارد، SQL بهترین انتخاب است.

شرایط استفاده از NoSQL

1. حجم بزرگ داده‌ها:
- در شرایطی که با حجم بزرگی از داده‌های غیرساختاریافته یا نیمه‌ساختاریافته روبه‌رو هستیم، NoSQL عملکرد بهتری دارد.

2. مقیاس‌پذیری بالا:
- اگر نیاز به مقیاس‌پذیری افقی و انعطاف‌پذیری بیشتری داریم، NoSQL مناسب‌تر است.

3. سرعت بالا و تأخیر کم:
- برای برنامه‌هایی که نیاز به سرعت بالا و تأخیر کم در خواندن و نوشتن داده‌ها دارند، NoSQL گزینه بهتری است.

دلایل استفاده از SQL


1. پایداری و قابلیت اعتماد:
- سیستم‌های SQL به دلیل پایبندی به استانداردهای ACID و ساختار منظم، قابلیت اعتماد بالایی دارند.

2. ابزارهای تحلیلی و گزارش‌گیری قوی:
- وجود ابزارهای متنوع برای تحلیل و گزارش‌گیری داده‌ها SQL را به گزینه‌ای مناسب برای تحلیل‌گران و مدیران داده تبدیل کرده است.

3. پشتیبانی گسترده و جامعه کاربری:
- به دلیل استفاده وسیع و سابقه طولانی، پشتیبانی و منابع زیادی برای حل مشکلات و یادگیری SQL وجود دارد.

دلایل استفاده از NoSQL

1. انعطاف‌پذیری در مدل داده‌ها:
- NoSQL
اجازه می‌دهد داده‌ها به روش‌های مختلفی ذخیره و مدیریت شوند که این امر برای برنامه‌های مختلف انعطاف‌پذیری زیادی فراهم می‌کند.

2. سرعت و کارایی بالا:
- به دلیل ساختار غیرنرمال و مقیاس‌پذیری افقی، NoSQL می‌تواند عملیات را با سرعت بیشتری انجام دهد.

3. مدیریت داده‌های متنوع:
- NoSQL
مناسب برای مدیریت داده‌های متنوع و تغییرپذیر است که به سرعت در حال رشد و تغییر هستند.

به طور خلاصه، انتخاب بین SQL و NoSQL بستگی به نیازها و شرایط خاص هر پروژه دارد. SQL برای مواردی که نیاز به انسجام و یکپارچگی داده‌ها، تراکنش‌های ACID و استانداردهای صنعتی است، مناسب‌تر است. در مقابل، NoSQL برای برنامه‌هایی که نیاز به مقیاس‌پذیری بالا، انعطاف‌پذیری در مدل داده‌ها و سرعت بالا دارند، گزینه بهتری محسوب می‌شود.

Written by chatgpt 🍸

#sql #nosql

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
پورت صفر:

در مفاهیم شبکه و ارتباطات، پورت 0 یک پورت خاص است و به عنوان پورت "رزرو شده" شناخته می‌شود. وقتی به یک برنامه یا سرویس شبکه نیاز دارید تا به یک پورت خاص متصل شود، می‌توانید از یک شماره پورت عددی استفاده کنید. پورت‌ها از اعداد صحیح بین 0 تا 65535 تشکیل شده‌اند.

وقتی یک برنامه یا سرویس به پورت 0 متصل می‌شود، این به معنای این است که برنامه یا سرویس مورد نظر، سیستم عامل را مکلف می‌کند یک پورت آزاد و در دسترس را به آن اختصاص دهد.

به عنوان مثال، در برنامه‌نویسی شبکه، وقتی یک سوکت (socket) برای برقراری ارتباط با سروری فراخوانی می‌شود و شماره پورت آن را برابر با 0 قرار می‌دهید، سیستم عامل یک پورت آزاد را به برنامه اختصاص می‌دهد و برنامه می‌تواند آن را برای ارتباط استفاده کند.

استفاده از پورت 0 معمولاً برای برنامه‌هایی است که نمی‌خواهند به طور صریح پورت خاصی را انتخاب کنند، به سیستم اجازه می‌دهند یک پورت خالی را برایشان انتخاب کند.

برای مثال توی جنگو اگه بنویسید‌ runserver 0 بصورت رندوم یک پورت خالی رو انتخاب می کنه.

#zero_port

@Syntax_fa
👍10👌1
This media is not supported in your browser
VIEW IN TELEGRAM
وقتی تو Ipados ماشین حساب نمیارن و نمیارن، آخرش همچین چیز جذابیو رونمایی می کنن 😎

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥9👎2🔥2👍1
مهندس نرم افزاره مدیر عامل شرکتشو سر پرداخت نکردن حقوقش کشته 🫠

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
😍54❤‍🔥4👏3😁3
Syntax | سینتکس
مهندس نرم افزاره مدیر عامل شرکتشو سر پرداخت نکردن حقوقش کشته 🫠 #fun @Syntax_fa
اگه کارفرمایی
ری اکشنارو میبینی؟
به خودت بیا مرد/زن
وگرنه «شاید برای شما هم اتفاق بیوفتد» 🔪
Please open Telegram to view this post
VIEW IN TELEGRAM
😁19👌5
Serialization و Encoding

Serialization
سریالیزیشن فرآیندی است که طی آن یک شیء (object) در حافظه به یک فرمت قابل حمل تبدیل می‌شود تا بتوان آن را ذخیره کرد یا از طریق شبکه ارسال نمود. این فرایند شامل تبدیل وضعیت (state) یک شیء به یک رشته بایت (byte stream) است که می‌تواند بعداً deserialized شود تا شیء اصلی بازیابی شود.

موارد استفاده از Serialization:
- ذخیره‌سازی پایدار: برای ذخیره‌سازی اشیاء در فایل‌ها یا پایگاه داده‌ها به طوری که بتوان بعداً آنها را بازیابی کرد.
- انتقال داده‌ها: برای ارسال اشیاء بین سیستم‌های مختلف از طریق شبکه، مثلاً در پروتکل‌های ارتباطی یا وب سرویس‌ها.
- کپی عمیق (Deep Copy): برای ایجاد نسخه‌ای دقیق از یک شیء.

فرمت‌های متداول Serialization:
- JSON: یک فرمت متنی سبک که برای تبادل داده‌ها بین سرور و وب مناسب است.
- XML: یک فرمت متنی که برای ذخیره و انتقال داده‌ها استفاده می‌شود و بیشتر در سیستم‌های سازمانی کاربرد دارد.
- Protocol Buffers: یک فرمت باینری کارآمد و فشرده که توسط گوگل توسعه یافته است.
- Avro: یک فرمت باینری که توسط Apache برای استفاده در سیستم‌های بزرگ داده‌ای توسعه یافته است.

Encoding

فرآیندی است که طی آن داده‌ها به یک فرمت خاص تبدیل می‌شوند تا قادر به انتقال یا ذخیره‌سازی باشند. این فرایند می‌تواند شامل تبدیل داده‌های متنی به یک فرمت باینری خاص یا تبدیل داده‌های باینری به یک فرمت متنی باشد.

موارد استفاده از Encoding:
- انتقال داده‌ها: برای اطمینان از اینکه داده‌ها به درستی از طریق شبکه منتقل می‌شوند.
- ذخیره‌سازی داده‌ها: برای اطمینان از اینکه داده‌ها به درستی در فایل‌ها یا پایگاه داده‌ها ذخیره می‌شوند.
- نمایش داده‌ها: برای تبدیل داده‌ها به فرمتی که قابل نمایش یا چاپ باشد.

فرمت‌های متداول Encoding:
- UTF-8: یک فرمت متنی که برای رمزگذاری کاراکترهای یونیکد استفاده می‌شود.
- Base64: یک فرمت متنی که برای رمزگذاری داده‌های باینری استفاده می‌شود به طوری که بتوان آنها را در متن‌های ASCII ذخیره یا انتقال داد.

تفاوت بین Serialization و Encoding

1. هدف:
- Serialization: هدف اصلی serialization تبدیل یک شیء به یک فرم قابل حمل است که بتوان آن را ذخیره یا منتقل کرد و سپس دوباره به شیء اصلی تبدیل نمود.
- Encoding: هدف اصلی encoding تبدیل داده‌ها به یک فرمتی است که قابل انتقال، ذخیره یا نمایش باشد.

2. نوع داده‌ها:
- Serialization: معمولاً شامل تبدیل اشیاء پیچیده و داده‌های ساختاریافته به یک رشته بایت است.
- Encoding: معمولاً شامل تبدیل داده‌های متنی یا باینری به یک فرمت خاص برای انتقال یا ذخیره‌سازی است.

3. فرایند معکوس:
- Serialization: فرایند معکوس serialization، deserialization نامیده می‌شود که طی آن رشته بایت به شیء اصلی تبدیل می‌شود.
- Encoding: فرایند معکوس encoding به decoding معروف است که طی آن داده‌های رمزگذاری شده به فرم اولیه خود بازگردانده می‌شوند.

4. سطح کاربرد:
- Serialization: بیشتر در سطح برنامه‌نویسی و برای انتقال اشیاء بین سیستم‌ها و ذخیره‌سازی پایدار استفاده می‌شود.
- Encoding: بیشتر در سطح شبکه و انتقال داده‌ها و برای اطمینان از اینکه داده‌ها به درستی منتقل یا ذخیره می‌شوند استفاده می‌شود.

#encoding #serialization

@Syntax_fa
👍91👎1
Syntax | سینتکس
Serialization و Encoding Serialization سریالیزیشن فرآیندی است که طی آن یک شیء (object) در حافظه به یک فرمت قابل حمل تبدیل می‌شود تا بتوان آن را ذخیره کرد یا از طریق شبکه ارسال نمود. این فرایند شامل تبدیل وضعیت (state) یک شیء به یک رشته بایت (byte stream)…
توضیحات ساده تر

مفهوم serialization و encoding گاهی ممکن است کمی گیج‌کننده باشد، خصوصاً زمانی که صحبت از تبدیل داده‌ها به فرمت‌های مختلف می‌شود. بیاید یک مثال بزنیم:

تبدیل دیکشنری به JSON

زمانی که یک دیکشنری (یا هر ساختار داده‌ای دیگر) را به JSON تبدیل می‌کنیم، این عملیات serialization نام دارد. در این فرآیند، داده‌های ساختاریافته به یک رشته متنی تبدیل می‌شوند. این رشته متنی، نمایشی از داده‌های اصلی است که در حافظه برنامه وجود دارد.

JSON به عنوان Byte Array


درست است که هر رشته متنی (مانند JSON) در نهایت به صورت بایت‌ها (byte array) در حافظه ذخیره می‌شود، اما این تبدیل به طور ضمنی توسط سیستم انجام می‌شود. یعنی، وقتی ما یک دیکشنری را به JSON تبدیل می‌کنیم، نتیجه یک رشته متنی (string) است که در حافظه به صورت بایت‌ها ذخیره می‌شود. این رشته متنی را می‌توانیم به یک فایل ذخیره کنیم یا از طریق شبکه ارسال کنیم.

تفاوت بین Serialization و Encoding


- Serialization: فرایندی است که داده‌های ساختاریافته را به یک فرمت قابل انتقال یا ذخیره‌سازی (مانند JSON یا XML) تبدیل می‌کند. این عملیات معمولاً شامل تبدیل داده‌های پیچیده به رشته‌های متنی یا باینری است. هدف از serialization این است که داده‌ها را به شکلی تبدیل کنیم که بتوان آنها را ذخیره کرد یا از طریق شبکه انتقال داد.

- Encoding: فرایندی است که داده‌ها را به یک فرمت خاص برای انتقال یا ذخیره‌سازی تبدیل می‌کند. این ممکن است شامل تبدیل داده‌های متنی یا باینری به یک فرمت دیگر باشد. برای مثال، تبدیل یک رشته JSON به Base64 یک عملیات encoding است.

پس

زمانی که دیکشنری را به JSON تبدیل می‌کنیم، نتیجه یک رشته متنی است. این رشته متنی به طور ضمنی به بایت‌ها تبدیل می‌شود زیرا رشته‌ها در حافظه به صورت بایت‌ها ذخیره می‌شوند. اما این تبدیل به بایت‌ها به معنای encoding نیست.

چرا این تبدیل encoding نیست؟

- Serialization: زمانی که دیکشنری را به JSON تبدیل می‌کنیم، این عملیات serialization است زیرا ما داده‌های ساختاریافته را به یک فرمت متنی (JSON) تبدیل کرده‌ایم.
- Encoding: اگر بخواهیم این JSON را به فرمت دیگری (مانند Base64) تبدیل کنیم تا برای انتقال مناسب‌تر باشد، این عملیات encoding است.

مثال

1. Serialization:
- دیکشنری را به JSON تبدیل می‌کنیم.
- نتیجه: یک رشته متنی (مثلاً {"key": "value"}).

2. Encoding:
- JSON را به Base64 تبدیل می‌کنیم.
- نتیجه: یک رشته متنی دیگر که نمایشی از داده‌های اصلی است (مثلاً eyJrZXkiOiAidmFsdWUifQ==).

#serialization #encoding

@Syntax_fa
👍62
Syntax | سینتکس
توضیحات ساده تر مفهوم serialization و encoding گاهی ممکن است کمی گیج‌کننده باشد، خصوصاً زمانی که صحبت از تبدیل داده‌ها به فرمت‌های مختلف می‌شود. بیاید یک مثال بزنیم: تبدیل دیکشنری به JSON زمانی که یک دیکشنری (یا هر ساختار داده‌ای دیگر) را به JSON تبدیل…
من هنوز فکر میکنم توضیح بیشتر نیازه ولی این دیگه آخریشه 😂

پس میشه گفت 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62
یه روش آوردم صد درصد جوابه💅

میگه:
هربار که یه سوال برنامه نویسی دارم که بدجور به کمک نیاز دارم. میرم تو ردیت پستش میکنم بعد با یه اکانت دیگه یه جواب خیلی پرت میدم.
ملت براشون مهم نیست کمک کنن ولی خیلی دوست دارن جواب اشتباهو تصحیح کنن

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣30👍7
خب من بعد مدتها تصمیم گرفتم یه پست بذارم و اونم نتیجه یه تجربه که شاید خیلیا مث من دوس دارن چیزای جدید و بروز رو استفاده کنن.
من روی سیستم شرکت از اوبونتو ۲۳.۰۴ فردای روزی که نسخه lts جدید اومد اپگرید کردم به ۲۴.۰۴ و باگای عجیبی رو دیدم که کافر نبینه و مسلمون نشنوه.
از مصرف زیادی منابع تا پر شدن خیلی سریع حافظه تا اخرین بایت ممکن بخاطر لاگ سیستمی.
ریپورت باگ زدم و بهم توصیه کردن از مطالب فوروم اوبونتو کمک بگیرم :(
باگ عجیبترش این بود که وقتی یه برنامه ای رو مکسیمایز میکردی، حدود یک سوم از صفحه که میشد سمت راست صفحه رو نمیشد با موس انتخاب و کلیک کرد :|
با اپدیت های متوالی هم درست نشد و مجبور شدم حدود یه ماه باهاش سر کنم یه جوری و بیشتر کارامو به سیستم ویندوزی کنم تا سر فرصت داونگرید کنم.
دیروز هم اپدیت ۳۰۰ مگابایتی اومد براش، نصب کردم و دیدم اوکی شده مشکلاتش (بجز حجم زیاد لاگ تولیدی که با روشایی که قبلا لاگ رو لیمیت میکردم جواب نداد)

و کلام اخر اینکه اگه میخواید حدودا بدونید چه زمانی مناسبه که به اوبونتو جدید اپگرید کنید، به نظرم زمانی که مینت میخواد نسخه جدید بده زمان مناسبیه (چون مینت بر پایه اوبونتو هستش).
و من الله توفیق...


@Syntax_fa
👍92
Lili (U Turn)
AaRON
❤‍🔥5🔥2
توضیح کامیت مناسب:
یه سری تغییرات کوچیک 😒

#fun

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣24😁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 میکنیم:

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
👍103🔥3
Syntax | سینتکس
bytes buffer and string builder یکی از انواع داده ای که در اکثر زبان‌های برنامه نویسی وجود دارد و در استفاده از آن باید دقت داشته باشیم نوع string است. قطعه کد زیر را در نظر بگیرید: var query string = "select " query += "name, family " query…
سوال:
تو پایتون چطور از 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 هنگام خواندن فایل‌ها استفاده می‌شود تا بدانیم چه زمانی به انتهای فایل رسیده‌ایم.

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
پیشگیری بهتر از درمان است

#fun

@Syntax_fa
🤣19👎8😁2👌2👍1😍1🤨1
یک تمرین کاربردی برای کار با فایل و اپلیکیشن های تحت خط فرمان 🍸

سیستم مدیریت کتابخانه شخصی

امکانات پروژه:

افزودن کتاب جدید:
کاربران می‌توانند کتاب‌های جدیدی با عنوان، نویسنده، سال انتشار و ژانر اضافه کنند.
اطلاعات کتاب‌ها فقط در فایل متنی (txt یا csv و ..) ذخیره می‌شود.

مشاهده لیست کتاب‌ها:
کاربران می‌توانند لیستی از همه کتاب‌های موجود را مشاهده کنند.
نمایش اطلاعات کتاب‌ها شامل عنوان، نویسنده، سال انتشار و ژانر.

ویرایش اطلاعات کتاب‌ها:
کاربران می‌توانند اطلاعات کتاب‌های موجود را ویرایش کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و ویرایش جزئیات مانند عنوان، نویسنده، سال انتشار و ژانر.

حذف کتاب‌ها:
کاربران می‌توانند کتاب‌ها را از سیستم حذف کنند.
انتخاب کتاب بر اساس شناسه یا عنوان و حذف آن از فایل ذخیره‌سازی.

جستجوی کتاب‌ها:
امکان جستجوی کتاب‌ها بر اساس عنوان، نویسنده، سال انتشار یا ژانر.
نمایش نتایج جستجو به کاربر.

علامت‌گذاری کتاب‌ها به عنوان خوانده شده/نشده:
کاربران می‌توانند وضعیت کتاب‌ها را به عنوان خوانده شده یا نشده علامت‌گذاری کنند.
امکان فیلتر کردن کتاب‌ها بر اساس وضعیت خوانده شده یا نشده.

نیازمندی‌های پروژه:

ساختار فایل:
استفاده فقط از فایل txt و csv و ... برای ذخیره اطلاعات کتاب‌ها.
هر کتاب شامل فیلدهای عنوان، نویسنده، سال انتشار، ژانر و وضعیت خوانده شده.

رابط کاربری CLI:
پیاده‌سازی دستورات مختلف برای افزودن، مشاهده، ویرایش، حذف و جستجوی کتاب‌ها.
ارائه منوی انتخاب به کاربر برای اجرای دستورات.

مدیریت ورودی و خروجی فایل:
خواندن و نوشتن اطلاعات کتاب‌ها از فایل.
اطمینان از حفظ اطلاعات موجود در فایل و جلوگیری از از دست رفتن داده‌ها.
این پروژه به کاربران اجازه می‌دهد تا کتاب‌های خود را به راحتی مدیریت کنند و یک سیستم کامل برای مدیریت کتابخانه شخصی خود داشته باشند.

امکان رجیستر پ لاگین کردن کاربر آپشنال هستش و اگه بخواید میتونید اضافه کنید

(اگه نوشتید به اشتراک بذارید تا با هم بررسیش کنیم و اشکالاتش رو رفع کنیم)

#exercise

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1👀1