گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

وقتی برنامه نود خودش را درگیر موضوعی میکنه که اشراف کامل روش نداره !!!

نویسنده:
۳۰ شهریور ۹۵

دیشب عادل فردوسی پور توی برنامه نود سعی کرد نرم‌افزار بلیت فروشی مسابقات لیگ برتر را به چالش بکشه و مشکلات اون را نشون بده که به نظر من بحثش را از دو جنبه میشه بررسی کرد. یکی اینکه مشکلات فنی که اشاره کرد واقعا موضوعات حاد و باگ بودن ؟ یا مقایسه با بلیت فروشی سایت بارسلونا از نظر فنی و تکنیکی درست بود ؟! دوم اینکه اصلاً چرا فلان پیمان کار عهده دار انجام چنین موضوعی شده ؟!

در مورد بحث فنی راستش من اصلاً استدلال های نود را قبول ندارم و به نظرم پیمانکار مجری نرم افزار خیلی قابل انتقاد آنچنانی نیست و مشکلات اشاره شده هم باگ نیستند. خبرنگار نود اومده توی سایت یک صندلی را گرفته و به سایت بانک رفته ولی پرداخت و تکمیل خرید را انجام نداده و برگشته توی سایت خرید بلیت و شاکی از اینکه چرا اون صندلی که انتخاب کرده بوده قابل خرید برای دیگران نیست ، غافل از اینکه نمیشه وقتی یک صندلی رفت توی سبد خرید اما پرداخت تکمیل نشده اون را برای انتخاب افراد دیگه باز گذاشت ، چون ممکنه ۱۰۰ نفر آنلاین باشن و چون زمان میبره تا فرد بره توی سایت بانک و اطلاعاتش را بزنه و خرید تکمیل بشه و برگرده. در این حین اگه صندلی رزرو نشه افراد دیگه ممکنه سریعتر از اونی که اول از همه اقدام کرده خرید را تکمیل کنند و صندلی از کف نفر اول بره. پس برای مدت زمان معینی نیاز هست که صندلی رزرو بشه و اگه خرید تا N دقیقه بعد انجام نشد کل خرید کنسل بشه و صندلی آزاد بشه که البته مسئول اون شرکت به صورت دست و پا شکسته اشاره کرد به همین موردی که گفتم اما فردوسی پور دیگه !

تنها ایرادی که بهشون وارد هست اینه که به جای سیاه کردن صندلی به عنوان ناموجود باید صندلی های رزرو را به رنگ دیگه ای نشون بدن و مرتب صفحه را توی بازه زمانی معینی Refresh کنند.

اما اشکال دومی که خبرنگار نود میگیره از اون چرت تره !!! گیر داده چرا با کد ملی هر شخصی میشه توی سیستم ثبت نام کرد ، افراد غریبه و حتی خانم‌ها؟! از اون عجیب تر هم مسئول اون شرکت هست که میگه حرف شما درسته و باید ثبت احوال با ما همکاری کنه و مثلاً پایگاه اطلاعاتی کل مردم مملکت را در اختیار ما بگذاره !!! در صورتی که قطعاً قصد از گرفتن این کد ملی این نبوده که شخص برای خرید بلیت تعیین هویت بشه !!! مگه برای ورود به ورزشگاه یا سینِما و کنسرت میشه دم در به همه گفت کارت ملیتون را بردارین بیارین ؟! خلاصه اینکه با گرفتن این کد ملی به هر دلیلی که بوده نمیشه ایرادی به سیستم وارد کرد.

تناظر کد ملی با بلیت وقتی ایراد میشه که نرم‌افزار اجازه نده کسی با یک کد ملی بیش از یک یا چند تا بلیت بگیره چون ممکنه کسی کد ملی مثل من را بدونه و بره حداکثر بلیت ممکن را بگیره و من نتونم با کد ملی خودم دیگه بلیت تهیه کنم. نه اینکه استدلالت این باشه که چرا میشه با کد ملی خانم هم بلیت گرفت! بعدش جناب فردوسی پور سایت باشگاه بارسلونا را نشون میدن و میگن با هر IP میشه ۶ تا بلیت خرید و شما هم بهتر بود همون IP را معیار قرار میدادین. ایشون توجه نمیکنن که IP هم مشکلات خودش را داره و مثلاً توی خود صدا و سیما اگه ۳۰ نفر بخوان از اینترنت اونجا اقدام کنند برای خرید بلیت از همین بارسلونا ، حداکثر همون ۶ تا بلیت را میتونن بخرند. در صورتی که افراد کاملاً متفاوتی هستند که دارند از یک IP استفاده میکنند.

موضوع بعدی که در مورد اشاره به بارسلونا جالب بود سخیف شمردن پروسه خرید بلیت پیمان کار ایرانی در مقابل بارسلونا بود که به نظر من ، هم شماتیک سایت پیمان کار ایرانی بهتر بود هم پروسه را Ajax ی پیاده‌سازی کرده بودند که خیلی مدرن تر از Page To Page باشگاه بارسلونا بود و کلاً نیشخند جناب فردوسی پور نشون از عدم آگاهی ایشون از Web و توهین به متخصصین وطنی داره.

اما بحث بعدی این بود که چرا اون شرکت به عنوان پیمانکار انتخاب شده و مناقصه صورت نگرفته !؟ این مورد هیچ ربطی به پیمان کار نداره و اگه سازمان لیگ تحت نفوذ هر شخصی (حتی مسئولین همین پیمانکار) بدون مناقصه چنین واگذاری را انجام داده باشه باید ازش سؤال بشه نه پیمانکار که حالا جناب فردوسی علاقه‌مند هم هستند بدونن دریافتیشون از خرید هر بلیت هم چقدره !!!! من احساس کردم جناب فردوسی پور توی ایران زندگی نمیکنند و نمیدونن توی ایران چطوری کار ها به پیمان کار ها واگذار میشه که حالا باید قشر IT مملکت پاسخگوی این وضعیت باشه‌!؟

کمی بحث طولانی شد اما واقعاً از برنامه نود با این سابقه انتظار نمیره بدون مشاوره با یکی از هم صنفی های این پیمانکار چنین نقد غیر کارشناسانه ای داشته باشه !!!

چگونه پس از ۴ سال استفاده از لینوکس ، دیگران را به استفاده و مهاجرت به لینوکس تشویق میکنم ؟

نویسنده:
۱۸ شهریور ۹۵

از اسفند ماه سال ۹۱ که با نصب اوبونتو در کنار ویندوز آروم آروم و در کمتر از چند ماه به کل به لینوکس مهاجرت کردم چهار سال و نیم میگذره و یکی از اتفاقاتی که من را خیلی خوشحال میکنه این هست که ببینم بر اثر تشویق و حمایت و پشتیبانی که برای دوستان خودم در انجمن‌های تخصصی برنامه نویسی انجام میدم ببینم کسی لینوکس را امتحان کرده و نظر مثبت داره و به فکر مهاجرت هم افتاده.

مهاجرت به لینوکس

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

اما اگه این معرفی به کسی باشه که از کامپیوتر حرفه ‌ای تر استفاده میکنه یکسری موضوعات هستند که سد راه می‌شوند و متقاعد کردن هم نه درسته و نه عملی !!! کلاً در این مواقع باید ببینم طرف چی میخواد. مثلاً همکار های خودم که در زمینه برنامه نویسی وب کار میکنند را میشه تا ۹۵ درصد قانع کرد و اون ۵ درصد هم بر میگرده به اینکه طرف با کامپیوترش بازی میکنه یا حوصله نداره بشینه کمی با Gimp کار کنه تا بفهمه در زمینه وب کارش را حل میکنه یا LibreOffice در حد کاری که ما ازش انتظار داریم کامله.

خلاصه اینکه معرفی لینوکس به متعصبین و کسانی که حاضر نیستند چیزی که توی لینوکس به دست میارن را با چیزی که توی ویندوز از دست میدن جایگزین کنند نتیجه‌ای نمیده. عموم مخالفین مهاجرت که قابل احترام هستند و به نظرم باید بچسبند به همون ویندوز ۳ دسته اند :

۱ – کسانی که اهل Game هستند و Steam هم راضیشون نمیکنه و قصد استفاده از کنسول های بازی و جایگزینیش با کامپیوتر هم ندارند.

۲ – کسانی که حاضر نیستند حتی نیمی از زمانی که صرف یادگیری ویندوز کردند را برای لینوکس صرف کنند و به همینکه نمیتونن کاری را به راحتی ویندوز انجام بدن ازش زده میشن.

۳ – کسانی که از نرم‌افزار های تخصصی منحصر به ویندوز استفاده میکنند و جایگزین مناسبی روی لینوکس براش وجود نداره یا احساس میکنن لینوکس ارزش جایگزینی و یادگیری یک نرم‌افزار معادل را نداره !!!

خیلی از اشخاص روی وب بودن که نوشته هاشون من را علاقه‌مند به استفاده از لینوکس کرد و همیشه ازشون متشکر هستم و خواهم بود. یکی از این دوستان جناب حسین زاده و وبلاگ خوبشون بود که اخیراً یک پست در مورد اینکه چرا دیگه لینوکس را دوست ندارن ! منتشر کردن و من به عنوان یک دنبال کننده وبلاگشون قصد دارم برخی عناوین جهت مراجعه دوباره به ویندوز را نقد کنم:

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

عدم سازگاری !
من نمیتونم در مورد سازمان ها و اینکه چرا از لینوکس استفاده نمیکنن نظر بدم توی این پست اما قطعاً اینکه گلستان با توجه به اینکه حتی روی ویندوز باید روی نسخه های خاصی از IE نمایش داده بشه دلیل بر عدم سازگاری نیست و کم‌سوادی عده‌ای را میرسونه که با هر هنری که دارن تونستند به صورت انحصاری محصولی که بد ساخته شده را بفروشن !!! خلاصه اینکه بنده هم با اداره ها در ارتباط هستم (البته سالی یکی دو بار و نه بیشتر) و گاهی نیاز میشه از ویندوز کناری سیستمم برای برخی کار‌هاشون استفاده کنم. اما بیش از ۹۰ درصد کار ها با همون لینوکس راه میفته و نیاز به ویندوز نداره ! در مورد نرم‌افزار های وطنی هم راستش مورد نبوده که شخصاً نیاز روزمره بهش داشته باشم و اگه برای کسی چنین نرم افزاری وجود داره خوب این مشکل ایشون میشه و نمیشه تعمیم داده به همه.

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

جامعه کاربری (البته با عنوان رفتارهای سخیف آمده است)
در این مورد قصد ساز مخالف زدن ندارم ! بله جامعه کاربری لینوکس چنگی به دل نمیزنه. رفتار های توی انجمن‌های لینوکسی و جوامع دورهمی هم سخیفه هم متوهمانه. اما در مقابل ، بچه‌های خیلی خوب هم هستند که اخلاق ۱۸۰ درجه‌ای با این طیف سخیف دارن که هم من میشناسمشون و هم جنابعالی.

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

در پایان توصیه میکنم اگه لینوکس را تا حالا امتحان نکردین حتماً در کنار ویندوز نصب کنید و هر از گاهی وقت بگذارین براش تا بتونین ازش سر در بیارین و شاید یک روز کلاً مهاجرت کردین به لینوکس./

مشکل در نمایش اطلاعات فارسی به صورت علامت سوال از پایگاه داده MySQL در PHP

نویسنده:
۱۶ شهریور ۹۵

شاید یکی از پرشمارترین سؤالاتی که از طرف تازه کار ها و گاهی اوقات حتی باتجربه های PHP کار باهاش مواجه شدم همین نمایش اطلاعات فارسی از پایگاه داده هست که عموما شاکی هستند اطلاعات را به فارسی در پایگاه ذخیره میکنند اما وقتی کد مربوط به نمایش را می‌نویسند همه متون به صورت علامت سؤال نمایش داده می‌شود.

مشکل نمایش متون فارسی به صورت علامت سوال

از اونجا که غالباً هر کسی در بخشی از پروسه انجام کار مشکل داره من به ترتیب مراحل اطمینان از درستی انجام کار را در چند شماره توضیح میدم :

۱ – زمانی که پایگاه داده را روی سیستم خودتون نصب میکنید اطمینان حاصل کنید که در مراحل نصب ، پشتیبانی از utf8 را در تنظیمات mysql انجام میدین. روی هاست ها میشه ۹۹ درصد مطمئن بود که از utf8 روی mysql پشتیبانی میشه.

۲ – زمانی که جدول را ایجاد میکنید بهتره برای جلوگیری از مشکلات آتی و فارغ از اینکه Charset پیش‌فرض و Colltation پیش‌فرض در زمان نصب MySQL چی بوده خودتون جداول را با Charset از نوع utf8 و Collation از نوع utf8_persian_ci ایجاد کنید.

توجه: اگه این دو مورد خیلی براتون ملموس نیست اهمیتی نداره ! اگه توی phpmyadmin یا هر برنامه مدیریت پایگاه داده‌ای که استفاده میکنید میتونید فارسی بنویسین و ذخیره کنین و نمایش بگیرین پس کلاً با utf8 مشکل ندارین مگه جاهای خاص که ربطی به موضوع این پست نداره و اگه مشکل دارین با پشتیبانی شرکت میزبان وب خودتون تماس بگیرین.

۳ – حتماً اطمینان حاصل کنید که charset صفحه html را توی تگ meta برابر با utf8 قرار بدین :
در html4 و xhtml

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

در html5

<meta charset="UTF-8">

۴ – اگه از کتابخونه mysql توی php استفاده میکنید حتماً بعد از mysql_connect (دقیقاً بعدش نه اینکه بعد از select گرفتن این کار را انجام بدین !!!) mysql_set_charset را اجرا کنین :

$link = mysql_connect("server_ip_address","mysql_user_name","mysql_pass",true);
mysql_set_charset('utf8',$link);

توجه: ممکنه خیلی جاها ببینید گفته باشن این دو query را بعد از connect اجرا کنین :

mysql_query("SET NAMES 'utf8'",$link);
mysql_query("SET character_set_connection = 'utf8'",$link);

اما تابع mysql_set_charset بهتر و بهینه تره چون باعث میشه زمان استفاده از تابع mysql_real_escape_string که برای جلوگیری از حملات SQL Injection خیلی مهم هست کاراکتر های یونیکد به درستی escape بشن که در حالت پیشنهادی دوم این اتفاق نمیفته و شما در مقابل برخی حملات SQL Injection در خطر قرار میگیرین !

۵ – اگه از کتابخونه mysqli استفاده میکنید بعد از connect متد set_charset را صدا بزنید :

$db = new mysqli('server_ip_address', 'db-user', 'db-pass', 'db-name');
$db->set_charset("utf8");

۶ – اگه از کتابخونه pdo استفاده میکنید زمان connect باید charset را توی dsn مشخص کنید:

$link = new PDO("mysql:host=localhost;dbname=DB;charset=utf8");

توجه: کلاً بهتره کتابخونه mysql را بی‌خیال بشین چون دیگه توی نسخه های جدید php پشتیبانی نمیشه و کلاً حذف شده. اما در مورد mysqli و pdo خیلی سلیقه‌ای هست که توصیه میکنم اگه از mysql استفاده میکنید و قصد جایگزینیش با mssql و پایگاه های دیگه را ندارید حتماً از mysqli استفاده کنید چون سریعتر از PDO هست و برای پایگاه داده mysql بهینه شده.

اگه همه موارد را درست رعایت کرده باشین هیچ مشکلی در نمایش و درج فارسی با پایگاه داده MySQL توی PHP نخواهید داشت. من در پایان هم یک نمونه کد جهت تست قرار میدم :

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>نمایش محتوای جدول</title>
<style>
  body{
      font-family:tahoma;
      font-size:12px;
  }
</style>
</head>

<body>
<?php
  $db = new mysqli('localhost', 'db-user', 'db-pass', 'db-name');
  if($db->connect_errno > 0){
      die('خطا در زمان اتصال به پایگاه داده [' . $db->connect_error . ']');
  }else{
      $db->set_charset("utf8");
      $result = $db->query("select * from tbl_names");
      echo "<table border='1' style='direction:rtl'>";
      echo "<tr style='font-weight:bold;background-color:#ccc'>";
      echo "<td>نام</td>";
      echo "<td>نام خانوادگی</td>";
      echo "<td>کد ملی</td>";
      echo "</tr>";
      while($row = $result->fetch_assoc()){
        echo "<tr>";
        echo "<td>{$row['fld_name']}</td>";
        echo "<td>{$row['fld_family']}</td>";
        echo "<td>{$row['fld_idnumber']}</td>";
        echo "</tr>";
      }
      echo "</table>";
      $result->free();
      $db->close();
  }
?>
</body>

</html>

موفق باشین.