روزنوشته های فربد صالحی

درباره زندگی و برنامه نویسی

۴ مطلب در اسفند ۱۳۹۸ ثبت شده است

تعطیلات نوروز، کاسه‌های چوبی و باقی قضایا

امروز آخرین روز کاری سال ۹۸ بود. دیروز یکی از دوستان تو یکی از گروه‌ها پرسید که تو تعطیلات نوروز که به خاطر «ویروس کرونا» جایی نمی‌ریم و در واقع «قرنطینه» هستیم چکار می‌کنید. من گفتم یه سری فایل آموزشی هست که می‌بینم و بعد هم فیلم و سریال و کتاب.

بعد به ذهنم اومد که نوروز سال گذشته هم که سفر رفته بودیم و خونه‌ی یکی از اقوام نزدیک مهمون بودیم، من لپ‌تاپ برده بودم و مواقعی که خونه بودیم و بقیه تلویزیون می‌دیدن، یا شب‌ها قبل خواب، فیلم‌های آموزشی "Angular" و "PWA" می‌دیدم. خود سال ۹۸ رو هم تقریبا در حوزه‌ی برنامه‌نویسی تو این دوتا فیلد کار کردم و چندتایی پروژه انجام دادم که هر چند طبق معمول! ثمره‌ی مالی خاصی نداشتن، ولی به هرحال تسلطم روی مباحث مربوطه بیشتر شدن. 

اواخر امسال هم با جایی برای همکاری صحبت کردم، که بعد از توضیحات من در مورد مزایای PWA که البته موافق بودن باهاش، گفتن که برای رسمیت بیشتر پروژه می‌خوایم پروژه، خروجی "Android" و "iOS" هم داشته باشه. در نهایت بعد از بررسی‌های مختلف قرار شد که روی "Ionic" کار کنیم. به همین دلیل این یکی دو هفته رو به مطالعه در این زمینه مشغول بودم که احتمالا تو عید نوروز هم ادامه خواهد داشت.

مساله اما، کار با Ionic یا PWA نیست. اتفاقا با مطالعات این چند وقت از Ionic هم خوشم اومده و به نظرم امکانات خوبی ارایه میده و جالبه. بیشتر به این فکر می‌کنم که تو این چند سال دائما سعی کردم از «روندها» عقب نباشم و حتی تو تعطیلات هم در حال «خودیادگیری» بودم. اما در نتیجه‌ی نهایی، چه از لحاظ مادی و چه از لحاظ رضایت شغلی تفاوت خاصی ایجاد نشده.

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

خلاصه اینکه من سعی می‌کنم همچنان بخونم و یاد بگیرم و کار کنم. اما واقعیت اینه که این روند هیچ توجیه اقتصادی و حتی شغلی نداره و فقط علاقه‌ی شخصی باعث ادامه‌اش میشه. امیدوارم یه روزی پشیمون نشم از عمر و انرژی صرف شده تو این مسیر. البته اگه کرونا و «خطاهای انسانی» و سایر «دست‌اندرکاران» بذارن به اون روزا برسیم.

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

فقط امیدوارم که حداقل کاسه ساختن و پخش کردنِ درست این کاسه‌ها تو بیابون رو بلد باشم. در نهایت، چاره‌ای نیست جز اینکه سال ۹۹ رو هم «امیدوار باشیم به اتفاق افتادن بهترین‌ها، اما آماده باشیم برای وقوع بدترین‌ها.» 

 

 

 

۰ نظر
فربد صالحی

در شهر به بنده پیشنهاداتی شده بود

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

هربار که می‌خواستم این انتقال بین بانکی رو انجام بدم، کارمندی که تو باجه‌ی بانک قرار بود این کار رو بکنه می پرسید «چرا می‌خواید این مبلغ رو از حسابتون خارج کنید»، یا «می‌دونید که ۹۰ درصد این مبلغ رو می‌تونیم تا ۲ روز دیگه بدون ضامن بهتون وام بدیم؟» و جملاتی از این قبیل که معنی کلیش این بود که پول رو از حسابت تو شعبه‌ی ما خارج نکن، یا یخرده دیرتر خارج کن. 

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

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

پس فعلا از خاطرات شیرین همین چند روز لذت می‌برم.

۰ نظر
فربد صالحی

انگولار : two-way data binding و ngFor

 می‌دونیم که «بایندینگ دوطرفه» در «انگولار» با استفاده از "ngModel" کار راحتیه. به این صورت که اگه متغیری به اسم username رو تو کامپوننت مربوطه تعریف کرده باشیم، برای بایندینگ دوطرفه‌ی اون در سمت template می‌نویسیم:

<input [(ngModel)]="username" />

حالا اگه ورودی این input تغییر کنه مقدارش به متغیر username منتقل میشه و هرجای برنامه هم که مقدار این متغیر رو تغییر بده، مقدار جدید توی input نمایش داده میشه.

اما گاهی نیاز میشه که بایندینگ دوطرفه رو روی آرایه‌ای از متغیرها اجرا کنیم. فرض کنیم آرایه‌ای به نام cities داریم:

let cities = ['Tehran','Rasht','urmieh'];

نمایش عناصر این آرایه بوسیله‌ی input ها ساده است:

 <div *ngFor="let item of cities">
     <input [(ngModel)]="item">
 </div>

همونطور که مشخصه در اینجا هم از ngModel برای بایندینگ دوطرفه استفاده شده، اما اگه این کد رو اجرا کنیم نتیجه‌ی دلخواه به دست نمیاد. یعتی اگه کاربر مقدار یک یا چندتا از input ها رو تغییر بده، مقادیر در آرایه‌ی cities تغییر نمی‌کنن. برای رفع این مشکل باید تغییرات زیر رو در کد بالا اعمال کنیم (بخش پر رنگ کد):

<div *ngFor="let item of cities;let index = index;">
  <input [(ngModel)]="cities[index]">
</div>

یعنی به جای متغیر item از اندیس‌های آرایه برای مقداردهی به ngModel استفاده می‌کنیم. به این ترتیب مشکل قبلی حل میشه، ولی در زمان اجرا کاربر در تغییر مقدار input مشکل خواهد داشت. فرض کنید کاربر می‌خواد مقدار urmieh (عنصر سوم آرایه) رو به urmia تغییر بده، تصمیم می‌گیره اول eh رو از انتهای کلمه پاک کنه و بعد a رو اضافه کنه. ولی همینکه h رو پاک می‌کنه، مکان‌نما (curser) از input مربوطه خارج میشه، در واقع focus از روی input برداشته میشه و کاربر باید دوباره روی اون input کلیک کنه تا بتونه تغییر بعدی رو اعمال کنه. این روند با هر تغییری در ورودی‌ها تکرار میشه.

علت اینه که با هر تغییر، انگولار مجددا DOM رو بازسازی می‌کنه و به این ترتیب focus روی input قبلی ازدست میره. برای رفع این مشکل، ابتدا تابعی رو تو کامپوننت مربوطه به صورت زیر تعریف می‌کنیم:

trackByIndex(index: number, item: any) {
  return index;
}

و مجددا کد مربوط به حلقه‌ی ngFor رو تغییر می‌دیم (بخش پر رنگ اضافه شده):

<div *ngFor="let item of cities;let index = index;trackBy:trackByIndex;">
  <input [(ngModel)]="cities[index]">
</div>

در اینجا ما از ویژگی trackBy در حلقه‌ی ngFor استفاده کردیم. به طور کلی، استفاده از این ویژگی یکی از توصیه‌ها برای افزایش کارایی در استفاده از ngFor در انگولار هستش، بخصوص وقتی تعداد عناصر حلقه زیاد و امکان تغییر اونها توسط کاربر وجود داشته باشه. تابعی که به این ویژگی نسبت داده میشه (ما اسمش رو trackByIndex گذاشتیم) همیشه دو پارامتر ورودی می‌گیره، اندیس عنصر مربوطه در آرایه و خود عنصر، و باید یه مقدار منحصر به فرد برای هر عنصر برگردونه تا انگولار بتونه با استفاده از اون فقط عنصری که مقدارش تغییر کرده رو بروز کنه و نیاز به بازسازی کل DOM نداشته باشه. ما در مثال بالا اندیس عنصر در آرایه رو بر می‌گردونیم.

۰ نظر
فربد صالحی

چو تخته پاره بر موج

من ۹ ماهه بودم که پدرم طی یه حادثه فوت کرد. بنابراین اصلا خاطره‌ای از پدرم ندارم. از وقتی هم که یادم میاد هیچ مراسم و سالگردی توسط خانواده برای پدر برگزار نشد. شاید اولین بار که تو سن ۴-۵ سالگی عکس یه آقایی رو تو آلبوم خونوادگی دیدم و پرسیدم که این کیه، به من گفتن که باباست و فوت کرده. اما به دلیل سن کم باز هم درکی از مفهوم پدر و موضوع مرگ نداشتم.

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

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

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

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

۰ نظر
فربد صالحی