چند وقت پیش یه AMA (فکرکنم معادل فارسیش میشه “از هرچیزی بپرس”) توی reddit بود که تیم توسعه‌دهنده‌ی دگر سوالاتی که ازشون پرسیده شده رو جواب دادن. دیشب وقت کردم بخونمش و نکاتی که بنظرم جالب رو بود رو در ادامه نوشتم. البته اگر میخواید خودتون همه‌ی سوال‌ و جواب‌هارو بخونید، میتونید به لینک زیر برید.

لینک AMA تیم دگر توی reddit

 

ضعف داکیومنت
یه سری از دولوپرها در مورد اینکه داکیومنت خوب نیست، تذکر داده بودند. چند نفر گیر داده بودن به لغت Thermosiphon که توی مثال استفاده شده :)) توشون یه انگلیسی زبان بود که نوشته بود با اینکه انگلیسی زبانم ولی این لغت رو تا حالا نشنیده بودم!

یکی از اعضای اصلی تیم توسعه‌دهنده‌ جواب داده بود که قبول دارند باید داکیومنت رو بهتر کنند. البته گفته بود پیدا کردن مثال برای توضیح دگر سخته، دلیلشم اینه اگر مثال خیلی ساده باشه، مزایای دگر رو نشون نمیده و اگر خیلی پیچیده باشه، یادگرفتنش سخت میشه. یه بخش جدید هم به اسم semantics به داکیومنت اضافه کردند و داخلش توضیح دادند دگر از چیا درست شده و واژه‌هایی که توی دگر استفاده شده معنیشون چیه.

https://google.github.io/dagger/semantics

 

انتشار نسخه ۳

یکی پرسیده بود که نسخه‌ ۳ دگر چه موقع منتشر میشه که گفته بودند تصمیمی برای این قضیه ندارند و فعلا روی همین نسخه‌ی ۲ کار میکنند.

 

دیداری‌سازی (Visualization)

دو نفر در رابطه با Visualization توی دگر پرسیده بودند. مزیت Visualization اینه میشه object graphیی که دگر ساخته رو مثل یه گراف واقعی دید و بررسی کردش.

یکی از اعضای تیم توسعه دهنده خبر از انتشار SPI رو داده بود که هدفش همین کار هست. انگار object graph رو تبدیل میکنه به فایل‌هایی با فرمت dot و میشه این فایل رو از طریق graphviz دید. البته SPI کاملا آزمایشی منتشر شده، مثال هم براش گذاشتند ولی حقیقتش من اصلا نفهمیدم چطوری میشه ازش استفاده کرد. لینک مثال

لینک مثال استفاده از SPI

 

دگر و custom views

یکی پرسیده بود که چطوری میشه از دگر توی custom viewها استفاده کرد که باز یکی از اعضای تیم توسعه دهنده گفته بود که کلا توصیه میکنیم اینکارو نکنید. dependencyهارو باید یه سطح بالاتر از view توی fragment یا Conductor یا هر کنترلر دیگه‌ای که دارید inject کنید.

 

دگر و kotlin

یکی پرسیده بود توی kotlin چطوری از دگر استفاده کنیم بهتره؟ یکی از اعضای تیم توسعه دهنده این لینک رو که منم قبلا توی بلاگ گذاشتمش رو معرفی کرد. توی این issue در مورد best practiceهای استفاده از دگر توی kotlin صحبت میکنند.

https://github.com/google/dagger/issues/900

 

ویدیو آموزشی دگر

یکی سوال پرسیده بود برای کسی که با دگر اصلا آشنا نیس، چه آموزشی رو پیشنهاد میکنید؟ یکی از اعضای تیم این لینک رو معرفی کرده بود

Understanding Dagger 2’s Generated Code

چندتا کاربر دیگه هم اینا لینک‌هارو توصیه کرده بودن

Dependency Injection Made Simple

 The Future of Dependency Injection with Dagger 2

TwistedEquations – Dagger 2 Android Tutorial

 

ماژول اندروید dagger

یکی پرسیده بود دلیل اینکه dagger.android رو منتشر کردید چیه و بعد چند پیام با یکی از اعضای تیم توسعه‌دهنده صحبت کرده. چون طولانیه، اینجا نمیذارمش و مستقیم برید توی reddit بخونیدش.

لینک به پیام‌ها توی reddit

یه جای دیگه هم یکی گفته بود حتما بجای روش قدیمی getNetComponent().inject(this توی اندروید با از dagger.android و AndroidInjection.inject(this استفاده کنیم؟ یکی از اعضای تیم توسعه‌دهنده گفته بود که میتونید از هرکدوم که میخواید استفاده کنید ولی تیم ما dagger.android رو توصیه میکنه! بعد گفته بود دلیل توصیه‌مون هم مشخصه، چون خودمون درستش کردیم :))

اول بخاطر اینکه دو هفته هس که نمیرسم “لینک‌های آخر هفته” رو توی کانال بذارم باید عذرخواهی کنم. دلیلش اینه بخاطر سربازی رفتن کارها فشرده شده و دیگه خیلی وقت نمیکنم که بلاگ‌ها و مقاله‌هایی که بنظرم جالب هستند رو بخونم. چون اولویتم کیفیت به کمیت هس، ترجیحم اینه که کلا لینکی نذارم تا اینکه بخوام لینک‌هایی که هنوز خودم نخوندمو به بقیه معرفی کنم.

حالا برسیم به اصل موضوع که چطوری میشه ارائه‌ی خوبی داشته باشیم. شرایط نسبت به سالهای گذشته تغییر کرده و رویداد‌های زیادی توی کشور برگزار میشن، بطور مثال @irlogcat که برای اندروید هس هر ماه داره برگزار میشه. در نتیجه این فرصت برای همه هست که بتونن دانششون رو در اختیار بقیه بذارن، شاید همین الان شما هم داوطلب ارائه توی یکی از این رویدادها باشید یا حداقل تصمیم گرفته باشید در آینده اینکارو بکنید. اما یه نکته‌ی مهم اینه بخاطر وجود سایت‌هایی مثل Youtube و بالا رفتن سرعت اینترنت خیلی از کسایی که توی رویدادهای داخلی شرکت میکنند، ارائه‌هایی که خارج از ایران برگزار میشن رو هم دیدن و انتظارشون بالاتر رفته. برای همین بهتره اگر میخوایم جایی ارائه بدیم، سعی کنیم با تمرین کیفیت ارائه‌مون رو بالاتر ببریم و به ارائه‌های خوب خارجی نزدیک کنیم.

یکی از نکات عجیبی که من توی توییتر میبینم، اینه که خیلیا به این قضیه افتخار میکنند که مثلا یکساعت قبل ارائه اسلایدهارو درست کردن و بعد رفتن ارائه دادن یا فقط یه روز برای آماده‌سازی کل ارائه وقت گذاشتند. بنظر من این قضیه بیشتر از اینکه نشون بده یه نفر خیلی باحال و خفن هس، نشون میده برای اونا که میخوان ارائه‌اش رو ببینن اهمیت قائل نیس. در این رابطه مقاله‌ی “How to Prepare a Talk” که در ادامه لینکشو میذارم یه نکته جالب گفته، اونم اینه که میگه برای آماده‌سازی یه ارائه حداقل باید ۲۰ساعت وقت بذارید! بعد خودش مثال زده که اگر احساس میکنید این زمان خیلی زیاده، اینجوری فکرکنید که ۵۰۰نفر ارائه‌ی ۳۰دقیقه‌ای شمارو میبینند (حضوری،آنلاین یا بعدا ضبط شده)، اگر ۵۰۰*۳۰ رو حساب کنید میشه ۱۵۰۰۰دقیقه نفر-دقیقه که همون ۲۵۰نفر-ساعت هست. حالا واقعا ارزش نداره شما ۲۰ساعت وقت بذارید تا ۲۵۰ساعت بقیه الکی هدر نره؟!

همه‌ جای مقاله‌ “How to Prepare a Talk” که خوبه ولی یه بخش دیگشم برام خیلی جالب بود، همیشه فکرمیکردم من عجیبم که خوشم نمیاد روی کاغذ نکته‌ای بنویسم و همراه خودم برای ارائه ببرم! (چون اینو به عنوان توصیه‌ی خوب برای ارائه زیاد شنیدم)، دلیلشم اینه که سعی میکنم اینقدر تمرین کنم تا با دیدن اسلایدها نکاتی که میخوام بگم یادم بیاد و اگرم نکته‌ای یادم رفته! کلا دیگه یادم بره، نه اینکه توی کاغذ یه چیزی ببینم که نوشته باشم بگم ولی یادم نیاد!!!!! درواقع دوس ندارم دیگه درگیر یه کاغذ بشم و میخوام تمرکزم همون ارائه دادن باشه. حالا وقتی این مقاله رو خوندم، فهمیدم من عجیب نیستم! واقعا این روشی هس که بعضیا استفاده میکنند. تا حالا به کسی اینکاری که خودم میکردمو توصیه نمیکردم، از این به بعد به بقیه پیشنهاد میدم چون ارائه دادن رو راحت‌تر میکنه.

حتما اگر ارائه دادن رو دوست دارید یا میخواید ارائه بدید این مقاله‌ی طولانی رو بخونید. نکاتش خیلی بیشتر از این هست که من بتونم دونه دونه بنویسم و بهتره برید خودشو بخونید.  هرچقدر ازش تعریف کنم، کم هس. تک تک نکته‌هایی که در مورد مراحل آماده‌سازی یه ارائه میگه واقعا تاثیرگذار و کاربردیه. کاشکی به جای اون مطالبی که توی درس “درس شیوه ارائه مطالب علمی وفنی” داخل دانشگاه میگن (البته از همه دانشگاه‌ها خبر ندارم،برای ما که مسخره بود)، از این جور مقاله‌ها معرفی کنن. لینک مقاله “How to Prepare a Talk”:

https://www.deconstructconf.com/blog/how-to-prepare-a-talk

هنوز یه هفته از زلزله‌ی قبلی نگذشته که دوباره یک ساعت پیش یه زلزله‌ی ۴.۲ ریشتری اومد. اومدن زلزله به آدم استرس و نگرانی میده، ولی بدتر از خود زلزله این صحبت‌هایی هست که بعضیا به استناد این کانال پیش‌بینی زلزله (@pishbiniezelzele21) میکنند. هفته‌ی پیش در مورد این کانال زیاد صحبت میشد اما اصلا فکرنمیکردم موضوع دنباله‌داری باشه و مطمئن بودم که حتما توسط پلیس دستگیر میشه و کانال رو مسدود میکنند. حالا نه تنها کانالش مسدود نشده، حتی ۱۰۰هزار نفر به عضو‌هاش اضافه شدن!!!!!

ادعای پیش‌بینی زلزله

صاحب کانال آقای علی اصغر برهمند هست، ایشون ادعا میکنند اولین کانال پیش بینی علمی زلزله رو دارند که از طریق دریافت‌ اطلاعات ماهواره‌ای ومحاسبات ریاضی وتغییرات تکتونیکی زمین! میتونند با دقت ۷۰ درصد زلزله رو پیش‌بینی کنند. البته من که کانالشون رو بررسی میکردم فقط مختص به ایران نیس و زلزله‌های ایتالیا یا جاهای دیگه رو هم پیش‌بینی میکنند. توی کانالشون گفتند که اگر بهش کمک کنند، دقت پیش‌بینیشو به ۸۵ درصد میرسونه! ادامه …

سایت یوتیوب، یکی از منابع مهم یادگیری برنامه‌نویسی هس! بطور مثال توی پست “منابع آموزشی برای افزایش مهارت در برنامه‌نویسی اندروید” در مورد این صحبت کردم که میشه از طریق یوتیوب به ویدئو‌ی کنفرانس‌های اندروید دسترسی داشت. بخاطر اینکه بعضی از دوستان توی دیدن ویدئو‌ها مشکل داشتند، یه پیام توی کانال تلگرام نوشتم و روش‌هایی که برای دانلود از یوتیوب استفاده میکنم رو معرفی کردم. بعد این پیام، تعدادی از دوستان هم روش‌های دیگه‌ای رو معرفی کردند که بعضی‌هاش خیلی خوب بودند. در ادامه میتونید این روش‌هارو ببینید. (ترتیبشون دلیل خاصی نداره و همه رو چک کنید تا روشی که باهاش راحت‌ترید رو پیدا کنید) ادامه …

در پست قبلی در مورد این صحبت کردیم که با چه رویکرد‌هایی میشه سورس یک اپلیکیشن رو بررسی کرد. اولین اپلیکیشنی که برای بررسی انتخاب شده اسمش کیک‌استارتر هست. اگر تا حالا اسم کیک‌ستارتر رو نشنیدید، ویکی پدیا فارسی در موردش اینجوری توضیح میده:

کیک‌استارتر  (به انگلیسی: Kickstarter)، شرکتی آمریکایی و عام‌المنفعه برای کمک به پروژه‌های نوآورانه در زندگی بشر است که از استارت‌آپ‌هایی با ایده‌های نوین و خلاقانه استقبال می‌کند. ایده‌های جدید در همه زمینه‌ها از فناوری گرفته تا آشپزی در وب‌سایت این شرکت برای جذب سرمایه عمومی تحت پوشش قرار می‌گیرد.

ما به سایت و اپلیکیشن iOSش کار نداریم و فقط سورس اندروید رو بررسی میکنیم. اگر دوس دارید اول خود اپلیکیشن رو ببنیید، میتونید از گوگل پلی دانلود کنید. سورس اپلیکیش اندروید کیک استارتر داخل این ریپو گیت‌هاب هست. برای بررسی سورس اپلیکیشن مجبور نیستید که سورس رو بیلد کنید یا حتی دانلودش بکنید ( البته معمولا دانلود کردن کار رو خیلی راحت‌تر میکنه). من خودم از سایت گیت‌هاب استفاده کردم و چیزی دانلود نکردم.

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

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

ادامه …

در رابطه با فواید خوندن سورس پروژه‌هایی (میتونه خروجیش اپلیکیشن باشه یا کتابخونه) که توسط افراد دیگه نوشته شده مقاله‌های زیادی توی اینترنت وجود داره و لازم به صحبت بیشتر نیست. فقط اگر بخوام تجربه شخصی خودمو بگم، فکرکنم در حدود ۶۰ ۷۰درصد چیزهایی که بلدم رو با خوندن سورس‌ها یاد گرفتم. مهمترین بهونه‌ای که بعضی برنامه‌نویسا میارن تا اینکار پرفایده رو انجام ندن، اینه که میگن هنوز دانششون برای اینکار کم هس. در صورتی که خب بدیهی هست مثلاً اگر منم سورس اپلیکیشن تلگرام رو بررسی میکنم قطعاً کلی از بخش‌هاشو متوجه نمیشم و هیچ‌وقت هم هدفم این نیست ۱۰۰درصد یه پروژه رو متوجه بشم. سورس‌هارو میشه با دو رویکرد زیر بررسی کرد. ادامه …

گاهی پیش میاد به عنوان برنامه‌نویس اندروید نیاز میشه که یک کتابخونه‌ی جاوا رو تست کنید. مثلا فکرکنید میخواید ویژگی خاصی رو توی dagger2 یا retrofit امتحان کنید اما تا بخواید پروژه اندروید بسازید و هر بار منتظر بشید تا build بشه! خیلی وقتتون گرفته میشه.

در این موارد ساختن یه پروژه‌ی console application جاوا میتونه خیلی کمک کنه. اینجوری درگیر lifecycle اکتیویتی یا درست کردن فایل xml و … هم نمیشید و می‌تونید تمرکزتون رو روی اون موضوعی که میخواید تست کنید بذارید. فقط اگر پروژه‌ی معمولی جاوا بسازید باید خودتون فایل‌ jar کتابخونه‌هایی که نیاز دارید رو پیدا کنید و چیزی مثل gradle توی اندروید نیست تا کمکتون بکنه. برای حل این مشکل میشه از maven استفاده کرد، بهش dependecyهاتون رو شبیه gradle در یک فایل ‍xml معرفی میکنید و بقیه کار رو به اون میسپرید. بعدش میتونید خیلی راحت از کتابخونه‌ها توی کدتون استفاده کنید.

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

ادامه …

چندماه از وقتی که وب‌سرویس MoviesApi رو با هدف آموزشی درست کردم میگذره. توی این مدت فرصت نشده بود تا قابلیتی بهش اضافه کنم. بالاخره دیروز بعد چند ساعت کلنجار رفتن با لاراول تونستم امکان احراز هویت از طریق oAuth رو براش درست کنم. مزیتش اینه اگر کسی میخواد احراز هویت از طریق oAuth با password grant type  رو توی اندروید، iOS یا هر زبان دیگه‌ای یاد بگیره، میتونه با این وب‌سرویس تمرین کنه. برای پیاده‌سازی oAuth از Passport استفاده کردم و فقط یه تغییر کوچیک دادم که نیاز نباشه client_secret و client_id برای دریافت توکن ارسال بشه. ادامه …

چند وقت پیش در بلاگم پستی با تیتر “سوالات متداول توسعه‌دهندگان تازه کار اندروید” نوشتم. سوال ۸ام اون پست “چطور میشه برنامه‌نویسی اندروید رو یاد گرفت؟” بود که جوابشو بصورت خلاصه نوشته بودم. این مقاله درواقع جواب کامل اون سوال هست و داخلش منابعی رو که خودم در سه سال گذشته ازشون استفاده کردم و برنامه‌نویسی اندروید یاد گرفتم رو بهتون معرفی میکنم. در طول این سه سال گذشته در هیچ شرکت یا تیم اندرویدی نبودم و فقط از منابع داخل این پست برای یادگیری اندروید استفاده کردم. در ادامه میتونید با این منابع و روشی که ازشون استفاده میکنم آشنا بشید.

train ادامه …

برای یادگرفتن برنامه‌نویسی روش‌های گوناگونی هست، مثلا میشه توی کلاس‌های حضوری و مجازی ثبت‌نام کرد یا بصورت خودخوان (self study) از منابع موجود در اینترنت استفاده کرد. اینکه کدوم روش برای شما مناسبه، بستگی به روحیات و سلیقتون داره. توی این پست قراره در رابطه با این صحبت کنیم که هر روش برای چه افرادی مناسب‌تر هست. چیزایی که در ادامه مینویسم چکیده‌ی تجربه‌‌ام از تعامل با برنامه‌نویسان تازه‌کار توی گروه‌های تلگرامی، فروم‌ها و کسایی که خصوصی بهشون درس دادم هست. منظورم اینه پشتوانه‌ی علمی نداره و فقط نظر تجربی و شخصیم هست.

1dd

ادامه …