<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های hamed.rahimvand</title>
        <link>https://virgool.io/feed/@hamed.rahimvand</link>
        <description>عاشق برنامه نویسی اندروید ام :)</description>
        <language>fa</language>
        <pubDate>2026-06-16 16:28:50</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/22835/avatar/mUJTY1.png?height=120&amp;width=120</url>
            <title>hamed.rahimvand</title>
            <link>https://virgool.io/@hamed.rahimvand</link>
        </image>

                    <item>
                <title>وجب زدن اندروید در اسنپ!</title>
                <link>https://virgool.io/snapp-eng/vajab-snapp-bjvauonsxja8</link>
                <description>مقدمههمیشه تو برنامه نویسی اندروید یک چالش گریبان‌گیر همه‌ی ما بوده. چالشی که موقع پیاده‌سازی دیزاین(طراحی) هر صفحه زمان زیادی میگیره و بچه‌های تیم  QA هم موقع تست کلی ایرادهای متنوع پیدا میکنن و باید دوباره زمان بذاریم و رفعشون کنیم. این چالش چیزی نیست جز «سایزها و اندازه‌های مختلف گوشی‌های اندرویدی» که همه‌ی ما برنامه‌نویسای اندروید بارها باهاش دست و پنجه نرم کردیم.اگر شما هم با این چالش رو به رو شدین و دوست دارید بدونید تو تیم اندروید اسنپ cab چطوری رفع شده این مقاله میتونه براتون جالب باشه.يادآوری:بهتره برای شروع مفاهیم Pixel, DPI, DSP و SP رو با هم مرور کنیم.پیکسل (Pixel): کوچکترین عنصری که در یک صفحه نمایشگر آدرس‌دهی میشه تا تصویری رو نشون بده.اDP یا Dots Per Inch (که بهش PPI یا Pixel Per Inch هم میگن): تعداد پیکسل‌هایی که در یک اینچ مربع قرار میگیرند و اصطلاحا رزولوشن گفته میشه. وقتی میگیم رزولوشن یه صفحه نمایشگر 160dpi هست یعنی در یک اینچ مربع از صفحه نمایشگر ۱۶۰ پیکسل وجود دارد.طبق همین تعریف اگر بخوایم در نمایگشر شکلی بکشیم که ۲ پیکسل عرض و ۲ پیکسل طولش باشه همینطور که تو تصویر میبینید با توجه به رزولوشن نمایشگر اندازه‌ی شکل کوچک و بزرگ میشه.https://www.altova.com/بع عکس از اونجایی که اتفاقی که می‌افتاده اصلا خوشایند نیست واحد دیگه ای به اسم DP یا DensityIndependent Pixels تعریف شد که همونطور که از اسمش مشخصه به ما این امکان رو میده که شکل مورد نظرمون تو رزولوشن‌های مختلف یکسان و یک‌اندازه دیده بشه.SP یا Scalable Pixels : مانند DP مستقل از رزولوشن هست فقط با این تفاوت که فقط برای اندازه‌ی فونت‌ها استفاده میشه و مقداری که کاربر برای سایز فونت تو تنظیمات گوشی مشخص می‌کنه در این عدد ضرب میشه.بر اساس تعریف‌های بالا وقتی بخوایم شکلی رو توی صفحه نمایش بدیم باید سایزش بر حسب پیکسل مشخص باشه. کاری که ما انجام میدیم اینه که در فایل XML شکل رو بر اساس واحد DP یا SP قرار میدیم و با فرمول زیر ابعادش بر حسب پیکسل محاسبه میشه.px = dp * (dpi/number_of_pixles)مشکل یا چالشبه قول تریماگاسی، Obvious. مشکل این بود که محتوای صفحات حتی در نمایشگرهای کوچک هم به راحتی قابل نمایش باشن. یک راه کلی استفاده از دیزاین‌های متفاوت بر اساس رزولوشن‌های متفاوته ولی این راه حل همیشه پاسخگوی نیاز ما نیست و تو مواردی نمیتونیم اجزای رو عوض کنیم. مثلا در صفحه درخواست سفر و صفحه سفر، داشتن دیزاین‌های متفاوت برای رزولوشن‌های متفاوت عملا برای ما امکان‌پذیر نبود.با استفاده از واحدهای DP و SP مشکل پیکسل‌ها و رزولوشن‌های مختلف برطرف میشه ولی مساله‌ی دیگه ابعاد متفاوت گوشی‌های اندرویده. راه حل متداول این مشکل پیاده‌سازی چند لایه‌ی مختلف برای یک صفحه بر اساس Smallest Screen Width هست و همونطور که اشاره کردم این کار منابع زیادی از نظر زمان و تعداد افراد مصرف می‌کنه.تو دیوایس‌های بزرگ فاصله‌ی بین اجزای صفحه خیلی زیاد می‌شد و نوشته‌ها هم با توجه به بزرگی صفحه نمایش کوچک می‌شدن. تو دیوایس‌های کوچک هم به خاطر زیاد بودن اجزای صفحه، آیتم‌ها مثل اسپاگتی در هم فرو می‌رفتن. زمان زیادی از اعضای تیم صرف رفع کردن مشکلات دیزاین تو سایزهای مختلف می‌شد.راه حل و ایده ایده‌ی کلی از SDP الهام گرفته شده. به جای داشتن چند لایه‌ی مختلف، چند دایمنشن(Dimention) مختلف تو Smallest Screen Width متفاوت نوشتیم.واحد جدیدی به اسم RSP یا Responsive Scalable Pixels و RDP یا Responsive Density-Independent Pixels ایجاد کردیم و اندازه‌ی مبنا رو ابعاد sw390dp در نظر گرفتیم و باقی swها رو با اختلاف مقیاس از این مبنا محاسبه کردیم.یعنی در دایمنشن‌های مبنا هر یک DP یا SP برابر با یک RDP یا RSP هست. https://gist.github.com/rvhamed/df280748eba23927bd68668ad4976b99 محاسبه‌ی باقی swها که بزرگتر از ۳۹۰ هستن به صورت زیر است :base = 390,  target = 420dp = (target/base) * rdp https://gist.github.com/rvhamed/6fae8483b3b7be845c4762e7b26e8607 و اما نتیجه‌ی کار؟در تصویر زیر ۴ گوشی مختلف رو می‌بینید، دو گوشی بالا پیاده‌سازی یک صفحه‌ی نمونه با سایزهای SP و DP هستند و دو گوشی پایین پیاده‌سازی همون صفحه با سایزهای RSP و RDP. با استفاده از این روش اپلیکیشن اسنپ روی گوشی‌های مختلف با ابعاد و رزولوشن‌های متفاوت تا حد زیادی به یک شکل دیده میشه.مقایسه DP با RDP  به عنوان آخرین نکته هم این رو بگم که ما ابعاد مستقیم رو داخل کد قرار نمیدیم و به جاش ابعاد رو داخل تم‌ها میذاریم و به صورت ویژگی یا attribute ازشون استفاده میکنیم. اینطوری ابعاد جدیدی که تعریف کردیم داخل کد نیست و کد تمیزتر به چشم میاد. https://gist.github.com/rvhamed/e25c89a3768f48959ad9083332c75d5a این مدل پیاده‌سازی در نسخه‌ی فعلی اسنپ استفاده نشده و قراره که در نسخه‌های بعدی ازش استفاده کنیم. در آخر یه تشکر ویژه هم از  سینا فرحزادی میکنم که کمک کرد این مقاله رو بنویسیم و نقش خیلی مهمی تو پیاده سازی این ایده داشت. ❤️و یک تشکر ویژه هم از نازنین دست سری میکنم که تو ویراستاری مقاله کمک شایانی کرد. ❤️امیدوارم این مقاله براتون مفید بوده باشه.  ☺️ اگه سوالی داشتین میدونین کجا پیدام کنین. همه جا!</description>
                <category>hamed.rahimvand</category>
                <author>hamed.rahimvand</author>
                <pubDate>Sun, 06 Feb 2022 11:10:56 +0330</pubDate>
            </item>
                    <item>
                <title>تسلط بر TouchEvent ها در اندورید</title>
                <link>https://virgool.io/MobileLab/%D8%AA%D8%B3%D9%84%D8%B7-%D8%A8%D8%B1-touchevent-%D9%87%D8%A7-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D9%88%D8%B1%DB%8C%D8%AF-mvyaciolpqun</link>
                <description>در این مقاله سعی کردم بصورت مفصل درباره TouchEvent ها در اندروید توضیح بدم و نکات لازم رو بنویسم. سوالی که همیشه هنگام کار با کاستوم ویو ها پیش میاد اینه که از onTouchEvent استفاده کنیم یا onInterceptTouchEvent ؟ اصلا چه فرقی دارن و چیکار میکنن؟ ?چرخه Touch: یک نمونه Hierarchy از لایه ها در اندروید وقتی که کاربر ویوی از صفحه نمایش رو لمس میکنه متد onInterceptTouch طبق سناریوی زیر صدا زده میشه. کار این متد مطلع کردن لایه های پایین تر از اکشن های تاچ هست. متد onInterceptTouch رو فقط ViewGroup ها دارن. میتوان برای مطلع شدن از Touch در اکتیویتی  از متد dispatchTouchEvent و برای مطلع شدن از Touch در view ها از onTouchEvent استفاده کرد. هر سه متد مقدار بازگشتیشان از نوع Boolean هست و اگر به متد true برگردد یعنی Touch هندل شده و به لایه بعدی منتقل نکن، ولی اگر false برگردد یعنی Touch هندل نشده و event به لایه بعدی منتقل بشه.سناریو و ترتیب صدا شدن متد ها: با لمس کردن صفحه ابتدا اکتیویتی این نوتیفای رو دریافت میکنه و متد dispatchTouchEvent صدا زده میشه. در صورت false بودن event به Window فرستاده میشه. window یک abstract class  هست که پیاده سازی این کلاس PhoneWindow هست. بعد dispatchTouchEvent برای DecorView صدا زده میشه که این کلاس از یک FrameLayout  ارث برده شده، در این کلاس استاتوس بار و باتوم نویگیشن هندل میشن. این کلاس چون یک ViewGroup هست پس متد onInterceptTouchEvent هم داره که صدا زده میشه. ما چون دسترسی ای به این دو کلاس نداریم پس کاری هم باهاشون نداریم و فقط اینجا آوردم تا سلسله مراتب کامل گفته بشه. مرحله بعد نوبت به ViewGroup هامون میرسه. ViewGroup اول rootView هستش. همون ViewGroup که تو لایه xml برای اکتیویتی در نظر میگیریم. ViewGroup دوم هم child اولی هست. همونطوری که بالا گفته شد ترتیب صدا شدن متد ها تو ViewGroup ها اول dispatchTouchEvent هست. بعد onInterceptTouchEvent. در آخر درصورت false بودن مقدار بازگشتی  همه این ها که تا اینجا اومدی متد onTouchEvent در View صدا زده میشه. اگه به view اینترفیس OnTouchListener داده شده باشه متد OnTouchListener.onTouch و onTouchEvent هر دو صدا زده میشن، اگر null بود فقط onTouchEvent صدا زده میشه.ازینجا به بعد چی میشه؟ پس onTouchEvent های لایه های بالاتر چی؟ چرا اونا صدا زده نشدن؟؟؟ اول کمی بهش فکر کنید بعد به تصویر پایین نگاه کنید.چرخه Touch در اندرویددر تصویر بالا کلاس های PhoneWindow و DecorView رو چون بهشون دسترسی نداریم نیاوردم. مسیر گیج کننده ای که بالا بهتون توضیح دادم رومیتونید تو عکس بالا بررسی کنید و با مسیر حرکت کنید تا براتون شفاف بشه. dispatchTouchEvent و onInterceptTouchEvent از بالا ترین لایه میان تا پایین ترین لایه. به همه لایه ها نوتیفای میکنن که Touch رخ داده و آبجکتی از نوع MotionEvent  با خودشون حمل می کنند. متد onTouchEvent از پایین ترین لایه شروع به حرکت می کنه و اگر کسی true برنگردونه تا بالاترین لایه یعنی اکتیویتی میره. این رو بصورت یک چرخه دائم و حرکت در نظر بگیرید تا بتونه اولین متدی که true برگردونه رو پیدا کنه. این لووپ اینقدر تکرار میشه تا onTouchEvent ای رو پیدا کنه که true شده. فرض کنید از لایه بالا سروع به حرکت میکنه تا به ViewGroup B برسه و در اینجا متد onInterceptTouchEvent مقدار true بر میگردونه. این true برگردوندن یعنی من تاچ رو هندل میکنم و به لایه های پایینتر نده. بعد onTouchEvent از ViewGroup B صدا زده میشه. اگه true باشه هنگام انتشار اکشن های بعدی این چرخه دیگه تکرار نمیشه و مستقیم فقط متد onTouchEvent از ViewGroup B  صدا زده میشه. اگه هم false برگردونه که چرخه باز تکرار میشه ولی لایه های پایین تر دیگه نمیرسه.تا اینجای کار چرخه Touch رو سعی کردم کامل توضیح بدم. و الان وقتشه تا با اکشن ها آشنا شیم.انواع اکشن ها:آبجکت MotionEvent به ما چهار اکشن مهم میده. اکشن های دیگه ای هم هست که اینجا گفته نمیشن.ACTION_DOWNACTION_UPACTION_MOVEACTION_CANCELسری اول که صفحه رو لمس می کنیم ACTION_DOWN داده میشه. یعنی کاربر انگشتش رو گذاشت رو صفحه. سری های بعدی ACTION_MOVE که یعنی کاربر داره انگشتش رو روی صفحه میکشه و در آخر ACTION_UP که یعنی کاربر انگشتش رو از روی صفحه برداشت ?. حالا ACTION_CANCEL پس چیه؟ این اکشن زمانی داده میشه که onInterceptTouchEvent میاد Touch رو هندل میکنه و به لایه پایین تر خودش ACTION_CANCEL  رو میده.متد requestDisallowTouchInterecept کارش چیه؟ ?فرض کنید یک کاستوم ویو دارید که داخل یک اسکرول ویو هست. و میخوایید داخل این کاستوم ویو یک مربع رو جابجا کنید. در حالت عادی اگه اینکار رو کنید اسکرول ویو هم جابجا میشه ?. اینجا تو متد onTouchEvent کاستوم ویو باید متد requestDisallowTouchInterecept رو صدا بزنیم تا به لایه های بالاش بگه که دیگه onInterceptTouchEvent صدا زده نشه? اینجوری مشکل حل میشه و دیگه اسکرول نمیشه. فقط مربع تکون میخوره.اینم از  چرخه Touch در اندروید ? اگه جاییش مشکل داشت لطفا راهنمایی کنید تا اصلاحش کنیم.</description>
                <category>hamed.rahimvand</category>
                <author>hamed.rahimvand</author>
                <pubDate>Mon, 03 Aug 2020 15:25:44 +0430</pubDate>
            </item>
                    <item>
                <title>از  Design به Canvas در اندروید</title>
                <link>https://virgool.io/MobileLab/design-to-canvas-nbcuvcjot9ju</link>
                <description>یکی از چالش هایی که تقریباْ همه توسعه دهنده های اندروید با آن سروکار دارند پیاده سازی دیزاین هایی هست که دیزاینر ها آن ها رو با نرم افزار های حرفه ای طراحی کرده اند و طبیعتاْ ما هم در کد باید پیادشون کنیم. ??‍♂️چالش و انتخاب روش درست چیه؟معمولا برای پیاده سازی رابط کاربری در اپلیکیشن، از آیکون ها و شکل های هندسی با فرمت های Svg و Png خروجی گرفته می شه و در پروژه قرار داده می شه. گاهی این روش پیاده سازی مشکلاتی رو برای ما به وجود میاره . مشکلاتی مثل بالارفتن حجم برنامه، عدم پشتیبانی کامل Vector از Svg در تبدیل ها، مثل خط های بریده بریده  (Dashed lines) و ... ☹️.اینجاست که به سراغ طراحی شکل های هندسی با canvas میریم که فقط کمی ? مسیر سخت تر و وقت گیرتری نسبت به روش قبلی هست. ولی اصلا جای نگرانی نیست، چون قراره با هم در زیر یک دیزاین پیچیده رو به راحتی و خوشمزگی یک کیک خامه ای بزرگ پیاده سازی کنیم.?مثلا یک دیزاین پیچیده ?یک دیزاین پیچیدهاینجا دو خط بریده بریده، یک شکل منحنی با گرادینت، دو دایره که یکی بریده بریده است و یک آیکون ضربدر داریم.بریم سراغ پیاده سازی طراحی... ?‍?چجوری؟اول اینکه سورس رو میتونید از اینجا بگیرید.روت پروژهداخل پکیج utils یک اینترفیس به اسم CustomViewHelperInterface داریم. در این اینترفیس علاوه بر یک سری متغییر که قراره مقداردهیشون کنیم فاکنشن ها و اکستنشن هایی هم هستن که قرار یه سری محاسبات ریز رو انجام بدن. (اکستنشن ها رو کل پروژه تاثیر نمیذارند و فقط کلاس هایی که این اینترفیس رو پیاده سازی کردند میتونن ازشون استفاده کنند.)کلاس SampleCurveView اینترفیس مارو پیاده سازی و چهار متغییر مهم رو مقدار دهی کرده.متغییر هایی که باید مقدار دهی بشنتکه کدی از کلاس CustomViewHelperInterfaceمتغییر های artboardHeight و artboardWidth طول و عرض artboard دیزاین ما هستن که دیزاینر به عنوان فایل دیزاین داده بهمون. متغییر های targetHeight و targetWidth هم طول و عرض ویویی هست که میخوایید روی آن بکشید.برای نمونه در کلاس SampleCurveView متغییر ها بصورت زیر مقداردهی شدنتکه کدی از کلاس SampleCurveView با توجه به مقدارهای اولیه باید بتونیم رابطه ای بین نقاط طراحی در دیزاین و ویوی هدف بدست بیاریم. این رابطه در سه مرحله انجام میشه که جلوتر میگم.مختصات نقاطاگه تجربه کار با canvas رو داشته باشید میدونید که canvas برای کشیدن هرچیزی نیاز به مختصات داره. یعنی از ما x و y  جایی رو میخواد که میخواهیم در آنجا شکل کشیده بشه. مختصات باید ریسپانسیو باشند تا در هر صفحه نمایش دقیقا جایی که باید باشند قرار بگیرند. برای این منظور (مرحله اول) ابتدا مختصات رو در صفحه طراحی بدست بیاریم، (مرحله دوم) بعد درصد مختصات رو نسبت به ابعاد artboard طراحی بدست بیاریم و (مرحله سوم) در آخر از این درصد برای بدست آوردن مختصات نقاط در صفحه نمایش مورد نظر استفاده کنیم.در تکه کد زیر مقدار درصد x,y در صفحه دیزاین رو بدست میاریم.محاسبه درصد مختصات نسبت به ابعاد artboardبا متد های زیر هم درصد به دست آمده رو تبدیل می کنیم به طول و عرض ابعاد ویومون.تبدیل درصد مختصات طراحی به ابعاد view کیک خامه ای کدخب نوبت به کیک خامه ایه ?، اونم بعد کلی رابطه و توضیحات طبق تکه کد بالا از اینترقیس CustomViewHelperInterface دیگه نیازی به استفاده از متدهای محاسباتی گفته شده نداریم. فقط کافیه از اکستنشن های toResponsiveHeight و toResponsiveWidth استفاده کنیم.canvas?.drawCircle(74.01.toResponsiveWidth(), 360.5.toResponsiveHeight(), r, paint)برای کشیدن دایره به مختصات دایره ای که تو دیزاین خواسته شده فقط کافیه x و y دایره رو که در دیزاین هست با اکستنشن های  toResponsiveWidth و toResponsiveHeight به مختصات جدید تبدیل کنیم. به همین راحتی ?مقاله کمی طولانی میشه ولی دوست دارم راجب کشیدن Bezier curves هم بگم بهتون. تا اینجا لپ کلام دستتون اومده و ازینجا به بعد فقط جهت تسلط بیشترتون هست.هر منحنی چهار نقطه اساسی داره. دو End Point و دو Control Point.Bezier curveاگه از ابزار هایی مثل Sketch یا Adobe xd استفاده می کنید بدست آوردن مختصات هریک از این نقطه ها خیلی راحته. روی هر نقطه که کلیک کنید بالا سمت راست مختصات به شما داده میشه و فقط کافیه مختصات رو با اکستنشن ها تبدیل کنید به مختصات جدید برای ویوتون. پیاده سازی طراحی بالا بصورت کامل در کلاس SampleCurveView قرار دارد.امیدوارم ازین به بعد تو طراحی هاتون دیگه مشکلی با کشیدن اشکال مختلف و عجیب هندسی نداشته باشید ?.لینک گیتهاب پروژه:https://github.com/rvhamed/easy_draw</description>
                <category>hamed.rahimvand</category>
                <author>hamed.rahimvand</author>
                <pubDate>Sun, 21 Jun 2020 13:45:47 +0430</pubDate>
            </item>
                    <item>
                <title>خط مرگ یا Dead Line</title>
                <link>https://virgool.io/@hamed.rahimvand/dead-line-rjfglbsa7xod</link>
                <description> یکی از استرس زا ترین تجربه های کاری که داشتم تجربه Dead Line غیر اصولی بود، اگه با Dead Line هیچ مشکلی ندارید بهتره که ازین نوشته رد شید :) .برای اینکه شخص یا شرکتی زیر سؤال برده نشه، از نامی استفاده نمی‌کنم :).تیمی ۱۳ نفره رو یک پروژه  کار می‌کردیم که افراد تیم شامل اندروید کار ها،بک-اند و فرانت-اند، مدیر پروژه و… بودند. مدیر پروژه زمینه‌ای در برنامه نویسی نداشت و سابقه چندساله مدیریتی اش به سبک دولتی و شرکت های جهان سومی بود! با این طرز فکر که اگر به پرسنل زیر دست &#x27;&#x27;فشار&#x27;&#x27; وارد نشه کار ها پیش نمیره و همه از زیر کار در میرن. همین طرز فکر باعث شده بود پروژه با کندی هرچه تمام تر پیش برود. چراکه این طرز فکر خوراکش از بین بردن انگیزه در تیم و در نتیجه ریزش تیم و جایگزینی افراد تیم با نیرو های جدید است(اگر پروژه نابود نشود!).تیم با اسم اسکرام آشنا بود و بدون CTO و اسکرام مستر پروژه استارت خورده بود! ( اینکه چه مشکلاتی و چه تجربیاتی غیر از Dead Line در این بازه داشتم را به امید خدا در نوشته‌های بعدی میگم)مدیر پروژه آدمی منظم بود و دوست داشت همه ی کار ها طبق زمان و نظم حرکت کنند، ازاینرو ابتدای هر تسکی که افراد تیم می‌خواستند انجام دهند از آن‌ها زمانبندی می‌خواست، مراحل ارائه زمانبندی به شرح زیر بود:درخواست زمانبندی از جانب مدیریت بصورت فوری (گاهی نیز قبل از کارشناسی، بررسی و تفکیک تسک ها)ارائه زمانبندی حدودی از جانب افراد تیمرد کردن زمانبندی از جانب مدیریتگفت و گوی فرد با مدیریت در مورد علت رد کردن زمان بندی(کلام آخر از جانب مدیریت: این تسک به نظرم یک هفته نیاز ندارد، فوقش یک روز، مگه میخواهی چیکار کنی؟… و در آخر: باشه اگه می تونی تو دو روز بزن و اگه نمیتونی اصلاً شروعش نکن. (چانه زنی!!!)).ارائه زمانبندی غیر استاندارد و کارشناسی نشده و $&amp;%* … به مدیریتتأیید و تحسین مدیریتشروع تسک هاخب گاهی هم به این کوتاهی ها نبود و این چرخه کمی طولانی‌تر می شد، پنج تا شش باری می‌شد که این زمانبندی می‌رفت و بر می‌گشت :). این چرخه زمانبندی توسط  شخصی کنترل می شد که تو زمینه مهندسی نرم افزار هیچ تخصصی ندارد. خب حالا بنظرتون چرخه ی بالا چه پیامدی برای تیم و پروژه داره؟ اگه شما جای فرد ارائه دهنده بودید چه تصمیمی می گرفتید؟ تجربه چنین چرخه ای رو داشتید؟چرخه ای که گفته شد پیامد های بیشماری دارد، اینجا مواردی که شخصاً توی تیم مشاهده و تجربه کردم رو براتون بیان می کنم:کاهش انگیزه و انرژی افراد تیم افزایش فشار روانی روی افراد تیم کاهش تمرکز و performance تیم افزایش استرس زیاد برای تحویل ندادن به موقع قالب شدن فرهنگ نادرست &#x27;&#x27; بزنیم فقط کار کنه بره &#x27;&#x27; کثیفی کد ها، نداشتن معماری و دیزاین پترن و… باگ های فراوان، به نحوی که آخر پروژه وقتی باگ یک بخش گرفته می‌شد باگ شش بخش دیگه میزد بیرون.هر کدام از پیامدهای بالا خود پیامد هایی را بهمراه داره که در حال حاضر مکان و زمان مناسب برای گفتنشان نیست.   منظور از Dead Line چیست؟ برای یک زمانبندی خوب و یک Dead Line جذاب چه نکاتی را باید رعایت کرد؟! یک Dead Line خوب چه فوایدی دارد؟واژه Dead Line یا همان ضرب العجل یعنی آخرین مهلت تحویل پروژه (البته در اینجا این معنی را می‌دهد:)).معنی لغوی این واژه یعنی خط مرگ، ریشه این واژه بر می‌گردد به زندان ها، خط مرگ را برای زندانیان می‌کشیدند و زندانیان نباید از این خط ها عبور می کردند. هر کسی از این خط عبور می‌کرد عواقبش پای خودش بود.اگر Dead Line  به خوبی بکار برده شود می‌توان در تمامی مراحل زندگی از آن استفاده کرد. طبیعت انسان به دنبال آرامش است و ذهن تمام تلاش خود را می‌کند تا از شرایط سخت پرهیز کند. با این تفاسیر اگر زمانی تعیین شود و گفته شود که تا این زمان باید کاری انجام گیرد و اگر انجام نشود عواقبی در انتظار است، ذهن تلاش می‌کند تا در این بازه کار را به اتمام برساند. Dead Line های شما چیست؟چیزی که کاملاً بدیهی است اگر یک زمانبندی بصورت کارشناسی شده باشد و Dead Line  قرار داده شده کاملاً حساب شده از جانب متخصص آن کار باشد فوایدی چون موارد زیر در پی خواهد داشت:- بهبود و افزایش تمرکز تیم روی پروژه- بهبود و افزایش روحیه و انگیزه افراد تیم- افزایش سرعت انجام تسک ها و کاهش زمان انجام پروژه- کد های تمیز تر و باگ های کمتر- نظم و هماهنگی یکپارچه بین افراد- افزایش سطح علم اعضای تیمپس به‌قدری که اسمش ترسناک هست خودش نیست :).در آخر در یک جمله &#x27;&#x27;در کاری که تخصصی نداریم، یا وارد نشویم یا اگر وارد می‌شویم افراد متخصص را با جهالتمان زیر سؤال نبریم.&#x27;&#x27;یک برنامه نویس هستم نه یک روانشناس و این نوشته فقط تجربه شخصی خودم بود. امیدوارم تأثیر مثبتی براتون داشته باشه. به سوال هایی هم که پرسیدم ازتون پاسخ بدید :)</description>
                <category>hamed.rahimvand</category>
                <author>hamed.rahimvand</author>
                <pubDate>Fri, 30 Nov 2018 14:13:38 +0330</pubDate>
            </item>
            </channel>
</rss>