COMPΞZ 🧬
393 subscribers
1.85K photos
52 videos
24 files
736 links
متخصص کامپیوتر و نرم‌افزار • سازنده • هنرمند و طراح • مجموعه‌دار • نویسنده • تحلیل‌گر • مشاور استارتاپی و ایده‌پرداز

𐎲𐎴𐎠𐎼𐎴𐎫𐎹 𐏃𐎢𐎶𐎠𐎫𐎹

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
COMPΞZ 🧬
GM ~ 65536 Square https://warpcast.com/compez.eth/0xfce0992b
راز نهفتهٔ قطعهٔ 6️⃣3️⃣5️⃣5️⃣6️⃣این‌طور هست

در این تصویر، اعداد مفهومی ۰ و ۱ را در مرکز خواهید یافت که از طریق تولید تصادفی رنگ، بین روشن و تاریک تغییر می‌کنند. با دقت بیشتر، هشت ذره‌ٔ اطراف را مشاهده خواهید کرد که هرکدام مفهوم خاص خود را دارند.

🔹 راز تراکنش در بلاکچین
۶۴ بلوک اول، با اندازه‌ی کوچک‌تر، نشان‌دهنده‌ٔ یک تراکنش روی بلاکچین هستند. مقدار واقعی، ۶۴ کاراکتر بعد از 0x است که نشان‌دهنده‌ی آدرس اولین تراکنش خریدار است و توسط Punk 6529 تأیید شده است.

🔹 یگانگی اثر
این اثر کاملاً منحصربه‌فرد است، زیرا هر بار که تولید می‌شود، تمام بلوک‌های ایجاد شده متفاوت از یکدیگر خواهند بود. یعنی حالت‌های آن‌ها (۰/۱) تغییر می‌کنند و فقط تعداد محدودی از آن‌ها می‌توانند تولید شوند.

🔹 ویژگی‌های اثر ۳۶,۸۶۴
عدد ۳۶,۸۶۴ یک عدد مرکب زوج است که از حاصل‌ضرب دو عدد اول تشکیل شده است.

🔹 نسل بعدی این اثر، عدد ۶۵,۵۳۶ خواهد بود!
عدد ۶۵,۵۳۶ یک عدد طبیعی است که در علوم مختلف، به‌ویژه در علوم کامپیوتر و ریاضیات، اهمیت زیادی دارد.

چرا ۶۵,۵۳۶ مهم است؟
🔹 توان ۲:
عدد ۶۵,۵۳۶ برابر با ۲^۱۶ است، یعنی ۲ را ۱۶ بار در خودش ضرب کنیم. این ویژگی آن را در نمایش باینری، آدرس‌دهی حافظه، و سایر حوزه‌هایی که توان‌های ۲ اهمیت دارند، مهم می‌سازد.

🔹 نمایش باینری:
در قالب باینری، ۶۵,۵۳۶ به صورت 10000000000000000 نمایش داده می‌شود. این ساختار به دلیل داشتن ۱۶ صفر متوالی، در پردازش‌های کامپیوتری کاربرد زیادی دارد.

🔹 حافظه:
در محاسبات، اندازه‌های حافظه معمولاً بر اساس توان‌های ۲ تعیین می‌شوند. ۶۵,۵۳۶ بایت معادل ۶۴ کیلوبایت است که یک واحد مناسب برای اندازه‌گیری حافظه محسوب می‌شود.

🔹 پروتکل اینترنت (IP):
در IPv4، ۶۵,۵۳۶ تعداد پورت‌های TCP/IP است که نقش مهمی در ارتباطات شبکه دارد.

🔹 اهمیت در ریاضیات:
عدد ۶۵,۵۳۶ به‌عنوان یک توان از ۲، در مفاهیم رشد نمایی و سایر محاسبات ریاضی کاربرد دارد.

🔹 علوم کامپیوتر:
بسیاری از سیستم‌های کامپیوتری بر پایه معماری ۱۶ بیتی طراحی شده‌اند و این عدد در مدیریت داده‌ها و آدرس‌دهی بسیار مهم است.

🔹 بیت‌کوین و بلاک‌های فشرده:
در بیت‌کوین، محدودیت ۱۶ بیتی در شاخص تراکنش‌ها باعث شده بود که هر بلاک فقط ۶۵,۵۳۶ تراکنش داشته باشد. این محدودیت در بلاک‌های بزرگ‌تر از ۴ مگابایت مشکل‌ساز می‌شد، اما با تغییر به ۳۲ بیت، مشکل برطرف شد.

🔹 جمع‌بندی:
عدد ۶۵,۵۳۶ به دلیل نمایش باینری، ویژگی توان ۲، و نقش کلیدی در آدرس‌دهی حافظه، شبکه، و برنامه‌های محاسباتی، اهمیت زیادی در علوم کامپیوتر و ریاضیات دارد.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
COMPΞZ 🧬
راز نهفتهٔ قطعهٔ 6️⃣3️⃣5️⃣5️⃣6️⃣این‌طور هست در این تصویر، اعداد مفهومی ۰ و ۱ را در مرکز خواهید یافت که از طریق تولید تصادفی رنگ، بین روشن و تاریک تغییر می‌کنند. با دقت بیشتر، هشت ذره‌ٔ اطراف را مشاهده خواهید کرد که هرکدام مفهوم خاص خود را دارند. 🔹 راز تراکنش…
جزئیات فنی و علمی‌تر.

انقدر خاص بود که براش یه قرارداد اختصاصی نوشتم.

قراردادی با عنوان CPZ داره که خودش مشتق شدهٔ قرارداد ERC721Creator از نوع پروکسی هست که از قرارداد Proxy ارث‌بری می‌کنه، درواقع چنین کلاس انتزاعی داریم:

abstract contract Proxy {}


این قرارداد انتزاعی یک تابع بازگشتی ارائه می‌کنه که با استفاده از ماشین مجازی اتریوم (EVM) همهٔ تماس‌ها رو به قرارداد دیگری واگذار می‌کنه.
Unreal Engine vs Unity ⚡️

فرق این دو موتور چیه؟ 🎮

هر دو با ++C ساخته شدن، اما Unreal Engine (UE) برای بازی‌های AAA طراحی شده! محیطی پیچیده، قدرتمند و مملو از قابلیت‌های پیشرفته که دستت رو در توسعهٔ بازی‌های گرافیکی سطح بالا باز می‌ذاره. اگر می‌خوای یه بازی خارق‌العاده بسازی که گیمر رو میخکوب کنه، UE انتخاب اولته!

مزایای UE:
تعامل قوی با ++C
سیستم Blueprint برای توسعه سریع‌تر
گرافیک فوق‌العاده با جدیدترین تکنولوژی‌های نورپردازی و فیزیک
کاملاً رایگان، تا وقتی که درآمد بازی از ۱ میلیون دلار بیشتر بشه! بعدش فقط ۵٪ سود رو بهشون می‌دی.

حالا یونیتی چی؟
اگرچه Unity هم موتور قدرتمندیه، اما بیشتر برای بازی‌های موبایل و دوبعدی استفاده می‌شه. نمونه موفقش؟ Clash of Clans که با یونیتی ساخته شده!
اما از نظر هزینه، به‌صرفه نیست، چون نسخه رایگانش محدودیت‌های زیادی داره.

پس انتخاب من؟
بدون شک Unreal Engine! چون اگر بازی AAA می‌سازی، UE یه سر و گردن بالاتر از بقیه‌ست.

🔥 تا بحث بعدی، به‌درود
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
تابع std::ranges::starts_with در استاندارد ۲۳ معرفی شده‌ است که بررسی می‌کند آیا یک محدوده با یک محدودهٔ دیگر شروع می‌شود یا خیر. تابع ابتدا اندازه دو محدوده ([first1, last1) و [first2, last2)) را مقایسه می‌کند. اگر اندازه محدوده اول کوچکتر از اندازه محدوده دوم باشد، تابع false را برمی‌گرداند.

به طور کلی بررسی اینکه آیا یک رشته با یک پیشوند خاص شروع می‌شود یا خیر، یا اینکه بررسی شروع یک دنبالهٔ خاص در یک آرایه را ارزیابی می‌کند.

import std;

bool is_even(int x) {
return x % 2 == 0;
}

auto main() -> int {
int numbers[] = {1, 2, 3, 4, 5};
bool starts_with_even = std::ranges::starts_with(numbers, numbers + 2, is_even);
if (starts_with_even) {
std::println("Yes, the first two numbers are even.");
} else {
std::println("No, the first two numbers are not even.");
}
}


در این مثال، تابع std::ranges::starts_with بررسی می‌کند که آیا آرایه numbers با دو عدد زوج شروع می‌شود یا خیر. برای این کار، از تابع is_even به عنوان تابع مقایسه استفاده می‌شود.

#cpp20 #cpp23 #ranges #starts_with #ranges_starts_with #چالش #سی‌روزه #رمضان #روز_بیست_و_هفتم
COMPΞZ 🧬
تابع std::ranges::starts_with در استاندارد ۲۳ معرفی شده‌ است که بررسی می‌کند آیا یک محدوده با یک محدودهٔ دیگر شروع می‌شود یا خیر. تابع ابتدا اندازه دو محدوده ([first1, last1) و [first2, last2)) را مقایسه می‌کند. اگر اندازه محدوده اول کوچکتر از اندازه محدوده…
بخش تخصصی دوم (به‌روز رسانی Solidity) |جایگزین‌‌سازی (باز‌نویسی) توابع

در سالیدیتی، قراردادهای پایه (Base Contract) می‌توانند رفتاری که توابع آن‌ها انجام می‌دهند را با استفاده از ارث‌بری (Inheritance) تغییر دهند، به شرطی که این توابع با کلیدواژه virtual مشخص شده باشند. تابعی که جایگزین تابع دیگر می‌شود (Overriding Function) باید از کلیدواژه override در تعریف خود استفاده کند.

محدودیت‌های تغییر رفتار در باز‌نویسی:

- تنها محدودیت در جایگزین‌سازی، تغییر دسترسی (Visibility) تابع از external به public است.
- قابلیت تغییر وضعیت (Mutability) تابع می‌تواند به حالت سخت‌گیرانه‌تری تغییر کند.

این ترتیب به صورت زیر است:
- وضعیت nonpayable می‌تواند به view و pure تغییر یابد.
- وضعیت view می‌تواند به pure تغییر یابد.
- وضعیت payable یک استثنا است و نمی‌تواند به هیچ حالت دیگری از Mutability تغییر یابد.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Base {
function foo() virtual external view {}
}

contract Middle is Base {}

contract Inherited is Middle {
function foo() override public pure {}
}


#solidity #web3 #update #ether #اتریوم
دنیا پر از مگس‌هایی است که به زنبور‌ها می‌گویند چطور عسل بسازند! 🐝
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3💯2👍1👀1
هر موقع یک فایل دیجیتالی روی بستر شبکهٔ بلاکچین بارگذاری می‌شه؛ به عنوان توکن شناخته می‌شه. در اصل شبکه یک قرارداد هوشمند به فایل ضمیمه می‌کنه و این ترکیب رو به عنوان مفهوم توکن می‌شناسه. ماهیت و جنس این موضوع یک قرارداد هوشمند یا به عنوانی یک سند مالکیت هستش که به نام خالق اثر ثبت می‌شه و منحصراً روی تمامی حالاتی که به نوعی با حقوق مالکیت مرتبط هستند اشاره می‌کنه.

بخشی از دنیای FOSS برای همین موضوع هست که ما به واسطهٔ خاصیت‌های ساخت و توسعه، تغییرات و مجوز‌های ذکر شده، مشخص می‌کنیم که خالق چه چیزی هستیم و به مرور زمان ارزش دارایی ما هرچند متن‌باز، به چه سطحی می‌رسه! به 💸بیت‌کوین بنگرید، اما من در خصوص توکن‌های غیر قابل تعویض توضیح خواهم داد که اصلاً چی هستند.

در مورد بلاک‌چین خودتون تحقیق کنید توضیحات مفصل isj" من فقط یک ریسمانی از برداشت‌های خودم رو بهتون انتقال میدم تا بدونید قضیهٔ NFTs‌ها چه چیزی هستش.

بنابراین، با شِمایه‌های متعددی که، توکن‌های غیر قابل تعویض (NFT) از طریق کدهای هوشمند بلاکچین ارائه میده، ارزش اثرات خلق شده از کد و غیر کد به شکل‌های مختلفی تجلای اون‌ها می‌شه که به صورت زیر هستش:

۱) مالکیت و اثبات اصالت: ارزش اصلی NFT به خاطر مالکیت دارایی‌های دیجیتال و اثرات خلق شده از کد بوده و با کمک کدهای هوشمند بلاکچین، مالکیت این دارایی‌ها به صورت یکتا و غیر قابل تعویض تأیید می‌شود. این اصالت نشان‌دهنده‌ٔ محتوای منحصر به فرد و اثر خلق شده توسط خالق است که می‌تواند به طور قانونی تأیید شود. این به معنای این است که شما واقعاً مالک آن اثر هستید و می‌توانید به عنوان مالک آن ادعا کنید، چرا که از نظر حقوقی و قانونی اهمیت دارد و به شما امکان حصول از حقوق مالکیت و کنترل کامل بر اثر خلاقیتی را می‌دهد.

۲) انتقال‌پذیری و بازار معاملاتی: کدهای هوشمند به نحوی طراحی شده‌اند که انتقال‌پذیری NFT را بین کاربران امکان‌پذیر می‌سازند. این امکان ایجاد بازار معاملاتی برای دارایی‌ها و اثرات خلق شده را فراهم می‌کند و باعث ارتقاء ارزش آن‌ها می‌شود.

۳) تعیین شرایط و حقوق خالق: کدهای هوشمند می‌توانند در قراردادهای NFT شرایط معینی را برای استفاده از دارایی‌ها و اثرات خلق شده را تعیین کنند. به عنوان مثال، می‌توانند نسبت به هر فروش دومی یک مبلغ به خالق تعلق دهند که این امر به هنرمندان و خالقان اثر ارتقاء انگیزه می‌دهد و حتی مالکات دوم و بعدی را تشویق برای معاملات بیشتر جهت کسب ارزش بیشتر از اثر را فراهم می‌سازد.

۴) جمع‌آوری کارهای هنری: کدهای هوشمند می‌توانند نحوه‌ٔ جمع‌آوری کارهای هنری و اثرات خلق شده را تنظیم کنند. این اجازه را به ارتباط‌دهندگان و طرف‌های خریدار این دارایی‌ها می‌دهد و باعث افزایش ارتباطات فرهنگی و هنری می‌شود. از طریق خرید NFT، شما نه تنها از آثار هنری و خلاقیت هنرمندان حمایت می‌کنید، بلکه ارتباط عمیق‌تری با آنها ایجاد می‌شود. این ارتباط‌گیری اجتماعی به هنرمندان انگیزه می‌دهد و آن‌ها را تشویق می‌کند تا کارهای خلاقانه‌تری انجام دهند.

۵) اثبات منشأ و ارزش کار: کدهای هوشمند می‌توانند مشخصات منحصر به فرد هنرمندان و خالقان اثر را در NFT ثبت کنند. این امر می‌تواند در تعیین ارزش و تاریخچهٔ کار هنری و اثر خلق شده از کد موثر باشد که مشابه آن در گیت‌هاب به وضوح قابل اثبات است.

۶) اقتصادی‌سازی هنری و محتوای دیجیتال: NFT‌ها به عنوان یک بازار معاملاتی برای هنرمندان و خالقان محتوا کار می‌کنند. این امکان را فراهم می‌کنند تا از آثار خلاقیتی آن‌ها به عنوان یک دارایی دیجیتال بهره‌مند شوند و از آن کسب درآمد کنند و هر خدمات که در راستای آن می‌دهند از ارزش مادی و معنوی بسیار شفافی برخوردارد شود.

خلاصهٔ موضوع، کدهای هوشمند بلاکچین و امکانات NFT به خالقان و هنرمندان اجازه میده تا ارزش اثر خلق شدهٔ خود را بهتر تعیین کنند، آثار خود را به صورت یکتا عرضه کنند و از بازار معاملاتی پویا برای دارایی‌ها و اثرات خلق شدهٔ خود بهره‌مند شوند. همچنین، این فناوری اطمینان می‌دهند که مالکیت دارایی‌ها به شکلی امن و قانونی تأیید و اثبات شده‌ است.

#نکته #بلاک‌چین #ان‌اف‌تی #NFT #NFTs #Blockchain #Art #Code #کد
Please open Telegram to view this post
VIEW IN TELEGRAM
2
از امروز دیگه نام و اصطلاح فریم منسوخ شده اعلام شد و جایگزینش Mini-App است.

به دلیل ماهیت وموفقیت فریم‌های نسل دوم، و شباهت بسیار زیادشون با Mini-App‌های تلگرام؛ از این به بعد ابزار‌هایی که در فارکستر می‌سازیم به نام Mini-App شناخته می‌شن.
فرصت و زیرساخت‌ها و تمام مستندات و پتانسیل‌های ساخت و توسعه در یک مسیر بهتری قرار گرفته.

نکته) احتمال تغییر نام کلاینت اختصاصی فارکستر از Warpcast به Farcaster هم وجود داره، نهایی نشده.
👍6
COMPΞZ 🧬
خب! درود بر برنامه‌نویس عالم! چالش سی روزه رو آغاز می‌کنم 🫵🏼✍🏼 اما هدف آموزش نحوهٔ کد‌نویسی با C++23 و Solidity. شما هم می‌تونید نکته برداری کنید، منم هدفم اینه هرچی به روز رسانی کردم رو یادداشت کنم تا دوباره برای خودم مرور بشه. هیچ سخت نیست، تنهایی پیش…
تابع std::ranges::end_with بررسی می‌کند که آیا یک محدوده (Range) با یک محدوده دیگر به عنوان پسوند (Suffix) خودش به پایان می‌رسد یا خیر. به عبارتی دیگر، بررسی می‌کند که آیا انتهای محدوده اول با محدوده دوم مطابقت دارد یا خیر.

فرض کنید یک آرایه از اعداد صحیح به نام numbers با مقادیر ۱ تا ۵ وجود دارد و می‌خواهیم بررسی کنیم که آیا این آرایه با عدد ۳ به پایان می‌رسد یا خیر.

import std;

bool numbers[] = {1, 2, 3, 4, 5};

// Check if the array numbers ends with 3
bool ends_with_three = std::ranges::end_with(numbers, numbers + sizeof(numbers) / sizeof(numbers[0]), [](int a, int b) { return a == b; });

if (ends_with_three) {
std::println("The array ends with 3.");
} else {
std::println("The array does not end with 3.");
}


#cpp20 #cpp23 #ranges #end_with #ranges_end_with #چالش #سی‌روزه #رمضان #روز_بیست_و_هشتم
COMPΞZ 🧬
تابع std::ranges::end_with بررسی می‌کند که آیا یک محدوده (Range) با یک محدوده دیگر به عنوان پسوند (Suffix) خودش به پایان می‌رسد یا خیر. به عبارتی دیگر، بررسی می‌کند که آیا انتهای محدوده اول با محدوده دوم مطابقت دارد یا خیر. فرض کنید یک آرایه از اعداد صحیح…
بخش تخصصی دوم (به‌روز رسانی Solidity) | ارث‌بری چندگانه

در ارث‌بری چندگانه، قراردادهای پایه مشتق‌شده‌تر (Most Derived Base Contracts) که یک تابع مشابه را تعریف می‌کنند، باید به طور صریح بعد از کلیدواژه override مشخص شوند. به عبارت دیگر، شما باید تمام قراردادهای پایه‌ای را که همان تابع را تعریف می‌کنند و هنوز توسط قرارداد پایه دیگری (در مسیر دیگری از نمودار ارث‌بری) جایگزین نشده‌اند، مشخص کنید.
همچنین، اگر یک قرارداد یک تابع را از چندین پایه‌ی (غیرمرتبط) به ارث ببرد، باید آن را به طور صریح جایگزین کند:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.0 <0.9.0;

contract Base1
{
function foo() virtual public {}
}

contract Base2
{
function foo() virtual public {}
}

contract Inherited is Base1, Base2
{
// Derives from multiple bases defining foo(), so we must explicitly
// override it
function foo() public override(Base1, Base2) {}
}



چه زمانی نیازی به مشخص کردن صریح override نیست؟
اگر تابع در یک قرارداد پایه‌ی مشترک تعریف شده باشد و یا یک تابع منحصربه‌فرد در یک قرارداد پایه‌ی مشترک وجود داشته باشد که قبلاً تمام توابع دیگر را جایگزین کرده باشد، نیازی به مشخص کردن صریح override نیست.

قوانین دقیق‌تر برای مشخص کردن override:

به طور رسمی، نیازی نیست که تابعی را که به طور مستقیم یا غیرمستقیم از چندین پایه به ارث رسیده است، جایگزین کنید (override)؛ به شرطی که:

۱) یک قرارداد پایه وجود داشته باشد که بخشی از تمام مسیرهای جایگزینی برای امضا (Signature) باشد.
۲) آن قرارداد پایه، تابع را پیاده‌سازی کند (Implement) و هیچ مسیری از قرارداد جاری به آن قرارداد پایه‌ای، به تابعی با آن امضا اشاره نکند.
۳) یا آن قرارداد پایه، تابع را پیاده‌سازی نکند و حداکثر یک اشاره به آن تابع در تمام مسیرها از قرارداد جاری به آن قرارداد پایه وجود داشته باشد.

مسیر جایگزینی برای یک امضا (Override Path):
- مسیر جایگزینی برای یک امضا، مسیری در نمودار ارث‌بری است که از قرارداد تحت بررسی شروع می‌شود و به قراردادی ختم می‌شود که به تابعی با آن امضا اشاره می‌کند و آن را جایگزین نمی‌کند.

عدم استفاده از virtual:
- اگر تابعی را که جایگزین می‌کند با virtual علامت‌گذاری نکنید، قراردادهای مشتق‌شده دیگر نمی‌توانند رفتار آن تابع را تغییر دهند.

نکات مهم:
- توابع با دسترسی private نمی‌توانند virtual باشند.
- توابع بدون پیاده‌سازی (Implementation) باید در خارج از رابط‌ها (Interface) با virtual علامت‌گذاری شوند. در رابط‌ها، تمام توابع به طور خودکار virtual در نظر گرفته می‌شوند.
وضعیت بازار در مورد بیت و اتریوم از نظر شخصی من 🕯

- 🪙 بیت‌کوین در شکستن کانالی که انتظار داشتیم، تا حد بسیاری نا موفق بوده؛ پس انتظار میره در صورت بسته شدن کندل ماهانه به شکل منفی، اصلاح بیشتری ازش ببینیم. البته طبیعی هست! کل وضعیت بیت‌کوین نرمال و سالمه چون به هر حال سقف‌های قبلی خودش رو پودر کرده.

- 🔷 اما متأسفانه نظرم در مورد اتریوم اصلاً خوب نیست! با وجود اینهمه تبلیغ و زحمت و تلاش روی شبکهٔ اتریوم، حتی موفق نبوده تا سقف سال‌ها قبل خودش رو بشکنه! این فاجعست!!! اگه حمایتی شکل بگیره، همین نقطه‌ها وقتشه! اما به نظر میرسه اتریوم دیگه همون اتریوم زمان ۲۰۲۱ نیست! در حالی که بیت، خیلی راحت ATH زده و این اصلاح هرچقدر هم عمیق باشه، حتی تا کانال ۶۰، باز هم منطقیه! چون تازه می‌رسیم به سقف قبلی خودش.

من که ضرر‌های سنگینی گذاشتم، پودر شدم اساسی و کل تلاش‌های ۱ سالهٔ اخیرم ناکام شد؛ اما عنوان بخش مهمی از تجربیات ازشون استفاده خواهم کرد!
نقشه‌ای که برای خودم می‌کشم اینه که احتمالاً روی تراکنش روی شبکهٔ بیت‌کوین هم متمرکز بشم و اگه قرار باشه از پروژه‌ای رو نمایی کنم که مبتنی بر بلاک‌چین هست از شبکهٔ لایتینگ بیت‌کوین به عنوان یک جایگزین شبکه‌های رایج اتریومی به عنوان یک تعادل‌ساز برای توسعه استفاده خواهم کرد.

- من معتقدم که برای پیش‌روی بهتر، شبکهٔ L1 اتریوم باید تقویت بشه.
- شبکهٔ L2 روی Base باید روی پروژه‌های واقعی متمرکز بشه، نه اینهمه اسکم و چرت و پرت که اطمینان به شبکه‌های مبتنی بر اتریوم رو به این روز انداخته.
- لایهٔ L3 می‌تونه یک تعادل برای بهبود و جذب نظر سرمایه‌گذاران بین شبکه لایه ۱ و ۲ باشه، در صورتی که واقعاً ایده‌های کاربردی خوبی پیاده‌سازی کنیم وضعیت اتر می‌تونه بهبود پیدا کنه.

نظر شخصی، DYOR با خودتون.
Please open Telegram to view this post
VIEW IN TELEGRAM
😢2
COMPΞZ 🧬
در حد اینکه فکر کنم و احتمال بدم، من ۱۰۰۰ و زیر هزار دلار یعنی بازهٔ ۹۰۰ تا ۸۰۰ دلار رو هم برای اتریوم می‌بینم. اما همش احتمال هست! ممکنه هیچ‌وقت رخ نده. به هیچ عنوان روش حساب باز نکنید که این فقط احتمال شخصیِ بلند مدت با توجه به ادامهٔ روند فعلیش هست. 😉😊
متأسفانه به این تحلیل هنوز هم معتقدم.
وقتی اینجا برسه، آلت‌های بعد از اتریوم پودر می‌شن.

هرچی آت‌آشغال باشه تو بازار به فنا میره و الک میشه. لایهٔ ۱ باید حمایت بشه، لایهٔ ۲ بیش از حد و اندازه برای هر کسی شده منبع کلاه‌برداری تا خدمات!

یکی از دلایل عدم پایداری اتریوم همین هست که هر احمقی می‌تونه روش توکن بسازه سر مردم شیره بماله.

کی به کیه! قرارداد بنویس بگو من توکن دادم بیرون! مخصوصاً این توکن‌های مبتنی بر هوش مصنوعی که دیگه شده تاناکورا طرف تو عمرش یه خط برنامه‌نویسی نکرده ولی ادعای خفن بودن می‌کنه!😐
👍1
https://warpcast.com/compez.eth/0xf92e41e4

اینجا ۱۰ مورد که خودم تجربه کردم و بهش معتقد هستم، به‌ویژه در مورد تکنولوژی‌ها 🗣️

۱) تسلط به یک تکنولوژی می‌تواند شما را به طور جدی محدود کند و فقط به یک حوزه خاص و حل مشکلات با همان تکنولوژی می‌پردازید.
۲) برای درک واقعی پتانسیل تکنولوژی، باید با ابزارها و فریم‌ورک‌های مختلف کار کنید تا بتوانید دیدگاه جامع‌تری پیدا کنید.
۳) دانستن عمیق یک تکنولوژی مهم است، اما درک چگونگی تعامل و تکمیل شدن تکنولوژی‌های مختلف در حل مشکلات واقعی اهمیت بیشتری دارد.
۴) اگر فقط به یک تکنولوژی محدود شوید، بسیاری از فرصت‌ها و همکاری‌های دیگر در سایر حوزه‌های تکنولوژی را از دست خواهید داد.
۵) تمرکز بیش از حد روی یک تکنولوژی می‌تواند فهم شما از نحوه عملکرد کلی منظومه تکنولوژی (چه در سطح سخت‌افزار و چه نرم‌افزار) را به شدت محدود کند.
۶) باورها و روش‌های شما در صورتی که آماده نباشید تا با پیشرفت‌های جدید تکنولوژی یا تجربیات تازه تطبیق پیدا کنید، به مرور زمان از رده خارج می‌شوند.
۷) تعصب تکنولوژیک یکی از مشکلات رایج است؛ اگر به فریم‌ورک یا زبان برنامه‌نویسی خاصی وابسته باشید، ممکن است در ارزیابی راه‌حل‌ها دچار اشتباه شوید.
۸) در ارزیابی یا حل مشکلات فنی، تنها با استفاده از روش‌هایی که به آنها آشنا هستید، احتمالاً راه‌حل‌های بهتری که ممکن است موجود باشد را از دست خواهید داد.
۹) استفاده مداوم از تکنولوژی یا فریم‌ورک مشابه می‌تواند پس از مدتی برای شما خسته‌کننده و تکراری شود. تنوع در دانش و ابزارهای شما می‌تواند هیجان و نوآوری بیشتری به ارمغان آورد.
۱۰) به تکنولوژی‌ها و ابزارها مانند اعضای یک جامعه نگاه کنید. هر چقدر ارتباط شما با ابزارهای مختلف و رفتارها و ویژگی‌های متنوع‌تر بیشتر باشد، توانایی شما در استفاده مؤثر از آنها و تطبیق با شرایط مختلف افزایش می‌یابد.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
شبی به روشنیِ درخشان‌ترین ستارهٔ آسمان و فردایی سرشار از تلاش و موفقیت برای‌تان آرزومندم.

شبتون شیک و پر از آرامش! 🌑

https://warpcast.com/compez.eth/0x2b58c970
3🔥1
تابع std::ranges::find_last یک عضو جدید در استاندارد ۲۳ است که به شما کمک می‌کند تا آخرین عنصر را در یک محدوده که معیار خاصی را برآورده می‌کند، پیدا کنید. این تابع به دنبال آخرین عنصر در یک محدوده (مانند بردار یا رشته) می‌گردد که یک شرط خاص را برآورده می‌کند. بر خلاف std::find که به تکرار کننده‌های (iterator) دوطرفه نیاز دارد، std::ranges::find_last می‌تواند با iteratorهای رو به جلو کار کند و این امر موجب تطبیق‌پذیرتری با انواع مختلف محدوده‌ها می‌شود.

import std;

auto main() -> int {

std::vector<int> numbers = {1, 3, 5, 7, 2, 7, 4};

// Find the last element equal to 7
auto it = std::ranges::find_last(numbers, 7);

if (it != numbers.end()) {
std::println("Last element equal to 7: {}", *it);
} else {
std::println("No element equal to 7 found.");
}
}


تابع std::ranges::find_last یک ابزار قدرتمند و کارآمد برای یافتن آخرین عنصر مطابق در یک محدوده است و استفاده از آن می‌تواند در موارد مختلفی مفید باشد.


#cpp20 #cpp23 #ranges #find_last
COMPΞZ 🧬
تابع std::ranges::find_last یک عضو جدید در استاندارد ۲۳ است که به شما کمک می‌کند تا آخرین عنصر را در یک محدوده که معیار خاصی را برآورده می‌کند، پیدا کنید. این تابع به دنبال آخرین عنصر در یک محدوده (مانند بردار یا رشته) می‌گردد که یک شرط خاص را برآورده می‌کند.…
بخش تخصصی دوم (به‌روز رسانی Solidity) | بلاک اسمبلی درون خطی (Inline Assembly)

شما می‌توانید دستورات سالیدیتی را با کد اسمبلی درون خطی در زبانی نزدیک به زبان ماشین مجازی اتریوم ترکیب کنید. این کار کنترل دقیق‌تری به شما می‌دهد که به ویژه هنگام توسعه کتابخانه‌ها برای بهبود قابلیت‌های سالیدیتی مفید است.
اسمبلی درون خطی به مانند روش سی‌پلاس‌پلاس که روشی برای دسترسی به کد ماشین میزبان است؛ در اینجا، روشی برای دسترسی به ماشین مجازی اتریوم در سطح پایین است. این کار باعث دور زدن چندین ویژگی مهم امنیتی و بررسی‌های سالیدیتی می‌شود. شما فقط باید از آن برای کارهایی که به آن نیاز دارند و تنها در صورتی که در استفاده از آن اطمینان دارید، استفاده کنید.

- یک بلاک اسمبلی درون خطی با کلمه کلیدی assembly و آکولاد { ... } مشخص می‌شود. کد داخل آکولاد، کد نوشته‌شده به زبان Yul است.
- کد اسمبلی درون خطی می‌تواند به متغیرهای محلی سالیدیتی، همانطور که در ادامه توضیح داده می‌شود، دسترسی داشته باشد.
- بلاک‌های مختلف اسمبلی درون خطی هیچ فضانام مشترکی ندارند، به این معنی که فراخوانی یک تابع Yul یا دسترسی به یک متغیر Yul که در یک بلاک اسمبلی درون خطی دیگر تعریف شده است، امکان‌پذیر نیست.

در اینجا مثالی ارائه شده است که کد کتابخانه‌ای را برای دسترسی به کد قرارداد دیگری و بارگذاری آن در یک متغیر از نوع bytes نشان می‌دهد. این کار با استفاده از دستور زیر انجام می‌شود:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

library GetCode {
function at(address addr) public view returns (bytes memory code) {
assembly {
// retrieve the size of the code, this needs assembly
let size := extcodesize(addr)
// allocate output byte array - this could also be done without assembly
// by using code = new bytes(size)
code := mload(0x40)
// new "memory end" including padding
mstore(0x40, add(code, and(add(add(size, 0x20), 0x1f), not(0x1f))))
// store length in memory
mstore(code, size)
// actually retrieve the code, this needs assembly
extcodecopy(addr, add(code, 0x20), 0, size)
}
}
}



اسمبلی درون خطی نیز در مواردی که بهینه ساز موفق به تولید کد کارآمد نمی‌شود مفید است، به عنوان مثال:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;


library VectorSum {
// This function is less efficient because the optimizer currently fails to
// remove the bounds checks in array access.
function sumSolidity(uint[] memory data) public pure returns (uint sum) {
for (uint i = 0; i < data.length; ++i)
sum += data[i];
}

// We know that we only access the array in bounds, so we can avoid the check.
// 0x20 needs to be added to an array because the first slot contains the
// array length.
function sumAsm(uint[] memory data) public pure returns (uint sum) {
for (uint i = 0; i < data.length; ++i) {
assembly {
sum := add(sum, mload(add(add(data, 0x20), mul(i, 0x20))))
}
}
}

// Same as above, but accomplish the entire code within inline assembly.
function sumPureAsm(uint[] memory data) public pure returns (uint sum) {
assembly {
// Load the length (first 32 bytes)
let len := mload(data)

// Skip over the length field.
//
// Keep temporary variable so it can be incremented in place.
//
// NOTE: incrementing data would result in an unusable
// data variable after this assembly block
let dataElementLocation := add(data, 0x20)

// Iterate until the bound is not met.
for
{ let end := add(dataElementLocation, mul(len, 0x20)) }
lt(dataElementLocation, end)
{ dataElementLocation := add(dataElementLocation, 0x20) }
{
sum := add(sum, mload(dataElementLocation))
}
}
}
}


#solidity #web3 #update #ether #اتریوم