<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مِهان علوی مجد</title>
        <link>https://virgool.io/feed/@mehan</link>
        <description>یه پسر که برنامه نویسی رو دوست داره</description>
        <language>fa</language>
        <pubDate>2026-06-17 01:11:02</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/740436/avatar/pXu9oC.jpeg?height=120&amp;width=120</url>
            <title>مِهان علوی مجد</title>
            <link>https://virgool.io/@mehan</link>
        </image>

                    <item>
                <title>روش شما برای پیدا کردن اعداد اول سریع نیست!</title>
                <link>https://virgool.io/@mehan/%D8%B1%D9%88%D8%B4-%D8%B4%D9%85%D8%A7-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%DB%8C%D8%AF%D8%A7-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%88%D9%84-%D8%B3%D8%B1%DB%8C%D8%B9-%D9%86%DB%8C%D8%B3%D8%AA-nsnmsednovkx</link>
                <description>سلام!به تازگی برای یه کاری احتیاج به ساختن یه دیتاست عظیم اعداد اول از ۱ تا ۱ میلیون بودم. خب ساده است، ولی اجرا کردن کدی که دیتاست رو می ساخت ۳ دقیقه طول می کشید؛ و امروز یه راه‌حل پیدا کردم که توی ۸ ثانیه اون کار رو انجام می داد! خب شروع کنیم!اولین راه‌حلاولین راه حل برای اثبات اینکه یه عدد اول یا نه اینه که اینجوری بنویسیمش:خیلی تمیز می گیم یه تابع داریم که یه n رو می گیره، بعد از ۲ تا خود n-1 حلقه بزن و اگه بخش پذیر بود False بده اگه آخرشم تموم شد یه True بده. آخرشم برای تست یه عدد اول بزرگ مثل ۱۰۰ میلیون و هفت گذاشتیم تا تست کنیم سرعتش رو! از دستور time تو یونیکس برای گرفتن زمان اجرا شدنش استفاده می کنیم:فقط قسمت real مهمهبرای یه عدد ۹.۷ ثانیه ثبت کرد که اصلا جالب نیست(البته اینکه کد پایتونه بی تاثیر نیست) برای همین میریم به راه حل دوم.راه‌حل دومخب این کد رو بیشتر از همه توی جا های مختلف دیدم. می گوییم که به جای اینکه تا n-1 حلقه بزنی تا n/2 حلقه بزن، که منطقیه. فقط چون ممکنه خارج قسمت اعشار شه اون رو عدد صحیح می کنیم به علاوه یک می کنیم:خب ببینیم چقدر سریعه:باز هم جالب نیست اما بهتره. حدودا نصف قبلی.و اما ... سریع‌ترین راه حلحتما یکی از شمارنده های یک عدد، کوچکتر مساوی از رادیکال اون عدده چرا؟این رو در نظر داشته باشید:m*n = aمی گیم که جفتشون از رادیکال عدد a بزرگترن:m&gt;sqrt(a)n&gt;sqrt(a)پس:m*n &gt; sqrt(a) * sqrt(a)در نتیجه:m*n &gt; aکه تناقض داره با داده اولیه! پس حتما یکی از شمارنده هاش از رادیکال کوچیکتره:چون رادیکالش ممکنه اعشار بشه  صحیحش می کنیم. اون +۱ هم بخاطر خاصیت range هستش که تا -1 جلو میره.خب ببینیم چقدر سریعه:اختلاف وحشتناکی داره با اولی یعنی 243 برابر اولی و 127 برابر دومی!!خیلی سریع هستش. پس اگه یه روز کار شما به اعداد اول خورد حتما از این راه استفاده کنید.خیلی ممنون که وقت گذاشتید و خوندید. اگه سوالی دارید لطفا کامنت کنید و ممنون میشم اگه لایک کنید :)</description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Fri, 07 Oct 2022 17:48:24 +0330</pubDate>
            </item>
                    <item>
                <title>لینوکس دقیقا چجوری پسورد ما رو نگه می داره؟</title>
                <link>https://virgool.io/@mehan/%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%AF%D9%82%DB%8C%D9%82%D8%A7-%DA%86%D8%AC%D9%88%D8%B1%DB%8C-%D9%BE%D8%B3%D9%88%D8%B1%D8%AF-%D9%85%D8%A7-%D8%B1%D9%88-%D9%86%DA%AF%D9%87-%D9%85%DB%8C-%D8%AF%D8%A7%D8%B1%D9%87-m4eg4vudtm9d</link>
                <description>سلام. چند وقت پیش به ذهنم اومد که این لینوکس چجوری و کجا پسورد کاربر هایی مثل خودمون و root رو نگه می داره که دوباره می تونیم لاگین کنیم. اگه شما هم درباره این موضوع تعجب کردید، ادامه این مطلب رو بخونید.خب تمام این دیتا های پسورد و یوزرنیم ها توی etc/shadow هستش. البته به صورت hash شده. hashing در واقع یه جور رمزنگاری هستش که شما نمی تونید رشته رمزنگاری شده، رشته اصلی رو در بیارید.خب اول با دسترسی root میایم فایل etc/shadow رو نگاه می کنیم:خب یه همچین چیزی میده که کلی یوزر هستش. پس بگذارید به جای دستی پیدا کردن یوزر خودمون بیایم با grep پسورد هش شده خودمون رو بگیریم:خب حالا پسورد خودم رو که با اکانت mehan هستم گرفتیم. یه ذره توضیح بدم:این پسورد از ۴ تا قسمت تشکیل شده:قسمت اول که اینجا 6$ هستش. این میگه سبک رمز نگاری چیه. در کل اینا می تونن برای قسمت اول باشن:$1 = MD5 hashing algorithm.$2 =Blowfish Algorithm.$2a=eksblowfish Algorithm$5 =SHA-256 Algorithm$6 =SHA-512 Algorithmکه معمولا اکثر لینوکس ها مثل مال من از sha-512 استفاده می کنن.قسمت دوم که اینجا $PUlUgF9iZoN/QA4. هستش. این یه چیز به نام salt هستش که کاری نداریم چیه ولی باعث میشه رمزنگاری قوی تر شه.قسمت سوم که اصلشه بعد اینه. اگه دقت کنید همه این قسمت ها با $ شروع می شن. خب قسمت سوم، هش شده salt به علاوه خود اصل پسورد تون هستش. الگوریتمش هم همون قسمت اولیه هستش.قسمت چهارم هم که چند تا دونقطه داره، تاریخ تغییر پسورد به سبک یونیکس تایم هستش.خب حالا ما تو لینوکس دقیقا چجوری لاگین می کنیم وقتی نمیشه رمز رو decrypt کرد؟ خیلی ساده. لینوکس برای ما میاد و پسورد ورودی رو encrypt می کنه و با اون چیزی که تو فایل هستش مقایسه می کنه. اگه اوکی بود که هیچی وگرنه نمی ذاره لاگین کنیم.حالا چجوری رمز ورودی رو encrypt می کنه؟می تونیم از دستور زیر استفاده کنیم: میایم میگیم از ۶ که درواقع الگوریتم رمزنگاری هستش استفاده کن، salt مون رو می دیم، بعد اصل پسورد رو می دیم و اگه دقت کنید دقیقا همون هش قبلی رو میده.خیلی ممنون که وقت گذاشتید و خواندید. لطفا لایک کنید و اگه سوالی دارید کامنت کنید.نوشته های قبلی: https://virgool.io/@mehan/%D8%A7%DB%8C-%D9%BE%DB%8C-%D8%A2%DB%8C-%D8%AF%DB%8C%D9%88%D8%A7%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%B4%D9%85%D8%A7%D8%B1%D9%87-%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84-jvht70aw2vp0  https://virgool.io/@mehan/%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%DA%A9%D8%B1%D8%AF%D9%86-%D9%85%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%DA%A9%DB%8C%D8%A8%D9%88%D8%B1%D8%AF-%D8%AA%D9%88-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-btojqoz7pzsu  https://virgool.io/@mehan/%D8%AA%D8%B1%D9%81%D9%86%D8%AF-%D9%87%D8%A7%DB%8C-%DA%AF%DB%8C%D8%AA%D8%A8%D8%AE%D8%B4-%DB%B1-e8g6apdbuhgo منبع: https://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils </description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Tue, 20 Sep 2022 21:12:53 +0430</pubDate>
            </item>
                    <item>
                <title>ای پی آی دیوار برای ارسال شماره موبایل</title>
                <link>https://virgool.io/@mehan/%D8%A7%DB%8C-%D9%BE%DB%8C-%D8%A2%DB%8C-%D8%AF%DB%8C%D9%88%D8%A7%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%B4%D9%85%D8%A7%D8%B1%D9%87-%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84-jvht70aw2vp0</link>
                <description>امروز که بیکار بودم گفتم ببینم این ای پی آی دیوار برای ورود کاربرا با شماره موبایل چجوری کار می کنه. اول از همه ما یه صفحه ساده داریم که شماره تماس شما رو میگیره برای ورود:شکل ۱ - شماره شانسیه برای کسی نیستخب بعد از submit کردن، می بینیم یه ریکوئست پست می زنه به اینجا:https://api.divar.ir/v5/auth/authenticateعکسش:شکل ۲خب ببینیم محتویاتش چیه:شکل ۳یه جیسون ساده است که فقط شماره رو میده! یعنی عملا هیچ encryption وجود نداره. برای همین شما می تونید یه ربات بنویسید که برای همه کد تایید بفرسته. حالا که اطلاعات لازم رو داریم وقته دست به کد شدنه.نکته:من می خواستم اینو با node.js بنویسیم ولی انگار همش ۵۰۱ میده برای همین با پایتون می ریم جلو. https://gist.github.com/mehanalavimajd/7d9e6dd0d4d97e3edb103e2771f953b7 یه اسکریپت ساده است که وقتی ران می کنیدش چند ثانیه بعد برای شخص یه پیامک میاد که کد دیوار اینه در حالیکه ما اومدیم شماره رو گذاشتیم. یه نکته ای که هست اینه که من تست کردم معمولا نهایت ۳ تا پیامک برای یه شماره می فرسته. حالا یه ذره پیچیده اش می کنیم: https://gist.github.com/mehanalavimajd/d2fc230ffed3d5e11cae9311e0df67ff این کاری‌ که می کنه اینه که برای همه شماره های ۰۹۱۲ یه کد می فرسته. شکل ۴با بیست خط کد برای ۱۰۰۰  نفر کد تایید دیوار فرستادیم.خب این بامزه است اما چیزی که مسخره است اینه که هیچ encryption وجود نداره. دیتا رو همینجوری مفت میدن به سرور و اینجاست که کار خطرناک میشه(مخصوصا تو جاهای مهمتر).اما یه توضیح درباره ی ارور های این ای پی آی بگم:&quot;AUTHENTICATION_VERIFICATION_CODE_SENT&quot;:این که معلومه، همه چیز اوکیه. کد ارسال شده.{&quot;error&quot;:&quot;لطفا یک شماره موبایل معتبر وارد نمایید.&quot;,&quot;code&quot;:3,&quot;message&quot;:&quot;لطفا یک شماره موبایل معتبر وارد نمایید.&quot;}:این وقتیه که شما شماره رو اشتباه نوشتید. این مثلا بر میگرده از تو سرور و جلوگیری می کنه از وارد شدن دیتایه خراب.یه ارورم داره که وقتی شما توی یه ساعت بیشتر از ۱۰ تا ریکوئست برای یه شماره می زنید.اگه سوالی درباره این ای پی آی دارید لطفا تو کامنتا بزارید.</description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Wed, 07 Sep 2022 21:31:05 +0430</pubDate>
            </item>
                    <item>
                <title>تنظیم کردن متفاوت کیبورد تو لینوکس</title>
                <link>https://virgool.io/@mehan/%D8%AA%D9%86%D8%B8%DB%8C%D9%85-%DA%A9%D8%B1%D8%AF%D9%86-%D9%85%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%DA%A9%DB%8C%D8%A8%D9%88%D8%B1%D8%AF-%D8%AA%D9%88-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-btojqoz7pzsu</link>
                <description>فرض کنید کلید delete  خراب شده. خب شما دوست عزیز دو راه داری:پول خرج کنید و یه کیبورد دیگه بگیرید( یا تعمیر کنید )یه کلید نسبتا به درد نخور مثل insert رو کارایش رو با  delete عوض کنید (!)خب این آموزش برای لینوکس برای همین اگر ویندوزی هستید لطفا کیبورد رو تعمیر کنید و بدونید لینوکس از ویندوز بهتره :)کیبورد من نیست;الان کاری که می خوایم انجام بدیم اینه که وقتی رو insert  زدیم کارایی پاک کردن رو داشته باشیم.مگه داریم؟ مگه میشه؟نکته: این دستورات باعث میشه کانفیگ قبلی از بین بره برای همین حتما بک‌آپ بگیرید.اول بک‌آپ می گیریم:sudo cp /usr/share/X11/xkb/symbols/pc /usr/share/X11/xkb/symbols/pc.bak۲. حالا با نانو اون مپی که داره رو عوض می کنیم:sudo nano /usr/share/X11/xkb/symbols/pc۳. خطوطی رو پیدا کنید که اینا رو دارن (حالا تو مورد شما ممکنه یه چیز دیگه باشه)key  &lt;INS&gt; { [  Insert  ] };
key &lt;DELE&gt; { [  Delete  ] };۴. حالا جای اینا رو عوض می کنیم و سیو می کنیم:key  &lt;INS&gt; { [  Delete  ] };
key &lt;DELE&gt; { [  Insert  ] };۵. حالا کش xkb  رو پاک می کنیم:sudo rm -rf /var/lib/xkb/*حالا ری بوت کنید و تمام و اینگونه بود که من با خراب شدن ۳ تا از کلید های کیبوردم، با ۰ تومن هزینه موفق شدم درستش کنم(البته بیشتر تعویض بود تا تعمیر!)منبع: https://ictsolved.github.io/remap-key-in-linux/ </description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Sun, 31 Jul 2022 21:44:29 +0430</pubDate>
            </item>
                    <item>
                <title>چرا از state استفاده کنیم وقتی میشه از متغیر ها استفاده کرد؟</title>
                <link>https://virgool.io/@mehan/%DA%86%D8%B1%D8%A7-%D8%A7%D8%B2-state-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D9%85-%D9%88%D9%82%D8%AA%DB%8C-%D9%85%DB%8C%D8%B4%D9%87-%D8%A7%D8%B2-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1-%D9%87%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D8%B1%D8%AF-rxs08y739rgi</link>
                <description>تعریف استیت اینه:The state object is where you  store property values that belongs to the component.اولین چیزی که به ذهن مون میرسه اینه که خیلی شبیه متغیر هاست.مثلا این یه مثال با استیته: https://gist.github.com/mehanalavimajd/08a3eb4f3be7cdd03393efba11f6dff3 و این با متغیر : https://gist.github.com/mehanalavimajd/16dcbca4048feb2eebc742349916aaf7 هر دو از نظر منطقی یه کار می کنن مقدار اولیه یعنی ۰ رو یه جا نگه میدارن و بعد از کلیک یه دونه بهش اضافه می کنن و نشونش میدن اما..نکته اینجاست که وقتی از useState استفاده می کنیم بعد از هر تغییر تو خود استیت ری‌اکت دوباره کامپوننت رو رندر می کنه اما تو متغیر معمولی ری‌اکت متوجه تغییر نمیشه و برای همین همیشه همون ۰ رو داریم. پس تو هر تغییر برای state کامپوننت re-render می شه.پ.ن: می دونم پست مسخره ای بود اما خودم خیلی تو این مشکل داشتم و با این مثال درست شد پس گفتم این جا هم بنویسم.منبع: https://stackoverflow.com/questions/69747700/using-variables-instead-of-state نوشته های پیشین: https://virgool.io/@mehan/%D8%AA%D8%B1%D9%81%D9%86%D8%AF-%D9%87%D8%A7%DB%8C-%DA%AF%DB%8C%D8%AA%D8%A8%D8%AE%D8%B4-%DB%B1-e8g6apdbuhgo  https://virgool.io/@mehan/%D8%B1%DB%8C%DA%A9-%D8%B1%D9%88%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%D8%B1-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-coyeswbvgoly </description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Mon, 18 Jul 2022 12:53:14 +0430</pubDate>
            </item>
                    <item>
                <title>ترفند های گیت(بخش ۱)</title>
                <link>https://virgool.io/@mehan/%D8%AA%D8%B1%D9%81%D9%86%D8%AF-%D9%87%D8%A7%DB%8C-%DA%AF%DB%8C%D8%AA%D8%A8%D8%AE%D8%B4-%DB%B1-e8g6apdbuhgo</link>
                <description>گیت یکی مهم‌ترین ابزار برنامه نویسی هستش که چه تو پروژه های اوپن سورس و چه تو بقیه پروژه ها استفاده میشه. مثل هر ابزاری، گیت ترفند هایی داره که اگه شما بلد باشیدشون می تونه خیلی کمکتون کنه و سرعت تون رو بالا ببره. تو این سری می خوایم بعضی از این ترفند ها رو یاد بگیریم.۱. تصحیح خودکار در گیتهمه ما گاهی وقت ها به صورت ناخواسته کلمات رو اشتباه می نویسیم و این که بعد از اشتباه باید به خاطر یه حرف، دستور رو درست کنیم یه خورده آزار دهنده است (مخصوصا اگه دستوره طولانی باشه) برای همین از قابلیت تصحیح خودکار در گیت استفاده می کنیم.فرض کنید، ما git status را اشتباهی نوشتیم:$ git stats
git: ‘stats’ is not a git command. See ‘git --help’.

The most similar command is
statusقاعدتا همچین چیزی می بینیم ولی با اجرای :$ git config --global help.autocorrect 1
این درست میشه البته اگه اینو فقط برای ریپوزیتوری الان تون می خواید --global احتیاج نیست$ git stats

git: ‘stats’ is not a git command. See ‘git --help’.
On branch master
Your branch is up to date with ‘origin/master’.
nothing to commit, working tree cleanحالا کار می کنه!۲. شمارش تعداد کامیت هادلایل زیادی داره که بخواید تعداد کامیت ها رو بدونید ولی بجای اینکه دستی شروع کنید به شمارش می تونید از این استفاده کنید:$ git rev-list --count &lt;branch&gt;فقط به جای branch، برنچ خودتون رو بزارید. خروجی یه عدده که نشون دهنده تعداد کامیت ها هستش۳.بک‌آپ گرفتن از فایل های untrackedگیت همراه با چیزای دیگه می تونه از فایل هایی که ترک نشدن (یعنی git add نکردیمشون) بک‌اپ بگیرهgit ls-files --others --exclude-standard -z |\ xargs -0 tar rvf ~/backup-untracked.zipاین دستور فایل های untracked و البته فایل هایی که در .gitignore هستن یه بک‌آپ می گیره و zip می کنه۴. دیدن یک فایل در برنچ دیگهبدون اینکه سوییچ کنید رو برنچ فقط با :git show &lt;branch&gt;:&lt;file_name&gt;به جای برنچ اون شاخه که فایل توشه و اسم فایل هم مشخصه دیگهخیلی ممنون که وقت گذاشتید و خوندین. لطفا من رو دنبال کنید تا ادامه این سری رو بتونید راحت تر پیدا کنید.اگه خودتون ترفندی بلدین حتما کامنت کنید.نوشته های پیشین: https://virgool.io/@mehan/%D8%B1%DB%8C%DA%A9-%D8%B1%D9%88%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%D8%B1-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-coyeswbvgoly </description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Wed, 13 Jul 2022 20:01:49 +0430</pubDate>
            </item>
                    <item>
                <title>ریک‌رول کردن در ترمینال!</title>
                <link>https://virgool.io/@mehan/%D8%B1%DB%8C%DA%A9-%D8%B1%D9%88%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%D8%B1-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-coyeswbvgoly</link>
                <description>+ سلام داداش خوبی؟ بابا یه خبر دارم که باور نمی کنییی. پایتون ۴ نسخه بتا اومده!-برو بابا! الکی میگی+ دروغم کجا بود. الان بهت لینک میدم بریزـ باشه+ بیا:&#x60; curl -s -L https://raw.githubusercontent.com/keroserene/rickrollrc/master/roll.sh | bash &#x60;چیزی که اون بدبخت می بینه. شناختید؟ :)احتمالا همون‌طور که حدس زدید این یه روش برای ریک‌رول کردنه. یعنی با زدن این دستور تو ترمینال ریک استلی میاد و هم ویدیو(!) و هم صدا پلی میشه. اگه نمی دونید ریک رول چیه این نوشته ی خوبیه: https://virgool.io/@comedy/ریک-رول-چیه-تاریخ-میم-قسمت-اول-ahiqw6x3akng اما این پروژه واقعا یک شاهکاره که توسط یک فرد خلاق (و البته بیکار) ساخته شده.لینک گیتهاب: https://github.com/keroserene/rickrollrc یه نکته ای هست که شما اگه از لینک کوتاه شده ای که نوشته استفاده کنید، هیچی پلی نمیشه چون عملا لینک خرابه. برای همین پیشنهاد می کنم تو یکی از این سایتای کوتاه کننده لینک، لینک اصلی رو کوتاه کنید نکته مهمیکی از وابستگی های این پروژه پایتون هست. منظورم پایتون۳ نیست بلکه پایتون اورجینال یعنی نسخه ۲رو سیستم من (ubuntu 20.04) پایتون۲ نبود برای همین حتما مطمئن باشید که قربانی(نه منظورم هدف بود :)پایتون۲ رو داره ولی خیلی تابلو این کارو انجام ندید مثلا این خیلی ضایع‌ست:سلام خوبی؟ ببین ویو نسخه ۴ اومده. ولی به پایتون احتیاج داره. حتما بریزتو این مثال معلومه که یه کاسه ای زیر نیم کاسه است و اگه رفیق تون حرفه ای باشه می فهمهمثال خوب:سلام واییییی! یه چیز می گم باور نمی کنی! یه لایبری جدید پایتون اومده اصلا کلمه خفن رو از این ور داشتن. فقط پایتون ۲ پیش نیازشهخب اینم تموم شد. راستی حتما به این ویدیو یه سر بزنید که چرا html زبان برنامه نویسی محصوب نمیشه:yun.ir/4956z9چی شد؟ ریک رول شدید؟ اشکال نداره حتما دوستان تون رو با ترمینال ریک رول کنید و چه فهمیدن چه نفهمیدن کامنت کنید</description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Thu, 23 Jun 2022 12:09:49 +0430</pubDate>
            </item>
                    <item>
                <title>بهترین فونت هایی که تا حالا استفاده کردم</title>
                <link>https://virgool.io/Events-IR/%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D9%81%D9%88%D9%86%D8%AA-%D9%87%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%AA%D8%A7-%D8%AD%D8%A7%D9%84%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D8%B1%D8%AF%D9%85-zg4j5obnj0g1</link>
                <description>سلام. مدتی هستش که تو ویرگول ننوشتم ولی حالا که بیکارم گفتم یه مقاله راجع به فونت های قشنگی که تازگی ها تو گوگل فونت پیدا کردم بنویسم. پس شروع کنیم.نحوه ی آشنایی با گوگل فونتمن هیچوقت علاقه ای برای تست کردن فونت های جدید نداشتم و به نظرم کار مسخره و وقت گیری بود. ولی بعد از مدتی دیدم همش دارم از  font-family:arial استفاده می کنم و دیدم همه ی سایت هایی که می سازم شبیه همن پس تصمیم گرفتم چند تا فونت پیدا کنم تا کمی کارام خوشگل شه :) و اینجوری بود که گوگل فونت رو پیدا کردم و بعد از سال ها (یه روزم نشد!) تحقیق و پژوهش چند تا فونت گلچین کردم تا اینجا بزارم.نکته : تمام فونت های اینجا انگلیسی هستن. ولی برای فونت های فارسی بعدا یه مقاله ی جدا می زارمها Display fonts :از فونت های دیسپلی معمولا برای هدینگ ها یا متن هایی که فونت بزرگی دارن استفاده میشه و معمولا یه ذره قر و فر بیشتری دارن و عجیب ترن (ولی بازم قشنگن)تعریف ویکی پدیا:A display typeface is a typeface that is intended for use at large sizes for headings,  rather than for extended passages of body text. Display typefaces will often have more eccentric and variable designs than the simple,  relatively restrained typefaces generally used for body text.حالا که فهمیدیم دیسپلی فونت ها چی هستن بریم واسه فونت ها:Pacificopacificoاین یه فونت خیلی قشنگ برای هدینگ ها هستش و من به شخصه خیلی ازش خوشم میادلینک گوگل فونت: https://fonts.google.com/specimen/Pacifico Twinkle starTwinkle starیه فونتی که یه جور سبک خاصی رو داره و به نظر من یه جورایی حس فانتزی بودن و یونیک بودن رو به مخاطب می ده.لینک گوگل فونت: https://fonts.google.com/specimen/Twinkle+Star?query=twinkle+star Comfortaaاین فونت رو من به شخصه خیلی دوست دارم یه جورایی شیک و ساده هستش بدون هیچ چیز اضافی!همچنین این فونت وزن های ۴۰۰ ، ۵۰۰‌، ۶۰۰ ، ۷۰۰ رو داره واسه همین راحت می تونین باهاش بولد بنویسین.لینک گوگل فونت : https://fonts.google.com/specimen/Comfortaa خب دیزاین ها تموم شد بریم سراغ سریف هاSerif fontsخب اول یه توضیحی بدیم که فونت سریف چی هستش:فونت های سریف فونت هایی هستن که معمولا لبه دارن و گاها عرض ها در قسمت های متفاوت تغییر می کنه. فونت های سریف معمولا قدیمی هستن:Credit : https://takhtehsabz.comتعریف انگلیسی:A serif is a decorative stroke that finishes off the end of a letters stem (sometimes also called the “feet” of the letters). A serif font is a font that has serifs.من اصولا طرفدار فونت های سریف نیستم ولی چون ممکنه شما خوشتون بیاد چند تا فونت می زارم (دم من گرم :) )EB GaramondٍEb Garamondفونت قشنگ و تمیزیه و سریف بودن توش احساس میشهلینک گوگل فونت: https://fonts.google.com/specimen/EB+Garamond ًRoberto slabRoberto Slabاین از اون معدود فونت های سریفه که من خوشم میاد. تازه این از اون فونت هایی که از وزن ۱۰۰ تا ۹۰۰ رو داره پس خیالتون از همه چی راحت باشه :)لینک گوگل فونت: https://fonts.google.com/specimen/Roboto+Slab خب بریم سراغ سنف سریف هاSans serif fontsفونت هایی سنف سریف معمولا مدرن تر و جدید تر هستن و من اون ها رو بیشتر دوست دارم:Credit : https://takhtehsabz.comتعریف انگلیسی:In typography and lettering, a sans-serif, sans serif, gothic, or simply sans letterform is one that does not have extending features called &quot;serifs&quot; at the end of strokes.[1] Sans-serif typefaces tend to have less stroke width variation than serif typefaces. They are often used to convey simplicity and modernity or minimalism.خب بریم واسه فونت ها:RobertoRobertoیه فونت ساده. وزن های ۱۰۰،۳۰۰،۵۰۰،۷۰۰ و ۹۰۰ رو داره و تازه برای همشون ایتالیک هم داره!لینک گوگل فونت: https://fonts.google.com/specimen/Roboto? خب این مقاله هم تموم شد. اگه دوستش داشتید لایکو بزن و بوک مارک کن و منو دنبال کن (واقعا کار سختیه)ممنون از توجه تون.پ.ن: الان دارم با مرورگر بریو می نویسم. فایرفاکسم خراب شده. وقتی داشتم می نوشتم یهو دیگه هیچی رو لود نمی کنه فقط یه نقطه تو تب هی میره چپ هی میره راست. رو اوبونتو ۲۰.۰۴ هستم لطفا بگید چجوری حلش کنم؟</description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Thu, 13 Jan 2022 12:49:49 +0330</pubDate>
            </item>
                    <item>
                <title>applecake.js یه کتابخونه ی باحال</title>
                <link>https://virgool.io/Events-IR/applecakejs-%DB%8C%D9%87-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D9%88%D9%86%D9%87-%DB%8C-%D8%A8%D8%A7%D8%AD%D8%A7%D9%84-j6ohcei8b5um</link>
                <description>اول از همه باید بگم که من دیگه تو اکانت قبلیم(m.alavimajd) فعالیتی ندارم و از این به بعد تو این اکانت می نویسم  .خب من تصمیم گرفتم که یه کتابخانه ی js بسازم که بتونیم با استفاده از اون تو جاوااسکریپت , یه سرس المنت های تو  html رو render کنممثال:اگه کد html شما این باشه:&lt;html lang=&amp;quoten&amp;quot&gt;&lt;head&gt;  &lt;meta charset=&amp;quotutf-8&amp;quot&gt;  &lt;title&gt;Hello world&lt;/title&gt;  &lt;meta name=&amp;quotdescription&amp;quot content=&amp;quotlearn applecake.js&amp;quot&gt;  &lt;meta name=&amp;quotauthor&amp;quot content=&amp;quotapplecake&amp;quot&gt;  &lt;link rel=&amp;quotstylesheet&amp;quot href=&amp;quotcss/styles.css&amp;quot&gt;&lt;/head&gt;&lt;body&gt;  &lt;div id=&amp;quotmain&amp;quot&gt;    &lt;!--applecake.js will be rendered here--&gt;  &lt;/div&gt;    &lt;script src=&amp;quotdist/applecake1.0.0.js&amp;quot&gt;  	&lt;script src=&amp;quotrender.js&amp;quot&gt;
&lt;/body&gt;&lt;/html&gt;خب همون طور که میبینید یه فایل render.js  و applecake.js داریم . چون applecake.js بالاتره همه ی تابع ها و متغیر ها و … رو میشه تو render.js استفاده کرد ( فایل applecake.js در واقع فایلی هستش که کل محتویات applecake در اون هستش)و در render.js :Render(
&amp;quotmain&amp;quot ,
`
&lt;h1&gt;hello world&lt;/h1&gt;
`خب اینجا Render در واقع یک تابع ای هستش درون applecake.js که کارش  نمایش دادن یه کد html  درون یک id تو خود  فایل html هستشنتیجه :‍‍‍&lt;div id=&amp;quotmain&amp;quot&gt;
&lt;h1&gt;hello world&lt;/h1&gt;
&lt;/div&gt;البته این فقط بخشی از applecake بود و قابلیت های دیگری مانند IdManager و IDselector و  ... دارهلینک گیتهاب : لینکلطفا ما رو با star ها و issue ها و PR هاتون خوشحال کنید</description>
                <category>مِهان علوی مجد</category>
                <author>مِهان علوی مجد</author>
                <pubDate>Mon, 21 Jun 2021 19:27:30 +0430</pubDate>
            </item>
            </channel>
</rss>