<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های mahdi hassani</title>
        <link>https://virgool.io/feed/@m.hassani4951383</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 06:27:16</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2852671/avatar/avatar.png?height=120&amp;width=120</url>
            <title>mahdi hassani</title>
            <link>https://virgool.io/@m.hassani4951383</link>
        </image>

                    <item>
                <title>نمونه توصیف یک ساعت در پرونده سمفونی در قطار</title>
                <link>https://virgool.io/@m.hassani4951383/%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%AA%D9%88%D8%B5%DB%8C%D9%81-%DB%8C%DA%A9-%D8%B3%D8%A7%D8%B9%D8%AA-%D8%AF%D8%B1-%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87-%D8%B3%D9%85%D9%81%D9%88%D9%86%DB%8C-%D8%AF%D8%B1-%D9%82%D8%B7%D8%A7%D8%B1-v0rs4bigbyez</link>
                <description>سوژه اصلی:یک ساعت مچی وینتیج متعلق به دهه ۱۹۶۰ که روی یک میز چوبی ماهون صیقلی قرار گرفته است. شیشه صفحه ساعت به‌شدت خرد شده و عقربه‌ها دقیقاً روی ساعت ۷:۴۰ متوقف شده‌اند.جزئیات ظاهری:ساعت مچی کلاسیک و قدیمی، با طراحی متناسب با دهه ۱۹۶۰بدنه فلزی ظریف و صفحه‌ای روشن یا کمی کرم‌رنگشیشه صفحه به‌صورت شدید ترک‌خورده و خردشدهتکه‌های ریز و تیز شیشه در اطراف ساعت روی سطح میز پراکنده باشندعقربه‌ها واضح و خوانا باشند و زمان دقیق ۷:۴۰ را نشان دهندساعت باید حس یک وسیله شخصی ارزشمند اما آسیب‌دیده را منتقل کندمحیط و پس‌زمینه:فضا داخل یک کوپه یا کابین لوکس قطار است. ساعت روی یک میز چوبی ماهونِ صیقلی قرار دارد. پس‌زمینه باید محو و کنترل‌شده باشد، اما به‌اندازه‌ای نشانه داشته باشد که حس فضای قطار لوکس و قدیمی را منتقل کند. محیط نباید شلوغ باشد و تمرکز اصلی باید روی ساعت باقی بماند.زاویه و قاب:نمای بسیار نزدیک و ماکرو (Extreme Close-Up / Macro).قاب باید طوری بسته شود که ساعت بخش اصلی تصویر را پر کند و جزئیات شکستگی شیشه و پخش شدن خرده‌شیشه‌ها کاملاً قابل مشاهده باشد. زاویه دید بهتر است کمی مایل از بالا باشد تا هم صفحه ساعت و هم سطح میز دیده شوند.و درنهایت تصویر ساخته شده :</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Sat, 02 May 2026 13:30:19 +0330</pubDate>
            </item>
                    <item>
                <title>گزارش صحنه حادثه - پرونده پشت صحنه وجدان</title>
                <link>https://virgool.io/@m.hassani4951383/%DA%AF%D8%B2%D8%A7%D8%B1%D8%B4-%D8%B5%D8%AD%D9%86%D9%87-%D8%AD%D8%A7%D8%AF%D8%AB%D9%87-%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87-%D9%BE%D8%B4%D8%AA-%D8%B5%D8%AD%D9%86%D9%87-%D9%88%D8%AC%D8%AF%D8%A7%D9%86-phga8zqx1dzk</link>
                <description>در ساعت 20:00 دوشنبه بیستم ژانویه به دنبال تماس ناشناس مردی که مدعی مشاهده دو جسد در مرکز نگهداری خودروهای فرسوده در شهر بیسمارک بوده،پلیس به محل اعزام و گزارش مشاهدات به شرح ذیل تنظیم می‌گردد:اجساد مارک دشنر و ریچل جکسون در فاصله دو متری یکدیگر در مجاورت دیوار شرقی سایت طبق نقشه پیوست از روی کارت شناسایی هویت‌یابی شدند. طبق گزارش پزشکی قانونی، ریچل جکسون شنبه، مورخ هجدهم ژانویه، حدود ساعت 23:00 بر اثر مسدود شدن راه تنفس با مشاهده اثر فشار بر گلوی مقتول به قتل رسیده است. مارک دَشنر نیز، روز دوشنبه مورخ بیستم ژانویه حدود ساعت 14:00 بر اثر ضربه جسم سخت به ناحیه سر دچار خونریزی داخلی مغزی و مرگ شده است. با وجود جراحات وارده به سر و شکستگی جمجه، هیچگونه اثر درگیری و لکه‌خون در اطراف جسد مشاهده نشد. بنابراین، استنباط می‌شود مقتول در محل دیگری به قتل رسیده و با خودرو به این محل منتقل شده است. </description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Tue, 03 Feb 2026 12:01:25 +0330</pubDate>
            </item>
                    <item>
                <title>خرید و فروش کتاب دست دوم</title>
                <link>https://virgool.io/@m.hassani4951383/%D8%AE%D8%B1%DB%8C%D8%AF-%D9%88-%D9%81%D8%B1%D9%88%D8%B4-%DA%A9%D8%AA%D8%A7%D8%A8-%D8%AF%D8%B3%D8%AA-%D8%AF%D9%88%D9%85-xzpvb6rwndhi</link>
                <description>رواقیه پلتفرم ساده و کاربر پسند پیدا کردم که تازه راه افتاده و به نظرم، پتانسیل اینو داره که یک سری حرکت های مثبت رو رقم بزنهمیتونیم کتاب های دست دوم خودمون رو به افراد دیگه که نیازش دارن بفروشیم و پول در بیاریمآدمای دیگه که نیاز به کتاب دارن با هزینه کمتر میتونن به کتاب که میخوان دسترسی داشته باشنتوی این چرخه از قطع بیشتر درختان جلوگیری میشه و با این کار داریم به طبیعت کمک میکنیمدوست داشتید یه سری به سایتشون بزنیدhttps:rwagh.ir</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Tue, 04 Nov 2025 11:23:36 +0330</pubDate>
            </item>
                    <item>
                <title>جنایت و مکافات |‌ فئودور داستایوفسکی</title>
                <link>https://virgool.io/@m.hassani4951383/%D8%AC%D9%86%D8%A7%DB%8C%D8%AA-%D9%88-%D9%85%DA%A9%D8%A7%D9%81%D8%A7%D8%AA-%D9%81%D8%A6%D9%88%D8%AF%D9%88%D8%B1-%D8%AF%D8%A7%D8%B3%D8%AA%D8%A7%DB%8C%D9%88%D9%81%D8%B3%DA%A9%DB%8C-uojvqailphre</link>
                <description>✨ جنایت و مکافات؛ سفری درونی به وجدان انسانرمان «جنایت و مکافات» اثر فیودور داستایوفسکی، شاهکاری ماندگار در ادبیات روسیه و جهان است.اثری که نه تنها قصه‌ای پرکشش روایت می‌کند، بلکه پرسش‌های عمیق انسانی درباره‌ی اخلاق، وجدان و معنای رستگاری را پیش روی ما می‌گذارد.🌿 چرا این رمان هنوز زنده است؟بیش از یک قرن و نیم از انتشارش می‌گذرد، اما موضوعات کتاب همچنان تازه و امروزی‌اند:✅ وجدان انسانی: جدال ابدی میان «آنچه درست است» و «آنچه ما می‌خواهیم انجام دهیم».✅ جامعه و عدالت: تصویری واقعی از نابرابری‌ها و فشاری که فقر و شرایط اجتماعی بر انسان وارد می‌کند.✅ امید و رستگاری: حتی در دل تاریک‌ترین لحظه‌ها، راهی برای بازسازی روح وجود دارد.🖋️ سبک و نگاه داستایوفسکیداستایوفسکی در این رمان نه‌تنها یک داستان جذاب روایت می‌کند، بلکه ما را وارد ذهن و روان شخصیت‌هایش می‌سازد.همین کاوش درونی باعث شده «جنایت و مکافات» به‌عنوان یکی از نخستین رمان‌های روان‌شناختی جهان شناخته شود.👥 مناسب چه کسانی است؟دوستداران ادبیات کلاسیک روسیهعلاقه‌مندان به رمان‌های فلسفی و روان‌شناختیکسانی که دنبال یک داستان پرکشش و پرتنش هستند📖 چرا بخوانیم؟این کتاب:🔹 یادآوری می‌کند هیچ انتخابی بی‌پیامد نیست.🔹 نشان می‌دهد انسان، حتی در لحظه‌های سقوط، ظرفیت دوباره برخاستن را دارد.🔹 ثابت می‌کند ادبیات، آیینه‌ای است برای دیدن خودمان در روشنایی و تاریکی وجودمان.«جنایت و مکافات» فقط یک رمان کلاسیک نیست؛ یک تجربه‌ی انسانی است که هر خواننده‌ای باید آن را لمس کند.📚 اگر دوست دارید این کتاب را تهیه کنید، نسخه‌های دست دوم آن را در رواق پیدا کنید:👉 مشاهده کتاب جنایت و مکافات در رواق</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Thu, 02 Oct 2025 15:16:03 +0330</pubDate>
            </item>
                    <item>
                <title>وقتی تنها رأی متفاوت را می‌دهید…</title>
                <link>https://virgool.io/@m.hassani4951383/%D9%88%D9%82%D8%AA%DB%8C-%D8%AA%D9%86%D9%87%D8%A7-%D8%B1%D8%A3%DB%8C-%D9%85%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%B1%D8%A7-%D9%85%DB%8C-%D8%AF%D9%87%DB%8C%D8%AF-ewin796dngij</link>
                <description>پرونده دوازده مرد خشمگینتصور کنید در اتاقی بسته نشسته‌اید. ۱۱ نفر دیگر همه به یک نتیجه رسیده‌اند: او گناهکار است.اما شما نمی‌توانید سکوت کنید. قلبتان می‌گوید ماجرا آن‌قدرها هم روشن نیست.شما تنها رأی «بی‌گناهی» هستید.همه‌ی نگاه‌ها به سمت شماست.هر کدام از اعضای هیئت منصفه با استدلال‌هایشان جلو می‌آیند:یکی می‌گوید شاهد دیده است.دیگری به انگیزه‌ی قتل اشاره می‌کند.و بقیه دلایل محکم‌تری می‌آورند…اما شما باید جواب دهید.جواب‌هایی که نه فقط منطقی، بلکه قانع‌کننده باشند.الهام از شاهکار «۱۲ مرد خشمگین»این سناریو از فیلم جاودانه‌ی ۱۲ مرد خشمگین الهام گرفته شده؛ جایی که تنها یک نفر جرئت می‌کند با اکثریت مخالفت کند و کم‌کم با منطق و دلیل، بقیه را تغییر دهد.اما تفاوت اینجاست: این بار شما آن فرد دوازدهم هستید.یک تجربه تعاملی با هوش مصنوعیاینجا دیگر صرفاً داستان نیست.یک سیستم هوش مصنوعی طراحی شده که استدلال‌های شما را می‌سنجد و تشخیص می‌دهد پاسخ‌هایتان چقدر قوی‌اند.هرچه بهتر جواب دهید، افراد بیشتری قانع می‌شوند.و این تنها جذابیت ماجرا نیست:📓 دفترچه یادداشت شخصی: هر نکته‌ای را می‌توانید یادداشت کنید تا هیچ سرنخی از ذهنتان نپرد.دفترچه یادداشت🎵 موسیقی متن اختصاصی: قطعات بی‌کلامی که مخصوص این پرونده انتخاب شده‌اند، با معرفی نوازنده و سال ساخت که حس جالبی را حین بازی منتقل میکنند.موسیقی متن📚 منابع مطالعاتی واقعی: اگر کنجکاوید، لینک‌هایی برای مطالعه‌ی بیشتر در اختیارتان قرار می‌گیرد تا عمیق‌تر وارد ماجرا شوید.منابع مطالعاتیجایی که می‌توانید این ماجرا را خودتان تجربه کنیدهمه‌ی این‌ها در یک بازی تعاملی آنلاین طراحی شده که هدفش سرگرم کردن شماست؛ تجربه‌ای کارآگاهی، منطقی و پرهیجان.🔗 همین پرونده را می‌توانید در پرونده‌چی تجربه کنید و ببینید آیا می‌توانید بقیه را قانع کنید یا نه.</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Tue, 26 Aug 2025 09:28:43 +0330</pubDate>
            </item>
                    <item>
                <title>بیاید یه هوش مصنوعی ساده و ۱۰۰ درصد برنده توی بازی سنگ کاغذ قیچی بسازیم</title>
                <link>https://virgool.io/codenevis/%D8%A8%D8%A7-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%A9%D9%87-%D8%AE%D9%88%D8%AF%D9%85-%D8%B3%D8%A7%D8%AE%D8%AA%D9%85-%D8%B3%D9%86%DA%AF-%DA%A9%D8%A7%D8%BA%D8%B0-%D9%82%DB%8C%DA%86%DB%8C-%D8%A8%D8%A7%D8%B2%DB%8C-%D9%85%DB%8C%DA%A9%D9%86%D9%85-%D9%88-%D9%87%D9%85%D8%B4-%D9%85%DB%8C%D8%A8%D8%A7%D8%B2%D9%85-jfgyfwzay6xx</link>
                <description>میخوایم چیکار کنیم : مثل خارجیا سه بار دستمون رو بالا پایین میاریم و بار سوم حرکتی رو که میخوایم میزنیم.هوش مصنوعی هم دقیقا موقعی که میخوایم حرکت رو بازی کنیم اون حرکت رو تشخیص میده و حرکتی رو میزنه که همیشه برنده باشه، به طوری که ذهن متوجه نشه که آقا تقلب کردن :)پروژه جذاب سنگ کاغذ قیچیخب بزارید این پروژه رو بشکنیم به بخش های کوچیک تا قدم به قدم انجامش بدیم.در قدم اول ما نیاز داریم که کلا دست رو تشخیص بدیم.خوشبختانه یه کتابخونه قدرتمند و بی رقیب برای اینکار وجود داره : مدیاپایپ(یکی از پروژه های اوپن سورس گوگل)# Initialize MediaPipe Hands.mp_hands = mp.solutions.handshands = mp_hands.Hands(    static_image_mode=False,    max_num_hands=1,    min_detection_confidence=0.4,    min_tracking_confidence=0.4,)حالا ما دستمون رو تشخیص میدیم و بخش جذابش اینه که کتابخونه مدیاپایپ روی دست نقطه گذاری میکنه و مختصات نقاط رو هم به ما میده. نقاطی که روی دست قرار میگیرند حالا وظیفه بعدی اینه که مختصات  یکی از این نقاط رو توی ویدیو دنبال کنیم.و بررسی کنیم که اگر دست داشت پایین میومد و میزان پایین اومدنش از یه عددی بیشتر شد یدونه به شمارنده بازی(counter) اضافه کنیم.(توی این پروژه من مختصات wrist که نقطه پایین دست هست رو دنبال میکنم و اون عدد خاص هم بعد از یه سری آزمون و خطا 170 قرار دادم).الگوریتم زیر این کارو برای ما انجام میده : counter = 0yHigh = 1000yChanges = 0y = 0if results.multi_hand_landmarks: for hand_landmarks in results.multi_hand_landmarks:            landmarks = hand_landmarks.landmark            wrist = hand_landmarks.landmark[mp_hands.HandLandmark.WRIST]            x, y = int(wrist.x * width), int(wrist.y * height) if y &lt; yHigh:            yHigh = y else:            yChanges = y - yHigh if yChanges &gt; 170:            counter += 1            yChanges = 0            yHigh = 1000خب الان شمارنده ما میشه 1 و 2 و وقتی که میخواد بشه 3 دقیقا لحظه ای هست که ما باید حرکتمون رو بین سنگ کاغذ قیچی شروع کنیم به نشون دادن و دقیقا از همین فریم عکس برداری میکنیم برای اینکه بدیمش به شبکه عصبی و پیش بینی کنیم که چه حرکتی هست.و از اینجا تازه بخش چالشیمون شروع میشه.تصویر زیر یه مثال از تصویر برداری یک فریم هست که حرکت کاغذ رو نشون میده و مسلما میتونید حدس بزنید چرا این بخش چالشیه.فریم تصویر برداری شدهدو تا چالش اساسی راجع به این فریم وجود داره :1-دست در حال حرکته و توی 90 درصد موارد فریمی که تصویر برداری میشه مثل بالا شفاف نیست و کار شبکه رو سخت میکنه2-این بازی بایستی بتونه توی هر محیطی انجام بشه و مسلما هر محیطی بک گراند خاصی داره و این بک گراند میتونه توی پیش بینی های شبکه عصبی تاثیر منفی بزاره(که قطعا میزاره) بعد از تلاش های فراوان و خروجی های مختلف و ناکارآمد یه راه حل جالب و قشنگ به ذهنم رسید.راه حل درخشان بنده : با توجه به اینکه کتابخونه مدیاپایپ خیلی قدرتمنده و عملا بدون توجه به حرکت دست میتونه اون رو با دقت بالایی تشخیص بده و از طرفی روی دست نقطه گذاری میکنه، میتونیم از این قابلیت استفاده مثمرثمری داشته باشیم.اونم اینکه به جای تصویر خود دست، صرفا تصویر این نقاط رو برای آموزش شبکه عصبیمون استفاده کنیم.نقاط دست در فریم بالاخب بیاین با این روش قدم به قدم شبکمون رو آماده کنیم.1-جمع کردن دیتاست: با کمک گرفتن از چت جی پی تی عزیزمون یه کد تمیز برای جمع کردن دیتاستی از نقاط دست فراهم کردیم.توی کد زیر مقدار IMG_SIZE عدد 5000 هست به این معنا که از هر حالت سنگ و کاغذ و قیچی 5000 تا نمونه قراره بگیریم.به این صورت که با شروع برنامه شما با انتخاب یکی از حروف s یا p یا r که حرف اول سنگ و کاغذ و قیچی هست(مسلما به انگلیسی دیگه :)) برنامه شروع به کار میکنه، دستتون رو میگیرید جلوش به صورتی که میخواید و بهتره که دستتون رو دائما حرکت بدید تا حالات مختلف یک وضعیت مثل سنگ نمونه برداری بشه و شبکه بتونه حالات بیشتری رو پیش بینی کنه.import cv2import mediapipe as mpimport numpy as npimport os# Initialize Mediapipemp_hands = mp.solutions.handsmp_drawing = mp.solutions.drawing_utilshands = mp_hands.Hands(static_image_mode=False, max_num_hands=1, min_detection_confidence=0.7)# Create directories for storing the imagesos.makedirs(&#x27;rock&#x27;, exist_ok=True)os.makedirs(&#x27;paper&#x27;, exist_ok=True)os.makedirs(&#x27;scissors&#x27;, exist_ok=True)# Count of each gesture imageIMG_SIZE = 5000# Function to preprocess landmarks and save as imagedef preprocess_and_save_landmarks(landmarks, frame, save_path, img_size=128): # Get the frame dimensions    h, w, _ = frame.shape # Get the bounding box of the hand    x_min = min([landmark.x for landmark in landmarks])    x_max = max([landmark.x for landmark in landmarks])    y_min = min([landmark.y for landmark in landmarks])    y_max = max([landmark.y for landmark in landmarks]) # Calculate the center and size of the bounding box    x_center = (x_min + x_max) / 2    y_center = (y_min + y_max) / 2    bbox_size = max(x_max - x_min, y_max - y_min) # Calculate the scaling factor and translate the landmarks    scale = img_size / bbox_size    black_bg = np.zeros((img_size, img_size, 3), dtype=np.uint8) for landmark in landmarks:        x = int((landmark.x - x_center) * scale + img_size / 2)        y = int((landmark.y - y_center) * scale + img_size / 2)        cv2.circle(black_bg, (x, y), 2, (255, 0, 0), -1)    cv2.imwrite(save_path, black_bg)# Open the webcamcap = cv2.VideoCapture(0)gesture = Noneimg_count = 0save_dir = &quot;&quot;while True:    success, frame = cap.read() if not success: break # Flip the frame horizontally for a later selfie-view display    frame = cv2.flip(frame, 1) # Convert the BGR image to RGB    rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # Process the frame and detect hands    results = hands.process(rgb_frame) # Display instructions if gesture is None:        cv2.putText(frame, &quot;Press &#x27;r&#x27; for Rock, &#x27;p&#x27; for Paper, &#x27;s&#x27; for Scissors&quot;,                     (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) else:        cv2.putText(frame, f&quot;Capturing {gesture} images: {img_count}/5000&quot;,                     (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA) if results.multi_hand_landmarks and gesture is not None and img_count &lt; IMG_SIZE: for hand_landmarks in results.multi_hand_landmarks: # Draw hand landmarks on the frame            mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS) # Extract the landmarks            landmarks = hand_landmarks.landmark # Save the preprocessed landmarks as an image            save_path = os.path.join(save_dir, f&quot;{gesture}_{img_count:04d}.png&quot;)            preprocess_and_save_landmarks(landmarks, frame, save_path)            img_count += 1 if img_count &gt;= IMG_SIZE:                gesture = None                img_count = 0 # Display the frame    cv2.imshow(&#x27;Capture Hand Gestures&#x27;, frame) # Handle keypress events    key = cv2.waitKey(1) if key == ord(&#x27;r&#x27;):        gesture = &#x27;rock&#x27;        save_dir = &#x27;rock&#x27; elif key == ord(&#x27;p&#x27;):        gesture = &#x27;paper&#x27;        save_dir = &#x27;paper&#x27; elif key == ord(&#x27;s&#x27;):        gesture = &#x27;scissors&#x27;        save_dir = &#x27;scissors&#x27; elif key == ord(&#x27;q&#x27;): break# Release the webcam and close the windowcap.release()cv2.destroyAllWindows()2-ساخت و آموزش شبکه عصبیباز به پیشنهاد چت جی پی تی جان مدلی با ساختار زیر رو ساختیم :ساختار شبکه عصبیو بعد از آموزش این شبکه با 12000 تصویر آموزشی و تست اون با 3000 تصویر تستی به دقت 100 درصد توی هر دو رسیدیم.و عملا کار دیگه جَمعه...تنها کاری که مونده اینه که مدلمون رو سیو کنیم و توی برنامه اصلی از اون برای پیش بینی حالت دست وقتی که شمارنده به 3 میرسه استفاده کنیم و متناسب با اون حرکت هوش مصنوعی رو مشخص کنیم.به همین سادگی و خوشمزگی. اگر دوست داشتین نسخه کامل کد رو ببنید به گیت هاب بنده سری بزنید.ضمن اینکه اگر میخواید نسخه ویدیوییش رو هم ببنید میتونید این ویدیو رو از کانال یوتیوب من مشاهده کنید.ممنون از وقتی که برای مطالعه گذاشتید...</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Tue, 18 Jun 2024 17:18:24 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه من و دوستام از ساخت یک کنسول ساده بازی</title>
                <link>https://virgool.io/codenevis/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%85%D9%86-%D9%88-%D8%AF%D9%88%D8%B3%D8%AA%D8%A7%D9%85-%D8%A7%D8%B2-%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%DA%A9%D9%86%D8%B3%D9%88%D9%84-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%A7%D8%B2%DB%8C-uqjp7dzhuupk</link>
                <description>جذابیت این پروژه فان، برای من دانشجوی ترم یک کامپیوتر این بود که بدون هیچ دانش قبلی از مباحث الکترونیکی و برنامه نویسی آردوینو مستقیما وارد این پروژه شدیم و با اینکه اشتباهات زیادی کردیم(توی همین متن به چند تاشون اشاره میکنم :)) ولی لازم دونستم این تجربه رو انتقال بدم که ممکنه برای عزیزانی که مثل ما تجربه ندارن مفید و برای اونایی هم که تجربه دارن جالب باشه.1-فراهم کردن تجهیزاتاولین وظیفه ما فراهم کردن تجهیزات این کار بود و مسلما مهم ترینش آردوینو بود.ما یه مدل R3 اون رو خریداری کردیم(البته که الان فکر میکنم مدل های مناسب تری هم وجود داشت مثل مدل wemos به دو دلیل: اول اینکه قیمت کمتری داشت و دلیل دوم رو جلوتر میگم)ما همچنین به چیزی نیاز داشتیم که بازی ها رو روش نمایش بدیم(LCD) و یه وسیله ای که بتونیم باهاش بازی کنیم(کلید یا جویستیک)بخاطر اینکه در کنار کیفیت باید حواسمون به هزینه ها هم میبود LCD5110 و یک جویستیک ps2 خریداری کردیم.(توجه بیش از حد به قیمت و کاهش هزینه ها یکی از اشتباهات فاحشمون بود که باعث مشکلاتی شد که بهش اشاره میکنم) lcd5110joystick2-تمرین و یادگیریاولین کاری که کردیم همون کاری بود که همه در برخورد اولشون با یه آردوینو انجام میدن ، رقص نور و کلی ذوق کردیم :)بعد از اون تصمیم گرفتیم که یک متن ساده رو روی LCD نمایش بدیم بنابراین ما :1-پین های مربوط به انتقال دیتا رو از آردوینو به ال سی دی متصل کردیم(طبق دیتاشیت)2-پین ولتاژ و زمین که بینشون 3.3 ولت اختلاف بود رو متصل کردیم.3-آردوینو رو طبق کد نمونه برنامه نویسی کردیم.با اینکه یه بک لایت آبی هم از LCD گرفتیم ولی هیچ چیزی نمایش نمیداد.یک روز تمام صرف این مشکل شد(و این اولین باری بود که با خودم گفتم شاید مسیر رو داریم اشتباه میریم و اساسا بدون تجربه قبلی وارد شدن به پروژه ای اینچنینی کار درستی نیست) ولی به هر حال در آخر روز این مسئله حل شد:ما بعد از اندازه گیری جریان متوجه شدیم که LCD باعث افت پتانسیل زیادی میشه و جریان کافی برای نمایش دیتا وجود نداره. بنابراین بجای ولتاژ 3.3 از 5 استفاده کردیم و مشکل حل شد. ال سی دی بالاخره کار کرد:بعد از تست ال سی دی و جویستیک، تسک بعدی نوشتن یه بازی 2048 ساده بود.خوبی این تسک این بود که ما قبلا این کار رو به عنوان یه پروژه ترمینال بیس با زبان پایتون انجام داده بودیم.(لینک گیتهاب بازی 2048 ترمینال)برای همین، دیگه از پیاده سازی الگوریتم بازی راحت شده بودیم و فقط نیاز بود که کد های پایتونی تبدیل بشن به کد های c++ و مناسب برای آردوینو.(اینم لینک گیتهاب بازی 2048 که روی آردوینو پیاده سازی کردیم)تسک بعدی اتصال آردوینو به وای فای بود.برای اینکه بتونیم اطلاعاتی (مثل رکورد های بازی 2048) رو بفرستیم سمت سرور.برای اینکار ما نیاز به یک ماژول وای فای داشتیم.(این دومین دلیلی بود که شاید آردوینو مدل wemos برای کار ما مناسب تر بود، چون که این مدل، ماژول وای فای رو روی خودش داره)ماژول وای فای روی آردوینو wemosبه هر حال بعد از کمی سرچ به ماژول esp 8266 01s رسیدیم.esp 8266 01sیکی از بزرگ ترین مشکلاتمون از اینجا شروع شد.ما واقعا ایده ای برای برنامه ریزی این ماژول کوچولو نداشتیم.در واقع پین های این ماژول بر اساس هدفی که ما داریم باید به آردوینو متصل میشدن و وقتی سرچ میکردیم، انواع و اقسام روش های اتصال و برنامه ریزی این ماژول رو میدیدیم.به هر ترتیبی بود یه چیز رو که یاد گرفتیم بحث ارتباطات ماژول ها با هم بود.توی این مورد ما بایستی با استفاده از سریال و اتصال rx وای فای به tx آردوینو و tx وای فای به rx آردوینو اطلاعات رو از آردوینو به وای فای و بالعکس انتقال میدادیم.پروتکلی هم که برای این کار استفاده میشه گرچه مطمئن نیستم ولی فکر میکنم پروتکل UART هست.اولین تسک توی این مورد تست خود ماژول وای فای به تنهایی و اینکه ببینیم به اینترنت متصل میشه یا نه. بنابراین با تیکه کد زیر اون رو به هات اسپات گوشیم متصلش کردیم:#include &lt;ESP8266WiFi.h&gt;#include &lt;ESP8266HTTPClient.h&gt;#include &lt;WiFiClient.h&gt;// name and password of the access point esp should connect(here is my mobile hotspot)const char* ssid = &quot;EspTest&quot;;const char* password = &quot;12345678&quot;;void setup() {  Serial.begin(9600);  WiFi.begin(ssid, password);  while (WiFi.status() != WL_CONNECTED) {       // Wait for the Wi-Fi to connect      delay(1000);      Serial.print(++i);       Serial.print(&#x27; &#x27;);  }  //...}//...rest of the code...//to communicate with arduinoو در ادامه با استفاده از سریال، وقتی که وای فای متصل میشد، به آردوینو خبر میدادیم و از طریق آردوینو ، یوزر رو مطلع میکردیم که وای فای متصل شده(مثلا با روشن موندن یک ال ای دی)بعد از اتصال صحیح آردوینو به وای فای و همچنین وای فای به اینترنت نوبت به ارسال اطلاعات به سمت سرور بود. برای اینکار از خدمات رایگان وبسایت thingspeak استفاده کردیم.که به ما توکن میداد و با استفاده از اون توکن و صدا زدن یک http api، تونستیم اطلاعات عددیمون رو بفرستیم سمت سرور و روی یک نمودار به اصطلاح ویژوالایزش کنیم.اینم کد کامل ماژول وای فای:#include &lt;ESP8266WiFi.h&gt;#include &lt;ESP8266HTTPClient.h&gt;#include &lt;WiFiClient.h&gt;const char* ssid = &quot;EspTest&quot;;const char* password = &quot;12345678&quot;;// Domain Name with full URL Path for HTTP POST Requestconst char* serverName = &quot;http://api.thingspeak.com/update&quot;;// Service API KeyString apiKey = &quot;9885BM14TX2FPMUU&quot;;void setup() {  Serial.begin(9600);  delay(1000);  while (Serial.read() == 0) {  }  WiFi.begin(ssid, password);  while (WiFi.status() != WL_CONNECTED) {    Serial.write(123);  }}void loop() {  if (Serial.read() == 0) {  } else {    //Check WiFi connection status    if (WiFi.status() == WL_CONNECTED) {      Serial.write(200);      WiFiClient client;      HTTPClient http;      // Your Domain name with URL path or IP address with path      int recived = 0;      if (Serial.available()) {        http.begin(client, serverName);        recived = Serial.read();        // Specify content-type header        http.addHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);        // Data to send with HTTP POST        String httpRequestData = &quot;&quot;;       // 2048 score is always bigger than 32 and snake game is less        if (recived &gt;= 32) {          httpRequestData = &quot;api_key=&quot; + apiKey + &quot;&amp;field4=&quot; + recived;        } else {          httpRequestData = &quot;api_key=&quot; + apiKey + &quot;&amp;field5=&quot; + recived;        }        // Send HTTP POST request        int httpResponseCode = http.POST(httpRequestData);        http.end();      }      /*      // If you need an HTTP request with a content type: application/json, use the following:      http.addHeader(&quot;Content-Type&quot;, &quot;application/json&quot;);      // JSON data to send with HTTP POST      String httpRequestData = &quot;{\&quot;api_key\&quot;:\&quot;&quot; + apiKey + &quot;\&quot;,\&quot;field1\&quot;:\&quot;&quot; + String(random(40)) + &quot;\&quot;}&quot;;                 // Send HTTP POST request      int httpResponseCode = http.POST(httpRequestData);*/      // Serial.print(&quot;HTTP Response code: &quot;);      // Serial.println(httpResponseCode);      // Free resources    } else {      Serial.write(403);    }  }}خب الان همه چیز تکمیله... ما تا اینجا کد ها رو به درستی روی آردوینو و وای فای آپلود کردیم و اتصالات لازم رو انجام دادیم. اما یک مشکل دیگه مونده : در حال حاضر اتصالات روی یک برد بورد انجام شده و خیلی به هم ریختس و نسبت به یک محصول یه چیزی رو کم داره : boxما بایستی عملیات باکس کردن این مدارات رو انجام میدادیم اما قبلش نیاز بود یه مقدار خود اتصالات هم مرتب بشن. برای این کار ایده ی PCB (مدار چاپی به ذهنمون رسید). اول گفتیم هدفمون رو به الکترونیکی مورد نظر بگیم و خودشون برامون PCB رو طراحی و درست کنن.خب رفتیم مغازه و مسئله بهشون گفتیم و فهمیدیم برای طراحی هزینه جدا و ساخت هم هزینه جدا میگیرن.تصمیم گرفتیم طراحی رو خودمون انجام بدیم و ساختش رو بدیم به اونا.طراحی رو روی یک صفحه 4.5 در 4.5 انجام دادیم و به همچین طرحی رسیدیم : باز مراجعه کردیم به مغازه الکترونیکی و طرح رو نشون دادیم و هزینه ای که گفتن 500 به بالا بود.یه پرس و جو کردیم و دیدیم که چون PCB مون تک لایه و ساده هست میتونیم خودمونم درستش کنیم با هزینه تقریبا 150 تومن وسایلی که مورد نیاز بود. بنابراین خودمون مشغول به کار شدیم :) (این یکی از مواردی بود که صرفه جویی بیش از حد توی هزینه باعث شد علاوه بر پایین اومدن کیفیت، زمان بسیار بیشتری رو صرف این مورد کنیم ولی به هر حال تجربه جالبی بود)برای این کار وسایل زیر رو تهیه کردیم : ورق مسیاسید مخصوص مدارچاپیخب ما اینجوری شروع کردیم :1-طرحمون رو از روی کاغذ گلاسه انتقال دادیم به ورق مسی با استفاده از اتو:2-بعد از انتقال طرح روی صفحه مسی اونو با رعایت نکات ایمنی:) انداختیمش داخل اسید مخصوص تا اون قسمت هایی از مس که به اون نیاز نداریم کاملا از بین برن و فقط اتصالاتی که توی طرح منتقل شده باقی بمونن.خب به تصویر بالا نگاه نکنید چون نتیجه ما یه چیز دیگه شد :)))))میبینید که یک سری اتصالات کامل منتقل نشدن و بعد از تست با مولتی متر فهمیدیم این وسطا قطعی هایی هم وجود داره.بنابراین قشنگ زدیم با سیم لحیم و سیم های رشته ای کوچیک به فجیع ترین شکل ممکن اتصالات رو ترمیم کردیم و کثیف کاری رو به حد اعلای خودش رسوندیم :)))))) و نتیجه شد این : PCB خروجی نهایی بعد از ساخت PCB و تکمیل اتصالات یه جعبه خریداری کردیم و تمام تجهیزات رو داخل جعبه گذاشتیم و این بود داستان ساخت کنسول ما :)) امیدوارم که این مطلب براتون جالب بوده باشهخوشحال میشم اگر نظری، پیشنهادی یا هر سخنی دارید برام پایین همین مطلب کامنت کنید.کد کامل این پروژه روی گیتهاب بنده موجود هست.ضمنا میتونید خروجی نهاییمون رو که در قالب یه ویدئوی 2 دقیقه ای ضبط کردم رو روی یوتیوب بنده مشاهده بفرمایید.</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Fri, 26 Apr 2024 17:51:28 +0330</pubDate>
            </item>
                    <item>
                <title>فیزیک در بیلیارد با یک توپ!</title>
                <link>https://virgool.io/@m.hassani4951383/%D9%81%DB%8C%D8%B2%DB%8C%DA%A9-%D8%AF%D8%B1-%D8%A8%DB%8C%D9%84%DB%8C%D8%A7%D8%B1%D8%AF-%D8%A8%D8%A7-%DB%8C%DA%A9-%D8%AA%D9%88%D9%BE-ewzau5onsffj</link>
                <description>همه ما بازی بیلیارد رو انجام دادیم یا حداقل دیدیم. اما یه بخش جذاب ماجرا فیزیک پشت این بازی هست که ظاهرا خیلی ساده به نظر میرسه اما وقتی وارد میدان میشی تا ببینی این پشت داره چه اتفاقی میوفته تازه متوجه عمق فاجعه و پیچیدگی میشی.من و دوستام تخصصمون فیزیک نیست اما برامون جالب بود با دانش کمی که توی فیزیک داریم به صورت خیلی ساده حرکت یک توپ رو توی زمین بیلیارد شبیه سازی کنیم.تصویری از شبیه سازی ساده مون :)اگر دوست داشتید میتونید کدهای این شبیه سازی رو از گیتهاب من بردارید.خب بریم سروقت فیزیک ماجرا(از خیلی از پیچیدگی ها صرف نظر شده)اول از همه باید واحد اصلیمون رو معرفی کنم. کمیت اصلی ما زمان و واحدش توی این محیط 80 میلی ثانیه هست. علتش هم اینکه که صفحه بازی هر 80 میلی ثانیه یک بار آپدیت میشه. بنابراین واحد سرعت توپ رو هم  cm/80ms  در نظر گرفتم.1-ضربه زدن به توپ و حرکتش در یک مسیر مستقیم بدون برخورد با دیوارهتوی این سناریو درست بعد از ضربه زدن به توپ ما یک سرعتی رو در توپ ایجاد میکنیم و توپ شروع به حرکت میکنه. فرض میکنیم تنها نیرویی که داره به توپ وارد میشه اصطکاک سطح هست.تنها نیروی موثر بنابراین با تعریف ضریب اصطکاک جنبشی برای سطحمون(μ) این رابطه معروف رو براش مینویسیم : f=μNهمچنین میتونیم بجای N از mg استفاده کنیم و بنویسیم : f=μ(mg) (I)از طرفی چون تنها نیروی خالص وارد بر توپ همین اصطکاک هست میتونیم رابطه اصلی نیوتون رو هم براش بنویسیم : f = ma (II)حالا با ترکیب روابط (I) و (II) به این نتیجه میرسیم: ma = μmg =&gt; a = μgحالا با توجه به اینکه شتاب یه مقدار ثابتی داره میتونیم از روابط سینماتیک برای محاسبه سرعت استفاده کنیم:a = (v2-v1)/(t2–t1) که در اینجا t2-t1=80ms ، چون همونطور که گفتم داریم تغییرات رو توی بازه زمانی 80 میلی ثانیه بررسی میکنیم و همچنین فرض میکنیم که سرعت اولیه ای که در توپ ایجاد میشه رو داریم.پس با ترکیب این روابطی و پارامتر هایی که میدونیم به یه همچین چیزی میرسیم : v2-v1 = -[(0.08μg) * 8] (III)دلیل اینکه عبارت (0.08μg) در یک 8 هم ضرب شده اینه که گفتم ما واحد سرعتمون رو سانتی متر برا 80 میلی ثانیه درنظر گرفتیم و باتوجه به اینکه سمت راست تساوی یک مقداری رو بر حسب متر بر ثانیه به ما بر میگردونه در با یکم ساده سازی صرفا با ضربش در 8 میتونیم به واحد خودمون برسیم.بنابراین با این معادله و با داشتن سرعت اولیه ای که در توپ ایجاد میشه میتونیم سرعت ثانویه رو در 80 میلی ثانیه بعد داشته باشیم و باز از این سرعت ثانویه استفاده کنیم تا سرعت بعد از اونو پیدا کنیم و الی آخر...2-برخورد توپ به دیوارهاین سناریو یک اتلاف انرژی بین توپ و دیواره رو داره که به صورت گرما تلف میشه.اما اینکه واقعا سرعت بعد از برخورد به چه حالتی میرسه هیچ ایده ای براش نداشتم.بنابراین از چت جی پی تی کمک گرفتم و رسیدم به مفهومی به نام ضریب برخورد یا به اختصار COR که با علامت e داده میشه. این ضریب یه مقدار بین صفر و یک داره که بسته به جنس و توپ و میز متغیر هست و توی این مثال به همچین فرمولی میرسیم : e = Vf/Vi (IIII)که در اینجا Vf سرعت بعد از برخورد و Vi سرعت قبل از برخورد را نشان میدهد. من از 0.9 با توجه به اینکه چت جی پی تی هم برای همچین کیسی متغیر بین 0.7 تا 0.9 گرفته بود، استفاده کردم.بخش اصلی کد که مربوط به آپدیت کردن سرعت هست رو اینجا میتونید ببینید : # constantsmass = 0.1COR = 0.9 # Coefficient of restitutionCOF = 0.3 # Coefficient of frictiong = 10t = 0.08 # time in secendsp# Calculates and updates velocitydef updateVelocity(v0, gotHit): if gotHit: # hit the edge return COR * v0 else: # moving on table return v0 - t * g * COF * 8اگر پیشنهادی برای بهبود این مدل دارید خوشحال میشم توی بخش کامنت ها اضافه کنید.ممنون از نگاهتون</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Sun, 17 Mar 2024 07:09:03 +0330</pubDate>
            </item>
                    <item>
                <title>2 روش دور زدن تحریم های اینترنتی در سال 2024</title>
                <link>https://virgool.io/@m.hassani4951383/%D8%AF%D9%88%D8%B1-%D8%B2%D8%AF%D9%86-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%D9%87%D8%A7%D8%AF%D8%BA%D8%AF%D8%BA%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%AF%D8%B1-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86-pkgrsstxkn33</link>
                <description>اگر قصد داری برنامه نویسی اندروید رو شروع کنی یا برنامه نویس اندرویدی ولی کتابخونه هایی که اضافه میکنی بخاطر تحریم دانلود نمیشن یا حتی اگر برنامه نویس نیستی ولی نیاز به وبسایت هایی داری که تحریم هستن این نوشته برای تو هست.دو تا روش رو خودم تست کردم و تا به حال جوابگو بوده، نه تنها برای برنامه نویسی اندروید، بلکه برای تمام وبسایت هایی که ایران رو تحریم کردن هم مفید هستن. پس بدون هیچ اضافه گویی بریم ببینیم این دو روش چیا هستن.شکن :با استفاده از این وبسایت ایرانی میتونید نه تنها تحریم های اینترنتی رو دور بزنید... که برنامه نویسی اندروید رو هم براتون شیرین تر و روون تر میکنه.استفاده ازش هم خیلی راحته که با مراجعه به وبسایتشون میتونید آموزش ست کردن dns های مربوطه رو ببنید(روی هم رفته 1 دقیقه زمان میبره تا این dns ها رو ست کنید :) https://shecan.ir/ تحریم شکن 403: https://403.online/ این سرویس هم مشابه شکن هست که باید روی سیستمتون نصب داشته باشید و ازش استفاده کنید.این رو هم اضافه کنم که سازوکار این دو تا برنامه dns هست که من خیلی راجع بهش نمیدونم و صرفا ازشون استفاده میکنم...اما علاقمند شدم که برم راجع بهشون مطالعه کنم(بعد از مطالعه حتما یه مقاله دیگه راجع بهش میزارم و ضمیمه همین مقاله میکنم تا بیشتر بفهمیم اون پشت مشتا دقیقا داره چه اتفاقی میوفته)بگذریم...ضمنا خود من بعد انجام هر روشی برای اینکه مطمئن بشم دارن به درستی کار میکنن یه سر به وبسایت رسمی برنامه نویسان اندروید میزنم. https://developer.android.com/ اگر بعد از ورود به وبسایت با هر صفحه ای به غیر از صفحه ی زیر مواجه بشم، کارم رو شروع میکنم.امیدوارم که مفید بوده باشه...راستی اگر شما هم روش های دیگه ای رو میشناسید که مفید هستن حتما کامنت کنید.</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Fri, 16 Feb 2024 22:42:59 +0330</pubDate>
            </item>
                    <item>
                <title>اگر این نکات رو رعایت نمیکنی هیچ وقت برنامه نویس نشو!</title>
                <link>https://virgool.io/codenevis/%D8%A7%DA%AF%D8%B1-%D8%A7%DB%8C%D9%86-%D9%86%DA%A9%D8%A7%D8%AA-%D8%B1%D9%88-%D8%B1%D8%B9%D8%A7%DB%8C%D8%AA-%D9%86%D9%85%DB%8C%DA%A9%D9%86%DB%8C-%D9%87%DB%8C%DA%86-%D9%88%D9%82%D8%AA-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D9%86%D8%B4%D9%88-hrgknyr7iway</link>
                <description>ساعت ها پای سیستم نشستن، سرچ، کدزنی و کار فکری، جزو بیشترین کارهاییه که برنامه نویسا در طول روز انجام میدن و این کم تحرکی و کارفکری زیاد از جمله معایب این حوزه هست و در دراز مدت نتایج جالبی نداره.اما خبر خوب این که با رعایت نکاتی به ظاهر ساده(که خیلی وقتا بخاطر سادگیش فراموش میکنیم و اهمیت نمیدیم) تا حد بسیار بسیار خوبی میشه این عیب رو جبرانش کرد و در کنار برنامه نویسی، روح و جسم سالمی داشت :)اگر تو هم برنامه نویسی ولی این نکات رو رعایت نمیکنی حتما تا انتها با من همراه باش، اگر هم رعایت میکنی باز هم تا انتها همراه من باش چون میدونم که بعد از مدتی یادت میره اما با خوندن این مطلب دیگه قرار نیست فراموشش کنی :)اروگونومی1-ارگونومی : یکی از اون مواردی که خیلیا اولش فقط رعات میکنن اما کم کم به مرور به حالت های عجیب و غریبی میرسیم(مثل خوابیدن و کد زدن)اما جدای از شوخی یکی از موارد خیلی خیلی خیلی خیلی خیلی (وی آنقدر تکرار کرد که ادامه اش را یادش رفت) مسئله مهمیه برای کسانی مدام پشت سیستم هستن.مشکل اینجاست که این بد نشستن و بد کارکردن همون اول هیچ حس دردی ندارن که نذارن ادامه بدیم، اما ماهیچه ها کم کم شکل نافرمی به خودشون میگیرن و دردهایی رو ایجاد میکنن توی ناحیه های گردن و کمر و ... که واقعا سخت قابل ترمیم و درمانن. پس چه بهتر که کمی به خودمون سختی بدیم توی اوایل کار و بعد از مدتی این درست نشستن و کار کردن با سیستم رو جزوی از عاداتمون کنیم. حتما راجع بهش سرچ بزنید، و نحوه صحیحشو یاد بگیرید.2-قانون 20-20-20 : هر 20 دقیقه یکبار به مدت 20 ثانیه، به اشیایی که 20 پا از شما فاصله دارن نگاه کنید و پلک بزنید. کلا مداوم به صفحه مانیتور نگاه کردن اصلا خوب نیست. حتما تایم بریک هایی رو برای خودتون در نظر بگیرید(جدای از این قانون) و واقعا به این زمان های استراحت پایبند باشید. یادتون نره توی چند دقیقه ای که برای خودتون میزارید تا استراحت داشته باشید، قرار نیست کار خیلی بزرگی بکنید.... پس حتما چند دقیقه ای رو به قدم زدن، نوشیدن چای و ... اختصاص بدیدورزش : از ورزش که دیگه هر چی بگیم واقعا کمه ! ولی خب برای یه برنامه نویس نه تنها مفیده بلکه ضروریه به دو علت مخصوص این حوزهیک اینکه برنامه نویسا به واسطه کارشون تحرکی ندارن عملا و باید این تحرک رو برای خودشون ایجاد کنن پس حتما یه تایمی رو برای ورزش اختصاص بدیددو اینکه استراحت کار ذهنی، تحرک و ورزشه... برنامه نویسا در طول روز به شدت کار ذهنی دارن و چاره استراحت ذهنشون ورزشه....پس بعد از یه روز کاری بجای اینکه بگیرید بخوابید، ورزش کنید ببنید چقدر لذتش بیشتره و چقدر ذهنتون بعدش آروم میشه.موارد دیگه ای هم وجود دارن ولی این موارد به نظرم ضروری تر رسیدن و در عین سادگی نتایج بسیار خوبی رو دارن(اثر مرکب :))و اما نکته آخر اینکه فراموشکاری توی ذات هممون هست و چاره این مسئله فقط و فقط تکراره.پس اونقدر این عادات رو تکرار کنید تا بشه ملکه ذهنتون و ناخوداگاه رعایتشون کنین.ممنون که چند دقیقه ای رو برای سلامتی خودتون وقت گذاشتید....اگر نکته ی دیگه ای داشتید حتما کامنت بزارید که استفاده کنیم...یا حق. </description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Thu, 08 Feb 2024 22:50:20 +0330</pubDate>
            </item>
                    <item>
                <title>مسیر برنامه نویسی اندروید</title>
                <link>https://virgool.io/codenevis/%D9%85%D8%B3%DB%8C%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-mcpcjy2xr2np</link>
                <description>اگر به طراحی و توسعه اپلیکیشن های کاربردی موبایل علاقه دارید یا دوست دارید ایده های خودتون رو در قالب اپلیکیشن های موبایل پیاده کنید یا میخواید برای کسب و کارتون اپ موبایلی بنویسید اما نمیدونید از کجا شروع کنید، این مقاله به شما کمک میکنه :)این حوزه زیر مجموعه برنامه نویسی موبایل هست و خود برنامه نویسی موبایل تقسیم میشه به زیرشاخه های:1- اندروید(android) برای شرکت گوگل2-آی او اس(ios) برای شرکت اپل3-کراس پلتفرم(با یک بار برنامه نویسی نسخه ios و android خروجی گرفته میشود)که توی این مقاله فقط مورد اول یعنی اندروید بررسی میشه(اما در کل هر 3 تای این موارد خیلی خیلی به هم نزدیک هستن و با مسلط شدن روی یکیش میتونین به راحتی و توی یه مدت کوتاه روی بقیه اون ها هم سوییچ کنید.)از جذابیت های این حوزه به نظر شخصی من اینه که مهارت های زیادی رو به شما یاد میده. از طراحی صفحات اپ که نیاز به سلیقه و یادگیری سیستم های طراحی داره(مثل متریال دیزاین) گرفته تا کدنویسی بهینه(چون رم گوشی نسبت به کامپیوتر خیلی فضای کمتری داره و این یکی از چالش های برنامه نویسای اندرویده که برنامه هایی که مینویسن رم کمتری مصرف کنه)، ارتباط با سرور و برنامه نویسی بک اند، دیتابیس، گیت، ترکیب پروژه ها با iot(اینترنت اشیا) و هوش مصنوعی و کلی مهارت دیگه که عملا از شما یه مهندس نرم افزار میسازه.برای شروع شما نیاز به یک رودمپ(نقشه راه) خوب دارید که رودمپ سایت roadmap از معتبر ترین هاش هست که میتونید به این آدرس مراجعه کنید : https://roadmap.sh/android1-انتخاب زبان برنامه نویسی : تا قبل از سال 2017 یه انتخاب وجود داشت : جاوااما تو اون سال گوگل زبان جدیدی رو معرفی کرد که از لحاظ نوشتار ساده تر جاوا بود و یک سری قابلیت جدید و خفن داشت که جاوا نداشت : کاتلینجاوا vs کاتلینو کم کم شروع کرد برنامه نویسای اندروید رو ترغیب کردن به سمت کاتلین و اخیرا با معرفی کامپوز که فقط برای کاتلین ارائه شد دیگه رسما اعلام کرد که برنامه نویسای اندروید حتما باید به سمت کاتلین مهاجرت کنن!اما نکته ای که برای شروع این حوزه لازمه گفته بشه اینه که هنوز کتابخونه ها و اپلیکیشن های زیادی هستن که به زبان جاوا نوشته شدن و یادگیریش (به نظر شخصی من) الزامیه.یه بحثی هم که همیشه بین برنامه نویسای اندروید داغه اینه که جاوا یا کاتلین؟ من میگم این سوال خیلی غلطه  و توصیه میکنم هر دوش رو یاد بگیرید. اگر مفاهیم اولیه برنامه نویسی رو با زبان جاوا یادبگیرید، توی کاتلین همون مفاهیم تکرار میشن، فقط طرز نوشتارشون فرق میکنه(به اصطلاح میگن سینتکسشون متفاوته :))پس بجای سرچ جاوا بهتر است یا کاتلین :) اول بشینید جاوا رو یاد بگیرید (صرفا مفاهیم اولیه برنامه نویسی مثل متغیر ها، شرط ها، دیتاتایپ ها، اصول شی گرایی و چند مورد کوچیک دیگه) بعد سعی کنید یه اپ ساده باهاش توی اندروید بنویسید و بعد سوییچ کنید روی کاتلین.وقتی به این مرحله برسید مسیر کم کم براتون روشن میشه و اصلا قرار نیست بیوفتید توی سردرگمی و دوراهی.برای همین ادامه مراحل رو نمینویسم چون هم طولانی میشه و هم شاید بعد از چند سال خیلی از این موارد منسوخ بشه.این رو از من داشته باشید که یه برنامه نویس هیچ وقت دنبال لقمه آماده نمیگرده.پس بجای اینکه برید وبلاگ های دیگه ای رو راجع به برنامه نویسی اندروید بخونید مستقیم برید سر شروع کردن و پروژه های کوچیک زدن.ضمنا منبع اصلیتون هم سایت developer.android.com باشه که برای گوگل هست و داکیومنت های رسمی برای اندروید اینجا وجود داره + نمونه پروژه های متنوع برای یادگیری مفاهیم مختلف برنامه نویسی اندروید.در کنارش میتونید از مقاله های خوبه وبسایت های w3school، medium، geeksforgeeks و ... استفاده کنید.مسلما سعی کنید زبان انگلیسیتون رو تقویت کنید تا کمتر سراغ منابع فارسی برید. چون هنوز منابع فارسی خیلی غنی و آپدیت نیستن.دوست دارم همتونو اون بالا بالا ها ببینم.یا حق.</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Sun, 28 Jan 2024 19:04:29 +0330</pubDate>
            </item>
                    <item>
                <title>آماده سازی سرور super tic tac toe</title>
                <link>https://virgool.io/@m.hassani4951383/%D8%A2%D9%85%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-super-tic-tac-toe-cmi3ix5fjdou</link>
                <description>درود به بچه های کامپیوتربرای آماده سازی سرور اول از همه نیاز هست که پایتون رو روی سیستمتون نصب داشته باشید.برای اطمینان از اینکه پایتون روی سیستمتون نصب هست ترمینالتون رو باز کنید و تایپ کنید  python --version. و بعد از زدن enter باید ورژن پایتونتون رو بیاره که دقت کنید حتما از 3.8 بالا تر باشه. خب فرض میکنیم پایتون رو نصب دارید. از اینجا شروع میکنیم به آماده سازی محیط...1 - برید به این آدرس https://github.com/pooriaazami/super_tic_tac_toeتوی این صفحه اول روی code کلیک کنید و بعد download zip رو بزنید و فایل دانلودی رو هر جا دوست داشتید از حالت زیپ خارج کنید.بعد هر جا که دوست دارید پروژتون باشه terminal رو اونجا باز کنید(توی این مثال من توی دسکتاپم یه فولدر ساختم به اسم main و داخل اون دستور زیر رو زدم -&gt;  python -m venv name ) بجای name اون اسمی که میخواید رو بزنید(من نوشتم mySuperTicTacToe). بعد از enter زدن، یه پوشه به همون اسمی که اینجا نوشتید میاره. حالا میرید داخل همون فولدری که از روی گیتهاب برداشته بودید و تمام فایل های داخلش رو کپی میکنید توی این فولدری که ساخته شده(اینجا همون mySuperTicTacToe)فایل هایی که باید کپی بشن
اون فایل هایی که کپی کردید رو باید اینجا پیست کنیدوقتی به اینجا رسیدید ترمینالتون رو توی همین پوشه باز میکنید و دستور زیر رو تایپ میکنید.وقتی enter زدید باید همچین خطی براتون بیاد. به قسمت اولش که اسم پوشتون رو توی پرانتر نوشته دقت کنید که حتما اومده باشه.خب تبریک میگم، تا به اینجا شما یه محیط مجازی ساختید که بتونید داخلش سرور پایتون رو ران کنید. آماده سازیش تا به اینجا به پایان میرسه.حالا برای نصب یه سری کتابخونه هایی که برای این سرور لازمه باید دستور زیر رو توی cmd بزنیدبعد از زدن اینتر، یک سری کتابخونه ها باید نصب بشن که باید کمی صبر کنید و حتما از اتصال اینترنتتون مطمئن باشید تا به ارور نخورید. خود من حین نصب شکن روی سیستمم فعال بود، اگر براتون نصب نشد با اون هم امتحان کنید، ضرر نداره.(سرچ بزنید شکن نحوه ست کردنش خیلی راحته)خب بعد از اتمام نصب باید با همچین صفحه ای روبرو بشید که به معنای نصب کامل همه کتابخونه هاست.حالا نوبت به باز کردن vscode میرسه. توی همین ترمینال با وارد کردن دستور . code میتونید vscode رو توی همون فولدر باز کنید.(البته توی خود vscode هم میشه با open folder ولی روش ترمینال واسه حرفه ای هاست:))بعد از وارد کردن این دستور باید صفحه vscode تون با این فایل ها باز بشهاینجا میتونید فایل server.py باز کنید و تغییراتی توش ایجاد کنید و ضمنا توی خطوط 477 تا 482 این فایل راهنمایی استفاده از یک سری دستورات ترمینال برای اجرای بازی اومده که میتونید بخونید و امتحان کنیدولی به طور کلی اگر دستور زیر رو توی ترمینالتون وارد کنید صفحه بازی باید براتون لود بشه و بازی به صورت رندوم براتون انجام بشه.خب تمومه.امیدوارم بدون مشکل به این مرحله رسیده باشید.</description>
                <category>mahdi hassani</category>
                <author>mahdi hassani</author>
                <pubDate>Sat, 23 Dec 2023 18:06:58 +0330</pubDate>
            </item>
            </channel>
</rss>