<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های امیررضا صافحیان</title>
        <link>https://virgool.io/feed/@safeamiiir</link>
        <description>فارغ‌التحصیل علوم کامپیوتر دانشگاه بهشتی، برنامه‌نویس فرانت که الآن هم اسنپ‌فود مشغول به کارم و گاهی اوقات هم کوئرا کالج :))</description>
        <language>fa</language>
        <pubDate>2026-06-17 02:54:36</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/163134/avatar/Jv977J.jpg?height=120&amp;width=120</url>
            <title>امیررضا صافحیان</title>
            <link>https://virgool.io/@safeamiiir</link>
        </image>

                    <item>
                <title>اسکرین‌شات رو طوری که دوست داری بگیر!</title>
                <link>https://virgool.io/@safeamiiir/%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%86-%D8%B4%D8%A7%D8%AA-%D8%B1%D9%88-%D8%B7%D9%88%D8%B1%DB%8C-%DA%A9%D9%87-%D8%AF%D9%88%D8%B3%D8%AA-%D8%AF%D8%A7%D8%B1%DB%8C-%D8%A8%DA%AF%DB%8C%D8%B1-stzpiaeekayc</link>
                <description>لوگوی نرم‌افزارسلاممن از وقتی که دارم به جای سیستم‌عامل مک از لینوکس استفاده می‌کنم (اوبونتو ۲۰.۰۴) یکی از مواردی که بسیار باهاش چالش داشتم اسکرین‌شات گرفتن بود؛ از اونجایی که یک فرانت‌اند دولوپر نیاز زیادی به اسکرین شات گرفتن و حتی کامنت و فلش گذاشتن یا متن‌های کوتاه نوشتن و ازین کارا داره،‌ با توجه به پرینت اسکرینی که به صورت دیفالت روی اوبونتو داریم اصلاً راحت نبودم و همیشه مشکل داشتم. همینطوری اشاره کردم به این که من قبلاً کاربر مک بودم و حتماً میدونین که ابزار اسکرین‌شات دیفالت در مک بسیار با کیفیت‌تره و امکانات زیادی در اختیارمون قرار میده.حالا میخوام در این پست با هم دیگه ببینیم چطور می‌تونیم اسکرین‌شات‌های بهتر و راحت‌تری بگیریم!قبل از شروع میخواستم بگم که مثلا نیاز‌های من از ابزاری مناسب برای این کار چه مواردی بود:۰- اپن‌سورس بودن همیشه انتخاب رو مطمئن‌تر میکنه.۱- بتونم روش تصویرم نوشته قرار بدم مثلا بنویسم «ارور به صورت اشتباه فرستاده شده».۲- بتونم روی تصویرم از فلش برای اشاره کردن به جایی استفاده کنم یا زیر چیزی خط بکشم.۳- ابزارهای جانبی مثل مربع و دایره کشیدن داشته باشم هم خیلی بهتره.۴- بتونم از قسمتی از صفحه عکس بگیرم.۵- وسط کار کنسل کنم و عکس جایی ذخیره نشه.۶- بتونم کراپ‌م رو عوض کنم همون موقع.۷- بتونم بدون سیو کردن تصویر رو توی کلیپ‌بورد ذخیره کنم.خب من تمام نیاز‌هایی که داشتم رو در استفاده از نرم افزار فلیم‌شات (flame shot) پیدا کردم.می‌تونین به لینک گیت‌هاب‌ش سر بزنین و یا به شیوه‌های مختلف دیگه‌ای که دوست دارین روی اوبونتو نصبش کنین!(راستش من خودم یادم نمیاد دقیقا چطوری نصب کردم ولی شاید به کمک snap store بوده که این هم لینکش )اما بعد از نصب شما باید برین و روی اپ کلیک کنین تا باز بشه یا مثلاً توی ترمینال بنویسین flameshot. اما مرحله به مرحله با هم تغییرات رو میدیم که نیازی نباشه به این شیوه ازش استفاده کنیم! و صرفاً با کلیک روی دکمه معروف PrtScr بتونین از صفحه با استفاده از این نرم‌افزار عکس بگیرین!توی دو مرحله، نصب نرم‌افزار و آشنایی کلی بعد هم اضافه کردن شرت‌کات کیبوردش رو می‌بینیم.مرحله اول: جلوگیری از نشون دادن آیکون Trayدر Top Barاگه لازم به اشاره کردن باشه top bar میشه اون بالای صفحه مشکی که مثلا باتری و اطلاعات رو سمت راست و اسم اپ رو سمت چپ نشون میده و tray هم میشه آیکون‌های کوچکی از اپلیکیشن‌های باز و اونایی که نشون هایدشون نکردین.تصویر tray و top barاما قراره که ما آیکون رو در اینجا نبینیم از اونجایی که مدام قراره نرم‌افزار باز بمونه، نیازی به بودنش نیست.اگه هم لازم داشتیم بعد از هاید کردن ستینگشو عوض کنیم میتونیم روی آیکون اپلیکیشنش راست کلیک کنیم و روی configure کلیک کنیم تا باز بشه.اما برای هاید کردن به سادگی کافیه Show tray icon چک نخورده باشه.تصویر تنظیمات نرم‌افزاردر ادامه شما هر کاری دوست دارین با تنظیمات اپ می‌کنین و خب اونا نیازی به توضیح من هم ندارن.توی ریپوی گیت هم به تفصیل توضیح داده شدن. مرحله دوم: اتصال دکمه PrtScr به نرم‌افزارشما می‌تونین اتفاقی که با کلیک بر روی دکمه‌های کیبوردتون میفته (حتی اکسترنال) رو تعیین کنین، در اینجا هم قراره با هم بگیم ازین به بعد به جای اسکرین شات گرفتن بدون اجازه، این نرم افزار رو برای ما باز کنه که معادل یه صفحه برا انتخاب کردن محدوده اسکرین‌شات‌مونه!برای این کار کافیه که ابتدا روی save a screenshot to Pictures کلیک کنین و بعد روی دکمه backspace (شاید هم delete) کلیک کنین تا جلوش بنویسه disabled و بعد از اون تا پایییین اسکرول کنین و روی اون + که ته صفحه‌س کلیک کنین و برای اسکرین شاتتون یه اسم بذارین (مثلاً screenshot).برای قسمت command هم باید دستور مورد نظرتون رو بنویسین، که اینجا میشه اجرا شدن این اسکرین‌شات گیرنده یعنی /usr/bin/flameshot guiو در نهایت هم روی shortcut کلیک کنین و اونجا روی دکمه PrtScr (یا هر دکمه‌ای که مد نظرتونه) کلیک کنید. برای ذخیره کار‌هایی که کردیم روی دکمه Add سبز رنگ کلیک کنین تا shortcut جدید مورد نظرتون ذخیره بشه.اضافه کردن keyboard shortcutو از الآن به جای باز شدن اسکرین‌شات دیفالت،‌ این براتون باز میشه!امیدوارم که براتون مفید باشه ❤️- راستی، برای نوشتن قسمت keyboard shortcutها از این منبع استفاده کردم.</description>
                <category>امیررضا صافحیان</category>
                <author>امیررضا صافحیان</author>
                <pubDate>Thu, 08 Apr 2021 00:04:25 +0430</pubDate>
            </item>
                    <item>
                <title>ماشین لرنینگ یا یادگیریِ ماشین مثل آب خوردن!</title>
                <link>https://dataio.ir/ماشین-لرنینگ-یا-یادگیریِ-ماشین-مثل-آب-خوردن-gkaojrohwqzu</link>
                <description>? در انتها قراره با هم یک مدل لرن کنیم!سلام!یکی از دوستانم از من در مورد یادگیری‌ماشین سوال کرد و من تصمیم گرفتم خیلی کوتاه در مورد این زمینه به دوستانی که خیلی کم با کامپیوتر و حتی ریاضیات و آمار که پایه‌های این حوزه‌س آشنایی دارند یادگیری‌ماشین رو معرفی کنم!یکی از موضوعاتی که مطرح هست و ما هم در موردش می‌تونیم صحبت کنیم، تعاریف در این زمینه‌ها هستند. مثلا ما هوش‌مصنوعی رو چی تعریف می‌کنیم؟ و یا خود عبارت یادگیری ماشین‌ رو؟ و البته کلمات دیگری که در سطحی دیگر نیازمند بررسی‌ست، مثلا تعریف هوشمندی چیست؟ و یا تعریف یادگیری چیست؟ماجرای درگیری ما با تعاریف و مفاهیم به اینجا ختم نمی‌شه که البته سوالاتی هم به اون‌ها اضافه می‌شه، مثلا این سوال که آیا انسان موجودی هوشمند است؟ و یا ویژگی‌های موجود هوشمند چیست؟اگر بخواهیم در این سوالات و تعاریف بمونیم وقت و انرژی خیلی زیادی از ما صرف می‌شه و البته که بسیار سوالات مهم و قابل تأملی در حوزه یادگیری ماشین هستند اما کاری که الآن که ما میخوایم انجام بدیم این نیست.اما اگر میخواین با مسیر پیش‌رو دقیق‌تر آشنا بشین خودم و شما رو به فکر کردن و مطالعه در مورد این سوالات دعوت می‌کنم.خیلی خلاصه اول بگم که ما دو مدل Supervised Learning و Unsupervised Learning رو داریم (البته راستشو بگم Semi Supervised هم داریم) خیلی خیلی مختصر در مدل Supervised ما جواب رو خودمون داریم! (مثلا اگر می‌خوایم پیش‌بینی کنیم کسی دیابت داره یا نه مطلع‌ هستیم از این ماجرا که دیابت دارد یا ندارد) به عبارت دیگر به ازای هر فرد با ویژگی‌هایی که داره ما بهش یک لیبل دیابتی بودن یا نبودن می‌زنیم،اما در مدل Unsupervised خودمون هم نمی‌دونیم که دقیقا کدوم داده جزو کدوم دسته‌س! و ما قراره الآن یک مدل Supervised رو با هم‌دیگه ببینیم.اما بریم سراغ کارمون، در ابتدا قول دادم که خیلی ساده قراره با هم یک مدل رو آموزش بدیم و بررسی کنیم که چقد خوب داره کارشو انجام میده!برای این کار شما کافیه کدی که در این لینک‌ گذاشتم رو در خود محیط گوگل‌کو‌لب (Google colab) ببینین و با توضیحات پیش بیاین. (خیالتون راحت نیاز به نصب هیچ‌چیزی نداریم)صرفا شما لازمه لینک بالا رو باز کنید و اگر دوست دارین خودتون از کد اجرا بگیرین کافیه در هر تیکه از (Cell) روی اون قسمت که هستین Shift + Enter رو کلیک همزمان فشار بدین.خب در شش مرحله قراره با هم یک مدل رو آموزش بدیم(!)مرحله اول: # Code source: Jaques Grobler
# License: BSD 3 clause
import matplotlib.pyplot as plt
import numpy as np from sklearn import datasets, linear_model from sklearn.metrics import mean_squared_error, r2_score # Load the diabetes dataset diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True) # Use only one feature diabetes_X = diabetes_X[:, np.newaxis, 2] # Split the data into training/testing sets diabetes_X_train = diabetes_X[:-20] diabetes_X_test = diabetes_X[-20:] # Split the targets into training/testing sets diabetes_y_train = diabetes_y[:-20] diabetes_y_test = diabetes_y[-20:]در کد بالا ما صرفا دو دسته داده رو جدا کردیم به نام‌های test و train که به کمک trainها(یعنی: diabetes_X_train و diabetes_y_train )قراره مدل یادبگیره و سپس به کمک testها(یعنی: diabetes_X_test و diabetes_y_test)مدل رو آزمایش خواهیم کرد.اما احتمالا براتون سواله که چرا X و Y هم اینجا در نام‌گذاری دخیل هستن،پاسخش اینجاست که طبیعتا به ازای هر داده‌ای که داریم جوابش رو هم می‌دونیم!اگر بخوام دقیق‌تر صحبت کنم ما داریم یک مدل یادگیری ماشین رو در دسته‌بندی Supervised بررسی می‌کنیم که همانطور که در بالا صحبت شد در این مدل ما میدونیم که دقیقا در داده متعلق به کدوم دسته هست.اگر در مورد پاراگراف بالا گیج شدین اصلا اصلا نگرانی نداره، الان با یک مثال دوباره براتون روشن می‌کنم!به صورت مثال در نظر بگیرین که ما داریم در مورد افرادی که به دیابت مبتلا هستند تحقیقی رو انجام می‌دیم، در این تحقیق ما با دو دسته آدم روبه‌رو‌ایم:دیابتیغیر دیابتیو این که این فرد جزو کدوم دسته هست رو ما ازش مطلع هستیم!!! ( به این جواب که دیابتی هست یا نیست لیبل گذاری کردن هم میگن یعنی ما به هر فرد لیبل دیابتی بودن یا نبودن رو اختصاص می‌دیم!)حالا در نظر بگیرین اگر دیابتی بودن و یا نبودن فرد یک تابع باشه به کمک شکل زیر میشه متوجه ماجرا شد:train_test_flowهمونطور که در شکل می‌بینین در ابتدا ماشین(مدل) به کمک داده‌های Train یادمیگیره و سپس می‌تونه که داده‌های Test رو پیش‌بینی کنه!مرحله دوم:# Create linear regression object
regr = linear_model.LinearRegression()در مرحله دوم، یعنی کد بالا، ما مدل مورد نظر خودمون رو ساختیم!به همیییین سادگی، تنها در یک خط به کمک کتابخونه سای‌کیت‌لرن در پایتون می‌تونین یک مدل رو بسازین.مرحله سوم:# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)در مرحله سوم، ما دو تا دیتاستِ train که آماده کرده بودیم رو به مدل فیت می‌کنیم( به فارسی ترجمه می‌کنم، به خوردش می‌دیم) عملا مجبورش می‌کنیم باهاش یاد بگیره، این میشه معادل خطوط نارنجی شکل بالا.(اگر یادتون رفته کافیه دوباره توضیحات مرحله اول رو بخونین) مرحله چهارم:# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)
# Here we can see prediction points!
print(diabetes_y_pred)در این مرحله مدل ما به کمک داده‌هایی که به کمک اون‌ها آموزش دید اولین پیش‌بینی خودش رو انجام داد!و می‌تونیم این پیش‌بینی رو به صورت نقطه‌هایی ببینیم( حواسمون هست که ما خودمون می‌دونیم جواب چیه دیگه؟ صرفا میخویم مدل رو آماده کنیم که بعد‌ها نقاطی رو بدیم که جوابشون رو خودمون هم نمی‌دونیم)مرحله پنجم:# The coefficients
print(&#039;Coefficients: \n&#039;, regr.coef_)
# The mean squared error
print(&#039;Mean squared error: %.2f&#039;
% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# The coefficient of determination: 1 is perfect prediction
print(&#039;Coefficient of determination: %.2f&#039;
% r2_score(diabetes_y_test, diabetes_y_pred))در مرحله پنجم ما ضرایب و خطا رو می‌تونیم مشاهده کنیم، این ضرایب و خطا‌ها در ادامه ماجرا به درد می‌خورن برای این که ببینم چقدر مدلمون دقیق‌ پیش‌بینی کرده و با چه خطایی!اما شما صرفا کافیه به Coefficient of determination دقت کنین، از روی این میشه متوجه شد مدل ما چند درصد دقت‌ داشته( مثلا اگر این ضریب برابر می‌شه با:‌ 0.47 به این معنی‌ست که مدل با دقت ۴۷٪ می‌تونه پیش‌بینی کنه) این که چه دقتی خوبه یا نه بستگی به خیلی موارد داره، که اینجا نمیخوایم در موردش صحبت کنیم اما به صورت مختصر بگم براتون که بعضی وقت‌ها کلی تحقیق می‌شه که صرفا یک درصد مدل بتونه بهتر پیش‌بینی کنه! و دقت ۹۸ درصد یا ۹۹ درصد هم در بعضی مدل‌ها دیده می‌شه که البته دقت به تنهایی پارامتر کافی برای نظر دادن در این مورد که مدل ما خوب بوده یا بد نیست.مرحله ششم:# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test,  color=&#039;black&#039;)
plt.plot(diabetes_X_test, diabetes_y_pred, color=&#039;blue&#039;, linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()در مرحله آخر ما داده‌هایی که به دست‌ آوردیم رو رسم می‌کنیم تا به صورت تصویری هم ببینیم مدل ما به چه شکلی آموزش دیده، مدل ما همون خط آبی که در تصویر زیر می‌بینید هست!linear_regression_plotتبریک می‌گم :)))) شما اولین مدل رگرسیون خطی خودتون رو آموزش دادین?من توی نوشتن این مقاله(؟!) از تنها منبع زیر استفاده کردم و چیزایی که خودم خوندم این مدت که خب نمی‌تونم دقیقا اونا رو رفرنس بدم :دیhttps://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.htmlو البته به نظرم خوندن این‌ لینک‌ هم میتونه کمکتون کنه!https://www.geeksforgeeks.org/linear-regression-python-implementationمن تمام سعی‌ام رو کردم که خیلی خیلی خلاصه با هم صحبت کنیم!بسیار برای من خوشحال کننده‌س که نظراتتون رو با من به اشتراک بذارین =))</description>
                <category>امیررضا صافحیان</category>
                <author>امیررضا صافحیان</author>
                <pubDate>Fri, 03 Apr 2020 03:29:04 +0430</pubDate>
            </item>
            </channel>
</rss>