<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد حسین</title>
        <link>https://virgool.io/feed/@saghari</link>
        <description>توسعه دهنده mevn و طراح فونت</description>
        <language>fa</language>
        <pubDate>2026-06-10 15:11:28</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/607802/avatar/kboTSP.jpg?height=120&amp;width=120</url>
            <title>محمد حسین</title>
            <link>https://virgool.io/@saghari</link>
        </image>

                    <item>
                <title>کاربرد ریاضی توی برنامه نویسی</title>
                <link>https://virgool.io/@saghari/mip-yesxugysgkz2</link>
                <description>بعضی جاها که دوره های آموزش برنامه نویسی و غیره وجود داره خیلی این نوع سوال پرسیده میشه که ریاضی چقدر توی برنامه نویسی کاربرد داره؟ اصلا کاربرد داره یا نه؟ کجاش کاربرد داره؟خود من عقیده ام این بود که توی هوش مصنوعی کاربرد داره ولی واقع توی نرم افزار چه کاربردی میتونه داشته باشه؟ الان من یه سایت که میزنم جاییش از ریاضی استفاده میکنم؟ پس توی نرم افزار ریاضی هیچ کاربردی نداره.کدای این مقاله به زبون جاوا اسکریپتن ولی سعی کردم روش هارو توضیح بدم که اگه خواستید خودتون پیادش کنیدتا اینکه یه روز به سرم زد مسائل ماتریس رو با برنامه نویسی حل کنم، یعنی چند تا ماتریس تعریف کنم بعد جمع و ضرب و دترمینان و غیره رو روشون اعمال کنم. اولش یه تابع بود نمیدونم چطور شد کارش رسید به یه pwa که اینجا میتونید ببینیدش: https://matrixyz.liara.run چند وقت بعدش قضیه جالب تر شد، چون به سرم زد مسائل ریاضیات گسسته و باقیمانده اعداد بزرگ رو با برنامه نویسی حل کنم :)اولش که گفتم خب من باقیمانده هر عددی رو بخوام به یه عدد دیگه میام از اپراتور % استفاده میکنم، دیگه این مسائل به چه دردی میخوره؟ ولی وقتی تست کردم تازه فهمیدم که نه، با وجود این همه پیشرفت توی کامپیوتر بازم محاسبات نیاز به دونستن ریاضی داره، حداقل برای برنامه نویسایی که قراره نرم افزار انجام محاسبات رو بسازن.خب حالا مسئله چی بود؟ من میخواستم رقم یکان 7 به توان 1402 به علاوه 2023 رو بدست بیارم، یه چیزی تو این مایه: ((7 ** 1402) + 2023) % 10ولی همون اول که توان رو زدم infinity برگردوند، چون جاوا اسکریپت اعداد خیلی بزرگ رو محاسبه نمیکنه و اینفینیتی میده، پس این مسئله مارو حساب نمیکنه و اینجاست که باید قوانین ریاضی رو بریزیم تو برناممون.میدونید که برای حل این مسئله از قضیه همنهشتی استفاده میشه توی ریاضیات گسسته، یعنی اول باقیمانده 7 به توان 1402 به 10 بررسی میشه و بعدم باقیمانده 2023 توی تقسیم به 10. رقم یکان 2023 که مشخصه، ولی اون عدد بزرگه کار رو مشکل میکنه که میایم یه توانی از 7 پیدا میکنیم که باقیماندش به 10 یکی از اعداد 1 یا -1 یا 0 بشه، چون اینا به توان هر عددی خودشون یا قدر مطلق خودشونن، دیگه بعدش مسئله تقریبا حل شده.خب پس توی این مسئله اون توانی که باقیماندش اون سه تا عدد باشه 2 هست چون 7 به توان 2 میشه 49 که با -1 هم باقیماندس. پس عدد 7 به توان 1402 هم با -1 هم باقیمانده میشه. پس جواب کل میشه جمع 3 و -1 که برابره با 2. خب حالا همین رو باید وارد برنامه میکردم که بجای اپراتور % بیاد با قضیه همنهشتی مسئله رو برامون حل کنه که به این شکل شد:// simple remainder
function remainder(num, m) {
	return num % m
}

// check the number is even or odd
function isEven(num) {
	if (num % 2 === 0) return true
	else return false
}

// returns a power such that the remainder of a number with this power over m is 1, -1, or 0
function rtnPower(num, power, m) {
	let p = power 
	let r = remainder(num ** power, m)

	for (let i = 1; i &lt; power; i++) {
		if ((remainder(num ** i, m) === 1) || (remainder(num ** i, m) === m - 1)) {
			p = i
			r = remainder(num ** i, m) === 1 ? 1 : -1
			break
		}
		else if (remainder(num ** i, m) === 0) {
			r = 0
			break
		}
	}
	return [p, r]
}

function power(num, power, m) {
	let which = rtnPower(num, power, m)
	let newR = isEven(Math.floor(power / which[0])) ? Math.abs(which[1]) : which[1] // check if power is even
	let mainR = newR * (num ** remainder(power, which[0])) // result

	return mainR
}

export default powerحالا طبق توضیحات جواب مسئله این میشهpower(7, 1402, 10) + power(2023, 1, 10)ببخشید اگه نامگذاری ها یکم نامفهومه چون سریع نوشتم وقت رو نام گذاری نذاشتم :)خب دیگه تهش به این نتیجه رسیدم که ریاضی توی نرم افزار های محاسباتی و الگوریتم ها و رسم اشکال با برنامه نویسی کاربرد اونچنانی داره وگرنه توی توسعه و ساخت نرم افزار های معمولی مثل فروشگاه و بلاگ و غیره نیازی به ریاضی قوی نیست و بیشتر تجربه و مهارت مهمه. البته اینم باید درنظر گرفت که هر چی ریاضی قوی تر باشه مهارت حل مسئله بیشتره و هم مسائل برنامه نویسی و هم مسائل روزمره رو بهتر میشه مدیریت کرد. این رو هم باید توجه داشت که بعضی از برنامه نویسای حرفه ای اول ریاضی خونده بودن و بعد برنامه نویس شدند مثل رایان دال سازنده nodejs.یه چیزی رو هم یادم رفت بگم اینکه چون جاوا اسکریپت اعداد بزرگ رو نمیشناسه مجبوریم از همنهشتی استفاده کنیم وگرنه توی پایتون حتی رقم دقیق 7 به توان 1402 رو میده بهمون که با همون % میتونیم جواب رو حساب کنیم.</description>
                <category>محمد حسین</category>
                <author>محمد حسین</author>
                <pubDate>Sat, 13 Jan 2024 16:15:02 +0330</pubDate>
            </item>
                    <item>
                <title>بیا فونت بسازیم! (قسمت اول)</title>
                <link>https://virgool.io/@saghari/%D8%A8%DB%8C%D8%A7-%D9%81%D9%88%D9%86%D8%AA-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-q2axqfu3bvbx</link>
                <description>فونت الان چیزیه که اگه نبود، طراح ها و گرافیست ها اصلا میلی به طراحی نداشتن و سایت های فارسی اینقدر فراوون نبودند. خود شما الان اگه برید چند تا سایت را چک کنید اکثرشون یه فونت مستقل برای سایت خودشون انتخاب کردن.حالا مسئله اینجاست که باید افرادی باشن که این فونت را بسازن، چون همه طراح ها که از یه فونت خوششون نمیاد. برای همین ما نیاز به طراح فونت داریم.فونت ها انواع مختلفی دارند، مثل سنس، نسخ، هندسی، چندرنگ و کلفت (ویژه عنوان). اما یه نکاتی توی طرز ساخت همه این ها وجود داره که اگه به اون ها توجه کنیم خیلی سریع تر کارمون پیش میره. میدونین که برای ساخت فونت باید هر حرف را بصورت کاملا منفصل، متصل از اول، متصل از آخر و کاملا متصل طراحی کنین. اما اگه بخواین تک تک این ها را جداگونه طراحی کنین باید بیشتر از 200 تا حرف را طراحی کنین! میدونین چقدر زمان میبره؟! پس باید بیایم به شکل حروف دقت کنیم. مثلا فکر میکنین شکل زیر چی باشه؟شاید بگین این یه حرف ل هست که یه مربع با اضلاع گرد وسطشه.ولی اگه بیشتر دقت کنین میبینید این میتونه یه حرف &quot;ا&quot; باشه:و یا میتونه یه &quot;ن&quot; بدون نقطه باشه:و یا یه &quot;ر&quot; باشه:و یه &quot;و&quot;:و همینطور میتونه یه &quot;ق&quot; بدون نقطه باشه باشه:و حتی میتونه یه حرف &quot;ی&quot; باشه:در واقع شما میتونین فقط با طراحی یه حرف ل و یه دایره وسطش هفت تا گلیف را طراحی کنین!و حتی بیشتر! چطوری؟ببینید، شما وقتی مثلا حرف &quot;ا&quot; را داشته باشید میتونید اون را با &quot;ب&quot; متصل از آخر ترکیب کنید و &quot;ل&quot; متصل از آخر را بسازید، و همینطور اون را با &quot;ب&quot; متصل از دو طرف ترکیب کنید و &quot;ل&quot; متصل از دو طرف را بسازید.میتونید با گذاشتن یک نقطه بالای &quot;ر&quot; اون را به &quot;ز&quot; تبدیل کنین و با گذاشتن سه نقطه بالای اون حرف &quot;ژ&quot; را بسازید.شما با ساختن حرف &quot;ب&quot; متصل از آخر، در واقع شش گلیف ساختید: بـ، پـ، تـ، ثـ، نـ، یـ.وقتی شما با توجه به اینها شروع به طراحی فونت کنین، میتونین حتی با طراحی 30 گلیف، هر 200 گلیف را طراحی کنید.البته این را هم بگم وقتی شروع به ساخت فونت میکنید هدفتون سریع تموم کردن اون نباشه، هدفتون زیبایی و کارایی اون باشه.</description>
                <category>محمد حسین</category>
                <author>محمد حسین</author>
                <pubDate>Tue, 10 May 2022 20:52:08 +0430</pubDate>
            </item>
            </channel>
</rss>