❤15🔥5🐳2
RandRng
Naser Abdollahi – Nasseria
نمیدونم چرا ولی صبح به محض از خواب بیدار شدن، آهنگ ناصریا، ناصر عبداللهی عزیز توی مغزم بود تا اینکه دیگه نشد مقاومت کنم.
نکته جالبش اینکه، من این آهنگ رو فقط ۱ بار قبل از این گوش داده بودم.
توی آهنگهای ناصرعبدالهی، بسیار آهنگ منو ببخش رو دوست دارم، برای همین اون رو هم فرستادم
نکته جالبش اینکه، من این آهنگ رو فقط ۱ بار قبل از این گوش داده بودم.
توی آهنگهای ناصرعبدالهی، بسیار آهنگ منو ببخش رو دوست دارم، برای همین اون رو هم فرستادم
❤16👍6😐2
از شرکت استعفا دادم،
همکاری که تسکها و سرورها و پروژهها و .... رو بهش تحویل میدم میگه من تا آخر سال بیشتر نیستم نمیشه بمونی تا آخر سال ؟
بهش میگم؛ خیالت راحت من اینارو جوری اتوماتیک کردم که تا ۲ سال دیگه هیچ مشکلی پیش نیاد.
یاد جمله اون خدابیامرز افتادم و اینکه؛ چه کشوری چید که ۴۷ سال طول کشید تا ملت فهمید چه گنجی رو از دست داد.
البته ما که جونیوری بیش نیستیم ولی خب.
همکاری که تسکها و سرورها و پروژهها و .... رو بهش تحویل میدم میگه من تا آخر سال بیشتر نیستم نمیشه بمونی تا آخر سال ؟
بهش میگم؛ خیالت راحت من اینارو جوری اتوماتیک کردم که تا ۲ سال دیگه هیچ مشکلی پیش نیاد.
یاد جمله اون خدابیامرز افتادم و اینکه؛ چه کشوری چید که ۴۷ سال طول کشید تا ملت فهمید چه گنجی رو از دست داد.
البته ما که جونیوری بیش نیستیم ولی خب.
👍80❤22😁11😐4🍾1
غروب سادهترین درآمد ۱۰ سال اخیرم رو داشتم
طوری که فکر کنم دقیقهای از رونالدو/مسی هم بیشتر درآمد داشتم برای همین یک تسک (اصن روم نمیشه بگم پروژه بهش😂)
تسکی که از نظر کاری، ۵ دقیقه زمان برد و اینطوری شد که من عاشق حرکت شرکتها به سمت Vibe coding شدم.
لطفاً ادامه بدید، دیباگ این پروژهها برای من لذت بخش هست، چون پولش خوبه 😁
طوری که فکر کنم دقیقهای از رونالدو/مسی هم بیشتر درآمد داشتم برای همین یک تسک (اصن روم نمیشه بگم پروژه بهش😂)
تسکی که از نظر کاری، ۵ دقیقه زمان برد و اینطوری شد که من عاشق حرکت شرکتها به سمت Vibe coding شدم.
لطفاً ادامه بدید، دیباگ این پروژهها برای من لذت بخش هست، چون پولش خوبه 😁
😁46👍10❤5
یکی از بیشترین ابزارهایی که بهش نیاز دارم!
اگر دارید، با Rust یا Go کد میزنید یک تولز بنویسید که یک کامند که وارد میکنم مسیری که بهش میدم رو روی یک پورت خاص فایلهاش رو بهم بده
مثلاً توی پایتون اینو داریم:
که پوشهای که داخلش این دستور اجرا بشه رو روی ایپی و پورت ۸۰۸۰ در اختیار دستگاهای روی اون شبکه میذاره.
حالا چیزی که کم داره؛
هست، که کلاینت مجبور به نصب اینا نباشه!
بله با NextCloud, ... هم آشنا هستم ولی مزیت تو سادگی هست.
یک ابزاری قبلاً نوشته بودم؛ ولی خیلی قدیمی شده و فرمتهای جدید رو خوب پشتیبانی نمیکنه.
اگر کسی همچین کدی رو زد باهامون به اشتراک بذاره گیتهابش رو
اگر دارید، با Rust یا Go کد میزنید یک تولز بنویسید که یک کامند که وارد میکنم مسیری که بهش میدم رو روی یک پورت خاص فایلهاش رو بهم بده
مثلاً توی پایتون اینو داریم:
python3 -m http.server 8080که پوشهای که داخلش این دستور اجرا بشه رو روی ایپی و پورت ۸۰۸۰ در اختیار دستگاهای روی اون شبکه میذاره.
حالا چیزی که کم داره؛
VideoPlayer, Image view, music player هست، که کلاینت مجبور به نصب اینا نباشه!
بله با NextCloud, ... هم آشنا هستم ولی مزیت تو سادگی هست.
یک ابزاری قبلاً نوشته بودم؛ ولی خیلی قدیمی شده و فرمتهای جدید رو خوب پشتیبانی نمیکنه.
اگر کسی همچین کدی رو زد باهامون به اشتراک بذاره گیتهابش رو
👍32❤3🗿1
RandRng
وقتی تو عمرت، بیشتر از hello world از زبان برنامهنویسی کار نکشیدی! #چرندیات
من کلی کد پایتون دارم که طرف از دنیای Java اومده و شروع کرده بکند پایتون زده.
مفاهیم رو خیلی خوب بلد بوده (از تلاشش توی کد مشخص هست)
اما کد
استانداردهای رعایت شده توی کد هیچکدوم پایتون نیست؛ همین اجازه حل مشکلات و توسعه بیشتر رو نمیده.
خود کد
بدترین حالتش هم یک شرکت بود که برای یکی از استارتاپهاش؛ این اتفاق افتاده بود و بعد از ۲ سال توسعه توی اولین روز لانچ پروژه سرورهاشون
تنها راهکار؛ بازنویسی کامل کد. چون هیچکس از کد سر در نمیاورد والبته هیچ جایی از کد هم استاندارد نبود (شخصاً ۱ هفته وقت گذاشتم کد رو خوندم)
پینوشت:
ازین به بعد یک هشتگ جدید به اسم چرندیات خواهیم داشت.
متنهای اشتباه لینکدینی که میذارن رو دور هم میترکونیم.
مفاهیم رو خیلی خوب بلد بوده (از تلاشش توی کد مشخص هست)
اما کد
shit خالص هست؛ قشنگ میشه برداشت بجاش 💩گذاشت.استانداردهای رعایت شده توی کد هیچکدوم پایتون نیست؛ همین اجازه حل مشکلات و توسعه بیشتر رو نمیده.
خود کد
optimize نیست؛ چون اون شخص دیدی نداشته که کدوم حالت پیادهسازی توی پایتون سریعتر هست و از همون تکنیکهای Java استفاده کرده برای توسعه که خب لزوماً توی پایتون optimize نیست.بدترین حالتش هم یک شرکت بود که برای یکی از استارتاپهاش؛ این اتفاق افتاده بود و بعد از ۲ سال توسعه توی اولین روز لانچ پروژه سرورهاشون
down شده بود؛ تعداد یوزرهای دیتابیس به ۱ میلیون که میرسید بعضی درخواستها بیش از ۱ دقیقه طول میکشید تا دیتا بگیره و tcp close میخورد. (تمام مواردی که گفتم با پروفایلینگ بدست اومد) تنها راهکار؛ بازنویسی کامل کد. چون هیچکس از کد سر در نمیاورد والبته هیچ جایی از کد هم استاندارد نبود (شخصاً ۱ هفته وقت گذاشتم کد رو خوندم)
پینوشت:
ازین به بعد یک هشتگ جدید به اسم چرندیات خواهیم داشت.
متنهای اشتباه لینکدینی که میذارن رو دور هم میترکونیم.
👍70❤3😁3🗿2
RandRng
یک اتفاق جالب امروز برام افتاد؛ یک هم تیمی جدید داریم سطح بالایی هم داره، امروز برای اولین بار به repo های من دسترسی گرفت. من دوتا پروژه بکند دارم؛ یکیش Python هست، اون یکی Rust رفته بود پروژه Python رو خونده بود اومد گفت چرا هر کدوم رو یک فایل نمیکنی؟…
خیلی پستهای مختلف میبینم که میگن؛ لایه logic, data, view, .... رو از هم جدا کنید و ازین حرفا (طرف ۲ هفتس کلین کد خونده) که نکته خیلی خوبی هست اما نه همه جا
و خیلی وقتا هم کد دستم اومده که دیدم؛ طرف زده
میرم کد رو میخونم میبینم ۱ خط کد نوشته یک return ساده.
این مدل جداسازی مزخرفترین کاری هست که میتونید انجام بدید.
نکتهاش توی کتاب بالا هم هست؛
دولوپر بعدی، بیچاره میشه تا ذهنش رو دور این چیزا سر و سامون بده و متوجه بشه فایلها و ... چطوری به هم ارتباط داره
همون کار رو میکنه؛ ۱۰۰ برابر خواناتر و تمیزتر هست و در صورت رشد کردن کدش؛ توی refactor جدا خواهد شد.
بعضی وقتا آدما برای
مثال دیگر:
این رو زیاد میبینم؛
بعد میرم توی مسیری که گفته شده:
ببین ذهن من چقدر باید اذیت بشه که توی توسعه کدهای بعدی یادش باشه که اینکار رو برای یک strip ساده انجام بده.
حالا فرض کنید یک پروژه ۱ میلیون خط کدی؛ اینطوری نوشته شده باشه!
بنظرتون این پروژه clean code هست یا shit code ؟!
یادتون نره؛ refactor پنالتی نیست، بلکه نشون میده شما به کد و پروژه زیر دستتون اهمیت میدید!
من ترجیح میدم
رو داشته باشم و وقتی این تمیز کاری دیتای ورودی بزرگتر شد اونوقت اون رو جدا کنم.
و خیلی وقتا هم کد دستم اومده که دیدم؛ طرف زده
get_repository بعد این رو گذاشته توی یک پوشه و فایل دیگه میرم کد رو میخونم میبینم ۱ خط کد نوشته یک return ساده.
این مدل جداسازی مزخرفترین کاری هست که میتونید انجام بدید.
نکتهاش توی کتاب بالا هم هست؛
دولوپر بعدی، بیچاره میشه تا ذهنش رو دور این چیزا سر و سامون بده و متوجه بشه فایلها و ... چطوری به هم ارتباط داره
repository= .....همون کار رو میکنه؛ ۱۰۰ برابر خواناتر و تمیزتر هست و در صورت رشد کردن کدش؛ توی refactor جدا خواهد شد.
بعضی وقتا آدما برای
clean code زدن، گند میزنند توی خوانایی و حتی clean بودن پروژه چرا چون clean code رو فقط در سطح یک اسکریپت بهش نگاه میکنند در سطح کل پروژه.مثال دیگر:
این رو زیاد میبینم؛
cleaned_text = preprocess(mytext) بعد میرم توی مسیری که گفته شده:
utils/preprocessing.py
def preprocess(text:str):
return text.strip()
ببین ذهن من چقدر باید اذیت بشه که توی توسعه کدهای بعدی یادش باشه که اینکار رو برای یک strip ساده انجام بده.
حالا فرض کنید یک پروژه ۱ میلیون خط کدی؛ اینطوری نوشته شده باشه!
بنظرتون این پروژه clean code هست یا shit code ؟!
یادتون نره؛ refactor پنالتی نیست، بلکه نشون میده شما به کد و پروژه زیر دستتون اهمیت میدید!
من ترجیح میدم
text = input.strip() رو داشته باشم و وقتی این تمیز کاری دیتای ورودی بزرگتر شد اونوقت اون رو جدا کنم.
❤8👍7
#موقت
وسط توضیح برق رفت
```python
```
from utils.preprocessing import preprocess
...
cleaned_text = preprocess(text)
...
این میزان کدی هست که باید برنامه نویس بعدی توی ذهنش نگهداره 👆
بجای :
text = input.strip()
حالا اینو ضربدر ۱۰۰ یا ۱,۰۰۰ کنید برای یک پروژه توی اسکیل استاندارد.
وسط توضیح برق رفت
utils/preprocessing.py:def preprocessing(text: str) :
return text.strip()
utils/__init__.py```python
```
from utils.preprocessing import preprocess
...
cleaned_text = preprocess(text)
...
این میزان کدی هست که باید برنامه نویس بعدی توی ذهنش نگهداره 👆
بجای :
text = input.strip()
حالا اینو ضربدر ۱۰۰ یا ۱,۰۰۰ کنید برای یک پروژه توی اسکیل استاندارد.
❤11👍7
نزدیک انتخاب رشتهاس گفتم اینو بگم:
اینکه که میگن
این ماهارو بیچاره کرده؛ من و چندتای دیگه که اطرافم دیدم توی تخصصهای مختلف.
البته من ازونا بودم که، یاد گرفتم کاری که میکنم رو دوس داشته باشم ولی خب.
حالا که روزای انتخاب رشتهاس، خواستم بگم که حواستون به این نکته هم باشه؛ ما چند نفر (من و دوستانی که گفتم) چون به کاری که میکنیم علاقه داریم خیلی به چشم درآمد بهش نگاه نمیکنیم؛ چرا ازش درآمد داریم و زندگی هامون رو میچرخونیم ولی برای همه ما پیش اومده که:
موقعیت بهتر مالی رو فدای یادگیری یا کاری با چالش بیشتر کردیم.
بنظرم باید اینطوری گفت که؛ کاری رو بکنید که ازش خوشتون میاد: اینطوری اصل نگاهتون بهش درآمدی هست.
کاری که دوست دارید رو بذارید برای اوقات فراغت و تفریح و ....
اینجوری هم ازش بیشتر لذت میبرید؛ هم درآمد بیشتر رو فدای علاقه و چالش نمیکنید.
اینکه که میگن
کاری رو بکن که دوس داری.
این ماهارو بیچاره کرده؛ من و چندتای دیگه که اطرافم دیدم توی تخصصهای مختلف.
البته من ازونا بودم که، یاد گرفتم کاری که میکنم رو دوس داشته باشم ولی خب.
حالا که روزای انتخاب رشتهاس، خواستم بگم که حواستون به این نکته هم باشه؛ ما چند نفر (من و دوستانی که گفتم) چون به کاری که میکنیم علاقه داریم خیلی به چشم درآمد بهش نگاه نمیکنیم؛ چرا ازش درآمد داریم و زندگی هامون رو میچرخونیم ولی برای همه ما پیش اومده که:
موقعیت بهتر مالی رو فدای یادگیری یا کاری با چالش بیشتر کردیم.
بنظرم باید اینطوری گفت که؛ کاری رو بکنید که ازش خوشتون میاد: اینطوری اصل نگاهتون بهش درآمدی هست.
کاری که دوست دارید رو بذارید برای اوقات فراغت و تفریح و ....
اینجوری هم ازش بیشتر لذت میبرید؛ هم درآمد بیشتر رو فدای علاقه و چالش نمیکنید.
👍62❤7😐2😁1
RandRng
غروب سادهترین درآمد ۱۰ سال اخیرم رو داشتم طوری که فکر کنم دقیقهای از رونالدو/مسی هم بیشتر درآمد داشتم برای همین یک تسک (اصن روم نمیشه بگم پروژه بهش😂) تسکی که از نظر کاری، ۵ دقیقه زمان برد و اینطوری شد که من عاشق حرکت شرکتها به سمت Vibe coding شدم. لطفاً…
آخ جون؛ من این تیم و دولوپرهاش رو فالو میکنم.
درآمد بعدیم جور شد 😁😁
درآمد بعدیم جور شد 😁😁
😁55
یک شعاری داده شد که یک نوع راهکار بود، مثل اینکه یک عده یک پرچمی دستشون بوده و نمیدونستند باهاش چکار باید بکنند، برای همین ملت ایران بهشون راهکار دادند.
این شعار بینالمللی شده؛ همکارم (ایرانی نیست) ازم پرسید موضوع این شعار چیه و چطور شروع شد؟
حال بحث کردن باهاش رو نداشتم؛ با متن بالا بهش توضیح دادم، خدایی چی میگفتم ؟
😁31🔥4🗿2❤1💯1
RandRng
آخ جون؛ من این تیم و دولوپرهاش رو فالو میکنم. درآمد بعدیم جور شد 😁😁
یک نفر پرسیده، یعنی شما مخالف توسعه کد با ai هستید ؟
نه قبلاً هم گفتم، software engineer بدون اینکه از ai استفاده کنه توی تیم ما خیلی کار سختی داره چون میشه سنگ جلوی پای باقی تیم.
اما، نحوه استفاده فرق داره؛ مثلاً من دقیقاً میدونم سرویس لاگین چطوری کار میکنه همه جزئیات مهمش رو هم میدونم مثلاً پسورد باید هش بشه و توی دیتابیس نوشته بشه الگوریتمهاس باید جزو الگوریتمهای مطرح باشه نه هر روش هش کردنی، حتماً باید salt رندم داشته باشه و به درستی توی دیتابیس نوشته بشه و ...
یک سری دیزاین پترن خاص برای پروژه دارم استفاده میکنم که حتماً باید رعایت بشه
وقتی میخوام از ai استفاده کنم براش مینویسم :
این مدل استفاده از
طراحی، درست بودن و امنیت سیستم با من
مثل یک سنیور که همه چیز رو به کارآموز میگه و فقط کد زدنش رو به عهده کارآموز میذاره.
نه قبلاً هم گفتم، software engineer بدون اینکه از ai استفاده کنه توی تیم ما خیلی کار سختی داره چون میشه سنگ جلوی پای باقی تیم.
اما، نحوه استفاده فرق داره؛ مثلاً من دقیقاً میدونم سرویس لاگین چطوری کار میکنه همه جزئیات مهمش رو هم میدونم مثلاً پسورد باید هش بشه و توی دیتابیس نوشته بشه الگوریتمهاس باید جزو الگوریتمهای مطرح باشه نه هر روش هش کردنی، حتماً باید salt رندم داشته باشه و به درستی توی دیتابیس نوشته بشه و ...
یک سری دیزاین پترن خاص برای پروژه دارم استفاده میکنم که حتماً باید رعایت بشه
وقتی میخوام از ai استفاده کنم براش مینویسم :
با رعایت این دیزاین پترنها:
اسم میبرم
کد مربوط به signup رو برام بزن که این فیلدها رو برای یوزر بگیره و داخل دیتابیس بنویسه :
اسم فیلدها و نوعشون
تویschemaدوتا فیلد برای پسورد در نظر بگیر فیلد دومconfirmباشه؛ یک unique_id برای یوزر بذار کهuuid7باشه و یوزر رو با این فیلد هندل کنیم.
پسورد باید نهایتاً با الگوریتم argon2 و یک salt رندوم برای هر یوزر هش بشه و داخل دیتابیس قرار بگیره!
یوزر حتماً باید ایمیل / موبایل خودش روverifyکنه وگرنه اکانت فعال نمیشه و کاری نمیتونه بکنه و ....
این مدل استفاده از
AI با اینکه من بهش بگم؛ یک کد signup توی پایتون بهم بده خیلی خیلی فرق داره.طراحی، درست بودن و امنیت سیستم با من
software engineer هست و فقط کد زدن رو دارم به AI میسپارم.مثل یک سنیور که همه چیز رو به کارآموز میگه و فقط کد زدنش رو به عهده کارآموز میذاره.
👍50❤12🔥2
از جابجایی بعضی سرویسها از Python به Rust و تغییر RestApi به gRPC چندماهی میگذره.
با همکارای مسئول
بخش زیادی ازین موارد به لطف Rust هست؛
مثلاً داکر ایمیج چندتا از سرویسهای مربوط به
فقط بکند همین سرویسها روی پایتون توی بهترین حالت ۳۹۰ مگ حجم هر ایمیج بود.
مصرف و لود شبکه به شدت پایین اومد؛ که خب بخش زیادی از اون به لطف gRPC بود.
تونستیم disk کمتری رو خریداری کنیم مثلاً: برای لاگ سرورهامون چون 99% سناریوها رو دیگه میدونستیم خطا از چی هست (به لطف Result, Option) و این باعث شد اطلاعات خیلی کمتری رو نیاز داشته باشیم لاگ بندازیم.
مصرف
موقع کار هم حداقل 8x مصرف رم Rust کمتر بود.
این درحالی هست که Rust تعداد Requestهای بیشتری رو هم جواب میداد.
توی
مسئله با سرویسها و سرورهای cloud هم همین هست؛ یک سری چیزها بدون هزینه هست اگر مصرف انقدر کم باشه؛ برای ذخیره لاگ و ... اگر تا ۵ گیگ بخوای بهت رایگان میدم، اگر Docker image هات کمتر از ۵۰ مگ باشه نگهداریش رایگان هست و ...
یا اگر
همهی اینها روی هم هزینههارو بالا میبره!
با همهی اینها اما؛ همچنان اکثر پروژههای ما با
وقتی ازش مطمئن شدیم و جواب داد و موفقیت آمیز بود میریم سراغ
بطور خلاصه:
اما داشتن
فرصت دستم بیاد، حتماً یک پروژه رو هم روی
با همکارای مسئول
cloud server صحبت میکردم؛ هزینه سرور از 3000$ به 300$ درماه کاهش پیدا کرده.بخش زیادی ازین موارد به لطف Rust هست؛
مثلاً داکر ایمیج چندتا از سرویسهای مربوط به
Rust (بکند و فرانت باهم از طریق Rust سرو میشه) حجمی حدوداً ۳۵ مگ داره که روی سرویس دهنده بابت نگهداری ۱۰ ورژن آخرش هزینه 0$ هست.فقط بکند همین سرویسها روی پایتون توی بهترین حالت ۳۹۰ مگ حجم هر ایمیج بود.
مصرف و لود شبکه به شدت پایین اومد؛ که خب بخش زیادی از اون به لطف gRPC بود.
تونستیم disk کمتری رو خریداری کنیم مثلاً: برای لاگ سرورهامون چون 99% سناریوها رو دیگه میدونستیم خطا از چی هست (به لطف Result, Option) و این باعث شد اطلاعات خیلی کمتری رو نیاز داشته باشیم لاگ بندازیم.
مصرف
Ram سرورها به شدت کم شد؛ توی یکی از سرویسها بعنوان مثال؛ FastApi به محض استارت شدن ۲۰۰-۲۲۰ مگ مصرف رم داشت این رقم برای Actix-web روی ۲۷-۲۸ مگ بود.موقع کار هم حداقل 8x مصرف رم Rust کمتر بود.
این درحالی هست که Rust تعداد Requestهای بیشتری رو هم جواب میداد.
توی
CPU هم که بحثی وجود نداره.مسئله با سرویسها و سرورهای cloud هم همین هست؛ یک سری چیزها بدون هزینه هست اگر مصرف انقدر کم باشه؛ برای ذخیره لاگ و ... اگر تا ۵ گیگ بخوای بهت رایگان میدم، اگر Docker image هات کمتر از ۵۰ مگ باشه نگهداریش رایگان هست و ...
یا اگر
Ram بیش از ۴ گیگ بخوای؛ اونوقت حداقل باید دو برابر بخری رم ۸ گیگ و حداقل باید CPU با ۴ هسته سفارش بدی اونوقت Storage هم حداقل از 100GB شروع میشه و ... همهی اینها روی هم هزینههارو بالا میبره!
با همهی اینها اما؛ همچنان اکثر پروژههای ما با
FastApi و پایتون توسعه داده میشه.وقتی ازش مطمئن شدیم و جواب داد و موفقیت آمیز بود میریم سراغ
Rustبطور خلاصه:
بکند ۹۹.۹٪ پروژههای استارتاپی شما به بیشتر از پایتون نیاز نخواهد داشت اگر معماری و طراحی درست باشه.
اما داشتن
Rust درآینده خیلی کمک میکنه؛ همین شده که ما دوباره از پروژههای monolotic به سمت micro-service حرکت کردیم.فرصت دستم بیاد، حتماً یک پروژه رو هم روی
FastApi هم روی Actix-web کد میزنم تا تفاوت دیده بشه؛ البته چون توسعه دهنده پایتون هم هستم بایاس نمیکنم و زمان لازم برای توسعه رو هم خواهم گذاشت که هرکدوم چقدر ازم وقت گرفته.👍43❤10🔥4