یکی از دوستان در قسمت تماس با من پیغام گذاشته بود که لینکهای معرفی شده مربوط به آموزش جی کوئری فیلتر است و با فیلتر شکن دانلود کردن هم کند است.
تمام موارد یاد شده به همراه چند مورد دیگر را به اکانت رپیدشیر انتقال دادم. دریافت لیست فایلها برای دانلود از رپیدشیر.
موفق باشید!
یکی از مواردی که ممکن است در محیط کاری با آن برخورد داشت، تقاضای تولید فایل word یک گزارش با فرمتی مشخص از یک برنامه ASP.Net است. برای مثال یک قالب درست کردهاند که header و footer و کلا یک فرمت رسمی دارد. الان برنامه شما باید این فایل word رسمی را با گزارشی که تولید میکند پر کند. حالا اینجاست که گرفتاری برنامه نویس شروع میشود! روی سرور باید word نصب باشد تا توسط اشیاء COM آن بتوان یک چنین کارهایی را آنهم با ASP.Net که به صورت پیش فرض کمترین سطح دسترسی را روی سیستم دارد انجام داد. یا اینکه باید به سراغ کامپوننتهای تجاری رفت و حالا اینجا با این وضع تحریم و غیره چگونه بتوان آنها را خریداری کرد یا شاید احتمالا در سایتهای وارز بتوان نسخه تکه پاره شده آنها را یافت. مشکلی هم که این نوع کامپوننتها دارند این است که ممکن است سال دیگر اصلا ساپورت نشوند. محصولات مایکروسافت هم که مرتبا در حال به روز رسانی هستند. در این حالت برنامه متکی به این نوع کامپوننتهای تجاری سورس بسته در همان نگارش قبلی خود مجبور است باقی بماند.
خوشبختانه با ارائه آفیس 2007 و فرمت OpenXML فایلهای آن، این مشکل تقریبا مرتفع شده است. مایکروسافت نیز برای سهولت تولید این نوع اسناد، OpenXML SDK را ارائه داده است که از آدرس زیر قابل دریافت است:
Open XML Format SDK 1.0
البته پیش نمایش نگارش دو SDK آن نیز موجود است که در مطلب جاری به آن پرداخته نخواهد شد.
فایلهای office 2007 از یک فایلzip تشکیل شده از چند فایل xml داخل آن، ایجاد شدهاند. برای مثال یک فایل docx را با winrar یا امثال آن باز کنید (تصویر زیر):
برای کار با اینگونه اسناد باید با اصطلاحات زیر آشنا شد:
Package : فایل zip شما (همان فایل برای مثال docx) اینجا یک بسته نام دارد.
Parts : اجزای این بسته که همان فایلهای آن هستند، parts نامیده شده اند.
Relations : اگر به فایلهای موجود در یک بسته دقت کنید، فایلهایی با پسوند rels را خواهید دید که بیانگر نحوه ارتباط Parts با یکدیگر هستند.
Relations Ids: هر ارتباط با یک ID منحصربفرد تعریف میگردد.
اگر علاقمند باشید که پوستری را در این رابطه مشاهده نمائید میتوان به آدرس زیر مراجعه نمود.
Open XML Developer Map
نحوه استفاده از OpenXML SDK در دات نت:
ابتدا باید ارجاعی را به فایل DocumentFormat.OpenXml.dll که پس از نصب در مسیر OpenXMLSDK\1.0.1825\lib قرار گرفته است به پروژه افزود. سپس نیاز است تا ارجاعی به کتابخانه WindowsBase نیز به برنامه افزوده شود (تصویر زیر). افزودن ارجاعی به این کتابخانه جهت کامپایل برنامه ضروری است (شکل زیر).
تا اینجا ارجاعات برنامه به صورت زیر خواهند بود:
یک مثال ساده:
قصد داریم یک فایل docx ساده را با استفاده از OpenXML SDK ایجاد کنیم. در مثال زیر فرمت متغیر docXml را میتوان با ایجاد یک فایل docx ساده در word و سپس باز کردن بسته فشرده شده آن و مشاهده محتوای فایل word\document.xml بدست آورد.
using System.IO;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
namespace OpenXMLTestApp
{
class CWord
{
public static void CreateDocument(string documentFileName, string text)
{
using (WordprocessingDocument wordDoc =
WordprocessingDocument.Create(documentFileName, WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();
string docXml =
@"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
<w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
<w:body><w:p><w:r><w:t>#REPLACE#</w:t></w:r></w:p></w:body>
</w:document>";
docXml = docXml.Replace("#REPLACE#", text);
using (Stream stream = mainPart.GetStream())
{
byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
stream.Write(buf, 0, buf.Length);
}
}
}
}
}
CWord.CreateDocument("test.docx", "سلام دنیا");
برای مطالعه بیشتر میتوان به منابع زیر مراجعه نمود:
یک ویدیوی آموزشی رایگان از مایکروسافت
دریافت
سؤالات متداول در MSDN
http://msdn.microsoft.com/en-us/library/bb491088.aspx
البته اگر پس از نصب SDK به پوشه doc آن مراجعه نمائید، این سؤال و جوابها را در فایل راهنمای chm آن نیز میتوان پیدا کرد.
مثال دیگری در مورد ایجاد یک گزارش از بانک اطلاعاتی و گرفتن خروجی docx از آن
http://openxmldeveloper.org/articles/GenerateWordTable.aspx
البته این مثال خیلی قدیمی است و قسمتهای کار با پکیج را با SDK ارائه شده میتوان به صورت خودکار انجام داد. اما حداقل نحوه تولید جداول استاندارد OpenXML را میتوان از آن ایده گرفت.
مثالی در مورد نحوه قرار دادن عکس در فایل docx تولیدی
همچنین مثالهای بیشتری را در وبلاگهای مربوطه میتوان یافت:
http://blogs.msdn.com/brian_jones/
http://blogs.msdn.com/ericwhite/default.aspx
اشتراکها
GitHub برای تیم Roslyn
کتاب «مرجع کامل entity framework 4.1» نوشتهی آقای راد نزدیک به یک ماهی است که منتشر شده است. فرصتی پیدا شد تا این کتاب حدودا 260 صفحهای را مطالعه کنم و در ادامه توضیحاتی را پیرامون آن مطالعه خواهید کرد.
بررسی کتاب
در عنوان کتاب ذکر شده «مرجع کامل»؛ ولی خوب، 260 نمیتونه مرجع کامل باشه. بنابراین کمی رعایت اعتدال در کارهای بعدی لازم به نظر میرسد. همچنین یک مورد را هم همیشه در نشر کتب تخصصی در نظر داشته باشید: «ذکر شماره نگارش محصول» مورد نظر در عنوان کتاب، خیلی سریع کار شما را از مد افتاده خواهد کرد. خیالتان راحت باشد تا یک سال دیگر همینطور این شمارهها افزایش پیدا میکنند. خریداری هم که آنچنان اطلاعاتی از کل کار نداشته باشد، بر اساس همین شماره و بدون مطالعه متن، از خرید کتاب امتناع خواهد کرد.
- فصل اول این کتاب به معرفی تاریخچهی EF و لزوم استفاده از آن میپردازد. همچنین خلاصهای از قابلیتهای آنرا همانند روشهای model first ، database first و code first بیان میکند.
- تمرکز فصل دوم بر نحوهی استفاده از روشهای model first و database first است به همراه نحوهی تولید اسکریپت بانک اطلاعاتی در حالت model first.
- فصل سوم کتاب به مرور جزئیات طراح EF در ویژوال استودیو جهت کار بهتر با موجودیتها اختصاص دارد.
- در فصل چهارم با روشهای کوئری نویسی در EF آشنا خواهید شد. همچنین بر روی مباحث اجرای به تعویق افتاده و مفهوم آن هم بحث شده که بسیار ارزشمند است.
- فصل پنجم کتاب به مباحث ثبت، حذف و به روز رسانی اطلاعات توسط EF اختصاص دارد. همچنین یک سری مباحث همانند سطح اول caching در NHibernate که در EF هم وجود دارد، بررسی شده است که البته نام آن در اینجا Object state و entity state است.
- در فصل ششم در مورد نحوهی نگاشت رویههای ذخیره شده SQL Server به اشیاء دات نتی بحث شده همچنین نحوهی اجرا و استفاده از آنها
- فصل هفتم کتاب به ارتباطات بین موجودیتها یا همان مباحث one to many و امثال آن اختصاص دارد به همراه نحوهی تنظیمات آن در طراح EF در VS.NET
- در فصل هشتم، به قالبهای T4 پرداخته شده. ابتدا معرفی، سپس آشنایی با Syntax و نهایتا نحوهی دستکاری و سفارشی سازی قالبهای پیش فرض T4 مرتبط با EF ارائه شدهاند.
- فصل نهم به بررسی کاملتر مبحث model first که در فصل دوم معرفی شده میپردازد. ایجاد موجودیتها، نحوهی تعریف ارتباطات و نهایتا ایجاد بانک اطلاعاتی از روی آن
- فصل دهم آن به مباحث جدید EF در مورد Code first اختصاص دارد. این فصل واقعا ارزشمند است چون ... نتیجهی تحقیق بوده نه ترجمه. تقریبا با تمام تاریخچهی مرتبط با code first در EF، محلهای دریافت فایلها، ابزارهای کمکی، روشهای کوئری گرفتن،نحوهی ایجاد بانک اطلاعاتی از روی کد، تعیین اعتبار و غیره در طی یک فصل آشنا خواهید شد.
- در فصل یازدهم آن مروری بر WCF Data services و پروتکل OData صورت گرفته است. نحوهی ایجاد و سپس فراخوانی آن توسط یک کلاینت. در عنوان کتاب ذکر شده : «مرجع»، بنابراین به دنبال یک کتاب خودآموز قدم به قدم نباشید. این کتاب بیشتر به «معرفی» امکانات موجود در EF در طی 260 صفحه میپردازد که الزاما با توجه به تعداد صفحات کتاب، بعضی از موارد آن مانند این فصل آخر، از عمق لازم برخوردار نیستند ولی، حداقل سرنخ را به دست شما خواهند داد.
مزایا:
- به روز بودن مطالب آن
- آشنایی و تسلط مؤلف/مترجم به مطالبی که تهیه کرده. این مورد در فصل دهم آن مشهود است.
- زبان فارسی (بله! خیلی مهمه! هستند کسانی که چند گیگ، ببخشید چند صد گیگ (!)، eBook به زبان انگلیسی دارند ولی حتی یکی از آنها را هم تمام نکردهاند)
- متن روان و سلیس
- کیفیت خوب کتاب، صفحه بندی و امثال آن
معایب:
- قیمت نزدیک به 8000 تومان برای کتاب 260 صفحهای به نظر زیاد است. البته با بالا رفتن قیمتها (برای مثال 4 برابر شدن قیمت یک عدد نان لواش از سال قبل تا به امسال!)، بالاخره ... خوب این مسایل را هم به همراه خواهد داشت.
- تصاویر موجود در کتاب عموما بیش از اندازه کوچک شدهاند. این مورد خواندن تعدادی از آنها را با مشکل مواجه کرده است.
- در مورد متد الحاقی معروف Include در EF من مطلبی را در این کتاب پیدا نکردم. این مورد به بحث عدم نیاز به join نویسی صریح در EF مرتبط میشود.
- در مورد نحوهی استفاده از EF با سایر بانکهای اطلاعاتی بحث نشده. کتاب فقط به SQL Server منحصر است.
- در یکی از فصلها به الگوی Repository در حد نامبردن اشاره شده. این مورد برای خوانندهای که اطلاعاتی از موضوع ندارد، کافی نیست. میشد یک فصل را به آن اختصاص داد.
در کل خواندن کتاب «معرفی» EF 4.1 ، به کسانی که با Silverlight و WCF RIA Services سر و کار دارند (و کوئریهای آن برایشان کمی گنگ است) و همچنین عموم علاقمندانی که میخواهند جایگزینی برای ADO.NET (در یک سطح بالاتر از آن البته) پیدا کنند توصیه میشود.
در حاشیه!
شاید بپرسید چرا این کتاب در 260 صفحه و چرا فقط در 1000 نسخه منتشر شده است. چرا اینقدر تعداد کتابهای تخصصی کم است. چرا بیشتر تمایل به چاپ کتابهای نصب ویندوز و امثال آن است تا مثلا کتاب EF 4.1 یا خدای نکرده NHibernate ! پاسخ هم در یک جمله خلاصه میشود: «نگرانی ناشر از بازگشت سرمایه»
این شما هستید که با پشتیبانی خود میتوانید این امیدواری را به ناشرین کشور بدهید تا «جرات کنند» بیشتر به طرف کتابهای تخصصی بروند و این پشتیبانی با صرفا گفتن چقدر عالی، دست شما درد نکنه، خیلی خوب بود، باز هم از این کارها بکنید، معنا پیدا نمیکند! باید لطف کنید و «خرید کنید». هیچ راه دیگری هم ندارد. الان چند عدد کتاب ASP.NET MVC 3.0 در کشور به زبان فارسی وجود دارد؟ چند عدد کتاب تخصصی SQL Server 2008 R2 را میتوانید پیدا کنید؟ در مورد کتابخانه پردازش موازی دات نت 4 چطور؟ و ...
البته منهای نگرانی این بحث بازگشت سرمایه ، یک مورد دیگر هم سبب این نوع تاخیرها هست. یادم میاد کتاب الگوهای طراحی برنامه نویسی شیءگرا در سی شارپ رو که چند سال قبل به ناشر دادم نحوهی پرداخت آن به این صورت بود: نزدیک به 10 درصد پشت جلد، در طی چند قسط، آن هم 6 ماه پس از انتشار عمومی کتاب! خوب همین شد که من دیگر به طرف این کار نرفتم. چون واقعا نوشتن، یک «کار» کامل است. باید وقت گذاشت (6 ماه حداقل یا بیشتر)، تحقیق کرد، ریاضت کشید و دست آخر 6 ماه پس از انتشار کتاب ... با توجه به اینکه کتاب رو که الان شما به دست ناشر میدید شاید یکسال دیگر منتشر شود (بسته به تعداد کاری که در دست دارد).
در هر حال، با تمام این تفاسیر، هستند کسانی که «امیدوارانه» نسبت به نوشتن کتابهای تخصصی مانند «مرجع کامل entity framework 4.1» اقدام میکنند و شما هم حداقل کاری که میتوانید جهت حمایت از این نوع حرکات بکنید، «خرید است». در غیراینصورت مدام اینطرف اونطرف ننویسید که چرا کتاب WPF 4.0 یا WCF 4.0 به زبان فارسی نداریم. پشتیبانی نمیکنید؟! خوب ... نداریم! «همین!»
یک مورد دیگر هم هست البته. عدهای هستند که مثلا کلاسهای میلیونی، جهت آموزش این مباحث برگزار میکنند. خوب اینها هم مسلما خوشحال نخواهند شد که مثلا کتاب WCF 4.0 و مباحث SOA مرتبط با آن به زبان فارسی منتشر شود یا حتی در این زمینه پیش قدم شوند. این هم هست!
اشتراکها
سری TDD در JavaScript
- ویدیوی رایگان آموزشی در مورد جنبههای مختلف LINQ to Entities (دریافت، ماخذ)
- Mono و پشتیبانی از SIMD یا Single Instruction Multiple Data
برنامه نویسی موازی تنها به برنامه نویسی چند ریسمانی و چند هستهای خلاصه نمیشود. بلکه استفاده از تواناییهای پیشرفته در پروسسورهای مدرن امروزی Intel و AMD نیز توانایی قابل توجهی را در این عرصه ارائه میدهند. بسیاری از برنامههای نوشته شده به زبانهای C و CPP از SIMD جهت بالا بردن سرعت پردازشی استفاده میکنند ( برای مثال بالا بردن سرعت کار با ماتریسها و بردارها یا بهینه سازی حلقهها) و کامپایلرهای آنها نیز در این زمینه امکانات ویژهای را ارائه مینمایند. اما زبانهای بر پایه دات نت راه سادهای را برای استفاده از این توانایی ندارند.
با ارائه مونو 2.2 (شماره نگارشهای مونو (دات نت لینوکسی) با شماره نگارشهای دات نت فریم ورک مایکروسافت همخوانی ندارد و مستقل هستند)، این سناریو تغییر کرده است و فضای نام Mono.Simd ارائه شده است. به این صورت میتوان از تواناییهای SIMD (تنها SSE3 و قسمتی از SSE4 پشتیبانی میشود) در برنامههای دات نت استفاده نمود (که بیشتر بر روی عملیات سریع بر روی ماتریسها و بردارها متمرکز شده است).
جهت اطلاعات بیشتر میتوان به دمویی در اینباره رجوع کرد. دریافت
ماخذ
- کارتهای مرجع دات نت
سایت Dzone اخیرا در تکمیل برگههای مرجع پیشین خود، برگههای مرجع ASP.Net را نیز ارائه کرده است.
Core ASP.NET
برای دریافت نیاز به ثبت نام است و سپس درخواست لینک دانلود که به آدرس ایمیل شما ارسال خواهد شد.
نظرات مطالب
NHibernate 3 Beginners Guide
سورس این نوع پروژهها برای کسانی که EF یا NH رو نوشتن خوبه. به اونها ایده میده؛ ولی به درد من و شما نمیخوره و وقت تلف کردن است. از هر چیزی که GUI داره برای طراحی دوری کنید! ORM ها زمانیکه قسمت عمده کار را از شما مخفی میکنند شاید به ظاهر برای یک تازه کار جذاب باشند ولی هر چقدر که جلوتر میرن محبور میشن به پشت صحنه بیشتر رجوع کنند. NH از روز اول همون پشت صحنه رو نشون میده. صادق هست. ضمنا برای انتخاب هر کتابخانهی نسبتا پایهای باید به این مسایل دقت کنید:
- چه تعداد کتاب چاپ شده در این مورد هست؟
- چه تعداد انجمن برای رفع اشکال آن وجود دارد؟
- چه تعداد بلاگ و سایت در این زمینه مطلب و مقاله منتشر میکنند؟
- آخرین تاریخ به روز رسانی آن کی بوده؟
benchmark مهم نیست. گیرم این یکی دو ثانیه زودتر از اون یکی جواب بده. چه اهمیتی داره؟ مهم این است که چند نفر با این کتابخانه کار میکنند، چه تعداد منبع دارد و آیا میشود در روزهای سخت دنبال پاسخگو گشت؟
NH یک خوبی دیگر هم دارد. در سایتهای دات نتی مطلب پیدا نکردید، معادل یک به یک جاوا هم دارد.
EF هم داره خوب میشه. این نگارش 4.1 آن خیلی شبیه به Fluent NHibernate شده.
- چه تعداد کتاب چاپ شده در این مورد هست؟
- چه تعداد انجمن برای رفع اشکال آن وجود دارد؟
- چه تعداد بلاگ و سایت در این زمینه مطلب و مقاله منتشر میکنند؟
- آخرین تاریخ به روز رسانی آن کی بوده؟
benchmark مهم نیست. گیرم این یکی دو ثانیه زودتر از اون یکی جواب بده. چه اهمیتی داره؟ مهم این است که چند نفر با این کتابخانه کار میکنند، چه تعداد منبع دارد و آیا میشود در روزهای سخت دنبال پاسخگو گشت؟
NH یک خوبی دیگر هم دارد. در سایتهای دات نتی مطلب پیدا نکردید، معادل یک به یک جاوا هم دارد.
EF هم داره خوب میشه. این نگارش 4.1 آن خیلی شبیه به Fluent NHibernate شده.
شروع به کار با NH به دو قسمت تقسیم میشود. یک قسمت نگاشت کلاسها است و قسمت دوم سشن گردانی آن. قسمت دوم آن به همان مباحث کلاسهای singleton ایی که بحث آنها در سایت هست بر میگردد. یا حتی استفاده از کتابخانههای IOC برای مدیریت آن (که این پیاده سازی را به صورت توکار هم دارند).
قسمت نگاشت کلاسها در NH انواع و اقسامی دارد:
- ابتدا همان فایلهای XML مدل Hibernate جاوا بود.
- بعد شد مدل annotation ایی به نام Castle ActiveRecord. (این پروژه آنچنان فعال نیست و علتش به این بر میگردد که نویسنده اصلی جذب مایکروسافت شده)
- سپس Fluent NHibernate پدید آمد. (این پروژه هم پس از NH 3.2 ، سرد شده و به نظر آنچنان فعال نیست)
- الان هم مدل جدیدی به صورت توکار و بدون نیاز به کتابخانههای جانبی از NH 3.2 به بعد به آن اضافه شده به نام mapping-by-code .
و ... خبر خوب اینکه شخصی در 18 قسمت به توضیح این قابلیت جدید mapping by code پرداخته و روشهای نگاشت مرتبط رو با مثال توضیح داده که در آدرس زیر میتونید اونها رو پیدا کنید: