PDA

View Full Version : سوال: ساخت رشته ی تصادفی برای فعال سازی حساب کاربری (بدون تکرار)



2undercover
شنبه 22 مهر 1391, 15:17 عصر
سلام همون طور که از عنوان معلومه می خوام یک رشته تصادفی بسازم برای وقتی که کسی در سایت ثبت نام کرد اون رشته به ایمیلش ارسال شه و با اون حساب کاربریش رو فعال کنه.حالا توابع ساخت رشته برای اینکار زیاده ولی نمی خوام تکرار شه یعنی کد هر کس متفاوت باشه.

ممنون.
ــــــــــــــــــــــ
موفق باشید!!!

colors
شنبه 22 مهر 1391, 18:44 عصر
درود

میتونی ساعت و تاریخ لحظه، آی پی و یک رشته تصادفی رو بگیری و توسط md5 به یک کد 32 کاراکتری تروتمیز تبدیل کنی.


$key = date("y-m-d H:i:s");
$key .= $_SERVER['REMOTE_ADDR'];
$key .= rand(11,1111);

$final_key = md5($key);

اینجوری امکانش وحشتناک کمه که تکراری بشه.

azowghi
شنبه 22 مهر 1391, 22:07 عصر
سلام
فقط تابع
time() کارت رو راه میندازه

چون یونیکه کفایت میکنه میتونی قبل یا بعدش یه کلمه تصادفی بندازی که فقط عدد نباشه

iradata
شنبه 22 مهر 1391, 22:16 عصر
من برای این کار همیشه نام کاربری روو md5 میکنم و در یک فیلد جداگونه نگهداری می کنم و به ایمیل کاربر ارسال می کنم .

Unique
یک شنبه 23 مهر 1391, 01:05 صبح
من برای این کار همیشه نام کاربری روو md5 میکنم و در یک فیلد جداگونه نگهداری می کنم و به ایمیل کاربر ارسال می کنم .
اینجوری خیلی راحت میشه همه کاربرای شما را فعال کرد ! ;) کلا بهتره از همون سیستم های random استفاده بشه !

saeidpsl
یک شنبه 23 مهر 1391, 01:23 صبح
سلام
باید یه جدول کد فعال سازی درست کنی بعد رشته تصادفی رو با جدول چک کنه اگه در جدول مثلش نبود که ارسال بشه اگه مثلش بود یه رشته تصادفی دیگه درست بعد دوباره چک کن همین

برای رشته تصادفی از اینجا میتونی کمک بگیری

http://php.net/manual/en/function.rand.php

:چشمک:

2undercover
یک شنبه 23 مهر 1391, 13:14 عصر
سلام
باید یه جدول کد فعال سازی درست کنی بعد رشته تصادفی رو با جدول چک کنه اگه در جدول مثلش نبود که ارسال بشه اگه مثلش بود یه رشته تصادفی دیگه درست بعد دوباره چک کن همین

برای رشته تصادفی از اینجا میتونی کمک بگیری

http://php.net/manual/en/function.rand.php

:چشمک:

بله این راه به ذهنم رسید ولی بار سرور میره بالا و فک نکنم استاندارد باشه.
یک چیز دیگه من بعضی وقتا یک تاپیک می بینم تا یک ماه هیچکس با این که سوال ساده ای پرسیده جوابشو نمی دن ولی من دیروز تاپیک زدم الان 6 تا جواب خورد.خیلی ممنون.
ـــــــــ

موفق باشید!!!

2undercover
یک شنبه 23 مهر 1391, 13:17 عصر
یک سوال دیگه این که میشه توی یک لحظه دو یا چند درخواست به سرور بره یعنی اگه از تابع time() استفاده کنی امکان ارسال چند درخواست وجود داره یا همیشه یک ثانیه فاصله هست!آخه آیپی اونایی که با جی پی آر اس و اینا میان یکیه.

2undercover
یک شنبه 23 مهر 1391, 14:20 عصر
یک چیز هم من پیدا کردم تابع microtime() هست که به صدم ثانیه بر میگردونه اینجوری احتمال تکرار 0.0000000000000000000001 درصد میشه.:متعجب:

saeed_htb
یک شنبه 23 مهر 1391, 14:47 عصر
اینجوری خیلی راحت میشه همه کاربرای شما را فعال کرد ! ;) کلا بهتره از همون سیستم های random استفاده بشه !
دوست عزیز می تونی نام کاربری رو با یک رشته الحاق کنی و md5 کنی و ازش برای فعالسازی استفاده کنی

2undercover
یک شنبه 23 مهر 1391, 16:04 عصر
من اینجوری درست کردم که احتمال تکرار تقریبا 0 درصده.


function rand_actkey($username)
{
$str = date("y-m-d H:i:s");
$str .= $_SERVER['REMOTE_ADDR'];
$str .= rand(1,9823);
$str .= microtime(true);
$str .=$username;
$final_str = md5($str);
return $final_str;
}

tehro0n
یک شنبه 23 مهر 1391, 19:56 عصر
من اینجوری درست کردم که احتمال تکرار تقریبا 0 درصده.


function rand_actkey($username)
{
$str = date("y-m-d H:i:s");
$str .= $_SERVER['REMOTE_ADDR'];
$str .= rand(1,9823);
$str .= microtime(true);
$str .=$username;
$final_str = md5($str);
return $final_str;
}


مگه داری برای ناسا فعال سازی می سازی؟ :D
ip رو با میکرو تایم حذف کن، به جای راندوم هم نام سایت خودت رو با علامتی چیزی بگذار، اینجوری کاربر تا آخر امروز فرصت داره که فعال سازی خودش رو انجام بده و نیازی به session یا ذخیره اطلاعات در دیتابیس نیست
البته قسمت زمان رو هم باید از تاریخ حذف کنی، یا همین کار ها هم احتمال تکرار 0 هست، چون یوزر توش هست، و این که مخرب ها هم نمی دونند نام سایت با علامتی خاص و .. غیره رو گذاشتی که اکانت ها رو فعال کنند

eshpilen
دوشنبه 24 مهر 1391, 08:41 صبح
درود

میتونی ساعت و تاریخ لحظه، آی پی و یک رشته تصادفی رو بگیری و توسط md5 به یک کد 32 کاراکتری تروتمیز تبدیل کنی.


$key = date("y-m-d H:i:s");
$key .= $_SERVER['REMOTE_ADDR'];
$key .= rand(11,1111);

$final_key = md5($key);

اینجوری امکانش وحشتناک کمه که تکراری بشه.
این کدی که گذاشتی از نظر امنیتی در مقابل حمله های Brute-force فوق العاده ضعیفه، چون تعداد حالتهای ممکن اون خیلی کمه. توجه داشته باش که اونی که Brute-force میکنه همون کاربریه که لینک فعال سازی بهش ارسال شده. بنابراین IP از پیش لو رفته و فقط میمونه تعداد حالتهای rand که واقعا کمه.

eshpilen
دوشنبه 24 مهر 1391, 08:57 صبح
سلام
باید یه جدول کد فعال سازی درست کنی بعد رشته تصادفی رو با جدول چک کنه اگه در جدول مثلش نبود که ارسال بشه اگه مثلش بود یه رشته تصادفی دیگه درست بعد دوباره چک کن همین

برای رشته تصادفی از اینجا میتونی کمک بگیری

http://php.net/manual/en/function.rand.php

:چشمک:
نیازی به چک کردن تکراری نبودن در جدول نیست.
بلکه باید هر رشتهء تصادفی که تولید میشه و در جدولی ذخیره میشه، همراه با یک فیلد auto incerement باشه، و موقع چک کردن رشته فقط با رکوردی که auto incerement یکسانی داره مقایسه بشه. یعنی دقیقا با رکورد خودش.
اینطوری اگر رشتهء تصادفی رکورد دو کاربر هم تصادفا یکی شد، هیچ مشکلی نداره.
البته احتمال پیش آمدن چنین چیزی اگر رشتهء تصادفی مناسبی توسط تابع رندوم مناسبی تولید بشه، تقریبا غیرممکنه از نظر ریاضیات احتمالات. اما روشهایی که کاربران در این تاپیک برای تولید رشتهء رندوم معرفی کردن هیچکدام بقدر کافی اصولی و امن نیستن و شامل این حرفی که گفتم نمیشن.

eshpilen
دوشنبه 24 مهر 1391, 09:02 صبح
یک چیز هم من پیدا کردم تابع microtime() هست که به صدم ثانیه بر میگردونه اینجوری احتمال تکرار 0.0000000000000000000001 درصد میشه.:متعجب:
عزیزم میکرو میشه یک میلیونیم! نه این عددی که شما نوشتی و خیلی کوچکتره.
ضمنا رزولیشن واقعی این تابع در عمل روی بعضی سخت افزارها از یک میلیونیم ثانیه کمتره.

eshpilen
دوشنبه 24 مهر 1391, 09:14 صبح
مگه داری برای ناسا فعال سازی می سازی؟ :D
ip رو با میکرو تایم حذف کن، به جای راندوم هم نام سایت خودت رو با علامتی چیزی بگذار، اینجوری کاربر تا آخر امروز فرصت داره که فعال سازی خودش رو انجام بده و نیازی به session یا ذخیره اطلاعات در دیتابیس نیست
البته قسمت زمان رو هم باید از تاریخ حذف کنی، یا همین کار ها هم احتمال تکرار 0 هست، چون یوزر توش هست، و این که مخرب ها هم نمی دونند نام سایت با علامتی خاص و .. غیره رو گذاشتی که اکانت ها رو فعال کنند
همون هم که گذاشته بنظر من بقدر کافی اصولی و امن نیست.

و این که مخرب ها هم نمی دونند نام سایت با علامتی خاص و .. غیره رو گذاشتی که اکانت ها رو فعال کنند
اگر فرض کنید که دیگران از الگوریتم شما اطلاع ندارن و نخواهند داشت، خودش برخلاف اصول امنیت حرفه ایه. اسمش هم «امنیت از طریق تیرگی» است که بنده قبلا راجع بهش مقاله دادم در همین فروم و جاهای دیگه که با سرچ پیدا میشه.
ضمنا اینطور الگوریتم ها در پروژه های بازمتن هم قابل استفاده نیستن.
وقتی میشه الگوریتمی طراحی کرد که امنیت اصولی و قوی داشته باشه و بشه همه جا تحت هر شرایطی استفاده کرد و به پنهان بودن الگوریتم وابسته نباشه، چرا طور دیگری عمل کنیم؟ طور دیگر میشه حکایت جارو کردن آشغالها به زیر فرش!

lady64
دوشنبه 24 مهر 1391, 09:43 صبح
نیازی به چک کردن تکراری نبودن در جدول نیست.
بلکه باید هر رشتهء تصادفی که تولید میشه و در جدولی ذخیره میشه، همراه با یک فیلد auto incerement باشه، و موقع چک کردن رشته فقط با رکوردی که auto incerement یکسانی داره مقایسه بشه. یعنی دقیقا با رکورد خودش.
اینطوری اگر رشتهء تصادفی رکورد دو کاربر هم تصادفا یکی شد، هیچ مشکلی نداره.


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

eshpilen
دوشنبه 24 مهر 1391, 10:07 صبح
چند بار اینو خوندم ولی متوجه نشدم منظورتون چیه ؟
یعنی چی با خودش مقایسه بشه ، این چه فایده ای میتونه داشته باشه ؟
و اینکه اگر رشته ی تصادفی یکی شد ، چرا مشکلی ایجاد نمیکنه ؟
ممنون میشم یه توضیح کوچیک بدید.
مثلا کاربر ثبت نام میکنه.
شما میای و در جدول مربوطه رشتهء رندوم تولید شده رو درج میکنی. اون جدول یک فیلد auto incerement هم داره بعنوان کلید. یعنی یک عدد که به ازای هر درج رکورد افزایش پیدا میکنه و در نتیجه برای هیچ دو رکوردی تکراری نمیشه.
شما لینک فعال سازی رو که میفرستی این id رو هم همراهش ارسال میکنی.
مثلا:

http://example.com/activation.php?record_id=342&rand_key=89JPa36HW7Uiq348dX10ks
خب بعد که در صفحهء activation.php لینک فعال سازی رو بررسی میکنی میای کوئری میدی که رشتهء رندوم درج شده در رکوردی که record_id اون 342 هست رو بگیری و با رشتهء رندوم موجود در لینک فعال سازی مقایسه کنی.

متوجه شدی؟
زیاد پیچیده نیست که.

خب حالا چه مشکلی داره این روش؟
فرض کن رشتهء تصادفی دو رکورد هم یکی شد. حالا چطوری چه مشکلی پیش میاد مثلا؟

colors
دوشنبه 24 مهر 1391, 11:41 صبح
این کدی که گذاشتی از نظر امنیتی در مقابل حمله های Brute-force فوق العاده ضعیفه، چون تعداد حالتهای ممکن اون خیلی کمه. توجه داشته باش که اونی که Brute-force میکنه همون کاربریه که لینک فعال سازی بهش ارسال شده. بنابراین IP از پیش لو رفته و فقط میمونه تعداد حالتهای rand که واقعا کمه.

بله مطمئنا همینطوره. هدفم فقط آشنای دوستمون با روندی برای ساخت یک کد unique بود

tehro0n
سه شنبه 25 مهر 1391, 01:27 صبح
همون هم که گذاشته بنظر من بقدر کافی اصولی و امن نیست.

اگر فرض کنید که دیگران از الگوریتم شما اطلاع ندارن و نخواهند داشت، خودش برخلاف اصول امنیت حرفه ایه. اسمش هم «امنیت از طریق تیرگی» است که بنده قبلا راجع بهش مقاله دادم در همین فروم و جاهای دیگه که با سرچ پیدا میشه.
ضمنا اینطور الگوریتم ها در پروژه های بازمتن هم قابل استفاده نیستن.
وقتی میشه الگوریتمی طراحی کرد که امنیت اصولی و قوی داشته باشه و بشه همه جا تحت هر شرایطی استفاده کرد و به پنهان بودن الگوریتم وابسته نباشه، چرا طور دیگری عمل کنیم؟ طور دیگر میشه حکایت جارو کردن آشغالها به زیر فرش!

دوست عزیز بنده هم درگیر برخی مسائل بودم که فهمیدم کاری که میشه بدون ذخیره اطلاعات انجام داد اگه مهم نباشه نباید انجام داد
کلا پست هایی که می گذارم برای روزی هست که کلی یوزر داشته باشی و اونوقت دوباره مجبور میشی از نو کدنویسی کنی!
فعال کردن یک اکانت اونقدر مهم نیست که بخاطرش بخواهید از دیتا بیس استفاده کنید و این همه ضریب امنیتی بگذارید، مخصوصا با md5 کردن زمان هم که انقضا نداری و این همون مساله امنیت رو بهم میزنه!
در کل اگه سرور دارید سعی کنید از CPU و RAM کمتر استفاده کنید! حتی یک شرط if اضافی هم در آینده براتون مشکل ساز میشه، البته اگه وضعتون خوبه و تحریم ها هم اثری روتون نگذاشته می تونید RAM و CPU رو ببرید بالا :دی

eshpilen
سه شنبه 25 مهر 1391, 08:14 صبح
دوست عزیز بنده هم درگیر برخی مسائل بودم که فهمیدم کاری که میشه بدون ذخیره اطلاعات انجام داد اگه مهم نباشه نباید انجام داد
مهم نباشه؟
یعنی چی؟


کلا پست هایی که می گذارم برای روزی هست که کلی یوزر داشته باشی و اونوقت دوباره مجبور میشی از نو کدنویسی کنی!
یعنی سایتهای معروف که کلی یوزر دارن میان و از اینطور روشهای غیراصولی و ناامن استفاده میکنن؟
یعنی با فضای ذخیره سازی یه رشته اینقدر مشکل دارن؟!
بقیهء اطلاعات ثبت نام رو که ذخیره میکنن، خب یک رشتهء رندوم هم چند بایت اضافه روش. چه مشکلی ایجاد میکنه؟
البته من نمیگم که کد فعال سازی بدون نیاز به ذخیره سازی غیرممکنه. اما روشهایی که شما میذارید غیراصولی هستن و امنیت بسیار پایینی دارن از نظر حرفه ای. وگرنه من خودم چون در رمزنگاری اطلاعات خوبی دارم احتمالا میتونم یک سیستم خوب و اصولی رو طراحی کنم با امنیت بالا که نیاز به ذخیره سازی کلید فعال سازی هم نداشته باشه (اما تا حالا چون نیاز واقعی بهش پیش نیامده بود بهش فکر هم نکرده بودم).
ضمنا وقتی کلی یوزر داشته باشیم و واقعا در عمل به مشکل بربخوریم (نه اینکه صرفا یک تصور و هراس پیشاپیش باشه) اونوقت میتونیم سیستم رو تغییر بدیم. همونطور که سیستم ناامن و ضعیف شما رو هم جایی که مشکلی پیش بیاره و نیاز به امنیت بالا باشه باید تغییر بدیم.
منم پروژهء سیستم رجیستر و لاگین خودم رو اصولا برای کاربردهای کوچک و معمولی طراحی کردم (که اگر اکثریت کاربردها نباشن حداقل بخش بزرگی از اونا هستن). چون اعتقادی ندارم که طراحی و پیاده سازی یک چیزی که برای همهء شرایط بدون تغییر قابل استفاده باشه همیشه یا حتی بیشتر اوقات کار بهینه ای هست. حتی بعضی وقتا ممکنه شدنی نباشه.
یک شعاری هم هست که میگن: There is no problem, until there is a problem
یا نسخهء خاص ترش: Performance is not a problem, until it is a problem (یک شعار قدیمی پایتونی ها)
منظور اینه که تا وقتی در عمل مشکل جدی ای وجود نداره نباید صرفا بر اساس تصور و هراس، وقت و انرژی برنامه نویس رو هدر داد (جملهء دیگری هست که میگه وقت برنامه نویس از وقت کامپیوتر (صدم ثانیه ها) ارزشمندتر است - اصولا ما رایانه ها رو بوجود آوردیم تا در خدمت ما باشن و کارهای ما رو راحت کنن، نه اینکه ما در خدمت اونا باشیم) و محدودیت بیخودی وضع کرد.
حالا من یک تاپیکی هم دارم درمورد منطق صحیح بهینه سازی که در اونجا مطالب و نقل قول های خوبی رو جمع آوری کردم.
من خودم توی پروژم فقط بهینه سازیهای واقعا درشت و واضح رو که احتمال بروز مشکل و محدودیت در اثر اونا زیاده رو انجام میدم و در بقیهء مواقع خیلی ریلکس کار میکنم. اگر یک بهینه سازی کوچکتر هم باشه که بشه خیلی راحت و سریع انجامش داد، ممکنه انجامش بدم. غیر از این، هرچندتا کوئری که میخوام میزنم (بجای پرفورمنس به کمال منطق و الگوریتم و امنیت اولویت میدم + خوانایی و سادگی کد)، هر پردازشی که میخوام انجام میدم، هرچقدر که میخوام متغییر تعریف میکنم، خلاصه از بقیهء جزییات غیرضروری که بخاطر پرفورمنس باشن براحتی میگذرم و حتی بهشون فکر هم نمیکنم. چون تا وقتی مشکلی وجود نداره و پیش نیامده و در هدف و مقیاس پروژهء من جایی نداره یعنی وجود نداره و هیچ منطق درستی نداره که بیایم بخاطر میلی ثانیه ها و صدم و حتی دهم ثانیه های ماشین، وقت و انرژی برنامه نویس رو هدر بدیم و ایجاد محدودیت بکنیم و به کمال منطق و الگوریتم و امنیت برنامه صدمه بزنیم.


مخصوصا با md5 کردن زمان هم که انقضا نداری و این همون مساله امنیت رو بهم میزنه!جان؟
محدودیت زمانی رو بهتره بذاریم، حتی اگر کلیدمون (همون رشتهء رندوم) خیلی قوی باشه.
من در هر رکورد یک فیلد timestamp هم دارم که نگاه میکنم اگر رکورد مثلا از 24 ساعت قدیمی تر بود، یعنی منقضی شده. البته این زمان قابل تنظیمه. در پروژهء من تنظیمات زیادی وجود داره و آپشن های متعددی برای هر زیرسیستم. ممکنه بگی شما که میگی وقت و انرژی برنامه نویس رو نباید هدر داد، پس چرا اینقدر خودت رو اذیت میکنی. باید بگم درسته این کارها باعث پیچیدگی و حجم کد و کم شدن پرفورمنس (البته نه درحدی که مشکل ایجاد کنه) شده و وقت و انرژی برنامه نویس رو میگیره، ولی بنظر من ارزشش رو داره، و در عین حال چون من وقت و انرژیم رو برای کمال منطق و امکانات و امنیت سیستم میذارم، دیگه وقت و انرژی چندانی برای بهینه سازیها و محدودیت های غیرضروری برام وجود نداره.


در کل اگه سرور دارید سعی کنید از CPU و RAM کمتر استفاده کنید! حتی یک شرط if اضافی هم در آینده براتون مشکل ساز میشه، البته اگه وضعتون خوبه و تحریم ها هم اثری روتون نگذاشته می تونید RAM و CPU رو ببرید بالا :دی
ببین بازم داری اغراق میکنی.
یک شرط if؟
نه عزیزم این خبرها نیست.
میتونی این ادعا رو ثابت کنی؟
چطور برنامه نویسان و افراد مشهور و با تجربهء بسیاری خلاف حرف شما رو زدن پس؟
شاید الگوریتم شما اصولا اشکال داشته و حالا اون نتیجه رو تعمیم میدی و کلی و مطلق میکنی.
وگرنه دوتا متغییر و if پردازشی به خودی خودش نباید در 99% کاربردها هیچ تاثیر محسوسی داشته باشه.
هر برنامه ای رو هم باید در شرایط و اهداف و مقیاس خودش دید و طراحی و ارزیابی کرد.
ضمنا وقتی مشکل ایجاد شد میشه سیستم رو اصلاح کرد یا از یک سیستم طراحی شده برای مقیاس بزرگ استفاده کرد. گفتم که لزوما هر سیستمی برای هر مقیاس و شرایطی نیست.
شما میخواید یک سیستم هم برای یک سایت معمولی کار کنه و هم برای یاهو و فیسبوک، ولی من این انتظار رو واقعگرایانه نمیدونم. گذشته از اینکه اصولا سواد طرف اگر در این حد باشه که نه تنها پرفورمنس، بلکه امنیت و الگوریتم و منطق برنامه رو بتونه برای چنان سایتها و مقیاسهایی هم طراحی کنه، واقعا کارش درسته و شک دارم حتی یک نفر در این فروم چنین توانی داشته باشه.
اگر میگید که برنامه باید برای هر مقیاسی مناسب باشه، منم میگم که بنظر من امنیت و الگوریتم و منطق و امکانات و انعطاف اون هم باید همینطور باشه و اینا اهمیت کمتری ندارن که شاید بیشتر هم اهمیت داشته باشن. سایت که مقیاسش بزرگ بشه انگیزهء بسیار بیشتری برای نفوذ و سوء استفاده ازش هم پیدا میشه، و خیلی باگ و نقص ها در الگوریتم و منطق برنامه بالا میان که در مقیاس کوچک یا وجود ندارن یا به ندرت پیش میان، و مدیریت و جبران حمله ها و نفوذها و خسارت های امنیتی هم در اون به مراتب دشوارتر و هزینه برتر میشه.
ضمنا پرفورمنس رو میشه با افزایش منابع سخت افزاری هم افزایش داد، اما دربارهء امنیت و منطق و الگوریتم بدون باگ با سخت افزار نمیشه جبرانش کرد.

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

البته اینم بگم، که حمل بر خودنمایی یا قصد تحقیر دیگران ندونید لطفا، این حرفهایی که میزنم مال کسانی هست که اینقدر سواد و توان داشته باشن که بتونن یک سیستم امن و اصولی از جمیع جهات طراحی و پیاده سازی کنن؛ وگرنه که میدونم بیشتر افراد این سواد رو ندارن! یعنی واقعا این بحث مال اونا نیست که حالا کد فعال سازی چطور تولید و چک بشه و این حرفها، چون همینش رو اگر بتونن بفهمن و درست پیاده کنن خودش کلی شاهکاره، و قضیه اینه که بحث امنیت گسترده و پیچیده هست و فقط همین یک جنبه و زیرسیستم نیست که باید درستش کنن، بلکه ده ها و صدها مورد مشابه هست. سیستمی هم که یه جاش سوراخ باشه و یه جاش نباشه بازم امن نیست و آنچنان ارزشی نداره. بنابراین من مطمئنم که اکثریت نمیتونن چنین سیستم بی نقصی رو طراحی کنن. تعریف از خود نباشه ولی بنده مدتها کلی مطالب حجیم و پیچیده فقط در علم رمزنگاری خوندم برای اینکه بتونم این توان رو پیدا کنم. و این فقط یک بخشش است! کلی مطالب دیگر درمورد انواع حمله ها و روشهای جلوگیری از اونا + کلی پیشنیاز و مخلفات دیگر + قدرت تحلیل و پیشبینی و توان فکری لازم، قدرت بالا در تحلیل و طراحی الگوریتم.
طرفهایی که میان و در نمایش دوتا رکورد یا دکمهء حذف و اینها هم مشکل دارن واقعا در این حدود نیستن. و حتی اونایی هم که این کارها رو بلدن بازم بیشترشون در این حد نیستن!!

colors
سه شنبه 25 مهر 1391, 11:07 صبح
سلام

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

tehro0n
سه شنبه 25 مهر 1391, 18:28 عصر
eshpilen جان ماشاله انقدر می نویسی که باید خلاصه کرد موقع خوندن!
منظورم کلی در همه پست هات بود که خیلی توضیحاتت می خوای کامل باشه، من هم اگه این مسائل رو گفتم چون سایت سرویس دهنده ابزار وب دارم و سروکارم با ابزارهایی که در هر چند ثانیه چند میلیون بار اجرا میشه
شما با CPU و RAM کامپیوتر خودت که i7 هم باشه امتحان کن، یک if رو در حلقه 1000000 میلیون بگذار و پس از چند ثانیه دوباره به همان حلقه برگرده
کنار صفحه هم گجت CPU و RAM رو فعال کن و ببین چقدر تاثیر داره..

eshpilen
چهارشنبه 26 مهر 1391, 08:15 صبح
شما با CPU و RAM کامپیوتر خودت که i7 هم باشه امتحان کن، یک if رو در حلقه 1000000 میلیون بگذار و پس از چند ثانیه دوباره به همان حلقه برگردهبله اینا رو میدونم.
این یک شرایط خاصه.
یعنی یک چنین تعداد بالایی از اجرای چنین دستوراتی داشته باشیم.
یعنی انگار شما یک میلیون if داری، نه یکی.
شما طوری بیان کردی که اگر کسی بخونه و باور کنه، اون چیزی که از گفتهء شما برداشت کرده باعث میشه توی هر خط کدی که مینویسه مدام میخواد کوچکترین بهینه سازیها رو اعمال کنه و شده کلی فکر کنه و وقت و انرژی صرف کنه سر هر خط تا دوتا if رو بکنه یدونه!

بحث من در برنامه ها و شرایط عادی بود که چنین چیزی نیست.
در کدهایی که اینطور در یک درخواست به تعداد بسیار بالا تکرار نمیشن، یک if اضافه و حتی 100 تا if معمولی (تست مقدار متغییر و فراخوانی توابع عادی) تاثیر محسوسی نمیذاره؛ مگر شاید اگر ترافیک واقعا زیادی داشته باشی و سرورت بقدر کافی قوی نباشه؛ اونم تازه باید در عمل پیش بیاد تا بگیم وجود داره و براش چاره کنیم.

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

راستی یه کدی هم برای این حالتی که گفتی نوشتم:

<?php

while(true) {
$t1=microtime(true);
for($i=0; $i<1000000; $i++) if($i==4) $t=3;
echo microtime(true)-$t1, '<br>';
sleep(2);
}

?>
همینطوری گفتی دیگه؟

واسه من حدود 13% قدرت سی پی یو رو مصرف میکنه.
ضمنا سیستمم P4 3GHz با یک گیگ RAM است (درپیته؟ :لبخند:).
ضمنا اجرای یک میلیون بار شرط if هم حدودا 0.3 ثانیه زمان میبره.
بهرحال خیلی بستگی به این هم داره که توی اون شرط if چه چیزی رو چطوری چک بکنی.
مثلا من از mt_rand داخل شرط استفاده کردم و بار سی پی یو تا 50% رسید، و زمان اجرا حلقه هم حدود 6 ثانیه.
بطور کلی هر عملیاتی که توی حلقه با تعداد بالا باشه بار پردازشی قابل توجهی رو اضافه میکنه. دقیقا یعنی بطور بدیهی، زمان اجرای یک بار اون ضربدر تعداد تکرار حلقه میشه.

tehro0n
پنج شنبه 27 مهر 1391, 19:33 عصر
البته نسبت به سرورهایی که برای هاست میگیریم هم اونقدر درپیت نیست.. یک سرور معمولی به حساب میایید
برای من CPU حدود 4% شد و زمان هم 0.16 ثانیه بود..
ولی این فقط یک if بود و حالا ابزار یا یک صفحه کاربردی حدود 2000 خط می تونه باشه که بهتره if کمتری استفاده بشه، چون اگه سرورت اشتراکی باشه کل CPU رو بهت نمیدن و اکانتت پخخخخخخ

به هر حال این نظر شما بود و نظر من هم اینه که اگه برای چنین سرورهایی قراره کد بنویسی و به آینده نگاه کنی از پایه باید یادگرفت که هزینه RAM و CPU خودتون را با کد نویسی پایین آورد و سر مسائل معمولی زیاد سخت نگرفت، کسی که بخواد اکانت ایمیل یا سایت های اشتراک گذاری یا .. فعال کنه راحت می تونه بارها اکانت بسازه و فعال کنه، و این فعال کردن برای هر کاربر یکبار اتفاق می افته.. و چیز زیاد مهمی نیست که هزینه بابتش داد..
البته بازهم به این بستگی داره که چه کاری بخواهید انجام بدید و دیدتون چیه، شاید این فعال کردن تغییر رمز عبور کاربر باشه که خوب اون مهمه!
بی خیال :دی

eshpilen
شنبه 29 مهر 1391, 09:14 صبح
فعلا کدهای من اینقدر حجیم و پیچیده هستن که حتی خودمم نمیتونم اونا رو بهینه کنم و ریسک ایجاد باگ خیلی بالا نره. بنابراین خوانایی حداکثری و استفاده از ساده ترین الگوریتم های ممکن برام اهمیت بیشتری داره (دقت کن که ساده ترین الگوریتم لزوما کوتاهترین و سریعترین الگوریتم نیست). حتی دنبال MVC و شیء گرایی و اینها هم نرفتم و همینطور Flat کد نوشتم. چون حتی تصوری نداشتم که چیزی چنین پیچیده و حجیم رو چطور میشه و باید سازماندهی و تقسیم بندی منطقی کرد و چطور با چنین الگوهای طراحی و پارادایم های کدنویسی ای هماهنگ کرد. البته خب این کار وقت و انرژی زیادی هم میبرد بجای اینکه روی الگوریتم و منطق کلی برنامه تمرکز کنم. یک دلیلش هم شاید این بود که اولین کار بزرگ و حجیم و پیچیدهء من بود و هنوز تجربه و مهارت و بینش کافی برای اون داستانهای بعدیش رو ندارم. خب طبیعی هم هست که بعدا که برنامه کامل شد بینش جامع خیلی بهتری نسبت بهش پیدا میکنم. اما وقتی هنوز نمیدونم چی داره و الگوریتمش چی باید باشه چطور میتونم اون رو شیء گرا کنم و به شکل MVC طراحی کنم؟ نه اینکه بگم نشه، اما بنظر من بهینه نیست و وقت و انرژی زیادی روش تلف میشه که باید میذاشتم روی اصل الگوریتم و منطق برنامه. فرضا مثلا وقتی کد و الگوریتم و جزییات کد شونصدبار ممکنه تغییر کنه، حالا شما هی باید بیای و اینترفیس کلاس ها و طراحی اونها و خیلی چیزهای دیگر رو هم بازنویسی کنی که این کار یک وقت و انرژی مضاعفی رو هدر میده. اما دست آخر که معلوم شد برنامه چه ساختار و الگوریتم کلی ای داره، و یک کلیت ذهنی جامعی نسبت بهش شکل گرفت، احتمالا میتونم خیلی راحتتر و سریعتر روی اون موارد دیگه کار کنم. البته اونم تازه اگر نیاز بود یا خواستم این کار رو تمرین کنم. چون بنظر من برای هرچیزی باید اول یک نیاز واقعی دیده بشه، نه اینکه صرفا برای تقلید یا تصورات خودمون که در واقعیت ممکنه وجود نداشته باشن کاری رو بکنیم.
البته یک چیزی هم بگم که دلیل دیگرش این بود که تاحالا روی MVC مطالعه و کار و تمرین خاصی نداشتم. چون اولویت یادگیری رو به الگوریتم ها و امنیت و خیلی مسائل پایه ای دیگه داده بودم.

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

بنظر بنده، باوجودی که تجربهء عملی زیادی ندارم، یک برنامهء حرفه ای همینطور خواهد بود.
واسه همین بیشتر برنامه نویسهای واقعا حرفه ای اول فقط روی منطق و الگوریتم تمرکز میکنن و شده حتی یک نمونهء اولیه یا آزمایشی از برنامه درست میکنن (Prototype)، بعدا روی بهینه سازیش اونم نه به این شکلی که ما خیال میکنیم و انجام میدیم کار میکنن. بهینه سازی اونا هم اکثرا در اون حد جزیی سینتاکس و اینا نیست و بیشتر روی همون بهینه سازی های درشت و الگوریتمیک و اینها کار میکنن. مثلا بهینه سازی دیتابیس و کوئری ها، بهینه سازی کلی الگوریتم ها (مثل اینکه برای مرتب سازی از الگوریتم حبابی استفاده کنی یا quick sort - البته این رو بعنوان مثال کلی و تشبیه گفتم)، استفاده از سیستمهای کش، استفاده از Accelerator ها (که Bytecode پی اچ پی رو یک بار تولید و برای دفعات بعد هم استفاده میکنن). نهایت شاید از یک برنامهء خودکار برای بهینه سازی درحد سینتاکس هم استفاده کنن (مثلا تبدیل کوتاه کردن نام متغییرها، تبدیل رشته های کوتیشین دوبل به تکی جایی که میشه). و شاید یک پروفایل و اینهایی هم بکنن و جاهای درشت یا Bottleneck های برنامه رو پیدا و بهینه سازیهایی بکنن.

خلاصه این برنامه هایی که بروبچ مینویسن ببخشیدا، اما بنظر من، بر اساس نظر تخصصی خودم تا جاییکه سواد و بینش دارم، اصلا برنامه های حرفه ای نیستن. یعنی پیچیدگی و حجم کدشون خیلی کمتره نه بخاطر اینکه برنامه نویس هوشمند بوده و نیازی نبوده یا خوب بهینه سازی کرده، بلکه بخاطر اینکه از نظر کمال الگوریتم و منطق و امکانات و امنیت کم دارن. بله روی اینطور برنامه نویسی و کدها میشه به فکر بهینه سازیهای جزیی بود. چون درواقع وقت برای علافی زیاده! و درواقع اون برنامه و کدها اصلا ارزش اونقدری ندارن که خود برنامه نویسش فکر میکنه.
بنده سیستم رجیستر و لاگین خودم رو دارم تکمیل میکنم. امکانات و امنیت بالایی داره و الگوریتم و منطق و فنیش هم قویه. ولی خب عوضش حجیم و پیچیده شده و طبیعتا چند برابر برنامه های عادی پرفورمنس میطلبه. یعنی الگوریتم هایی که واسش طراحی کردم بعضیهاش رو از چند ده نفر که ادعای برنامه نویسی میکنن یک نفر میتونه بفهمه یا تحلیل کنه. کس دیگه نگاه کنه فکر میکنه حجم و پیچیدگی الکیه و میگه مثلا چرا این کار رو اینقدر پیچونده طرف و نیازی نبود اصلا با فلان الگوریتم و روش خیلی ساده حل میشد.
ببین همه میگن برنامه نویسی برنامه نویسی. اما واقعا برنامه نویسی تا برنامه نویسی زمین تا آسمان تفاوت میکنه. مسئله هم فقط سرعت و بهینه سازهای جزیی نیست. خیلی بیش از اینه. و مسئلهء دقت و کمال و استحکام الگوریتم و امنیت مسئله ایه که خیلی وقتا دیده نمیشه و هرکسی تشخیص نمیده.
مثلا میتونم بگم بالای 70% برنامه ها از نظر مسائل دسترسی همزمان و راه حل های اون مثل گذاشتن انواع قفل در جاهایی که لازمه کمبود دارن. ولی خب اینا در عمدهء برنامه های معمولی مشکل چندانی ایجاد نمیکنن یا ایجاد میکنن اما کشف نمیشه یا علتش رو نمیفهمن یا گردن چیزهای دیگه میندازن. بعد تا میگی قفل، طرف میگه اوه پرفورمنس رو میاره پایین!
و میتونم بگم بالای 50% برنامه نویسها اصلا درست و حسابی نمیدونن قفل چیه و کجا و چطوری باید ازش استفاده کنن. مهارت کافی در استفاده ازش ندارن.
درمورد مسائل امنیتی هم میتونم بگم که بازم بالای 90% برنامه ها بقدر کافی اصولی و امن نیستن.

خب حالا بنظر شما من باید ترجیح بدم که یک برنامهء با سرعت چند برابر بنویسم، یا یک برنامه که از نظر کمال منطق و الگوریتم و امنیت تکمیل باشه؟
من مورد دوم رو ترجیح میدم. چون اون نوع اول رو خیلی ها میتونن بنویسن و زیاد برنامه اونطوری هست و انجامش هنری هم نیست، ولی نوع دوم رو نوشتنه که کار جدیدتر و کمیاب تریه و بنظر بنده سطح بالاتر و کاراتر هم هست. البته من هنوز تجربهء عملی بیشتری نداشتم که مطمئن باشم، ولی خب بالاخره میدونم که پروژم برای مقیاس کوچک و کارهای شخصی خودم و خیلی کارهای مردم هم سرعتش باید کافی باشه. اول نمیرم توی فکر بزرگ و زیاد. بلکه اول میرم توی فکر کوچک اما با کیفیت و کامل. مسئلهء پرفورمنس و سرعت هم به مقیاس اون بستگی داره. مثلا من میگم سرعت برنامم 5 برابره. همه میگن اوه پس این برنامه حتما بهتر از دیگریه که سرعتش یک پنجم اینه. ولی در واقعیتش اینطور نیست. بلکه بستگی داره سرعت در چه بازه ای باشه. مثلا پردازش هر صفحهء سایت من اگر بطور متوسط 0.01 ثانیه زمان میبره، اون برنامهء دیگه که سرعتش یک پنجمه 0.05 ثانیه زمان میبره! خب هر دوی این زمانها برای یک سایت و User experience هیچ مشکلی ندارن و کاملا قابل قبول (درواقع در سطح عالی) هستن. بنابراین این وسط این سرعت برنامهء من که 5 برابره نیست که اهمیتی داره، بلکه مسائل دیگر مثل امنیت و امکانات و باگ کمتر داشتن اهمیت دارن. البته درصورتیکه ترافیک سایت و توان سرور طوری باشه که سرعتهایی که گفتیم مخدوش نشن.

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

حالا یک مثال عملی تر هم بعنوان نمونه ای از اینکه برنامه نویسی با برنامه نویسی چقدر ممکنه تفاوت داشته باشه و باریک بینی و قدرت تحلیل و طراحی مربوط به منطق و الگوریتم ها چقدر گسترده هست میزنم.
سیستم قفل کردن اکانت بعد از چند بار تلاش ناموفق رو درنظر بگیره.
خب اول ما باید صورت مسئله رو تعریف کنیم دیگه؟
صورت مسئله اینه که میخوایم تعداد تلاشهای لاگین ناموفق در واحد زمان خاصی رو محدود کنیم.
مثلا در هر 12 ساعت فقط بشه 6 تلاش لاگین ناموفق صورت بگیره.
حالا الگوریتم و پیاده سازی این رو ببین 99% برنامه نویسها چطور انجام میدن.
اونا میان یک فیلد timestamp تعریف میکنن و زمان آخرین لاگین ناموفق رو درش ذخیره میکنن. در یک فیلد دیگر هم تعداد تلاشهای لاگین ناموفق رو. خب حالا هر تلاش لاگین ناموفق که صورت میگیره، زمان اون رو با زمان درج شده در فیلد timestamp مقایسه میکنن، اگر کمتر از 12 ساعت فاصله داشت، یکی به تعداد تلاشهای ناموفق اضافه میکنن، وگرنه فیلد تلاشهای ناموفق رو صفر میکنن. هر وقت مقدار فیلد تلاشهای ناموفق به 6 تا رسید، امکان لاگین به اکانت مورد نظر رو به مدت 12 ساعت مسدود میکنن.

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

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

eshpilen
یک شنبه 30 مهر 1391, 09:32 صبح
بنظر من ساخت برنامه ای که از نظر منطق و الگوریتم و امنیت و امکانات بی نقص نباشه، اما پرفورمنس بالا داشته باشه، ارزش چندانی نداره.
بعکس باید برنامه ای ساخت که از نظر منطق و الگوریتم و امنیت و امکانات (درحد نیازش) بی نقص باشه، بعد اگر پرفورمنس اون در عمل اونقدر پایین بود که مشکل جدی ایجاد کرد، اونوقت میشه روی بهینه سازی اون کار کرد، ولی بازهم نه اینکه برای بهینه سازی از کمال منطق و الگوریتم و امنیت اون بزنیم.
نهایت نهایتش تنها اگر واقعا مجبور شدیم و هیچ راهی دیگری وجود نداشت باید این کار رو بکنیم که اون پارامترهای دیگر رو کم و بیش فدای امنیت کنیم.

شما برنامه بنویس سرعتش خیلی بالا. یکی دیگه هم بنویس که اونطوری که گفتم از نظر پارامترهای دیگر بی نقص باشه.
اولین فرقشون چیه؟
اینه که برنامهء اولی رو روی هر سروری با هر ترافیکی که اجرا کنی هنوزم برنامهء ناقصی بحساب میاد، اما برنامهء دوم اگر با قدرت سرور کافی و/یا ترافیکی که بتونه جوابش رو بده کار کنه، برنامهء بی نقصی خواهد بود.

ولی الان اکثر برنامه نویسها برعکس فکر و عمل میکنن.
و البته بنظر من خیلی هاشون اصلا این سواد رو هم ندارن که برنامه های بی نقصی بنویسن.
فقط دلشون رو به این خوش میکنن که سرعتش رو تا میتونن بالا ببرن.

اون شرایط خاص رو هم که شما گفتی خب خاصه دیگه. من منکرش نیستم. و اگر واقعا لازم بوده بخاطرش از کمال منطق و الگوریتم و امنیت برنامه بزنی، میتونیم جزو همون موارد اجباری که الان گفتم طبقه بندی کنیم. البته خوشبختانه این موارد زیاد پیش نمیان و اکثرا میشه بدون صدمهء جدی زدن به پارامترهای دیگر بهینه سازی هم کرد.
ولی بعکس وقتی ما از اول این تفکر و رفتار اشتباه بهینه سازیهای وسواسی رو داشته باشیم، بیشتر وقتا بدون اینکه نیاز باشه از کمال منطق و الگوریتم و امنیت برنامه میزنیم. این تفکر و رفتار و تبلیغات/اغراق زیادی که در این زمینه هست باعث میشه اصلا افراد بجای تمرکز روی یادگیری خیلی چیزهای مفیدتر و این همه موارد دیگر پیشرفته و کاربردی ای که در علم رایانه و تخصص برنامه نویسی هست، وقت و انرژی زیادی روی این مسائل تلف کنن و هر روز دنبال نکته های بهینه سازی جزیی کم ارزش باشن. من این مسائل رو در این چند سال زیاد دیدم که دارم میگم.
البته آدم باید بهینه سازی هم بلد باشه تا بجاش که نیاز شد استفاده کنه، ولی واقعا اونقدری هم بنظر من چیز پیچیده و گسترده و مهمترین چیز و اولین اولویت نیست در میان این همه مسائل و واقعیت هایی که هست.
طرف میبینی کاراکتر به کاراکتر حرف از بهینه سازی میزنه، اما خیلی مسائل پایه ای و کاربردی و پیشرفتهء مورد نیاز رو درست و حسابی نمیدونه و/یا استفاده نمیکنه.
این یک وسواس و اشتباهه بنظر من که سالهاست وجود داره.
این همه گفتار و نصیحت از برنامه نویسان برجسته و دانشمندان مشهور برخلاف این رویه بوده تاحالا، اما همه نهایت میخونن و یه Thanks پاش میزنن، و در زندگی واقعی دوباره همون آش و همون کاسه. یعنی هیچ تغییر عملی مشهودی در این تفکر و روش بوجود نمیاد.