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

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

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
COMPΞZ 🧬
👀
وضعیت اتر هیچ جای تعریفی نداره! به خصوص بعد از این کثافت‌کاری‌های که روش انجام شد.
تمام 🤚🏼 اینجا دیگه کف حمایتی روی روند بلند‌مدتیش هست!

نظاره‌گر هستیم...
😢2😐2
COMPΞZ 🧬
👀
تسلط بیت‌کوین هم روی بازهٔ ۱ ماهه.
کاملاً تمایل به غالب شدن به کل بازار رو داره! اگه وارد اون کادری که حدس می‌زنم بشه، یعنی بالای ۷۰٪ تسلط و این یعنی آلت‌کوین‌ها یه کف ریزشی اساسی جدیدی خواهند دید.

نمونش، ریر، دیجن، ماکسی و هر شرو ور دیگه‌ای که هست همشون پایین‌ترین قیمت ممکن در طول تاریخ عمرشون رو خواهند دید.

البته... Rare همین الآن هم تجربش کرده. 😉
👍1
من چه می‌کنم در چنین شرایطی؟

هیچی دست به بازار نمی‌زنم، هرچی داشتم رو چشم می‌بندم به روش انگار که ندارمش.
روی مهارت‌های دیگه‌ام وقت می‌ذارم، برنامه‌نویسی و ساخت‌و‌ساز بیشتر، و اجرای ایده‌های بهتر؛ توصیه می‌کنم FOMO نشید! من وضعیت خیلی بدتر از اینارو دیدم... تهش اینه که بعد یه مدت وضعیت بهتر میشه، فقط صبور باشید و روی برنامه‌هایی که دارید تمرکز کنید که این شرایط همش فرصت برای باز‌سازی هست.
4💯2
😄 باور کن خسته‌تر از این حرفام...
🤣11😁1
COMPΞZ 🧬
بخش تخصصی اول (به‌روز‌رسانی سی‌پلاس‌پلاس ۲۳) کلمهٔ کلیدی constinit در زبان برنامه‌نویسی ++C به شما اجازه می‌دهد تا تضمین کنید متغیر موردنظر در زمان کامپایل مقداردهی شود، نه در زمان اجرا. این ویژگی می‌تواند کارایی برنامه را بهبود ببخشد، زیرا از مقداردهی…
بخش تخصصی اول (به‌روزرسانی C++23)
مثال دیروز در مورد constinit با کمی جزئیات بیشتر و مقایسه با constexpr، const و consteval

- کلمهٔ کلیدی const
این ویژگی نشان می‌دهد که یک متغیر یا پارامتر تابع جهانی (global)، محلی یا عضو، پس از مقداردهی نمی‌تواند تغییر کند. همچنین می‌تواند برای مشخص کردن یک تابع عضو غیر استاتیک استفاده شود؛ یک تابع عضو ثابت اینگونه نمی‌تواند وضعیت شیء را تغییر دهد (مگر اینکه آن‌ها به صورت mutable تعریف شده باشند) و تنها می‌تواند سایر توابع عضو ثابت را فراخوانی کند. با این حال، این تابع همچنان در زمان اجرا (Run-Time) ارزیابی می‌شود.

import std;

class foo
{
int value;
public:
foo(int const v) : value(v) {}
int get() const { return value; }
};

auto main() -> int
{
int const fortyTwo = 42;
foo f(fortyTwo);
int n = f.get();
std::println("n: {}", n);
}


- کلمه کلیدی constexpr
این ویژگی در C++11 معرفی شد تا نشان دهد یک متغیر یا تابع می‌تواند در یک عبارت ثابت ظاهر شود، که می‌توان آن را در زمان کامپایل ارزیابی کرد.

import std;

constexpr int maximum(int const a, int const b)
{
return a >= b ? a : b;
}

auto main() -> int
{
int const Size = 64;
int arr[maximum(42, Size)]{ 0 };
std::println("Size of arr: {}", sizeof(arr) / sizeof(arr[0]));
}


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

import std;

constexpr int maximum(int const a, int const b)
{
return a >= b ? a : b;
}

auto main() -> int
{
constexpr int m1 = maximum(42, 66); // compile-time evaluation
int a = 42, b = 66;
const int m2 = maximum(a, b); // run-time evaluation
std::println("m1: {0}, m2:{1}", m1, m2);
}


- کلمه کلیدی consteval
یک ویژگی جدید در C++20 است که برای مشخص کردن این استفاده می‌شود که یک تابع یک تابع فوری (immediate function) است، به این معنی که تابع باید همیشه یک عبارت ثابت تولید کند. این موضوع به این معنی است که تابع تنها در زمان کامپایل دیده می‌شود. نمادها برای تابع منتشر نمی‌شوند، شما نمی‌توانید آدرس چنین تابعی را بگیرید، و ابزارهایی مانند دیباگرها قادر به نمایش آنها نخواهند بود. در این مسأله، توابع فوری شبیه به ماکروها هستند.

import std;

consteval int maximum(int const a, int const b)
{
return a >= b ? a : b;
}

auto main() -> int
{
int const Size = 64;
constexpr int m1 = maximum(42, Size); // OK, compile-time evaluation
int a = 12, b = 66;
const int m2 = maximum(a, b); // error

using fptr = int(int, int);
fptr* pmax = maximum; // error
}


کلمه کلیدی consteval به خاصیت inline دلالت دارد. اگر هر اعلانی از یک تابع یا الگوی تابع شامل یک consteval باشد، آنگاه تمام اعلان‌های آن تابع یا الگوی تابع باید شامل نوع مشخص کننده باشند. یک تابع که consteval است، درواقع یک تابع constexpr است و باید الزامات قابل اعمال برای توابع constexpr (یا سازنده‌های constexpr) را برآورده کند.

- کلمه کلیدی constinit
یک متغیر را با مدت زمان ذخیره‌سازی static یا thread اعلام می‌کند. اگر یک متغیر با constinit اعلام شود، اعلان مقداردهی اولیه آن باید با constinit اعمال شود. اگر یک متغیر با constinit اعلام شود و مقداردهی پویا داشته باشد (حتی اگر به عنوان مقداردهی ثابت انجام شود)، برنامه ill-formed است. اگر در نقطه اعلان مقداردهی اولیه هیچ اعلان constinit قابل دسترسی نباشد، برنامه ill-formed است و تشخیص خطا نیازی نیست.

کلمهٔ کلیدی constinit نمی‌تواند همراه با constexpr استفاده شود. وقتی که متغیر اعلام شده یک مرجع است، constinit معادل با constexpr است. وقتی که متغیر اعلام شده یک شیء است، constexpr می‌تواند مقداردهی اولیه‌ای ثابت و نابودی ثابت را الزام کند و شیء را const-qualified می‌کند، با این حال، constinit نیازی به نابودی ثابت و اعمال const ندارد.

// Declare a constinit variable 
constinit int x = 42;

// Error: constinit cannot be used with constexpr
constinit constexpr int x = 42;

// Error: constinit cannot be used with consteval
constinit consteval int square(int x) { return x * x; }


#cpp20 #cpp23
#چالش #سی‌روزه #رمضان #روز_سوم
🔥3
COMPΞZ 🧬
بخش تخصصی اول (به‌روزرسانی C++23) مثال دیروز در مورد constinit با کمی جزئیات بیشتر و مقایسه با constexpr، const و consteval - کلمهٔ کلیدی const این ویژگی نشان می‌دهد که یک متغیر یا پارامتر تابع جهانی (global)، محلی یا عضو، پس از مقداردهی نمی‌تواند تغییر…
بخش تخصصی دوم (به‌روز رسانی Solidity) اعضای آدرس (address)

همانطور که در جلسهٔ قبل گفتیم، آدرس خودش دارای اعضایی است که بسیار کاربردی هستند. این اعضا به صورت زیر خواهند بود:

<address>.balance (uint256)

این عضو موجودی یک آدرس را در واحد Wei نمایش می‌دهد.

<address>.code (bytes memory)

عضو code کد آدرس است (می‌تواند خالی باشد).

<address>.codehash (bytes32)

عضو codehash، مقدار هش شدهٔ آدرس را بر می‌گرداند.

<address payable>.transfer(uint256 amount)

مقدار معینی از Wei را به آدرس موردنظر ارسال می‌کند. در صورت عدم موفقیت، عملیات با خطا مواجه می‌شود و برنامه برمی‌گردد. همچنین، این عملیات یک مقدار ۲۳۰۰ واحد گاز معوض را ارسال می‌کند و قابلیت تنظیم ندارد.

<address>.call(bytes memory) returns (bool, bytes memory)

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

<address>.delegatecall(bytes memory) returns (bool, bytes memory)

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

<address>.staticcall(bytes memory) returns (bool, bytes memory)

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

مثالی از کاربرد در مورد balance و transfer که می‌توان با استفاده از موجودی دارایی، موجودی یک آدرس را پرس و جو کرد و با استفاده از تابع انتقال، اتر (به واحد wei) را به آدرس قابل پرداخت ارسال کرد:

address payable x = payable(0x123);
address myAddress = address(this);
if (x.balance < 10 && myAddress.balance >= 10) {
x.transfer(10);
}


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

توضیحات تکمیلی در مورد واژهٔ Wei

واژهٔ Wei یکی از واحد‌های نمایشی در اتریوم است. یک عدد تحت اللفظی می‌تواند پسوندی از wei**، **gwei یا ether برای تعیین زیرمجموعه اتر بگیرد، جایی که اعداد اتر بدون پسوند Wei فرض می‌شوند.

assert(1 wei == 1);
assert(1 gwei == 1e9);
assert(1 ether == 1e18);


برای درک بهتر یک مثال کد تبدیلی هم با سی‌پلاس‌پلاس براش داشته باشیم:

import std;

uint64_t etherToWei(double ether)
{
return static_cast<uint64_t>(ether * 1e18);
}

uint64_t etherToGwei(double ether)
{
return static_cast<uint64_t>(ether * 1e9);
}

auto main() ->int
{
double etherValue = 0.001;
std::println("Value in Wei: {} ", etherToWei(etherValue));
std::println("Value in Gwei: {} ", etherToGwei(etherValue));
}


این هم یک وب‌سایت برای تبدیلات واحد‌های اتریومی: https://eth-converter.com که معمولاً این محاسبات در زمان مینت، یا اجرای یک قرارداد بلاک‌چینی مهم هستند.

#solidity #web3 #update #ether #اتریوم
🔥21🙏1
به مسیر زندگی‌ام که نگاه می‌کنم،
آدمی را می‌بینم که در هر زمان و در هر اتفاق،
به اندازهٔ رشد همان زمانش تصمیم گرفته و جلو رفته است.

ما قرار است به اندازهٔ رشدمان،
اتفاق‌ها را تحلیل کنیم و تصمیم بگیریم.

پس نمی‌توانیم با تجربه و رشد امروزمان،
خودمان را در گذشته‌مان سرزنش کنیم...
👏4🫡1
سوأل خوبی هست گفتم پاسخش‌رو پست کنم به همراه یه مثال واقعی.

مهمترین کاربرد کلمهٔ کلیدی const، محافظت از داده‌ها در برابر تغییر ناخواسته هست به علاوه تأکید بر خوانایی بیشتر و وضوح کامل در جنس یک مقدار.

مثال واقعی بزنم؟ خب بیت‌کوین رو در نظر بگیریم، چقدر توکن داره؟ ۲۱ میلیون‌تا درسته؟

خب چطور اینهمه مطمئن بشیم که هیچ‌طور ممکن نیست تعداد این توکن‌ها در اصل قرارداد تغییر پیدا کنه؟ حتی ۱ ساتوشی!

خب از کلمهٔ کلیدی const استفاده می‌کنیم که در زمان اجرا بسیار کاربردی هست.

مثال رو به صورت واقعی از قلب بیت‌کوین می‌کشم بیرون براتون صبر... 👇🏼👇🏼👇🏼
1
COMPΞZ 🧬
سوأل خوبی هست گفتم پاسخش‌رو پست کنم به همراه یه مثال واقعی. مهمترین کاربرد کلمهٔ کلیدی const، محافظت از داده‌ها در برابر تغییر ناخواسته هست به علاوه تأکید بر خوانایی بیشتر و وضوح کامل در جنس یک مقدار. مثال واقعی بزنم؟ خب بیت‌کوین رو در نظر بگیریم، چقدر…
خب این لینک سورس از قلب بیت‌کوین هست، خط ۲۶ دقیقاً همونجا تعریف شده که ۲۱ میلیون سکه وجود خواهد داشت.

برای اینکه این رو ثابت نگه‌داریم و همینطور در زمان کامپایل بهش تأکید کنیم از کلمهٔ کلیدی constexpr یکی از خفن‌ترین ویژگی‌های سی‌++ استفاده شده.

درواقع کلمهٔ کلیدی constexpr ذاتاً const هستش که تضمین می‌کنه مقدار MAX_MONEY در زمان اجرا قابل تغییر نیست.

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

بنابراین، حداکثر مقدار سکهٔ مجاز در شبکه بیت‌کوین، ۲,۱۰۰,۰۰۰,۰۰۰,۰۰۰,۰۰۰ ساتوشی (یا ۲.۱ کوادریلیون ساتوشی) یا معادل ۲۱ میلیون واحد بیت‌کوین هست. 🔥👊🏼
👍2🔥2
COMPΞZ 🧬
خب این لینک سورس از قلب بیت‌کوین هست، خط ۲۶ دقیقاً همونجا تعریف شده که ۲۱ میلیون سکه وجود خواهد داشت. برای اینکه این رو ثابت نگه‌داریم و همینطور در زمان کامپایل بهش تأکید کنیم از کلمهٔ کلیدی constexpr یکی از خفن‌ترین ویژگی‌های سی‌++ استفاده شده. درواقع کلمهٔ…
چرا من اینهمه عاشق بیت‌کوینم؟ و چرا بیت‌کوین اینهمه امن و مطمئن‌ترین ارز موجود در بازار هست؟ اولین دلیلش از نظر فنی اینه که از خفن‌ترین زبان برنامه‌نویسی برای توسعش استفاده کردن، چیزی که تخصص اصلی منم هست دوستش دارم.

در خیلی از موارد مهمترین ویژگی‌هاش همین امنیتش هست که مو لای درزش نمیره.

در مورد اتریوم و دیگر ارز‌ها هم همینطوره، البته اتریوم با Go نوشته شده، ولی خب Solidity به خاطر ماهیتی که از ++C گرفته، به یک زبان برنامه‌نوسی روی شبکهٔ mainnet و base خیلی کاربری و مطمئن هست.
👍2
امان از وضعیت اینترنت و محدودیت‌هاش...

DNS1: 10.202.10.202
DNS2: 10.202.10.102

این دو تنها موردی هستن که من همیشه ازشون جواب گرفتم؛ امتحانش کنید.

#DNS
3👍1
خطاب بر شما ای آرتیست‌ها 😄

عزيزان پدر! هنر بياموزيد، زيرا نه مى‌توان بر ملك و دولت اعتماد كرد، درهم و دينار (در اینجا ریال) در پرتگاه نابودى است، يا دزد همهٔ آن‌ را ببرد و يا صاحب پول، اندك اندك آن را بخورد، ولى هنر چشمه زاينده و دولت پاينده است، اگر هنرمند تهی‌دست گردد، غمى نيست زيرا هنرش در ذاتش باقى است و خود آن دولت و مايه ثروت است، او هر جا رود از او قدرشناسى كنند، و وی را در صدر مجلس جا دهند، ولى آدم بى‌هنر، با دريوزگى و سختى لقمه نانى به دست آورد.

#پند #حکایت #سعدی
😁52🔥1👌1
COMPΞZ 🧬 pinned «خب! درود بر برنامه‌نویس عالم! چالش سی روزه رو آغاز می‌کنم 🫵🏼✍🏼 اما هدف آموزش نحوهٔ کد‌نویسی با C++23 و Solidity. شما هم می‌تونید نکته برداری کنید، منم هدفم اینه هرچی به روز رسانی کردم رو یادداشت کنم تا دوباره برای خودم مرور بشه. هیچ سخت نیست، تنهایی پیش…»
درود بر زمین و آسمان!
آموختن دانش و فهمیدن باهم متفاوته!
فهمیدن، انسان رو در مسیر تکامل قرار میده؛ آموختنِ دانش، بدون فهمیدن ممکنه موفقیت کاذب به وجود بیاره ☝🏼مسیر تکامل رو روشن نمی‌کنه. 😉

https://warpcast.com/compez.eth/0x5b2ba66e
1👍1
COMPΞZ 🧬
😟 Sticker
دقیقاً این مدلی بیدار شدم چرا؟! به دو دلیل!
۱) ۴ هزار فالورم غیب شده توی ۴۸ ساعت اخیر! 😐
۲) یهو ۵۰ هزار دیجن بهم تیپ دادن!!! از کجا اومده؟ 😐

چی شده! کی به کیه؟ چی به چیه؟! داستان چیه؟ من کجام؟ شما کی هستید؟ اینجا کجاست!
😁1🤯1
COMPΞZ 🧬
دقیقاً این مدلی بیدار شدم چرا؟! به دو دلیل! ۱) ۴ هزار فالورم غیب شده توی ۴۸ ساعت اخیر! 😐 ۲) یهو ۵۰ هزار دیجن بهم تیپ دادن!!! از کجا اومده؟ 😐 چی شده! کی به کیه؟ چی به چیه؟! داستان چیه؟ من کجام؟ شما کی هستید؟ اینجا کجاست!
حدسم ...

۱) امتیاز روی فریم‌ها اعمال شده! که نباید اینهمه باشه!!! مگه چقدر استفاده داریم؟ هنوز که وارد فصل جدید نشدیم.

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

قضیه چیه... نمی‌دونم باید از فاندرش بپرسم 👀 شاید یه باگه! و شایدم همون موضوع حمایتی باشه چون فقط برای من نیست برای نیکولای و بقیه توسعه‌دهنده‌ها هم اضافه کردن! 🚀
🔥1👀1