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

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

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
از سه تا کد دعوت فقط ۲ تاش رو دارم.

با انگیزه‌ترین فردی که به این کد‌ها نیاز داره رو بهم معرفی کنید این‌ها رو بهش بدم تا بتونه بدون موضوع پرداخت دلاری عضو فارکستر بشه.
8
اگه بخوام همچین چیزی بسازم برای فارکستر، عین آب خوردنه واسم! اما هر بار درخواستش معادل ۱ دلار روی api‌های AI آب می‌خوره!

چالش... چطور می‌شه هزینهٔ توکن‌سوزی رو به حداقل رسوند... 🤔
🤔1
COMPΞZ 🧬
اگه بخوام همچین چیزی بسازم برای فارکستر، عین آب خوردنه واسم! اما هر بار درخواستش معادل ۱ دلار روی api‌های AI آب می‌خوره! چالش... چطور می‌شه هزینهٔ توکن‌سوزی رو به حداقل رسوند... 🤔
خب یکم توکن رو تحلیل کنیم ببینیم چطور پردازش میشه. این نتیجهٔ خروجی و تعدد توکن و کاراکتری هست که بر مبنای ChatGPT برای تحلیل حساب من روی توئیتر می‌شه به دست آورد.

پس...
🔥1
COMPΞZ 🧬
خب یکم توکن رو تحلیل کنیم ببینیم چطور پردازش میشه. این نتیجهٔ خروجی و تعدد توکن و کاراکتری هست که بر مبنای ChatGPT برای تحلیل حساب من روی توئیتر می‌شه به دست آورد. پس...
نکته) تحلیلی که گروک انجام داده بر مبنای ۶۸ پست اخیر از من هست.
فرض کنیم من بخشی از هزینه‌های تحلیل رو روی سرور مرکزی خودم پردازش کنم، ۱۰۰ کست آخر رو بگیرم و تحلیلش کنم.

خب این ۱۰۰ کست روی حساب‌های مختلف می‌تونه به پاراگراف‌هایی کوتاه یا بلند تبدیل بشه و در نهایت بر تعداد توکن‌ها تقسیم و سوزونده بشه تا به یک نتیجهٔ نهایی برسیم. با توجه به اینکه روی پست قبلی متوجه شدیم چقدر توکن می‌سوزونه یعنی ۱۴۲ توکن با ۵۹۳ کاراکتر از نوه خروجی! خب این رو ضریب بدیم به هزاران کاربر! 🤔

🔹 توکن در متن یعنی چه؟
یک توکن می‌تواند شامل موارد زیر باشد:

یک کلمه کامل (مثلاً "سلام")
یک بخش از یک کلمه (مثلاً در کلمات طولانی‌تر، ممکن است به چند توکن شکسته شوند)
یک علامت نگارشی (مثل "؟" یا "،")
یک فاصله یا کاراکتر خاص


🔹 مثال‌های تعداد توکن در یک متن
متن: "سلام، حال شما چطور است؟"
تقسیم‌بندی به توکن‌ها: ["سلام"، "،"، "حال"، "شما"، "چطور"، "است", "؟"]
تعداد توکن‌ها: ۷

💡 نکته: تعداد توکن‌ها همیشه برابر با تعداد کلمات نیست، زیرا برخی از کلمات ممکن است به چند توکن شکسته شوند.

🔹 چرا توکن‌ها مهم هستند؟
هزینه پردازشی: مدل‌های زبانی معمولاً با تعداد توکن‌ها شارژ می‌شوند. هرچه متن طولانی‌تر باشد، هزینه پردازش بالاتر می‌رود.
محدودیت تعداد توکن: هر مدل زبانی یک حداکثر ظرفیت برای تعداد توکن دارد.
تأثیر در کیفیت متن: نحوه شکسته شدن متن به توکن‌ها روی دقت و سرعت پردازش مدل تأثیر می‌گذارد.

حالا هزینه‌ها رو محاسبه کنیم:
قیمت برای هر ۱ میلیون توکن برای متن ورودی ۲ دلار هست.
قیمت برای هر ۱ میلیون توکن برای متن خروجی ۱۰ دلار هست.

حالا باید فکر کنم! چقدر می‌شه کاربر رو پوشش داد و چه میزان درخواست و با چه مقدار هزینه!
خب قطعاً استفاده از چنین فریمی باید پولی باشه در این شکی نیست، اما چقدر برای هر درخواست یا کاربر باید تحلیل کنم! 👀 فکرینگ....
👍2
COMPΞZ 🧬
نکته) تحلیلی که گروک انجام داده بر مبنای ۶۸ پست اخیر از من هست. فرض کنیم من بخشی از هزینه‌های تحلیل رو روی سرور مرکزی خودم پردازش کنم، ۱۰۰ کست آخر رو بگیرم و تحلیلش کنم. خب این ۱۰۰ کست روی حساب‌های مختلف می‌تونه به پاراگراف‌هایی کوتاه یا بلند تبدیل بشه و…
برای محاسبه تعداد توکن‌هایی که در روز مصرف می‌کنی، باید چند فاکتور را در نظر بگیری:

تعداد درخواست‌ها در روز = ۱۰۰۰
تعداد کاراکترها در هر درخواست = ۱۰۰۰
میانگین نسبت توکن به کاراکتر = تقریباً ۱ توکن به ازای هر ۴ کاراکتر در زبان فارسی و انگلیسی (بسته به متن)
مرحله ۱: تبدیل کاراکتر به توکن
اگر هر درخواست ۱۰۰۰ کاراکتر باشد، تعداد تقریبی توکن‌ها:

1000÷4=250 توکن

(این مقدار تقریبی است و ممکن است بین ۲۰۰ تا ۳۰۰ توکن باشد)

مرحله ۲: محاسبه تعداد کل توکن‌های روزانه
توکن مصرفی در روز:

250×1000=250,000 توکن

مرحله ۳: هزینه و محدودیت‌ها

بسته به اینکه از چه پلنی استفاده می‌کنی، باید بررسی کنی که آیا این مقدار توکن در محدودیت پلن شما قرار دارد یا نیاز به ارتقا داری. برای مثال، اگر محدودیت ماهانه ۱۰ میلیون توکن باشد، این مقدار روزانه حدود ۲.۵٪ از کل سهمیه ماهانه را مصرف می‌کند.

نتیجه: اگر روزانه ۱۰۰۰ درخواست با ۱۰۰۰ کاراکتر بفرستی، به‌طور میانگین حدود ۲۵۰,۰۰۰ توکن در روز مصرف خواهی کرد.

هزینه‌هامون میشه بر مبنای هزار درخواست و پاسخی که ارائه می‌شه، حدود ۳۰۰ دلار در ماه. 👀
👍2🤯2
COMPΞZ 🧬
برای محاسبه تعداد توکن‌هایی که در روز مصرف می‌کنی، باید چند فاکتور را در نظر بگیری: تعداد درخواست‌ها در روز = ۱۰۰۰ تعداد کاراکترها در هر درخواست = ۱۰۰۰ میانگین نسبت توکن به کاراکتر = تقریباً ۱ توکن به ازای هر ۴ کاراکتر در زبان فارسی و انگلیسی (بسته به متن)…
من چقدر درخواست داشتم روی فریم‌ها در ماه؟ چیزی حدود ۲.۵ میلیون بار در بدترین شرایط بازار، وقتی سوپر ریر بود و بازار هم خوب بود سقف ۱۰ میلیون درخواست رو داشتیم!

خب بذاریم ۱ هزارم همون ۲.۵ میلیون یعنی ۲،۵۰۰ درخواست! 😁 محاسبهٔ ما چقدر بود؟ روی ۱۰۰۰ درخواست! 😝 پس بالای ۷۵۰ دلار در ماه همچین چیزی به شرط ثابت موندن درخواست‌ها آب می‌خوره. 😌
Gm

جسارت اجرایی کردن
ایده‌هایت را داشته باش
جهان پر است
از ترسوهای خوش فکر

https://warpcast.com/compez.eth/0xd357532b
4
👀
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