<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سعید غلامی</title>
        <link>https://virgool.io/feed/@sayeidgholami</link>
        <description>برنامه نویس و مدرس پایتون</description>
        <language>fa</language>
        <pubDate>2026-06-17 10:16:10</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/24648/avatar/upHVZt.png?height=120&amp;width=120</url>
            <title>سعید غلامی</title>
            <link>https://virgool.io/@sayeidgholami</link>
        </image>

                    <item>
                <title>ادیتور Zed جایگزینی برای VS Code؟</title>
                <link>https://virgool.io/@sayeidgholami/%D8%A7%D8%AF%DB%8C%D8%AA%D9%88%D8%B1-zed-%D8%AC%D8%A7%DB%8C%DA%AF%D8%B2%DB%8C%D9%86%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-vs-code-skyhxiucgtl0</link>
                <description>ادیتور zedسال ۲۰۱۵ بود که ادیتور اتم عرضه شد. این ادیتور با شعار وایشگری برای قرن ۲۱ به دنیای دیجیتال وارد شد. این ادیتور به صورت محبوب شد. همین محبوبیت باعث شد که شرکت‌های مختلف از روی این ادیتور الگو برداری کنن و ادیتور خودشون رو معرفی کنن. از جمله این شرکت ها میشه به ادوبی اشاره کرد که ادیتور Bracket رو معرفی کرد. سپس شرکت مایکروسافت ادیتور Visual Studio Code رو معرفی کرد که به نام VS Code معروف است.خرید گیت هاب توسط مایکروسافتاین ادیتورها باهم در رقابت بودن که شرکت مایکروسافت شرکت گیت‌هاب رو خریداری کرد. گیت‌هاب شرکت پشت ادیتور Atom بود. بعد از این مایکروسافت این شرکت رو خرید اعلام کرد که اجازه خواهد داد اتم هم در کنار وی اس کد به پیشرفت خودش ادامه بده اما هم می دونستیم که فقط شو تبلغاتی هست. پس حدودا دو سال از خرید گیت‌هاب مایکروسافت اعلام کرد که اتم رو پشتیبانی نخواهد کرد و این کار رو به خاطر انجام میده که تمرکز توسعه دهندهای شرکت بره به سمت وی اس کد. در سال ۲۰۲۲ به پشتیبانی اتم پایان داده شد.فریم ورک الکترونبرای ساخت وی اس کد از فریم ورکی به نام الکترون استفاده شده است. این همون فریم ورکی هست که در ساخت براکت و اتم هم از اونها استفاده شده است. فریم ورک الکترون هم توسط گیت‌هاب توسعه داده شده است.با استفاده از این فریم می تونیم از تکنولوژی های وب استفاده کنیم و برنامه های دسکتاپ بسازیم. این فریم ورک دارای دو مزیت اصلی می باشد اولی اینکه این فریم ورک برای برنامه نویسان وب بسیار مناسب است چون از تکنولوژی های وب مثل HTML, CSS, JS برای ایجاد اپ دسکتاپ استفاده میکنه. پس عملا برنامه نویسان وب نیازی به یادگیری تکنولوژی جدیدی برای تولید برنامه‌های دسکتاپ نخواهند داشت. دومین مزیت این فریم کراس پلتفرم بودن اون هست به این معنی که کافی است برنامه رو با این فریم ورک توسعه بدیم و بدون اینکه تغییری در کد ایجاد کنیم برنامه رو در سیستم عامل های ویندوز، لینوکس و مک اجرا کنیم.ایراد اصلی این فریم ورک مربوط به ساختار اون هست. این فریم ورک در واقع کدها رو داخل مرورگر اجرا میکنه. پس برنامه ای که با  الکترون ساخته شده عملا مرورگری هست که کاستوم شده. چون مرورگر‌ها برنامه های بسیار سنگین هستن که منابع سیستم رو مصرف می کنن به همین خاطر برنامه های که از الکترون استفاده می کنن هم سنگین و پر مصرف از لحاظ منابع سیستم هستن.در سالهای اخیر مایکروسافت بهینه سازی های زیادی روی وی اس کد انجام داده تا ادیتور سریعتر اجرا بشه و منابع کمتری هم مصرف کنه. اما خوب نمیشه ساختار اصلی اون رو تغییر داد. وقتی الان وی اس کد رو روی کامپیوترم اجرا می کنم ۶۳۰ مگابایت رم مصرف میکنه. باید دقت کنیم که سیستم عامل کاستوم لینوکسی من بعد از اجرا ۳۰۰ مگابایت رم اشغال میکنه. یعنی وی اس کد از یک سیستم عامل کامل هم بیشتر رم اشغال می کنه که این موضوع اصلا قابل دفاع نیست.ما به عنوان برنامه نویس باید از ابزارهای استفاده کنیم که توسط برنامه نویس های خوب با در نظر گرفتن کارآیی بالا نوشته شدن. همونطور که می دونید یک الگوریتم خوب الگوریتمی هست که زمان اجرای پایین و مصرف حافظه پایینی داشته باشه. یعنی سریع اجرا بشه و منابع کمتر مصرف کنه. کل علوم کامپیوتر بر همین مبنا پایه گذاری شده و در همین راستا هم حرکت میکنه. در حالی که ادیتور وی اس کد به این موضوع مهم توجهی نداره و میگه کامپیوترها به اندازه کافی سریع هستن و نیازی نیست الویت اول ما کارآیی و حافظه باشه.ادیتور zedدر همین راستا ادیتور zed اوایل سال ۲۰۲۳ معرفی شد. این ادیتور توسط تیمی که اتم رو طراحی و پیاده سازی کرده بودن در حال گسترش هست. این ادیتور بر خلاف وی اس کد از الکترون استفاده نمیکنه بلکه با زبان Rust توسعه داده شده  و به جای اینکه از CPU برای رندر کردن متن استفاده کنه از GPU برای این کار استفاده میکنه. عملا این ادیتور از روشی که در بازی سازی استفاده میشه برای نمایش بخش های مختلف ادیتور استفاده میکنه. همچنین این ادیتور برای بخش های پردازشی از تمام هسته های CPU استفاده میکنه تا کارآیی رو افزایش بده.در حال حاضر این ادیتور بر روی مک و لینوکس قابل نصب و اجرا می باشد. البته روی کامپیوتر لینوکسی من نتونستم اجرا بگیرم. این ادیتور می تونه گزینه خوبی برای کامپیوترهای باشه که رم کمی دارن و وی اس کد یا هر ادیتور دیگه ای بر روی اون به کندی اجرا میشن. به شخصه بعد از اینکه این ادیتور به بلوغ رسید و پلاگین های مختلفی که برای توسعه لازم داریم رو پشتیبانی کرد حتما با وی اس کد جایگزین می کنم.آموزشها و کتابهای برنامه نویسی در کانال تلگرامی ostadsgoوب لاگ شخصی من </description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Mon, 18 Nov 2024 11:24:39 +0330</pubDate>
            </item>
                    <item>
                <title>بررسی کامل رشته علوم کامپیوتر و مهندسی کامپیوتر</title>
                <link>https://virgool.io/Rocket/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%DA%A9%D8%A7%D9%85%D9%84-%D8%B1%D8%B4%D8%AA%D9%87-%D8%B9%D9%84%D9%88%D9%85-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D9%88-%D9%85%D9%87%D9%86%D8%AF%D8%B3%DB%8C-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-wxho3oas9fq9</link>
                <description>عکس کاور برای بررسی علوم کامپیوتر و مهندسی کامپیوتربا توجه به اینکه در عرفه انتخاب رشته هستیم بسیاری از دانش آموزانی که به رشته کامپیوتر علاقه دارن این سوال براشون پیش میاد که بهتره علوم کامپیوتر بخونن یا مهندسی کامپیوتر؟در این پست تلاش می کنم که به سوال بالا پاسخ بدم. به خاطر اینکه من هنرستان درس خوندم (که به هیچ کس توصیه نمی کنم). مفهومی به نام دانشگاه برای هنرستانی ها تعریف نشده! ما در آموزشکده ها ادامه تحصیل میدم که تحت نظر آموزش و پرورش هست نه وزارت علوم! عنوان مدرکی که من دریافت کردم مهندس تکنولوژی نرم افزار هست که معادل مهندسی کامپیوتر هست.برای پاسخ دادن به سوالات بالا سرفصل‌های هر دو رشته بررسی می کنم و نظرات و تجربیات شخصی خودم رو هم بهش اضافه می کنم. سپس به سوالات رایجی مثل کدوم در بازار کار مورد نیاز هست کدوم برای ادامه تحصیل بهتره و غیره پاسخ میدم.⚠️توی تویتر خیلی از بچه ها در مورد مهندسی و علوم کامپیوتر مردد بودن و سوال می پرسیدن از اونجایی که مرجع خوبی هم برای بچه ها نبود تصیم گرفتم این مقاله رو کار کنم بیش از ۸ ساعت وقت گذاشتم و امیدوارم به بچه کمک بکنه. ⚠️ این پست تلاش نمی کنه بگه کدوم رشته خوبه. هر دو رشته خوبن و تفاوت کمی باهم دارن. در این پست من تلاش کردم شما رو با ماهیت هر دو رشته آشنا کنم تا انتخاب بهتری داشته باشید.⚠️ من فقط نظر و تجربیاتی شخصی خودم رو در این پست نوشتم پس مطمئن باشید که خودتون تصمیم گیرنده نهایی برای آینده اتون هستید. معرفی رشته علوم کامپیوترعلوم کامپیوتر جزو زیر گروه علوم ریاضی و گروه علوم پایه هست. یعنی دانشکده ای که شخص در اون علوم کامپیوتر میخونه دانشکده علوم ریاضی هست. همین مورد تضمین میکنه کلی دورس ریاضی در این رشته وجود خواهد داشت.هدف این رشته به این صورت هست که شما رو دانشمندی (ریاضیدانی) بار بیاره که می تونه از کامپیوتر در راستای حل مسائل خودش استفاده کنه. قطعا شخصی که از کامپیوتر در جهت حل مسئله استفاده می کنه حتما باید برنامه نویسی یاد بگیره و خوب مشخصه که در این رشته آموزش برنامه نویسی وجود داره.یک سری اهداف داخل سرفصلهای مصوب وزارت علوم برای رشته علوم کامپیوتر ذکر شده به خاطر طولانی نشدن پست اینجا قرار نمی دم.این اهداف آموزشی که دانشگاه اون رو وعده و وعید میده به این معنی نیست که دانشگاه از عهده ارائه اون بر میاد یعنی قطعا اگر دانشگاه ها می تونستن حتی به نصف این اهداف برسن الان وضعیت علمی کشور این نبود. ما حتی بین ۵۰۰ دانشگاه برتر جهان هم دانشگاهی نداریم. می دونم که دانشگاه تهران و شریف این اواخر بین ۴۰۰ تا ۶۰۰ هستن ولی کشور به این گندگی با این همه ظرفیت و بودجه و نخبه ۴۰۰ تا ۶۰۰ میتونه فقط یک جوک باشه.پس می تونیم نتیجه بگیریم که رفتن به دانشگاه تضمین کننده این نیست که شما توانایی های ذکر شده در سرفصل مصوب رو به دست خواهید آورد.سرفصلهای علوم کامپیوترمعرفی رشته مهندسی کامپیوتررشته مهندسی کامپیوتر در اکثر دانشگاه ها دارای دانشکده مستقلی هست به نام مهندسی کامپیوتر. ممکنه در بعضی از دانشگاه ها مهندسی کامپیوتر و برق در یک دانشگاه ها باشه. این رشته جزو زیر گروه مهندسی کامپیوتر و  جزو گروه فنی و مهندسی است.دو سرفصل جدید در وب سایت وزارت علوم برای این رشته وجود داره که برمیگرده به سال ۱۳۹۹. یکی به پیشنهاد دانشگاه تهران و یکی به پیشنهاد دانشگاه شریف.در بخش اهداف آموزشی این رشته نوشته شده:‌ ایجاد غرور ملی، خوداتکایی، خودباوری و غیره ولی در کل می تونیم بگیم که اهداف علوم کامپیوتر و مهندسی کامپیوتر و به احتمال زیاد تمام رشته هایی که بچه های ریاضی از اون قبول میشن، دارای اهداف یکسانی هستند.توصیه می کنم سرفصلها رو دانلود کنید و همه این چیزهایی که نوشته شده رو با دقت بخونید.سرفصلهای مهندسی کامپیوترتفاوت این دو رشته در یک بررسی اجمالیدر ایران گروه علوم همیشه بودجه و امکانات کمتری نسبت به مهندسی دریافت می کنه. آزمایشگاههای خوب معمولا تو گروه مهندسی هست. اما همه اینها به دانشگاه شما بستگی داره. همونطور تنها وسیله‌ای که یک دانشجوی کامپیوتر نیاز داره یک عدد کامپیوتر هست که اونم دیگه تقریبا همه دارن. پس به لحاظ امکانات فکر نمی کنم این دو رشته برتری نسبت بهم داشته باشن.به لحاظ محتوای درسی رشته علوم و مهندسی کامپیوتر در یک مورد با هم تفاوت پیدا میکنن ریاضی و الکترونیک. رشته علوم به ریاضی نزدیکه و رشته مهندسی به الکترونیک و سخت افزار. درسهای ریاضی علوم زیاده درسهای الکترونیک و سخت افزاری مهندسی. ریاضی باعث میشه قدرت حل مسئله شما بهتر بشه الکترونیک کمک می کنید لایه های زیرین کامپیوتر رو بفهمید. مثلا وقتی من الان دارم تایپ می کنم یک سیگنالی از سیم های کیبورد به کامپیوتر میره و کلی اتفاق دیگه می افته تا این متن ها رو بتونم ببینم. که این اتفاقات در دروس الکترونیکی و سخت افزاری توضیح داده میشه که پایه اون ها بر میگرده به فیزیک.بیشتر ریاضیاتی که در علوم کامپیوتر وجود داره در مهندسی هم وجود داره اما تعداد واحدهای کمتر یعنی ریاضی در مهندسی خیلی جدی گرفته نمیشه و دروس ریاضی سبک هستن. بیشتر دروس الکترونیک و سخت افزاری هم در علوم وجود داره اما با تعداد واحد کم یعنی علوم هم به الکترونیک و سخت افزار اهمیت نمیده.بررسی سرفصل های مهندسی و علوم کامپیوتربرای مقایسه بهتر این رشته ها بهتر هست سرفصل درسی هایی که در هر دو رشته ارائه میشن رو یک نگاهی بکنیم. که هم شما با درسهایی که قراره بخونید آشنا بشید و هم ببینم در کدوم درسها این دو رشته با هم تفاوت دارن.در هر دو این رشته‌ها شما باید حدود ۱۴۰ واحد درسی پاس کنید تا فارغ التحصیل بشید. هر واحد درسی معادل ۱۶ ساعت کلاس هست. هر ترم تحصیلی هم ۱۶ هفته است. یعنی برای هر واحد یک ساعت در هفته باید سر کلاس برید. حالا اگه یه درس ۳ واحدی داشته باشید دوتا یک و نیم ساعت در هفته برای اون درس اختصاص پیدا می کنه.دسته بندی دروس و واحدهای مورد نیازدسته بندی دروس و واحدهای لازم در هر دستهدر رشته علوم کامپیوتر هم دانشجو قابلیت اخذ تا ۱۴۰ واحد رو داره.دروس عمومیدرس زبان انگلیسی مهمترین درس این گروه هست که فقط ۳ واحد هست.دروس پایهدروس پایه علو م و مهندسی کامپیوتر* فیزیک ۲ در رشته علوم کامپیوتر اختیاری است و دانشجو میتونه مبانی اقتصاد و یا اصول حسابداری رو به جای اون انتخاب کنه. من بودم مبانی اقتصاد رو انتخاب می کردم.برخی از دروس ممکنه در رشته عنوان مختلفی داشته باشه یا تعداد واحد متفاوتی داشته باشه. در این صورت دروس به هم شبیه هستن.منظور از کنکوری این هست که این دروس جزو دروس کنکوری ارشد هر کدوم از رشته ها است.دروس تخصصی علوم کامپیوتردروس تخصصی علوم کامپیوترهمونطور که مشاهده می کنید این جدول پر از دروس ریاضی است. این امر کاملا طبیعی است به خاطر اینکه رشته علوم کامپیوتر زیر گروه علوم ریاضی است و طبعا کلی ریاضی داره.نکته ای که باید به اون دقت کنیم این است که درس مبانی علوم ریاضی، مبانی ترکیبات و مبانی منطق و نظریه مجموعه ها که جمعا ۹ واحد درسی است که در مهندسی کامپیوتر در قالب یک درس ۳ واحدی به نام ریاضیات گسسته ارائه میشه. این دروس بسیار مهم هستن مخصوصا برای ادامه تحصیل. از اونجایی که این دروس ۹ واحد در علوم کامپیوتر هستن یعنی مفاهیم این دروس عمیق بررسی میشن اما در مهندسی کامپیوتر فقط یک درس ۳ واحدی همه این مفاهیم رو پوشش میده که به نظر من کافی نیست.مبانی نظریه محاسبه و نظریه محاسبه دو درس هستن که جمعا ۶ واحد هستن. این دو درس در قالب درسی به نام نظریه زبان و ماشین به تعداد ۳ واحد در مهندسی ارائه میشه. من مبانی نظریه رو با نظریه زبان ماشین معادل هم قرار دادم.بقیه دروس شامل ماتریس ها و جبر خطی، جبر خطی عددی و بهینه سازی خطی همه دروسی هستن که در بازار کار کاربردی ندارن اما برای ادامه تحصیل مخصوصا گرایش هوش مصنوعی جزو واجبات هستن.دروس تخصصی مهندسی کامپیوتردروس تخصصی مهندسی کامپیوترریاضی گسسته رو که توضیح دادم و در علوم کامپیوتر در قالب ۳ درس مجزا خونده میشه.زبان تخصصی درس مهمی هست و بهتر بود در علوم قرار می گرفت. چون زبان انگلیسی کامپیوتر با زبان انگلیسی عمومی متفاوت است.مبانی رایانش امن ادامه درس شبکه است و سیستم های نهفته ادامه درس سیستم عامل هر دو درس جزو دروس ارشد هستن و نباید در سرفصل کارشناسی می بود اما هست!مدار الکتریکی، دیجیتال، سیگنال و ریاضی مهندسی تماما دروس الکترونیکی هستن و به کامپیوتر ربط مستقیم ندارن. این دروس وجود دارن چون در گرایش ارشد رشته کامپیوتر رشته ای است به نام هوش مصنوعی و رباتیکز اون بخش رباتیکز این رشته به این درس ها نیاز داره. من هیچ کامپیوتری رو نمی شناسم که رباتیکز کار کنه.دروس مشترک و شبیه به هم در هر دو رشتهدروس شبیه به هم و مشترک در علوم و مهندسی کامپیوتر* درس کامپایلر و پایگاه داده جزو دروس انتخابی علوم کامپیوتر هستن که به جای اونها دانشجو می تونه دروس دیگه ای رو انتخاب کنه. دوتا از این درسها مهم هستن یک شبکه های کامپیوتری است که جزو دروس کنکوری مهندسی کامپیوتر هست پس کسی که علوم خونده می خواد ارشد مهندسی شرکت کنه بهتره این درس رو بخونه. درس بعدی آنالیز عددی هست که جزو دروس کنکوری علوم هست پس کسی که بخواد ادامه تحصیل در علوم بده بهتره این درس رو بخونه. در علوم این امکان وجود داره که این دروس رو دانشجو به عنوان دروس اختیاری انتخاب کنه که وجود همچین آپشنی خبر خیلی خوبی هست..دروس اختیاری علوم کامپیوتردر هر دو رشته حدود ۳۰ واحد درس اختیاری وجود دارد. رشته مهندسی کامپیوتر به شما اجازه میده از این ۳۰ واحد ۱۵ تای اون رو از گروه الکترونیک و برق انتخاب کنید. رشته علوم هم اجازه میده ۱۵ واحد از سایر دانشکده های گروه علوم انتخاب کنید.درسهای بسیار زیادی در هر رشته وجود دارن و بستگی داره هر ترم دانشکده کدوم یکی از اونها رو ارائه بده. معمولا به دانشجوها توصیه میشه که بسته انتخاب کنن. بسته یعنی اینکه مثلا ده تا درس بخونی که به یک حوزه ربط دارن. مثلا تمام درسهای انتخابی به شبکه یا هوش یا نرم افزار ربط داشته باشه.من تو این جدول با توجه به علاقه خودم ۳۰ واحد انتخاب برای دانشجوی علوم کامپیوتر و در جدول بعدی ۳۰ واحد برای دانشجوی مهندسی کامپیوتر انتخاب کردمدروس اختیاری علوم کامپیوتردروس اختیاری مهندسی کامپیوتردروس اختیاری مهندسی کامپیوترپاسخ به سوالات رایجدانشگاه خوب علوم کامپیوتر بخونم یا دانشگاه سطح پایین مهندسی کامپیوتربه نظر من دانشگاه خوب علوم خوندن خیلی بهتره. مخصوصا اگه جزو ۲۰ دانشگاه برتر کشور باشه. وضعیت کلی دانشگاه خیلی خیلی مهمتر از رشته تحصیلی شماست. دانشگاه خوب یعنی اساتید خوب، یعنی همکلاسی های باهوش، یعنی فضای علمی خوب. مخصوصا وقتی دو رشته خیلی مشابه وجود داره انتخاب دانشگاه خوب خیلی منطقی به نظر میاد.در کدوم رشته بازار کار زیادی وجود داره؟برای بازار کار عنوان مدرک شما مهم نیست! مهم نیست مدرک شما علوم کامپیوتر باشه یا مهندسی کامپیوتر مهم این هست که شما چقدر مهارت های لازم برای انجام دادن کار رو دارید. به عنوان مثال اگر شخصی برای برنامه نویسی وب اقدام میکنه باید رزومه مناسب در این زمینه داشته باشه. یعنی تکنولوژی های این حوزه رو بلد باشه چندتا وب سایت ساخته باشه و غیره. و یا به عنوان مثالی دیگر اگر شخصی برای عنوان شغلی یادگیری ماشینی اقدام می کنه باید تکنولوژی های حوزه هوش مصنوعی رو کار کرده باشه و پروژه های مرتبط داشته باشه.دیده شده حتی اشخاصی با مدرک عمران، الکترونیک یا مکانیک در بهترین شرکت های نرم افزاری ایران مثل کافه بازار و دیجی کالا به عنوان برنامه نویس کار گرفتن، چرا؟‌ چون کارهای فعالیت های مرتبط با برنامه نویسی انجام دادن که منجر به داشتن رزومه قوی شده.کدوم رشته برای ادامه تحصیل در مقطع ارشد بهتره؟بازار ارشد مهندسی کامپیوتر از علوم داغتره. یعنی پذیرش بیشتری داره، گرایش های بیشتری داره منابع کنکوری خیلی خوبی داره تمامی اینها باعث شده شرکت کننده مهندسی کامپیوتر هم خیلی بیشتر از علوم کامپیوتر باشه. اما دو گرایش خیلی مهم در مقطع ارشد وجود داره یکی مهندسی نرم افزار هست و دومی هوش مصنوعی. گرایش مهندسی نرم افزار در علوم با نام سیستمهای کامپیوتری و در مهندسی با نام مهندسی نرم افزار، گرایش هوش مصنوعی در علوم با نام هوش مصنوعی و محاسبات نرم و در مهندسی با عنوان هوش مصنوعی و رباتیکز دانشجو پذیرش میکنه. دانشگاههای خوبی مثل تهران، شریف، امیرکبیر برای هر دو رشته در گرایش های مختلف پذیرش دارن اما در کل پذیرش مهندسی بالاست.میزان پذیرش ارشد بیشتر از علوم است ولی میزان شرکت کننده اون هم بیشتر است. تقریبا ده دانشگاه برتر کشور از هر دو این رشته دانشجو پذیریش میکنن. اگر شخص از دانشگاه های برتر کشور قبول نشه ارشد خوندش بی فایده است. (نظر شخصی)نکته مهم این هست که بچه های علوم کامپیوتر و مهندسی میتونن در ارشد یکدیگر شرکت کنن. یعنی میشه کارشناسی رو علوم خوند ارشد رو یکی از گرایش های مهندسی قبول شد و بالعکس. بیشتر درسهای کنکوری مهندسی کامپیوتر در علوم کامپیوتر ارائه میشه اما بیشتر درسهای کنکوری علوم در مهندسی ارائه نمیشه. به خاطر همین بیشتر بچه های علوم کامپیوتر تو ارشد مهندسی شرکت میکنن و رتبه هم میارن.کدوم رشته برای مهاجرت تحصیلی بهتر است؟از اونجایی که ۹۹ درصد از دانشجوهای ایرانی به فکر مهاجرت هستن ولی فقط یک درصد از اونا میتونن مهاجرت کنن باید خدمتتون عرض کنم که فقط دانشجوهای تاپ میتونن مهاجرت کنن و فقط دانشجوهای تاپ میتونن در رقابت سنگین با دنیا دووم بیارن.برای مهاجرت تحصیلی باید مهاجرت از طریق کارشناسی رو فراموش کنید. ارشد در همه جای دنیا پولی هست و ۹۹ درصد از دانشجوهای ایرانی این پول رو ندارن. اگر شخصی پول داره کافیه دانشگاه انتخاب کنه ساکش رو ببنده و بره. اما از اونجایی که ۹۹ درصد این پول رو ندارن بریم سراغ راه حل بعدی.راه حل بعدی به این صورت است که شما یک ارشد در ایران می خونید سپس برای مقطع دکترا مهاجرت می کنید. از اونجایی که دکترا در خارج شغل حساب میشه لذا برای درس خوندن پولی به دانشگاه پرداخت نمیشه. در دکترا شما تقریبا کلاس ندارید و همیشه مشغول تحقیق و کار در محیط دانشگاه هستید.اگر دانشجویی یا هر شخصی که ارشد داره و میخواد برای مقطع دکترا اقدام کنه اول باید استاد پیدا کنه. خوب شما چطوری استاد پیدا می کنی؟‌ در مقطع ارشد در هر حوزه ای که تحقیقات انجام دادی و مقاله نوشتی به دنبال استاد می گردی (به وب سایت دانشگاهها مراجعه می کنید) بعد از پیدا کردن استاد رزومه خودتون رو برای استاد می فرستید اگر استاد به شما نیاز داشت و از تحقیقات شما راضی بود شما رو پذیرش میکنه سپس دانشگاه برای شما ویزا میفرسته و شما پرواز می کنید و میرید.از جمله عواملی که باعث میشه شما شانس پذیرش بالایی داشته باشید میشه به مقالات علمی، دانشگاه خوب، داشتن اساتید شناخته شده در دنیا اشاره کرد. یعنی عنوان تحصیلی شما هیچ مهم نیست.چند توصیه مهم برای موفقیت تحصیلیهر رشته ای که انتخاب می کنید خوب بخونید علوم یا مهندسی مهم نیست شما دانشجو هستید و کارتون درس خوندن هست به نحو احسن درس خودتون رو بخونید. فقط جزو حفظ نکنید. در بدترین حالت هر درسی رو به عنوان یک تمرین برای افزایش قدرت مغزتون در نظر بگیرید. درسها رو سعی کنید بهم ربط بدید و یک شبکه ذهنی درست کنید. بعد از یاد گرفتن درس حتما سعی کنید به کاربردهاش فکر کنید. زیاد کد بزنید خیلی زیاد. زبان انگلیسی رو قوی کنید و تمام آموزشهای خوب رو نگاه کنید(معمولا از یوتیوب) فراموش نکنید که ۴ سال از عمرتون رو وسط گذاشتید و این اصلا زمان کمی نیست. اگر ماهی ده میلیون حساب کنید ۴۸۰ میلیون هزینه کردید پس حواستون رو خوب جمع کنید که دارید چیکار می کنید.دروس پایه رو جدی بگیرید یکی از دلایلی که من طرفدار علوم هستم به خاطر بهایی هست که علوم به دروس پایه میده. اگر دروس پایه ریاضیات شما ضعیف هست حتما اونو تقویت کنید هر کلاسی برید ریاضی لازم خواهید داشت. سعی کنید این درسها رو فقط پاس نکنید اینها مثل تمریناتی برای تقویت ذهنتون و افزایش قدرت تفکر و همچنین افزایش قدرت حل مسئله در نظر بگیرید. صرفا فقط به بازار کار و پول فکر نکنید.نظم داشته باشید خود الانت رو برای خود آینده ات فدا کن این معنی واقعی نظم هست (دکتر جردن پیترسون). نظم به این معنی نیست که مثل ربات زندگی کنی نظم یعنی اینکه از لذت موقت بگذری و خودت رو در شرایطی قرار بدی که در آینده احتمال موفق شدن داشته باشی. اگر می خوای فیلم ببینی باید به این لذت زودگذر غلبه کنی و درس بخونی،‌اگه می خوای در شبکه های مجازی وقتت رو تلف کنی باید به این لذت موقت غلبه کنی و درس بخونی. این فداکاری ها هستن که بهت اجازه میدن به یک نسخه بهتر از خودت تبدیل بشی.روابط اجتماعی خودتون رو در حد معقول و خوب نگه دارید وقتی دانشجو شدید نرید تو خوابگاه یا خونه صبح تا شب فیلم ببینید!! دوستان خوب و باهوش که آرزوها و اهدافی بزرگی دارن رو پیدا کنید و با اونها وقت بگذرونید. اگر اردوی تفریحی در دانشگاه بود حتما شرکت کنید و کلی عکس یادگاری بگیرید. اگر کنفرانسی بود حتما شرکت کنید و از تجربیات ارائه کننده استفاده کنید. از اشخاص بی نظم، معتاد، افسرده، بی انگیزه و خیلی روشنفکر دور باشید وگرنه همه انرژیتون رو از دست خواهید داد.در نهایت برای تمامی دانش آموزان و دانشجویان کشورم آرزوی موفقیت دارم.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Mon, 15 Aug 2022 22:39:19 +0430</pubDate>
            </item>
                    <item>
                <title>تجربه مصاحبه به عنوان مدرس برنامه نویسی</title>
                <link>https://virgool.io/@sayeidgholami/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%D9%85%D8%AF%D8%B1%D8%B3-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-vzvdxino0obd</link>
                <description>سال ۹۵ بود که تصمیم گرفتم بعنوان مدرس آنلاین پایتون فعالیت خودم رو شروع کنم. در این سالها با افراد بسیار مختلفی کار کردم. برای شاگردهام هم تدریس کردم هم پروژه نوشتم و هم سعی کردم براشون دوست خوبی باشم. از اون روزها حدود ۶ سال می گذره و من تجربیات زیادی در این زمینه کسب کردم. با فراگیر شدن کرونا و آنلاین شدن خیلی از کسب و کارها این فرصت برای خیلی ها پیش اومد که تو شهر خودشون و خونه خودشون بتون با شرکت ها همکاری کنن. من هم بعد از کمی فکر کردن گفتم ایده بدی نیست که یک رزومه ای تنظیم کنم و یک درآمد ثابت از طریق دورکاری داشته باشم.با توجه به اینکه کارهای من در حوزه های مختلف و پراکنده بود تنظیم کردن رزومه اصلا برای من کار ساده ای نبود و در رزومه ام تنها چیزی که نوشتم این بود که از سال ۹۵ به صورت فریلنسر پروژه نویسی و تدریس می کنم.رزومه ام رو توی سایت جابینجا تنظیم کردم و برای ۸ شرکت فرستادم.  از این ۸ شرکت ۲ تا توسعه دهنده مبتدی جنگو می خواستن،‌ یکی برنامه نویسی پایتون، ۲ تا مدرس پایتون و ۳ تا هم کارآموز پایتون و جنگو.من رزومه رو ۱۵ روز قبل فرستادم که دوتا از اون شرکت ها هنوز رزومه رو بررسی نکردن!! چهارتا تماس نگرفتن. اما دیروز یکی از این شرکت ها که یک موسسه آموزش برنامه نویسی بود با من تماس گرفت تا زمانی رو برای مصاحبه تنظیم بکنیم.هر شرکتی که رزومه خودتون رو براش فرستاد در صورتی که رزمه شما رو نگاه کنن جابینجا اینو به شما ایمیل می کنه که ویژگی بسیار خوبیه. شروع مصاحبهیکی از نکاتی که برای من عجیب بود استفاده از نرم افزار Adobe Connect برای مصاحبه بود. چون دیگه همه ما می دونیم که مصاحبه معمولا از طریق اسکایپ انجام می پذیره و قطعا دلیل بسیار خوبی هم داره. اسکایپ هم کیفیت خوبی داره هم قطع وصلی خیلی پایینی داره و همین اینکه استفاده ازش راحته و تقریبا شبیه چت اپلیکشن‌های معمولی مثل واتس اپ و تلگرام هست. بعد از کرونا گوگل میت هم معرف شد چون که تقریبا همه اکانت جیمیل دارن. بعد از اینکه لینک مصاحبه رو تو ادوب کانکت زدم و وارد صفحه مصاحبه شدم هیچی نبود. یک بخش عضویت بود! و یک بخش مهمان. راهنمایی خاصی هم از طرف فرستنده لینک برای من ارسال نشده بود.اسمم رو تو بخش مهمان نوشتم و دکمه Join رو زدم که دیدم ۵ نفر در حال مصاحبه هستن. چون مصاحبه گروهی بود من همون اول فهمیدم که با یک شرکت سطح پایینی طرف حساب هستم و اصلا حس خوبی نگرفتم. همه خودشون رو معرفی کردن و البته چون من با ادوب کانکت کار نکرده بودم یه ۵ دقیقه ای طول کشیده تا بفهمم چطوری وب کم و میکروفون رو تنظیم کنم و در نهایت من هم خودم رو معرفی کردم. دو نفر دانشجو بودن هیچ تجربه تدریسی نداشتن و یک نفر هم اصلا برنامه نویسی بلد نبود و در زمان دانشجویش ریاضی تدریس کرده بود! دومین علامتی که نشون میداد تو جای اشتباهی هستم. اما یکی از اهداف من برای فرستادن رزومه به شرکت های مختلف همین قرار گرفتن در جو مصاحبه هست. به نظر من کار خیلی جالبیه و نهایتا همه باید از یه جایی شروع کنن و این نقطه شروع برای همه هست.وقتی نوبت به من رسید گفتم که کار من تدریسه حدود ۶ ساله تدریس می کنم برای سنین مختلف تدریس کردم و بیشتر کسانی که باهشون کار کردم ایرانی های مقیم خارج هستن. مصاحبه کننده بعد از شنیدن همه اینا گفت پس برای بچه ها تدریس نکردید!! یعنی اینکه تجربه شما برای ما پشم هم نیست. و البته که من برای بچه ها هم تدریس کردم. بقیه مصاحبه معرفی شرکت بود که کار بسیار خسته کننده ای بود. گرچه مصاحبه کننده بنا بر وظیفه اش با آب تاب روش تدریس آنلاین خودشون رو توضیح میداد اما خلاصه اش رو من بخوام به شما بگم روش تدریسشون مثل دانشگاه پیام نور بود. یعنی شما راهنما هستید و بچه ها برای رفع اشکال میان پیش شما و حالا یه سری استفاده از تکنولوژی های نوین هم به کار اضافه شده بود. یعنی به سوالات بچه‌ها در تالار گفتمان پاسخ بدید و ماهی هم یک بار از شخص موفق دعوت کنیم بیاد برای بچه ها حرف بزنه. کلا واسه همه اینا چنتا اسم بذاری و تو اسلاید خوشگل کنی و چنتا شکل هم بکشی مثل این هست که بمب اتم رو کشف کردی ولی واقعا اتفاق خاصی نیفتاده همون دانشگاه پیام نور خودمونه که آنلاین شده.البته هیچ کدوم از تفکراتم رو به روی مصاحبه کننده نیاوردم و اتفاقا تعریف و تمجید هم کردم ??. ای ایرانی دورو .?پرداختیبعد از معرفی نحوه کار رسیدم به بخش جالب کار یعنی پرداختی. نمی دونم چرا وقتی مصاحبه کننده ها به بحث پول که میرسن زود میخوان سرشو هم بیارن! اگه کسانی که تجربه مصاحبه دارن حتما متوجه شدن که وقتی بحث پول میشه مصاحبه کننده صدای خودش رو کم میکنه و آروم میگه که پرداختی چقدر خواهد بود انگار که می خواد اصرار دولتی رو فاش کنه!با اینکه نحوه پرداختی گنگ بود ولی من خلاصه اش رو به شما می گم. شما به ازا هر دانش آموز ۱۰۰ هزار تومان در ماه دریافت می کنید. یعنی اگر شما ۱۰ دانش آموز داشته باشید ۱ میلیون در ماه دریافت می کنید. حالا سوال اینه، برای هر دانش آموز چقدر باید وقت بذارید؟ به ما گفته بودن که در ماه باید ۴۵ ساعت تدریس کنیم ولی نگفته بودن این ۴۵ ساعت برای یک دانش آموز هست، ده دانش آموز هست یا صد دانش آموز!چون پرداختی به ازا دانش آموز بود و نه ساعت کاری، و از اونطرف چون به شما ساعت کاری در ماه اعلام شده بود کلا مدرس سردرگم میشد که حالا چقدر در ماه درآمد خواهد داشت و چند ساعت کار خواهد کرد.به این ماهی ۴۵ ساعت اگر کمی دقت کنید متوجه میشد که شبیه همون هفته ای ۴۴ ساعت کار در هفته قانون کار خودمونه که فقط روند شده. ۵۰ زیاده ۴۰ کمه ۴۵ خوبه.اگر فرض کنیم اون ۴۵ ساعت برای ده دانش آموز در نظر گرفته شده بود می تونیم یک میلیون رو به ۴۵ تقسیم کنیم و متوجه بشیم که هر ساعت کاری چقدر ارزش داره که به عدد ۲۲ هزار تومن در ساعت می رسم. به نظر مبلغ خوبی میاد! همچنین اگر ۴۵ ساعت رو تقسیم بر ۱۰ بکنیم یعنی تعداد دانش آموزان متوجه میشیم که برای هر دانش آموز باید ۴.۵ ساعت در ماه وقت بذاریم. به نظر کار زیادی سختی نمیاد!اما مصاحبه ادامه داره ...مصاحبه کننده گفتن که برای هر دانش آموز باید ۸ ساعت در ماه زمان بذارید. یعنی اگر ده دانش آموز داشته باشیم ۸۰ ساعت در ماه باید تدریس کنیم. اگر یک میلیون رو تقسیم ۸۰ بکنیم به عدد 12 هزار و پونصد تومن میرسیم یعنی هر ساعت شما ۱۲ هزار پونصد تومن برای کارفرما ارزش داره.خوب ببینیم قانون کار چی میگه حداقل دستمزد هر ساعت کار کارگر ۱۹ هزار تومن اعلام شده. توجه می کنیم که این مبلغ کف دریافتی بدون هیچ گونه تخصص و مزایا می باشد.جدول حقوق قانون کاراما هنوز مصاحبه ادامه داره و همه چیز داره بدتر و بدتر میشه.مصاحبه کننده فرمودند که دریافتی شما شامل ده درصد مالیات هست (مبارکه) یعنی هر ساعت کاری شما شد ۱۱ هزار و دویست و پنجاه تومن بعد فرمودند که این ۸ ساعت فقط برای ارتباط مستقیم با دانش آموز هست یعنی اینکه شما در وبینار و سمینار و پاسخ دادن به پرسش های دانش آموزان شرکت می کنید و ماهی یه بار معلم ها دور هم جمع میشن یعنی جمعی از بازنده ها به چهره هم نگاه میکنن در حالی که میدونن هیچ ارزشی به کار خودشون قائل نیستن و نهایتا اینجا هستن تا پول کافی شاپ رو جور کنم. و  همه اینها جزو ساعت های کاری بدون حقوق شما هست. (الا برکت الا) بعد از اتمام مصاحبه یا بهتر بگم معرفی موسسه پیغامی برام اومد که میگفت موسسه علاقمند هست با من همکاری کنه که من عدم تمایل خودم رو برای همکاری رو اعلام کردم. البته باید بگم که به نظر من این پیغام برای همه فرستادن شده بود و از همه دعوت به همکاری کرده بودن چون در نهایت نیروی کار تقریبا رایگان محسوب میشه. تازه سه هفته هم باید آموزش میدید یعنی سه هفته وقت گرانبهای خودتون رو صرف آموزش کاری میکردید که ساعتی یازده تومن ارزش داشت!نتیجه گیریاگر شخصی هیچ گونه تخصصی نداشته باشه و وقت آزاد خیلی زیادی داشته باشه شاید بهتر وارد این کارها بشه. اما جونترها باید دقت کنن که چیکار میکنن و وقتشون چطوری میگذره، باید دقت کنن که در چه کاری تجربه و رزومه کسب میکنن. سه چهار ماه کارآموزی رایگان در یک شرکت معتبر خیلی بهتر از بیگاری در کار آموزش هست.کلا موسسات آموزشی همینطوری هستن هر ساعت کاری مدرس حدود ده هزار تومن ارزش داره. به خاطر همین کسانی که در این مجموعه‌ها مشغول به کار هستن معمولا اشخاصی هستن که تجربه و دانش کافی برای انجام این کار رو ندارن و مقطعی وارد این حرفه شدن تا وقتی که یک شغل بهتری پیدا کنن. همچنین مدیران و مسولین این موسسات هر روز فربه تر و پولدارتر میشن و ماشین های گرون قیمت سوار میشن بدون داشتن هیچ گونه تخصص یا دانشی. اگر پدر و مادری هستید که به فکر آینده بچه های خودتون هستید قطعا با یک مدرس با تجربه و کار بلد همکاری کنید.  حتی می تونید از پکیج ها آموزشی چه پولی و چه رایگان که توسط برنامه نویسان مجرب تولید میشه استفاده کنید. در نهایت انتخاب این موسسات باید انتخاب آخر هر شخصی برای آموزش باشه. نکته آخر فراموش نکنید که هزینه ثبت نام در این موسسات اصلا هم کم نیست.  </description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Thu, 12 May 2022 15:34:46 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی و بررسی کتاب Python 3 By Example</title>
                <link>https://virgool.io/@sayeidgholami/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%88-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%DA%A9%D8%AA%D8%A7%D8%A8-python-3-by-example-teb8skizm5l3</link>
                <description>کاور کتاباین کتاب توسط Nichola Lacey نوشته شده که یک معلم برنامه نویسی در انگلستان هست. در مقدمه کتاب ایشون اشاره می کنه که به خاطر اینکه از کتابهایی که به صورت جامع در زمینه برنامه نویسی نوشته میشن خوشش نمی اومده به همین خاطر تصمیم گرفته کتابی کاربردی و جمع و جور بنویسه. مقدمه کتاب با نگارش بسیار تنز و جالب نوشته شده است که قدرت نویسنده در نویسندگی، شوخ طبعی و همچنین اعتماد بنفس اون رو نشون میده. کتاب از دو بخش تشکیل شده بخش اول مقدمات رو آموزش میده و بخش دوم حالت پروژه نویسی داره.در این کتاب هیچ چیزی عمیق توضیح داده نمیشه. کتاب به این صورت هست که یک مفهمومی رو در یک یا دو خط به شما توضیح میده بعد سناریوهای رایجی که از اون مفهوم میشه استفاده کرد رو در قالب مثال به شما توضیح میده.در انتهای بخش تمریناتی وجود داره که انتظار میره خواننده بتونه اونها رو حل کنه. پاسخ تمرینات نیز در آخر هر فصل وجود داره.در جای جای کتاب اشاره می شه که هر وقت خواستید می تونید  برگرید عقب و مثالها و نکات رو مرور کنید که حس خوبی قطعا به خواننده میده و توصیه و اشاره به این نکته به این معنی هست که لازم نیست همه چیز رو در همون اول کار یاد بگیرید.با اینکه این کتاب برای مبتدیها نگارش شده اما در این کتاب به ماژول array اشاره شده که اصلا حدس نمیزدم در پایتون وجود داشته باشه. برای انجام کارهای مربوط به آرایه معمولا از پکیج NumPy استفاده می کنیم.این کتاب برای کسانی که آشنایی خوبی با پایتون دارن اما هنوز دست به کد نشدن کتاب بسیار خوبی می تونه باشه.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Thu, 05 May 2022 12:53:39 +0430</pubDate>
            </item>
                    <item>
                <title>تجربه ناموفق صعود به کوه سبلان</title>
                <link>https://virgool.io/@sayeidgholami/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%86%D8%A7%D9%85%D9%88%D9%81%D9%82-%D8%B5%D8%B9%D9%88%D8%AF-%D8%A8%D9%87-%DA%A9%D9%88%D9%87-%D8%B3%D8%A8%D9%84%D8%A7%D9%86-lkb68wz5ymhv</link>
                <description>به عنوان کسی که بیشتر ساعات روز خودش رو با کامپیوتر و گوشی سپری می کنه و تقریبا تحرکش در حد صفر هست و ساعت ۴ صبح می خوابه و دو بعد از ظهر بیدار میشه و روزی یک یا دو وعده غذا می خوره، اما از اونجایی که در اردبیل زندگی می کنه و هر روز از پنجره خونه اش سبلان رو میبینه تصمیم گرفتم که با یک گروه کوهنوردی و چند نفر از دوستان به کوه سبلان صعود کنم. در این پست تجربیات شخصی خودم رو به اشتراک گذاشتم.حرکت به سمت سبلان قرار بود ساعت ۱۰ شب پنج شنبه از اردبیل به سمت شابیل حرکت کنیم. شابیل یک منطقه توریستی با آب های گرم در دامنه کوه سبلان می باشد. شابیل آخرین نقطه ای هست که شخص می تونه با ماشین شخصی خودش بره. در این نقطه بعضی از اشخاص ترجیح می دن که پیاده به سمت پناهگاه حرکت کنن که در ارتفاع ۳۸۰۰ متری واقع شده. مزیت مهمی که پیاده رفتن به سمت پناهگاه دارد این هست که بدن شما برای صعود آماده تر می شود هم به لحاظ استقامتی و مهم تر از اون به لحاظ وجود فشار هوای بالا. اگر تیمی بخواد به این شکل صعود کنه باید یک روز مسیر شابیل تا پناهگاه رو طی کنه و شب رو در پناهگاه یا اتاق های اجاره ای پناهگاه سپری کنه و صبح زود مثلا ساعت ۲ یا ۴ اقدام به صعود کنه. اما به دلیل وجود کرونا سرپرست تیم ما ترجیح داد که از این پروسه استاندارد پیروی نکنه. ما شب پنج شنبه ساعت ۱۰ به سمت شابیل حرکت کردیم و بعد با استفاده از ماشین هایی مثل پاترول و لندروور که می تونن راههای کوهستانی رو طی کنن به سمت پناهگاه حرکت کردیم. مسیر شابیل تا پناهگاه با ماشین حدود ۲۰ الی ۳۰ دقیقه می باشد. ما ساعت ۳ صبح جمعه در پناهگاه دور هم جمع شدیم تا صعود رو شروع کنیم.شروع صعودبعد از کمی گفتگو و جمع کردن بچه ها ساعت ۳ و ۳۰ دقیقه صبح روز جمعه صعود شروع شد به دلیل ترافیک انسانی که وجود داشت و همچنین به دلیل اینکه خیلی از بچه از جمله خودم اولین بار بود می خواستیم صعود کنیم سر قدم یا راهنمای گروه به آرامی حرکت می کرد. فاصله پناهگاه تا قله به لحاظ ارتفاع حدود ۱۱۰۰ متر می باشد. اما اگر شما قدم شمار بزنید حدود ۵ کیلومتر مسافت طی می کنید تا به قله برسید. حدود ۳۰۰ متر (به لحاظ ارتفاع) طی نکرده بودیم که حال چند نفر خراب شد و شروع به بالا آوردن کردن که در نهایت دو نفر از اونها مجبور به برگشتن به پناهگاه شد. دلیل بالا آوردن، سرگیجه و دل درد به خاطر وجود فشار هوا در کوه است. خراب شدن حال منارتفاع کوه سبلان حدود ۴۸۰۰ متر از سطح دریا می باشد. حال من بسیار خوب بود و هیچ مشکلی نداشتم و چون حال بعضی از بچه ها خراب شده بود و به پناهگاه برگشته بودن فکر می کردم که من تونستم فشار هوا رو تحمل کنم و بدن من به این هوا عادت کرده پس مشکلی پیش نمیاد و خودم رو در قله تصور می کردم. اما در ارتفاع ۴۳۰۰ متر از کف دریا بودم که در عرض یک ثانیه سرم گیج رفت و درد دل گرفتم می خواستم بالا بیارم اما نمی تونستم. ادامه دادم در ارتفاع ۴۴۰۰ اولین بار بالا آوردم و حالم خراب شد. املتی که ۱۲ ساعت پیش خورده بود هنوز هضم نشده بود و من همشو بالا آوردم. بیشتر که ادامه می دادم نه تنها حالم بهتر نمی شد بلکه بدتر می شد. و نهایتا در ارتفاع ۴۵۰۰ دو بار دیگه بالا آوردم. و تنها با ۳۰۰ متر اختلاف از قله تصمیم به برگشتن گرفتم. در حین برگشت تازه فهمیدم که چی مسیر بلندی رو طی کردم. بدین ترتیب بدون دیدن قله و دریاچه ای که بر روی اون وجود داره سرخورده، ناراحت و تنها به سمت پناهگاه برگشتم.نکات پایانیبه نظر من دلیل اصلی که من نتونستم قله سبلان رو فتح کنم بر میگرده به ضعف بدنی و ضعف ارادی خودم اما رعایت نکات زیر می تونست بسیار کمک کننده باشه. این نکات رو برای کسانی که اولین بار می خوان صعود کنن می نویسیم تا شاید در آینده بهشون کمک بکنه.به نظر من بهترین روش برای صعود، صعود دو روزه هست. به این ترتیب که شما روز اول از سمت اردبیل به سمت شابیل حرکت می کنید و سپس پیاده به سمت پناهگاه حرکت می کنید. شب رو پناهگاه سپری می کنید و صبح زود شروع به صعود می کنید. در این روش هم کوهی که قرار هست فتح کنید رو می بینید و همچنین گذراندن یک شب در ارتفاع می تونه بسیار به بدن کمک کنه تا به فشار هوا عادت کنید. در کوهنوردی اصطلاحی هست به نام هم هوایی که در اون شما تلاش می کنید که به هوای کوه عادت کنید.آمادگی قبلی: همیشه باید قبل از صعود به سبلان یا هر کوه مرتفع دیگه ای باید آمادگی قبلی داشته باشید. اگر شما زندگی استانداردی ندارید خوب نمی خوابید، خوب تغذیه نمی کنید شاید بتونید پیاده روی و طبیعت گردی بکنید اما سبلان و کلا کوهنوردی مرتفع داستانش بسیار متفاوت است. سبلان به سرعت می تونه شما رو از پا دربیاره و براحتی اینکار رو انجام میده پس تمامی نکات مثل اینکه چی قبل از صعود بخورید و یا نخورید مقدار آب، لباس، کرم ضد آفتاب و هر موردی که سرپرست تیم قبلا به شما اعلام کرده بدون هیچ گونه کمی و کاستی رعایت کنید. من کرم ضد آفتاب نبرده بودم و الان صورتم کلا سوخته و باید سوزشش رو تحمل کنم.  تجهیزات: حتما تجهیزات خودتون مثل کوله و کفش رو چندین بار در مسیرهای دیگه امتحان بکنید تا از راحتی اونها اطمینان کنید و خوب رو بدنتون تنظیم کنید. من کفش و کوله خودم اولین بار در سبلان استفاده کردم که منو اذیت کردن پس شما این اشتباه رو نکنید. به نظر من حمل تجهیزات اضافه در سبلان کاملا بی فایده است. برنامه های هواشناسی معمولا بسیار دقیق هستن و به شما نشون می دن که چقدر باید لباس گرم بردارید. من کلی لباس اضافی داشتم که هیچ کدوم رو استفاده نکردم و همین بار اضافی صعود رو برای من سخت می کرد. به نظر من هر صد گرم بار اضافه در کوه معادل یک گیلوم گرم بار اضافی برای شخص خواهد بود. پس با توجه به وضعیت آب و هوایی تجهیزات خودتون رو درست انتخاب کنید. خیلی از کسانی که من می شناسم و صعود موفق داشتن تمامی تجهیزات خودشون رو در پناهگاه می ذارن و بدون کوله فقط با یک کیف کمری که شامل آب و مقداری خوراکی هست و فقط با لباس مناسبی که پوشیدن اقدام به صعود می کنن به نظر من این بهترین روش هست و کوله فقط بار اضافی هست که شما با خودتون حمل می کنید. تنها چیزی که برای سرپرست و سرقدم گروه مهم هست سلامتی شما هست و نه فتح قله توسط شما پس اگر کمی حال شما خراب بشه قطعا سرپرست و سرقدم به شما توصیه می کنن که برگردید. شخص باید خودش به حال خودش نگاه بکنه و تصمیم بگیره و نه حرفهای دیگران. خیلی از کسانی که قله رو فتح کردن مسیر ۱۵ دقیقه ای رو در ۳ ساعت طی کردن که به همه اونها توصیه شده بود که بر گردن. پس رعایت حال گروه رو نکنید پس تا جایی که امکانش هست استراحت کنید و بعد به حال خودتون نگاه کنید که آیا می خواید ادامه بدید یا نه. کسانی که مسیر ۱۵ دقیقه رو در سه ساعت طی کردن اما در نهایت قله رو فتح کردننکته آخر اینکه خودتون رو به لحاظ روانی خوب آماده کنید به هیچ کس متکی نباشید و فقط به نیروی درونی خودتون ایمان داشته باشید. تا جایی که می تونید به دیگران روحیه بدید و اگر می تونید به کسی کمک کنید حتما اینکار رو بکنید.وقتی حال من خراب شد خیلی از افرادی که از گروه ما نبودن تلاش می کردن که به من کمک کن من از همه اونها تشکر می کنم. از گروه خودمون هم اون کسی که کمی به من روحیه داد مشتمون رو به هم زدیم و از اون کسی که به من قرص داد تا بالا نیارم ولی بازهم بالا آوردم از اونها هم تشکر می کنم. در این پست تجربیات شخصی خودم از صعود ناموفقم به قله سبلان رو با شما به اشتراک گذاشتم امیدوارم که نکات مهم اون رو در نظر داشته باشید و برای صعودهای خودتون استفاده کنید. اگر سوالی یا نظری داشتید می تونید در بخش نظرات درج کنید.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Sun, 25 Jul 2021 02:48:01 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش  tkinter - اولین برنامه جمع دو عدد!</title>
                <link>https://virgool.io/coderlife/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-tkinter-%DA%A9%D8%AF-%D9%85%D8%A7%DA%98%D9%88%D9%84%D8%A7%D8%B1-evng16ahhtad</link>
                <description>پس از نصب و راه اندازی tkinter در این پست نحوه نوشتن یک برنامه ساده رو می خوام آموزش بدم. برنامه بسیار ساده خواهد بود. می خواهیم برنامه ای بنویسیم که دو عدد از کاربر دریافت کند و حاصل جمع آن را نمایش دهد.ابتدا برنامه را به صورت کنسولی می نویسیم و سپس گرافیکی. هدف من از نوشتن هر دو نسخه برنامه به این دلیل است که شما خواننده محترم درک کنید که برنامه نویسی و یا حل مسئله هیچ ربطی به روش تعامل کاربر با برنامه نداره. کاربر می تواند یا از طریق ترمینال، یا از طریق یک صفحه تاچ یا از طریق نگاه کردن و یا به هر نحوی با برنامه ارتباط برقرار کند. در برنامه نویسی هدف اصلی ما حل مسئله بوده و هدف بعدی ما فراهم آوردن محیط مناسب برای کاربر می باشد.بخش کنسولی برنامه اگر فرض کنیم محیط تعامل برنامه کنسولی است برنامه دریافت دو عدد و جمع آن را با زبان پایتون می توانیم به صورت زیر بنویسیم:number1 = int(input(&amp;quotEnter First number: &amp;quot))
number2 = int(input(&amp;quotEnter Second number: &amp;quot))
result = number1 + number2
print(&amp;quotResult is&amp;quot, result)اگر در برنامه بالا اعداد ۲ و ۳ را به عنوان ورودی وارد کنیم خروجی به صورت Result is 5 چاپ خواهد شد. در این برنامه بدون اینکه درگیر ایجاد دکمه و برچسب و غیره باشیم به راحتی توانستیم دو عدد را دریافت و حاصل آن را نمایش دهیم و زیبای محیط کنسولی هم راحتی نوشتن برنامه برای این محیط است. در این محیط تمرکز ما بر روی حل مسئله است.گرچه برنامه بالا به درستی کار می کند اما چند ایراد دارد.اگر کاربر به جای عدد حروف وارد کند خطای ValueError رخ می دهد پس ما باید این خطا را مدیریت کنیمکد بالا ماژولار نیست به این معنی که اگر بعدا بخواهیم این برنامه را گسترش دهیم و شبیه ماشین حساب کنیم که علاوه بر حاصل جمع، حاصل تفریق و ضرب و .. را محاسبه کند این امکان در نظر گرفته نشده است.اگر در ابتدای کار زمان زیادی صرف ماژولار کردن کد کنیم ممکن است زمان زیادی از دست دهیم و از اصل مسئله دور شویم.کد بالا را به صورت زیر ریفکتور می کنیم و با نام calc.py  ذخیره می کنیم:def add(x, y):
    return x + y

def to_int(val):
    try:
        num = int(val)
    except ValueError:
        num = None
    return numدر کد بالا تابعی به نام add نوشتیم که  وظیفه آن دریافت دو عدد و برگشت حاصل جمع آن می باشد. تابع to_int  یک مقدار دریافت می کند و در بخش try  تلاش می کند تا آن مقدار را تبدیل به عدد کند اگر موفق نشد مقدار None را به متغییر num انتساب داده و برگشت می دهد. فایلی به نام console_ui.py ایجاد کرده و کدهای زیر داخل آن قرار می دهیم# console_ui.py
from calc import to_int, add
def main():     
     number1 = to_int(input(&amp;quotEnter an integer number: &amp;quot))
     number2 = to_int(input(&amp;quotEnter an integer number: &amp;quot))
     if number1 is not None and number2 is not None:         
         print(&amp;quotResult is&amp;quot, add(number1, number2))     
    else:
         print(&amp;quotError! Numbers must be integers&amp;quot)  
if __name__ == &#039;__main__&#039;:     
   main()با ایجاد فایل console_ui کد و محیط تعاملی کاربر را از هم جدا کردیمدر تابع main دو بار تابع to_int را فراخوانی کرده ایم تا مقداری که کاربر وارد می کند را به آن پاس دهیم. اگر آن مقدار قابل تبدیل به int بود که عدد برگشت داده می شود اگر مقدار عدد نبود مقدار None برگشت می خورد که می توانیم با توجه به آن خطایی به کاربر نمایش دهیم.شاید کد بالا پیچیده و کار اضافی به نظر برسد، اما از همین کد در انواع محیط های تعاملی می توانیم استفاده کنیم. زیرا که مسئله ما جمع دو عدد است و نه محیط تعاملی کاربردر حال حاضر برنامه دوم نصت به برنامه اول مزایای زیر را دارا می باشد:خوانایی کد افزایش یافتههر تابع مسئول انجام یک کار می باشد. اگر زمانی خطایی در هر بخش از برنامه به وجود بیاید می توانیم به راحتی به تابع آن مراجعه کنیمگسترش برنامه ساده تر شده. کافی است توابع دیگری برای تفریق و ... اضافه کنیم.بخش واسط کاربر و بخش کد از هم جدا شده اند که خطایابی و گسترش کد را ساده تر می کند.بخش گرافیکی برنامه در برنامه نویسی گرافیکی قبل از اینکه کد برنامه را بنویسیم باید محیط گرافیکی که قرار است کاربر با آن ارتباط برقرار کند را طراحی کنیم. پس می توانیم شماتیک محیط تعاملی برنامه را به شکل زیر داشته باشیم:شمای برنامه جمع دو عددبعد از مشخص شدن شمای برنامه باید آن را با ویجیت هایی که tkinter در اختیار ما قرار میدهد تبدیل کرده و یک محیط تعاملی واقعی ایجاد کنیم.ویجیت ها اجزایی هستند که توسط آنها برنامه گرافیکی پیاده سازی می شود. از جمله این ویجیت ها می توان به دکمه، برچسب،‌ منو و ... اشاره کرد. ویجیت هایی که در شمای بالا مورد استفاده قرار گرفته اند درشکل زیر مشخص شده اند:شمای برنامه به همراه نام ویجیت هابعد از اینکه مشخص شد از چه ویجیت هایی باید استفاده کنیم می توانیم با استفاده از پکیج tkinter شروع به پیاده سازی برنامه کنیم.استفاده از پکیج tkinterبرای استفاده از پکیج tkinter کدهای زیر را وارد می کنیم: (کدهای زیر را در فایلی به نام tk_ui.py ذخیره کنید)import tkinter as tk
from tkinter import ttkپکیج tkinter دارای ماژولی به نام ttk می باشد که مخفف Themed tk می باشد. کار این ماژول این است که با توجه به سیستم عامل شما نحوه نمایش ویجیت ها را تغییر دهد. یعنی اگر برنامه شما در مک باشد دکمه به شکل دکمه سیستم عامل مک و اگر در ویندوز باشید دکمه مانند دکمه ویندوزی نمایش داده می شود. پس تا جایی که ممکن است و هر ویجیتی که نسخه ttk  آن پیاده سازی شده باشد را استفاده می کنیم.در تمامی برنامه های tkinter باید یک پنجره اصلی یا پنجره مادر وجود داشته باشد و همیشه باید یک عدد از این فرم یا پنجره وجود داشته باشد برای ایجاد و نمایش پنجره مادر کدهای زیر را وارد می کنیمroot = tk.Tk()

root.mainloop()همین ۴ خط کد پنجره ای به شکل زیر برای ما ایجاد می کند:پنجره والد یا مادر تی کیمتد mainloop در پنجره اصلی چرخه رخداد می باشد. یعنی این متد باعث می شود که این پنجره به شکل بی نهایتی در حال اجرا باشد و همین موضوع باعث می شود که ما این پنجره را ببینیم و با آن در تعامل باشیم. این چرخه رخداد علاوه بر اینکه پنجره والد را به ما نمایش می دهد بلکه تمامی تعاملات اعم از کلیک، جابجایی ، فشرده شدن هر دکمه ای را نیز رصد می کند و در صورتی که عملی به این رخدادها نسبت داده شده باشد به آنها پاسخ می دهد. پس تمامی کدهای ما قبل از mainloop‌ باید نوشته شوند تا mainloop یا همان چرخه رخداد از آنها اطلاع داشته باشد و در صورت نیاز به آنها پاسخ دهد. این پنجره به صورت بی نهایت اجرا می شود تا هنگامی که رخداد خارج شدنی صادر شود.ایجاد برچسب، دکمه و اینتری (Entry, Button, Label)برای ایجاد برچسب و نمایش آنها در فرم root کد زیر را وارد می کنیم:ttk.Label(root, text=&amp;quot1st Number&amp;quot).grid(row=0, column=0)
ttk.Label(root, text=&amp;quot2nd Number&amp;quot).grid(row=1, column=0)
ttk.Label(root, text=&amp;quotResult&amp;quot).grid(row=2, column=1)در ایجاد ویجیت همیشه باید این نکته را در نظر داشته باشیم که اولین آرگومان هر ویجیت والد آن می باشد. در کد بالا والد هر سه برچسب پنجره root می باشد یعنی زمانی که برچسب ها را نمایش دادیم بر روی پنجره root نمایش داده خواهند شد.ایجاد یک ویجیت باعث نمایش داده شده آن نمیشود. اینکه یک ویجیتی چطور و کجای فرم نمایش داده شود همیشه مبحث مهمی در تمامی پلتفرم ها می باشد. در این مثال از متد grid برای نمایش دادن ویجیت استفاده کرده ایم. برای نمایش دادن ویجیت ها با استفاده از grid کافی است سطر و ستونی را که محل ویجیت هست را به متد grid پاس دهیم.متد grid مانند یک جدول کار می کند به شکل زیر توجه کنید:شمای برنامه به صورت grid بندی شدهشکل بالا نشان می دهد که اگر بخواهیم از grid برای نمایش ویجیت ها استفاده کنیم باید چگونه عمل کنیم به عنوان مثال اگر بخواهیم بدانیم که دکمه را باید کجا قرار دهیم با توجه به شکل بالا می فهمیم که دکمه در سطر سوم و ستون اول نمایش داده می شود. با توجه به شکل بالا کل کد برنامه به شکل زیر خواهد بود:import tkinter as tk
from tkinter import ttk

root = tk.Tk()
ttk.Label(root, text=&amp;quot1st Number&amp;quot).grid(row=0, column=0)
ttk.Label(root, text=&amp;quot2nd Number&amp;quot).grid(row=1, column=0)
ttk.Label(root, text=&amp;quotResult&amp;quot).grid(row=2, column=1)

num1 = ttk.Entry(root)
num2 = ttk.Entry(root)
num1.grid(row=0, column=1)
num2.grid(row=1, column=1)

ttk.Button(root, text=&amp;quotCalculate&amp;quot).grid(row=3, column=1)
root.mainloop()تنها نکته ای که در کد بالا وجود دارد مربوط می شود به Entry ها. چون ما بعدا مقادیر Entry‌ها را برای محاسبه جمع آنها لازم داریم به همین خاطر آنها را به متغییر انتساب داده ایم. اما چون بعد از تعریف دکمه و برچسب کار دیگری با آنها نداریم به هیچ متغییر آنها را نسبت نداده ایم.حاصل اجرای کد بالا پنجره زیر را نمایش خواهد داد:فرم جمع دو عددتنها کاری که باقی مانده بدست آوردن مقداری است که در Entry ها وارد می شود. این مقادیر زمانی می خواهیم بدست آوریم که کاربر دکمه Calculate را فشرده است. فشردن دکمه یک رخداد می باشد. در واقع هر گونه تعامل کاربر اعم از فشردن دکمه های کیبورد و یا ماوس یک رخداد یا Event می باشد. به هر رخداد یک تابع و یا یک متد پایتون پاسخ می دهد. یعنی اگر می خواهیم به کلیک بر روی دکمه Calculate پاسخ دهیم باید برای آن یک تابع بنویسیم و آن تابع را به رخداد کلیک دکمه وصل کنیم. چون کلیک بر روی دکمه کار بسیار رایجی است کافی است آرگومان command دکمه را به یک تابع وصل کنیم.ttk.Button(root, text=&amp;quotCalculate&amp;quot, command=calculate).grid(row=3, column=1)در کد بالا کلیک بر روی دکمه را به تابعی به نام calculate وصل کرده ایم. دقت کنید که در اینجا تابع را فراخوانی نمی کنیم فقط آن را وصل می کنیم به رخداد کلیک دکمه. این تابع باید مقادیر داخل Entry ها را بیرون کشیده و عمل جمع بر روی آنها انجام دهد سپس مقدار برچسب Result را به روز رسانی کند. پس اینجا می فهمیم که باید برچسب result  را به یک متغییرنسبت می دادیم زیرا بعدا قرار است مقدار آن را به روز رسانی کنیم پس کد کامل برنامه به صورت زیر خواهد بود:#### tk_ui.py
import tkinter as tk
from tkinter import ttk

import calc

def calculate():
	n1 = calc.to_int(num1.get())
	n2 = calc.to_int(num2.get())

	if n1 is not None and n2 is not None:
		res = calc.add(n1, n2)
		result_label[&amp;quottext&amp;quot] = f&amp;quotResult: {res}&amp;quot
	else:
		result_label[&amp;quottext&amp;quot] = &amp;quotError! Values must be integers&amp;quot


root = tk.Tk()

ttk.Label(root, text=&amp;quot1st Number&amp;quot).grid(row=0, column=0)
ttk.Label(root, text=&amp;quot2nd Number&amp;quot).grid(row=1, column=0)
result_label = ttk.Label(root, text=&amp;quotResult&amp;quot)
result_label.grid(row=2, column=1)

num1 = ttk.Entry(root)
num2 = ttk.Entry(root)
num1.grid(row=0, column=1)
num2.grid(row=1, column=1)

ttk.Button(root, text=&amp;quotCalculate&amp;quot, command=calculate).grid(row=3, column=1)

root.mainloop()چه در محیط کنسولی باشیم چه در محیط گرافیکی لازم است که مطمئن شویم کاربر یک عدد وارد کرده است که بتوانیم آنها را جمع کنیم. اگر خاطرتان باشد این کار را با تابع to_int در فایل calc.py انجام داده بوده ایم پس آن را import کرده و از آن استفاده کرده ایم.برای دریافت مقدار یک Entry می توانیم از متد get آن استفاده کنیم.برای تغییر دادن مقدار text و یا همان متن label هم می توانیم از خصیصه text آن استفاده کرده و آن را تغییر دهیم. تمامی خصیصه های یک ویجیت به صورت دیکشنری در دسترس هستند. پس برای تغییر دادن خصیصه result_label به صورت result_label[&quot;text&quot;] = Value اقدام کرده ایم.و باز دوباره برای محاسبه جمع دو عدد نیز از تابعی که در ماژول calc نوشته بوده ایم استفاده کرده ایم.اگر برنامه بالا را اجرا کنیم خروجی به شکل زیر خواهد بود:تی کی جمع دو عددمقدار غیر صحیحپایان و جمع بندیتلاش من در این پست این بود که با جزئیات مناسب نه تنها نحوه نوشتن برنامه گرافیکی با پایتون و tkinter بلکه به نکاتی در مورد برنامه نویسی به صورت عمومی اشاره ای داشته باشم.در این پست ما کدی نوشته ایم که الزما به محیط خاصی وابسته نیست و حتی شما می توانید یک محیط یا اینترفیس وب برای همین کد بنویسید. این کار را می توانید با ماژول flask انجام دهید. اگر دقت کنید کد برنامه (calc.py) از UIهای برنامه یا واسطهای کاربری برنامه یعنی tk_ui و console_ui.py  جدا می باشد. کد ما یعنی بخشی که مسئول محاسبه و پردازش است را معمولا Controller به UI معمولا View و اگر بانک اطلاعاتی نیز داشته باشیم به آن Model  گفته می شود. باید به شما تبریک بگویم که در این برنامه کوچک نیز از الگوی طراحی Model View Controller یا MVC استفاده کرده اید.در ادامه در مورد زیباسازی همین برنامه صحبت خواهیم کرد. اگر نظری در مورد این سری داشتید می تونید کامنت بذارید.  https://virgool.io/@sayeidgholami/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-tkinter-%D9%85%D9%82%D8%AF%D9%85%D9%87-jqj8yw66s9wz </description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Mon, 21 Sep 2020 20:37:30 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش tkinter - مقدمه</title>
                <link>https://virgool.io/@sayeidgholami/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-tkinter-%D9%85%D9%82%D8%AF%D9%85%D9%87-jqj8yw66s9wz</link>
                <description>وقتی برای اولین بار شروع به یادگیری برنامه نویسی می کنیم معمولا برنامه هایی که می نویسیم بر اساس متن هستند. در این نوع برنامه ها محیط تعامل کاربر با برنامه به صورتی متنی است. به این نوع برنامه ها،‌ برنامه های Text base و یا Console base گفته می شود، چرا که این برنامه ها از طریق کنسول و یا ترمینال اجرا می شوند و نحوه تعامل ما با اونها به صورت متنی است.با توجه به اینکه محیط کنسولی ساده بوده و پیچیدگی چندانی ندارد برای آموزش برنامه نویسی بسیار مناسب است. در حال حاضر معمولا تعامل کاربر با برنامه به صورت گرافیکی انجام میشود. یعنی برنامه دارای دکمه است که می تونیم روی اون کلیک کنیم تا اتفاق خاصی رخ دهد و یا برچسب هایی وجود دارند که اطلاعاتی را نشان می دهند و یا منویی در برنامه وجود دارد که هر کدام از گزینه های آن کار خاصی انجام میدهد. به این نوع برنامه ها اگر بر روی دسکتاپ اجرا شوند برنامه های دسکتاپ، اگر بر روی وب اجرا شوند برنامه های وب و اگر بر روی موبایل اجرا شوند برنامه های موبایلی گفته می شود و در کل برنامه های که واسط آنها گرافیکی باشد Graphical User Interface گفته می شود به صورت خلاصه GUI (گویی تلفظ می شود).  در این پست و پست های بعدی می خواهیم نحوه نوشتن برنامه های گرافیکی دسکتاپ با پایتون رو آموزش بدیم و منظور ما از برنامه های گرافیکی صرفا برنامه های گرافیکی دسکتاپ می باشد.ماژولهای پایتون برای برنامه نویسی گرافیکیپکیچ ها و ماژولهای متنوعی برای نوشتن برنامه های گرافیکی با پایتون وجود دارد که در لیست زیر به چندتا از معروف ترین اونها اشاره شده:تی کی اینتر tkinter: پکیج built-in پایتون برای ایجاد برنامه های گرافیکیپای کیو تی ‌PyQt: پورت فریم ورک Qt که با زبان سی ++ نوشته شده برای زبان پایتونکی وی Kivy: پکیجی که علاوه بر ایجاد برنامه های گرافیکی برای سیستم عامل های دسکتاپ قابلیت ایجاد برنامه برای سیستم عامل های موبایل را نیز دارا می باشد.دبلیو اکس wxpython: این کتابخانه نیز به صورت اورجینال با زبان سی ++ نوشته شده اما برای زبان پایتون نیز پورت شده و در دسترس می باشد.ال EEL : پکیجی که به شما اجازه میدهد با تکنولوژی های وب مثل HTML, CSS و JS و پایتون برنامه های دسکتاپ بسازید!!!....از بین تمامی این ابزارها کارکردن با پکیج tkinter ساده تر می باشد، علاوه بر سادگی این پکیج به صورت built-in در پایتون تعبیه شده است. به این معنی که بعد از نصب پایتون می توانیم از پکیج استفاده کنیم. ویژگی مهم دیگر این پکیج این است که برنامه های که با این پکیج ایجاد می شوند بر روی هر سیستم عامل به صورت native نمایش داده می شوند، مهم نیست برنامه خود را در سیستم عامل ویندوز یا لینوکس نوشته باشیم بعد از کامل کردن برنامه اگر برنامه را مثلا به سیستم عامل مک انتقال دهیم ویجیت های برنامه به صورت ویجیت های native مک نمایش داده می شوند. یعنی برنامه های که با tkinter نوشته می شوند بر روی سه سیستم عامل دسکتاپ Linux, Mac و Windows بدون نیاز به تغییر به صورت native نمایش داده می شوند.البته باید توجه داشته باشیم که پکیج tkinter در توزیع های بر پایه لینوکس ممکن است نیاز به نصب داشته باشند. مثلا در توزیع آرچ پکیج tkinter را می توانیم به صورت زیر نصب کنیم# pacman -S tkو یا در اوبونتو با دستور زیر# apt install python3-tkپس از نصب و راه اندازی برای تست اینکه پکیج tkinter به صورت صحیح نصب شده و آماده اجرا می باشد می توانیم دستور زیر را ترمینال وارد کنیم که یک برنامه از قبل نوشته شده با tkitner را نمایش می دهد:$ python -m tkinterاگر دستور بالا به صورت صحیح و بدون خطا اجرا شود خروجی برنامه ای به شکل زیر خواهد بود.tkinter default appاگر تا به حالا از برنامه IDLE استفاده کرده باشید دانستن این نکته بد نیست که این برنامه با tkinter پیاده سازی شده است.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Mon, 21 Sep 2020 01:45:34 +0330</pubDate>
            </item>
                    <item>
                <title>مناسب ترین زبان برای حوزه های مختلف برنامه نویسی</title>
                <link>https://virgool.io/coderlife/%D9%85%D9%86%D8%A7%D8%B3%D8%A8-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AD%D9%88%D8%B2%D9%87-%D9%87%D8%A7%DB%8C-%D9%85%D8%AE%D8%AA%D9%84%D9%81-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-kokadxzt9ydq</link>
                <description>بحث جذاب انتخاب زبان برنامه نویسی که هیچ وقت تمامی ندارد. در حال حاضر در دورانی زندگی می کنیم که ابزارها و زبان های برنامه نویسی زیادی برای برنامه نویسی وجود دارد و در واقع در بهترین دوران برای یادگیری برنامه نویسی به سر می بریم.در این پست نگاهی کوتاهی می اندازیم به انواع حوزه های کاری و زبان های برنامه نویسی که در این حوزه ها برتر و محبوب هستند. البته با در نظر گرفتن این نکته که علاوه بر اینکه مطالب این پست را آمار و ارقام پشتیبانی می کند نظرات و تجربیات شخصی نیز در آن گنجاده شده است.مناسب ترین زبان برای شروع برنامه نویسیلوگوی پایتونبا چه زبان برنامه نویسی شروع کنم؟ سوالی که بسیار از افراد در ابتدای راه با آن درگیر هستند. تا چندین سال قبل شاید جواب دادن به این سوال بسیار سخت بود اما در حال حاضر با وجود زبان Python و محبوبیت این زبان، سادگی و راحتی، وجود کامیونتی بسیار خوب، استفاده گسترده و همچین وجود کتابخانه های زیاد Python را به مناسب ترین زبان برای شروع به یادگیری برنامه نویسی تبدیل می کند.مناسب ترین زبان برای برنامه نویسی دسکتاپلوگوی سی ++برنامه های دسکتاپ برنامه های هستند که در کامپیوتری های شخصی استفاده می شوند. از جمله این برنامه ها می تواند به مرورگر Chrome واژه پرداز Word، فتوشاپ، ماشین حساب و غیره اشاره کرد. اگر برنامه ی دسکتاپی که می خواهیم بنویسیم یک برنامه بزرگ و پیچیده باشد که نیاز به سرعت و کارآیی بالا نیز دارد زبان C++ برای اینکار بسیار مناسب است. اگر برنامه ای که می نویسیم کوچک و در حد متوسط است زبان Python نیز مناسب است. هر دوی این زبانها دارای فریم ورکهای مختلفی برای نوشتن برنامه های دسکتاپ هستند. برنامه های دسکتاپی که با این دو زبان توسعه داده می شوند کراس پلتفرم هستند به این معنی که بدون تغییر دادن کد می توان آنها را در سیستم عامل های مختلف دسکتاپی از جمله Windows، Linux و MacOS اجرا کرد.مناسب ترین زبان برای برنامه نویسی موبایللوگوی کاتلینبرنامه نویسی موبایل در سالهای اخیر بسیار محبوب شده و توجه بسیاری از دولوپرها را به خود جلب کرده است. استفاده گسترده مردم از گوشی های تلفن همراه باعث ش تا برنامه نویسان و توسعه دهندگان کسب و کار تلاش کنند تا سرویس های خود را به صورت اپلیکشن های موبایل در اختیار کاربران خود قرار دهند.در حوزه موبایل در حال حاضر دو سیستم عامل پیشتاز است. سیستم عامل Android با پشتیبانی شرکت گوگل و سیستم عامل iOS با پشتیبانی شرکت اپل.برای توسعه برنامه های اندرویدی باید با یکی از زبانهای برنامه نویسی که بر روی JVM اجرا می شوند کار کنیم. از جمله زبانهای که بر روی JVM  اجرا می شوند و از طرف شرکت گوگل نیز به عنوان زبان رسمی توسعه اپلیکشن های اندرویدی مطرح شده اند می توان به Java و Kotlin اشاره کرد. زبان Kotlin اخیرا ارائه شده و مزایایی زیاد و ویژگیهای مدرنی برای توسعه اپلیکشن های مختلف ارائه می کند. پس مناسب ترین زبان برای توسعه برنامه های اندرویدی زبان Kotlin می باشد. برای توسعه برنامه های iOS می توان از دو زبان برنامه نویسی استفاده کرد: Objective C و Swift. اولی قدیمی می باشد و اکثرا برنامه نویسان iOS با زبان Swift‌ برنامه های خود را توسعه می دهند. پس مناسب ترین زبان برای برنامه نویسی iOS زبان برنامه نویسی Swift می باشد.مناسب ترین زبان برای برنامه نویسی موبایل - هیبریدلوگوی فلاتر و دارتمنظور از برنامه نویسی هیبرید این است که  با یک زبان برنامه نویسی اپ خود را توسعه داده و برای روی سیستم عامل های مختلف موبایلی اجرا کنید. برنامه نویسی هیبرید به هیچ وجه با برنامه نویسی نیتیو قابل مقایسه نیست. در برنامه نویسی نیتیو شما دسترسی مستقیم به کتابخانه و ابزار های توسعه سیستم عامل خود دارید اما در برنامه نویسی نیتیو باید لایه های مختلفی ایجاد شوند تا برنامه شما بدون مشکل در سیستم عامل های مختلف موبایلی اجرا شود. پس توجه داشته باشیم که برنامه های هیبریدی معولا از معادل های نیتیو خود کندتر هستند. اما بسته به پروژه ما نیاز پیدا می کنیم از همچین ابزارهایی استفاده کنیم.در برنامه نویسی هیبریدی زبان Javascript با فریم ورک React Native محبوب می باشد و توسعه دهندگان و حتی شرکتهای بزرگی از این ابزار استفاده می کنند. در سالهای اخیر زبان Dart با فریم ورک Flutter نیز توجه بسیاری از برنامه نویسان را به خود جلب کرده است. هر چند روشهای مختلف دیگری نیز برای برنامه نویسی هیبریدی وجود دارد از جمله Server Side Rendering اما به شخصه اگر برنامه کوچک تا متوسطی داشته باشم استفاده از Dart و Flutter می تواند گزینه خوبی باشد.مناسب ترین زبان برای برنامه نویسی وب - فرانتلوگوی جاوا اسکریپتتمام محتویات و کارهایی که در مرورگر خود مشاهده و انجام می دهیم فرانت اند محسوب می شود. تمامی مرورگر ها دارای مفسر (موتور) پردازش برای زبان Javascript می باشند. یعنی برای برنامه نویسی فرانت اند مجبور به استفاده از زبان جاوا اسکریپت هستیم. گرچه گزینه های و روشهایی وجود دارد که  به ما اجازه می دهد از زبانهای دیگری نیز استفاده کنیم اما در حال حاضر مناسب ترین زبان برای برنامه نویسی فرانت اند زبان Javascript می باشد.اگر پروژه ای که کار می کنم بزرگتر باشد شاید بهتر باشد که از زبان استاندارتری استفاده کنیم که امکانات بیشتری ارائه می دهد. این امکانات می توانند به ما اجازه دهند تا برنامه های بزرگتر و پیچیده تر را با مدیریت بیشتری بنویسیم. از جمله این زبان ها می توان به Typescript اشاره کرد. کدهای که با این زبان می نویسیم به Javascript تبدیل می شوند که به ما اجازه می دهد برنامه های فرانت اند بنویسیم. پس مناسب ترین زبان برای نوشتن برنامه های بزرگ و پیچیده فرانت اند Typescript می باشد.مناسب ترین زبان برای برنامه نویسی وب - بک اندلوگوی پایتوناین حوزه جایی است که رقابت بین آن بسیار شدید می باشد. تقریبا با تمامی زبانهای برنامه نویسی می توان برنامه های وب سمت سرور نوشت. بدون اینکه وارد جزئیات شویم به نظر شخصی من برای کسانی که برنامه نویسی را تازه شروع کرده اند و می خواهند سریعا یک برنامه وب بنویسند و کسب و کار خود را شروع کنند  زبان Python بسیار مناسب است. اگر برنامه وب در حد سازمانی بود مثل بانکها و سازمانهای مالی و بیمه و ... زبان Java و یا C# ASP.NET بسیار مناسب است.اگر کارآرایی و سرعت و اجرای همزمانی مد نظر بود زبان GO و یا Rust گزینه های مناسبی هستند.مناسب ترین زبان برای برنامه نویسی بازیلوگوی سی ++گرچه از زبانهای مختلفی از جمله Python و Javascript می توان برای بازی نوشتن استفاده کرد. اما در این حوزه زبانی که حرف اول و آخر را می زند زبان C++ می باشد. از این زبان هم برای توسعه بازی و هم برای نوشتن موتورهای بازی استفاده زیادی می شود. بسیاری از بازهای محبوب با همین زبان نوشته شده اند. بازی هایی که با این زبان نوشته می شوند قابل اجرای برای روی سیستم عامل های پرکاربرد دسکتاپی و موبایلی می باشد. زبان C++ دارای فریم ورکهای بسیاری برای نوشتن بازی می باشد.دومین زبانی که در این حوزه بسیار استفاده می شود زبان C# با فریم ورک Unity‌ می باشد. با این زبان و فریم ورک می توان بازهایی ساخت که در عین زیبایی و کارایی بر روی سیستم عامل های مختلف نیز اجرا شود.مناسب ترین زبان برای برنامه نویسی سیستمیلوگوی Cبرنامه های سیستمی برنامه هایی مثل سیستم عامل ها،‌کامپایلرها و بانک های اطلاعاتی هستند. زبانهای که در این حوزه استفاده می شوند باید دسترسی مستقیم به سخت افزار داشته باشند و سرعت و کارآیی در این حوزه بسیار مهم است. زبان C یکی از قدیمی ترین و محبوب ترین زبانهای برنامه نویسی است که در برنامه نویسی سیستمی بسیار محبوب و پر کاربرد می باشد. تقریبا بخش بزرگی از تمامی سیستم عامل های محبوب از جمله Linux، Window و اندروید با این زبان پیاده سازی شده اند. لذا علاوه بر اینکه برنامه نویس زبان سی می تواند برای خود برنامه های سیستمی طراحی و پیاده سازی کند بلکه می تواند در توسعه سیستم عامل منبع بازی مثل لینوکس نیز مشارکت داشته باشد.زبان دومی که اخیرا در این حوزه بسیار محبوب شده است زبان Rust می باشد. این زبان در سال ۲۰۱۰ توسط موزیلا ارائه شده پس زبان جوان و مدرنی می باشد. در سال ۲۰۱۶ این زبان از طرف کاربران استک اوررفلو به عنوان دوست داشتنی ترین زبان انتخاب شده است. انتخاب شخص بنده زبان C می باشد هر چند زبان Rust نیز گزینه بسیار خوبی است.هوش مصنوعی و آنالیز دادهلوگوی پایتوناین حوزه نیز در سالهای اخیر بسیار مطرح شده و برنامه نویسان زیادی به این حوزه جذب شده اند. زبانی که حرف اول را در این حوزه می زند و مناسب ترین زبان نیز می باشد زبان Python می باشد. گزینه دیگری که در این حوزه مطرح است زبان R می باشد که مخصوصا برای کار با داده های آماری پیاده سازی شده است.جمع بندیچند نکته اساسی که حرفه ای ها از آن آگاه هستند و به عنوان تازه کار باید به آنها توجه بیشتری داشته باشیم عبارت هستند از: مهمترین نکته ای که باید به آن دقت کنیم این است که ما به عنوان برنامه نویس زبان برنامه نویسی و ابزار خود را انتخاب نمی کنیم بلکه این پروژه هست که زبان برنامه نویسی و ابزار را انتخاب می کند. تنها گزینه ای که در اختیار ما است انتخاب زبان برنامه نویسی برای شروع و یادگیری خوب و عمیق مفاهیم اولیه و اساسی می باشد.حجم پروژه، وجود لایبرری‌های مختلف، آشنایی تیم با ابزار، وجود مستندات و آموزشهای کافی، وجود کامیونتی از جمله مواردی هستند که در انتخاب ابزار برای پروژه بعدی تاثیر گذار هستند.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Tue, 18 Feb 2020 07:03:05 +0330</pubDate>
            </item>
                    <item>
                <title>تقاوت زمان کامپایل با زمان اجرا</title>
                <link>https://virgool.io/@sayeidgholami/%D8%AA%D9%82%D8%A7%D9%88%D8%AA-%D8%B2%D9%85%D8%A7%D9%86-%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84-%D8%A8%D8%A7-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7-gvysbbsdgquh</link>
                <description>زمان کامپایل و زمان اجراشاید تا به حال اصطلاح زمان اجرا و زمان کامپایل را شنیده اید. این دو جزو اصطلاحات برنامه نویسی می باشند که ممکن است در سایتهایی مثل Stackoverflow اشخاصی که برای رفع خطا دیگران را راهنمایی می کنند از این اصطلاحات استفاده کنند. در این پست تفاوت این دو اصطلاح را شرح می دهم.زمان کامپایلبه زمانی که کد منبع به کد قابل اجرا (زبان ماشین) تبدیل می شود زمان کامپایل گفته می شود. اگر در زمان کامپایل کد منبع دارای خطا باشد مانند خطای نحوی کد منبع به کد قابل اجرا تبدیل نمی شود و خطا رخ میدهدخطای نحوی:‌ اگر یکی از قوانین زبان برنامه نویسی را رعایت نکنید کامپایلر خطای نحوی یا Syntax Error صادر می کند.مثالی از خطای زمان کامپایل#include &lt;stdio.h&gt;
int main()
{
    printf(&amp;quotHello World!&amp;quot)
    return 0;
}در برنامه بالا به خاطر اینکه &#x27;;&#x27; را در خط ۴ فراموش کرده ایم خطای زیر صادر می شود و کد منبع به فایل اجرایی تبدیل نمی شود.example.c: In function ‘main’:
example.c:6:24: error: expected ‘;’ before ‘return’
    6 |  printf(&amp;quotHello World!&amp;quot)
          |                          ^
          |                           ;
          7 |  return 0;
          |  ~~~~~~     زمان اجراوقتی برنامه ای در حال اجرا است می گوییم برنامه (کد) در زمان اجرا است.منظور از برنامه در این جمله این است که کد منبع با موفقیت کامپایل شده و یک فایل اجرایی تولید شده است و فایل اجرایی در حال اجرا است و اگر در طول اجرای برنامه خطایی رخ دهد آن خطا، خطای زمان اجرا است. به خطای زمان اجرا معولا Exception  یا استثنا نیز گفته می شود.به عنوان مثالی از خطای زمان اجرا به تکه کد زیر که با زبان C نوشته شده است توجه کنید:#include &lt;stdio.h&gt;
float divideTwoNumber(float num1, float num2) 
{
	return num1 / num2;
}
int main()
{
	float result = divideTwoNumber(10, 2);
	printf(&amp;quot%.2f&amp;quot, result);
	return 0;
}در برنامه بالا تابعی به نام divideTwoNumber نوشته ایم تا دو عدد صحیح دریافت کند و حاصل تقسیم عدد اول بر عدد دوم را به تابع فراخوان برگشت دهد. اگر مقداری مثل ۱۰ و ۲ را به تابع پاس دهیم مقدار 5.00 ظاهر می شود اما اگر مقداری مانند 10 و 0 را به تابع پاس دهیم از آنجایی که تقسیم بر صفر معنا ندارد خطای زیر ظاهر می شود که نمونه ای از خطاهای زمان اجرا می باشد.[1]    13316 floating point exception (core dumped)  ./exampleتوجهزمان کامپایل و زمان اجرا در زبانهای کامپایلری با زبان های مفسری ممکن است متفاوت باشد که در آینده این پست آپدیت می شود تا این موضوع را نیز پوشش دهد.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Tue, 26 Nov 2019 04:03:03 +0330</pubDate>
            </item>
                    <item>
                <title>قطعی اینترنت قطعی نان شب من است</title>
                <link>https://virgool.io/@sayeidgholami/%D9%82%D8%B7%D8%B9%DB%8C-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D9%82%D8%B7%D8%B9%DB%8C-%D9%86%D8%A7%D9%86-%D8%B4%D8%A8-%D9%85%D9%86-%D8%A7%D8%B3%D8%AA-vkaqjxi1unj6</link>
                <description>اون چیزی که مسلم هست بحث داغ تمام محافل قطعی اینترنت هست. تا جای که من توی خبرها و ویرگول دیدم حتی بحث گرانی بنزین هم تمام شده و همه نگران وصل یا وصل نشدن دوباره اینترنت داخلی به اینترنت جهانی هستن.برخی از دوستان از دید مثبت به قضیه نگاه کردن که اصلا نمی دونم فازشون چیه! حرفهای مثل من با بقال سر کوچمون اولین بار صحبت کردم،‌ اجاره نشین های آپارتمانمون شروع کردن باهم به صحبت کردن، تو کوچه آدمهای بیشتری رو میشه دید، برای رمان خواندن وقت پیدا کردم و از این مزخرفات.برخی از دوستان هم مشکلات خودشون رو در رابطه با قطعی اینترنت نوشتن که چطور به کسب و کارشون صدمه زده و زندگی عادی اونها رو مختل کرده. من هم جزو این دسته از افراد هستم.بعنوان یک انسانی که دارای اراده هست من برای کتاب خوندن یا حرف زدن با بقال سر کوچمون نیازی به قطعی اینترنت ندارم اگر فکر کنم که نیازی به این کارها هست انجام می دم و اگر هم نیازی نبینم اینترنت که بماند آب و برق رو هم قطع کن این کارها رو انجام نمیدم.بعنوان یک مدرس و برنامه نویس کامپیوتر زیان های که قطعی اینترنت به من زده بسیار زیاده. در واقع با قطعی اینترنت نان شب من هم قطع شده.در این وضعیت خراب و گرانی با سیلی صورت خودم رو سرخ می کردم و شرمنده خانواده بودم اما قطعی اینترنت واقعا قابل تحمل نیست و افتضاحه. من از اسکایپ برای صحبت با دوستانی که خارج از کشور هستن و براشون تدریس می کردم یا باهم روی یک پروژه کار می کردیم استفاده می کردم که الان به کل قطعه. اصلا فکر اینکه اینترنت محدود بشه من رو نابود میکنه. میگن یه عده کمی اشرار بود! خوب به خاطر یه عده اشرار کم اینترنت رو قطع کردی؟ و نان شب ما رو قطع کردی؟‌ الان ما پیش کی گدایی کنیم؟بعد اخبار میگه همه چه تحت کنترل هست، همه جا آرومه دشمن شکست خورد، ارازل دستگیر شدن! پس چرا اینترنت رو وصل نمی کنی؟ نکنه می خوای وصل نکنی؟ ضررهای ما رو کی می خواد بده؟ ضررهای که من به خاطر قطعی اینترنت متحمل شدم اینارو کی می خواد بده؟ کی اصلا می خواد پاسخ گو باشه؟ من بسته اینترنتی نخریدم که از اینترنت محدود و بی فایده داخل استفاده کنم اینترنت خریدم که کارهام و پروژه هام رو باهاش انجام بدم الان تمام حجم من مونده و هیچ استفاده ای ازش نمی کنم جایی برای مصرف حجم اینترنتی ندارم.حتی اگر اینترنت وصل بشه باز هم این ترس و نگرانی خواهد بود که نکنه دوباره قطع بکنن یعنی هیچ چیز دیگر مثل سابق نمی شود. البته اون سابقش هم تحفه ای نبود ولی امیدی برای تغییر شرایطم داشتم الان تنها روزنه امیدی که داشتم هم از بین رفته. تمام مشتریانم رو از دست دادم و در بلاتکلیفی روزهای زندگیم که باید برای پیشرفت و ترقی استفاده شوند در بیهودگی و افسردگی هدر می شوند.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Thu, 21 Nov 2019 02:28:10 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش پایتون در یک پست</title>
                <link>https://virgool.io/@sayeidgholami/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%AF%D8%B1-%DB%8C%DA%A9-%D9%BE%D8%B3%D8%B3%D8%AA-m2c1ujxxmr7t</link>
                <description>اینفوگرافی پایتوندر این پست قصد دارم تا مفاهیم مهم پایتون را در یک پست توضیح دهم. البته نباید انتظار داشت که بعد از مطالعه این پست متخصص پایتون شد، اما پایتون به قدری ساده است که می توان مفاهیم مهم و کلیدی آن را در یک پست توضیح داد. پایتون یک زبان برنامه نویسی قدرتمند، مدرن و شی گرا می باشد که با اهداف عمومی طراحی شده و دارای امکانات بسیار زیادی می باشد. در این پست نگاهی گذرا به مفاهیم کلیدی پایتون خواهیم داشت. پایتون دارای دو نسخه است. پایتون ۲ و پایتون ۳. مثالهای این پست با استفاده از سینتکس پایتون ۳ نوشته شده اند.خروحی هر تکه کد در زیر آن بعد از #output گذاشته شده استمفسر پایتونتنها زبانی که کامپیوتر قادر به اجرادستورای ت آن است زبان ماشین است. یادگیری و کار کردن با زبان ماشین بسیار سخت است به خاطر همین زبانهای سطح بالا به وجود آمده اند(مانند پایتون). زبانهای سطح بالا توسط مترجم به زبان ماشین تبدیل می شوند. مترجم ها به روشهای مختلفی پیاده سازی می شوند. مترجم پایتون به روش مفسری پیاده سازی شده است. یک مفسر برنامه ای است که کدهای زبان سطح بالا را خط به خط به زبان ماشین تبدیل می کند. مفسر رسمی زبان پایتون CPython نام دارد که اولین بار توسط Guido van Rossum نوشته شده و سپس توسط جامعه اوپن سورس توسعه داده شده و در حال حاضر نیز توسعه داده می شود.تابع printتابع print مقدار یا مقادیری را دریافت کرده و آن را در صفحه کنسول نمایش می دهد.print(‘Hello, World!’)
# ouput
Hello, World!تعریف متغییرپایتون یک زبان داینامیک است به این معنی که نیازی نیست نوع متغییر را مشخص کنیم. فقط کافی است نام متغییر را نوشته و مقداری را به آن تخصیص دهیم.num = 42می توان در یک خط چندین متغییر تعریف کرد:a, b, s = 0, 1, ‘hi’می توان مقدار دو متغییر را در یک خط دستور با یکدیگر جابجا کرد:a, b = b, aبرای تعریف رشته می توان از جفت کوتیشن و یا تک کوتیشن استفاده کرد:name = &amp;quotJohn Doe&amp;quot
country = &#039;US&#039;می توان با استفاده از تابع print مقدار متغییرها را نمایش داد:print(name, country, num)# output
John Doe 42ساختار شرطدر پایتون برای شرط گذاری از دستور if استفاده می شود.if name == ‘John Doe’:
    print(‘Hi, John!’)
else:
    print(‘Who are you?’)# ouput
Hi, John!بخش شرط نیازی به پرانتز ندارد، البته گذاشتن پرانتز اختیاری است و فقط اگر منجر به خوانایی کد می شود استفاده از پرانتز توصیه می شود. بدنه شرط یا هر بلاک در پایتون با استفاده از علامت کولن ‘:’ و خط فاصله مشخص می شود، گذاشتن یک فاصله بعد از علامت کولن بیانگیر این هست که دستور به بلاک بالایی خود تعلق دارد مثلا در کد بالا خط دوم متعلق به بلاک if و خط ۴  متعلق به بلاک else می باشد. توصیه می شود از ۴ خط برای جداسازی دستورات مربوط به بدنه یک بلاک استفاده شود.کد بالا را در پایتون می توان در یک خط نوشت که به عبارت شرط یا Conditional Expression  معروف است.print(&#039;Hi, John!&#039;) if name == &#039;John Doe&#039; else print(&#039;Who are you?&#039;)حلقه هادو ساختار برای ایجاد حلقه در پایتون وجود دارد، ساختار while و forبرای استفاده از ساختار while یک عبارت شرطی در جلوی آن می نویسیم تا هنگامی که این شرط درست باشد بدنه while اجرا می شود.x = 0
while x &lt; 5:
    print(‘x is’, x)
    x += 1
print(&#039;while loop terminated&#039;)# outpput
x is 0
x is 1
x is 2
x is 3
x is 4
while loop terminatedحلقه for بعد از کالکشن ها توضیح داده شده.کالکشن هاکاکلشن ها مجموعه هایی هستند که می تواند بیش از یک مقدار داشته باشند. کالکشن های اصلی پایتون عبارتند از list, tuple, dict و setیک لیست می تواند دارای هر نوع آبجکتی باشد یعنی هر نوع داده ای. یک لیست یک کالکشن مرتب است یعنی عناصر آن از صفر شماره گذاری شده اند که با این شماره می توانیم به آنها دسترسی داشته باشیم. برای تعریف لیست از علامت براکت&#x27;[ ]&#x27; استفاده می کنیم.person = [‘Kate Doe’, 42, 1.9, ‘M’]برای چاپ اولین عنصر از لیست person می توانیم به صورت زیر عمل کنیم.print(‘First element in person list is’,(person[0])# output
First element in person list is Kate Doeبرای به دست آوردن طول یک لیست می توانیم از تابع len استفاده کنیمprint(len(person)# output
4کالکشن بعدی tuple است. توپل ها عین لیست ها هستند با این تفاوت که بعد از تعریف آن نمی توانیم مقداری به آن اضافه کنیم یا مقداری از آن حذف کنیم. این ویژگی توپل باعث می شود که مفسر پایتون حافظه را به صورت استاتیک تعریف کند که به طبع باعث دسترسی سریع به عناصر می شود. توپل ها برای تعریف مقادیر ثابت مثل روزهای هفته مفید هستند. یک توپل مانند لیست می تواند دارای هر نوع داده ای باشد. برای تعریف توپل از پرانتز استفاده می شود.days_of_week = (‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’,‘Sat’, ‘Sun’)
print(days_of_week[2])# outpput
Wedکالکشن بعدی dict یا دیکشتری هست. دیکشنری بر خلاف لیست و توپل یک کالکشن مرتب نیست و دارای شاخص نیست یعنی با عدد شماره گذاری نشده اند. یک دیکشنری با کلید و مقدار تعریف می شود. می تواند با کلید به مقدار یک دیکشنری دسترسی داشت.بعد از پایتون 3.6 دیکشنری ها با ترتیبی که برنامه نویس تعریف کرده است مرتب و نمایش داده می شوندfav_tv_series = {     
    &#039;title&#039;: ‘True Detective’,
    &#039;director&#039;: &#039;Vince Vaughn&#039;,
    &#039;year&#039;: 2014,
    &#039;imdb_rank&#039;: 9.0,
    &#039;your_rank&#039;: 10
}

print(‘Your rank to’, move[‘title’], ‘is’, move[‘your_rank’])# ouput
Your rank to True Detective is 10set نوع داده است که مثل لیست بوده اما یک ست نمی تواند دارای مقدار تکراری باشد. تمام عملیات مربوط به یک مجموعه مانند اجتماع، اشتراک و ... بر روی یک set قابل اجرا است.  یک set با استفاده از علامت کروشه ‘{}’ تعریف می شود.numbers = {1, 2, 2, 3}
print(numbers)
print(numbers[0])#output
{1, 2, 3}
1حلقه for برای روی کالکشن ها استفاده می شود. حلقه for را می توان بر روی تمام کالکشن ها اجرا کرد. فقط کافی است یک تکرار کننده (iterator) تعریف کنیم که در واقع یک متغییر است در مثال پایین item یک iterator است.for item in person:
    print(item)# output 
Kate Doe
42
1.9
Mبرای استفاده از حلقه for بر روی دیکشنری می توانیم از دو تکرار کننده استفاده کنیم که در هر بار چرخش حلقه for اولی به کلید دیکشنری و دومی به مقدار آن کلید اشاره می کند:for key, value in fav_tv_series.items():
    print(key.title(), ‘:’, value)# output
Title : True Detective
Year : 2014
Directors : Vince Vaughn
Imdb_Rank : 9.0
Your_Rank : 10نکته: متد title که بر روی کلید فراخوانی کردیم باعث می شود محتوای keyها که رشته هستند اولین کارکتر آنها به حرف بزرگ تبدیل شود. مثلا title به Title تبدیل می شود.تابعبا استفاده از توابع می توانیم برنامه را به قسمت های معناداری تقسیم بندی کنیم. بعد از تعریف یک تابع به تعداد که مایل بودیم می توانیم آن را فراخوانی و اجرا کنیم. با استفاده از تابع نیازی به کپی پست کردن بخش های تکرای برنامه نداریم. برای تعریف تابع در پایتون از کلمه کلید def استفاده می کنیم سپس نام تابع را می نویسیم و بعد پارامترهای که ممکن است تابع دریافت کند را داخل جفت پرانتز می نویسیم.def add(x, y):
    print(x, &#039;+&#039;, y, &#039;=&#039;, x + y)

add(2 + 3)# output
2 + 3 = 5اگر بخواهیم از مقداری که در داخل تابع محاسبه می شود در برنامه استفاده کنیم باید آن را برگشت دهیم. برای برگشت دادن یک مقدار توسط تابع از کلمه کلیدی return استفاده می کنیم.def area(width, height):
    return width * heightبرای فراخوانی نام تابع را نوشته اگر تابع برای اجرا نیاز به آرگومان داشت آنها را داخل پرانتر وارد می کنیم.آرگومان: مقدار یا مقادیری که یک تابع هنگامی فراخوانی برای اجرا به آنها نیاز دارد.result = 2 + area(5, 9)
print(&#039;The result is &#039;, result)</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Tue, 22 Oct 2019 22:18:16 +0330</pubDate>
            </item>
                    <item>
                <title>۱۰ فونت مخصوص برنامه نویسی</title>
                <link>https://virgool.io/coderlife/%DB%B1%DB%B0-%D9%81%D9%88%D9%86%D8%AA-%D9%85%D8%AE%D8%B5%D9%88%D8%B5-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-ztcyufzui48l</link>
                <description>انتخاب فونت برای برنامه نویسی مهمه و ممکن در بهره وری و همچین ایجاد علاقه موثر باشه. انواع مختلفی فونت برای برنامه نویسی طراحی شده که بیشتر اونها تفاوت های جزئی باهم دارن و انتخاب اونها بیشتر سلیقه ای هست. ویژگی منحصر بفردی که باید تمام فونت برنامه نویسی اون رو داشته باشن خاصیت monospace بودن هست یعنی تمام کاراکترها باید به یک اندازه از یکدیگر فاصله داشته باشن.همچنین در سالهای اخیر فونت ها مخصوص برنامه نویسی خاصتر از قبل شدن و دارای ویژگی به نام code ligature شدن. بر اساس این ویژگی برخی از کاراکترها مثل علامت == به صورت چسبیده یا به صورت خاص و مخصوص نمایش داده می شوند. تمام ادیتورها مدرن از این ویژگی پشتیبانی می کنند. در ادامه ۱۰ تا از فونت های برنامه نویسی که خودم دوست دارم معرفی می کنم به همراه لینک دانلود. فونت Fira codeFira codeاین فونت از ویژگی code ligature پشتیبانی می کند و رایگان می باشد. در حال حاظر این فونت پرطرفدارترین فونت در بین برنامه نویسها می باشدلینک دانلودلینک گیت هاب(وب سایت رسمی)فونت HaskligHaskligاین فونت ترکیبی از فونت Source Code Pro می باشد که توسط Adobe طراحی شده و فونت بسیاری خوبی می باشد که من از ۳ سال از این فونت برای برنامه نویسی استفاده کردم. به همراه ویژگی Code Ligature می باشد. این فونت نیز رایگان می باشدلینک دانلودلینک گیت هاب (وب سایت رسمی)لینک گیت هاب Source Code Proفونت Operator MonoOperator Monoاین فونت نیز در بین برنامه نویسان پرطرفدار می باشد. این فونت پولی بوده و قیمت آن 199 دلار می باشد. اما با کمی جستجو و شانس شاید بتونید پیداش کنید!!!لینک خریدلینک دانلود رایگانفونت Dank MonoDank Mono Fontاین فونت نیز پولی می باشد و از دارای ویژگی Code Ligature می باشد.وب سایت رسمی (تحریم یا فیلتر احتمالا!)فونت Input MonoInput Monoچیزی که این فونت را منحصر بفرد می کند کارکترهای بزرگ و خوانای آن است. این فونت بر خوانایی تاکید دارد. همچنین قابلیت شخصی سازی این فونت وجود دارد. یعنی برای برخی از کارکترها مانند کارکتر a و یا علامت { نسخه های دیگری وجود دارد که می توانید آن را انتخاب کنید. تمامی اطلاعات و شخصی سازی ها در وب سایت رسمی این فونت موجود است. این فونت رایگان می باشدوب سایت رسمی فونت BP MonoBP Monoلینک دانلودفونت CamingoCodeوب سایت رسمیفونت Mononokiرایگان وب سایت رسمیفونت Hackطراحی شده توسط فیسبوک. رایگانلینک گیت هابفونت Menloمحبوب بین برنامه نویسان و طراحان. طراحی ساده. رایگانلینک دانلود</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Sat, 22 Jun 2019 18:05:39 +0430</pubDate>
            </item>
                    <item>
                <title>ده ترفندن پایتونی (۲)</title>
                <link>https://virgool.io/@sayeidgholami/%D8%AF%D9%87-%D8%AA%D8%B1%D9%81%D9%86%D8%AF%D9%86-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86%DB%8C-%DB%B2-rmrl8gnpzsvu</link>
                <description>چسباندن دو دیکشنری به یکدیگرتو این پست ۵ ترفند کد نویسی با پایتون رو معرفی می کنم. پنج تایی اولی رو می تونید تو لینک زیر ببینیدقسمت اول مقالهعملگر ترنریدر حالت معمول اگر بخواهیم شرطی بنویسیم که فقط if و else داشته باشه می تونیم به صورت زیر عمل کنیم:condition = True
if condition:
       message = &#039;Hi ...&#039;
else: 
       message = &#039;Bye.&#039;
print(message)

# output 
Hi ...پایتون روشی رو برای ما فراهم میکنه که با استفاده از اون می تونیم کد بالا رو در یک خط بنویسیم. در زبانهای دیگه همین عمل رو با استفاده از عملگری که به نام عملگر ترنری می شناسیم انجام میدن. عملگر ترنری در زبانهای خانواده سی با علامت ؟ نشون داده میشه. در پایتون عملگر مخصوصی برای اینکار نداریم اما می تونیم کاربر این عملگر رو به صورت زیر در پایتون شبیه سازی کنیم:condition = True
message = &#039;Hi ...&#039; if condition else &#039;Bye&#039;
print(x)

# output
# Hi ...جداسازی اعداد برای خوانایی بیشتر و نمایش بهتروقتی تعداد ارقام یک مقدار بیشتر می شود ممکن است خوانایی آن سخت شود. مانند مثال زیر که به خاطر وجود صفر زیاد خواندن در یک نگاه سخت است:num1 = 10000000
num2 = 1000000000
total = num1 + num2
print(total)

# output
# 1010000000در پایتون با استفاده از علامت زیر خط می تونیم ارقام اعداد رو برای افزایش خوانایی از هم جدا کنیم. همچنین با استفاده از فرمت بندی جدید که در  پایتون ۳.۷ ارائه شده برای نمایش اعداد که هر سه رقم با کاما از هم جدا شده اند، می تونیم به صورت زیر عمل کنیم:num1 = 10_000_000
num2 = 1_000_000_000
total = num1 + num2
print(f&#039;{total:,}&#039;)  # Python 3.7

# output
# 1,010,000,000مدیریت محتوادر حالت معمول برای خواندن یک فایل و جدا کردن کلمات و شمارش آنها می تونیم به صورت زیر عمل کنیم: #somefile.txt
This is a simple text file.f = open(&#039;somefile.txt&#039;, &#039;r&#039;)
content = f.read()
f.close()
words = content.split(&#039; &#039;)
print(len(words))

#output
7همونطور که ملاحضه می کنید در کد بالا به صورت دستی خودمون بعد از اینکه کارمون با فایل تموم شد اون رو می بندیم. اما ممکنه این دستور رو فراموش کنیم به خاطر همین دستور with در پایتون ۳.۶ برای مدیریت منابع ارائه شد.کد بالا رو می تونیم به صورت زیر بنویسیم:with open(&#039;somefile.txt&#039;, &#039;r&#039;) as f:
    content = f.read()
words = content.split(&#039; &#039;)
print(len(words))

#output
7همچنین از منابعی مثل سوکت و یا دیتا بیس رو می تونیم با دستور with مدیریت کنیم.تابع enumerateبرای اینکه محتوای لیست رو به همراه شماره ایندکس اون نشون بدیم در حالت معمول می تونیم به صورت زیر عمل کنیم:cites = [&#039;Ardabil&#039;, &#039;Tabriz&#039;, &#039;Tehran&#039;, &#039;Esfehan&#039;, &#039;Shiraz&#039;]
index = 0
for city in cites:
    print(index, city)
    index += 1

# output
0 Ardabil
1 Tabriz
2 Tehran
3 Esfehan
4 Shirazاما تابع enumerate کار ما رو راحتر می کنه:cites = [&#039;Ardabil&#039;, &#039;Tabriz&#039;, &#039;Tehran&#039;, &#039;Esfehan&#039;, &#039;Shiraz&#039;]
for index, city in enumerate(cites):
    print(index, city)

# output
0 Ardabil
1 Tabriz
2 Tehran
3 Esfehan
4 Shirazآن پک کردن مقادیر (Unpacking)اگر یک توپل یا لیستی شامل اسامی اشخاص به همراه مقادیر دیگری در لیست داشته باشیم و اگر بخواهیم آنها را جداگانه در متغییرهایی ذخیره کنیم می تونیم به صورت زیر عمل کنیم:names = (&#039;Joe&#039;, &#039;John&#039;, &#039;Jean&#039;, &#039;??&#039;, &#039;!!&#039;)
name1 = names[0]
name2 = names[1]
name3 = names[2]
ch1 = names[3]
ch2 = name[4]اما ویژگی unpack کردن در پایتون کار ما رو راحتر می کنید. در این کد اولین، دومین و سومین مقدار به ترتیب در name2, name1, و name3  قرار می گیره و مابقی مقادیر به متغییر _ تخصیص داده می شه. دقت کنید که نام متغییر می تونه کارکتر زیر خط باشه و در پایتون به طور معمولا در بین برنامه نویسها به عنوان متغییر موقت یا یکبار مصرف استفاده میشه. هر چند با متغییرهای دیگه هیچ فرقی نداره.names = (&#039;Joe&#039;, &#039;John&#039;, &#039;Jean&#039;, &#039;??&#039;, &#039;!!&#039;)
name1, name2, name3, *_ = (&#039;Joe&#039;, &#039;Jean&#039;, &#039;John&#039;, &#039;??&#039;, &#039;!!&#039;)ترفند های بیشتر رو می تونید تو وب سایت زیر پیدا کنید ترفندهای بیشتر با پایتونکد گذاشتن تو ویرگول چقدر تو مُخِ!! و سینتکس رو هم هایلایت نمیکنه.</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Mon, 03 Jun 2019 03:06:16 +0430</pubDate>
            </item>
                    <item>
                <title>ده ترفند پایتونی (۱)</title>
                <link>https://virgool.io/@sayeidgholami/%D8%AF%D9%87-%D8%AA%D8%B1%D9%81%D9%86%D8%AF-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86%DB%8C-gp0hoyomiqn8</link>
                <description>در زبان برنامه نویسی پایتون برای حل یک مسئله می توان از روشهای به اصطلاح پایتونیک استفاده کرد که در آن کد زیباتر، خواناتر و معمولا کوتاه تر می باشد در این پست ابتدا کد مرسوم برای حل یک مسئله رو قرار دادم و ادامه روش پایتونی (پایتونیک، ترفند) رو گذاشتم.۱. جابجایی مقدار دو متغییر با یکدیگراگر به ما بگن برنامه ای بنویسید که مقدار دو متغییر رو جابجا کنه چطوری این کار رو انجام می دیم؟ خوب در روش مرسوم میشه با کمک متغییر سوم این مسئله رو حل کرد:تعویض مقدار دو متغییر (غیر پایتونی)روش پایتونی برای تعویض مقدار دو متغییر به صورت زیر می باشد:تعویض مقدار دو متغییر (پایتونیک)۲. معکوس کردن رشتهبرای معکوس کردن رشته روشهای مختلفی وجود دارد اما روش مرسوم این هست که یک حلقه معکوس داشته باشیم(حلقه ای که از آخر رشته شروع شده و در هر مرحله به اول رشته نزدیک شود) و هر بار چرخش حلقه رشته رو تشکیل بدیم و در نهایت رشته اولیه رو به صورت معکوس به وجود بیاریم:معکوس کردن رشته (غیر پایتونی)ترفند معکوس کردن رشته در پایتون به صورت زیر است:معکوس کردن رشته (پایتونیک)۳. پیدا کردن بزرگترین و کوچکترین عدد در یک لیستروش مرسوم برای اینکار این هست که فرض کنیم اولین عنصر لیست بزرگترین عنصر لیست هست سپس این مقدار را با بقیه عناصر لیست مقایسه کنیم و در صورتی که عدد بزرگی بود آن را بعنوان بزرگترین مقدار در نظر بگیریم. همین کارها را برای پیدا کردن کوچکترین عنصر نیز انجام می دهیم با این تفاوت که فرض می کنیم اولین عنصر کوچکترین عنصر بوده و اگر در لیست عنصر کوچکتری پیدا شد آن را بعنوان کوچکترین در نظر می گیریم:پیدا کردن بزرگترین و کوچکترین عدد در یک لیست (غیر پایتونی)در پایتون می توان برای پیدا کردن بزرگترین و کوچکترین عدد از توابع max و min استفاده کردپیدا کردن بزرگترین و کوچکترین عدد در یک لیست ( پایتونیک)۴. تابع mapفرض کنید برنامه ای می خواهیم بنویسیم که مربع لیستی از اعداد را محاسبه و در لیست دیگه ای ذخیره کنه. برای نوشتن این برنامه می تونیم به شکل زیر عمل کنیم:محاسبه مربع اعداد یک لیست (غیر پایتونی)با استفاده از تابع map و عبارت lambda در پایتون برنامه بالا را می توانیم به صورت زیر نیز بنویسیم:محاسبه مربع اعداد یک لیست (پایتونیک )۵. یکتا کردندر روش مرسوم برای اینکه یک لیست یکتا (منحصر بفرد) داشته باشیم به صورت زیر می توانیم عمل کنیم:یکتا کردن عناصر لیست (غیر پایتونی)در پایتون با استفاده از تابع set می توانیم لیست های (یا توپل های) منحصر بفرد داشته باشیم:یکتا کردن عناصر لیست ( پایتونیک)لینک کدهای این پستترفندهای بیشتر: ده ترفند پایتونی (۲)</description>
                <category>سعید غلامی</category>
                <author>سعید غلامی</author>
                <pubDate>Fri, 24 May 2019 17:02:05 +0430</pubDate>
            </item>
            </channel>
</rss>