Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
بریم سراغ پرتکلهای کامپیوتری، یا شاید بهتره بگیم پرتکلهای شبکهای.
Network protocols
اما قبل از اینکه برم سراغش، یه کوشولو راجع به لایههای شبکه میخوام صحبت کنم.
شبکهکار ها، برای اینکه علم شبکه رو توی کامپیوتر راحت تر توضیح بدن، یسکری لایههای انتزاعی توی شبکه متصور میشن و توی اون لایهها شروع میکنن به توضیح دادن بقیه مسائل.
وقتی میگیم انتزاعی، یعنی وجود خارجی نداره، فقط یه مفهومه... انتزاع ترجمهای از Abstract هست... یعنی یه مفهوم ذهنی یا سوری که ما فقط توی ذهنمون فرضش میکنیم... در واقعیت وجود نداره.
یکی از معروف ترین مدلهایی که این لایه هارو دستهبندی میکنه مدل OSI هست:
OSI model = The Open Systems Interconnection model
این مدل، کل شبکه یه کامپیوتر رو توی 7 بخش تقسیم بندی میکنه و توضیح میده
=+=+=+=+=+=+=+=+=+=+
یه بار به زبان ساده میگم، قسمتی از ساختار کامپیوترها وجود داره که ارتباط این کامپیوترهارو با هم دیگه ممکن میکنه، به اون قسمت میگن شبکه.✅
برای اینکه شبکه رو توضیح بدن، یه سری مدل ذهنی ازش درست میکنن که مثلا شبکه یک کامپیوتر 7 لایه داره، و هر لایه رو جدا توضیح میدن که چیکار میکنه...
هر کدوم از این لایهها یسری پرتکل دارن.
پرتکل یعنی چی؟
پرتکل یعنی یکسری مجموعه قرارداد - یه قراردادی که همه روش تفاهم نظر دارن - توی بحث ما، یعنی مجموعه قرارداد هایی که ادبیات حرف زدن کامپیوترا با هم دیگه رو مشخص میکنه.
مثلا میگیم ما قرارداد میکنیم که هر کسی با این ادبیات سوال پرسید، جوابش رو بدیم:
Who has <IP address>? Tell <IP address>.
شاید باورتون نشه، ولی جمله بالا واقعیه... ادبیاتی هست که توی پرتکل ARP استفاده میشه
ARP = Address Resolution Protocol
جلوتر میبینیم که توی خیلی از پرتکلهای قدیمی ، حتی مثل HTTP ، ادبیات مراوده کامپیوترا باهم خیلی شبیه ادبیات تکلم انسانهاست...
میان اول به هم دیگه سلام میکنن، بعدش میپرسن که اوکی هستی با هم حرف بزنیم، طرف یا اوکی میده یا نه، خیلی بامزه هست😬 بهش میرسیم.
=+=+=+=+=+=+=+=+=+=+
بیاین باهم 7 لایه شبکه رو توی مدل OSI ببینیم:
Network protocols
اما قبل از اینکه برم سراغش، یه کوشولو راجع به لایههای شبکه میخوام صحبت کنم.
شبکهکار ها، برای اینکه علم شبکه رو توی کامپیوتر راحت تر توضیح بدن، یسکری لایههای انتزاعی توی شبکه متصور میشن و توی اون لایهها شروع میکنن به توضیح دادن بقیه مسائل.
وقتی میگیم انتزاعی، یعنی وجود خارجی نداره، فقط یه مفهومه... انتزاع ترجمهای از Abstract هست... یعنی یه مفهوم ذهنی یا سوری که ما فقط توی ذهنمون فرضش میکنیم... در واقعیت وجود نداره.
یکی از معروف ترین مدلهایی که این لایه هارو دستهبندی میکنه مدل OSI هست:
OSI model = The Open Systems Interconnection model
این مدل، کل شبکه یه کامپیوتر رو توی 7 بخش تقسیم بندی میکنه و توضیح میده
=+=+=+=+=+=+=+=+=+=+
یه بار به زبان ساده میگم، قسمتی از ساختار کامپیوترها وجود داره که ارتباط این کامپیوترهارو با هم دیگه ممکن میکنه، به اون قسمت میگن شبکه.✅
برای اینکه شبکه رو توضیح بدن، یه سری مدل ذهنی ازش درست میکنن که مثلا شبکه یک کامپیوتر 7 لایه داره، و هر لایه رو جدا توضیح میدن که چیکار میکنه...
هر کدوم از این لایهها یسری پرتکل دارن.
پرتکل یعنی چی؟
پرتکل یعنی یکسری مجموعه قرارداد - یه قراردادی که همه روش تفاهم نظر دارن - توی بحث ما، یعنی مجموعه قرارداد هایی که ادبیات حرف زدن کامپیوترا با هم دیگه رو مشخص میکنه.
مثلا میگیم ما قرارداد میکنیم که هر کسی با این ادبیات سوال پرسید، جوابش رو بدیم:
Who has <IP address>? Tell <IP address>.
شاید باورتون نشه، ولی جمله بالا واقعیه... ادبیاتی هست که توی پرتکل ARP استفاده میشه
ARP = Address Resolution Protocol
جلوتر میبینیم که توی خیلی از پرتکلهای قدیمی ، حتی مثل HTTP ، ادبیات مراوده کامپیوترا باهم خیلی شبیه ادبیات تکلم انسانهاست...
میان اول به هم دیگه سلام میکنن، بعدش میپرسن که اوکی هستی با هم حرف بزنیم، طرف یا اوکی میده یا نه، خیلی بامزه هست😬 بهش میرسیم.
=+=+=+=+=+=+=+=+=+=+
بیاین باهم 7 لایه شبکه رو توی مدل OSI ببینیم:
👍1
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
7 لایه شبکه به ترتیب از بالا به پایین
Application
Presentation
Session
Transport
Network
Data Link
Physical
=+=+=+=+=+=+=+=+
Application
Presentation
Session
Transport
Network
Data Link
Physical
=+=+=+=+=+=+=+=+
🔥2
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
Application:
بالاترین لایه، اپلیکیشن هست... از اسمش هم معلومه، جاییه که اپلیکیشنها دارن اجرا میشن و میخوان به اینترنت وصل بشن، حرکات شبکهای توی مرورگر شما ، توی برنامه پایتون شما، توی اپلیکیشن تلگرام شما، توی دیسکورد شما، توی هر اپلیکشنی که به اینترنت (اصطلاح درست تر: شبکه) وصل میشه توی این لایه بررسی میشه - به دیتایی که توی این لایه ردوبدل میشه میگن صرفا دیتا!
بعضی از پرتکلهای این لایه:
HTTP-FTP-SMTP-SNMP-IMAP-POP3-IRC-DNS-SSH...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Presentation:
وقتی هست که یه لایه از اپلیکیشن میایم پایینتر، یکسری حرکات روی داده های ورودی از لایه قبلی (اپلیکیشن) انجام میشه ، مثل رمزنگاری - فشردهسازی - قالببندی(فرمت) و ... این حرکات توی این لایه یعنی لایه نمایش یا پرزنتیشن انجام میشه - به دیتایی که اینجا وجود داره همچنان میگن دیتا!
بعضی از پرتکلهای این لایه:
SSL/TLS-ASCII-JPEG-MPEG-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Session:
لایه بعدی لایه نشست یا سشن هست، به نوعی مفهوم سوکت توی این لایه مطرح میشه، باید بعدا مفصل راجع به سوکت و پورت و این داستانا حرف بزنیم، نگاشت دیتا به پورتها توی این لایه انجام میشه - همچنان به دیتایی که توی این لایه در حرکته میگن دیتا!
بعضی از پرتکلهای این لایه:
SOCKS-SOCKS5-PAP-RPC-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Transport:
حالا دیتا از 3 لایه قبلی رد شده و وارد لایه انتقال، یا ترنسپورت میشه! پرتکلهایی که دیتارو بصورت End2End رد و بدل میکنن، توی این لایه مدل میشن. این لایه یکی از لایه های خیلی مهم هستش، و بهش میگن قلب مدل OSI ، دیتاهای شما توی این لایه آماده میشن برای این که روی خط به پرتکل خاصی ارسال بشن. مفهوم TCP و UDP توی این لایه شکل پیدا میکنه(باید بعدا توضیحش بدیم)، و به نوعی اعتبارسنجی/اروریابی ارسال و دریافت دیتا از روی خط، توی این لایه انجام میشه - دیگه به دیتایی که توی این لایه داره انتقال داده میشه نمیگن دیتا، بلکه میگن سگمنت!
بعضی از پرتکلهای این لایه:
TCP-UDP-AH-SPX-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Network:
لایه بعدی لایه نتورک یا شبکه هست، از این لایه به بعد میتونیم به شکل واقعی بگیم که دیتاها از حوزه نرمافزاری خارج شدن و الان دارن توی سخت افزار میچرخن و آماده خروج میشن. حالا اصطلاحات شبکهای معنا پیدا میکنه، روتینگ و سوئیچینگ (Routing-Switching) توی این لایه مطرح میشه و بالاخره در این لایه هست که مفهومی به اسم IP بوجود میاد! IP خودش یک پرتکل هست(Internet Protocol) پرتکل اینترنت! شاید خیلیا ندونن، و کار این IP آدرسدهی هست، ولی آدرس دهی منطقی، توی شبکه بهش میگن لاجیکال ادرسینگ. به زبان ساده توی این لایه دیتا توی یه پاکت نامه گذاشته میشه و روش آدرس منبع و مقصد نوشته میشه که بدیمش به اداره پست:) همچنین اینکه پاکتنامه از چه مسیری باید بره تا برسه هم توی این لایه مشخص میشه - اسم دیتایی که توی این لایه وجود داره رو گذاشتن پاکت-نامه یا پکت!
بعضی از پرتکلهای این لایه:
IP-IPSec-NAT-ICMP-ARP-IPX-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Data Link:
لایه بعدی، لایه دیتا-لینک هست. به نوعی وظیفه این لایه آدرسدهی فیزیکی هست، ما الان پکتهامون اومدن، همه چیشون آماده هست، آدرسدهی منطقی هم شدن یعنی منبع و مقصدشون با ادبیات IP مشخص شده و آماده فرستاده شدن روی خط هستن ، این لایه پکتهارو میپیچه داخل یه کیسه گونی و برای هر سخت-افزار که باید بره آدرسدهی میکنه - بهش میگن مک ادرسینگ MAC - به زبان ساده، آدرسدهی حقیقی و سخت افزاری توی این لایه انجام میشه - به دیتایی که توی این لایه هست میگن فریم!
بعضی از پرتکلهای این لایه:
MAC-Ethernet-VLAN-PPTP-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Physical:
و بالاخره میرسیم به آخرین لایه. همه کارها انجام شده، همه نامه ها آماده شدن و کیسه گونی ها نیز دسته بندی شدن، آدرسا مشخصه، مسیر مشخصه، همه چی آمادهست. تنها چیزی که لازمه اینه که بطور فیزیکی و واقعی 0 و 1 ها روی خط نوشته بشن، حالا میخواد بیسیم باشه، فیبر باشه، کابل باشه، هرچی، بیت به بیت اطلاعات بطور حقیقی و فیزیکی روی خط ارسال میشن. پالسها و سیگنالهای الکتریکی، صفر و یک ها، علم مخابرات و... - به دیتایی که توی این لایه هست میگن صفر و یک:) یا بیت.
بعضی از پرتکلهای این لایه:
RS232-DSL-RJ45-USB-...
بالاترین لایه، اپلیکیشن هست... از اسمش هم معلومه، جاییه که اپلیکیشنها دارن اجرا میشن و میخوان به اینترنت وصل بشن، حرکات شبکهای توی مرورگر شما ، توی برنامه پایتون شما، توی اپلیکیشن تلگرام شما، توی دیسکورد شما، توی هر اپلیکشنی که به اینترنت (اصطلاح درست تر: شبکه) وصل میشه توی این لایه بررسی میشه - به دیتایی که توی این لایه ردوبدل میشه میگن صرفا دیتا!
بعضی از پرتکلهای این لایه:
HTTP-FTP-SMTP-SNMP-IMAP-POP3-IRC-DNS-SSH...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Presentation:
وقتی هست که یه لایه از اپلیکیشن میایم پایینتر، یکسری حرکات روی داده های ورودی از لایه قبلی (اپلیکیشن) انجام میشه ، مثل رمزنگاری - فشردهسازی - قالببندی(فرمت) و ... این حرکات توی این لایه یعنی لایه نمایش یا پرزنتیشن انجام میشه - به دیتایی که اینجا وجود داره همچنان میگن دیتا!
بعضی از پرتکلهای این لایه:
SSL/TLS-ASCII-JPEG-MPEG-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Session:
لایه بعدی لایه نشست یا سشن هست، به نوعی مفهوم سوکت توی این لایه مطرح میشه، باید بعدا مفصل راجع به سوکت و پورت و این داستانا حرف بزنیم، نگاشت دیتا به پورتها توی این لایه انجام میشه - همچنان به دیتایی که توی این لایه در حرکته میگن دیتا!
بعضی از پرتکلهای این لایه:
SOCKS-SOCKS5-PAP-RPC-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Transport:
حالا دیتا از 3 لایه قبلی رد شده و وارد لایه انتقال، یا ترنسپورت میشه! پرتکلهایی که دیتارو بصورت End2End رد و بدل میکنن، توی این لایه مدل میشن. این لایه یکی از لایه های خیلی مهم هستش، و بهش میگن قلب مدل OSI ، دیتاهای شما توی این لایه آماده میشن برای این که روی خط به پرتکل خاصی ارسال بشن. مفهوم TCP و UDP توی این لایه شکل پیدا میکنه(باید بعدا توضیحش بدیم)، و به نوعی اعتبارسنجی/اروریابی ارسال و دریافت دیتا از روی خط، توی این لایه انجام میشه - دیگه به دیتایی که توی این لایه داره انتقال داده میشه نمیگن دیتا، بلکه میگن سگمنت!
بعضی از پرتکلهای این لایه:
TCP-UDP-AH-SPX-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Network:
لایه بعدی لایه نتورک یا شبکه هست، از این لایه به بعد میتونیم به شکل واقعی بگیم که دیتاها از حوزه نرمافزاری خارج شدن و الان دارن توی سخت افزار میچرخن و آماده خروج میشن. حالا اصطلاحات شبکهای معنا پیدا میکنه، روتینگ و سوئیچینگ (Routing-Switching) توی این لایه مطرح میشه و بالاخره در این لایه هست که مفهومی به اسم IP بوجود میاد! IP خودش یک پرتکل هست(Internet Protocol) پرتکل اینترنت! شاید خیلیا ندونن، و کار این IP آدرسدهی هست، ولی آدرس دهی منطقی، توی شبکه بهش میگن لاجیکال ادرسینگ. به زبان ساده توی این لایه دیتا توی یه پاکت نامه گذاشته میشه و روش آدرس منبع و مقصد نوشته میشه که بدیمش به اداره پست:) همچنین اینکه پاکتنامه از چه مسیری باید بره تا برسه هم توی این لایه مشخص میشه - اسم دیتایی که توی این لایه وجود داره رو گذاشتن پاکت-نامه یا پکت!
بعضی از پرتکلهای این لایه:
IP-IPSec-NAT-ICMP-ARP-IPX-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Data Link:
لایه بعدی، لایه دیتا-لینک هست. به نوعی وظیفه این لایه آدرسدهی فیزیکی هست، ما الان پکتهامون اومدن، همه چیشون آماده هست، آدرسدهی منطقی هم شدن یعنی منبع و مقصدشون با ادبیات IP مشخص شده و آماده فرستاده شدن روی خط هستن ، این لایه پکتهارو میپیچه داخل یه کیسه گونی و برای هر سخت-افزار که باید بره آدرسدهی میکنه - بهش میگن مک ادرسینگ MAC - به زبان ساده، آدرسدهی حقیقی و سخت افزاری توی این لایه انجام میشه - به دیتایی که توی این لایه هست میگن فریم!
بعضی از پرتکلهای این لایه:
MAC-Ethernet-VLAN-PPTP-...
=+=+=+=+=+=+=+=+=+=+=+=+=+=+
Physical:
و بالاخره میرسیم به آخرین لایه. همه کارها انجام شده، همه نامه ها آماده شدن و کیسه گونی ها نیز دسته بندی شدن، آدرسا مشخصه، مسیر مشخصه، همه چی آمادهست. تنها چیزی که لازمه اینه که بطور فیزیکی و واقعی 0 و 1 ها روی خط نوشته بشن، حالا میخواد بیسیم باشه، فیبر باشه، کابل باشه، هرچی، بیت به بیت اطلاعات بطور حقیقی و فیزیکی روی خط ارسال میشن. پالسها و سیگنالهای الکتریکی، صفر و یک ها، علم مخابرات و... - به دیتایی که توی این لایه هست میگن صفر و یک:) یا بیت.
بعضی از پرتکلهای این لایه:
RS232-DSL-RJ45-USB-...
❤4👍1
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت پنجاه و چهارم- مدل OSI چیست
این قسمت بهراد آنلاین شد و فرمون رو دستش گرفت. ابتدای ویدئو فهمیدیم چرا برنامه نویس وب باید مفاهیم وب و شبکه و... رو بدونه. و در مورد کلمه پروتکل یاد گرفتیم. بعدش در مورد انتزاع و صحبت کردیم و بهراد خیلی خوب توضیح اش داد. در ادامه اشاره ای به شی گرایی هم داشتیم. بعدش در مورد مدل osi و هفت لایه اش صحبت کردیم. و بهراد همه لایه هارو توضیح داد. بعدش در مورد HTTP و تاریخچه اش صحبت کردیم و بهراد در مورد RFP توضیح داد. در انتهای ویدئو هم در مورد مفهوم client-server صحبت کردیم و ساختار یک رکوئست http رو قرار شد جلسه بعدی در موردش صحبت کنیم.
لینک آپارات:
https://www.aparat.com/v/ZU7wC
لینک یوتیوب:
https://youtu.be/LIcrl3evr94
این قسمت بهراد آنلاین شد و فرمون رو دستش گرفت. ابتدای ویدئو فهمیدیم چرا برنامه نویس وب باید مفاهیم وب و شبکه و... رو بدونه. و در مورد کلمه پروتکل یاد گرفتیم. بعدش در مورد انتزاع و صحبت کردیم و بهراد خیلی خوب توضیح اش داد. در ادامه اشاره ای به شی گرایی هم داشتیم. بعدش در مورد مدل osi و هفت لایه اش صحبت کردیم. و بهراد همه لایه هارو توضیح داد. بعدش در مورد HTTP و تاریخچه اش صحبت کردیم و بهراد در مورد RFP توضیح داد. در انتهای ویدئو هم در مورد مفهوم client-server صحبت کردیم و ساختار یک رکوئست http رو قرار شد جلسه بعدی در موردش صحبت کنیم.
لینک آپارات:
https://www.aparat.com/v/ZU7wC
لینک یوتیوب:
https://youtu.be/LIcrl3evr94
👍4
یه پست خوب از لینکدین علی بیگدلی
پیاده سازی honeypot در django
اول اینکه honeypot چیه؟
یک منبع اطلاعاتی کاذب هستش که برای مقابله با هکر ها و کشف و جمع آوری فعالیت های غیر مجاز در شبکه های رایانه ای استفاده میشه.
اما استفاده ما در جنگو بر روی admin هستش. به طوری که با ساخت یک درگاه ورود fake کاربر و ربات ها پس از ورود به آدرس پیشفرض admin با یک صفحه کاملا مشابه با admin اصلی مواجه میشوند. پس از چند بار تلاش برای ورود با پیغام خطا مواجه میشن و هر بار هم اطلاعات رو عوض و مجدد تلاش می کنند که به گونه ای brute force انجام میشه. با این تفاوت که پس از تعداد محدودی تلاش آیپی اونا در ردیف blacklist قرار میگیره و دیگه نمی تونن به سایت دسترسی داشته باشن. 😁
از این ساختار من معمولا تو تمام پروژه هام استفاده می کنم منتهی نه به این شکل ولی خواستم که یه نمونه ازش در دسترس عموم هم باشه.
آدرس repo :
https://github.com/AliBigdeli/Django-HoneyPot-Sample
پیاده سازی honeypot در django
اول اینکه honeypot چیه؟
یک منبع اطلاعاتی کاذب هستش که برای مقابله با هکر ها و کشف و جمع آوری فعالیت های غیر مجاز در شبکه های رایانه ای استفاده میشه.
اما استفاده ما در جنگو بر روی admin هستش. به طوری که با ساخت یک درگاه ورود fake کاربر و ربات ها پس از ورود به آدرس پیشفرض admin با یک صفحه کاملا مشابه با admin اصلی مواجه میشوند. پس از چند بار تلاش برای ورود با پیغام خطا مواجه میشن و هر بار هم اطلاعات رو عوض و مجدد تلاش می کنند که به گونه ای brute force انجام میشه. با این تفاوت که پس از تعداد محدودی تلاش آیپی اونا در ردیف blacklist قرار میگیره و دیگه نمی تونن به سایت دسترسی داشته باشن. 😁
از این ساختار من معمولا تو تمام پروژه هام استفاده می کنم منتهی نه به این شکل ولی خواستم که یه نمونه ازش در دسترس عموم هم باشه.
آدرس repo :
https://github.com/AliBigdeli/Django-HoneyPot-Sample
👍22🔥6
✅ کوکیکاتر جنگو (cookiecutter-django) چیست؟
کوکیکاتر جنگو یک الگوی پروژهی جنگو است که با استفاده از آن میتوانید به سرعت یک پروژهی جنگو با تمامی قابلیتهای استاندارد آن ایجاد کنید.
این پروژه، از دو بخش اصلی تشکیل شده است:
الگوهای Cookiecutter: شامل فایلهای جنگو مورد نیاز برای ایجاد یک پروژهی جنگو است. این الگوها شامل فایلهای تنظیمات مانند settings.py و urls.py، فایلهای مدیریتی مانند manage.py و فایلهای اولیه برای ایجاد بخشهای مختلفی از وبسایت شما هستند.
یک سیستم تولید خودکار: برای ایجاد یک پروژهی جدید جنگو، شما نیاز دارید تا فایلهای مورد نیاز را درست کنید و پروژه را به صورت دستی تنظیم کنید. این روند زمانبر و خطاپذیر است. با استفاده از کوکیکاتر جنگو، میتوانید با استفاده از یک سیستم تولید خودکار، یک پروژهی جنگو جدید را به راحتی و با سرعت بیشتری ایجاد کنید.
در کل، کوکیکاتر جنگو یک الگوی پروژهی جنگو است که با استفاده از آن میتوانید به سرعت یک پروژهی جنگو با تمامی قابلیتهای استاندارد آن ایجاد کنید.
✔️ برای استفاده از کوکیکاتر جنگو، مراحل زیر را دنبال کنید:
۱- نصبش
pip install cookiecutter
۲- ایجاد پروژه
cookiecutter https://github.com/pydanny/cookiecutter-django.git
بعد از اجرای این دستور، شما باید پاسخی را برای برخی سوالات پرسیده شده از شما وارد کنید، این سوالات برای تنظیمات اولیهی پروژه هستند.
۳- نصب و راهاندازی پروژه: پس از ایجاد پروژه، باید آن را نصب و راهاندازی کنید. ابتدا وارد پوشهی پروژهی جدید شوید و دستورات زیر را اجرا کنید:
cd project_name
pip install -r requirements/local.txt
createdb project_name
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
کوکیکاتر جنگو یک الگوی پروژهی جنگو است که با استفاده از آن میتوانید به سرعت یک پروژهی جنگو با تمامی قابلیتهای استاندارد آن ایجاد کنید.
این پروژه، از دو بخش اصلی تشکیل شده است:
الگوهای Cookiecutter: شامل فایلهای جنگو مورد نیاز برای ایجاد یک پروژهی جنگو است. این الگوها شامل فایلهای تنظیمات مانند settings.py و urls.py، فایلهای مدیریتی مانند manage.py و فایلهای اولیه برای ایجاد بخشهای مختلفی از وبسایت شما هستند.
یک سیستم تولید خودکار: برای ایجاد یک پروژهی جدید جنگو، شما نیاز دارید تا فایلهای مورد نیاز را درست کنید و پروژه را به صورت دستی تنظیم کنید. این روند زمانبر و خطاپذیر است. با استفاده از کوکیکاتر جنگو، میتوانید با استفاده از یک سیستم تولید خودکار، یک پروژهی جنگو جدید را به راحتی و با سرعت بیشتری ایجاد کنید.
در کل، کوکیکاتر جنگو یک الگوی پروژهی جنگو است که با استفاده از آن میتوانید به سرعت یک پروژهی جنگو با تمامی قابلیتهای استاندارد آن ایجاد کنید.
✔️ برای استفاده از کوکیکاتر جنگو، مراحل زیر را دنبال کنید:
۱- نصبش
pip install cookiecutter
۲- ایجاد پروژه
cookiecutter https://github.com/pydanny/cookiecutter-django.git
بعد از اجرای این دستور، شما باید پاسخی را برای برخی سوالات پرسیده شده از شما وارد کنید، این سوالات برای تنظیمات اولیهی پروژه هستند.
۳- نصب و راهاندازی پروژه: پس از ایجاد پروژه، باید آن را نصب و راهاندازی کنید. ابتدا وارد پوشهی پروژهی جدید شوید و دستورات زیر را اجرا کنید:
cd project_name
pip install -r requirements/local.txt
createdb project_name
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
👍11
✅ پکیج WhiteNoise یک نرمافزار کمکی برای Django است که به عنوان یک واسط بین سرور و وب برنامه Django وجود دارد.
این WhiteNoise به افزایش سرعت پاسخ به درخواستها، بهینهسازی تحویل فایلهای استاتیک و بهبود امنیت وبسایتها کمک میکند.
هنگامی که یک درخواست HTTP به یک وبسایت Django میرسد، Django برای پاسخ به درخواست، ممکن است به بارگیری یک فایل استاتیک از سیستم فایل سرور نیاز داشته باشد. با استفاده از WhiteNoise، این فایلهای استاتیک بدون نیاز به استفاده از یک سرور وب، مستقیماً از داخل برنامه Django به مرورگر ارائه میشوند.
همچنین، WhiteNoise برای پیادهسازی HTTP Strict Transport Security و ایجاد یک لایه اضافی از امنیت در وبسایتها نیز استفاده میشود.
از آنجا که WhiteNoise در برنامههای جنگو به راحتی قابل استفاده است و کمک میکند که وبسایت شما با سرعت بهتری بارگیری شود، بسیاری از برنامههای وب Django از آن استفاده میکنند.
این WhiteNoise یک ابزار محبوب در جامعه برنامهنویسی Django است و بسیاری از شرکتها از آن استفاده میکنند. بعضی از شرکتهایی که از WhiteNoise استفاده میکنند عبارتند از:
Heroku:
این شرکت از WhiteNoise به عنوان یک راهحل برای سرویسدهی به برنامههای جنگو استفاده میکند.
Mozilla:
این شرکت از WhiteNoise برای سرویس دهی به وبسایت خود استفاده میکند.
همچنین، از WhiteNoise در بسیاری از برنامههای دیگر نیز استفاده شده است. به طور کلی، این ابزار برای پیادهسازی وبسایتهای سریع و امن در Django، بسیار مناسب است.
تشکر از دوست خوبمون بابت این مطلب
این WhiteNoise به افزایش سرعت پاسخ به درخواستها، بهینهسازی تحویل فایلهای استاتیک و بهبود امنیت وبسایتها کمک میکند.
هنگامی که یک درخواست HTTP به یک وبسایت Django میرسد، Django برای پاسخ به درخواست، ممکن است به بارگیری یک فایل استاتیک از سیستم فایل سرور نیاز داشته باشد. با استفاده از WhiteNoise، این فایلهای استاتیک بدون نیاز به استفاده از یک سرور وب، مستقیماً از داخل برنامه Django به مرورگر ارائه میشوند.
همچنین، WhiteNoise برای پیادهسازی HTTP Strict Transport Security و ایجاد یک لایه اضافی از امنیت در وبسایتها نیز استفاده میشود.
از آنجا که WhiteNoise در برنامههای جنگو به راحتی قابل استفاده است و کمک میکند که وبسایت شما با سرعت بهتری بارگیری شود، بسیاری از برنامههای وب Django از آن استفاده میکنند.
این WhiteNoise یک ابزار محبوب در جامعه برنامهنویسی Django است و بسیاری از شرکتها از آن استفاده میکنند. بعضی از شرکتهایی که از WhiteNoise استفاده میکنند عبارتند از:
Heroku:
این شرکت از WhiteNoise به عنوان یک راهحل برای سرویسدهی به برنامههای جنگو استفاده میکند.
Mozilla:
این شرکت از WhiteNoise برای سرویس دهی به وبسایت خود استفاده میکند.
همچنین، از WhiteNoise در بسیاری از برنامههای دیگر نیز استفاده شده است. به طور کلی، این ابزار برای پیادهسازی وبسایتهای سریع و امن در Django، بسیار مناسب است.
تشکر از دوست خوبمون بابت این مطلب
👍17
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت پنجاه و پنجم - ساختار HTTP Request
این قسمت هم بهراد (@TadavomnisT_channel) پشت فرمون بود و ابتدای جلسه کتاب Computer Networking: A Top Down Approach رو معرفی کرد. در ادامه شروع کرد ساختار یک رکوئست HTTP رو توضیح داد حین توضیحاتش Metadata هم به صورت عملی توضیح داد و یه نکته امنیتی هم در موردش بهم گوشزد کرد. بعدش در مورد جزییات رکوئست توضیح داد و با line-feed charachter و carriage return charachter هم آشنا شدیم. بعدش جزییات Header هم ازش یاد گرفتیم.بعدش در مورد HTTP response توضیح داد و جزییاتش رو برامون شرح داد و یاد گرفتیم body توی response چیه. توی این قسمت بهراد بصورت عملی request و response رو بهم نشون داد. در ادامه در مورد مفهوم stateless بودن پروتکل http یاد گرفتیم و در ادامه خیلی جالب cookie و session رو هم توضیح داد. و حتی خطر cookie هم به ما توضیح داد. در ادامه اشاره هایی هم به non-persistent HTTP و persistent HTTP داشت. و در انتهای جلسه هم در مورد caching و get و post صحبت کردیم.
لینک آپارات:
https://aparat.com/v/6KTXu
لینک یوتیوب:
https://youtu.be/qexGg_FccoY
این قسمت هم بهراد (@TadavomnisT_channel) پشت فرمون بود و ابتدای جلسه کتاب Computer Networking: A Top Down Approach رو معرفی کرد. در ادامه شروع کرد ساختار یک رکوئست HTTP رو توضیح داد حین توضیحاتش Metadata هم به صورت عملی توضیح داد و یه نکته امنیتی هم در موردش بهم گوشزد کرد. بعدش در مورد جزییات رکوئست توضیح داد و با line-feed charachter و carriage return charachter هم آشنا شدیم. بعدش جزییات Header هم ازش یاد گرفتیم.بعدش در مورد HTTP response توضیح داد و جزییاتش رو برامون شرح داد و یاد گرفتیم body توی response چیه. توی این قسمت بهراد بصورت عملی request و response رو بهم نشون داد. در ادامه در مورد مفهوم stateless بودن پروتکل http یاد گرفتیم و در ادامه خیلی جالب cookie و session رو هم توضیح داد. و حتی خطر cookie هم به ما توضیح داد. در ادامه اشاره هایی هم به non-persistent HTTP و persistent HTTP داشت. و در انتهای جلسه هم در مورد caching و get و post صحبت کردیم.
لینک آپارات:
https://aparat.com/v/6KTXu
لینک یوتیوب:
https://youtu.be/qexGg_FccoY
👍2
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
مشکل سال 2038 چیست؟!
سوالش باحالیه مگه نه؟! نه پایان جهان نیست، تقویم قوم شبهمایاها هم تموم نمیشه، فضاییها هم حمله نمیکنن... یه اتفاق خطرناکتری ممکنه بیفته...🤭
ممکنه زمان کامپیوتر شما یهو 137 ســـــــــــــــال برگرده به عقب🥴
=+=+=+=+=+=+=+=+=+=+
حوالی سال 1970 که داشتن پروتکلهارو طراحی میکردن، باید مفهوم زمان رو با دقت ثانیه توی پروتکلهای مختلف یجوری ذخیره میکردن...
یه استانداردی دادن به اسم
Timestamp
یا برچسب زمانی، یه استاندارد یونیکسی هست که الان اکثر سیستمهای ما + اینترنت با اون کار میکنه،
مقدارش تعداد ثانیههایی هست که از سال 1970 تا این لحظه گذشته...😬
یعنی 1970 رو گرفتن مبدا زمان و با این کار 69 سال قبل و بعد از 1970 توی کامپیوتر مدل کردن.
مثلا تایماستمپ لحظه فعلی که من دارم این پیامو مینویسم هست:
1678537870
این یعنی 1678537870 ثانیه از 1970 گذشته... این توی خیــــلی از زبانها هست، مثلا اگه توی PHP بدمش به تابع date میگه که:
ساعتش به وقت ایران نیست، و اینکه جزئیات تابعش اصلا مهم نیست...
ولی جالبه که خیلیا نمیدونن که سیستمشون با این تایماستمپ داره میچرخه...
میتونین پرتکل NTP رو بخونین چیزای جذابی داره....
Network Time Protocol
=+=+=+=+=+=+=+=+=+=+=+=+
حالا مشکل کجاست؟
این تایم استمپ یا برچسب زمانی داره توی خیــــلی از رکوئست و ریسپانس ها انکپسوله میشه و میره و میاد...
برای همین باید برای ذخیره سازیش کمترین طول ممکن رو استفاده کنن که بهینه باشه.... اینا تایم استمپ رو اینتیجر گرفتن...
اینتیجر مثل هر زبان برنامهنویسی ، 4 بایت فضا اشغال میکنه...
اینا اون موقعی که طراحیش کردن گفتن که این ساختار تاااااا 70 سال دیگه کار میکنه... همینقدر بسه... اون موقع آیندگان یه فکری میکنن *-*
اتفاقی که میافته اینه که سال 2038 4 بایت پر میشه :)) و سرریز میکنه.... اصلاحا میگن اورفلو میکنه :3
یعنی تعداد ثانیه ها میشه
2147483647
و یک ثانیه که بگذره از 4 بایت (32 بیت) اورفلو میکنه و میشه 33 بیت و بیت علامت 0 میشه و عدد منفی میشه...🥴 شاید برای هضمش لازم باشه که روی کاغذ باینریش رو بنویسین.
*گیفش رو میفرستم پایین*
اگه مثلا 8 بایت میگرفتن میتونستن تا ملیاردها سال دیگه رو بدون اشکال پیش برن... ولی غیر بهینه بود...
خیلی از سیستما همین الان جلوی این اتفاق رو گرفتن... و خیلی از سیستمها هم اصلا روهشون خبر نداره😬 نشستن دارن خودشونو باد میزنن، اگه تا 2038 ایران متلاشی نشده باشه و آبش تموم نشده باشه، بهتون قول میدم نصف سیستماش از کار میافته *-*
=+=+=+=+=+=+=+=+=+=+=+
این مشکل از اولشم میدونستن که بوجود میاد... ولی بهترین راه این بود که 50 سال دیگه آیندهگان کامپیوترهاشون رو به روز کنن!!! یا محور قراردادی رو از 1970 تغییر بدن...
این مشکل بزرگیه که باید روش فکر بشه
مساله اگر فقط نرمافزاری بود مشکلی نبود ، یه پج میدادن حل میشد...!
ولی بسیــــــــــــاری از پیاده سازی های تایم سخت افزاری هستن!... مثلا طرف روی FPGA یا میکروکنترلر یا ROM {که قابل تغییر نیست} گرفته timestamp رو مدلسازی کرده...، یا توی امبدد سیستمها اینکارو کرده...
اون سخت افزارا کلا منسوخ میشن...!
ولی چیز جالبیه...😆
=+=+=+=+=+=+=+=+=+=+
سوالش باحالیه مگه نه؟! نه پایان جهان نیست، تقویم قوم شبهمایاها هم تموم نمیشه، فضاییها هم حمله نمیکنن... یه اتفاق خطرناکتری ممکنه بیفته...🤭
ممکنه زمان کامپیوتر شما یهو 137 ســـــــــــــــال برگرده به عقب🥴
=+=+=+=+=+=+=+=+=+=+
حوالی سال 1970 که داشتن پروتکلهارو طراحی میکردن، باید مفهوم زمان رو با دقت ثانیه توی پروتکلهای مختلف یجوری ذخیره میکردن...
یه استانداردی دادن به اسم
Timestamp
یا برچسب زمانی، یه استاندارد یونیکسی هست که الان اکثر سیستمهای ما + اینترنت با اون کار میکنه،
مقدارش تعداد ثانیههایی هست که از سال 1970 تا این لحظه گذشته...😬
یعنی 1970 رو گرفتن مبدا زمان و با این کار 69 سال قبل و بعد از 1970 توی کامپیوتر مدل کردن.
مثلا تایماستمپ لحظه فعلی که من دارم این پیامو مینویسم هست:
1678537870
این یعنی 1678537870 ثانیه از 1970 گذشته... این توی خیــــلی از زبانها هست، مثلا اگه توی PHP بدمش به تابع date میگه که:
echo date("m/d/Y h:i:s a", 1678537870);03/11/2023 12:31:10 pm
ساعتش به وقت ایران نیست، و اینکه جزئیات تابعش اصلا مهم نیست...
ولی جالبه که خیلیا نمیدونن که سیستمشون با این تایماستمپ داره میچرخه...
میتونین پرتکل NTP رو بخونین چیزای جذابی داره....
Network Time Protocol
=+=+=+=+=+=+=+=+=+=+=+=+
حالا مشکل کجاست؟
این تایم استمپ یا برچسب زمانی داره توی خیــــلی از رکوئست و ریسپانس ها انکپسوله میشه و میره و میاد...
برای همین باید برای ذخیره سازیش کمترین طول ممکن رو استفاده کنن که بهینه باشه.... اینا تایم استمپ رو اینتیجر گرفتن...
اینتیجر مثل هر زبان برنامهنویسی ، 4 بایت فضا اشغال میکنه...
اینا اون موقعی که طراحیش کردن گفتن که این ساختار تاااااا 70 سال دیگه کار میکنه... همینقدر بسه... اون موقع آیندگان یه فکری میکنن *-*
اتفاقی که میافته اینه که سال 2038 4 بایت پر میشه :)) و سرریز میکنه.... اصلاحا میگن اورفلو میکنه :3
یعنی تعداد ثانیه ها میشه
2147483647
و یک ثانیه که بگذره از 4 بایت (32 بیت) اورفلو میکنه و میشه 33 بیت و بیت علامت 0 میشه و عدد منفی میشه...🥴 شاید برای هضمش لازم باشه که روی کاغذ باینریش رو بنویسین.
*گیفش رو میفرستم پایین*
اگه مثلا 8 بایت میگرفتن میتونستن تا ملیاردها سال دیگه رو بدون اشکال پیش برن... ولی غیر بهینه بود...
خیلی از سیستما همین الان جلوی این اتفاق رو گرفتن... و خیلی از سیستمها هم اصلا روهشون خبر نداره😬 نشستن دارن خودشونو باد میزنن، اگه تا 2038 ایران متلاشی نشده باشه و آبش تموم نشده باشه، بهتون قول میدم نصف سیستماش از کار میافته *-*
=+=+=+=+=+=+=+=+=+=+=+
این مشکل از اولشم میدونستن که بوجود میاد... ولی بهترین راه این بود که 50 سال دیگه آیندهگان کامپیوترهاشون رو به روز کنن!!! یا محور قراردادی رو از 1970 تغییر بدن...
این مشکل بزرگیه که باید روش فکر بشه
مساله اگر فقط نرمافزاری بود مشکلی نبود ، یه پج میدادن حل میشد...!
ولی بسیــــــــــــاری از پیاده سازی های تایم سخت افزاری هستن!... مثلا طرف روی FPGA یا میکروکنترلر یا ROM {که قابل تغییر نیست} گرفته timestamp رو مدلسازی کرده...، یا توی امبدد سیستمها اینکارو کرده...
اون سخت افزارا کلا منسوخ میشن...!
ولی چیز جالبیه...😆
=+=+=+=+=+=+=+=+=+=+
👍15🤯4
Forwarded from ProgrammingSchool (Python)
🌺دوره آموزشی پایتون مقدماتی(رایگان)🌺
لینک جلسات یک تا هجده پایتون مقدماتی
جلسه اول: معرفی دوره آموزشی
https://t.iss.one/programmingschool2/4
جلسه دوم: نصب پایتون و ژوپیتر
https://t.iss.one/programmingschool2/28
جلسه سوم:نمایش اطلاعات، دریافت اطلاعات، معرفی متغیرها
https://t.iss.one/programmingschool2/29
جلسه چهارم: بررسی انواع داده و تورفتگی ها
https://t.iss.one/programmingschool2/30
جلسه پنجم:تبدیل دادهها در پایتون
https://t.iss.one/programmingschool2/31
جلسه ششم: معرفی رشتهها و برشها
https://t.iss.one/programmingschool2/32
جلسه هفتم: دستکاری و ادغام رشتهها
https://t.iss.one/programmingschool2/33
جلسه هشتم: دادههای بولی
https://t.iss.one/programmingschool2/34
جلسه نهم: عملیات در پایتون
https://t.iss.one/programmingschool2/35
جلسه دهم: معرفی داده ساختار لیست
https://t.iss.one/programmingschool2/36
جلسه یازدهم: دستکاری ساختار لیست در پایتون
https://t.iss.one/programmingschool2/38
جلسه دوازدهم: عبارات شرطی
https://t.iss.one/programmingschool2/42
جلسه سیزدهم: حلقه For - بخش اول
https://t.iss.one/programmingschool2/74
جلسه چهاردهم: حلقه For - بخش دوم
https://t.iss.one/programmingschool2/82
جلسه پانزدهم: حلقه While - بخش اول
https://t.iss.one/programmingschool2/123
جلسه شانزدهم: حلقه While - بخش دوم
https://t.iss.one/programmingschool2/137
جلسه هفدهم: معرفی داده ساختار Tuple - بخش اول
https://t.iss.one/programmingschool2/148
جلسه هجدهم: حل تمرینات داده ساختار Tuple - بخش دوم
https://t.iss.one/programmingschool2/184
ادامه دارد ...
#مبانی_پایتون
➖➖➖➖
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
لینک جلسات یک تا هجده پایتون مقدماتی
جلسه اول: معرفی دوره آموزشی
https://t.iss.one/programmingschool2/4
جلسه دوم: نصب پایتون و ژوپیتر
https://t.iss.one/programmingschool2/28
جلسه سوم:نمایش اطلاعات، دریافت اطلاعات، معرفی متغیرها
https://t.iss.one/programmingschool2/29
جلسه چهارم: بررسی انواع داده و تورفتگی ها
https://t.iss.one/programmingschool2/30
جلسه پنجم:تبدیل دادهها در پایتون
https://t.iss.one/programmingschool2/31
جلسه ششم: معرفی رشتهها و برشها
https://t.iss.one/programmingschool2/32
جلسه هفتم: دستکاری و ادغام رشتهها
https://t.iss.one/programmingschool2/33
جلسه هشتم: دادههای بولی
https://t.iss.one/programmingschool2/34
جلسه نهم: عملیات در پایتون
https://t.iss.one/programmingschool2/35
جلسه دهم: معرفی داده ساختار لیست
https://t.iss.one/programmingschool2/36
جلسه یازدهم: دستکاری ساختار لیست در پایتون
https://t.iss.one/programmingschool2/38
جلسه دوازدهم: عبارات شرطی
https://t.iss.one/programmingschool2/42
جلسه سیزدهم: حلقه For - بخش اول
https://t.iss.one/programmingschool2/74
جلسه چهاردهم: حلقه For - بخش دوم
https://t.iss.one/programmingschool2/82
جلسه پانزدهم: حلقه While - بخش اول
https://t.iss.one/programmingschool2/123
جلسه شانزدهم: حلقه While - بخش دوم
https://t.iss.one/programmingschool2/137
جلسه هفدهم: معرفی داده ساختار Tuple - بخش اول
https://t.iss.one/programmingschool2/148
جلسه هجدهم: حل تمرینات داده ساختار Tuple - بخش دوم
https://t.iss.one/programmingschool2/184
ادامه دارد ...
#مبانی_پایتون
➖➖➖➖
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
❤6👍2
Forwarded from Python Hints
Python Hints
بنظرتون باگ این سورس کد کجاست ؟ @PyHints
این یک باگ کاملا شناخته شده و کاملا تکراری هست؛ ممکنه توی مصاحبههای مختلف هم تجربهاش کرده باشید یا دیده باشید.
یک نمونه مصاحبه Amazon بوده برای پایتون (طرف از یک زبان برنامه نویسی دیگه اومده بود سمت پایتون و دنبال کار بود)
اول برای دوستان تازه کار:
و
البته اینجا نه بخاطر باگی که وجود داره
اگر بخوام خیلی ساده توضیح بدم :
مسئله اصلی اینجاس که نسخه پایتونی که بصورت دیفالت از سایت پایتون دانلود میشه روی
به همین دلیل وقتی از dict ارث بری بکنید احترامی برای متدهای builtin قائل نمیشه (چون توی
راه حل :
@PyHints
یک نمونه مصاحبه Amazon بوده برای پایتون (طرف از یک زبان برنامه نویسی دیگه اومده بود سمت پایتون و دنبال کار بود)
اول برای دوستان تازه کار:
__setitem__
وقتی اجرا میشه که میخواهید یک key - value رو داخل dictionary بریزیدو
__getitem__
وقتی اجرا میشه که میخواهید یک مقدار رو از دیکشری بخونید. البته اینجا نه بخاطر باگی که وجود داره
اگر بخوام خیلی ساده توضیح بدم :
مسئله اصلی اینجاس که نسخه پایتونی که بصورت دیفالت از سایت پایتون دانلود میشه روی
C
کد زده شده و مواردی مثل str, dict, list
از کدهای C
برای اجرا استفاده میکنند. به همین دلیل وقتی از dict ارث بری بکنید احترامی برای متدهای builtin قائل نمیشه (چون توی
C
پیاده سازی شده و کد پایتون شما قابلیت overwrite شدن روی کد C
رو نداره) پس درنهایت چیزی رو میگیرید که توی C
و برای خود پایتون دیکشنری پیاده سازی شدهراه حل :
@PyHints
👍8
Forwarded from Python Hints
توی پایتون ماژولی هست به اسم
رو ندارید باید از
استفاده کنید.
@PyHints
collections
کاربردهای بسیاری داره که درآینده ممکنه بررسی کنیم اما چیزی که ما الان نیاز داریم from collections import UserDict
همیشه یادتون باشه وقتی قراره یک کلاس کاستوم برای نوع داده dict بنویسید؛ حق استفاده از dict
رو ندارید باید از
UserDict
استفاده کنید.
@PyHints
👍8🤔5❤1💯1
Forwarded from Python Hints
چطوری میشه یک شرکت، استارتاپ یا ... رو نابود کرد !؟
موضوع بر میگرده به ۳ سال پیش، یک شرکت (داخلی) برای همکاری به تیم ما پیشنهاد داد و یک مبلغی اعلام شد بعد از چندروز البته اعلام کرد که دستمزد ما ۲ برابر یک شرکت دیگه بوده و به همین دلیل با اون شرکت همکاری میکنند (نه تیم ما، یک دلیل هم همین بود که اونها شرکت ثبت شده هستند و ما یک تیم)
بگذریم، زمانبندی پروژه ۶ ماه عقب افتاد و بعد بالاخره پروژه لانچ شد (اینهارو میدونم چون یکی از دوستانم توی شرکت co-founder بود)
دقیقاً وقتی شرکت به اوج درآمد خودش رسیده بود و قرار بود این پروژه درآمد رو حداقل ۳ برابر کنه پروژه لانچ شد، اما ۱ سال بعد نه تنها درآمد ۳ برابر نشده بود بلکه بدهی پروژه مبلغی حدوداً ۱ میلیاردی بود (برای یک استارتاپ مبلغ خیلی زیادی بود) ۱ سال پول و وقت و ... چندین سال توسعه پروژه در نهایت ۱ میلیارد کسری بودجه با وجود فروش چند ده میلیاردی ؟ چطور ممکن هست ؟
۱- وقتی کار رو میدید دست نیرویی که با پول واقعی پروژه نزده اینطوری میشه.
۲- وقتی کار رو به تیمی میدید که زبان برنامهنویسی رو بخوبی نمیشناسه اینطوری میشه.
۳- وقتی نیرو کار رو از روی چندتا دوره آموزشی یاد میگیره اینطوری میشه.
اینها اولین صحبت من با دوستم قبل از code review بود چون بعد از توضیح منطق بیزینس ۹۹٪ میدونستم مشکل چی هست :
حالا مشکل چی بود:
یک اصطلاحی داریم به اسم
Banker's Rounding
مشکلی هست که با رند کردن اعداد به وجود میاد، اگر درست انجام بشه میانگین رند کردن سود هست برای صاحب بیزینس و اگر اشتباه باشه کاملاً ضرر مالی میشه
یک بخشی از قضیه این موضوع بود و بخش دوم که من توی ۹۰٪
Code Review
هایی که برای استارتاپها انجام میدم میبینم استفاده از نوع داده
Float
هست، اگر قرار به تمرین باشه این نوع داده خیلی هم خوبه ولی وقتی پای پول واقعی وسط هست اگر نمیخواهید کسی رو بدبخت کنید از
Decimal
استفاده کنید.
Decimal
هر ۲ مشکل شمارو حل میکنه، بخصوص مشکل False بودن عبارت زیر :
برای نسل جدید : هیچکس با یک دوره آموزشی برنامهنویس نمیشه، زیاد به دورهها تکیه نکنید.
موضوع بر میگرده به ۳ سال پیش، یک شرکت (داخلی) برای همکاری به تیم ما پیشنهاد داد و یک مبلغی اعلام شد بعد از چندروز البته اعلام کرد که دستمزد ما ۲ برابر یک شرکت دیگه بوده و به همین دلیل با اون شرکت همکاری میکنند (نه تیم ما، یک دلیل هم همین بود که اونها شرکت ثبت شده هستند و ما یک تیم)
بگذریم، زمانبندی پروژه ۶ ماه عقب افتاد و بعد بالاخره پروژه لانچ شد (اینهارو میدونم چون یکی از دوستانم توی شرکت co-founder بود)
دقیقاً وقتی شرکت به اوج درآمد خودش رسیده بود و قرار بود این پروژه درآمد رو حداقل ۳ برابر کنه پروژه لانچ شد، اما ۱ سال بعد نه تنها درآمد ۳ برابر نشده بود بلکه بدهی پروژه مبلغی حدوداً ۱ میلیاردی بود (برای یک استارتاپ مبلغ خیلی زیادی بود) ۱ سال پول و وقت و ... چندین سال توسعه پروژه در نهایت ۱ میلیارد کسری بودجه با وجود فروش چند ده میلیاردی ؟ چطور ممکن هست ؟
۱- وقتی کار رو میدید دست نیرویی که با پول واقعی پروژه نزده اینطوری میشه.
۲- وقتی کار رو به تیمی میدید که زبان برنامهنویسی رو بخوبی نمیشناسه اینطوری میشه.
۳- وقتی نیرو کار رو از روی چندتا دوره آموزشی یاد میگیره اینطوری میشه.
اینها اولین صحبت من با دوستم قبل از code review بود چون بعد از توضیح منطق بیزینس ۹۹٪ میدونستم مشکل چی هست :
حالا مشکل چی بود:
یک اصطلاحی داریم به اسم
Banker's Rounding
مشکلی هست که با رند کردن اعداد به وجود میاد، اگر درست انجام بشه میانگین رند کردن سود هست برای صاحب بیزینس و اگر اشتباه باشه کاملاً ضرر مالی میشه
یک بخشی از قضیه این موضوع بود و بخش دوم که من توی ۹۰٪
Code Review
هایی که برای استارتاپها انجام میدم میبینم استفاده از نوع داده
Float
هست، اگر قرار به تمرین باشه این نوع داده خیلی هم خوبه ولی وقتی پای پول واقعی وسط هست اگر نمیخواهید کسی رو بدبخت کنید از
Decimal
استفاده کنید.
Decimal
هر ۲ مشکل شمارو حل میکنه، بخصوص مشکل False بودن عبارت زیر :
0.3 == 0.1 + 0.1 + 0.1
برای نسل جدید : هیچکس با یک دوره آموزشی برنامهنویس نمیشه، زیاد به دورهها تکیه نکنید.
👍33