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
اگه می‌خوای ببینی اون پشت مشتا چه کارا می‌کنیم، این صفحه از برند ما توی گیت‌هاب رو می‌تونی دنبال کنی.

https://github.com/genyleap
3
COMPΞZ 🧬
حدسم ... ۱) امتیاز روی فریم‌ها اعمال شده! که نباید اینهمه باشه!!! مگه چقدر استفاده داریم؟ هنوز که وارد فصل جدید نشدیم. ۲) تیپ حمایتی دستی ارسال شده برای حمایت از توسعه‌دهنده‌ها چون روی کیفم نیست روی امتیازاتمه. قضیه چیه... نمی‌دونم باید از فاندرش بپرسم…
بله تأیید شد!
بر مبنای استفاده و به اشتراک گذاری فریم امتیاز گرفتیم.
درخواست جدید شده، می‌گن فریم‌های ساده‌تری باید برای نمایش و به اشتراک گذاری دیجن ساخته بشه!
خب ماهم می‌سازیم! یه چیز ساده‌تر برای تشویق بیشتر! 👊🏼⚡️
👏51
COMPΞZ 🧬
بله تأیید شد! بر مبنای استفاده و به اشتراک گذاری فریم امتیاز گرفتیم. درخواست جدید شده، می‌گن فریم‌های ساده‌تری باید برای نمایش و به اشتراک گذاری دیجن ساخته بشه! خب ماهم می‌سازیم! یه چیز ساده‌تر برای تشویق بیشتر! 👊🏼⚡️
این اولین پیشنهاد من براش توی گروه هست! اگه بپذیره روی سهمیه‌ها به ازای به اشتراک‌گذاری فریم تأثیر مثبت بذاره، یعنی شمایی که فریم من رو به اشتراک می‌ذاری، روی سهمیت تأثیر مثبت بذاره؛ در این صورت من همون فریم بوستری که برای سوپر ریر ساخته بودم رو باز طراحی می‌کنم برای جامعهٔ دیجن.

یعنی هنرت رو از طریق فریم به اشتراک می‌ذاری و سهمیه بیشتری می‌گیری.

نظرتون چیه؟ گزینه‌های پیشنهاد! پیشنهاد جدی‌تر رو توی خصوصی باهاش مذکره می‌کنم.
👍5💯1
In the face of adversity, be a warrior, not a worrier. Your resilience will define your success.

در مواجهه با ناملایمات، یک جنگجو باشید، نه یک نگران. انعطاف پذیری شما موفقیت شما را مشخص خواهد کرد.
👍4💯1
COMPΞZ 🧬 pinned Deleted message
خب، برداشت برای فصل جاری degen.
اینبار از طریق فریم اختصاصی خودش روی وارپکست!!! بررسی کنید ببینید می‌تونید برداشت بزنید یا نه.

https://warpcast.com/jacek/0xafdf0b5a
همچنین داخل وب‌سایت لینک مستقیم از اینجا رو بررسی کنید.

مشکلی داشت بگید بررسی کنیم ببینیم چی به چیه.
👍2
COMPΞZ 🧬
https://warpcast.com/compez.eth/0x047b5e78
نسخهٔ دسکتاپ تمام است، فردا توضیحات فارسی میدم و بعد نسخهٔ موبایل رو به‌روز رسانی می‌کنم.
فعلاً شب شیک تا ببینیم چه می‌شود. 😪👊🏼
🔥4🙏1
درود!

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

خب مشکلات مربوط به نسخه موبایل و خطاهایی که دریافت می‌شد حل شد.

حالا چجوری کار می‌کنه؟

ساختن یه گنجینه:
یه تصویر آپلود کن تا گنجینه‌ٔ خودت رو بسازی. قیمت اولیه‌ش 100 $WDEGEN هست. نسخه‌ٔ تار یا شطرنجی تصویر برای همه نمایش داده می‌شه، ولی فقط صاحب گنجینه می‌تونه نسخهٔ اصلی رو ببینه.

تصاحب یه گنجینه:
می‌تونی گنجینه‌ٔ یه نفر دیگه رو با پرداخت قیمت فعلیش بگیری. قیمت اولیه برای گرفتن یه گنجینه 100 $WDEGEN هست و هر بار که کسی اون رو تصاحب کنه، قیمتش دو برابر می‌شه (۲۰۰، ۴۰۰ و همین‌طور تا سقف ۱ میلیون $WDEGEN).

درآمد کسب کن:
اگه یکی گنجینهٔ تو رو تصاحب کنه، مبلغی که پرداخت کردی بهت برمی‌گرده و ۶۰٪ سود هم نصیبت می‌شه! سازندهٔ اولیه هم ۴۰٪ از سود رو می‌گیره و ۵٪ میره برای توسعهٔ پروژه.

چجوری وارد بازی بشی؟
1️⃣ کیف پولت رو وصل کن: برو تو فریم، روی "Connect Wallet" بزن و کیف پول Degen Chain رو با مقداری $WDEGEN متصل کن.
2️⃣ یه گنجینه بساز: توی بخش آپلود، یه تصویر (JPG، PNG) انتخاب کن و گنجینه‌تو بساز—شروعش رایگانه!

3️⃣ بگرد و تصاحب کن: گالری رو ببین، یه گنجینه‌ای که برات می‌تونه هیجان‌انگیز باشه رو پیدا کن و روی "Claim Vault" بزن. قیمت اولیه 100 $WDEGEN هست و بعد هر تصاحب دو برابر می‌شه.

4️⃣ به اشتراک بذار: بعد از ساختن یا گرفتن یه گنجینه، روی "Share" بزن تا توی Warpcast منتشر بشه، همراه با اطلاعات شماره‌ی گنجینه، قیمت و غیره و این روند پیدا می‌کنه تا به بالا‌ترین قیمت خودش برسه.
2
COMPΞZ 🧬
درود! https://warpcast.com/compez.eth/0x19ea40f9 خب مشکلات مربوط به نسخه موبایل و خطاهایی که دریافت می‌شد حل شد. حالا چجوری کار می‌کنه؟ ساختن یه گنجینه: یه تصویر آپلود کن تا گنجینه‌ٔ خودت رو بسازی. قیمت اولیه‌ش 100 $WDEGEN هست. نسخه‌ٔ تار یا شطرنجی…
خب این ایده رو هم ساختیم، بذار ببینیم مردک کچل حالا قراره چه غلطی کنه.
حواسم هم هست دیروز آموزش‌ها رو نرسیدم تا دیر وقت روی قرارداد کار می‌کردم و تا الآن تمرکزم روش بود.

کمی بعد پست‌های آموزشی ارسال می‌شه.

این هم قرارداد مربوط به این این Vault Wars روی دیجن هست، می‌تونید تراکنش‌هاش رو ببینید.

https://explorer.degen.tips/address/0x79cd095b3F3d4C1D356c86170A82218C5F2bC543
2
در مورد فریم‌ورک Qt چالشی نمی‌ذارم چون دو تا کتاب در موردش نوشتم و همون‌ها کافیست.

https://iostream.ir

کتاب آموزش مقدماتی ++C همراه Qt (مقدماتی) ۵.۰
کتاب آموزش پیشرفته ++C همراه Qt (پیشرفته) ۱.۳.۸
COMPΞZ 🧬
بخش تخصصی اول (به‌روزرسانی C++23) مثال دیروز در مورد constinit با کمی جزئیات بیشتر و مقایسه با constexpr، const و consteval - کلمهٔ کلیدی const این ویژگی نشان می‌دهد که یک متغیر یا پارامتر تابع جهانی (global)، محلی یا عضو، پس از مقداردهی نمی‌تواند تغییر…
روز چهارم، بخش تخصصی اول (به‌روز رسانی سی‌پلاس‌پلاس ۲۳)

پیش پردازنده یک برنامه جداگانه از کامپایلر ++C است که قبل از شروع کامپایل واقعی روی کد منبع شما کار می‌کند. خروجی پیش پردازنده یک فایل واحد است که سپس به کامپایلر اصلی فرستاده می‌شود. رفتار پیش پردازنده توسط دستورات پیش پردازنده کنترل می‌شود. هر دستور یک خط را اشغال می‌کند و از قالب ۱) کاراکتر هشتگ # ۲) یک نام دستور‌العمل از پیش تعریف شده توسط استاندارد، و یا یک یا چند توکن پیش‌پردازنده پیروی می‌کند.

دستور و ساختار موجود شرطی:
# ifdef identifier new-line groupopt
# ifndef identifier new-line groupopt


دستور و ساختار مکمل جدید برای شرط‌های قبلی:
# elifdef identifier new-line groupopt
# elifndef identifier new-line groupopt


نکته جالبی در مورد منشأ دستورات elifdef# و elifndef# در C++23 وجود دارد. این دستورات توسط گروه کاری WG14، یعنی گروه کاری سازمان بین المللی استاندارد (ISO) که روی زبان برنامه نویسی C فعالیت می‌کند، ارائه شده است. این دستورات جدید قرار است بخشی از استاندارد C23 باشند و گروه کاری C++ (WG21) برای جلوگیری از ناسازگاری پیش پردازنده با زبان C، تصمیم به پذیرش این تغییرات گرفته است.

در ++C و C برخی از دستورات پیش پردازنده را برای کامپایل شرطی به اشتراک می‌گذارند (مانند ifdef# و ifndef#). معرفی دستورات elifdef# و elifndef# در C23 در ادامهٔ دو دستور قبلی شرطی گزینه‌های بیشتری برای کنترل جریان درون این بلوک‌های شرطی فراهم می‌کند. با پذیرش این دستورات جدید، ++C از مشکلات احتمالی ناسازگاری پیش پردازنده هنگام کار با کدی که ممکن است با C تعامل داشته باشد، جلوگیری می‌کند. این در آینده یک فرآیند سازگاری بسیار عالی با کد‌های C را تضمین می‌کند.

نتیجهٔ این تصمیم در دو کمیتهٔ استاندارد‌سازی WG14 و WG21، اولاً سازگاری بهتر را تضمین می‌کند، چرا که داشتن دستورات پیش پردازنده یکسان در هر دو زبان C و ++C، کدی که بین این دو زبان تعامل دارد را ساده می‌کند و دوماً موجب کاهش خطا، با دستورات elifdef# و elifndef# می‌توانند منطق کامپایل شرطی را واضح‌تر کنند، که به طور بالقوه منجر به خطاهای کمتری می‌شود.

اضافه کردن دو دستور جدید به نام‌های elifdef# و elifndef# که دقیقاً عملکردی را که در دستورات موجود ifdef# و ifndef# ارائه شده است، دارند. این باعث افزایش قدرت بیان و پیش‌بینی زبان می‌شود، به خصوص برای کاربران جدید. توجه داشته باشید که این دستورات هیچ ترکیب جدید و مشکل‌آفرینی از دستورات شرطی ورودی اضافه نمی‌کنند.

#ifdef SOME_MACRO
// CODE
#elifdef MACRO_NAME
// CODE
#endif


به عنوان مثال، کد زیر در حالت جدید مشکلی ندارد:
#if ME
// TODO
#elifdef YOU
// TODO
#else
// TODO
#endif



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

#ifdef ME
// TODO
#elif YOU
// TODO
#else
// TODO
#endif



دستورات فوق، دستورات موجود قبلی را برای کامپایل شرطی را تکمیل می‌کنند. دستور warning# که قبلاً یک افزونه خاص کامپایلر بود، اکنون بخشی از استاندارد ۲۳ است. این به شما امکان می‌دهد تا در طول کامپایل، هشدارهایی را برای نشان دادن مشکلات احتمالی در کد ارسال کنید.

# warning pp-tokensopt new-line


#if __STDC_HOSTED__ != 1
# error "Not a hosted implementation"
#endif

#if __cplusplus >= 202302L
# warning "Using #warning as a standard feature"
#endif

import std;

auto main() -> int
{
std::println("The implementation used is hosted");
}


#cpp20 #cpp23 #preprocessor #compiler #macro #چالش #سی‌روزه #رمضان #روز_چهارم
COMPΞZ 🧬
بخش تخصصی دوم (به‌روز رسانی Solidity) اعضای آدرس (address) همانطور که در جلسهٔ قبل گفتیم، آدرس خودش دارای اعضایی است که بسیار کاربردی هستند. این اعضا به صورت زیر خواهند بود: <address>.balance (uint256) این عضو موجودی یک آدرس را در واحد Wei نمایش می‌دهد.…
بخش تخصصی دوم (به‌روز رسانی Solidity) الفاظ یونیکد، هگزادسیمال و شمارنده‌ها (Enum)

در حالی که حروف الفبای رشته‌ای معمولی فقط می‌توانند حاوی ASCII باشند، حروف الفبای یونیکد – با پیشوند کلمه کلیدی unicode می‌توانند حاوی هر دنباله معتبر UTF-8 باشند. آنها همچنین از همان توالی فرار مانند لفظ رشته‌ای معمولی پشتیبانی می‌کنند.

برای مثال:

string greeting a = unicode"Hello 😎";
string public unicodeGreeting = "Hello, \u{1F60A}";


در رابطه با هگزادسیمال، یک مثال ساده به این صورت می‌تواند گویای نحو آن نیز باشد:

bytes public exampleBytes = hex"123456";


کلمهٔ کلیدی hex با پذیرش مقادیر هگز در گیومه‌های تک یا دو تایی اعمال می‌شوند:

hex"001122FF" 
یا
hex'001122FF'


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

شمارنده‌ها (Enums)
شمارنده‌ها یکی از راه‌های ایجاد یک نوع تعریف شده توسط کاربر در Solidity است. آنها به صراحت به همه انواع اعداد صحیح تبدیل می‌شوند اما تبدیل ضمنی مجاز نیست.

enum State { Inactive, Active, Suspended }


شمارنده‌ها حداقل به یک عضو نیاز دارند و مقدار پیش فرض آن هنگام اعلام اولین عضو است. Enums نمی‌تواند بیش از 256 عضو داشته باشد.

یک ویژگی جالب در مورد شمارنده‌ها، با استفاده از type(NameOfEnum).min و type(NameOfEnum).max می‌توانید کوچکترین و بزرگترین مقدار enum داده شده را بدست آورید.

فرض کنید State در قالب تابعی بازگشتی چگونه خواهد بود:

function getLargestValue() public pure returns (State) {
return type(State).max;
}

function getSmallestValue() public pure returns (State) {
return type(State).min;
}



کد‌های فوق صرفاً جنبهٔ تئوری دارند و ما در آینده یک قرارداد بسیار ساده را بر روی بستر بلاک‌چین اتریوم خواهیم ساخت. بر خلاف زبان‌های برنامه‌نویسی دیگر در سالدیتی شما برای اجرا و چاپ آزمایش کد‌های خود نیاز به فراخوانی قرارداد در JS دارید، برای این منظور فریم‌ورک‌هایی مانند Truffle یا Hardhat مناسب‌ترین گزینه برای آزمایش قرارداد‌های ما می‌باشند.

مثال قرارداد ساده:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MyContract {
uint256 public myNumber;

constructor() {
myNumber = 42;
}

function setNumber(uint256 newNumber) public {
myNumber = newNumber;
}
}


پیش‌نیاز فراخوانی قرارداد تحت Truffle در JS:

const MyContract = artifacts.require('MyContract');
...
......
COMPΞZ 🧬
روز چهارم، بخش تخصصی اول (به‌روز رسانی سی‌پلاس‌پلاس ۲۳) پیش پردازنده یک برنامه جداگانه از کامپایلر ++C است که قبل از شروع کامپایل واقعی روی کد منبع شما کار می‌کند. خروجی پیش پردازنده یک فایل واحد است که سپس به کامپایلر اصلی فرستاده می‌شود. رفتار پیش پردازنده…
روز پنجم، بخش تخصصی اول (به‌روز رسانی سی‌پلاس‌پلاس ۲۳)

اگر دقت کرده باشید، میزان دستورات مربوط به const* به وضوح در ++C در حال افزایش است. ابتدا const بخشی از زبان اصلی بود و سپس constexpr را در استاندارد ۱۱ دریافت کردیم. سپس در استاندارد ۱۷ عبارت شرطی if constexpr معرفی شد، بعد از آن، C++20 ما را با consteval و constinit آشنا کرد و با C++23 ما قرار است if consteval (معمولاً به آن consteval if اشاره می‌شود) را داشته باشیم.


بررسی عبارت شرطی جدید `if consteval` / `if not consteval`

در سی‌پلاس‌پلاس ۲۳، if consteval یک کلمهٔ کلیدی جدید است که نوع جدیدی از عبارت شرطی به نام consteval if را معرفی می‌کند. این عبارت به شما امکان می‌دهد تا بلوک‌های کد را به صورت مشروط در زمان کامپایل اجرا کنید، مشابه عبارت constexpr if. با این حال، consteval if انعطاف‌پذیری بیشتری نسبت به constexpr if ارائه می‌دهد و نیازی به فراخوانی سرآیند (هدر type_traits) ندارد. این عبارت به شما اجازه می‌دهد تا شرط آن را در زمان اجرا نیز ارزیابی کنید.


تفاوت‌های کلیدی بین `constexpr if` و `consteval if`

۱) در نسخهٔ constexpr if
- مشروط بر این است که یک عبارت باید ثابت باشد.
- اگر در یک زمینه کاملاً ارزیابی شده ثابت ارزیابی شود، بلوک statement-true اجرا می‌شود، در غیر این صورت، بلوک statement-false (در صورت وجود) اجرا می‌شود.

مثال:

#include <type_traits>

constexpr int bar(int i) {
return 2 * i;
}

constexpr int foo(int i) {
if (std::is_constant_evaluated()) {
return bar(i);
}
return 2 * i;
}

auto main() -> int {
[[maybe_unused]] auto a = foo(5);
}


۲) در نسخهٔ consteval if
- یک عبارت می‌تواند ثابت یا غیر ثابت باشد.
- اگر در یک زمینه کاملاً ارزیابی شده ثابت ارزیابی شود، بلوک compound-statement اجرا می‌شود، در غیر این صورت، بلوک statement (در صورت وجود) اجرا می‌شود.


مفهوم `if consteval`

در اصل، consteval if به شما امکان می‌دهد کدی را بنویسید که بسته به زمینهٔ وضعیت آن، می‌تواند در زمان کامپایل یا در زمان اجرا اجرا شود.

یک اظهار if consteval شرطی ندارد. بهتر است بگوییم که خود شرط است. اگر در یک متن، ارزیابی ثابت‌اندازه به وضوح ارزیابی شود، سپس دستورات مرکب پیگیر اجرا می‌شود. در غیر این صورت، این امر انجام نمی‌شود. در صورت حضور یک شاخه `else`، آن به عنوان انتظار شما اجرا می‌شود.


مثال از C++23 با `if consteval`:

#include <type_traits>

consteval int bar(int i) {
return 2 * i;
}

constexpr int foo(int i) {
if consteval {
return bar(i);
} else {
return 2 * i;
}
}

auto main() -> int {
[[maybe_unused]] auto v1 = foo(5); // Run-time evaluated!
[[maybe_unused]] constexpr auto v2 = foo(5); // Compile-time evaluated!
}



نتیجه‌گیری

با افزودن ویژگی زبان جدید if consteval در C++23، دیگر می‌توان توابع consteval را از داخل توابع constexpr فراخوانی کرد. این تغییر امکان ارزیابی ترکیبی در زمان کامپایل و زمان اجرا را فراهم می‌کند.


#cpp20 #cpp23
#چالش #سی‌روزه #رمضان #روز_پنجم
COMPΞZ 🧬
بخش تخصصی دوم (به‌روز رسانی Solidity) الفاظ یونیکد، هگزادسیمال و شمارنده‌ها (Enum) در حالی که حروف الفبای رشته‌ای معمولی فقط می‌توانند حاوی ASCII باشند، حروف الفبای یونیکد – با پیشوند کلمه کلیدی unicode می‌توانند حاوی هر دنباله معتبر UTF-8 باشند. آنها همچنین…
بخش تخصصی دوم (به‌روز رسانی Solidity) - انواع تابع

در زبان Solidity، متغیرهایی از نوع تابع می‌توانند به توابع اختصاص داده شوند و پارامترهای توابع می‌توانند برای انتقال توابع به توابع و بازگرداندن توابع از تماس‌های تابع استفاده شوند. انواع توابع به دو نوع داخلی (internal) و خارجی (external) تقسیم می‌شوند:

function (<parameter types>) {internal|external} [pure|view|payable] [returns (<return types>)]



نکات مهم در مورد انواع توابع:
- برخلاف انواع پارامترها، انواع بازگشتی نمی‌توانند خالی باشند. اگر نوع تابع نباید چیزی را برگرداند، بخش returns (<return types>) باید حذف شود.
- به طور پیش‌فرض، انواع توابع internal هستند، بنابراین کلمه کلیدی internal می‌تواند حذف شود. این تنها برای انواع توابع اعمال می‌شود.
- قابلیت دید را برای توابع تعریف شده در قراردادها باید به صورت صریح مشخص کرد. توابع internal به طور پیش‌فرض دیده نمی‌شوند.


تبدیل انواع توابع:
- توابع pure می‌توانند به توابع view و توابع non-payable تبدیل شوند.
- توابع view می‌توانند به توابع non-payable تبدیل شوند.
- توابع payable می‌توانند به توابع non-payable تبدیل شوند.


نمونه‌هایی از انواع توابع در Solidity:

1. تابع داخلی و خالص با هیچ پارامتر و هیچ مقدار بازگشتی:
   function myFunction() internal pure {
// Function body
}


2. تابع نمایشی با یک پارامتر و یک نوع بازگشتی رشته‌ای:
   function myFunction(uint _value) external view returns (string memory) {
// Function body
}


3. تابع `payable` با چند پارامتر و نوع بازگشتی بولین:
   function myFunction(uint _num1, uint _num2) external payable returns (bool) {
// Function body
}


4. تابع داخلی نمایشی با یک ساختاری از پارامتر‌ها، بدون نوع بازگشتی:
   struct MyStruct {
uint value;
}

function myFunction(MyStruct memory _struct) internal view {
// Function body
}


نتیجه‌گیری

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

#solidity #web3 #update #ether #اتریوم
COMPΞZ 🧬
https://warpcast.com/compez.eth/0x047b5e78
خب خلاصهٔ این ایده NFT از نظر فنی چی شد؟

۱) قرارداد رو با Solidity روی شبکهٔ دیجن در بستر ERC20 نوشتم، تمام قوائد و قوانین رو.
۲) طراحی فریم تحت PHP و JavaScript انجام دادم.
۳) قرارداد رو روی شبکه دیجن Deploy کردم.
۴) اولین تراکنش‌ مربوط به ساختن قرارداد بود، دومین تراکنش مربوط به آپلود تصویر توسط خودم.
۵) توی هر تراکنشی که شکل میگیره، تصاویری که توسط دیگران Claim می‌شن تقسیم سود انجام میشه. هرچقدر شما بتونید کارهاتون رو باهاش تبلیغ کنید که مشتاق بشن Unlock اش کنن، سود به شما و مالک جدید تعلق می‌گیره.

و این حلقه ادامه پیدا می‌کنه تا ببینیم چی میشه!
اشتباهاتم را دوست دارم.
آنها گران‌ترین تجربه‌هایم هستند، چرا که برایشان هزینه گزافی پرداختم. 👊🏼😎
3
از اونور می‌گه تحریم کردیم از اینور می‌گه اگه دریافت نکردین پاسخ بدین! خب به نظرم اگه چیزی دریافت نکردین اما کیف WC براتون فعال هست، بد نیست آزمایش کنید.

https://warpcast.com/v/0x781ab4d5
فارکستر در اصل یک پروتکل هست، قبلاً هم توضیح دادم تمامی مسائل مربوط به WC خارج از لایهٔ پروتکل ارزیابی میشه.

بنابراین حتی اگه وارپکست گزینهٔ خوبی نباشه، می‌تونید یک Client برای خودتون بسازید! هرچند دانش اساسی می‌خواد! شاید یه روزی خودم یکی ساختم.