Forwarded from Arsham's Tech Mastery (Arsham)
تست ستون پروژست!
و همونطور که خونه هایی هم هستن که قدیمی و کاه گلی اند و ستون ندارن، و یه بارون بزنه هم سقفشون میریزه، یا نمیشه به راحتی یا کلا بهشون طبقه اضافه کرد، پروژه هایی هم هستن که تست (ستون) ندارن، و یه فیچر جدید بخوای اضافه کنی تمام فیچر های قبلی میترکه!
زیاد میشنوم که میگن تست به دیباگ کردن کد کمک میکنه، اما این ممکنه یکم گمراه کننده باشه.
این نکته کلیدی فراموش نشه که در خیلی از مدل های تست از جمله unit و integration، ما برای سناریو هایی تست مینویسیم، که سناریو اش رو میدونیم!
در این مدل تست ها، اگه باگی رو با تست دستی نتونیم پیدا کنیم، تست اتومات هیچ کمکی به ما نمیکنه.
پس در واقع با تست اتومات داریم استحکام چیزی که داریم رو تضمین میکنیم.
ولی خب، تو یه سری مدل تست ها مثل e2e و load test هم مجددا سناریو رو میدونیم، با اینحال ممکنه قسمتی از فلو (flow)، مطابق انتظار پیش نره، لود تست که کلا داستان خاص خودشو داره،
ولی تو e2e هم مجددا اگه ایراد پیشبینی نشده ای پیدا بشه، احتمالا در نقاط اتصال هست، و e2e هم تو پیدا کردن باگ لاجیکی غیرمنتظره، کمکی به ما نمیکنه.
<--×-->
دلیل مقاومت بعضی تیم ها و بهونه هایی مثل کمبود وقت برای نوشتن تست، شاید به خاطر ناملموس بودن ارزش افزوده تست ها باشه. با اینحال، تضمین کیفیت و صحت کد های قبلی، موضوع مهم و با ارزشیه، که با نوشتن تست اتومات بدست میاد.
اهمیت این موضوع رو کدبیس های بزرگتر، خیلی بیشتر به چشم میاد.
<--×-->
راجع به دست و پا گیر بودن تست تو فاز های اولیه توسعه، عده ای معتقدن که اگه نیازمندی بیزنس شفاف نباشه، ما هم خود کد و هم تست هاشو باید مدام تغییر بدیم، ولی سوال اصلی اینجاست که چرا نیازمندی بیزنس انقدر باید متغیر (و گنگ) باشه که ورودی و خروجی سیستم بارها، به کل تغییر کنه؟
غیر منطقی به نظر میاد،
اما منم بارها شاهدش بودم!
ولی مسئله اینجا تست نیست،
باید به خیلی قبل ترش نگاه کنیم،
همون جایی که نیازمندی بیزنس داره مشخص میشه.
<--×-->
از خوبی های جانبی تست هم میشه به "مثال بودن" اش اشاره کرد. با فرض دنیای ایده آل، خوندن تست های یه پروژه خیلی ساده تر از خوندن کد خود پروژست، و از رو تست هاش میشه به سادگی فهمید که چیکار میکنه و ورودی و خروجی مورد انتظار سیستم چی هست.
البته خب تو دنیای واقعی و غیر ایده آل، ممکنه یه دولوپر تازه کار مدعی سینیوریتی همین تست هارو فراپیچیده (over complex) کنه.
یه مزیت جانبی دیگه تست هم میتونه بحث تمیزی کد باشه، کدی که تمیز نباشه به راحتی قابل تست نیست، پس در واقع تست مارو مجبور میکنه که کد تمیز تری بنویسیم.
<--×-->
ولی خب در کل نظر شما راجع به تست چیه؟
مزایا؟ معایب؟ پیشنهاد؟ انتقاد؟ به من، به پست، به کانال و... 🙂🙌🏼
و همونطور که خونه هایی هم هستن که قدیمی و کاه گلی اند و ستون ندارن، و یه بارون بزنه هم سقفشون میریزه، یا نمیشه به راحتی یا کلا بهشون طبقه اضافه کرد، پروژه هایی هم هستن که تست (ستون) ندارن، و یه فیچر جدید بخوای اضافه کنی تمام فیچر های قبلی میترکه!
زیاد میشنوم که میگن تست به دیباگ کردن کد کمک میکنه، اما این ممکنه یکم گمراه کننده باشه.
این نکته کلیدی فراموش نشه که در خیلی از مدل های تست از جمله unit و integration، ما برای سناریو هایی تست مینویسیم، که سناریو اش رو میدونیم!
در این مدل تست ها، اگه باگی رو با تست دستی نتونیم پیدا کنیم، تست اتومات هیچ کمکی به ما نمیکنه.
پس در واقع با تست اتومات داریم استحکام چیزی که داریم رو تضمین میکنیم.
ولی خب، تو یه سری مدل تست ها مثل e2e و load test هم مجددا سناریو رو میدونیم، با اینحال ممکنه قسمتی از فلو (flow)، مطابق انتظار پیش نره، لود تست که کلا داستان خاص خودشو داره،
ولی تو e2e هم مجددا اگه ایراد پیشبینی نشده ای پیدا بشه، احتمالا در نقاط اتصال هست، و e2e هم تو پیدا کردن باگ لاجیکی غیرمنتظره، کمکی به ما نمیکنه.
<--×-->
دلیل مقاومت بعضی تیم ها و بهونه هایی مثل کمبود وقت برای نوشتن تست، شاید به خاطر ناملموس بودن ارزش افزوده تست ها باشه. با اینحال، تضمین کیفیت و صحت کد های قبلی، موضوع مهم و با ارزشیه، که با نوشتن تست اتومات بدست میاد.
اهمیت این موضوع رو کدبیس های بزرگتر، خیلی بیشتر به چشم میاد.
<--×-->
راجع به دست و پا گیر بودن تست تو فاز های اولیه توسعه، عده ای معتقدن که اگه نیازمندی بیزنس شفاف نباشه، ما هم خود کد و هم تست هاشو باید مدام تغییر بدیم، ولی سوال اصلی اینجاست که چرا نیازمندی بیزنس انقدر باید متغیر (و گنگ) باشه که ورودی و خروجی سیستم بارها، به کل تغییر کنه؟
غیر منطقی به نظر میاد،
اما منم بارها شاهدش بودم!
ولی مسئله اینجا تست نیست،
باید به خیلی قبل ترش نگاه کنیم،
همون جایی که نیازمندی بیزنس داره مشخص میشه.
<--×-->
از خوبی های جانبی تست هم میشه به "مثال بودن" اش اشاره کرد. با فرض دنیای ایده آل، خوندن تست های یه پروژه خیلی ساده تر از خوندن کد خود پروژست، و از رو تست هاش میشه به سادگی فهمید که چیکار میکنه و ورودی و خروجی مورد انتظار سیستم چی هست.
البته خب تو دنیای واقعی و غیر ایده آل، ممکنه یه دولوپر تازه کار مدعی سینیوریتی همین تست هارو فراپیچیده (over complex) کنه.
یه مزیت جانبی دیگه تست هم میتونه بحث تمیزی کد باشه، کدی که تمیز نباشه به راحتی قابل تست نیست، پس در واقع تست مارو مجبور میکنه که کد تمیز تری بنویسیم.
<--×-->
ولی خب در کل نظر شما راجع به تست چیه؟
مزایا؟ معایب؟ پیشنهاد؟ انتقاد؟ به من، به پست، به کانال و... 🙂🙌🏼
❤🔥4🙊2
احتمالا دیده باشید ولی سازندهی ردیس چند هفته پیش یک پستی منتشر کرده با این عنوان که «ما درحال نابود کردن نرمافزار هستیم»! و یکی از مواردی که مطرح (گلایه میکنه درواقع) میکنه و بهنظرم جالب بود این هست:
باقی موارد رو هم پیشنهاد میکنم بخونید، کوتاه هست:
🔗 antirez.com/news/145
ما در حال نابود کردن نرمافزار هستیم وقتی که به برنامهنویسان جدید میگوییم: «چرخ را دوباره اختراع نکنید!». اما، اختراع دوباره چرخ است که به شما یاد میدهد چیزها چگونه کار میکنند و اولین قدم برای ساخت چرخهای جدید و متفاوت است.
باقی موارد رو هم پیشنهاد میکنم بخونید، کوتاه هست:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍1🙊1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁8🙊1
Forwarded from Linuxor ?
وقتی دارین سرچ بار درست میکنین یوزر هر کاراکتری وارد کرد فورا به سمت سرور انتقالش ندید Debounce هم در نظر بگیرین یه تایمی صبر کنید که شاید چیز دیگه ای هم تایپ کرد بعد ارسال کنید مثلا 300 میلی ثانیه درواقع با هر کاراکتر جدید اگه تایم درخواست قبلی فرا نرسیده بود اون درخواستو ابطالش کنید و به سرور ارسال نکنید
توی حالت عادی
/search?q=h
/search?q=he
/search?q=hel
/search?q=hell
/search?q=hello
پنج تا درخواست برای hello میره ولی نیازی نیست این همه درخواست بره. توی سرعت تایپ معمولی با دیبانس فقط
/search?q=hello
ارسال میشه و فشار روی سرور کم میشه.
@Linxuor
توی حالت عادی
/search?q=h
/search?q=he
/search?q=hel
/search?q=hell
/search?q=hello
پنج تا درخواست برای hello میره ولی نیازی نیست این همه درخواست بره. توی سرعت تایپ معمولی با دیبانس فقط
/search?q=hello
ارسال میشه و فشار روی سرور کم میشه.
@Linxuor
👍7🙊1
Forwarded from Sadra Codes
YouTube
Animation vs. Coding
/(^∇^) ╯ https://brilliant.org/alanbecker
30-day free trial and 20% off 👍
🖐 ASK ME ANYTHING! ► https://www.youtube.com/noogai89/join
👕 MERCH! ► https://alanbecker.shop
💬DISCORD SERVER ► https://discord.gg/alanbecker
🕹️ANIMATORS VS GAMES ► @AnimatorsVSGames…
30-day free trial and 20% off 👍
🖐 ASK ME ANYTHING! ► https://www.youtube.com/noogai89/join
👕 MERCH! ► https://alanbecker.shop
💬DISCORD SERVER ► https://discord.gg/alanbecker
🕹️ANIMATORS VS GAMES ► @AnimatorsVSGames…
🙊1
کد ملی ایران ۱۰ رقمی هست و رقم آخرش (رقم دهم) نقش عدد کنترل رو داره. حالا چطوری بفهمیم کد ملی درست هست؟
۱. رقم آخر رو جدا کنید:
- مثلاً در کد
930-011000-4رقم آخر یا همون عدد کنترل ۴ هست.
۲. بقیه ارقام رو ضرب در جایگاهشون کنید:
- از رقم اول تا نهم (از چپ به راست) رو به ترتیب در ۱۰ تا ۲ ضرب کنید:
(رقم۱×۱۰) + (رقم۲×۹) + ... + (رقم۹×۲)
- مثلاً برای کد
930011000: (۹×۱۰) + (۳×۹) + (۰×۸) + (۰×۷) + (۱×۶) + (۱×۵) + (۰×۴) + (۰×۳) + (۰×۲) = ۹۰ + ۲۷ + ۰ + ۰ + ۶ + ۵ + ۰ + ۰ + ۰ = ۱۲۸
۳. حاصل رو تقسیم بر ۱۱ کنید:
- مجموع بالا (مثلاً ۱۲۸) رو بر ۱۱ تقسیم و باقیمانده رو حساب کنید
- مثلاً:
۱۲۸ ÷ ۱۱ = ۱۱ → باقیمانده = ۷
۴. عدد کنترل رو بررسی کنید:
- اگر باقیمانده ۰ یا ۱ بود، عدد کنترل باید همون عدد باشه.
- اگر باقیمانده بیشتر از ۱ بود، عدد کنترل باید برابر
(باقیمانده - ۱۱) باشه. - در مثال بالا: باقیمانده ۷ → ۷-۱۱
=۴. پس عدد کنترل باید ۴ باشه که درست هست!پ.ن: این روش فقط یک بررسی اولیه هست و کدهای غیرواقعی هم ممکنه از این تست عبور کنن.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🙊1
Forwarded from Software Philosophy
۱۰ برابر شدن سرعت TypeScript با پورت کامپایلر به GO
در این ویدئو Andres Hejlsberg (خالق تایپاسکریپت و سیشارپ) توضیح میدهد که چگونه با پورت کردن کدهای کامپایلر TypeScript به GO، سرعت کامپایل را 10x بهتر کردهاند!
او همچنین توضیح میدهد که چرا زیرساخت JavaScript برای این کار مناسب نیست. در حقیقت این زبان بیشتر برای کارهای UI طراحی شده بوده و زیرساختهای لازم برای کارهای performance-intensive مانند این کار را ندارد.
برای من خیلی جالب بود خالق سیشارپ، زبان GO را برای این کار انتخاب کرده، پس مستندات مربوط به این تصمیم را خواندم.
https://github.com/microsoft/typescript-go/discussions/411
اولین نکته جالب این بود که چقدر بدون تعصب و با ذهن باز زبانهای مختلف رو بررسی کردن.
با توجه به اینکه هر دو زبان C#, GO از لحاظ پرفورمنسی بسیار خوب هستند، یکی از مهمترین دلایل انتخاب GO تشابه بسیار بالای سینتکس آن با TypeScript بوده است.
کامپایلر قبلی تایپاسکریپت، با خود تایپاسکریپت نوشته شده و تیم نمیخواستند که کل آن را بازنویسی کنند.
در حقیقت هدف rewrite کردن نبوده، بلکه port کردن بوده.
آنها دنبال پورت کردن آن به یک زبان با پرفورمنس بالا بودند که تشابه سینتکسی بالایی داشته باشد تا عملیات پورت بتواند راحتتر انجام شود.
از بین زبانهای C#, GO و Rust، زبان گو تشابه سینتکسی بیشتری با تایپاسکریپت داشته و در نهایت انتخاب شده.
به نظرم نحوه انتخاب زبان برای این کار توسط خالق سیشارپ و تایپاسکریپ، درسهای تکنیکال و بیزسنی زیادی برای یاد گرفتن داره. نظر شما چیه؟
https://www.youtube.com/watch?v=pNlq-EVld70
#مهران_داودی (لینکدین - بلاگ)
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
در این ویدئو Andres Hejlsberg (خالق تایپاسکریپت و سیشارپ) توضیح میدهد که چگونه با پورت کردن کدهای کامپایلر TypeScript به GO، سرعت کامپایل را 10x بهتر کردهاند!
او همچنین توضیح میدهد که چرا زیرساخت JavaScript برای این کار مناسب نیست. در حقیقت این زبان بیشتر برای کارهای UI طراحی شده بوده و زیرساختهای لازم برای کارهای performance-intensive مانند این کار را ندارد.
برای من خیلی جالب بود خالق سیشارپ، زبان GO را برای این کار انتخاب کرده، پس مستندات مربوط به این تصمیم را خواندم.
https://github.com/microsoft/typescript-go/discussions/411
اولین نکته جالب این بود که چقدر بدون تعصب و با ذهن باز زبانهای مختلف رو بررسی کردن.
با توجه به اینکه هر دو زبان C#, GO از لحاظ پرفورمنسی بسیار خوب هستند، یکی از مهمترین دلایل انتخاب GO تشابه بسیار بالای سینتکس آن با TypeScript بوده است.
کامپایلر قبلی تایپاسکریپت، با خود تایپاسکریپت نوشته شده و تیم نمیخواستند که کل آن را بازنویسی کنند.
در حقیقت هدف rewrite کردن نبوده، بلکه port کردن بوده.
آنها دنبال پورت کردن آن به یک زبان با پرفورمنس بالا بودند که تشابه سینتکسی بالایی داشته باشد تا عملیات پورت بتواند راحتتر انجام شود.
از بین زبانهای C#, GO و Rust، زبان گو تشابه سینتکسی بیشتری با تایپاسکریپت داشته و در نهایت انتخاب شده.
به نظرم نحوه انتخاب زبان برای این کار توسط خالق سیشارپ و تایپاسکریپ، درسهای تکنیکال و بیزسنی زیادی برای یاد گرفتن داره. نظر شما چیه؟
https://www.youtube.com/watch?v=pNlq-EVld70
#مهران_داودی (لینکدین - بلاگ)
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
GitHub
Why Go? · microsoft typescript-go · Discussion #411
Language choice is always a hot topic! We extensively evaluated many language options, both recently and in prior investigations. We also considered hybrid approaches where certain components could...
👍2🌚1🙊1
این شبیهساز Mac OS رو یکی از دوستان معرفی کرد که ظاهرا خیلی راحتتر نسبت به بقیه روشها راهاندازی میشه.
https://github.com/notAperson535/OneClick-macOS-Simple-KVM
https://github.com/notAperson535/OneClick-macOS-Simple-KVM
❤🔥2🙊1
Forwarded from Geek Alerts
گوگل Gemini الان ویدیوهارو درک میکنه، یعنی نسخهای که داخل AI Studio هست میشه بهش یه ویدیوی یوتیوب داد، بعد میاد صدا رو رونویسی میکنه و هر ثانیه فریم ویدیورو هم بررسی میکنه.
کارهای زیادی میشه کرد، مثلا بخواید مکالمات داخل ویدیو رو بهتون بده، یا بخش خاصی رو توی ویدیو براتون پیدا کنه، حتی بگید خلاصه ویدیو رو به فارسی بهتون بگه.
فعلا پیشنمایش هست و اگه بهش دسترسی داشته باشید حداکثر ۸ تا ویدیو در روز میشه پردازش کرد و زمان ویدیو هم میتونه با مدل پرو تا ۲ ساعت و فلش تا ۱ ساعت باشه.
🔗 https://aistudio.google.com
🤓 @geekalerts
کارهای زیادی میشه کرد، مثلا بخواید مکالمات داخل ویدیو رو بهتون بده، یا بخش خاصی رو توی ویدیو براتون پیدا کنه، حتی بگید خلاصه ویدیو رو به فارسی بهتون بگه.
فعلا پیشنمایش هست و اگه بهش دسترسی داشته باشید حداکثر ۸ تا ویدیو در روز میشه پردازش کرد و زمان ویدیو هم میتونه با مدل پرو تا ۲ ساعت و فلش تا ۱ ساعت باشه.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯3👀1🙊1
- Cross-platform graphical process/system monitor in Terminal
https://github.com/ClementTsang/bottom
- Modern replacement for "ls"
https://github.com/ogham/exa
- A cat(1) clone with syntax highlighting and Git integration
https://github.com/sharkdp/bat
- A cross-platform & modern OpenGL terminal emulator
https://github.com/alacritty/alacritty
https://github.com/ClementTsang/bottom
- Modern replacement for "ls"
https://github.com/ogham/exa
- A cat(1) clone with syntax highlighting and Git integration
https://github.com/sharkdp/bat
- A cross-platform & modern OpenGL terminal emulator
https://github.com/alacritty/alacritty
🔥1🙊1
Mahi in Tech
ویرایش: الان هزینهی خدماتش رو نزدیک به دوبرابر کرد، دیگه اصلا بهدرد نمیخوره با این اوصاف :))
لیارا در یک حرکت خیلی منطقی هزینهها رو مجدد دوبرابر کرد 😐 برای دو سرویس با minimumترین مشخصات، الان نزدیک ۱.۴۰۰ داره میگیره (monthly).
من که دیگه به هیچوجه ازش سرویسی تهیه نمیکنم، به شما هم پیشنهاد میکنم سمتش نرید 😄
من که دیگه به هیچوجه ازش سرویسی تهیه نمیکنم، به شما هم پیشنهاد میکنم سمتش نرید 😄
Please open Telegram to view this post
VIEW IN TELEGRAM
🙊5👍3
Forwarded from Geeky net
امروز امدم از jcal استفاده کنم دیدم یه باگی داره که سال کبیسه رو حساب نکرده! امدم ایمیل بزنم گفتم اول گیت هاب رو چک کنم دیدم سازندش فوت شده یه حس عجیبی بهم دست، اشکان قاسمی سال ها بیش این برنامه رو نوشته بود و هنوز دارند ازش استفاده میکنند. یه بخش قشنگ و ناراحت کننده دنیای نرم افزار آزاد و گنو.
💔22🙊1
اخیرا باگ امنیتیای پیدا شده که با دستکاری هدر میشه middlewareـها رو دور زد! و خب میتونه مشکل ایجاد کنه
توضیحات بیشتر:
zhero-web-sec.github.io/research-and-things/nextjs-and-the-corrupt-middleware
Please open Telegram to view this post
VIEW IN TELEGRAM
zhero_web_security
Next.js and the corrupt middleware: the authorizing artifact
CVE-2025-29927
🍓2👻2🙊1