چگونه در Digikala از کرشهای ناشی از lazy load در وب جلوگیری کردیم و تجربه کاربری را نجات دادیم!
کیفیت افتضاح اینترنت و قطع شدن لحظهای نتورک باعث میشه lazy load کردن اسکریپتهای یک وبسایت باعث کرش اپلیکیشن و تجربهی بد کاربری بشه. با توجه به شرایط بد اینترنت میخواستم این مطلب رو با شما هم به اشتراک به بذارم به امید اینکه با توجه به این نکتهی مهم، تجربهی کاربری بهتری در آینده داشته باشیم.
طبق آمار sentry یکی از پروداکتهامون، این مسئله روزانه بیش از ۳۰۰۰ کرش ایجاد میکرد.
قبل از اینکه دنبال راه حل بگردیم، وبسایتهای مطرحی که میشناختم رو بررسی کردم و متاسفانه همگی این مشکل رو داشتن.
(Aparat, Snapp! Express, Snapp!, Divar, Neshan, Alibaba)
لینک gist زیر راه حل ما برای پروداکتی بر پایه react و vite بود که امکان retry کردن رو به متد React.lazy اضافه میکنه و امروز هم با موفقیت تستش روی پروداکشن پاس شد و تقریبا تمامی ارورهای مرتبط با lazy load ماژولها مثل مورد زیر رفع شد.
TypeError: Failed to fetch dynamically imported module
لینک Gist
https://gist.github.com/mberneti/28769391cf27f7580a55dedab342c63a
خوشحال میشم پیشنهادی برای بهبودش دارید روی لینک gist متد retryDynamicImport اضافه کنید.
@DevTwitter | <Mohammadreza Berneti/>
کیفیت افتضاح اینترنت و قطع شدن لحظهای نتورک باعث میشه lazy load کردن اسکریپتهای یک وبسایت باعث کرش اپلیکیشن و تجربهی بد کاربری بشه. با توجه به شرایط بد اینترنت میخواستم این مطلب رو با شما هم به اشتراک به بذارم به امید اینکه با توجه به این نکتهی مهم، تجربهی کاربری بهتری در آینده داشته باشیم.
طبق آمار sentry یکی از پروداکتهامون، این مسئله روزانه بیش از ۳۰۰۰ کرش ایجاد میکرد.
قبل از اینکه دنبال راه حل بگردیم، وبسایتهای مطرحی که میشناختم رو بررسی کردم و متاسفانه همگی این مشکل رو داشتن.
(Aparat, Snapp! Express, Snapp!, Divar, Neshan, Alibaba)
لینک gist زیر راه حل ما برای پروداکتی بر پایه react و vite بود که امکان retry کردن رو به متد React.lazy اضافه میکنه و امروز هم با موفقیت تستش روی پروداکشن پاس شد و تقریبا تمامی ارورهای مرتبط با lazy load ماژولها مثل مورد زیر رفع شد.
TypeError: Failed to fetch dynamically imported module
لینک Gist
https://gist.github.com/mberneti/28769391cf27f7580a55dedab342c63a
خوشحال میشم پیشنهادی برای بهبودش دارید روی لینک gist متد retryDynamicImport اضافه کنید.
@DevTwitter | <Mohammadreza Berneti/>
1👍76👎4🔥3
کسانی که تازه دست به کد میشن یا در بعضی از دوستان میدلول, همیشه استرس این رو دارن که آیا کدی که می نویسند، تمیز هست و بر اساس اصولی که باید باشه هست؟!
میخوام یک سری موارد بگم که مفید باشه براتون و استرس کد کثیف نداشته باشید.
شما وقتی یک تکه کدی رو میخواهید بنویسید بر اساس دانش و تجربه تون بنویسید تو فکر این نباشید کدتون کثیف یا نه، سپس کدی که نوشتید رو بررسی کنید با اصول SOLID,KISS,DRY و... هم خونی داره و وارد دنیای ریفکتورینگ Refactoring شوید و در هر مرحله کد هاتون رو تمیز تر از قبل بنویسید.
هدفتون برای بار اول حل مسئله هست سپس اون راه حل تون رو هر دفعه بهبود ببخشید این باعث میشه درک بهتری از کد نویسی نیز داشته باشید.
این تکنیک باعث میشه شما تو آینده به صورت دیفالت کد های تمیز تری بنویسید.
@DevTwitter | <Mohammadreza Abdorrahmani/>
میخوام یک سری موارد بگم که مفید باشه براتون و استرس کد کثیف نداشته باشید.
شما وقتی یک تکه کدی رو میخواهید بنویسید بر اساس دانش و تجربه تون بنویسید تو فکر این نباشید کدتون کثیف یا نه، سپس کدی که نوشتید رو بررسی کنید با اصول SOLID,KISS,DRY و... هم خونی داره و وارد دنیای ریفکتورینگ Refactoring شوید و در هر مرحله کد هاتون رو تمیز تر از قبل بنویسید.
هدفتون برای بار اول حل مسئله هست سپس اون راه حل تون رو هر دفعه بهبود ببخشید این باعث میشه درک بهتری از کد نویسی نیز داشته باشید.
این تکنیک باعث میشه شما تو آینده به صورت دیفالت کد های تمیز تری بنویسید.
@DevTwitter | <Mohammadreza Abdorrahmani/>
👍101🔥11❤2👎1
کانال یوتیوب من دربارهٔ برنامهنویسی اندروید با موضوع تماسهای تصویری ، ویدیو کانفرنس با WebRTC و همچنین استریم کردن توسط پروتوکول RTP است. تکنیکها، ترفندها و روشهای ارتقا تجربه کاربری را یادتون میدم. برای بهتر شدن تو برنامهنویسی اندروید به ما بپیوندید.
http://Youtube.com/@codewithkael
@DevTwitter
http://Youtube.com/@codewithkael
@DevTwitter
👍22🔥6🤣3
شاید بشه اینطوری شروع کرد “هشدار به وردپرسکارها”
سال پیش همینموقعها بود که یک خبری رسید که وردپرس میخواد react رو جایگزین jquery کنه که محتمل هم بود چون چند سالی هست وردپرس ساختار قالبهاشو از بیس تغییر داده و تمام ویجتهای گوتنبرگ که ویرایشگر جدید وردپرس هستش رو با react توسعه داده
درسته بعدا فهمیدیم خبر واقعی نبوده و ورژن جدید خبری از حذف jquery نبود اما خب نمیشه هم ساده از کنار این موضوع گذشت چرا که وردپرس چندسالی هست داره سعی میکنه خودشو بعنوان framework معرفی کنه
حالا از این موضوع بگذریم امسال خبر رسیده که جدیدا وردپرس با WP Engine به دلیل نقض قوانین وردپرس به چالش خورده
-اگر WP Engine رو نمیشناسید باید بگم شرکتی که پلاگین پرقدرت acf رو توسعه دادهبود-
وردپرس اعلام کرد که acf دیگه دردسترس نخواهد بود
حالا هدفم از گفتن همهی اینها این بود که بگم در کنار وردپرس سعی کنید استکهای دیگه مخصوصا react رو هم یاد بگیرین و خیلی خودتون رو محدود به وردپرس نگه ندارین چون واقعا معلوم نیست در آینده وردپرس به چه شکلی ظاهر خواهدشد
@DevTwitter | <Abolfazl Mahjoob/>
سال پیش همینموقعها بود که یک خبری رسید که وردپرس میخواد react رو جایگزین jquery کنه که محتمل هم بود چون چند سالی هست وردپرس ساختار قالبهاشو از بیس تغییر داده و تمام ویجتهای گوتنبرگ که ویرایشگر جدید وردپرس هستش رو با react توسعه داده
درسته بعدا فهمیدیم خبر واقعی نبوده و ورژن جدید خبری از حذف jquery نبود اما خب نمیشه هم ساده از کنار این موضوع گذشت چرا که وردپرس چندسالی هست داره سعی میکنه خودشو بعنوان framework معرفی کنه
حالا از این موضوع بگذریم امسال خبر رسیده که جدیدا وردپرس با WP Engine به دلیل نقض قوانین وردپرس به چالش خورده
-اگر WP Engine رو نمیشناسید باید بگم شرکتی که پلاگین پرقدرت acf رو توسعه دادهبود-
وردپرس اعلام کرد که acf دیگه دردسترس نخواهد بود
حالا هدفم از گفتن همهی اینها این بود که بگم در کنار وردپرس سعی کنید استکهای دیگه مخصوصا react رو هم یاد بگیرین و خیلی خودتون رو محدود به وردپرس نگه ندارین چون واقعا معلوم نیست در آینده وردپرس به چه شکلی ظاهر خواهدشد
@DevTwitter | <Abolfazl Mahjoob/>
👍38🤣14👎11🔥3
چند وقتیه دارم روی چیزی به اسم Bake کار میکنم.
به درد همه جور برنامه نویسی میخوره.
الان توی مرحله ی feedback جمع کردنم.
خوشحال میشم اگه یه نگاهی بهش بندازید.
https://github.com/ali77gh/bake-rs
@DevTwitter | <Ali/>
به درد همه جور برنامه نویسی میخوره.
الان توی مرحله ی feedback جمع کردنم.
خوشحال میشم اگه یه نگاهی بهش بندازید.
https://github.com/ali77gh/bake-rs
@DevTwitter | <Ali/>
👍24🔥4❤1🤣1
امروز میخوام ACID رو توضیح بدم که چهار ویژگی مهم در تراکنشهای پایگاه داده است. بیایید با هم هر کدام از این مفاهیم رو مرور کنیم:
Atomicity (اتمی بودن)
یعنی یا همه عملیاتهای یک تراکنش بهدرستی انجام میشه یا هیچکدام انجام نمیشه. اگر خطایی رخ بده، همه تغییرات برگردونده میشه. مثلاً اگر در هنگام خرید اینترنتی انتقال پول از حساب شما با مشکل مواجه بشه، تراکنش برگردونده میشه و از حساب شما پولی کسر نمیشه.
Consistency (سازگاری)
یعنی پس از هر تراکنش، پایگاه داده همچنان طبق قوانین تعریفشده عمل میکنه. مثلاً در یک سیستم بانکی، قانون اینه که مجموع موجودی حسابها نباید منفی بشه. حالا تصور کنید اگر کسی بخواد پولی از حساب A به حساب B منتقل کنه و این انتقال ناتمام بمونه (پول از A کم بشه ولی به B اضافه نشه)، قوانین Consistency اجازه نمیده این اتفاق بیفته و تراکنش رو برمیگردونه تا موجودیها درست باشه.
Isolation (انزوا)
یعنی تراکنشها از هم جدا هستن و تأثیری روی هم ندارن. به این معنی که اگر دو نفر همزمان در حال انجام تراکنش باشن، یکی روی دیگری تأثیر نمیگذاره و نتایج تراکنشها به هم نمیریزه.
Durability (دوام)
یعنی وقتی یک تراکنش به پایان رسید و تأیید شد، تغییرات اون حتی در صورت بروز مشکل یا قطعی سیستم همچنان ذخیره میمونه. مثلاً وقتی شما پولی به حساب دیگری واریز میکنید، حتی اگر سیستم دچار قطعی بشه، این انتقال در پایگاه داده ثبت شده و از بین نمیره.
@DevTwitter | <Firoozeh Daeizadeh/>
Atomicity (اتمی بودن)
یعنی یا همه عملیاتهای یک تراکنش بهدرستی انجام میشه یا هیچکدام انجام نمیشه. اگر خطایی رخ بده، همه تغییرات برگردونده میشه. مثلاً اگر در هنگام خرید اینترنتی انتقال پول از حساب شما با مشکل مواجه بشه، تراکنش برگردونده میشه و از حساب شما پولی کسر نمیشه.
Consistency (سازگاری)
یعنی پس از هر تراکنش، پایگاه داده همچنان طبق قوانین تعریفشده عمل میکنه. مثلاً در یک سیستم بانکی، قانون اینه که مجموع موجودی حسابها نباید منفی بشه. حالا تصور کنید اگر کسی بخواد پولی از حساب A به حساب B منتقل کنه و این انتقال ناتمام بمونه (پول از A کم بشه ولی به B اضافه نشه)، قوانین Consistency اجازه نمیده این اتفاق بیفته و تراکنش رو برمیگردونه تا موجودیها درست باشه.
Isolation (انزوا)
یعنی تراکنشها از هم جدا هستن و تأثیری روی هم ندارن. به این معنی که اگر دو نفر همزمان در حال انجام تراکنش باشن، یکی روی دیگری تأثیر نمیگذاره و نتایج تراکنشها به هم نمیریزه.
Durability (دوام)
یعنی وقتی یک تراکنش به پایان رسید و تأیید شد، تغییرات اون حتی در صورت بروز مشکل یا قطعی سیستم همچنان ذخیره میمونه. مثلاً وقتی شما پولی به حساب دیگری واریز میکنید، حتی اگر سیستم دچار قطعی بشه، این انتقال در پایگاه داده ثبت شده و از بین نمیره.
@DevTwitter | <Firoozeh Daeizadeh/>
👍53🤣6👎1
This media is not supported in your browser
VIEW IN TELEGRAM
وب سایت levels.fyi که به جویندگان کار کمک میکنه دستمزد در شرکتهای مختلف را مقایسه کنن یک heatmap حقوق اضافه کرده است! میتونید بازه حقوقی برای شغلهای مختلف را در شهرهای امریکا ببینید.
@DevTwitter | <Mehdi Allahyari/>
@DevTwitter | <Mehdi Allahyari/>
❤11👍6🤣1
بچه ها این دوره ی LLM توسط دانشگاه UC Berkeley و Google DeepMind رو تازه دیدم توی لینکدین...
فوق العاده جالب میاد و ویدیوهاش هم رایگان گذاشتن.. اسلایداش و هم هست و کورس رو میتونید ثبت نام کنید البته یه ماهی هست شروع شده..
llmagents-learning.org/f24
@DevTwitter | <Sam92/>
فوق العاده جالب میاد و ویدیوهاش هم رایگان گذاشتن.. اسلایداش و هم هست و کورس رو میتونید ثبت نام کنید البته یه ماهی هست شروع شده..
llmagents-learning.org/f24
@DevTwitter | <Sam92/>
🔥15🤣5👍3
اصلاح مدل ذهنی از دنیای جاوااسکریپت
دورهی یادگیری مدلهای ذهنی جاوااسکریپت، مجموعه مطالبی هست که توسط Dan Abramov تهیه شده و دید شما رو نسبت به جاوااسکریپت متحول میکنه. مطالعهی این دوره رو به همهی افرادی که با جاوااسکریپت کار میکنن توصیه میکنم. بخصوص برای افرادی که تازه در حال یادگیری این زبان هستن.
این دوره در سایت justjavanoscript.com با قیمت ۴۲ دلار در دسترسه و من هم حدودا ۴ سال پیش که Dan Abramov بصورت رایگان این مطالب رو برای فالورهاش ایمیل کرد، مطالعه کردم و بعدش به فارسی در بلاگم منتشر کردم.
لینک رایگان دورهی فارسی دنیای جاوااسکریپت:
لینک
پ.ن:
آقای Dan Abramov (یکی از سازندگان Redux و Create React App و جز مهندسان نرم افزار بخش React شرکت Meta)
@DevTwitter | <Mohammadreza Berneti/>
دورهی یادگیری مدلهای ذهنی جاوااسکریپت، مجموعه مطالبی هست که توسط Dan Abramov تهیه شده و دید شما رو نسبت به جاوااسکریپت متحول میکنه. مطالعهی این دوره رو به همهی افرادی که با جاوااسکریپت کار میکنن توصیه میکنم. بخصوص برای افرادی که تازه در حال یادگیری این زبان هستن.
این دوره در سایت justjavanoscript.com با قیمت ۴۲ دلار در دسترسه و من هم حدودا ۴ سال پیش که Dan Abramov بصورت رایگان این مطالب رو برای فالورهاش ایمیل کرد، مطالعه کردم و بعدش به فارسی در بلاگم منتشر کردم.
لینک رایگان دورهی فارسی دنیای جاوااسکریپت:
لینک
پ.ن:
آقای Dan Abramov (یکی از سازندگان Redux و Create React App و جز مهندسان نرم افزار بخش React شرکت Meta)
@DevTwitter | <Mohammadreza Berneti/>
👍28🔥7
اگه دنبال موقعیت شغلی به صورت ریموت در خارج از ایران هستین این پست برای شماست.
سلام دوستان ، امیدوارم حالتون خوب باشه.
این روزها که مشغول پروسه رزومه فرستادن و مصاحبه هستم یه سری سایت هارو پیدا کردم که فک میکنم میتونه براتون مفید باشه.
از طریق این سایت ها میتونید به تمام موقعیت های شغلی ریموت دسترسی داشته باشید.
https://clojurejobboard.com
https://dailyremote.com
اگه دنبال موقعیت شغلی ریموت در زمینه بلاکچین و کریپتو هستید این سایت ها برای شماست.
https://cryptojobslist.com/
https://www.cryptojobs.com/
امیدوارم براتون مفید باشه
@DevTwitter | <Sina Abedi/>
سلام دوستان ، امیدوارم حالتون خوب باشه.
این روزها که مشغول پروسه رزومه فرستادن و مصاحبه هستم یه سری سایت هارو پیدا کردم که فک میکنم میتونه براتون مفید باشه.
از طریق این سایت ها میتونید به تمام موقعیت های شغلی ریموت دسترسی داشته باشید.
https://clojurejobboard.com
https://dailyremote.com
اگه دنبال موقعیت شغلی ریموت در زمینه بلاکچین و کریپتو هستید این سایت ها برای شماست.
https://cryptojobslist.com/
https://www.cryptojobs.com/
امیدوارم براتون مفید باشه
@DevTwitter | <Sina Abedi/>
👍19❤4🤣2👎1
کی از Git Rebase استفاده کنیم و کی از Git Merge؟
گاهی توی کار با Git با این سؤال مواجه میشیم که کی بهتره از rebase استفاده کنیم و کی merge؟ این موضوع میتونه روی خوانایی و ساختار تاریخچه پروژه تاثیر زیادی بذاره.
وقتی که میخوایم تاریخچهای تمیز و خطی داشته باشیم، از git rebase استفاده میکنیم. مثلاً فرض کنید در حال کار روی یک شاخهٔ جانبی (feature) هستیم که از شاخهٔ "main" ساخته شده و در این مدت، تغییرات جدیدی در "main" رخ داده است. اگر از rebase استفاده کنیم، تغییرات شاخهٔ "feature" به گونهای دوباره اعمال میشوند که انگار بعد از آخرین تغییرات شاخهٔ "main" انجام شدهاند. این کار کمک میکنه که تاریخچه پروژه به شکلی خطی و ساده باقی بمونه و دیدن اینکه چه تغییراتی و به چه ترتیبی انجام شده، راحتتر باشه.
اما باید با git rebase با احتیاط رفتار کنیم، چون در صورت استفاده نادرست میتونه مشکلات جبرانناپذیری ایجاد کنه. بهویژه، زمانی که چند نفر به طور همزمان روی یک شاخه کار میکنند، استفاده از rebase میتونه منجر به سردرگمی و مشکلات ترکیب (merge conflict) بشه. بنابراین، بهتره زمانی از rebase استفاده کنیم که با نحوهٔ عملکرد دقیق اون آشنایی کافی داشته باشیم.
از طرف دیگه، وقتی که میخوایم دو شاخه رو با هم ترکیب کنیم و دوست داریم که تاریخچهٔ هر دو شاخه و تغییراتشون حفظ بشه، git merge بهترین انتخابه. این روش مخصوصاً زمانی مناسب هست که بخوایم مشارکت چندین توسعهدهنده و تاریخچه کارهای انجام شده روی هر شاخه رو حفظ کنیم. merge به ما این امکان رو میده که به وضوح ببینیم که در چه زمانی دو شاخه با هم ادغام شدهاند و هیچ تغییری از دست نرفته است.
در کل، هر دو دستور rebase و merge کاربردهای خاص خودشون رو دارن و بسته به نیاز پروژه و ساختار تیم باید انتخاب بشن. rebase برای تمیز نگه داشتن تاریخچه و merge برای ترکیب و حفظ شاخههای موازی به کار میره. مهم اینه که هر کدوم رو با دقت و با توجه به نیازهای پروژه استفاده کنیم.
@DevTwitter | <Amirhisein Ahmadi/>
گاهی توی کار با Git با این سؤال مواجه میشیم که کی بهتره از rebase استفاده کنیم و کی merge؟ این موضوع میتونه روی خوانایی و ساختار تاریخچه پروژه تاثیر زیادی بذاره.
وقتی که میخوایم تاریخچهای تمیز و خطی داشته باشیم، از git rebase استفاده میکنیم. مثلاً فرض کنید در حال کار روی یک شاخهٔ جانبی (feature) هستیم که از شاخهٔ "main" ساخته شده و در این مدت، تغییرات جدیدی در "main" رخ داده است. اگر از rebase استفاده کنیم، تغییرات شاخهٔ "feature" به گونهای دوباره اعمال میشوند که انگار بعد از آخرین تغییرات شاخهٔ "main" انجام شدهاند. این کار کمک میکنه که تاریخچه پروژه به شکلی خطی و ساده باقی بمونه و دیدن اینکه چه تغییراتی و به چه ترتیبی انجام شده، راحتتر باشه.
اما باید با git rebase با احتیاط رفتار کنیم، چون در صورت استفاده نادرست میتونه مشکلات جبرانناپذیری ایجاد کنه. بهویژه، زمانی که چند نفر به طور همزمان روی یک شاخه کار میکنند، استفاده از rebase میتونه منجر به سردرگمی و مشکلات ترکیب (merge conflict) بشه. بنابراین، بهتره زمانی از rebase استفاده کنیم که با نحوهٔ عملکرد دقیق اون آشنایی کافی داشته باشیم.
از طرف دیگه، وقتی که میخوایم دو شاخه رو با هم ترکیب کنیم و دوست داریم که تاریخچهٔ هر دو شاخه و تغییراتشون حفظ بشه، git merge بهترین انتخابه. این روش مخصوصاً زمانی مناسب هست که بخوایم مشارکت چندین توسعهدهنده و تاریخچه کارهای انجام شده روی هر شاخه رو حفظ کنیم. merge به ما این امکان رو میده که به وضوح ببینیم که در چه زمانی دو شاخه با هم ادغام شدهاند و هیچ تغییری از دست نرفته است.
در کل، هر دو دستور rebase و merge کاربردهای خاص خودشون رو دارن و بسته به نیاز پروژه و ساختار تیم باید انتخاب بشن. rebase برای تمیز نگه داشتن تاریخچه و merge برای ترکیب و حفظ شاخههای موازی به کار میره. مهم اینه که هر کدوم رو با دقت و با توجه به نیازهای پروژه استفاده کنیم.
@DevTwitter | <Amirhisein Ahmadi/>
👍32👎6
امروز میخوام براتون درباره TCP صحبت کنم، یکی از پروتکلهای کلیدی اینترنت که بهطور روزمره باهاش سروکار داریم. TCP مثل یه پستچی مطمئن عمل میکنه و دادهها رو دقیق و به ترتیب به مقصد میرسونه.
پروتکل کنترل انتقال یا TCP چیه؟
پروتکل کنترل انتقال یا TCP یکی از مهمترین پروتکلهای ارتباطی هست که به دادهها اجازه میده بهصورت امن و مطمئن از یک سیستم به سیستم دیگه منتقل بشن. به خاطر اطمینان بالا، بیشتر اپلیکیشنها مثل وبگردی، ایمیل و پیامرسانها از TCP استفاده میکنن.
چطور ارتباط TCP برقرار میشه؟
برقراری ارتباط TCP یه فرآیند سه مرحلهای به اسم Three-Way Handshake داره:
مرحله اول SYN (Synchronize)
مثل این میمونه که یک طرف دستش رو برای دست دادن دراز کنه.
کلاینت بستهای با فلگ SYN به سرور میفرسته که حاوی شماره ترتیب اولیه (ISN) هست. مثلاً ۱۰۰۰. این یعنی کلاینت میخواد ارتباط برقرار کنه.
مرحله دوم SYN-ACK (Synchronize Acknowledge)
سرور دست رو میگیره و فلگهای SYN و ACK رو تنظیم میکنه. شماره ترتیب کلاینت رو تایید میکنه (۱۰۰۱) و شماره ترتیب خودش رو (مثلاً ۵۰۰۰) میفرسته.
مرحله سوم ACK (Acknowledge)
کلاینت پاسخ میده و فلگ ACK رو تنظیم میکنه. شماره ترتیب سرور رو به ۵۰۰۱ افزایش میده. حالا ارتباط TCP برقرار شده و آماده تبادل دادهها هست.
سوالات متداول:
فلگهای SYN و ACK چی هستن؟
این فلگها به TCP کمک میکنن که ارتباط بین دو سیستم رو مدیریت کنه و مطمئن بشه که هر پیام به درستی دریافت شده.
چرا شماره ترتیبها (ISN) مهم هستن؟
این شمارهها کمک میکنن تا پیامها به ترتیب درست برسن و از گم شدن اطلاعات جلوگیری میکنه. همچنین با تصادفی بودنشون جلوی حملات امنیتی گرفته میشه.
آیا اینترنت به سمت جایگزینی TCP میره؟
در HTTP/3 از پروتکل جدیدی به نام QUIC استفاده میشه که جای TCP رو میگیره، اما هنوز بیشتر وبسایتها از TCP استفاده میکنن، پس فعلاً جایی نمیره!
@DevTwitter | <Firoozeh Daeizadeh/>
پروتکل کنترل انتقال یا TCP چیه؟
پروتکل کنترل انتقال یا TCP یکی از مهمترین پروتکلهای ارتباطی هست که به دادهها اجازه میده بهصورت امن و مطمئن از یک سیستم به سیستم دیگه منتقل بشن. به خاطر اطمینان بالا، بیشتر اپلیکیشنها مثل وبگردی، ایمیل و پیامرسانها از TCP استفاده میکنن.
چطور ارتباط TCP برقرار میشه؟
برقراری ارتباط TCP یه فرآیند سه مرحلهای به اسم Three-Way Handshake داره:
مرحله اول SYN (Synchronize)
مثل این میمونه که یک طرف دستش رو برای دست دادن دراز کنه.
کلاینت بستهای با فلگ SYN به سرور میفرسته که حاوی شماره ترتیب اولیه (ISN) هست. مثلاً ۱۰۰۰. این یعنی کلاینت میخواد ارتباط برقرار کنه.
مرحله دوم SYN-ACK (Synchronize Acknowledge)
سرور دست رو میگیره و فلگهای SYN و ACK رو تنظیم میکنه. شماره ترتیب کلاینت رو تایید میکنه (۱۰۰۱) و شماره ترتیب خودش رو (مثلاً ۵۰۰۰) میفرسته.
مرحله سوم ACK (Acknowledge)
کلاینت پاسخ میده و فلگ ACK رو تنظیم میکنه. شماره ترتیب سرور رو به ۵۰۰۱ افزایش میده. حالا ارتباط TCP برقرار شده و آماده تبادل دادهها هست.
سوالات متداول:
فلگهای SYN و ACK چی هستن؟
این فلگها به TCP کمک میکنن که ارتباط بین دو سیستم رو مدیریت کنه و مطمئن بشه که هر پیام به درستی دریافت شده.
چرا شماره ترتیبها (ISN) مهم هستن؟
این شمارهها کمک میکنن تا پیامها به ترتیب درست برسن و از گم شدن اطلاعات جلوگیری میکنه. همچنین با تصادفی بودنشون جلوی حملات امنیتی گرفته میشه.
آیا اینترنت به سمت جایگزینی TCP میره؟
در HTTP/3 از پروتکل جدیدی به نام QUIC استفاده میشه که جای TCP رو میگیره، اما هنوز بیشتر وبسایتها از TCP استفاده میکنن، پس فعلاً جایی نمیره!
@DevTwitter | <Firoozeh Daeizadeh/>
1👍41❤7👎1
کتاب Web Browser Engineering در مورد روش کار Browser ها و مفاهیم پایه
کمک خوبی است برای درک عمیق مفاهیم
browser.engineering/index.html
@DevTwitter | <MehrdadLinux/>
کمک خوبی است برای درک عمیق مفاهیم
browser.engineering/index.html
@DevTwitter | <MehrdadLinux/>
👍19❤5🔥3
میدونستی یک Lib برای Python هست به اسم Art
که دو ایرانی الاصل به اسم
صدرا صبوری و سپند حقیقی ساختند که نوشته را تبدیل به گرافیک ASCII میکنه
غرب جوانان با استعداد ایران را خوب دستچین کرد و بالا کشید
pypi.org/project/art/
@DevTwitter | <teegra/>
که دو ایرانی الاصل به اسم
صدرا صبوری و سپند حقیقی ساختند که نوشته را تبدیل به گرافیک ASCII میکنه
غرب جوانان با استعداد ایران را خوب دستچین کرد و بالا کشید
pypi.org/project/art/
@DevTwitter | <teegra/>
🤣94👍32❤10🔥7
اگر از لاراول استفاده میکنید و دنبال پکیجی برای آنالیز کلیک کاربران هستید پکیج Pan این امکان رو به صورت لوکال ایجاد میکنه
https://github.com/panphp/pan
معرفی:
https://www.youtube.com/watch?v=hJJNi-Ri_3E
@DevTwitter | <Parsa Kafi/>
https://github.com/panphp/pan
معرفی:
https://www.youtube.com/watch?v=hJJNi-Ri_3E
@DevTwitter | <Parsa Kafi/>
👍22🤣8🔥4❤1
به تازگی یک سری دو قسمتی درباره Spring AI منتشر کردم! اگر به چگونگی ادغام قابلیتهای هوش مصنوعی در Spring علاقهمندید، این مقالات را بررسی کنید:
قسمت اول:
https://hoomanamini.ir/blog/spring-ai-part1
قسمت دوم:
https://hoomanamini.ir/blog/spring-ai-part2
@DevTwitter | <Parsa Kafi/>
قسمت اول:
https://hoomanamini.ir/blog/spring-ai-part1
قسمت دوم:
https://hoomanamini.ir/blog/spring-ai-part2
@DevTwitter | <Parsa Kafi/>
❤7🤣4👍3
چرا تو جاوا اسکریپت وقتی دوتا آبجکت با مقادیر یکسان رو باهم مقایسه میکنیم false برمیگرده؟
بهتره قبل از جواب به دوفهموم اشاره کرد:
1-مقادیر Primitive دادههایی هستند که مستقیماً در یک متغیر ذخیره میشوند. این مقادیر شامل اعداد، بولینها، رشتهها، null و undefined میباشند
مقادیر Reference آبجکتهایی هستند که در حافظه ذخیره میشوند و از طریق یک Reference قابل دسترسی میباشند. این مقادیر شامل آرایهها، آبجکتها و توابع هستند.
خب جالا برسیم به سوال اصلی : وقتی دوتا آبجکت با مقادیر یکسان رو مقایسه میکنیم بهمون false برمیگردونه
علت اصلی این اتفاق این هستش که آبجکت ها Reference تایپ هستن , پس وقتی ما دوتا آبجکت رو باهم مقایسه ظاهر یا مقادیر اونها باهم مقایسه نمیشن , آدرس آنها مقایسه میشن
به عکس زیر توجه کنید , هر دوصورت مقایسه شده
@DevTwitter | <Kamyar Kamali/>
بهتره قبل از جواب به دوفهموم اشاره کرد:
1-مقادیر Primitive دادههایی هستند که مستقیماً در یک متغیر ذخیره میشوند. این مقادیر شامل اعداد، بولینها، رشتهها، null و undefined میباشند
مقادیر Reference آبجکتهایی هستند که در حافظه ذخیره میشوند و از طریق یک Reference قابل دسترسی میباشند. این مقادیر شامل آرایهها، آبجکتها و توابع هستند.
خب جالا برسیم به سوال اصلی : وقتی دوتا آبجکت با مقادیر یکسان رو مقایسه میکنیم بهمون false برمیگردونه
علت اصلی این اتفاق این هستش که آبجکت ها Reference تایپ هستن , پس وقتی ما دوتا آبجکت رو باهم مقایسه ظاهر یا مقادیر اونها باهم مقایسه نمیشن , آدرس آنها مقایسه میشن
به عکس زیر توجه کنید , هر دوصورت مقایسه شده
@DevTwitter | <Kamyar Kamali/>
👍41🤣5❤3👎2
اگر میخواید ماشین لرنینگ، تحلیل داده یا علوم داده رو شروع کنید، از مخزن زیر استفاده کنید! Awesome Public Datasets توی GitHub پر از دادههای رایگان و عمومی هست که به موضوعاتی مثل سلامت، اقتصاد و علوم اجتماعی و ... میپردازه.
https://github.com/awesomedata/awesome-public-datasets
@DevTwitter | <Badass Analyst/>
https://github.com/awesomedata/awesome-public-datasets
@DevTwitter | <Badass Analyst/>
🔥19👍9🤣4
This media is not supported in your browser
VIEW IN TELEGRAM
مایکروسافت یک فریمورک 1bit LLM inference داده به اسم bitnet.cpp. که باهاش میشه انواع مدلها مثلا یک ۱۰۰ میلیارد پارامتری را روی CPU و به صورت لوکال ران کرد. با سرعت 6x بیشتر و تا 82% مصرف انرژی کمتر، همه اینها بدون GPU!
https://github.com/microsoft/BitNet
@DevTwitter | <Mehdi Allahyari/>
https://github.com/microsoft/BitNet
@DevTwitter | <Mehdi Allahyari/>
👍43🔥13🤣3👎2
اگر با VSCode حال میکنین
یه نگاهی به Cursor بکنین
اینکه یه دستیار ai دارین که همه فایل هاتون رو میتونه بررسی کنه و بهتون کمک کنه جذابش کرده
@DevTwitter | <Ali Palvane/>
یه نگاهی به Cursor بکنین
اینکه یه دستیار ai دارین که همه فایل هاتون رو میتونه بررسی کنه و بهتون کمک کنه جذابش کرده
@DevTwitter | <Ali Palvane/>
👎49👍24❤6🤣1