<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حمید کریمی</title>
        <link>https://virgool.io/feed/@hamid</link>
        <description>توسعه دهنده فرانت‌اند، علاقه‌مند به ورزش و سنگ‌نوردی</description>
        <language>fa</language>
        <pubDate>2026-06-16 11:56:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/449/avatar/JOAEKL.png?height=120&amp;width=120</url>
            <title>حمید کریمی</title>
            <link>https://virgool.io/@hamid</link>
        </image>

                    <item>
                <title>چگونه از هوک‌های ری‌اکت استفاده کنیم؟ - آموزش کامل برای تازه‌کاران</title>
                <link>https://virgool.io/snappfood/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A7%D8%B2-%D9%87%D9%88%DA%A9-%D9%87%D8%A7%DB%8C-%D8%B1%DB%8C-%D8%A7%DA%A9%D8%AA-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D9%85-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D9%85%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%A7%D8%B2%D9%87-%DA%A9%D8%A7%D8%B1%D8%A7%D9%86-qf3kxt5aaysn</link>
                <description>هوک‌های ری‌اکتسلام به همه!، هوک‌ها یکی از ویژگی‌های اصلی کد ری‌اکت مدرن، و همچنین یکی از مفاهیم پایه‌ای هستند که موقع یادگیری این لایبرری باید باهاش راحت باشید.در این مقاله قصد دارم برخی از مفیدترین هوک‌هایی را که ری‌اکت در اختیار ما می‌گذارد، نحوه کار آن‌ها و مثال‌هایی از موقعیت‌هایی که می‌توانیم از آن‌ها استفاده کنیم را توضیح دهم.امیدوارم که از خواندن این مقاله لذت ببرید. این مقاله ترجمه‌ای از جدیدترین مقاله‌ی freecodecamp هست و امیدوارم که ترجمه‌ی خوبی باشه و این مطلب براتون جا بیوفته.همچنین بد نیست نگاهی به داکیومنت ری‌اکت درباره‌ی هوک‌ها بیندازید.چنانچه بعضی کدها در تصاویر ناخوانا هستند، آن‌ها را در Github Gist نیز گذاشته‌ام.مقداری تاریخچه در مورد ری‌اکت و اینکه هوک‌ها برای چه هستندهمانطور که ممکن است بدانید، ری‌اکت یک لایبرری اوپن سورس است که جهت ساخت UI به روشی ساده‌تر و کارآمدتر از ابزارهای قبلی (مانند vanilla JS و jQuery) استفاده می‌شود. ری‌اکت توسط کمپانی متا (همان فیس‌بوک) توسعه یافت و در سال ۲۰۱۳ برای عموم منتشر شد.هوک‌ها قابلیتی بودند که سال‌ها بعد در سال ۲۰۱۶ (ری‌اکت ورژن ۱۶.۸) معرفی شدند. فقط برای اینکه بدانیم هوک‌ها برای چه چیزی هستند و چرا نسبت به آنچه قبلا انجام شده بود بهبود یافته‌اند، نمونه‌ای از کدهای «پیش از هوک» را در مقابل برخی از کدهای «پس از هوک» ری‌اکت مدرن ببینیم.در کد ری‌اکت قدیمی ما از کلاس کامپوننت‌ها استفاده می‌کردیم. اون‌ها یک متد render حاوی JSX داشتند که مسئول رندر کردن UI است.و اگر می‌خواستیم این کامپوننت stateای را ذخیره کند، باید آن را در یک متد constructor تعریف می‌کردیم و با فراخوانی this.setState آن را تغییر می‌دادیم. در زیر یک مثال کوتاه برای شما جهت پیدا کردن ایده وجود دارد:مثالی از کلاس کامپوننتاین خیلی مهم هست که اشاره کنیم که فانکشن کامپوننت‌ها (چیزی که امروزه استفاده می‌کنیم) در زمان ری‌اکت «پیش از هوک» نیز وجود داشتند. اما فقط می‌توانیم از آن‌ها برای کامپوننت‌های stateless استفاده کنیم - به این معنی که کامپوننت‌هایی که state ذخیره نمی‌کنند و مسئولیت هیچ منطق پیچیده‌ای به غیر از رندر کردن UI نیستند.با ادغام هوک‌ها، اکنون می‌توانیم از فانکشن کامپوننت‌ها(و ترکیب ساده‌تر آن‌ها) همراه با همه عملکردهای پیچیده‌تر که کلاس کامپوننت‌ها به ما ارائه می‌دهند، استفاده کنیم.به طور خلاصه، هوک‌ها چیزهایی هستند که ما برای پیاده‌سازی منطق و فانکشنالیتی‌ها در کامپوننت خود استفاده می کنیم.در اینجا مثال دیگری میبینید که ما آنچه را که در کلاس کامپوننت خود داشتیم (مثال بالا) به یک فانکشنال کامپوننت تبدیل کردیم:مثالی از فانکشنال کامپوننتهوک‌های پرکاربرد در ری‌اکتاکنون می‌دانید که هوک‌ها برای چه چیزی هستند و چرا بهتر از قبل شده‌اند. بنابراین بیایید نگاهی به پرکاربردترین آن‌ها بیاندازیم، در چه مواقعی مفید هستند و چگونه آن‌ها را پیاده‌سازی کنیم.هوک useStateدر ری‌اکت مدرن، ما اپلیکیشن‌های خود را با فانکشنال کامپوننت می‌سازیم. کامپوننت‌ها خود توابع جاوااسکریپت، تکه‌های کد مستقل و قابل استفاده مجدد هستند.هدف از ساخت اپلیکیشن با کامپوننت‌ها داشتن معماری ماژولار با تفکیک واضح سطوح مختلف است. این امر درک کد را آسان‌تر، نگهداری آسان‌تر و استفاده مجدد را در صورت امکان آسان‌تر می‌کند.یک state درواقع objectای است که اطلاعات مربوط به یک کامپوننت خاص را در خود نگه میدارد. توابع جاوااسکریپت ساده توانایی ذخیره اطلاعات را ندارند. کد درون آن‌ها اجرا می شود و پس از پایان اجرا «ناپدید» می‌شود.اما به لطف state، فانکشنال کامپوننت‌های ری‌اکت می‌توانند اطلاعات را حتی پس از اجرا ذخیره کنند. وقتی برای ذخیره یا «به خاطر سپردن» چیزی، یا به روشی متفاوت بسته به محیط، به یک کامپوننت نیاز داریم، state دقیقا همان چیزی‌ست که ما به آن نیاز داریم تا این کار را طوری که می‌خواهیم انجام دهد.ذکر این نکته ضروری است که همه‌ی کامپوننت‌های اپلیکیشن ری‌اکتی نباید دارای state باشند. کامپوننت‌های stateless نیز وجود دارند که فقط محتوای خود را بدون نیاز به ذخیره اطلاعات رندر می‌کنند، و این خیلی خوب است.نکته مهم دیگری که باید به آن اشاره کرد این است که تغییر state یکی از دو موردی است که باعث می‌شود یک کامپوننت ری‌اکتی دوباره رندر شود (دیگری تغییر در props است). به این ترتیب، حالت اطلاعات مربوط به کامپوننت را ذخیره می‌کند و همچنین رفتار آن را کنترل می‌کند.برای پیاده‌سازی state در کامپوننت‌مان، ری‌اکت یک هوکی به نام useState در اختیار ما قرار می‌دهد. بیایید با مثال زیر ببینیم چگونه کار می‌کند.مثالی از useStateابتدا هوک را از ری‌اکت ایمپورت می‌کنیم: import { useState } from &#x27;react&#x27;سپس state را مقداردهی اولیه می‌کنیم: const [count, setCount] = useState(0)در اینجا یک نام متغیر برای state (count) و یک نام تابع که هر بار که نیاز به به‌روزرسانی آن state داشته باشیم (setCount) استفاده خواهیم کرد. سپس مقدار اولیه state را (0) تنظیم می‌کنیم که به طور پیش فرض هر بار که برنامه شروع می‌شود، بارگذاری می شود.در نهایت، همانطور که در بالا گفتیم، هر بار که می‌خواهیم state را به‌روز کنیم، باید از تابعی که تعریف کردیم استفاده کنیم: setCount. برای استفاده از آن، فقط باید آن را با پاس دادن state جدیدی که به عنوان پارامتر می‌خواهیم، ​​صدا کنیم. یعنی اگر بخواهیم 1 را به state قبلی اضافه کنیم، setCount(count+1) را صدا می زنیم.همانطور که گفته شد، این باعث به‌روز‌رسانی state و ری‌رندر کامپوننت می‌شود. که در اپلیکیشن‌مان به این معنی‌ست که روی صفحه خواهیم دید که شمارنده در حال بالا رفتن است.ذکر این نکته ضروری است که تابع setState یک تابع asynchronous است. بنابراین اگر سعی کنیم state را بلافاصله پس از به‌روزرسانی آن بخوانیم، مانند زیر:نمونه فانکشن setCount با کلیک بر روی دکمهما مقدار قبلی state را بدون به‌روزرسانی دریافت می‌کنیم.روش صحیح خواندن state پس از به‌روزرسانی، استفاده از هوک useEffect است. این هوک به ما این امکان را می‌دهد که پس از هر ری‌رندر کامپوننت (به طور پیش فرض) یا بعد از هر متغیر خاصی که در آن تغییرات را اعلام می‌کنیم، یک تابع اجرا کنیم.چیزی مثل این:خواندن یک state پس از به‌روزرسانی با استفاده از useEffect همچنین، این واقعیت که useState یک تابع asynchronous است، هنگام در نظر گرفتن تغییرات state بسیار مکرر و سریع، پیامدهایی دارد. این نکته‌ی بسیار مهمی است که همیشه باید در ذهن نگه داریم.به عنوان مثال، موردی را در نظر بگیرید که یک کاربر دکمه ADD را چندین بار پشت سر هم فشار می‌دهد، یا حلقه‌ای که یک رویداد کلیک را چندین بار منتشر می‌کند.با به‌روزرسانی stateای مانند setCount(count+1) ما این خطر را می‌پذیریم که با اجرای رویداد بعدی، count هنوز به‌روزرسانی نشده باشد.برای مثال، فرض کنید در شروع count = 0است. سپس setCount(count+1) فراخوانی می شود و state به طور asynchronous به‌روز می‌شود.اما دوباره setCount(count+1) قبل از تکمیل به‌روزرسانی state فراخوانی می‌شود. این بدان معنی‌ست که هنوز count = 0 است، یعنی که setCount دوم stateمان را به درستی به‌روز نمی‌کند.یک رویکرد تدافعی‌تر این است که به setCount یک callback داده شود، مانند:setCount(prevCount =&gt; prevCount+1)در این حالت مطمئن می‌شویم که مقدار به‌روزرسانی جدیدترین مقدار است و ما را از مشکل ذکر شده در بالا دور نگه می‌دارد. هر بار که می‌خواهیم به‌روزرسانی‌هایی را در state قبلی انجام دهیم، باید از این روش استفاده کنیم.اگر می‌خواهید نگاهی عمیق‌تر به روش‌های مدیریت state در ری‌اکت بیندازید، می‌توانید به این مقاله که چندی پیش نوشته شده نگاهی بیندازید. (به زودی ترجمه آن را خواهم گذاشت.)هوک useEffectبه همراه useState، هوک useEffect احتمالاً هوکی است که بیشتر از همه در هنگام توسعه یک اپلیکیشن ری‌اکت استفاده می‌کنید. این دو مانند نان و کره برای توسعه‌دهنده ری‌اکت است.هوک UseEffect به شما این امکان را می‌دهد که یک اثر جانبی (side effect) روی کامپوننت خود اجرا کنید. اثر جانبی اساساً به معنای چیزی است که پس از وقوع یک چیز خاص دیگر اتفاق می‌افتد.یک مورد معمول استفاده واکشی داده‌ها (fetch data) پس از نصب (mount) کامپوننت است (در اینجا نیاز هست تا لایف سایکل‌ها در ری‌اکت را بلد باشید). فرض کنید ما تابعی به نام fetchData داریم که مسئول آن واکشی است - هوک useEffect ما ممکن است شبیه به این باشد:صدا زدن تابع fetchData داخل هوک useEffectساختار این هوک بسیار ساده است. دو آرگومان را می‌پذیرد. ابتدا یک callback داریم که تابع ما را اجرا می‌کند و سپس یک آرایه به نام «آرایه وابستگی ها» داریم. اگر مانند مثال بالا آن را خالی بگذاریم، بلافاصله پس از رندر شدن کامپوننت، callback اجرا می‌شود.حال فرض کنید می‌خواهیم اثر جانبی (side effect) ما پس از تغییرات متغیر اجرا شود. به دنبال مثال قبلی که برای هوک useState استفاده کردیم، برای اثر جانبی پس از تغییرات متغیر count، می‌توانیم useEffect را به این صورت تنظیم کنیم:به‌روز شدن پیغام کنسول پس از تغییر متغیر Count توسط useEffectسومین و آخرین موردی که در مورد useEffect باید به آن اشاره کرد، امکان بازگشت یک تابع «پاکسازی» است. این تابع «پاکسازی» زمانی که کامپوننت جدا (unmount) شود، اجرا می‌شود. به دنبال مثال قبلی، افزودن یک تابع پاکسازی ممکن است به شکل زیر باشد:بازگشت یک تابع پاکسازی در useEffectتوابع پاکسازی در useEffect معمولاً برای لغو اشتراک‌ها استفاده می‌شوند تا از تلاش ری‌اکت برای به‌روزرسانی state یک کامپوننت که قبلاً unmount شده است، جلوگیری شود.برای اطلاعات بیشتر در مورد تابع پاکسازی در useEffect، می توانید به این مقاله و یا این مقاله مراجعه کنید.هوک useContextدر سال ۲۰۱۶ React context API با نسخه 16.3 ری‌اکت منتشر شد. کاری که context در ری‌اکت انجام می‌دهد، ارائه راه حلی برای prop drilling است.مفهوم prop drilling به موقعیتی اشاره دارد که در آن ما یک کامپوننت والد داریم که یک state را ذخیره می‌کند. و در زیر آن والد، ما سطوح بسیاری از کامپوننت فرزند داریم.اگر بخواهیم آن state را در یک کامپوونت فرزند که عمیقاً در آن ساختار تودرتو (nested) است ارائه کنیم، راه حل این است که state را به عنوان prop در سراسر زنجیره کامپوننت منتقل کنیم.تصویری از prop drilling این گزینه به خوبی کار می‌کند. اما مشکل این است که ما باید همان کد را در جاهای مختلف تکرار کنیم، که اگر بعداً نیاز به تغییر کد خود داشته باشیم (دیر یا زود مجبور خواهید بود این کار را انجام دهید) کار با آن بسیار خسته کننده است و مستعد ایجاد خطاها و اشکالات است.حالا Context API این وضعیت را با ارائه «مکانی» برای ذخیره stateای که باید از بخش‌های مختلف اپلیکیشن‌مان و در امتداد سطوح مختلف درخت کامپوننت استفاده شود را حل می‌کند.روش کار به این صورت است که کامپوننت context آن state داده شده را ذخیره می کند، و از هر کامپوننت داده شده می توانیم آن state را بخوانیم و به‌روز کنیم، مهم نیست که آن کامپوننت در کجا قرار دارد. ما همه propها را فراموش می‌کنیم. در عوض، ما فقط می‌توانیم مستقیماً با context کار کنیم و همه کامپوننت‌هایی که آن context state را می‌خوانند، وقتی وضعیت به‌روزرسانی می‌شود، دوباره رندر می‌شوند.تصویری از همان موقعیت اما با استفاده از context حال که پایه‌های نظری را فهمیدیم، بیایید ببینیم که چگونه هوک useContext به ما اجازه می دهد از این API استفاده کنیم. اجرای معمول چیزی شبیه به این خواهد بود. در یک پوشه به اسم &quot;context&quot; دو فایل خواهیم داشت. Context.js و ContextProvider.js.در Context.js، ما فقط با استفاده از تابع createContext مقدار context API را مقداردهی اولیه می کنیم، که به عنوان آرگومان state اولیه‌ای را که می‌خواهیم ارائه کنیم را ارسال می‌کنیم. (در این مورد چیزی نمی خواهیم، ​​بنابراین می توانیم null را ارسال کنیم).نمونه فایل context.js در ContextProvider.js، آن contextای را که در فایل قبلی مقداردهی اولیه کردیم، ایمپورت می‌کنیم. ما همچنین stateهایی را که می‌خواهیم بعدا استفاده کنیم، مقداردهی اولیه می‌کنیم و از کامپوننت اپلیکشن خود به‌روزرسانی می‌کنیم. در نهایت، context provider را برمی‌گردانیم و با آبجکت value، تمام stateها و توابع setState را که می‌خواهیم بعدا استفاده کنیم، ارسال می‌کنیم.یک ContextProvider درواقع یک HOC است. یک کامپوننت مرتبه بالاتر (higher order component) یا HOC مشابه یک تابع مرتبه بالاتر در جاوا اسکریپت است (من یک مقاله در مورد آن در اینجا دارم).توابع مرتبه بالاتر توابعی هستند که توابع دیگر را به عنوان آرگومان می گیرند یا توابع دیگر را برمی‌گرداند. React HOCها یک کامپوننت را به عنوان یک prop می‌گیرند و آن را تا حدی دستکاری می‌کنند بدون اینکه در واقع خود کامپوننت را تغییر دهند. شما می‌توانید به این مانند کامپوننت‌های wrapper فکر کنید.ContextProviderنمونه فایل  در فایل App.js خود، تمام کامپوننت‌هایی را که می‌خواهیم بتوانیم با state تعامل داشته باشیم، با contextProvider خود می‌پوشانیم (wrap می‌کنیم). در این مورد ما می خواهیم که کل اپلیکیشن بتواند context را استفاده کرده و به‌روز کند، بنابراین همه آن را می‌پوشانیم.فایل app.js که توسط contextProviderمان پوشیده شده است.در نهایت، از کامپوننتی که می‌خواهیم context state را بخوانیم/به‌روزرسانی کنیم، context و هوک useContext را ایمپورت کرده و stateها و توابع را به روش زیر تخریب (destructure) می‌کنیم (و فقط از state عادی و توابع setState استفاده کنید).نمونه کامپوننت header که از useContext استفاده می‌کند.این boilerplate کمی بیشتر از پاس دادن همه چیز از روی props است، اما پس از راه اندازی بسیار قابل نگهداری‌تر، ساده‌تر و قابل درک‌تر است.نکته جالب دیگری که باید به آن اشاره کرد این است که ما می‌توانیم contextهای مختلفی را در اپلیکیشن خود داشته باشیم. ما می‌توانیم آنها را به بخش‌های مختلف تفکیک کنیم. به عنوان مثال، فرض کنید ما یکی برای stateهای احراز هویت داریم، دیگری در رابطه با تنظیمات و پیکربندی کاربر، دیگری برای پرداخت‌ها یا هر چیز دیگری... و سپس می‌توانیم آن contextها را فقط در اطراف اجزای خاصی که نیاز به استفاده از آن‌ها دارند، بپوشانیم (wrap کنیم).بنابراین اگر ما اطلاعات زیادی داریم که باید در اطراف اپلیکیشن خود به اشتراک گذاشته شود، داشتن contextهای مختلف بسیار روش ماژولارتر و مرتب‌تر برای نزدیک شدن به این موضوع خواهد بود.هوک useReducerهوک useReducer هوکی است که به ما این امکان را می‌دهد تا به صورت نیتیو reducers را در اپلیکیشن خود پیاده‌سازی کنیم تا stateهای پیچیده را مدیریت کنیم. اگر با Redux یا کتابخانه‌های مدیریت state مشابه آشنایی دارید، احتمالاً کلمه «reducer» زنگی آشنا برای شما به صدا در می‌آورد.اساسا، reducerها نوعی تابع هستند که دو یا چند آرگومان را می‌گیرند، نوعی عمل را با آن‌ها انجام می‌دهند و یک نتیجه واحد را که از دو آرگومان به دست می‌آید، برمی گرداند.یک reducer یک تابع خالص است که حالت قبلی و یک اکشن را به عنوان آرگومان می‌گیرد و حالت بعدی را برمی‌گرداند. reducer نامیده می‌شود زیرا همان نوع تابعی است که می‌توانید به آرایه ارسال کنید:Array.prototype.reduce(reducer, initialValue)اما قبل از اینکه به سراغ reducerها برویم، اگر از قبل هوک useState برای مدیریت state خود داریم، چرا به این نیاز داریم؟خب، مشکلی که ممکن است در هنگام استفاده از useState پیش بیاید این است که state جدیدی که باید تنظیم شود به state قبلی بستگی دارد یا زمانی که تغییرات state اغلب در اپلیکیشن ما اتفاق می‌افتد.در این مواقع، useState ممکن است برخی رفتارهای غیرمنتظره و غیرقابل پیش‌بینی را انجام دهد. بنابراین اینجاست که reducerها برای حل این مشکل وارد می‌شوند.هوک useReducer هوکی است که ری‌اکت ارائه می‌کند تا ما بتوانیم reducerهایی را برای مدیریت state خود پیاده‌سازی کنیم. در اینجا یک مثال پیاده‌سازی است:نمونه‌ای از مدیریت stateها با useReducerما با ایمپورت کردن هوک از ری‌اکت شروع می‌کنیم: import { useReducer } from &#x27;react&#x27;سپس یک تابع reducer را تعریف می‌کنیم، که به عنوان پارامتر state فعلی و یک اکشن برای کار بر روی آن state می‌گیرد. در داخل آن، یک دستور switch خواهد داشت که نوع اکشن را می‌خواند، اکشن مربوطه را روی state اجرا می‌کند و state به‌روز شده را برمی‌گرداند.استفاده از statements switch بر روی reducerها و حروف بزرگ برای اعلام اکشن‌ها رایج است.نمونه‌ای از یک فانکشن reducerپس از آن، زمان آن رسیده است که هوک useReducer خود را تعریف کنیم، که به نظر تقریباً شبیه به هوک useState است. ما یک مقدار را برای state خود اعلام می‌کنیم (در اینجا &#x27;state&#x27;)، تابعی که برای تغییر آن استفاده می کنیم (&#x27;dispatch&#x27;) و سپس useReducer تابع reducer را به عنوان پارامتر اول و state پیش فرض را به عنوان پارامتر دوم می‌گیرد.تعریف هوک useReducerدر نهایت، برای به‌روزرسانی state خود، مستقیماً reducer را صدا نمی‌زنیم، بلکه در عوض تابعی را که ایجاد کردیم (&#x27;dispatch&#x27;) فراخوانی می‌کنیم. به آن نوع اکشن مربوطه را که می‌خواهیم اجرا کنیم، پاس می‌دهیم. در پشت صحنه، تابع dispatch به reducer متصل می‌شود و در واقع state را تغییر می‌دهد.فراخوانی تابع dispatch این نسبت به استفاده از useState کمی بیشتر boilerplate است، اما useReducer آنقدرها هم پیچیده نیست.برای جمع بندی، فقط نیاز داریم:یک reducer، این تابعی است که تمام تغییرات state ممکن را یکپارچه می‌کند.یک تابع dispatch، که اکشن‌های اصلاحی را به reducer ارسال می‌کند.چیزی که در اینجا وجود دارد این است که عناصر UI نمی‌توانند state را مستقیماً مانند قبل در هنگام فراخوانی setState با مقدار به‌روز کنند. اکنون آن‌ها باید یک نوع اکشن را فراخوانی کنند و از طریق reducer عبور کنند، که مدیریت state را ماژولارتر و قابل پیش‌بینی‌تر می‌کند.همچنین، اگر با Redux و دیگر کتابخانه‌های مدیریت state آشنا هستید، احتمالاً متوجه شده‌اید که با Context API و هوک useReducer می‌توانیم به راحتی همان ویژگی‌هایی را که Redux ارائه می‌دهد پیاده‌سازی کنیم، اما به صورت نیتیو در ری‌اکت مدرن. بنابراین شخصاً، من فکر می‌کنم برای بیشتر موارد استفاده، شما نیازی به کتابخانه مدیریت state در کد ری‌اکت مدرن ندارید.با این حال، داستان قبلاً متفاوت بود، و احتمالاً به همین دلیل است که بسیاری از کتابخانه‌های مدیریت state محبوب شده‌اند و بسیاری از توسعه‌دهندگان هنوز هم امروزه در حال استفاده از آن‌ها هستند.هوک useRefهوک useRef تابعی است که یک آبجکت ref قابل تغییر (mutable ref object) را برمی‌گرداند که ویژگی .current آن با آرگومان ارسال شده (initialValue) مقداردهی اولیه می‌شود. شیء برگشتی برای تمام طول عمر کامپوننت باقی می‌ماند.دو کاربرد اصلی از useRef وجود دارد: پیگیری یک متغیر قابل تغییر (mutable variable) از طریق ری‌رندر، و دسترسی به گره‌های DOM یا عناصر ری‌اکت (DOM nodes or React elements).ما می‌توانیم با استفاده از هوک useRef به روش زیر یک ref را تعریف کنیم:const ref = useRef(initialValue)سپس reference.current به مقدار مرجع دسترسی پیدا می‌کند و reference.current = newValue مقدار مرجع را به‌روز می‌کند. خیلی ساده.دو نکته در مورد refها وجود دارد که باید به خاطر بسپارید:مقدار مرجع بین رندرهای مجدد کامپوننت‌ها باقی می‌ماند.به‌روز‌رسانی یک مرجع باعث ری‌رندر کامپوننت نمی‌شود.برای مشاهده مثالی از این موضوع، بیایید حالتی را تصور کنیم که در آن باید تعداد کلیک‌های روی یک دکمه را بدون ری‌رندر یک کامپوننت بشماریم. ما می‌توانیم این کار را به صورت زیر انجام دهیم:مثال استفاده از useRefبا به‌روزرسانی و ثبت ref، از ری‌رندر کامپوننت جلوگیری می‌کنیم و به هدف خود می‌رسیم. بنابراین، ۲ تفاوت اصلی بین refrence و state عبارتند از:به‌روزرسانی یک مرجع (refrence) باعث ری‌رندر نمی‌شود، در حالی که به‌روزرسانی state باعث می‌شود کامپوننت دوباره رندر شود.و همچنین... به‌روزرسانی مرجع (refrence) همزمان (synchronous) است (مقدار مرجع به روز شده فوراً در دسترس است)، در حالی که به روز رسانی state ناهمزمان (asynchronous) است (متغیر state پس از ری‌رندر به‌روز می‌شود).برخی از هوک‌های کمتر رایج اما همچنان مفیددر اینجا من دو هوک را که برای memoization در ری‌اکت استفاده می‌شود، ارائه می‌کنم. اگر با memoization آشنایی ندارید، می‌توانید به این مقاله مراجعه کنید.اساساً به خاطر سپردن (memoization) به این معنی است که کامپوننت‌ها را مجبور کنیم تا props و state را «به خاطر بسپارن»، بنابراین آن‌ها فقط وقتی که props/state تغییر کنند، ری‌رندر می‌شوند و از ری‌رندرهای غیرضروری جلوگیری می‌شود. این کار باعث افزایش پرفورمنس اپلیکیشن‌مان می‌شود.هوک useCallbackهوک useCallback توابع callbackرا که به‌عنوان props دریافت می‌کند، به خاطر می‌سپارد، بنابراین در هربار ری‌رندر، دوباره ایجاد نمی‌شوند. استفاده صحیح از useCallback می‌تواند پرفورمنس اپلیکیشن‌مان را بهبود بخشد.راهی که می‌توانیم آن را پیاده‌سازی کنیم این است که تابعی را که به‌عنوان props به یک کامپوننت فرزند در هوک useCallback بپوشانیم (wrap کنیم)، مانند این:استفاده از هوک useCallbackکاری که useCallback انجام می‌دهد این است که با وجود ری‌رندر شدن کامپوننت والد، مقدار تابع را نگه می‌دارد. این بدان معناست که تا زمانی که مقدار تابع نیز ثابت بماند، prop فرزند ثابت می‌ماند. و این مشکل ری‌رندر غیرضروری فرزند را حل می‌کند.برای استفاده از آن، فقط باید هوک useCallback را دور تابعی که تعریف می‌کنیم بپوشانیم (wrap کنیم). useCallback همچنین دارای یک آرایه وابستگی مانند useEffect است. در آرایه موجود در هوک، می‌توانیم متغیرهایی را تعریف کنیم که وقتی آن متغیر تغییر می‌کند، باعث تغییر مقدار تابع می‌شود (دقیقاً به همان روشی که useEffect کار می‌کند).نمونه‌ای از آرایه وابستگی هوک useCallbackهوک useMemoهوک useMemo یک هوک بسیار شبیه به useCallback است. اما useMemo به جای کش کردن یک تابع، مقدار بازگشتی یک تابع را کش می‌کند.در مثال زیر useMemo عدد 2 را کش می‌کند:مثالی از useMemoدر حالی که useCallback کل تابع () =&gt; num + 1 را کش می‌کند.کاستوم هوک‌های ری‌اکتیاگر در مورد آن فکر کنید، هوک‌ها فقط توابعی هستند که به ما اجازه می‌دهند منطق رایج مورد استفاده را در کامپوننت خود پیاده سازی کنیم.با پیروی از همین سلسله افکار، در اپلیکیشن‌های ری‌اکتی، استخراج قابلیت‌های پرکاربرد در توابع و اکسپورت کردن آن با نامی که با استفاده از پیشوند useشروع می‌شود، رایج است. این همان چیزی است که ما به آن کاستوم هوک می‌گوییم.بیایید نمونه‌ای از یک کاستوم هوک را ببینیم که هنگام فراخوانی، اندازه پنجره فعلی را به ما برمی‌گرداند.نمونه‌ای از کاستوم هوک به اسم useWindowSizeبعد از ساختن کاستوم هوک به شکل بالا، ما می‌توانیم کاستوم هوک‌مان را در هر کامپوننتی که می‌خواهیم به شکل زیر فراخوانی کنیم:طریقه استفاده از کاستوم هوک در یک کامپوننتهمانطور که در مثال بالا مشاهده می‌کنید، کاستوم هوک‌ها می‌توانند از هوک‌های نیتیو ری‌اکتی نیز در داخل خود استفاده کنند. اما در مورد آن‌ها فقط به عنوان توابعی فکر کنید که منطق رایج مورد استفاده مورد نیاز در بخش‌های مختلف برنامه ما را اجرا می‌کنند، واقعاً چیزی پیچیده‌تر از این نیست.اگر می‌خواهید در مورد کاستوم هوک‌ها بیشتر بدانید، در اینجا یک وب‌سایت اختصاص داده شده به این موضوع وجود دارد.جمع‌بندیخب همگی، در این مقاله نگاهی به هوک‌ها انداخته‌ایم، یکی از موضوعات اصلی و مهم در اپلیکیشن‌های ری‌اکتی. مثل همیشه امیدوارم از مقاله لذت برده باشید و چیز جدیدی یاد گرفته باشید.حتماً جهت بهبود روند نگارش و ترجمه مقالات، نظرات‌تون رو برام بنویسید.آدیوس</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Tue, 24 Jan 2023 13:39:01 +0330</pubDate>
            </item>
                    <item>
                <title>درک مفهوم API Mocking: سفری که ریکوئست HTTP طی میکند.</title>
                <link>https://virgool.io/snappfood/%D8%B3%D9%81%D8%B1-%D8%B1%DB%8C%DA%A9%D9%88%D8%A6%D8%B3%D8%AA-http-qrnxaaurujdt</link>
                <description>تشبیهی از سفر ریکوئستءAPI Mocking یک تکنیک برای رهگیری ریکوئست‌های HTTP است که پاسخ به آن‌ها با جواب‌های Mock شده داده می‌شود.ما اغلب از API Mocking در حین توسعه و تست برای افزایش کنترل شبکه، و مدل سازی آن متناسب با نیازهایمان استفاده می‌کنیم و مثل خیلی چیزهای دیگر، ما بر روی لایبرری‌های third-party برای اجرای قابل اعتماد ریکوئست تکیه می‌کنیم، و API Mocking ظرفیت‌هایی برایمان فراهم می‌کند.اما تا حالا به این فکر کرده‌اید که این لایبرری‌ها چگونه کار می‌کنند؟در این سری‌های کوچک، شما و من نگاهی عمیقی به اینکه چگونه API Mockingهای مختلف کار می‌کنند و همچنین خواهیم دید که هر کدام از آن‌ها چه نقاط ضعف و قوتی دارند، و بر روی گسترش درک‌مان از ریکوئست‌های HTTP در جاوااسکریپت کار می‌کنیم.این مطلب ترجمه‌ای از Understanding API Mocking: The HTTP Request Journey است که امیدوارم بتوانم مفهوم را به خوبی برسانم و بقیه سری‌های آن را هم به محض انتشار ترجمه و منتشر کنم.مراحل API Mockingبطور خلاصه، API Mocking از دو مرحله متوالی تشکیل شده است:رهگیری یک ریکوئست HTTP ارسال شده (Intercepting an outgoing HTTP request;)پاسخ دادن به آن ریکوئست رهگیری شده با یک پاسخ mock شده.راه های زیادی برای اجرای هر یک از این ها در یک API Mock مراحل وجود دارد.برای ساختن API Mock واقعاً عالی، ما باید از تعادلی مناسب بین درستی کد و میزانی که این راه حل به ما اختیار کنترل می‌دهد مطمئن شویم؛ اما مهم‌تر از همه ما، باید بفهمیم که ریکوئست‌ها در جاوااسکریپت چگونه کار می‌کنند و همچنین تفاوت بین مراحل مختلفی که یک ریکوئست قبل از اجرا طی می‌کند، چگونه است.و مانند خیلی موارد در زندگی، ما در این سفر در مورد همه این‌ها خواهیم آموخت.سفر یک ریکوئستتمام داستان‌ها شروع خودشان را دارند، و داستان ما هم با یک ریکوئست شروع می‌شود.ببینید، رهگیری ریکوئست با نحوه انجام آن ریکوئست ارتباط تنگاتنگی دارد، اگر بخواهیم تفاوت و مبادله رویکردهای مختلف API Mocking را درک کنیم، ابتدا باید بفهمیم که چگونه ریکوئست‌های HTTP در جاوااسکریپت ساخته می‌شوند.بنابراین، مطمئن شوید که headerها بسته شده و cookieها در ظرف پر شده، ما داریم به یک سفر ریکوئست می رویم.کلاینت ریکوئست (The Request Client)هر ریکوئستی با قصد خواندن یا تغییر دیتا شروع می‌شود.ما این قصد را در کد قرار می‌دهیم و آن را برای یک request client برای اجرای آن فراهم می‌کنیم. اساساً هر APIای (native یا third-party) که به پذیرش یک درخواست و اجرای آن مربوط می‌شود، یک کلاینت ریکوئست است.برای مثال، یکی از متداول‌ترین APIهای براوزر در اجرای ریکوئست‌ها Fetch Api است:// We have an intention of fetching all movies.
// To describe that intention, we perform a &amp;quotGET&amp;quot request
// to the &amp;quot/movies&amp;quot endpoint on the server.
fetch(&#039;/movies&#039;)در عمل، ممکن است از انواع کلاینت‌های مختلف استفاده کنید، مانند Axios یا React Query؛ و انتخاب شما معمولاً بستگی به نوع ریکوئستی که می‌خواهید توصیف کنید، دارد (مثلاً ممکن است شما بخواهید از یک کلاینت مخصوص GraphQL مانند Apollo برای توصیف ریکوئست‌های GraphQL استفاده کنید).زمانی که کلاینت، ریکوئست ارسالی ما را بپذیرد، آن ابزاری برای نظارت بر اجرای آن ریکوئست به ما بر می‌گرداند، و در نهایت به ریسپانس دریافت شده از سرور رسیدگی می‌کند.مثلاً برای بحث بالا، fetch یک Promise برای حل کردن یک ریسپانس بر می‌گرداند، نمونه‌ای که می‌توانیم بخوانیم:// The fetch Promise resolves to a &amp;quotResponse&amp;quot instance
// that allows us to handle the response (e.g. get its
// status, headers, or read its body).
const response = await fetch(&#039;/movies&#039;)
console.log(response.ok, response.status)برای ما توسعه‌دهندگان، کلاینت ریکوئست معمولاً جایی است که تعامل ما با ریکوئست به پایان می‌رسد؛ اما برای خود ریکوئست، این تازه شروع ماجراست.در حالی که کلاینت‌های ریکوئست برای ما یک راه عالی برای اجرا و مدیریت آسان‌تر ریکوئست‌ها فراهم می‌کنند، آن‌ها فقط انتزاعی (abstractions) برای کد زیربنایی (underlying code) هستند که تمام کارهای سنگین را انجام می‌دهند.و این دقیقاً همان جایی است که ریکوئست ما به آن جا می‌رود.محیط (The Environment)بدون توجه به کلاینت ریکوئست، ریکوئست ما ناگزیر به API استاندارد محیط مسئول رسیدگی به ریکوئست‌های HTTP می‌رسد.هنگام استفاده از کلاینت ریکوئست third-party، آن تعامل را به کلاینت محول می‌کنیم، در حالی که ممکن است مستقیماً با آن API استاندارد تعامل داشته باشیم، و بنابراین ساخت و رسیدگی یک ریکوئست به جزئیات پیاده‌سازی کلاینت ریکوئست تبدیل می‌شود؛ برای مثال، وقتی از Axios استفاده می‌کنیم، ریکوئست ما را به عنوان XMLHttpRequest در براوزر و http.ClientRequest در Node.js نمایش می‌دهد، بدون آنکه ما حتی متوجه شویم.اما ما امروز اینجا هستیم تا فراتر از انتزاع های third-party برویم و در مورد آن APIهای محیطی یاد بگیریم، اینطور نیست؟مهم است در نظر داشته باشید که هر محیطی، ماژول شبکه خود را متفاوت پیاده‌سازی می‌کند. ما به عنوان مهندسان جاوااسکریپت بیشتر به محیط‌های براوزر و Node.js علاقه داریم.بیایید نگاهی بیندازیم که چه native APIهایی برای ارائه ریکوئست وجود دارد.مرورگر (Browser)window.fetchءFetch Api یکی از رایج‌ترین راه‌ها برای درخواست در وب است.در سال ۲۰۱۵ به جهان معرفی شد و به عنوان گامی رو به جلو از XMLHttpRequestراه اندازی شد، و بدون شک زندگی ما توسعه‌دهندگان را برای بهتر شدن تغییر داد.fetch(&#039;https://api.example.com/users&#039;, {
   method: &#039;POST&#039;,
   headers: { &#039;Content-Type&#039;: &#039;application/json&#039; },
   body: JSON.stringify({ name: &#039;Alice&#039; })
})پیاده‌سازی براوزر برای Fetch در کد native C است و فراخوانی window.fetch() آخرین سطحی‌ است که می‌توانیم با آن تعامل داشته باشیم.window.XMLHttpRequestءXMLHttpRequest اولین حضور عمومی خود به عنوان یک API Fully-functional برای ارسال ریکوئست‌ها را در سال ۲۰۰۲ داشت.این ممکن است برای برخی غافل گیرکننده باشد، اما XHR هنوز هم در براوزرها تا به امروز ارسال می‌شود و یک راه بر حق برای ساختن ریکوئست‌هاست! بیش از این، XHR چند قابلیت را به نمایش می‌گذارد که حتی Fetch مدرن هم آن‌ها را ندارد، مانند مانیتور کردن فرآیند یک ریکوئست و کنسل شدن ریکوئست، که قبل از تبدیل شدن AbortControllerبه یک چیز، از طریق Fetch امکان پذیر نبود.const request = new XMLHttpRequest()
request.open(&#039;POST&#039;, &#039;https://api.example.com/users&#039;)
request.setRequestHeader(&#039;Content-Type&#039;, &#039;application/json&#039;)
request.write(JSON.stringify({ name: &#039;Alice&#039; })
request.send()شبیه بهwindow.fetch،ریشه‌های XMLHttpRequest نیز به عمق کد native browser بدون هیچ لایه میانی می‌روند تا منطق mocking ما را اتصال دهند.Node.jshttp.request (https.request)ء Node.js برای ما یک API سطح بالا برای انجام ریکوئست‌ها از طریق ماژول‌های httpو httpsفراهم کرده است؛ در حالی که آن‌ها متدهای مشابهی را به اشتراک می‌گذارند، مانند .get()و .request()، اما پیاده‌سازی آن‌ها متفاوت است؛ زیرا ریکوئست پروتکل‌های متفاوتی را مدیریت می‌کنند.import https from &#039;https&#039;
const request = https.request(&#039;https://api.example.com/users&#039;, {
     method: &#039;POST&#039;,
     headers: { &#039;Content-Type&#039;: &#039;application/json&#039; }
})
request.write(JSON.stringify({ name: &#039;Alice&#039; }))
request.end()ء API http.request()چیزی است که اکثر کلاینت ریکوئست‌ها در Node.js به صورت داخلی از آن استفاده می‌کنند.شاید گفتن اینکه APIای که باعث تولد خیلی از کلاینت ریکوئست‌ها در آن محیط شده همین API است، خیلی پر حرفی باشد (فرض وحشیانه من در اینجا).http.ClientRequestحرکت بیشتر به سمت عمق call stack، ءhttp.request ریکوئست‌ها را با استفاده از کلاس http.ClientRequestنشان می دهد (و رسیدگی می کند).منصفانه است ذکر شود  که برخی از لایبرری‌ها و polyfillها مستقیماً از این کلاس استفاده می‌کنند و به طور کلی API سطح بالاتر را دور می‌زنند.همانطور که گفته شد، ساخت یک ریکوئست از طریق http.ClientRequestشبیه به استفاده از http.requestباشد، و حتی ممکن است گاهی اوقات این تفاوت، با چشم غیر مسلح قابل مشاهده نباشد:import http from &#039;http&#039;
import https from &#039;https&#039;
const req = new http.ClientRequest({
     protocol: &#039;https:&#039;,
     host: &#039;api.example.com&#039;,
     pathname: &#039;/users&#039;,
     headers: {
        &#039;Content-Type&#039;: &#039;application/json&#039;,
     },
     agent: new https.Agent(),
})
req.write(JSON.stringify({ name: &#039;Alice&#039; }))
req.end()نکته آنکه این همان کلاس http.ClientRequestاست که هر دو ریکوئست HTTP و HTTPS را توصیف می‌کند. برخلاف تمایز http.requestو https.requestدر سطح بالاتر.net.Socketحتی عمیق‌تر برویم. هر ریکوئست HTTP لزوماً داده‌های منتقل شده از طریق یک سوکت هستند و Node.js هم یک کلاس net.Socket برای توصیف آن دارد.import { Socket } from &#039;net&#039;
const socket = new Socket()
socket.connect(443, &#039;api.example.com&#039;, () =&gt; {
     socket.write(&#039;POST /users HTTP/1.0\n&#039;)
     socket.write(&#039;Content-Type: application/json\n&#039;)
     socket.end(JSON.stringify({ name: &#039;Alice&#039; }))
})این واقعیت که ما پیام‌های HTTP خام را از طریق سیم ارسال می‌کنیم، باید تصور خوبی از سطح پایین Socket API به شما بدهد.هر چند بعید است که مستقیماً از این API استفاده کنید، اما همچنان بخشی اجتناب ناپذیر از سفر ریکوئست در Node.js است و در نتیجه برای انتخاب ما از رویکرد API Mocking مهم است.تذکرات مفیددر Node.js نسخه 17 fetchAPI مشابه با آنچه که در براوزر وجود دارد، اضافه شده.از آن جایی که آن‌ها با مشخصات یکسانی مطابقت دارند، fetchدر Node.js به ترتیب ریکوئست‌ها و ریسپانس‌ها را با استفاده از کلاس‌های Requestو Responseنشان می‌دهد، اما آن‌ها همچنان به‌ عنوان انتزاع بر روی APIهای سطح پایینی که در بالا به آن اشاره کردیم، عمل می‌کنند.هنگامی که ماژول شبکه کار خود را انجام داد، در نهایت ریکوئست انجام می‌شود و محیط را ترک می کند و از فیبر به سمت سرور درخواست شده حرکت می‌کند.سرورسرور جایی است که ریکوئست‌ها برای حل و فصل نهایی ارسال می‌شوند.سرور دورترین منطقه از ارسال ریکوئست ما است؛ زیرا محیطی متفاوت است که اغلب به زبانی متفاوت از برنامه ما پیاده‌سازی می‌شود و پیچیدگی‌های خودش را دارد. هر چند هنگامی که سرور ریکوئست را حل کرد، ریسپانس را از طریق همان سفر ارسال می‌کند تا در نهایت به کلاینت ریکوئست بازگردد.بنابراین، هنگامی که ریکوئست ما به سرور می‌رسد، ما نمی‌توانیم کاری انجام دهیم تا از زمان اجرای سمت کلاینت بر آن ریکوئست تأثیر بگذاریم.جمع بندیهدف هر سفر بهبود و تغییر کسانی است که به اندازه کافی شجاع هستند که وارد آن شوند.و سفر ریکوئستی که ما به تازگی پشت سر گذاشتیم نیز از این قاعده مستثنی نیست. همانطور که در مورد روش‌های مختلف توصیف ریکوئست‌ها و نقاط بازرسی هر ریکوئست آموختیم، می‌توانیم پیش‌نویس راه‌های ممکن برای اجرای API Mocking در برنامه‌مان را ادامه دهیم.این دقیقاً همان چیزی است که در پست بعدی به آن خواهم پرداخت.ممنون از وقتی که گذاشتین و این مطلب رو مطالعه کردین.منتظر نظرات و پیشنهادات شما هستم تا بتونم بر روی مطالب بعدی بهتر کار کنم.</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Tue, 20 Dec 2022 13:19:37 +0330</pubDate>
            </item>
                    <item>
                <title>بیشترین سوالات پرسیده شده از تایپ اسکریپت در stackoverflow و پاسخ آن‌ها - قسمت اول</title>
                <link>https://virgool.io/snappfood/%D8%AA%D8%A7%DB%8C%D9%BE-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-type-%DB%8C%D8%A7-interface-%D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA-%D9%85%D8%AA%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-uxp3yottkp45</link>
                <description>تا حالا هیچ دولوپری نگفته «من از stackoverflow متنفرم»در حالی که شما تنها یک سرچ گوگل با پیدا کردن جواب فاصله دارید، حقیقتاً درک درست راه حل برای شما مهم‌ترین بخش است.در این سری مقالات می‌خواهیم ۷ سوال پر تکرار در stackoverflow درباره تایپ‌اسکریپت را بررسی کنیم.این سری مقالات ترجمه‌ی این مقاله است، و اولین تجربه‌ی من در ترجمه، پس اگر با مشکلاتی مواجه است، لطفاً‌ در بخش نظرات اعلام کنید، تا من هم بتوانم مقالات بعدی را بهتر ترجمه کنم.با این مقالات امیدوارم که به درک عمیق‌تری از مسائلی که ممکن است با تایپ‌اسکریپت مواجه شوید، برسید.اگر به تازگی شروع به یادگیری تایپ‌اسکریپت کرده‌اید، این موضوع نیز مرتبط است و چه راهی بهتر از آشنایی با چالش های آینده خود!چه تفاوتی بین Interfaces و Types در تایپ‌اسکریپت وجود دارد؟تفاوت interfaces و types در تایپ‌اسکریپتدرواقع Interface و Type که نوع تایپی هستند، یک رقابت تنگاتنگی باهم دارند.وقتی که شروع به یادگیری تایپ‌اسکریپت می‌کنید، ممکن است انتخاب بین این دو برای شما مشکل و گیج کننده باشد. این مقاله سردرگمی شما را برطرف خواهد کرد و به شما کمک می‌کند تا انتخاب مناسبی داشته باشید.در نمونه‌های زیادی، شما می‌توانید Interface و یا Type را بجای یکدیگر استفاده کنید.تقریباً تمام فیچرهای Interface در type نیز در دسترس است، بجز اینکه شما نمی‌توانید پراپرتی جدیدی در Type با استفاده از re-declaring اضافه کنید. شما حتماً باید یک intersection type استفاده کنید.چرا از همان ابتدا درباره Type و Interface گیج می‌شویم؟هر زمان که ما با گزینه‌های متعددی برای انتخاب مواجه می‌شویم، اکثر مردم از تضاد انتخاب رنج می‌برند.اما خوشبختانه در این مورد خاص، فقط دو گزینه وجود دارد.نکته‌ی اصلی گیج کننده در اینجا و بین این دو گزینه این است که در اکثر موارد به طور مساوی شبیه به هم هستند و تطابق دارند.و این کار را برای یک انتخاب مشخص سخت می‌کند، مخصوصاً وقتی که تازه شروع به کار با تایپ‌اسکریپت می‌کنید.یک مثال ساده از Type و Interfaceتعریف کردن یک تایپ Human را در نظر بگیرید:// type 
type Human = {
  name: string 
  legs: number
  head: number
}
// interface 
interface Human {
   name: string 
   legs: number 
   head: number
}هر دو روش برای تعریف تایپ‌ Human با استفاده از Type و Interface درست است.تفاوت‌های بین Type و Interfaceتفاوت کلیدی: Interface فقط می‌تواند شکل آبجکت (object shape) را توصیف کند. اما Type برای تایپ‌های دیگر مانند primitives, unions و tuplesها می‌تواند استفاده شود.تعریف متغیر با Type در انواع داده‌هایی که می‌توانید نمایش دهید کاملاً انعطاف‌پذیر است. از primitiveهای اولیه unionهای پیچیده و tuplesها، همانطور که در بخش زیر نشان داده شده است:// primitives
type Name = string
// object
type Male = {
   name: string
}
type Female = {
    name: string
}
// union
type HumanSex = Male | Female
// tuple
type Children = [Female, Male, Female]بر خلاف Type، شما برای تعریف تایپ‌های یک آبجکت فقط باید از Interface استفاده کنید.تفاوت کلیدی:‌ یک Interface را می‌توان با چندین بار اعلام (declare) آن گسترش داد.مثال زیر را در نظر بگیرید:interface Human {
   name: string 
}
interface Human {
    legs: number
}دو اعلام (declaration) بالا، به شکل زیر تغییر می‌تواند باشد:interface Human {
    name: string 
    legs: number 
}در اینجا Human را می‌توان با یک interface تعریف کرد: ترکیبی از اعضای هر دو اعلامپراپرتی legs برای آبجکت Human الزامی است.مشاهده در Typescript Playgroundدر صورتی که همچین مدل تعریف کردن در Type امکان‌پذیر نیست و باعث بوجود آمدن پیغام خطا می‌شود.type Human = {
    name: string
}
type Human =  {
     legs: number 
}
const h: Human = {
     name: &#039;gg&#039;,
     legs: 5 
}  آبجکت Human دوبار تعریف شده استمشاهده در Typescript Playgroundبرای نوشتن همچین چیزی با استفاده از Type، باید آن‌ها را بهم متصل کنیم:type HumanWithName = {
    name: string 
}
type HumanWithLegs =  {
    legs: number 
}
type Human  = HumanWithName &amp; HumanWithLegs
const h: Human = {
   name: &#039;gg&#039;,
   legs: 5 
}  مشاهده در Typescript Playgroundتفاوت جزئی: هردو Type و Interface قابلیت تعمیم (extend) دارند، اما با syntaxهای متفاوتبا Interface شما باید از کلمه کلیدی extends استفاده کنید. اما برای Type، شما باید از یک اتصال دهنده استفاده کنید.به مثال‌های زیر توجه کنید:تعمیم دادن یک Type با Typeای دیگرtype HumanWithName = {
  name: string 
}
type Human = HumanWithName &amp; {
   legs: number 
   eyes: number 
}تعمیم دادن یک Type با Interfaceinterface HumanWithName {
  name: string 
}
type Human = HumanWithName &amp; {
   legs: number 
   eyes: number 
}تعمیم دادن یک Interface با Interfaceinterface HumanWithName {
  name: string
}
interface Human extends HumanWithName {
  legs: number 
  eyes: number 
}تعمیم دادن یک Interface با یک Typetype HumanWithName = {
  name: string
}
interface Human extends HumanWithName {
  legs: number 
  eyes: number 
}همانطور که در مثال‌های بالا مشاهده می‌کنید، هیچ دلیل منحصر به فردی برای ترجیح دادن یکی به دیگری وجود ندارد. هرچند که syntaxهای آن‌ها متفاوت است.تفاوت جزئی: کلاس‌ها فقط می‌توانند اعضای شناخته شده را به صورت استاتیک پیاده سازی کنند.یک کلاس می‌تواند Interface و یا Type را پیاده‌سازی کند. هرچند که یک کلاس نمی‌تواند یک تایپ union را پیاده‌سازی و یا گسترش دهد.به مثال‌های زیر توجه کنید:پیاده‌سازی کلاس با Interfaceinterface Human {
  name: string
  legs: number 
  eyes: number 
}
class FourLeggedHuman implements Human {
  name = &#039;Krizuga&#039;
  legs = 4
  eyes = 2
}پیاده‌سازی کلاس با Typetype Human = {
  name: string
  legs: number 
  eyes: number 
}
class FourLeggedHuman implements Human {
  name = &#039;Krizuga&#039;
  legs = 4
  eyes = 2
}هردوی این‌ها به خوبی و بدون خطا کار می‌کنند، هرچند در مثال زیر به خطا میخورد:پیاده سازی کلاس با uniontype Human = {
     name: string
} | {
    legs: number
    eyes: number
}
class FourLeggedHuman implements Human {
    name = &#039;Krizuga&#039;
    legs = 4
    eyes = 2
}A class can only implement an object type or intersection of object types with statically known members. مشاهده در Typescript Playgroundجمع‌بندی Type در مقابل Interfaceبرداشت شما ممکن است متفاوت باشد، اما هرجا که ممکن است، من به Type چسبیده‌ام، بخاطر انعطاف‌پذیری و syntax ساده‌ای که دارد. همین، من Type را انتخاب می‌کنم، بجز هرجای بخصوصی که به Interface بخاطر خاصیت‌هایش نیاز داشته باشم.برای بیشتر قسمت‌ها، همینطور شما‌ می‌توانید بر اساس ترجیح شخصی‌تان تصمیم بگیرید، اما باید بر انتخاب‌تان استوار باشید، حداقل بر روی یک پروژه.برای کامل شدن، من باید مقایسه پرفورمنس بین Type و Interface را اضافه کنم، تا ببینیم کدام سریع‌تر است. هرچند این به عنوان یک مشکل برای من باقی مانده است.عناوین مقاله‌های آیندهIn TypeScript, what is the ! (exclamation mark / bang) operator?What is a “.d.ts” file in TypeScript?How Do You Explicitly Set a New Property on ‘window’ in TypeScript?Are Strongly Typed Functions as Parameters Possible in TypeScript?How to Fix Could Not Find Declaration File for Module …?How Do I Dynamically Assign Properties to an Object in TypeScript?ممنون از وقتی که برای مطالعه گذاشتید، حتماً نظر خودتون رو درباره موضوع، ترجمه و نگارش بهم بگید تا بتونم روی مطالب بعدی بهتر کار کنم و کیفیت‌شون رو افزایش بدم.</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Fri, 15 Jul 2022 13:07:40 +0430</pubDate>
            </item>
                    <item>
                <title>طبیعت و کوهستان - بایدها و نبایدها</title>
                <link>https://virgool.io/applymag/%D8%B7%D8%A8%DB%8C%D8%B9%D8%AA-%D9%88-%DA%A9%D9%88%D9%87%D8%B3%D8%AA%D8%A7%D9%86-dcmtsvcbqydd</link>
                <description>قله دماوند از پیست اسکی دیزین - عکس از خودمبعد از حدود دو سال تصمیم گرفتم یه مطلب بنویسم، صرفا بخاطر اینکه میبینم هروز و هروز تعداد آدم‌هایی که به طبیعت و کوهستان میرن بیشتر و بیشتر داره میشه و تخریب محیط‌زیست و حوادث هم بیشتر داره میشه. این موضوعات خیلی فکرم رو درگیر کرده و دغدغه‌م شده. سعی کردم چیزهایی که یاد گرفتم تو این مدت رو با شما به اشتراک بذارم تا شاهد تخریب و حادثه کمتری باشیم.تقریبا فکر میکنم اکثر آدم‌ها به طبیعت علاقه دارن و حس خوب ازش دریافت میکنن، تو ایران چندسالی هست که طبیعت‌گردی باب شده و خیلی تورها برگزار میشه یا خیلی‌ها هم به صورت گروه‌های کوچک و شخصی میرن. اما اتفاقی که داره میوفته خیلی از تورها و گروه‌ها این طبیعت رو دارن رو به خرابی و نابودی میبرن (بر فرض اینکه تا الان نبرده باشن).من از علاقه‌ی زیادم به کوهستان که اکثر اطرافیانم میزانش رو میدونن، از حدودای آبان و آذر ۹۸ شروع کردم و دوره‌های فدراسیون کوهنوردی رو دارم شرکت میکنم، اولش هدفم یادگیری و افزایش دانش و بعدش استفاده برای امداد و نجات کوهستان بود، اما الان میبینم این دوره‌ها برای اکثر کسایی که به کوهستان و طبیعت علاقه دارن لازمه، حداقل دوره‌هایی مثل کوهپیمایی، حفظ محیط‌زیست، هواشناسی و اگر یکم میخواید بیشتر عمیق بشید دوره‌های پزشکی کوهستان، نقشه‌خوانی و کار با قطب نما و GPS هم لازمه.محیط‌زیستساحلی در جزیره فی‌فی - تایلند - عکس از خودمحالا دلیل‌هایی که میگم به نظرم این‌ها لازمه اتفاقاتیه که این روزها همه شاهدشیم که اولیش همون تخریب محیط‌زیست هست، کاری که شاید همه‌مون (حتی خود من) خواسته و یا ناخواسته انجام دادیم. از آشغال‌های ریز و درشت، تجزیه‌پذیر یا تجزیه ناپذیر گرفته تا غذا دادن به حیوانات، پخش موزیک با صدای بلند تو طبیعت، کمپ و آتش روشن کردن و موارد اینجوری.اتفاق‌های بعدی هم حوادثی هست که بسیار زیاد شده، برای همین کوهپیمایی و هواشناسی رو هم به نظرم لازم میبینم، اینجوری حداقل میتونیم از خیلی از حوادث برای خودمون و حداقل ۴، ۵ نفر گروه‌مون جلوگیری کنیم و بعضا از فاجعه جلوگیری کنیم.درباره‌ی آشغال ریختن توی محیط‌زیست، شعار ما این شده که LEAVE NO TRACE (هیچ ردپایی بجا نذار)، خود این تمام مطلب و مفهوم رو میرسونه از هسته‌ی خرما، پوست پسته، پوست پرتقال گرفته تا بطری‌های شیشه‌ای و پلاستیکی، هیچ چیزی از ما نباید روی زمین بمونه، تمام این موارد به مرور باعث تخریب اکوسیستم اون منطقه میشه.مورد بعدی که تقریبا همه‌مون انجام میدیم غذا دادن به حیوانات (سگ‌ها، گربه‌ها، خرس‌ها، روباه‌ها و...)، چرا این کار اشتباهه؟ به چند دلیل خیلی ساده: غذاهای ما سازگار با معده‌ی اون‌ها نیست، اون‌ها رو از اصل خودشون دور کردیم و وابسته به خودمون کردیم و نمونه‌ش رو توی چندماه قرنطینه دیدیم که چون کسی طبیعت نمیرفت حیوانات برای غذا به شهر‌ها اومده بودن. این حیوانات تنبل شدن و خب به نسل‌های بعدیشون هم این رو انتقال میدن تا جایی که دیگه خودشون نمیتونن برای خودشون غذا تهیه کنن و کاملا وابسته به ما و غذاهای ما که مناسب‌شون نیست و بسیار خطرناکه براشون میشن.بعدیش پخش موزیکه، تمام حیوانات به این سر و صداها و این زیادی صدا عادت ندارن و آستانه تحمل صداشون با ما خیلی متفاوته، بعضا میمیرن و یا از اون محیطی که مناسبه برای زندگی‌شون به یه محیط دیگه مجبورن برن و تقریبا کل زندگی‌شون بهم میریزه، همچنین بهتر نیست خودمون از صدای طبیعت لذت ببریم و موزیک رو برای شهر نگه داریم؟ در کوهستان که چه هدفون گذاشتن و چه موزیک گوش دادن ممنوعه، به دلیل خطراتی که وجود داره (مخصوصا ریزش سنگ) باید حواسمون کاملا جمع باشه و آگاه باشیم.آخرین مورد تخریبی‌مون کمپ و آتش روشن کردن هست، جای کمپ خیلی مهمه و باید با دقت انتخاب بشه، چیزایی مثل آسیب نزدن به پوشش گیاهی، دور بودن از لونه حیوانات و گزنده‌ها، انتخاب محل دستشویی که بسیار مهمه چون فضولات حاوی عوامل بیماری‌زاست که با آلوده کردن خاک و یا منابع آب، برای سلامت خودمون و اکوسیستم منطقه خطرناکه. راهنمای کمپ زدنیه نکته‌ای که چندبار اخیر مشاهده شده بعضی از عزیزان روی پد هلی‌کوپتر چادر زده بودن و موقع حادثه و نیاز هلی‌کوپتر به اون پد برای فرود، به‌جای جمع کردن چادر و دور شدن از اونجا، با هلی‌کوپتر بالای سرش درحال سلفی گرفتن بودن. حالا چرا بحث آتش روشن کردن رو گفتم، نمیگم آتش روشن نکنیم، ولی چندتا فاکتور باید رعایت بشه، اولا سعی کنیم که جاهایی که از قبل روشن شده ما هم همونجا روشن کنیم، آتش رو محافظت کنیم و بعد از تمام شدن کار هم با دقت بسیار خاموشش کنیم. کمترین چوبی که میتونیم رو بسوزونیم (خودمون ذغال داشتیم که چه بهتر) چون اون چوب میتونه محل زندگی جانوران زیادی باشه.ظرف و ظروف مخصوص طبیعت رو جایگزین ظرف‌های یکبار مصرف و پلاستیکی بکنیم، حتی در زندگی روزمره هم از ظرف‌های پلاستیکی و یکبار مصرف تا جای ممکن کمتر استفاده کنیم.ته سیگار قاتل بزرگ پرنده‌ها و برخی دیگر از حیوانات هست، در طبیعت و یا حتی کوچه و خیابون ته‌ سیگار رو رها نکنید. (البته به نظر من کلا سیگار نکشید.)حساسیت و دغدغه‌تون رو روی محیط‌زیست ببرید بالا، یه آشغال از دستتون میوفته نگید حالا افتاد ولش کن، پسماندهای تجزیه‌پذیر نریزید بگید حالا اینکه چیزی نیس تجزیه میشه و برمیگرده به طبیعت دیگه. بذارید این محیط‌زیست برای همه‌مون باقی بمونه تا بتونیم ازش لذت ببریم و حتی برای آیندگان‌مون هم باقی بمونه.تمامی چیزهایی که تو طبیعت رها میکنیم، به مرور دامن خودمون رو میگیره و تو غذا و معده خودمون هم هست (چندسالیه استارتش خورده) چون این به هرحال یک چرخه‌س، این چرخه میچرخه و به خودمون میرسه.کوهپیماییدشت پایین قله کلکچال - تهران - عکس از خودماکثر ما حداقل چندتا کوهستان اطراف محل سکونت خودمون رو رفتیم، حالا تا قله هم نرفته باشیم، یه دوری زدیم و برگشتیم. تو این دوره‌ی کوهپیمایی شما با تعاریف مختلف، لباس‌ها و ابزارهای مختلف و مناسب برنامه و فصل، گام‌برداری، کار با ابزارهای اولیه و ساده رو یاد میگیرید. پس به نظرم اگر میخواید حتی طبیعت‌گردی کنید (که معمولا پیمایش داره) ۴تا تکنیک گام‌برداری، لباس و کوله و... رو یاد بگیریم خیلی خوبه.به چی میگیم کوه؟زمینی که نسبت به اطرافشبه طور مشخصی برجسته‌تره و دارای دامنه‌های شیب‌داریه. ارتفاع دقیقی برای اون تعریف نشده ولی معمولاً زمین‌هایی رو که حدود 600 متر از اطرافش بلندتره رو کوه میگیم.به چی میگیم تپه؟به بلندیهایی با اختلاف ارتفاع کمتر از 600 متر نسبت به زمین‌های اطراف تپه میگیم.آیا اینکه یه شیب پر پیچ و خم خاکی رو بریم و برگردیم بهش میگن «کوهنوردی»؟، نه به این میگن کوهپیمایی، چون دقیقا اون مسیر رو داریم پیمایش میکنیم. پس تقریبا میشه گفت اکثر ماها «کوهپیمایی» میکنیم.پس به چی میگیم «کوهنوردی»؟، کوهنوردی همون کوهپیمایی همراه با انجام کارهای فنیه، بعضی جاها ممکنه نیاز باشه شما سنگ‌نوردی انجام بدین و یا یخ‌نوردی انجام بدین، تنکنیک‌های صعود و فرود روی سنگ و یخ اجرا کنید و...، پس این میشه کوهنوردی که تو ایران آدم‌های خیلی کمی این کارها رو انجام میدن و میشه گفت «کوهنوردی» میکنن.قله‌های اطراف تهران مخصوصا توچال رو اصلا شوخی نگیریم، توچال تو رفرنس‌های خارجی به «قاتل» معروفه، تمامی این قله‌ها خطرهای خودشون رو دارن و کاملا باید از این خطرها آگاه باشیم و تا جایی که میتونیم از این خطرها دوری کنیم. استاد دکتر مساعدیان آخر همه‌ی ارائه‌هاشون این متن قشنگ رو داره که میگه:معشوق ما در عین زیبایی قاتل چیره دستی‌ست. مراقب او باشیم.هواشناسیآسمان جزیره پوکت - تایلند - عکس از خودمتو دوره‌ی هواشناسی شما یاد میگیری که ابرهای مهم و خطرناک رو بشناسی و حتی با اینکه اپ و سایت‌های مختلف هواشناسی رو قبل از برنامه چک کرده باشی احتمال خطاشون بسیار زیاده، پس خودمون یاد بگیریم از چندتا المان مختلف تو برنامه احتمال خطر بدیم و از بروز حادثه جلوگیری کنیم خیلی خوب میشه.۱۸ تیر ۹۹ (دو روز قبل از اینکه این مطلب رو دارم مینویسم) تیم کاشانی‌ای که به قله کلون‌بستک (این قله اطراف تهران نزدیک منطقه شمشک و دربندسر هست) رفته بودن، متاسفانه سرپرست گروه که آدم بسیار حرفه‌ای بودن بر اثر صاعقه فوت شدن، که استاد هاشم‌نژاد (بهترین هواشناس کوهستان ایران) میگفتن اگر به ابرها توجه میکردن خیلی راحت میتونستن از این حادثه جلوگیری کنن.پس حتما بهتون توصیه میکنم چه برای طبیعت‌گردی و چه برای کوهستان دوره هواشناسی کوهستان رو بگذرونید و از خطرات و حادثه‌ها جلوگیری کنید.بهترین نقل قول از استاد هاشم‌نژادکوهستان با القاب شما کاری ندارد، با اینکه فلان قله را چندبار فتح کردین کاری ندارد. کوهستان یک‌بار ضربه خود را به شما میزند. پس به خود مغرور نشوید و با افزایش دانش‌تان، از خودتان مراقبت کنید.نکات کلیدیاگر توی کوهستان گم شدین و یا حادثه دادین زیاد روی هلی‌کوپتر حساب نکنید، دلایلش حالا بماند.سعی کنید یاد بگیرید حداقل با GPS گوشی‌تون بتونید کار بکنید و مختصات محلی که هستید رو بتونید استخراج کنید که به امداد اعلام کنید.حتما حداقل یک نفر از اعضای خانواده و یا دوست و آشنا رو در جریان جایی که میخواید برید قرار بدین و تایم حدودی برگشت رو نیز بگید، که اگر اتفاقی پیش اومد و به هر دلیلی شما قادر به ارتباط گرفتن با امداد نبودین، اون احساس نگرانی کنه و با امداد تماس بگیره.سعی کنید با تورها جایی نرید، اکثر (نمیگم همه) لیدرها چیزی بلد نیستن و فقط رفتن و اومدن رو بلدن و در صورت بروز حادثه و اتفاق هیچ کاری نمیتونن بکنن. دلیل دیگه هم تخریب زیادیه (بازم اکثرشون) که اون‌ها روی محیط‌زیست دارن.به هیچ‌وجه تنها برنامه‌ای نرید (در حد ایستگاه ۵ توچال اوکیه تنهایی)، فکر کنیم دلایلش رو با توجه به متن‌های بالا متوجه شده باشید. و همچنین با تیمی که نمیشناسید و یا بیشتر از ۵ نفر میشید هم نرید.خیلی از پیرمردهای تو کوهستان (نمیگم همه‌شون، آدم خفن زیاده توشون)، غیراصولی کوهپیمایی میکنن و شما فکر میکنید چون سال‌های زیادی تو کوهستان بوده پس کارهاش درسته، به هیچ وجه به حرف‌ها و راهنمایی‌هاشون گوش ندید (کلا کسی رو نمیشناسید به راهنمایی‌هاش گوش ندید)، سعی کنید خودتون دوره ببینید و از اساتید برجسته و خفنی که تو ایران داریم یاد بگیرید.کلید همه‌چیز دانش و تمرین است.مختصری درباره‌ی منرشته اصلی ورزشی من سنگ‌نوردی هستش و حدود یک‌سال و نیم میشه که به طور جدی دارم این رشته رو دنبال میکنم. تجربه‌ی کوهپیمایی و فتح قله زیادی ندارم و احتمالا خیلی از شماها تجربه‌تون از من بیشتره. کار یخ‌نوردی و درای‌تولینگ (ترکیبی از سنگ و یخ) رو هم انجام دادم و یه کوچولو تجربه دارم توشون. یک سنگ‌نورد خوب و ماهر لزوما یک کوهنورد خوب و ماهر نیست و برعکس.سایت سنگ‌نوردی ازگی - غرب تهران - عکس از خودمتا اینجای کار از دوره‌های فدراسیون من دوره‌های کمک‌های اولیه کوهستان هلال احمر، امداد و نجات کوهستان مقدماتی آتش‌نشانی ولنجک، کوهپیمایی، محیط‌زیست، هواشناسی، پزشکی کوهستان، نقشه‌خوانی و کار با قطب‌نما، کار با GPS، برف و یخ رو گذروندم و تا آخر تیرماه هم سنگ‌نوردی مقدماتی و آموزش مبانی جستجو در کوهستان رو میگذرونم.مدرسه یخ‌نوردی همیلون - میگون - عکس از خودمو پایانفایل جزوه‌ی محیط‌زیست و کوهپیمایی فدراسیون رو اینجا میذارم تا بتونید حداقل مطالعه کنید و درباره چیزهایی که گفتم بیشتر و عمیق‌تر متوجه موضوعات بشید.من زیاد اصول مطلب نوشتن رو بلد نیستم، پس اگر مشکلی بود ببخشید و خوشحال میشم که برای بهتر شدن مطالب بعدی من نکته‌ای هست گوشزد کنید و یا موضوعی هست که فکر میکنید میتونم بنویسم بهم بگید.تشکر میکنم از آقای اخوان و باشگاه دوستداران کوهستان که این دوره‌ها رو به بهترین شکل ممکن برگزار میکنن و باعث بیشتر شدن دانش کوهنوردی در بین دوستان میشن.این مطلب ممکنه در آینده بروزرسانی بشه.ممنون از اینکه وقت گذاشتید و این مطلب رو مطالعه کردین.دانلود جزوه محیط‌زیستدانلو جزوه کوهپیماییکرونا رو جدی بگیریم، ماسک بزنیم، فاصله رو رعایت کنیم، دست‌هامون رو مرتب بشوریم و ضدعفونی کنیم.</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Fri, 10 Jul 2020 14:35:08 +0430</pubDate>
            </item>
                    <item>
                <title>یوونتوس، داستان یک عشق بزرگ - قسمت دوم</title>
                <link>https://virgool.io/biography/%DB%8C%D9%88%D9%88%D9%86%D8%AA%D9%88%D8%B3-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%D9%86-%DB%8C%DA%A9-%D8%B9%D8%B4%D9%82-%D8%A8%D8%B2%D8%B1%DA%AF-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-xyefo29uxxy3</link>
                <description>دل‌پیرو - شاه ضربه‌های ایستگاهیخداحافظی دل‌پیروهمانطور که توی پست قبلی گفتم، علاقه من به یوونتوس بخاطر دل‌پیرو شروع شد، کسی که بهش لقب &quot; Il Pinturicchio &quot; رو دادن که لقب یکی از نقاش‌های عصر رنسانس ایتالیا بود. و بخاطر این بود که مثل یک هنرمند و نقاش توی زمین کار می‌کرد و واقعا فوتبال رو تبدیل به یک هنر کرده بود.به دل‌پیرو لقب‌های دیگه‌ای مثل شاه ضربه‌‌های ایستگاهی دادن که حتی دیوید بکام مرد لحظه‌ها میگه هنوز نتونستم مثل دل‌پیرو ضربه ایستگاهی بزنم.اون برترین گلزن تاریخ یوونتوسه، و به همراه روبرتو باجو چهارمین گلزن تاریخ تیم ملی ایتالیاست. مارادونا درباره‌ش میگه: «گاهی احساس می‌کنم سن دل‌پیرو هیچگاه بالا نمی‌رود.» همچنین بهش لقب پسرطلایی فوتبال ایتالیا رو هم داده‌اند.دل‌پیرو برای من نماد یه فوتبالیست کامل بود، توی زمین همه‌کار میکرد، کاشته‌های بی نظیرش، شوت‌ها و برگردون‌هاش، پاس گل‌هاش و...، با اخلاق بودنش، کسی که فکر نکنم طرفدار فوتبالی وجود داشته باشه که دل‌پیرو رو دوست نداشته باشه. یا یبار خونده بودم هیچوقت کارت قرمز نگرفته تو بازیش، خوش‌تیپ و خوش‌استایل و به قول خودش جنتلمن واقعی و خب همه این‌ها باعث شد که عاشقش باشم.۱۳ می ۲۰۱۲ دل‌پیرو توی آخرین بازی فصل جلوی آتالانتا بازی کرد و حتی گل هم زد، یکی از به یاد موندنی‌ترین گل‌هاش بود. اواسط نیمه‌ی دوم بود که تعویض شد و از زمین بیرون اومد، هیچوقت اون لحظه رو یادم نمیره که تعظیم کرد به هوادارها، منم مثل همه‌ی هوادارها اون لحظه گریه میکردم و حتی بعدها هروقت اون صحنه رو میدیدم بازهم گریه میکردم.  ? خداحافظی دل‌پیروتاریخ ۳۰ ژوئن دل‌پیرو در نامه‌ای سرگشاده به هوادارن نوشت: این لباسی بود که من اون رو دوست داشتم و همیشه دوست خواهم داشت و همیشه برای من عزیز و محترم هست ... . از فردا من دیگه بازیکن یوونتوس نیستم، اما من همیشه یکی از شما هستم. حالا یک ماجراجویی جدید برای من وجود داره، پس از اینکه من بعد از 19 سال اخراج شدم!این مقاله تو سایت طرفداری درباره دل‌پیرو خیلی کامله و اگر دوست داشتین بخونید.خداحافظی بوفونبعد از دل‌پیرو از اون نسل خفن و وفادار فقط بوفون مونده بود، سوپرمن همیشه توی توجه‌ها بود و دروازه‌بان قرن ۲۱ لقب داشت. با رفتن دل‌پیرو اون کاپیتان یوونتوس شد و کسی بود که باعث می‌شد بازی‌های یووه رو دنبال کنم و ببینم. درسته پست دروازه‌بان داره و تو بعضی از بازی‌ها شاید خیلی کم دیده بشه، ولی حضورش، مدیریت و تسلطش روی تیم، سیوهای فوق‌العاده و بی‌نظیرش، و بوفون هم کسیه که فکر نکنم طرفدار فوتبالی وجود داشته باشه که بهش علاقه‌مند نباشه.بوفون توی کارنامه‌ش فقط یه قهرمانی چمپیونزلیگ کم داشت، با تیم و بعد از اون بحران‌ها دوبار به فینال رفتن ولی نتونستن قهرمانی رو بگیرن، شاید اگر دل‌پیرو هم توی این بازی‌ها بود اوضاع جور دیگه‌ای می‌شد. ولی همیشه با بغل کردن‌های بازیکن‌های حریف، صحنه‌های قشنگی رو بوجود می‌آورد. اشک‌هاش بعد از این باخت‌ها که اشک همه رو در می‌آورد.بوفون و کاسیاساون خودش گفته بود هروقت حس کنم حضورم توی تیم به تیم لطمه میزنه و دیگه مفید نیستم، از فوتبال خداحافظی میکنم. از دو، سه سال پیش صحبت‌هایی بود که ۲۰۱۸ از فوتبال خداحافظی میکنه برای همیشه، حتی یکی از دلایل اصلی که من رفتم خدمت این بود بتونم پاسپورت بگیرم و به جام‌جهانی ۲۰۱۸ برسم و بتونم آخرین بازی‌های بوفون رو از نزدیک ببینم، که متاسفانه ایتالیا به جام نرسید و بوفون از عرصه ملی خداحافظی کرد. اما با پایان فصل بازی‌ها گفت که فصل بعد قطعا توی یوونتوس بازی نمیکنه یا به تیم دیگه‌ای میره، یا در پست مدیریتی که بهش پیشنهاد شده بود تو یووه ادامه میداد. بعد از مدتی هم با تیم پی‌اس‌جی توافق کرد و به این تیم رفت. سوپرمنی که قصد نداره بازنشست بشه و هیچوقت تسلیم نمیشه. درسته که دیگه توی یوونتوس نیست و شاید امسال با توجه به بازیکن‌هایی که گرفته بتونه قهرمان چمپیونزلیگ بشه و اگر اینطور بشه حیف که بوفون توی تیم نیست، ولی هنوز میشه از بازی‌هاش و سیوهاش لذت برد و حتی خود من میتونم برم و از نزدیک بازی‌هاش رو ببینم.شش هزار و یکصد و یازده روزشش هزار و یکصد و یازده لحظه پر از شور و اشتیاق ناباز لذت بردن، گریه کردن، از شکست‌ها و پیروزی‌ها----از شما متشکرماز تک تک شما متشکرمچراکه هر یک از شما کمک کردید که هر لحظه از زندگی ام به خصوص زندگی سیاه و سفیدم را رقم بزنم. زندگی که یک جلد دوم شده است.برای خواندن متن کامل خداحافظی بوفون به این لینک برید.و عشق به یوونتوسمن همیشه بعد از رفتن دل‌پیرو از تیم به خودم میگفتم با رفتن بوفون فوتبال برای من تموم میشه و دیگه ارزشی نداره، الان تقریبا اینطور شده ولی این یوونتوس و تیم هست که باقی میمونه و از عشق به یووه نمیشه گذشت، نمیشه بازی‌هاش رو ندید و دنبال نکرد.برای من یوونتوس فقط یه تیم نیست، یجورایی میشه از هر بازیش درس گرفت، و سبک زندگی باشه، اگر درست یادم باشه فرگوسن یه‌بار گفته بود من به بچه‌های تیمم همیشه بازی‌های یووه رو نشون میدم و ازشون میخوام اشتیاق به بردن و تسلیم نشدن رو یاد بگیرن، یوونتوس تیمیه که تا ثانیه آخر مبارزه میکنه، حتی اگر با اختلاف ۲، ۳ گل جلو باشه، بازهم مربی سرشون داد میزنه و ازشون میخواد تا بازی رو ول نکنن.بازی نیمه‌نهایی این فصل چمپیونز که بین یووه و رئال بود، یووه تو زمین خودش (که آمار خیلی خوبی داشت توی نباختن) با نتیجه ۳-۰ به رئال باخت تا تقریبا ناامید باشیم از صعود، یووه خیلی بد بازی کرد و از اونور رئال فوق‌العاده بود، اون گل برگردون رونالدو هم که بی‌نظیر بود. اما بازی برگشت بهترین بازی و بدترین بازی‌ای بود که تو عمرم دیدم. مانژوکیچ دقیقه ۲ و ۳۷ توی جهنم برنابئو دوتا گل به رئال زد و متیودی هم دقیقه ۶۰ گل سوم رو زد تا بازی در مجموع مساوی بشه و امیدواری یووه زیاد باشه، برعکس بازی رفت یووه عالی بود و رئال خیلی بد بازی میکرد. و اما پنالتی‌ای که توی وقت‌های اضافه برای رئال گرفته شد، یه فوتبال کثیف و داوری کثیف، تقریبا تمام دنیا به جز طرفدارهای رئال میگفتن که پنالتی نبود، و اوج داوری کثیف اخراج بوفون بخاطر اعتراضش بود، داوری که اعتراض‌های بدتر از اون رو قبل‌تر دیده بود و نهایت کارت زرد داده بود. بعضی‌ها میگفتن بوفون میتونست مثل زیدان تو فینال ۲۰۰۶ که تراژدیک اخراج شد، اگر مطمئن بود که دیگه قرار نیست بازی کنه داور رو میزد و اخراج میشد (من هم موافقم). که حتی مصاحبه کرد داور بجای قلب سطل آشغال توی سینه‌ش داره که بخاطر همین مصاحبه جریمه و چندبازی محروم شد.داوری توی بازی رفت و برگشت حرف‌ها و اشتباهات زیادی داشت، ولی به قول خود بوفون: بازنده‌ها همیشه از داوری حرف میزنند و بهانه داوری میگرند. ولی از این یدونه اشتباه نمیشه گذشت، هیچوقت نمیشه گذشت... . این بازی تمام رویاها و آرزوهای ما رو نابود کرد، بعید میدونم لیورپول توی فینال میتونست جلوی یووه قوی، متحد و یکدست و آخرین امید بوفون برای رسیدن به جام که تمام تیم براش میجنگیدن وایسه.اخراج بوفون در نیمه‌نهایی چمپیونزلیگدر نهایت اسطوره‌های زیادی توی تیم اومدن و رفتن و جاودانه شدن، ولی این یوونتوس و سیاه و سفید هست که باقی مانده و خواهد ماند و هیچوقت نمیشه ازش دست کشید، حتی به سری B سقوط کنه.ممنون که این مطلب بلند و طولانی رو خوندین، من زیاد توی نوشتن خوب و قوی نیستم، اگر ایراداتی وجود داشت عذرخواهی میکنم و خوشحال میشم که با نظرهاتون به بهتر شدن مطالب آینده‌ی من کمک کنید.منابعی که برای نوشتن قسمت قبل و این قسمت استفاده کردم:ویکی پدیای یوونتوسویکی پدیای دل‌پیرومقاله‌ی سایت طرفداری درباره‌ی دل‌پیرونامه خداحافظی بوفون از هواداران یوونتوسو برخی از تاریخ‌ها و نتیجه‌ها و عکس‌ها از سرچ گوگل استفاده کردم تا مطلب دقیق‌تر باشه.</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Tue, 14 Aug 2018 12:54:31 +0430</pubDate>
            </item>
                    <item>
                <title>یوونتوس، داستان یک عشق بزرگ - قسمت اول</title>
                <link>https://virgool.io/@hamid/%DB%8C%D9%88%D9%88%D9%86%D8%AA%D9%88%D8%B3-%D8%B9%D8%B4%D9%82-%D8%A8%D8%B2%D8%B1%DA%AF-pfgxudo1c1bv</link>
                <description>من عاشق یوونتوس هستم.این مطلب رو من از بازی یووه-رئال توی چمپیونزلیگ میخواستم بنویسم، ولی خب هم تنبلی کردم، هم فرصت پیش نیومد و بعضاً فراموش کردم.یوونتوس برای من از کجا شروع شد؟ اکثر ما پسرها و حتی دخترها کارت بازی دوران بچه‌گی رو یادمون هست و خیلی هم حال میداد، توی اون دوران بیشتر بازیکن‌های ایتالیا خوشتیپ و خفن بودن، و مثلا مالدینی یجورایی برامون آخر بازیکن همه‌چی تمام بود. ولی یکم که گذشت به دل‌پیرو علاقه‌مند شدم، فکر کنم ۹ یا ۱۰ سالم بود (حدود سال ۲۰۰۰) که بخاطر دل‌پیرو از یوونتوس خوشم اومد. تیمی بود که همیشه قهرمان و همیشه در اوج بود. اون دموی شروع بازی فیفا ۲۰۰۴ که دل‌پیرو حضور داشت هم عالی بود. لینک مشاهده در یوتیوبخود عکس گویاس ?هیچی نگم دیگه ?توی همون سال‌ها زیدان هم بازیکن یوونتوس بود و دوبار (۹۸ و ۲۰۰۰) بهترین بازیکن جهان شد. که خب زیدان خیلی بین ما بچه‌ها محبوب بود و همه میشناختنش.بوفون هم سال ۲۰۰۱ به یوونتوس اومد، یه جوون ۲۲، ۲۳ ساله خوشتیپ که سال ۲۰۰۲ و ۲۰۰۳ بهترین دروازه‌بان جهان شد.همه این‌ها  و حتی مربیگری لیپی، حضور ندود که تو سال ۲۰۰۳ بهترین بازیکن جهان شد، بازیکن‌های دیگه‌ای مثل داویدز که با اون عینکش معروف بود، ترزگه، زامبروتا، کاناوارو و... دلایل کافی‌ای بود برای اینکه عاشق یوونتوس باشی.یوونتوس سال ۲۰۰۳ تقریبا توی اوج خودش بود و نیمه‌نهایی چمپیونزلیگ با رئال بازی داشت، داداش من رئالیه، و خیلی باهم کل‌کل میکردیم تو اون سال. هیچوقت شاید اون بازی رو یادم نره، با اینکه سن کمی داشتم ولی کاملا اون بازی رو یادمه، بازی رفت توی ورزشگاه رئال یووه ۲-۱ باخت و خیلی ناراحت بودم. اما تو بازی برگشت ۳-۱ با گل‌های ترزگه،‌ ندود و دل‌پیرو برنده شد و به فینال رفت. رئال اون سال شاید خفن‌ترین تیم دنیا بود، بازیکن‌هایی مثل: کاسیاس، سالگادو، هیرو، کارلوس، کامبیاسو، مک من من، گوتی، فیگو، زیدان، رائول، بکهام و... رو داشتن. آخرای بازی برگشت بود که ندود اخراج شد و فینال رو از دست داد، بهترین بازیکن جهان تو پست خودش توی اون سال‌ها بود و شاید بشه گفت یه دلیل نبردن فینال، نبودن ندود بود.فینال اون سال کاملا ایتالیایی برگزار شد و یووه و میلان بهم خوردن، میلان اون سال‌ها توی لیگ زیاد خوب نبود و نتیجه‌های ضعیفی می‌گرفت، ولی برعکس توی چمپیونزلیگ خیلی تیم خوبی بودن و خوب بالا اومدن. اما خب همه آمارها به نفع یوونتوس بود و احتمال برد فینال خیلی زیاد بود. بازی تو ۹۰ دقیقه و حتی ۱۲۰ دقیقه گلی نداشت و به پنالتی کشید، تو پنالتی هم میلان برد و قهرمان اون سال شدن.روزی روزگاری یوونتوسو اما کالچوپولیپایان فصل ۲۰۰۵-۲۰۰۶ که یوونتوس قهرمان شد، با مربیگری لیپی و بازیکنانی مثل امرسون، تورام، زلاتان اومده بودن و یووه تو اوج بود و قهرمانی‌‌های متوالی میگرفت، شایعه‌هایی درباره تبانی مسولین یوونتوس با داوران شنیده می‌شد، ولی این موضوع مطرح نشد تا تمرکز بازیکنان توی جام‌‌جهانی حفظ بشه،‌ و ایتالیا اون سال تونست قهرمان جام باشه، بهترین بازی که تو عمرم دیدم نیمه‌نهایی ایتالیا -آلمان بود که اون گل دل‌پیرو توی وقت اضافه همه‌چیز رو برای آلمان تموم کرد.بعد از اتمام جام مساله کالچوپولی مطرح شد و دو قهرمانی آخر یووه ازش گرفته شد و به لیگ پایین‌تر یعنی سری B ایتالیا فرستاده شد و شروع لیگ با کسر ۳۰ امتیاز که بعدها با اعتراض به ۹ امتیاز کاهش پیدا کرد.توی اون دوران بازیکن‌های یووه تصمیم به جدایی گرفتن، بازیکن‌‌هایی مثل: کاناوارو، زامبروتا، زلاتان، تورام، امرسون و...، اما اوج داستان و نقطه‌ای که عشق واقعی به یووه مشخص شد موندن بازیکن‌های تاپ یووه مثل: بوفون، دل‌پیرو، ندود، ترزگه، کامورانزی که تو اوج خودشون بودن و پیشنهادهای خیلی خوبی از باشگاه‌های دیگه داشتن، یووه رو ترک نکردن و با اون به سری B رفتن.جمله‌ی معروف دل‌پیرو که ازش پرسیده بودن چرا از یووه جدا نشدی و جواب داده بود یک جنتلمن هیچوقت بانوی خودش رو ترک نمیکنه. (لقب تیم یوونتوس بانوی پیر هست.) اون سال دیدیه دشان (مربی فعلی تیم ملی فرانسه که قهرمان جام‌جهانی ۲۰۱۸ شدن) بازیکن سابق یووه مربیگری رو قبول کرد و با ۸۵ امتیاز (با کسر ۹ امتیاز) قهرمان سری B شدن. لحظه‌ای که هیچوقت یادم نمیره و خوشحال از اینکه دوباره به سری A برگشتیم.بازگشت یووهیووه سال ۲۰۱۱ به شروع کرد تا به اوج برگرده با اومدن کونته به عنوان مربی و گرفتن بازیکن‌های جدیدی مثل: پیرلو، ویدال، لیختشتاینر، توز، پوگبا، بارزالی، یورنته و... یووه بعد از چند سال متوسط بودن دوباره به جمع تیم‌های بزرگ ایتالیا و اروپا برگشت. یووه در این دوران به سه قهرمانی متوالی تو سری A (حتی با یک قهرمانی بدون شکست تو فصل ۲۰۱۱–۱۲ و گرفتن ۱۰۲ امتیاز در تو فصل ۲۰۱۳–۱۴) و دوبار قهرمان سوپر جام ایتالیا شد. توی اون سال‌ها تو چمپیونزلیگ نتونست جایگاه خاصی داشته باشه، چون بعد از چندسال یه تیم نسبتا خوب شده بودن و تجربه‌ای نداشتن. هرچند تو فصل ۲۰۰۸-۲۰۰۹ رئال رو در مجموع ۴-۱ بردن و دل‌پیرو تو بازی برگشت تو ورزشگاه رئال ۲ گل خیلی قشنگ زد که حتی باعث شد تماشاگرهای رئال اونو تشویق کنن. اون بازی هم جزو بهترین بازی‌هایی بود که دیدم.شادی معروف دل‌پیرو - بازی رفت یووه-رئال سال ۲۰۰۸شادی معروف دل‌پیرو - بازی برگشت یووه-رئال سال ۲۰۰۸ گل کاشته دل‌پیرو - بازی برگشت یووه-رئال سال ۲۰۰۸ از سال ۲۰۱۱ تا ۲۰۱۸ یووه ۷بار متوالی قهرمان سری A شد، ۴بار متوالی قهرمان جام حذفی ایتالیا، و دوبار به فینال چمیپونزلیگ رفت که متاسفانه نتونست قهرمان بشه.به دلیل طولانی شدن مطلب، اون رو به چند قسمت تقسیم کردم تا از حوصله کاربر برای خواندن خارج نشه.</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Fri, 10 Aug 2018 14:07:30 +0430</pubDate>
            </item>
                    <item>
                <title>زندگی بی‌حسرت</title>
                <link>https://virgool.io/@hamid/%D8%B2%D9%86%D8%AF%DA%AF%DB%8C-%D8%A8%DB%8C-%D8%AD%D8%B3%D8%B1%D8%AA-mvwgfaaso1uq</link>
                <description>امروز، خبر رسید یکی از سربازهامون تصادف کرده و مرده، زیاد باهاش دوست نبودم، چون هم بخشش فرق داشت، هم افسر نبود و کلا ارتباط خاصی باهم نداشتیم، به جز این دو هفته آخر که هر روزش، تقریبا ۴، ۵ ساعت کلاس داشتیم و تو یه کلاس بودیم. پسر خوبی بود و حدود ۱۹، ۲۰ سال سنش بود. قد بلند و هیکل گنده و تپلی، دوستای خودش بهش میگفتن گریزلی. حتی تا دیروز شوخی می‌کرد و میخندید، قلدر بازی درمیورد و خیلی منم منم میگفت.هدفم از نوشتن این مطلب، فکراییه که با شنیدن خبر فوتش به ذهنم اومد، از شنیدن خبر واقعا ناراحت شدم. بچه‌ی خوبی بود و خب حیف شد. ولی از فکرهام مینویسم شاید باعث بشه شما هم تو فکر برید و باعث بشه کمی تغییر تو خودمون ایجاد بشه. اول از همه تو خودم ایجاد بشه.احتمالا این سخنرانی استیو جابز توی دانشگاه استنفورد رو دیده باشید، اگر ندیدین این لینکش هست، حتما ببینید. حدود ۶، ۷ سال پیش این سخنرانی رو دیدم و خیلی روی من تاثیر داشت. مخصوصا یه جمله‌ش که میگفت: وقتی ۱۷ ساله بودم، جمله‌ای خواندم شبیه به اینکه: اگر طوری زندگی کنید که انگار هر روز آخرین روز زندگی شماست، بالاخره یک روز مطابق با واقعیت رفتار کرده‌اید. این جمله تأثیر خاصی ‌روی من داشت و از آن زمان به بعد طی ۳۳ سال گذشته، هر روز در آینه نگاه کرده‌ام و از خودم پرسیده‌ام: ‌آیا امروز آخرین روز زندگی من خواهد بود؟ و هر روز که پاسخ منفی بود، می‌دانستم ‌باید در یک چیز تغییر ایجاد کنم.همیشه خیلی این جمله تو ذهنم بود، ولی زیاد درکی ازش نداشتم، که چجوری میشه جوری زندگی کرد که انگاری روز آخر زندگیته؟ خیلی سخته فکر کنی روز آخرته، تو روز آخر چه کارهایی انجام میدی؟، سعی میکنی کارهای ناتموم رو تموم کنی؟، میری تمام کسایی که دوست داری رو میبینی؟، میری تفریح و عشق و حال؟، میشینی گریه میکنی؟، میری کارایی رو انجام میدی که دوست داشتی و تا حالا انجام نداده بودی که حسرت نخوری؟ و خیلی چیزهای دیگه که ممکنه انجام بدی توی روز آخر. شاید معنی این حرف اینجوری باشه که جوری توی اون روز زندگی کن که همه‌ی این کارها رو انجام بدی و اگر روز آخرت بود، با خیال راحت و بی‌حسرت بری.ما به یک فوت بندیم، و در یک چشم به هم زدن ممکنه همه‌چیز تموم بشه، پس نباید زیاد حرص خورد، عصبی بود، استرس کشید و... تمام چیزهای بدی که وجود داره و در عوض باید خوش و خوشحال باشیم و کارهایی که دوست داریم رو انجام بدیم.البته اینجوری هم نمیتونه باشه که برنامه‌ریزی و هدف نداشته باشیم، چون زندگی بی معنی میشه، هدف‌ها میتونن خیلی بزرگ و خیلی دور باشن، مثلا تا ۵ سال آینده فلان مدل ماشین رو داشته باشم، یا خونه با این مشخصات یا هرچیز دیگه‌ای، حالا باید هدف‌های کوچک و کوتاه مدت رو داشته باشیم و روی اون‌ها برنامه‌ریزی کنیم تا با دست یافتن به اون‌ها به اون هدف بزرگ توی اون مدت یا حتی زودتر برسیم. برای روز به روز وظایف، هدف و برنامه‌ریزی مشخص داشته باشیم و تا جایی که ممکنه به همه‌شون برسیم. زمان کوتاهه، روزها کوتاهن، عمر ما توی ترافیک، پای سوشیال نتورک‌ها و... خیلی تلف میشه و از اون زمان باقی‌مونده و با حداکثر انرژی باید استفاده کنیم تا یک زندگی داشته باشیم بدون حسرت. البته برای رسیدن به این اهداف سعی کنید کار احمقانه‌ای انجام ندین که گرفتار و اذیت بشید و حتی از برنامه عقب بیوفتید، مثل موقعیتی که الان من توش افتادم و فقط باید منتظر باشم تا درست بشه.پس سعی کنیم تغییر رو شروع کنیم، اگر از کار یا محیط کاری‌مون راضی نیستیم، به یه کار یا محیط دیگه‌ای بریم حتی با درآمد کمتر، آرامش و رضایت خیلی مهم‌تر از کار یا محل کار و حتی درآمده، من تجربه‌ی این مورد رو داشتم. اگر دلمون میخواد کاری انجام بدیم و هی به روز بعد، هفته بعد و ماه بعد موکول میکنیم،‌ اون رو تو یه برنامه‌ی نزدیک قرار بدیم و حتما انجامش بدیم. کارها رو عقب نندازیم، سفر بریم، فیلم ببینیم، عاشق کسی باشیم، ورزش و کارهای هیجان‌انگیز انجام بدیم و همه‌ی این‌ها باعث میشه زندگی خوب و با آرامشی داشته باشی، حتی اگر ماشین و خونه معمولی‌ای داشته باشی و در بین آدم‌ها، آدم معمولی‌ای باشی.یک جمله‌ی دیگه از فرانک آندروود تو سریال House of Cards - فصل دوم، قسمت دومIf you don&#x27;t like how the table is set, turn over the table.در آخر امیدوارم که همه، همه‌ی کارهایی که دوست دارند رو در زمان خودش انجام بدن و هیچ حسرتی به دل نداشته باشن و از زندگی‌شون نهایت لذت رو ببرن.حواسمون به زمان باشه که واقعا کوتاهه و واقعا با ارزش و حتی با ارزش‌تر از طلاست. فیلم In Time درباره‌ی مفهوم و ارزش زمان رو حتما پیشنهاد میکنم ببینید.ممنون از وقتی که گذاشتین و این مطلب رو مطالعه کردین. این دومین تجربه‌ی من تو نوشتن هست، حتما با نظرات و پیشنهادات خودتون من رو راهنمایی کنید.</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Thu, 21 Sep 2017 02:07:12 +0430</pubDate>
            </item>
                    <item>
                <title>سربازی</title>
                <link>https://virgool.io/@hamid/%D8%B3%D8%B1%D8%A8%D8%A7%D8%B2%DB%8C-zzntzytkem1g</link>
                <description>سربازیمیخوام براتون از سربازی بنویسم، الان خودم یازده ماهه که دارم خدمت میکنم و باید 21 ماه رو کامل خدمت کنم.سربازی اسمش ترسناکه، خیلی‌ها همه کار میکنن تا نرن سربازی، مثل خود من که درسم رو نزدیک به 7 سال کش دادم که نرم سربازی و بجاش کار کنم و درآمد داشته باشم، ولی خب آدم به نقطه‌ای میرسه که میبینه دیگه نه میشه کش داد و نرفت و نه دلش می­خواد که بره، تو این نقطه خیلی فشار زیاد میشه و بین دو راهی بزرگی قرار می‌گیری.من چون هنرستان بودم، باید می‌رفتم کاردانی و بعد کارشناسی، کاردانیم حدود 3 سال طول کشید چون بیشتر سرکار می‌رفتم و دانشگاه نمی‌رفتم و معمولا درس‌هام حذف می‌شد. بعد از اون کارشناسی دانشگاه آزاد قزوین بودم و اون اوایل خیلی علاقه داشتم که نمره‌هام خوب باشه و کلاس‌ها رو برم و دانشجوی خوبی باشم، ولی خب بازم نشد، چون راه دور بود، خسته می­شدم، کار زیاد داشتم و...، حدود 2 سال تو اون دانشگاه بودم ولی زیاد واحد پاس نکردم، معمولا حذف ترم می‌کردم. دنبال انتقالی بودم به تهران که اون هم موافقت نشد باهاش. در نهایت از اونجا انصراف دادم و رفتم یه علمی کاربردی تو خیابون ایرانشهر، چون می‌گفتم حداقل یه کارشناسی‌ای داشته باشم، کارشناسی نداشتن ضایع‌س الان و مردم چی میگن و اینجور طرز فکرها و هیچ علاقه‌ای به درس و دانشگاه نداشتم، چون عملا دانشگاه‌های اینجا وقت و پول تلف کردنه و فایده‌ای نداره. خلاصه یک سال اینطورا هم علمی کاربردی بودم و یک‌بار هم رنگ دانشگاه رو ندیدم. در نهایت به این نتیجه رسیدم من که درس‌خون نیستم، الکی وقتم رو دارم تلف می‌کنم، پاشم برم سربازی کارها رو هم یکاریش می‌کنم دیگه بالاخره. اینجوری بود که حدودای بهمن 94 رفتم و انصراف دادم و نامه‌ی معرفی به پلیس+10 رو زدن برام، تا کارای جمع آوری مدرک و پرکردن فرم‌ها و واکسن و دکتر و... انجام بشه شد فروردین 95، طرفای 14، 15 فروردین بود که رفتم دفترچه رو فرستادم و همون لحظه برگ سبز رو داد و نوشته بود اعزام اول آبان 95، گفتم ای بابا 8 ماه هم اینجا باید علاف باشیم!! از اون مسئول باجه پرسیدم گفت یک هفته دیگه بیا درخواست تعجیل بزن، یک هفته بعد رفتم و درخواست زدم، اعزامم شد اول شهریور 95 و زودتر امکان‌پذیر نبود.الان کارشناسی به بالا اعزام‌شون اول ماه‌های زوج، کاردانی، دیپلم و پایین‌تر اعزام‌شون 19 ماه‌های فرد هست. شانسی که من آوردم، آخرین دوره‌ای شدم که کاردانی‌ها با کارشناسی‌­ها بودن، الان دیگه سرباز عادی حساب می‌شن و کارهای پایین‌تر و برجک و اینجور چیزا باهاشونه.تنها جایی که من قبول دارم باید از بند پ استفاده کنیم و تا جایی که میشه پیچوند همین سربازیه، اونم چون اجباریه و بهترین سال‌های عمرت باید اسیر باشی. من روی اون بند پ خیلی حساب کرده بودم و میدونستم کجا قراره خدمت کنم. البته استرسش تا هفته قبل اعزام که برگ سفید میاد و میگه کجا افتادی و کی باید اونجا باشی باهام بود، چون هیچ‌چیز قطعی و 100% نیست. در نهایت دیدم که همونجا هستم که باید باشم و خوشحال بودم. توی اون حدود چهار ماه دوست داشتم زودتر برم خدمت و زودتر تموم شه و تکلیفم روشن بشه.تصمیم به سربازی رفتن تا این سن شاید بشه گفت سخت‌ترین تصمیم زندگیه، اینکه تقریبا دو سال وقتت تلف بشه و بعدش به یه آزادی‌ای برسی، پاسپورت داشته باشی، رو مخت نباشه این قضیه و یا نری و هی استرس داشته باشی که چی میشه؟ تا شانست بزنه بتونی بخری یا بعد از 20، 25 سال بهت عفو بخوره و معاف بشی.از نظر من اگر هیچ‌جوره شانس معاف شدن ندارید و یا جزو شرایط خرید نیستین، حتما و هرچی زودتر برید سربازی، هرچی سن بالاتر بره، شرایط برات سخت‌تر میشه، چون هم مربی‌ها و فرمانده سن‌شون پایینه و میبینی یوقت حتی از تو کوچیک‌ترن و بهت دستور میدن و خیلی زور داره برات. در بقیه موارد هم چون دیگه باید به فکر مستقل شدن باشی و کار و این داستان‌ها، هرچی سن بالاتر باشه مدیریت کردن همه اینا باهم سخت‌تره، پس هرچی زودتر بهتر.دوتا طرز فکر هست، بعضی‌ها مستقیم بعد دیپلم میرن سربازی، بدیش اینه که خب دوران سربازی خیلی خیلی سخت میگذره بهشون، ولی خوبیش اینه که وقتی بیای بیرون 20 سال بیشتر نداری و تکلیفت با زندگی مشخصه و میتونی هر تصمیمی که میخوای بگیری، بعضی‌ها بعدش میرن دانشگاه تازه، بعضی‌ها بلافاصله کار و...طرز فکر بعدی هم اینکه اینقدر درس میخونن و الکی دانشگاه رو کش میدن به امید سربازی نرفتن، معافی گرفتن و... که آخرسر هیچکدوم هم نمیشه و مجبورن برن، مثل خود من که اینجوری شد. پیشنهاد من اینه که خیلی نرمال درس رو بخونید و لیسانس رو بگیرید، در نرمال‌ترین حالت 22، 23 سال سن داری و بری سربازی بیای میشه 25 سال، و خیلی سن خوبی هست که برید وارد بازار کار بشید و مستقل شدن رو شروع کنید. بعدش یکم سخته و اذیت کننده‌س، مثل وضعیتی که الان من دارم. ولی حتما به نظر من لیسانس رو بگیرید و بعد برید خدمت، چون بدون لیسانس بهتون سخت میگیرن خیلی و واقعا دوران سختی میشه.در کل دو ماه آموزشی (با حساب تعطیلی‌ها و این چیزا حدود 40،45 روز) روزهای یکم سخت ولی خوبیه و تقریبا راحت میگذره و هرجا باشید زیاد فرقی نداره. مهم‌تر از آموزشی یگان خدمتی هست که قراره 19 ماه اونجا باشید هر روز و هرچقدر می‌تونید تلاش کنید تا جای خوبی باشید.این رو هم بگم که به نظر من اگر بهترین جا هم خدمت کنی، حتی تو خونه خودتون باشی و بخوری و بخوابی، ولی بازهم چون اجباره، چون اختیار وقت و کارات رو نداری و نمی‌تونی کاری که دوست داری رو انجام بدی، بازهم سخته. تنها سختی خدمت از نظر من همین وقتیه که تلف میشه در صورتی‌که بیرون از اینجا کلی کار میشه انجام داد و مفیدتر واقع شد.امیدوارم این مطلب به تصمیم‌گیری درباره‌ی سربازی بهتون کمک کنه و تاثیر داشته باشه. این اولین نوشته‌ی من هست و خوشحال میشم نقد و یا پیشنهادی دارین حتما برام بنویسید.</description>
                <category>حمید کریمی</category>
                <author>حمید کریمی</author>
                <pubDate>Sat, 22 Jul 2017 05:06:38 +0430</pubDate>
            </item>
            </channel>
</rss>