نوشتن افزونه برای jQuery–قسمت صفرم

by MDP 19. July 2011 22:42

دو روزه درگیر نوشتن یه پلاگین هستم که بتونه آخرین Tweet ها رو نشون بده.البته با توجه به فیلتر بودن Twitter باید از یه پراکسی برای این منظور استفاده کرد که کار سختی نیست و راحت میشه نوشتش.به زودی این پلاگین رو که به صورت Open Source می خوام انتشارش بدم رو روی CodePlex میزارم.

برای قشنگ کردن و چند تا افکت حسابی تصمیم گرفتم که از jQuery استفاده کنم و خروجی کار رو به صورت یک Plugin برای jQuery در بیارم.با اینکه خیلی وقته از jQuery استفاده می کنم ولی هنوز اطلاعات مفصلی از پلاگین نویسی نداشتم.به همین خاطر توی گوگل یکم سرچ کردم و به وبلاگ آقای نیما بغدادی رسیدم(+).آموزش سه قسمتی ایشون در نوشتن پلاگین خوب بود ولی یه مشکلی داره به نظر من.

این آموزش ها خیلی سطح بالا نوشته شدن و برای من که تازه کارم یکم سخت بود.به همین خاطر تصمیم گرفتم با زبانی ساده تر نوشتن پلاگین توضیح بدم.

قسمت صفرم :

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

برای نوشتن هر پلاگین jQuery شما باید jQuery رو بشناسید و حداقل این مقاله ها رو مطالعه کنید.

 

()jQuery.extend

 

یکی از کتاب روال های اصلی jQuery که حتمی باید اون رو خوب بشناسید jQuery.extend هستش.

این روال همونطوری که از اسمش پیداست وظیفه گسترش(یا به عبارت دیگر ترکیب) چیز هایی(!) رو بر عهده داره.شما با این روال میتونید این فعالیت هارو انجام بدید :

  1. گسترش یک آرایه از Property ها
  2. گسترش یک آرایه از Event ها یا روال ها
  3. هر دو مورد بالا با هم.

ولی گسترش به چه معناست؟

گسترش یک آرایه از Property ها : فرض کنید شما پلاگینی نوشتید که وظیفه تغییر رنگ یک object رو بر عهده داره.اگر شما در نظر داشته باشید که بتونید هر دفعه یک رنگ خاصی مد نظر شما اعمال بشه باید بتونید مقدار رنگ رو به پلاگینتون پاس بدید.مثل این :

$("#someDive").ChangeColorPlugin({
   color:"#f97141"
});

گسترش یک آرایه از Event ها یا روال ها :حتمی توی پلاگین های jQueryUI دیدید که یک سری از Event ها از بیرون کلاس قابل دستیابی هستند.

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

$("#someDive").ChangeColorPlugin({
   OnCompelete:function(){alert("done")}
});

هر دو مورد بالا با هم: شاید هم هردو مورد باهم :

$("#someDive").ChangeColorPlugin({
   color:"#f97141",
   OnCompelete:function(){alert("done")}
});

روش انجام این گسترش ها با روال jQuery.extend هست.

 

متد jQuery.extend که جزو متد های اصلی jQuery هست به صورت زیر تعریف میشه :

jQuery.extend( [deep,] target, object1, [objectN] )

مشخصات پارامتر ها :

  • deep : طبق گفته سایت jQuery در صورت True بودن انجام گسترش به صورت بازگشتی خواهد بود.یعنی داخل آبجکت ها هم برای ترکیب جست و جو میشه.این گزینه برای گسترش متد ها کاربرد داره.
  • target : آبجکتی که باید گسترش پیدا کنه
  • object1 : مقداری که شما به target میخواید که اضافه بشه.
  • objectN : تعداد آبجکت های اضافه شونده محدود نیست.یعنی شما تا N آبجکت رو میتونید به یک آبجکت گسترش بدید.

برای گسترش سه حالت ذکر شده بالا محتمل هست.همه این حالات رو ما بررسی می کنیم :

روش پیاده سازی گسترش یک آرایه از Property ها :

فرض کنید شما آبجکتی به صورت زیر دارید :

var defaults = {
    Color: '#cccccc',
    Interval: 1000,
};

و لی قصد دارید این آرایه رو با آرایه زیر گسترش بدید

var obj = {
    Color: '#c3c3c3',
    BaseColor :'#ffffff'
};

روش انجام این کار به این صورت خواهد بود :

var obj2= $.extend({}, defaults , obj);

پس از extend کردن آبجکت defaults به obj طبق تعریف متد extend آبجکت defaults به این آبجکت تبدیل میشه :

var defaults = {
    Color: '#c3c3c3',
    Interval: 1000,
    BaseColor :'#ffffff'
};

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

روش پیاده سازی گسترش یک آرایه از Event ها یا روال ها:

این روش هم دقیقا مثل روش قبلی پیاده سازی میشه به همین خاطر من فقط با چند تا مثال مفهوم رو ارائه می کنم:

فرض کنید آبجکت اول شما این آبجکت باشه :

var obj3 = {
    show : function(){ /*Some logic goes here*/ },
    Hide : function(){ /*Some logic goes here*/ }
}

و همچنین این آبجکت که قراره به obj3 گسترش پیدا کنه :

var obj4 = {
    Hide : function(){ /*this is another logic*/ },
    Init : function(){ /*Some logic goes here*/ }
}

و حالا گسترش :

var obj5= $.extend(true, obj3 , obj4);

از این به بعد obj3 به این صورت خواهد بود

var obj3 = {
    show : function(){ /*Some logic goes here*/ },
    Hide : function(){ /*this is another logic*/ },
    Init : function(){ /*Some logic goes here*/ }
}

تنها نکته اینجاست که شما باید مقدار پارامتر deep رو به True مقدار دهی کنید تا متد های شما داخل آبجکت شما هم گسترش پیدا کنن.

روش پیاده سازی هر دو مورد بالا با هم:

پیاده سازی اصلی برای Property ها و متد ها رو یاد گرفتیم، ولی حالا چه طور ترکیب این دو رو استفاده کنیم؟

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

آبجکت اول که همون آبجکت اصلی هست به صورت زیر فرض می کنیم :

var obj6 = {
    Color : '#f97141',
    interval : 1000,
    show : function() { alert('Show'); },
    hide : function() { alert('hide from obj6'); }
}

و همچنین آبجکت ثانویه :

var obj7 = {
    Color : '#c3c3c3',
    hide : function() { alert('hide from obj7'); }
}

برای ترکیب مثل روش های قبل عمل می کنیم.فقط چون ما در قصد گسترش متد هامون هم داریم باید مقدار پارامتر deep رو به true مقدار دهی کنیم :

var obj8= $.extend(true, obj6 , obj7);


پایان قسمت صفرم.

به روزرسانی :

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

Example.zip (32.42 kb)

Tags: ,

jQuery

یک سال در شماران ، برداشتی آزاد از کار در محیط شرکت شماران سیستم.

by MDP 12. July 2011 03:53

به طور اتفاقی مطلبی در وبلاگ افشار محبی دیدم که نظرم رو به خودش جلب کرد با این عنوان :” یک سال در پرشیا شبکه “ از این ایده خوشم اومد.به قول خود جناب محبی :

از بقیه همکاران و دوستان نرم‌افزاری دعوت می‌کنم در وبلاگ‌هایشان راجع به شرکت‌هایی که در آنجا کار کرده یا می‌کنند، بدون داشتن حب و بغض، بنویسند. این طوری اولاً راهنمایی برای دیگر همکاران جویای کار تهیه شده و ثانیاً قدر خوبی‌های احتمالی شرکت و تیم‌ها هم دانسته شده است.

 

 

به روز رسانی


به درخواست شماران این مطلب حذف شد

Tags:

Work

پیکر بندی Entity Framework با کانکشن دستی

by MDP 11. July 2011 01:10

حتمی شما توی پروژه هاتون دوست داشتید که Connection String در EF داخل فایل Web.Config یا App.Config قرار ندید که امنیت نرم افزارتون بالا بره.

ایده های زیادی در رفع مشکل فوق وجود داره ، از جمله :

    1. Encrypt کردن Web.Config (+ یک نسخه وطنی)
    2. ذخیره کردن Connection String در یک دیتابیس دیگر
    3. ذخیره کردن Connection String در یک فایل متنی مخفی
    4. Embed کردن Connection String در فایل های Resource
    5. ذخیره کردن Connection String به صورت HardCode ( البته این اصطلاح Hard Code غلطه )

شما هر کدون از این روش ها رو که استفاده کنید بازم لازم دارید که به EF بفهمونید که Connection String کدومه.Code Generator بعد از Map کردن Entity ها ، سه مدل Constructor برای مدل شما می سازه:

  1. Constructor عادی و بدون پارامتر
  2. Constructor با پارامتر ConnectionString که یک String از شما دریافت میکنه.
  3. Constructor با پارامتر Connection که از نوع “EntityConnection” هست.

مورد اول که از اطلاعات Base که توسط Code Generator ساخته میشه استفاده میکنه.مورد دوم و سوم جای بحث دارن.

برای ادامه بحث باید ابتدا ساز و کار EF رو مورد بررسی قرار بدیم.EF برای Mapping از سه فایل CSDL ، SSDL و MSL استفاده میکنه.

این سه فایل اطلاعات اصلی برای برقراری ارتباط بین EF و DataBase رو بر عهده دارن که شمال اطلاعات Entity ها ، روابط و ... میشن.

EF برای پیکر بندی به این اطلاعات نیاز داره.به خاطر همین باید توی Connetion Strnig این اطلاعات وجود داشته باشه.یعنی آدرس این سه فایل داده بشه.ولی این سه فایل هنگام Build شدن به داخل یک فایل مرکزی با پسوند EDMX ترکیب میشن.راه حل آدرس دهی سادست.شما باید از کلاس “System.Data.EntityClient.EntityConnectionStringBuilder” برای ساختن Connection استفاده کنید.

روش پیاده سازی :

string connectionString = new System.Data.EntityClient.EntityConnectionStringBuilder()
{
	Metadata = "res://*",
	Provider = "System.Data.SqlClient" /* if the provider is MS SQL */,
	ProviderConnectionString= "Reqular database connection string"
}.ConnectionString;

شاید از خودتون در مورد خط سوم یعنی آدرس دهی Metadata سوال کنید.این بخش آدرس همون سه فایل مذکور هست که باید داده می شد که به این شیوه از Resource ها خونده میشه و البته به صورت خودکار اون سه فایل رو خودش استخراج میکنه.شما فقط کافیه که این آین Connection رو که به صورت String هست به Constructor های EF بدید و تمام !

Tags: ,

.Net | EF

روش انتخاب یک شرکت ، قسمت دوم : عوامل ثانویه

by MDP 10. July 2011 00:36

تو بخش اول عوامل موثر در انتخاب یک شرکت مناسب رو به دو بخش :

    1. موارد اولیه :

      1. حدود شرکت

      2. حدود شخص

    2. موارد ثانویه :

      1. محیط کاری

      2. موارد مالی

      3. همکاران

      4. برنامه

تقسیم کردم.در این پست می خوام به بخش دوم یعنی عوامل ثانیوه بپردازم:

موارد ثانیوه شامل مواردی میشه که با موندگاری و کارایی شما در شرکت مورد نظر ارتباط مستقیمی داره :

محیط کاری:

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

 

موارد مالی:

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

ما مشکلی توی پرداخت های مالی نداریم و ماکسیموم تا 5 هر ماه حقوق ها داده میشه

که هم شما و هم من می دونیم که نمیشه زیاد بهش اعتماد کرد !

 

همکاران:

موضوع هم سطحی و بارعلمی یکسان تغریبا منتفیه ! شما خیلی کم بتونید تعدادی انسان پیدا کنید که در سطح های مشترکی باشن.به همین دلیل شما باید این مورد رو بپذیرید که یا شما زبان همکارتون رو نمی فهمید و یا اون.ولی همیشه مراقب این موضوع باشید که یکی از دلایل اصلی هر فردی برای تغییر محل کار ارتقاء شغلی هست ، نه معلم شدن برای افراد دیگه ! همیشه سعی کنید از مدیر پروژه ( البته درست تر هست که مدیر فنی گفته بشه ) در مورد بقیه همکاران سوال کنید و جایگاه کاری خودتون رو بپرسید.

 

برنامه:

یکی از عوامل بسیار مهم در شرایط ثانیوه برنامه شرکت هست.هیچوقت با شرکتی که برنامه ای برای پیشرفت نداره قرارداد نبندید ، وقتی که شرکت برنامه نداشته باشه مشکلات زیادی از جمله :

  1. از بین رفتن مشتریان
  2. فشار به کارمندان
  3. درخواست های غیر واقعی

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

 

حرف آخر :

همیشه یادتون باشه که همیشه شرکت ها نیستند که شما رو انتخاب میکنن ، مرحله اول شمائید که اون ها رو انتخاب می کنید.

یادتون باشه که از پرس و جو واهمه ای نداشته باشید.

با دقت بررسی کنید ، برای پرس و جو سراغ منشی مدیرعامل(!) نرید ، از کارمندان عادی سوال کنید.

حقوق خودتون رو بشناسید ، سعی کنید متن قرارداد رو با دقت بخونید .

 

با آرزوی موفقیت برای همه شما Winking smile

Tags: , ,

Work

مشکل Live Writer با BlogEngine

by MDP 9. July 2011 04:57

اگه شما هم مثل من عاشق پک Live باشید حتمی از Live Writer استفاده کردید.

برای کسایی که نمی دونن کارایی Live Writer چیه باید بگم که یک Editor قوی هست که بر اساس پروتوکل استانداردی به نام : WLW که مخفف Windows Live Writer هست.Live Writer بعد از گرفتن نام کاربری و رمز عبور شما به صورت بسیار جالب و جذابی Themplate وبلاگ شما رو هم دانلود میکنه تا شما هنگام بلاگ نوشتن حس کنید که توی خود سایت درحال نوشتن هستید.

در باره خصوصیات Live Writer بعدا توضیحات کاملی میدم و فعلا به توضیح مشکل و روش رفع اون می پردازم.

اگر شما از BlogEngine برای Bloging استفاده میکنید به راحتی می تونید با Live Writer بلاگ نویسی کنید.

همه چیز خیلی روون و ساده هست ولی وقتی شما نوشتون رو Publish می کنید نمی تونید اونو توی صفحه اصلی وبلاگتون ببیندید.البته اگر Login شده باشید مشکلی وجود نداره و پست رو می بینید.

مشکل کجاست ؟ سادست ، همه چیز به درستی در دیتابیس قرار میگیره به غیر از تاریخ !بله درسته ، مشکل سر تاریخ پست هست.بیشتر سرور هایی که ما از اونا استفاده می کنیم برای Hosting از Time Zone متفاوت با ما استفاده می کنن به همین خاطر معمولا تاریخ پست یک روز جلو تر از تاریخ سرور ثبت میشه و BE هم تا روزی که با اون تاریخ یکی نباشه پست شما رو نشون نمیده.

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

موفق باشید.

Tags: , , ,

BlogEngine | Live Writer

My Groups

Poll

از چه پلتفرمی برای توسعه استفاده می کنید



Show Results

Month List