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
Forwarded from دستاوردهای یادگیری عمیق(InTec)
سوال مرحله اول مصاحبه یکی از بچهها در گوگل :
ایشون توی meta دوره Internship رو گذرونده و ترم بعدی مدرک لیسانس رو میگیره برای همین به دنبال استخدامی در شرکتهای غول فناوری هست (سطح استرس بالایی هم داره)
توی مرحله اول ۲ تا سوال داشته ؛ پیاده سازی یک stack با ۲ عملیات بیشتر که خب بیشتر میخواستند بدونند چقدر با Inheritance , OOP توی پایتون آشنا هست
سوال دوم که بنظرم جالب اومد :
یک تابع که خروجی از یک سری از اعمال ریاضی روی ۳ نتیجهی آخر بدست میاد مثلا
اگر مرحله n رو بخوایم :
n-1, n-2, n-3
رو باید داشته باشیم و برای بدست آوردن خروجی بعنوان مثال
(n-1/n-2) + (n-3/2)
میشه.
۲ تا مشکل این دوستمون داشت توی سوال دوم که باعث شده وقت زیادی ازش گرفته بشه :
۱- سوال رو map نتونسته بکنه :
استرس بالا و دید بسیار جزئی باعث شده در نگاه اول متوجه نشه سوال دقیقا جزو مواردی هست که هزاران بار تمرین کرده (دقت کنید این سوال base مشابه fibo داره)
۲- بخاطر اینکه زمان کم نیاره اولین راهحلی که به ذهنش رسیده رو کد زده
Recursion
که خب جواب درستی بوده ولی اگر دقت میکرد میتونست خیلی بهتر خودش رو نشون بده با استفاده از تکنیک
Dynamic Programming
برای مثال من fibo رو به ۳ روش حل کردم :
1- Recursion
2- Dynamic Programming
3- Dynamic Programming with python generator
و هر ۳ مورد رو زمان اجرا گرفتم
توجه کنید سوال
Google Junior Python Developer
بوده و البته مرحله اول (فکر میکنم فقط ۱ مرحله دیگه مصاحبه داشته باشه و بیشتر system design باشه هرچند ساده).
ایشون توی meta دوره Internship رو گذرونده و ترم بعدی مدرک لیسانس رو میگیره برای همین به دنبال استخدامی در شرکتهای غول فناوری هست (سطح استرس بالایی هم داره)
توی مرحله اول ۲ تا سوال داشته ؛ پیاده سازی یک stack با ۲ عملیات بیشتر که خب بیشتر میخواستند بدونند چقدر با Inheritance , OOP توی پایتون آشنا هست
سوال دوم که بنظرم جالب اومد :
یک تابع که خروجی از یک سری از اعمال ریاضی روی ۳ نتیجهی آخر بدست میاد مثلا
اگر مرحله n رو بخوایم :
n-1, n-2, n-3
رو باید داشته باشیم و برای بدست آوردن خروجی بعنوان مثال
(n-1/n-2) + (n-3/2)
میشه.
۲ تا مشکل این دوستمون داشت توی سوال دوم که باعث شده وقت زیادی ازش گرفته بشه :
۱- سوال رو map نتونسته بکنه :
استرس بالا و دید بسیار جزئی باعث شده در نگاه اول متوجه نشه سوال دقیقا جزو مواردی هست که هزاران بار تمرین کرده (دقت کنید این سوال base مشابه fibo داره)
۲- بخاطر اینکه زمان کم نیاره اولین راهحلی که به ذهنش رسیده رو کد زده
Recursion
که خب جواب درستی بوده ولی اگر دقت میکرد میتونست خیلی بهتر خودش رو نشون بده با استفاده از تکنیک
Dynamic Programming
برای مثال من fibo رو به ۳ روش حل کردم :
1- Recursion
2- Dynamic Programming
3- Dynamic Programming with python generator
و هر ۳ مورد رو زمان اجرا گرفتم
توجه کنید سوال
Google Junior Python Developer
بوده و البته مرحله اول (فکر میکنم فقط ۱ مرحله دیگه مصاحبه داشته باشه و بیشتر system design باشه هرچند ساده).
👍9
Forwarded from دستاوردهای یادگیری عمیق(InTec)
راهحلهای سوال مصاحبه گوگل برای
junior python developer.
پ.ن :
نکته مهمی که باید اضافه کنم (یادم نبود) توی روش 1 :
خیلی زود به محدودیت recursive call پایتون هم میخورید؛ اما برای مورد ۲ و ۳ همچین چیزی وجود نداره
که خب بسته به test case مصاحبه ممکنه شما رد بشید.
junior python developer.
پ.ن :
نکته مهمی که باید اضافه کنم (یادم نبود) توی روش 1 :
خیلی زود به محدودیت recursive call پایتون هم میخورید؛ اما برای مورد ۲ و ۳ همچین چیزی وجود نداره
که خب بسته به test case مصاحبه ممکنه شما رد بشید.
👍6❤1
Forwarded from ProgrammingSchool (Python)
#تمرین_پایتون: مرتب سازی کلیدهای دیکشنری با تابع sort
یکی از راههای مرتبسازی دیکشنری ها، استفاده از تابع sort و ذخیره دیکشنری در قالب شی OrderDict است.
برای مرتبسازی دیکشنری با تابع Sort:
۱- از ماژول collection, زیر کلاس OrderedDict را import کنید.
۲- دیکشنری با نام dic تعریف کنید و آن را مقدار دهی اولیه نمایید.
۳- عناصر موجود در دیکشنری به صورت dict.items به تابع sort پاس داده میشود. برای آنکه عناصر مرتبشده، با ترتیب مرتبشده ذخیره شوند از زیر کلاس OrderDict نمونهسازی شده است و عناصر در این نمونه ذخیرهسازی میشوند.
سوال: به نظرتون چه تفاوتی بین دیکشنری ساخته شده توسط تابع dict و نمونه ساخته شده توسط OrderDict وجود دارد؟🤔
#پایتون
#دیکشنری
#تمرینات_طبقه_بندی
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
یکی از راههای مرتبسازی دیکشنری ها، استفاده از تابع sort و ذخیره دیکشنری در قالب شی OrderDict است.
برای مرتبسازی دیکشنری با تابع Sort:
۱- از ماژول collection, زیر کلاس OrderedDict را import کنید.
۲- دیکشنری با نام dic تعریف کنید و آن را مقدار دهی اولیه نمایید.
۳- عناصر موجود در دیکشنری به صورت dict.items به تابع sort پاس داده میشود. برای آنکه عناصر مرتبشده، با ترتیب مرتبشده ذخیره شوند از زیر کلاس OrderDict نمونهسازی شده است و عناصر در این نمونه ذخیرهسازی میشوند.
سوال: به نظرتون چه تفاوتی بین دیکشنری ساخته شده توسط تابع dict و نمونه ساخته شده توسط OrderDict وجود دارد؟🤔
#پایتون
#دیکشنری
#تمرینات_طبقه_بندی
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
❤3👍3