می گویند: 1400 سال است که مسلمانان یکدیگر را می کشند، اما بی خدایان در حال اختراع کردن هستند
این جمله مزخرفی بیش نیست، دین مانعی برای اختراع کردن ندارد بلکه بزرگترین دانشمندان و مخترعین دنیا دیندار و معتقد بودند
1- بی خدایان همه ۱۴۰۰ سال اخیر را پیشرفت نداشتند و تا حدود ۵۰۰ سال پیش، در اوج فقر فکری و علمی بودند
2- مسلمانان با تکیه بر تعالیم الهی در بهره گرفتن از عقل و دانش، بیش از هزار سال پرچمدار پیشرفت و ترقى جهان بودند و دیگران از جمله بی خدایان، دانش خود را از مسلمانان می گرفتند
شیخ ابو علی سینا، عباس بن فرناس، جابرابن حیان شاگرد امام صادق، خوارزمی، عبد اللطیف، ابن الهیثم، کرجی، عمر خیام، غزالی، الکیندوز، فارابی، ابوکامل مصری، پروفسور سمیعی، پروفسور مهدی گلشنی و...
http://yon.ir/1400s1
3- جنگ مخصوص مسلمانان نیست و اتفاقاً بی خدایان بیشتر گرفتار جنگ بوده اند. فقط تعداد کشته های جنگ جهانی دوم که در اروپا اتفاق افتاد از همه کشته های خاورمیانه در این ۱۴۰۰ سال بیشتر است. بیش از 60 میلیون نفر
https://en.wikipedia.org/wiki/World_War_II_casualties
http://yon.ir/1400s2
4- درگیری های خاورمیانه به خاطر دینداری مردمش نیست، بلکه کشورهای استعمارگر و مستکبر برای منافع خود، چند قرن است که اختلاف، تجزیه طلبی و جنگ را در آن ترویج می دهند
http://yon.ir/1400s3
http://yon.ir/1400s4
5- کشتن هیچ بیگناهی در اسلام روا نیست و کیفر اخروی و قصاص در دنیا را در بر دارد! آنچه در قرآن و سنت پیامبر درباره جنگ آمده، همگی ناظر به جنگ با کافران حربی، آنهم در معرکه جنگ است
http://yon.ir/1400s5
6- اسلام هرجا جنگی رخ دهد، گروه متجاوز را محکوم و گروهی که از خود دفاع میکند را مورد تحسین قرار می دهد (حج: ۳۹ و ۴۰)
http://yon.ir/1400s6
7- همه غربیها بی خدا نیستند بلکه در آمریکا 80% مردم معتقد به خدا هستند. نسبت دادن همه پیشرفت های علمی به بی خدایان دروغ است چراکه پاسکال، گالیله، نیوتن، پاستور و... همه معتقد به خدا و دین الهی بوده اند
منبع: http://shayeaat.ir
CLASSPATH: یک متغیر در Environment variables و حاوی کتابخانه و dependency هایی هستش که هنگام Run-time و Compile-time مورد استفاده برنامه های جاوا قرار میگیره.
این متغیر برای استفاده System ClassLoader ماشین Java طراحی شده و حاوی کلاسهای کامپایل شده bytecode(در Java با پسوند class یا JAr) و کلاسهای کامپایل شده nativecode(در C با پسوند o. یا obj.) هستش. درواقع CLASSPATH بخشی از پکیج پلتفرم Java هستش و به برنامه java یا javac اعلام میکنه که کلاسهای کامپایل شده در کجا قرار دارن.
بصورت پیشفرض، محل فیزیکی CLASSPATH به پوشه "جاری پروژه" و پوشه lib در JDK/JRE نصب شده اشاره میکنه. اما اگر بخوایید میتونید این مسیر رو تغییر بدید.
نکته: با اضافه کردن کتابخانه به محل فیزیکی CLASSPATH، کتابخانه مورد نظر در تمام پروژه ها (system-wide) در دسترس قرار میگیرن، لیکن بصورت Relative link.
توجه: هرگز بصورت دستی مسیرهای jre/lib و jre/lib/ext رو داخل متغیر CLASSPATH اضافه نکنید، این مسیرها توسط ماشین جاوا بصورت خودکار پیمایش خواهند شد.
نکته: مقدار متغیر CLASSPATH میتونه توسط پارامتر -cp
در برنامه java و javac یا پراپرتی Class-Path
در فایل manifest.mf تغییر پیدا کنه. اما در نهایت پراپرتی Class-Path
نسبت به متغیر CLASSPATH و پارامتر -cp
اولویت داره! یعنی Class-Path property > CLASSPATH > -cp
نکته 2: در صورت وجود یک کتابخانه تکراری در همه مسیرهای موجود در متغیر CLASSPATH، همیشه اولین مسیر انتخاب خواهد شد.
نکته 3: تنظیمات متغیر CLASSPATH در برنامه IntelliJ IDEA در مسیر File -> Project structure -> Global libraries قرار داره و در برنامه Eclipse در مسیر Preferences -> [Java/C] -> Build path -> Classpath قرار داره.
تشریح ClassNotFoundException و NoClassDefFoundError:
- مشکل ClassNotFoundException: از نوع Exception هستش و زمانی پرتاب میشه که ماشین جاوا بصورت Dynamic سعی در load کردن کلاس موردنظر حین Run-time از مسیر CLASSPATH کنه اما نتونه پیداش کنه.
- مشکل NoClassDefFoundError: از نوع Error هستش و زمانی بوجود میاد که کلاس موردنظر در مسیر CLASSPATH حین Compile-time وجود داره اما حین Run-time وجود نداره.
Build path: مسیری هست که برای تولید/compile پروژه طراحی شده، حاوی سورس ها و کتابخانه های پروژه هستش، بخشی از workspace ویرایشگر هستش، به ویرایشگر/IDE اعلام میکنه که فایلهای سورس پروژه در کجا قرار دارن... این مسیر مخصوص ویرایشگر/IDE هستش و در هر ویرایشگری به محل متفاوتی اشاره میکنه. (مثل VSCode, Eclipse, IntelliJ IDEA, Borland...)
Include path: مسیر هست که برای parse کردن فایلهای پروژه طراحی شده، میتونه حاوی فایلهای header، سورس یا inc باشه، کد completion ویرایشگر رو اعمال میکنه و کلاً برای پیدا کردن محتوا و منابع استفاده شده در پروژه هستش.
نکته: در Include path آدرس های path داده شده باید بصورت relative باشن تا بتونن توسط IDE پردازش بشن. (relative path = ./file.jpg, absoloute path = c:\www\root\test\file.jpg)
این دیاگرام رو درست کردم تا روند(internals) کامپایل، تولید و اجرای برنامه های جاوا رو نشون بده:
برای بزرگنمایی کلیک کنید
Java internals, Java structure, JVM internals, ساختار جاوا، ساختمان جاوا
یکی از کاملترین و دقیق ترین دیاگرامهای Java/JVM internals موجود در اینترنت هستش
اطلاعات بیشتر:
http://blog.jamesdbloom.com/JVMInternals.html
💡 مقایسه سرعت الگوریتم 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"
ظاهراً در PHP هرچیزی بعد از دستور exit
بصورت ناقص(؟) پردازش میشه ولی بصورت کامل حافظه مورد نیازش رو allocate میکنه...
خروجی یک صفحه ساده:
<?php echo memory_get_usage(); // 217992
خروجی یک صفحه متغیر دار ولی exit
شده:
<?php echo memory_get_usage(); // 220552 exit; // <---------- !! $simpleVar = 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabcdabcdabcdabcdabcdabcd'; $simpleVar .= 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabcdabcdabcdabcdabcdabcd'; $simpleVar .= 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabcdabcdabcdabcdabcdabcd'; $simpleVar .= 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabcdabcdabcdabcdabcdabcd'; $simpleVar .= 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabbcdabcdabcdabcdabcdabcdabcd'; echo $simpleVar;
مسله indentation در کدنویسی جزییه و بیشتر شخصیه... ولی گفتن نکاتی درموردش خالی از لطف نیست
اول اینکه بیشتر Coding-style های موجود در اینترنت بروزرسانی نمیشن یا برای ویرایشگرها و مانیتورهای قدیمی طراحی شدن... یا حتی ناقص هستن! دوم اینکه چقدر خوب بود اگر مرجع رسمی براشون وجود داشت تا یک الگو، الگوی همگان میشد. نه اینکه هر شرکت و تیمی سبک انحصاریش رو طراحی و تعیین کنه و اسمشو بذاره قرارداد/convention رسمی
فکر کنید برنامه نویسایی که با دو یا چند زبان مختلف برنامه نویسی میکنن، برحسب عادت چقدر براشون سخته که از قوائد مختلف پیروی کنن...
Tab:
Space:
پیشنهاد من: SPACE با سایز 3 کاراکتر
1- فراموش نکنید که مقدار صفت android:updatePeriodMillis
در تگ <appwidget-provider
فایل xml/widget_info.xml بیانگر تایمری هست که کالبک onUpdate
کلاس ویدجت صدا زده میشه.
2- در metadata ویدجت، مقدار صفت android:minHeight
و android:minWidth
تعیین کننده حداقل اندازه ویدجت هستش که باید 72dp (یعنی 1x1) باشه. ولی صفت android:layout_width
و android:layout_height
در layout ویدجت، تعیین کننده اندازه کنونی ویدجت هستش.
3- از انجایی که List
متدی برای اضافه کردن عنصر نداره و سایزش هم ثابت هست، برای تبدیل Array
به ArrayList
باید به این روش عمل کنید:
ArrayList<String> _arrayList = new ArrayList<String>(Arrays.asList(myArray));
4- برای چک کردن وجود یک مقدار در آرایه کافیست به این صورت عمل کنید:
Arrays.asList(myArray).contains(targetValue);
5- نکته جزیی: فراموش نکنید که HashMap
در جاوا در واقع همون data structure هستش و نه آرایه!