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

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

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
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
GM | Spectral Tapestry #15 (Möbius Strip)

https://warpcast.com/compez.eth/0xbfdeb612
4👍2
خب، امروز سرم به شدت شلوغه اما در مورد موضوع این شماره تلفن و احراز هویت وارپکست و کلاً قوائدش یک توضیح میدم که روشن بشید!

اولاً که موضوع تأیید حساب دیگه جدی شده! و این یکی از راه‌های مقابله با اسکمر‌ها و اسپمر‌هاست. پس قسمت Verifications موجود در Settings سه بخش داره به صورت زیر:

1) X Account
2) Phone number
3) Verification addresses


برای اینکه نشون بدی واقعاً یه آدم واقعی هستی (نه ربات یا اسپم)، می‌تونی حساب‌های دیگه‌ات رو وصل کنی و تأییدشون کنی.
هر تأیید، یه امتیاز بهت می‌ده. بسته به اینکه چقدر امتیاز بگیری، حسابت تو یکی از این سه دسته قرار می‌گیره:

- سطح ۰: ناشناس، معلوم نیست واقعی هستی یا نه.
- سطح ۱: به احتمال زیاد آدم واقعی هستی، تقلب کردن سخته. (۱۰۰۰ امتیاز)
- سطح ۲: مطمئنن آدم واقعی هستی، تقلب خیلی سخت می‌شه. (۲۰۰۰ امتیاز)

🔥 چرا بهتره تأیید کنی؟

- اگه امتیاز بالا داشته باشی، احتمال اینکه بهت برچسب اسپم بخوره خیلی کم می‌شه.
- حساب‌هایی که امتیاز بالا دارن، تو الگوریتم بیشتر دیده می‌شن (به‌زودی فعال می‌شه).
- اگه شماره‌ت تأیید شده باشه، ممکنه واجد شرایط دریافت جایزه هم بشی، چون نشون می‌ده کشورت محدود نیست.

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

- یه حساب X (توییتر سابق) خالی امتیاز کمی میده.
- ولی اگه حسابت قدیمیه و کلی فالوور داره، امتیاز بیشتری می‌گیری.
- یه کیف پول رمزارز خالی امتیاز کمی میده، ولی اگه قدیمی باشه و توش پول باشه، امتیاز خوبی می‌گیری.

🔒 اطلاعات من امنه؟
- شماره تلفن‌ت کاملاً خصوصی می‌مونه و فقط داخل خود Warpcast نگه‌داری می‌شه.
- ولی تأیید توییتر و کیف پول رمزارز، عمومی هستن و تو شبکه Farcaster نمایش داده می‌شن.

در مورد شماره تلفن، پیشنهاد من استفاده از شماره‌های آمریکایی هست که با تابعیت وارپکست هماهنگی داره.
در حد پیشنهاد و نه تأیید) اگه هیچ فامیلی در خارج از کشور ندارید که از شماره تلفنش برای تأیید استفاده کنید، به جاش می‌تونید از شماره‌های VOIP گوگل استفاده کنید یا در بهترین حالت سیم‌کارت‌های انگلیس خریداری کنید (تا جایی که می‌دونم توی ایران پاسخ میده). این تنها راهی هست که فعلاً به ذهن من میرسه، راه‌حل‌های دیگه هر طور خودتون فکر می‌کنید بهتره انجامش بدین.

نکته) نوع VPN باید با موقعیت زمانی و مکانی شماره تلفن یکسان باشه تا user-agent ارسالی توسط دستگاه شما تطبیق داده بشه.

نکته) حداقل سطح ۱ رو باید تأیید کنی، در این صورت خیالت راحت که از امتیازات عمومی وارپکست محروم نمی‌شی.
👍1
این اگه بگیره، براتون شیرینی میدم. 😄

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

لامصبا همه جا از آت‌آشغالا استفاده می‌کنن، چیه آخه ری‌اکت شخمی! 😏
❤‍🔥6🔥1
الگوریتم‌های std::shift_left و std::shift_right در استاندارد ۲۳

استاندارد سی۲۳ دو الگوریتم جدید به نام‌های std::shift_left و std::shift_right برای جابجایی عناصر در محدوده‌های مختلف ارائه می‌دهد. این الگوریتم‌ها مشابه الگوریتم‌های std::copy و std::move عمل می‌کنند، اما به جای کپی یا انتقال عناصر، آنها را در محل جابجا می‌کنند.

- این الگوریتم‌ها برای جابجایی عناصر در آرایه‌ها، لیست‌ها و سایر مخازن داده مفید هستند.
- الگوریتم std::shift_left عناصر را از سمت چپ محدوده به سمت راست جابجا می‌کند.
- الگوریتم std::shift_right عناصر را از سمت راست محدوده به سمت چپ جابجا می‌کند.

import std;

auto main() -> int {

int arr[] = {1, 2, 3, 4, 5};
std::shift_left(arr, arr + 5, 2);
for (int i : arr) {
std::print("{}", i);
}

}


در این کد مقدار‌دهی الگوریتم به صورت زیر است:

۱) پارامتر arr: اشاره‌گر به ابتدای آرایه.
۲) پارامتر arr + 5: اشاره‌گر به انتهای آرایه.
۳) پارامتر با مقدار ۲، تعداد عناصری که باید جابجا شوند.

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

#ifdef __cpp_lib_shift
//TODO...
#endif


#چالش #سی‌روزه #روز_دهم