اولین تجربهی دورکاری حرفهای من وقتی بود که دفتر شرکتی که در آن مشغول به کار بودم به خارج از ایران منتقل شد. دوست داشتم به همکاری با آنها از راه دور ادامه بدهم. در آن زمان تجربه و الگویی در این زمینه نداشتم. ترجیح میدادم کار را به خانه نبرم، مثل یک کارمند سادهی بانک که بعد از پایان ساعات اداری دیگر هیچ دغدغهی فکری دربارهی کارش ندارد. میخواستم بعد از ساعات اداری انرژی باقیمانده را صرف پروژههای جانبی و کسب مهارتهای جدید کنم. ولی بعد از انتقال شرکت درست در وضعیتی قرار گرفته بودم که از آن پرهیز میکردم.
یکی از چالشهای مهم مشتریان سارینا، انتخاب بین نسخهی عمومی و سازمانی مجنتو است. ما در حین جلسات بررسیِ درخواست مشتریان اغلب با این سوالات مواجه میشویم:
«آیا نسخهی عمومی مجنتو (Magento Community) میتواند پاسخگوی کلیهی نیازهای فعلی و آتی ما باشد؟» «چه امکاناتی در نسخهی سازمانی مجنتو (Magento Enterprise) وجود دارد که در نسخهی عمومی وجود ندارد؟» «خدمات سارینا روی کدام نسخه از مجنتو ارائه میشود؟» «آیا امکان انتقال از نسخهی عمومی به نسخهی سازمانی وجود دارد؟»
در ادامه به بررسی وجوه تمایز نسخهی سازمانی و عمومی مجنتو و همچنین نقش سارینا به عنوان ارائه کنندهی خدمات تخصصی مجنتو میپردازم.
بعضی از مشتریان سارینا که قصد راهاندازی فروشگاه اینترنتی دارند، بنا به سلیقه و نیازهایشان، گاهی یکی از قالبهای آمادهی مجنتو را خریداری میکنند. سپس تیم سارینا مراحل نصب، راهاندازی، طراحی و غیره را آغاز میکند. اکثر قالبهای مجنتو چپچین هستند، در نتیجه یکی از وظایف ما راستچین کردن قالبهای مجنتو است. تعداد کمی از قالبهای مجنتو به شکل راستچین وجود دارند. یکی از سوالاتی که همیشه ذهن مشتریان ما را درگیر میکند، این است که کدام قالب را انتخاب کنند؟ قالب راستچین مجنتو یا قالبی که ما آن را راستچین میکنیم؟ این مطلب به تفاوت این دو قالب اختصاص دارد.
یکی از رایجترین مشکلاتی که در هنگام کار با CSS وجود دارد، درک نادرست از چگونگی حق تقدم سلکتورها است.
این مشکل آنجا خودش را حسابی نشان میدهد که بخواهید CSS نوشته شدهی خودتان را بر روی CSS دیگری اعمال کنید، مانند راستچین کردن یک قالب.
نمود دیگر این مشکل زمانی آشکار میشود که یک وباپلیکیشن پیچیده طراحی کنید و به دلیل بزرگی آن، بیدلیل در داکیومنت خود کلاس و ID ایجاد کنید.
آیا متد find_each
را میشناسید؟ اگر با Ruby on Rails کار کرده باشید حتماً از این متد استفاده کردهاید. find_each
و متد مشابه آن each
، برای گرفتن رکوردها به صورت تکتک استفاده میشوند. به عنوان مثال:
People.find_each(&:party_all_night!) People.each(&:party_all_night!)
تفاوت بین find_each
و each
در نحوهی پیادهسازی آنهاست. متد each
تمام رکوردها را در یک آرایه ذخیره میکند و یک Enumerator
برای این آرایه خروجی میدهد. حالا فرض کنید تعداد رکوردها چند میلیون باشد. تمام این چند میلیون ActiveRecord
باید در حافظه ذخیره شوند. میزان مصرف حافظه سرسامآور خواهد شد. این میتواند مشکلساز باشد، مخصوصا برای پروسسهایی که عمر طولانی دارند چون که Ruby حافظهی گرفته شده را به سیستم پس نمیدهد (و در عوض در آینده از آن دوباره استفاده میکند).
کمالگرایی یا وسواس، اسمش را هرچه بگذاریم، این ویژگی خوب یا بد در من نهادینه شدهاست؛ با این نگرش، میتوان اثبات کرد که “هر چیزی میتواند بهتر شود”. به همین دلیل تصمیم گرفتم تا به شکل عملی، نمونهای کوچک از روند و نتیجه بهینهسازی رابط کاربری (User Interface) و تجربه کاربری (User Experience) را به شما نمایش دهم.