4 389
Subscribers
-324 hours
+127 days
+6330 days
Posts Archive
4 389
📌 از id برای گرفتن پست استفاده کنیم یا slug ؟
شاید موقع طراحی یک وبسابت براتون سوال پیش اومده باشه که برای لود صفحات یا پست های وبسایتم از id (عددی در sql) استفاده کنم یا slug 🤔
شاید به خودتون بگید که خب من خیلی خفنم و پرفمونس برام مهمه و مقایسه دوتا عدد عدد خیلی سریع تر از دوتا string هستش، پس اسلاگ نمیذارم و پست هارو با ایدی لود میکنم(هه باو 😏😎)
اما یک چند لحظه صبر کن ، واقعاً فکر میکنی برای دیتابیس بین میلیارد ها رکورد مچ کردن دوتا استرینگ که برابر کامل باشند (در اینجا منظور text search نیست) که از قضا معمولاً اسلاگ هم ایندکس میشه ، کار سختیه؟ 🤨
اگر اینطور فکر کردید که باس بگم که زهی خیال باطل، اگر دنبال مهربون بودن با دیتابیس هستید راهش این نیست و اینکار برای دیتابیس واقعاً کار سختی نیست و شاید توی for loop و حجم های بالای رکوئست به تفاوتش پی ببری، که قطعاً برای سایت شما که در لحظه ده تا کوئری هم رو دیتابیست نمیاد چیز شاخی نیست
💡 اما بریم سراغ اینکه حالا واقعا ایا slug استفاده کنیم یا نه؟
نظر من اینه هم ایدی بزنید هم اسلاگ، هم خدارو بخواید هم خرما 😬، هم با اسلاگ توی url از سئوگرفتن لذت ببرید، هم فکر کنید به دیتابیس فشار کمتری میاد
اما حتماً توی این مورد کنونیکال رو رعایت کنید و تگش رو توی صفحه بزنید
🪄 کنونیکال چیه و چرا تگش رو تو صفحه بزنم؟
وقتی شما ملاک مقایسه صفحاتت میشه ایدی، اگر کسی slug رو تغییر بده در واقع یک لینک جدید ساخته و گوگل هم میگه ایول دمت گرم یک صفحه جدید زدی، ماشالا تولید محتوا 👏👏
اما وقتی میاد مطلبت رو میبینه میگه زکی، اینکه تکراریه 😕
اگر تگ کنونیکال رو توی html بزاری و بگی ادرس صفحه اصلی اینه دیگه گوگل میگه اوکی مشکلی ندارم، (اگر یک ریدایرکت هم بکنی صفحات اشتباه رو هم بد نیست)
در مورد پیاده سازی canonical و قوانینش گوگل کنید حتما (تنها مطلبی که بهتون اجازه میدم فارسی هم میتونید سرچ کنید 😑)
🖥 @SEYED_BAX
4 389
📌 مراحل ارسال کد otp و احراز هویت آن
ارسال کد :
شماره تلفن رو چک میکنم که آیا در دیتابیس چنین اکانتی بن/حذف شده یا نه
یک داکیومنت برای otp به شکل زیر در نظر میگیرم
class OTPDocument(Document):
code = fields.StringField()
contact = fields.StringField()
expire_at = fields.LongField()
retry = fields.IntField()
created_at = fields.DateTimeField(default=datetime.datetime.utcnow)
فیلد کد : حاوی کدی که قراره ارسال کنم
فیلد کانتکت : حاوی ایمیل یا شماره تلفنی که قراره بهش کد ارسال کنم
فیلد تاریخ انقضا : زمان منقضی شدن کد
فیلد تعداد تلاش : تعداد دفعاتی که کد برای ورود چک میشه و اشتباه زده شده
فیلد تاریخ ساخت : جهت حذف خودکار توسط مونگو (بعد از یک ساعت توسط ایندکس expireAfterSeconds دلیتش میکنم)
چرا بعد یکساعت منقضی میکنم ؟ که اگر تعداد تلاش رفته باشه بالا بازم بعد یکساعت بتونه درخواست بده(صفر بشه یعنی)
اگر هنگام درخواست داکیومنت موجود باشه و هنوز منقضی نشده باشه کد قبلی نمیتونه درخواست کد جدید بده
کد رو برای کاربر ارسال میکنم (پیامک یا ایمیل) و بهش ایدی دیتابیس (مونگو یک ایدی ۳۲ کاراکتری داره)
اگر دیتابیس مونگو نیست یا نیاز به امنیت بیشتر هست یک فیلد بزارید و یک کد ۳۲ کاراکتری جنریت کنید و بدید دست کاربر
تو مرحله بعدی کاربر اون کد جنریت شده مرحله قبل یا ایدی دیتابیس مونگو رو ازش میگیریم و کد هم دریافت میکنیم (با شماره سرچ نمیزنیم توی دیتابیس . با اون کد چک میکنیم)
احراز هویت کد :
اگر کد جنریت شده (۳۲ کاراکتری ) اشتباه باشه درخواستش رو رد میکنم
اگر کد جنریت شده درست باشه ولی با کد otp اشتباه داده بشه توی دیتابیس تعداد retry رو میبرم بالا
اگر تعداد تلاش بیشتر از لیمیت کانفیگم باشه و همچنین به زمان اکسپایر نرسیده باشیم. درخواستش رد میکنم
اگر زمان اکسپایر گذشته باشه درخواستش رد میکنم
باقی مراحل مربوط به ساخت توکن یا سشن جهت ورود …
⚠️ تعداد درخواست در هر ساعت روی این متد ها لیمیت میشه بر اساس ای پی و ایدی دیوایس
🚫 از نظر من امنه. خوشحال میشم اگر باگی بگید
🖥 @SEYED_BAX
4 389
استفاده از jquery توی پروژه های جنگو بعضی وقتها واقعا ضد حال میشه
طوری که بعضی ها کلا میرن سمت کتابخونه های جاوا اسکریپتی مثل recatjs یا angular یا vueJs یا ...
و البته برای بکند از DRF استفاده میکنن
بعضی از برنامه نویس های جنگو اصلا با template های جنگو کار نکردن و جنگو رو فقط با DRF میشناسن.
من که توی DRF هنوزم مبتدی هستم.
ولی اگه دارید از تمپلت ها استفاده می کنید (به هر دلیلی) و Jquery خیلی رو مخه و مدیریت کدهاش سخت شده، یک بار HTMX رو امتحان کنید.
سایتش:
https://htmx.org
نمونه هاش برای جنگو که سایتش معرفی کرده:
https://github.com/adamchainz/django-htmx
https://github.com/spookylukey/django-htmx-patterns/
https://github.com/idlesign/django-siteajax
https://github.com/guettli/django-htmx-fun/
https://www.photondesigner.com/articles/submit-async-django-form-with-htmx
حتی یه پکیج جنگویی هم براش ساختن به اسم django-htmx
https://pypi.org/project/django-htmx/
نکته:
این HTMX مختص جنگو نیست.
خودم باهاش کار کردم؟ نه والا 🥸 فقط سرچ کردم و فهمیدم چیه. اگه تجربه کار باهاش رو دارید کامنت کنید 😬
4 389
Repost from N/a
آنکل باب (Uncle Bob)، پیرمرد دوستداشتنی، این بار در مورد اصول بنیادی مهندسی نرمافزار در عصر هوش مصنوعی میگوید.
در دنیای جدید نرمافزار، مرز بین دو نوع برنامهنویسی پررنگتر از همیشه شده است:
برنامهنویسی تاکتیکی (Tactical):
تمرکزش روی نوشتن سریع کدها و اجرای تسکهاست. هوش مصنوعی اکنون تمام این بخش را بلعیده و با سرعت بالا انجام میدهد.
برنامهنویسی استراتژیک (Strategic):
تمرکزش روی معماری کلان، طراحی ماژولها و جهتدهی مسیر سیستم است. هوش مصنوعی در این بخش ضعیف عمل میکند.
چالش بزرگ چیست؟
وقتی هوش مصنوعی تمام کارهای تاکتیکی را انجام میدهد، برنامهنویسان تازهکار چگونه باید تفکر استراتژیک را یاد بگیرند؟
پاسخ عمو باب ساده است:
شما نمیتوانید کدنویسی را کاملاً رها کنید.
برای هدایت استراتژیک ماشین، ابتدا باید خودتان مستقیماً با کدها کلنجار رفته باشید تا «درد و تقلا» برای حل مسائل پیچیده را بشناسید و بتوانید خطاهای مدلها را تشخیص دهید.
باید کتابهای کلاسیک و پایهای مهندسی نرمافزار را بخوانید تا بفهمید چگونه بازی استراتژیک را اداره کنید.
چرا که در نهایت:
«قوانین و اصول پایه نرمافزار برای مدیریت پیچیدگی ساخته شدهاند؛ چه برای ذهن انسان و چه برای مدلهای هوش مصنوعی. کسانی که فکر میکنند در عصر هوش مصنوعی اصول نرمافزار دیگر اهمیتی ندارند، به زودی با برخورد به دیوار واقعیت، این درس را به سختترین شکل ممکن یاد خواهند گرفت. قوانینی که امروز دور میاندازید، همان قوانینی هستند که سال دیگر باید از روی زمین بردارید، خاکشان را بتکانید و دوباره به کار بگیرید.»
🎥 لینک ویدیوی مصاحبه:
https://www.youtube.com/live/zcLPGC-tvgk?si=LPKujO1GWHMHL5WJ
4 389
امروز یه تایم خالی پیدا کردم و با cursor قالب سایت جنگولرن رو یکم شبیه به سایت جنگو کردم.
سورسش رو هم گذاشتم توی گیت هاب، شاید کسی خواست استفاده کنه.
https://github.com/miladhzz/wordpress_django_theme
قالب قبلی توی حالت موبایل خیلی داغون بود، الان یکم داغونه 😂
شاید بپرسید، شما که جنگو جنگو می کنید، چرا سایت خودتون با جنگو نیست.
جواب: حال داری بابا. یه هاست سالانه 250 هزار تومنی برای این سایت وردپرسی گرفتم.
آپدیت هم میاد دو دقیقه ای آپدیتش میکنم.
مطالبش هم که ربات تلگرامی داره برام پست میکنه. (البته ربات همزمان توی سایت خودم و جنگولرن پست میکنه)
4 389
✅معرفی پکیج django-silk برای پروفایلینگ
پروفایلینگ چیه؟
در طی طراحی یک برنامه همیشه این سوال برامون پیش میاد که کد و کوئری ما بهینه هست یا نه ،چقدر منابع مصرف میکنه(حافظه ، cpu ، i/o و ...) ،از لحاظ تایمینگ چطور ، و یا حتی تعداد کوئریهامون و ... به این موضوع شکل گرفته در ذهن ما در دنیای مهندسی نرم افزار پروفایلینگ میگن
لینک گیت هاب django-silk:
https://github.com/jazzband/django-silk
4 389
این پست رو ببینید (از کانال مهندس مسعود بیگی)
https://t.me/tondtech/4438
بخشی از پست (کامنت هاش رو بخونید):
قراره یه اپیزود درباره ارتباط نحوه توسعه مهندسان تازه کار نرم افزار (جونیورها) و AI Agent ها ضبط کنیم ، تجربه ها و پیشنهادات تون رو بگید که نظر شما عزیزان رو هم بدونم.
بعدش این ویس که آقای بیگی ساختن رو گوش بدید:
https://t.me/tondtech/4442
آقای مسعود بیگی سال تحصیلی قبلی اومدن سر کلاس ما و برای بچه ها صحبت کردن و جواب سوال هاشون رو دادن
4 389
مثلا اشتباهی که من داشتم یه بخشی از کد رو دادم ai بگم ریفکتور کن.
ولی هوش مصنوعی نمیدونه بر حسب چه شرایطی و چه نیازمندی هایی باید ریفکتور کنه.
ممکنه کاری که انجام میده، برای اون تیکه کد درست باشه ولی برای بیزینس من اشتباه باشه.
4 389
Repost from .NET Fun
کد ریوو بدون کانتکست با AI اشتباهه
کد ریوو بدون دونستن تسک و بیزنس با AI اشتباهه
نکنید از این کارا
@DotNetIsFun
4 389
این 1 depth-- باحال بود. استفاده کنید.
فقط آخرین کامیت توی history رو نشون میده.
من تمرین هارو میدم که توی گیت بزارن. اینجوری سرعتم بیشتر میشه.
4 389
Repost from Tech Stuff
کلون ریپازیتوری بدون تاریخچه کامل
وقتی یه ریپازیتوری گیت تاریخچه خیلی طولانی داشته باشه، git clone ممکنه زمان و حجم زیادی مصرف کنه؛ در حالی که شاید فقط به آخرین نسخه کد نیاز داشته باشیم. اینجا میتونیم از --depth استفاده کنیم. توی مثال فقط آخرین کامیت رو دریافت میکنیم و به همین خاطر clone سریعتر و کمحجمتر میشه.
این روش یه shallow clone ایجاد میکنه و به همین دلیل کل تاریخچه گیت رو نداریم. اگر بعدا به تاریخچه کامل نیاز داشتیم، میتونیم با git fetch --unshallow کل تاریخچه رو دریافت کنیم.
#git
@techstuff100
4 389
Repost from tech-afternoon
⚡️ 🚩 داستان Feature Flag؛ از یک
if ساده تا چیزی که کسی جرئت حذفش رو نداره!
درحالیکه یه عده بحث میکنن درد عاشقی بدتره یا درد بیپولی، همزمان عدهای از لابهلای صف دستشویی بهشون پوزخند میزنن!
اما گروه چهارمی هم هستن که یه قابلیت جدید برای نرمافزارشون نوشتن، ولی نمیدونن چجوری فعال یا غیرفعالشدنش رو بدون Release جدید کنترل کنن.
بله، اینها همونهایی هستن که یا هنوز نمیدونن Feature Flag چیه، یا پیادهسازی درستش رو بلد نیستن و در شرایط بحرانی آرزو میکنن کاش توی صف قضای حاجت بودن، ولی درگیر اون پروژه نبودن!
البته از این گروه بدبختتر هم داریم: کسانی که یه کدبیس با دهها یا صدها Feature Flag رهاشده بهشون ارث رسیده و حالا هیچکس جرئت نمیکنه چیزی رو حذف کنه!
توی این مطلب درباره اینها نوشتم:
- انواع Feature Flag و تفاوت Flagهای موقت و دائمی
- بدهی فنی، ترکیبهای غیرقابلتست و Flagهایی که هیچوقت حذف نمیشن
- پلتفرمهایی مثل LaunchDarkly، Unleash، Flagsmith و OpenFeature
- اصول Governance، نامگذاری، مالکیت و معیارهای سنجش بدهی
- در مورد Consistency، Performance و امنیت Feature Flag در سیستمهای توزیعشده
میشه گفت Feature Flag بدهی فنی نیست؛ اما Feature Flag بدون مالک، تاریخ انقضا و برنامه حذف، بدهی فنی زمانبندیشده است.🔗 لینک کامل مطلب اگر شما هم Feature Flagی دیدید که هیچکس نمیدونه چرا هنوز وجود داره، تجربهتون رو بنویسید؛ احتمالاً تنها نیستید!
4 389
Repost from Django Expert
توی این ویدیو سعی کردم یک زیرساخت خیلی ساده با استفاده از داکر برای پایش سرویس هامون(بکاند جنگو) بسازم.
Docker + Django + Grafana Alloy + Loki + Grafana = این ویدیو
مشاهده در:
https://youtu.be/Vo4YAmygQig
و
https://aparat.com/v/cpbzvce
سورسکد:
https://github.com/mthri/dj-observability
"تجربه خودتون از observability در پروژههاتون رو توی کامنتها بگید(چه ابزارهایی؟ چه روش هایی؟ چه مشکلاتی؟ چه راهکارهایی؟ چه....."
™️ @DjangoIR
〰️〰️〰️〰️〰️〰️
© @DjangoEx [@mthri_tips]
4 389
Repost from هشتگ تبلیغ تخصصی
🔥 ۵۰۰ دوره آموزشی مکتبخونه رایگان شد!
اگه برنامهنویسی، به دنیای هوش مصنوعی علاقه داری یا میخوای مهارتهای فنیات رو تقویت کنی، بین این دورهها انتخابهای زیادی داری:
🐍 پایتون، توسعه وب و طراحی سایت
🤖 هوش مصنوعی، یادگیری ماشین و علم داده
🖥️ کامپیوتر، لینوکس، شبکه و امنیت
دوره «یادگیری ماشین با پایتون» با تدریس جادی هم بین آموزشهای رایگان این طرحه.
فقط تا ۸ شهریور فرصت داری؛ از طریق لینک زیر آموزش دلخواهت رو انتخاب کنی و با وارد کردن کد IRANMAHER، با تخفیف ۱۰۰٪ ثبتنامش کنی👇
🔗 لینک دورهها:
https://mktb.me/l4rw/
4 389
کتاب Fluent Python بعد از عمل
پستی که reply زدم رو ببینید.
از این کانال هدیه اش گرفتم.
چون تعداد صفحاتش زیاد بود در دو کتاب چاپش کردن.
کتاب اولی رو تمام کرده بودم. ولی خب یکم پاره پوره شد.
اما تمیزه
یکی از اعضای کانال خواست بره سربازی، بهش امانت دادم 😁
4 389
Repost from کانال خط تالیف
💠کتاب طراح سایت پایه یازدهم (نسخه غیرقابل استناد)
🔻دفتر تألیف کتب درسی فنی و حرفهای شبکه و نرمافزار رایانه
@khatetaleef
بله - ایتا - تلگرام کانال - تلگرام گروه - شاد - آپارات - ارزیابی کتب
