قسمت دوم پلی لیست رشد مسیر شغلی, صفر تا صد گرفتن استخدام شدن در دنیای نرم افزار
در دومین ویدیو, از اهمیت پرسونال برندینگ صحبت میکنم. راجب نتورکینگ نکاتی رو میگم و تفاوتش با پرسونال برندینگ. راجب پروژه سمپل زدن و پروداکت صحبت میکنم, و در آخر به سوال بزرگی که آیا فلان مدرک من از فلان کورس ارزشی برای فلان کارفرما داره یا نه پاسخ میدم
https://youtu.be/lsf0tSeJYPI
سوالی داشتین حتما کامنت کنید
@ManiFoldsPython
در دومین ویدیو, از اهمیت پرسونال برندینگ صحبت میکنم. راجب نتورکینگ نکاتی رو میگم و تفاوتش با پرسونال برندینگ. راجب پروژه سمپل زدن و پروداکت صحبت میکنم, و در آخر به سوال بزرگی که آیا فلان مدرک من از فلان کورس ارزشی برای فلان کارفرما داره یا نه پاسخ میدم
https://youtu.be/lsf0tSeJYPI
سوالی داشتین حتما کامنت کنید
@ManiFoldsPython
YouTube
تقویت نتورکینگ پرسونال برندینگ و ارزش گذاری مدارک
در دومین ویدیو از بهبود پروفایل, میپردازیم به مفاهیم پرسونال برندینگ, نتورکینگ, دو مبحثی که واقعا مهم و تاثیر گذار هستند در درآمد و شانس گرفتن شغل بهتر. در آخر میپردازیم به ارزش گذاری مدارک طبق مقاله مارتین
لینک مقاله:
https://martinfowler.com/bliki/C…
لینک مقاله:
https://martinfowler.com/bliki/C…
👍12
قسمت سوم پلی لیست رشد مسیر شغلی, صفر تا صد گرفتن استخدام شدن در دنیای نرم افزار
بعد از اینکه پروفایلمون رو قوی کردیم, حالا وقتشه که رو کاغذ هم خودمون رو خوب نشون بدیم. تو این ویدیو پرداختم به اصول زرومه نویسی, از ریپو گیتهاب خودم. تک تک موارد که میتونه یک رزومه رو بهتر کنه حتی برای مارکت اروپا و رزومه رو اینجا با مثال و توضیح فارسی, شرح دادم.
👉 Link: https://youtu.be/y8G_31UmiYo
ریپو گیتهاب:
👉 Link: https://github.com/ManiMozaffar/awesome-resumes
سوالی داشتین حتما کامنت کنید
@ManiFoldsPython
بعد از اینکه پروفایلمون رو قوی کردیم, حالا وقتشه که رو کاغذ هم خودمون رو خوب نشون بدیم. تو این ویدیو پرداختم به اصول زرومه نویسی, از ریپو گیتهاب خودم. تک تک موارد که میتونه یک رزومه رو بهتر کنه حتی برای مارکت اروپا و رزومه رو اینجا با مثال و توضیح فارسی, شرح دادم.
👉 Link: https://youtu.be/y8G_31UmiYo
ریپو گیتهاب:
👉 Link: https://github.com/ManiMozaffar/awesome-resumes
سوالی داشتین حتما کامنت کنید
@ManiFoldsPython
❤11👍1
قابل توجه دوستانی که رزومه فرستادن, تو ویدیو بعدی که هنوز پابلیش نکردم و فردا میکنم رزومشون رو بررسی کردم..👆
این ویدیو نیم ساعت شده بود.
@ManiFoldsPython
این ویدیو نیم ساعت شده بود.
@ManiFoldsPython
❤10
قسمت چهارم پلی لیست رشد مسیر شغلی, صفر تا صد گرفتن استخدام شدن در دنیای نرم افزار
حالا که با تکنیک های رزومه نویسی آشنا شدیم, میریم که ۵ رزومه رو باهم بررسی کنیم. در آخرش رزومه خودمم بررسی میکنم و نکات منفی و مثبتش رو میگم.
👉 Link: https://youtu.be/BntW0RjTyaM
سوالی داشتین حتما کامنت کنید
@ManiFoldsPython
حالا که با تکنیک های رزومه نویسی آشنا شدیم, میریم که ۵ رزومه رو باهم بررسی کنیم. در آخرش رزومه خودمم بررسی میکنم و نکات منفی و مثبتش رو میگم.
👉 Link: https://youtu.be/BntW0RjTyaM
سوالی داشتین حتما کامنت کنید
@ManiFoldsPython
YouTube
ورک شاپ بررسی ۵ رزومه IT
حالا که با تکنیک های رزومه نویسی آشنا شدیم, میریم که ۵ رزومه رو باهم بررسی کنیم. در آخرش رزومه خودمم بررسی میکنم و نکات منفی و مثبتش رو میگم.
ریپو گیتهاب رزومه نویسی:
https://github.com/ManiMozaffar/awesome-resumes
🌍LinkedIn: https://www.linkedin.co…
ریپو گیتهاب رزومه نویسی:
https://github.com/ManiMozaffar/awesome-resumes
🌍LinkedIn: https://www.linkedin.co…
❤8👍1
نصف پلی لیست تموم شده و ۴ قسمت از پلی لیست پخش شده و باقی قسمت ها هم طی ۳-۴ روز آتی اپلود میشه.
سوال از کسایی که پلی لیستو دیدن نکات مثبت و منفی ویدیو چی بود بنظرتون؟ چه فیدبکی دارین؟
و کسایی که ندیدن چرا هنوز ندیدن؟ یک مقدار view از اون چیزی که انتظارشو داشتم کمتر بود.. چون خیلیا این سوالاتی که تو ویدیو جواب داده بودن رو ازم میپرسیدن. نمیدونم شاید اشتباه میکردم و جامعه متقاضی این مطالب کمتر از چیزی بود که تو ذهن من بود...
در خصوص دوره تست و دیزاین, قطعا ادامه پیدا میکنه. شرمنده این ۴-۵ هفته اخیر واقعا فشار زیادی روم بود و نمیرسیدم ویدیو بذارم. بعد از تموم شدن این پلی لیست هفته ای ۲ قسمت از هرکدوم میذارم. دیزاین پترن که دوره خیلی طولانی خواهد بود ولی تست تقریبا نصفش تموم شده و تا قبل ۲۰۲۴ کلش تموم میشه احتمالا.
@ManiFoldsPython
سوال از کسایی که پلی لیستو دیدن نکات مثبت و منفی ویدیو چی بود بنظرتون؟ چه فیدبکی دارین؟
و کسایی که ندیدن چرا هنوز ندیدن؟ یک مقدار view از اون چیزی که انتظارشو داشتم کمتر بود.. چون خیلیا این سوالاتی که تو ویدیو جواب داده بودن رو ازم میپرسیدن. نمیدونم شاید اشتباه میکردم و جامعه متقاضی این مطالب کمتر از چیزی بود که تو ذهن من بود...
در خصوص دوره تست و دیزاین, قطعا ادامه پیدا میکنه. شرمنده این ۴-۵ هفته اخیر واقعا فشار زیادی روم بود و نمیرسیدم ویدیو بذارم. بعد از تموم شدن این پلی لیست هفته ای ۲ قسمت از هرکدوم میذارم. دیزاین پترن که دوره خیلی طولانی خواهد بود ولی تست تقریبا نصفش تموم شده و تا قبل ۲۰۲۴ کلش تموم میشه احتمالا.
@ManiFoldsPython
❤18👍5
اگه دنبال یک پکیجین که کارتون رو با timestamp راحت تر کنه این پکیجو امتحان کنید
https://github.com/arrow-py/arrow
مثلا میخواین سه شنبه هفته قبل رو بگیرین. اول ۱ هفته میرین عقب. بعد استارت هفته (دو شنبه رو میگیرین) بعد ۱ روز میرین جلو که میشه سه شنبه.
خیلی پکیج تمیزیه 👌
@ManiFoldsPython
https://github.com/arrow-py/arrow
مثلا میخواین سه شنبه هفته قبل رو بگیرین. اول ۱ هفته میرین عقب. بعد استارت هفته (دو شنبه رو میگیرین) بعد ۱ روز میرین جلو که میشه سه شنبه.
import arrow
arrow.now().shift(weeks=-1).floor('week').shift(days=1)
خیلی پکیج تمیزیه 👌
@ManiFoldsPython
GitHub
GitHub - arrow-py/arrow: 🏹 Better dates & times for Python
🏹 Better dates & times for Python. Contribute to arrow-py/arrow development by creating an account on GitHub.
❤7👍6🔥1
Forwarded from DevTwitter | توییت برنامه نویسی
#بدرد
فقط اینکه شما بلد باشید با یک زبان برنامه نویسی یک پروژه رو به اتمام برسونید به معنی این نیست که شما یک Software engineer یا مهندس نرمافزار هستید.
یک مهندس نرمافزار توی سال 2023 نیازه که حداقل یکسری ابزار هارو بلد باشه و بتونه باهاشون کار کنه، خب بیاید ببینیم چه ابزارهایی...
- IDE | Editor
یک مهندس نرمافزار احتمالا بیشترین تایمش رو بابت کد زدن بگذرونه، پس نیازه که محیطی که توش کد میزنه رو خوب بشناسه.
پس اولین ابزار یک IDE یا ادیتور مناسبه که اون رو خوب بشناسه و بهش مسلط باشه تا با سرعت مناسبی بتونه پروسه کد زدن رو پیش ببره.
- Version control systems
برای مدیریت و توسعه سورس های کد نوشته شده و اشتراک گذاری و توسعه توسط بقیه برنامه نویس ها شما حتما حتما باید یک ورژن کنترل مثل گیت رو خوب بلد باشید تا بتونید در روند توسعه سریع و چابک باشید.
- Docker
دیگه توی این دوره هر مهندس نرم افزاری برای این که یک محیط Centralized رو بالا بیاره نیازه که داکر رو بلد باشه، حتما یادش بگیرید :)
- Testing tools
شما نیازه که ابزار ها و لایبرری های مورد استفاده جهت تست نرم افزارتون رو هم بلد باشید تا بتونید تست اتوماتیک داشته باشید
- Monitoring
یکسری ابزار ها هستن برای مانیتور کردن پرفومنس پروژه مثل Prometheus و Grafana که با استفاده ازشون میتونید پرفومنس پروژتون یا دیتابیستون رو مانیتور کنید و برای تحلیل هاتون ازشون استفاده کنید.
- Task management tools
کارها و تسک های هربرنامه نویس باید مشخص باشه که بتونه سرعتش در توسعه رو بالا ببره، در نتیجه دونستن یکسری ابزار مثل Jira که کارشون Task management و.. هست یک نیاز ضروریه.
- Logging
اما لاگ زدن و log tracking، اهمیتش توی یک پروژه به قدری مهمه که شما بعنوان مهندس نرم افزار برای کنترل بهتر روی پروژتون نباید ازش غافل بشید.
یکسری ابزار ها مثل Sentry بهتون کمک میکنن.
- CI/CD
شما با استفاده از CD/CD میتونید روند بیلد، تست و دیپلوی پروژتون رو اتوماتیک کنید و خیلی سرعت خودتون رو در روند توسعه نرم افزار بالاتر ببرید و ریسک خطا های بیلد و دیپلوی رو کاهش بدید، ابزار هایی مثل Jenkins یا حتی Gitlab به شما در این پروسه کمک میکنن.
- Gitlab | Github
خب ما گیت رو یادگرفتیم حالا چطور توی یک محیط اشتراکی کدهامون رو باهم به اشتراک بزاریم و کدهای همدیگه رو قبل از اعمال بررسی و کامنت بزاریم، یا اصلا این کدهارو کجا نگه داریم که فردا از دستشون ندیم؟ خب معلومه دیگه از گیتهاب یا گیتلب استفاده کنید.
- Message brokers
این روزا با بزرگ شدن پروژه هامون، نیاز به ارتباط بین اپلیکیشن ها حس میشه که یکی از روش های ارتباط برقرار کردن استفاده از Message broker هایی مثل Kafka یا RabbitMQ هستش و یادگیریشون امروزه تقریبا ضروری شده برای یک مهندس نرم افزار
- Linux
اصلا نیاز به توضیح نیست در مورد لینوکس، بعنوان یه مهندس نرم افزار تقریبا بیشتر سرورهایی که باهاشون سر و کار دارید لینوکسی هستند، و از سمتی احتمالا استفاده از لینوکس میتونه خیلی بهتون کمک کنه بعنوان دسکتاپتون
پس یادش بگیرید.
- Cloud platforms
این روزا تقریبا هرجایی که برید با Cloud سر و کار دارید و زیرساخت اکثر اپلیکیشنا توی محیط هایی مثل AWS و Google Cloud و Azure یا مشابهشون دارن میزبانی میشن، پس اینم احتمالا باید یادبگیرید خصوصا اگه قصد مهاجرت دارید.
@DevTwitter | <Reza/>
فقط اینکه شما بلد باشید با یک زبان برنامه نویسی یک پروژه رو به اتمام برسونید به معنی این نیست که شما یک Software engineer یا مهندس نرمافزار هستید.
یک مهندس نرمافزار توی سال 2023 نیازه که حداقل یکسری ابزار هارو بلد باشه و بتونه باهاشون کار کنه، خب بیاید ببینیم چه ابزارهایی...
- IDE | Editor
یک مهندس نرمافزار احتمالا بیشترین تایمش رو بابت کد زدن بگذرونه، پس نیازه که محیطی که توش کد میزنه رو خوب بشناسه.
پس اولین ابزار یک IDE یا ادیتور مناسبه که اون رو خوب بشناسه و بهش مسلط باشه تا با سرعت مناسبی بتونه پروسه کد زدن رو پیش ببره.
- Version control systems
برای مدیریت و توسعه سورس های کد نوشته شده و اشتراک گذاری و توسعه توسط بقیه برنامه نویس ها شما حتما حتما باید یک ورژن کنترل مثل گیت رو خوب بلد باشید تا بتونید در روند توسعه سریع و چابک باشید.
- Docker
دیگه توی این دوره هر مهندس نرم افزاری برای این که یک محیط Centralized رو بالا بیاره نیازه که داکر رو بلد باشه، حتما یادش بگیرید :)
- Testing tools
شما نیازه که ابزار ها و لایبرری های مورد استفاده جهت تست نرم افزارتون رو هم بلد باشید تا بتونید تست اتوماتیک داشته باشید
- Monitoring
یکسری ابزار ها هستن برای مانیتور کردن پرفومنس پروژه مثل Prometheus و Grafana که با استفاده ازشون میتونید پرفومنس پروژتون یا دیتابیستون رو مانیتور کنید و برای تحلیل هاتون ازشون استفاده کنید.
- Task management tools
کارها و تسک های هربرنامه نویس باید مشخص باشه که بتونه سرعتش در توسعه رو بالا ببره، در نتیجه دونستن یکسری ابزار مثل Jira که کارشون Task management و.. هست یک نیاز ضروریه.
- Logging
اما لاگ زدن و log tracking، اهمیتش توی یک پروژه به قدری مهمه که شما بعنوان مهندس نرم افزار برای کنترل بهتر روی پروژتون نباید ازش غافل بشید.
یکسری ابزار ها مثل Sentry بهتون کمک میکنن.
- CI/CD
شما با استفاده از CD/CD میتونید روند بیلد، تست و دیپلوی پروژتون رو اتوماتیک کنید و خیلی سرعت خودتون رو در روند توسعه نرم افزار بالاتر ببرید و ریسک خطا های بیلد و دیپلوی رو کاهش بدید، ابزار هایی مثل Jenkins یا حتی Gitlab به شما در این پروسه کمک میکنن.
- Gitlab | Github
خب ما گیت رو یادگرفتیم حالا چطور توی یک محیط اشتراکی کدهامون رو باهم به اشتراک بزاریم و کدهای همدیگه رو قبل از اعمال بررسی و کامنت بزاریم، یا اصلا این کدهارو کجا نگه داریم که فردا از دستشون ندیم؟ خب معلومه دیگه از گیتهاب یا گیتلب استفاده کنید.
- Message brokers
این روزا با بزرگ شدن پروژه هامون، نیاز به ارتباط بین اپلیکیشن ها حس میشه که یکی از روش های ارتباط برقرار کردن استفاده از Message broker هایی مثل Kafka یا RabbitMQ هستش و یادگیریشون امروزه تقریبا ضروری شده برای یک مهندس نرم افزار
- Linux
اصلا نیاز به توضیح نیست در مورد لینوکس، بعنوان یه مهندس نرم افزار تقریبا بیشتر سرورهایی که باهاشون سر و کار دارید لینوکسی هستند، و از سمتی احتمالا استفاده از لینوکس میتونه خیلی بهتون کمک کنه بعنوان دسکتاپتون
پس یادش بگیرید.
- Cloud platforms
این روزا تقریبا هرجایی که برید با Cloud سر و کار دارید و زیرساخت اکثر اپلیکیشنا توی محیط هایی مثل AWS و Google Cloud و Azure یا مشابهشون دارن میزبانی میشن، پس اینم احتمالا باید یادبگیرید خصوصا اگه قصد مهاجرت دارید.
@DevTwitter | <Reza/>
👍36👎4❤2
پریروز یک مشکل داشتم تو گرافانا که الان بهتون توضیح میدم, فکر کنید یک query تایم سریز دارین از متریک یک سری یوزر. این تو دیتابیس شماره یک هست:
User | metric | ts
mani | 50 | 2023-11-15
mani | 50 | 2023-11-14
negin | 20 | 2023-11-15
negin | 20 | 2023-11-14
abbas | 30 | 2023-11-13
حالا این یوزر هاتون تو دیتابیس شماره ۲ گروه شدن.
User | group
mani | 1
abbas | 1
negin | 2
میخواستم چیکار کنم؟
تو گرافانا میخواستم مجموع این متریک ها رو بر اساس هر گروه داشته باشم. یعنی ریزالت دو تا queryکه از دو تا دیتابیس میارن رو جوین بزنم.
مشکل چی بود؟
خوده join گرافانا خیلی خرابه. وقتی inner join میزدم با تایم سریز فقط ۱ دیتا رو جوین میزد. اینطوری فقط مثلا ماله روزه ۱۵ نوامبر رو داشتم از هر گروه. یعنی:
Expected output (خروجی مورد نظرم)
Group | metric | ts
1 | 70 | 2023-11-15
1 | 70 | 2023-11-14
1 | 0 | 2023-11-13
2 | 0 | 2023-11-15
2 | 0 | 2023-11-14
2 | 30 | 2023-11-13
CURRENT output (خروجی که میگرفتم)
group | metric | ts
1 | 70 | 2023-11-15
2 | 0 | 2023-11-15
چرا؟ خدا میدونه چرا! transformer های گرافانا واقعا باگ دارن و درست حسابی کار نمیکنن.
اقا بگذریم, حل این صورت سوالو تو پست بعدی توضیح میدم. هدفم از این پست این بود که یک چالشی رو بذارم که خودم باهاش دست و پنجه نرم میکردم که جواب درست حسابی تو نت ازش نبود. میخوام تو پست بعد بگم تو اینطور مواقع چه کار میتونید کنید.
@ManiFoldsPython
User | metric | ts
mani | 50 | 2023-11-15
mani | 50 | 2023-11-14
negin | 20 | 2023-11-15
negin | 20 | 2023-11-14
abbas | 30 | 2023-11-13
حالا این یوزر هاتون تو دیتابیس شماره ۲ گروه شدن.
User | group
mani | 1
abbas | 1
negin | 2
میخواستم چیکار کنم؟
تو گرافانا میخواستم مجموع این متریک ها رو بر اساس هر گروه داشته باشم. یعنی ریزالت دو تا queryکه از دو تا دیتابیس میارن رو جوین بزنم.
مشکل چی بود؟
خوده join گرافانا خیلی خرابه. وقتی inner join میزدم با تایم سریز فقط ۱ دیتا رو جوین میزد. اینطوری فقط مثلا ماله روزه ۱۵ نوامبر رو داشتم از هر گروه. یعنی:
Expected output (خروجی مورد نظرم)
Group | metric | ts
1 | 70 | 2023-11-15
1 | 70 | 2023-11-14
1 | 0 | 2023-11-13
2 | 0 | 2023-11-15
2 | 0 | 2023-11-14
2 | 30 | 2023-11-13
CURRENT output (خروجی که میگرفتم)
group | metric | ts
1 | 70 | 2023-11-15
2 | 0 | 2023-11-15
چرا؟ خدا میدونه چرا! transformer های گرافانا واقعا باگ دارن و درست حسابی کار نمیکنن.
اقا بگذریم, حل این صورت سوالو تو پست بعدی توضیح میدم. هدفم از این پست این بود که یک چالشی رو بذارم که خودم باهاش دست و پنجه نرم میکردم که جواب درست حسابی تو نت ازش نبود. میخوام تو پست بعد بگم تو اینطور مواقع چه کار میتونید کنید.
@ManiFoldsPython
👍4
خب بریم باهم قدم به قدم مشکلو حل کنیم. اولا دیدین چه قشنگ توضیح دادم؟ اولین مشکل همینه. طریقه مطرح کردن یک issue. هرچقدر با حوصله تر یک سوالی رو بپرسین احتمال اینکه جواب بهتری بگیرین خیلی بیشتره. ببینید این سوال من مشکل xy ندارم. نیومدم بگم چطور تو grafana از دو دیتابیس inner join بزنم. اومدم کل مشکلمو توضیح دادم بعد نوشتم چیکار کردم که حالا خوردم به مشکل. فرهنگ مطرح کردن issue خیلی مهمه. تو پست زیر بیشتر توضیح دادم:
https://news.1rj.ru/str/manifoldspython/642
۱. اولین کاری که میکنم اینه که میام از AI میپرسم. دوستان بدون تعارف من کلی ai تست کردم و واقعا از نظر ضریب هوشی و درست جواب دادن هیچکدوم به جز gpt 4 قابل استفاده نیستن. ارزش داره واقعا ۲۰ دلاره پرمیومشو بگیرین خودتونو راحت میکنید. بیشتر مواقع بهتون درست جواب میده. بهترین ۲۰ دلاریه که تو عمرم دارم خرج میکنم :)). خب از gpt 4 پرسیدم. اصول پرسیدن از AI اینطوریه که شما یک سولوشن ازش نمیپرسید. کل صورت سوالو بهش بدید و ازش ۱۰ تا راهکار مختلف بخواین. اینطوری کلی بهتون راهکار میده و آپشن هاتون بیشتر میشه. بعد شروع کنید به چالش کشیدن این راهکار ها. میبینید که بعضیاش اصلا technically ممکن نیست یا اشتباهه. و خودش اعتراف میکنه. در نهایت به چند تا سولوشنی که واقعا کار میکنه میرسید.
https://chat.openai.com/share/b26aae8d-31ec-4fd1-bbc4-e084a52e09dc
مثلا راهکاری که gpt داد بهم این بود که بیا تو application layer اینا رو تو پایتون باهم join بزن. یا اینکه بیا از postgresql extension هایی استفاده کن که دو تا دیتابیسو بهم وصل میکنن و یک تیبل materialized بنویس. راهکار نسبتا کثیفیه 😁 خوشم نیومد. بریم مرحله ۲ ام.
۲. گوگل کنید. ببینید کسی ایا مشکل شما رو داره یا نه (جواب هلو برو تو گلو). کلمات کلیدی رو گوگل کنید همیشه. که تو این کیس میشه inner join 2 database grafana transformer. استک اورفلو یا کامینیتی های مختلف. قشنگ اینو سرچ کنید میبینید تو community کلی ایشو مطرح کردن که همش همینه.
https://community.grafana.com/t/inner-join-transform-in-mixed-data-source-pick-only-one-joined-row/86290/5
اگه مرحله ۱ و ۲ جواب نگرفتین احتمالا مشکل سختیه که دارین باهاش دست و پنجه نرم میکنید.
۳. یک scope بیاین عقب تر. برین مقاله بخونید راجب transformer های گرافانا. تو مدیوم همیشه پر مقالست. بهتون آموزش میده که یوزکیسشون چیه. ممکنه یک transformer دیگه باشه که حل کنه مشکلتون رو. خلاصه به جای اینکه فقط رو اون راه حل مانور برین سعی کنید بیس دانشتون رو بیشتر کنید که بتونید راهکار از خودتون تولید کنید.
۴. حالا که تسلط بیشتری دارین رو گرافانا یکم باهاش ور برین. روش های مختلف رو تست کنید. brain storm کنید. ببینید راهی وجود داره اصلا یک outer join رو تبدیل به inner join کرد؟
من چطور حل کردم؟
به جای اینکه از inner join استفاده کنم, از outer join استفاده کردم. منتهی تو query دوم یک مقدار dummy اضافه کردم مثلا True. پس شد یک عالمه ریزالت که outer join شدن و بعضیاش اون مقدار dummy True رو دارن. بعد query کردم اون و اون گروه هایی که میخواستم رو ازشون فیلتر کردم (به شرطی که اون مقدار dummy من none نباشه)
پس با دو تا transformer اینکارو کردم:
-> out join 2 queries
-> data filter transformer (dummy value != null)
اینطوری درواقع عملکرد inner join رو با outer join ساختم! به این شکله که شما میتونید یک مشکلو حل کنید. 🙂
تو قدم ۵ ام اگه ۴ قدم بالا جواب نداد حالا بیاین از بقیه بپرسید. ببینید ایا اونا راهکاری میدن که سوالتون حل شه؟
@ManiFoldsPython
https://news.1rj.ru/str/manifoldspython/642
۱. اولین کاری که میکنم اینه که میام از AI میپرسم. دوستان بدون تعارف من کلی ai تست کردم و واقعا از نظر ضریب هوشی و درست جواب دادن هیچکدوم به جز gpt 4 قابل استفاده نیستن. ارزش داره واقعا ۲۰ دلاره پرمیومشو بگیرین خودتونو راحت میکنید. بیشتر مواقع بهتون درست جواب میده. بهترین ۲۰ دلاریه که تو عمرم دارم خرج میکنم :)). خب از gpt 4 پرسیدم. اصول پرسیدن از AI اینطوریه که شما یک سولوشن ازش نمیپرسید. کل صورت سوالو بهش بدید و ازش ۱۰ تا راهکار مختلف بخواین. اینطوری کلی بهتون راهکار میده و آپشن هاتون بیشتر میشه. بعد شروع کنید به چالش کشیدن این راهکار ها. میبینید که بعضیاش اصلا technically ممکن نیست یا اشتباهه. و خودش اعتراف میکنه. در نهایت به چند تا سولوشنی که واقعا کار میکنه میرسید.
https://chat.openai.com/share/b26aae8d-31ec-4fd1-bbc4-e084a52e09dc
مثلا راهکاری که gpt داد بهم این بود که بیا تو application layer اینا رو تو پایتون باهم join بزن. یا اینکه بیا از postgresql extension هایی استفاده کن که دو تا دیتابیسو بهم وصل میکنن و یک تیبل materialized بنویس. راهکار نسبتا کثیفیه 😁 خوشم نیومد. بریم مرحله ۲ ام.
۲. گوگل کنید. ببینید کسی ایا مشکل شما رو داره یا نه (جواب هلو برو تو گلو). کلمات کلیدی رو گوگل کنید همیشه. که تو این کیس میشه inner join 2 database grafana transformer. استک اورفلو یا کامینیتی های مختلف. قشنگ اینو سرچ کنید میبینید تو community کلی ایشو مطرح کردن که همش همینه.
https://community.grafana.com/t/inner-join-transform-in-mixed-data-source-pick-only-one-joined-row/86290/5
اگه مرحله ۱ و ۲ جواب نگرفتین احتمالا مشکل سختیه که دارین باهاش دست و پنجه نرم میکنید.
۳. یک scope بیاین عقب تر. برین مقاله بخونید راجب transformer های گرافانا. تو مدیوم همیشه پر مقالست. بهتون آموزش میده که یوزکیسشون چیه. ممکنه یک transformer دیگه باشه که حل کنه مشکلتون رو. خلاصه به جای اینکه فقط رو اون راه حل مانور برین سعی کنید بیس دانشتون رو بیشتر کنید که بتونید راهکار از خودتون تولید کنید.
۴. حالا که تسلط بیشتری دارین رو گرافانا یکم باهاش ور برین. روش های مختلف رو تست کنید. brain storm کنید. ببینید راهی وجود داره اصلا یک outer join رو تبدیل به inner join کرد؟
من چطور حل کردم؟
به جای اینکه از inner join استفاده کنم, از outer join استفاده کردم. منتهی تو query دوم یک مقدار dummy اضافه کردم مثلا True. پس شد یک عالمه ریزالت که outer join شدن و بعضیاش اون مقدار dummy True رو دارن. بعد query کردم اون و اون گروه هایی که میخواستم رو ازشون فیلتر کردم (به شرطی که اون مقدار dummy من none نباشه)
پس با دو تا transformer اینکارو کردم:
-> out join 2 queries
-> data filter transformer (dummy value != null)
اینطوری درواقع عملکرد inner join رو با outer join ساختم! به این شکله که شما میتونید یک مشکلو حل کنید. 🙂
تو قدم ۵ ام اگه ۴ قدم بالا جواب نداد حالا بیاین از بقیه بپرسید. ببینید ایا اونا راهکاری میدن که سوالتون حل شه؟
@ManiFoldsPython
👍9
من اکثر مشکلاتم تو همون مرحله ۱ یا ۲ برطرف میشه. و اصلا به ۳ و ۴و ۵ نمیرسه. توصیه میکنم بهتون این دو پستو بخونید واقعا متحول میکنه نحوه research و حل مشکلاتتون رو. شاید یکم مثال سخت بود ولی ببخشید مثال بهتری پیدا نکردم که مرحله ۱ و ۲ حلش نکنه.
@ManiFoldsPython
@ManiFoldsPython
❤4👍3
#آف_تاپیک
چند روز پیش نسخه جدید جنگ های صلیبی اومده, چه گرافیکی داره 👌 نیم ساعت بازی کردم واقعا حس و حال نسخه های قبلیو داشت. یک دوبله کم داره :))
@ManiFoldsPython
چند روز پیش نسخه جدید جنگ های صلیبی اومده, چه گرافیکی داره 👌 نیم ساعت بازی کردم واقعا حس و حال نسخه های قبلیو داشت. یک دوبله کم داره :))
@ManiFoldsPython
🔥14❤🔥6👍3
یک مقاله خیلی مفید برای درک Database Management Patterns در ماکروسرویس
https://medium.com/design-microservices-architecture-with-patterns/microservices-database-management-patterns-and-principles-9121e25619f1
@ManiFoldsPython
https://medium.com/design-microservices-architecture-with-patterns/microservices-database-management-patterns-and-principles-9121e25619f1
@ManiFoldsPython
Medium
Microservices Database Management Patterns and Principles
In this article, we are going to discuss Microservices Data Management in order to understand data considerations for microservices. As you…
👍4
یک سوال نسبتا راحت دارم ازتون, یک نکته ای که باید خیلی بهش دقت کنید موقع کار کردن با fastapi
از ما خواسته شده یک روتری بنویسیم که به ساده ترین شکل ممکن بدون اینکه مشکلی برای اپلیکیشنمون به وجود بیاره به یک اپلیکیشنی یک درخواست بزنه و دیتاشو برگردونه.
ایراد کد رو پیدا کنید.
راهنمایی: کاری با اینکه تو روتر بهتره مستقیم درخواست نزنیم ندارم یا مثلا ارور هندلینگ خود درخواست. هدف این سوال یک مشکل خیلی بزرگ تره که کل اپلیکیشن رو تحت شعاع قرار میده.
@ManiFoldsPython
از ما خواسته شده یک روتری بنویسیم که به ساده ترین شکل ممکن بدون اینکه مشکلی برای اپلیکیشنمون به وجود بیاره به یک اپلیکیشنی یک درخواست بزنه و دیتاشو برگردونه.
from fastapi import FastAPI
import requests
app = FastAPI()
@app.post("/crawl")
async def crawl_website(job_data: str):
return requests.get("https://mywebsite.com")
ایراد کد رو پیدا کنید.
راهنمایی: کاری با اینکه تو روتر بهتره مستقیم درخواست نزنیم ندارم یا مثلا ارور هندلینگ خود درخواست. هدف این سوال یک مشکل خیلی بزرگ تره که کل اپلیکیشن رو تحت شعاع قرار میده.
@ManiFoldsPython
👍10
تو کامنتا خیلی سریع به جواب اشاره کردن, وقتی دارین با فست یا هر asgi دیگه ای کار میکنید باید حواستون باشه, که به هیچ وجه هیچ جایی از اپلیکیشنتون تسک IO باند نداشته باشین که بلاک کنه main thread تون رو.
چرا؟چون بای دیفالت روتر async رو ترد اصلی process ران میشه, بنابراین اگه بلاک شه هم ترد اصلیتون بلاک میشه هم process یعنی تو اون پروسه و ورکر دیگه نمیتونید هیچ درخواستی رو return کنید.
راه حلش چیه؟
https://asgi.readthedocs.io/en/latest/introduction.html#wsgi-compatibility
تو fastapi شما میتونید همچنان کدتون رو با sync هم ران کنید. اگه روترتون io bound داره که sync عه و بلاک میکنه میتونید روترتون رو sync کنید. اتفاقی که اون پشت میفته اینه که fastapi میاد درخواست شما رو تو یک ترد جدا هندل میکنه. داخل asgiref هم نمونه مشابهش هست, که sync_to_async هست. خودتونم میتونید مشابهشو بنویسید و تو executor thread ران کنید کنار بقیه کد های async تون. میتونید از لایبری سباستین asyncer هم استفاده کنید که داخلش از AnyIO استفاده کرده که typingتون رو خراب نمیکنه و فیچر های خوبی داره:
https://github.com/tiangolo/asyncer
اما یادتون نره که پرفومنسی تو تسک های IO همیشه async بهتره از thread چون کم هزینه تره, کانتکس سوییچ نداره, استفاده کامل تری از ریسورستون میکنید و البته cpu bound هم بخاطر وجود GIL فعلا تو پایتون تفاوتی ایجاد نمیکنه. نکته ای که باید دقت کنید بهش لایبری که استفاده میکنید بهتره در درجه اول native async باشه یعنی واقعا async باشه و رو یک ترد non blocking کارشو انجام بده. اگه لایبری mature یا خوبی پیدا نکردین در درجه دوم میتونید از همین تکنیکی که گفتم استفاده کنید.
میتونید مقاله زیر رو بخونید که یکم بیشتر با ساختار و معماری asgi و wsgi آشنا شین:
https://medium.com/p/807158ed1d4c
@ManiFoldsPython
چرا؟چون بای دیفالت روتر async رو ترد اصلی process ران میشه, بنابراین اگه بلاک شه هم ترد اصلیتون بلاک میشه هم process یعنی تو اون پروسه و ورکر دیگه نمیتونید هیچ درخواستی رو return کنید.
راه حلش چیه؟
https://asgi.readthedocs.io/en/latest/introduction.html#wsgi-compatibility
تو fastapi شما میتونید همچنان کدتون رو با sync هم ران کنید. اگه روترتون io bound داره که sync عه و بلاک میکنه میتونید روترتون رو sync کنید. اتفاقی که اون پشت میفته اینه که fastapi میاد درخواست شما رو تو یک ترد جدا هندل میکنه. داخل asgiref هم نمونه مشابهش هست, که sync_to_async هست. خودتونم میتونید مشابهشو بنویسید و تو executor thread ران کنید کنار بقیه کد های async تون. میتونید از لایبری سباستین asyncer هم استفاده کنید که داخلش از AnyIO استفاده کرده که typingتون رو خراب نمیکنه و فیچر های خوبی داره:
https://github.com/tiangolo/asyncer
اما یادتون نره که پرفومنسی تو تسک های IO همیشه async بهتره از thread چون کم هزینه تره, کانتکس سوییچ نداره, استفاده کامل تری از ریسورستون میکنید و البته cpu bound هم بخاطر وجود GIL فعلا تو پایتون تفاوتی ایجاد نمیکنه. نکته ای که باید دقت کنید بهش لایبری که استفاده میکنید بهتره در درجه اول native async باشه یعنی واقعا async باشه و رو یک ترد non blocking کارشو انجام بده. اگه لایبری mature یا خوبی پیدا نکردین در درجه دوم میتونید از همین تکنیکی که گفتم استفاده کنید.
میتونید مقاله زیر رو بخونید که یکم بیشتر با ساختار و معماری asgi و wsgi آشنا شین:
https://medium.com/p/807158ed1d4c
@ManiFoldsPython
GitHub
GitHub - fastapi/asyncer: Asyncer, async and await, focused on developer experience.
Asyncer, async and await, focused on developer experience. - fastapi/asyncer
👍9
یکی از مشکلاتی که اکثر برنامه نویسا دارن تو مدیریت دپندسیه! حالا لایبری جدید یا external service که قراره ازش استفاده کنن.
مشکل چیه؟برنامه نویس میاد یک توتوریال از اون دپندسی جدید میبینه با خودش میگه ایول چه باحاله و تصمیم میگیره اضافش کنه! و این بد ترین کاریه که میتونید بکنید. قراره وابسته بشین به چیزی. فکر کنید این وابستگی از جنس عاطفیه. همینقدر باید باهاش حساس برخورد کنید :))
خب چیکار کنیم؟
اولین کاری که میکنید اینه که توتوریالشو میریزین دور. میرین داکیومنتشو خوب میخونید. متوجه میشین limitation هاش چیه. متوجه میشین سیستمش چطور کار میکنه. یک داکیومنت مختصر شده ازش میسازین و cons pro هاشو در میارین. مثلا یعنی چی؟
فکر کنید مثلا دارین یک external system اضافه میکنید. مثلا یک CRM. خب اول باید چک کنید چه limitation هایی داره؟ایا api داره؟ایا web hook داره؟ ایا share state به وجود میاد؟ هزینش چقدره؟ alternative هاش چیه؟ چطور اصلا کار میکنه؟ اصلا خوب کار میکنه؟!
بعد تو درجه دوم میرین گوگل میکنید و مقاله هایی پیدا میکنید که نقاط ضعفشو بیشتر گفته. ممکنه همه نقاط ضعفش تو داکیومنتش نباشه و یکم پنهان باشه. میبینید بقیه چه چالش هایی داشتن موقع کار کردن باهاش.
در نهایت بین آپشن ها یک لیست pro cons میسازین و تصمیم گیری نهایی رو میکنید.
اگه این کارو نکنیم چه اتفاقی میفته؟
بذارین مثال بگم. مثلا شما ندیدین این api limit احمقانه ای داره. بعد کلی روش کد میزنید. یک روزی سایز بیزنستون بزرگ تر میشه و حالا هرچی کد رو زدین باید undo کنید.
همیشه تو انتخاب دپندسی هاتون خیلی فکر کنید! من بعضا دیدم بچه ها میگن <کارفرما اینطوری گفته> یا <مدیر تیم با این بیشتر حال کرده>. اینا دلایل منطقی اصلا نیستن برای انتخاب یک دپندسی.
@ManiFoldsPython
مشکل چیه؟برنامه نویس میاد یک توتوریال از اون دپندسی جدید میبینه با خودش میگه ایول چه باحاله و تصمیم میگیره اضافش کنه! و این بد ترین کاریه که میتونید بکنید. قراره وابسته بشین به چیزی. فکر کنید این وابستگی از جنس عاطفیه. همینقدر باید باهاش حساس برخورد کنید :))
خب چیکار کنیم؟
اولین کاری که میکنید اینه که توتوریالشو میریزین دور. میرین داکیومنتشو خوب میخونید. متوجه میشین limitation هاش چیه. متوجه میشین سیستمش چطور کار میکنه. یک داکیومنت مختصر شده ازش میسازین و cons pro هاشو در میارین. مثلا یعنی چی؟
فکر کنید مثلا دارین یک external system اضافه میکنید. مثلا یک CRM. خب اول باید چک کنید چه limitation هایی داره؟ایا api داره؟ایا web hook داره؟ ایا share state به وجود میاد؟ هزینش چقدره؟ alternative هاش چیه؟ چطور اصلا کار میکنه؟ اصلا خوب کار میکنه؟!
بعد تو درجه دوم میرین گوگل میکنید و مقاله هایی پیدا میکنید که نقاط ضعفشو بیشتر گفته. ممکنه همه نقاط ضعفش تو داکیومنتش نباشه و یکم پنهان باشه. میبینید بقیه چه چالش هایی داشتن موقع کار کردن باهاش.
در نهایت بین آپشن ها یک لیست pro cons میسازین و تصمیم گیری نهایی رو میکنید.
اگه این کارو نکنیم چه اتفاقی میفته؟
بذارین مثال بگم. مثلا شما ندیدین این api limit احمقانه ای داره. بعد کلی روش کد میزنید. یک روزی سایز بیزنستون بزرگ تر میشه و حالا هرچی کد رو زدین باید undo کنید.
همیشه تو انتخاب دپندسی هاتون خیلی فکر کنید! من بعضا دیدم بچه ها میگن <کارفرما اینطوری گفته> یا <مدیر تیم با این بیشتر حال کرده>. اینا دلایل منطقی اصلا نیستن برای انتخاب یک دپندسی.
@ManiFoldsPython
👍12❤3🔥2
داشتم یکم تو گیتهاب میچرخیدم که خوردم به این:
https://github.com/novuhq/novu
Novu provides a unified API that makes it simple to send notifications through multiple channels, including In-App, Push, Email, SMS, and Chat. With Novu, you can create custom workflows and define conditions for each channel, ensuring that your notifications are delivered in the most effective way possible.
از بیرون بنظر میاد خیلی باحال باشه. عجب چیز تمیزیه. یک abstraction هم گذاشته برای کار با provider های مختلف مثل firebase و ... .با این فایربیس فرانت کارا چه کارایی که نمیتونن کنند 😁
@ManiFoldsPython
https://github.com/novuhq/novu
Novu provides a unified API that makes it simple to send notifications through multiple channels, including In-App, Push, Email, SMS, and Chat. With Novu, you can create custom workflows and define conditions for each channel, ensuring that your notifications are delivered in the most effective way possible.
از بیرون بنظر میاد خیلی باحال باشه. عجب چیز تمیزیه. یک abstraction هم گذاشته برای کار با provider های مختلف مثل firebase و ... .با این فایربیس فرانت کارا چه کارایی که نمیتونن کنند 😁
@ManiFoldsPython
GitHub
GitHub - novuhq/novu: The open-source notification Inbox infrastructure. E-mail, SMS, Push and Slack Integrations.
The open-source notification Inbox infrastructure. E-mail, SMS, Push and Slack Integrations. - novuhq/novu
👍7🔥3
یک سوال نسبتا ساده در بحث Typing پایتون, به شما این فانکشن رو دادن که بر اساس یک کاندیشن n تا آیتم اول رو میگیره. چیزی شبیه first_true لایبری more itertools ولی با این تفاوت که به جای first, در واقع n تای اول رو میخوایم.
کاری به پرفومنس فانکشن ندارم ولی بنظرتون این فانکشن چطوری میتونه signature اش بازنویسی شه که بهترین تایپینگ ممکن رو داشته باشه؟ )قطعا signature اش همین الان کلی ایراد داره)
@ManiFoldsPython
کاری به پرفومنس فانکشن ندارم ولی بنظرتون این فانکشن چطوری میتونه signature اش بازنویسی شه که بهترین تایپینگ ممکن رو داشته باشه؟ )قطعا signature اش همین الان کلی ایراد داره)
def get_first_x(x, seq: Sequence, condition: Callable):
result = []
for obj in iterables:
if condition(obj) and len(result) < x:
result.append(x)
return result
@ManiFoldsPython
🤔4👍3
سید تو کامنت جوابشو فرستاد (خیلی سریع)
نکته سوال چیه؟
اولا استفاده به جا از TypeVar. که درواقع باعث شد بتونیم موقع نوشتن کاندیشن بگیم اقا قراره این چیزی که توش iterate میکنیم رو بدیم به کاندیشن نه بیشتر. و بهمون باید bool value برگردونه.
نکته دوم: استفاده از Iterable به جای sequence . چرا ؟چون ما صرفا iterate کردیم. همیشه تو ورودی تاپینگتون سعی کنید خیلی felixable باشین. همیشه سعی کنید چیزیو تو تایپینگتون بذارین به عنوان ورودی که بیشتر range اینپوت ممکنه رو اعمال کنه تا reusablity اون فانکشنتون به شدت زیاد شه
نکته سوم:برگردوندن لیست. میتونست تو return signature بذاره Iterable یا Sequence ولی درواقع لیسته. همیشه موقع خروجی دادن تایپینگتون به شدت دقیق باشین وگرنه کدتون خیلی باگ خواهد داشت.
نتیجش میشه اینکه ادیتورتون بهتون inline error میده و تایپینگ میده موقع استفاده از این تابع.
@ManiFoldsPython
T = TypeVar('T')
def get_first_x(x: int, iterable: Iterable[T], condition: Callable[[T], bool]) -> list[T]:
نکته سوال چیه؟
اولا استفاده به جا از TypeVar. که درواقع باعث شد بتونیم موقع نوشتن کاندیشن بگیم اقا قراره این چیزی که توش iterate میکنیم رو بدیم به کاندیشن نه بیشتر. و بهمون باید bool value برگردونه.
نکته دوم: استفاده از Iterable به جای sequence . چرا ؟چون ما صرفا iterate کردیم. همیشه تو ورودی تاپینگتون سعی کنید خیلی felixable باشین. همیشه سعی کنید چیزیو تو تایپینگتون بذارین به عنوان ورودی که بیشتر range اینپوت ممکنه رو اعمال کنه تا reusablity اون فانکشنتون به شدت زیاد شه
نکته سوم:برگردوندن لیست. میتونست تو return signature بذاره Iterable یا Sequence ولی درواقع لیسته. همیشه موقع خروجی دادن تایپینگتون به شدت دقیق باشین وگرنه کدتون خیلی باگ خواهد داشت.
نتیجش میشه اینکه ادیتورتون بهتون inline error میده و تایپینگ میده موقع استفاده از این تابع.
@ManiFoldsPython
👍11🤯1
Forwarded from DevTwitter | توییت برنامه نویسی
اسلک یه هفته تیم شو تعطیل کرده که برن یاد بگیرن و با مهارت بشن
زیبا نیست؟
https://www.hrgrapevine.com/content/article/2023-10-24-slack-announces-radical-week-long-shutdown-due-to-an-internal-skills-crisis
@DevTwitter | <Mahdi/>
زیبا نیست؟
https://www.hrgrapevine.com/content/article/2023-10-24-slack-announces-radical-week-long-shutdown-due-to-an-internal-skills-crisis
@DevTwitter | <Mahdi/>
👍18👎2
Forwarded from CodeNaline | کدنالین
با مارک هماهنگ شد برای ۲ هفته دیگه :). اما چون تو این دو هفته بیکار نباشیم قراره یک اپیزود مشترک با مانی و بابی کلاود درباره مسیر رشد بکاند دولوپر داشته باشیم یک شنبه :). سوالاتتون در این مورد داخل کامنت ها همین پست لطفا بگید ❤️.
🤩11❤6👍6