وقتی پسورد keystore اپلیکیشن رو فراموش کردیم !

استاندارد

یکی از بدترین اتفاقاتی که میتونه برای یک توسعه‌دهنده اندروید بیوفته ، فراموش کردن اطلاعات مربوط به sign اپلیکیشنه .
چرا ؟‌ چون بدون داشتن این اطلاعات باید فکر بروزرسانی کردن اپلیکیشنتون روی مارکت‌ها رو از سرتون بیرون کنید . منظور از بروزرسانی ، امکان نصب نسخه جدید به روی نسخه قدیمی بدون بوجود اومدن خطا در حین این کاره . یعنی کاربرتون به‌راحتی بدون نیاز به پاک کردن نسخه قدیمی نسخه جدید اپلیکیشنتون رو نصب کنه .
حالا چه اتفاقی میوفته اگه نسخه جدید اپلیکیشنمون رو با اطلاعاتی متفاوت از چیزی که نسخه‌‌های قبلی رو با اون sign کردیم sign کنیم ؟‌ تو این حالت اگه کاربرمون بخواد نسخه جدید رو نصب کنه به error زیر بر میخوره ( یا یه همچین چیزی ) .
photo_2016-06-21_11-07-06
در این حالت تنها کاری که کاربر میتونه برای نصب نسخه جدید انجام بده ، حذف نسخه قدیمی و بعد از اون نصب نسخه جدیده (که با این کار کاربرتون اطلاعات درون اپلیکشن رو از دست میده ).
خب حالا اگه این اتفاق بیوفته چیکار میتونیم بکنیم ؟
اول از همه اگه فایل keyStore تون رو گم کردین متاسفانه راهی براتون نمیمونه جز اینکه بیخیال بروزرسانی کردن نسخه قدیمی اپلیکیشنتون بدون حذف کردنش بشید .
ولی اگه فایل keyStore تون رو گم نکردید و فقط پسورد اون رو به خاطر نمیارید ، هنوز جای امیدواری هست .     به خواندن ادامه دهید

چطوری خودمون رو از شر ساختن داده‌های Fake راحت کنیم ؟

استاندارد

یه چیز که خیلی خیلی من رو توی روند انجام پروژه‌ها اذیت میکرد همزمان نبودن پیاده‌سازی بخش کلایت و سرور بود . بطور مثال ما تو جلسات فنی ساختار داده‌ها و وب‌سرویسهایی که لازم بود رو با وب‌سرویس نویس مشخص میکردیم ولی به هر دلیلی این وب‌سرویس‌ها تو زمان پیاده‌سازی کلاینت‌ها آماده نمیشد یا با تاخیر آماده میشدند و این موضوع باعث این میشد که من برای پیاده‌سازی بخش‌هایی از کلاینت مجبور بشم تا توابعی رو در داخل اپلیکیشن بنویسم که داده‌های غیر واقعیی با ساختار درست و مشخص شده رو تولید کنه ، تا امکان تست اولیه کدهام در روند پیاده‌سازی رو داشته باشم .
چون این کار همیشه برای من جزو کارهای حوصله سر بر و کسل کننده بود ، باعث شد کمی جستجو کنم تا ببینم راه حلی برای انجام دادن این کار به صورت غیر حوصله سر بر هست یا نه . که خوشبختانه راه حلی به اسم JsonServer  وجود داشت .
JsonServer یک REST API برای تولید داده‌های غیر واقعیی بر روی localhost هست که با استفاده از یک فایل Json که بهش داده میشه کار میکنه . کافی این فایل Json دقیقا ساختار داده‌ای پروژه‌تون رو داشته باشه تا شما بتونید با توابع GET , POST , PUT , DELET , PATCH که json server در اختیارتون میذاره ، با صرف کمترین زمان از وب‌سرویس‌های مورد نظرتون داخل اپلیکیشنتون استفاده کنید . تو ادامه با یه مثال سعی میکنم نحوه عملکرد json server رو براتون بیشتر توضیح بدم .

اول بریم سر نصب این برنامه ، اگه با مک یا لینوکس کار میکنید و node رو روی سیستمتون ندارید ، برای قدم اول لازمه node روی سیستمتون نصب کنید .
دستور نصب node در ترمینال با پکیج منیجر homebrew برای مک : brew install node

بعد از اون میرسیم به نصب خود json-server ، برای این کار فقط کافی که تو ترمینالتون دستور زیر رو اجرا کنید و کمی هم صبر و تحمل به خرج بدید .
دستور نصب  npm install -g json-server  :  json server

خب بریم سر نحوه استفاده :

فرض کنید که برای موجودت‌های Profile و Products نیاز به یکسری وب‌سرویس داریم . فایل json به اسم db.json که در زیر نوشته شده ، شامل لیستی از چند Profile و یک لیست از Products ها هست .

کاری که ما  باید انجام بدیم اینه که این فایل رو به عنوان پارامتر به json-server بفرستیم تا اون بقیه کارا رو برای ما انجام بده . پس به دایرکتوریی که فایل json مون تو اون قرار داره میریم و دستور json-server db.json رو توی ترمینالمون اجرا میکینم . بعد از این مرحله میتونیم با استفاده از متد GET بر روی ادرس localhost:3000/profile لیست profile های مورد نظرمون رو دریافت کنیم . همچنین میتونیم با فرستادن شماره id در ریکوئست ، پروفایل مورد نظرمون رو در جواب دریافت کنیم  ، مثال localhost:3000/profile/1 . همینطور با استفاده از متدهای دیگه مثل ‌PUT , DELETE , POST هم میتونیم عملیاتهای اضافه ، حذف و تغییر رو بر روی داده‌های موجود تو فایل json مون اعمال کنیم . لازمه که این رو هم بگم که این تغییراتی رو که ما در فایل json به وسیله json-server اعمال میکنیم فقط در صورتی اعمال خواهند شد که قبل از بستن اون ، دستور s رو در ترمینال اجرا کنیم .

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

نکته : اگه از genymotion برای تست‌هاتون استفاده میکنید یادتون باشه به جای http://localhost:3000  از http://10.0.3.2:3000 استفاده کنید .

تبدیل فرمت تعداد زیادی ویدیو با ffmpeg

استاندارد

قضیه از اینجا شروع شد که من یه فایل زیپ حاوی ۵۰ تا ویدیو دانلود کردم ، ولی‌ فرمت هیچ کدوم با فرمتی که من نیاز داشتم نمیخوند ! پس طبیعتا تنها راهی‌ که برام میموند این بود که ویدیو‌ها رو convert کنم . ۲ تا راه برای اینکار وجود داشت راه غیر منطقی‌ و کند این بود که یه اپلیکیشن برای این کار پیدا کنم، نصبش کنم و بشینم دونه دونه ویدیو‌ها رو convert کنم و راه حال منطقی‌ و سریع ، که یه پکیج خوب برای انجام این کار پیدا کنم و برم سر وقت ترمینال . من راه سریع رو انتخاب کردم ، بعد یه سرچ کوچیک به پکیج ffmpeg رسیدم که علاوه بر کاری که من ازش میخواسم کلی‌ کارای جذاب دیگرو هم انجام میداد .

پس قدم اولم این بود که این پکیج رو نصب می‌کردم ، من واسه نصب این بسته روی مک از پکیج منیجر HomeBrew استفاده کردم ، اگه HomeBrew رو ندارید می‌تونید اون رو با این دستور نصب کنید.

دستور نصب HomeBrew :

دستور نصب ffmpeg برای مک :

brew install ffmpeg

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

خب من ۵۰ تا ویدیو رو باید convert می‌کردم و اصلا دوست نداشتم که بشینم پای لپتاب و این دستور رو ۵۰ بر اجرا کنم ، پس دستور زیر رو نوشتم که تمام ویدیوها با فرمت avi توی دایرکتوری رو به فرمت mpg تغییر میده .

و در اخر از اونجایی که تبدیل فرمت ویدیو میتونه کار زمان بری باشه مقداری صبر لازمه تا بتونیم نتیجه کار رو ببینیم  .

آنالیز پیکج‌ها TCP توی os x

استاندارد

اگه یه زمانی لازم داشتید پکیج‌های TCP ای ارسالی و دریافتیتون رو روی مک تحلیل کنید میتونید از روش زیر واسه این کار استفاده کنید .

۱ .  دستور زیر رو اجرا کنید تا لیستی از interface های شبکتون رو ببینید .

۲. چون من از طریق wifi به اینترت متصل هستم برسیم رو روی en0  انجام میدم . کد زیر رو تو تزمینال اجرا کنید تا listen کردن package ها شروع بشه .

حالا شما باید پیغام tcpdump: listening on رو ببیند . از الان تمام package های شما توی فایل dump تون توی Desktop با اسم  TestDump ذخیره میشه .

۴. برای به اتمام رسوندن listen کردن کافی توی ترمینال cntrl + C رو فشار بدین .

حال برای تحلیل میتونید این فایل رو داخل برنامه‌هایی مثل wireshark باز کنید یا میتونید توی ترمینال اون رو با دستور زیر باز کنید .

 

 

برسی signature اپلیکیشن‌های اندروید

استاندارد

همونطور که میدونید در انتهای کار توسعه اپلیکیشن‌های اندرویدی ، توسعه دهندگان اپلیکیشن‌ خروجی اپلیکیشن‌ (Apk) خودشون رو بصورت sign شده منتشر میکنند تا مدریت اپدیت‌ها و انشار اپدیت برای اپلیکیشنشون رو فقط و فقط خودشون بتونند انجام بدهند .

ولی خب این sign کردن باعث نمیشه دیگران نتونند کدی که توسعه دهنده اپلیکیشن‌ زده رو تغیر بدند، اما (یه امای بزرگ) واسه خروجی گرفتن از تغییرات انجام شده نیاز هست که دوباره اپلیکیشن sign بشه و با توجه به اینکه keystore که برای sign کردن توسط توسعه دهنده استفاده شده رو اصولا فقط خودش در اختیار داره و کسایی که این تغییرات رو اعمال کردند باید با یه keystore جدید sign کردن رو انجام بدند .

پس حالا نگرانی که پیش میاد چیه ؟ اینکه از کجا میتونیم بفهمیم اپلیکیشنی که دانلود کردیم اپلیکیشن‌ رسمی هست یا نه (توسط توسعه دهنده اصلی sign شده یا نه ) !

کاری که میتونیم بکنیم اینکه با keytool که ابزار جاوا برای مدیریت certificateها و keyها هست اطلاعات مربوط به certificate هر کدوم از apk ها بگیریم و برسی کنیم .

اینجا من apk اپلیکیشن تلگرام رو که از بازار گرفتم رو قراره با apk موجود تو گوگل پلی مقایسه کنم .

مرحله اول

دو تا apkای که قرار هست برسی کنیم رو توی یه فولدر میریزیم .

مرحله دوم

دستور زیر رو توی terminal اجرا کنید . این دستور اطلاعات مربوط به certificate هر apk ای که توی فولدرمون هست رو به ما نشون میده .

مرحله اخر

حالا تنها کاری که میمونه مقایسه اطلاعات بدست اومده با هم هست که باید یکی باشن .

چیزی که این مقایسه به ما نشون میده این هست که هر دوی این نسخه‌ها توسط توسعه دهنده اصلی sign شده و از این بابت مشکلی ندارن .

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