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

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

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
COMPΞZ 🧬
ابزار کمکی std::to_underlying در C++23 در استاندارد ۲۳، تابع std::to_underlying برای تبدیل مقادیر شمارشی به نوع پایه ای آنها معرفی شده است. این تابع می‌تواند برای تبدیل انواع شمارشی مانند enum و enum class به نوع پایه‌ای آنها مانند int یا unsigned int استفاده…
اعلان مستعار (alias) در C++23

یکی از پیشرفت‌های C++23، گسترش عبارت‌های init برای اجازه دادن به اعلان (مستعار) alias است.
عبارت‌های init بخشی از حلقه‌ها (for، while)، switch و عبارت‌های range-based for هستند. آنها به شما اجازه می‌دهند تا متغیرها را در داخل خود حلقه یا عبارت declare و initialize کنید، یا از typedef استفاده کنید. این کار می‌تواند خوانایی و قابلیت نگهداری کد را با نگه داشتن اعلان‌های متغیر نزدیک به جایی که استفاده می‌شوند، بهبود بخشد.

از طرفی ممکن است در موقعیتی قرار بگیرید که در آن تعیین یک typedef برای بدنه حلقه for مفید باشد. در عین حال، اگر به نام مستعار نیاز داشته باشیم، خواناتر و همچنین به طور گسترده‌تری برای استفاده از آن قابل استفاده است. متأسفانه، با دستورات اولیه برای حلقه C++20 این کاری نیست که شما بتوانید انجام دهید. می‌توانید از typedef استفاده کنید.

std::vector pointsScored {27, 41, 32, 23, 28};
for (typedef int Points; Points points : pointsScored) {
//ToDo...
}



در C++23 با اجازه دادن به اعلان مستعار با استفاده از using در عبارت‌های init، این ناسازگاری را حل می‌کند. این کار انسجام را به ارمغان می‌آورد و به شما امکان می‌دهد از مزایای aliasها در این زمینه‌ها استفاده کنید.

import std;

auto main() -> int {

std::vector pointsScored {27, 41, 32, 23, 28};
for (using Points = int; Points points : pointsScored) {
std::println("Compez scored {}", points);
}

}



#cpp20 #cpp23 #alias #چالش #سی‌روزه #رمضان #روز_چهاردهم
COMPΞZ 🧬
بخش تخصصی دوم (به‌روز رسانی Solidity) |انواع نگاشت‌ها (Mapping) در Solidity، از نوع داده‌های Mapping برای ایجاد یک نوع داده کلید-مقدار استفاده می‌شود. این نوع داده‌ها با نحو دستوری زیر تعریف می‌شوند: mapping(KeyType KeyName? => ValueType ValueName?) و متغیرهای…
بخش تخصصی دوم (به‌روز رسانی Solidity) |کلمهٔ کلیدی delete

کلمهٔ کلیدی حذف (delete) یک مقدار اولیه برای نوع داده مورد نظر به متغیر می‌دهد. به عنوان مثال برای اعداد صحیح، معادل با a = 0 است، اما می‌تواند بر روی آرایه‌ها نیز استفاده شود، جایی که یک آرایه پویا با طول صفر یا یک آرایه استاتیک با همان طول و تمام عناصر به مقدار اولیه خود اختصاص می‌دهد.

برای مثال در این بخش از کد:
delete a[x]



کلمهٔ کلیدی delete، موردی که در شاخص x آرایه قرار دارد را حذف کرده و سایر عناصر و طول آرایه را بدون تغییر باقی می‌گذارد. این به ویژه به این معنا است که یک جای خالی در آرایه باقی می‌ماند. بنابراین، اگر قصد حذف عناصر را دارید، استفاده از یک نگاشت (mapping) احتمالاً انتخاب بهتری است.

برای ساختارها (structs)، یک ساختار با تمام اعضا بازنشانده می‌شود. به عبارت دیگر، مقدار a پس از delete a همانند این است که a بدون اختصاص اعلام شود.
کلمهٔ کلیدی delete تأثیری بر روی نگاشت‌ها (mapping) ندارد (زیرا کلیدهای نگاشت‌ها ممکن است خودکار و در کل ناشناخته باشند). بنابراین اگر یک ساختار را حذف کنید، تمام اعضایی که نگاشت نیستند را بازنشانده می‌کند و همچنین به اعضا داخلی عملیات بازگشتی انجام می‌دهد مگر اینکه آنها نگاشت باشند. با این حال، کلیدها و مقادیر متناظر با آنها قابل حذف هستند: اگر a یک نگاشت باشد، آنگاه delete a[x] مقدار ذخیره شده در x را حذف می‌کند.

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

contract DeleteExample {
uint data;
uint[] dataArray;

function f() public {
uint x = data;
delete x; // sets x to 0, does not affect data
delete data; // sets data to 0, does not affect x
uint[] storage y = dataArray;
delete dataArray; // this sets dataArray.length to zero, but as uint[] is a complex object, also
// y is affected which is an alias to the storage object
// On the other hand: "delete y" is not valid, as assignments to local variables
// referencing storage objects can only be made from existing storage objects.
assert(y.length == 0);
}
}



#solidity #web3 #update #ether #اتریوم
COMPΞZ 🧬
اعلان مستعار (alias) در C++23 یکی از پیشرفت‌های C++23، گسترش عبارت‌های init برای اجازه دادن به اعلان (مستعار) alias است. عبارت‌های init بخشی از حلقه‌ها (for، while)، switch و عبارت‌های range-based for هستند. آنها به شما اجازه می‌دهند تا متغیرها را در داخل…
در استاندارد ۲۳ ویژگی جدیدی به نام std::move_only_function معرفی شده است که به منظور بهبود کارایی و مدیریت حافظه در برنامه‌ها، به خصوص در مواردی که با انتقال اشیاء بزرگ سرو کار داریم، طراحی شده است.

در واقع std::move_only_function یک کلاس template است که به شما امکان می‌دهد توابعی را تعریف کنید که فقط می‌توانند با اشیاء موقت (rvalue) کار کنند. این نوع توابع قادر به دریافت اشیاء به عنوان lvalue (غیر موقت) نیستند، و در عوض، آنها اشیاء را به طور مستقیم «move» می‌کنند.

- این منجر به افزایش کارایی قابل توجهی در برنامه‌ها، به خصوص در مواردی که با اشیاء بزرگ سروکار داریم، می‌شود. دلیل این امر این است که نیازی به کپی اشیاء در هنگام فراخوانی تابع نیست، و به جای آن، اشیاء به طور مستقیم «move» می‌شوند.
- می‌تواند به مدیریت حافظه کارآمدتر کمک کند، زیرا از ایجاد کپی‌های غیرضروری اشیاء جلوگیری می‌کند.

مثال زیر شامل دو تابع معمولی و با عنوان printValue و تابع جدید با عنوان printValueRvalue را نمایش می‌دهد که در اینجا printValueRvalue یک std::move_only_function است که فقط می‌تواند با اشیاء rvalue کار کند:

import std;

void printValue(int value)
{
std::println("value: {}", value);
}

std::move_only_function<void(int)> printValueRvalue = [](int value)
{
std::println("value (rvalue): {}", value);

};

auto main() -> int {

int x = 10;
printValue(x);
printValueRvalue(std::move(x));

}


نکته، منظور از «move»، انتقال مالکیت یک شیء از یک مکان حافظه به مکان دیگر است که در استاندارد سی‌پلاس‌پلاس با std::move شناخته می‌شود.

#cpp20 #cpp23 #move_only_function #چالش #سی‌روزه #رمضان #روز_پانزدهم
COMPΞZ 🧬
بخش تخصصی دوم (به‌روز رسانی Solidity) |کلمهٔ کلیدی delete کلمهٔ کلیدی حذف (delete) یک مقدار اولیه برای نوع داده مورد نظر به متغیر می‌دهد. به عنوان مثال برای اعداد صحیح، معادل با a = 0 است، اما می‌تواند بر روی آرایه‌ها نیز استفاده شود، جایی که یک آرایه پویا…
بخش تخصصی دوم (به‌روز رسانی Solidity) | نگاشت‌های تکرار پذیر (Iterable Mappings)

در سالیدیتی شما نمی‌توانید روی Mappings (نگاشت‌ها) عمل تکرار را انجام دهید، به عبارت دیگر نمی‌توانید کلیدهای آن‌ها را شمارش کنید. با این حال، امکان پیاده‌سازی یک ساختار داده بر روی آن‌ها و حلقه زدن بر روی آن وجود دارد. به عنوان مثال، کد زیر یک بخش کتابخانه (library) برای IterableMapping پیاده‌سازی می‌کند که پس از آن قرارداد User داده‌ها را به آن اضافه می‌کند، و sum به عنوان تابع، iterates را برای جمع کلیهٔ مقادیر استفاده می‌کند.


// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.8;

struct IndexValue { uint keyIndex; uint value; }
struct KeyFlag { uint key; bool deleted; }

struct itmap {
mapping(uint => IndexValue) data;
KeyFlag[] keys;
uint size;
}

type Iterator is uint;

library IterableMapping {
function insert(itmap storage self, uint key, uint value) internal returns (bool replaced) {
uint keyIndex = self.data[key].keyIndex;
self.data[key].value = value;
if (keyIndex > 0)
return true;
else {
keyIndex = self.keys.length;
self.keys.push();
self.data[key].keyIndex = keyIndex + 1;
self.keys[keyIndex].key = key;
self.size++;
return false;
}
}

function remove(itmap storage self, uint key) internal returns (bool success) {
uint keyIndex = self.data[key].keyIndex;
if (keyIndex == 0)
return false;
delete self.data[key];
self.keys[keyIndex - 1].deleted = true;
self.size --;
}

function contains(itmap storage self, uint key) internal view returns (bool) {
return self.data[key].keyIndex > 0;
}

function iterateStart(itmap storage self) internal view returns (Iterator) {
return iteratorSkipDeleted(self, 0);
}

function iterateValid(itmap storage self, Iterator iterator) internal view returns (bool) {
return Iterator.unwrap(iterator) < self.keys.length;
}

function iterateNext(itmap storage self, Iterator iterator) internal view returns (Iterator) {
return iteratorSkipDeleted(self, Iterator.unwrap(iterator) + 1);
}

function iterateGet(itmap storage self, Iterator iterator) internal view returns (uint key, uint value) {
uint keyIndex = Iterator.unwrap(iterator);
key = self.keys[keyIndex].key;
value = self.data[key].value;
}

function iteratorSkipDeleted(itmap storage self, uint keyIndex) private view returns (Iterator) {
while (keyIndex < self.keys.length && self.keys[keyIndex].deleted)
keyIndex++;
return Iterator.wrap(keyIndex);
}
}

// How to use it
contract User {
// Just a struct holding our data.
itmap data;
// Apply library functions to the data type.
using IterableMapping for itmap;

// Insert something
function insert(uint k, uint v) public returns (uint size) {
// This calls IterableMapping.insert(data, k, v)
data.insert(k, v);
// We can still access members of the struct,
// but we should take care not to mess with them.
return data.size;
}

// Computes the sum of all stored data.
function sum() public view returns (uint s) {
for (
Iterator i = data.iterateStart();
data.iterateValid(i);
i = data.iterateNext(i)
) {
(, uint value) = data.iterateGet(i);
s += value;
}
}
}



#solidity #web3 #update #ether #اتریوم
🔥1
به نکتهٔ ریز دیجن دقت کن که چرا فاندرش نمی‌تونه توکن رو مدیریت کنه و مجبوره به زور و تصمیم یه شبه بزنه تارو مار کنه!

۶۰ درصد از حجم مجموعهٔ توکن‌ها رو اختصاص داده به ایردراپ!!! ۱۵ درصد باز برای خود جامعست و ۱۵ درصد هم در بهترین حالت مال سرمایه‌گذار بدبخته!!!

الآن فقط ۳ درصد برای اکوسیستم باقی مونده وبقیش دست کسانی هست که توی ایردراپ شرکت کردن!!! چه فارمر چه آرتیست چه هرکسی!

خب تکلیف چیه؟ وقتی هر بار سر ماه میشه همه هجوم می‌برن برای فروش و نقد کردن چیزی که بیشترین فشار ممکن رو وارد می‌کنه.

خب نتیجش میشه همینی که الآن هست! کسانی که اوایل بودن خوردن فرار کردن! فارمر‌ها عشقشو بردن! الآن اون ته مونده‌ها امثال من و شما که خود اکوسیستم هستیم رو هوا داریم دنبال پرتقال فروش می‌گردیم.

تعادل باید وجود داشته باشه!

وقتی بیشترین دارایی رو اختصاص دادی به ایردراپ معلومه که به زور هم مجبور می‌شی به ملت بگی لاک کنید یا بزنی بنشون کنی!

از پایه و اساس بخش تخصیص دادن توکن‌ها اشتباه بوده و این منجر به فشار فروش در هر ماه میشه که وقتی به کندل‌ها هم دقت کنی همین رو دارن می‌گن.
👍1🤔1🥴1
COMPΞZ 🧬
به نکتهٔ ریز دیجن دقت کن که چرا فاندرش نمی‌تونه توکن رو مدیریت کنه و مجبوره به زور و تصمیم یه شبه بزنه تارو مار کنه! ۶۰ درصد از حجم مجموعهٔ توکن‌ها رو اختصاص داده به ایردراپ!!! ۱۵ درصد باز برای خود جامعست و ۱۵ درصد هم در بهترین حالت مال سرمایه‌گذار بدبخته!!!…
میزان درصد تخصیصش خیلی بالاست! وحشتناک بالاست.
حالا تنها موضوع امیدوار کنندش اینه که این ایردراپ‌بازی‌ها تقریباً کمتر بشه یا حتی توکن‌سازی صورت بگیره و تعداد توکن در چرخش برگرده دست تریدر‌ها وسرمایه گذار‌هایی که قراره از این به بعد بیان تو بازار که این هم زمانی ممکنه که بازار حجم خوبی بخوره!

در کل پروژه نمرده اما وضعیت فعلیش هم به دلیل آزاد سازی گستردهٔ توکن هست! برگشتن به حالت‌های ایده‌آلش نیاز به ورود سرمایه سنگین به کل بازار کریپتو داره که همه امیدوار بودن آلت‌سیزن این رو حل می‌کنه! اما خب کو اتریوم ۵ هزار دلاری؟! 😁 اگه هنوز هم هولدرش هستید به نظر من وقتی بازار حجم خوبی بخوره همه اینارو میشه جبران شده دید. فقط صبر! ⚡️
👍3
در استاندارد ۲۳ ویژگی std::forward_like یک الگوی تابعی است که به انتقال دسته‌بندی مقادیر (value category) در سناریوهای مختلف کمک می‌کند.

منظور از Value Category به نوع ارزش (value) یا مرجع (reference) یک شیء در ++C اشاره دارد. این موضوع به نحوهٔ استفاده از شیء در کد شما و نحوهٔ ارسال آن به توابع و عبارات مختلف مربوط می‌شود. که به صورت زیر دسته‌بندی می‌شوند:

- نوع Lvalue
به موقعیتی در حافظه اشاره می‌کند که می‌تواند مورد تغییر قرار بگیرد و می‌تواند شامل متغیرها، عناصر آرایه، مقادیر عضو کلاس و عبارات (مانند x + y) باشد.

- نوع Rvalue
به یک مقدار موقت (temporary value) اشاره می‌کند که قابل تغییر نیست و می‌تواند شامل مقادیر برگشتی توابع، نتایج عبارات (مانند "Hello" + "World") و مقادیر موقت ایجاد شده توسط اپراتورها باشد.

- نوع Xvalue
نوع خاصی از Rvalue است که فقط در موارد خاص مانند انتقال مالکیت (move semantics) استفاده می‌شود.

به طور کلی تابع جدید std::forward_like تابعی مشابه std::forward است، با این تفاوت که کنترل دقیق‌تری بر دسته‌بندی مقادیر (lvalue، rvalue، xvalue) بدون تغییر نوع خود ارائه می‌دهد و در سرآیند <utility> موجود است. قبل از ۲۳، انتقال عبارات عضو در یک تابع می‌توانست دشوار باشد، به‌ویژه برای (move semantics) دشوار‌تر بود که در این به‌روز رسانی std::forward_like این کار را ساده‌تر می‌کند.

- ویژگی std::forward به شما کمک می‌کند آرگومان را به گونه‌ای منتقل کنید که نوع اصلی آن حفظ شود.
- ویژگی std::forward_like به شما کمک می‌کند تا آرگومان را به گونه‌ای منتقل کنید که نوع عبارت دیگری را تقلید کند و آن را با نوع اصلی آن عبارت سازگار نگه دارد.

در ++C، نوع یک شیء می‌تواند به عنوان یک lvalue (مرجع) یا rvalue (مقدار موقت) در نظر گرفته شود. و در اینجا std::forward_like تضمین می‌کند که آرگومان با ارزش صحیح (lvalue یا rvalue) ارسال شود.

کلاس زیر را در نظر بگیرید که دو تابع get_value و get_value_ref را دارد:

import std;

class Data {
public:
int get_value() const { return m_value; }
int& get_value_ref() { return m_value; }
private:
int m_value = 42;
};

auto main() -> int {

Data data;

int value = std::forward_like<decltype(data)>(data).get_value();
std::println("value: {}", value);

int& ref = std::forward_like<decltype(data)&>(data).get_value_ref();
ref = 100;
std::println("value: {}", data.get_value());
}


در تابع main عبارت std::forward_like برای ارسال آرگومان data با حفظ نوع (lvalue در این مورد) استفاده شده است.


#cpp20 #cpp23 #forward_like #forward #چالش #سی‌روزه #رمضان #روز_شانزدهم
COMPΞZ 🧬
در استاندارد ۲۳ ویژگی std::forward_like یک الگوی تابعی است که به انتقال دسته‌بندی مقادیر (value category) در سناریوهای مختلف کمک می‌کند. منظور از Value Category به نوع ارزش (value) یا مرجع (reference) یک شیء در ++C اشاره دارد. این موضوع به نحوهٔ استفاده از…
بخش تخصصی دوم (به‌روز رسانی Solidity) | تبدیل ضمنی (Implicit Conversions)

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

به عنوان مثال، uint8 به uint16 و int128 به int256 قابل تبدیل است، اما int8 قابل تبدیل به uint256 نیست، زیرا uint256 نمی‌تواند مقادیری مانند 1- را نگه دارد.

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

در مثال زیر، y و z که عملوند‌های جمع هستند، از همان نوع نیستند، اما uint8 به طور ضمنی قابل تبدیل به uint16 است و بالعکس نیست. به همین دلیل، y قبل از انجام جمع در نوع uint16 تبدیل می‌شود. نوع نتیجه‌ٔ عبارت y + z و uint16 است. بعد از انجام جمع، به یک متغیر از نوع uint32 تبدیل نوعی دیگر نهانی صورت می‌گیرد.

uint8 y;
uint16 z;
uint32 x = y + z;


#solidity #web3 #update #ether #اتریوم
هعی دنیا! عجب دنیایی شده این حوزهٔ وب ۳ 😄
اونا همیشه با من رقابت می‌کنن، اما من هنوز تو بهترین نسخهٔ خودم نیستم! 😉😒👊🏼
Genetic Mutation Style (B/W)

https://warpcast.com/compez.eth/0x278e8894
3
نمی‌دونم چی شد ولی یه حرکتی زدم نوتیفیکیشن‌هام ترکید! 👀
2👍2
COMPΞZ 🧬
نمی‌دونم چی شد ولی یه حرکتی زدم نوتیفیکیشن‌هام ترکید! 👀
والا هنوز هیچ چیزی رونمایی نکردیم ما 😄
😁1
+۲ هزار دنبال کننده در ۱ ساعت! 👀
🔥2😍1
COMPΞZ 🧬
Photo
سرعت افزایش رو دقت کن! چند دقیقه نیست... 😂
🎉1
خیلی عدد ریزیه... دنبال ۳۰۰ ک هستم 😞👊🏼 به وقتش!
💯2
می‌پرسید که ماهم دوست داریم دنبال کننده زیادی داشته باشیم... چطوری ممکنه؟
خب ببین این آرزوی خیلی‌ها می‌تونه باشه! اما باید واقعیت رو هم بدونی که به این راحتی نیست!
من قبل از این که اینهمه بتونم پیش بیام فکر می‌کردم همه چیز سادست! و صرفاً افتخار آفرینی خواهم دید! اما اینطوری نیست! غیر ممکنه وقتی شما رشد می‌کنید استرس و بازخورد‌های به شدت سمی دریافت نکنید! این بعدش رو هیچ‌وقت فراموش نکن وقتی رشد می‌کنی همه حاضر نیستن خوشحال باشن! بهت قول میدم وقتی هزار نفر دنبال کننده داشته باشی ۵۰۰ نفرش راحت فقط دنبالت می‌کنن که بکشنت پایین. 😄 اصلاً ساده بهش نگاه نکن! هیچ‌وقت!

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

من دقیقاً یک سال پیش، درست توی چهارشنبه‌سوری، برای اولین بار وارد فارکستر شدم! بهتره خلاصهٔ این مسیری که اومدم رو به شماهم بگم تا شاید بیشتر امیدوار باشید.

پارسال این موقع، همه‌چیز برام تازه و ناشناخته بود. دیدم خیلی‌ها با دنبال‌کننده‌های زیاد و کلی پست و سابقه وارد شده‌ بودن و رشد کرده بودن. با خودم گفتم: خب طبیعیه، سخته توی یه فضای جدید دیده بشی.

ولی من کسی بودم که با فقط ۲۰۰ دنبال‌کننده، تونستم مخ ۶۵۲۹ رو بترکونم؛ همون کسی که توی توییتر نیم میلیون دنبال‌کننده داشت! یه زمانی با خودم می‌گفتم میرسه روزی که مثل این غول بشم و تأثیر‌گذار باشم؟!

اون داستان هنوز توی بلاک‌چین ثبت شده؛ قدیمی‌ترها خوب می‌دونن اون آدم چه غولی بود! جسور بودن واسهٔ من خیلی سخت نیست! چون به این مطمئنم که اگه بخوام کاری رو انجام بدم می‌تونم! اگه بقیه تونستن پس منم می‌تونم!

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

البته بله، وقتی کسی به کارت توجه نشون می‌ده انگیزه می‌گیری. ولی برای من اولویت چیز دیگه‌ای بود! باور به رسالتی که بر دوشم حس می‌کردم: ساختن، پیش رفتن، معنا بخشیدن.

راه سختی بود… خیلی سخت! چون باید از خیلی چیزها بگذری، خیلی تصمیم‌های دشوار بگیری، خیلی وقت‌ها سکوت کنی و ادامه بدی.

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

نتیجه؟
بعد از یه ماه شدم ۳۰۰۰ دنبال‌کننده.
سه ماه بعد، رسیدم به ۱۰۰۰۰ نفر.
بعد کارهای بیشتری انجام دادم و تعاملات بالا رفت و یه‌دفعه بیشتر شد.
و این مسیر ادامه پیدا کرد تا امروز که از ۳۶هزار نفر هم گذشتیم!

الآن دقیقاً یک ساله که این سفر شروع شده.
اگه بخوام به خودم نمره بدم، شاید از ۱۰۰ به خودم ۳۰ بدم! نه چون کم تلاش کردم، بلکه چون هنوز اون نسخه‌ای که از خودم انتظار دارم، نشده‌م. ولی می‌دونم اون روز هم می‌رسه. شاید همین سال آینده، همین روز!

خیلی‌ها که نقد می‌کردن می‌گفتن چرا باید تو پیشرفت کنی و ما نتونیم!!!
در جواب می‌خوام اینو از ته دل بهت بگم:

وقتی کسی نمی‌بینت، ناامید نشو.
رسالتت رو ببین، نه واکنش بقیه رو.
اون کاری رو انجام بده که واقعاً بهش باور داری.
سرد می‌شی؟ ناامید می‌شی؟ قطعاً!
اما یادت نره: تو در مسیرت رشد می‌کنی، نه در مقصد.

یه روزایی حس می‌کنی هیچ‌کس حواسش بهت نیست. یه روزایی هم چنان اوج می‌گیری که خودتم باورت نمی‌شه.
اما نه توی شکست، ناامید باش… و نه توی موفقیت، مغرور.

ادامه بده! مسیر خودش راهش رو باز می‌کنه.

من توی این مسیر خیلی فشار تحمل کردم که پر از لحظات پر استرس و عجیب بود! به جرأت می‌گم حجم ورودی توهین، تهدید، حتی حسادت‌های سمی به شدت عجیب و غریب... به مراتب بیشتر از تشکر و قدردانی بوده! حتی یه روز رسید که بعضی‌ها نامه نوشتن به ویتالیک (خالق اتریوم) 😄 که این آدم نباید توی اکوسیستم باشه! خنده‌داره، ولی واقعی بود 😄 بارها نامه نوشتن به مدیران سوپر ریر، بارها نامه نوشتن به کله‌گنده‌های فارکستر! ولی دردناک‌ترین جاش این بود که همشون ایرانی بودن!!! هم‌وطن بودن!!! این برای من بزرگترین درد بود که افسوس می‌خوردم چطور جامعهٔ عجیبی داریم! توی گروه‌ها و کانال‌ها مدام برام شات می‌فرستادن، مدام از حرف‌ها و توهین‌ها... توهین به خودم، تهدید خودم، تهدید برادرم، تهدید خواهرم! مدام پیام‌های خصوصی رکیک و به شدت آزار دهنده! خب فکرشو بکن... چطور ممکنه دلت نشکنه؟ چطور ممکنه اشک نریزی به خاطر چنین حجم وحشتناکی از کج فهمی!
81🔥1
ادامه دادم… چون هیچ‌وقت حرف مردم، مانع رسالت من نبود؛ چون اون‌ها با چیزی که خودشون و ذاتِ خودشون بود بقیه رو قضاوت می‌کردن نه با چیزی که در مورد دیگران واقعیت داشت. من رسالتم خدمات و حل مسائل مربوط به خدماتی بود که می‌دادم!

من هیچ‌وقت آدم کینه‌ای نبودم و نیستم، اما همهٔ اون‌هایی که این کارهارو کردن باعث شدن من بیشتر تلاش کنم، چون باعث شدن شناخت بهتری به جامعه داشته باشم چون بهم ثابت کردن که مسیری که اومدم درست بوده.

به هر حال ما نمی‌تونیم همه رو راضی نگه‌داریم! این غیر ممکنه!

اما این رو بدون… همیشه کسایی هستن که جلوت سبز می‌شن تا سد راهت بشن؛ و هیچ‌وقت فکر نکن همهٔ کسانی که تورو دنبال می‌کنن دوستتن اصلاً اینطور نیست! آرامش رو در یه سطحی به بعد از دست میدی! اما فقط باید جلو بری.

مهم اینه که سعی کنی وقتت رو با حاشیه درگیر نکنی! روی خودت کار کن بذار هرکی هرچی می‌گه بگه!
تو که خودت می‌دونی داری چیکار می‌کنی همین کافیه. 😎👊🏼🔥😌
71👍1💯1