بایگانی دسته‌ها: توسعه نرم افزار

بهترین های Firefox برای توسعه دهندگان

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

خوب الان چند وقتی هست که سهم عمده ی مرورگرهای وب، در اختیار Google Chrome هست، با این حال یک سری ویژگی هایی در مرورگر Firefox هست که با وجود مصرف بالای منابع سیستمی که این مرورگر با خود دارد، دست کم برای توسعه دهندگان برنامه های تحت وب جذاب است و کاربردی.  البته نه تنها من، بلکه خیلی از دوستان هم باور دارن که نسخه های اخیر مرورگر Chrome هم از منابع سیستمی به ویژه RAM استفاده ی زیادی می کند.

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

بابک فخریلو

FireFTP

برنامه ای سریع و امن برای استفاده از پروتکل FTP جهت انتقال فایل ها، آن هم درست در مروگرتان!

FireBug

کمتر کسی هست که توسعه دهنده ی برنامه های تحت وب باشد و با این افزونه ی بی نظیر و عالی آشنا نباشد. ویرایش، وارسی و debug کردن کدهای CSS، HTML و JavaScript با این افزونه به سادگی قابل انجام است. جالب این که می توان به این افزونه plug-in هم اضافه کرد!

Web Deveoper

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

(Javascript Debugger (Venkman

محیطی قدرت مند برای debug کردن Java Script

SQLite Manager

دیتابیس های SQLite خود را به راحتی در مرورگر خود مدیریت کنید!

FirePHP

سادگی و سرعت در debug کردن که البته بیشتر برای کسانی که با AJAX سر و کار دارند مفید است.

FlashFirebug

هر محتوای از نوع SWF را می توانید با این افزونه debug کنید.

Read the rest of this entry

جایگاه NoSQL در دنیای امروز توسعه نرم افزار

قبل تر در دو مقاله  به معرفی NoSQL و نمونه هایی از آن که در .NET قابل استفاده هستند، پرداخته بودم. در این مقاله که از مجله ی ماهانه ی سایت Dr Dobbs برای شما ترجمه کردم، جایگاه این نوع از  دیتابیس را از منظر دیگه ای بررسی می کنم.

بابک فخریلو

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

بسط پذیری و Big Data

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

دیتابیس های NoSQL برای چنین نیازی هایی راه حل ارائه می  دهند، چرا که طوری طراحی شده اند تا اصلاحا scale out شوند و نه scale up. این دیتایس ها با عملکرد خودکار روی چندین سرور ارزان قیمت یا روی بستر cloud، امکان افزایش و کاهش ظرفیت را با هزینه ای مقرون به صرفه فراهم می کنند. شما بدون نیاز به پرداخت هزینه های بالا، سیستمی با عملکرد فوق العاده خواهید داشت.

از انجایی که محدودیت بسط پذیری این دیتابیس ها کم است، در مدیریت حجم داده های زیاد، که نیاز برنامه های امروز است، بسیار بهتر عمل می کند.

تغییر معماری سیستم

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

NoSQL به طور ذاتی با معماری سیستم های جدید تطابق دارد، یعنی طوری طراحی شده که در node های بیشماری بسط پیدا می کند و با اضافه و کم شدن یک node، همچنان به عملکرد خود ادامه می دهد. این شکل از  طراحی، هزینه های بسط سیستم و نیز مدیریت سیستم (system administration) را کاهش می دهد. خیلی از دیتابیس های NoSQL حتی قابلیت location-aware را نیز دارند، یعنی بسته به محل جغرافیایی کاربر، سرعت ارائه داده ها می تواند افزایش پیدا کند (مانند انچه در Content Delivery Network ها وجود دارد).

سادگی استفاده

از آنجایی که این دیتابیس ها، برخلاف RDBMS، schema ی ثابت ندارند، کار کردن با آنها ساده است. شما می توانید خیلی سریع برنامه ی خود را اماده کنید، بدون این که نگران باشید به خاطر تغییر در سیستم نرم افزاری تان، مجبور به سپری کردن زمان برای تغییر schema باشید. به اضافه این که خاصیت document-oriented بودن این دیتابیس ها، نیاز به تبدیل پرس و جوهای SQL به کد object-oriented (انچه که ORM ها انجام می دهند)، و برعکس را، برطرف می کند. خوب با این توضیحات آیا NoSQL جایگزین RDBMS خواهد شد؟ پاسخ این است که نه به این زودی ها. باید چشم انتظار آینده بود…آینده ای نزدیک البته

برگرفته از:

Why NoSQL Is Here To Stay

بیشتر بخوانید:

NoSQL چیست؟

RavenDb

اولین پروژه open source من

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

پروژه ای که من به صورت open sourcr برای استفاده ی توسعه دهنده ها قرار دادم، با استفاده از asp.net mvc نوشته شده. برای بخش دیتابیس، از NHibernate ORM استفاده کردم، و از کتابخونه های jquery هم استفاده های زیادی تو بخش UI کردم. این پروژه نقص های زیادی داره ولی برای کاربردهای آموزشی و این که توسعه دهنده ها بتونن ایده ازش بگیرن، به نظرم مفید باشه.

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

واسط کاربری این پروژه رو یاسر حسینی طراحی کرده که بازهم ازش به خاطر همکاری تشکر می کنم.

برای دریافت این پروژه :

https://bitbucket.org/persiandeveloper/blogservice

رسم نمودار در ASP.NET MVC

بابک فخریلو


رسم نمودار تو پروژه های وب هنگامی که می خواید گزارش رو درست کنید از داده ها، لازم میشه. یکی از این مواردی که من تو یکی از پروژه هام به نمودار نیازمند شدم، رسم داده های دریافتی از Google Analytic و نمایش آمار روزانه بازدید از سایت بود. وقتی شروع به جست و جو کردم، به یه کتابخونه وابسته به  Jquery رسیدم که  رایگان و open source، و قابلیت های خیلی زیادی داره. این کتابخونه جاوا اسکریپت  jqplot هست، و هماهنگی خوبی هم با محصولات مایکروسافت داره و حتی کنترل هایی هم برای ASP.NET web form. اما برای استفاده از اون در ASP.NET MVC، از اونجایی که خوشبختانه!! (بله خوشبتانه!) خبری از کنترل های سفارشی نیست، باید به طور مستقیم خودتون دست به کار بشید و نمودار هاتون رو رسم کنید.

jqplot-sample

 

تو مثالی که برای کار کردن با jqplot برای شما آماده کردم، ما داده هایی متشکل از تاریخ و یک عدد برای هر تاریخ (که مثلا میتونه نشون دهنده ی آمار بازدید از سایت برای اون تاریخ باشه) رو برای ساختار داده انتخاب می کنیم:

    public class DailyHit
    {
        public String DayDate { get; set; }
        public int Hits { get; set; }
    }

فرض ما بر این که namespace برنامه ی شما Yourname و کلاسی که تعریف کردیم تو پوشه ی Models قرار گرفته. حالا نوبت به تعریف Action می رسه:

   public ActionResult GetDailyReport()
   {
            //GetReport method return list of daily reports in form of IEnumerable
            var result = _VisitiReportService.GetReport();

            return View(result);
    }

ما در اینجا فرض می کنیم که شما سرویسی برای دریافت گزارش های بازدید روزانه دارید (می تونید خودتون مکانیسیمی برای ثبت بازدید ها داشته باشید و از دیتابیس خودتون داده ها رو بخونید، یا متصل بشید به یه سرویس دیگه مثل Google Analytic و داده ها رو از اونجا استخراج کنید) که داده ها رو در قالب فهرستی از DailyHit ها بر می گردونه. این داده ها رو در قالب مدل، به View مربوط به خودش ارسال می کنیم. این هم از View :

   @model IEnumerable<YourNameSpace.Models.DailyHit>

    <script src="@Url.Content("~/Scripts/jquery-1.8.3.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.jqplot.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.highlighter.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.cursor.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.dateAxisRenderer.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jqplot.json2.min.js")" type="text/javascript"></script>

    <link href="@Url.Content("~/Content/jquery.jqplot.min.css")" rel="stylesheet" type="text/css" >

	<script type="text/javascript">
     $(document).ready(function () {

    var plot1 = $.jqplot('reportChart', [chartline1], {
      title:'Report',
      legend: 
      { show: true, placement: 'outside',location:'ne',marginTop: '30px',showLabels: true },
      axes:{
        xaxis:{
          renderer:$.jqplot.DateAxisRenderer,
          tickOptions:{
            formatString:'%b %#d'
          } 
        },
        yaxis:{
          tickOptions:{
            formatString:'%d'
            },
            min:0
        }
      },
      highlighter: {
        show: true,
        sizeAdjust: 7.5
      },
      cursor: {
        show: false
      }
  });

 });
  </script>

  <div id="reportChart" style="width: 600px; height: 400px; position: relative;">
  </div>

اول از همه باید کتابخونه Jquery رو به صفحه اضافه کرده باشید. ما فرض بر این گذاشتیم که شما از  layout (یا همون Site.master تو aspx) استفاده نکردید و View رو دارید به طور مستقل و بدون داشتن قالب کلی نمایش می دید، پس به طور صریح اشاره کردیم به Jquery. بعد برای این که بتونیم از Jqplot استفاده کنیم، باید اول از همه به اسکریپت jqplot.min.js ارجاع بدیم. از اونجایی که می خوایم کاربر با رفتن روی خطوط نمودار، مقادیر ببینه نیاز داریم که highlighter هم اضافه کنیم. ارجاع به cursor برای این که با ورود موس به منطقه ی نمودار، شکلش تغییر کنه ما تو اینجا ازش استفاده ای نداریم. dateAxisRenderer به طور خاص برای  نمایش نمودارهایی هست که توش بخشی از داده، از نوع تاریخ (Date) هست. و در نهایت از اونجایی که داده ها در قالب json تحویل لود کننده ی نمودار داده میشن، باید از json2.min هم استفاده کنیم.

و اخر سر هم یک ارجاع به فایل قالب jqplot نیاز داریم.

اما script که برای لود کردن نمودار تعریف کردیم. تو اولین خط، یعنی

	var chartline1=@Html.GetStrippedJson(Json.Encode(Model));

ما از دو Helper استفاده می کنیم، یکی Json.Encode که جزو Helper های خود MVC هست و یک شی رو تبدیل می کنه به رشته ی JSON. اما از اونجایی که تو Jqplot، نباید نام property ها تو رشته ی json وجود داشته باشه، ما ناچاریم که اونا رو اصطلاحا Strip کنیم. برای این کار قطعا کتابخونه ای  مثل Newtoon.Json خیلی مفید تره که قابلیت های زیادی داره ولی من خودم یک Helper نوشتم که این کار رو برای ما انجام بده:

	public static MvcHtmlString GetStrippedJson(this HtmlHelper helper, string json)
        {
            json = json.Replace("\"DayDate\":", string.Empty);

            json = json.Replace("\"Hits\":", string.Empty);

            json = json.Replace('}', ']');

            json = json.Replace('{', '[');

            return MvcHtmlString.Create(json);
        }

تو کد بالا، هر جا که DayDate و Hits رو ببینه، جاش رشته ی خالی میذاره و به جای } و { هم، [ و ]  رو قرار میده تا تبدیل بشه به رشته ی استاندارد Json.

خوب حالا ما داده هامون رو تو متغیر chartline1 داریم.

نوبت می رسه به رسم نمودار. برای این کار اولین پارامتری که به تابع مربوط به رسم، یعنی  jqplot می فرستیم، محل رسم نمودار تو صفحه است. این محل باید تگ div باشه و id اون رو می فرستیم به عنوان پارامتر اول تابع رسم نمودار.  بعد نوبت می رسه به داده هامون، که ما از قبل تو chartline1 ذخیره کردیم شون. پارامترهای بعدی شامل عنوان نمودار، نمایش برچسب خطوط نمودار در کنار اون، تنظیم محور افقی و عمودی میشه. مثلا تو تنظیم محور افقی (xaxis) ما داریم به نمودار میگیم که باید از نوع تاریخ باشه و فرمت نمایش اون رو هم  براش تعیین می کنیم، تا فاصله ی بین هر نقطه از داد ها روی نمودار افقی رو تعیین کنیم. برای نمودار عمودی، که قراره تعداد بازدید های روز رو نشون بده، قالب نمایش رو مقدار عددی (D – به معنای digit) می گذاریم، و مشخص می کنیم که کمترین مقدار نمودار در محور عمودی باید صفر باشه.

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

خوب، منتظر چی هستید! برید امتحان کنید دیگه

پیروز باشید

اجرای کد در بازه های زمانی مشخص در C#

مطلب که امروز در نظر گرفتم، در حقیقت راه حل مشکل خود من تو دوتا مساله بود. اول اجرا شدن یه کد، در بازه های زمانی مشخص، یعنی مثلا خوندن چندتا رکورد تازه بروز شده از دیتابیس و نشون دادنش به کاربر، دومی راه حل ping کردن یه سرور یا یه مقصد تو شبکه. Ping کردن که با ارسال بسته های ICMP انجام میگیره، در حقیقت به شما میگه که سرور یا مقصد مورد نظرتون تو  شبکه ی مشخص، که قطعا IP Address داره، اماده پاسخ گویی به شما هست یا نه. به نظرم شما حتما این کار رو قبلا از طریق Command line سیستم عامل انجام داده باشید. یه همچین شکلی داره معمولا:

بابک فخریلو

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

یک سناریوی ساده

فرض کنید سروری داریم که به درخواست های  ICMP که از کامپیوترهای درون شبکه فرستاده می شود پاسخ می دهد (بیرون یا درونش اینجا فرقی نمی کنه، وارد مباحث تخصصی شبکه نکنید منو!). حالا می خواهیم برنامه ای بنویسیم که توانایی سرور را در پاسخ به درخواست های ICMP، بسنجیم.

یک برنامه با C# خواهیم نوشت که بسته های ICMP را هر پنج دقیقه یک بار به سرور ارسال می کند. سپس پاسخ های دریافتی را هم در یک فایل txt ساده ذخیره یا به عبارتی log خواهید کرد.

Read the rest of this entry

RavenDB

و نوشتن را مرضی است. اصلا این صفحه ی RavenDB چند روزه تو مرورگرم بازه، هی میخوام بشینم در موردش بنویسم، الان یه دفعه دیدمش دیگه دلم نیومد ننویسم. اصلا هم حوصله ندارما، یعنی دپسرده هم هستم.

در هر صورت، تو مطلب قبلی به دیتابیس های NoSQL اشاره کردم و گفتم که این نوع دیتابیس ها، چه تفاوت هایی با دیتابیس های از نوع SQL Server یا Oracle دارن. در انتها هم یکی از دیتابیس های از نوع NoSQL معرفی کردم به اسم RavenDB که برای محیط دات نت طراحی شده. تو این مطلب، به طور مفصل تری به این دیتابیس می پردازم.

بابک فخریلو

RavenDB یک دیتابیس از نوع Doc-Oriented، تراکنشی (transactional) و متن باز است که برای محیط دات نت طراحی شده، و مدل داده ای را ارائه می کند که برای نیاز های سیستم های که در دنیای واقعیت می بینیم، طراحی شده است. RavenDB به شما این امکان را می  دهد تا برنامه های کاربردی با عملکرد بالا و latency پایین را سریع و کارا طراحی کنید.

همان طور که جز خواص دیتابیس های نوع Doc-Oriented است، داده ها در RavenDB بدون schema و در قالب JSON ذخیره می شوند، و می توان خیلی ساده با استفاده از Linq، یا توابع RESTful (روشی برای دسترسی و دستکاری داده ها که در معماری های SOA استفاده می شود. بیشتر کاربرد آن در وب سرویس ها می باشد.) روی آنها Query دلخواه را به راحتی اجرا کرد. RavenDB در عملکرد درونی خود از Index ها استفاده می کند، که این ایندکس ها یا بر اساس استفاده شما به طور خوکار ایجاد می شوند، یا این که طور صریح و بر اساس نیاز شما ایجاد می گردند.

RavenDB پروژه هایی با گستره ی پروژه های تحت وب را مد نظر دارد، و ویژگی های چون replication و sharding (من به شخصه این ویژگی خیلی برام جالبه) را در خود دارد.

چطور باید از RavenDB استفاده کرد؟

RavenDB یک Server و یک Client دارد. Server مسئول مدیریت فضای ذخیره سازی داده و query ها، و client یک مصرف کننده است که با سرور در تعامل است. راه های به کار بستن RavenDB در پروژه تان محدود به یک روش نیست:

  • به صورت یک سرویس در سیستمی مجهز به سیستم عامل Windows
  • یکپارچه شده با IIS
  • Embedded در برنامه ی شما

وقتی که RavenDB Server را توانستید اجرا کنید و به کارش بندازید، اتصال به آن با استفاده از یک client برای دریافت و ذخیره سازی داده ها خیلی ساده است. جالب اینجاست که RavenDB با کلاس هایی که قبلا در سیستم خود تعریف کرده اید سازگار است، یعنی به راحتی با استفاده از همان کلاس هایی که برای Persistence استفاده می کردید، در اینجا هم می توانید استفاده کنید:

همان طور که متوجه شده اید، RavenDB از الگوی  Unit Of Work استفاده می کند، از این رو تمامی تغییرات که قبلا از فراخوانی session.SaveChnages() در نظر گرفته شده اند، در یک تراکنش رخ می دهند.

Read the rest of this entry

NoSQL چیست؟

شاید شما هم این روزها این واژه رو خیلی جا ها تو اینترنت دیده باشید، به ویژه اگه مثل من اهل Twitter باشید یا تو سایت های مربوط به Developer ها زیاد گشت بزنید. اون طوری که من برداشت کردم، این نوع از دیتابیس ها، شکل جدیدی از دیتابیس ها هستند که برای نیاز های نرم افزاری حال حاضر طراحی شدند، و تفاوت های چشم گیری هم با دیتابیس هایی مثل   SQL Sever، Oracle و MySQL دارند. در ادامه توضیح دقیق تر رو از زبان یکی از متخصصین این نوع دیتابیس ها می خوانیم.

بابک فخریلو

آن طور که Martin Fowler، در وبلاگش می گوید، تعریف رسمی برای NoSQL وجود ندارد، اما در جمع بندی های که صورت گرفته می توان خصوصیات دیتابیس هایی از این دست را این گونه تعریف کرد:

  • عدم استفاده از  مدل رابطه ای  و زبان SQL
  • متن باز بودن
  • ویژه ی استفاده در cluster های بزرگ
  • مبتنی بر نیاز های وب در قرن حاضر
  • بدون Schema، که در نتیجه می توان به هر رکورد دلخواهی، هر فیلدی را اضافه کرد

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

اما دانستن تعریف اولیه از NoSQL بدون در نظر گرفتن دیتابیس های Document-oriented ، خالی از لطف خواهد بود. آنچه که Wikipedia در مورد Document Oriented Database می گوید، این چنین است:

یک دیتابیس Doc-Oriented، برنامه ی کامپیوتری است که برای ذخیره سازی، بازیابی و مدیریت اطلاعات document-oriented یا به عبارتی نیمه ساختار یافته، به کار می رود. دیتابیس هایی از این دست از جمله ی دسته بندی های اصلی دیتابیس هایی هستند که NoSQL نام دارند. برخلاف دیتابیس های رابطه ای و مفهوم «رابطه» در آنها، این سیستم ها حول مفهوم انتزاهی به نام «Document» طراحی شده اند.

اما “Document” در اینجا دقیقا به چه چیزی اشاره دارد؟

مفهوم اساسی در یک دیتابیس از نوع  Doc-Oriented، یک Document است. در حالی که هر پیاده سازی از این مفهوم با دیگری متفاوت است، اما در کل، همه ی آنها فرض را بر این گذاشت اند که document ها، داده ها در فرمتی استاندارد کپسوله و کدگذاری می کنند. کدگذاری های مورد استفاده می تواند، XML، YAML، JSON و BSON باشد، یا فرمت های باینری مانند PDF و فرمت های Microsoft Office (Word, Excel…) باشد.

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

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

 
می بینید که هر دو document، شباهت هایی دارند و البته تفاوت هایی هم دارند. برخلاف دیتابیس های رابطه ای، که در آن هر رکورد باید فیلد های مشترکی با بقیه رکوردها داشته باشد و فیلد های استفاده نشده حتما باید مقدار خالی به خود بگیرند، در مدل دیتابیس های doc-oriented، فیلد خالی وجود ندارد. در این سیستم، به راحتی می توان داده های جدید را اضافه کرد، بدون نگرانی از وجود فیلد های خالی و یا نبود فیلدهای یکسان برای رکوردها.

انواع مختلفی از دیتابیس های Doc-Oriented یا به عبارتی دیتابیس هایی که در گروه NoSQL قرار می گیرند وجود دارد، که از جمله ی آنها می توان به MongoDb و RavenDB اشاره کرد.

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

منابع:

http://en.wikipedia.org/wiki/Document-oriented_database

http://martinfowler.com/bliki/NosqlDefinition.html

ویژگی های جدید در .NET 4.5

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

بابک فخریلو

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

.NET for Windows Store apps

بخشی از .NET 4.5 برای ایجاد برنامه های ویژه ی Windows Stores است. این بخش، .NET for Windows Store نامیده می شود و می توانید بررسی آن را در Windows Dev Center بخوانید.

Portable Class Libraries

For more information, see Cross-Platform Development with the .NET Framework.

در Visual Studio 2012، قالب پروژه ای  را می بینید به نام Portable Class Library که به شما این امکان را می دهد تا managed assembly هایی را ایجاد کنید که روی بستر های مختلف .NET قابل اجرا باشد. در حقیقت، شما بسترهای مد نظر خود (Windows Phone و .NET For Windows Store) را انتخاب می کنید.Type های قابل استفاده در پروژه شما، به طور خودکار به Type های موجود در بستر ها محدود می شوند. برای اطلاعات بیشتر می توانید Cross-Platform Development with the .NET Framework  را بخوانید.

ویژگی های اصلی و بهبودها

ویژگی ها و بهبود های زیر به CLR افزوده شده اند:

  • امکان کاهش restart شدن سیستم، با شناسایی و بستن برنامه های تحت .NET 4 . اطلاعات بیشتر در این زمینه.
  • پشتیبانی از آرایه هایی با حجمی بیش از 2 گیگابایت رو سیستم های 64 بیتی. این ویژگی را باید در فایل configuration فعال کنید. می توانید <gcAllowVeryLargeObjects> element را برای اطلاعات بیشتر بخوانید.
  • عملکرد بهتر برای سرورها، از طریق background garbage collection. وقتی از  GC در سیستم سروری که .NET 4.5 روی آن نصب است، استفاده می کنید، این ویژگی به طور خودکار فعال می شود. می توانید  Fundamentals of Garbage Collection را برای اطلاعات بیشتر بخوانید.
  • کامپایل JIT در background، که به طور اختیاری برای پردازنده های چند هسته ای فراهم است و می تواند عملکرد برنامه را بهبود بخشد. ProfileOptimization را ببینید.
  • امکان محدود سازی زمان اجرای یک Regular Expression.  Regex.MatchTimeout را ببینید.
  • امکان تعریف فرهنگ (Culture) پیش فرض برای یک application domain. کلاس CultureInfo را ببینید. (این قبلا نبود؟!)
  • پشتیبانی Console از Unicode. کلاس  Console  را ببینید.
  • عملکرد بهتر به هنگام خوانش resources (منظور منابعی چون RAM یا پردازنده نیست، تصاویر، رشته ها و … را شامل می شود) مورد استفاده ی برنامه. Packaging and Deploying Resources in Desktop Apps را بخوانید.
  • بهبود فشرده سازی از نو Zip برای کاهش فایل فشرده شده. System.IO.Compression را ببینید.
  • سپردن فشرده سازی رشته ها به  سیستم عامل، که به هنگام استفاده در Windows 8، Unicode 6.0 را پیاده سازی می کند. در صورت استفاده در بسترهای دیگر، از ویژگی خود .NET برای فشرده سازی رشته استفاده می شود.

Read the rest of this entry

راهنمای توسعه برای Windows 8

بابک فخریلو

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

اما تو این پست می خوام کتاب رو معرفی کنم که لینک اش رو توی Twitter دیدم. این کتاب مقدمه ای از توسعه ی برنامه ها تو سیستم عامل Windows 8 هست و شامل چهار فصل میشه. البته کتاب اصلی که قراره منتشر بشه 18 فصل داره و این کتابی که امروز معرفی می کنیم صرفا یک پیش نمایش از اون به حساب میاد.

این کتاب برای چه افرادی مفید است

تو این  کتاب نحوه ی توسعه ی برنامه ها به شکل و شمایل Metro رو برای Windows 8 و با استفاده از HTML، CSS و Java Script یاد میگیرید. هدف اصلی نویسندگان این کتاب به کاربردن تکنولوژی هایی است که نام بردیم در Window 8 و نه صرفا پرداختن به جزئیات خود این تکنولوژی ها. فرض بر این است که شما قبلا آشنایی کمینه ای با این تکنولوژی ها دارید. البته به چیزهایی مثل CSS Grid بیشتر می پردازیم چون بخش مهمی از لایه بندی برنامه ها را تشکیل می دهند اما چیزهای دیگر را باید خودتان مطالعه کنید.

برای استفاده از این کتاب به چه نیاز دارید

اول از همه باید Windows 8 Release Preview به همراه ابزارهای برنامه نویسی را دانلود و نصب کنید. می توانید این منابع را در http://msdn.microsoft.com/en-us/windows/apps/br229516 پیدا کنید. همچنین بهتر است سری هم به http://code.msdn.microsoft.com/windowsapps/Windows-8-Modern-Style-App-Samples  بزنید و همه ی مثال های Java Script را دانلود کنید.

برای دانلود کتاب اینجا کلیک کنید

برگرفته از:

Free ebook: Programming Windows 8 Apps with HTML, CSS, and JavaScript (First Preview(

 

 

 

Design Patterns – Factory Pattern

در مطلب قبلی، به این پرداختیم که اصلا چرا باید سراغ الگوهای طراحی رفت، وبه بررسی Strategy Pattern پرداختیم. در این مطلب، الگوی Factory رو مورد بحث قرار میدیم، و البته در ابتدا یک سری مسائل تئوری رو مطرح می کنیم.

بابک فخریلو

تعریف

نقل و قول رایج در تعریف این الگو بدین شکل است: «الگوی Factory یک واسط برای ایجاد یک شی تعریف می کند، اما به subclass ها (کلاس های مشتق) اجازه می دهد تا در ایجاد نمونه سازی از کلاس خودشان تصمیم بگیرند.» اما همان طور که خواهید دید، در عمل، کاربرد بیشتری از آن چه در تعریف اش آماده، ارئه می شود.

در حقیقت، برنامه نویسی با مد نظر قرار دادن Interface، به ما اجازه می  دهد تا صرفا زمانی که نیاز است، پیاده سازی دلخواه خود را به کار ببندیم.

اما در عمل

در دنیای واقعی، نیازمندی هایی که یک نرم افزار را می سازند، به ندرت ایستا هستند، و در حال تغییر اند. شاید framework خوبی که برای یک سیستم مشخص طراحی شده، از پس کارهایی که هیچ وقت برای شان تعریفی نداشته، بر نیاید. بهتر است که قبل از به هم ریختن کد برنامه به خاطر افزودن ویژگی های جدید، آینده نگری به خرج دهیم. برای این کار، کد نویسی با رعایت اصل polymorphism می تواند در برابر نیاز های آینده ما را مصون کند، و اینجاست که Factory Pattern خودش را نشان می دهد.

مساله

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

Read the rest of this entry

Design Patterns – Strategy Pattern

بابک فخریلو

کمتر پيش اومده که بخوام در مورد توسعه ي برنامه ها (Development) بنويسم. دليل خاصي نداشته. ولي خوب تصميم دارم در اين حوزه مطالب بيشتر روي منتشر کنم. يه مدتي هست که به Design Pattern ها خيلي توجه دارم. البته خواه يا نا خواه ما همگي داريم ازشون استفاده مي کنيم، مثلا همين MVC که يه جورايي Pattern محسوب ميشه (خيلي ها ميگن Framework يا هر چيزي، به هر حال نظم ميده به توسعه ي برنامه و همين مهمه)، و من مدتي هست باهاش دارم کار مي کنم.

حالا اصلا Design Pattern به چه دردي مي خوره ؟ ترجمه لغت به لغت اين عبارت، توصيف خيلي مقدماتي و ساده اي از اون به ما ارائه مي ده. «الگوي طراحي»، يعني طوري برنامه نويسي و توسعه رو پيش ببريم که بر اساس الگوهاي موفق تجربه شده در گذشته باشه، تا بدين ترتيب، Modularity و Extensibility و Ease of re-use برنامه اي که در حال توسعه اش هستيم، رو بيشتر کنيم. قبل همه چي بگم که براي خوندن مقالاتي از اين دست بايد به خوبي مفهوم شي گرايي رو درک کرده باشيد و دست کم به يک زبان شي گرا (مثل C#، Java يا Python و …) تسلط در حد برنامه نوسي شي گرا داشته باشيد.

مقاله هايي که در نظر دارم، از سرچشمه هاي معتبري از اينترنت هستند، و سعي کردم صرف ترجمه نباشه و از تجربيات خودم هم به مطلب اضافه کنم.

مطلب اول در اين زمينه رو با بررسي الگوي Strategy  شروع مي کنيم. به خاطر مثال خيلي ساده و قابل فهمي که تو مقاله اصلي اين مطلب ديدم، اين الگو رو براي شروع انتخاب کردم.

پيش نياز:

  • زبان برنامه نويسي شي گرا (ما در اينجا با C# کار مي کنيم)
  • آشنايي با وراثت و چند ريختي
  • آشنايي با Interface

Read the rest of this entry

اولین برنامه من برای سیستم عامل Android؛ یادآوری روزهای تولد

بعد از  سر و کله زدن با دنیای Android و کشیدن ناز شبیه سازش، بالاخره اولین برنامه ام آماده شد.

این یه برنامه ساده است که بر اساس Contact  های موجود توی گوشی، می تونید تاریخ تولدشون رو ذخیره کنید (به میلادی!) و بعد تو فهرست اصلی برنامه، 10 تا تولد جدید رو ببینید. البته هنوز جای کار داره و با مشورت دوستای عزیزم که کمکم کردن سعی می کنم بهترش کنم. این برنامه برای نسخه های 2.1 سیستم عامل android  بعد از اون قابل استفاده است. و اینم بگم هزار تا مدل از همین تیپ نرم افزارها رو میشه پیدا کرد. به هرحال ما هم شانس خودمون رو امتحان کردیم.

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

برای دانلود کردن برنامه اینجا کلیک کنید.

تصاویر برنامه: