یوشا

دست نوشته ها و تجربیات شخصی

یوشا

دست نوشته ها و تجربیات شخصی

شهید دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم آنکس که تخصص ندارد و کاری را می پذیرد بی تقواست!

طبقه بندی موضوعی
۲۳
۱۳۹۴/۰۵
  • مقدمه

حافظه مجازی در کامپیوتر، یک آرایه بزرگ طولانی از بیت هستش و این بیت ها به بلوک هایی به نام بایت تقسیم میشن(هر 8 بیت = 1 بایت) و به هر بایت یک آدرس جهت دسترسی اختصاص داده می شه.

در زبانهای برنامه نویسی، وقتی با داده های غیرفیزیکی(مثل متغیر ها، اشیا، توابع و...) کار می کنید، مقدار و آدرس این داده ها در حافظه مجازی ذخیره میشه. در سطح پایینتر، وقتی متغیر محلی(local variable) یا تابعی تعریف و استفاده می کنید مقادیر و آدرسشون در قسمت Stack حافظه مجازی قرار می گیره. ولی با ساخت شی یا اختصاص حافظه بصورت دستی(Dynamic)، مقدار و آدرسشون در قسمت Heap حافظه مجازی قرار میگیره. و نهایتاً همه اینها در سلول های RAM سخت افزاری کامپیوتر بصورت منظم چیده میشن.

 

ram-stack-heap

 

فهرست/مندرجات:

  • حافظه Stack
    • قوائد حافظه Stack​
    • مشکل Stackoverflow
  • حافظه Heap
    • قوائد حافظه Heap
    • Garbage Collector / GC
    • مشکل Memory leak

 

  • یوشا آل ایوب
۱۳
۱۳۹۴/۰۴

1- هنگامی که دستگاه با وضعیت Low-Memory مواجه می شه، متد onStop() توسط DVM/ART اندروید نادیده گرفته میشه. پس حتی الامکان برنامه و اطلاعات مهمش رو در متد onPause() finalize کنید و نه در متد onStop().

در وضعیت Low-Memory، گاهی استفاده از متد System.runFinalization() و System.gc() می تونه کارساز باشه.

 

2- طبق گفته گوگل، حتی الامکان متد ها رو static تعریف کنید. اینکار سرعت پردازش رو 15 تا 20 درصد افزایش میده.

 

3- URLConnection یا Apache HTTP؟

طبق گفته ی وبلاگ Jesse Wilson، عضو تیم توسعه DVM، Apache HTTP در اندروید Froyo و قبل تر باگهای کمتر و بیشترین سازگاری رو داره. درحالی که UrlConnection در اندروید Gingerbread و جدیدتر باگهای کمتر، امکانات بیشتر، بهینه تر و سازگاری بیشتری رو داره... پس در انتخاب اینها دقت کنید.

  • یوشا آل ایوب
۰۱
۱۳۹۴/۰۳

 

init: مخفف initialization، اولین برنامه/process ای هست که در حین بوت سیستم اجرا میشه و تا زمانی که سیستم خاموش بشه بکارش ادامه میده. این برنامه ابتدا عملیات system initialization رو انجام میده و سپس عملیات runlevel initialization رو و اینکارو با خوندن محتوای فایل inittab آغاز میکنه.

برنامه init ابتدا اسکریپت rc.S رو اجرا میکنه تا سیستم رو برای ورود به runlevel مورد نظر آماده کنه. فایل rc.S وظیفه داره که حافظه مجازی رو فعال کنه، filesystem رو Mount کنه، دایرکتوری var/ رو تمیزکاری کنه، دیوایس های Plug & Play رو آماده سازی کنه، ماژول های Kernel رو بارگذاری کنه(LKM)، پورت های سریال رو پیکربندی کنه و نهایتاً اسکریپتهای System V رو اجرا کنه. بنابراین init آغازگر بیشتر پرورس ها و فرآیندهای اصلی سیستم هستش.

نکته: برنامه init توسط Kernel فراخونده میشه و با پروسس Id 1 شروع بکار میکنه. اگر Kernel قادر به فراخوندنش نباشه، خطای Kernel pantic (یا همون fatal error) رخ میده که باعث متوقف شدن کل پروسه بوت میشه.

 

runlevel: تعیین کننده پارامترهای برنامه init و دستورالعملهایی برای تنظیم ترمینال، محیط کاربر، شبکه و اجرای سرویس های اولیه هستش که توسط یک شناسه عددی داخل فایل inittab در مسیر /etc/ تنظیم میشه. و البته این شناسه در هر توزیعی متفاوته!

  • یوشا آل ایوب
۰۱
۱۳۹۴/۰۲

 

گوشی که درحال حاضر ازش استفاده می کنم، مدل S111 Spreadtrum ماله شرکت Kenxinda هستش... (چینیه!)

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

خب خود گوشی نسخه اندرویدشو زده 4.0.0 ولی من خیلی وقت پیش مشکوک شدم که این گوشی اندرویدش 4 نیست، بلکه 3 یا 2 عه

دیروز که داشتم داخلش فایلگردی می کردم و برنامه های فابریکیشو decompile می کردم متوجه یه سوتی شدم:

فایل browser.java داخل برنامه Browser.apk در مسیر system/app/

public String getUserAgentString()
{
...

    localStringBuffer.append("Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; KENXINDA-KXD-");

...

    localStringBuffer.append("/1.0 Android/2.3.5 Release/03.01.2013 Browser/AppleWebKit533.1 Build/MocorDroid2.3.5) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1");

همینطور که میبینید داخل useragent مرورگر، سیستم عامل رو زده Android 2.3.5! یعنی نسخه واقعیه این گوشی! این همون سوتیه که شرکت Kenxinda داده.

 

حالا بگذریم، بعدش شروع کردم به گشتن تو اینترنت دنبال راهی که این برنامه رو بدون root کردن گوشی جایگزینش کنم. (یا اینکه بهینه سازی و دوباره کامپایلش کنم). که به یه Browser داخل پکیج های Cyanogen برخوردم:

سیستم عامل Cyanogen شاخه ای از پروژه Android هستش که خیلی هم بهتر از خود اندروید داره توسعه داده میشه

Cyanogen منبع باز هستش اونم به معنای واقعی! شما می تونید نسخه مدل گوشیتونو رو دانلود کنید، تغییرش بدید، کامپایل کنید و نصبش کنید. برعکس پروژه Android که فقط کامپایل میشه و برای امثال ما هم غیرقابل استفادست، چون خامه به اصطلاح.

Cyanogen همه نوع توسعه دهنده و contributer ای رو قبول می کنه، opensource و رایگان هستش و با آغوشی باز از هر change/improvment ای استقبال می کنه. برعکس Google که فقط حرفشو میزنه.

دقیقاً مثل اندروید، core ش با C و ++C نوشته شده، UI ش با Java و پکیج منجرش هم APK هستش.

اگر کاربر عادی هستید و مدل گوشیتون در Cyanogen لیست شده پیشنهاد می کنم حتماً نصبش کنید و پادشاهی کنید! اگرم توسعه دهنده هستید و پیشنهادات/ایده هایی برای سورس اندروید دارید، بفرستیدش به Cyanogen که بررسی و اعمالش کنن.

 

اینم بگم که اگر فکر می کنید می تونید با ایده ها و تغییراتتون به توسعه خود Android کمک کنید سخت در اشتباهید. چون برای Android زیاد مهم نیست و اصلاً اهمیتی نمیدن، چون تیم Android بشدت مشغولند...!

 

http://cyanogenmod.org

http://wiki.cyanogenmod.org

https://github.com/CyanogenMod

  • یوشا آل ایوب
۰۳
۱۳۹۳/۱۲

برای حل مشکلات ADB گوگل با درایور گوشی بصورت زیر عمل کنید:

  • ابتدا به مسیر نصب شده Android SDK برید.
  • بعد روی برنامه SDK Manager کلیک راست و گزینه Run as administrator رو انتخاب کنید تا برنامه باز بشه.
  • نکته: دلیل Run as administrator بخاطر مسایل دسترسی و نصب ابزارهای اندروید هستش.
  • حالا صبر می کنید تا لیست ابزارها load بشه... بعد روی گزینه Deselect all کلیک کنید.
  • سپس روی گزینه Extras کلیک کنید و ابزار Google USB Driver رو تیک بزنید. در آخر دکمه Install 1 package رو بزنید تا دانلود بشه.

  • یوشا آل ایوب
۰۷
۱۳۹۳/۱۱

 

نرم افزار Java Development Kit(به اختصار JDK) پکیجی هست که توسط شرکت Sun Microsystems (و اکنون Oracle) برای تولید و اجرای برنامه های Java طراحی و به بازار عرضه شده.

نکته: Java یک زبان برنامه نویسی کامپیوتر، سطح بالا و شی گرا هستش که توسط شرکت Sun برای تولید برنامه های مستقل از بستر اجرایی طراحی شده. به این معنی که برنامه های تولید شده توسط این زبان قادرن برروی همه سیستم عامل های Desktop اجرا و استفاده بشن.

پکیج JDK حاوی تعدادی کتابخانه، برنامه، ابزارهای کمکی و مستندات جهت تولید و نوشتن برنامه های Java هستش. چیزی شبیه به Windows SDK, Android SDK, .Net SDK و...

نکته: JDK درواقع Software Development Kit(به اختصار SDK) محسوب میشه برای همین به اون Java SDK هم گفته میشه.

درحال حاضر قادرید پکیج JDK رو بر روی سیستم عامل های Windows, GNU/Linux, Solaris, MacOS نصب و اجرا کنید اما من در این مقاله به نصب JDK برروی سیستم عامل Windows میپردازم. (Oracle JDK و OpenJDK)

برای کسب اطلاعات بیشتر راجب این پکیج به ویکی JDK مراجعه کنید.

 

فهرست مندرجات:

  • JDK یا JRE
  • سیستم مورد نیاز
  • دریافت JDK
  • نصب و تنظیم JDK
  • نکات
  • رفع مشکلات

  • یوشا آل ایوب
۱۱
۱۳۹۳/۱۰

 

بطور خلاصه، اساس کار SSh-Key مبتنی بر رمزنگاری بر کلید عمومی هست. به این صورت که شما دو کلید ایجاد می کنید: یکی کلید عمومی(public key) و دیگری کلید خصوصی(private key). که در اینجا کلید عمومی نقش قفل رو داره و کلید خصوصی نقش کلید!

 

شما می تونید کلید عمومی(public key) خودتون رو به هر کسی بدید یا در هر جایی قرار بدید... چراکه تنها عملکردش رمزی کردن داده هاست و هیچ کارایی دیگه ای نداره. پس چیزی هم شما رو تهدید نمی کنه. کلید دیگه، کلید خصوصی هه(private key)، که شما نباید اون رو به کسی بدید! و عملکردش رمزگشایی داده هاست. (داده های رمزگذاری شده توسط کلید عمومی)

شیوه تعامل این دو کلید به این صورته که:

1- سرور/remote یک پیام کوتاه رو توسط کلید عمومی شما [که قبلاً بهش داده بودید رو] رمزگذاری و اون به کامپیوتر شما ارسال میکنه.

2- کامپیوتر شما، این پیام رمزگذاری شده رو دریافت و با کلید خصوصی شما اون رو رمزگشایی میکنه و اون رو به سرور/remote ارسال می کنه.

3- در نهایت، سرور/remote هویت شما رو [از نظر مالک کلید خصوصی] شناسایی میکنه و بلافاصله دسترسی های لازم رو به شما اعطا می کنه. بهمین سادگی!

نکته: SSH ارتباطی به SSL نداره.

 

فهرست/مندرجات:

  • دانلود برنامه
  • ساخت SSh-Key
  • آپلود SSh-Key

  • یوشا آل ایوب
۱۵
۱۳۹۳/۰۹

 

اول اینکه امکان توسعه برنامه های اندروید در Eclipse به 4 روش میتونه انجام بگیره:

1- توسط Eclipse نسخه Eclipse for Android Developers

2- توسط پلاگین Andmore و نصبش در Eclipse نسخه Eclipse for Java Developers

3- توسط پلاگین ADT و نصبش در Eclipse نسخه Eclipse for Java Developers(عدم پشتیبانی از material design و Android 7)

 

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

 

مقایسه مهمترین ها: (Eclipse و AS، نه IntelliJ)
اکلیپس یک بستر و IDE غول پیکر و مستقل هست با بیشترین پلاگین در بین IDE ها.
اندروید استودیو یک IDE و کپی از برنامه IntelliJ هست.

  • یوشا آل ایوب
۰۸
۱۳۹۳/۰۸

 

سرعت بیشتر با get_magic_quotes_runtime و get_magic_quotes_gpc برای گرفتن مقدار Magic quotes:

if (get_magic_quotes_gpc() || get_magic_quotes_runtime())
{
    #...
}

0.0123500823970
0.0124192237854
0.0124502182007
0.0128602981567
0.0129485130310
0.0129580497742
0.0129580497742
0.0129890441895
0.0129985809326
0.0130105018616
0.0130105018616
0.0130200386047
0.0130295753479
0.0130391120911
0.0141811370850

 

سرعت کمتر با ini_get برای گرفتن مقدار Magic quotes:

if (ini_get('magic_quotes_gpc') || ini_get('magic_quotes_runtime'))
{
    #...
}

0.0201392173767
0.0201511383057
0.0201606750488
0.0201988220215
0.0202012062073
0.0202107429504
0.0202202796936
0.0202417373657
0.0202584266663
0.0203299522400
0.0219893455505
0.0220894813538
0.0238800048828
0.0250506401062
0.0255298614502

 

x64 Hardware
32bit OS
PHP 5.5 CLI

  • یوشا آل ایوب
۰۸
۱۳۹۳/۰۷

 

1- هرگز روی سیستمی که کمتر از 2 گیگ RAM داره ویندوز نسخه 64 بیتی نصب نکنید. چون اینکار بیشتر باعث کند شدن ویندوز میشه.

ویندوزهای نسخه 64 بیتی به حداقل ۴ گیگ RAM نیاز دارن.

 

2- حتاالمکان روی سیستمی که 8 گیگ یا بیشتر RAM داره ویندوز نسخه 32 بیتی نصب نکنید. درغیراینصورت فقط 4 گیگ RAM توسط CPU قابل دستیابی هستش و بقیه RAM بدون استفاده باقی می مونن.

 

3- درسیستم های BIOS یا پارتیشن نوع MBR/DOS، بهتره در حین نصب ویندز فقط درایو نصب ویندوز رو پارتیشن بندی کنید و بقیه درایوهارو از داخل خود ویندوز(بعد از نصبش) پارتیشن بندی کنید. اون هم از نوع Logical.

با اینکار پارتیشن های Primary بیشتری براتون باقی می مونه... و برای نصب سیستم عامل دوم و سوم به مشکل نمی خورید.

نکته: این موضوع راجب سیستم های UEFI یا پارتیشن نوع GPT صدق نمیکنه.

 

3- هرگز از درایو اصلی ویندوز(که ویندوز داخلش نصبه) برای ذخیره اطلاعت شخصی(مثل عکس، فیلم، موسیقی و...) استفاده نکنید.

اگر مشکل جدی برای ویندوز یا این درایو پیش بیاد معمولاً اطلاعتتون هم پاک میشه.

 

4- اگر از لپ تاپ استفاده می کنید، برای افزایش قدرت لپ تاپ و استفاده از تمام توان دستگاه اون رو به حالت Maximum performance تنظیم کنید.

نکته: در زمانهایی که لپ تاپ از باطری بجای برق مستفیم تغذیه میکنه، از حالت Maximum battery life یا Battery saver استفاده کنید.

در ویندوز Xp و ویندوز 7: به مسیر Start -> Control panel برید و در پنجره باز شده گزینه System and Security رو انتخاب کنید. سپس روی گزینه Power Options کلیک و در پنجره جدید Maximum performance رو انتخاب کنید.

در ویندوز 8 و ویندوز 10: در سمت راست نوار استارت روی آیکون باطری کلیک کنید سپس گزینه Maximum performance رو انتخاب کنید.

 

5- بصورت پیشفرض، ویندوز DLL برنامه های باز و بعد بسته شده رو [بخاطر افزایش سرعت باز کردن مجدد اون برنامه] unload نمی کنه. که اینکار باعث اشغال حافظه و گاهی کندی میشه. برای تغییر این رفتار، میتونید دستورالعمل زیر رو انجام بدید:

- ابتدا برنامه RegEdit رو در مسیر X:\Windows\RegEdit پیدا و اجرا کنید.

- سپس به آدرس HKEY_LOCAL_MACHINE -> Software -> Microsoft -> Windows -> CurrentVersion -> Explorer برید.

- حالا بر روی صفحه راست کلیک و گزینه New -> DWORD(X bit) value رو انتخاب کنید. و نامش رو بذارید AlwaysUnloadDLL

- در آخر روی همین گزینه دوبار کلیک و Value data رو 1 قرار بدید.

  • یوشا آل ایوب