<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Maryam Aliyari</title>
        <link>https://virgool.io/feed/@maryamaliyari20965</link>
        <description>یه برنامه نویس عادی ام که هر روز برای بهتر بودن، با خودم در رقابتم.</description>
        <language>fa</language>
        <pubDate>2026-06-08 02:30:32</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/24179/avatar/hgK7mn.png?height=120&amp;width=120</url>
            <title>Maryam Aliyari</title>
            <link>https://virgool.io/@maryamaliyari20965</link>
        </image>

                    <item>
                <title>نحوه بارگیری فایل های Svg از از سمت سرور در Android</title>
                <link>https://virgool.io/@maryamaliyari20965/%D9%86%D8%AD%D9%88%D9%87-%D8%A8%D8%A7%D8%B1%DA%AF%DB%8C%D8%B1%DB%8C-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-svg-%D8%A7%D8%B2-%D8%A7%D8%B2-%D8%B3%D9%85%D8%AA-%D8%B3%D8%B1%D9%88%D8%B1-%D8%AF%D8%B1-android-waukkjyrjuxr</link>
                <description> اگر شما برنامه نویس اندروید هستید، مطمئناً تفاوت دو فرمت png و svg رو در عکس ها می دونید وگرنه به شما توصیه میکنم قبل از خوندن این مقاله یه سری به گوگل بزنید و سرچ کنید شک نکنید به نتیجه خوبی می رسید D:شاید برای خیلی از شما پیش اومده که دوست داشتید لیستی داینامیک که هرآیتم اون شامل یک آیکن عکس بوده رو از سمت سرور دریافت کنید  اما نمی دونستید که چطور باید عکسهاتون که فرمت Svg دارند رو بصورت ریموت از سرور بگیرید و بعنوان آیکن ست کنید. در این مقاله سعی کردم راهکاری رو برای شما معرفی کنم که بتونه باری از دوشتون برداره و مجبور نباشید از این فرمت فقط بصورت هاردکد در کدهاتون استفاده کنید(که البته کار درستی هم نیست!!!) برای شروع شما باید فایل androidSvg.jar رو از این لینک دانلود کنید. https://bitbucket.org/paullebeau/androidsvg/downloads/androidsvg-1.2.1.jarدر مرحله بعد ، شما باید فایل .jar را درapp / libs / path اضافه کنید. اگر پوشه libs در پروژه شما وجود نداشت ، با کلیک راست بر روی پوشه app -&gt; new -&gt; Directory یک پوشه به نام libs بسازید . نکته مهم اینکه وقتی که فایل .jar را اضافه می کنید ، باید اون را به عنوان یک کتابخانه درج کنید. برای انجام این کار ، شما باید روی فایل .jar راست کلیک کرده و روی Add As Library کلیک کنید ...در مرحله بعد ، باید پروژتون رو sync کنید.بهتون تبریک میگم? ،شما AndroidSvg رو اضافه کردید!برای فعال کردن Glide برای بارگذاری .svg از وب ، باید سه کلاس زیر را به پروژه اضافه کنید:`/** * Convert the {@link SVG}&#039;s internal representation to an Android-compatible one ({@link Picture}). */
public class SvgDrawableTranscoder implements ResourceTranscoder&lt;SVG, PictureDrawable&gt; {
 @Nullable
 @Override 
public Resource&lt;PictureDrawable&gt; transcode( 
@NonNull Resource&lt;SVG&gt; toTranscode, @NonNull Options options) { 
SVG svg = toTranscode.get(); 
Picture picture = svg.renderToPicture(); PictureDrawable drawable = new PictureDrawable(picture); 
return new SimpleResource&lt;&gt;(drawable);  
}
}/** Decodes an SVG internal representation from an {@link InputStream}. */
public class SvgDecoder implements ResourceDecoder&lt;InputStream, SVG&gt; {
 @Override 
public boolean handles(@NonNull InputStream source, @NonNull Options options) { 
// TODO: Can we tell?
 return true; }
 public Resource&lt;SVG&gt; decode(
 @NonNull InputStream source, int width, int height, @NonNull Options options) 
throws IOException {
 try {
 SVG svg = SVG.getFromInputStream(source); 
return new SimpleResource&lt;&gt;(svg); 
} catch (SVGParseException ex) { 
throw new IOException(&amp;quotCannot load SVG from stream&amp;quot, ex); 
}
 }
}`/** * Listener which updates the {@link ImageView} to be software rendered, because {@link * com.caverock.androidsvg.SVG SVG}/{@link android.graphics.Picture Picture} can&#039;t render on a * hardware backed {@link android.graphics.Canvas Canvas}. */
public class SvgSoftwareLayerSetter implements RequestListener&lt;PictureDrawable&gt; { @Override
 public boolean Failed(
 GlideException e, Object model, Target&lt;PictureDrawable&gt; target, boolean isFirstResource) { ImageView view = ((ImageViewTarget&lt;?&gt;) target).getView(); view.setLayerType(ImageView.LAYER_TYPE_NONE, null);
 return false; }
 @Override 
public boolean onResourceReady( 
PictureDrawable resource, 
Object model,
 Target&lt;PictureDrawable&gt; target, 
DataSource dataSource, 
boolean isFirstResource) {
 ImageView view = ((ImageViewTarget&lt;?&gt;) target).getView(); view.setLayerType(ImageView.LAYER_TYPE_SOFTWARE, null);
 return false;
 }
}و جادو اینجاست:`GenericRequestBuilder&lt;Uri,InputStream,SVG,PictureDrawable&gt; 
          requestBuilder = Glide.with(context)
         .using(Glide.buildStreamModelLoader(Uri.class, context), InputStream.class) 
         .from(Uri.class)
         .as(SVG.class)
         .transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
         .sourceEncoder(new StreamEncoder())
         .cacheDecoder(new FileToStreamDecoder&lt;SVG&gt;(new SvgDecoder())) 
         .decoder(new SvgDecoder())
         .placeholder(R.drawable.svg_image_view_placeholder)
         .error(R.drawable.error_image)
         .listener(new SvgSoftwareLayerSetter&lt;Uri&gt;());

 Uri uri = Uri.parse(svgImageUrl); 
      requestBuilder
     .diskCacheStrategy(DiskCacheStrategy.SOURCE)
     .load(uri)
     .into(imageView);</description>
                <category>Maryam Aliyari</category>
                <author>Maryam Aliyari</author>
                <pubDate>Thu, 23 Apr 2020 01:19:36 +0430</pubDate>
            </item>
                    <item>
                <title>آیا کد شما بو میده؟!</title>
                <link>https://virgool.io/@maryamaliyari20965/%D8%A2%DB%8C%D8%A7-%DA%A9%D8%AF-%D8%B4%D9%85%D8%A7-%D8%A8%D9%88-%D9%85%DB%8C%D8%AF%D9%87-hlc6vwdtusya</link>
                <description>بو دادن کد یا Smells Code یک اصلاح استاندارد مهندسی نرم افزاره که اگه کد شما شامل یکسری ویژگی ها باشه ، اصطلاحاً میگن کد شما بو میده.پس برای اینکه ببینید آیا این ویژگی شامل کودتون میشه یا نه، و اینکه چه کاری باید انجام بدید که این اتفاق برای کدهاتون نیفته،  پیشنهاد میکنم مقاله زیر رو بادقت دنبال کنید:*نکته ی خیلی مهم:&quot;یک برنامه ممکنه کاملاً درست کار کنه و هیچ باگی نداشته باشه ولی شامل SmellsCode بشه&quot;.هر کدوم از این بو ها نشونه ی یکی از موارد کیفیت نرم افزاره که ما توی برناممون رعایتشون نکردیم.خیلی از این موارد ساده به نظر میرسن اما اگه این موارد ساده و پیش پا افتاده رو رعایت نکنید ممکنه در دراز مدت دچار مشکلات جدی در کارتون باشید. خب خیلی پر حرفی کردم بهتره بریم سر اصل مطلب و ببینیم این موارد چیا هستن.بهتون بگم که تعداد این موارد زیاده اما اصلی ترین و رایج ترین اونها که ممکنه تو کد شما اتفاق بیفته شامل موارد زیر میشه:Long Methods (متدهای طولانی)بطور میانگین تعداد خط کدهای شما در هر متد باید بین ۱۰ تا ۱۲ باشه اما اگر بیشتر از این باشه احتمال اینکه این متد بیشتراز یک کار رو انجام میده ، هست.(اصل مهم در مهندسی نرم افزار میگه هر متد از کد شما فقط و فقط باید یک کار انجام بده.) برای رفع این مشکل شما باید این متد رو به متدهای کوچکتر تقسیم کنید و مطمئن شید که هر کدوم فقط یک کار رو انجام بدن.2. Long Parameter List(تعداد پارامترهای ورودی یک متد از حدی بیشتر باشه مثلا ۸ به بالا)این مشکل باعث پیچیدگی در متد میشه و زمانی که نیاز به دیباگ کردن و تریس برنامه تون دارید ممکنه با مشکل مواجه شید و همچنین این مورد میتونه نشان دهنده این باشه که متد شما بیشتر از یک کار داره انجام میده. اما اگر شما مطمئن هستید که این متد فقط یک کار انجام میده و حتماً نیاز به این تعداد بالا پارامتر ورودی دارید، می تونید یک آبجکت از اون پارامتر ها بسازید و اون آبجکت رو به ورودی متدتون پاس بدید.3. Duplicate Code(کدهای تکراری)اگه یک تکه از کدتون رو بارها(بیشتر از یکبار) در قسمت های مختلف برنامه استفاده کردید ، کدتون شامل این مورد میشه.(اصل مهندسی نرم افزار میگه Don&#x27;t repeat yourself). ینی نباید کار تکراری و کد تکراری در برنامتون داشته باشید! برای حل این مشکل باید قسمتی از کدتون که تکرار میشه رو داخل یک متد قرار بدید و هرجایی که نیاز به اون داشتید فقط اون متد رو صدا کنید.4. Dead Code(کد مرده)دقیقاً همون تیکه کدهایی از برنامتون که قبلا استفاده میکردید و الان نیازش ندارید و کامنتشون کردید. شک نکنید که باید حتماً این کد رو پاک کنید حتی اگه در آینده این کد لازمتون بشه. چون برای اینکار راهکار استفاده از سورس کنترل یا همون Git رو دارید.پس اگه تا حالا از git استفاده نمیکردید، پیشنهاد میکنم برای اینکه تبدیل به یک برنامه نویس ماهر شید، ازش استفاده کنید.وجود کدهای مرده در دراز مدت باعث ایجاد سوء تفاهم برای خودتون یا برای برنامه نویس دیگه میشه که داره کدتون رو میخونه و فکر میکنه که این کد باید کار خاصی انجام بده، بنابراین از کامنت  خارجش کنه و برنامه دچار مشکل شه.در کل وجود این نوع کدهای کامنت شده در برنامه گیج کننده ست!5. Uncommunicative Name(نامگذاری نامناسب)سعی کنید باتوجه به کارایی کلاس، متد و متغیرهاتون  اونها رو نامگذاری کنید تا اگه در آینده خودتون یا برنامه نویس دیگه کداتون رو خوند، با دیدن این نام ها متوجه کارایی اون کلاس یا متد و یا متغیر بشه.اگه دوست دارید با بقیه موارد Smells Code آشنا شید می تونین این وبلاگ رو که توسط  Jeff Atwood نوشته شده مطالعه کنید.https://blog.codinghorror.com/code-smells/امیدوارم از این به بعد کدهاتون بو نده D:</description>
                <category>Maryam Aliyari</category>
                <author>Maryam Aliyari</author>
                <pubDate>Fri, 17 Apr 2020 20:50:48 +0430</pubDate>
            </item>
                    <item>
                <title>باز و بسته کردن اکتیویتی با انیمیشن</title>
                <link>https://virgool.io/web-how/%D8%A8%D8%A7%D8%B2-%D9%88-%D8%A8%D8%B3%D8%AA%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%DA%A9%D8%AA%DB%8C%D9%88%DB%8C%D8%AA%DB%8C-%D8%A8%D8%A7-%D8%A7%D9%86%DB%8C%D9%85%DB%8C%D8%B4%D9%86-iqchwigsjzc0</link>
                <description> سلام دوستان این اولین مقاله ی من در ویرگول هست ،پس  عذر بنده رو برای جمله بندی ها و یا غلط املایی ها قبول کنید چون تا جایی که یاد دارم درس املا و انشا پایین ترین نمره ها رو میگرفتم.?امیدوارم براتون کارآمد باشه همون طور که برای من بود.در این مقاله قصد دارم به ایجاد انیمیشن برای حالت های باز و بسته شدن اکتیویتی در اندروید بپردازم. از اندروید ۵ به بعد زمانی که یک برنامه اجرا می شه با یک انیمیشن پیشفرض که در گوشی تعریف شده، برنامه اجرا می شه اما شما می تونید این روند از پیش تعریف شده رو به حالت دلخواه خودتون تغییر داده و تعریف کنید.  پس اگر کنجکاوید که چطور؟ می تونید از این آموزش استفاده کنید :من میخوام اکتیویتی های برنامم از سمت راست به چپ باز شن و هنگام بسته شدن بلعکس، از سمت چپ به راست بسته شن(بصورت کشویی). پس نیاز به ۴ انیمیشن دارم. یادتون باشه که شما باید یک پوشه به نام anim درست کنید و انیمیشن های خودتون را در آن قرار بدید .در قدم بعدی شروع میکنیم به ساختن ۴تا فایل انیمیشن.اولی به نام from_left_in.xml و با سورس کد :`&lt;set xmlns:android=&amp;quothttp://schemas.android.com/apk/res/android&amp;quot&gt;
&lt;translate android:fromXDelta=&amp;quot-100%p&amp;quot
 android:toXDelta=&amp;quot0&amp;quot
android:duration=&amp;quot300&amp;quot/&gt;
&lt;alpha android:fromAlpha=&amp;quot0.0&amp;quot android:toAlpha=&amp;quot1.0&amp;quot android:duration=&amp;quot300&amp;quot /&gt;
&lt;/set&gt;دومی به نام from_left_out.xml با سورس کد:`&lt;set xmlns:android=&amp;quothttp://schemas.android.com/apk/res/android&amp;quot&gt;
  &lt;translate android:fromXDelta=&amp;quot0&amp;quot
android:toXDelta=&amp;quot-100%p&amp;quot
 android:duration=&amp;quot300&amp;quot/&gt;
&lt;alpha android:fromAlpha=&amp;quot1.0&amp;quot android:toAlpha=&amp;quot0.0&amp;quot android:duration=&amp;quot300&amp;quot /&gt;
&lt;/set&gt;سومی با نام from_right_in.xml و با سورس کد:`&lt;set xmlns:android=&amp;quothttp://schemas.android.com/apk/res/android&amp;quot&gt;
 &lt;translate android:fromXDelta=&amp;quot100%p&amp;quot
 android:toXDelta=&amp;quot0&amp;quot      
  android:interpolator=&amp;quot@android:interpolator/accelerate_decelerate&amp;quot
android:duration=&amp;quot300&amp;quot/&gt;
&lt;alpha android:fromAlpha=&amp;quot0.0&amp;quot android:toAlpha=&amp;quot1.0&amp;quot android:duration=&amp;quot300&amp;quot /&gt;
&lt;/set&gt;و در آخر چهارمین انیمیشن به نام from_right_out.xml و با سورس کد:`&lt;set xmlns:android=&amp;quothttp://schemas.android.com/apk/res/android&amp;quot&gt;
  &lt;translate android:fromXDelta=&amp;quot0&amp;quot
 android:toXDelta=&amp;quot100%p&amp;quot
  android:duration=&amp;quot300&amp;quot/&gt;
 &lt;alpha android:fromAlpha=&amp;quot1.0&amp;quot android:toAlpha=&amp;quot0.0&amp;quot android:duration=&amp;quot300&amp;quot /&gt;
&lt;/set&gt;خب بیشترین قسمت کار ما تموم شد اما اصلی ترین قسمت هنوز مونده D:برای اینکه به اکتیویتی بگیم حالا که داری startActivity میشی ، مدلی که من میخوام بازشو باید دستور زیر رو بعد از متد startActivity(intent); بنویسیم:`overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out);و بلعکس، برای اینکه به اکتیویتی بگیم حالا که داری finish یا onBackPressed میشی باید مدلی که من بهت میگم بسته شی ، دستور زیر رو بعد از متد finish(); و هم درون متد onBackPressed مینویسیم:`overridePendingTransition(R.anim.from_left_in, R.anim.from_right_out);امیدوارم که اجرا کنید و لذتشو ببرید مثل خود من D:پی نوشت: اونقدرا هم که فکر میکردم جمله بندی هام بد نشد?</description>
                <category>Maryam Aliyari</category>
                <author>Maryam Aliyari</author>
                <pubDate>Sat, 11 Apr 2020 02:36:50 +0430</pubDate>
            </item>
            </channel>
</rss>