<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های امیرحسین موسوی</title>
        <link>https://virgool.io/feed/@samir</link>
        <description>مهندس نرم‌افزار</description>
        <language>fa</language>
        <pubDate>2026-06-07 14:30:09</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2896/avatar/vKsLWA.jpg?height=120&amp;width=120</url>
            <title>امیرحسین موسوی</title>
            <link>https://virgool.io/@samir</link>
        </image>

                    <item>
                <title>استفاده از URL.createObjectURL برای ایجاد تصویر پیش‌نمایش در جاوااسکریپت</title>
                <link>https://virgool.io/@samir/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-urlcreateobjecturl-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D9%BE%DB%8C%D8%B4-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-k8wcy1c31npe</link>
                <description>به عنوان یک فرانت‌اند دولوپر زیاد پیش میاد داخل یک وب‌سایت قسمتی وجود داشته باشه که کاربر بخواد تصویری رو آپلود بکنه (مثلا آپلود تصویر پروفایل)؛ یکی از اقدامات رایج جهت بهبود تجربه‌ی کاربر اینه که وقتی تصویری رو از روی سیستمش انتخاب کرده بهش پیشنمایشی از اون تصویر رو نشون بدیم تا ببینه چیزی که انتخاب کرده چیه و اگه اشتباه بود سریعا متوجه بشه. غیر از بحث تجربه کاربر، نشون دادن تصویر انتخاب شده‌ی کاربر پیش از آپلود یا ذخیره (به جای یه دکمه‌ی ساده یا فقط نمایش نام فایل) باعث میشه اون آپلودر و یا فایل سلکتوری که استفاده شده از نظر ظاهری هم جذاب تر باشه.اگه تا به حال تجربه‌ی پیاده‌سازی چنین چیزی رو داشته باشین طبیعتا میدونین که نمیشه عکس انتخابی کاربر رو مستقیما در تگ img مربوط به پیش‌نمایش استفاده کنید چرا که تگ img  نیاز داره یک URL (و یا Data URL) از عکس رو داشته باشه تا قادر به نمایش اون عکس باشه ولی input ما عکس رو با فرمت File بهمون میده. همچنین به دلایل امنیتی، مرورگر امکان دسترسی به فایل های سیستم کاربر رو به وب‌سایت نمیده پس نمیشه آدرس لوکال فایل رو برای این منظور استفاده کرد.پس ما برای اینکه بتونیم پیش‌نمایش یک تصویر رو نشون بدیم به نحوی یک URL و یا Data URL برای فایل عکس ایجاد کنیم و اون رو به وسیله‌ی تگ img نمایش بدیم. برای این منظور دو تا روش هست که میخوام یه خلاصه‌ای از هر دو روش بگم و با هم مقایسه‌شون کنم تا ببینیم بهتره از کدوم روش استفاده کنیم: ۱- استفاده از کلاس FileReader و ۲- استفاده از کلاس URLکلاس FileReaderاولین روشی که فک میکنم رایج ترین روش هم باشه استفاده از کلاس FileReader جاوااسکریپته. این کلاس با استفاده از متدهایی که دراختیارمون قرار میده قادره فایل ها رو با فرمت مد نظر ما بخونه (مثلا Text, Binary, ArrayBuffer و DataURL) و برامون خروجی بده. تو این مورد ما میتونیم از متد readAsDataURL این کلاس استفاده کنیم تا فایل رو برامون درقالب DataURL خروجی بده و بعد ما میتونیم از خروجی اون برای تگ img استفاده کنیم. یه کد ساده از نحوه‌ی پیاده‌سازی این روش نوشتم که توی عکس میتونید ببینید:همونطور که داخل عکس مشخصه این متد به صورت async کار میکنه (یعنی با کال کردن متد readAsDataURL بلافاصله جواب رو به ما برنمیگردونه) علتش هم اینه که این متد میاد کل فایل رو میخونه و طبیعتا زمانی که میبره با توجه به حجم فایل متغیره. کلاس‌هایی که متدهاشون به صورت async عمل میکنن معمولا یا از Promise ها برای برگردوندن خروجی استفاده میکنن و یا ایونت‌هایی برای نتیجه‌های مختلفشون تعریف میکنن. تو این مورد هم برای گرفتن خروجی متد، لازمه که از ایونت load مخصوص این کلاس استفاده کنیم تا وقتی عمل خوندن فایل تموم شد بتونیم نتیجه رو بگیریم. این ایونت رو هم میشه مشابه عکس با استفاده از پراپرتی  استفاده کرد و هم میشد مثلا روشی که برای input پیاده کردم از addEventListener استفاده کنیم.خب نهایتا با این روش ما تونستیم یه پیش نمایش از عکس انتخابی کاربر ایجاد کنیم. اما این روش یه مشکل مهم داره، اونم اینه که  که برای تولید DataURL لازمه کل فایل read بشه توسط کلاس FileReader و این عمل با توجه به حجم فایل ما میتونه زمانبر باشه (مثلا اگه عکس انتخابی حجمش زیاد باشه چند ثانیه طول بکشه تا پیش‌نمایش تولید بشه). همچنین از نظر پرفورمنس هم این روش خیلی بهینه نیست (البته با توجه به هدف که تولید یه پیش نمایش ساده‌است).یه روش دومی هم هست که از نظر زمان و پرفورمنس خیلی بهتر از کلاس FileReader  برای این مقصود عمل میکنه.کلاس URLجاوااسکریپت یه کلاس دیگه‌ای تحت عنوان URL داره که برای تولید، parse کردن و تغییر دادن URL ها استفاده میشه معمولا. اما این کلاس یک متد استاتیک (یعنی بدون ساختن شی و new کردن قابل استفاده است) هم داره که تو این مورد میتونیم ازشون برای تولید پیش‌نمایش عکسمون استفاده کنیم.متد استاتیک createObjectURL که روی کلاس URL تعریف شده به ما این امکان رو میده که برای یک فایل، یک آدرس URL موقت ایجاد کنیم و از اون آدرس مشابه یک لینک مستقیم به اون فایل استفاده کنیم.نحوه‌ی استفاده‌ش رو تو این عکس میتونید ببینید:همونطور که توی عکس واضحه، هم از نظر حجم کد خلاصه و مفیدتره و هم اینکه این متد برخلاف FileReader async اجرا نمیشه و در لحظه خروجی میده. علتش هم اینه که این تابع نیازی به read کردن فایل نداره و صرفا یه لینک موقت و یکتا واسه فایل ایجاد میکنه (از نوع blob) و اینجوری دیگه وابسته به حجم فایل هم نیست. در مجموع این روش نسبت به روش قبل ساده‌تر و سریع‌تر هستش. این تابع اینه که با هربار کال کردنش یه URL جدید تولید میکنه، یعنی اگه برای یک فایل ده بار این تابع رو کال کنیم هربار یه لینک جدید خروجی میده. یه نکته‌ی مهم که لازمه در نظر بگیرید اینه که عمر این لینک‌ها هم وابسته به document هستش و تا وقتی که document از بین نرفته (یعنی unload نشده) این آدرس های تولید شده پابرجا میمونن و طبیعتا یه ذره از حافظه رو هم برای خودشون اشغال میکنن. این معنیش این میشه که لازمه خود ما وقتی یه آدرسی رو دیگه نیاز نداشتیم به صورت دستی آزاد کنیم تا یه موقع دچار memory leak نشیم.برای آزاد کردن آدرس‌های بلااستفاده یه متد استاتیک دیگه روی کلاس URL وجود داره به نام revokeObjectURL که یدونه از اون Object URL های تولید شده رو میگیره و اون رو حذف میکنه. حالا کی باید ازش استفاده کنیم؟ در حالت ساده‌ش اگه فقط میخوایم یه پیشنمایش ساده از یک فایل داشته باشیم میتونی روی ایونت load مربوط به تگ img اینکار رو بکنیم. یعنی به تگ img میگیم وقتی این عکس رو لود کردی و نشون دادی بیا لینکشو هم revoke کن. تو عکس ببینید:یا هم اگه هدفی علاوه بر نمایش دادن داریم (مثلا میخوایم قابل دانلود هم باشه یا نیازه چند جا استفاده بشه) میتونیم هر موقع که خودمون صلاح دونستیم و دیدم دیگه لازم نیست اون رو revoke کنیم (مثلا اگه از فریمورک‌هایی مثل react یا vue استفاده میکنیم تو چرخه‌ی destroy شدن کامپوننتمون اینکارو بکنیم).فقط این نکته رو دوباره تاکید کنم که حتی وقتی برای یک فایل یکسان تابع createObjectURL رو کال کنیم هربار آدرس جدیدی تولید میکنه، پس اگه میخوایم آدرس تولید شده برای یک فایل رو revoke کنیم لازمه که اون آدرس رو جایی ذخیره کنیم و همونو به تابع revokeObjectURL بدیم (مشابه عکس که imageEl.src رو برای این کار استفاده کردم).پی‌نوشت: برای این که خودم خودم رو ترغیب کنم بیشتر مطلب بنویسم سعی کردم تو نوشتن این پست سخت نگیرم و بدون وسواس اینکارو بکنم، برای همین احتمال اینکه اشتباهی داشته باشم یا همه چیز رو پوشش نداده باشم هست. هر جا موردی بود خوشحال میشم کامنت بذارین و نظرتون رو بگین.</description>
                <category>امیرحسین موسوی</category>
                <author>امیرحسین موسوی</author>
                <pubDate>Fri, 08 Apr 2022 18:36:30 +0430</pubDate>
            </item>
                    <item>
                <title>بنویس! حتی اگر کسی هیچکس نخواند.</title>
                <link>https://virgool.io/@samir/%D8%A8%D9%86%D9%88%DB%8C%D8%B3-%D8%AD%D8%AA%DB%8C-%D8%A7%DA%AF%D8%B1-%DA%A9%D8%B3%DB%8C-%D9%87%DB%8C%DA%86%DA%A9%D8%B3-%D9%86%D8%AE%D9%88%D8%A7%D9%86%D8%AF-omhhce8fgncp</link>
                <description>« بنویس! هر چه دلت می خواد باشد؛ نامه، یادداشت روزانه یا حتی یادداشت هایی که از مکالمه‌ای تلفنی بر می‌داری. فقط بنویس!»نوشتن را دوست دارم. معتقدم نوشتن بهترین و سریع‌ترین روش برای آرام کردن ذهن است. مثل این است که دریچه‌ی مغز را باز کنی و هر چه نگرانی، دغدغه و یا حرف ناگفته داری روی کاغذ بپاشی. یا شاید به جای کاغذ یک صفحه الکترونیکی! یا از آنجایی که انسان و رایانه شباهت های زیادی به یکدیگر دارند می‌تواند نوشتن را مشابه عمل Memory Swapping در سیستم عامل در نظر گرفت - در رایانه، سیستم عامل بخش‌هایی از حافظه رم را که موقتا نیازی به‌شان نیست یا اولویت بالایی ندارند به هارد دیسک می‌فرستد تا از فضای آنها برای برنامه‌های مهم تر استفاده کند.« نوشتن به ما کمک می‌کند که به افکارمان سر و سامان بدهیم و آنچه را که در اطرافمان است با وضوح بیشتری ببینیم.« قلم و کاغذ معجزه می‌کنند. آلام را تخفیف می‌دهند، به رؤیاها جامه‌ی عمل می‌پوشانند و امید های از دست رفته را احیا می‌کنند.»با این حال تعداد نوشته‌های من کم تر از انگشتان یک دست است. ما هر چه رنج می‌کشیم به خاطر ترس است. من هم از نوشتن می ترسم؛ شاید هم ترس من از نوشتن نیست بلکه از خوانده شدن است. ترس از اینکه دیگران بدانند چه در سر من می‌گذرد. ترس از آنکه تصویر ذهنی‌شان نسبت به من تغییر پیدا کند و بشود همان چیزی که من خودم را می‌بینم؛ و من چیزی که می‌بینم را زیاد دوست ندارم.یا شاید هم ترسم از عالی نبودن باشد. همان کمالگرایی لعنتی!  نکند بیان نوشته‌ام خوب نباشد، شاید به خوبی نوشته های دیگران نشود، شاید چرند باشد، شاید اشتباهاتی هست که نمی‌بینم و ...بعضی وقت‌ها هم شروع می‌کنم به نوشتن؛ چند خط می‌نویسم و یهو با خودم می‌گویم برای کی می‌نویسی؟ اصلا کسی این نوشته ها را می‌خواند؟ اصلا می‌نویسی که چی بشود؟ اما الان می فهمم نوشتن برای دیگران نیست برای خود آدم است.برای همین چند بار برای خودم نوشتم. روی یک کاغذ افکارم را نوشتم و زمانی که تمام شد آن رو سوزاندم؛ ارزشش را داشت. آرامشی که میخواستم بدست آوردم. بکوش که به نوشتن دل ببندی، حتی اگر هیچ کس کلماتت را نخواند، یا حتی بدتر، شخصی، چیز‌هایی که نمی‌خواستی خوانده شود، بخواند.اما دیگر جرئت همان را هم نداشتم. اینکه با افکار خود دوباره مواجه شوم و آن ها را بنویسم. شاید برای ادامه‌ی نوشتن باید نوشته های شخصی خودم را هم سانسور کنم، بعضی از افکارمان بهتر است در پس زمینه ذهن دفن شوند زیرا بازگو کردنشان آن آرامش حاصل از نوشتن را از بین می برد. به هر حال باز هم تلاشم را می‌کنم تا چیزهایی بنویسم چرا که «کلمه قدرت دارد»مرشد می گوید:« بنویس! هر چه دلت می خواد باشد؛ نامه، یادداشت روزانه یا حتی یادداشت هایی که از مکالمه‌ای تلفنی بر می‌داری. فقط بنویس!« با نوشتن به خدا و دیگران نزدیک تر می‌شویم.  اگر می‌خواهی به درک بهتری از جایگاهت در جهان برسی، بنویس. بکوش که به نوشتن دل ببندی، حتی اگر هیچ کس کلماتت را نخواند، یا حتی بدتر، شخصی، چیز‌هایی که نمی‌خواستی خوانده شود، بخواند.« نوشتن به ما کمک می‌کند که به افکارمان سر و سامان بدهیم و آنچه را که در اطرافمان است با وضوح بیشتری ببینیم.« قلم و کاغذ معجزه می‌کنند. آلام را تخفیف می‌دهند، به رؤیاها جامه‌ی عمل می‌پوشانند و امید های از دست رفته را احیا می‌کنند.« کلمه قدرت دارد.»- - روایتی از کتاب «مکتوب» نوشته‌ی پائولو کوئیلو</description>
                <category>امیرحسین موسوی</category>
                <author>امیرحسین موسوی</author>
                <pubDate>Thu, 19 Mar 2020 22:12:48 +0330</pubDate>
            </item>
                    <item>
                <title>تعبیر من از گنو/لینوکس</title>
                <link>https://virgool.io/fsf-linux/%D8%AA%D8%B9%D8%A8%DB%8C%D8%B1-%D9%85%D9%86-%D8%A7%D8%B2-%DA%AF%D9%86%D9%88%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-ebuqi85yjhop</link>
                <description>حدود یک سال می شه که با دنیای جذاب گنو/لینوکس آشنا شدم. از کجا ؟ یکی از دوستانم یک مجموعه آموزشی برنامه نویسی اندروید به من قرض داد که مدرّسش از لینوکس استفاده می کرد و قسمت های ابتدایی مجموعه رو به معرفی و آموزش نصب یکی از توزیع های لینوکسی اختصاص داده بود (توزیع elementary OS)؛ از اونجایی که من که آدم کنجکاو و تنوع طلبی هستم تصمیم گرفتم امتحانش کنم و تا الان لینوکسی باقی موندم و توزیع های مختلفی رو تست کردم.- چرا لینوکس ؟ مگه ویندوز چشه ؟ میخوای بگی خیلی حرفه ای هستی؟ حوصله داری دردسر درست کنی برای خودت؟نمی خوام از این شعار های آزادی نرم افزار و رایگان بودن غیره بدم، چون این مسائل واقعا در ایران و در سطح کاربری اکثر ماها هیچ اهمیتی نداره ؛ به طور کلی نمی خوام از مزیت های لینوکس بگم بلکه قصدم اینه یکی از انتقاد هایی که به لینوکس وارد میشه (سختی و پر دردسر بودن) رو از دید خودم و به صورت تمثیل بگم.راه های زیادی برای حمل و نقل درون شهری وجود داره دو تا از اون ها تاکسی و ماشین شخصی ؛ به تفاوت هاشون دقت کنید.مزیت های تاکسی ‌:+ استفاده اش راحته ، کافیه کنار خیابان دست تکون بدید یا از طریق تلفن و اینترنت یکیو خبر کنید.+ خیلی از مشکلاتش رو شما نمی بینید (بی خبری خوش خبری) : خرابی ، جریمه ، هزینه های جانبی و ...+ نیاز به یادگیری چیز خاصی ندارید. مثلا یادگیری رانندگی ، یادگیری مسیر ها ، یادگیری قوانین راهنمایی و رانندگی.+ اگه تاکسیتون خراب بشه زود عوضش می کنید.حالا معایبش :- اولش میشه به همون مزیت سوم اشاره کرد : چیزی یاد نمی گیرید.- اختیار تمام امکانات ماشین رو ندارید؛ مثلا نمی تونید موزیک های موردعلاقه اتون رو پخش کنید ، نهایتا می تونید از راننده بخواهید صدای ضبط رو کم یا زیاد کنه یا مثلا هر زمان دوست داشته باشید کولر رو خاموش یا روشن کنید.- خراب شدنش غیر قابل پیش بینیه. یعنی ممکنه شما یک روز عجله داشته باشید و تاکسی بگیرید در حالی که از سلامت تاکسی اطلاعی ندارید و ممکنه خراب باشه. (اگه ماشین خودتون باشه پیشگیری می کنید یا حداقل از اغلب از قبل می دونید فلان قسمت ماشین مشکل داره و ممکنه خراب بشه)- و ...در مقابل تاکسی ، میشه به ماشین شخصی اشاره کرد که اول معایبش رو می نویسم‌: - به دست آوردن اون سخته و باید براش تلاش کرد.- ممکنه هزینه های تعمیر و نگهداریش از تاکسی بیشتر باشه.- همه خرابی ها ، جریمه ها ، دردسر ها پای خودتونه و خودتون باید مشکلات رو حل کنید.- نیاز دارید کلی چیز تازه یاد بگیرید : رانندگی ، مسیر ها ، قوانین و ...- خسته کننده است.- بعضی وقت ها ممکنه برای تعمیر ماشینتون کل شهر رو بچرخید.و ... دیگه خودتون در جریان هستید.اما دربرابر همه سختی ها فقط دو تا مزیتش رو ذکر می کنم :+ اختیار کامل دست شماست.+ می تونید هر جور بخواهید شخصی سازی کنیدش.صادقانه جواب بدید ترجیح می دید همیشه از تاکسی استفاده کنید یا ماشین شخصی رو با همه ی دردسر هاش ترجیح می دید؟در نهایت بخوام ربطش بدم به بحث اصلی : تاکسی همون ویندوزه و ماشین شخصی لینوکس.لینوکس نیاز به یادگیری و تلاش داره ، به عنوان یک کاربر معمولی ، توش بیشتر از ویندوز به مشکل بر میخورید و باید با پرس و جو و سرچ در اینترنت مشکلات رو حل کنید. اما به نظر من ارزشش رو داره و لذت بخشه.خودتون برگردید بالا و موارد ذکر شده رو با این دید بررسی کنید و نظرتون رو بنویسید.البته بگم به هیچ وجه هدف نوشته ی من ادعای برتری لینوکس نسبت به ویندوز و یا بد بودن ویندوز نیست ، فقط دیدگاه و سلیقه شخصی است. پس لطفا جبهه گیری نکنید.</description>
                <category>امیرحسین موسوی</category>
                <author>امیرحسین موسوی</author>
                <pubDate>Sat, 06 Oct 2018 21:59:50 +0330</pubDate>
            </item>
                    <item>
                <title>کیمیاگر</title>
                <link>https://virgool.io/@samir/-nnclbwhzqlan</link>
                <description>کیمیاگر : پائولو کوئلیو... جنگ جویان به ندرت با پیشگو ها مشورت می کردند ، چون رفتن یک انسان به جنگ با دانستن اینکه چه زمانی خواهند مرد غیر ممکن است. ...بنابر این جنگجویان تنها در اکنون میزیستند ...ساربان یک جنگجو نبود و تا آن زمان با چند پیشگو مشورت کرده کرده بود.بیشتر آن ها مسایل درستی به او گفته بودند و نظر بقیه نادرست بود. تا اینکه یکی از آنها ، پیر ترین و عجیب ترینشان ، پرسید که چرا ساربان آنقدر به آگاهی از آینده علاقه مند است.ساربان گفت : « تا بتوانم کار هایی را انجام دهم و آنچه رخ دادنش را دوست ندارم تغییر دهم» .پیشگو گفت : « پس دیگر آینده ی تو نخواهد بود ».- « پس شاید می خواهم برای آنچه رخ می دهد آماده باشم ».+ « اگر رخداد های خیری باشند ، غافلگیری دلپذیری خواهد بود؛ اگر رخداد های شرّی باشند ، سال ها پیش از وقوع شان رنج خواهی برد ».پیشگو : « ... هنگامی که مردم با من مشورت می کنند ، آینده را نمی خوانم ، آن را پیش بینی می کنم چون آینده از آن خداوند است و خداوند آینده را تنها در شرایط استثنایی آشکار می کند. »ساربان می خواست بداند خدا در کدام شرایط اجازه دیدن آینده را می دهد.+ « هنگامی که خودش آن را آشکار کند . و خداوند به ندرت این کار را می کند و فقط به یک دلیل : او آینده ای را نشان می دهد که  فقط برای عوض شدن نوشته شده ».یکی از قسمت های مورد علاقه من از کتاب « کیمیاگر » نوشته پائولو کوئلیو ؛ پیشنهاد می کنم حتما بخونیدش ، مکالمات پر معنا و جذاب زیادی در این رمان گنجانده شده که بیشتر از داستان اصلی خواننده رو مجذوب خودش می کنه.</description>
                <category>امیرحسین موسوی</category>
                <author>امیرحسین موسوی</author>
                <pubDate>Thu, 20 Sep 2018 19:02:23 +0430</pubDate>
            </item>
            </channel>
</rss>