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

هزینه‌ی بددانستن از ندانستن بیشتر است

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

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

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

چرا تست و آزمون؟

۱. آزمون‌نویسی سرعت توسعه‌ی کد را به شدت زیاد می‌کند چرا که شرایط مد نظر برای بررسی موضوع خاصی رو خیلی سریع و تکراری فراهم می‌کند
۲. آزمون نوشتن توسط اعضای تیم انتظارات آنها از هم را به شدت واضح می‌کند
۳. آزمون‌نویسی کمک می‌کند جنبه‌های هرچه بیشتری از کد و برنامه بررسی شود.
۴. آزمون‌نویسی به ما اطمینان می‌دهد با هر تغییری در یک بخش از کد، سایر بخش‌ها رفتار پیش‌بینی‌نشده نمی‌دهند (ممکن است رفتار سایر بخش‌ها تغییر کند که با اجرای آزمون، مشخص خواهد شد و ما تصمیم می‌گیریم رفتار آزمون را تغییر دهیم یا رفتار کد را)

یکی از ایرادهای ماژول‌های جاوااسکرپیت

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

شما از چه ابزاری برای پروتوتایپ استفاده می‌کنید؟

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

ادامه مطلب

اولین برنامه با زامارین و ویژوال‌استودیو

من عاشق ویژوال‌استودیو هستم و این عشق رو هم مخفی نمی‌کنم 🙂

مدتهاست می‌خوام با ویژوال‌استودیو برای اندروید برنامه بنویسم و چند روزه که دارم تلاش می‌کنم

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

  1. مشکل اول. سلوشون را جابه‌جا کردم و دیگه برنامه کار نکرد! به نظر میاد نشانی‌ای که در سلوشون به بیلدتارگت‌ها داده شده، پیدا نمیشه. راه‌حل من؛ یک سلوشون جدید ساختم :))
  2. مشکل دوم. وقتی وی‌اس رو می‌بندم و دوباره باز می‌کنم خطای زیر رو میده:

    PathXYZ.csproj: Warning XA0105: The $(TargetFrameworkVersion) for XXXX (v6.0) is greater than the $(TargetFrameworkVersion) for your project (ZZZZ). You need to increase the $(TargetFrameworkVersion) for your project. (XA0105) (ProjectXYZ)
    راه‌حل من؛ گذاشتم نوگت همه ابزارهای مورد نیازش رو یکبار دیگه بگیره و به نظر حل شد

  3. شبیه‌ساز ویژوال‌استودیو برای اندروید نیاز داره HyperV خاموش باشه!!

چطوری با کلید اختصاصی، برنامه اندروید را در اندروید استودیو دیباگ کنیم؟

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

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

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

این فرآیند دردآور کلی طول می‌کشید و تازه چندین بار هم باید تکرار می‌شد تا جواب مد نظر رو به دست بیارم.

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

وضعیت رو دردناک‌تر هم بکنم! زمانی که اکلیپس خطای رم و مموری میداد و کرش می‌کرد و ……

ادامه مطلب

محاسبه ساده اندازه تصاویر برای اندروید

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

مثلا اگر یک عکس داشته باشید که برای چگالی xxxhdpi باشد و عرض آن ۱۲۰۰ پیکسل باشد، برای اندازه xhdpi اندازه‌اش چقدر باید باشد؟

برای حل این مشکل به ظاهر ساده، ولی سخت یک فایل اکسل ساده درست کردم به صورت زیر:

excel

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

مثلا در این حالت، تصویری که من داشتم مناسب برای چگالی xxhdpi با عرض ۱۸۴ پیکسل بود. متناسب با این تصویر، می‌توانم برای چکالی ldpi تصویری با عرض ۶۹ پیکسل، متناسب با چگالی mdpi تصویری با عرض ۹۲ پیکسل و …. قرار دهم

دانلود فایل اکسل برای تبدیل چگالی‌های مختلف اندروید به هم

 

چطوری در شبیه‌ساز جنی‌موشن (Genymotion)، صفحه‌کلید را نشان دهیم؟

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

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

ادامه مطلب

سرویس فوق العاده TinyPNG برای کاهش حجم برنامه های اندروید

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

چندین فرمت عمده تصاویر که تقریبا همه جا مورد پشتیبانی هستند، عبارتند از BMP، JPG، GIF و PNG. ادامه مطلب

تولید بانک های اطلاعاتی برنامه های اندروید با OrmLite

بانک های اطلاعاتی جز جداناپذیر اغلب برنامه های کاربردی هستند. فرقی نمی کند شما بخواهید یک برنامه todo ساده بنویسید یا برنامه پیشرفته مدیریت مالی، در هر صورت شما نیاز به بانک اطلاعاتی دارید. در اندروید هم به طور ویژه به این موضوع پرداخته شده و به صورت پیش فرض بانک اطلاعاتی SQLite پشتیبانی می شود.

ادامه مطلب