وبلاگ شخصي
 
به

وبلاگ شخصی حسین مرگانی

خوش آمدید
Welcome to

Hossein Margani's Weblog

محیط های برنامه نویسی آنلاین 07:15 02/05/1389

فقط می تونم بگم فوق العاده است.

 

 

کاراکتر جداکننده zwnj 11:56 13/12/1388
توی یکی از سایتها میگشتم که چشمم خورد به کاراکتر جالبی که باعث میشه دو کاراکتر از هم جدا بشن ولی خود این کاراکتر اصلاً دیده نمی شه. مثل فاصله (Space) با این تفاوت که مثل اون اصلاً جایی نمی گیره. کاراکتر zwnj که مخفف zero-width non-joiner هست توی html مثل بقیه کاراکترها بصورت ‌ استفاده میشه.
مثلاً IBM بصورت فارسی اینطور نوشته میشه: آی بی ام، ولی اگر از این کاراکتر استفاده کنیم، میشه: آی‌بی‌ام، که html اون به این صورت میشه: آی‌بی‌ام

حل مشکل کندی اجرای برنامه های تحت وب در ویندوز 7 16:45 23/06/1388

مدتیه که از ویندوز 7 استفاده می کنم متوجه مشکلی شدم. موقعی که برنامه تحت وب رو اجرا می کنم و آدرس مثلاً http://localhost/WebApp بازمیشه خیلی سرعت پائینه و اگر این آدرس رو به این شکل http://127.0.0.1/WebApp تغییر بدیم خوب اجرا میشه. یه کمی که جستجو کردم. مشکل رو پیدا کردم. علتش مربوط میشه به استفاده از پروتکل IPv4 و IPv6 که برای localhost در ویندوز 7 دو رکورد DNS قرارداده شده، یکی 127.0.0.1 و یکی ::1 که این دومی کار رو خراب میکنه. کافیه فایل hosts رو بدین شکل تغییر دهید:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host
# localhost name resolution is handled within DNS itself.
127.0.0.1       localhost 

اون خطوطی که اولش کاراکتر # داره همونطور که مشخصه توضیحاته که استفاده نمیشه. اما خط آخر مشخص میکنه که localhost همون 127.0.0.1 است.

همین!

برای اطلاعات بیشتر به آدرس زیر بروید:

serverfault.com: Windows 7 localhost name resolution ...

خارج کردن کد جاوا اسکریپت از حالت فشرده 12:49 19/06/1388

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

برنامه jsbeautifier این کد رو به شکلی خوانا در می آره.

Online javascript beautifier

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

 
ضمن اینکه من کد HTML رو هم بهش دادم اون رو به شکل خوانا در آورد.
راه حل مشکل دانلود صفحه ASP.NET به جای نمایش در مرورگر 19:15 31/05/1388

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

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

 <%@ OutputCache Duration="25" VaryByParam="None" %>

این کار یه کار معمولیه که باعث میشه صفحه به مدت  25 ثانیه هم در حافظه نهان مرورگر کاربر (Client) و هم در حافظه نهان سرور(Server) و هم در سرورهای واسط بین سرور و مرورگر کاربر (Proxy Server) اصطلاحاً Cache شود و نیازی به بازیابی اطلاعات صفحه نیست. مشکل وقتی بوجود می آید که این صفحه زمانی که در سرورها کش می شود برای کدام مرورگر این کار انجام میشود. تصور کنید زمانی که قرار است این صفحه کش شود درخواست توسط مرورگر یک موبایل انجام شود. سرور اطلاعات صفحه را برای مرورگر یک موبایل کش می کند و تا 25 ثانیه بعد اگر مرورگری از نوع دیگر مثلاً PC درخواست همان صفحه را بکند سرور اطلاعات صفحه را بصورت کش شده به درخواست کننده ارسال می کند و از آنجائیکه مرورگر موبایل Content-Type درخواستی را بصورت text/vnd.wap.wml مشخص میکند و مرورگر دیگر هم به همین صورت اطلاعات را دریافت می کند بنابراین به دلیل ناشناخته بودن Content-Type برای مرورگر PC پنجره دانلود نمایش داده میشود و کل صفحه به صورت یک فایل دانلود می شود.

برای حل مشکل باید از صفت VaryByCustom از OutputCache استفاده کنیم. بدین صورت:

<%@ OutputCache Duration="25" VaryByParam="None" VaryByCustom="browser" %>

این کار باعث میشود که اطلاعات کش شده به تفکیک نوع مرورگر کش شود. همچنین browser برای دات نت شناخته شده است که اتوماتیک این کار انجام میشود. ولی این جمله از MSDN گفته شده و عملاً این کار انجام نمی شود. برای اطمینان از این کار باید در فایل Global.asax متدی رو override کنید. بدین صورت:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "browser")
    {
        return Request.Browser.Browser;
    }
}

این کار باعث می شود که صفحات به تفکیک مرورگر و دقیقاً نوع مرورگر مثلاً IE، یا Firefox کش شود. حتی برای اطمینان کامل می توانید نسخه مرورگر کاربر یعنی Request.Browser.MajorVersion یا Request.Browser.MinorVersion را هم دخالت دهید. بدین صورت:

return Request.Browser.Browser +
    Request.Browser.MajorVersion +
    Request.Browser.MinorVersion;

همین!

یه مشت نقل قول درباره برنامه نویسی 11:33 27/11/1387
  • اشکال زدایی دو برابر سخت تر از کد نویسیه. بنابراین اگر شما کدی رو در نهایت باهوشی بنویسید باز آنقدر باهوش نیستید که آن را اشکال زدایی کنید. (Brian Kernighan)
  • فقط دو نوع زبان برنامه نویسی وجود داره، یکی که افراد از اون شاکی ان، و یکی که اصلاً کسی باهاش کد نمی نویسه. (Bjarne Stroustrup)
  • هر احمقی می تونه کدی بنویسه که کامپیوتر متوجه بشه، برنامه نویس خوب کدی می نویسه که هر انسانی متوجه بشه. (Martin Fowler)
  • دو راه برای طراحی نرم افزار وجود داره، یه راه اینکه اون رو طوری بنویسیم که ظاهرا هیچ نقصی نداره، راه دیگه اینه که آنقدر پیچیده طراحی کنیم که هیچ نقص ظاهری نداره. راه اول خیلی مشکل تره. (C.A.R. Hoare)
  • اکثر نرم افزارهای امروزه بیشتر شبیه اهرام مصره با میلیونها آجر چیده شده روی یکدیگر بدون هیچ نقص ساختاری، اما توسط هزاران برده و نیرو بی رحمانه انجام شده. (Alan Kay)
  • مقیاس گذاری پیشرفت نرم افزار با خطوط کد نوشته شده همانند مقیاس گذاری پیشرفت ساخت هواپیماست با وزن آن. (Bill Gates)
  • اگر عزم ساخت و توسعه یه چیز جدید و بزرگ دارید نیاز به میلیونها دلار سرمایه ندارید، پیتزا به مقدار کافی ونوشابه بعلاوه یه PC ارزون قیمت که روش کار کنید و یه جو اراده که به کار ادامه بدین. (John Carmack)
  • برنامه ها بایستی برای افراد نوشته شن که بخونن و در ضمن اون برای ماشین که روی اون اجرا بشن. (Abelson / Sussman)
  • سوال: چطور یه پروژه بزرگ نرم افزاری یه سال دیرتر به پایان میرسه؟ پاسخ: با هر بار یه روز (Fred Brooks)
  • هیچ کس نباید یه پروژه بزرگ رو قبول کنه. با یک پروژه کوچک جزئی شروع کنید و اصلاً نباید از پروژه انتظار گسترده شدن داشته باشید. اگه همچین انتظاری داشته باشید، فقط کار بیهوده ای کرده اید و کلاً تصور می کنید که پروژه خیلی مهم تر از اینه که در اون مرحله به نظر می رسه. یا بدتر، از اندازه کاری که با آن روبرو هستید وحشت کنید، بنابراین کم شروع کنید و درباره جزئیات فکر کنید. به تصور بزرگ و طراحی تجملی فکر نکنید. اگر بعضی نیازهای فوری برطرف نشد، تقریباً نصف راه رو رفته اید، انتظار نداشته باشید کاربران به یکباره وارد کار شوند و به شما کمک کنند. باید تا نیمه های راه بروید و کاربرد را ایجاد کنید، اونوقت خود کاربران به سراغ شما می آیند و به شما کمک می کنند چون به نظرشان تقریباً همان چیزی بوده که آنها دنبالشان بوده اند. (Linus Torvalds)
ملزومات برنامه نویسی 14:41 25/10/1387

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

  • هر برنامه نویس نیاز به فضای کار بزرگ دارد: این کار زمان لازم برای پیدا کردن یک کاغذ یا خودکار رو بصورت رادیکالی کاهش میده
  • هر برنامه نویس باید دو تا مونیتور داشته باشه: این کار باعث میشه برنامه نویس فضای بیشتری داشته باشه برای راهنماها مثل MSDN یا انتخاب عکس یا آیکون یا جستجو در اینترنت. همچنین زمانی که برای بستن یا Minimize کردن پنجره ها صرف می شد حذف میشه.
  • کامپیوتر هر برنامه نویس باید امکانات کاملی داشته باشد: برنامه نویسا باید بهترین سخت افزارها در اختیارشون باشه چون نصف زندگیشونو پشت کامپیوترن. دلیل دیگه اینکه هیچ برنامه نویسی خوشش نمی آد که منتظر کامپایل یه برنامه،ا اجرای یک برنامه بشه.
  • هر برنامه نویس باید صندلی راحتی داشته باشه: چون یه برنامه نویس مدتهای طولانی روی صندلیش می شینه بنابراین باید صندلی راحتی داشته باشه. ضمن اینکه فکر نمی کنم وقتی آدم در اون قسمت احساس درد می کنه مغز بتونه کار کنه!
  • هر برنامه نویس باید خوردنی کنار دستش باشه مخصوصاً چای یا قهوه: بعضی روزها برنامه نویس بیشتر از معمول کار می کنه، بنابراین چای یا قهوه و خوردنی جات باعث می شه بتونه ادامه بده. البته سیگار جزو این دسته نمیشه.
  • هر برنامه نویس باید موس و صفحه کلید دلخواهشو داشته باشه: مثل اکثر برنامه نویسا من دوست دارم صفحه کلید نرم و صاف داشته باشم مثل صفحه کلید لپ تاپ. بهتره صفحه کلید خاص نباشه که کلیدای خفن روش باشه، یه صفحه کلید معمولی که محل دکمه ها مثل اکثر صفحه کلیدا باشه. در مورد موس هم یه موس نرم که کلیداش نرم باشه و حتماً اسکرول هم داشته باشه.
  • هر برنامه نویس باید اینترنت با سرعت بالا داشته باشه: این مسئله مهم تر میشه وقتی راهنمای offline ندارین. مثل MSDN. یادم می آد وقتی مشکلی برام پیش میومد، چه خطای syntax په مشکلای برنامه ای بلافاصله وصل می شدیم به اینترنت، با مودم 56K که در اصلی 33K بود و یه 30 ثانیه ای هم وصل شدنمون طول می کشید حدوداً یه جستجوی Google و پیدا کردن مشکل یه ربعی وقتمونو می گرفت، ضمن اینکه به خاطر هزینش بعد از اینکه کارمون تموم می شد مجبور می شدیم قطعش کنیم. بعدها که اینترنت ADSL گرفتم این زمان به 5 دقیقه کاهش پیدا کرد. و البته با اعصاب راحتتر مشکلمو حل می کنم. و با همین کار ساده 15% از زمان کار کم میشه.
  • هر برنامه نویس باید حق داشته باشه بپرسه: چرا؟: چند دفعه احساس کردین پروژه ای که دارین روش کار می کنین مشکل داره و باید درست بشه؟ مثلاً طراحی فرمی که بهتون دادن بنویسین خوب نیست و باید بهتر باشه، قشنگ تر باشه. و می بینید که کسی که این طراحی رو انجام داده از کد نویسی چیزی نمی دونه و اصرار داره که حتماً این طوری طراحی بشه. بهتره جو طوری باشه که برنامه نویس در گفتن این جور انتقادات راحت باشه و بتونه نظرشو راحت بگه.
  • برنامه نویس باید دسترسی به هر منبع و کتاب و مقاله و مستندی رو داشته باشه مخصوصاً Google: چرا مدیرا فکر می کنن کسی که برنامه نویسه باید هر چیزی رو در خصوص زبانهای برنامه نویسی و برنامه ها و محیط های IDE بدونه؟ پس Google برای چیه؟ کلاً 10 دقیقه بیشتر طول نمی کشه که یه مطلب که اصلاً در موردش چیزی نمی دونی با کلی مثال و مطلب، کامل یاد بگیری. به فرض هم که برنامه نویس حرفه ای باشه یه جایی یه موقعی نیاز به کمک داره، نیاز به این داره که از تجربیات دیگران استفاده کنه.
  • هر برنامه نویس باید حق داشته باشه هر چی دوست داره بپوشه: نمی تونم تصور کنم که یه برنامه نویس با کت و شلوار و کقش ورنی و کروات! نشسته داره برنامه نویسی می کنه. ممکنه برای ملاقات ها و جلسه ها لازم باشه که لباس رسمی پوشیده بشه ولی خود من اینطوری ام وقتی برنامه نویسی می کنم یه لباس راحت مثل تی شرت و شلوار کتون و کفش راحتی و یا دمپایی بپوشم. البته تو این مورد یه خورده باید فکر بقیه رو هم بکنین که اگه سوالی ازتون دارن روشون بشه بیانو سوال بپرسن و به خاطر پی جامه که پاتونه قید صحبت با شما رو بزنن!
یه برنامه نویس به چه چیزای دیگه می تونه نیاز داشته باشه؟
چرخه توسعه نرم افزار 04:00 24/10/1387
  1. برنامه نویس کدنویسی رو تموم می کنه و معتقده هیچ باگی نداره
  2. برنامه تست میشه و 20 تا باگ پیدا مشه
  3. برنامه نویس 10 تاشو تصحیح می کنه و به تیم تست توضیح میده که 10 تای دیگه اصلاً باگ یا اشکال نیست
  4. تیم تست متوجه میشه 5 تا از این تصحیح ها کار نمیکنه و 15 تا باگ جدید پیدا می کنه
  5. تا زمانیکه رئیس شرکت صداش در نیومده برو به 3
  6. به علت فشار بازار و یا رسیدن زمان تحویل پروژه، محصول عرضه میشه
  7. کاربران 137 تا باگ جدید پیدا می کنن
  8. برنامه نویس اصلی پولشو گرفته و آب شده رفته زمین
  9. تیم برنامه نویسی جدیدی شکل می گیره و همه ی 137 تا باگ رو تصحیح می کنه و 456 تا باگ جدید پیدا مشه
  10. برنامه نویس اصلی به تیم تست فعلی که هنوز پولشو نگرفته یک کارت پستال از فیجی می فرسته که باعث میشه تیم تست استعفا بده
  11. شرکت که محصولش الان 783 تا باگ داره توسط شرکت رقیب خریده میشه و تحول اساسی در شرکت شکل میگیره
  12. رئیس جدید، هیئت مدیره جدید شکل میده و برنامه نویس استخدام میکنه که کار رو از اول دوباره انجام بده
  13. برنامه نویس کدنویسی رو تموم می کنه و معتقده هیچ باگی...

تگها: , ,

SE

علت استفاده از یک کاراکتر برای متغیر ایندکس 11:52 23/10/1387
به مطلبی برخوردم که جالب بود. اصولا چرا برنامه نویسا برای متغیرهای ایندکس مثل حلقه از i، j، k و مانند این استفاده می کنن؟ قضیه از این قراره که قدیما که زبان برنامه نویسی رایج FORTRAN بوده برای نسخه های اولیه این زبان نام متغیرهاییکه از نوع integer بوده باید حتماً با یکی از کاراکترهای i تا n انتخاب بشه. و همین طور چون نام متغیر طولانی تر حافظه بشتری می گیره و اون زمان برای گرفتن حافظه درمضیقه بودن، از نامهای یک کاراکتری و اون هم i یا j یا k استفاده می کردن و ما هم چون کسایی که به ما برنامه نویسی یاد دادن از همون قدیمیا بودن از همونا یاد گرفتیم. البته مدرنیته باعث شده جدیداً به جای اینها از کلمه index استفاده کنن.
جا داره بگم گفته شده که i، j،k نامهای بدی برای متغیرها هستن و نباید از این نامها برای متغیرها استفاده کرد. بهتره از نامهایی مثل count, index و غیره استفاده بشه.

تگها: ,

My Mind


Spread Firefox Affiliate Button


Software tracking