<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های رضا مرسلی</title>
        <link>https://virgool.io/feed/@r6m</link>
        <description>برنامه نویس</description>
        <language>fa</language>
        <pubDate>2026-06-10 12:47:54</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/21046/avatar/MrMATy.jpeg?height=120&amp;width=120</url>
            <title>رضا مرسلی</title>
            <link>https://virgool.io/@r6m</link>
        </image>

                    <item>
                <title>انتشار Node 18 و امکانات جدید!</title>
                <link>https://virgool.io/fingcloud/node-18-features-%D8%A7%D9%85%DA%A9%D8%A7%D9%86%D8%A7%D8%AA-%D9%86%D9%88%D8%AF-18-pdhew7h8qyz6</link>
                <description>آپدیت node 18 و امکانات جدیدبتازگی نسخه جدید Node.js منتشر شده است که با امکانات جدید و جالبی همراه است و نکته جالب اینکه این نسخه با عدد زوج منتشر شده. این نسخه با کد Hydrogen منتشر شده است و تا آوریل ۲۰۲۵ پشتیبانی خواهد شد.نسخه‌های زوج به چه معناست؟نسخه‌های زوج Node با عنوان LTS یا Long Term Support منتشر می‌شوند. به این معنی که تضمین می‌کند باگ‌های بحرانی را تا ۳۰ ماه آینده برطرف می‌شوند. به همین دلیل توصیه می‌شود همیشه از نسخه‌های فعال LTS استفاده کنید.امکانات جدید نسخه Node 18 چیست؟ویژگی های جدید Node 18 عبارتند از:افزودن fetchافزودن Test Runnerبهبور ماژول‌های ECMAScriptپشتیبانی و بهبود AbortController و AbortSignalنسخه V8 10.1پشتیبانی از OpenSSL 3مشخص است که کار‌های زیادی انجام شده و توسعه Node.js با صورت خوبی در حال پیشرفت است. که به سه مورد آن اشاره می‌کنیمافزودن fetchبا افزودن fetch هم‌افزایی و یکپارچگی بیشتری بین front-end و back-end ایجاد می‌شود. برای توسعه دهنده Node.js دردسر نصب کتابخانه‌های مختلف برای ارسال و دریافت درخواست‌های API و خواندن اطلاعات Response آشناست. اما Node 18 با افزودن fetch  بصورت عمومی و بدون نیاز به فراخوانی این دردسر‌ها را کاهش داده و نیاز به نصب کتابخانه‌ها را کمتر کرده است.ارسال درخواست و خواندن اطلاعات JSON بدون کتابخانه اضافی به همین سادگی:const resp = await fetch(&#039;https://nodejs.org/api/documentation.json&#039;)
if (resp.ok) {
  const data = await resp.json()
  console.log(data)
}
​افزودن Test Runnerبرای تست برنامه‌های Node، کتابخانه‌های زیادی مانند Jest یا Mocha هستند. اما از این نسخه به بعد می‌توانید از خود Node برای نوشتن تست برای برنامه خود استفاده کنید. خروجی test runner بصورت TAP هستند که استفاده از خروجی آنها را ساده‌تر میکند.ماژول node:test برای این کار فراهم شده که به صورت زیر قابل استفاده است:import test from &#039;node:test&#039;
​
test(&amp;quotUser tests&amp;quot, async (t) =&gt; {
  const email = &amp;quotuser@example.com&amp;quot
  const password = &amp;quotsecert&amp;quot
  
  await t.test(&amp;quotshould authenticate valid user&amp;quot, (t) =&gt; {
    const ok = User.authenticate(email, password)
    assert.strictEqual(ok, true)
  })
})توجه کنید که این ماژول با پیشوند node فراخوانی شده است.بروزرسانی V8 Engine به 10.1در نسخه جدید از V8 Egnine نسخه 10.1 استفاده میشود که در بروزرسانی جدید Chromium 101 منتشر شده بود. برای اطلاعات بیشتر V8 Engine سری بزنید.</description>
                <category>رضا مرسلی</category>
                <author>رضا مرسلی</author>
                <pubDate>Tue, 26 Apr 2022 16:36:45 +0430</pubDate>
            </item>
                    <item>
                <title>لورم ایپسوم چیست؟</title>
                <link>https://virgool.io/fingcloud/lorem-ipsum-%D9%84%D9%88%D8%B1%D9%85-%D8%A7%DB%8C%D9%BE%D8%B3%D9%88%D9%85-%DA%86%DB%8C%D8%B3%D8%AA-oohzfpnzywlq</link>
                <description>لورم ایپسوم چیست؟لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. البته در فارسی  آن را با عنوان طرح‌نما هم می‌شناسند.چرا از لورم ایپسوم استفاده می‌شود؟شاید این سؤال به ذهن شما هم رسیده باشد که چرا یک طراح باید از متن تصادفی و بی‌معنی لورم ایپسوم بجای یک پاراگراف با معنی استفاده کند؟ چرا متنی را از یک کتاب کپی نکند؟ دلیل اصلی آن این است که لورم ایپسوم باعث میشود افراد کمتر روی متن و نوشتار یک وب‌سایت تمرکز کنند و بیشتر توجه آنها به ساختار و طراحی متمرکز شود.معنی لورم ایپسومحتما با نگاه اول متوجه شده‌اید که لورم ایپسوم فارسی ترجه نسخه انگلیسی آن نیست. در حقیقت متن لورم ایپسوم فارسی معنی خاصی ندارد و ترکیب و چینش کلمات بی‌معنی کنار هم نمایانگر این مطلب می باشد. جالب این است که لورم ایپسوم انگلیسی هم معنی خاصی در زبان انگلیسی ندارد. البته جمله لاتین اصلی لورم ایپسوم که این متن از آن استخراج شده معنای مشخصی دارد.چگونه متن لورم ایپسوم بسازیم؟اگر طراح هستید و به دنبال ساخت متن تصادفی لورم ایپسوم هستید می‌توانید در همین صفحه متن لورم ایپسوم فارسی و انگلیسی در ابعاد مختلف مانند جمله، پاراگراف، متن کتاب، و کلمه تنظیم تعداد آن بساید.نکته‌ای نهایی در مورد ساخت متن لورم ایپسوم آن است که برخی طراحان بعد از طراحی و پیاده‌سازی تم و وب‌سایت فراموش می‌کنند که متن لورم ایپسوم را از تمامی وب‌سایت یا برخی از قسمت‌ها حذف کنند. این امر باعث شده برخی از سایت‌هایی که مشاهده می‌کنیم دارای متن بی‌معنی لورم در صفحات خود باشند.چند نمونه سایت‌هایی که میتوانید در آن لورم ایپسوم بسازید:loremsaz.ir (فارسی)loremipsum.io (انگلیسی)loremipsume.ir (فارسی و انگلیسی)tulz.ir (فارسی و انگلیسی)</description>
                <category>رضا مرسلی</category>
                <author>رضا مرسلی</author>
                <pubDate>Sat, 25 Dec 2021 10:59:07 +0330</pubDate>
            </item>
                    <item>
                <title>معرفی زبان Go</title>
                <link>https://virgool.io/fingcloud/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D8%B2%D8%A8%D8%A7%D9%86-go-rmb7owqs9kvy</link>
                <description>معرفی زبان برنامه‌نویسی goزبان go که با نام golang نیز شناخته میشود، یک زبان برنامه‌نویسی رویه‌ای (procedural) متن‌باز (open source) است. این زبان جزو زبان‌های کامپایل شونده (compiled) و تایپ شده (statically typed) محسوب می‌شود. این زبان در سال ۲۰۰۷ توسط سه فرد (Robert Griesemer, Rob Pike, and Ken Thompson) خلق شد. اما بعدا در سال ۲۰۰۹ توسط گوگل به عنوان یک زبان متن‌باز توسعه و ارائه شد.در واقع go یک زبان برنامه‌نویسی همه‌منظوره با املایی ساده است که توسط یک کتابخانه استاندارد قوی پشتیبانی می‌شود. Go در موضوعات زیادی استفاده میشود، اما نام این زبان زیبا معمولا با برنامه‌های وب با دسترسی و مقیاس‌پذیری بالا (highly available and scalable) زیاد دیده می‌شود. همچنین از Go برای برنامه‌های خط فرمان (command-line) استفاده می‌کنند.ویژگی‌های Golangچرا Go را به عنوان زبان برنامه‌نویسی سمت سرور انتخاب می‌کنند، در حالی که زبان‌های دیگر مانند nodejs، python و ruby وجود دارند که کار مشابهی را انجام می‌دهند؟خب، در اینجا برخی از ویژگی‌های golang رو بررسی میکنیم:املای ساده این زبان (Syntax)املای این زبان ساده و مختصر و بدون ویژگی‌های غیر معمول و غیر‌ضروری است، که باعث نوشتن کدی تمیز و قابل خواندن و نگهداری می‌شود.همزمانی (Concurrency)همزمانی بخش ذاتی Golang است. در نتیجه کار با thread ها و نوشتن برنامه‌های چند thread مثل آب خوردن می‌شود. این امکان در golang با استفاده از goroutine ها و channel ها قابل استفاده است که بعدا در مورد آن توضیح خواهم داد.زبان کامپایل شده (Compiled Language)go یک زبان کامپایل شونده است. به این معنا که کد شما به یک باینری بومی تبدیل می‌شود. همچنین کامپایلر golang بسیار سریع است.این مورد در زبان‌های تفسیر شده مانند nodejs یا python وجود ندارد.ابزاری‌های golangیکی از ویژگی‌های مورد علاقه من ابزارهای قدرتمندی هستند که golang برای برنامه‌نویسان آماده دارد، که مفصل در مورد آن خواهم نوشت. نام بردن بعضی از آنها خالی از لطف نیست :)gofmt - این ابزار برای قالب بندی (format) کد شما استفاده می‌شود. بطور کلی تمامی کد‌های این زبان قالب یکسانی دارند که باعث خوانایی بهتر کد می‌شود.vet - این ابزار کد شما را تجزیه و تحلیل کرده و کدهای مشکوک را گزارش می‌دهد. البته همه گزارشات vet مشکل واقعی نیستند، اما خطاهای احتمالی را که توسط کامپایلر گزارش نمی‌شوند را تشخصی می‌دهد.golint - این ابزار برای شناسایی مسائل ظاهری استفاده می‌شودالبته استفاده این ابزارها با برنامه‌هایی چون vscode بسیار دلچسب‌تر خواهد بود و قدرت و راحتی استفاده از آن‌ها را بیشتر می‌کند.Garbage collectionزبان برنامه‌نویسی golang از garbage collection استفاده می‌کند. بنابراین مدیریت حافظه تقریبا بطور خودکار انجام می‌شود و توسعه دهنده نیازی به نگرانی در مورد آن ندارد. این مورد برای نوشتن برنامه‌های همزمانی (cuncurrent) بسیار کاربردی است.برنامه‌هایی که با Go نوشته شده‌اندبرخی از برنامه‌هایی که با Go نوشته شده‌اند:KubernetesDockerHugoMinIOMattermostDgraph</description>
                <category>رضا مرسلی</category>
                <author>رضا مرسلی</author>
                <pubDate>Wed, 13 Oct 2021 20:44:08 +0330</pubDate>
            </item>
                    <item>
                <title>چطور تمام پوشه‌های node_modules سیستم رو پاک کنیم؟</title>
                <link>https://virgool.io/fingcloud/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%85%D8%A7%D9%85-%D9%BE%D9%88%D8%B4%D9%87-%D9%87%D8%A7%DB%8C-nodemodules-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D8%B1%D9%88-%D9%BE%D8%A7%DA%A9-%DA%A9%D9%86%DB%8C%D9%85-sfbxu63exx8o</link>
                <description>node_modulesهر بار که روی یک پروژه جدید javascript کار میکنیم باید دستور npm install رو اجرا کنیم تا پکیج های پروژه نصب بشن. اما تا حالا فکر کردیم چقدر از فضای هارد دیسک ما رو اشغال میکنند؟یک پوشه node_modules ممکن است ۲۰۰ مگابایت (گاها تا نزدیک ۱ گیگابایت) فضا را اشغال کند!یک نگاه به پوشه‌ای که پروژه‌های خود را در آن نگهداری میکنید بیندازید و ببینید چقدر از فضای اشغالی دیسک شما را این node_modules ها اشغال کرده‌اند.لیست همه node_modules های یک پوشهابتدا یک نگاهی به همه node_modules های یک پوشه بیندازیم قبل از اینکه آنها را حذف کنیم.حتما مطمئن شوید که با terminal یا cmd در پوشه‌ی پروژه‌های خود قرار دارید.مک و لینوکس:این دستور هر پوشه‌ای که node_modules در آن وجود دارد را به همراه فضای گرفته شده آن چاپ می‌کند.$ cd projects
$ find . -name &amp;quotnode_modules&amp;quot -type d -prune -print | xargs du -chs
--- Example Output ---
136M    ./ig-feeder/node_modules
668M    ./sandbox/editor/node_modules
289M    ./sandbox/slate-editor/node_modules
1.1G    totalویندوز$ cd projects
$ FOR /d /r . %d in (node_modules) DO @IF EXISTS &amp;quot%d&amp;quot echo %d&amp;quotهمونطور که می‌بینید لیست node_modules ها و فضای اشغالی اون رو با دستور بالا نمایش میده.حذف همه node_modules های یک پوشهتوجه: در اینجا حتما احتیاط کنید و مطمئن شوید که در یک دایرکتوری هستید که در آن می توانید همه موارد node_modules را حذف کنید ، اسکریپت بالا را اجرا کنید تا قبل از حذف لیست کامل همه آنها را مشاهده کنید. این اسکریپت بسیار شبیه به اسکریپت بالا است ، اما ما قصد داریم از rm -rf برای حذف کامل آنها استفاده کنیم.هشدار: این روند برگشت ناپذیر است!مک و لینوکس$ cd projects
$ find . -name &#039;node_modules&#039; -type d -prune -print -exec rm -rf &#039;{}&#039; \;ویندوز$ cd documents
$ FOR /d /r . %d in (node_modules) DO @IF EXIST &amp;quot%d&amp;quot rm -rf &amp;quot%d&amp;quotکاربران PowerShellGet-ChildItem -Path &amp;quot.&amp;quot -Include &amp;quotnode_modules&amp;quot -Recurse -Directory | Remove-Item -Recurse -Force</description>
                <category>رضا مرسلی</category>
                <author>رضا مرسلی</author>
                <pubDate>Mon, 02 Aug 2021 13:28:08 +0430</pubDate>
            </item>
                    <item>
                <title>از DefaultServeMux استفاده نکنیم</title>
                <link>https://virgool.io/fingcloud/dont-use-golang-defaultservermux-in-production-zpdw5639ns5v</link>
                <description>توی بعضی از آموزش‌ها دیدم که برای راه اندازی یه وب‌سرور ساده در گولنگ روش زیر رو پیشنهاد می‌دهند. package main

import (
  &amp;quotfmt&amp;quot
  &amp;quotlog&amp;quot
  &amp;quotnet/http&amp;quot
)

func main() {
  http.HandleFunc(&amp;quot/hello&amp;quot, func(w http.ResponseWriter, r *http.Request){
    fmt.Fprintf(w, &amp;quotHello world!&amp;quot)
  })

  fmt.Printf(&amp;quotStarting server at port 8080\n&amp;quot)
  log.Fatal(http.ListenAndServe(&amp;quot:8080&amp;quot, nil))
}اگر با گولنگ وب‌سرور ساده‌ای نوشته‌اید، احتمالا تابه‌حال DefaultServeMux به گوشتان خورده.در واقع ServeMux یک روتر است که وظیفه ارتباط درخواست با url از پیش تعیین شده و اجرای &#x60;handler&#x60; مورد نظر را دارد. http.HandleFunc و http.Handle برای ثبت handler در DeafultServeMux استفاده میشود. مشکل این است که DeafultServeMux یک متغیر گلوبال است.var DefaultServeMux = new(ServeMux)اگر پکیج‌های خارجی رو وارد و استفاده میکنین، اون‌ها هم این امکان رو دارند که در DefaultHandlerMux بتوانند handler خودشون رو ثبت کنن!package malicious

import (
  &amp;quotfmt&amp;quot
  &amp;quotnet/http&amp;quot
  &amp;quotos&amp;quot
)

func init() {
  http.HandleFunc(&amp;quot/env&amp;quot, printEnvHandler)
}

func printEnvHandler(w http.ResponseWriter, r *http.Request) {
  for _, env := range os.Environ() {
    fmt.Fprintf(w, &amp;quot%s\n&amp;quot, env)
  }
}برای جلوگیری کافیه ServeMux رو خودتون تعریف کنین.mux := http.NewServeMux()
mux.HandleFunc(&amp;quot/hello&amp;quot, helloHandler) 
http.ListenAndServe(&amp;quot:8080&amp;quot, mux)</description>
                <category>رضا مرسلی</category>
                <author>رضا مرسلی</author>
                <pubDate>Sat, 22 Aug 2020 12:56:49 +0430</pubDate>
            </item>
            </channel>
</rss>