تجربیات یک برنامه‌نویس اندروید
15 subscribers
14 photos
6 links
🥏 یه تازه کاری یا حرفه‌ای؟
🌟 تو این کانال به تجربیات و آزمون-خطای یک برنامه نویس اندروید دسترسی داری😉
⭐️ راه حل هر باگ و مشکلی که ممکنه بر بخوری، اینجاست. از مسائل طراحی گرفته تا کدها🙂
🌠 من اینجام که هر مشکلی داشتی حل کنم👇
@NimaM_PA
Download Telegram
پشت هر مسئله‌ای که نهایتاً حل شده، اینترنت خوب و بدون مشکله [البته فقط تو ایران🫠]

پس قبل از اینکه بخواید یه اروری رو حل کنید، حتماً به SDK Manager اندروید استودیو سر بزنید و مطمئن بشید که همه‌ی پک‌هایی که دانلود کردید یا نکردید رو نشون بده(بعداً بیشتر در موردش توضیح میدم)

پس هر مشکلی که داشتید، اول اینترنت رو چک میکنید که از تحریم گذر کردین یا نه؟😊

بعد از این رو به من بسپرید که حلش کنم😉

محض اطلاع، اینم آیدیمه:
@NimaM_PA
🔐 تحریم گذر‌های خوب که مناسب برنامه‌نویسی‌موبایل هستند:

توی کشوری که از هر طرفی تحریم شده، استفاده از تحریم‌گذرها برای ما برنامه‌نویس‌های موبایل، بخصوص اندروید اجباریه🥲

1. شکن:
آدرس-> https://shecan.ir
        در نوع DNS بهترین گزینه‌ای که خیلی
وقته دست ما برنامه‌نویس هارو گرفته
قطعاً همین شکن عزیزه

2. 403 آنلاین:
آدرس-> https://403.online
یک خدمت دولتی از نوع DNS که عملکرد
خوبی از خودش نشون داده

هر دو تاشون اپلیکیشن ویندوز دارن. حتی 403آنلاین اپلیکیشن موبایل هم داره که خودش DNS رو ست میکنه


3. پروکسی fodev:
آدرس-> fodev.org
برخلاف قبلی‌ها این یکی DNS نیست.
باید این مورد رو با پورت 8118 توی
اندروید استودیو خودتون تنظیم کنید

آموزش هاشون رو به ترتیب میزارم


به امید روزی که بدون تحریم وارد دنیای دیجیتال بشیم🙂

🆔 @AndroidDev_Tips
🖐 حرف اول و آخر ساخت برنامه‌ی موفق...

🖥 یکی از چیزهایی که در ساخت یک برنامه حرف اول رو میزنه، داشتن تخصص خیلی بالا نیست!
📲 هیچ یک از برنامه‌هایی که امروزه خیلی حرفه‌ای کار میکنن و فوق موفق هستن، روز اول انتشار، این شکلی نبودن و رفته رفته بهتر شدن. اصلاً بعضی هاشون هدف‌شون چیز دیگه‌ای بود و تغییر مسیر دادن😳

مهم‌ترین مورد و الزامی‌ترین مورد، قطعاً ...
صبر و تلاش هست
با این مورده که صاحب برنامه‌ای موفق میشید

💡 شروع به ساخت هر ایده‌ای سخته و حتی میتونم بگم که کافی نیست و نیاز به صبر، همراه با تلاش داره که مشکلات رو شناسایی کنید و با بهترین راه‌حل، اون رو به بهترین شکل ممکن پیش ببرید

🔋 پس رفیق من لطفاً پس نکش . . . 💪
🆔 @AndroidDev_Tips
🧬 تکامل در برنامه نویسی...

👨‍💻 برنامه‌نویس فول‌استک کسیه که دقیقاً به این تکامل رسیده؛ ولی . . .
🌗 نمیتوان گفت که تکامل کامل در برنامه‌نویسی وجود دارد!

🪻 علم برنامه‌نویسی حد و انتها نداره که بگید بعد x سال به آخرش میرسم🙃
هر لحظه داریم شاهد دنیای گسترده‌تری از کدها میشیم👾

پس برنامه‌نویس فول‌استک که میگن چیه؟🤔
💻 برنامه‌نویس فول استک کسیه که میتونه برای اندروید، ios، وب، ویندوز و مک برنامه بنویسه
چندین زبان برنامه‌نویسی بلده و با این‌ها برای هر سیستم عامل میتونه برنامه‌ی متوسطِ رو به بالایی بسازه📲

قطعاً یه برنامه‌نویس فول‌استک نمیتونه توی حوضه‌ی خاصی مثل اندروید، در حد یک متخصص اندروید، در مورد سیستم‌عامل اندروید اطلاعات و تخصص داشته باشه😊

بخوای توی همه‌ی حوضه‌ها مهارت داشته باشی، نمیتونی درصد بالایی از هر کدومشون رو مسلط بشی😏

🆔 @AndroidDev_Tips
💰 بیاید فرهنگ سازی کنیم...

👾 درسته گرفتن هزینه‌ی کمتر در اوایل کار عادی هست ولی خب حدی داره 🤧

بازار رو خراب نکن دوست عزیز😁

🤖 اول اینکه وقتی تازه کاری قطعاً باید قیمت کمتری واسه پروژه بگی
استخدام بشی هم حقوق کمتری می‌گیری🙄

🤗 وقتی تونستی کارفرما رو متقاعد کنی
که برای کیفیت بیشتر، هزینه‌ی بیشتری
بده، پس رزومه‌ت در حدی هست که بتونه
هزینه‌ی بیشتری بگیره، پس بگیر دیگه😏


💵 کیه که پول بیشتر نخواد😊
مگه نه؟😉

🆔 @AndroidDev_Tips
👍3
💻 خودت رو به سیستم قوی محدود نکن!!

درسته اندروید استودیو اپ سنگینی هست
ولی نه در اون حد که بابت نداشتن سیستم
خیلی خفن بهونه بیاری

شده که من با رم 4 و سی‌پی‌یو زپرتی(حتی core i3 هم نبود) و مادربرد DDR4 خیلی قدیمی psGroup، اندروید استودیو رو نصب کنم و باهاش بدون مشکل کار کنم😁


فقط اگه سیستمت ضعیفه از شبیه‌ساز خود اندروید استودیو استفاده نکن و حتما از تکنیک‌های افزایش سرعت اندروید استودیو استفاده کن
[اگرم بلد نیستی، مشکلی نداره،
در آینده بهت میگم]

📲 همون کاری که توی شبیه‌ساز میتونی انجام بدی، با گوشی خودت هم قابل انجامه...
حتی اگه ورژن اندرویدت بالای 11 باشه، بدون کابل هم میتونی ران بگیری😉

اگه نیازه ران کردن برنامه توی گوشی رو بهتون یاد بدم، توی پیوی بگین...
PV- @NimaM_PA

🆔 @AndroidDev_Tips
🏣 فرق زبان‌های برنامه‌نویسی...

اگه زبانی که الان داری یاد میگیری، سخت بنظر میاد، قول میدم آخرین زبانی باشه که برات سخت بنظر بیاد😉

🤖 خیلی سخت پیش میاد که زبان‌های برنامه‌نویسی باهم تفاوت خیلی عمیق و
زیادی داشته باشن! [بخصوص بک‌اند]


حلقه همونه، شرط همونه، کلاس همونه، فانکشن(تابع) همونه، متغیرا همونن، دیتا تایپ‌ها یکی‌ان؛ فقط ممکنه نحوه‌ی نوشتن‌شون فرق داشته باشه
پس یاد گرفتن مفاهیم برنامه‌نویسی سخته نه خود زبان‌ها😊

همینه که به جز اولین زبان،
همه‌ی زبان‌ها قراره براتون
راحت باشن🙂

🆔 @AndroidDev_Tips
📁 مهارت خواندن داکیومنتیشن...

هر چیزی یه رول‌بوک یا دفترچه راهنما داره، برنامه‌هایی که ساخته میشن هم داکیومنتی واسه خودشون دارن که نحوه‌ی استفاده‌ی از اونا نوشته شده🙌

کل برنامه‌نویس‌ها باید خوندن داکیومنتیشن رو بلد باشن!!!


📚 قبل از اینکه آموزشِ زبان برنامه‌نویسی جدید ساخته بشه‌، قطعاً یکی رفته داکیومنت اون زبان رو خونده🙂 از روی غیب که نیست

🆔 @AndroidDev_Tips
👍1
♨️ نکته:
     وقتی تولبار(‌ToolBar or AppBar) رفت
     روی نوتیفیکیشن‌بار سیستم و یا
     باتم‌نویگیشن(Bottom Navigation) رفت
     روی کنترل‌بار سیستم، کافیه این اتریبیوت
     رو به لایه اصلی(Layout) صفحه اضافه
     کنید:

android :fitsSystemWindows="true"


گاهی بی دلیل، موقع آپدیت کردن لایبری‌ها ممکنه این اتریبیوت تغییر کنه که ما میایم به صورت دستی تنظیمش می‌کنیم😉

🆔 @AndroidDev_Tips
تجربیات یک برنامه‌نویس اندروید
🔐 تحریم گذر‌های خوب که مناسب برنامه‌نویسی‌موبایل هستند: توی کشوری که از هر طرفی تحریم شده، استفاده از تحریم‌گذرها برای ما برنامه‌نویس‌های موبایل، بخصوص اندروید اجباریه🥲 1. شکن: آدرس-> https://shecan.ir         در نوع DNS بهترین گزینه‌ای که…
پایانِ 403 آنلاین

این تحـ.ـریم گذر رایگان که عملکرد خوبی از خودش نشون داده بود و حاصل دولت رئیسی بود، حدود یکی-دو ماهی هست که دیگه کار نمی‌کنه😢

🫷 همین امر باعث شده که شکن روی نسخه‌ی رایگانِ DNS خودش، محدودیت‌هایی بزاره؛ مثل محدود شدن در استفاده از هوش مصنوعی و بعضاً حتی در وب‌گردی . . .
🛜 حتی نداشتن ثباتِ اتصال هم دیده شده که برای سینک(Sync) کردن گریدل(Gradle) گاهاً نیاز میشه که دو یا سه بار پس از ناموفق شدن فرایند، تلاش کرد تا بلکه با شکن به هدف مدنظر رسید . . .😕

باز هم میگم: به امید روزی که بدون هرگونه تحریم وارد دنیای دیجیتال بشیم🙂

🆔 @AndroidDev_Tips
✏️ یک آداپتور برای چند RecyclerView

قطعاً هر برنامه‌نویس اندرویدی با Recycler
برای نمایش آیتم و کارد کار کرده
و می‌دونه که باید برای نمایش اصولی،
آداپتوری(Adapter) براش بنویسه

ولی یه لحظه تصور کن . . .🙄
چهار تا صفحه داری، چند تا هم دیالوگ که
باید از RecyclerView استفاده کنی و برای
هر کدومش یه آداپتور بنویسی🤯

بهت تبریک میگم
حالا یه کد نامنظم، پرحجم، ناخوانا و بدرد نخور داری😁



خب چیکار کنیم که کدی بهینه و کم‌حجم
داشته باشیم که قابل نگه‌داری و تست‌پذیر
باشه؟؟🤗

یه آداپتور جنریک می‌تونه به داد شما برسه😉

بریم تو پست بعدی یاد بدم تا بسازیش...👇
🆔 @AndroidDev_Tips
تجربیات یک برنامه‌نویس اندروید
✏️ یک آداپتور برای چند RecyclerView قطعاً هر برنامه‌نویس اندرویدی با Recycler برای نمایش آیتم و کارد کار کرده و می‌دونه که باید برای نمایش اصولی، آداپتوری(Adapter) براش بنویسه ولی یه لحظه تصور کن . . .🙄 چهار تا صفحه داری، چند تا هم دیالوگ که باید…
آداپتور عمومی | Generic Adapter

1️⃣ مرحله‌ی اول

ساختن آداپتور جنریک:
class GenericAdapter<T>(
private val data: List<T>,
@LayoutRes private val layoutId: Int,
private val bind: (View, T) -> Unit,
private val onClick: ((T) -> Unit)? = null,
private val onLongClick: ((T) -> Unit)? = null ) :
RecyclerView.Adapter<GenericAdapter<T>.ViewHolder>() {

inner class ViewHolder(val view: View) :
RecyclerView.ViewHolder(view) {
fun bindItem(item: T) {
bind(view, item)
// فرایند کلیک عادی:
view.setOnClickListener {
onClick?.invoke(item)
}
//فرایند کلیک طولانی:
view.setOnLongClickListener {
onLongClick?.invoke(item)
true
}
}
}

override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int):
ViewHolder {

val view = LayoutInflater.from(parent.context).inflate(layoutId, parent, false)
return ViewHolder(view)

}

override fun onBindViewHolder(
holder: ViewHolder,
position: Int) {

holder.bindItem(data[position])

}

override fun getItemCount() = data.size

}

همه ی آداپتور هاتون رو حذف کنید چون این
آداپتور کار همه شون رو می کنه!

🖐 جای جالبش اینجاست که دیگه نیاز نیست
رابط(Interface) بزارید بین آداپتور و کدها
که موقع لانگ کلیک و کلیک عادی تو هر کدوم
یه تابع بسازید!
همچنین ارث بری از رابط هم نیاز نیست و
این بخش از پروژه‌تون رو بیشتر از 50 درصد
سبک تر می‌کنه!

برای زبان‌های دیگه هم فقط مثل جاوا و...
کافیه این کد رو به یک Ai بفرستید تا تبدیل
کنه

بریم تو پست بعدی تا نحوه ی استفاده رو هم ببینیم...👇
🆔 @AndroidDev_Tips
آداپتور عمومی | Generic Adapter

2️⃣ مرحله ی دوم و آخر

استفاده از آداپتور جنریک:
val adapter = GenericAdapter<[Item]>(
data = [Data],
layoutId = R.layout.[ItemLayoutId],
bind = { view, item ->
view.findViewById<[TextView]>(R.id.[aViewId]).text = item.[Name]
//هر کدی که میخواید توی کلاس بایند ران بشه
},
onClick = { //کد های فرایند کلیک عادی },
onLongClick = { //کدهای فرایند کلیک طولانی }
)

حالا کافیه این adapter رو تنظیم کنید روی ریسایکلر ویو خودتون😉

فقط باید بجای [Item] اسم دیتا کلاس آیتم مدنظرتون رو بنویسید، بجای [Data] اطلاعات و دیتاتون رو از دیتابیس یا به هر طریقی جایگذاری کنید، بجای [ItemLayoutId] هم آیدی اون لایه ای که میخواید نشون بدید رو جایگذاری کنید!!

🆔 @AndroidDev_Tips
🪧 مخزنی در گیت‌هاب با 1700 لوگو 🤩

👨‍💻 آقای ابولفضل رادمنش زحمت کشیدن و این مخزن به دنیا ما هدیه دادن🤌

لوگو‌های این مخزن با فرمت XML هست تا بهتر مورد استفاده قرار بگیره توی ریسورس‌هامون🙃

برای استفاده کافیه فقط انتخاب کنید و به بخش ریسورس‌هاتون اضافه کنید و تمام. به همین سادگی!


🖇️ لینک:
https://github.com/AblRadmanesh/VectorAsset

🆔 @AndroidDev_Tips
👍3
©️ چرا نباید کد رو «کپی‌پیست بی‌فکر» کنیم؟

کپی‌کردن مستقیم کد از اینترنت یا پروژه‌های دیگه بدون درک منطق اون، یکی از اشتباهای رایج تو مسیر یادگیری و توسعه نرم‌افزار هست!

کاری که اکثر پیام‌رسان‌های ایرانی، بخصوص بله انجام داد رو شما انجام ندید چون . . .
🔴 دلیل عملکرد کد رو نمی‌دونید و در مواجهه با ارور یا تغییر شرایط پروژه، دچار سردرگمی و باگ‌های متعدد میشید!
🔴 وابستگی به کدهای آماده، فرصت رشد تو مهارت حل مسئله رو از شما و تیم توسعه‌تون می‌گیره!
🔴 کوچک‌ترین تغییر در شرایط پروژه می‌تونه باعث از کار افتادن کدی بشه که بدون درک کپی کردید!

به شخصه شاهد آپدیت‌های پیام‌رسان بله بودم که با افزوده شدن هر قابلیت جدید کلی باگ جدید رو میشد که کسی از تیمشون قادر به حل اون نبود😑
حتی یه باگی داشتن که بعد هر آپدیت، یکی دو هفته ناپدید میشد ولی بعداً دوباره گل میکرد😅

📌 استفاده از نمونه‌کدها یا کد افراد دیگه به خودی خودش اشتباه نیست؛ مسئله اصلی، نحوه استفاده از اوناست. یادگیری واقعی زمانی اتفاق میفته که کد رو تحلیل کنید و اون رو به بخشی از دانش و تجربه شخصی خودتون تبدیلش کنید😊


🆔 @AndroidDev_Tips
👍2
🦠 اولین ویروس کامپیوتری جهان...
کنجکاوی دو برادر پاکستانی!

👬 تو سال ۱۹۸۶ دو برادر پاکستانی (بسیت و امجد) ویروسی ساختن به اسم Brain که این ویروس از طریق فلاپی‌دیسک پخش می‌شد ولی بیشتر نتیجه‌ی کنجکاوی بود تا خرابکاری🫣

❇️ همین کار ساده باعث شد دنیای فناوری بفهمه که پیشرفت بدون امنیت، یه روزی تهدید جدی به بار میاره

🟢 ویروس‌هایی که امروزه ابزار خرابکاری، جاسوسی و حتی جنگ نرم(سایبری) محسوب میشن، از دست دو نفر ساده‌لوح و کنجکاو وارد دنیامون شدن و همین تحول بود که امنیت سایبری رو به یکی از حیاتی‌ترین حوزه‌های فناوری امروز تبدیل کرد😊

🆔 @AndroidDev_Tips
👍2
تجربیات یک برنامه‌نویس اندروید
💰 بیاید فرهنگ سازی کنیم... 👾 درسته گرفتن هزینه‌ی کمتر در اوایل کار عادی هست ولی خب حدی داره 🤧 بازار رو خراب نکن دوست عزیز😁 🤖 اول اینکه وقتی تازه کاری قطعاً باید قیمت کمتری واسه پروژه بگی استخدام بشی هم حقوق کمتری می‌گیری🙄 🤗 وقتی تونستی کارفرما رو متقاعد…
اگه فقط از تو تلگرام و سایت‌های فریلنسری ایرانی پروژه گرفته باشید، این پیامم👆 رو حتماً از جون و دل درک کردید😢

راهکارش برای ما فعلاً اینه که
بریم سمت fiver و upwork تا
مطمئن باشیم که قیمتا تعرفه‌ی
رسمی اون پلتفرمه😏

نه اینستاگرام 25 میلیونی اونجا خواسته شده و نه یوتیوب 18 میلیونی😅


ثبت‌نام خودم تکمیل شه رودمپش رو براتون میزارم 😉🤝

🆔 @AndroidDev_Tips
👍2
بستن کیبورد

این اکستنشن فانکشن (extension Function) رو سیو کنید، هر موقع خواستید کیبورد گوشی کاربر بسته بشه، کال کنید😉😁


// copy to YourClass.kt file ->
fun View.closeKeyboard() {
    val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

// usage
binding.root.closeKeyboard()



🆔 @AndroidDev_Tips
👍2
👓 از مارک اندریسن(سازنده مرورگر موزاییک) پرسیدن چرا لینک‌ها آبی هستن؟

-گفت: چون من آبی دوست دارم و از بقیه رنگ ها خوشم نمیاد🙄
بعدها که مرورگرهای دیگه اومدن، برای اینکه چشم کاربراشون عادت آبی یعنی قابل کلیک رو از دست ندن، ازش تبعیت کردن و الان آبی تبدیل شده به استانداردی برای قابل کلیک بودن یک لینک یا حتی متن. همینقدر الکی الکی😅

جالبه که یه مدت ادج(edge Microsoft) سعی کرد تا شخصی‌سازی رو تا تغییر رنگِ لینک‌ها گسترش بده ولی کسی حتی استقبال هم نکرد😊

🆔 @AndroidDev_Tips
👍3