<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های دانشجویار</title>
        <link>https://virgool.io/feed/@daneshjooyar</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-04-15 10:27:26</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/263353/avatar/Dyf9Or.jpeg?height=120&amp;width=120</url>
            <title>دانشجویار</title>
            <link>https://virgool.io/@daneshjooyar</link>
        </image>

                    <item>
                <title>متریال دیزاین در فلاتر</title>
                <link>https://virgool.io/@daneshjooyar/%D9%85%D8%AA%D8%B1%DB%8C%D8%A7%D9%84-%D8%AF%DB%8C%D8%B2%D8%A7%DB%8C%D9%86-%D8%AF%D8%B1-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-qnduiyp8ks8d</link>
                <description>در این مقاله قصد داریم تا شما را با متریال دیزاین در فلاتر آشنا کنیم.  شاید شما نیز اینروز ها نام flutter را شنیده باشید. این فریمورک رابط کاربری در سال 2017 توسط گوگل ساخته شده است. برای اینکه ما این مقاله را شروع کنیم ابتدا باید ببینیم متریال دیزاین چیست و اساساً متریال دیزاین چه نوع طراحی است. پس از این کار به ساخت اپ material design میپردازیم.متریال دیزاین چیست؟متریال دیزاین(Material design) یکی از روش های طراحی است که با قدرت هرچه بیشتر توانسته ترکیبی از رابط کاربری خوب و طراحی خوب را داشته باشد. اگر شما از گوشی های اندروید و یا نرم افزار های گوگل در گوشی خود استفاده کرده باشید به وضوح این روش طراحی را مشاهده خواهید کرد. محصولات اختصاصی Google مانند Keep ، Meet و Maps و همچنین برنامه های معروفی مانند WhatsApp و DropBox همه و همه از دستورالعمل های Material Design پیروی می کنند.کتابخانه فلاتر متریالبرخی از ابزار های موجود در کتابخانه فلاتر متریال شامل دکمه ها و چک باکس ها و تاریخ و... که استاندارد اصلی هر طراحی UI هسستند، می شود. باید گفت که کلید ساخت یک نرم افزار متریال دیزاین استفاده از ویجت های ساده ای به نام material app و scaffold هستند.ساخت یک اپلیکیشن متریال دیزاینقبل از اینکه شروع به ساخت یک اپ متریال دیزاین کنیم لازم است تا با دو ویجت material app و scaffold آشنا شویم و نحوه کار آن ها را ببینیم.ویجت Material appویجت متریال اپ، قابلیت های گوناگونی از جمله ساپورت تم ها، navigation و localization را انجام میدهد. در پایین مثالی از یک اپ کوچک فلاتر متریال داریم.import &#039;package:flutter/material.dart&#039;;main() =&gt; runApp(MyApp());class MyApp extends StatelessWidget {@overrideWidget build(context) {return MaterialApp(home: Scaffold(body: Center(child: Text(&#039;Hello, Flutter&#039;),),),);}}متریال اپ ویژگی های بسیار زیادی را دارد که ما در اینجا فقط یک صفحه هوم ساده ساختیم و خواستیم نحوه انجام کار را به شما نمایش دهیم و بتوانیم مراحل بعدی را روی آن پیاده کنیم.ویجت Scaffoldبرنامه ای که در بالا ساختیم چیز هایی را کم دارد یا بهتر است بگوییم برخی ویژگی های آن گم شده اند. برای مثال تولباری در بالای صفحه قرار ندارد و یا دکمه ای برای navigation در پایین صفحه قرار نگرفته است همچنین اگر یک دکمه شناور داشتیم زیبایی بسیار زیادی به برنامه خود میدادیم. پس حال چه کاری میتوان انجام داد؟ پاسخ این سوال در ویجت scaffold است. این ویجت وظیفه چیدمان بصری را برای ما دارد و تمام قابلیت هایی که بالا گفتیم توسط این ویجت میتواند به سادگی به برنامه ما اضافه شود. در پایین با استفاده از ویجت scaffold برنامه ای که از قبل نوشته بودیم را اندکی تغییر دادیم. برای اینکار باید یه وسیله VS code ویا Flutter cli پروژه فلاتر جدیدی ایجاد کرده و برروی lib/main.dart بنویسید و سپس با زدن کلید F5 میتوانید خروجی برنامه خود را مشاهده کنید.import &#039;package:flutter/material.dart&#039;;void main() =&gt; runApp(MyApp());class MyApp extends StatelessWidget {static const String _title = &#039;Flutter Code Sample&#039;;@overrideWidget build(BuildContext context) {return MaterialApp(title: _title,home: MyStatefulWidget(),debugShowCheckedModeBanner: false);}}class MyStatefulWidget extends StatefulWidget {MyStatefulWidget({Key key}) : super(key: key);@override_MyStatefulWidgetState createState() =&gt; _MyStatefulWidgetState();}class _MyStatefulWidgetState extends State&lt;MyStatefulWidget&gt; {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text(&#039;To-Do List&#039;), actions: &lt;Widget&gt;[// action buttonIconButton(icon: Icon(Icons.person),onPressed: () {// TODO},),]),body: Center(child: Text(&#039;Log on to view todo items&#039;)),floatingActionButton: FloatingActionButton(onPressed: () {// TODO},tooltip: &#039;Add Task&#039;,child: const Icon(Icons.add),),);}}شکل اپ ما در نهایت به شکل زیر در می آید.نکاتی که در این مرحله باید توجه کنیم این است که با کلیک بر روی دکمه شناور هیچ حرکتی را مشاهده نخواهیم کرد. از طرفی  پارامتر اصلی ویجت MaterialApp اکنون به یک ویجت Stateful به نام MyStatefulWidget اختصاص داده شده است. این حالت ویجت Scaffold را تعریف میکند. نکته بعدی که باید به آن توجه کنیم این است که ویجت scaffold به طور خودکار صفحه را پر می کند و اجازه می دهد متن به صورت عمودی و افقی در مرکز قرار گیرد.بین صفحات حرکت کنیمما میخواهیم اگر کاربر برروی دکمه ورود کلیک کرد به صفحه دیگری هدایت شود. اینکار با استفاده از ویجت navigation در فلاتر انجام می شود. screen ها در دنیای فلاتر با نام routes شناخته می شوند و route ها در درون stack و navigator manager قرار گرفته اند. Stack از متد های navigator,push() و navigator.pop() استفاده می کند. حال بیایید نشان دهیم که چگونه میتوان از یک روت به روت دیگری تغییر مکان داد و با ساخت یک ویجت یا screen هنگامی که کاربر بر روی گزینه login کلیک میکند به صفحه بعدی رفت.import &#039;package:flutter/material.dart&#039;;void main() =&gt; runApp(MyApp());class MyApp extends StatelessWidget {static const String _title = &#039;Flutter Code Sample&#039;;@overrideWidget build(BuildContext context) {return MaterialApp(title: _title,home: MyStatefulWidget(),debugShowCheckedModeBanner: false);}}class MyStatefulWidget extends StatefulWidget {MyStatefulWidget({Key key}) : super(key: key);@override_MyStatefulWidgetState createState() =&gt; _MyStatefulWidgetState();}class _MyStatefulWidgetState extends State&lt;MyStatefulWidget&gt; {Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text(&#039;To-Do List&#039;), actions: &lt;Widget&gt;[// action buttonIconButton(icon: Icon(Icons.person),onPressed: () {Navigator.push(context,MaterialPageRoute(builder: (context) =&gt; LoginRoute()),);},),]),body: Center(child: Text(&#039;Log on to view todo items&#039;)),floatingActionButton: FloatingActionButton(onPressed: () {// TODO},tooltip: &#039;Add Task&#039;,child: const Icon(Icons.add),),);}}class LoginRoute extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(&amp;quotThis is the login route&amp;quot),),body: Center(child: RaisedButton(onPressed: () {// Navigate back to first route when tapped.Navigator.pop(context);},child: Text(&#039;Go back!&#039;),),),);}}نکاتی که درباره این کد مهم است این است که در خط 51 ما یک ویجت statless با نام LoginRoute ساختیم که یک دکمه برای برگشت برنامه به صفحه خانه به ما میدهد. از طرف دیگر در خط 31 ما از روش navigator.push() برای سوئیچ عملکرد دکمه ورود به سیستم از Onpressed به یک روت جدید استفاده کردیم همچنین در خط 62 تلاش کردیم که با آوردن POP در روت آخر استک عملکرد برگشت به صفحه خانگی را اندکی ساده تر کنیم.در پایان باید گفت که با استفاده از متریال دیزاین میتوانید جلوه بسیار زیبایی به نرم افزار های خود داده و از آنجایی که با استفاده از فلاتر میتوانید برای android و IOS برنامه نویسی کنید، شروع به استفاده از متریال دیزاین برای هر دو سیستم عامل محبوب کنید تا کاربران بیشتری را با استفاده از این رابط کاربری به روز جذب کرده و به محبوبیت و ظاهر بهتر اپلیکیشن خود کمک کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Wed, 06 Jan 2021 12:24:27 +0330</pubDate>
            </item>
                    <item>
                <title>جایگاه فلاتر در آینده برنامه نویسی موبایل</title>
                <link>https://virgool.io/@daneshjooyar/%D8%AC%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-%D8%AF%D8%B1-%D8%A2%DB%8C%D9%86%D8%AF%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84-cylfxwtgoru0</link>
                <description>نام فلاتر را شاید کمتر از سایر فریمورک ها شنیده باشید و ندانید این فریم ورک چیست و چه قابلیت های برای کمک به ساخت یک اپلیکیشن اندروید دارد. در این مقاله قصد داریم راجع به فلاتر صحبت کنیم و ببینیم که جایگاه فلاتر در آینده برنامه نویسی موبایل کجاست و چه آینده ای را درپیش دارد اما پیش از آن باید ببینیم که فلاتر چگونه به وجود آمده و چه کارهایی را می تواند برای ما انجام دهد.فلاتر چیست؟فلاتر در حقیقت یک فریم ورک UI است. که توسط گوگل توسعه داده شده است و در سال 2017 به بازار عرضه شده است. اگر بخواهیم در یک جمله فلاتر را توضیح دهیم باید گفت که این فریم ورک به شما قابلیت ساخت اپ های native موبایل را با استفاده از یک codebase میدهد.فلاتر بر روی دو فاکتور اساسی پافشاری دارد. این دو فاکتور شامل1- یک SDK : در حقیقت کلکسیونی از ابزار ها است که به شما امکان ساخت نرم افزار Andorid و یا IOS را میدهد و ابزار هایی برای کامپایل کد های شما به ماشین های نیتیو این دو سیستم عامل را دارا می باشد.2- یک فریمورک: این فریم ورک در حقیقت یک کتابخانه UI بر اساس ویجت ها است که به شما کمک میکند المنت هایی مانند دکمه و اسلایدر و ... را استفاده کنید و نرم افزار خود را در قالبی که خود میپسندید بسازید.برای استفاده از فلاتر شما از زبان برنامه نویسی دارت استفاده خواهید کرد. Dart در سال 2011 توسط گوگل ساخته شده است و تخصص آن برنامه نویسی فرانت اند می باشد. با استفاده از این زبان شما میتوانید نرم افزار های موبایل و یا اپلیکیشن های تحت وب بسازید.چرا باید از فلاتر استفاده کنیم؟فلاتر قابلیت های بسیار زیادی را دارد یکی از این قابلیت ها سادگی در یادگیری و راحتی در استفاده است. فلاتر قابلیت این را دارد که شما را با محیط مدرن آشنا کند. اگر قبلا از جاوا سوئیفت و یا امسال اینها استفاده کرده باشید به سادگی متوجه قدرت و زیبایی فلاتر در انجام کار می شوید. همه این قدرت فلاتر به مدرن بودن و همچنین سادگی آن باز می گردد. قابلیت دیگری که فلاتر را نسبت به دیگر فریم ورک ها برتر می کند، قابلیت تدوین سریع است باعث بهره بری حداکثری از قدرت این فریم ورک می شود. این قابلیت به این معنی است که با استفاده از قابلیتی به نام Hot-Reload به سادگی میتوانید کد خود را ویرایش کرده و به صورت real time ببینید این قابلیت سبب می شود که زمان زیادی را برای آپدیت کردن نرم افزار خود ذخیره کنید که در نوع خود قابلیتی بسیار مهم است.دلیل بعدی که باعث می شود فلاتر را به عنوان فریم ورک خود استفاده کنیم این است که این فریم ورک سریع است. بهتر است این سریع و بهینه بودن را با مثالی برای شما توضیح دهیم:فکر کنید که شرکتی دارید که یک استارتاپ بوده و میخواهید نرم افزار خود را برای جذب سرمایه گذار به دیگران نشان دهید. در این شرایط استفاده از فلاتر یکی از بهترین کار ها است. دلیل این اتفاق این است که اپلیکیشن فلاتر میتواند توسط یک نفر نوشته شود همچنین تفاوتی بیان این اپ و اپ های نوشته شده با زبان های برنامه نویسی دیگر وجود ندارد. از همه این ها که بگذریم فلاتر نیاز ما را برای نوشتن کدهای مختلف برای IOS و android از بین برده و با نوشتن یک کد و کامپایل آن برای دو سیستم عامل از آن استفاده کنیم از طرف دیگر فلاتر دارای ویجت های بسیار زیادی است که زیبایی خاصی را به کار شما می بخشد و موجب جذابیت هرچه بیشتر کار شما می شود.موارد دیگری که در دلیل استفاده از فلاتر میتوان گفت دو مورد جامعه در حال رشد و وجود فایل ها و منابع خوب برای یادگیری است. درست است که فلاتر فریمورکی به نسبت جدید است اما این جدید بودن خود به نوعی یک ویژگی برای این فریم ورک به حساب می آید. دلیل این امر این است که جامعه فلاتر به روز بوده هرروز به تعداد استفاده کننندگان از این زبان برنامه نویسی اضافه می شود. از طرفی به دلیل وجود داکیومنشن های بسیار مناسب یادگیری این فریمورک کاری بسیار ساده در عین حال لذت بخش شده است. با استفاده از این فریم ورک قابلیت های بسیار زیادی را میتوان به صورت ساده و با مثال های ساده یاد گرفت این یادگیری با مثال میتواند کمک شایانی به سرعت یادگیری ما بکند. از طرف دیگر اگر از همه موارد بالا هم چشم پوشی کنیم اینکه فلاتر توسط VS code و android studio نیز پشتیبانی می شود خود میتواند یکی از دلایل استفاده از این فریم ورک قدرتمند و کاربردی باشد.استفاده از فلاتر در کاریکی از مهمترین دلایل یادگیری هر زبان برنامه نویسی و فریمورکی موقعیت های شغلی است که در استفاده از آن فریمورک وجود دارند و میتوان از آن ها استفاده کرد. فریم ورک فلاتر یکی از فریم ورک هایی است که بازار کار بسیار مناسبی داشته و در بسیاری از شرکت های دنیا به یک برنامه نویس که توانایی کار با این فریم ورک را داشته باشد نیاز دارند. از طرفی اگر قصد کار کردن به عنوان یک فریلنسر را دارید استفاده از فلاتر را حتماً در دستور کار خود قرار دهید چون کار های زیادی را با آن میتوان انجام داد و مطمئناً به فلاتر نیاز پیدا خواهید کرد.درپایان باید گفت که طی سال های 2017 تا 2020 فلاتر رشد بسیار قدرتمند و خوبی را تجربه کرده است که همین امر سبب شده بتوان به آینده این فریمورک امیدوار بود. از طرفی نیز این فریم ورک توسط یکی از بزرگترین شرکت های تکنولوژی یعنی گوگل پشتیبانی می شود که این عامل نیز خود یکی دیگر از نشانه های رشد و پیشرفت این فریم ورک است. این فریم ورک میتواند برای شما جایگزین ساخت فرانت اند باشد و به جای استفاده از سوئیفت و جاوا در اندروید استودیو و یادگیری هرکدام از این محیط ها به طور مجزا از فلاتر استفاده کرده و برای هر دو پلتفرم برنامه نویسی کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Thu, 31 Dec 2020 13:33:02 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با معایب و مزایای ری اکت نیتیو و فلاتر برای برنامه نویسی اندروید</title>
                <link>https://virgool.io/CodeLovers/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%85%D8%B9%D8%A7%DB%8C%D8%A8-%D9%88-%D9%85%D8%B2%D8%A7%DB%8C%D8%A7%DB%8C-%D8%B1%DB%8C-%D8%A7%DA%A9%D8%AA-%D9%86%DB%8C%D8%AA%DB%8C%D9%88-%D9%88-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%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-caonbn0to9w7</link>
                <description>اگر می­خواهید برنامه­ و اپلیکیشن­ های مورد نظرتان را سریعتر در پلتفرم­ها توسعه دهید و مطمئن نیستید کدام فناوری را انتخاب کنید، پیشنهاد می­کنیم مقاله حاضر را تا انتها مطالعه کنید. در این مقاله، قصد داریم معایب و مزایای ری اکت نیتیو و فلاتر را بررسی کنیم تا به شما کمک کنیم که چهارچوب متناسب با ایده و برنامه­ تان را مشخص کنید. با ما همراه باشید.مقدمه ­ای بر فلاتر و ری اکت نیتیوابتدا جزئیات اساسی درباره Flutter و React Native را بیان می­کنیم.فلاتر چیست؟فلاتر یا Flutter یک جعبه ابزار UI قابل حمل است. به عبارت دیگر، این یک برنامه جامع کیت توسعه نرم افزاری (SDK) همراه با ابزار است.فلاتر چه کاری انجام می­دهد؟فلاتر امکان توسعه برنامه بین پلتفرمی را فراهم می­کند. این یک روش آسان برای توسعه­ دهندگان است که به آنها امکان می­دهد که برای ساخت و استقرار برنامه­ های بصری جذاب و بومی برای موبایل (iOS، Android)، وب و دسک تاپ با استفاده از یک پایگاه کد مجهز شوند.ویژگی­های فلاتراین منبع آزاد و رایگان استبر اساس Dart است؛ یک زبان برنامه نویسی سریع و شی گرا. دارت نسبتا جدید است و یادگیری آن آسان است، مخصوصا برای توسعه دهندگان باتجربه ای که با Java و C# آشنایی بیشتری دارند. معماری فلاتر براساس برنامه نویسی واکنش پذیر ساخته شده است (از همان سبک React پیروی می کند)فلاتر ابزارک ­های خاص خود را تهیه کرده ­است که از موتور رندر با عملکرد بالا گرفته شده ­اند. اینها سریع، جذاب و قابل تنظیم هستند. برنامه ­های Flutter از حس و ظاهر زیبا برخوردارندچه کسی Flutter را ایجاد کرد؟یک تیم در گوگل، فلاتر را ساختند. اما به عنوان یک پروژه باز، هر دو تیم Google و جامعه Flutter در توسعه آن سهیم هستند.چه برنامه های محبوبی با Flutter ساخته شده است؟برنامه Xianyu (توسط Alibaba)، برنامه Hamilton (برنامه­ای رسمی برای Broadway Musical)، برنامه Google Ads، Reflectly، برنامه JD Finance (برای یک شرکت پیشرو در زمینه فناوری دیجیتال)، برنامه Topline (توسط Abbey Road Studios).ری اکت نیتیو چیست؟یک چارچوب برنامه تلفن همراه منبع باز است که از JavaScript استفاده می­کند.ری اکت نیتیو(React Native) چه کاری انجام می­دهد؟ری اکت نیتیو یک فریمورک موثر برای موارد زیر است: توسعه بین پلت­فرمی ساخت برنامه ­های تلفن همراه با استفاده از زبان جاوا اسکریپت در حال توسعه برنامه­ها برای هر دو سیستم عامل Android و iOS با استفاده از یک پایگاه کد با استفاده از همان طراحی React است.چه کسی React Native را ایجاد کرده­ است؟فیس بوک React Native را ایجاد کرده­است.چه برنامه­ های محبوبی با React Native ساخته شده ­اند؟برنامه های Instagram، Facebook، Fb Ads Manager، Pinterest، Skype، Tesla، Bloomberg، Wix.com همگی با این سیستم طراحی شده اند.برای تفسیر بهتر موضوع، قبل از اینکه به معایب و مزایای ری اکت نیتیو بپردازیم اجازه دهید مزایا و معایب فلاتر را نیز بررسی کنیم.مزایا و معایب فلاترمزایای فلاتر1. بارگذاری سریع = کدگذاری سریعاز منظر توسعه­دهنده، Flutter توسعه برنامه­های پویاتر و سریعتر را ارائه می­دهد. این ویژگی به تیم­ها کمک می­کند ویژگی­ها را اضافه کنند، اشکالات را برطرف کنند و ایده­های جدید را فورا آزمایش کنند. این یکی از بزرگترین چیزهای مربوط به Flutter است که توسط هر شرکت برتر توسعه­دهنده برنامه تلفن همراه قدردانی می­شود.2. یک پایگاه کد، دو سیستم عامل تلفن همراهبا Flutter، توسعه دهندگان می توانند برای هر دو برنامه فقط یک کد بنویسند و هر دو سیستم عامل iOS و Android را پوشش دهند. این عامل جزء مزایای ری اکت نیتیو نیز محسوب می­شود.3. تا 50٪ تست کمتربا توجه به اینکه فلاتر در هر دو سیستم عامل یکسان است، روند تضمین کیفیت آن بسیار سریعتر خواهد بود درنتیجه می­توانید تست کمتری داشته باشید.4. برنامه ­های سریع­تربرنامه های Flutter به راحتی و سریع عمل می­کنند؛ بدون اینکه هرگز هنگام پیمایش آنها خسته یا پشیمان شوید. زیرا فلاتر از کتابخانه گرافیک Skia استفاده می­کند. هر بار که تغییر می­کند، رابط کاربر دوباره طراحی می­شود.5. طراحی­ های کاربر پسندفلاتر به اجزای سیستم بومی متکی نیست. در عوض دارای مجموعه­ای از ابزارک­ های سفارشی است که توسط موتور گرافیکی ارائه و مدیریت می­شود.6. رابط کاربر برنامه مشابه، حتی در دستگاه ­های قدیمی­تربرنامه ­های جدید حتی در سیستم­های iOS یا Android قدیمی نمایش داده می­شوند، بنابراین هرگز نگران پشتیبانی از دستگاه ­های قدیمی نخواهید بود.7. مناسب برای MVP هااگر شما نیاز به ساخت MVP (حداقل محصول قابل اطمینان) برای برنامه خود دارید. مثلا به عنوان ویترین سرمایه ­گذاران بالقوه، Flutter گزینه مناسبی است، خصوصا اگر زمان مدنظر کوتاه باشد.معایب فلاتر1. اندازه جامعه توسعه دهندهاکثر افراد معتقدند یکی از اصلی­ ترین مزایای ری اکت نیتیو نسبت به فلاتر جامعه توسعه­ یافته ­تر، باتجربه ­تر و مثبت ­تر آن است. بعلاوه، از نظر زبان­های برنامه نویسی، حداقل در حال حاضر از دارت به اندازه JavaScript استفاده نمی­شود.2. کتابخانه ­ها و پشتیبانی چشمگیری دارد، اما هنوز به اندازه توسعه بومی غنی نیستپشتیبانی Google از Flutter چشمگیر است، اما Flutter هنوز کاملا جدید است. این بدان معنی است که شما همیشه نمی­توانید عملکرد مورد نیاز خود را در کتابخانه ­های موجود پیدا کنید، بنابراین ممکن است برنامه نویسان شما نیاز به ایجاد قابلیت­ های سفارشی داشته باشند که این امر زمان­بر است.3. پشتیبانی مداومفلاتر فاقد پشتیبانی از سیستم عامل­های CI مانند Travis یا  Jenkins است. بنابراین برای دستیابی به ساخت، آزمایش و استقرار خودکار، توسعه ­دهندگان شما باید از اسکریپت­ های سفارشی استفاده و نگهداری کنند.4. خطر بسترهای نرم افزاریاگرچه Flutter منبع باز است، اما اگر Google تصمیم بگیرد از پروژه پشتیبانی کند، مسئله ایجاد می­شود. در مقطع زمانی فعلی، ما نمی­توانیم جهانی را تصور کنیم که گوگل از فلاتر دور شود.5. اندازه برنامهبرنامه­ های نوشته شده در Flutter بزرگتر از برنامه­ های بومی هستند.مزایای ری اکت نیتیو1. تازه سازی سریع = کدگذاری سریعویژگی Hot Reload با اجازه دادن به یک توسعه دهنده برای تزریق کد جدید به یک برنامه در حال اجرا، روند توسعه را سرعت می­بخشد. بنابراین­، یک توسعه دهنده می­تواند بدون ایجاد مجدد برنامه، تغییرات را فورا مشاهده کند. اساسا همان ویژگی Flutter است.2. یک پایگاه کد، دو سیستم عامل تلفن همراهبرخی مزایای ری اکت نیتیو دقیقا مانند Flutter عمل می­کند؛ مانند همین پایگاه داده که برای تأمین انرژی دو برنامه، با نوشتن فقط یک کد می­توانید هر دو سیستم عامل Android و iOS را پوشش دهید.3. استفاده زبان کاملا محبوب JavaScriptری اکت نیتیو(React Native ) از JavaScript استفاده می­کند؛ یک زبان برنامه نویسی که بسیاری از توسعه دهندگان آن را به خوبی می­شناسند (در حالی که هنوز دارت چندان شناخته شده یا مورد استفاده نیست).4. آزادی در انتخاب توسعه دهندهاین سیستم به توسعه دهندگان اجازه می­دهد تا برنامه­ های بین پلتفرمی بسازند.5. بلوغ نسبییکی دیگر از مزایای ری اکت نیتیو این است که از انتشار رسمی React Native زمان زیادی می­گذرد، بنابراین تیم فیس بوک وقت زیادی برای ایجاد ثبات در API و همچنین تمرکز بر رفع مشکلات و حل مشکلات داشته ­اند.6. یک جامعه فعال و گستردهپلتفرم React Native دارای یک جامعه توسعه دهنده گسترده است. نه تنها این، بلکه تعداد بیشماری از آموزشها، کتابخانه­ ها و چهارچوب­ های رابط کاربر وجود دارد که یادگیری این فناوری را آسان می­کند.7. یادگیری آن برای توسعه دهندگان React آسان استاین مزیت در لیست ما کاملا متوجه توسعه دهندگان React است. اگر سابقه توسعه وب دارید و از راه حل­های معروف React استفاده می­کنید، بدون نیاز به یادگیری کتابخانه ­های جدید، به راحتی می­توانید با React Native کار کنید. می­توانید از همان کتابخانه­ ها، ابزارها و الگوها استفاده کنید.8. تا 50٪ تست کمترعلاوه بر آنچه در بالا گفته شد، یکی دیگر از مزایای ری اکت نیتیو این است که ما با بکارگیری آن، تقریبا 50٪ تست خودکار کمتری می­نویسیم زیرا می­توانیم آزمون­ های یکسانی را برای اجرا در هر دو سیستم عامل ایجاد کنیم و از این طریق تقاضای تیم QA خود را کاهش دهیم.معایب ری اکت نیتیو1. واقعا بومی نیستمانند هر راه حل چند پلتفرمی، نه تجربه UI و نه عملکرد آن مانند برنامه­های بومی نخواهد بود؛ فقط نزدیک به آنهاست. اما هنوز هم دستیابی به بومی شدن با React Native آسانتر از Flutter است. اگر می­خواهید برنامه Flutter شما دارای اجزای بومی باشد، به کار اضافی نیاز دارد.2. اجزای کمتری از جعبه خارج می شوندپلتفرم React Native فقط از اجزای اساسی خارج از جعبه پشتیبانی می­کند (بسیاری از آنها با یک سیستم عامل خارج از جعبه سازگار هستند، مانند دکمه، نشانگر بارگیری یا کشویی).3. آزادی انتخاب توسعه دهندههنگامی که یک توسعه دهنده پروژه جدیدی ایجاد کرد، پس از آن باید تصمیم بگیرند که از کدام برنامه و کدام مدیریت دولتی استفاده کنند. برای درک تفاوت ­های ظریف هر راه حل و در نهایت تصمیم گیری در مورد بهترین راه حل برای استفاده از پروژه، ممکن است زمان زیادی صرف شود.4. متروک شدن بسیاری از بسته ­هازبان React Native دارای تعداد بسیار زیادی کتابخانه است. متأسفانه، بسیاری از آنها یا بی کیفیت هستند یا به کلی رها شده اند.5. رابط کاربر ضعیفاین می تواند UI برنامه را خراب کند اما به ندرت اتفاق می­افتد. بدتر اینکه، اگر تغییرات خاصی را در API Native Components ایجاد کنند، می­توانند حتی خطرناک­تر شوند. در حالی که وقتی صحبت از Flutter می­شود، UI برنامه بسیار پایدارتری است.6. برنامه ­ها بزرگتر از برنامه­ های بومی هستندبرنامه­ های نوشته شده در ری اکت نیتیو باید بتوانند کد Javascript (ماشین مجازی جاوا اسکریپت) را اجرا کنند. Android به طور پیش فرض این قابلیت را ندارد؛ به این معنی که برنامه ­ها باید شامل یک کتابخانه باشند که از کد JavaScript پشتیبانی می­کند، در نتیجه برنامه­ هایی بزرگتر از نسخه­ های مشابه Android خود هستند.برای توسعه برنامه خود، ری اکت نیتیو را انتخاب کنیم یا فلاتر؟ارائه به موقع پروژه ­ها یکی از مهمترین جنبه­ های توسعه برنامه­ های موبایل و وب است. ماهیت متقابل پلت فرم React Native و Flutter باعث کاهش زمان ورود به بازار می­شود. به علاوه، کتابخانه ­های شخص ثالث و اجزای آماده برای ارارئه، استفاده از آنها را برای ساخت برنامه شما کارآمدتر می­کند.هنوز هم فلاتر و ری اکت نیتیو پیشنهادات بومی فراتر از توسعه سریع ارائه می­دهند. آنها همچنین می­توانند هزینه ­های پروژه را کاهش دهند.علاوه براین، معایب و مزایای ری اکت نیتیو و فلاتر را برشمردیم. اینها دلایل اصلی شما برای به­ کار گرفتن هر دو چهارچوب برای پروژه شما هستند.اما کدام راه حل سریعترین زمان توسعه را ارائه می­دهد؟ یا بهترین ایده برنامه شماست؟واقعیت این است که این به مشخصات پروژه شما و هماهنگی مهارت تیم شما بستگی دارد.آیا توسعه دهندگان شما دارت را می­شناسند؟ اگر می­شناسند، برنامه نویسی با Flutter برایشان مناسب است. آیا توسعه دهندگان شما به JavaScript تسلط دارند؟ اگر تسلط دارند، React Native گزینه منطقی به نظر می­رسد. آیا می­خواهید GUI برنامه خود را با استفاده از مولفه­های UI بومی ایجاد کنید؟ اگر بله، React Native را انتخاب کنید. آیا طراحی برند اولویت اول شماست؟ اگر اولویت اولتان است، پیشنهاد می­کنیم Flutter متناسب با صورت حساب باشد.جمع ­بندیبا توجه به بررسی معایب و مزایای ری اکت نیتیو و فلاتر و تفاوت هایی که با یکدیگر داشتند، باید برای انتخاب هر یک از آنها، شایستگی­ های خاص خود را در نظر بگیرید. همیشه ارزش دارد که درباره پروژه خود با یک تیم باتجربه از توسعه دهندگان بحث کنید؛ افرادی که قادر به در نظر گرفتن رویکردهای مختلف هستند، با مهارت کافی و متنوع در مورد توسعه بین پلت فرم­ها. به عنوان مثال اگر از برنامه نویسانی که فقط یک چهارچوب را می­دانند، راهنمایی بگیرید، احتمالا شما را به استفاده از این ابزار سوق می­دهند.اگر هیچ چیز دیگری در تیم شما موجود نیست، مطمئن باشید که فلاتر و ری اکت نیتیو فناوری­ های بسیار خوبی هستند. آنها از محبوبیت زیاد و اعتماد پایدار بهره ­مند هستند. هر یک از چهارچوب­ ها می­تواند به برنامه شما کمک کند.اگه به صورت حرفه ای به دنبال آموزش اندروید هستید و می‌خواهید برنامه نویسی اندروید و ساخت اپلیکیشن ها را یاد بگیرید، از لینک زیر می‌توانید آموزش های لازم در حوزه برنامه نویسی موبایل و طراحی اپلیکیشن را یاد بگیرید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Tue, 22 Dec 2020 13:44:51 +0330</pubDate>
            </item>
                    <item>
                <title>معرفی چند برنامه ویرایش عکس در اندروید</title>
                <link>https://virgool.io/@daneshjooyar/%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A7%D8%AF%DB%8C%D8%AA-%D8%B9%DA%A9%D8%B3-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-l6exltafnzbz</link>
                <description>سیستم عامل اندروید یکی از سیستم عامل های بسیار پرطرفدار در دنیای موبایل میباشد. این سیستم عامل قابلیت های زیادی را به کاربران مختلف برای انجام کار های خود میدهد. اگر شما نیز جزو استفاده کنندگان گوشی های هوشمند باشید میدانید که یکی از قابلیت های بزرگ این نوع گوشی ها عکاسی است. عکاسی قابلیتی بسیار ساده و مهم در گوشی های هوشمند است و کمتر کسی پیدا میشود که از این قابلیت در گوشی های خود استفاده نکند. اما پس از گرفتن عکس نیاز به ادیت عکس نمود پیدا میکند. دلایل ادیت عکس بی شمار است پس نیاز به یک برنامه ویرایش عکس اندروید یا ای او اس بسیار دیده می شود. اگر شما نیز تا به حال تجربه عکاسی داشته اید و به این فکر افتاده اید که بهترین اپلیکیشن ادیت عکس چیست در این مقاله با ما همراه باشید. در این مقاله قصد داریم به معرفی بهترین برنامه ادیت عکس برای android بپردازیم و با چند تا از بهترین های این حوزه آشنا شویم.برنامه های خوب برای ویرایش عکس در اندرویدنرم افزار Photoshop Expressمطمئناً کسی نیست که به دنبال ادیت عکس بوده باشد و نامی از نرم افزار قدرتمند فتوشاپ را نشنیده باشد. این نرم افزار سالهاست یکی از یکه تازان این صنعت بوده و حالا تصمیم گرفته تا با نسخه اکسپرس قابلیت های خوب و بسیار کاربردی خود را برای اندروید نیز ارائه کند. استفاده از این نرم افزار مانند نسخه دسکتاپ نیست و عملکرد آن ساده تر است اما این به معنی ضعیف بودن و ناتوانی این نرم افزار نیست و این نرم افزار با قدرت بسیاری توانایی ادیت عکس های شما به بهترین شکل و بالاترین قدرت دارد. نرم افزار فتوشاپ اکسپرس یکی از بهتزین نرم افزار های لیست ما می باشد.نرم افزار Foodieبرای هرکسی پیش آمده است که از غذاها عکس بگیرد و همه ما برای یکبار هم که شده این کار را تجربه کرده ایم. Foodie با استفاده از این اتفاق نرم افزاری را ساخته است که به صورت بسیار حرفه ای و کامل به مقوله عکس برداری از غذاها می پردازد. این نرم افزار محیطی نزدیک به اینستاگرام دارد اما با توانایی های خود میتواند جلوه بسیار زیبایی به عکس های شما دهد.نرم افزار Adobe Lightroomنرم افزار های شرکت ادوبی همچنان در لیست ما قرار دارند و دلیل وجودشان چیزی نیست جز قدرت فوق العاده این نرم افزار ها. این نرم افزار که لایتروم نام دارد ورژن موبایلی نرم افزار Adobe Lightroom است که در دسکتاپ وجود دارد و مناسب کار عکاسان حرفه ای است. برای کسانی که میخواهند عکاس حرفه ای شوند و از فرمت RAW استفاده کنند یکی از بهترین نرم افرار ها لایتروم است. فرمت RAW یک فرمت بسیار مطرح و محبوب در میان عکاسان بوده و بسیاری از عکاسان از این فرمت استفاده میکنند. قابلیت بسیار مناسب این نرم افزار این است که نمیخواهد همه چیز را در یک اپ گنجانده و چندین کار را انجام دهد و در عوض با یک ابزار بسیار قدرتمند adjustment که به صورت یک اسلایدر است بسیاری از قابلیت ها را فراهم میکند.نرم افزار VSCOاین نرم افزار یک ادیتور عکس اندروید و ios است که تا حدود زیادی شبیه به اینستاگرام بوده و با استفاده از این نرم افزار به سادگی میتوانی به ویرایش عکس های خود بپردازید و به عکس ها خود ظاهری جدید بدهید. این نرم افزار قادر است با وجود فیلتر های کلاسیک خود به عکس های شما ظاهری قدیمی دهد که همین امر سبب می شود به نسبت عکس هایی که هرروزه در شبکه های اجتماعی میبینیم تفاوت و کلاس خاصی را در عکس های خود داشته باشیم. از طرفی با استفاده از این نرم افزار می توان عکس های خود را در یک کامینیوتی که متعلق به همین نرم افزار هست نیز به اشتراک گذاشت که این امر نیز میتواند یکی از جذابیت های این نرم افزار باشد.نرم افزار Prisma Photo Editorبله باید قبول کرد که بسیاری از نرم افزار هایی که تصویر را به صورت های کارتونی تبدیل می کنند بسیار بد و ناامید کننده هستند اما پریسما نرم افزاری است که از این موضوع خارج است و توانایی بسیار خوبی دارد. اگر به دنبال تبدیل تصویر خود به نقاشی های حرفه ای هستید و فکر میکنید این کار نشدنی است بهتر است شانسی به prisma بدهید. این نرم افزار با استفاده از یادگیری ماشین و شبکه های عصبی سعی کرده است تا بهترین تجربه کاربری را در اختیار کاربران خود قرار دهد. یکی از مزایای این نرم افزار رایگان بودن بسیاری از فیلتر های آن است در صورتی که اگر نیاز به فیلتر های بیشتری داشته باشید با استفاده از پرداخت هزینه میتوانید آن ها را فعال کنید. پریسما دارای یک کامینیوتی نیز هست که میتوانید بعد از ادیت عکس های خود آن ها را در آنجا به اشتراک بگذارید.نرم افزار Snapseedاین نرم افزار نامی کمتر شناخته شده در لیست ما است اما این اتفاق به معنی ضعیف بودن این نرم افزار برای ادیت عکس نیست. این نرم افزار یکی از نرم افزار های بسیار قدرتمند در ویرایش و ادیت عکس است که با وجود تعداد بسیار زیادی از فیلتر ها و تنظیم رنگ های خودکار میتواند ما را در ساخت و ادیت عکسی با کیفیت بیشتر و حرفه ای تر یاری کند. اما بازی همینجا به اتمام نمیرسد، این نرم افزار قابلیت تنظیم عمق عکس را دارد و میتواند پس زمینه عکس شما را در صورت نیاز تار کند همچنین Selective Adjust نیز میتواند روشنایی رنگ و همچنین کنتراست یک نقطه خاص در عکس را تنظیم نماید. این نرم افزار منوی بسیار ساده و اما قابلیت های فراوانی داد که با چند دقیقه چرخیدن در درون آن به سادگی عکس خود را به بهترین نحو ادیت کنید. همچنین این نرم افزار قابلیت ادیت کار های قبلی را از طریق ذخیره تاریخچه ادیت دارد و شما میتوانید هر زمان که نیاز داشتید یکی از عکس ها قبلی را انتخاب و به ادامه کار ادیت خود بپردازید.در پایان باید گفت که ادیت یا ویرایش عکس با نرم افزار های مختلف قابل انجام است و هرکدام قابلیت های خاصی را برای شما به ارمغان می آورند و شما می‌توانید بنا به ادیتی که میخواهید با عکس خود انجام دهید و نوع ویرایش خود تغییرات لازم را درون عکس ایجاد کنید. چیزی که در ادیت و ویرایش حرفه ای عکس بسیار مهم است و اهمیت دارد خلاقیت و اندکی سلیقه است زیرا با این دو شما به سادگی میتوانید هر عکسی که خواستید به شکلی جدید و با ایده ای جدید ادیت کنید و با استفاده از این خلاقیت نیازی به داشتن دانش حرفه ای برای ساخت تصاویر خاص از تصاویر خود را نداشته باشید.اگه به صورت حرفه ای به دنبال آموزش اندروید هستید و می‌خواهید برنامه نویسی اندروید و ساخت اپلیکیشن ها را یاد بگیرید، از لینک زیر می‌توانید آموزش های لازم در حوزه برنامه نویسی موبایل و طراحی اپلیکیشن را یاد بگیرید.https://www.daneshjooyar.com/category/mobile-programming/android/</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Sun, 20 Dec 2020 10:54:20 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش تغییر نام و آیکون برنامه های اندروید</title>
                <link>https://virgool.io/@daneshjooyar/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%86%D8%A7%D9%85-%D9%88-%D8%A2%DB%8C%DA%A9%D9%88%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-fvhsuufclo7r</link>
                <description>اندروید سیستم عاملی متن باز است که طرفداران خاص خود را از سرتاسر دنیا دارد و تعداد بسیار زیادی از افراد در تمام دنیا از آن استفاده می کنند. این سیستم عامل به دلیل متن باز بودن بسیار دست کاربران را در ایجاد تغییرات در آن باز گذاشته است تا جایی که بسیاری از تغییراتی که در سیستم عامل های دیگر غیرممکن است به سادگی در اندروید قابل انجام است. برای بسیاری از ما پیش آنده که پس از مدتی استفاده از گوشی موبایل خود از ظاهر و تم گوشی خسته شدیم و یا دوست داریم به هر دلیل تغیری در نام و ظاهر آیکون یک نرم افزار دهیم. بهترین راه برای تغییر اسم و آیکون یک برنامه اندروید این است که این مقاله را با ما همراه باشید تا باهم بتوانیم به سادگی این کار را انجام بدهیم.برای انجام اینکار دو روش وجود دارد. هیچکدوم از این دو روش در اصل برنامه تغییری ایجاد نکرده و فقط ظاهر برنامه را دستخوش تغییرات میکنند.استفاده از android Quick shortcut makerبا استفاده از android Quick shortcut maker به سادگی هرچه تمام تر میتوانید آیکون و نام برنامه نصب شده توسط خود را عوض کنید. برای اینکار ابتدا  Quick shortcut maker را نصب کرده و سپس وارد محیط آن می شوید. پس از آن که وارد محیط نرم افزار شدید در محیط برنامه و بین اپلیکیشن های مختلف خود اسکرول کنید تا به اپلیکیشنی که میخواهید نام و آیکون آن را عوض کنید برسید.پس از انتخاب اپلیکیشن مورد نظر خود اطلاعات نرم افزار در کنار صفحه و به مانند شکل زیر برای شما نمایان می شود.حال میتوانید با انتخاب قسمت نام، نام برنامه و با انتخاب قسمت تغییر آیکون آیکون برنامه را تغییر دهید.بعد از اتمام اینکار به سادگی و با استفاده از کلید create که در پایین صفحه مشاهده می کنید میتوانید برنامه خود را ایجاد کنید.پس از اتمام تمام مراحل پیامی به شکل زیر برای شما به نمایش در می آید که نشان دهنده اتمام موفقیت آمیز کار بوده است.استفاده از Nova launcherلانچر ها نرم افزار هایی هستند که برای ایجاد حس تغییر در هنگام خسته و تکراری شدن گوشی ما و همچنین ارائه تعدادی قابلیت های کلیدی و جدید به ما عرضه شده اند. یعنی درحقیقت همه لانچر ها دارای مجموعه آیکون ها و مجموعه تغییرات خود در هنگام نصب و استفاده هستند اما در اینجا راجع به وجود چندین نوغ مختلف از پک های آیکون صحبت نمیکنیم. در حقیقت انتخاب Nova launcher نیز به همین دلیل بوده است. این لانچر نرم افزار بسیار قدرتمند و دارای تعداد بسیار زیادی از قابلیت ها و پک های آیکون است اما ما در اینجا با قابلیتی بسیار مهم و کاربردی ان لانچر کار داریم و آن عوض کردن نام برنامه ها است.برای استفاده از Nova launcher شما میتوانید آن را به مانند دیگر نرم افزار های اندرویدی نصب کنید. پس از نصب به درون برنامه رفته و آن را اجرا کنید. هنگامی که در درون محیط این لانچر قرار گرفتید به سادگی برروی آیکونی که در درون صفحه اصلی یا هوم اسکرین شما قرار گرفته دست خود را نگه دارید. هنگامی که این اتفاق بیافتد منویی برای شما باز میشود که گزینه ای به نام ادیت دارد. با استفاده از این گزینه به سادگی میتوانید نام برنامه مورد نظر خود را تغییر داده و نام دلخواه خود را برای آن انتخاب کنید.این دو روش که در قسمت بالا گفته شد ساده ترین روش های انجام تغییر در آیکون و نام نرم افزار ها بوده و یکی از کاربردی ترین روش ها میباشد. در این روش ها فقط ظاهر برنامه عوض شده و فایل اصلی برنامه بی تغییر باقی میماند. اگر شما بخواهید فایل اصلی برنامه را تغییر داده و درون آن تغییری ایجاد کنید باید از نرم افزار هایی به مانند Apk aditor استفاده کنید که استفاده از آن ها مقداری پیچیده تر بوده و نیاز به کسب اطلاعات بیشتر درباره اندروید و نحوه کارکرد این سیستم عامل محبوب دارد.اگر شما به این آموزش علاقه دارید، و مطالب حوزه اندروید برایتان جذاب است، می‌توانید آموزش های سایت در زمینه برنامه نویسی اندروید را ازینجا مشاهده کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Wed, 16 Dec 2020 12:58:39 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش ویرایش برنامه های اندروید بدون کدنویسی</title>
                <link>https://virgool.io/coderlife/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%DB%8C%D8%B1%D8%A7%DB%8C%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A8%D8%AF%D9%88%D9%86-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-akg8ffkjlpjz</link>
                <description>در این آموزش قصد داریم به ویرایش برنامه های اندروید بدون کدنویسی بپردازیم و ببینیم چگونه و به چه شکل میتوان برنامه های اندروید را به سادگی و از طریق خود گوشی android ویرایش کرد. در این مقاله به شما آموزش apk editor را داده و جزئیات ادیت با این برنامه را به شما میدهیم. پس اگر برای شما هم تا به حال پیش آمده که بخواهید به ویرایش اپلیکیشن اندروید پرداخته و به دنبال آموزش استفاده از برنامه اپ ادیتور بوده اید در ادامه این مقاله با ما همراه باشید.مرحله نخستدر ابتدا باید شروع به نصب برنامه ای پی کی ادیتور پرو کنید این برنامه را میتوانید از گوگل پلی و یا سایر سایت هایی که آن را ارائه میدهند دانلود کنید. پس از دانلود و نصب این برنامه به منویی به شکل زیر راهنمایی خواهید شد که در حقیقت منوی اصلی برنامه است.بعد از کلیک بر روی گزینه اول میتوانید فایل مورد نظر خود برای ادیت را انتخاب نمایید. از طرفی اگر به دنبال ادیت یکی از برنامه هایی هستید که از قبل در درون گوشی شما نصب شده است باید گزینه دوم یعنی select apk from app را بزنید. بعد از زدن این گزینه ها و انتخاب برنامه مورد نظر سه گزینه برای شما به نمایش در می آید که در اینجا به بررسی ابعاد مختلف و توانایی های این سه گزینه میپردازیم.گزینه اول : Full editاگر گزینه اول یعنی فول ادیت را انتخاب کنید میتوانید تمام امکاناتی که نیاز به ادیت آن ها دارید انتخاب کنید و در حقیقت کامل ترین گزینه برای ادیت این گزینه است. پس از انتخاب این گزینه منویی به شکل زیر را مشاهده خواهید کرد.در قسمت اول یعنی string شما میتوانید بیشتر ادیت های متنی ممکن برای برنامه را انجام دهید این به آن معنی است که امکانات متنی قابل تغییر برنامه در این تب وجود دارد. تب بعدی تب فایل است. این تب یکی از تب هایی است که بسیار قابلیت های خوبی به شما میدهد. با استفاده از این قسمت شما توانایی دارید که به سادگی هرچه تمام تر شروع به ادیت عکس ها و رابط کاربری ( interface ) کنید. بعد از ورود به قسمت فایل تعدادی فولدر مشاهده خواهید کرد و بعد از آن باید وارد فولدر res شده و سپس وارد فولدر drawable شوید و بعداز آن میتوانید عکس هایی که میبینید را با لمس دست و نگه داشتن انگشت روی آن ادیت کنید. قسمت بعدی و مهمی که درباره فول ادیت وجود دارد قسمت manifest است. در این قسمت از برنامه apk editor میتوانید به سادگی اقدام به عوض کردن پرمیشن های برنامه کنید و برنامه را تاجایی که میخواهید برای خودتان شخصی سازی نماییدوقتی که همه کارهای مورد نظر خود را به سادگی انجام دادید باید با زدن کلید build شروع به ساخت برنامه اندرویدی دلخواه خود کنید.گزینه دوم: Simple editقسمت دوم از منویی که برای ما باز شد قسمت simple edit است. این قسمت قابلیت هایی را برای ما ایجاد میکند که در فول ادیت به طور کامل تر وجود دارد اما در این قسمت ادیت های ساده تر و کمتر پیچیده ای به جای گزینه هایی که در full edit دیدیم میبینیم.گزینه سوم: Common editاین ادیت در حقیقت میتواند کاربردی ترین ادیت ما برای نرم افزار های اندرویدی باشد با استفاده از این ادیت به سادگی هرچه بیشتر میتوانید آیکون و نام برنامه های اندرویدی خود را عوض کرده و برنامه را با نام و آیکون مخصوص به خودتان شبیه ساری کنید و از آن استفاده کنید.از دیگر امکانات این بخش میتوان به تغییر در ورژن و پکیج پرداخت. همچنین باید گفت با استفاده از این بخش شما به سادگی توانایی جابه جایی محل نصب و یا همچنین دایرکتوری اپ را دارید. برای اینکار نیز کافی است برروی install location کلیک کنید تا بتوانید این قسمت را نیز به سادگی ادیت کنید.در این مقاله سعی شد تا پاسخ برخی از سوالات شما درباره ادیت اپلیکیشن در اندروید را باهم ببینیم و به آموزش ادیت برنامه های اندروید و آموزش ویرایش اپلیکیشن اندروید بپردازیم و همه این کارها را نیز با نرم افزار محبوب apk editor که بهترین و پر قدرت ترین نرم افزار در این حوزه است، انجام دادیم.اگر شما به این آموزش علاقه دارید، و مطالب حوزه اندروید برایتان جذاب است، می‌توانید آموزش های سایت در زمینه برنامه نویسی اندروید را ازینجا مشاهده کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Mon, 14 Dec 2020 12:11:45 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش recycler view در اندروید استودیو</title>
                <link>https://virgool.io/@daneshjooyar/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-recycler-view-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A7%D8%B3%D8%AA%D9%88%D8%AF%DB%8C%D9%88-irwzzsuqve4f</link>
                <description>در این آموزش قصد داریم به یادگیری recycler review می پردازیم قبل از اینکه به بررسی و آموزش ریسایکلر ویو در اندروید استودیو بپردازیم باید ببینیم که Recycler view چیست و برای چه کاری استفاده می شود.اصلا Recycler view چیست؟در اندروید استودیو های قدیمی ما گزینه ای به نام listview و gridview داشتیم که در نسخه 5 اندروید به بعد Recycler view که در حقیقت نسخه منعطف تر و بهتری از آن است معرفی شده است. در حقیقت در Recycler view برخلاف list view که یک مولفه برای شما کار میکرد. چندین مولفه برای شما کار میکنند. در Recycler view بر خلاف list view که تعداد محدودی از گزینه ها را داشتیم هیچ محدودیتی در تعداد گزینه های لیست خود نداریم و میتوانیم به سادگی تعداد بسیار زیادی از آیتم ها را درون آن قرار دهیم همچنین همگام استفاده از Recycler view می توانیم از اینیمیشن ها استفاده کنیم که زیبایی بیشتری به کار نهایی ما میدهد. این قابلیت ها باعث می شود Recycler view طراحی کاربر پسندانه تری به نرم افزار شما بدهد.اجزای Recycler viewبرای شروع به کار با Recycler view ما نیاز به دانستن موارد زیر داریم. ویژگی RecyclerView.Adapter: در حقیقت این آداپتور برای handle داده های مورد نظر اتصال آن ها به ویو استفاده می شود. ویژگی LayoutManager: که به قرار دهی آیتم ها در مکان درست کمک میکند. ویژگی Itemanimator: به ساخت انیمیشن های ما کمک میکند.معرفی RecyclerView.Adapterآداپتور Recycler view درحقیقت شامل یک شکل جدید از آداپتور است. روش کار آن بسیار مشابه با آداپتور هایی است که تا کنون استفاده میکردید اما نیاز به برخی ویژگی ها مانند viewholder دارد.معرفی LayoutManagersریسایکلرویو برای نمونه سازی در حقیقت به یک layout manager و یک آداپتور نیاز دارد در حقیقت یک layout manager آیتم ها را درون Recycler view قرار میدهد و مشخص میکند که چه آیتم هایی در دید کاربر هستند و چه آیتم هایی خارج از دید کاربر هستند و دیگر در صفحه قابل مشاهده نیستند. در Recycler view ما سه نوع layout manage داخلی داریم. این سه نوع manager عبارتند از LinearLayoutManager که نشان دهنده لیست عمودی و افقی است. GridLayoutManager که نشان دهنده آیتم ها در گرید است و StaggeredGridLayoutManager که آیتم ها را در Staggered grid نشان می دهد.لازم به ذکر است که در ورژن اخیر Support Library اگر به طور دقیق layout manager را تنظیم نکنید. ریسایکلر ویو نمایش داده نمی شود و یک ارور Logcat به شکل زیر به وجود می آید.E/RecyclerView: No layout manager attached; skipping layoutمعرفی ItemAnimatorآداپتور RecyclerView.ItemAnimator  وظیفه Animate کردن تغییرات viewgorup مانند اضافه کردن و دیلیت کردن را دارد که به آداپتور اطلاع داده می شود. DefaultItemAnimator را می توان برای انیمیشن های پیش فرض استفاده کرد وبا استفاده از این انیمیشن ها بسیار خوب کار می کند.استفاده از Recycler viewبرای استفاده از Recycler view باید مراحل زیر را انجام دهیم.1. ابتدا Recycler view اندرویدx را به فایل gradle build اضافه میکنیم.2. یک کلاس مدل را تعریف میکنیم تا به عنوان منبع داده ما استفاده شود.3. یک RecyclerView را به activity خود اضافه میکنیم که آیتم ها را نمایش دهد.4. یک فایل خام XML برای نمایش و ظاهر آیتم ها میسازیم.5. یک RecyclerView.Adapter و یک ViewHolder برای رندر کردن آیتم ها میسازیم.6. آداپتور ساخته شده را به منبع داده ها متصل میکنیم.نصب recycler viewابتدا باید شروع به نصب ریسایکلر ویو کنیم. برای شروع به کار ابتدا اطمینان حاصل کنید که کتابخانه Recycler view اندروید X به عنوان یک dependency در app/build.gradle قرار داشته باشد.dependencies {...implementation &#039;androidx.recyclerview:recyclerview:1.1.0&#039;}یعد از زدن کد بالا برروی Sync Project with Gradle filesکلیک کنید تا موارد مورد نیاز شما دانلود شود.تعریف مدلهر recycler view با استفاده از منبعی از داده ها پشتیبانی می شود. در این مورد ما یک کلاس contact را تعریف میکنیم که نشان دهنده مدل داده هایی است که در recycler view استفاده می شود.public class Contact {private String mName;private boolean mOnline;public Contact(String name, boolean online) {mName = name;mOnline = online;}public String getName() {return mName;}public boolean isOnline() {return mOnline;}private static int lastContactId = 0;public static ArrayList&lt;Contact&gt; createContactsList(int numContacts) {ArrayList&lt;Contact&gt; contacts = new ArrayList&lt;Contact&gt;();for (int i = 1; i &lt;= numContacts; i++) {contacts.add(new Contact(&amp;quotPerson &amp;quot + ++lastContactId, i &lt;= numContacts / 2));}return contacts;}}ساخت یک recycler view به همراه layoutدر درون فایل لایوت اکتیویتی  XML مورد نظر در res/layout/activity_users.xml بایستی recycler view را از Support library وارد کنیم.&lt;?xml version=&amp;quot1.0&amp;quot encoding=&amp;quotutf-8&amp;quot?&gt;&lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=&amp;quothttp://schemas.android.com/apk/res/android&amp;quotxmlns:app=&amp;quothttp://schemas.android.com/apk/res-auto&amp;quotandroid:layout_width=&amp;quotmatch_parent&amp;quotandroid:layout_height=&amp;quotmatch_parent&amp;quot&gt;&lt;androidx.recyclerview.widget.RecyclerViewandroid:id=&amp;quot@+id/rvContacts&amp;quotandroid:layout_width=&amp;quot0dp&amp;quotandroid:layout_height=&amp;quot0dp&amp;quotapp:layout_constraintBottom_toBottomOf=&amp;quotparent&amp;quotapp:layout_constraintEnd_toEndOf=&amp;quotparent&amp;quotapp:layout_constraintStart_toStartOf=&amp;quotparent&amp;quotapp:layout_constraintTop_toTopOf=&amp;quotparent&amp;quot /&gt;&lt;/androidx.constraintlayout.widget.ConstraintLayout&gt;در layout, preview میتوانیم RecyclerView درون فعالیت خود را ببینیم.ساخت یک layout ردیفیقبل از اینکه به ساخت Adaptor بپردازیم باید یک فایل XML ایجاد کنیم. این فایل XML در حقیقت برای هر ردیف لیست ما استفاده می شود. این آیتم layout باید شامل یک ردیف افقی به همراه یک اسم و دکمه باشد.این layout میتواند از مسیر res/layout/item_contact.xml ساخته شود و هر ردیف را رندر بگیرد.&lt;?xml version=&amp;quot1.0&amp;quot encoding=&amp;quotutf-8&amp;quot?&gt;&lt;LinearLayoutxmlns:android=&amp;quothttp://schemas.android.com/apk/res/android&amp;quotandroid:orientation=&amp;quothorizontal&amp;quotandroid:layout_width=&amp;quotmatch_parent&amp;quotandroid:layout_height=&amp;quotwrap_content&amp;quotandroid:paddingTop=&amp;quot10dp&amp;quotandroid:paddingBottom=&amp;quot10dp&amp;quot&gt;&lt;TextViewandroid:id=&amp;quot@+id/contact_name&amp;quotandroid:layout_width=&amp;quot0dp&amp;quotandroid:layout_height=&amp;quotwrap_content&amp;quotandroid:layout_weight=&amp;quot1&amp;quot/&gt;&lt;Buttonandroid:id=&amp;quot@+id/message_button&amp;quotandroid:layout_width=&amp;quotwrap_content&amp;quotandroid:layout_height=&amp;quotwrap_content&amp;quotandroid:paddingLeft=&amp;quot16dp&amp;quotandroid:paddingRight=&amp;quot16dp&amp;quotandroid:textSize=&amp;quot10sp&amp;quot/&gt;&lt;/LinearLayout&gt;حال بعد از اینکه ساخت layout خود را به پایان رساندیم میتوانیم شروع به ساخت adaptor کنیم.ساخت آداپتوردر اینجا نیاز به ساخت یک آداپتور داریم تا اطلاعات مارا درون ریسایکلر ویو نشر دهد. در حقیقت کار آداپتور تبدیل یک شی در یک مکان به لیستی ( ردیفی ) از آیتم ها برای قرار دهی اطلاعات است. لازم است این را بدانیم که آداپتور RecyclerView نیاز به وجود یک شی به نام ViewHolder دارد این View Holder در حقیقت نقش تعریف کننده و همچنین تهیه کننده دسترسی به همه view های درون یک ردیف را دارد. ما از طریق روش زیر میتوانیم به یک لیست آداپتور خالی و یک Holder در ContactsAdapter.java دسترسی پیدا کنیم.// Create the basic adapter extending from RecyclerView.Adapter// Note that we specify the custom ViewHolder which gives us access to our viewspublic class ContactsAdapter extendsRecyclerView.Adapter&lt;ContactsAdapter.ViewHolder&gt; {// Provide a direct reference to each of the views within a data item// Used to cache the views within the item layout for fast accesspublic class ViewHolder extends RecyclerView.ViewHolder {// Your holder should contain a member variable// for any view that will be set as you render a rowpublic TextView nameTextView;public Button messageButton;// We also create a constructor that accepts the entire item row// and does the view lookups to find each subviewpublic ViewHolder(View itemView) {// Stores the itemView in a public final member variable that can be used// to access the context from any ViewHolder instance.super(itemView);nameTextView = (TextView) itemView.findViewById(R.id.contact_name);messageButton = (Button) itemView.findViewById(R.id.message_button);}}}حال که آداپتور و view holder را تعریف کردیم میتوانیم آداپتور خود را پر کنیم. برای شروع میتوانیم یک member variable برای لیست مخاطبین خود ایجاد کرده و لیست را از طریق constructor انتقال دهیم.public class ContactsAdapter extendsRecyclerView.Adapter&lt;ContactsAdapter.ViewHolder&gt; {// ... view holder defined above...// Store a member variable for the contactsprivate List&lt;Contact&gt; mContacts;// Pass in the contact array into the constructorpublic ContactsAdapter(List&lt;Contact&gt; contacts) {mContacts = contacts;}}هر آداپتور دارای 3 متد اصلی است: onCreateViewHolder که آیتم مورد نظر را پر کرده و لایوت را بسازد. onBindViewHolder که وظیفه انجام تنظیمات ویژگی های نمایشی بر اساس داده ها را دارد و getItemCount که تعداد آیتم های مورد نمایش را میشمارد. برای اینکه این سه ویژگی را درون آداپتور خود بگنجانیم میتوانیم از کد زیر استفاده کنیم.public class ContactsAdapter extendsRecyclerView.Adapter&lt;ContactsAdapter.ViewHolder&gt; {// ... constructor and member variables// Usually involves inflating a layout from XML and returning the holder@Overridepublic ContactsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {Context context = parent.getContext();LayoutInflater inflater = LayoutInflater.from(context);// Inflate the custom layoutView contactView = inflater.inflate(R.layout.item_contact, parent, false);// Return a new holder instanceViewHolder viewHolder = new ViewHolder(contactView);return viewHolder;}// Involves populating data into the item through holder@Overridepublic void onBindViewHolder(ContactsAdapter.ViewHolder holder, int position) {// Get the data model based on positionContact contact = mContacts.get(position);// Set item views based on your views and data modelTextView textView = holder.nameTextView;textView.setText(contact.getName());Button button = holder.messageButton;button.setText(contact.isOnline() ? &amp;quotMessage&amp;quot : &amp;quotOffline&amp;quot);button.setEnabled(contact.isOnline());}// Returns the total count of items in the list@Overridepublic int getItemCount() {return mContacts.size();}}حال که آداپتور ما کامل شده است میتوانیم به ترکیب داده ها و آداپتور بپردازیم.ترکیب Adaptor و Recycler viewدر این اکتیویتی و مشغول populate تعدادی sample user که باید در recycler view نمایش داده شود می شویم.public class UserListActivity extends AppCompatActivity {ArrayList&lt;Contact&gt; contacts;@Overrideprotected void onCreate(Bundle savedInstanceState) {// ...super.onCreate(savedInstanceState);setContentView(R.layout.activity_users);// Lookup the recyclerview in activity layoutRecyclerView rvContacts = (RecyclerView) findViewById(R.id.rvContacts);// Initialize contactscontacts = Contact.createContactsList(20);// Create adapter passing in the sample user dataContactsAdapter adapter = new ContactsAdapter(contacts);// Attach the adapter to the recyclerview to populate itemsrvContacts.setAdapter(adapter);// Set layout manager to position the itemsrvContacts.setLayoutManager(new LinearLayoutManager(this));// That&#039;s all!}}حال در پایان مراحل بالا باید لیستی به شکل زیر ببینید و اگر لیست شما به اندازه کافی آیتم داشته باشد به سادگی میتوانید بین آیتم ها scroll کنید. این scroll کردن بسیار سریع تر و روان تر از listview انجام می پذیرد.در این آموزش دیدیم که چگونه می‌توانیم یک recycler view را در اندروید استودیو ایجاد کرده و به شکلی که میخواهیم از آن استفاده کنیم. اگر بخواهید از لیست های قابل اسکرول کردن در اپلیکیشن خود استفاده کنید بهترین راه استفاده از recycler view به جای list view است زیرا هنگامی که داده های درون لیست شما از تعدادی بیشتر می شوند حتی برای اسکرول در درون لیست هم ممکن است با استفاده از list view به مشکل بخورید.اگر شما علاقه مند به برنامه نویسی اندروید هستید و کار با اندروید استودیو برایتان لذت بخش است پیشنهاد می‌کنیم مجموعه آموزش های اندروید سایت ما را بررسی کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Tue, 08 Dec 2020 09:47:15 +0330</pubDate>
            </item>
                    <item>
                <title>خروجی گرفتن با فرمت APK در ری اکت نیتیو</title>
                <link>https://virgool.io/@daneshjooyar/%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%D8%A8%D8%A7-%D9%81%D8%B1%D9%85%D8%AA-apk-%D8%AF%D8%B1-%D8%B1%DB%8C-%D8%A7%DA%A9%D8%AA-%D9%86%DB%8C%D8%AA%DB%8C%D9%88-jzfdcnphg86j</link>
                <description>در این آموزش میخواهیم به نحوه گرفتن خروجی نهایی گرفتن در ری اکت نیتیو بپردازیم و ببینیم که چگونه و به چه صورت میتوان با استفاده از react native یک فایل نهایی APK از اپلیکیشن خود برای انتشار در playstore خروجی بگیریم.در بسیاری از مواقع برای بسیاری از برنامه نویسان پیش آمده است که اپلیکیشن خود را به طور کامل نوشته و دیباگ کرده اند اما نمیتوانند خروجی مناسبی برای انتشار در Google play store بگیرند. برای اینکه اینکار را بکنیم درحقیقت نیاز داریم تا یک فایل ریلیز نهایی با فرمت APK را از اپلیکیشن مورد نظر خروجی بگیریم اما چگونه؟ با ما همرا باشید تا دراین آموزش به شما نحوه انجام اینکار را توضیح دهیم.نحوه گرفتن خروجی : ساخت Keystoreدر ابتدای کار لازم است که فایل Keystore خود را ساخته و آن را در مسیر android/app کپی کنید.keytool -genkey -v -keystore your_key_name.keystore -alias your_key_alias -keyalg RSA -keysize 2048 -validity 10000بعد از اینکه شما از ابزار Key tool استفاده کردید سوالی مبنی بر ورود پسوورد از شما پرسیده می شود. این پسوورد را باید به خاطر بسپارید و آن را فراموش نکنید. بعد از این مرحله این Command promp از شما سوال های دیگری می پرسد که باید به آن ها پاسخ دهید. خروجی نهایی این سوال ها شکلی به صورت زیر می شود.حال باید your_key_name.keystore را در دایرکتوری android/app در فولدر ری اکت خود کپی کنید.mv my-release-key.keystore /android/appنحوه گرفتن خروجی : اضافه کردن به Gradleحال شما دو راه را برای اد کردن تنظیمات key store در android\app\build.gradle دارید. راهی که بیشتر افراد از آن استفاده می کنند، راه محبوب و غیر امن که به شکل زیر است.android {....signingConfigs {release {storeFile file&#40;&#039;your_key_name.keystore&#039;&#41;storePassword &#039;your_key_store_password&#039;keyAlias &#039;your_key_alias&#039;keyPassword &#039;your_key_file_alias_password&#039;}}buildTypes {release {....signingConfig signingConfigs.release}}}ازآنجایی که فایل پسوورد خود را به شکل یک متن ساده در Gradle ذخیره کردید امنیت پایینی را در فایل خود دارید پس نمیتوانید به نتیجه مناسبی برسید. برای اینکه امنیت خوبی را در ساخت اپلیکیشن خود تجربه کنید میتوانید از روش زیر استفاده کنید.signingConfigs {release {storeFile file&#40;&#039;your_key_name.keystore&#039;&#41;storePassword System.console().readLine(&amp;quot\nKeystore password:&amp;quot)keyAlias System.console().readLine(&amp;quot\nAlias: &amp;quot)keyPassword System.console().readLine(&amp;quot\Alias password: &amp;quot)}}با استفاده از کد بالا شما میتوانید تعیین کنید که در خط فرمان از شما پسوورد را بخواهد تا بتوانید امنیت را حفظ کنید. این اقدام در صورتی که از خط فرمان استفاده می کنید قابل استفاده است و نتیجه آن کد بالا می باشد. همچنین شما باید مطمئن باشید که signingConfigs قبل از buildTypes نمایش داده شده باشد. تا به اروری در موقع کار بر نخورید.نحوه گرفتن خروجی: فایل نهاییبعد از طی این مرحله شما میتوانید با استفاده از کد پایین یک فایل APK ایجاد کنید.cd androidو پس از آن برای ویندوز و لینوکس و مک از کدهای زیر استفاده میکنید.gradlew assembleRelease windows./gradlew assembleRelease  mac و linuxاین فایل APK یک فایل کامل و امضا شده است که به سادگی میتوانید آن را درstore  Google play آپلود کنید. فایل شما در آدرس android/app/build/outputs/apk/app-release.apk ایجاد می شود و میتوانید به سادگی از آن استفاده کنید.در ادامه پیشنهاد می کنیم مجموعه آموزش های سایت ما در زمینه اندروید را مشاده کنید و در صورت هر گونه سوال مستقیما با پشتیبانی سایت در تماس باشید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Sun, 06 Dec 2020 13:49:56 +0330</pubDate>
            </item>
                    <item>
                <title>خروجی گرفتن ios در react native</title>
                <link>https://virgool.io/@daneshjooyar/%D8%AE%D8%B1%D9%88%D8%AC%DB%8C-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-ios-%D8%AF%D8%B1-react-native-q61lmjbtulhz</link>
                <description>در حالی که react native یک ابزار توسعه چند پلتفرم فوق العاده است نمیتواند عمل قرار دهی و مناسب سازی نرم افزار ها در استور اپل را انجام دهد. به همین دلیل در این مقاله قصد داریم به گرفتن خروجی ios در react native بپردازیم و ببینیم که به چه شکل میتوانیم برنامه هایی که به وسیله react native نوشتیم را برای ios خروجی بگیریم و درون App Store قرار دهیم.آماده سازی اولیهبرای اینکه اپ ما در ری اکت نیتیو به خوبی در اپ استور قرار گرفته و بازده خوبی از آن بدست آوریم باید نکاتی را قبل از هر چیزی رعایت کنیم.اسم برنامه : اسم برنامه باید کوتاه مختصر و فراگیر باشد.توضیحات برنامه : برای توضیحات برنامه باید از نوشته هایی استفاده کنید که به خوبی برنامه را توضیح دهند از طرفی نیز از کلمات محبوب استفاده کنید تا محتوای شما بهتر دیده شود.عکس هایی از برنامه: باید Screen Shot هایی از برنامه قرار دهید که قابلیت های برنامه را به خوبی نشان دهد.ورژن برنامهباندل ID : فرمت استاندارد آن به شکل com.CompanyName.AppName است.پروفایل توسعه دهنده یا ناشرآیتم های بالا برای دیده شدن هرچه بیشتر برنامه لازم است اما بعد از اینکه درباره آیتم های بالا فکر کردید و آن ها را نوشتید لازم است مواردی را نیز برای قرار دادن برنامه در اپ استور انجام دهیم کنید. این موارد شامل موارد زیر می شود.آیکون برنامه: آیکون برنامه باید به ابعاد 1024 * 1024 پیکسل باشد.کلمات کلیدی: شما 100 کاراکتر در اختیار دارید که به وسیله آن میتوانید کلمات کلیدی که بیشترین ارتباط با برنامه و همچنین محبوبیت را دارند انتخاب کنید.کشور ها: شامل کشور هایی است که نرم افزار شما در آن در دسترس قرار دارد.دسته بندی برنامه: برای برنامه خود باید دسته بندی را مشخص کنید تا برنامه شما در آن دسته بندی در اپ استور در دسترس باشد.کپی رایت: نام کمپانی و کسی که حق کپی رایت برنامه را دارد وارد میکنید.اکانت تست: این اکانت تست در حقیقت اکانتی است که اپل با استفاده از آن اپ شما را تست و تایید میکند. این اکانت میتواند بعد از تایید برنامه شما پاک شود.بعد از رعایت تمام مراحل بالا حال شروع به توسعه اپ آی او اس خود میکنیم.توسعه برنامه Expoبرنامه Expo در حقیقت یک SDK رایگان و opensource است. که به وسیله آن میتوانیم برای ios اپلیکیشن خود را توسعه دهید و با استفاده از Expo نیازی به داشتن مک و یا دستگاه ios برای تست نرم افزار خود ندارید. برای اینکه نرم افزار Expo خود را توسعه دهید نیاز است که تمام پیکربندی app.json شما set شده و تنظیم شده باشد و نتیجه چیزی شبیه به شکل زیر می شود.باشد و نتیجه چیزی شبیه به شکل زیر می شود.}&amp;quotexpo&amp;quot: {&amp;quotname&amp;quot: &amp;quotApp Name&amp;quot,&amp;quoticon&amp;quot: &amp;quot./path/to/your/app-icon.png&amp;quot,&amp;quotversion&amp;quot: &amp;quot1.0.0&amp;quot,&amp;quotslug&amp;quot: &amp;quotapp-slug&amp;quot,&amp;quotsdkVersion&amp;quot: &amp;quotXX.0.0&amp;quot,&amp;quotios&amp;quot: {&amp;quotbundleIdentifier&amp;quot: &amp;quotcom.companyname.appname&amp;quot},&amp;quotandroid&amp;quot: {&amp;quotpackage&amp;quot: &amp;quotcom.companyname.appname&amp;quot}}}شما ویژگی های زیادی را میتوانید به کد بالا اضافه کنید که فقط 3 عدد از این ویژگی ها نیاز است.گزینه Name: نام برنامه شما است که هم در Expo و هم در برنامه شما ظاهر خواهد شد.گزینه Slug: در حقیقت آدرس ( URL ) slug شما برای منتشر کردن نرم افزار است. برای مثال app-name به expo.io/@username/app-name project ارجاع میدهد.گزینه sdkVersion: ورژن sdk اکسپو که پروژه روی آن اجرا می شود.حال که اپ آماده است و تمام پیکربندی متناسب انجام شده است. باید مراحل زیر را انجام دهید.1. برروی گزینه publish در برنامه توسعه expo خود کلیک کرده تا برنامه شما انتشار یابد. اگر از کد های دستوری استفاده می کنید میتوانید از دستور expo publish استفاده کنید.2. شما یک لینک به شکل expo.io/@username/app-name دریافت خواهید کرد که کد مخصوص ios شما در درون آن قرار دارد.3. هر دفعه که شما برنامه را آپدیت می کنید لازم است که publish را دوباره بزنید تا تغییرات در برنامه اعمل شود.بعد از ساخت برنامه Expo حال به ساخت برنامه ios میپردازیم.ساخت برنامه Ios1- ابتدا expo build:ios را اجرا کنید.2- حال پیام زیر را مشاهده خواهید کرد.[exp] No currently active or previous builds for this project.? How would you like to upload your credentials?(Use arrow keys)❯ Expo handles all credentials, you can still provide overridesI will provide all the credentials and files needed, Expo does no validation3- حال شما باید distribution certificate خود را وارد برنامه کنید. میتوانید اجازه دهید خود Expo این کار را برای شما انجام دهد.4- حال برنامه ios شما شروع به ساخت میکند. شما به سادگی و با استفاده از دستور expo build:status میتوانید از روند ساخت اپ اندروید خود را مشاهده کنید.5- وقتی که نرم افزار شما ساخته شد یک URL فایل با پسوند .ipa از اپ اندرویدی شما در اختیارتان قرار می گیرد که میتوانید آن را دانلود کنید.بعد از اتمام همه این مراحل شما یک خروجی ios به شکل استاندارد برای برنامه ساخته شده خود دارید که با استفاده از آن میتوانید به سادگی اپ خود را درون اپ استور اپل آپلود کرده و در اختیار کاربران قرار دهید. نکته قابل توجه درباره برنامه شما همانطور که در قسمت قبل هم گفته شد انتخاب نام و همینطور توضیحات و کلید واژه های مناسب است که میتواند برنامه شما را بسیار برای کاربران جذاب کرده و بازدهی نرم افزار را بالا ببرد.اگر علاقه مند به برنامه نویسی در زمینه موبایل و طراحی اپلیکیشن با زبان اندروید هستید، دیدن این صفحه را به شما توصیه می‌کنیم :https://dnjy.ir/gerx</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Tue, 01 Dec 2020 12:55:03 +0330</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی دسکتاپ با پایتون</title>
                <link>https://virgool.io/@daneshjooyar/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%B3%DA%A9%D8%AA%D8%A7%D9%BE-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-y3fi2d6xitsv</link>
                <description>زبان برنامه نویسی پایتون امروزه یکی از زبان های برنامه نویسی بسیار مطرح و کاربردی بوده و بسیاری از برنامه نویسان در سرتاسر دنیا به نوشتن برنامه با این زبان برنامه نویسی روی آورده اند. در این مقاله قصد داریم به برنامه نویسی دسکتاپ با پایتون آشنا شده و بدانیم که چگونه و با استفاده از چه فریم ورک هایی میتوان شروع به برنامه نویسی ویندوز با پایتون کرد. البته در این مقاله به فریمورک های کراس پلتفرم نیز اشاره می شود که به کمک آن ها میتوانید علاوه بر ساخت نرم افزار برای ویندوز برای دیگر پلتفرم ها نیز برنامه نویسی کنید.فریم ورک PyQtاولین فریمورک ما برای بررسی در این مقاله که برای نوشتن برنامه برای دسکتاپ نیز بسیار قدرتمند است، فریمورک PyQt است. این فریمورک در حقیقت Qt را که یک فریم ورک برای ایجاد رابط گرافیکی یا GUI در پایتون است. Qt خود در محیط C++ نوشته شده است اما PyQt حضور این فریمورک قدرتمند را برای پایتون میسر می کند. کد زیر نوشتن کلمه Hello world را با استفاده از این فریمورک در زبان پایتون نشان می دهد. باید گفت که این فریمورک قابلیت برنامه نویسی برای همه سیستم عامل ها را دارد.import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
 
def window():
  app = QApplication(sys.argv)
  widget = QWidget()
 
  textLabel = QLabel(widget)
  textLabel.setText(&amp;quotHello World!&amp;quot)
  textLabel.move(110,85)
 
  widget.setGeometry(50,50,320,200)
  widget.setWindowTitle(&amp;quotPyQt5 Example&amp;quot)
  widget.show()
  sys.exit(app.exec_())
 
if __name__ == &#039;__main__&#039;:
  window()نتیجه کد بالایی تصویری به شکل زیر است.فریم ورک Kivyاین فریم ورک نیز یکی از فریمورک هایی است که از اکثز سیستم عامل ها پشتیبانی کرده و جزو فریم ورک هایی است که مناسب ایجاد رابط گرافیکی یا GUI است. این فریمورک یک فریم ورک متن باز بوده و بسیاری از افراد به دلیل وجود کتابخانه های رایگان بسیار و قدرتمند بودن این فریم ورک ازآن استفاده می کنند. نمونه ای از کد این برنامه به شکل زیر می باشد. با استفاده از کد زیر به سادگی میتوانید Hello world را با استفاده از زبان برنامه نویسی پایتون و فریم ورک کیوی بنویسید.#!/usr/bin/env pythonfrom kivy.app import App #We need to import the bits of kivy we need as we need them as importing everything would slow the app down unnecessarilyfrom kivy.uix.widget import Widget #this is a thing that you want the App to displayfrom kivy.uix.label import Label #this will import the code for the label in which we want to display Hello World!class Lesson1App(App):def build(self):lbl=Label(text=&#039;Hello World!&#039;) #lbl is a variable name being assigned the Label definitionreturn lbl #This  must match the name of the Widget you want to appear on screenif __name__ == &#039;__main__&#039;: #Documentation suggests that each program file should be called main.py but I think that only matters if you&#039;re creating the final App to go onto a phone or tablet we&#039;re a long way off from that yetLesson1App().run() #This must match the name of your Appفریم ورک Tkinterفریمورک Tkinter در حقیقت به سادگی و قدرتمند بودن معروف است و یکی از پرطرفدارترین فریم ورک ها در بین برنامه نویسان برای طراحی رابط گرافیکی است. رابط گرافیکی موجود در Tkinter در حقیقت ترکیبی از رابط گرافیکی استاندارد پایتون با Tk است که نتیجه آن، این فریم ورک شده است. Tkinterیکی از فریم ورک هایی است که تعداد زیادی از منابع و آموزش ها برای آن وجود دارد و همچنین تعداد بسیار زیادی از ابزار ها و ویجت ها را برای برنامه نویسی در اختیار شما قرار میدهد. این قابلیت ها باعث می شود که Tkinter یکی از پکیج های مناسب برای برنامه نویسی دسکتاپ باشد. کد زیر نوشتن یک برنامه ساده با  استفاده از Tkinter است.from tkinter import Tk, Label, Buttonclass MyFirstGUI:def __init__(self, master):self.master = mastermaster.title(&amp;quotA simple GUI&amp;quot)self.label = Label(master, text=&amp;quotThis is our first GUI!&amp;quot)self.label.pack()self.greet_button = Button(master, text=&amp;quotGreet&amp;quot, command=self.greet)self.greet_button.pack()self.close_button = Button(master, text=&amp;quotClose&amp;quot, command=master.quit)self.close_button.pack()def greet(self):print(&amp;quotGreetings!&amp;quot)root = Tk()my_gui = MyFirstGUI(root)root.mainloop()فریم ورک PyGUIاین فریم ورک ساده ترین و همچنین سبک ترین فریم ورک در میان لیست ما است. با استفاده از این فریمورک به سادگی میتوانید شروع به برنامه نویسی ویندوز با پایتون نمایید. البته باید گفت که این فریم ورک نیز به مانند فریم ورک های دیگری که در این لیست معرفی کردیم به صورت مولتی پلتفرم بوده که این مورد خود جزو موارد بسیار مهم برای برنامه نویسی محسوب می شود و هر برنامه نویسی قبل از انتخاب فریم ورک خود برای شروع به کار این مورد را باید مد نظر داشته باشد. برنامه نویسان PyGUI تعداد کد های بسیار کمی را ما بین رابط گرافیکی و نرم افزار پایتون مینویسند که این صفحه کاری شما را به یک صفحه برای نمایش رابط گرافیکی تبدیل می کند.WxPythonWxPython در حقیقت یک ماژول توسعه یافته پایتون است که یکی از ماژول های قدیمی و سنتی پایتون بوده و رابط گرافیکی برای پایتون را ارائه میدهد. یکی از نکات مهم راجع به این فریم ورک پایتون این است که WxPython توانایی ساخت نرم افزار برای ویندوز لینوکس و مک را دارد و با استفاده از آن میتوانید نرم افزار های سنتی این سه پلتفرم دسکتاپ را بنویسید. کد زیر Hello world را با استفاده از این فریم ورک در زبان برنامه نویسی پایتون نشان می دهد.import wxapp = wx.App()window = wx.Frame(None, title = &amp;quotwxPython Frame&amp;quot, size = (300,200))panel = wx.Panel(window)label = wx.StaticText(panel, label = &amp;quotHello World&amp;quot, pos = (100,50))window.Show(True)app.MainLoop()بعد از اجرای کد بالا یک Box به شکل زیر ایجاد شده و Hello world در آن به نمایش در می آید.در پایان باید گفت که این فریم ورک ها اکثراً مولتی پلتفرم بوده و به گونه ای طراحی شده اند که شما به سادگی بتوانید برنامه ساخته شده خود را در همه پلتفرم های مرسوم اجرا کرده و از آن استفاده کنید. انتخاب فریم ورک مناسب برای برنامه نویسی بیش از هرچیز دیگری به نوع و نحوه کار شما مرتبط بوده همه برنامه نویسان با توجه به نوع کاری که می خواهند انجام دهند فریم ورک مورد نیاز خود را انتخاب می کنند.اگه علاقه مند به برنامه نویسی پایتون هستید و می خواهید مباحث جدید در این حوزه را آموزش ببینید از اینجا می توانید وارد سایت دانشجویار شده و بخش مقدماتی پایتون را به صورت کاملا رایگان آموزش ببینید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Tue, 24 Nov 2020 13:32:52 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با مفاهیم برنامه نویسی شی گرایی در اندروید</title>
                <link>https://virgool.io/@daneshjooyar/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D9%85%D9%81%D8%A7%D9%87%DB%8C%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B4%DB%8C-%DA%AF%D8%B1%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-b4lbmtj5sk42</link>
                <description>برنامه ­نویسی شی­ گرایی در اندروید، تغییر بزرگی در توسعه اپلیکیشن ­ها و برنامه­ نویسی ایجاد کرده ­است. در یک برنامه شی ­گرا با استفاده از نرم ­افزار نوشته­ شده، می­‌توانید از ویژگی­ هایی که از قبل تعبیه شده ­اند، استفاده کنید یا ویژگی­ های جدیدی را اضافه کنید. از مزایای برنامه نویسی شی گرا این است که در صورت ایجاد تغییرات، همه چیز واضح و مرتب می­ ماند. همچنین بدون اینکه در منطق داخلی کدها دست ببریم، نظم همه چیز حفظ می­شود. بنابراین خود را برای آشنایی بیشتر با برنامه­ نویسی شی­ گرایی در اندروید، آماده کنید.برنامه نویسی شی گرا چیست؟احتمالا شنیده ­اید که جاوا زبان اصلی برای ایجاد برنامه­ های اندروید است. یعنی برای اعمال شی­ گرایی در اندروید، از جاوا استفاده می­‌شود.­قبل از برنامه ­نویسی شی­ گرایی در اندرویدقبل از برنامه­ نویسی شی ­گرا (OOP)، برنامه ­های به روشی دستوری، اساسا بصورت لیست طولانی از دستور­العمل­ ها نوشته می­شدند. در این مدل برنامه­ نویسی، شما کدها را همانطور که می­خواهید مقاله­ ای بنویسید، از بالا به پایین می­نویسید.مشکلی که در این نوع برنامه­ نویسی وجود دارد این است که با گسترده ­شدن کد، بررسی کردن آن می­تواند به طرز باورنکردنی پیچیده و دشوار شود. اگر برنامه ­ای ساخته ­اید که دارای میلیون­ ها خط دستوری است، پیگیری یا یافتن خطاها در آن تقریبا غیرممکن است. به همین دلیل برخی آن را کد اسپاگتی (spaghetti code) می­نامند.برای راه ­حل این وضعیت، زبان­ های برنامه­ نویسی جدیدی ابداع شدند که سعی داشتند کد را به صورت مدولار و ساختار یافته ­تر کنند. این زبان­های رویه ­ای جدید، کد GOTO را با ساختارهای کنترلی تو­در­تو همراه با فراخوانی رویه­ ها ارتقا داده ­اند. رویه یا تابع، یک واحد منطقی است که وظیفه ­ای را انجام داده و ورودی خاصی را می­گیرد.بعد از برنام­نویسی رویه ­ای و ساختاری، برنامه­ نویسی شی­ گرا به میدان آمد.ایده پشت برنامه ­نویسی شی­ گرایی در اندرویدشاید بهتر باشد که OOP را به عنوان یک فلسفه طراحی در نظر بگیریم. در زبان­ های رویه­ ای، هیچ ارتباطی بین داده­ های مورد­استفاده و رویه ­هایی که از آنها استفاده کرده ­اند، وجود نداشت. با OOP، رویه ­ها اکنون متد نامیده می­شوند و داده ­ها ذاتا به یکدیگر گره خورده ­اند.یک مزیت عالی در برنامه­ نویسی شی­گرا این است که به اشتراک گذاشتن کد با سایر افراد و ساختن برنامه­های مفصل را آسان کرده­است. برنامه ­نویسی شی­ گرا برای همکاری ایده ­آل است و نگرش منبع باز بودن را تسهیل می­‌کند. اگرچه درک آن کمی پیچیده است اما ظرافت خاصی در برنامه­ نویسی شی­ گرا وجود دارد.شی گرایی در اندرویداساسا شی در شی­ گرایی در اندروید به چه معناست؟روش کار داده ­ها و متدها بر روی دیتاها، از طریق جمع ­شدن در یک شی انجام می­شود. یک شی شامل داده­ها، دستورات و رفتارها است. برای تعریف شی، داده ­ها و متدهای آن، از یک کلاس استفاده می­کنیم.بیایید تصور کنیم شما می­‌خواهید یک کلاس برای نشان ­دادن یک حساب بانکی ایجاد کنید. نام کلاس را BankAccount می­نامیم و دارای برخی از داده ­ها مانند نام دارنده حساب، شماره حساب و موجودی است. متدها هم چیزی شبیه زیر هستند:getAccountHolderName()deductFromAccount()به طور پیش ­فرض فقط متدهایی که متعلق به کلاس BankAccount هستند، حق کار­کردن روی داده­ های مرتبط با کلاس را دارند. با محدود­کردن دسترسی به داده ­ها، یک کلاس می­‌تواند مطمئن باشد که هیچ قسمت دیگری از برنامه، داده ­های آن را دستکاری نکرده ­است. همچنین این موضوع به این معناست که یک شی می‌تواند ساختارهای داده داخلی خود را از سایر شی­ های دیگر، پنهان کند.هنگامیکه یک کلاس به درستی طراحی شده ­باشد، می­تواند بدون تأثیرگذاری بر سایر قسمت­های برنامه، دوباره کدگذاری و توسعه یابد، البته تا زمانی که رابط کاربری عمومی (API) و  عملکرد به همان صورت باقی بمانند.نحوه عملکرد SDK اندروید تقریبا اینطور است. Google به طور مکرر نسخه­های جدید SDK را منتشر می­کند، با این وجود برنامه ­های Android همچنان مانند گذشته ساخته و کار می­‌کنند، زیرا Google رفتاری را تغییر نداده ­است.بررسی یک مثالبرای نشان­ دادن چگونگی عملکرد همه این موارد، بیایید ببینیم که چگونه می‌­توانیم کد مثال مدیریت بانک را بنویسیم. این کد را بدون درنظر گرفتن توضیحات ( توضیحات، هر چیزی است که قبل از آن &quot;//&quot; آمده­ باشد، به این معنی که بخشی از کد نیست.) مشاهده می‌­کنید:امیدوارم که این مثال به شما کمک کرده ­باشد تا متوجه شوید چگونه می­‌توانید در عمل از اشیا و کلاس­ها استفاده کنید.بررسی یک مثال دیگرهنگامی که شما یک برنامه شی ­گرا می‌­نویسید، با در­نظر گرفتن داده­ ها کار را شروع می‌­کنید.به عنوان مثالی دیگر، یک کارمند شخصی با نام و عنوان شغلی را در نظر بگیرید، مطمئنا کارمندان ویژگی­ های دیگری نیز دارند، اما فعلا به اصول اولیه پایبند باشید.مسلما هر شرکتی دارای انواع مختلفی کارمند است. به عنوان مثال، شرکت شما ممکن است کارمندانی تمام وقت و نیمه وقت داشته باشد. هر کارمند تمام وقت یک حقوق سالانه دارد:در این مثال، کلمه extends Employee به جاوا می­‌گوید که کلاس جدید (کلاس FullTimeEmployee)، دارای تمام خصوصیاتی است که هر کارمند دارد و احتمالا دارای ویژگی­ های بیشتری نیز است. به عبارت دیگر، هر شی FullTimeEmployee، یک شی Employee است (شاید کارمندی از یک نوع خاص).مانند هر Employee، یک FullTimeEmployee دارای نام و عنوان شغلی است، اما یک FullTimeEmployee یک حقوق هم دارد. این همان چیزی است که کلمات extends Employee، برای شما انجام می­دهند.یک کارمند نیمه­ وقت حقوق سالیانه مشخصی ندارد. در عوض، هر کارمند نیمه­ وقت دارای نرخی مربوط به حقوق ساعتی و تعداد مشخصی از ساعت­ های کاری در هفته است:تاکنون یک PartTimeEmployee دارای چهار ویژگی است: نام، عنوان شغلی، پرداخت ساعتی و تعداد ساعات کاری. حالا نوبت مدیران است. هر مدیر یک کارمند تمام­ وقت است. اما علاوه بر دریافت حقوق معمولی، هر مدیر اجرایی پاداش نیز دریافت می­کند:کلمه کلیدی extends جاوا، بسیار جذاب است زیرا با گسترش یک کلاس، همه کدهای پیچیده موجود در کلاس دیگر را، به ارث می­برید. کلاسی که گسترش می­دهید می­تواند کلاسی باشد که شما قبلا آن را نوشته‌­اید. به هر ترتیب، شما می­‌توانید از کد موجود استفاده مجدد کرده و مواد را اضافه نمایید.در مثالی دیگر، سازندگان اندروید کلاس Activity را با 5000 خط کد نوشتند. شما می­‌توانید با تایپ کردن ساده extends Activity، از همه آن خطوط کد به صورت رایگان استفاده کنید:با دو کلمه extends Activity، کلاس MainActivity جدید شما می‌­تواند تمام کارهایی را که یک فعالیت معمول اندروید انجام می­‌دهد را، عملی ­کند. مانند یافتن موارد در فهرست res اپلیکیشن، نمایش کادر گفتگو، پاسخ دادن به شرایطی که دچار  کمی حافظه می­‌شود، شروع کردن یک فعالیت دیگر، پاسخ دادن به یک فعالیت، شروع یا خاتمه اجرا و موارد دیگر.اگر می­خواهید درک بهتری از کدگذاری در یک زبان برنامه ­نویسی شی­ گرا داشته باشید، توصیه می‌­کنیم با پایتون آشنا باشید. Python یک زبان برنامه ­نویسی کاملا ساده است که اتفاقا فقط از اشیا و کلاس­ها استفاده می‌کند. اما جاوا برای یک تازه ­وارد می­تواند بسیار سخت­ باشد.مفاهیم برنامه ­نویسی شی ­گرایی در اندرویدتا الان می­‌دانیم که یک شی مجموعه ­ای از رفتارها، دستورات و داده­ ها است که برای عملکرد کد مفید است. مزایای بیشتری برای OOP وجود دارد. به عنوان مثال، یک شی می‌­تواند از شی دیگری مشتق شود. وقتی یک کلاس از کلاسی دیگر مشتق شود، عنوان ارث را به خود می­‌گیرد. از نظر فنی کلاس پایه superclass و کلاس مشتق شده، subclass نامیده می­‌شود.برنامه­ نویسی شی­ گرایی، به کاربران اجازه می‌­دهد تا برنامه­ های جاوا را ایجاد و سازماندهی کنند و می­‌دانیم که نوشتن برنامه ­های شی­ گرا شامل ایجاد کلاس­ها، اشیا و برنامه ­هایی است که از آن اشیا استفاده می­کنند.اکنون چند جنبه از توسعه شی­ گرایی در اندروید، می­تواند به شما کمک کند تا از پروژه­ های اندروید خود به بهترین شکل استفاده کنید.اشیا و کلاس­هاکلاس، نقش ه­ایی است که از اشیا ایجاد می­‌شود. کلاس یک موجودیت منطقی است که شامل فیلدها، متدها، بلوک­ها، کلاس تو­در­تو و رابط است.شی، یک نمونه از کلاس است و همچنین یک موجودیت رفتاری، فیزیکی و منطقی دارد. در حالی که کلاس، فقط یک موجودیت منطقی است.وراثتهنگامی که یک شی، تمام خصوصیات و رفتارهای شی والد را کسب کند، به عنوان وراثت از آن یاد می­شود. این قابلیت استفاده مجدد از کدها را فراهم کرده و برای دستیابی به چندریختی یا پلی­مورفیسم زمان اجرا، استفاده می­شود.کلمه کلیدی extends نشان می­دهد که شما در حال ساخت یک کلاس جدید هستید، که از یک کلاس موجود نشأت می­گیرد.رابط­‌هاچندین وراثت از طریق رابط به دست می­‌آید. رابط، مجموعه­ای از متدهای انتزاعی است. کلاس، یک رابط را پیاده ­سازی می­کند، در نتیجه متد انتزاعی رابط، به ارث می­رسد. رابط کاربری هیچ سازنده ای ندارد.کلمه کلیدی interface، برای اعلان یک رابط استفاده می­شود.کپسوله­ سازیکپسوله­ سازی، به معنای کد و داده بسته ­بندی شده، در یک واحد مستقل است، که باعث می­شود کدها از درست به­ کار نرفتن، حفظ شوند. البته در صورتیکه متغیرهای یک کلاس را به صورت private، اعلان کنید.انتزاعانتزاع فرآیند پنهان­ کردن جزئیات پیاده­سازی و فقط نمایش دادن عملکرد است.چندریختیچندریختی یا پلی­مورفیسم، توانایی یک شی، به گرفتن فرم­های مختلف است. جاوا از نظر Method Overloading و Method Overriding، بهترین پشتیبانی را از چندریختی، دارد.Method Overloading:کلاسی که چندین متد با نام یکسان دارد، اما پارامتر متفاوت که با نام Method Overloading شناخته می‌شود.Method Overriding:هنگامی که یک متد در یک subclass دارای نام یکسان و الگوی امضا به عنوان یک متد در superclass باشد، آنگاه این متد به عنوان روش overridden شناخته می­شود و به آن چندریختی زمان اجرا نیز گفته می­شود.مزایای برنامه­ نویسی شی ­گرایی در اندرویداشیا ایجاد شده برای برنامه­های شی­گرا براحتی می­توانند در برنامه­های دیگر، مجددا مورد استفاده قرار گیرند.برای تعریف و اعلان انواع داده­های انتزاعی خوب است.نگهداری و اصلاح کدهای موجود، آسان است زیرا اشیا جدید با تفاوت­های کوچک نسبت به موارد موجود، ایجاد می­شوند.سیستم­های شی­ گرا را می­توان به راحتی از سیستم کوچک به سیستم بزرگ ارتقا داد.افزونگی داده­هانگهداری و اصلاح کدهای موجود با در­نظر گرفتن تغییرات جدیدحفظ امنیت با استفاده از مکانیسم انتزاعبهره وری بهترعیب ­یابی آسانسخن آخربا وجود اینکه احتمالا بارها اسم برنامه ­نویسی شی­ گرایی را شنیده ­اید و کم و بیش با معنای آن آشنا بودید، سعی داشتیم اطلاعات روشن ­تری در این باره به شما ارائه دهیم.در این مقاله در کنار مفهوم شی­ گرایی، به مفاهیم مربوط به آن از جمله برنامه ­نویسی شی­ گرایی در اندروید، کلاس، شی، رابط­ها، کپسوله ­سازی، چندریختی، انتزاع، وراثت و مزایای برنامه­ نویسی شی ­گرایی پرداختیم. علاوه بر آن برای درک بهتر، چند کد را برای شما ارائه نمودیم. البته ممکن است در ابتدا کمی درک این مفاهیم سخت باشد اما همیشه با ممارست به نتایج خوبی خواهید رسید.امیدواریم مطلب پیش رو، برای شما مفید واقع شده­ باشد و جای بسی خرسندی است که با ارسال نظرات سازنده خود، ما را از آن آگاه سازید.در ادامه می توانید لیستی از آموزش های فارسی برای برنامه نویسی اندروید را مشاهده کنید. ضمنا کاربران ویرگول می توانند با تخفیف ویژه ازین آموزش ها بهره مند شوند.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Sun, 22 Nov 2020 11:36:29 +0330</pubDate>
            </item>
                    <item>
                <title>مقایسه PyTorch و Tesnsorflow برای یادگیری ماشین با پایتون</title>
                <link>https://virgool.io/@daneshjooyar/%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-pytorch-%D9%88-tesnsorflow-%D8%A8%D8%B1%D8%A7%DB%8C-%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-oksmq9u9x8nj</link>
                <description>در این مقاله framework های معروف یادگیری عمیق را مقایسه می کنیم:  Tensorflow و Pytorchقصد داریم که به جزئیات مربوط به مقایسه  TensorFlow 2.0 ،TensorFlow 1.xو PyTorch با یکدیگر بپردازیم و چگونگی قرار گرفتن کراس را در آن ها بررسی کنیم.اگر تا به حال با اصطلاحات Deep learning یا یادگیری عمیق و machine learningیا یادگیری ماشین برخورد کرده باشید، به احتمال زیاد در مورد TensorFlow و PyTorch هم چیزهایی شنیده اید.یادگیری عمیق چیست؟یادگیری عمیق شاخه ای از یادگیری ماشین است که می تواند رابطه پیچیده ای را در داده ها فرا گیرد و برای حل بسیاری از مشکلات پیچیده استفاده شود. این یادگیری اساساً مبتنی بر شبکه های عصبی مصنوعی می باشد.برخلاف یادگیری ماشین سنتی، لازم نیست متغیرهای ویژگی جدید ، تعامل ها و غیره را که باید در نظر گرفته شود مهندسی کنید و می توانند مقادیر بیشتری را برای یادگیری روابط پیچیده تر ایجاد کنند.درباره PyTorch و TensorFlowاین دو جزو محبوب ترین فریم ورک های امروزی هستند که برای ساخت و بهینه سازی شبکه عصبی استفاده می شوند. در حالی که Tensorflow توسط گوگل پشتیبانی می شود ،  PyTorch نیز توسط Facebook پشتیبانی می شود. هر دو نیز به طور فعال و مداوم، توسعه یافته و نگهداری می شوند.در این مقاله آموزشی تمام شک و تردید خود را در مورد ویژگی های 2 مورد از محبوب ترین فریمورک های شبکه عصبی برطرف خواهید کرد و می توانید بین انتخاب این دو فریم ورک به راحتی تصمیم گیری کنید.درباره TensorFlow  TensorFlow باید گفت که دارای دو نسخه قدیمی و جدید TF1.x و 2.0TF می باشد.این Tensorflow توسط گوگل ساخته شده و اولین بار در نوامبر 2015 راه اندازی شد. اخیرا هم یک نسخه به روز شده یا همان چیزی که ما آن را با 2.0TensorFlow می شناسیم ، در سپتامبر 2019 راه اندازی شد .همین باعث شد که نسخه قدیمی تر به عنوان TF1.x و نسخه جدیدتر به عنوان 2.0TF در نظر گرفته شود.فریمورک  Tensorflowچیست؟فریمورک TensorFlowیکی از فریمورک های اولیه ای بود که برای شبکه های عصبی سازگار ساخته شد .این فریم ورک توسط گوگل پشتیبانی می شود و همین موضوع یکی از دلایل اصلی می باشد که از کاربران زیادی برخوردار است. گوگل به ادغام هوش مصنوعی در هر یک از محصولات پیشنهادی خود می پردازد.در بیشتر موارد اولین چارچوبی که هنگام شروع یک دوره یادگیری عمیق یا دوره هوش مصنوعی درباره آن خواهید شنید ،Tensorflow می باشد.سوالی که پیش می آید این است که چه چیزی در نسخه به روز شده TensorFlow تغییر کرده است؟مهمترین تغییر در 2.0TF نسبت به TF1.x پشتیبانی از نمودارهای محاسبات داینامیک یا پویا است.نمودار محاسبه چیست؟نمودار محاسباتی مجموعه عملکردها و تبدیلات ریاضی است که داده های ورودی ما تحت تاثیر آن قرار می گیرند تا به خروجی نهایی برسند.تفاوت نمودار محاسبه استاتیک و داینامیکنمودار محاسبه استاتیک اساساً به این معنی است که شما نمی توانید پارامترهای شبکه عصبی را در حالی که شبکه عصبی را آموزش می دهید، تغییر دهید. اما در یک نمودار محاسباتی داینامیک ، می توانید پارامترهای شبکه عصبی خود را در حین اجرا ، دقیق ًاً مانند کد پایتون معمولی تغییر دهید.نمودارهای محاسبه پویا اغلب توسط توسعه دهندگان و مهندسان ترجیح داده می شوند.مزایای نسخه جدید  tensorflow و معایب نسخه قدیم tensorflowبا اینکه مزایای خاصی در رابطه با سرعت در نمودارهای محاسبه استاتیک وجود دارد، به ویژه هنگامی که صحبت از استقرار می شود، اما این می تواند یک ضرر برای شبکه های عصبی ساده و پیشرفته منظم باشد.همچنین در هنگام آزمایش مدل ها امکان انعطاف پذیری زیادی را فراهم نمی کند.به همین دلیل است که بروزرسانی نمودارهای محاسبات داینامیک پیشرفت عمده ای در 2.0TF بود.داینامیک بودن، سهولت استفاده را برای توسعه دهندگان افزایش می دهد و آزمایش مدل ها را ساده تر می کند.هم چنین برای جدا کردن آن از پایتون ، دیگر نیازی به شروع جلسات جداگانه در   TensorFlow  نبود.ایجاد جلسات در TF1.x اجباری بود اما 2.0TF اصلاً از جلسات استفاده نمی کند و فقط از توابع استفاده می کند.ادغام کراسهنگامی که TensorFlow 1.x منتشر شد ، Keras برای ساختن کد TF در میان توسعه دهندگان محبوب شد. زیرا Keras با ارائه یک API ، روند ساخت مدل را ساده کرد. علاوه بر این ، از سایر فریمورک های یادگیری عمیق مانند oThean و CNTK نیز پشتیبانی می کند.همچنین این امکان را برای شما فراهم می کند تا کد یادگیری عمیق خود را در Keras بنویسید ، در حالی که به توسعه دهنده اجازه می دهد هر کدام از فریم ورک های backend را که بخواهد فقط با یک خط کد انتخاب کند.اکنون ، keras ماژولی است که می توانید در داخل 2.0TF وارد کنید. با استفاده از این ادغام ، می توانید مدل های یادگیری عمیق را در 2.0TF با استفاده از روش اصلی keras ، یعنی مدل های متوالی و API های کاربردی ایجاد کنید.بعلاوه ، با 2.0TF می توانید از Subclassing Model نیز استفاده کنید که بیشتر شبیه نحوه ساخت مدل توسط PyTorch است .در2.0Tensorflow  ، به راحتی می توانید بین اجرای اشتیاق که برای توسعه بهتر است و حالت تنبل که برای استقرار بهتر است استفاده کنید.اجرای مشتاقانه از برنامه نویسی ضروری استفاده می کند که اساساً همان مفهوم نمودارهای محاسبه داینامیک است. کد دقیقاً مانند نحوه کار معمول پایتون اجرا می شود.اجرای تنبل از برنامه نویسی نمادین استفاده می کند که همان نمودارهای محاسبه استاتیک است .توابع بصورت انتزاعی تعریف می شوند و هیچ محاسبه واقعی صورت نمی گیرد تا زمانی که عملکرد به طور صریح کامپایل و اجرا شود.بنابراین 2.0TF از اجرای مشتاقانه و تنبل پشتیبانی می کند.واضح است که 2.0TensorFlow مشکلاتی را که با TensorFlow1.x روبرو بودیم برطرف کرد .درباره PyTorchفریمورک PyTorchتوسط فیس بوک ساخته شده و در اکتبر 2016 راه اندازی شده است. در زمان راه اندازی، تنها چارچوب اصلی و محبوبی که برای یادگیری ماشین وجود داشت، نسخه قدیمی یعنی TensorFlow1.x بود که فقط نمودارهای محاسبه استاتیک را پشتیبانی می کرد.این فریمورک به 2 دلیل عمده به طور گسترده ای پذیرفته شد: برای ساخت NN ها از نمودارهای محاسبه داینامیک استفاده شده است.  این برنامه با پایتون کاملاً هماهنگ بود و این امر باعث شد توسعه دهندگان پایتون بتوانند به راحتی به این چارچوب روی بیاورند.این تفاوت اساسی PyTorch با نسخه TensorFlow موجود در آن زمان بود.تفاوت Tesnsorflow و PyTorchدر زیر می توانید خلاصه ای از تفاوت نسخه های اولیه TensorFlow و PyTorch را مشاهده کنید.تفاوت اصلی که pytorch با نسخه جدید TensorFlow کرده است این است که به tf احتیاج نداریم و 2.0TF از نمودارهای داینامیک نیز پشتیبانی می کند.تغییر عمده دیگر در 2.0TF این است که اجازه می دهد تا &quot;طبقه بندی فرعی مدل&quot; ، که یک روش معمول برای ساخت مدل های شبکه عصبی در PyTorch است، انجام گیرد. این روش به شما امکان می دهد معماری های پیچیده مدل را بسازید ، که برای آزمایش بسیار مناسب است.بنابراین ، 2.0TF برخی از روش های اصلی توسعه را که قبًلاً در PyTorch انجام شده ، در پیش گرفته است. در واقع اگر در گذشته pytorch معایب TF1.x را پوشش می داد، اکنون 2.0TF کاملا آن معایب را رفع کرده است .TensorFlow کنونی تمام امکانات pyTorch را پوشش داده است.در زیر دو قطعه کد از 2.0TF و PyTorch آورده شده است که چگونگی شباهت آن دو را در طبقه بندی مدل نشان می دهد.# Representative Code in   PyTorch()import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module): def __init__(self):super(Model, self).__init__ self.conv1 = nn.Conv2d()self.conv2 = nn.Conv2d()(x))  in TensorFlow2.0, Model()))(x))def forward(self, x):x = F.relu(self.conv1(x))  return F.relu(self.conv2 # Equivalent   Representative Code import tensorflow as tf from tensorflow import keras from tensorflow.keras import layersclass TFModel(Model): def __init__(self):super(TFModel, self).__init__ self.conv1 = layers.Conv2D()  self.conv1 = layers.Conv2D()def call(self, x):x = layers.ReLU(self.conv1(x return layers.ReLU(self.conv2
مزایای  Tensorflow1. کاربر پسند و اگر با پایتون آشنا باشید یادگیری آن آسان است.2. در Tensorboard برای نظارت و تجسم است. اگر می خواهید مدل های یادگیری عمیق خود را در عمل مشاهده کنید ، این یک ابزار عالی است.3. پشتیبانی جامعه مهندسین خبره گوگل و سایر شرکت ها تقریباً روزانه TensorFlow را بهبود می بخشند.4. برای اجرای مدل های TensorFlow در دستگاه های تلفن همراه می توانید از TensorFlow Lite استفاده کنید.5. در Tensorflow.js به شما امکان می دهد با استفاده از JavaScript مدل های یادگیری عمیق را در زمان واقعی در مرورگر اجرا کنید.معایب Tesnsorflow1. چارچوب TensorFlow در مقایسه با چارچوب هایی مانند MxNet و CNTK کمی کند است.2. اشکال زدایی در آن می تواند چالش برانگیز باشد.3. پشتیبانی از OpenCL نمی کند.مزایای PyTorch1. طراحی و ساختار کاربر پسند که ساخت مدل های یادگیری عمیق را شفاف می کند.2. دارای ابزارهای رفع اشکال مفیدی مانند اشکال زدایی PyCharm است.3. شامل بسیاری از مدل های از قبل آموزش دیده و پشتیبانی از آموزش توزیع شده است.معایب PyTorch1. مانند TensorFlow رابطی برای نظارت و تجسم ندارد.2. فریمورک PyTorch یک فریمورک جدید برای یادگیری عمیق است و در حال حاضر از پشتیبانی جامعه کمتری برخوردار است.مشخصا اگر این مطلب رو انتها خوندین و براتون جذاب باشه، به پایتون و نحوه برنامه نویسی با اون علاقه مند هستین، بنابراین پیشنهاد می‌کنیم به آموزش مقدماتی پایتون که به صورت رایگان ویژه کاربران ویرگول هم سر بزنین و از همین الان یادگیری رو شروع کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Tue, 17 Nov 2020 12:29:05 +0330</pubDate>
            </item>
                    <item>
                <title>خرید هاست پایتون از سرویس هاست ایرانی</title>
                <link>https://virgool.io/@daneshjooyar/%D8%AE%D8%B1%DB%8C%D8%AF-%D9%87%D8%A7%D8%B3%D8%AA-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A7%D8%B2-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D9%87%D8%A7%D8%B3%D8%AA-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86%DB%8C-j3r2lf3qdllo</link>
                <description>امروزه زبان برنامه نویسی پایتون جزو زبان های بسیار مطرح و پرکاربرد در دنیای فناوری است و بسیاری از افراد برای توسعه وبسایت خود از این زبان استفاده می کنند پس درخواست برای سرویس های هاست برای سایت های پایتون روز به روز بیشتر می شود. در این مقاله قصد داریم تا سرویس های هاست ایرانی برای سایت های پایتون را با هم بشناسیم و به شما کمک کنیم تا بتوانید به سادگی هرچه تمام تر سرویس مورد نیاز خود را از طریق سرویس های هاست ایرانی پیدا کرده و به سادگی برای سایت خود که با زبان برنامه نویسی پایتون نوشته شده است. هاست بیابید.هاست پایتون چیست؟شاید اولین سوالی که در ذهن شما نمایان شود این است که اساساً هاست پایتون چیست و چرا باید از آن استفاده کنیم؟ این سوال ها همه سوال هایی است که در این قسمت به آن ها پاسخ خواهیم داد. باید در ابتدای امر و قبل از بررسی هاست پایتون به این موضوع به پردازیم که هاست چیست؟ هاست ( Host ) در لغت به معنی میزبان است. در حقیقت هاست ها میزبان اطلاعات شما و نگه دارنده آن ها هستند. اگر شما کد سایت خود را به زبان پایتون بنویسید و پس از آن بخواهید سایت خود را راه اندازی کنید نیاز به کامپیوتر هایی همواره روشن دارید که بتوانند میزبان اطلاعات سایت شما در یک فضای شخصی باشند تا سایت شما بتواند به خوبی فعالیت کند. حال که با مفهوم هاست آشنا شدید میتوانید به سادگی به مفهوم هاست برای سایت های پایتون پی ببرید. در حقیقت هاست هایی که توانایی نگه داری از کدهای شما که به زبان پایتون نوشته شده است را دارند هاست پایتون میگویند. باید گفت که هاست پایتون در حقیقت یک هاست لینوکس است. این هاست لینوکس تعدادی از برنامه های مورد نیاز برای زبان برنامه نویسی پایتون را درون خود دارد پس میتوان به عنوان محیطی مناسب برای میزبانی سایت پایتونی شما از آن استفاده کرد.ایران سروراولین هاست ایرانی پایتون که میخواهیم درباره آن صحبت کنیم. هاست پایتون ایران سرور است. این هاست بنا بر گفته ارائه دهنده دارای پشتیبانی 24 ساعته بوده و امنیت و سرعت بالایی را به شما ارائه میدهد. این هاست پایتون به دلیل برخورداری از حافظه های NVME پیشرفته ، سرعت بسیار بالایی را برای شما به ارمغان آورده و باعث می شود. از طرفی پشتیبانی از فریمورک های محبوب پایتون و همچنین امکان دسترسی به SSH نیز از دیگر قابلیت های این ارائه دهنده هاست پایتون است. ایران سرور داراری تعرفه های متعددی برای ارائه هاست است که به سادگی میتوانید از میان آن ها طرح مورد نیاز خود را انتخاب کنید.توشندومین ارائه دهنده هاست برای سایت پایتون توشن است. این سرویس بنا بر گفته ارائه دهنده دارای سرعت بسیار بالا پشتیبانی 24 ساعته و استفاده از حافظه های NVME پیشرفته است که به شما در انجام بدون نقص پروژه کمک شایانی میکند. همچنین باید گفت که این ارائه دهنده با استفاده از سرویس imunify میتواند امنیت شما را تامین کرده و همچنین به مانند ایران سرور، هاست های خریداری شده از این ارائه دهنده هاست دارای SSL رایگان میباشد. هردو ارائه دهندگان خدمات هاست یعنی ایران سرور و توشن از Lightspeed استفاده میکنند که این خود نیز میتواند سبب افزایش کارایی آن ها شود.وب رمزمکان سرور های این ارائه دهنده فقط در آلمان است که این مورد به نسبت توشن که در کشورهای مختلفی سرور دارد تعداد کمتری است. همچنین امنیت و پشتیبانی 24 ساعته و همینطور آپتایم بالا از قابلیت های این ارائه دهنده سرور می باشد.استفاده از هاست های ایرانی باعث کاهش قیمت شده و استفاده از هاست پایتون ارزان میتواند به کمتر شدن قیمت نهایی کار شما کمک فراوانی کند. همچنین این هاست ها دارای قابلیت های بسیار مناسبی برای برنامه نویسان هستند و همه آن ها آپتایم بالا و امنیت خوبی دارند که به شما در داشتن سایتی خوب کمک شایانی خواهند کرد.مشخصا اگر این مطلب رو انتها خوندین و براتون جذاب باشه، به پایتون و نحوه برنامه نویسی با اون علاقه مند هستین، بنابراین پیشنهاد می‌کنیم به آموزش مقدماتی پایتون که به صورت رایگان ویژه کاربران ویرگول هم سر بزنین و از همین الان یادگیری رو شروع کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Sun, 15 Nov 2020 13:05:22 +0330</pubDate>
            </item>
                    <item>
                <title>همه چیز درباره اندروید جت پک</title>
                <link>https://virgool.io/@daneshjooyar/%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%AC%D8%AA-%D9%BE%DA%A9-wxjze5pnrqnw</link>
                <description>مقدمه| همه چیز درباره اندروید جت پکدر این مقاله قصد داریم شما را با صفر تا صد اندروید جت پک آشنا کنیم، تا هم اطلاعات شما در این زمینه بیشتر شود و هم اینکه در صورت تمایل برای استفاده از اندروید جت پک بتوانید آشنایی کاملی با آن داشته باشید. در ابتدا برای آموختن همه چیز درباره اندروید جت پک باید با چیستی آن آشنا شویم.اندروید جت پک (Android Jetpack) مجموعه‌ای از مؤلفه‌ها، ابزارها و راهنمایی‌ها برای ساخت برنامه‌های عالی اندرویدی است. اجزای اندروید جت پک کتابخانه پشتیبانی موجود و مؤلفه‌های معماری را گرد هم آورده و آنها را به چهار دسته مرتب می‌کند، اجزای Android Jetpack به عنوان کتابخانه‌های “بدون بسته” ارائه می‌شوند که جزئی از سیستم عامل اصلی اندروید نیستند. این بدان معنی است که شما می‌توانید هر یک از مؤلفه‌ها را با سرعت خود، در زمان خودتان به کار بگیرید. وقتی قابلیت جدید اندروید جت پک در دسترس است، می‌توانید آن را به برنامه خود اضافه کنید، برنامه خود را در فروشگاه Play مستقر کنید و ویژگی‌های جدید همه را در یک روز (در صورت سریع بودن) به کاربران ارائه دهید.علاوه بر این، برنامه شما می‌تواند بر روی نسخه‌های مختلف این سیستم عامل اجرا شود، زیرا اجزای اندروید جت پک ساخته شده‌اند، تا عملکرد خود را مستقل از هر نسخه خاص ارائه دهند و پیرامون شیوه‌های طراحی مدرن مانند جداسازی نگرانی‌ها و قابلیت آزمایش بودن و همچنین ویژگی‌های بهره وری مانند ادغام Kotlin ساخته شده است. این امر ساختن برنامه‌های با کیفیت و با کیفیت بالا و کد کمتری را برای شما ساده تر می‌کند. در حالی که اجزای Android Jetpack برای همکاری با یکدیگر ساخته شده‌اند اما لازم نیست از همه آنها استفاده کنید .اندروید جت پک و کاربردهای آن چیست؟در بخش ابتدایی همه چیز درباره اندروید جت پک میخواهیم توضیح کوتاهی درباره‌ی چیستی این نرم افزار بدهیم، در واقع جت پک همان‌طور که از نامش پیداست در زبان فارسی به معنای بسته سریع ‌السیر‌است. افرادی که قبلاً با اندروید استودیو کار کرده‌اند شاهد این قضیه بوده‌اند که برخی مواقع محیط اندروید استودیو هنگام خروجی گرفتن از برنامه چقدر می‌توانست کلافه کننده باشد و خطاهای متنوع و عجیبی را نمایش دهد؛ اما به مدد تکنولوژی جت پک مقدار زیادی از این مورد کاسته شد و در حال ‌حاضر برنامه نویسان می‌توانند اپلیکیشن‌های خود را به ‌سادگی و سریع گسترش دهند.این کتابخانه پشتیبانی به این دلیل به وجود آمد تا بتوان امکانات جدید اندروید استودیو را در نسخه‌های قدیمی‌تر هم استفاده کرد ولی ازآنجایی‌که با هر به‌روزرسانی اندروید استودیو نام این کتابخانه‌ها نیز تغییر می‌یافت، برنامه نویس فلک‌زده باید فهرستی را حفظ می‌کرد که فلان امکانات در کدام نسخه از کتابخانه پشتیبانی وجود دارد. از مشکلات دیگر این بود که شخصی که اپلیکیشن تولید می‌کرد می‌بایست خروجی برنامه را با نرم‌افزار شبیه ساز گوشی تک‌به‌تک چک می‌کرد تا از صحت اجرای برنامه در اکثر گوشی‌ها اطمینان حاصل کند!در واقع Android Jetpack مجموعه‌ای از اجزای نرم افزار Android است، که به ما در ساخت برنامه‌ای عالی Android کمک می کند. مولفه ‌های نرم افزار به موارد زیر کمک می‌کنند:دنبال کردن بهترین روش‌ها و نوشتن کد دیگ بخار ساخت کارهای پیچیده بسیار سادهپیش از این چالش‌های بسیاری وجود داشت که به شرح زیر است:مدیریت چرخه‌های زندگی فعالیت زنده ماندن از تغییرات پیکربندی جلوگیری از نشت حافظهتمام این مشکلات عمده توسط اجزای نرم افزار Android Jetpack برطرف شده است.بنابراین، راه حل برای همه این مشکلات استفاده از Andriod Jetpack است. یکی دیگر از مهمترین موارد در مورد Jetpack این است، که به دفعات نسبت به سیستم عامل Android به روز می‌شود تا همیشه آخرین نسخه را دریافت کنیم.باید گفت Jetpack شامل کتابخانه‌های بسته androidx است، که از APIهای پلت فرم جدا نشده است. این بدان معنی است که سازگاری به عقب را ارائه می‌دهد.اجزای اصلی Jetpack androidدر این بخش از مقاله‌ی همه چیز درباره اندروید جت پک قصد داریم، شما را با اجزای اصلی این نرم افزار به طور مختصر آشنا کنیم. مولفه های Android Jetpack مجموعه‌ای از کتابخانه‌ها هستند، که به طور جداگانه قابل استفاده هستند و در کنار یکدیگر بهره می‌گیرند، ضمن اینکه از ویژگی‌های زبان کوتلین بهره مند می‌شوند که باعث بهره وری بیشتر ما می‌شود.این مولفه‌های نرم افزاری در 4 دسته تنظیم شده‌اند که به شرح زیر است: اجزای بنیادی (Foundation Components )مولفه‌های معماری ( Architecture Components)اجزای رفتاری (Behavior Components )مولفه‌های UI ( android UI Components )حال بیایید با تک تک این مولفه‌ها به صورت جداگانه آشنا شویم:مولفه‌های بنیادی اندروید جت پک (Foundation Components)در این قسمت از همه چیز درباره اندروید جت پک هدف توضیح مولفه‌های رفتاری این نرم افزار است. مولفه‌های بنیادی اندروید جت پک به شرح زیر است:سازگاری به عقب آزمایش کردن پشتیبانی از زبان کاتلینتمام مولفه‌های بنیادی (Foundation Components) به شرح زیر است:1. برنامه Compat: با پشتیبانی از پیاده سازی رابط کاربری طراحی مواد، نسخه‌های قدیمی Android را با کم لطفی تخریب کنید.1. مجموعه Android KTX: مجموعه‌ای از برنامه‌های افزودنی کوتلین برای نوشتن کد کوتلین مختصر و اصیل.2. ویژگی Multidex: پشتیبانی از چندین فایل dex را برای برنامه‌ها فراهم کنید.3. ویژگی Test: چارچوبی برای آزمایش واحد و زمان اجرای UI در Android.مولفه‌های معماری اندروید جت پک (Architecture Components )در این بخش از مقاله همه چیز درباره اندروید جت پک، هدف آشنایی شما با دومین جز این نرم افزار یعنی مولفه‌های معماری اندروید جت پک است.یکی از مهمترین مسائل در رابطه با برنامه نویسی توسعه پذیر بودن، خوانایی کد و تست پذیری می‌باشد. این بخش تمام تمرکزش روی همین مسائل هست و با استفاده از Android Architecture Component می‌توانید به خاصیت هایی که یک نرم افزار با کیفیت لازم است داشته باشد برسید.معماری پیشنهادی گوگل MVVM که Android Architecture Component به شما کمک می‌کند، آن را به سادگی پیاده سازی کنید. به طور خلاصه MVVM نرم افزار را به ۳ لایه تقسیم می‌کنید. View, ViewModel, Model. لایه مدل وظیفه‌اش تامین اطلاعات است مثلا گرفتن اطلاعات از سرور یا  دیتابیس، لایه View تنها وظیفه اش نمایش اطلاعات است و ViewModel رابط بین لایه Model و Viewمولفه‌های معماری جت پک به ما در ساخت برنامه‌های زیر به ما کمک می‌کنند: برنامه‌های قویبرنامه‌های قابل آزمایش ‌برنامه‌های قابل نگهداریتمام اجزای معماری به شرح زیر است:اتصال داده ( Data Binding) : به طور واضح عناصر UI را در طرح ما به منابع داده برنامه ما متصل می‌کند.چرخه‌های زندگی (Life cycles) : فعالیت‌ها و چرخه‌های حیات برنامه ما را مدیریت می‌کند.توضیح LiveDataدر این بخش از مقاله همه چیز درباره اندروید جت پک به سراغ قسمت دیگری از این نرم افزار می‌رویم. به شما کمک می‌کند که از هرگونه تغییر در پایگاه داده به نمایش نماها بپردازید. به طور ساده LiveData یک ظرف نگه دارنده اطلاع (Data Holder) می‌باشد. بسته‌های اطلاعاتی که بین View و ViewModel جابه جا می‌شود می‌توانند از نوع LiveData باشند. اما چه مزیتی دارد؟ در ادامه خواهیم دید.در اندروید لایه View چه Fragment باشد چه Activity چرخه حیاتی مخصوص به خود دارد. این چرخه حیات بسیار حائز اهمیت است از این بابت که درخواست و دریافت اطلاعات از Model کاملا به چرخه حیات View وابسته است. مثلا زمانی لیست یادداشت‌های باید دریافت شود که طبیعتا Fragment درحال نمایش باشد و زمانی که Fragment بسته شده باشد دیگر نیازی به دریافت نیست. یکی از مزیت‌های اصطلاحا Lifecycle Aware بودن آن است. به این معنی که لازم نیست شما نگران چرخه حیات View باشید، LiveData هوشمندانه آن را مدیریت می‌کندپیمایش (Navigation) : به وسیله‌ی این بخش می‌توانید همه موارد لازم برای پیمایش درون برنامه را کنترل کنید، در واقع از Navigation Component برای ارتباط و کنترل Navigation اپلیکیشن بین فرگمنت‌ها استفاده می‌شود. مثلاً با این ابزار می‌توانید فرگمنت‌ها را به‌صورت بصری به هم وصل کنید و تعیین کنید از هر فرگمنتی به کجا می‌توان رفت و حتی آرگومان‌هایی که هر فرگمنت لازم دارد را مشخص کنید.انصفحه بندی (Paging) : به تدریج اطلاعات مربوط به تقاضای منبع داده خود را بارگیری کنید. در خیلی از اپلیکیشن‌ها مشاهده کردید که مثلا وقتی می‌خواهند لیست اخبار را نمایش دهند، ۲۰ خبر ابتدا گرفته می‌شود و زمانی که کاربر به انتهای لیست رسید دوباره ۲۰ خبر بعدی گرفته می‌شود، دلیل این موضوع افزایش سرعت اجرای دستورات، صرفه جویی در رم و حجم دیتای کاربر می‌باشد. اصطلاحا به این روش Lazy Loading یا Infinite Scroll می‌گویند. برای پیاده سازی این سناریو از این بعد می‌توانید از لایبرری Paging استفاده کنید. مهم‌ترین مزیت استفاده از Paging سادگی و ساپورت کردن RecyclerViewاتاق (Room) : دسترسی به پایگاه داده Fluent SQLite.ویژگی ViewModel: داده‌های مربوط به UI را به روشی آگاه از چرخه زندگی مدیریت کنید. وظیفه ViewModel ارتباط بین لایه View (مثلا  Fragment شما) و لایه Model (مثلا دیتابیس شما) می‌باشد. فرض کنید می‌خواهید لیست یادداشت هایی را از دیتابیس دریافت کنید. در این شرایط نباید مستقیما از Fragment به دیتابیس درخواست بفرستید. بلکه شما هر رویدادی که برای Fragment تان اتفاق می‌افتد را فقط به ViewModel اطلاع می‌دهید و ViewModel تصمیم می‌گیرد که چه زمانی باید اطلاعات را از دیتابیس بگیرد. مثلا وقتی متد  فرگمنت صدا زده شد به ViewModel اطلاع داده می‌شود و ViewModel لیست یادداشت‌ها را از دیتابیس درخواست می‌کند و نتیجه را به Fragment اعلام می‌کنید. اما چطور اطلاعات را به Fragment اطلاع بدهد. پاسخ  این سوال LiveData هست.ابزار WorkManager: با توجه به شرایطی که انتخاب می‌کنیم، همه مشاغل پس زمینه را در Android مدیریت کنید. این ابزار برای زمان بندی انجام کارهای زمان بر کاربرد دارد. مثلا با WorkManager می‌توانید تعیین کنید که هر ۱۲ ساعت یک بار اطلاعات دیتابیس با سرور همگام سازی شوند.یکی از مشکلات بزرگی که در اندروید وجود داشت نبود سیستمی یکپارچه و دقیق برای زمان بندی کارهای خاص بود. ابزارهای مختلفی مثل Alarm Service یا Job scheduler وجود داشتند ولی مثلا Alarm Service دقیق نبود و فقط تا ورژن ۱۹ اندروید کار می‌کرد و از طرف دیگر Job Scheduler روی ورژن‌های پایین‌تر کار نمی‌کرد. اما با  Work Manager دیگر چنین نگرانی وجود ندارد و تضمین می‌شود که درصورتی که شرایط انجام کار شما فراهم باشد، سر تایم مشخص شده کارتان انجام شود.یکی از موارد جالب در مورد WorkManager این است که مثلا می‌توانید مشخص کنید هر ۱۲ ساعت و زمانی که کاربر به اینترنت متصل بود ولی با گوشیش کار نمی‌کرد، کار خاصی را انجام دهد. خب این موضوع می‌تواند در موارد بسیاری کمک کننده باشد مثلا برای گرفتن پشتیبان از عکس‌های گرفته شده و ارسال آن‌ها به سرور.اجزای رفتاری android Jetpak (Behavior Components )در این بخش از مقاله اندروید جت پک میخواهیم با مولفه‌های رفتاری این نرم افزار آشنا شویم. مولفه‌های رفتاری به یکپارچه سازی با سرویس‌های استاندارد Android مانند کمک می‌کنند: اطلاعیه‌ها (Notifications)مجوزها  (permissions) اشتراک گذاری (Sharing) دستیار  (Assistant)تمام اجزای رفتاری اندروید جت پک به شرح زیر است:1. مدیر بارگیری (Download Manager) : با پشتیبانی مجدد خودکار، بارگیری‌های بزرگ را در پس زمینه برنامه ریزی و مدیریت کنید.2. رسانه و پخش (Media &amp; Playback ) : APIهای سازگار با حالت روبرو برای پخش و مسیریابی رسانه (از جمله Google Cast).3. اعلان‌ها (Notifications): یک API اعلان سازگار با عقب با پشتیبانی Wear و Auto ارائه می‌دهد.4. مجوزها (permissions): API های سازگاری برای بررسی و درخواست مجوزها در برنامه.5. تنظیمات برگزیده (Preferences): صفحه‌های تنظیمات تعاملی را برای پیکربندی کاربران ایجاد کنید.6.  اقدام Sharing: یک اقدام اشتراک گذاری مناسب برای نوار اقدام یک برنامه ارائه می دهد.7. برش‌ها (Slices): عناصر UI انعطاف پذیر ایجاد کنید، که بتواند داده‌های برنامه را در خارج از برنامه نمایش دهد و تا Android 4.4 قابل گسترش است.مولفه‌های (UI  (android UI Componentsحال که می‌خواهید همه چیز درباره اندروید جت پک بدانید باید با مولفه‌های UI  نیز آشنا شوید. مولفه‌های رابط کاربر ابزارک‌ها و راهنماهایی را در اختیار شما قرار می دهد، تا استفاده از برنامه شما نه تنها آسان، بلکه لذت بخش باشد.تمام اجزای UI اندروید جت پک به شرح زیر است: انیمیشن و انتقال (Animation and transitions): ابزارک‌ها را منتقل کرده و بین صفحه‌ها جابجا شوید.خودکار (Auto): اجزای توسعه برنامه‌های Android Auto. ایموجی (Emoji): قلم شکلک به روز شده را در سیستم عامل‌های قدیمی فعال کنید. واحد Fragment: یک واحد اساسی UI قابل ترکیب است.طرح بندی (Layout): ابزارک‌ها را با الگوریتم‌های مختلف تنظیم کنید.پالت (Palatte): اطلاعات مفید را از پالت‌های رنگ بکشید.ویژگی TV: مولفه‌هایی برای توسعه برنامه‌های Android TV.پوشیدن (Wear): مولفه‌هایی برای توسعه برنامه‌های Wear.آموزش های برنامه نویسی موبایل با اندروید  به صورت دوره مقدماتی، پیشرفته و پروژه محور را می‌توانید با مراجعه به لینک زیر دریافت کنین:https://dnjy.ir/FvuO</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Sun, 08 Nov 2020 11:11:02 +0330</pubDate>
            </item>
                    <item>
                <title>معرفی و مقایسه ابزار های اجرای پایتون در اندروید</title>
                <link>https://virgool.io/@daneshjooyar/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%88-%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1-%D9%87%D8%A7%DB%8C-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-w4rkdhyecarq</link>
                <description>همانگونه که می‌دانید اندروید به خودی خود از محیط زبان برنامه نویسی پایتون پشتیبانی نمی‌کند. اما نگران نباشید برای اینکار راه حل مناسبی وجود دارد. این راه حل استفاده از ابزار های اجرای پایتون در اندروید است. در این مقاله قصد داریم به مقایسه این ابزار ها بپردازیم و ببینیم به چه شکل میتوان از این ابزار ها استفاده کرد.Kivy در مقابل Beewareمطمئناً تا الان نام کیوی را شنیده اید. کیوی فریمورکی است که به وسیله آن میتوان به سادگی برای اندروید و ios و همچنین پلتفرم های دیگری مانند windows و Linux برنامه نویسی کرد. Kivy به دلیل قدرت و متن باز بودن خود طرفداران بسیاری را دارد. از طرفی فریمورک دیگری به نام Beeware وجود دارد که آن نیز متن باز بوده و با استفاده از این فریمورک نیز میتوان برای windows , linux و همچنین ios و اندروید برنامه نویسی کرد. حال این سوال به وجود می آید که تفاوت این دو فریمورک در چیست و کدامیک را برای برنامه نویسی انتخاب کنیم. برای پاسخ به این سوال باید مزایا و معایب هریک را بدانیم تا بتوانیم تصمیم بگیریم.مزایا و معایب Kivyکیوی یک فریمورک متن باز بوده که برای ساخت سریع اپلیکیشن ها ساخته شده است از طرفی Kivy عملکرد یکپارچه ای در ویندوز و لینوکس و raspberry pi دارد. کیوی اجازه اجرا شدن کدها در بین تمام پلتفرم ها را داده و به مانند زبان برنامه نویسی پایتون سادگی را در استفاده از آن احساس می کنید همچنین نحوه برنامه نویسی در این فریم ورک بسیار مرتب تر و تمیز تر از دیگر فریمورک ها است. حال باید به گفتن معایب این فریمورک بپردازیم. این فریمورک باید در هر مرحله کد را تفسیر ( compile ) کند و همچنین ساختار آن مناسب نوشتن برنامه های پیچیده نیست. ان دو از مهمترین معایب این فریمورک محصوب می شوند.مزایا و معایب Beewareفریمورک Beeware نیز به مانند کیوی متن باز است و برای ساخت یک برنامه قدرتمند بسیار مورد اعتماد است. از طرف دیگر این فریمورک حس برنامه های بومی را منتقل میکند و با داشتن لایسنس BSD همه افراد اجازه دسترسی و اصلاح کدهای آن را دارند. همچنین باید گفت که Beeware  توسط تعداد بسیار زیادی از برنامه نویسان و توسعه دهندگان حرفه ای پشتیبانی شده و همین امر سبب می شود که پیشرفت سریع و پشتیبانی قدرتمندی داشته باشد. اگر بخواهیم معایب این فریمورک را ببینیم فقط میتوان به یک نکته اشاره کرد و آن هم این است که قدرت های این فریمورک هنوز در حال بررسی هستند.Pyqtdeploy دربرابر PySideبا استفاده از Pyqtdeploy میتوانیم برنامه های خود را برای اندروید و همچنین ios بنویسیم. همچنین این ابزار توانایی نوشتن برنامه برای ویندوز و لینوکس را نیز دارد. این ابزار به PyQT 5 برای کار نیاز دارد. از طرفی ابزار PySide  یکی از ابزار هایی است که با استفاده از لایسنس LGPL توانایی اتصال به PyQT 4 را دارد. با استفاده از این ابزار نیز میتوان برای پلتفرم هایی که QT از آن ها پشتیبانی میکند برنامه نوشت.تفاوت های این دو ابزارمورد اول تفاویت این دو در تفاوت بین لایسنس آن ها است. همانطور که گفتیم Pyqtdeploy برای PyQt5 قابل اجرا است در صورتی که PySide  قابلیت اجرا برروی نسخه های قبلی را دارد. تفاوت بعدی میان این دو ابزار را میتوان در ابزار ها و قابلیت های جانبی که این دو در اختیار توسعه دهندگان قرار میدهند جست و جو کرد. از طرفی هر دو این اتصالات نقص های خود را دارند و بنا به کاری که میخواهید با آن انجام دهید باید یکی را انتخاب کنید. همینطور باید گفت که از دیگر تفاوت های این دو ابزار پشتیبانی و توسعه دهندگان این دو هستند. باید گفت که Pyqtdeploy دارای جامعه توسعه دهندگان بیشتری است اما PySide   نیز خود را با آن نزدیک کرده و در رقابت تنگاتنگی از این لحاظ قرار داردند.SL4A در برابر QpythonSL4A در حقیقت یک کتابخانه برنامه نویسی پایتون در اندروید است. که به واسطه آن میتوان به کدزنی در عین تعامل با دستگاه اندرویدی پرداخت. اما Qpython در حقیقت یک موتور برنامه نویسی است که دارای کتابخانه هایی مانند SL4A را شامل می شود پس در حقیقت SL4A خود میتواند بخشی از Qpython باشد.Termux در برابر Chaquopyاین دو گزینه آخر لیست ما درحقیقت به طور کامل متفاوت میباشند. این تفاوت به این معنی است که Chaquopy در حقیقت یک پلاگین gradle-base برای اندروید استودیو است و termux یک ترمینال برای شبیه سازی لینوکس در محیط اندروید میباشد. پس این دو ابزار کاملاً با یکدیگر متفاوت هستند.در جدول تمام ابزارها با یکدیگر مقایسه شده اند. برای درک بهتر تفاوت ها و شباهت های ابزار ها و فریمورک ها بهتر است جدول زیر را باهم ببینیم تا بیشتر با قابلیت ها و تفاوت های آن ها آشنا شده و بتوانیم ابزار ها را باهم مقایسه کنیم.در پایان باید گفت که استفاده از هریک از این ابزار ها به نوع کار و پروژه شما مرتبط است. از طرفی میزان توانایی شما در برنامه نویسی نیز میتواند یکی از نشانه ها برای انتخاب بهتر ابزار مناسب باشد.ما در سایت دانشجویار آموزش کاربردی و پروژه محور پایتون رو آماده کردیم و کاربران ویرگول با خوندن این مقاله میتونن از طریق لینک زیر آموزش مقدماتی برنامه نویسی پایتون رو کاملا رایگان دریافت کنن.https://dnjy.ir/YMb4</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Wed, 04 Nov 2020 09:02:36 +0330</pubDate>
            </item>
                    <item>
                <title>پردازش تصویر در پایتون</title>
                <link>https://virgool.io/@daneshjooyar/%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-z9jnmv4b6vah</link>
                <description>زبان برنامه نویسی پایتون یکی از زبان های برنامه نویسی است که در سال های اخیر بسیار پیشرفت کرده و به طور گسترده در بسیاری از پروژه ها از آن استفاده میشود. یکی از دلایل پیشرفت زبان برنامه نویسی پایتون و همچنین معروفیت این زبان را میتوان توانایی بالای این زبان در هوش مصنوعی دانست. در این مقاله میخواهیم به طور کامل راجع به پردازش تصویر در پایتون که یکی از عناصر بسیار مهم و تاثیر گذار در هوش مصنوعی است صحبت کنیم و بدانیم با استفاده از چه فریمورک ها و کتابخانه هایی در زبان برنامه نویسی پایتون، می توانیم پردازش تصویر را انجام دهیم. برای اینکار باید ابتدا توضیحاتی راجع به پردازش تصویر و معنی و مفهوم آن بدهیم و به طور کلی با مفهوم پردازش تصویر آشنا شویم.پردازش تصویر چیست؟واژه ها معانی خود را در طول تاریخ بار ها عوض می کنند و یک واژه ممکن است در طول زمان های مختلف معانی متفاوتی داشته باشد. در این بین پردازش تصویر واژه ای است که امروزه فقط به پردازش تصویر دیجیتالی گفته می شود و این واژه عموماً برای این کار استفاده می شود. پردازش تصویر که به زبان انگلیسی به آن Image processing میگویند. در حقیقت پردازش تصویر به معنی پردازش سیگنالهای دیجیتالی است که ممکن است از طریق اسکنر ها و یا دوربین های دیجیتالی دریافت شود. پردازش تصویر به طورکلی دارای مراحل زیر است.چگونه تصویر خود را با پایتون پردازش کنیم؟همانگونه که میدانید یکی از قدرتمند ترین قسمت های زبان برنامه نویسی پایتون کتابخانه ها و فریمورک های مختلفی است که برای این زبان ارائه شده و زبان برنامه نویسی پایتون برای انجام هرکاری فریمورک هایی را مخصوص به آن دارد. پردازش تصویر نیز از این قاعده مستثنا نیست و با استفاده از فریمورک های مختلفی میتوان پردازش تصویر را انجام داد. با استفاده از زبان برنامه نویسی پایتون و پردازش تصویر ما میتوانیم کار هایی به مانند Crop و یا تغییر سایز تصاویر را انجام دهیم. از طرفی با استفاده از این زبان میتوانیم دسته بندی عکس ها قطعه بندی و همچنین استخراج ویژگی ها را انجام دهیم. همه این ویژگی ها بخشی از کار هایی است که ما توانایی انجام آن با پایتون را داریم اما اگر هنوز هم برای استفاده از پایتون برای پردازش تصویر شک دارید باید به شما یادآوری کنیم که زبان برنامه نویسی پایتون یک زبان برنامه نویسی ساده است که توانایی انجام بسیاری از کار ها در حوزه پردازش تصویر دارد و این کار ها و ویژگی ها را در عین سادگی با نهایت قدرت در اختیار شما قرار میدهد.پکیج Scikit-imageبرای شروع پردازش تصویر با پایتون تصمیم گرفتیم تا شما را با پکیج Scikit-image آشنا کنیم که یک پکیج منبع باز بوده و با آرایه numpy کار میکند. این پکیج یکی از پکیج های بسیار قدرتمند پایتون است که از نتایج آن در صنایع و آموزش و همچنین در نرم افزار ها استفاده می شود. این پکیج به گونه ای است که علاوه بر سادگی و استفاده راحت قدرت بسیاری را به شما میدهد و این باعث می شود علاوه بر برنامه نویسان حرفه ای، افرادی که به تازگی زبان برنامه نویسی پایتون را یاد گرفتند نیز بتوانند از آن استفاده کنند. البته که یکی از مهمترین قسمت ها برای هر پکیجی وجود مرجع مناسب برای آموزش است اما درباره پکیج Scikit-image خیال شما تقریباً از این بابت راحت است. دلیل این امر این است که کدهای با کیفیت این این پکیج توسط یک اجتماع فعال از داوطلبین توسعه داده شده و مثال های بسیاری از نحوه انجام کار آن وجود دارد. بیشتر امکانات این پکیج در زیر ماژول ها است و پس از import این پکیح با نام Skimage با استفاده از زیرماژول ها میتوانید به بهترین بهره وری از آن برسید. کد زیر نحوه انجام Image filtering را با استفاده از Scikit-image نشان میدهد.import matplotlib.pyplot as plt%matplotlib inlinefrom skimage import data,filtersimage = data.coins()   # ... or any other NumPy array!edges = filters.sobel(image)plt.imshow(edges, cmap=&#039;gray&#039;)نحوه انجام کار کد بالا به صورت شکل زیر است.کتابخانه قدرتمند numpyNumpy را میتوان یکی از کتابخانه های قدرتمند و اصلی پایتون نام برد که به واسطه آن به سادگی میتوان پردازش تصویر را انجام داد. در حقیقت همه تصاویر در پایتون به شکل یک آرایه numpy هستند و بر همین اساس میتوان با استفاده از این کتابخانه اطلاعات هر پیکسل را تغییر داد. از طرفی مراجع بسیار زیادی نیز برای یادگیری به وسیله numpy وجود دارد که این خود نیز به بیشتر شدن تعداد مخاطبین این کتابخانه اضافه میکند. شما میتوانید عکس های مورد نیاز خود را در این کتابخانه با استفاده از Scikit-image به سادگی Load کرده و با استفاده از Matplotlib نمایش دهید. برای اینکه بخواهیم با استفاده از Numpy ماسکی را روی عکس ایجاد کنیم از کد زیر استفاده میکنیم.import numpy as npfrom skimage import dataimport matplotlib.pyplot as plt%matplotlib inlineimage = data.camera()type(image)numpy.ndarray #Image is a NumPy array:mask = image &lt; 87image[mask]=255plt.imshow(image, cmap=&#039;gray&#039;)نتیجه استفاده از کد بالا تصویری به شکل زیر خواهد شد.ماژول SciPyاین ماژول یکی از کتابخانه های اصلی زبان برنامه نویسی پایتون به مانند Numpy است اما تفاوت اصلی در اینجاست که SciPy در حقیقت میتواند برای پردازش ها و همچنین دستکاری های ساده تصویر استفاده می شود و در حقیقت یکی از زیر ماژول های SciPy به نام scipy.ndimage آرایه های چند بعدی Numpy را به SciPy میاورد که به سادگی میتوان از آن ها استفاده کرد. scipy.ndimage در حقیقت قابلیت هایی مثل فیلتر های خطی و غیر خطی و همچنین اندازه گیری اشیا و برخی دیگر از قابلیت ها را در اختیار ما قرار می دهد. در کد زیر فیلتر گوسی را با استقاده از Scipy مینویسیم.from scipy import misc,ndimageface = misc.face()blurred_face = ndimage.gaussian_filter(face, sigma=3)very_blurred = ndimage.gaussian_filter(face, sigma=5)#Resultsplt.imshow(&lt;image to be displayed&gt;)نتیجه کد تصویری به شکل زیر می شود.کتابخانه PIL/Pillowکتابخانه PIL یکی از کتابخانه های منبع باز برای اندروید است که همین قابلیت باعث رایگان بودن آن می شود. این کتابخانه توانایی ذخیره دستکاری و همچنین پشتیبانی از فرمت های مختلف را به پایتون میدهد. این کتابخانه کتابخانه ای بسیار مناسب و قدرتمند بود که متاسفانه عمر آن به درازا نکشیده و در سال 2009 آخرین نسخه آن روانه بازار شد. اما صبر کنید. موضوع به همینجا ختم نمیشود و برنامه نویسان یک نسخه گسترش یافته از این کتابخانه را توسعه دادند که با داشتن پشتیبانی بسیار قدرتمند و همچنین داشتن قابلیت های پردازش تصویر اساسی مانند point operations ،color-space conversions و همچنین فیلتر کردن به وسیله تعدادی از هسته های پیچیده که در درون خود کتابخانه قرار دارند، میتواند به خوبی نیاز برنامه نویسان را تامین کرده و به کمک افراد مختلف در امر پردازش تصویر بیاید. با استفاده از این کتابخانه توسعه یافته که نام آن Pillow است میتوان به شکل زیر یک فیلتر Edge enhancement و یک increased edge enhancement نوشت.# import image modulefrom PIL import Imagefrom PIL import ImageFilter# Open an already existing imageimageObject = Image.open(&amp;quot./sand.jpg&amp;quot)# Apply edge enhancement filteredgeEnahnced = imageObject.filter(ImageFilter.EDGE_ENHANCE)# Apply increased edge enhancement filtermoreEdgeEnahnced = imageObject.filter(ImageFilter.EDGE_ENHANCE_MORE)# Show original image - before applying edge enhancement filtersimageObject.show()# Show image - after applying edge enhancement filteredgeEnahnced.show()# Show image - after applying increased edge enhancement filtermoreEdgeEnahnced.show()برای عکسی به شکل زیر نتیجه برای هر فیلتر را مشاهده میکنید.بعد از اجرای فیلتر Edge enhancement تصویر به شکل زیر در می آید.همچنین اگر فیلتر increased edge enhancement را اجرا کنیم تصویر به شکل زیر در می آید.کتابخانه OpenCV-Pythonمطمئناً اگر حتی یک بار هم به سراغ مطالبی راجع به پردازش تصویر با پایتون رفته باشید نام OpenCV-Python را شنیده اید. این کتابخانه یکی از کتابخانه هایی است که امروزه به طور بسیار گسترده و وسیعی در زبان برنامه نویسی پایتون استفاده می شود و همین امر نیز باعث می شود تا تعداد مراجع و آموزش هایی که برای این کتابخانه موجود است زیاد باشد. OpenCV-Python در حقیقت یک API برای OpenCV میباشد که بسیار سریع ساده و قدرتمند است. دلیل این اتفاق این است که کدهای پس زمینه که برای اجرا شدن OpenCV-Python استفاده می شود به شکل C و C++ هستند پس سرعت بالایی دارند. از طرفی چون OpenCV-Python یک API زبان برنامه نویسی پایتون است پس سادگی های این زبان را نیز به ارث میبرد. همین قابلیت ها این کتابخانه را به یکی از کتابخانه های بسیار قدرتمند پایتون برای نوشتن نرم افزار برای بینایی کامپیوتر و پردازش تصویر تبدیل میکند. برای نمونه ما برنامه زیر را با این کتابخانه مینویسیم تا نتیجه را به سادگی مشاهده کنیم.import cv2import numpy as np,sysA = cv2.imread(&#039;apple.jpg&#039;)B = cv2.imread(&#039;orange.jpg&#039;)# generate Gaussian pyramid for AG = A.copy()gpA = [G]for i in xrange(6):G = cv2.pyrDown(G)gpA.append(G)# generate Gaussian pyramid for BG = B.copy()gpB = [G]for i in xrange(6):G = cv2.pyrDown(G)gpB.append(G)# generate Laplacian Pyramid for AlpA = [gpA[5]]for i in xrange(5,0,-1):GE = cv2.pyrUp(gpA[i])L = cv2.subtract(gpA[i-1],GE)lpA.append(L)# generate Laplacian Pyramid for BlpB = [gpB[5]]for i in xrange(5,0,-1):GE = cv2.pyrUp(gpB[i])L = cv2.subtract(gpB[i-1],GE)lpB.append(L)# Now add left and right halves of images in each levelLS = []for la,lb in zip(lpA,lpB):rows,cols,dpt = la.shapels = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))LS.append(ls)# now reconstructls_ = LS[0]for i in xrange(1,6):ls_ = cv2.pyrUp(ls_)ls_ = cv2.add(ls_, LS[i])# image with direct connecting each halfreal = np.hstack((A[:,:cols/2],B[:,cols/2:]))cv2.imwrite(&#039;Pyramid_blending2.jpg&#039;,ls_)cv2.imwrite(&#039;Direct_blending.jpg&#039;,real)اگر برنامه بالا را بنویسیم ترکیبی از سیب و پرتقال را به مانند شکل زیر خواهیم داشت.فریمورک SimpleCVفریمورک SimpleCV یکی از فریمورک های بسیار قدرتمند پایتون است که خود شامل کتابخانه های بسیار قدرتمندی همچون OpenCV نیز می شود. این فریمورک به دلیل سادگی خود بسیاری از افراد را جذب خود می کند. دلیل این امر این است که افراد میتوانند بدون داشتن دانش خاصی در زمینه های فرمت های فایلی و عمق بیت ها و ... به کار با این فریمورک بپردازند. افراد مبتدی که به تازگی می خواهند برنامه نویسی براساس بینایی ماشین و همچنین پردازش تصویر را شروع کنند به دلیل ساده بودن این فریمورک، SimpleCV یک انتخاب بسیار مناسب است. همچنین این کتابخانه توانایی کار با ویدیو های آنلاین و فایل های ویدیویی و همچنین دوربین ها را نیز دارد که این خود نیز یکی از مزیت های آن حساب میشود. برنامه زیر نحوه استفاده از این فریمورک را به سادگی برای شما به نمایش می گذارد.# Make a function that does a half   and half image.def halfsies(left,right):result = left# crop the right image to be just   the right side.crop =   right.crop(right.width/2.0,0,right.width/2.0,right.height)# now paste the crop on the left   image.result = result.blit(crop,(left.width/2,0))# return the results.return result# Load an image from imgur.img =   Image(&#039;http://i.imgur.com/lfAeZ4n.png&#039;)# create an edge image using the   Canny edge detector# set the first threshold to 160output = img.edges(t1=160)# generate the side by side image.result = halfsies(img,output)# show the results.result.show()# save the output images.result.save(&#039;juniperedges.png&#039;)نتیجه این کد به شکل زیر است.کتابخانه Mahotasاین کتابخانه نیز یکی دیگر از کتابخانه های زبان برنامه نویسی پایتون برای نوشتن برنامه راهجع به پردازش تصویر و بینایی ماشین است. نکته جالب توجه راجع به این کتابخانه این است که این کتابخانه ترکیبی از Function های سنتی و مدرن پردازش تصویر را در درون خود دارد از طرفی این کتابخانه با کد C++ توسعه داده شده است که این امر نیز به سرعت آن کمک فراوانی میکند. نمونه ای از برنامه نوشته شده با این کتابخانه به صورت زیر است.# importing required librariesimport pylab as pimport numpy as npimport mahotas# creating numpy array of type boolf = np.ones((256, 256), bool)# setting false valuesf[200:, 240:] = Falsef[128:144, 32:48] = False# f is basically True with the exception of two islands:# one in the lower-right# corner, another, middle-left# creating a distance using numpy arraydmap = mahotas.distance(f)# showing iamgep.imshow(dmap)p.show()نتیجه کد بالا، یک شکل تبدیل فاصله به صورت زیر است.کتابخانه SimpleITKITK در حقیقت یک سیستم متن باز است که به دلیل کامل بودن ابزار های آن قدرت بسیار زیادی را در اختیار برنامه نویسان قرار داده و با استفاده از قابلیت Cross-platform بودن خود به توسعه دهندگان کمک میکند تا به سادگی بتوانند از آن استفاده کنند. SimpleITK در حقیقت یک لایه ساده برروی ITK است که یک ابزار بسیار مناسب برای نمونه سازی سریع و آموزش بوده که به دلیل پشتیبانی از فیلتر تصاویر و بخش بندی تصاویر به ابزاری قدرتمند جهت آنالیز تصاویر تبدیل شده است. نمونه کد استفاده شده برای این کتابخانه به شکل زیر است.## Script for generating images   illustrating the movement of images and change in# similarity metric during   registration.#import SimpleITK as sitkimport matplotlibmatplotlib.use(&#039;agg&#039;)import matplotlib.pyplot as pltimport numpy as np# Paste the two given images   together. On the left will be image1 and on the right image2.# image2 is also centered   vertically in the combined image.def write_combined_image(image1,   image2, horizontal_space, file_name):combined_image =   sitk.Image((image1.GetWidth() + image2.GetWidth() + horizontal_space,max(image1.GetHeight(),   image2.GetHeight())),image1.GetPixelID(),   image1.GetNumberOfComponentsPerPixel())combined_image =   sitk.Paste(combined_image, image1, image1.GetSize(), (0, 0), (0, 0))combined_image =   sitk.Paste(combined_image, image2, image2.GetSize(), (0, 0),(image1.GetWidth()+horizontal_space,round((combined_image.GetHeight()-image2.GetHeight())/2)))sitk.WriteImage(combined_image,   file_name)# Callback invoked when the   StartEvent happens, sets up our new data.def start_plot():global metric_values,   multires_iterationsmetric_values = []multires_iterations = []# Callback invoked when the   EndEvent happens, do cleanup of data and figure.def end_plot():global metric_values,   multires_iterationsdel metric_valuesdel multires_iterations# Close figure, we don&#039;t want to   get a duplicate of the plot latter on.plt.close()# Callback invoked when the   IterationEvent happens, update our data and# save an image that includes a   visualization of the registered images and# the metric value plot.def save_plot(registration_method,   fixed, moving, transform, file_name_prefix):## Plotting the similarity metric   values, resolution changes are marked with# a blue star.#global metric_values, multires_iterationsmetric_values.append(registration_method.GetMetricValue())# Plot the similarity metric   valuesplt.plot(metric_values, &#039;r&#039;)plt.plot(multires_iterations,   [metric_values[index] for index in multires_iterations], &#039;b*&#039;)plt.xlabel(&#039;Iteration   Number&#039;,fontsize=12)plt.ylabel(&#039;Metric   Value&#039;,fontsize=12)# Convert the plot to a SimpleITK   image (works with the agg matplotlib backend, doesn&#039;t work# with the default - the relevant   method is canvas_tostring_rgb())plt.gcf().canvas.draw()plot_data =   np.fromstring(plt.gcf().canvas.tostring_rgb(), dtype=np.uint8, sep=&#039;&#039;)plot_data =   plot_data.reshape(plt.gcf().canvas.get_width_height()[::-1] + (3,))plot_image = sitk.GetImageFromArray(plot_data,   isVector=True)## Extract the central axial slice   from the two volumes, compose it using the transformation# and alpha blend it.#alpha = 0.7central_index =   round((fixed.GetSize())[2]/2)moving_transformed =   sitk.Resample(moving, fixed, transform,sitk.sitkLinear, 0.0,moving_image.GetPixelIDValue())# Extract the central slice in xy   and alpha blend themcombined = (1.0 -   alpha)*fixed[:,:,central_index] + \alpha*moving_transformed[:,:,central_index]# Assume the alpha blended images   are isotropic and rescale intensity# Values so that they are in   [0,255], convert the grayscale image to# color (r,g,b).combined_slices_image = sitk.Cast(sitk.RescaleIntensity(combined),   sitk.sitkUInt8)combined_slices_image =   sitk.Compose(combined_slices_image,combined_slices_image,combined_slices_image)write_combined_image(combined_slices_image,   plot_image, 0,file_name_prefix +   format(len(metric_values), &#039;03d&#039;) + &#039;.png&#039;)# Callback invoked when the   sitkMultiResolutionIterationEvent happens, update the index into the# metric_values list.def update_multires_iterations():global metric_values,   multires_iterationsmultires_iterations.append(len(metric_values))if __name__ == &#039;__main__&#039;:# Read the imagesfixed_image =   sitk.ReadImage(&amp;quottraining_001_ct.mha&amp;quot, sitk.sitkFloat32)moving_image = sitk.ReadImage(&amp;quottraining_001_mr_T1.mha&amp;quot,   sitk.sitkFloat32)# Initial alignment of the two   volumestransform =   sitk.CenteredTransformInitializer(fixed_image,moving_image,sitk.Euler3DTransform(),sitk.CenteredTransformInitializerFilter.GEOMETRY)# Multi-resolution rigid   registration using Mutual Informationregistration_method =   sitk.ImageRegistrationMethod()registration_method.SetMetricAsMattesMutualInformation(numberOfHistogramBins=50)registration_method.SetMetricSamplingStrategy(registration_method.RANDOM)registration_method.SetMetricSamplingPercentage(0.01)registration_method.SetInterpolator(sitk.sitkLinear)registration_method.SetOptimizerAsGradientDescent(learningRate=1.0,numberOfIterations=100,convergenceMinimumValue=1e-6,convergenceWindowSize=10)registration_method.SetOptimizerScalesFromPhysicalShift()registration_method.SetShrinkFactorsPerLevel(shrinkFactors   = [4,2,1])registration_method.SetSmoothingSigmasPerLevel(smoothingSigmas=[2,1,0])registration_method.SmoothingSigmasAreSpecifiedInPhysicalUnitsOn()registration_method.SetInitialTransform(transform)# Add all the callbacks   responsible for plotingregistration_method.AddCommand(sitk.sitkStartEvent,   start_plot)registration_method.AddCommand(sitk.sitkEndEvent,   end_plot)registration_method.AddCommand(sitk.sitkMultiResolutionIterationEvent,   update_multires_iterations)registration_method.AddCommand(sitk.sitkIterationEvent,   lambda: save_plot(registration_method, fixed_image, moving_image, transform,   &#039;output/iteration_plot&#039;))registration_method.Execute(fixed_image, moving_image)کد بالا به شکل زیر عمل میکند.استفاده از pgmagickPgmagick در حقیقت یک پوشش براساس پایتون برای سیستم GraphicsMagick است. این سیستم پردازش تصویر در حقیقت به چاقوی ارتشی سوئیسی در میان برنامه نویسان شهرت دارد. دلیل این شهرت چیزی نیست جز توانایی بالای این سیستم در پشتیبانی از فرمت های مختلف مانند GIF, PNG, PDF, TIFF و 84 فرمت دیگر که نشان از توانایی این سیستم دارد. همچنین این سیستم از کتابخانه هایی برای نوشتن و خواندن و ایجاد تغییر در عکس ها پشتیبانی میکند. کد زیر نحوه استفاده از این سیستم را برای شما به نمایش در می آورد.from pgmagick.api import Imageimg = Image((300, 200))img.annotate(&#039;Hello World&#039;, angle=45)img.write(&#039;helloworld45.png&#039;)این کد Hello world را به شکل زیر به نمایش میگذلرد.PycairoPycairo را میتوان یه شکل مجموعه ای از اتصالات پایتون برای کتابخانه دو بعدی Cairo نام برد. این کتابخانه یکی از کتابخانه های پایتون است که با استفاده از آن به طراحی وکتور میپردازند و Pycairo کمک میکند که قابلیت های Cairo در پایتون نیز قابل استفاده باشد. نمونه ای از برنامه ای با استفاده از Pycairo به شکل زیر است.#!/usr/bin/python&#039;&#039;&#039;ZetCode PyCairo tutorialIn this program, we connect all mouseclicks with a line.Author: Jan BodnarWebsite: zetcode.com&#039;&#039;&#039;from gi.repository import Gtk, Gdkimport cairoclass MouseButtons:LEFT_BUTTON = 1RIGHT_BUTTON = 3class Example(Gtk.Window):def __init__(self):super(Example, self).__init__()self.init_ui()def init_ui(self):self.darea = Gtk.DrawingArea()self.darea.connect(&amp;quotdraw&amp;quot, self.on_draw)self.darea.set_events(Gdk.EventMask.BUTTON_PRESS_MASK)self.add(self.darea)self.coords = []self.darea.connect(&amp;quotbutton-press-event&amp;quot, self.on_button_press)self.set_title(&amp;quotLines&amp;quot)self.resize(300, 200)self.set_position(Gtk.WindowPosition.CENTER)self.connect(&amp;quotdelete-event&amp;quot, Gtk.main_quit)self.show_all()def on_draw(self, wid, cr):cr.set_source_rgb(0, 0, 0)cr.set_line_width(0.5)for i in self.coords:for j in self.coords:cr.move_to(i[0], i[1])cr.line_to(j[0], j[1])cr.stroke()del self.coords[:]def on_button_press(self, w, e):if e.type == Gdk.EventType.BUTTON_PRESS \and e.button == MouseButtons.LEFT_BUTTON:self.coords.append([e.x, e.y])if e.type == Gdk.EventType.BUTTON_PRESS \and e.button == MouseButtons.RIGHT_BUTTON:self.darea.queue_draw()def main():app = Example()Gtk.main()if __name__ == &amp;quot__main__&amp;quot:main()با استفاده از کد بالا میتوانیم وکتور زیر را طراحی کنیم.با استفاده از همه فریمورک ها، پکیج ها و همچنین کتابخانه های بالا میتوان کار پردازش تصویر با پایتون را شروع کرد و بنا به نوع کار خود از یکی از آن ها استفاده کنیم.پیشنهاد می‌کنیم قبل از ورود به بحث پردازش تصویر در پایتون ، به برنامه نویسی با این زبان مسلط بشین. دوره آموزش رایگان پایتون در سایت دانشجویار میتونه بهتون کمک کنه. برای مشاهده و دریافت رایگان روی لینک زیر کلیک کنید:https://dnjy.ir/W4N3</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Sun, 01 Nov 2020 09:14:20 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش هک و امنیت با پایتون</title>
                <link>https://virgool.io/coderlife/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%87%DA%A9-%D9%88-%D8%A7%D9%85%D9%86%DB%8C%D8%AA-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-s4d8ayv25wso</link>
                <description>دوستان عزیز سلام ، امروز در این نوشته از ویرگول دانشجویار میخوایم درباره مبحث بسیار پرطرفدار هک و امنیت در پایتون که یکی از پرکاربردترین زبان های برنامه نویسی در این زمینه می باشد صحبت کنیم.این نوشته اطلاعات خوبی در این زمینه را به شما منتقل می کند، اما پیش نیاز ورود به این مبحث یادگیری زبان پایتون می باشد.اگر تا به حال با این زبان کار نکردین و یا نیاز به حرفه ای تر شدن در این زمینه دارید، ما در دانشجویار دوره آموزش پایتون را به صورت رایگان در اختیار شما قرار داده ایم که از اینجا می توانید دانلود و مشاهده کنید و بعد، مقاله را با خیال راحت مطالعه کرده و دانش عملی به دست آورید :  https://www.daneshjooyar.com/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d8%a7%db%8c%da%af%d8%a7%d9%86-%d9%be%d8%a7%db%8c%d8%aa%d9%88%d9%86-python-%d9%85%d9%82%d8%af%d9%85%d8%a7%d8%aa%db%8c/ آموزش هک و امنیت پایتونخب بریم سراغ اصل داستان یعنی هک و امنیت با پایتون :امروزه کمتر کسی وجود دارد که با دنیای تکنولوژی آشنا بوده و نامی از زبان برنامه نویسی پایتون python را نشنیده باشد. این زبان برنامه نویسی یکی از زبان های برنامه نویسی معروف و بسیار پیشرفته و قدرتمند در تمام دنیا است و بر تعداد کاربران آن روز به روز افزوده شده و هرروز تعداد بیشتری از افراد به این زبان برنامه نویسی جذب می شوند. اگر نگاهی به تعداد افرادی که از زبان برنامه نویسی پایتون استفاده می کنند نگاه کنیم متوجه می شویم این آمار روز به روز در حال افزایش است. افزایش استفاده از یک زبان برنامه نویسی علاوه بر مزیت ها و اتفاقات مثبتی که به همراه دارد باعث اتفاق به وجود آمدن هکر ها و بروز مشکل در امنیت نیز می شود. هرچند پایتون با توانایی های و فریمورک های خود کمک شایانی به ما می کند. اما وظیفه یک برنامه نویس این است که به خوبی از ابزار هایی که زبان برنامه نویسی در اختیارش قرار داده استفاده کند و با قدرت و به مانند فرمانده یک ارتش در مقابل همه نوع از حملات هکر ها ایستادگی کند. بعد از استفاده از این محصول با رمزنگاری با پایتون با کتابخانه hashlib آشنا می شویم و مبحث هک و امنیت پایتون را به طور کامل بررسی می کنیم.هک چیست و هکر کیست؟شما اگر در طول یک هفته اخبار تکنولوژی را دنبال کنید و به اتفاقات رخ داده در طول این مدت دقت کنید. غیر ممکن است که خبری راجع به هک در آن نیابیم. حال ممکن است این سوال پیش بیاید که اساساً هک چیست؟ چرا تعداد زیادی از افراد هکر می شوند و اصلاً چه کسی را یک هکر می نامند؟ همه این نوع از پرسش های شما در این قسمت پاسخ داده خواهد شد. بهتر است با مثالی از دنیای واقعی این مبحث را باز کنیم. در دنیای واقعی و در یک شهر میلیون ها شغل و حرفه وجود دارد که هرکدام دارای روابط و مشتریان مربوط به خود هستند حال فرض می کنیم شرکتی در این دنیا وجود دارد که سیستم کامل اداری خود را به راه انداخته و شروع به کار به صورت حرفه ای کرده است. حال این سیستم اداری به مانند همه سیستم ها یک سیستم دارای مشکل است. حال اگر اطلاعاتی از طریق این مشکلات و ضعف های سیستم به بیرون نفوذ کند می توان گفت این سیستم هک شده است. در دنیای کامپیوتر نیز مسئله به همین شکل است. کلمه Hack در زبان انگلیسی به معنی رخنه و نفوذ است و به کسی که توانایی یافتن حفره های امنیتی و استفاده از آن ها را دارد هکر می گویند که معمولاً توانایی برنامه نویسی بسیار قدرتمندی را دارند.  سئوال بعدی که در مورد هکر ها ایجاد می شود این است که آیا همه هکر ها بد هستند و هک هم کار بسیار بدی است؟ مطالبی که در قسمت بالا برای شما گفتم به علاوه فیلم های سینمایی و سریال هایی که تاکنون راجع به هک دیدید همین مطلب را تداعی میکند اما واقعیت این نیست. هک کاری بسیار خوب و مفید برای سیستم های کامپیوتری است که با استفاده از آن می توان حفره های امنیتی را شناخته و آن ها را برطرف کرد. مشکلی که باعث خطرناک شدن هک می شود درحقیقت هکر ها هستند. برخی از این هکر ها بعد از یافتن مشکلات و حفره های امنیتی شروع به سوء استفاده از این اطلاعات می کنند و آنجاست که ما باید هوشیار باشیم و با دانش خود جلوی این حملات احتمالی را بگیریم. رمزنگاری در پایتون با کتابخانه hashlibما می توانیم برای رمزنگاری hash در پایتون استفاده کنیم. هش کردن به طور کلی به معنی رمزنگاری به صورت رشته ای از حروف و کلمات است که در مقصد رمزگشایی می شود. این کار سبب امن تر شدن اطلاعات شده و یکی از روش های رمزنگاری ( cryptography ) است. برای رمزنگاری با کتابخانه hashlib در پایتون لازم است آن را فراخوانی کنیم. از طرفی از آنجایی که hashlib به وسیله openssl برگشته است از الگوریتم های رمزنگاری md5, sha1, sha224, sha256, sha384, sha512 پشتیبانی میکند. که بعضی از این الگوریتم ها برای همه پلتفرم ها در دسترس بوده و برخی نیز بسته به زیرکتابخانه های استفاده شده قابل استفاده اند.import hashlibprint(&#039;Guaranteed:\n{}\n&#039;.format(    &#039;, &#039;.join(sorted(hashlib.algorithms_guaranteed))))print(&#039;Available:\n{}&#039;.format(    &#039;, &#039;.join(sorted(hashlib.algorithms_available))))$ python3 hashlib_algorithms.pyGuaranteed:blake2b, blake2s, md5, sha1, sha224, sha256, sha384, sha3_224,sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256Available:BLAKE2b512, BLAKE2s256, MD4, MD5, MD5-SHA1, RIPEMD160, SHA1,SHA224, SHA256, SHA384, SHA512, blake2b, blake2b512, blake2s,blake2s256, md4, md5, md5-sha1, ripemd160, sha1, sha224, sha256,sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512,shake_128, shake_256, whirlpoolبهتر است برای استفاده از این کتابخانه مثال هایی را بزنیم نحوه فراخوانی و نحوه استفاده آن به خوبی مشخص شود. برای مثال متن زیر با الگوریتم md5 و توسط کتابخانه hashlib رمزگذاری شده است.داده های اولیه ما با شکل زیر است.hashlib_data.pyimport hashliblorem = &#039;&#039;&#039;Lorem ipsum dolor sit amet, consectetur adipisicingelit, sed do eiusmod tempor incididunt ut labore et dolore magnaaliqua. Ut enim ad minim veniam, quis nostrud exercitationullamco laboris nisi ut aliquip ex ea commodo consequat. Duisaute irure dolor in reprehenderit in voluptate velit esse cillumdolore eu fugiat nulla pariatur. Excepteur sint occaecatcupidatat non proident, sunt in culpa qui officia deseruntmollit anim id est laborum.&#039;&#039;&#039;حال شروع به رمزگذاری داده ها می کنیم.import hashlibfrom hashlib_data import loremh = hashlib.md5()h.update(lorem.encode(&#039;utf-8&#039;))print(h.hexdigest())هنگامی که می خواهیم md5 را محاسبه کنیم باید در ابتدا یک شی هش تعریف کنیم که بتوانیم داده های خود را با نام digest وارد آن کنیم. نتیجه این عمل به شکل زیر خواهد بود. $ python3 hashlib_md5.py3f2fd2c9e25d60fb0fa5d593b802b7a8همچنین در مثالی دیگر این داده نمونه را می توانیم با الگوریتم SHA1 رمزگذاری کنیم. روند کار در این الگوریتم نیز به مانند الگوریتم قبلی است.import hashlibfrom hashlib_data import loremh = hashlib.sha1()h.update(lorem.encode(&#039;utf-8&#039;))print(h.hexdigest())و نتیجه کار به شکل زیر نشان داده می شود.$ python3 hashlib_sha1.pyea360b288b3dd178fe2625f55b2959bf1dba6eefروند وارد کردن داده ها و همچنین رمزگذاری آن ها با دو الگوریتم به شکل بالا است و مطمئناً با تهیه این محصول به سادگی توانایی انجام کار با این کتابخانه و الگوریتم های مختلف آن را دارید و از طرفی میتوانید امنیت برنامه خود را تامین خواهید کرد. در پایان باید گفت با این روش می توانید از ورود هکر ها در پایتون جلوگیری کنید و وارد مبحث هک و امنیت با پایتون شوید. اگر نیاز به تامین امنیت در پایتون و یا علاقه مند به مباحث رمزنکاری و یا حتی علاقه به برنامه نویسی پایتون دارید، این آموزش مناسب شما بوده و با استفاده از آن به طور کامل می توانید از این کتابخانه استفاده کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Fri, 16 Oct 2020 09:39:23 +0330</pubDate>
            </item>
                    <item>
                <title>ورود به دنیای برنامه نویسی اندروید با کاتلین</title>
                <link>https://virgool.io/coderlife/%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%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-%D8%A8%D8%A7-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-csqyh2vq6qzx</link>
                <description>با سلام خدمت شما دوست عزیز اگر قصد ورود به بازارکار بزرگ اندروید را دارید و در شروع کار هستید حتما با چالش جاوا یا کاتلین روبرو شده اید و بر سر دوراهی جاوا یا کاتلین قرار گرفته اید . اجازه بدهید همین اول کار یک شبهه را برطرف کنیم که در شروع کار با آن مواجه خواهید بود .قطعا توصیه خیلی از افراد به شما این خواهد بود  که ابتدا باید جاوا را یاد بگیرد و سپس به سراغ کاتلین بروید .درسته که کاتلین انتخاب درستی برای کوچ از جاوا به حساب می آید اما برای شروع می توانید بدون هیچ زمینه ای و تنها با آشنایی با کامپیوتر و اینترنت شروع به کار کنید.خب کمی هم از تاریخچه کاتلین بخوانیم در سال ۲۰۱۷ گوگل رسماً این زبان را به‌عنوان زبان دوم برنامه‌نویسی برای اندروید معرفی کرد. در حقیقت از این تاریخ به بعد بود که Kotlin توجه بیشتری از برنامه نویسان را به خود جلب کرد. زیرا کاتلین زبانی ذاتاً کامپایل شده است و سریع‌تر از زبان‌های دیگر عمل می‌کند و درنتیجه اپلیکیشن هایی بهتر و قوی‌تری می‌توان با آن تولید کرد. از همه مهم‌تر اینکه این زبان با زبان‌های پراستفاده دیگر اندروید مانند جاوا کاملاً سازگار است. تعداد برنامه‌هایی که با کاتلین نوشته‌شده‌اند می‌توان به pinterest, coursere, Trello, Evernote و غیره اشاره کرد.تیم دانشجویار بر همین اساس تصمیم به انتشار دوره ای تحت عنوان دوره جامع آموزش کاتلین نموده است. که این دوره برای همه افراد مبتدی که به تازگی قصد ورود به دنیای برنامه نویسی اندروید را دارند مناسب است و حتی افراد حرفه ای که علاقمند به چالش های جدید هستند و دوست دارند به محیط جدیدی  ورود کنند .برای مشاهده سرفصل های دوره و آشنایی بیشتر با آن اینجا کلیک کنید.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Tue, 29 Sep 2020 12:47:05 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت تجربه کاربری و رابط کاربری چیست؟</title>
                <link>https://virgool.io/@daneshjooyar/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%DB%8C-%D9%88-%D8%B1%D8%A7%D8%A8%D8%B7-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%DB%8C-%DA%86%DB%8C%D8%B3%D8%AA-a0nu4rmvpbfo</link>
                <description>آموزش جامعقطعاً همه ما بارها کلمه‌های طراحی رابط کاربری یا تجربه کاربری را شنیده‌ایم، چیزی که هر طراح نرم افزاری باید به آن توجه ویژه ایی داشته باشد. اگر برنامه نویس یا طراح نرم افزار باشیم، تجربه‌هایی در این زمینه داریم؛ اما متاسفانه به خاطر این که به این علم شیرین و این حرفه به صورت آکادمیک پرداخته نشده، با اصول و قواعد طراحی نرم افزار آشنا نیستم.قصد داریم تا در این دوره آموزشی شما را با اصول و سبک‌های طراحی نرم افزار البته بومی شده آشنا کنیم و فوت‌های کوزه گری این هنر و حرفه را به شما آموزش دهیم.برای دریافت بسته جامع آموزش ui / ux روی لینک زیر کلیک کنیدhttps://dnjy.ir/QrDTمعنای ui :وقتی در مورد طراحی حرف می‌زنیم اغلب مردم به طراح دیداری  فکر می‌کنند و دلیل آن این است که قابل فهم تر می‌باشد. طراحان دیداری کارشان این است که رنگ و تصاویر مناسب را انتخاب می‌کنند. لوگو را طراحی می‌کنند و … . این نوع طراحی همان چیزی است که بیشتر مردم به آن می گویند: “هنر”.اگر طراحی دیداری هنر باشد، طراحی رابط کاربری یک علم است.طراح رابط کاربری با خود فکر می‌کند که اگر یک فرم ارسال شد چه اتفاقی بیافتد؟ خطاها را چطور به کاربر نمایش بدهیم؟ آیا اطلاعات فرم به یک صفحه جدید ارسال می‌شود؟ دکمه ارسال فرم کجا قرار گیرد؟تعاریف متعددی از UI وجود دارد اما اگر بدانیم که UI علامت اختصاری User Interface می‌باشد، پی خواهیم برد که می‌توان UI را رابط کاربری تعریف کرد. هرجا که صحبت از کار کاربر با نرم افزار باشد، بی شک رابط کاربری حضور دارد.پس UX یعنی چه؟بگذارید اینطور بگوییم! در سراسر دنیا همه شرکت‌های بزرگ محصولاتی را طراحی می‌کنند که در نهایت به دست ما می‌رسد و به نحوی از آن استفاده می‌کنیم. وقتی برای اولین بار یک موبایل خریدید چه حسی داشتید؟ در مورد اینکه می‌توانستید گوشی تلفن‌تان را در جیب بگذارید و هرجایی دور از خانه به تماس‌ها پاسخ دهید، چه فکری می‌کردید؟ آیا داشتن یک گوشی تلفن با قابلیت حمل، باعث نمی‌شد در مقابل دوستان و نزدیکان‌تان یک حس خاص داشته باشید؟ شما یک حس برتری  و قدرت در خودتان نمی‌دیدید؟بله… این حس به ۱۰−۱۲ سال پیش مربوط می‌شود و حالا همه یک گوشی موبایل دارند. کسی به خاطر موبایلش احساس غرور نمی‌کند! اما این موضوع را همین الان هم می‌شود به شکل دیگری دید. فکر می‌کنید حس داشتن یک iPhone 6+ برای کسی که یک گوشی کلاسیک Nokia 2200‌ دارد چگونه است؟UX یعنی تجربه‌های خوب و بدی که ما در استفاده از محصولات داریم و باعث شده‌اند که آنها را بخریم یا نخریم.تجربه‌کاربری یعنی نگاه به کاربرد محصول از بیرون. یعنی از همان سمتی که مردم به نحوه عملکردش نگاه می‌کنندما در تیم دانشجویار آموزش جامع برای شما آماده کرده ایم که شما را در این دوره با تفکر جدیدی در رابطه با طراحی نرم افزارآشنا می‌کنیم.  با انتشار فصل اول با آگاهی بیشتری راجع به این تحول در صنعت نرم افزار نسبت به استفاده از این دوره اقدام خواهید کرد.این بطری های سس را ببینید. بطری اول ظاهر قشنگی دارد اما مشکل آن این است که وقتی سس بطری کم شود فشاردادن بطری به تنهایی سس را بیرون نمیریزد و باید حتما آن را تکان دهید و این تجربه خوبی برای کاربر ایجاد نمی کند. اما بطری دوم علاوه بر این که ظاهر خوبی دارد این تجربه بد را هم از کاربر می گیرد و مشکل را برطرف می کند؛ یعنی هم UI خوبی دارد و هم UX خوب.مبحث UI-UX در دنیای امروز برنامه نویسی از جایگاه ویژه ای برخوردار است و تمام تیم های برنامه نویسی حتماً و لزوماً باید یک متخصص در این زمینه را درون مجموعه خود داشته باشند . شرکت های بزرگ برنامه نویسی در ایران ،امروزه به این نتیجه رسیده اند که واگذاری کل پروژه به یک نفر که هم طراحی و کد نویسی را انجام دهد ، نتیجه خوبی ندارد و از این رو تصمیم گرفتند به صورت کاملاً تخصصی ،یعنی استخدام یک متخصص UI-UX، در این زمینه وارد شوند .</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Sun, 27 Sep 2020 10:41:31 +0330</pubDate>
            </item>
                    <item>
                <title>بورس رو حرفه ای یاد بگیر</title>
                <link>https://virgool.io/@daneshjooyar/%D8%A8%D9%88%D8%B1%D8%B3-%D8%B1%D9%88-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%DB%8C%D8%A7%D8%AF-%D8%A8%DA%AF%DB%8C%D8%B1-fszznohd6gzk</link>
                <description>توی هر جمع و گروهی، توی جامعه حقیقی و مجازی یکی از بحث ها و صحبت های جذاب بورس هست، مطمئنا کلماتی مثل شاخص ، کد بورسی ، سجام، کارگزاری، مفید، آگاه و … را بارها شنیده اید.برای دریافت آموزش همراه با تخفیف ویژه اینجا کلیک کنید.آموزش بورسآموزش بورس از مقدماتی تا انواع تحلیل های حرفه ای در دانشجویار ببینید.هجوم بینظیر نقدینگی به سمت بازار بورس با رقمی حدود ۵۶ هزار میلیارد تومان در بازه ۳ ماهه اول سال ۹۹ باعث افزایش تقاضا و به طبع آن بالا رفتن قیمت سهام شد، اما سوال اساسی این است که چرا تقاضا در این بازه افزایش یافت؟چند دلیل عمده برای این موضوع میتوان متصور شد:حمایت دولت از بازار بورس در مقابل دلار و طلاارائه و عرضه سهام شرکت های بزرگ دولتی و سهام عدالت با سوددهی بالا در بورسوضع قوانین سخت گیرانه مانند مالیات بر مسکن برای سرمایه گذاری در بازارهای موازی مسکن دلار و طلاافزایش سرمایه های جذاب شرکت های بزرگ بعد از چند سالافزایش قیمت دلار و به طبع آن افزایش درآمد شرکت های بورسیتبلیغات و تمرکز هدایت جریان نقدینگی به این سمتعدم محدودیت مالی برای سرمایه گذاریسرمایه گذاری در بورس هیچ حد مجازی ندارد و شما می توانید با حداقل سرمایه خود در بورس فعالیت داشته باشید تا صدها میلیارد تومان.مثلا شما برای ورود به بازار مسکن خودرو و یا حتی سکه باید سقف سرمایه مشخصی داشته باشید .اما در بازار بورس می توانید با صد هزار تومان به خرید و فروش سهام بپردازید.قابلیت نقد شوندگی بالا و سریعدر شرایط رکورد امروز در بازار مسکن و غیره تبدیل سرمایه به نقدینگی کاری به نسبت زمان بر است اما با پیشرفت تکنولوژی شما می توانید با چند کلیک و به راحتی سهام خود را به پول نقد تبدیل کنید با سرعتی حتی سریع تر از تبدیل سکه و ارز به پول نقد این کار را انجام دهید.کسب سود با احتمال ریسک کمتردر بازار بورس از دو طریق دریافت سود نقدی و افزایش قیمت سهام می توان سود بدست آورند. به دلیل اینکه کاهش و افزایش قیمت سهام شرکت ها قابل پیش بینی نیست،میزان سود را نمی توان پیش بینی کرد با این وجود پتانسیل زیادی برای کسب سود وجود دارد و همین موضوع افراد زیادی را برای سرمایه گذاری در بورس تشویق می کند اما دقت کنید چون احتمال ضرر سنگین هم وجود دارد.حمایت قانونیاز آنجایی که بورس بازاری قانونی است کلیه افرادی که در آن سرمایه گذاری می کنند از حمایت قانونی برخوردارند و اجازه فعالیت به افراد حقیقی و حقوقی متخلف را نمی دهد.مشارکت در اداره شرکتسهام داران با خرید سهام به نوعی جزء مالکان شرکت به حساب می آیند بنابراین به همان اندازه در تصمیم گیری در خصوص نحوه اداره و انتخاب مدیران می توانند مشارکت داشته باشند.یعنی خرید سهام یک شرکت به معنای مالکیت بخشی از آن هست البته یک سهامدار خرد نمی تواند وارد سهامداران عمده شود.شاید یک شخص عادی با سرمایه محدود نتواند شرکای مانند پتروشیمی راه اندازی کند و با خرید سهام آن می تواند در سودآوری آن سهیم بشود.با توجه به مزیت ها ی برشمرده متوجه می شویم که سرمایه گذاری در بازار بورس و اوراق بهادار نسبت به سرمایه گذاری در بازارهای املاک بانک و طلا بسیار راحت تر هست.چون عواملی مانند شفافیت در بازار بورس بسیار بالاتر از سایر بازار ها و هم مانند نقدشوندگی و بازدهی سرمایه که در بازار بورس به نسبت بازارهای دیگر بالاتر هست.</description>
                <category>دانشجویار</category>
                <author>دانشجویار</author>
                <pubDate>Tue, 22 Sep 2020 10:17:42 +0330</pubDate>
            </item>
            </channel>
</rss>