روزنوشت

می نویسم؛ تا به یاد آورم روزی، بودم

روزنوشت

می نویسم؛ تا به یاد آورم روزی، بودم

روزنوشت

من آرزویی ندارم، من از چیزی نمی‌ترسم، من آزادم...

«کازانتزاکیس»

دنبال کنندگان ۳ نفر
این وبلاگ را دنبال کنید
آخرین نظرات

۸ مطلب با کلمه‌ی کلیدی «Android» ثبت شده است

روزهای تلخ اکلیپس و ADT Bundle رو همه به خاطر داریم...

نوشتن و اضافه کردن کتابخانه ها دردسر خودش رو داشت، Cleanهای مداوم رو همه به یاد داریم.

Emulator از اون زمان تا حالا خیلی بهتر شده و واقعن سریعتر شده

 

Android Studio یک IDE خیلی خوب هست و کیفیت کار رو برای برنامه نویس های اندروید بالاتر برده، Gradle هم یک Build System منعطف و قوی هست که امکانات جدیدی رو در اختیارمون گذاشته که خیلی به سریعتر شدن پروسه ی برنامه نویسی یا انتشار برنامه ها کمک می کنه.

 

با همه ی اینها نمیتونیم انکار کنیم که فرآیند Build اپ ها در دوران اکلیپس و ANT خیلی سریعتر بود. پیچیدگی های خود Gradle به یک طرف، استفاده از اینترنت و تحریم بودن ایران هم از طرف دیگه باعث شده پروسه ی Build خیلی کند بشه.

 

در این بین راه حل هایی وجود داره که میتونه به تسریع پروسه ی Build کمک کنه.

 

Gradle Offline Mode

درواقع Gradle برای انجام کارش نیاز به اینترنت داره، تا چک کنه که همه ی بسته هایی که برنامه نیاز داره رو اگر وجود نداشت دانلود کنه، یا بسته به پلاگین هایی که نصب کردیم (مثل fabric.io) اطلاعاتی رو ارسال کنه. اما چون وضعیت اینترنت ما تعریفی نیست، سایت bintray.com که مخازن jCenter اونجا هاست میشن ایران رو تحریم کرده، و اینکه همیشه نیاز نیست Gradle بروز بودن بسته ها رو چک کنه، تغییر Gradle به حالت Offline میتونه پروسه ی Build رو کمی سرعت ببخشه.

 

من تنها زمانی که میخوام کتابخانه ی جدیدی به پروژه اضاف کنم یا Build نهایی برای Release بگیرم، Gradle رو از حالت Offline بر میدارم.

 

 

تنظیمات gradle.properties

علاوه بر این می تونید خود Gradle رو به شکلی کانفیگ کنید که نتیجه ی اون افزایش سرعت Build باشه

 

 

همونطور که می بینید تو هر پروژه ی اندروید، اندروید استودیو دو فایل gradle.propertes رو بهتون نشون میده

  • Project Properties: تنظیماتی که مختص همون پروژه هستن و فقط روی اون پروژه اعمال میشن (این فایل توی هر پروژه وجود داره)
  • Global Properties: تنظیمات عمومی Gradle که روی همه ی پروژه ها تاثیر میزاره، این فایل تو پروژه ای که ایجاد می کنید وجود نداره و وقتی روش دابل کلیک کنید، فایلی رو خارج از محیط پروژه باز می کنه. این فایل در مسیر زیر وجود داره
    • لینوکس:
~/.gradle/gradle.properties
  • ویندوز
%userprofile%/.gradle/gradle.properties

 

اگه این فایل (Global Properties) تو این مسیر وجود نداشت (و مثل تصویر بالا تو اندروید استودیو نمایش داده نشد) ، باید ایجادش کنید.

 

 

نمونه تنظیماتی که من استفاده می کنم:

 

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048M
org.gradle.configureondemand=true
org.gradle.parallel=true

 

  • org.gradle.daemon=true: این خط به Gradle دستور میده که در حالت daemon اجرا بشه (daemon رو شاید معادل service در ویندوز بشه درنظر گرفت). اینکار باعث میشه که یه پروسه ی مجزا برای Gradle ایجاد بشه و با هربار Build نیاز نباشه دوباره این پروسه ایجاد بشه که خودش باعث میشه سرعت Build افزایش پیدا کنه. ضمن اینکه در تنظیمات بعدی میتونیم منابع مصرفی این پروسه رو افزایش بدیم تا باز هم سرعت Build افزایش پیدا کنه.
  • org.gradle.jvmargs=-Xmx2048M: در این خط میتونیم پارامترهای معتبر JVM رو وارد کنیم. تنظیماتی که اینجا انجام گرفته، به Gradle daemon به میزان ۲ گیگ رم اختصاص میده که باعث افزایش سرعت Build میشه. البته حواستون باشه که سیستمتون باید به اندازه ی کافی رم داشته باشه (به همین دلیل توصیه می کنم سیستمی که واسه اینکار استفاده می کنید حداقل ۸ گیگ رم داشته باشه)
  • org.gradle.configureondemand=true: این خط بیشتر برای پروژه هایی که از چندین ماژول تشکیل شدن معنی پیدا می کنه و درواقع تنها درصورتی هرکدوم از پروژه ها رو Configure می کنه که بهشون نیاز باشه. شاید برای پروژه های معمولی تاثیر مثبتی نداشته باشه.
  • org.gradle.parallel=true: این خط هم ظاهراً باعث میشه در پروژه هایی که از چند تشکیل شدن (چند ماژول)، عملیات کانفیگ این پروژه ها رو بصورت موازی انجام بده که سرعت Build رو افزایش میده. این حالت هم ظاهراً برای پروژه های چند بخشی تاثیر بیشتری داره.

 

استفاده از مجموعه ی این تنظیمات باعث شده من سرعت Build بیشتری داشته باشم. شاید برای شما هم مفید واقع بشه.

 

درصورتی که از این تنظیمات استفاده می کنید، ممنون میشم تاثیرش رو در سرعت Build روی سیستم خودتون (با ذکر مشخصات سیستم و سیستم عامل مورداستفاده) کامنت کنید.

  • Nevercom

من از PHPStorm 8 برای برنامه نویسی PHP و Android Studio برای اندروید استفاده می کنم.

 

ادیتورهای خانواده ی IntelliJ IDEA رو بسیار دوست دارم، در نسخه ی PHPStorm 8  قابلیت Multiple Selection معرفی شد.

اگر از Sublime Text استفاده کرده باشید، میدونید که یکی از محبوب ترین قابلیت هاش، قابلیت Multiple Selection هست که به شما اجازه میده چندین Caret (یا Cursor - نشانگر موس) در نقاط مختلف صفحه داشته باشید و درواقع چند نقطه رو همزمان ویرایش کنید.

 

در PHPStorm این قابلیت با نگه داشتن Alt و Mouse Left Click در نقاط مختلف فعال میشه. مشکل اینجاست که در Ubuntu ترکیب Alt+Button1 برای حرکت دادن پنجره تعریف شده و با ترکیب کلید IDEA تداخل ایجاد می کنه.

 

دو راه وجود داره، یا اینکه ترکیب رو در IDEA تغییر بدید و یا اینکه ترکیب مربوطه رو در Ubuntu غیرفعال کنید.

 

از اونجایی که پیدا کردن ترکیب مناسب برای جایگزین کردن در IDEA سخته (Ctrl, Shift و ترکیبی از اینها به همراه کلیک ماوس رجیستر شدن و قابلیت هاشون رو نیاز دارم)، تصمیم گرفتم در سیستم این ترکیب رو غیرفعال کنم، چون نیازی هم بهش ندارم.

 

مثل همیشه با جستجویی در Google و AskUbuntu به پاسخ سوال می رسیم.

 

در دو بخش ترکیب Alt با Mouse Button رجیستر شده

  1. در تنظیمات پلاگین Move Window مربوط به Compiz
  2. دیگری در کلید org.gnome.desktop.wm.preferences.mouse-button-modifier 

اول تنظیمات Compiz رو تغییر میدیم، برای اینکار باید Compiz Config Settings Manager رو نصب کنید (sudo apt-get install compizconfig-settings-manager)، پلاگین Move Window رو پیدا کنید و شورت‌کاتی که ترکیب ALT>Button1> رو داره رو غیرفعال کنید.

 

حالا برید تو PHPStorm چک کنید ترکیب کلید Alt+Button1 (درواقع Alt رو نگه دارید و جاهای مختلف ادیتور Left Click کنید) جواب میده یا نه.

 

اگر مثل من متوجه شدید هنوز مشکل پابرجاست، یه کار دیگه هست که میتونید بکنید

روش دوم اعمال تغییر در dconf-editor هست

 

 

dconf-editor رو اجرا کنید، Ctrl+F رو بزنید تا کادر جستجو باز بشه و عبارت mouse-button-modifier رو جستجو کنید.

کلید موردنظر که پیدا شد مقدارش رو از <ALT> به <Super> تغییر بدید.

 

 

الان باید ترکیب Alt+Click در PHPStorm فعال شده باشه.

 

 

منبع: http://askubuntu.com/q/151252/107348

  • Nevercom

مدتها پیش در پستی جداگانه Parse SDK رو برای راه اندازی Push Notification در اندروید معرفی کرده بودم، دوست داشتم که آموزشی رو برای این ابزار فوق العاده معرفی کنم که فرصتش نمیشد.

 

بارها دوستان چه از طریق ایمیل، وبلاگ و انجمن برنامه نویس درخواست کردن که آموزشی رو برای این ابزار تهیه کنم.

بالاخره فرصت شد و ویدئویی رو برای راه اندازی قابلیت Push Notification توسط Parse SDK برای Android تهیه کردم.

 

در این ویدئو مطالب زیر شرح داده شده:

  • ایجاد App در سایت Parse.com و دریافت API Key و Client Key
  • آماده سازی اولیه اپلیکیشن اندروید برای استفاده از این سرویس
    • دسترسی های موردنیاز
    • تعریف بخش های موردنیاز در Manifest.xml
    • ایجاد کلاس Application و معرفی اون به مانیفست
    • راه اندازی Parse در کلاس Application
  • شخصی سازی رفتار Parse هنگام دریافت Push توسط BroadcastReceiver شخصی
    • عدم نمایش Notification بهنگام در یافت Push
  • باز شدن آدرس URI خاص هنگام کلیک روی Notification (مثلاً باز شدن اپ شما در بازار)

 

این آموزش با نسخه ی 1.7.1 Parse SDK ساخته شده

 

همچنین در BroadcastReceiver اختصاصی (منظور کلاسی هست که از ParsePushBroadcastReceiver مشتق شده و برای شخصی سازی رفتار Parse استفاده میشه)، کدهایی درج شده که برای اصلاح باگ موجود در این نسخه از SDK هست که هنگام دریافت Push، در صورتی که uri تعریف نشده باشه، اپلیکیشن کرش می کنه (البته در ویدئو این کدها هنوز نوشته نشدن و دیده نمیشن)

 

لینک دانلود سورس کد و دانلود مستقیم ویدئو در انتهای پست موجود هست (برای نمایش با کیفیت اصلی فایل ویدئو رو دانلود کنید)

  • Nevercom

 

این مطلب رو چندماه پیش نوشته بودم، اما منتشرش نکردم، دلیلش این بود که قصد داشتم فقط ابزار رو معرفی نکرده باشم و همه ی قابلیت های این فریم وورک رو در قالب یک یا چند اپلیکیشن اندروید نمایش بدم، اما متاسفانه فرصتش پیش نیومد و تصمیم گرفتم همین مطلب رو منتشر کنم.

این اواخر در یکی از پروژه های اندروید نیاز به استفاده از قابلیت Push Notification داشتم، برای اندروید Google Cloud Messaging یا GCM موجود هست که بسیار هم قدرتمند هست، اما پیاده سازی اون (برای بار اول) کمی زمانبر هست و من فرصت کافی نداشتم.

دنبال یک فریم ورک خوب برای Push Notification بودم که با Parse SDK آشنا شدم.

من بنا به نیازم فقط از قابلیت Push Notification ش استفاده کردم اما قابلیت ها و توانایی های گسترده ی این SDK اون رو تبدیل به یک ابزار مناسب برای توسعه دهندگان نرم افزار می‌کنه. (و بخصوص توسعه دهندگان بدون پشتوانه ی مالی و دانش فنی برای اجاره و مدیریت سرور برای Backend نرم افزار)

 

  • Nevercom

بعضی وقتا نیاز هست که یک عملیاتی در اولین اجرای اکتیویتی (Activity) صورت بگیره، بعنوان مثال در شرایطی که قصد دارید برای اولین بار یک راهنما در اکتیویتی نشون بدید.

 

اولین روشی که به ذهنتون خواهد رسید استفاده از SharedPreferences هست. SharedPreferences روشی ساده و کم هزینه برای ذخیره ی تنظیمات برنامه هست.

 

این تکه کد کلیدی حاوی داده ای از جنس Boolean در SharedPreferences ذخیره می کنه، درصورتی که کلید وجود نداشته باشه مقدار true رو برمیگردونه و درصورت وجود، مقدار واقعی ذخیره شده در این کلید.

SharedPreferences settings = getSharedPreferences("MY_PREFERENCES", 0);
final boolean ret = settings.getBoolean("activity.firstVisit", true);

if (ret) {
    Editor editor = settings.edit();
    editor.putBoolean("activity.firstVisit", false);
    editor.commit();
    
    // FIRST TIME
    // YOUR CODES GOES HERE
}

 

اگر فقط در یک اکتیویتی نیاز به چک کردن این موضوع داشته باشید، همین روش استفاده شده مناسب هست و شلوغی زیادی هم نداره

اما اگر نیاز باشه در چندین اکتیویتی مختلف این موضوع بررسی بشه و بر اساس اون عملیاتی انجام بشه میشه کدها رو مرتب تر کرد و از شلوغی کدها جلوگیری کرد

  • Nevercom

شاید براتون پیش اومده باشه که نیاز باشه در یک کنفرانس یا ارائه ی مطلب، صفحه ی گوشی اندرویدی تون رو در صفحه ی دسکتاپ (و بواسطه ی اون، پروژکتور) نمایش بدید.

 

Droid@Screen ابزاری هست برای انجام این کار.

 

  • Nevercom

تو این یکی دو هفته، بعضی چیزا کنجکاوی من رو برانگیختن، یعنی دوست دارم بیشتر در موردشون بدونم یا تستشون کنم....

 

یکی از اونها پروژه ی Codename ONE هست، بک پروژه ی متن باز که ادعا میکنه با زبان برنامه نویسی جاوا (در محیط توسعه ی Eclipse یا NetBeans) می تونید برای پلتفرم های Android, iOS, Windows Mobile و Blackberry برنامه رو کامپایل کنید.

برنامه روی هر پلتفرم کاملاً Native هست، به این معنی که برخلاف پروژه هایی مثل Phonegap، برنامه روی هر پلتفرم، ظاهری کاملاً بومی داره و بخاطر اینکه کدها برای هر پلتفرم ترجمه و بعد کامپایل میشن، از پرفرمنس خیلی بالایی برخوردار هست (و عجیب تر اینکه ادعا کرده بود در برخی موارد برنامه های نوشته شده توسط Codename ONE در Benchmark نسبت به برنامه ای که توسط SDK رسمی توسعه پیدا کرده، امتیاز بیشتری کسب کرده !)

به هرحال پروژه ی جالبی به نظر میرسه که دوست دارم تستش کنم (با توجه به اینکه از Phonegap خوشم نمیاد و کلاً از ایده ی HTML برای همه ی پلتفرم ها خوشم نمیاد)

بعدی پروژه ای هست بنام Chocolatey.

Chocolatey به تعبیری کاربرد apt-get در لینوکس رو به ویندوز میاره، البته تفاوت هایی وجود داره.

فرض کنید نیاز دارید نرم افزار 7zip رو نصب کنید، بطور معمول باید برنامه رو جستجو کنید و دانلود کنید و مراحل نصب رو طی کنید، اینجاست که Chocolatey وارد عمل میشه، یعنی شما اسم پکیج (از بین پکیج های موجود در دیتابیسش) رو بهش میدید و تمام، خودش دانلود میکنه، نصب میکنه و اگر تنظیماتی نیاز داشته باشه انجام میده. کد زیر رو درنظر بگیرید، تمام کاری که باید بکنید اینه که در Command Prompt کد زیر رو بنویسید:

c:\> cinst 7zip 

بنظر جالب میاد و چون هنوز فرصت نشده تستش کنم، میره جزو تکنولوژی هایی که در موردشون کنجکاوم.

  • Nevercom

چند وقت پبش یه پروژه ای رو شروع کردم که بیشتر حکم تمرین رو داشت

این پروژه در واقع یک نرم افزار اندروید هست برای دانشجویان مهندسی نفت، یکی از بخش های این نرم افزار مربوط میشه به توضیحات دکل حفاری و کامپوننت های مرتبط با دکل

 

رفرنسی که برای شماتیک دلک داشتم، در ۲۵ ناحیه شماره گذاری شده بود و هدف این بود که با لمس شدن هرکدوم از اون محدوده ها اطلاعاتش نمایش داده بشه:

 

شماتیک دکل حفاری

  • Nevercom