یوشا

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

یوشا

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

یوشا

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

بایگانی
تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران

۷۴ مطلب با موضوع «کامپیوتر :: نرم افزار» ثبت شده است

1- همیشه از تابع mysql_tquery() بجای mysql_query() استفاده کنید. تابع mysql_tquery از نوع multi-thread هستش و میزان وقفه/lag در سرور رو بسیار کاهش میده. (عملیات رو بین Thread ها تقسیم میکنه)

 

2- درصورتی که از سیستم های ضد hack/cheat استفاده می کنید، همیشه EnableStuntBonusForAll رو 0 قرار بدید.

در غیراینصورت سرور کاربر رو هکر قلمداد میکنه.

 

3- توسط پلاگین crashdetect میتونید crash های سرور رو ردیابی کنید.

https://github.com/Zeex/samp-plugin-crashdetect

نکته: برای استفاده از این پلاگین در ویندوز، مطعمن بشید که VC++ runtime 2010 - VC10 نگارش x86 و x64 رو نصب دارید.

 

4- همیشه دستورات AddPlayerClass() رو در مختصات مناسب و قابل دسترس تنظیم کنید تا در صورت بروز باگ یا مشکلات شبکه ای(packet lost) کاربر به موقعیت مناسبی teleport بشه.

۰ نظر ۹۷/۰۵/۲۲
یوشا آل ایوب

💡مقایسه سرعت الگوریتم binary search مقابل الگوریتم linear search برای آرایه های مرتب شده(sorted)

(برای آرایه های عددی سنگین)

 

$needle = range(1, 500000);

 

❌ Linear search algorithm

 

function search(array $numbers, $needle)
{
   $_totalItems = count($numbers);

   for ($i = 0; $i < $_totalItems; $i ++)
   {
      if ($numbers[$i] === $needle)
      {
         return TRUE;
      }
   }

   return FALSE;
}

 

📊 نتیجه(ms)
0.031199932098389
0.031199932098389
0.031199932098389
0.031199932098389
0.031199932098389
0.031199932098389
0.031200170516968
0.031200170516968
0.046799898147583
0.046800851821899

 


✅ Binary search algorithm

 

function search(array $numbers, $needle)
{
   $_low = 0;
   $_high = count($numbers) - 1;

   while ($_low <= $_high)
   {
      $_middle = (int) (($_low + $_high) / 2);
      if ($numbers[$_middle] > $needle)
      {
         $_high = $_middle - 1;
      }
      else if ($numbers[$_middle] < $needle)
      {
         $_low = $_middle + 1;
      }
      else
      {
         return TRUE;
      }
   }

   return FALSE;
}


📊 نتیجه(ms)
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0

 

x64 Hardware
32bit OS
PHP 5.6 CLI

کد از کتاب "PHP 7 Data Structures and Algorithms"

۰ نظر ۹۷/۰۵/۰۲
یوشا آل ایوب

در Java چندین کلاس برای نوشتن و خواندن ورودی و فایلهای متنی وجود داره... اما کدام کلاس مناسبتره، کدام سریعتره و کدام نیازهای کاربر رو برطرف میکنه؟

 

  • کلاس BufferedReader

برای خواندن ورودی/فایل stream بصورت خط به خط از نوع string.

دارای بیش از 20 متد public داخلی.

پشتیبانی از متد close() برای بستن file handle.

این کلاس thread-safe هست. (میتوان BufferedReader رو در بین thread ها share کرد)

توانایی خواندن ورودی از System.in (یا stdin)

دارای حافظه buffer با سایز 8 کیلوبایت.

میتواند کلاس FileReader و InputStreamReader رو بعنوان reader در سازنده دریافت کند.

این کلاس synchronized هست.

پیاده سازی شده در JDK 1.1 و جدیدتر.

دارای کمترین system calls و کاملاً بهینه.

در صورت وقوع استثنا IOException اونرو throw میکنه.

عدم پشتیبانی از Encoding بصورت مستقیم.

زیر مجموعه پکیج java.io.

دارای پرفورمنس بالا نسبت به کلاسهای Scanner و FileReader.

توانایی خواندن ورودی فقط با نوع string.

مناسب برای محیط های multi-thread.

مناسب برای خواندن متن/ورودی طولانی بصورت string و خط به خط. (مثل فایلهای log, books)

 

 

  • کلاس Scanner

برای خواندن ورودی/فایل بصورت parse کردن داده های نوع primitive. (مثل int, long, double, string)

دارای بیش از 60 متد public داخلی.

پشتیبانی از متد close() برای بستن file handle.

این کلاس thread-safe نیست. (نمیتوان Scanner رو در بین thread ها share کرد)

توانایی خواندن ورودی از System.in (یا stdin)

دارای حافظه buffer با سایز 1 کیلوبایت.

میتواند کلاس FileReader و BufferedReader رو بعنوان reader در سازنده دریافت کند.

این کلاس synchronized نیست.

پیاده سازی شده در JDK 1.5 و جدیدتر.

دارای system calls پایین و تقریباً بهینه.

در صورت وقوع استثنا IOException اونرو مخفی میکنه.

عدم پشتیبانی از Encoding بصورت مستقیم.

زیر مجموعه پکیج java.util.

دارای پرفورمنس پایین نسبت به کلاسهای BufferedReader و FileReader.

توانایی خواندن ورودی با نوع int, long, string, float...

به دلیل استفاده از regular expression حافظه/CPU بیشتری نسبت به کلاس BufferedReader مصرف میکنه.

مناسب برای خواندن متن/ورودی و parse کردنش توسط delimiter. (مثل فایلهای xml, ini, config, json)

 

  • کلاس FileReader

برای خواندن فقط فایل از نوع string.

دارای 20 متد public داخلی.

پشتیبانی از متد close() برای بستن file handle.

عدم توانایی خواندن ورودی از System.in (یا stdin)

بدون قابلیت buffer.

پیاده سازی شده در JDK 1.1 و جدیدتر.

دارای بیشترین system calls و بسیار کند.

در صورت وقوع استثنا IOException اونرو throw میکنه.

عدم پشتیبانی از Encoding. (درواقع پیشفرض platform رو استفاده میکنه)

زیر مجموعه پکیج java.io.

دارای پرفورمنس بسیار پایین نسبت به کلاسهای Scanner و BufferedReader.

توانایی خواندن ورودی فقط با نوع string.

بهتر است بصورت مستقیم استفاده نشود.

۲ نظر ۹۷/۰۴/۱۶
یوشا آل ایوب
  • خیانت رو اونایی کردن که مدعی بصیرت، سواد و آینده نگری هستن اما 10 سال پیش نتونستن این روزهارو پیش بینی کنن تا بتونن درست پیشگیری کنن! حتی با وجود اندک پیامرسانهای خارجی مثل YAHOO, ICQ, Paltalk که همگانی هم نشده بودن، میدونستن آینده مجازی از آن اینهاست اما پیشگیری و فرهنگ سازی نکردن!
  • خیانت رو اونایی کردن که 10 سال پیش از توسعه دهندگان داخلی این صنعت و کسانی که ایده نرم افزارهای ملی/داخلی رو در سر می پروروندن حمایت نکردن!
  • خیانت رو اونایی کردن که با انتخاب اشتباه، مسئول خائن رو روی کار اوردن و اون مسئول، مسئولین بیسواد، بی تخصص، دزد و صرفاً سیاستمدار رو روی کار اورد!
  • خیانت رو اونایی کردن که سالها پیش زمانیکه سیل پیامرسانهای داخلی به کشور هجوم اوردن، همون زمان جلوگیری نکردن و حالا که بخشی از زندگی مردم شدن، بنابه مصلحت تصمیم به مسدود سازیشون گرفتن و انتظار هم دارن مردم استقبال کنن! نوش دارو بعد مرگ سهراب...
  • خیانت رو اونایی کردن که ادعای کارشناس و کاربلد بودن دارن اما پیرامون این فاجعه و تسخیر بازار داخلی توسط محصول خارجی رو پرده برداری نکردن و وقتی هم که متوجه شدن سکوت کردن!
  • خیانت رو اونایی کردن زمانیکه امثال تلگرام وارد کشور شدن، اینها رو شناسایی، ریشه یابی و تحلیل نکردن تا زودتر به عمق فاجعه پی ببرن و زودتر اقدام کنن! نه حالا که با اقدامشون دشمن تراشی کنن! نوش دارو بعد مرگ سهراب...
  • خیانت رو متخصصانی کردن که در صنعت نرم افزار مشغولن اما یک قدم مثبت برای پیشرفتش برنداشتن و حتی از ساده ترین نوع خدمت که فرهنگ سازیه کوتاهی کردن!
  • خیانت رو متخصصانی کردن که در صنعت نرم افزار مشغولن و صرفاً از آب گل آلود ماهی میگرن!
  • خیانت رو اونایی کردن که در صنعت نرم افزار مشغولن و نام نرم افزار ایرانی یا ملی رو بدلیل بیسوادی و فقط کسب شهرت و منافع شخصی خدشه دار کردن!
  • خیانت رو اون مردمانی کردن که شعار حمایت از تولید داخلی سر میدن، اما حاضر نیستن دست از محصول خارجی بکشن و پشت تولیدکننده های داخلی/نرم افزار بایستن! و حتی تمسخر و تحقیرشون میکنن!!
  • خیانت رو اون مردمانی کردن که شعار حریم خصوصی سَر میدن، اما راضی هستن که اطلاعاتشون در اختیار سازمانها و نهاد های خارجی قرار بگیره! حتی سازمانهای جاسوسی و تبه کاری...
  • و خیانت رو اون مردمانی کردن که در ظاهر دلسوز بیت المال هستن، اما وقتی نوبت به دست کشیدن از محصول خارجی برای جلوگیری از خروج صدها میلیارد تومن در ماه که میرسه، با بیسوادی و تعصب تمام عقب نشینی میکنن و کماکان به استفاده از محصول خارجی ادامه میدن! چیزی که در سال حتی به هزاران میلیارد تومن هم میرسه!!

 

جهل مدرن...

۱ نظر ۹۷/۰۲/۰۹
یوشا آل ایوب

 

کتابخانه OkHTTP

توسط Square تولید شده. مناسب برای Streaming و استفاده General مبتنی بر HTTP. پشتیبانی از POST, GET, UPLOAD. دارای مستندات آموزشی. زیربنای پیشفرض Retrofit و Picasso. یکی از زیربناهای Volley هستش. دارای disk cache. پشتیبانی از conn pooling. از پروتکل SPDY پشتیبانی می کنه. از اندروید 4.4 به بعد بصورت builtin در زیربنای اندروید استفاده شده. پشتیبانی از NewIO و...

 

کتابخانه Retrofit

توسط Square تولید شده. مناسب برای RESTful API / Web Service. پشتیبانی از POST, GET, PUT, DELETE, Multipart. دارای مستندات آموزشی. مبتنی بر کلاینت OkHTTP. دارای disk cache. پشتیبانی از async با کمترین کد. دارای cancellation و retryy برای درخواست ها. پشتیبانی از Dynamic URL. کمی کندتر از Volley اما سریعتر از AsyncTask هستش. دارای مفسر پیشفرض JSON و تبدیلش به POJO بکمک GSON.  پشتیبانی از NewIO. پشتیبانی از فعالیت های background.

 

کتابخانه Volley

توسط Google پشتیبانی شده. مناسب برای استفاده General و کار با تصاویر. پشتیبانی از POST, GET, PUT, DELETE. دارای مستندات آموزشی. دارای کلاینت های OkHTTP, Apache, HttpUrlConnection. دارای memory cache.  پشتیبانی از conn pooling. پشتیبانی از async با کمترین کد. دارای prioritization, cancellation, retrying برای درخواست ها. پشتیبانی از Dynamic URL. کمی سریعتر از Retrofit هستش. پشتیبانی از Image loading. دارای bitmap caching. سازگاری مناسب با activity lifecycle. دارای memory error handing مناسب. هندل کننده duplicate calls. استفاده نسبتاً آسان.

 

البته اگر بدنبال کتابخانه های سبکتر و کوچیکتر HTTP می گردید این گزینه ها هم میتونن انتخاب خوبی باشن:

LoopJ's android-async-http (HttpClient)
http://loopj.com/android-async-http/

Fast-Android-Networking
https://github.com/amitshekhariitbhu/Fast-Android-Networking

jus
https://github.com/apptik/jus

RoboSpice
https://github.com/stephanenicolas/robospice

 

این نکته رو هم در نظر داشته باشید که هرکدوم مزایا و معایب خودشونو دارن و باید درجای مناسبش کتابخانه مناسب رو انتخاب کنید.

۱ نظر ۹۷/۰۱/۰۳
یوشا آل ایوب

 

ابتدا باید بگم استاندارد رسمی برای سبک ها و workflow ها وجود نداره، اما در این مقاله سعی می کنم از تجربیاتم، قوائد همگانی و معمولترین موارد موجود در Atlassian، Kernel و git manpage استفاده کنم...

 

مقالات مرتبط:

دانلود، نصب و راه اندازی Git در ویندوز

ساخت SSh key در ویندوز

ساخت SSh key در لینوکس

کدام پروتکل: //:git یا //:ssh یا //:https

 

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

  • Branch / انشعاب
  • Commit
  • تنظیم / config
  • گوناگون

۰ نظر ۹۶/۱۲/۱۷
یوشا آل ایوب

 

در ادامه مقاله قبلیم که شماره یک "نکات و اصول مهم در برنامه نویسی PHP" بود، در این مقاله شماره دو همین موضوع رو ارائه میدم...

 

1- هنگام Multi-thread کردن کدهاتون فراموش نکنید برای دسترسی به اشیاء lazy-initialize(یا همون load on demand) وضعیت نهایی شی باید synchronize باشه تا با مشکل race condition مواجه نشید.

 

2- برای نرمال سازی ستونها و جلوگیری از افزونگی/redundancy داده باید از اصول زیر پیروی کنید:

- هیچ ستونی نباید بیشتر از یک نوع/type داده رو نگهداری کنه. (مثل int + char + float...)

- هیچ ستونی نباید داده های تکراری/مشابه به دیگر ستون ها رو در خودش نگهداری کنه.

- داده هارو در جداول مختلف نگهداری کنید و درصورت لزوم اونهارو توسط کلید خارجی/foreign key بهم متصل کنید.

 

3- جهت افزایش پرفورمنس، همیشه کلاس والد و اینترفیس رو در خطوط قبل از کلاس ارث بر تعریف کنید. در غیراینصورت موتور PHP برای پیدا و پردازش کردن کلاس والد مجبور به انجام عملیات های اضافی خواهد شد. (بر اساس OpCode تولید شده)

interface IData 
{
}

class MyClass implements IData
{
}

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

 

4- یادتون باشه که Dependency Injection نه تنها از طریق Constructor، بلکه از طریق Setter, Interface و Property هم قابل انجامه.

نکته: زمانی از نوع Constructor استفاده کنید که کل کلاس نیازمند به اون dependency هستش یا شی dependency نباید در طول life time تغییر بکنه.

 

5- آیا می دونید تابع runkit_function_remove علاوه بر حذف قید تابع(function table)، مقدار حافظه اشغال شده توسط تابع رو هم آزاد می کنه؟

۴ نظر ۹۶/۱۰/۲۱
یوشا آل ایوب

 

این تصویر رو درست کردم تا روند(internals) تفسیر، کامپایل و اجرای سورس های PHP رو نشون بده:
 

برای بزرگنمایی کلیک کنید

php-internals

لینک Stackoverflow.com

 

کاملترین و دقیق ترین چارت PHP internals موجود در اینترنت! heart

۱ نظر ۹۶/۰۹/۰۸
یوشا آل ایوب

 


CLASSPATH: برای استفاده ClassLoader های خود Java طراحی شده و حاوی bytecode(در Java با پسوند class یا JAr) و nativecode(در C با پسوند o. یا obj.) های کامپایل شده هستش. درواقع بخشی از پکیج اصلی Java/C هستش و به برنامه java و javac اعلام میکنه که فایلهای کامپایل شده در کجا قرار دارن.

بصورت پیشفرض، محل فیزیکی CLASSPATH به پوشه "جاری" و پوشه lib در JDK/JRE نصب شده اشاره میکنه. اما اگر بخوایید میتونید این مسیر رو تغییر بدید.

توجه: با اضافه کردن کتابخانه به CLASSPATH، کتابخانه مورد نظر در تمام پروژه ها قابل استفاده هستش، لیکن بصورت Relative link.

نکته: مقدار CLASSPATH میتونه توسط پارامتر -cp در برنامه java و javac و خاصیت Class-Path در فایل manifest.mf تغییر پیدا کنه. اما نهایتاً خاصیت Class-Path در فایل manifest.mf نسبت به CLASSPATH و پارامتر -cp اولویت داره!

نکته 2: همیشه علاوه بر مسیر lib خود JDK/JRE، مسیر جاری رو هم توسط نقطه . در CLASSPATH اضافه کنید.

نکته 3: در صورت وجود کتابخانه در همه مسیرهای موجود در CLASSPATH، همیشه اولین مسیر انتخاب خواهد شد.

نکته 4: این تنظیم در برنامه Eclipse در مسیر Preferences -> [Java/C] -> Build path -> Classpath قرار داره.

- مشکل ClassNotFoundException: از نوع Exception هستش و زمانی پرتاب میشه که برنامه جاوا بصورت Dynamic سعی در load کردن کلاس موردنظر حین Run-time از مسیر CLASSPATH کنه اما نتونه پیداش کنه.

- مشکل NoClassDefFoundError: از نوع Error هستش و زمانی بوجود میاد که کلاس موردنظر در مسیر CLASSPATH حین Compile-time وجود داره اما حین Run-time وجود نداره.

 

Include path: برای تفسیر/parse پروژه(مثل C یا PHP) طراحی شده، حاوی فایلهای header، سورس یا inc هستش، کد completion رو اعمال میکنه و کلاً برای پیدا کردن محتوا و منابع استفاده شده در پروژه هستش.
نکته: البته path منابع باید بصورت relative باشه تا توسط Eclipse پردازش بشه. (relative path = ./file.jpg, absoloute path = c:\www\root\test\file.jpg)

 

Build path: برای ساخت/compile پروژه طراحی شده، حاوی سورس ها و کتابخانه های پروژه هستش، در مسیر Project -> Properties -> Build path قرار داره، بخشی از workspace ویرایشگر هستش، به ویرایشگر/IDE اعلام میکنه که فایلهای سورس پروژه در کجا قرار دارن... همچنین فقط مختص ویرایشگر/IDE هستش و در هر ویرایشگری به محل متفاوتی اشاره میکنه. (مثل VS, Eclipse, Borland...)

۰ نظر ۹۶/۰۶/۰۴
یوشا آل ایوب

 

این تصویر رو درست کردم تا روند(internals) کامپایل، تولید و اجرای برنامه های جاوا رو نشون بده:
 

برای بزرگنمایی کلیک کنید

JNI, JVM internal, Class Loader, Execution Engine


کاملترین و دقیق ترین چارت Java/JVM internals  موجود در اینترنت! heart

نکته اینکه درمورد جاوای داخل اندروید روال به همین شکله منتها از Java bytecode به بعد:
1- توسط ابزار DEx Compiler اندروید، بایت کدها به Dalvik bytecode تبدیل میشن.
2- بجای پکیج JRE، اندروید از DVM/ART استفاده میکنه و همینجا هم اپلیکشن رو اجرا میکنه.

۲ نظر ۹۶/۰۵/۱۰
یوشا آل ایوب