<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>پست‌های انتشارات اُپن سورس</title><link>https://virgool.ir/open-source/feed</link><description>مجله اُپن سورس به روز ترین مجله برنامه نویسی ایران</description><language>fa</language><pubDate>2026-11-11 03:01:05</pubDate><image><url>https://files.virgool.ir/upload/publication/voicqtfvpm83/sj2zok.png</url><title>اُپن سورس</title><link>https://virgool.ir/open-source</link></image><item><title>آشنایی با امنیت اطلاعات</title><link>https://virgool.ir/open-source/information-security1-czbhtiz5li8b</link><description>مقدمه ضرورت برقراری امنیت اطلاعات با توجه به رشد روزافزون به کارگیری فناوری اطلاعات:بانکداري الکترونیکیدولت الکترونیکیراي گیري الکترونیکیآموزش الکترونیکیبهداشت الکترونیکیو...جرائم الکترونیکی اولین بار در سال 1988 روبرت موریس اولین کرم کامپیوتري را نوشتدر سال 1994 کلاهبرداري یک گروه روسی 4/10 میلیون دلار به Citibank ضرر زددر سال 1996 وب سایت CIA هک شد!در سال 1998 در آستانه جنگ امریکا و عراق دو نوجوانکالیفرنیایی بهمراه مربی 18 ساله اسراییلی خود به سیستم رایانه اي پنتاگون حمله کردند!پس از سال 2000 هرسال بیش از یک میلیون حمله امنیتیانواع رخدادهای ناخوشایند برای اطلاعاتدسترسی غیرمجاز به داده هاافشای اطلاعات محرمانهاز دسترس خارج شدن خدمات یک سرویس دهندهتغییر مخفیانه در داده هاسرقت داده هانابود شدن داده هاجعل داده هااختلال در عملکرد صحیح ماشین کاربرانو هر نوع تعرض به حریم داده های یک ماشینامنیت اطلاعات چیست؟ امنیت اطلاعات عبارتست از مجموعه تمهیدات و روش هایی که در یکی از بندهاي زیر قرار گیرد:تمهیداتی که اطمینان می دهند رخدادهای ناخوشایند هرگز اتفاق نمی افتندتمهیداتی که احتمال وقوع رخدادهای خطرناك را کم می کندتمهیداتی که نقاط حساس و استراتژیک را در سطح شبکه توزیع می کندتمهیداتی که اجازه می دهند به محض وقوع رخدادهاي خطرناک،شرایط در اسرع وقت و با کمترین هزینه به شکل عادی برگرددتمهیدات امنیتی یک شمشیر دولبه است! هرچه تمهیدات امنیتی دقیق تر و مفصل تر اجرا شوند:دسترسی افراد مجاز به منابع شبکه دشوارتر و دست و پاگیرتر می شودهزینه پیاده سازی و نگهداری سیستم را بالا می بردپس تمهیدات امنیتی در هر سیستم باید به قدر لازم باشد</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Mon, 09 Jan 2023 22:07:46 +0330</pubDate></item><item><title>سورس کد تولید پسورد با زبان پایتون</title><link>https://virgool.ir/open-source/سورس-کد-تولید-پسورد-با-زبان-پایتون-usmkjuumkpd0</link><description>خب بریم سراغ یک پروژه کوچک و جالب برای تمرین زبان پایتون https://www.aparat.com/v/SPHEn/%D8%B3%D9%88%D8%B1%D8%B3_%DA%A9%D8%AF_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D9%BE%D8%B3%D9%88%D8%B1%D8%AF_%D8%A8%D8%A7_%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86 کد پروژه:import random&#xA;&#xA;passlen = int(input(&#34;enter the length of password: &#34;))&#xA;s = &#34;abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&amp;*()?&#34;&#xA;p = &#34;&#34;.join(random.sample(s,passlen))&#xA;&#xA;print(p)</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Sun, 21 Nov 2021 22:00:05 +0330</pubDate></item><item><title>قسمت دوم: آموزش پایتون (تعریف متغیر)</title><link>https://virgool.ir/open-source/py2-klye3tdre840</link><description>خُببعد از اینکه یادگرفتیم در پایتون متنی را چاپ کنیم الآن وقت این رسیده که نحوه تعریف متغیر را آموزش ببینیمتعریف متغیر در پایتون از دو قسمت تشکیل شده:نام متغیرمقدار متغیرمثلا به تکه کد زیر توجه کنیدnum = 1در اینجا ما متغیری داریم به نام num که مخفف number هست و مقدار آن برابر یک هستیا مثلا این کدname = &#34;mohammad&#34;در اینجا متغیر name را با مقدار mohammad داریمدر پایتون متغیرها دقیقا به همین شکل تعریف می شوندمثلا تکه کد زیر دارای متغیر name هست و در آخر این برنامه name را چاپ خواهد کردname = &#34;mohammad&#34;&#xA;print(name)پس برای چاپ کردن مقدار متغیر کافی است که آن را در print قرار دهیم و آن را چاپ کنیمبه کد زیر دقت کنید:name = &#34;mohammad&#34;&#xA;print(&#34;Hello&#34; + name)خروجی این کد به این شکل است:Hello mohammadپس به این شکل میتوانیم متغیر را در کنار یک جمله ثبت کنیمحالا فرض کنید ما میخواهیم نام کاربر را بگیریم و به آن سلام کنیمبه نظر شما این کد را باید به چه شکلی بنویسیم؟!نحوه دریافت متغیر را در قسمت سوم آموزش ببین :)</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Wed, 29 Sep 2021 12:34:44 +0330</pubDate></item><item><title>قسمت اول: آموزش پایتون (نصب پایتون و نوشتن اولین کد)</title><link>https://virgool.ir/open-source/py1-dlmiaarr7o9m</link><description>سلام رفقاامیدوارم که حالتون عاااااااالی باشهبالاخره میخواهیم بریم سراغ پایتون و شروع به یادگیری این زبان بکنیماول از همه شما باید پایتون را بر روی سیستم خودتون نصب کنید و بعد شروع به کار کنیدنصب پایتون:اول از همه وارد سایت www.python.org شویدسپس نسخه مربوط به سیستم خود را دانلود و نصب نماییدنصب pyCharm:برای اجرای کدهای پایتون نیاز به یک IDE حرفه ای داریم که من نرم افزار pyCharm را به شما معرفی میکنمبرای نصب این نرم افزار وارد سایت www.jetbrains.com/pycharm شویدسپس نسخه مربوط به سیستم خود را دانلود و نصب نماییدچاپ متن در پایتون:خُب خُبحالا وقت نوشتن Hello world هست :)در زبان پایتون علامت (&#34; &#34;) و (&#39; &#39;) هیچ فرقی باهم نداره و شما میتوانید از هر دو اینها استفاده کنیدولی توصیه می شود برای چاپ متن از دابل کوتیشن (&#34; &#34;) استفاده کنیدنمونه کد چاپ متن:print(&#34;Hello World&#34;)&#xA;یا&#xA;print(&#39;Hello World&#39;)تبریک میگم شما اولین برنامه پایتون خود را ساختید و اجرا کردید</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Thu, 23 Sep 2021 20:34:22 +0330</pubDate></item><item><title>آموزش ساخت محاسبه گر شاخص توده بدنی BMI</title><link>https://virgool.ir/open-source/bmi-calculator-lbsscaczgq3y</link><description>در این آموزش می خواهیم نحوه ایجاد یک ماشین حساب شاخص توده بدنی (BMI) آموزش ببینیم.این آموزش مناسب مبتدیانی است که می خواهند نحوه ایجاد این ماشین حساب را بررسی کنند.شاخص توده بدنی یا (BMI (Body Mass Index مقداری است که از وزن و قد یک فرد حاصل می شود.شاخص توده بدنی= kg/m^2قدم اول:تعریف چیدمانقدم اول تعریف یک چیدمان مناسب است که به کاربر امکان می دهد مقادیر قد و وزن را وارد کند تا شاخص توده بدنی محاسبه شود.علاوه بر این ما به یک دکمه برای شروع محاسبه شاخص توده بدنی و همچنین یک TextView برای نمایش نتیجه نیاز خواهیم داشت.پس در کل به موارد زیر نیاز داریم:دو EditTextیک Buttonیک TextViewچیدمان اپلیکیشن ما به صورت زیر خواهد بود:&lt;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&gt;&#xA;&lt;LinearLayout xmlns:android=&#34;http://schemas.android.com/apk/res/android&#34;&#xA;    xmlns:tools=&#34;http://schemas.android.com/tools&#34;&#xA;    android:id=&#34;@+id/activity_main&#34;&#xA;    android:layout_width=&#34;match_parent&#34;&#xA;    android:layout_height=&#34;match_parent&#34;&#xA;    android:paddingBottom=&#34;@dimen/activity_vertical_margin&#34;&#xA;    android:paddingLeft=&#34;@dimen/activity_horizontal_margin&#34;&#xA;    android:paddingRight=&#34;@dimen/activity_horizontal_margin&#34;&#xA;    android:paddingTop=&#34;@dimen/activity_vertical_margin&#34;&#xA;    android:orientation=&#34;vertical&#34;&#xA;    tools:context=&#34;com.ssaurel.bmicalculator.MainActivity&#34;&gt;&#xA;&#xA;    &lt;TextView&#xA;        android:text=&#34;@string/weight&#34;&#xA;        android:layout_width=&#34;wrap_content&#34;&#xA;        android:layout_height=&#34;wrap_content&#34;&#xA;        android:layout_gravity=&#34;center_horizontal&#34;&#xA;        android:gravity=&#34;center_horizontal&#34;&#xA;        android:layout_marginTop=&#34;50dp&#34;&#xA;        android:textSize=&#34;20sp&#34;/&gt;&#xA;&#xA;    &lt;EditText&#xA;        android:id=&#34;@+id/weight&#34;&#xA;        android:layout_width=&#34;wrap_content&#34;&#xA;        android:layout_height=&#34;wrap_content&#34;&#xA;        android:layout_gravity=&#34;center_horizontal&#34;&#xA;        android:layout_marginTop=&#34;10dp&#34;&#xA;        android:ems=&#34;6&#34;&#xA;        android:inputType=&#34;number|numberDecimal&#34;&#xA;        android:textSize=&#34;20sp&#34;/&gt;&#xA;&#xA;    &lt;TextView&#xA;        android:text=&#34;@string/height&#34;&#xA;        android:layout_width=&#34;wrap_content&#34;&#xA;        android:layout_height=&#34;wrap_content&#34;&#xA;        android:layout_gravity=&#34;center_horizontal&#34;&#xA;        android:gravity=&#34;center_horizontal&#34;&#xA;        android:layout_marginTop=&#34;50dp&#34;&#xA;        android:textSize=&#34;20sp&#34;/&gt;&#xA;&#xA;    &lt;EditText&#xA;        android:id=&#34;@+id/height&#34;&#xA;        android:layout_width=&#34;wrap_content&#34;&#xA;        android:layout_height=&#34;wrap_content&#34;&#xA;        android:layout_gravity=&#34;center_horizontal&#34;&#xA;        android:layout_marginTop=&#34;10dp&#34;&#xA;        android:ems=&#34;6&#34;&#xA;        android:inputType=&#34;number|numberDecimal&#34;&#xA;        android:textSize=&#34;20sp&#34;/&gt;&#xA;&#xA;    &lt;Button&#xA;        android:id=&#34;@+id/calc&#34;&#xA;        android:layout_width=&#34;wrap_content&#34;&#xA;        android:layout_height=&#34;wrap_content&#34;&#xA;        android:layout_gravity=&#34;center_horizontal&#34;&#xA;        android:layout_marginTop=&#34;25dp&#34;&#xA;        android:=&#34;calculateBMI&#34;&#xA;        android:text=&#34;@string/calculateBMI&#34;&#xA;        /&gt;&#xA;&#xA;    &lt;TextView&#xA;        android:id=&#34;@+id/result&#34;&#xA;        android:layout_width=&#34;wrap_content&#34;&#xA;        android:layout_height=&#34;wrap_content&#34;&#xA;        android:layout_gravity=&#34;center_horizontal&#34;&#xA;        android:gravity=&#34;center_horizontal&#34;&#xA;        android:layout_marginTop=&#34;25dp&#34;&#xA;        android:textSize=&#34;20sp&#34;/&gt;&#xA;&#xA;&lt;/LinearLayout&gt;قدم دوم:نوشتن کد Javaاکنون می توانیم کد جاوا را در Main Activity تایپ کنیم.کد جاوا اپلیکیشن ما به صورت زیر خواهد بود:package com.ssaurel.bmicalculator;&#xA;&#xA;import android.os.Bundle;&#xA;import android.support.v7.app.AppCompatActivity;&#xA;import android.view.View;&#xA;import android.widget.EditText;&#xA;import android.widget.TextView;&#xA;&#xA;public class MainActivity extends AppCompatActivity {&#xA;&#xA;    private EditText height;&#xA;    private EditText weight;&#xA;    private TextView result;&#xA;&#xA;    @Override&#xA;    protected void onCreate(Bundle savedInstanceState) {&#xA;        super.onCreate(savedInstanceState);&#xA;        setContentView(R.layout.activity_main);&#xA;        height = (EditText) findViewById(R.id.height);&#xA;        weight = (EditText) findViewById(R.id.weight);&#xA;        result = (TextView) findViewById(R.id.result);&#xA;    }&#xA;&#xA;    public void calculateBMI(View v) {&#xA;        String heightStr = height.getText().toString();&#xA;        String weightStr = weight.getText().toString();&#xA;&#xA;        if (heightStr != null &amp;&amp; !&#34;&#34;.equals(heightStr)&#xA;                &amp;&amp; weightStr != null  &amp;&amp;  !&#34;&#34;.equals(weightStr)) {&#xA;            float heightValue = Float.parseFloat(heightStr) / 100;&#xA;            float weightValue = Float.parseFloat(weightStr);&#xA;&#xA;            float bmi = weightValue / (heightValue * heightValue);&#xA;&#xA;            displayBMI(bmi);&#xA;        }&#xA;    }&#xA;&#xA;    private void displayBMI(float bmi) {&#xA;        String bmiLabel = &#34;&#34;&#xA;&#xA;        if (Float.compare(bmi, 15f) &lt;= 0) {&#xA;            bmiLabel = getString(R.string.very_severely_underweight);&#xA;        } else if (Float.compare(bmi, 15f) &gt; 0  &amp;&amp;  Float.compare(bmi, 16f) &lt;= 0) {&#xA;            bmiLabel = getString(R.string.severely_underweight);&#xA;        } else if (Float.compare(bmi, 16f) &gt; 0  &amp;&amp;  Float.compare(bmi, 18.5f) &lt;= 0) {&#xA;            bmiLabel = getString(R.string.underweight);&#xA;        } else if (Float.compare(bmi, 18.5f) &gt; 0  &amp;&amp;  Float.compare(bmi, 25f) &lt;= 0) {&#xA;            bmiLabel = getString(R.string.normal);&#xA;        } else if (Float.compare(bmi, 25f) &gt; 0  &amp;&amp;  Float.compare(bmi, 30f) &lt;= 0) {&#xA;            bmiLabel = getString(R.string.overweight);&#xA;        } else if (Float.compare(bmi, 30f) &gt; 0  &amp;&amp;  Float.compare(bmi, 35f) &lt;= 0) {&#xA;            bmiLabel = getString(R.string.obese_class_i);&#xA;        } else if (Float.compare(bmi, 35f) &gt; 0  &amp;&amp;  Float.compare(bmi, 40f) &lt;= 0) {&#xA;            bmiLabel = getString(R.string.obese_class_ii);&#xA;        } else {&#xA;            bmiLabel = getString(R.string.obese_class_iii);&#xA;        }&#xA;&#xA;        bmiLabel = bmi + &#34;\n\n&#34; + bmiLabel;&#xA;        result.setText(bmiLabel);&#xA;    }&#xA;}ما مقادیر وارد شده توسط کاربر را برای وزن و قد دریافت می کنیم. قد به سانتی متر وارد می شود. برای فرمول باید قد را به متر داشته باشیم. بنابراین ، مقدار وارد شده را به 100 تقسیم می کنیم. سپس اعداد را برای محاسبه BMI اعمال می کنیم:float bmi = weightValue / (heightValue * heightValue);برای تشخیص نتایج از جدول زیر استفاده میکنیم:بعد از آن فقط مقدار BMI همراه با نتیجه در TextView نمایش داده خواهد شد:Writer : MD_CODERمنبع: سایت محمد دادخواه</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Sat, 21 Dec 2019 21:35:52 +0330</pubDate></item><item><title>چند مورد از بهترین کتابخانه های اندروید</title><link>https://virgool.ir/open-source/library-android-leypzblkqtfg</link><description>چگونه کتابخانه را به اندروید استودیو اضافه کنیم؟کتابخانه های خوب و متن باز میتوانند برنامه نویسی را برای شما بسیار آسان تر و سریعتر کنند. لایبرری های معروف هم معمولا به خوبی تست شده اند و استفاده از آنها راحت است. در بسیاری از موارد شما میتوانید این کتابخانه ها را با استفاده از Maven به پروژه اندروید استودیو خودتان اضافه کنید. برای اضافه کردن آنها میتوانید از روش زیر بهره بگیرید: (این کد ها باید در فایل build.gradle سطح اپ، درون dependencies نوشته بشوند).dependencies {&#xA;    compile &#39;com.google.code.gson:gson:2.2.4&#39;&#xA;    compile &#39;com.squareup.okhttp:okhttp:1.3.0&#39;&#xA;    compile &#39;com.squareup.retrofit:retrofit:1.3.0&#39;&#xA;    compile &#39;de.greenrobot:eventbus:2.2.+&#39;&#xA;    compile &#39;com.nostra13.universalimageloader:universal-image-loader:1.9.1&#39;&#xA;    }کتابخانه Retrofitکتابخانه Retrofit یکی از کلاینت های ایمن HTTP است که به شما اجازه میدهد REST API خودتان را به عنوان یک اینترفیس تعریف کنید. شما میتوانید با استفاده از این کتابخانه بدنه درخواست ها (Query ها)، هدر ها، پارامتر های کوئری و بسیاری کارهای بیشتر را انجام بدهید. همه این کار ها با استفاده از Annotation ها انجام میشوند که باعث میشود همه چیز ساده و تر و تمیز باقی بماند. همچنین Retrofit به شما اجازه میدهد که بتوانید فراخوانی های API را بصورت همزمان و غیر همزمان (سنکرون و آسنکرون) اجرا کنید.interface ApiService {&#xA;    @GET(&#34;movie/{id}&#34;)&#xA;    fun getMovieDetails(@Path(&#34;id&#34;) id: String) : Call&amp;amp;lt;MovieDetails&amp;amp;gt;&#xA;    }به عنوان نکته آخر، باید بگوییم Retrofit یک ماژول RX جداگانه را برای شما مهیا میکند. یعنی اگر دارید از RX استفاده میکنید، این ماژول درخواست های API شما را به عنوان یک Observable برمیگرداند. بنابراین میتوانید آن را به بقیه اپلیکیشن خودتان متصل کنید. این یکی از هزاران دلیلی است که Retrofit یکی از بهریت کتابخانه های اندروید است و ما آن را دوست داریم و هنوز هم از آن استفاده میکنیم.کتابخانه Moshiکتابخانه Moshi یکی از بهترین کتابخانه های اندروید است. این لایبرری میتواند JSON را به مدل های جاوا و کاتلین تبدیل کند. بسیاری از مردم به این کتابخانه GSON 3.0 هم میگویند. این لایبرری در بسیاری از قسمت ها به GSON برتری دارد. اول: سریعتر است، از کاتلین پشتیبانی میکند، برای توسعه پایدار تر است، Exeption های قابل پیش بینی ایجاد میکند و از آداپتور شکست خورده DateTime بصورت پیشفرض استفاده نمیکند. علاوه بر همه اینها، تبدیل JSON به جاوا (و برعکس آن) با Moshi بسیار ساده است.val moshi = Moshi.Builder().build()&#xA;val jsonAdapter = moshi.adapter(Model::class.java)&#xA;&#xA;&#xA;/* JSON to Model */&#xA;val model = jsonAdapter.fromJson(json)&#xA;&#xA;&#xA;/* Model to JSON */&#xA;val json = jsonAdapter.toJson(model)همچنین ما Moshi را به خاطر پشتیبانی آن از JSON API دوست داریم. MOSHI JSON API زندگی را برای ما آسان تر میکند. زیرا میتواند پاسخ های JSON API را به آبجکت های مفهوم دار جاوا تبدیل کد. Retrofit میتواند از Moshi پشتیبانی کند و همه اینها بایکدیگر کار میکنند.کتابخانه Chuckکتابخانه Chuck یک بازرس HTTP برای اندروید است که به شما اجازه میدهد تاریخچه HTTP اپلیکیشن خودتان را روی موبایلتان ببینید. Log مخصوص به HTTP برای شما به عنوان یک ناتیفیکیشن نمایش داده خواهد شد و اگر بخواهید آن را بصورت کامل در رابط کاربری Chuck ببینید میتوانید آن را از قسمت اعلان ها لمس کنید. اگر از Chuck استفاده کنید تیم کنترل کیفیت شما خیلی تشکر خواهد کرد. زیرا از این طریق میتوانند بفهمند که آیا یک مشکل سمت اندروید است یا قسمت Backend آن؟ این لایبرری که یکی از بهترین کتابخانه های اندروید است، گاهی خیلی بیشتر از logcat میتواند کاربردی باشد. زیرا حتی اگر اپلیکیشن شما هم متوقف شده باشد، باز هم تاریخچه HTTP باقی خواهد ماند. در حالیکه logcat گاهی بعد از ریستارت شدن اپلیکیشن محتویات خودش را پاک میکند.dependencies {&#xA;   debugCompile &#39;com.readystatesoftware.chuck:library:1.1.0&#39;&#xA;   releaseCompile &#39;com.readystatesoftware.chuck:library-no-op:1.1.0&#39;&#xA; }کتابخانه Universal Image Loaderکتابخانه UIL یکی از بهترین کتابخانه های اندروید است که با استفاده از آن میتوانید لود کردن و cache کردن عکس ها به صورت غیر همزمان (آسنکرون) استفاده میشود. استفاده کردن از آن هم تقریبا ساده است:imageLoader.displayImage(imageUri, imageView);البته Picasso از API بهتری برخوردار است، ما در شخصی سازی کمی لنگ میزند. با استفاده از گزینه های ساخت و پیکربندی UIL تقریبا میتوانید هرکاری انجام بدهید. (این مورد درباره استفاده از تصاویر بزرگ به کار می آید، چیزی که Picasso نمیتواند آن را انجام بدهد).کتابخانه Glideهمانطوری که شاید تا الان متوجه شده باشید، API مربوط به لود کردن و مدیریت عکس ها در اندروید افتضاح است. اینکه بتوانید یک عکس را تغییر سایز بدهید و خطای OutOfMemoryException را نبینید، بیشتر شبیه یک رویا میماند. Glide یکی از بهترین کتابخانه های اندروید است که مخصوص کار با تصاویر میباشد. همچنین یک API خیلی خوب دارد و میتوانید با استفاده از آن هرکاری که میخواهید با تصاویر انجام بدهید.GlideApp.with(context)&#xA;  .load(url)&#xA;  .centerCrop()&#xA;  .placeholder(R.drawable.ic_placeholder)&#xA;  .into(imageView)این کتابخانه به شما اجازه میدهد یک تصویر را به سادگی درون ImageView لود کنید، تصویر پس زمینه انتخاب کنید، عکس ها رو cache کنید و تغییر اندازه بدید و خیلی کارهای دیگه انجام بدین. اگر هنوز نمیدانید که چقدر به این لایبرری نیاز دارید، فقط کافی است سعی کنید همه این کارها را بدون Glide انجام بدهید. آن موقع متوجه میشوید چرا این مورد در بین بهترین کتابخانه های اندروید قرار گرفته است. حتی Glide از تغییر شکل های رایج مانند تصاویر دایره ای هم پشتیبانی میکند.کتابخانه ThreeTenکتابخانه ThreeTen یکی از بهترین کتابخانه های اندروید برای مدیریت تاریخ و زمان است. این کتابخانه به نوعی مدل پیشرفته تر و بهبود یافته تر از JSR-310 میباشد که در Java 8 به عنوان به صورت استاندارد به عنوان پکیج java.time.* وجود داشت. ما این لایبرری را دوست داریم به خاطر اینکه کار کردن با Android Calendar API مثل یک کابوس میماند./* Current DateTime */&#xA;LocalDateTime.now()&#xA;&#xA;/* String to DateTime */&#xA;&#xA;val localDateTimeString = &#34;2011-12-03T10:15:30&#34;&#xA;&#xA;val localDateTime = LocalDateTime.parse(localDateTimeString)کتابخانه ThreeTen از لحاظ تعداد متد ها و حجم بسیار کوچکتر از JodaTime میباشد. API آن هم بسیار خلاصه تر از JodaTime است. اگر الان دارید از JodaTime استفاده میکنید، شاید ارزش نداشته باشد که بخواهید ThreeTen را جایگزین آن نمایید. اما اگر میخواهید یک پروژه جدید را شروع کنید، شدیدا به شما پیشنهاد میکنم از ThreeTen استفاده بکنید.Writer : MD_CODERمنبع: سایت محمد دادخواه</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Tue, 17 Dec 2019 22:53:04 +0330</pubDate></item><item><title>معرفی ویژگی های زبان کاتلین برای تازه کار ها</title><link>https://virgool.ir/open-source/kotlin-tb1pgty4yjlb</link><description>زبان کاتلینبرنامه نویسی کاتلین چیست؟اگر علاقه مند به ساخت اپلیکیشن اندروید هستید زبان kotlin میتواند انتخاب مناسبی برای شما باشد.این زبان به یکی از رقبای زبان &#34;Java&#34; تبدیل شده است.در زمان گذشته زبان Java تنها زبان برنامه نویسی برای ایجاد برنامه های اندرویدی بود و باعث محبوبیت آن شد.در سال 2017 گوگل اعلام کرد که از زبان kotlin برای توسعه ی برنامه های اندرویدی پشتیبانی میکند. این برای بسیاری از افرادی که به زبان جاوا علاقه ای نداشتند مناسب بود.کاتلین یک زبان برنامه نویسی statically typed است و این بدان معنی است که نوع متغیر های خود را در زمان کامپایل مشخص میکند. این زبان بر روی ماشین مجازی جاوا اجرا می شود و همچنین می تواند به شکل سورس کد جاوا اسکریپت کامپایل شود و یا از زیرساخت کامپایلر LLVM استفاده کند. توسعه اولیه این زبان توسط یک تیم برنامه نویسی به نام JetBrains در سنت پترزبورگ، روسیه انجام شده است.چرا این زبان ایجاد شد؟زبان Java یک زبان فوق العاده است ولی بدین منظور نیست که ضعف و ایرادی ندارد.زبان kotlin دارای ویژگی های فوق العاده ایست.این زبان برای اولین بار در سال 2011 به معرفی شد (توسط JetBrains). این زبان، و ویژگی ها آن نظر بسیاری را به خود جلب کرد.ویژگی های زبان برنامه نویسی کاتلینسورس باز بودن: این زبان یک زبان برنامه نویسی منبع باز است.همچنین دارای ابزاری به نام one-click است که به برنامه نویس این امکان را می دهد که کدهای جاوا را به سادگی به کاتلین تبدیل کند.قابلیت همکاری: قابلیت همکاری گسترده با جاوا بسیاری از توسعه دهندگان را جذب می کند و آنها را مجبور به یادگیری کاتلین می کند. زبان کاتلین بر روی ماشین مجازی جاوا که با عنوان JVM شناخته میشود اجرا می شود.توابع Extension: میتوان توابعی را بدون تغییر در سورس کد کلاس ها ، به آنها اضافه کنیم. این توابع در زبان های برنامه نویسی با عنوان توابع Extension شناخته میشوند.کد کمتر: کاتلین دارای ویژگی های هوشمندی نیز هست. برای مثال اگر چیزی در کد نویسی فراموش کنید، آن را به صورت خودکار تکمیل می کند. به طور خلاصه، شما باید درباره کد باقی مانده نگران نباشید.جذاب تر: با استفاده از کاتلین میتوان اپلیکیشن های اندرویدی جذاب تری نسبت به جاوا نوشت. در کاتلین، می توانید کد های واضح تر و موثرتری بنویسید که اشکالات کمتری دارند.اپلیکیشن هایی که با زبان کاتلین نوشته شده انداپلیکیشن Pinterest: این سرویس محبوب اشتراک گذاری تصویر و خدمات رسانه های اجتماعی اکنون از کاتلین به جای جاوا استفاده می کند. چیزی که ممکن است به نظر شما کمی شگفت انگیز به نظر برسد این است که &#34;Kotlin&#34; در چنین برنامه ی محبوبی با این همه کاربر، حتی قبل از اینکه گوگل اولین پشتیبانی از این زبان را اعلام کرد، مورد استفاده قرار گرفته است.اپلیکیشن Coursera: برخی از شما ممکن است در مورد این سرویس آنلاین چیز هایی بدانید. Coursera دوره های آنلاین برگزار شده توسط برخی از دانشگاه ها و موسسات مشهور مانند استنفورد و ییل را ارائه می دهد . این سرویس آنلاین نیز از زبان کاتلین استفاده میکند.اپلیکیشن Trello: این برنامه در حال حاضر متعلق به Atlassian است.Trello یک برنامه مدیریت شناخته شده پروژه است.  آنها برای برنامه اندروید خود در فروشگاه play store از کاتلین استفاده کرده اند. این یک نشانه خوب است؛ آنها همچنین کد جاوا خود را با kotlin جایگزین کردند.اپلیکیشن Basecamp3: برنامه تجاری معروف Basecamp3 کد نویسی خود را نیز با کاتلین انجام داده است . این برنامه به کسب و کارهای کوچک کمک می کند تا رشد کنند. این برنامه به طور کامل در کاتلین نوشته شده است و توسعه دهندگان آن ادعا می کنند که این تغییر باعث افزایش درآمد سازمان شان میشود.نمونه کد زبان کاتلینpackage hello&#xA;fun main() {&#xA; println(&#34;Hello World&#34;)&#xA; }Writer : MD_CODER</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Mon, 16 Dec 2019 22:12:20 +0330</pubDate></item><item><title>استفاده از Fast Android Networking</title><link>https://virgool.ir/open-source/fastandroidnetworking-hofrpnrsmwgq</link><description>Fast Android Networkingکتابخانه Fast Android Networking را میتوان در هر اپلیکیشن اندروید استفاده کرد.چگونگی استفاده از Fast Android Networking:کد زیر را در build.gradle اپلیکیشن خود اضافه کنید:implementation &#39;com.amitshekhar.android:android-networking:1.0.2&#39;فراموش نکنید که دسترسی اینترنت را فعال نمایید:&lt;uses-permission android:name=&#34;android.permission.INTERNET&#34; /&gt;سپس کد زیر را در ()onCreate اضافه نمایید:AndroidNetworking.initialize(getApplicationContext());استفاده از Fast Android Networking با Jackson Parser:implementation &#39;com.amitshekhar.android:jackson-android-networking:1.0.2&#39;// Then set the JacksonParserFactory like below&#xA;AndroidNetworking.setParserFactory(new JacksonParserFactory());ایجاد درخواست GET:AndroidNetworking.get(&#34;https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}&#34;)&#xA;                 .addPathParameter(&#34;pageNumber&#34;, &#34;0&#34;)&#xA;                 .addQueryParameter(&#34;limit&#34;, &#34;3&#34;)&#xA;                 .addHeaders(&#34;token&#34;, &#34;1234&#34;)&#xA;                 .setTag(&#34;test&#34;)&#xA;                 .setPriority(Priority.LOW)&#xA;                 .build()&#xA;                 .getAsJSONArray(new JSONArrayRequestListener() {&#xA;                    @Override&#xA;                    public void onResponse(JSONArray response) {&#xA;                      // do anything with response&#xA;                    }&#xA;                    @Override&#xA;                    public void (ANError error) {&#xA;                      // handle error&#xA;                    }&#xA;                });   ایجاد درخواست POST:AndroidNetworking.post(&#34;https://fierce-cove-29863.herokuapp.com/createAnUser&#34;)&#xA;                 .addBodyParameter(&#34;firstname&#34;, &#34;Amit&#34;)&#xA;                 .addBodyParameter(&#34;lastname&#34;, &#34;Shekhar&#34;)&#xA;                 .setTag(&#34;test&#34;)&#xA;                 .setPriority(Priority.MEDIUM)&#xA;                 .build()&#xA;                 .getAsJSONObject(new JSONObjectRequestListener() {&#xA;                    @Override&#xA;                    public void onResponse(JSONObject response) {&#xA;                      // do anything with response&#xA;                    }&#xA;                    @Override&#xA;                    public void (ANError error) {&#xA;                      // handle error&#xA;                    }&#xA;                });دانلود فایل از سرور:AndroidNetworking.download(url,dirPath,fileName)&#xA;                 .setTag(&#34;downloadTest&#34;)&#xA;                 .setPriority(Priority.MEDIUM)&#xA;                 .build()&#xA;                 .setDownloadProgressListener(new DownloadProgressListener() {&#xA;                    @Override&#xA;                    public void (long bytesDownloaded, long totalBytes) {&#xA;                      // do anything with progress  &#xA;                    }&#xA;                 })&#xA;                 .startDownload(new DownloadListener() {&#xA;                    @Override&#xA;                    public void onDownloadComplete() {&#xA;                      // do anything after completion&#xA;                    }&#xA;                    @Override&#xA;                    public void (ANError error) {&#xA;                      // handle error    &#xA;                    }&#xA;                });آپلود فایل در سرور:AndroidNetworking.upload(url)&#xA;                 .addMultipartFile(&#34;image&#34;,file)    &#xA;                 .addMultipartParameter(&#34;key&#34;,&#34;value&#34;)&#xA;                 .setTag(&#34;uploadTest&#34;)&#xA;                 .setPriority(Priority.HIGH)&#xA;                 .build()&#xA;                 .setUploadProgressListener(new UploadProgressListener() {&#xA;                    @Override&#xA;                    public void (long bytesUploaded, long totalBytes) {&#xA;                      // do anything with progress &#xA;                    }&#xA;                 })&#xA;                 .getAsJSONObject(new JSONObjectRequestListener() {&#xA;                    @Override&#xA;                    public void onResponse(JSONObject response) {&#xA;                      // do anything with response                &#xA;                    }&#xA;                    @Override&#xA;                    public void (ANError error) {&#xA;                      // handle error &#xA;                    }&#xA;                 });Writer : MD_CODER</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Fri, 06 Dec 2019 15:10:31 +0330</pubDate></item><item><title>لیست API های ایرانی</title><link>https://virgool.ir/open-source/apiiran-xexep7dfcw3r</link><description>لیست API های ایرانی چیست؟؟؟در این پست لیستی از بهترین و کاربردی ترین API های ایرانی را در اختیار شما قرار خواهیم داد.سرویس واژه یاب: برای جستوجو معانی کلمات (api)پارسا اسپیس: سرویس فایل هاستینگ (api)تلسا: سرویس های مبتنی بر صوت (api)شارژ: خدمات شارژ تلفن همراه (api)حافظ: لیست غزلیات همراه با امکان جستوجو وفال (api)آپارات: اطلاعات کانال ها و... (api)خدمات شهری تهران: اطلاعات شهری و... (api)بانک ملی: سداد (api)بانک سامان: سامان کیش (api)بانک مسکن: فن آوا کارت (api)Writer : MD_CODER</description><category>اُپن سورس</category><author>MD CODER</author><pubDate>Sat, 30 Nov 2019 15:26:41 +0330</pubDate></item></channel></rss>