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

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

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
روز بخیر، وقتی باور کنی که می‌تونی، جهان هم با تو هم‌صدا می‌شه. 👊🏼

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
COMPΞZ 🧬
اتر 👀 شکسته جایی رو که نباید می‌شکست!
چه توصیه‌ای می‌تونم بکنم جز اینکه بگم FOMO نشید!
فکر نکنم کسی به اندازه من ضرر کرده باشه! دقیقاً الآن هیچی حس نمی‌کنم از شدت ضرر‌های سنگینی که گذاشتم نه استرس دارم نه خوشحالم نه بدحال. 😜 انقدر از این تجربه‌ها داشتم که پودر شدن از اول ساختمشون که تا دلت بخواد. فقط صبر!!! شده بخشی از مسیرمون! یه روز هوا بارونیه یه روز آفتابی دیگه چه کنیم!

بازار همیشه هست، فرصت همیشه هست! مهم اینه بپذیریم که زندگی هم ضرر داره هم سود! کاش باشه همه ضرر‌ها مالی باشه فقط! 😉❤️ غم به دلتون راه ندین اینم درست میشه! 😎 به فرصت‌هایی که ایجاد خواهد شد فکر کنید. 😌👊🏼
5
به من می‌گن اینا مهم نیست بگو چقدر سود کردی...

خب من واقعیت رو بگم بهت، هیچ‌وقت نیومدم نمودار بکشم بگم ببین اینهمه سود گرفتم! هرچی بوده ساخت و ساز کردم خوابوندم کف جامعه و کد‌هام! طی ۶ ماه اخیر ۳۵ هزار دلار سود کردم! زحمت شبانه روزیم پشت سیستم بوده دهنم سرویس شده! اما چون همرو خوابوندم روی بازار الآن ۳۲ هزار دلار توی ضررم! در واقع سودی نکردم! نظاره گر بودم و تجربه‌گر! اون ته موندش هم همون دیجن هست و بقیش هم یه جای دیگه به چوخ رفته. ☺️

ولی خب من ذهنم سازندست! به این چیزا شاید افسوس بخورم، اما هیچوقت آخر راهم نیست! دوباره می‌سازشم! 😎 سال‌ها اینارو دیدم! خیلی بدتر از ایناشو! انقدر راهی بیمارستان شدم سر این چیزا تا بدونم وقتی ضرر می‌کنی چه حسی داره! وقتی سود می‌کنی چه حسی داره! سود کردن توی این بازار‌ها دهن آدمو صاف می‌کنه! روی خوشش رو بهت نشون میدن اما اون اصل واقعیت رو هیچ‌وقت بهت نمی‌گن. با خودمون رو راست باشیم! مهم اینه که جرأت داشته باشی اینارو هم به ملت بگی که فکر نکنن خبریه!

توی ضرریم، خب باشیم! جهنم و درک! ضرر جانی نخوریم پول همیشه به دست میاد، صد بار هم از بین میره صد بار هم به دست میاد! چرا اینهمه مطمئنم؟ چون مهارت دارم! روی مهارت‌هات اعتماد داشته باش درست میشه. دارم کد می‌نویسم که سیستم توسعه بدم تا بتونم جامعه رو بسازم! فرض می‌کنم ۶ ماه اخیر تلاش‌هام همش با خاک یکسان شد... هیچ اشکالی نداره چون مسئولیت همهٔ این‌ها به گردن خودم هست نه کس دیگه.🔥😎 مسئولیت همه چیز‌ها رو خودت بپذیر خواهی دید که در شرایط بحرانی حالت خیلی بهتر میشه.
6👍2🔥1
یکم پیش یه گفتگویی از آرتیست‌ها داشتیم؛ توش یه موضوعی اشاره شد که فارکستر باید موضوع شناسایی آرتیست‌ها و افراد مفید و محتوا‌ساز رو بتونه تشخیص بده تا با اینهمه اسپم و اسکم و فلان مواجه نشیم.

خب این انتظارِ به جایی هست، اما از نظر من فارکستر به عنوان یک پروتکل وظیفهٔ این رو نداشته و نداره که دسته‌بندی رو شکل بده! این فقط یک پروتکل هست که یک سری چهارچوب ارتباطی رو تعریف می‌کنه نه بیشتر! اما در عوض با ماهیت متن‌باز بودنش، این امکان وجود داره که ما توسعه‌دهنده‌ها این کار رو انجام بدیم!

با چه شیوه‌ای؟

- شناسایی مشکل
- ارائه راهکار
- توسعه و انتشار

هر ایده‌ای که شکل بگیره، ساخته بشه و در اختیار جامعه قرار بگیره، این می‌تونه نیازمندی رو پوشش بده.
در واقع منتظر ارائه نباید بود، باید ساخت!
👍5
درود و روز بخیر! 👊🏼

https://warpcast.com/compez.eth/0xee39f439

همینکه نشستم پشت سیستم شات از بن شدن خیلی‌ها دریافت کردم!
واقعاً متأسفم از این وضعیت. :) نمی‌دونم چی باید بگم اصلاً...
😢1
This media is not supported in your browser
VIEW IN TELEGRAM
😁2
خب یه نشانه‌ای از امید میشه دید!

۱) واگرایی مثبت داریم
۲) کف کانال کندلمون حمایتی و برگردان هست.

DYOR.
🔥5👍1
COMPΞZ 🧬
خب یه نشانه‌ای از امید میشه دید! ۱) واگرایی مثبت داریم ۲) کف کانال کندلمون حمایتی و برگردان هست. DYOR.
در مورد Rare، اگه اون خط زرد رنگ بالا رو بشکنه و تثبیت بده، می‌تونه رشد دوباره کنه.

دلیل منطقیش هم روی نمودار همین واگرایی مثبتش بود! 😉
🔥3
دیجن هم همینطور! واگرایی مثبت و نشانه‌ای از حمایت داریم!

همشون دقیقاً الگوی بیت رو زدن! میزان تسلط بیت هم بالای ۶۲ درصد هست، هرچی کینگ بگه همون میشه! 😉
4🔥2
درصد‌ها رو دقت کن! 😄
2🔥1