Syntax | سینتکس – Telegram
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
تستر اول:
من توی دو ساعت پنج تا باگ پیدا کردم 😃

برنامه نویسا:
چی؟ به چه جراتی باگ پیدا کردی؟😠
میزنیم دهنشو سرویس میکنیم 🙁😟

تستر دوم و 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
👍5🔥4😱1
Syntax | سینتکس
تفاوتهای Go و Rust در مدیریت Race Condition فرض کنید برنامه‌ای می نویسید که چندین ترد یا پروسس به طور همزمان در حال اجرا هستند. این ترد ها ممکن است به داده های مشترکی دسترسی داشته باشند و آنها را بروزرسانی کنند. حال اگر این دسترسی و به‌روزرسانی بدون کنترل…
البته یه نکته رو اضافه کنم:

ما میتونیم از atomic operation استفاده کنیم.
یک متغیر integer بسازیم که تو سطح پایین(سی پی یو) تضمین میکنه که race condition رخ نمیده

پست مرتبط با atomic operation که قبلا گذاشتم:
https://news.1rj.ru/str/Syntax_fa/1995
🔥5👍21
پسر بچه:
وقتی حالم خوب شد، میخوام یه برنامه نویس PHP بشم

#fun

@Syntax_fa
🤣36😁3👍2
بحث اینروزا بین لینوکسیا و ویندوزیا

#fun

@Syntax_fa
🤣23👍3😁1
تحلیل 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 که از دسترسی‌های نادرست به حافظه جلوگیری می‌کنند، می‌تواند به کاهش این خطرات کمک کند.

کلام آخر: شاید تاحدی شرکت 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
🔥18👍41👌1
درود دوستان سینتکسی! 👋

ما در انجمن 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
🔥83👍1👏1
⚡️ زبان انگلیسی: بهترین دوست برنامه‌نویسان در عصر حاضر ⚡️

✏️ مقدمه: همه ما برنامه‌نویسان با کمی پیشرفت در حوزه کاری خودمون، کم کم متوجه می‌شویم که باز دانشمون کافی نیست. معمولا تحقیقات خودمون رو با زبان فارسی شروع می‌کنیم؛ اما پس از مدتی می‌فهمیم که اطلاعات به زبان فارسی آنطور که فکر می‌کنیم هم کاربردی نیستند. اینجاست که متوجه یک موضوع مهم می‌شویم: زبان انگلیسی بهترین ابزار یادگیری برنامه‌نویسی است.


– با توجه به اهمیت فراوان این موضوع تصمیم گرفتم برخی نکات کاربردی در مسیر یادگیری را به شما آموزش بدم. پس Let's Go سینتکسی‌ها! 😉


💡 نکته اول: منبع و روش یادگیری مناسبی انتخاب کنید.

مهمترین نکته در مسیر یادگیری انگلیسی، منبع یادگیری این زبان شیرین است. با انتخاب منبع و روش مطالعه مناسب در این مسیر اصلا احساس ناامیدی نخواهید کرد و با هر بار مطالعه بیشتر به ارتقا دانشتون کمک خواهد نمود.

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


💡 نکته دوم: تمرین زیاد و در یادگیری استمرار داشته باشید.

یادگیری زبان انگلیسی مانند هر مهارت دیگر نیز، نیاز به تمرین زیاد دارد. با داشتن استمرار در فرایند یادگیری زبان انگلیسی، نکاتی را که یادگرفته‌اید را فراموش نخواهید کرد و به مرور خواهید توانست حتی انگلیسی فکر کنید!


💡 نکته سوم: انگلیسی را با انگلیسی یادبگیرید.

آیا پس از تولد، برای یادگیری زبان مادری نیاز به زبان دیگری داشته‌اید؟ جواب قطعا خیر است؛ پس سعی کنید انگلیسی را حتما با انگلیسی یادبگیرید. توصیه می‌شود از دیکشنری English To English استفاده کنید و برای فهم جملات و کلمات اصلا نگران نباشید. در صورتی که توضیحات برای شما قابل فهم نباشد کافی است صبر داشته باشید تا به مرور زمان درک نمایید. همچنین می‌توانید با جستجو کلمات و دیدن تصاویرشان آنها را به خاطر بسپارید و متوجه شوید.


💡 نکته چهارم: خودتان جمله‌سازی کنید و با صدای بلند جملات را بخوانید.

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


💡 نکته پنجم: در اوایل یادگیری زیاد بر گرامر و حفظ کردن آن تمرکز ننمایید.

طبق نکته سوم ما برای یادگیری زبان مادری خود فقط تکرار کرد‌ه‌ایم. پس در اوایل یادگیری خود مانند اوایل تولد خود فیلسوف نباشید. وسواس داشتن بر گرامر در نهایت سبب گیج شدن شما و در نهایت ناامیدی خودتان می‌شود.


💡 نکته ششم و پایانی: تکنیک‌های یادگیری-تقویتی مانند Shadowing بیاموزید.

با استفاده از چنین تکنیک‌هایی می‌توانید مهارت زبان انگلیسی را در بخش‌های 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👎21
🤣33😁4
پکیج `python-decouple`

یک ابزار مفید برای جداسازی تنظیمات و پیکربندی‌های پروژه‌های پایتون است. این کار باعث می‌شود که کد شما از وابستگی‌های محیطی جدا باشد و تنظیمات را به راحتی تغییر دهید بدون اینکه نیاز به تغییر در کد داشته باشید. این پکیج به خصوص برای مدیریت متغیرهای محیطی و تنظیمات حساس مانند کلیدهای 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🔥21👌1
سوال مصاحبه جنگویی:

سطح: سخت

تو جنگو میخوایم هر درخواست HTTP بصورت خودکار توی یک تراکنس دیتابیس قرار بگیره. یعنی اگه هرکدوم از عملیات های دیتابیس در طول پردازش یک درخواست HTTP با خطا مواجه بشه، تموم تغییراتی که توی دیتابیس اعمال شده rollback شه.
بنظرت چیکار میتونیم بکنیم؟

قبل اینکه جوابو ببینی یکم فکر کن یا سرچ کن 😒:
و اما جواب:

میتونیم با اضافه کردن این خط تو settings.py این قابلیت رو اضافه کنیم:
DATABASES["default"]["ATOMIC_REQUESTS"] = True

و اما یه جواب خفن و درست تر توسط [abbasi_ai]:
Atomic request
جواب اصلی سوال نیست، بنظرم چیزی جا افتاده

با توجه به صورت سوال؛ فکر می‌کنم یک session manager هم نیاز هست.
و اگر توی درخواست‌های بعدی یوزر هم چیزی به خطا بخوره تا درخواست اصلی همه چیز باید
Rollback
بخوره


اگه فقط بخوایم تو ویو های خاصی atomic requets رو داشته باشیم چیکار کنیم؟
و جواب این سوال:
میتونیم از دکوریتور atomic استفاده کنیم:
from django.db import transaction
from django.views import View

class MyView(View):

@transaction.atomic
def get(self, request, *args, **kwargs):
...


#interview_question #django

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👀8👍6👌32
This media is not supported in your browser
VIEW IN TELEGRAM
از اونجا که بعضیاتون گفتید چرا همش درباره سی شارپو پی اچ پی میم میذاری. اینم یه میم درباره پایتون

#fun

@Syntax_fa
🤣28❤‍🔥4👎3👍2👌1
اگه کدی که مینویسی، این ویژگی هارو نداره، یه فکری به حال خودت کن 😔:

۱. کدتون مستقل از فریم ورک باشه:
معماری شما نباید وابسته به یه فریم ورک خاص باشه.
کدتون این امکانو بده از فریم ورک ها مثل ابزار ها استفاده کنید بدون اینکه وابسته به محدودیت های یک فریم ورک خاص بشید.

۲. کدتون قابل تست کردن باشه:
قابل تست بودن به این معنیه که بتونید business logic هارو بدون یو آی، دیتابیس، وب سرور یا هر چی وابستگی خارجی که هست، تست کنید.

۳. نباید به ui وابستگی داشته باشید!
قسمت ui رو باید بتونید به راحتی جایگزینش کنید.
مثلا از یک وب ui بتونید بدون اینکه قسمت های دیگه کدتون تغییره کنه، به کنسول و برنامه cli تغییرش بدید.

۴. معماریتون باید مستقل از دیتابیس باشه!
برای مثال: میتونید دیتابیستون رو به راحتی از mysql به mongodb تغییر بدید؟

۵. نباید به یک سرویس خارجی وابستگی داشته باشید!
برای مثال اگه از سرویس اس ام اس استفاده میکنید، آیا میتونید به راحتی بجای کاوه نگار از یه سرویس دیگه استفاده کنید؟

منبع:
https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

#note

@Syntax_fa
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👌4👎3🔥21
با پیشرفت فنّاوری و توسعه روزافزون استفاده از نرم‌افزارها و هوش مصنوعی، استفاده از ابزارها و مکانیزم‌های مختلفی برای توسعهٔ سریع و باکیفیت نرم‌افزارها ضروری است. در این کتاب مجموعه مواردی بیان شده است که به معرفی و پیاده‌سازی این روش‌ها می‌پردازند. چه برای افزایش دانش در حوزه نرم‌افزار و چه برای آشنایی با ابزارها و روش‌های پیاده‌سازی نرم‌افزارهای مدرن و چه برای آمادگی برای مصاحبه‌های شغلی برای مهندسی نرم‌افزار، این کتاب برای شما بسیار مناسب است.

لینک دانلود کتاب

آدرس گیتهاب این کتاب برای بروزرسانی‌ها

https://system-design.ir

Source:
@GoInsights

#book

@Syntax_fa
👍92🔥1
GHOFLE
قفله یک پروژه اپن سورس جنگویی است.
تمرکز اصلی پروژه کار با AWS S3 و Authentication و Payment service هستش.

از اساتید و افراد باتجربه درخواست میکنم اگه میتونن یه نگاه به سورس کد پروژه بندازن و مشکلاتش رو تو کامنت همین پست یا پیوی بگن🙏

نهایت هدف اینه تبدیل به یه پروژه اپن سورس خوب بشه تا بدرد بقیه افراد بخوره

(همچنین اگه دوست دارید برای توسعه پروژه مشارکت داشته باشید، پیوی پیام بدید)

https://github.com/alireza-fa/ghofle
🔥72👍2👏1