COMPΞZ 🧬
Kanalga Telegram’da o‘tish
متخصص کامپیوتر و نرمافزار • سازنده • هنرمند و طراح • مجموعهدار • نویسنده • تحلیلگر • مشاور استارتاپی و ایدهپرداز 𐎲𐎴𐎠𐎼𐎴𐎫𐎹 𐏃𐎢𐎶𐎠𐎫𐎹 We create because the world deserves better code. https://linktr.ee/compez
Ko'proq ko'rsatishMamlakat belgilanmaganToif belgilanmagan
393
Obunachilar
-224 soatlar
-37 kun
+2930 kun
Postlar arxiv
393
+3
خب! به ارتفاعی رسیدم که توش یه نوع خوردنی هست! ما بهش میگیم «اوشگون».
اون سبزینههم خزه تازست!
393
میگه شکوفه نداد و فهمیدم من خاک مناسبی برای او نبودم!؟
نه، اشتباه نکن! اتفاقا تو خاک خوبی بودی، این بذر بوده که اصالت نداشته. به علف هرز هرچقدر هم برسی هرزه! باید بکشی بندازی بیرون! خلاص 👋🏼 پس خودتو سرزنش نکن.
393
Repost from N/a
🚀 GenyConnect v1.3.0 Released
We are proud to announce GenyConnect v1.3.0 — a fresh new release focused on visual polish, better stability, and a more professional XRay VPN client experience.
Download for:
- macOS M Series (Apple Silicon)
- macOS Intel Series x64
- Windows arm64
- Windows x86_64
- OpenSource on Github
393
حالا یه عده هم میگن حالا که راهی پیدا کردیم بعضیها گیر دادن به بد بودن این شیوه! نه اتفاقاً و حقیقتاً خوشحالی داره اما من یک فنی هستم تنها به نتایج مثبتش فکر نمیکنم برای همین هفتهٔ پیش شخصاً نرمافزار سادهساز این موضوع رو نوشتم و همینکه متوجه عمق فاجعش شدم بیخیالش شدم! وقتی به پشت داستان نگاه میکنم متوجه چیزیهایی میشم که یه کاربر ساده بهش اصلاً فکر نمیکنه و براش مهم هم نیست اما نتیجش در دامنهٔ گسترده و حجم بزرگ اصلاً جالب نیست.
میدونید واقعیت رو باید ببینیم! نمونش در مورد قضیهٔ حسابهای اپل که از طریق سیبچه و سیباپ ثبت میشه قبلاً توضیح داده بودم که چه بیاعتباری ننگینی رو داره ایجاد میکنه به اسم ایرانی جماعت اسمش رو هم گذاشتن خدمات اپ استور در ایران.
هر حسابی که به اسم ایرانیها ثبت میکنن به عنوان یک توسعهدهنده برای اپل صادر میشه! یعنی الآن اکوسیستم اپل میلیونها توسعهدهندهٔ ایرانی داره! مسخرست نه؟ که با جعل حسابها و ثبت ad-hocهای مسخره دسترسی برای ثبت هر گوشی به عنوان یک توسعهدهنده ایجاد شده و هربار که اپل متوجه میشه حساب رو مسدود میکنه و اون پشت مشتها میلیونها حساب جعلی با هویت ایرانی آرشیو و مستند میشه.
همین موضوع مشابهش الآن با روشهای دسترسی به اینترنت داره شکل میگیره. اینکه یک جمعیت میلیونی رو دستی دستی دارن هول میدن به سمت هویتهای دروغ بسیار غمانگیزه... ای کاش اینطور نمیشد و این حق ما نبوده و نیست.
این مسائل همشون از بیکفایتی مسئولین سرچشمه میگیره که اصلاً هویت ایرانی براشون مهم نیست! اصلاً مهم نیست...!
393
این واقعاً یک فاجعه است.
ظاهر ماجرا شاید این باشد که مردم دارند برای دسترسی به اینترنت راهحل پیدا میکنند، اما عمق ماجرا خیلی خطرناکتر است. این وضعیت باعث شده کاربر عادی، فقط برای سادهترین نیاز قرن ۲۱، مجبور شود وارد دستکاری لایههای شبکه و جعل مسیر، تغییر DNS، تغییر IP و هزار راهحل غیرطبیعی دیگر شود.
چیزی که در حالت عادی بیشتر در دنیای حملات، مافیاهای سایبری، اسپمرها و شبکههای سوءاستفاده دیده میشود، حالا تبدیل شده به ابزار روزمرهٔ آدمهایی که فقط میخواهند اینترنت داشته باشند.
فاجعه اینجاست که بسیاری حتی نمیدانند این مسیرها چه تبعاتی دارد. وقتی میلیونها کاربر عادی مجبور شوند از روشهای غیرشفاف و غیرعادی برای اتصال استفاده کنند، از بیرون، بخش بزرگی از ترافیک کشور میتواند شبیه رفتار مشکوک، جعلی یا مخرب دیده شود.
نتیجهاش فقط کندی و اختلال نیست. نتیجهاش این است که رنجهای IP ایران، سرویسدهندههای ایرانی و حتی کاربران بیگناه، در گزارشهای بینالمللی بیشتر و بیشتر با رفتارهای غیرعادی، جعلشده، تونلشده یا پرریسک گره میخورند.
این دیگر فقط فیلترینگ نیست؛ این خراب کردن اعتبار فنی و شبکهای یک کشور است.
وقتی مردم را برای ابتداییترین نیازشان به مسیرهای خاکستری هل میدهی، نباید تعجب کنی که خروجیاش یک اکوسیستم آلوده، غیرقابلاعتماد و پر از گزارشهای جعلی و مشکوک شود.
و اگر این روند ادامه پیدا کند، نتیجهاش اصلاً جالب نخواهد بود. نه برای مردم، نه برای کسبوکارها، نه برای سرویسدهندهها، و نه حتی برای همانهایی که فکر میکنند با این مدل کنترل، چیزی را مدیریت کردهاند.
خلاصه که خاک بر سرت کنم مسئول ارتباطات.
393
چقدر سادهاید شماها...
از کسانی که پول ده برابر گوشی رو میگیره که رجیستر کنه که فقط گوشی زهرهماری آنتن بده انتظار داری که با این طرحهای سیم سفید و پرو احساس مسئولیت و به حقِ مسلم مردم فکر کنه؟ پهع!!!
همونطور که پول رجیستری به گوشی ندادم، پول پرو هم به سیمکارت نمیدم. این هزینهها رو خرج سرور خودم بکنم دست و پا شکسته آنلاین باشم سنگینترم تا بدم به این حروم لقمهها.
393
در مورد SNI ظاهراً بهروز رسانی جدید دادن و اتصال ممکن هست؛ اما به این نکته هم باید توجه کنید؛ همین تکنیک در حملات مخفیسازی ترافیک هم استفاده میشه و در سناریوهای مخرب مثل مخفیکردن ترافیک C2 بدافزارها دیده شده.
خدا بگم چیکارتون نکنه یه ملت رو آوارهٔ چه روشهایی کردین! آخه کاربر عادی که فنی نیست و جز اینستاگرام گردیو چهارتا داده ساده شخصی چیزی نداره چرا باید اینهمه با این چیزها درگیر بشه! شماها حرف از تهدید امنیت ملی میزنید ولی یه ملت رو انداختین وسط گودالی از تهدید 😐 بیچاره کاربر ساده و مظلوم... بیخبر از پشت این ماجرا فقط خواستش وصل شدن به این اینترنت کوفتیه! بازش کنید دیگه پدر سگا.
393
یکی از قدرتهای اصلی ++C اینه که دست ما رو برای مدیریت حافظه باز میذاره. چیزی که نادونها عیب میدوننش! مثل چپی کلههای راست پرست!
در واقع میتونیم دقیقتر تصمیم بگیریم دادهها کجا ذخیره بشن، چقدر ظرفیت داشته باشن و چطور مصرف بشن.
اما این آزادی همیشه به معنی بهتر بودن نیست.
گاهی اگر محدودیت مشخصی تعریف نکنیم، برنامه بیدلیل وارد تخصیص حافظهٔ پویا میشه، سربار اضافی ایجاد میکنه و رفتار حافظه هم کمتر قابل پیشبینی میشه. اینجاست که فکر کردن برنامهنویس به عنوان یک کارشناس در اون لحظه بسیار مهمه.
اینجاست که باید بدونیم کجا باید محدودیت صریح تعریف کنیم، نه فقط به رفتار پیشفرض تکیه کنیم.
مثلاً وقتی میدونیم یک لیست نهایتاً ۱۶ یا ۳۲ آیتم خواهد داشت، استفاده از ساختاری مثل
std::inplace_vector میتونه انتخاب بهتری از std::vector معمولی باشه.
چون ظرفیت از قبل مشخصه، حافظه داخل خود آبجکت (شیء) نگهداری میشه و خبری از تخصیصهای غیرضروری در زمان اجرا نیست.
نتیجه چی میشه؟
مصرف حافظه شفافتر میشه، رفتار برنامه قابل پیشبینیتر میشه، و راندمان کلی نرمافزار بالاتر میره.
استانداردهای جدید زبان، مخصوصاً C++23 و C++26، دقیقاً دارن به همین سمت حرکت میکنن:
کدی مدرنتر، امنتر، سریعتر و قابل کنترلتر برای نرمافزارهای جدی و حرفهای.
یعنی یه ذره من از این وضعیت خلاص بشم کتاب جدیدم رو با استاندارد ۲۶ مینویسم! انقدری که مطالب جدید وجود داره و ما ازشون بیخبریم.393
وقتشه بریم سر بخت استاندارد ۲۶ 😑 چیزای جالبی داره به چشمم میخوره!
یک مورد خوب
std::inplace_vector هستش.
مثل std::vector است، ولی حافظهاش را از قبل داخل خودش نگه میدارد و معمولاً از heap حافظه نمیگیرد.
برای مثال روی استاندارد وکتور پیشفرض:
std::vector<int> a;
این وقتی بزرگ میشود، از heap حافظه میگیرد.
در حالی که در مدل جدید به شکل زیر:
std::inplace_vector<int, 10> b;
ظرفیتش از قبل مشخص شده! حداکثر ۱۰ عدد. حافظهٔ همین ۱۰ عدد داخل خود شیء آماده است.
این از نظر کارآیی (پرفرمنس) بسیار بهینست و جاهایی که میدونیم سقف مقادیر چقدر هستن به شدت میتونه مفید باشه.
برای مثال، در پروژهٔ رعد میتونیم همچین چیزی داشته باشیم:
std::inplace_vector<DownloadSegment, 32> segments;
هر دانلود نهایتاً ۳۲ سگمنت دارد.
پس لازم نیست برای سگمنتها vector معمولی بگیریم.
هم سریعتر است و هم تخصیص حافظهٔ کمتری دارد و هم رفتار قابل پیشبینیتر است.
چه زمانی حالت عادی std::vector بهتره؟ زمانی که ما سقف مشخصی از مقادیر رو نمیتونیم تشخیص بدیم! برای مثال ممکنه یه کاربر به تعداد ۱۰ تا یا بینهایت مقدار اضافه کند.
مثال:
std::vector<DownloadItem> downloads;
چون تعداد دانلودهای کاربر ممکن است ۱۰ تا باشد، ممکن است ۵۰۰ تا باشد و ما نمیتوانیم آن را ثابت در نظر بگیریم؛ بنابراین اینجا std::vector بهتر است.
#cpp26 #cpp #std #vector #inplace_vector393
خیلی از برنامهنویسهای قدیمی سیپلاسپلاس برای تبدیل مستقیم بیتهای حافظه از
reinterpret_cast استفاده میکردند.
مثلاً وقتی میخواستند بیتهای یک float را به شکل int ببینند.
مشکل اینجاست که این روش در بسیاری از مواقع طبق استاندارد سیپلاسپلاس رفتار تعریفنشده (Undefined Behavior) دارد؛یعنی شاید امروز درست کار کند، ولی فردا با تغییر کامپایلر یا فعال شدن Optimization ناگهان خراب شود.
از C++20 قابلیتی به نام std::bit_cast اضافه شد تا این کار به شکل استاندارد، ایمن و قابل پیشبینی انجام شود.
تفاوت اصلی:
🔴 reinterpret_cast
میگوید:
«این حافظه را از الان یک نوع دیگر فرض کن.»
🟢 std::bit_cast
میگوید:
«بیتهای این داده را کپی کن و با آنها یک شیء جدید بساز.»
همین تفاوت باعث میشود:
• قوانین حافظه نقض نشوند
• کامپایلر بهتر بهینهسازی کند
• رفتار برنامه قابل پیشبینیتر باشد
• کد مدرنتر و حرفهایتر شود
نمونهٔ قدیمی:
float value = 1.0f;
auto bits =
*reinterpret_cast<std::uint32_t*>(&value);
نمونهٔ جدید
#include <bit>
float value = 1.0f;
auto bits =
std::bit_cast<std::uint32_t>(value);
امروزه در برنامهنویسی سطح پایین، موتور بازی، شبکه، پردازش باینری، سیستمعامل و پروژههای حرفهای، استفاده از std::bit_cast بهجای روشهای قدیمی، بخشی از سبک مدرن سیپلاسپلاس محسوب میشود.
خلاصه:
reinterpret_cast
«حافظه را به زور نوع دیگری ببین»
std::bit_cast
«بیتها را ایمن و استاندارد تبدیل کن»393
پس گفتین که شبیه آمپرِ ماشینه و مسخرم میکنید هان...
تحویل بگیرید! 😏 خالص QML همینو رو نسخهٔ جدید جنیکانکت خواهید دید.
با من شوخی نکنید یهو میبینی میرم یه چیز پشم ریزون میسازم.
یه نقطهٔ ریز توی طراحی هم داره! هرچقدر سرعت بیشتر میشه ذراتِ بیشتری بهم برخورد میکنن!
393
در واقع این باگ به خاطر اینه که من بررسی کانکشن رو روی یک حلقهٔ بینهایت بررسی میکردم و زمانی که به یک timeout میخورد حتی با فعال بودن اتصال TUN هم این شرط ارزیابی اجرا میشد و بعد runtime اصلی برای ارزیابی اتصال رو متوقف میکرد و خود برنامه helper خارج میشد.
انگار که مثلاً فرش زیر پای جنیکانکت رو یهو بکشی! 😄 خودش خودشو راگ میکرد 😐
393
یه باگ عجیب روی جنیکانکت یافتم؛ اگه با سرعت زیاد و حجم بالا دانلود داشته باشید اتصال دنبال مجوز توسط سیستمعامل میگرده که باعث میشه اتصال از بین بره (در حالی که کار میکنه) ولی Uplink و Downlink یهو صفر میشه و مجبور میشید دوباره قطع و وصلش کنید.
این باگ حل شد! منتظر اعلان روی نرمافزار باشید وقتی بهروز رسانی بدم خودش بهتون اطلاع خواهد داد. 😎
393
البته زیاد هم به شرف ربطی نداره، بعضیها پولشو ندارن و بعضیها هم نمیدونن چطور باید فعالش کنن. 👋🏼 به خیلی از افراد پیامک رفته که حتی نمیدونه درگاه بانکی چی هست حتی.
