#موقت
درحال بررسی یک منبع فوقالعاده هستم.
۳-۴ ساعت طول میکشه ولی اگر به همون خوبی باشه که از یکی از کانتریبیوترهای جنگو شنیدم (دارم همین موضوع رو بررسی میکنم؛ چون تازه با این شخص آشنا شدم.)
واقعا نمیدونم چرا توی کانالهای توسعه وب با پایتون این رو پیدا نکردم :/
اگر ندیدید که خب چرا ؟
اگر دیدید و نذاشتید؛ اینارو واسه خودتون نگه میدارید ؟
بذارید خدایی این مباحث رو.
متأسفانه فرصت نکردم تکمیل کنم (چندتا تسک بهم خورد این وسط)
به محض خلوت شدن، ادامه میدم و تکمیل میکنم
درحال بررسی یک منبع فوقالعاده هستم.
۳-۴ ساعت طول میکشه ولی اگر به همون خوبی باشه که از یکی از کانتریبیوترهای جنگو شنیدم (دارم همین موضوع رو بررسی میکنم؛ چون تازه با این شخص آشنا شدم.)
واقعا نمیدونم چرا توی کانالهای توسعه وب با پایتون این رو پیدا نکردم :/
اگر ندیدید که خب چرا ؟
اگر دیدید و نذاشتید؛ اینارو واسه خودتون نگه میدارید ؟
بذارید خدایی این مباحث رو.
متأسفانه فرصت نکردم تکمیل کنم (چندتا تسک بهم خورد این وسط)
به محض خلوت شدن، ادامه میدم و تکمیل میکنم
🧑💻PythonDev🧑💻
#موقت درحال بررسی یک منبع فوقالعاده هستم. ۳-۴ ساعت طول میکشه ولی اگر به همون خوبی باشه که از یکی از کانتریبیوترهای جنگو شنیدم (دارم همین موضوع رو بررسی میکنم؛ چون تازه با این شخص آشنا شدم.) واقعا نمیدونم چرا توی کانالهای توسعه وب با پایتون این رو پیدا…
این ویدئو در راستای همون صحبتی هست که داشتم :
وب رو فارغ از فریمورک یاد بگیرید
متأسفانه خیلی از بچههایی که با پایتون وب رو یاد گرفتند بخصوص جنگو، اگر فریمورک عوض بشه باید از صفر شروع کنند برای همین جابجایی بین فریمورکهای مختلف بسیار براشون سخت هست
YouTube Video
توی این ویدئو که از
از توسعه دهندههای اصلی django بهتون وب رو فارغ از فریمورک آموزش میده و شاید مقدماتی رو میگه از اینکه چطور وب فریمورک بعدی رو خودتون بنویسید.
شخصاً با خیلی از مباحث آشنا بودم ولی بازم خیلی چیز جدید داشت برام؛ اگر بخوام بگم چطوری بخونید پیشنهادم این هست :
۱- ویدئو رو ببینید و تمریناتش رو انجام بدید
۲- تمرینات رو برای کار خودتون بسط بدید (برای من
۳- تمرینات بالا و منابع معرفی شده رو برای
۴- تمرینات رو خودتون انجام بدید، حتی اگر هر تمرین بیش از زمان پیشنهادی توی ویدیو وقت بگیره (اگر با مباحث هیچ آشنایی دقیقی ندارید ممکنه هر تمرین بیش از چندین ساعت وقت بگیره ولی شک نکنید هزاران بار ارزشش رو داره)
بازم میگم؛ برای منی که با تمامی این مباحث آشنایی داشتم نکات ریز و
و حتماً به کار دوستان سطح بالاتر هم خواهد اومد.
وب رو فارغ از فریمورک یاد بگیرید
متأسفانه خیلی از بچههایی که با پایتون وب رو یاد گرفتند بخصوص جنگو، اگر فریمورک عوض بشه باید از صفر شروع کنند برای همین جابجایی بین فریمورکهای مختلف بسیار براشون سخت هست
YouTube Video
توی این ویدئو که از
PyCon
سال 2017 هست Jacob Kaplan
از توسعه دهندههای اصلی django بهتون وب رو فارغ از فریمورک آموزش میده و شاید مقدماتی رو میگه از اینکه چطور وب فریمورک بعدی رو خودتون بنویسید.
شخصاً با خیلی از مباحث آشنا بودم ولی بازم خیلی چیز جدید داشت برام؛ اگر بخوام بگم چطوری بخونید پیشنهادم این هست :
۱- ویدئو رو ببینید و تمریناتش رو انجام بدید
۲- تمرینات رو برای کار خودتون بسط بدید (برای من
RestApi
)۳- تمرینات بالا و منابع معرفی شده رو برای
ASGI
هم دنبال کنید.۴- تمرینات رو خودتون انجام بدید، حتی اگر هر تمرین بیش از زمان پیشنهادی توی ویدیو وقت بگیره (اگر با مباحث هیچ آشنایی دقیقی ندارید ممکنه هر تمرین بیش از چندین ساعت وقت بگیره ولی شک نکنید هزاران بار ارزشش رو داره)
بازم میگم؛ برای منی که با تمامی این مباحث آشنایی داشتم نکات ریز و
roadmap
خوبی بود برای پیشرفت؛ قطعاً برای عزیزانی که تازه آموزش مقدماتی جنگو یا ... رو تموم کردند فوقالعاده خواهد بود.و حتماً به کار دوستان سطح بالاتر هم خواهد اومد.
YouTube
Jacob Kaplan Moss Let's build a web framework! PyCon 2017
"Speaker: Jacob Kaplan-Moss
"Reinventing the wheel is great if your goal is to learn more about wheels."
-- James Tauber
If you're building a web app, you probably reach for your favorite framework -- Django, Flask, Pyramid, etc. But we rarely stop to…
"Reinventing the wheel is great if your goal is to learn more about wheels."
-- James Tauber
If you're building a web app, you probably reach for your favorite framework -- Django, Flask, Pyramid, etc. But we rarely stop to…
🧑💻PythonDev🧑💻
این ویدئو در راستای همون صحبتی هست که داشتم : وب رو فارغ از فریمورک یاد بگیرید متأسفانه خیلی از بچههایی که با پایتون وب رو یاد گرفتند بخصوص جنگو، اگر فریمورک عوض بشه باید از صفر شروع کنند برای همین جابجایی بین فریمورکهای مختلف بسیار براشون سخت هست YouTube…
#موقت
آماری ترکوند این پست :
روی ۴۰۰ تا بازدید
۱۰۰ تا share خورد، که خب دفعه اول بود توی کانال
ولی خدایی نفرستید توی save message که هیچوقت نبینید، حتماً برای این یکی وقت بذارید
پ.ن : چیکار کنم، ی بخشی از شغلم، دیتاساینس هست دیگه 🥲
آماری ترکوند این پست :
روی ۴۰۰ تا بازدید
۱۰۰ تا share خورد، که خب دفعه اول بود توی کانال
ولی خدایی نفرستید توی save message که هیچوقت نبینید، حتماً برای این یکی وقت بذارید
پ.ن : چیکار کنم، ی بخشی از شغلم، دیتاساینس هست دیگه 🥲
#django_roadmap #roadmap
امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند :
۱- پایتون رو تا سطح خوبی بلد هست
۲- ساختمان داده و الگوریتم رو میشناسه
۳- لینوکس، گیت و داکر رو هم بلده
یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین موضوع هست که خیلی از بچهها بهم گفتند چطوری تونستی بعد از ۲ هفته یادگیری جنگو شروع به کار کنی ؟
اول باید بگم که من ۲ هفتهای فهمیدن جنگو رو مدیون زحماتی هستم که روی پایتون کشیدم، بر عکس خیلیها که شروع میکنند فریمورک یادگرفتن من فارغ از فریمورک توسعه وب رو یاد گرفتم و بعد اومدم سراغ جنگو (هرچند توی جنگو خیلی جا برای پیشرفت دارم و باید زحمتش رو بکشم هنوز)
برای همین هست که وقتی کسی بهم میگه roadmap بده میگم ۳-۶ ماه اول فقط پایتون، من به خیلیها گفتم کتاب
رو جلوت بذار و سرفصلهاش رو بخون، اگر مفهومی رو بلد نیستی یعنی هنوز آماده نیستی که بری سراغ فریمورک (حالا اینکه این موضوع برای نسل آینده برنامهنویسی توسعه میشه، خودش یک داستان هست. یعنی این نسخه رو نمیشه برای همه پیچید ولی قطعاً این بهترین راه هست)
تکنیکی که شخصاً باهاش فریمورک و ... رو یاد میگیرم، مختص خودم هست و اسمش رو منبع سوزی میذارم، چطوری هست ؟
۱- اول مطمئن میشم با اون فریمورک ارتباط برقرار میکنم و جوگیر شدن و ... درکار نیست
برای مثال روی همین جنگو :
اول رفتم سراغ این پلی لیست :
Youtube Playlist
دفعهی اول با سرعت 3x نگاهش کردم کامل که تقریباً ۱ روز جمعهام رو گرفت، بعد یک سری تحقیق کردم و مطمئن شدم ازین فریمورک خوشم اومده
دفعهی دوم همین پلی لیست رو با دقت بیشتر و روی سرعت 1.5x نگاه کردم.
توی این تکنیک برای قدم اول هیچ نیازی به کد زدن نیست، شما تکیه میدی و از دیدن فیلم لذت میبری، توی دفعهی دوم دیدن ویدئو منابع مهم رو روی یک مرورگر دیگه باز میکنید مثلاً: من متوجه شدم چیزهایی به اسم :
وجود داره و همینجا متوجه شدم نیاز من یادگیری با جزئیات
هست و نه
2- یادگیری از یک منبع مناسب، من کتابهای زیادی رو خوندم چون منبع جامع و مناسبی پیدا نکردم برای
ولی دیروز شروع کردم به خوندن یک کتابی که سرفصلهای جالبی داشت و ۳ فصل اول رو خوندم و تموم شد که بنظرم منبع خیلی خوبی اومد نسبت به کتابهای دیگری که خوندم :
Becoming an Enterprise Django Developer
By Michael Dinder (Packt pub)
دقت کنید من هنوز کل این کتاب رو نخوندم ولی تا اینجا خیلی خوب توضیح داده برای شروع.
توی این قدم معمولاً اینطوری عمل میکنم که وقتی ۱ فصل رو خوندم و تموم شد، چند ساعتی به کارهام میرسم و بعد بر میگردم سراغ کتاب اما قبل از شروع فصل جدید بدون اینکه به کتاب رجوع کنم سعی میکنم کل نیازمندی و چیزی که توی اون فصل یادگرفتم و نیاز هست برای فصل بعدی رو بر اساس یادگیریم پیادهسازی کنم.
وقفه بین کتاب و کد برای این هست که مطمئن بشم چیزی رو از حفظ نمیزنم و موضوع رو درک کردم تنها منبعی که میشه توی این بخش ازش استفاده کرد : گوگل + داکیومنت رسمی جنگو هست
۳- هرکتابی که انتخاب کنید، وقتی یک مفهوم رو توضیح میده برای موارد بیشتر و دقیقتر به منبع اصلی
وقتی یک فصل رو تموم میکنید، بعد از اینکه اون فصل رو کدهاش رو زدید و تموم شد
باید برگردید روی کتاب و همون فصل و منابعی که برای خوندن بیشتر بهتون معرفی کرده رو بخونید.
این قدم بسیار بسیار مهم هست، چون هم با اصطلاحات آشنا میشید، هم با اکو سیستم اون فریمورک و هم یاد میگیرید چطور باید از داکیومنت فریمورک استفاده کنید بدون اینکه وقت تلف کنید.
قدم ۴ - یادگیری هیچوقت متوقف نمیشه، نیاز شما هم هیچوقت یکسان و ثابت نیست، بر اساس نیاز منابع جدید پیدا میکنید، سورس کد باقی افراد رو میخونید که به سمت یک نویسنده یا مدرس بایاس نشید، توی این قدم هرجوری که حال میکنید ادامه بدید.
پس اگر از نحوه خوندن من و البته بخش اول که پیشنیاز هست بگذریم ۴ تا منبع معرفی میشه کرد :
1- YouTube PlayList
نسخه
2- Becoming an Enterprise Django Developer By Michael Dinder (Packt pub)
3- Django documentation
4- Django Rest Framework
و در نهایتاً نمیشه توسعه دهنده جنگو باشید و عضو بزرگترین کامیونیتی جنگو فارسی نباشید :
@DjangoEx
صاحب کانال رو میشناسم و به هدفش ایمان دارم، از روز اول هم دنبال کنندهاش هستم و خواهم بود.
امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند :
۱- پایتون رو تا سطح خوبی بلد هست
۲- ساختمان داده و الگوریتم رو میشناسه
۳- لینوکس، گیت و داکر رو هم بلده
یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین موضوع هست که خیلی از بچهها بهم گفتند چطوری تونستی بعد از ۲ هفته یادگیری جنگو شروع به کار کنی ؟
اول باید بگم که من ۲ هفتهای فهمیدن جنگو رو مدیون زحماتی هستم که روی پایتون کشیدم، بر عکس خیلیها که شروع میکنند فریمورک یادگرفتن من فارغ از فریمورک توسعه وب رو یاد گرفتم و بعد اومدم سراغ جنگو (هرچند توی جنگو خیلی جا برای پیشرفت دارم و باید زحمتش رو بکشم هنوز)
برای همین هست که وقتی کسی بهم میگه roadmap بده میگم ۳-۶ ماه اول فقط پایتون، من به خیلیها گفتم کتاب
Fluent Python
رو جلوت بذار و سرفصلهاش رو بخون، اگر مفهومی رو بلد نیستی یعنی هنوز آماده نیستی که بری سراغ فریمورک (حالا اینکه این موضوع برای نسل آینده برنامهنویسی توسعه میشه، خودش یک داستان هست. یعنی این نسخه رو نمیشه برای همه پیچید ولی قطعاً این بهترین راه هست)
تکنیکی که شخصاً باهاش فریمورک و ... رو یاد میگیرم، مختص خودم هست و اسمش رو منبع سوزی میذارم، چطوری هست ؟
۱- اول مطمئن میشم با اون فریمورک ارتباط برقرار میکنم و جوگیر شدن و ... درکار نیست
برای مثال روی همین جنگو :
اول رفتم سراغ این پلی لیست :
Youtube Playlist
دفعهی اول با سرعت 3x نگاهش کردم کامل که تقریباً ۱ روز جمعهام رو گرفت، بعد یک سری تحقیق کردم و مطمئن شدم ازین فریمورک خوشم اومده
دفعهی دوم همین پلی لیست رو با دقت بیشتر و روی سرعت 1.5x نگاه کردم.
توی این تکنیک برای قدم اول هیچ نیازی به کد زدن نیست، شما تکیه میدی و از دیدن فیلم لذت میبری، توی دفعهی دوم دیدن ویدئو منابع مهم رو روی یک مرورگر دیگه باز میکنید مثلاً: من متوجه شدم چیزهایی به اسم :
Redis, Celery, Flower, django rest framework, ...
وجود داره و همینجا متوجه شدم نیاز من یادگیری با جزئیات
DRF
هست و نه
Django forms
یا template
نویسی پس این دو مورد رو خیلی کم روش وقت گذاشتم.2- یادگیری از یک منبع مناسب، من کتابهای زیادی رو خوندم چون منبع جامع و مناسبی پیدا نکردم برای
DRF
ولی دیروز شروع کردم به خوندن یک کتابی که سرفصلهای جالبی داشت و ۳ فصل اول رو خوندم و تموم شد که بنظرم منبع خیلی خوبی اومد نسبت به کتابهای دیگری که خوندم :
Becoming an Enterprise Django Developer
By Michael Dinder (Packt pub)
دقت کنید من هنوز کل این کتاب رو نخوندم ولی تا اینجا خیلی خوب توضیح داده برای شروع.
توی این قدم معمولاً اینطوری عمل میکنم که وقتی ۱ فصل رو خوندم و تموم شد، چند ساعتی به کارهام میرسم و بعد بر میگردم سراغ کتاب اما قبل از شروع فصل جدید بدون اینکه به کتاب رجوع کنم سعی میکنم کل نیازمندی و چیزی که توی اون فصل یادگرفتم و نیاز هست برای فصل بعدی رو بر اساس یادگیریم پیادهسازی کنم.
وقفه بین کتاب و کد برای این هست که مطمئن بشم چیزی رو از حفظ نمیزنم و موضوع رو درک کردم تنها منبعی که میشه توی این بخش ازش استفاده کرد : گوگل + داکیومنت رسمی جنگو هست
۳- هرکتابی که انتخاب کنید، وقتی یک مفهوم رو توضیح میده برای موارد بیشتر و دقیقتر به منبع اصلی
reference
میده، مثلاً کتاب بالاوقتی یک فصل رو تموم میکنید، بعد از اینکه اون فصل رو کدهاش رو زدید و تموم شد
باید برگردید روی کتاب و همون فصل و منابعی که برای خوندن بیشتر بهتون معرفی کرده رو بخونید.
این قدم بسیار بسیار مهم هست، چون هم با اصطلاحات آشنا میشید، هم با اکو سیستم اون فریمورک و هم یاد میگیرید چطور باید از داکیومنت فریمورک استفاده کنید بدون اینکه وقت تلف کنید.
قدم ۴ - یادگیری هیچوقت متوقف نمیشه، نیاز شما هم هیچوقت یکسان و ثابت نیست، بر اساس نیاز منابع جدید پیدا میکنید، سورس کد باقی افراد رو میخونید که به سمت یک نویسنده یا مدرس بایاس نشید، توی این قدم هرجوری که حال میکنید ادامه بدید.
پس اگر از نحوه خوندن من و البته بخش اول که پیشنیاز هست بگذریم ۴ تا منبع معرفی میشه کرد :
1- YouTube PlayList
نسخه
DRF
هم هست (اگر دوست داشتید توی همون کانال ببینید) 2- Becoming an Enterprise Django Developer By Michael Dinder (Packt pub)
3- Django documentation
4- Django Rest Framework
و در نهایتاً نمیشه توسعه دهنده جنگو باشید و عضو بزرگترین کامیونیتی جنگو فارسی نباشید :
@DjangoEx
صاحب کانال رو میشناسم و به هدفش ایمان دارم، از روز اول هم دنبال کنندهاش هستم و خواهم بود.
🧑💻PythonDev🧑💻 pinned «#django_roadmap #roadmap امروز یک دوستی، گفت بهش یک roadmap برای شروع جنگو بدم با این بکگراند : ۱- پایتون رو تا سطح خوبی بلد هست ۲- ساختمان داده و الگوریتم رو میشناسه ۳- لینوکس، گیت و داکر رو هم بلده یک بخش دیگه که باعث میشه این Roadmap رو بنویسم، همین…»
توی دورههای آموزشی و دانشگاه چیکار میکنند ؟!
چرا همه جوری صحبت میکنند که انگار همین یک دوره، همین یک کتاب یا ... برای کار و کل عمر کفایت میکنه ؟!
نکنید اینکارو، Junior های عزیز بعضی ازین برگذار کنندههای دوره که فقط به فکر سود شخصی هستند شما مراقب باشید سمت این افراد نرید.
نه بخاطر پول، حتی نه بخاطر وقت که دقیقاً تو دنیای الان برنامهنویسی مثل طلا میمونه
بلکه بخاطر اینکه خیلی از شما دوستان اشاره کردید به گرد ناامیدی شدن پستهای کانال براتون
پستهای کانال سطح بالاتری از تازهکار داره، حتی ممکنه یک سنیور رو ببینید که این مطالب رو بلد نیست (اشکالی هم نداره تا حدودی، چون بهش نیازی نداشته شاید)
اولین کاری که میکنید وقتی دوره تموم شد، اینه که برید مصاحبه
مصاحبهها حتی اگر فقط رد بشید، بهتون کلی اطلاعات مهم میده اینکه بازار کار چی میخواد و چه مواردی رو باید بلد باشید
اگر رد نشدید، که بسیار هم عالی شغل پیدا کردید و این شغل یعنی کلی چیز جدید یاد گرفتن (مخصوصاً برای تازهکار)
حتی بعد از اینکه شغل پیدا کردید، باید یاد بگیرید مصاحبه کنید
این حق شما هست که دنبال کار بهتر با مزایای بیشتر باشید حتی اگر ۱ ماه بعد کار بهتری رو پیدا کنید.
مصاحبه دادن و نترسیدن از رد شدن توی مصاحبه، اولین و مهمترین قدم برای پیشرفت و senior شدن هست
مهمتر اینکه :
همیشه بپرسید به چه دلیل رد شدید.
چرا همه جوری صحبت میکنند که انگار همین یک دوره، همین یک کتاب یا ... برای کار و کل عمر کفایت میکنه ؟!
نکنید اینکارو، Junior های عزیز بعضی ازین برگذار کنندههای دوره که فقط به فکر سود شخصی هستند شما مراقب باشید سمت این افراد نرید.
نه بخاطر پول، حتی نه بخاطر وقت که دقیقاً تو دنیای الان برنامهنویسی مثل طلا میمونه
بلکه بخاطر اینکه خیلی از شما دوستان اشاره کردید به گرد ناامیدی شدن پستهای کانال براتون
پستهای کانال سطح بالاتری از تازهکار داره، حتی ممکنه یک سنیور رو ببینید که این مطالب رو بلد نیست (اشکالی هم نداره تا حدودی، چون بهش نیازی نداشته شاید)
اولین کاری که میکنید وقتی دوره تموم شد، اینه که برید مصاحبه
مصاحبهها حتی اگر فقط رد بشید، بهتون کلی اطلاعات مهم میده اینکه بازار کار چی میخواد و چه مواردی رو باید بلد باشید
اگر رد نشدید، که بسیار هم عالی شغل پیدا کردید و این شغل یعنی کلی چیز جدید یاد گرفتن (مخصوصاً برای تازهکار)
حتی بعد از اینکه شغل پیدا کردید، باید یاد بگیرید مصاحبه کنید
این حق شما هست که دنبال کار بهتر با مزایای بیشتر باشید حتی اگر ۱ ماه بعد کار بهتری رو پیدا کنید.
مصاحبه دادن و نترسیدن از رد شدن توی مصاحبه، اولین و مهمترین قدم برای پیشرفت و senior شدن هست
مهمتر اینکه :
همیشه بپرسید به چه دلیل رد شدید.
تغییرات جالبی توی این ۲ روز داره اتفاق میوفته :
حدودا از ۱-۲ ماه قبل حالت
صحبتم این نیست ولی راهکارش :
Select:
دیگه این اتفاق براتون نمیوفته توی آندروید و iOS و ... هم این تنظیمات هست.
حالا صحبتم این نیست؛ من تنظیمات بالا رو روی یکی از سیستمها و چندتا از سرورها انجام نداده بودم؛ ۲ روز قبل به یکباره اتصالم به خیلی از سایتهایی که روزانه چک میکردم قطع شد.
بررسی کردم دیدم مشکل از DNS هست که خالی شده cache و بعدم دیگه این سایتهارو نمیگیره فکر کردم بخاطر تجهیزات و ابزارهایی هست که استفاده میکنم و تست میگیرم
امروز اومدم روی یکی از سرورها دسترسی بگیرم به سایت دیگری دیدم این اتفاق اونطرف هم افتاده؛ با سایتهایی که روی local خودم تست زده بودم چک کردم دیدم اونها هم همین مشکل رو دارند.
روی سرویس دهندههای دیگه اینکار رو کردم (سرورهای خودم) دیدم اونها هم همینطور شده
بنظرتون اوضاع داره بدتر هم میشه ؟
با این وضعیت باید با رفقا هماهنگ کنم از
چون روی یکی از سرورها گیتهاب رو هم ندارم.
پ.ن :
فکر کن یکی بیاد بگه push میزنم پروژهات رو
هر push میشه ۲۰۰۰ تومن ؛ هر pull پروژه خودت باشه ۱۰۰۰ تومن پروژه سنگین باشه ۵۰۰۰ تومن
هر pull request بین ۲۰۰۰ تا ۱۰.۰۰۰ تومن میوفته
و برای fetch and merge هم ۵۰۰۰ تا ۲۰.۰۰۰ تومن
اگر merge با conflict باشه ۵۰.۰۰۰ تومن میشه
لطفاً اگر این اتفاق برای شما هم افتاده اطلاع بدید.
حدودا از ۱-۲ ماه قبل حالت
safe search
برای همه ایرانی ها فعال شد؛ google, duckduckgo , ... و خب تنظیماتش هم قابل غیرفعال سازی نبود صحبتم این نیست ولی راهکارش :
sudo nmtui
Edit a connection
<select your network interface>
IPv4 Configuration section —> select show
DNS Server —-> select Add:
4.2.2.4
8.8.4.4
8.8.8.8
یکی ازینا یا هر ۳ رو انتخاب کنید Select:
Ignore automatically obtained DNS parameters
بعد OK, میزنید و BackActivate a connection
رو وارد میشید اون interface ایی که تنظیم کرده بودید رو یکبار غیر فعال و مجدد فعال میکنید دیگه این اتفاق براتون نمیوفته توی آندروید و iOS و ... هم این تنظیمات هست.
حالا صحبتم این نیست؛ من تنظیمات بالا رو روی یکی از سیستمها و چندتا از سرورها انجام نداده بودم؛ ۲ روز قبل به یکباره اتصالم به خیلی از سایتهایی که روزانه چک میکردم قطع شد.
بررسی کردم دیدم مشکل از DNS هست که خالی شده cache و بعدم دیگه این سایتهارو نمیگیره فکر کردم بخاطر تجهیزات و ابزارهایی هست که استفاده میکنم و تست میگیرم
امروز اومدم روی یکی از سرورها دسترسی بگیرم به سایت دیگری دیدم این اتفاق اونطرف هم افتاده؛ با سایتهایی که روی local خودم تست زده بودم چک کردم دیدم اونها هم همین مشکل رو دارند.
روی سرویس دهندههای دیگه اینکار رو کردم (سرورهای خودم) دیدم اونها هم همینطور شده
بنظرتون اوضاع داره بدتر هم میشه ؟
با این وضعیت باید با رفقا هماهنگ کنم از
starlink
ایی که دارند استفاده کنیم پروژههامون رو تحویل بدیم.چون روی یکی از سرورها گیتهاب رو هم ندارم.
پ.ن :
فکر کن یکی بیاد بگه push میزنم پروژهات رو
هر push میشه ۲۰۰۰ تومن ؛ هر pull پروژه خودت باشه ۱۰۰۰ تومن پروژه سنگین باشه ۵۰۰۰ تومن
هر pull request بین ۲۰۰۰ تا ۱۰.۰۰۰ تومن میوفته
و برای fetch and merge هم ۵۰۰۰ تا ۲۰.۰۰۰ تومن
اگر merge با conflict باشه ۵۰.۰۰۰ تومن میشه
لطفاً اگر این اتفاق برای شما هم افتاده اطلاع بدید.
اگر monitoring هم اضافه کنید
میبینید خیلی از سرویس دهندههای داخلی برای IP غیر ایران از ساعت ۱ شب به بعد از کار میوفته، اگر اطلاع بدید به پشتیبانی راه میاندازند مجدداً (و دوباره چند شب بعد, این اتفاق دائم در حال تکرار هست)
اگر نه حداقل چند روزی قطع خواهید بود.
توی عکس Downtime سرور ما برای کاربرهای خارجی از ۳ دقیقه شروع شد
تا رسید به ۳۰ دقیقه (ما هرشب اطلاع میدادیم)
ولی توی چندروز اخیر بالای چند ساعت هست که رکوردش توی عکس بالاس، برای از دست ندادن مشتری (استارتاپ همهی درآمدش از ارائه سرویس خوب به مشتری هست) مجبوریم بریم روی سرورهای خارجی و سرویس دهندههای cloud داخلی رو بیخیال بشیم؛
مخصوصاً اینکه همشون میگن مشکل از درخواستهای وزارت ارتباطات هست.
برای همین هم هرکاری کنیم هیچ خسارتی نمیتونیم بگیریم.
یک موضوع دیگه این هست که حالا که از مشتریهای خارجی به درآمدزایی رسیدیم (دلار خیلی باصرفه تر از ریال هست با اینکه مشتری داخلی بسیار داریم) اعضای اصلی تیم و شرکت و ... رو منتقل کنیم از ایران
طبق صحبتهای وکیل شرکت، متوجه شدم چندین کشور هم هستند که تسهیلات خوبی بهمون ارائه میکنند برای این انتقال
میبینید خیلی از سرویس دهندههای داخلی برای IP غیر ایران از ساعت ۱ شب به بعد از کار میوفته، اگر اطلاع بدید به پشتیبانی راه میاندازند مجدداً (و دوباره چند شب بعد, این اتفاق دائم در حال تکرار هست)
اگر نه حداقل چند روزی قطع خواهید بود.
توی عکس Downtime سرور ما برای کاربرهای خارجی از ۳ دقیقه شروع شد
تا رسید به ۳۰ دقیقه (ما هرشب اطلاع میدادیم)
ولی توی چندروز اخیر بالای چند ساعت هست که رکوردش توی عکس بالاس، برای از دست ندادن مشتری (استارتاپ همهی درآمدش از ارائه سرویس خوب به مشتری هست) مجبوریم بریم روی سرورهای خارجی و سرویس دهندههای cloud داخلی رو بیخیال بشیم؛
مخصوصاً اینکه همشون میگن مشکل از درخواستهای وزارت ارتباطات هست.
برای همین هم هرکاری کنیم هیچ خسارتی نمیتونیم بگیریم.
یک موضوع دیگه این هست که حالا که از مشتریهای خارجی به درآمدزایی رسیدیم (دلار خیلی باصرفه تر از ریال هست با اینکه مشتری داخلی بسیار داریم) اعضای اصلی تیم و شرکت و ... رو منتقل کنیم از ایران
طبق صحبتهای وکیل شرکت، متوجه شدم چندین کشور هم هستند که تسهیلات خوبی بهمون ارائه میکنند برای این انتقال
این سوالات احمقانهاس
که خب متأسفانه توی لینکدین و توییتر و اینستاگرام پر شده
و فقط وقتتون رو داره میگیره
بنظرم این موارد توهم زا هم هست، تازهکار فکر میکنه اینکه میتونه این سوالات رو جواب بده یعنی خیلی بلد هست.
ولی آیا واقعاً اهمیتی داره دونستن این موارد ! حتی اگر اینجوری کد بزنید.
تهش اینه ی print توی سورس کد میذارید و خروجیش رو میبینید.
عمرتون رو صرف سوالات احمقانه نکنید، این اکانتها رو هم معروف نکنید
شخصاً
Connection
رو روی لینکدین حذف میکنم وقتی میبینم کسی با این پستها یا لایک کردن این پستها باعث حواس پرتیم میشه.
دقیقاً این موارد حواشی برنامهنویسی هست
خیلی خیلی مراقب باشید.
که خب متأسفانه توی لینکدین و توییتر و اینستاگرام پر شده
و فقط وقتتون رو داره میگیره
بنظرم این موارد توهم زا هم هست، تازهکار فکر میکنه اینکه میتونه این سوالات رو جواب بده یعنی خیلی بلد هست.
ولی آیا واقعاً اهمیتی داره دونستن این موارد ! حتی اگر اینجوری کد بزنید.
تهش اینه ی print توی سورس کد میذارید و خروجیش رو میبینید.
عمرتون رو صرف سوالات احمقانه نکنید، این اکانتها رو هم معروف نکنید
شخصاً
Connection
رو روی لینکدین حذف میکنم وقتی میبینم کسی با این پستها یا لایک کردن این پستها باعث حواس پرتیم میشه.
دقیقاً این موارد حواشی برنامهنویسی هست
خیلی خیلی مراقب باشید.
photo_2023-09-23_23-01-54.jpg
41.3 KB
این کد ی مشکل اساسی داره (بزرگ و اساسی) مخصوصا توی پروژههای حرفهای
موضوع پیچیدهای نیست ولی چون زیاد دیدم ترجیح دادم بهش اشاره کنم تا کم کم دیگه نبینیم.
میتونید حدس بزنید چی هست ؟
توضیحات پست بعدی
پ.ن : typing توی پروژهها موضوع مهمی هست اما توی پایتون الزامی نیست
هیچوقت باگ محسوب نمیشه و فقط جزو شرایط
clean code
هست (به این مورد اشاره نکنید)
موضوع پیچیدهای نیست ولی چون زیاد دیدم ترجیح دادم بهش اشاره کنم تا کم کم دیگه نبینیم.
میتونید حدس بزنید چی هست ؟
توضیحات پست بعدی
پ.ن : typing توی پروژهها موضوع مهمی هست اما توی پایتون الزامی نیست
هیچوقت باگ محسوب نمیشه و فقط جزو شرایط
clean code
هست (به این مورد اشاره نکنید)
🧑💻PythonDev🧑💻
photo_2023-09-23_23-01-54.jpg
مشکل اصلی استفاده از
اصطلاحا به این روش میگن
منبع بسیاری از BUG های مخفی همین مورد هست.
قبل از اینکه راه حل رو بگم ی موضوع دیگه برای تازهکارها اشاره کنم (شوخی و روشی برای ایستگاه کردن
ی مدل دیگه
naked exception
از همینجا شاید متوجه شدید دیگه؛ 😂😂
نوع تعریفش اینطوری هست :
طرف به ارور میخورد بهش میگفتن ؛ naked ات رو بده تا بگم (خیلی وقتا کار به جاهای باریک میرسید مراقب باشید خلاصه 😅😅😅)
ازین ۲ مدل هیچوقت استفاده نکنید که یا BUG مخفی میخورید یا خدایی نکرده ایستگاه میشید.
راه حل کد بالا :
۲ تا
except Exception as ex:
که دوستان توی کامنت اشاره کردند.اصطلاحا به این روش میگن
Broader Approach
مسئله اینه که توی کد بالا من با ارور هیچکاری نمیکنم (اما توی این شرایط هم broader approach
اشتباه هست) ولی فرض کنید شما باید این موارد رو لاگ بندازید. در این شرایط exception handle
شما به درد نمیخوره احتمالا لاگ هم همینطور چون کسی اروری نمیبینه که بخواد لاگ فایل رو بخونه (حتی اگر توی لاگ جزئیات بیشتری هم نوشته شده باشه)منبع بسیاری از BUG های مخفی همین مورد هست.
قبل از اینکه راه حل رو بگم ی موضوع دیگه برای تازهکارها اشاره کنم (شوخی و روشی برای ایستگاه کردن
junior developer
ها بوده البته کمتر دیده میشه دیگه ولی ی زمان تو دانشگاها خیلی زیاد بود بخصوص خارج از ایران) شاید بخاطر اینکه دیگه این مدل کد استفاده نمیشهی مدل دیگه
exception
داریم که اصطلاحا بهش میگن :naked exception
از همینجا شاید متوجه شدید دیگه؛ 😂😂
نوع تعریفش اینطوری هست :
except:
قبلا که خیلی مد بود استفاده ازین مورد و هنوز کلمه nude
انقدر جاافتاده نبود برای ایستگاه کردن دانشجوهای سال پایینی استفاده میشد (بینالمللی)طرف به ارور میخورد بهش میگفتن ؛ naked ات رو بده تا بگم (خیلی وقتا کار به جاهای باریک میرسید مراقب باشید خلاصه 😅😅😅)
ازین ۲ مدل هیچوقت استفاده نکنید که یا BUG مخفی میخورید یا خدایی نکرده ایستگاه میشید.
راه حل کد بالا :
۲ تا
Exception
جدا بنویسید :except IndexError as ex:
و اگر قرار هست TypeError هم silent کنید در ادامهاش except TypeError as ex:
یا حتی ادغام هر ۲ : except (IndexError, TypeError) as ex:
اینو همهی سرمایهگذارهای پروژه و کد توی ایران حتما باید ببینند :
برای دولوپرهای عزیز هم قبل از اینکه جوگیر بشید و بگید میخوام شرکت بزنم این رو ببینید (این بررسی فقط از جنبههای توسعه نرمافزار هست باقیش هیج)
https://www.youtube.com/watch?v=Dl-BdxNRUqs
برای دولوپرهای عزیز هم قبل از اینکه جوگیر بشید و بگید میخوام شرکت بزنم این رو ببینید (این بررسی فقط از جنبههای توسعه نرمافزار هست باقیش هیج)
https://www.youtube.com/watch?v=Dl-BdxNRUqs
YouTube
What does larger scale software development look like?
📘 T3 Stack Tutorial: https://1017897100294.gumroad.com/l/jipjfm
🤖 SaaS I'm Building: https://www.icongeneratorai.com/
✂️ Background Cutter: https://www.backgroundcutter.com/
💬 Discord: https://discord.gg/4kGbBaa
🔔 Newsletter: https://newsletter.webdevcody.com/…
🤖 SaaS I'm Building: https://www.icongeneratorai.com/
✂️ Background Cutter: https://www.backgroundcutter.com/
💬 Discord: https://discord.gg/4kGbBaa
🔔 Newsletter: https://newsletter.webdevcody.com/…
کانفیگ
بخش عمدهای از تسکهای من مربوط میشه به
Deep learning, ML engineering
اما وجه دیگه کارم
از طرفی هم ۹۰٪ کدهایی که از بچههای بکند تحویل میگیرم ی
این کد رو قبلا برای
هر لاگ فایل تا ۱۰ مگ حجم میتونه اشغال کنه و بعد از اون فایل ذخیره میشه به اسم backup تا ۱۰ تا ورژن ازین بکاپها نگه میدارم فقط و روی نسخه ۱۱
البته این خیلی سادهاس ولی خب از اون کیلویی اضافه کردن
پیشنهاد میدم شما هم ازین کد بعنوان
logging
برای من همیشه اذیت کننده هست.بخش عمدهای از تسکهای من مربوط میشه به
Deep learning, ML engineering
اما وجه دیگه کارم
backend
هست و software engineer
برای همین خیلی کم پیش میاد نیاز داشته باشم ی لاگر با جزئیات بنویسم از طرفی هم ۹۰٪ کدهایی که از بچههای بکند تحویل میگیرم ی
logging
نوشته شده که حافظه زیادی قرار هست بگیره (بخصوص روی سرور تست دارم صحبت میکنم که حجم لاگ بالا میره)این کد رو قبلا برای
Django
نوشتم ؛ توضیح دادم تقریبا چند هفته بعد از شروع یادگیری یکی از بدترین پروژههای شرکت رو دست گذاشتم روش و شروع کردم به بازنویسی این لاگر رو برای اون نوشتم هر لاگ فایل تا ۱۰ مگ حجم میتونه اشغال کنه و بعد از اون فایل ذخیره میشه به اسم backup تا ۱۰ تا ورژن ازین بکاپها نگه میدارم فقط و روی نسخه ۱۱
log rotateمیخوره و قدیمیترین فایل حذف میشه
البته این خیلی سادهاس ولی خب از اون کیلویی اضافه کردن
logging
فایل قطعا بهترهپیشنهاد میدم شما هم ازین کد بعنوان
base
استفاده کنید و لاگ فایلهای تمیز داشته باشید چون دیر یا زود خودتون مجبور به خوندنشون هستید.
🧑💻PythonDev🧑💻
کانفیگ logging برای من همیشه اذیت کننده هست. بخش عمدهای از تسکهای من مربوط میشه به Deep learning, ML engineering اما وجه دیگه کارم backend هست و software engineer برای همین خیلی کم پیش میاد نیاز داشته باشم ی لاگر با جزئیات بنویسم از طرفی هم ۹۰٪ کدهایی…
logger.py
657 B
اینم فایل سورس (حتما بخونید و درک کنید اول)
چندتا توضیح بدم راجب کد بالا و مسائل دیگه :
۱- کد بالا ربطی به django نداره، هرچند توی یک خط من برای مسیر فایل از django استفاده کردم. Logging مربوط به core python هست.
۲- بیش از ۳۰ نفر سوالاتشون راجب همین موضوع بود، تماماً هم مشترک (دوستان گروه برای همین منظور ساخته شده و بخش کامنت) ازین به بعد این سوالات رو فقط توی گروه بپرسید.
۳- توی پیامها ویس ندید، مخصوصاً قبل از هماهنگ کردن ۹۹.۹٪ اصلا پیام رو باز نمیکنم اگر اینطور باش
۴- احوال پرسی و خبر پرسیدن رو نمیفهمم، بعد حالا اگر پرسیدید چرا منتظر جواب نمیمونید ؟
بجای خوب هستی و چه خبر، همون سلام کفایت میکنه و یا اگر عادت کردید برای غریبه از
امیدوارم سلامت باشید استفاده کنید بخدا قشنگتر هم هست
۵- قبل از سوال پرسیدن نیازی به تاریخچه نویسی نداره، کی بودید و چیکار کردید و چرا به من ربطی نداره واقعاً و اگر برای راهنمایی لازم باشه قطعاً خودم میپرسم از شما (بعضیها ۲۰ تا پیام میذارند آخر سوال از یکی از پستهای کانال میپرسند)
۶- نهایتاً، خواهش میکنم
خواهش میکنم
اصلی ترین رفتار برنامهنویسی رو رعایت کنید
پیامها رو مختصر بنویسید همهی موارد رو داخل یک پیام ارسال کنید بریده بریده پیام دادن اسپم حساب میشه
بدتر از بریده بریده پیام دادن ۷-۸ تا پیام فرستادن و در نهایت گفتن این هست که بگید، میتونم سوال بپرسم ؟!
بجای اسپم کردن، اصل سوال رو بپرسید لطفاً این خیلی خیلی مهم هست.
دوستانی که این موارد رو رعایت نمیکنند، حداقلش اینه که اجازه نمیدهند من وقت داشته باشم به باقی دوستان هم کمک کنم.
مرسی از همگی دوستانی که رعایت میکنند یا خواهند کرد 🌹
۱- کد بالا ربطی به django نداره، هرچند توی یک خط من برای مسیر فایل از django استفاده کردم. Logging مربوط به core python هست.
۲- بیش از ۳۰ نفر سوالاتشون راجب همین موضوع بود، تماماً هم مشترک (دوستان گروه برای همین منظور ساخته شده و بخش کامنت) ازین به بعد این سوالات رو فقط توی گروه بپرسید.
۳- توی پیامها ویس ندید، مخصوصاً قبل از هماهنگ کردن ۹۹.۹٪ اصلا پیام رو باز نمیکنم اگر اینطور باش
۴- احوال پرسی و خبر پرسیدن رو نمیفهمم، بعد حالا اگر پرسیدید چرا منتظر جواب نمیمونید ؟
بجای خوب هستی و چه خبر، همون سلام کفایت میکنه و یا اگر عادت کردید برای غریبه از
امیدوارم سلامت باشید استفاده کنید بخدا قشنگتر هم هست
۵- قبل از سوال پرسیدن نیازی به تاریخچه نویسی نداره، کی بودید و چیکار کردید و چرا به من ربطی نداره واقعاً و اگر برای راهنمایی لازم باشه قطعاً خودم میپرسم از شما (بعضیها ۲۰ تا پیام میذارند آخر سوال از یکی از پستهای کانال میپرسند)
۶- نهایتاً، خواهش میکنم
خواهش میکنم
اصلی ترین رفتار برنامهنویسی رو رعایت کنید
پیامها رو مختصر بنویسید همهی موارد رو داخل یک پیام ارسال کنید بریده بریده پیام دادن اسپم حساب میشه
بدتر از بریده بریده پیام دادن ۷-۸ تا پیام فرستادن و در نهایت گفتن این هست که بگید، میتونم سوال بپرسم ؟!
بجای اسپم کردن، اصل سوال رو بپرسید لطفاً این خیلی خیلی مهم هست.
دوستانی که این موارد رو رعایت نمیکنند، حداقلش اینه که اجازه نمیدهند من وقت داشته باشم به باقی دوستان هم کمک کنم.
مرسی از همگی دوستانی که رعایت میکنند یا خواهند کرد 🌹
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد
ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
EAFP
امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت.ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که
tensorflow 0.7
اومده بود قشنگ یادم هست ازین چالشها زیاد داشتیم)توی سورس اگر کدهارو بخونید یک ساختاری شبیه عکس وجود داره که باعث میشه در نهایت ارور خاص فریمورک برگرده؛ البته با یک تغییر کوچیک توی خط 10 :
raise CustomException('Finally we raise our custom error in framework.')
from None
همین from None
باعث میشه exception
های قبلی چاپ نشه.پاک کردن همین ۲ کلمه باعث شد توی ۵ دقیقه مشکل حل بشه.
دیدم نیروی خودم بلد نبود گفتم شاید بهتر باشه اینجا هم بذارم بدرد کسی بخوره.
🧑💻PythonDev🧑💻
ازین مدل کد توی سورس کد پکیجها زیاد دیدید همون استاندارد EAFP امروز یکی از نیروهای junior که باهاشون کار میکنم روی یکی از کدها به اروری میخورد و کار پیش نمیرفت. ارور فریمورک هم واقعا نامشخص نبود و چیزی ازش دستمون رو نمیگرفت (زمانی که tensorflow 0.7 اومده…
مثال بالا در صورت وجود
from None
حتما شما هم با
همین که دیگه لازم نیست یادتون بمونه فایل رو ببیند یا اینکه کد درست رو بزنید
بستن فایل باید توی بخش finally باشه و ...
یک کلاس داخل تعریف پروتوکل
پس توی این بین میشه کارهای زیادی انجام داد
کد بالا مربوط به یکی از پروژههای بزرگ هست که توضیح میدم بدها
ی hot-fix که زدم و از
توجه کنید خارج از with خروجی print مثل قبل چاپ میشه و دیگه توی فایلی نوشته نمیشه چون توی
with open
توی پایتون کار کردید فوقالعاده کمک کننده و مفید هست همین که دیگه لازم نیست یادتون بمونه فایل رو ببیند یا اینکه کد درست رو بزنید
بستن فایل باید توی بخش finally باشه و ...
try:همین شرایط برای connection به دیتابیس هم هست.
excpet:
finally:
with openاز یک راه حل تمیز و زیبا استفاده میکنه که بهش
Context Manager Protocol
گفته میشه یک کلاس داخل تعریف پروتوکل
context managerقرار میگیره اگر ۲ تا متد رو داشته باشه
__enter__, __exit__دقیقا وقتی وارد بلوک
__enter__
with .... :میشیه اجرا میشه و
pass
__exit__
وقتی از with
خارج میشه پس توی این بین میشه کارهای زیادی انجام داد
کد بالا مربوط به یکی از پروژههای بزرگ هست که توضیح میدم بدها
ی hot-fix که زدم و از
print
رو بجای logger
استفاده کردم توجه کنید خارج از with خروجی print مثل قبل چاپ میشه و دیگه توی فایلی نوشته نمیشه چون توی
__exit__
sys.stdout
به مقدار قبلی برمیگرده.فایل بعدی که باید داشته باشید
۱- دیلی شرکت نکردن بدون اطلاع قبلی؛ دستمزد اون روز رو حذف میکنه
۲- پروژه تحویل دادن بدون
اما توی تیم من حداقل ۳ نکته هم باید رعایت بشه :
۱- بجای یک فایل باید ۳ تا فایل برای
تصویر بالا برای فایل
requirements.txt
نبودش توی تیم ما خطای بزرگی هست :۱- دیلی شرکت نکردن بدون اطلاع قبلی؛ دستمزد اون روز رو حذف میکنه
۲- پروژه تحویل دادن بدون
requirements.txt
درست بین ۲ تا ۷ روز کسر از دستمزد داره (اهمیت رو ببینید)اما توی تیم من حداقل ۳ نکته هم باید رعایت بشه :
۱- بجای یک فایل باید ۳ تا فایل برای
requirements
داشته باشید base.txt- local.txt - product.txt
یک پوشه به این اسم میسازید و این ۳ فایل داخلش قرار میگیره تصویر بالا برای فایل
base.txt
هست؛ این فایل شامل پکیجهایی میشه که چه توی محیط توسعه چه توی پروداکشن باید وجود داشته باشه local.txt
برای محیط توسعه هست خط اول این فایل همیشه باید -r base.txt
باشه که بصورت اتومات پکیجهای داخل base
رو هم شامل بشه موقع نصب و باقی خطهای فایل شامل پکیجهایی میشه که فقط توی محیط توسعه لازم هست :black, isort, flake8, pre-commit, ...
و در نهایت prod.txt
مواردی که فقط روی پروداکشن لازم هست بازم خط اول باید-r base.txt
باشه حتما و قطعا چیزی که توی local
هست نباید اینجا باشه.