نظرات مطالب
نمایش فرم‌های مودال Ajax ایی در ASP.NET MVC به کمک Twitter Bootstrap
مرسی؛ یه مورد دیگه با عرض پوزش تو این فرم مودال چون Ajax هستش یه مشکل که داریم وقتیه که بخواهیم دیتا سورس رو مثلا برای کومبو باکس تلریک پر کنیم مثل مثال ساده‌ی زیر
     @(Html.Kendo().ComboBoxFor(model => model.ParentId)
                            .DataTextField("Name")
                            .DataValueField("Id")
                            .HtmlAttributes(new { style = "width:150px" })
                            .Filter("contains")
                            .AutoBind(false)
                            .MinLength(3)
                            .Placeholder(CategoryResource.Category)
                             .DataSource(source =>
                            {
                                source.Read(read =>
                                {
                                    read.Action("GetAllGroups", "Utility");
                                })
                                .ServerFiltering(false);
                            })
                            )
چون تو این حالت اصلا کومبو کندو رندر نمیشه برای این حالت که مشکل اساسی هم هستش آیا راهی وجود داره من اطلاعات رو تو ViewBag هم ریختم و تو کد بالا بجای دیتا سورس از خاصیت بایند اون بصورت دستی استفاده کردم یعنی اونو دستی بایند کردم به ViewBag اما باز هم قایده نداشت چون کومبو باکس کندو اصلا Render نمیشه ممنون میشم اگه راهنمایی کنین :)
مطالب
معرفی WPF Extended toolkit

یکی از نکات جالبی که در مورد Silverlight وجود دارد این است که هر چند تنها قسمتی از WPF را به ارث برده (برای اینکه حجم افزونه‌ی آن قابل قبول باشد)، اما بیشتر از خود WPF مورد توجه مایکروسافت است! شاید یک دلیل آن استفاده از Silverlight در Windows phone 7 باشد. به عبارتی اگر برنامه نویس Silverlight هستید، هم اکنون برنامه نویس Windows phone 7 نیز می‌باشید.
این توجه بیشتر در Silverlight toolkit کاملا مشخص است. Silverlight toolkit از یک سری ابزار و کامپوننت برای توسعه‌ی ساده‌تر برنامه‌های Silverlight به صورت سورس باز و تهیه شده توسط مایکروسافت، تشکیل شده است. حجم WPF toolkit که آن هم توسط مایکروسافت به صورت سورس باز ارائه و به روز می‌شود حدود 2 مگابایت است؛ اما حجم Silverlight toolkit حدود 18 مگابایت می‌باشد! بسیاری از کنترل‌ها و امکانات Silverlight toolkit را در WPF نمی‌توانید پیدا کنید مانند BusyIndicator ، ChildWindow ، DataForm و غیره. نمونه‌ی دیگر این توجه WCF RIA Services است. هدفگیری اصلی این مورد نیز Silverlight است و نه WPF (که از آن در Visual studio LightSwitch هم استفاده کرده‌اند).
اخیرا یک گروه خیّر کار تبدیل و انتقال کنترل‌های Silverlight toolkit به WPF toolkit را شروع کرده است که حاصل آن از آدرس ذیل قابل دریافت است: (این هم یکی از مزیت‌های پروژه‌های سورس باز است)



اشتراک‌ها
آشنایی با Zepto.js به عنوان جایگزینی برای jQuery

Zepto.js یک کتابخانه‌ی سمت مرورگر است که می‌تواند در برخی کاربردها جایگزین مناسبی برای jQuery باشد. مهم‌ترین ویژگی Zepto، سازگاری ساختار این کتابخانه با جی‌کوئری است. به این معنی که چنانچه شیوه‌ی کدنویسی با jQuery را بدانید، شیوه‌ی کدنویسی Zepto را نیز فرا گرفته‌اید. 

آشنایی با Zepto.js به عنوان جایگزینی برای jQuery
نظرات اشتراک‌ها
چرا از آنگولار به ری اکت + ری داکس سوئیچ کردم!
ضرورتی به تکرار اصل مشکل که «تفرقه پراکنی» و «ترویج نفرت» هست، نیست. اینکه ما اینجا وقت گذاشتیم در مورد TypeScript و همچنین Angular مطلب تهیه کردیم، بعد شخصی اینجا تمام توانش را جهت ترویج «تئوری توطئه» در مورد این محصولات صرف کند، قابل تحمل نیست. شما اگر در جمعی قرار گرفتید که برای مثال در مورد TypeScript و همچنین Angular به صورت منظم مطلب تهیه می‌کنند، اخلاق حکم می‌کند که با آن‌ها همکاری کنید یا آن سایت را ترک کنید، بجای سمپاشی در این مورد؛ بجای سرد کرد و گرفتن انگیزه‌ی مثبت از این افراد؛ بجای کثیف خواندن این پروژه‌های سورس باز با کیفیت، چون توسط گروه و قبیله‌ی شما ارائه نشدند و نام چند شرکت بزرگ پشت آن‌ها است.

نتیجه گیری: یک جمع بر اساس «هم‌دلی» و «همراهی» می‌توانند رشد کنند و یا ... «جمع» نامیده نمی‌شوند.
نظرات اشتراک‌ها
TFS یا GIT؟ از کدامیک استفاده کنم؟
TFS یک ابزار همه چی تمام است که طبق اصول مهندسی نرم افزار کلیه فرآیندهای تولید نرم افزار را پشنیبانی می‌کند. در واقع TFS تنها یک سورس کنترل نیست و گسترده‌تر از این حرفهاست.
پیشنهاد می‌کنم در پروژه‌های تجاری که تیمی کار می‌کنید حتماً از TFS استفاده کنید مخصوصاً اگر Scrum باز هستید از آن لذت خواهید برد.
سازگاری با بسته آفیس و MS Project و همچنین پیاده سازی کامل Scrum + سازگاری با Sharepoint و بسیاری موارد دیگر TFS را یک ابزار حرفه ای برای مدیریت پروژه کرده است.
اشتراک‌ها
بهترین پروژه های برنامه نویسی

بهترین روش یادگیری برنامه نویسی انجام پروژه‌های مختلف هست.

وب سایت معرفی شده در لینک بالا اومده کلون clone بیشتر از ۱۰۰ وبسایت بزرگ مثل آمازون، نتفیلیکس، یوتیوب، تیک تاک، سرویس‌های گوگل، پروژه واتساپ و ... را به صورت اوپن سورس به همراه تمام اطلاعات از جمله چه زبان برنامه نویسی و تکنولوژی‌هایی استفاده کردند، لینک دمو و گیت هاب را گذاشته.

بهترین منبع برای اینکه یادبگیرید یه وب سایت پیچیده چطور درست شده، چطوری سیستمها طراحی شدند و الی آخر.

بهترین پروژه های برنامه نویسی
نظرات مطالب
خواندن سریع اطلاعات فایل اکسل و ذخیره در بانک SQL
احتمالا این قطعه کد مستقیما از داخل سورس یکی از پروژه‌های شما بیرون آمده (مثال نیست؛ واقعی هست). می‌شد کمی اون رو refactor کرد مثلا یک متد از داخلش بیرون آورد که این متد داخلش مسیج باکس نباشه یا باز کردن یک صفحه دیالوگ و تغییر کرسر. try و catch هم نداشته باشه چون باید در یک سطح بالاتر catch بشه مشکلاتش. اون selectها مثلا می‌شدند چند پارامتر، برای اینکه این کد قابلیت استفاده مجدد بهتری پیدا کنه. یا مثلا اون sqlConnectionString از داخل کدها بیرون می‌اومد و می‌شد یک پارامتر جدید. نمایش کرسر هم داخل این متد قرار نمی‌گرفت. نام جدول نهایی هم مثلا یک پارامتر دیگر می‌شد برای سهولت استفاده مجدد و همچنین تست بهتر یک قطعه کوچک از کار. خود متد اصلی هم می‌شد دو متد کوچک‌تر؛ یکی کار load رو انجام می‌داد و دیگری کار insert سریع.
نظرات مطالب
تعرفه مصوب سال 1390
بحث برنامه نویس یا توسعه دهنده مثل بحث یک خیاط است. شما به خیاط می‌گید «من یک دست کت و شلوار خوب می‌خوام». این خوب بودن رو اون هست که باید تفسیر کنه. من نمی‌دونم. من خیاط نیستم؛ هرچند از دیدگاه خیاط شاید من به قول شما یک نفر بی اطلاع محض باشم! این وضع، همه جای دنیا هم به همین صورت است.
در کل این نوع حرکات، جهت انتشار حداقل حقوق برنامه نویس یا مصرف کننده بسیار مفید است. خیلی‌ از برنامه نویس‌ها حداقل حقوق خودشون رو نمی‌دونند و بی‌جهت بازار رو خراب می‌کنند. عده‌ای سودجو هم هستند که برای مثال پروژه‌های سورس باز رو با یک لایه فارسی به قیمت‌های گزافی می‌فروشند. روشن شدن یک سری از حداقل‌ها در کل به نفع جامعه است.
نظرات نظرسنجی‌ها
آیا با وجود سی‌ام‌اس فروشگاهی قدرتمندی مثل nopCommerce یا SmartStore آیا منطقی است که ما دوباره خودمان از صفر کد بزنیم؟
با این که کار من نوشتن از صفر است و اگر قرار باشد چیزی از صفر نوشته نشود من هم در آن پروژه نخواهم بود، اما به طور کلی با نوشتن از صفر میانه خوبی ندارم. ترجیح می‌دهم گزینه نوشتن از صفر را به عنوان آخرین گزینه بررسی کنم. نوشتن از صفر بیشتر مناسب پروژه هایی است که مشابه شان وجود نداشته باشد. در کاربردی مثل فروشگاه اینترنتی که خیلی عام به نظر می‌رسد ترجیحم این است که از یک سورس موجود استفاده کنم.
استفاده مجدد از پروژه‌های موجود که تعداد زیادی نصب از آن زیر بار است ارزان‌تر و سریع‌تر از «نوشتن از صفر» به نظر می‌رسد. خیلی از اوقات نوشتن از صفر به معنای اتلاف منابع است.
مطالب
طراحی گردش کاری با استفاده از State machines - قسمت سوم
در این قسمت، یک سری مثال گردش کاری سازگار با Stateless Designer را بررسی خواهیم کرد. خروجی‌های XML زیر را می‌توانید در Stateless Designer وارد کرده و تبدیل به کدهای معادل کنید. اگر نمونه‌ای را هم خودتان طراحی کرده‌اید می‌توانید در قسمت نظرات مطلب جاری به اشتراک بگذارید.


الف) طراحی گردش کاری یک سیستم ردیابی خطاها (Bug tracking system)

در ادامه رویدادها، حالات و انتقالات یک ماشین حالت ردیابی خطاها را مشاهده می‌کنید:

<statemachine xmlns="http://statelessdesigner.codeplex.com/Schema">
  <settings>
    <itemname>BugTrackingStateMachine</itemname>
    <namespace>StatelessTests</namespace>
    <class>public</class>
  </settings>
  <triggers>     
    <trigger>Assign</trigger>
    <trigger>Defer</trigger>
    <trigger>Resolve</trigger>
    <trigger>Close</trigger>
  </triggers>
  <states>     
    <state start="yes">Open</state>
    <state>Assigned</state>
    <state>Deferred</state>
    <state>Resolved</state>
    <state>Closed</state>
  </states>
  <transitions>
    <transition trigger="Assign" from="Open" to="Assigned" />
    <transition trigger="Assign" from="Assigned" to="Assigned" />
    <transition trigger="Close" from="Assigned" to="Closed" />
    <transition trigger="Defer" from="Assigned" to="Deferred" />
    <transition trigger="Assign" from="Deferred" to="Assigned" />
    <transition trigger="Resolve" from="Assigned" to="Resolved" />
  </transitions>
</statemachine>
با گرافی معادل:


توضیحات:
یک گزارش خطا حداقل پنج حالت آغاز (Open)، انتساب به شخص، جهت رفع مشکل (Assign)، به تاخیر افتادن/درحال بررسی (Deffered)، برطرف شده (Resolved) و خاتمه یافته/برطرف نخواهد شد (Closed) را می‌تواند داشته باشد.
برای حرکت (Transition) از هر حالت به حالتی دیگر نیاز به یک سری رویداد (Trigger) است که لیست آن‌ها را در بالا مشاهده می‌کنید.
در ابتدا سیستم در حالت انتساب به شخص قرار می‌گیرد. سپس در همین حالت شخص می‌تواند یکی از سه حالت رفع شده، بستن موضوع و یا ارجاع به زمانی دیگر را انتخاب کند. حتی در حالت ارجاع به شخص، شخص می‌تواند مساله را به شخصی دیگر ارجاع دهد. یا در حالت به تاخیر افتادن حل مساله، می‌توان مشکل را به شخصی دیگر انتساب داد.


ب) طراحی گردش کاری درخواست ارتقاء در یک شرکت

مراحل درخواست ارتقاء شغلی را در یک سازمان فرضی، در ذیل مشاهده می‌کنید:
<statemachine xmlns="http://statelessdesigner.codeplex.com/Schema">
  <settings>
    <itemname>RequestPromotionStateMachine</itemname>
    <namespace>StatelessTests</namespace>
    <class>public</class>
  </settings>
  <triggers>     
    <trigger>Complete</trigger>
    <trigger>RequestInfo</trigger>
    <trigger>Deny</trigger>
    <trigger>Approve</trigger>
    <trigger>ManagerJustify</trigger>
  </triggers>
  <states>     
    <state start="yes">RequestPromotionForm</state>
    <state>ManagerReview</state>
    <state>PromotionDenied</state>
    <state>VicePresidentApprove</state>
    <state>Promoted</state>
  </states>
  <transitions>
    <transition trigger="Complete" from="RequestPromotionForm" to="ManagerReview" />

    <transition trigger="RequestInfo" from="ManagerReview" to="RequestPromotionForm" />
    <transition trigger="Deny" from="ManagerReview" to="PromotionDenied" />
    <transition trigger="Approve" from="ManagerReview" to="VicePresidentApprove" />

    <transition trigger="ManagerJustify" from="VicePresidentApprove" to="ManagerReview" />
    <transition trigger="Deny" from="VicePresidentApprove" to="PromotionDenied" />
    <transition trigger="Approve" from="VicePresidentApprove" to="Promoted" />
  </transitions>
</statemachine>
با گرافی معادل:


توضیحات:
کارمند فرم درخواست ارتقاء را تکمیل می‌کند. این فرم به مسئول او ارسال می‌شود. مسئول می‌تواند درخواست را یک ضرب رد کند؛ یا تائید کند که سپس برای مدیرعامل شرکت ارسال می‌شود و یا مجددا به شخص برای تکمیل نواقص فرم ارجاع دهد. مدیرعامل شرکت می‌تواند درخواست را تائید کند که در اینجا کار خاتمه می‌یابد و شخص ارتقاء خواهد یافت. یا می‌تواند درخواست را رد کند و یا برای بررسی بیشتر مجددا به مسئول شخص ارجاع دهد.


تمرین! توضیحات زیر را تبدیل به یک State machine کنید!

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