۱۳۸۸ دی ۴, جمعه

تکان

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

مصداق بارز این موضوع در استفاده از IE 6.0 است. با وجود اینکه IE 7.0 و 8.0 کاملا رایگان هستند باز هم در بیشتر ادارات هنوز از IE 6.0 استفاده می شود (البته شاید اگر رایگان نبودند بیشتر مورد توجه قرار می گرفتند). IE 6.0 حتی قادر نیست فایل های تصویری PNG را به صورت Transparent نمایش دهد و اگر بتوان گفت که استاندارد است، با استاندارد های قدیمی سازگار است. وجود IE 6.0 باعث می شود که طراح سایت یا برنامه نویس بعضی از ویژگی های جدید را از دست بدهد تا سازگاری را بدست آورد.

گاهی اوقات کارفرما تصور می کند این که توسعه دهنده می گوید IE 6.0 را پشتیبانی نمی کنم بخاطر تنبلی اوست!

اما باید برای آن دسته از کارفرمایان یا مدیران گفت که خوشبختانه یا متاسفانه حتی خود مایکروسافت نیز در SharePoint 2010 دیگر از IE 6.0 پشتیبانی نمی کند!

امید است که ادرات ما تکانی به خود بدهند.

۱۳۸۸ مهر ۱۰, جمعه

چگونگی آموزش #C به یک فرد کاملا مبتدی

این سوال همیشه در ذهنم بوده که اگر یک شخص  کاملا بی تجربه (به شرط داشتن حداقل هوش، استعداد و علاقه ی لازم)، در ابتدای دهه ی سوم از زندگی خود و در سال 2009 تصمیم به یادگیری برنامه نویسی داشته باشد باید از کجا شروع کند؟ ما در اواخر دهه ی 70 خورشیدی از انواع Basic یعنی GWBasic و QBasic و غیره شروع کردیم و به صورت رویه ای برنامه نوشتیم بعد به زبان های حرفه ای تر _اما همچنان رویه ای_ مانند Pascal و سپس C رجوع کردیم و به مرور زمان به زبان های شی گرا مانند ++C و در حال حاظر به #C رسیدیم و در این مسیر گاهی اوقات بدون اینکه بدانیم، Reverse Engineering کردیم! کسی هم در آن زمان نمی توانست بگوید مسیر غلطی پیمودیم.

تجربه ی ما چیزی در حدود 9 سال زمان برده و اگر شخصی که اکنون تصمیم به یادگیری گرفته تصور کند که چنین زمانی لازم دارد تا یک برنامه نویس حرفه ای شود احتمالا از تصمیم خود بر خواهد گشت (مخصوصا اگر هم سن و سال ما باشد).

بهترین کتابی که در تمام عمرم در مورد آموزش توسعه ی نرم افزار و تفکر در این مورد دیدم کتاب آموزش برنامه نویسی شی گرا با ++C نوشته آقای رابرت لی فور (Robert Lafore) بوده. “در این کتاب فرض شده خواننده حتی با زبان C هم آشنایی ندارد… شاید این اشتباه باشد که برنامه نویس ابتدا زبان های رویه ای را بیاموزد و سپس به سمت شی گرایی برود. برنامه نویس باید از ابتدا به صورت شی گرا تفکر کند و برنامه های خود را از پایه به صورت شی گرا بنویسد”. به شخصه هرچه زودتر با این کتاب آشنا می شدم کمتر وقتم را هدر میدادم. اما اکنون که برنامه نویسان نوپا مایل به برنامه نویسی در زبان های سطح بالاتر و جدیدتر مانند #C هستند جای چنین کتابی برای این چنین زبان هایی خالی به نظر می رسد!

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

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

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

اگر بخواهم جمع بندی کنم به نظر من برای برنامه نویس شدن در کوتاهترین زمان و بهترین یادگیری، جدا از علاقه و سماجت و …، باید موارد زیر را هم در نظر بگیریم:

1. اول کاربرد، بعد یادگیری (اول سوال بعد جواب)

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

2. هرچیزی که می بینیم باید بتوانیم بسازیم یا حداقل بدانیم چطور بسازیم

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

3. از چیزهایی که نمی دانیم ترس نداشته باشیم در عین حال سعی کنیم به مرور از پشت صحنه ی هر اتفاق سر در بیاوریم

مثلا وقتی می بینیم یک Object از نوع Form در #C این همه متد و خصیصه دارد نگران نشویم و تمام وقت خود را صرف یادگیری همه آنها نکنیم چون به مرور زمان و حتی ناخواسته با بیشتر آنها آشنا خواهیم شد. و از طرف دیگر در موارد ساده تر مثلا وقتی با #C از دستور Console.Write(“test”) استفاده می کنیم سعی کنیم بدانیم که چه اتفاقاتی می افتد تا کلمه test روی مانیتور نمایش داده می شود. البته در این مورد باید از زیاده روی جلوگیری کرد و این کار به مرور انجام شود، وگرنه ممکن است از راه اصلی دور شویم. (اما وقتی که حرفه ای تر شدیم باید همه چیز را بدانیم تا یک توسعه گر موفق باشیم و در همه جا جایی داشته باشیم)

4. جمله معروف “از یک چیز همه چیز و از همه چیز یک چیز”

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

۱۳۸۸ شهریور ۳۰, دوشنبه

حیله ی وصله ی دانلود

چند روز پیش استفاده از VS2010 به ذهنمان خطور کرد. از یکی از دوستان که از پهنای باند و سرعت خوب اینترنت برخوردار بود و منزلش هم بسیار نزدیک بود خواستم تا VS2010 را دانلود کند.

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

نمی دانم چرا حدس زدم شاید این حیله عملی باشد: با Firefox فایل مورد نظر که حدود 700MB بود را برای دانلود انتخاب کردم و به محض شروع دانلود آنرا Stop کردم، سپس به انتهای فایل ناقصی که از دوستم گرفته بودم پسوند .part اضافه کردم و به جای فایلی که Firefox ایجاد کرده بود Replace کردم و بعد دکمه Resume از Firefox Downloads را زدم! دانلود شروع شد اما از حدود 640MB به بعد. بعد از اتمام دانلود فایل به درستی اجرا شد!

۱۳۸۸ شهریور ۲۵, چهارشنبه

Microsoft Surface

Microsoft Surface یک کامپیوتر Multi-Touch انقلابی است که به حرکات طبیعی دست و اشیاء واقعی جهان پاسخ می دهد و به افرادی که با آن کار می کنند کمک می کند تا با یک ابزار دیجیتال ساده و قابل درک با یک User Interface افقی بزرگ در یک مکان و در یک زمان به همراه چند نفر بتوانند با یکدیگر بر روی یک سری اطلاعات مشخص کار کنند.

Microsoft Surface

این تعبیر تعبیریست که شرکت ماکروسافت در توضیح این میز بیان کرده که پر بی راه هم نگفته.

و حالا تعبیر ما ، به بیان ساده تر یک میز به ابعاد (82.5cm:ارتفاع،124.5cm:طول،86cm:عرض) که صفحه روی این میز یک LCD با قابلیت Multi-Touch و با ابعاد (82.5cm:ارتفاع،124.5cm:طول،86cm:عرض) با بدنه فلزی حدود (82kg) که فقط در آمریکا و کانادا عرضه می شود و با با بدنه Acrylic که وزن آن به (90kg) میرسد.

اما مشخصات فنی این میز هوشمند که عبارت است از :

Network Protocols and Standards
  • Network adapter: Intel Gb LAN
  • Wireless LAN connectivity supported: Yes
  • Networking and Data Protocols: IEEE802.11b,IEEE802.11g, Bluetooth 2.0, Gigabit Ethernet
I/O Connections
  • 2 headphone jacks
  • 6 USB 2.0 ports
  • RGB component video
  • S-VGA video (DB15 external VGA connector)
  • Component audio
  • Ethernet port (Gigabit Ethernet card [10/100/1000])
  • External monitor port
  • Bays for routing cables
  • On/Standby power button
AC Input Ratings
  • AC input: 100-240 VAC, 50/60Hz, 10A, 650W
Display
  • Type: 30-inch XGA DLP® projector
  • ATI X1650 graphics card with 256 MB of memory
  • Maximum resolution: 1024 x 768
  • Lamp mean-life expectancy: 6,000+ hours
  • Maximum pressure on the display: 50 pounds per
    square inch/3.5 kg per cm
  • Maximum load: 200 pounds
Input Devices
  • Camera-based vision system with LED infrared
    direct illumination
Computing System
  • 2.13-GHz Intel® CoreTM 2 Duo processor
  • Memory: 2 GB dual-channel DDR2
  • Storage: Minimum 250 GB SATA hard-disk drive
Audio
  • Output type: Stereo fl at panel built-in speakers
  • Output compliant standards: Stereo
  • Input: None

این میز هم از یک میز بیشتره و هم از یک کامپیوتر . میشه گفت این میز یک حر کت به جلو در دنیای دیجیتال به حساب میاد که قرار است دنیای میزگرد ها جلسه های پرزنت و جلسه های آموزشی و … رو متحول کنه و شما رو وادار می کنه تا از دست خودتون بیشتر لذت ببرید.

همان گونه که در بالا گفته شد مهمترین نکات این میز Digital قابلیت Multi-Touch بودن و هم کاری همزمان چند کاربر بر روی یکسری اطلاعات است به این گونه که سه یا چهار نفر در یک آن واحد می توانند بر روی یک موضوع واحد بر روی این میز شروع به کار کنند این میز توانایی شناسایی و مشاهده وسیله ای که آن را لمس می کند را داراست و برای این کار از تعدادی دوربین و تکنولوژی Infrared استفاده می کند.

پایه و بنای سیستم عامل این میز قدرتمن دیجیتال همان Windows Vista SP1 است که بسیار ساده و اختصاصی برای مدیریت ، پشتیبانی و توسعه آن ساخته شده و اسم آن را Microsoft Surface 1.0 Service Pack 1 گذاشته اند و علاوه بر آن یک واسط گرافیکی بسیار قدرتمند به مالکان این میز کمک میکند تا به نحو احسنت از این میز استفاده کنند.

و اما اصل مطلب یعنی چگونه می شود برای این Plat Form نرم افزار تولید کرد ؟

برای این کار احتیاج به Microsoft Surface SDK 1.0 SP1 دارید و البته یه Microsoft Surface برای تست پروژه هاتون.

ماکروسافت برای وسیع کردن دامنه برنامه نویسان این ابزار جدید آن را سازگار با خانواده ای از ابزار های توسعه مانند :

  • Microsoft® Windows Presentation Foundation (WPF)
  • Microsoft® XNA™
  • Microsoft® Visual C#® 2008 Express Edition
  • Microsoft® Visual Studio® 2008 SP1
  • Microsoft® Expression® Studio 2
  • Microsoft® Expression Blend™ 2

    ساخته است.

    فکر کنم تا همین جا کافیست برای بدست آورن بقیه مطالب و بیشتر تحت تاثیر قرار گرفتن میتوانید به لینک زیر مراجعه کنید :

    Microsoft Surface


    پاورقی: این پست با نرم افزار Windows Live Writer ارسال شده.

  • ۱۳۸۸ شهریور ۲۱, شنبه

    Singularity OS

    قبلا در مورد هسته هایی که با #C ساخته شده اند (C# Kernels) یک پست ارسال کرده بودم. از بین چند Kernel توسعه داده شده Singularity از دیگران کاملتر است.

    این روزها بیشتر روی این سیستم عامل تحقیقاتی وقت سرف کردم. مخصوصا وقتی فهمیدم مایکروسافت به توسعه یک سیستم عامل Managed Code به نام Midori مشغول است که تقریبا نسخه تجاری Singularity به حساب می آید و بعضی اعلام می کنند که جایگزین Windows خواهد بود. به همین دلیل صرف وقت روی Singularity شاید شبیه وقت گذاشتن روی Source سیستم عامل Unix در سالهای ابتدایی اختراع آن باشد.

    مهمترین دلیل ساخت این سیستم عامل این است که طراحی سیستم عامل های کنونی ما به 40 سال قبل بر میگردد! از آن زمان تا کنون ما روی چند سیستم عامل اصلی پا فشاری کردیم مانند، Unix، Linux، Mac و Windows. که همگی دارای معماری قدیمی هستند. البته بخشی از این موضوع اجتناب ناپذیر است.

    مهمترین ویژگی Singularity این است که از ابتدا طراحی شده! این سیستم از نوع Language-Based است و سعی شده از خطای انسانی تا حد امکان جلوگیری شود. و برای پیاده سازی آن یک زبان به نام Sing# ساخته شده که از Spec# مشتق شده، و خود Spec# هم از C# .

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

    در جدول زیر مقایسه ای بین سیستم عامل های معروف و Singularity صورت گرفته که بسیار جالب است. به عدد ها و رقم ها دقت کنید و خودتان مقایسه کنید.

    Capture1

    هر پردازه (Process) در قالب یک SIP (Software-Isolated Processe) اجرا می شود که بر خلاف سیستم عامل های کنونی که همیشه پردازه ها به صورت سخت افزاری Isolate می شدند، در اینجا به صورت نرم افزاری Isolate خواهند شد. اندازه فایل های اجرایی با فایل های تولید شده توسط ++C/C قابل مقایسه است.

    image

    کل سیستم عامل Singularity در یک فضای آدرس فیزیکی (Physical Address Space) اجرا می شود و مدیریت حافظه به صورت نرم افزاری صورت می گیرد (بر خلاف سیستم عامل های قبلی). حافظه مورد استفاده برنامه ها نیز قابل مقایسه با دیگر زبانهاست.

    image

    ارتباط بین پردازه ها (Processes) فقط توسط کانال ها (Channels) صورت می گیرد. به این ترتیب که یک پردازه شروع کننده ارتباط خواهد بود و طرف دیگر ارتباط را قبول میکند (مانند ارتباطات شبکه). در صورتی که حجم تبادلی داده زیاد باشد باز هم از حافظه اشتراکی (Shared Memory) استفاده نمی شود اما این انتقال به شکل کپی یا Pipe صورت نمی گیرد و در کمترین زمان ممکن اتفاق می افتد. یعنی سیستم عامل Singularity برای انتقال حجم زیاد داده بین پردازه ها تدابیر خوبی دیده و Performance در نظر گرفته شده. جدول زیر را مطالعه کنید.

    Capture3 
    در Singularity هر فایل اجرایی یک Manifest دارد. هیچ فایل اجرایی بدون Manifest اجرا نخواهد شد. به این برنامه ها Manifest-Based گفته می شود. Manifest برنامه، اطلاعاتی در مورد برنامه، مثلا اینکه به چه منابعی نیاز دارد در اختیار می گذارد.

    برای دیدن مقایسه Performance خواند و نوشتن روی دیسک بین Singularity و دیگر سیستم عامل ها، روی تصویر زیر Click کنید.

    Capture

    من توانستم 2.0 Singularity را روی VirtualPC بالا بیاورم، به سرویس شبکه آن IP بدهم و WebServer داخلی آنرا اجرا کنم و از روی سیستم Host خودم از Singularity سرویس HTTP دریافت کنم.

    اکنون مدتی از ارائه ی ویرایش دوم این سیستم عامل می گذرد و توسعه ی آن همچنان ادامه دارد.

    ۱۳۸۸ شهریور ۸, یکشنبه

    Visual Studio Team System Web Access 2008

    این هم یک پست بسیار مفید برای مدیران شرکت های نرم افزاری و یا کسانی که گروه های برنامه نویسی را مدیریت می کنند که البته به قول ما در قله تکنولوژی به سر می برند و از نرم افزار Microsoft Visual Studio Team System برای مدیریت پروژه ها و برنامه نویسان خود استفاده می کنند.
    شاید از اسم آن مشخص باشد که در مورد چه چیزی می خواهیم صحبت کنیم . به قول یکی از دوستان در دورانی از دنیای تجارت شرکت های تجاری بعد از تولید محصول خود و گرفتن Feed Back ها از مشتریان متوجه می شدند که مشتریان آنها و مردم به چه چیزهایی نیاز دارند تا آن قابلییت ها را در محصولات خود قرار دهند و در نتیجه دارای فروش خوب و سود خوبی باشند . اما هم اکنون وضع تغییر کرده و دنیای رقابت به هیچ شرکتی مجال نمی دهد تا چنین وقتی برای پیشرفت محصولات خود را صرف کند در نتیجه خود شرکت ها باید آستین را بالازده و به فکر بیفتند که چه چیزهایی برای مردم مورد نیاز است که خود مردم هم خبر ندارند تا آنها را در محصولات خود قرار دهند تا با فروش بالا و محبوبیت محصول خود مواجه شوند.
    زمانیکه ما با این نرم افزار که یکی از Accessories های VSTS است بر خورد کردیم به خود گفتیم چه جالب ما و مدیرهای دیگری که تعدادی پروژه و برنامه نویس در زیر دست خود دارند و نیاز به مدیریت همه جانبه آنها دارند چقدر به این نرم افزار نیاز داشتیم و خود خبر نداشتیم و این همان نکته ای است که در بالا در مورد آن صحبت کردیم.
    حالا برسیم به ( Web Access ) که با کلیک بر روی آن می تونید آن را دریافت کنید.
    کسانی که برای مدیریت پروژها و برنامه نویسان خود از نرم افزار Microsoft Visual Studio Team System استفاده می کنند
    یکی از مشکلاتشان برای مدیریت زمانیست که از شرکت خود خارج می شوند و نمی توانند به راحتی به سرور خود دسترسی پیدا کنند مگر اینکه تنظیماتی را برای سرور خود قرار دهند که خود ریسک های امنیتی خاص خود را دارد اما اینجاست که ابزار Web Access خود را نشان می دهد.
    بعد از دانلود کردن فایل TeamSystemWebAccess.msi را بر روی سرور خود اجرا کنید و آن را نصب کنید . به صورت پیش فرض این نرم افزار بر روی Port : 8090 نصب می شود که ما هم پیشنهاد می کنیم آن را تغییر ندهید مگر اینکه شما بر روی این Port نرم افزار دیگری را در حال اجرا دارید.
    بعد از نصب تنها با در دست داشتن اینترنت با باز کردن یک مرور گر و وارد کردن آدرس http://servername:8090/ و وارد کردن نام کاربری و کلمه عبور خود می توانید از تمامی قابلیت های VSTS برای مدیریت پروژه ها و برنامه نویس های خود که در داخل شرکت استفاده می کردید با امنیت بسیار بالا استفاده کنید :
    1. نمایش تمامی پروژه های در دسترس شما.
    2. بروز کردن تمام اطلاعات پروژه های در دسترس.
    3. اضافه کردن انواع Work Item برای پروژه های در دسترس.
    4. ساخت ، به اشتراک گذاشتن و اجرا کردن انواع Work Item Queries .
    5. دسترسی به Process Guidance.
    6. دسترسی بسیار آسان و دم دست و UI زیبا و به تمام معنا User Friendly .

    خیلی لذت بخش است که یک شرکت تمام نیاز های ما را شناخته و با ساخت و تولید نرم افزار های مورد نیاز ، نیاز ما را بر طرف می کند امیدوارم بعد از خواندن این پست نیاز شما هم بر طرف شده باشد.
    و در آخر هم باید اضافه کنم که SP1 این نرم افزار هم توسط شرکت ماکروسافت ارائه شده که پیدا کردن و نصب آن را به خود شما محول می کنم.
    البته مد نظر داشته باشید که برای این پست ما مبنا را بر این قرار دادیم که شما با محیط VSTS آشنا هستید و در صورتیکه شما همچنان با محیط VSTS آشنایی ندارید توصیه ما به شما این است که بعد از خواندن این پست تمام فعالیت های خود را کنسل کرده و به دنبال بدست آوردن این تکنولوژی برای خود باشید و بعد از بدست آوردن و استفاده نظر خود را در رابطه با این نرم افزار برای ما ارسال کنید.

    ۱۳۸۸ مرداد ۲۲, پنجشنبه

    نصب TFS 2008 بر روی Windows Server 2008 و SQL Server 2008

    حرکت بر نوک لبه ی تکنولوژی این دردسر ها را هم دارد!

    اولین مشکل پیدا کردن یک Activation درست برای Windows Server 2008 است. که به طور کلی سه مدل Activation برای ما وجود دارد.

    1. مدل اول که وقتی روی My Computer راست کلیک میکنید همیشه یک پیغام در مورد Active کردن Windows میبینید ولی نباید به آن اهمیت بدهید و همه چیز درست کار میکند حتی بعد از 60 روز.
    2. مدل دوم که پیغام گفته شده در بالا را نمی بینید ولی در عوض Windows Server 2008 تبدیل به یک Windows Vista Ultimate می شود و شما ویژگی های Server را از دست می دهید (ما این کار را کردیم، در ابتدا همه چیز رو به راه بود تا اینکه TFS را نصب کردیم و دیگر هیچ چیز رو به راه نبود).
    3. مدل سوم خرید یک Activation تقریبا سه میلیون تومانی است.

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

    دومین مساله اینکه برای نصب TFS 2008 بر روی SQL Server 2008 باید با دستان خود یک Pack جدید نصبی TFS 2008 SP1 ایجاد کنید. که خرجش 100MB دانلود SP1 و مقداری دستورات Commad ی است. به عبارت دیگر شما باید SP1 را جداگانه دانلود کرده و با استفاده از msiexec.exe آنرا را به خورد TFS 2008 ی که بدون SP1 است بدهید که به آن TFS 2008 and SP1 می گویند، و آنرا نصب نمایید. یا اینکه به بازار بروید و آخرین نسخه TFS 2008 به همراه سرویس پک را خریداری نمایید.

    در هنگام نصب اگر مراحل را درست دنبال کنید هیچ مشکلی مشاهده نمی کنید تا اینکه سیستم به درستی بالا می آید و همه چیز ظاهرا مرتب است به جز 2 مورد اصلی:

    1. اول اینکه بعد از نصب Team Explorer و ساخت یک Team Project جدید، وقتی در VS پروژه تیمی را باز میکنید یک ضرب در قرمز در کنار Reports مشاهده می کنید. البته این مورد با نصب VS 2008 SP1 رفع میشود.
    2. دوم اینکه هیچ گزارشی از TFS نمی توانید بگیرید. قسمت گزارش TFS کار نمی کند. برای این مشکل یک راه در اینجا ارائه شده http://blogs.microsoft.co.il/blogs/shair/archive/2009/06/25/cannot-open-database-quot-tfswarehouse-quot-requested-by-the-login.aspx

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

    Connecting to Analysis services >  database > tfswarehouse > roles > set the tfswarehousedatareader role permissions to full control process database!

    ما عذاب بسیاری کشیدیم تا بالاخره توانستیم از آخرین تکنولوژی استفاده کنیم. امیدوارم بقیه این عذاب را نکشند.

    ۱۳۸۸ مرداد ۱۵, پنجشنبه

    مساله مشاغل

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

    این احوال ما بود که از اینترنت صرفا به عنوان یک بستر برای انجام کارهای خود استفاده می کردیم و البته کسانی که از Team Foundation Server استفاده می کردند.

    عده دیگری هستند که درآمدشان به طور مستقیم از اینترنت منشاء می گیرد مانند اشخاصی که با تکنولوژی VoIP سرو کار دارند. ظاهرا 114 شرکت در این زمینه در کشور فعال بودند که مخابرات از ادامه فعالیت آنها (به صورت فنی) جلوگیری کرده و تنها 3 شرکت امکان استفاده از این تکنولوژی را در کشور دارا هستند (که ظاهرا دو تای آنها هنوز فعالیت خود را آغاز نکردند).

    تفاسیر زیادی پیرامون این موضوع وجود دارد مثلا یک مقاله در اینجا و یکی دیگر در اینجا.

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

    پاورقی: این پست با نرم افزار Windows Live Writer ارسال شده (امتحان کنید بسیار عالیست).

    ۱۳۸۸ اردیبهشت ۳۰, چهارشنبه

    The C# Programming Language Version 4.0


    نسخه بتاي Visual Studio 2010 و .Net Framework 4.0 از تاريخ 20 May به همراه قابليت هاي جديد و بسيار عالي که ميتواند تمام علاقه مندان خود را هيجان زده کند براي دانلود آماده شده است.(Download)
    اما شايد براي علاقه مندان به #C خبر جالب تر اين باشد که به همراه اين دو نرم افزار نسخه جديدي از #C که نسخه 4.0 اين زبان برنامه نويسي است نيز وجود دارد.در اين پست قصد داريم که با هم يک نگاه کلي به گذشته #C داشته باشيم و بعد به اين موضوع بپردازيم که آقاي Anders Hejlsberg و تيم #C در نسخه جديد براي ما چه چيزهايي رو آماده کرده اند:

    در سال 1998 پرژه #C با هدف رسيدن به زبان برنامه نويسي آسان ، مدرن ،شيع گرا و Type-Safety که تحت پلت فرم Net. عمل کند شروع به کار کرد. شرکت مایکروسافت پلت فرم Net. را به همراه زبان برنامه نويسي #C در تابستان سال 2000 در اختيار عموم برنامه نويسان قرار داد و روز بعد از آن #C داراي محبوبيت و معروفيت بسياري در بين برنامه نويسان شد.با وجود استقبال بسيار عالي و چشمگيري که از اين زبان برنامه نويسي جديد صورت گرفت ، تا رسيدن به هدف اصلي که شرکت مایکروسافت براي خود مشخص کرده بود راه طولاني در پيش داشت.بعد از مدت کوتاهي نسخه 2.0 تعدادي از نواقص و کمبودها را برطرف کرد که تعدادي از آنها عبارتد از :
  • Generics.
  • Anonymous Methods.
  • Iterators.
  • Partial Types.
  • Nullable Types.
    در هنگام طراحي ورژن سوم زبان برنامه نويسي #C تاکيد اصلي برروي فعال کردن (LINQ(Language Integrated Query بود که براي اين کار احتياج به موارد زير بود :
  • Implictly Typed Local Variables.
  • Extension Methods.
  • Lambda Expressions.
  • Object and Collection Initializers.
  • Annonymous types.
  • Implicitly Typed Arrays.
  • Query Expressions and Expression Trees.
    براي طراحي نسخه 4.0 زبان برنامه نويسي #C تيم #C از الحام گرفتن از زبان هاي برنامه نويسي Dynamic مانند Perl, Python, and Ruby استفاده کردند.واقعيت اين
    است که زبان هاي برنامه نويسي Dynamic و Static داراي مزايا و معايب به خصوص خود هستند و مهم اين
    است که بتوان تواناييهاي هر دو را در يکجا جمع کرد.البته قابل به ذکر است که تغييرات و نو آوري هايي که در الگوهاي جديد #C انجام شده به صورت همزمان برروي الگوهاي Net FrameWork. نيز تاثير گذار بوده و باعث تغييراتي بر روي آن بوده است که به اين تغييرات در پست هاي بعدي خواهيم پرداخت.
    تعدادي از مهمترين نو آوري ها و ابداعات نسخه جديد #C به همراه مثال در پايين آورده شده است :
    -------------------------------
    Dynamically Typed Objects.

    زمانيکه نوع کلاس Calculator از نوع Static باشد و ما بخواهيم از متد Add اين کلاس استفاده کنيم که مشخص است پارامتر هاي ورودي و مقدار خروجي آن از چه نوعي است اکنون به صورت زير است :




  • Calculator calc = GetCalculator();
    int sum = calc.Add(10, 20);



    اما زمانيکه نوع کلاس Calculator از نوع Dynamic باشد و ما بخواهيم از متد Add اين کلاس استفاده کنيم که نوع آن را نميدانيم کد ما به شکل زير ميشود :



    object calc = GetCalculator();
    Type type = calc.GetType();
    object result = type.InvokeMember("Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });
    int sum = Convert.ToInt32(result);



    حالا در نسخه 4.0 #C کد بالا به اين شکل مي شود :



    dynamic calc = GetCalculator();
    int result = calc.Add(10, 20);


    -----------------------------
    Optional and Named Parameters.

    زمانيکه شما قصد داشته باشيد در نسخه های موجد متدي داشته باشيد که در موقيت هاي خاصي پارامترهاي ورودي متفاوتي داشته باشه مجبور هستيد به گونه زير عمل کنيد :



    public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize) { }
    public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding) { }
    public StreamReader OpenTextFile( string path, Encoding encoding) { }
    public StreamReader OpenTextFile( string path) { }



    اما در نسخه 4.0 زبان #C کد بالا به صورت زير مي شود :



    public StreamReader OpenTextFile( string path, Encoding encoding = null, bool detectEncoding = false, int bufferSize = 1024) { }



    به زبان بهتر شما مجاز شده ايد که براي پارامترهاي ورودي متد هاي خود مقادير پيش فرض قرار دهيد.
    -------------------------------
    Improved COM Interoperability.

    اگر شما بخواهید که کدی بنویسید که در آن از قبلیت های COM استفاده کنید احتمالاً کد شما چیزی شبیه به کد زیر خواهد بود :



    object filename = "test.docx";
    object missing = System.Reflection.Missing.Value;
    doc.SaveAs(ref filename,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing);


    اما حال با استفاده از نسخه 4.0 ، #C تمامی خطوط بالا به یک خط به شکل زیر تغییر می کند :



    doc.SaveAs("foo.txt");
    ------------------------------------------------------

    Silverlight

    در اواخر سال 2006 مایکروسافت با معرفی Silverlight وارد رقابتی جالب با شرکت Adobe شد. رقابتی بر سر نرم افزاری شبیه Flash. توسعه دهندگان چند رسانه ای که از Flash استفاده میکردند معمولا گرافیست بودند یا در کارهای گرافیکی تبحر داشتند و اکثرا برنامه نویس حرفه ای نبودند. با اینکه Flash مجهز به زبان برنامه نویسی کاملی است ولی برنامه نویسان حرفه ای علاقه چندانی به این زبان ندارند و همین باعث شد که برنامه های کاربری زیادی با Flash ایجاد نشود.


    و اکنون مایکروسافت گام در این عرصه هم نهاد. Silverlight در یک جمله یک پلتفرم جهت نمایش انیمیشن، تصاویر بُرداری (Vector Graphics) و پخش کلیپ های صوتی و تصویری ست. از نظر من که یک برنامه نویس هستم، پشتیبانی کامل از dotNet Framework ، بزرگترین تفاوت آن با Flash است. تصور کنید امکانات گرافیکی کافی در کنار زبان #C یا VB یا هر زبان dotNet ی دیگر در اختیار شماست. مطمئنا کارهای جالبی خلق خواهید کرد.

    در مورد مقایسه Silverligh و Flash و شاید بقیه، آنقدر مقایسه وجود دارد که لازم نیست حتی به آن فکر کنم! مثلا این شخص مقایسه کامل و واقعی را بین Silverligh، Flash، Java و دیگران برگزار کرده که البته بیشتر Performance مد نظر بوده.

    باید اضافه کنم که Moonlight نسخه متن باز این محصول است که توسط Novell و در کنار Mono رهبری میشود. بازی ها و برنامه های جالبی برای Silverlight خلق شده، مثلا این بازی فوق العاده که حتی متن کامل کد آن هم در دسترس می باشد. البته مشخص است که این بازی جهت معرفی بیشتر Silverlight ارائه شده. شما می توانید با ساختن مراحلی برای این بازی در صورت برنده شدن به عنوان بهترین تفويض ماه، برنده 500 دلار شوید. و یا اگر خیلی حرفه ای هستید، با دریافت کد برنامه و توسعه بازی به سلیقه خود و ارائه یک بازی کامل Silverlight ی، برنده 9 هزار دلار شوید.


    اکنون ویرایش دوم Silverlight کاملا جا افتاده و از March 18, 2009 نسخه 3Beta نیز عرضه شده.

    ۱۳۸۸ فروردین ۱۹, چهارشنبه

    Search query with LINQ

    مخصوصا در برنامه های کاربردی تحت وب نوشتن یک فرم جستجوی طویل مرتبط با بانک اطلاعات ارتباطی (Relational) کار لذت بخشی نیست. دست و پنجه نرم کردن با SQL برای بعضی برنامه نویسان اصلا جالب نیست. برای خیلی ها با LINQ این کار لذت بخش تر شده.
    یکی از ساده ترین امکانات لذت بخش لینک می تواند چیزی باشد که خواهم گفت.
    فرض کنید یک فایل dbml را به درستی به یک Database که دارای جدول دانشجویان است متصل کردیم. حالا یک CheckboxList داریم که شامل سال های 1360 تا 1370 بوده که مربوط به سال تولد دانشجویان است. حالا کاربر چند تا از آیتم ها را انتخاب میکند و دکمه جستجو را میزند.
    اگر فرض کنیم کاربر 1360 و 1362 و 1364 را انتخاب کرده باشد. در روش سنتی بهترین روش یافتن نتایج، ارسال چنین Queryی به بانک اطلاعات بود:



    SELECT * FROM Students WHERE BirthYear IN (1360, 1362, 1364)



    از این بگذریم که این Query را چطور اجرا میکردیم.

    و حالا در LINQ این کار را خواهیم کرد:



    int[] selectedValues = { 1360, 1362, 1364 };
    using (MyDataContext dc = new MyDataContext())
    {
    dc.Students.Where(s => selectedValues.Contains(s.BirthYear));
    }



    این دقیقا Query سنتی که در بالا دیدید را می سازد. بدون کم و کاست.

    ۱۳۸۸ فروردین ۱۸, سه‌شنبه

    C# Kernel

    برای علاقه مندان به زبان #C همیشه جالب است که بتوانند هر گونه برنامه ای را با این زبان بنویسند. در حالی که اجرای برنامه های نوشته شده با #C بدون نصب dotNet Framework گاهی اوقات بسیار پیچیده است، شاید نوشتن یک سیستم عامل با این زبان واقعا یک رویا به حساب آید. ولی حقیقت دارد. البته شاید این موضوع از تمایل برنامه نویسان به ترجمه مستقیم (قبل از اجرا /AHead-Of-Time) زبان MSIL به Assembly یا شبیه آن ناشی شده.فعلا سه سیستم عامل یا پوسته با #C پیاده شده.

    به نظر میرسد Singularity از بقیه کاملتر باشد. البته قبلا هم شبیه این کار با Java انجام شده. روش کار همه اینها به این صورت است که زبان #C تبدیل به کد CPU شده و با لینک شدن به قطعه کد های لازم برای Boot کردن سیستم یک Core ساده به وجود می آورد. Cosmos دارای یک کیت توسعه برای Visual Studio است که شما میتوانید پوسته ی خود را نوشته و بعد از فشردن کلید F5 پوسته ی خود را بر روی Virtual PC و... اجرا و مشاهده کنید.

    شروع

    به نام خدا

    M-A-EngineerGroup نام گروهیست متشکل از دو توسعه دهنده نرم افزار که از مرداد ماه سال 1387 فعالیت خود را آغاز کرده. به طور متوسط سابقه هر یک از این افراد در زمینه توسعه نرم افزار به حدود 6 سال می رسد.
    با توجه به این امر که در زمینه ساخت و توسعه نرم افزار بدست آوردن هر تجربه بسیار پر هزینه و با ارزش می باشد تصمیم گرفتیم که تجربیات مختصر خود، که قبل و بعد از تشکیل این گروه در طی انجام پرژه های نرم افزاری بدست آمده را با دیگران شریک شویم.