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

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

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
حوصله ندارم توضیح بدم اما، اگه چیزی روی USDT دارید، تبدیلش کنید به USDC و دیگه هیچ‌وقت به تتر فکر نکنید.
تمام.
👍5
عاقبت پروژه‌هایی که به حرف مخاطبشون ارزشی قائل نباشن میشه این.
👍2😱1
یک به‌روز رسانی جدید روی ایدهٔ Vault Wars دادم که توی این نسخه دسترسی و داده‌ها با ظاهر و تعامل بهتر در دسترس قرار می‌گیرن.
حالا می‌تونید به آیتم‌های خودتون و سراسری به همراه فیلتر کردن آن‌ها دسترسی داشته باشید.

https://warpcast.com/compez.eth/0xfff0c24e
👍31
COMPΞZ 🧬
یک به‌روز رسانی جدید روی ایدهٔ Vault Wars دادم که توی این نسخه دسترسی و داده‌ها با ظاهر و تعامل بهتر در دسترس قرار می‌گیرن. حالا می‌تونید به آیتم‌های خودتون و سراسری به همراه فیلتر کردن آن‌ها دسترسی داشته باشید. https://warpcast.com/compez.eth/0xfff0c24e
جزئیات هر آیتم هم قابل نمایش هست که چه آدرسی مالکش هست و در چه شرایطیه.

برای این که بتونم این فیلتر رو ایجاد کنم مجبور شدم یه قرارد دیگه بنویسم به عنوان DegenHelperContract.
🔥2
COMPΞZ 🧬
جزئیات هر آیتم هم قابل نمایش هست که چه آدرسی مالکش هست و در چه شرایطیه. برای این که بتونم این فیلتر رو ایجاد کنم مجبور شدم یه قرارد دیگه بنویسم به عنوان DegenHelperContract.
از دیروز به این طرف ۷۵ تراکنش آزمایشی ثبت شده! ۱۶ ک دیجن ترنسفر شده! ۲۳۰۰ ک سود سازنده‌ها و ۳۴۰۰ ک هم سود مالکان هست که همون ۴۰ به ۶۰ درصد محاسبه می‌شه.

سود توسعه‌دهنده هم باید چیزی حدود ۳۰۰ دیجن باشه که ۵٪ از هر خرید دریافت شده.
🔥1
COMPΞZ 🧬
از دیروز به این طرف ۷۵ تراکنش آزمایشی ثبت شده! ۱۶ ک دیجن ترنسفر شده! ۲۳۰۰ ک سود سازنده‌ها و ۳۴۰۰ ک هم سود مالکان هست که همون ۴۰ به ۶۰ درصد محاسبه می‌شه. سود توسعه‌دهنده هم باید چیزی حدود ۳۰۰ دیجن باشه که ۵٪ از هر خرید دریافت شده.
خب از توی این ایده یه راه درآمدی به جای تیپ دادن می‌شه پیشنهاد کرد برای شما.
۱) مقداری wdegen داشته باشید، هنر خودتون رو مینت کنید، برای مینتش پولی دریافت نمیشه و در حد گس‌فی هست.
۲) سعی کنید کارتون رو به اشتراک بذارید تا کس دیگه‌ای اون رو Unlock و Claim کنه.
۳) همون لحظه ۱۰۰ دیجن به شما داده میشه و می‌تونید بین خودتون خرید و فروش کنید و ۶۰ به ۴۰ درصد سود بردارید. ۵٪ هم میدین به من صداتونم در نیاد. 😐😄

در این حد می‌تونستم برای دیجن یه حرکت بزنم، آزمایش کنید شاید راه حل مناسبی برای کسانی باشه که سهمیه ندارن یا بن شدن.
😁1
روز بخیر، وقتی باور کنی که می‌تونی، جهان هم با تو هم‌صدا می‌شه. 👊🏼

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

کندل جدیدی که ایجاد شده و سبز رنگ هم هست، با توجه به موقعیت RSI ممکنه شُل کنه به پایین!

به هر حال اگه کندل جدید تا ۶ روز دیگه به اندازه و حتی بیشتر از دو کندل قبلی سبز و کامل بسته نشه، امکان مثبت بودن روند می‌تونه برعکس بشه و ریزش بدتری رو هم شاهد باشیم؛ اما در صورت بسته شدن این وضعیت، تبدیل به حمایت در کف کانال میشه و می‌شه امیدوار‌تر بود.
👍2
COMPΞZ 🧬
خب! درود بر برنامه‌نویس عالم! چالش سی روزه رو آغاز می‌کنم 🫵🏼✍🏼 اما هدف آموزش نحوهٔ کد‌نویسی با C++23 و Solidity. شما هم می‌تونید نکته برداری کنید، منم هدفم اینه هرچی به روز رسانی کردم رو یادداشت کنم تا دوباره برای خودم مرور بشه. هیچ سخت نیست، تنهایی پیش…
کلاس std::mdspan و زیر عضو extents در استاندارد ۲۳

این کلاس از نوع template (الگو) است که نمایه‌ای از یک دنبالهٔ پیوسته از عناصر را ارائه می‌دهد و به شما اجازه می‌دهد تا با آن مانند یک آرایه چندبعدی رفتار کنید. این کلاس، توسعه‌ای از کلاس std::span موجود در C++20 است که برای داده‌های تک‌بعدی کار می‌کند.

۱) نمای چندبعدی
برخلاف std::span کلاس std::mdspan می‌تواند با داده‌هایی با ابعاد مختلف کار کند، و آن را برای کار با ماتریس‌ها، تانسورها و دیگر ساختارهای چندبعدی مناسب می‌کند.

۲) چیدمان حافظهٔ انعطاف‌پذیر
به شما اجازه می‌دهد تا چیدمان حافظهٔ داده را مانند ترتیب سطر-اصلی یا ستون-اصلی مشخص کنید. این امر برای الگوهای دسترسی کارآمد در سناریوهای مختلف بسیار مهم است.

۳) دسترسی ایمن و کارآمد
کلاس std::mdspan دسترسی ایمن به عناصر درون داده‌های مشاهده‌شده را در حین حفظ کارایی فراهم می‌کند. از کپی‌های غیرضروری جلوگیری می‌کند و بررسی محدوده را انجام می‌دهد.

به عبارت ساده‌تر، تصور کنید یک آرایه یک‌بعدی از اعداد دارید. std::mdspan به شما امکان می‌دهد آن را به عنوان یک شبکهٔ دوبعدی (یا ابعاد بالاتر) با یک چیدمان خاص در حافظه ببینید.

گزینهٔ std::mdspan::extents یک تابع عضو کلاس std::mdspan است که یک شیء از نوع extents را برمی‌گرداند. کلاس extents فضای شاخص چندبعدی را نشان می‌دهد. این کلاس اطلاعاتی در مورد اندازه و رتبه (تعداد ابعاد) یک آرایه ارائه می‌دهد. به عبارت ساده‌تر، زمانی که از std::mdspan برای ایجاد یک نمای چندبعدی از یک بلوک داده زیربنایی استفاده می‌کنید، تابع extents به شما در درک شکل آن نما کمک می‌کند. این تابع به شما می‌گوید که چند عنصر در هر بعد از داده وجود دارد.


به عنوان مثال، اگر یک نمای std::mdspan دو بعدی از یک آرای یک بعدی ایجاد کنید، extents تعداد سطرها و ستون‌ها را در نمای دو بعدی نشان می‌دهد.

مثال:

import std;

auto main() -> int {

std::array arr {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

// Create a 2D mdspan view of the data
auto mySpan = std::mdspan(arr.data(), 2, 6);

// Get the extents of the mdspan
std::extents myExtents = mySpan.extents();

// Print the number of rows and columns
std::println("Number of rows: {}", myExtents.extent(0));
std::println("Number of columns: {}", myExtents.extent(1));
std::println("Rank of myExtents: {}", myExtents.rank());
}


خروجی:

Number of rows: 2
Number of columns: 6
Rank of myExtents: 2



عضو rank نیز تعداد ابعاد را به extent برمی‌گرداند.

همچنین مثال زیر روشی از نحوهٔ پیاده‌سازی عضو دو و سه بعدی را نمایش می‌دهد.

import std;

auto main() -> int {

std::vector v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

// View data as contiguous memory representing 2 rows of 6 ints each
auto ms2 = std::mdspan(v.data(), 2, 6);
// View the same data as a 3D array 2 x 3 x 2
auto ms3 = std::mdspan(v.data(), 2, 3, 2);

// Write data using 2D view
for (std::size_t i = 0; i != ms2.extent(0); i++)
for (std::size_t j = 0; j != ms2.extent(1); j++)
ms2[i, j] = i * 1000 + j;

// Read back using 3D view
for (std::size_t i = 0; i != ms3.extent(0); i++)
{
std::println("slice @ i = {}", i);
for (std::size_t j = 0; j != ms3.extent(1); j++)
{
for (std::size_t k = 0; k != ms3.extent(2); k++)
std::print("{} ", ms3[i, j, k]);
std::println("");
}
}
}


خروجی:

slice @ i = 0
0 1
2 3
4 5
slice @ i = 1
1000 1001
1002 1003
1004 1005


ماکروی اختصاصی برای بررسی این ویژگی به صورت زیر است:

#ifdef __cpp_lib_mdspan
//TODO...
#endif


#cpp20 #cpp23 #mdspan #extent #rank
1
COMPΞZ 🧬
کلاس std::mdspan و زیر عضو extents در استاندارد ۲۳ این کلاس از نوع template (الگو) است که نمایه‌ای از یک دنبالهٔ پیوسته از عناصر را ارائه می‌دهد و به شما اجازه می‌دهد تا با آن مانند یک آرایه چندبعدی رفتار کنید. این کلاس، توسعه‌ای از کلاس std::span موجود در…
بخش تخصصی دوم (به‌روز رسانی Solidity) |الفاظ آرایه‌ای

آرایه لفظی فهرستی از یک یا چند عبارت است که با کاما از هم جدا شده است که در کروشه ([...]) قرار داده شده است. برای مثال
[1, a, f(3)]


که به طور کل نوع آرایهٔ تحت‌اللفظی به صورت زیر تعیین می‌شود:

- همیشه یک آرایه حافظه با اندازه ثابتی است که طول آن، تعداد عبارات است.
- نوع پایه آرایه، نوع اولین عبارت در لیست است به طوری که تمام عبارات دیگر را می‌توان به طور ضمنی به آن تبدیل کرد. اگر این امکان‌پذیر نباشد، یک خطای نوع است.
- این کافی نیست که یک نوع وجود داشته باشد که می‌توان همه عناصر را به آن تبدیل کرد. یکی از عناصر باید از آن نوع باشد.

در مثال زیر، نوع [3 ,2 ,1] حافظه uint8[3] است، زیرا نوع هر یک از این ثابت ها uint8 است. اگر می‌خواهید نتیجه یک نوع حافظه uint[3] باشد، باید اولین عنصر را به uint تبدیل کنید.

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

contract C {
function f() public pure {
g([uint(1), 2, 3]);
}
function g(uint[3] memory) public pure {
// ...
}
}


آرایه لفظی [1- ,1] نامعتبر است زیرا نوع عبارت اول uint8 است در حالی که نوع دوم int8 است و نمی توان آنها را به طور ضمنی به یکدیگر تبدیل کرد. برای اینکه کار کند، می توانید برای مثال از [int8(1)، -1] استفاده کنید.

از آنجایی که آرایه های حافظه با اندازه ثابت از انواع مختلف را نمی توان به یکدیگر تبدیل کرد (حتی اگر انواع پایه امکان پذیر باشد)، اگر می خواهید از آرایه های دو بعدی استفاده کنید، همیشه باید یک نوع پایه مشترک را به صراحت مشخص کنید:

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

contract C {
function f() public pure returns (uint24[2][4] memory) {
uint24[2][4] memory x = [[uint24(0x1), 1], [0xffffff, 2], [uint24(0xff), 3], [uint24(0xffff), 4]];
// The following does not work, because some of the inner arrays are not of the right type.
// uint[2][4] memory x = [[0x1, 1], [0xffffff, 2], [0xff, 3], [0xffff, 4]];
return x;
}
}


آرایه‌های حافظه با اندازه ثابت را نمی‌توان به آرایه‌های حافظه با اندازه پویا اختصاص داد، یعنی موارد زیر امکان پذیر نیست:

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

// This will not compile.
contract C {
function f() public {
// The next line creates a type error because uint[3] memory
// cannot be converted to uint[] memory.
uint[] memory x = [uint(1), 3, 4];
}
}


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

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

contract C {
function f() public pure {
uint[] memory x = new uint[](3);
x[0] = 1;
x[1] = 3;
x[2] = 4;
}
}


#solidity #web3 #update #ether #اتریوم
COMPΞZ 🧬
کلاس std::mdspan و زیر عضو extents در استاندارد ۲۳ این کلاس از نوع template (الگو) است که نمایه‌ای از یک دنبالهٔ پیوسته از عناصر را ارائه می‌دهد و به شما اجازه می‌دهد تا با آن مانند یک آرایه چندبعدی رفتار کنید. این کلاس، توسعه‌ای از کلاس std::span موجود در…
پارامتر شیء صریح (this) در استاندارد ۲۳

پارامتر شی صریح (با نام مستعار استنباط) توانایی نام‌گذاری صریح آرگومان ضمنی «this» را ارائه می‌کند.
این یک ویژگی جدید است که بر اساس مفهوم پارامترهای شیء this صریح که در استاندارد ۱۷ معرفی شده است، بنا شده است. در این به‌روز رسانی به شما امکان می‌دهد نوع و دستهٔ مقادیر پارامتر نمونه کلاس را مشخص کنید، در حالی که هنوز هم می‌توانید با استفاده از نحو تابع عضوِ معمولی آن را فراخوانی کنید. این ویژگی اساساً نیاز به نوشتن چندین تابع بارگذاری شده برای عملکرد مشابه را از بین می‌برد.

- شیء this صریح، به شما امکان می‌دهد نوع و دستهٔ مقادیر پارامتر شیء را در داخل اعلان تابع عضو مشخص کنید.
- استنباط این مفهوم را تا حدی ارتقا می‌دهد و به کامپایلر اجازه می‌دهد تا نوع پارامتر this را به طور خودکار بر اساس نحوه فراخوانی تابع عضو استنباط کند.
- این اجازه می‌دهد تا املای متفاوتی از انواع روش (lvalue، const lvalue، rvalue) وجود داشته باشد.

این استنباط می‌تواند به طور بالقوه:

- کدهای تکراری را کاهش دهد، نیاز به نوشتن صریح نوع this را در برخی موارد از بین می‌برد.
- خوانایی کد را بهبود بخشد، اعلان توابع عضو را مختصرتر می‌کند.

یک سناریو را تصور کنید که در آن یک پارامتر this صریح مانند زیر دارید:

struct MyStruct {
int data;
void func(this MyStruct self) {
self.data = 22;
}
};


یک مثال نسبتاً شفاف‌تر:

import std;

struct MyClass {
void modifyData(this MyClass& self, int value) {
self.data = value;
}

int getData() const {
return data;
}

private:
int data = 0;
};

auto main() ->int {

MyClass myObject;

myObject.getData();

myObject.modifyData(42);

std::println("Object {}", myObject.getData());

return 0;
}



- تابع modifyData از یک پارامتر شیء صریح this MyClass& self استفاده می‌کند. این به صراحت بیان می‌کند که تابع روی یک شیء از نوع MyClass با ارجاع عمل می‌کند.
- تابع getData عضو معمولی است و از پارامتر شیء ضمنی this استفاده می‌کند.
- درون modifyData از self برای دسترسی به عضو data و تغییر آن استفاده می‌شود.


#cpp20 #cpp23 #this
#چالش #سی‌روزه #روز_نهم
👍1
COMPΞZ 🧬
بخش تخصصی دوم (به‌روز رسانی Solidity) |الفاظ آرایه‌ای آرایه لفظی فهرستی از یک یا چند عبارت است که با کاما از هم جدا شده است که در کروشه ([...]) قرار داده شده است. برای مثال [1, a, f(3)] که به طور کل نوع آرایهٔ تحت‌اللفظی به صورت زیر تعیین می‌شود: - همیشه…
بخش تخصصی دوم (به‌روز رسانی Solidity) |تخصیص آرایه‌های حافظه

در سالیدیتی آرایه‌های حافظه با طول پویا می‌توانند با استفاده از عملگر new ایجاد شوند. برخلاف آرایه‌های ذخیره‌سازی، امکان تغییر اندازه آرایه‌های حافظه وجود ندارد (برای مثال توابع عضو push در دسترس نیستند). شما باید یا اندازه مورد نیاز را به طور پیش‌فرض محاسبه کنید یا یک آرایه حافظه جدید ایجاد کنید و هر عنصر را کپی کنید.

همانطور که همه متغیرها در Solidity، عناصر آرایه‌های تازه تخصیص داده شده همیشه با مقدار پیش‌فرض مقداردهی می‌شوند.

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

contract C {
function f(uint len) public pure {
uint[] memory a = new uint[](7);
bytes memory b = new bytes(len);
assert(a.length == 7);
assert(b.length == len);
a[6] = 8;
}
}


در این کد uint یک آرایه حافظه‌ای از اعداد صحیح به نام a ایجاد می‌کند که دارای طول ۷ است. با استفاده از new uint، حافظهٔ مورد نیاز برای آرایه a را اختصاص می‌دهد و سپس به a اشاره می‌کند. در خط بعد bytes memory b = new bytes(len) یک آرایه حافظه‌ای از بایت‌ها به نام b ایجاد می‌کند که طول آن برابر با مقدار len است. با استفاده از new bytes(len)، حافظه مورد نیاز برای آرایه b را اختصاص می‌دهد و سپس به b اشاره می‌کند.

در مثال فوق از کلمهٔ کلیدی memory استفاده شده است تا به کامپایلر اعلام شود که این آرایه‌ها در حافظه داخلی (حافظه موقت) ایجاد شوند و نه در حافظه دائمی (ذخیره‌سازی). این به این معناست که آرایه‌های a و b فقط در زمان اجرای تابع f وجود دارند و پس از اتمام تابع، از حافظه موقت حذف می‌شوند.

#solidity #web3 #update #ether #اتریوم
👍1
👀 از یونی هم بن شدیم رفت..😐 یعنی رسماً میخوام بشینم یه کیف پول هم بسازم! خستم کردن هرجا میری بن میشی 😐 گیری کردیم با این هویت ایرانی.
😢6🥴1
کامپز قبلاً فکر اینو کرده! ☺️

https://github.com/genyleap/bitcoin-rpc

با این کتابخونه می‌تونید با شبکهٔ بیت‌کوین ور برید!
🔥2
پس از تحمل آن‌همه درد، کسی که به مقصد می‌رسد، دیگر همانی نیست که به راه افتاده بود. 😎 من هرچقدر تحریم می‌شم، هرچقدر فشار روم وارد می‌شه احساس می‌کنم قویتر شدم! قبلاً اینطور نبود، افسرده می‌شدم میزدم تو کلهٔ خودم که چرا اینطوری شد... اما الآن مدتیه هرچقدر بیشتر روم فشار وارد می‌شه یک سطح جدیدی از مغزم Unlock می‌شه که برای ترکوندن و صاف کردن دهن همه اینایی که تحریم رو کردن اسباب بازی برای خودشون. 😐
🔥2💯2
اتر 👀 شکسته جایی رو که نباید می‌شکست!
😢51