SyntaxHighlighter با طعم JQuery

29 01 2009
SyntaxHighlighter JQuery

اگه تا حالا از اسکریپت SyntaxHighlighter استفاده کرده باشین میدونین که با استفاده از این اسکریپت می شه کدها یا همون Code Snipped ها را رنگی و فرمت کرد.
برای استفاده از این اسکریپت در حالت عادی لازم است که علاوه بر موتور اصلی این اسکریپت (shCore.js) اسکرپیت مخصوص زبان استفاده شده در کدتون رو هم اضافه کنید. برای مثال برای سی شارپ shBrushCSharp.js

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

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

// Coded by Salar Khalilzadeh 2009-01-29
// https://salarblog.wordpress.com/

if($){
// SyntaxHighlighter scripts path
var BrushBasePath='http://www.YourSite.com/SyntaxHighlighter/scripts/';

// SyntaxHighlighter style sheet
var StyleFilePath='http://www.YourSite.com/SyntaxHighlighter/styles/SyntaxHighlighter.css';
var BrushFileName='shBrushXXX.js';
var BrushCoreFile='shCore.js';
var BrushAliases=[
	['xml','xml'], ['xhtml','xml'], ['xslt','xml'], ['html','xml'] , ['xhtml','xml'],
	['vb','vb'], ['vb.net','vb'],
	['sql','sql'],
	//['asm','asm'], uncomment if you have assmbly brush
	['ruby','ruby'], ['rails','ruby'], ['ror','ruby'],
	['py','python'], ['python','python'],
	['php','php'],
	['js','jscript'], ['jscript','jscript'], ['javascript','jscript'],
	['java','java'],
	['delphi','delphi'], ['pascal','delphi']
];

var codeTags=$('pre,code');
var matchedElements=[];
codeTags.each(function(){
	var $item = $(this);
	var href = $item.attr("href");
	var i;
	for(i=0;i<BrushAliases.length;i++){
		var attr=$item.attr("class");
		if(attr.indexOf(BrushAliases[i][0])!=-1 && matchedElements[BrushAliases[i][1]]==null){
			matchedElements.push(BrushAliases[i][1]);
		}
	}
})

// Highlighter core, if there is any language
if(matchedElements.length>0){
	document.write("<link rel='stylesheet' type='text/css' href='"+StyleFilePath+"' />");
	var jsCore=BrushBasePath+BrushCoreFile;
	document.write(unescape("%3Cscript%20type%3D%27text/javascript%27%20src%3D%27")+ jsCore + unescape("%27%3E%3C/script%3E"));
}

// Brushes
for(i=0;i<matchedElements.length;i++){
	var jsSrc=BrushFileName.replace('XXX',matchedElements[i]);
	jsSrc=BrushBasePath+jsSrc;
	document.write(unescape("%3Cscript%20type%3D%27text/javascript%27%20src%3D%27")+ jsSrc + unescape("%27%3E%3C/script%3E"));
}}

نحوه استفاده: این کد رو در حتما در آخر صفحه درج کنید. علت این کار رو در ادامه توضیح می دم.
در این کد در مقدار BrushBasePath آدرس محل brush های SyntaxHighlighter خواهد بود که با توجه به اینکه آن ها را در کجای وبسایت خود قرار داده اید باید آن را مسیر دهی کنید.
StyleFilePath آدرس فایل CSS مورد استفاده SyntaxHighlighter است.

شیوه کار این کد به این صورت هست که با استفاده از لیست زبانهای قابل استفاده، در تگ های pre به جستجو می پردازد و در صورت یافتن، اسکریپت مربوط به آن زبان را به صفحه اضافه می کند.
تنها نکته مهمی که وجود داره عدم استفاده از $(document).ready() مربوط به JQuery هست. به این علت که این تکه کد مقداری اسکریپت در صفحه درج می کند و زمان وقوع رویداد ready کد html کامل دریافت شده است و درج مجدد یک اسکریپت جدید باعث refresh شده صفحه و از دست رفتن ظاهر اون میشه.

موفق باشید

Advertisements




بررسی فعال بودن Javascript در ASP.NET

28 12 2008

برای اینکه به فعال بودن جاوا اسکریپت در مرورگر کاربر مطمئن بشین چند روش می تونید استفاده کنید که با توجه به نیازتون یکی از اونا رو انتخاب کنید و یا ترکیبی از آنها استفاده کنید.

  • استفاده از تگ noscript

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

<meta http-equiv="refresh" content="0;url=EnableScripts.htm">

همانطور که از کد مشخصه این کار باعث میشه تا کاربر به صفحه EnableScripts.htm هدایت بشه. معمولا این روش زیاد کاربر پسند نیست ولی برای صفحاتی که بدون وجود جاوا اسکریپت به هم خواهند خورد و فعال بودن آن حیاطی هست می تونید از این روش استفاده کنید. دقت کنید که کد بالا باید در بخش Head سایت قرار بگیره، مانند زیر:<head>
<title>Welcome</title>
<noscript>
<meta http-equiv="refresh" content="0;url=http://www.google.com">
</noscript>
</head>

همچنین به جای کد بالا می تونید پیغامی رو در صفحه نمایش بدید:

<noscript>
کاربر گرامی، برای مشاهده این صفحه باید جاوا اسکریپت را در مرورگر خود فعال نمایید.
</noscript>

که این کد رو می تونید در هرجای صفحه قرار بدین.

  • استفاده از فیلد مخفی یا Hidden در ASP.NET

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

برای بررسی فعال بودن جاوا اسکریپت در رویداد های PostBack ابتدا باید یک فیلد hidden رو در فرم قرار بدین و مقدار این فیلد رو برابر 0 قرار بدین. چیزی شبیه این:
<asp:HiddenField ID="txtCheckJS" runat="server" Value="0" />

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

<script type="text/javascript">
document.getElementById('<%=txtCheckJS.ClientID %>').value='1';
</script>

کاری که این کد جاوا اسکریپت انجام میده تغییر مقدار فیلد به 1 هست، که یعنی جاوا اسکریپت فعال است. تنها کاری که باقی مونده بررسی این فیلد در رویداد کلیک هست. کافی هست که کدی مانند زیر رو استفاده کنید:
if (Page.IsPostBack)
{
if (Convert.ToInt32(txtCheckJS.Value) == 1)
{
// Javascript is enabled
}
else
{
// Oh No!
// Javascript is not enabled
}
}

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





تعریف ویژگی ها (Properties) در جاوا اسکریپت

28 11 2008

یکی از امکانات نسخه های جدید JavaScript پشتیبانی از ویژگی ها (Property) هست. اگر با سایر زبان های برنامه نویسی آشنایی داشته باشید، مطمئنن می دانید که ویزگی ها یکی از بخش های جدایی ناپذیر زبانهای برنامه نویسی OOP هستند.

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

با این مقدمه می خواهم چند روش تعریف ویژگی ها در جاوا اسکریپت مطرح کنم.

تعریف اول:

جاوا اسکریپت زبان بسیار ساده ای است. ابجکت ها (یا اشیا) در جاوا اسکریپت چیزی بیش از مجموعه ای از کلید ها و مقادیر نیستند. به این معنی که برای دسترسی به عضوی از یک شیئ می توانید همانند یک آرایه با آن رفتار کنید.

برای مثال برای افزودن یک عضو به یک شیئ به مثال زیر توجه کنید:

var thing = new Object();
thing[ “prop1” ] = “Hello”;

در این مثال ما عضو جدیدی به نام prop1 را به thing اضافه کردیم. مقدار prop1 برابر Hello خواهد بود. روش دیگری هم برای افزودن عضو به شیئ مورد وجود دارد. به مثال زیر توجه کنید:

var thing = new Object();
thing.prop1 = “Hello”;

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

var thing = {prop1 : “Hello”};

استفاده از مقدار prop1 بسیار ساده است می توان همانند یک آرایه یا یک ویژگی از آن استفاده کرد:

var thing = new Object();
thing.prop1 = “Hello”;
alert( thing[“prop1”] );
thing.prop1 = “Hello Again!”;
alert( thing.prop1 );

روش دوم:

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

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

این روش چیزی جز کلمات کلیدی get و set نیست.

var thing =  {
_price: 0,
get price() { return this._price; },
set price(value)
{
	if (value < 0)
	throw "price must be greater than zero";
	this._price = value;
}
};

در این مثال شیئ با نام thing تعریف شده است. این شیئ دارای یک متغیر با نام price_ و ویژگی price هست که با استفاده از یک متد get و یک متد set تعریف شده است.

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

همانطور که می بینید ویزگی price در هنگام عمل set مقدار ورودی را بررسی می کند و اگر کوچکتر از صفر باشد خطایی را تولید خواهد کرد.

نمونه استفاده از کد بالا:

// مقدار دهی
thing.price = 5;
// نمایش مقدار
alert( thing.price );
// مقدار نامعتبر و تولید خطا
thing.price = -10;

متاسفانه از این روش مرورگر های کمی پشتیبانی می کنند و در حال حاظر مرورگرهای Firefox و Safari 3 و Opera 9.5 از آن پشتیبانی می کنند.

روش سوم:

این روش را مرورگر Firefox برای استفاده در خودش طراحی کرده و در سایر مرورگرها کار نخواهد کرد. روش بسیار جالبی است و ساده تر از روش قبلی می باشد.

var thing =
{
_price: 0
};
thing.__defineGetter__("price", function(){ return this._price; });
thing.__defineSetter__("price", function(value)
{
	if (value < 0)
		throw "price must be greater than 0";
	this._price = value;
}
);

در این مثال ابتدا شیئ thingتعرفی می شود. سپس با استفاده از تابع __defineGetter__ متد get با برای ویژگی price تعریف می شود. این تابع دو ورودی دارد که اولی نام ویژگی مورد نظر است و دومی رفرنسی به تابع مورد نظر برای get. البته در این مثال تابع در همان جا تعریف شده است.

تابع __defineSetter__ همانند __defineGetter__ عمل می کند و فقط برای اضافه کردن تعریف set به ویژگی مورد نظر مورد استفاده است. در این مثال تابع مربوط به set در همان خط تعریف شده و مقدار ورودی را برای مقادیر کمتر از صفر کنترل می کند.

همانند مثال قبلی این مثال نیز کار خواهد کرد:

// مقدار دهی
thing.price = 5;
// نمایش مقدار
alert( thing.price );
// مقدار نامعتبر و تولید خطا
thing.price = -10;

روش چهارم:

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

function thing()
{
	var _price = 0;
	this.getPrice = function(){
		return _price;
	};
	this.setPrice = function(val){
		if (val < 0)
			throw "price must be greater than 0";
		_price = val;
	};
}

در این مثال شیئ thing به عنوان یک تابع تعریف شده است که می توان از روی متغیر و اشیا دیگری هم ساخت. در داخل این تابع دو تابع getPrice برای خواندن و setPrice برای نوشتن در متغیر _price تعریف شده است.

// ایجاد نمونه جدید از تابع تعریف شده
var product= new thing();
// دسترسی متقیم به متغیر داخلی
alert(product._price);
//مقدار دهی با استفاده از تابع
product.setPrice(2);
// دسترسی به مقدار با استفاده از تابع مربوطه
alert( product.getPrice() );
// مقدار با یک مقدار نامعتبر و دریافت خطا
product.setPrice( -4 );

با این اوصاف مشاهده می کنید که javascript روز به روز قوی تر می شود، مخصوصا که Web 2 بسیار به javascript وابسته هستند.

موفق باشید

منابع:

http://weblogs.asp.net/stephenwalther/archive/2008/02/29/creating-javascript-properties-in-asp-net-ajax.aspx
http://ejohn.org/blog/javascript-getters-and-setters/
http://ajaxian.com/archives/getters-and-setters-in-javascript





12 نکته برای افزایش سرعت کدنویسی در Visual Studio

15 11 2008

نسخه های اخیر Visual Studio یعنی 2005 و 2008 کلید های میانبر و ابزارهای متفاوتی را عرضه کرده اند که به برنامه نویس اجازه می دهد با فشردن چند کلید در عوض رفتن به میان منو های مختلف، به راحتی به مقصود خود برسد.

این ابزارها و کلید های میانبر در سرعت نوشتن کد تاثیر زیادی دارند و باعث حفظ تسلط بر روی کد می شوند.

در این مقاله سعی می کنم تا به این نکات بپردازم و سعی خواهم کرد تا بدون نیاز به ماوس، کارهای مورد نظر رو توضیح بدم.

  • اضافه کردن namespace به صورت خودکار

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

در این حالت تنها کافی است که نام کلاس رو وارد کرده و کلید .+CTLR (کلید کنترل همراه با نقطه) را بزنید. در این صورت منویی ظاهر خواهد شد. در این منو فضای نام مورد نظرتون رو با ماوس و یا کلید های بالا و پایین صفحه کلید انتخاب کرده و اینتر را بزنید. در این صورت آن فضای نام به صورت خودکار به فایل اضافه خواهد شد:

suggestion

این ویژگی برای VS 2005 و VS 2008 کار می کند

  • استفاده از الگوهای کد نویسی

تکه الگو های کد یا code snippet ها تکه کد هایی هستند که تمامی یک عبارت را به صورت خودکار درج می کنند.

این تکه الگو ها به چند روش در دسترس هستند. برای مشاهده و انتخاب از لیست کلید های CTRL+K و CTRL+X رو فشار دهید. در لیست نمایش داده شده می توانید یکی از را اتخاب کنید که در این صورت کد مربوط به آن الگو درج خواهد شد.

روش بعدی، وارد کردن نام الگو و سپس فشردن دوبار کلید tab هست. برای مثال برای درج الگوی ویژگیها (Property) به این صورت عمل کنید: prop + tab +tab

در این روش کادرهای سبز رنگی ظاهر می شوند که باید مقادیر مورد نظر یا درخواستی رو در آنها وارد کنید و پس از پایان کارتون باید کلید Enter را فشار دهید.

snippetچند نمونه از الگوها:

درج الگوی try..catch: try+tab+tab

درج الگوی try..finally: tryf+tab+tab

حلقه for: for+tab+tab

شرط switch: switch+tab+tab

پراپرتی فقط خواندنی همراه با متغیر: propg+tab+tab

  • مرتب سازی و حذف ورودی های کلاس (using یا Imports) های زاید

برنامه نویسان معمولا در مزان کد نویسی تعدادی ورودی را به کلاسشان اضافه می کنند که ممکن است به سبب تغییراتی که بعدا در کدهایشان می دهند دیگر نیازی به آنها نداشته باشند. همچنین ممکن است به خاطر افزوده شدن ورودی ها به مرور زمان این ورودی ها کمی به هم ریخته به نظر بیاند.

برای رفع این مشکل در محیط کد نویسی بر روی صفحه کلید راست کنید تا منو باز شود. در زیر منوی Organize usings چند گزینه وجود دارد که می توانید از آنها برای ویرایش ورودی های کلاس استفاده کنید. مقصود ما فعلا گزینه Remove and sort   است که باعث حذف شدن موارد زاید و مرتب سازی بقیه آنها می شود:

remove-sort

این ویژگی فقط بر روی VS 2008 کار می کند

  • تبدیل به توضیح کردن و یا غیر فعال کردن چندین خط کد

ممکن است خواسته باشید که چندین خط کد را یکباره غیرفعال و یا اینکه به توضیح تبدیل کنید. در این حالت فقط کافی است که متن مورد خودتان را انتخاب کرده و از ترکیب کلید های CTRL+K و CTRL+C استفاده کنید.

برای برگرداندن به حالت اولیه در متون انتخاب شده از ترکیب کلید های CTRL+Kو CTRL+U استفاده کنید.

این مورد در تمامی ویرایشگر های VS قابل استفاده است. از جمله html و javascript و vb.net و web.config و ..

  • ایجاد خودکار ویژگها (Property) از روی متغیر

اگر قبلا متغیری تعریف کرده و می خواهید برای آن ویژگی ایجاد کنید، لازم نیست تا آن را به صورت دستی وارد کنید. اگر از ترکیب کلید زیر استفاده کنید، وِیژگی برای شما به صورت خودکار ایجاد خواهد شد.

برای این منظور بر روی متغیر قرار گرفته و کلید های CTRL+E و CTRL+R را فشار دهید. در این صورت پنجره ای ظاهر خواهد شده که همراه با چند وِیژگی دیگر نامی را پیشنهاد خواهد داد. پنجره را تایید کنید تا وِیژگی ایجاد شود.

نکته ای لازم به ذکر هست که برای گرفتن نتایج خوب از این روش باید نام متغیرهای خودتون را با (_) شروع کنید.

encapsulate-field

  • فرمت کردن و منظم کردن کد تنها با فشار چند کلید

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

ترکیب کلیدهای CTRL+K و CTRL+D

  • کپی، بریدن و درج یک خط به صورت سریع

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

برای این منظور روی خط مورد نظر قرار گرفته و برای کپی کردن کلید CTRL+C و برای بریدن کلید CTRL+X و برای درج کردن از حافظه کلید CTRL+V را فشار دهید.

  • کلیدهای میانبری دیگری برای کپی، بریدن و درج

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

Copy: CTRL+Insert

Cut: Shift+Del

Paste: Shift+Insert

  • کامل کردن خودکار نام متغیر ها و کلاس ها

در هنگام نوشتن کد اگر نام متد و یا کلاسی را کامل به یاد نمی آورید و یا اینکه چند حرف اول آن را به یاد می آورید، کافی هست که چند حرف اول را تایپ کرده و ترکیب کلید های CTRL+Space را فشار دهید.

در این صورت اگر مشابع اسم وارد شده چندین مورد یافت شود لیستی نمایش داده خواهد شد و اگر تنها یک مورد یافت شود، نام وارد شده شما کامل خواهد شد.

  • دسترسی به لیست کلاسها در محیط ویرایش گر کد

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

برای دسترسی به این لیست بدون نیاز به ماوس از ترکیب کلید های CTRL+F2 استفاده کنید.

navigationbar

  • کامپایل پروژه و اجرای آن و انصراف از کامپایل

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

کامپایل تمامی solution: ترکیب CTRL+Shit+B

لغو کامپایل (زمانی که برنامه در حال کاپایل است، قابل استفاده است): CTRL+Break

کامپیل و اجرا در حالت عادی: ترکیب CTRL+F5

کامپیل و اجرا در حالت Debug: ترکیب F5

  • انتخاب یک عنصر تنها با یک کلیک

برای انتخاب یک عنصر تنها کافی است کلید CTRL را پایین نگه داشته و بر روی آن کلیک کنید.

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





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

25 10 2008

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

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

این که ما نرم افزار نوشته شده رو به صورت بسته ارائه کنیم نیز یک طرف قضیه هست. این مدل ارائه نشان از قدرت کاری شرکت هست که می تونه تمامی قسمت های کار رو تا اماده سازی و نهایی کردن محصول به درستی انجام بده. زیاد وارد این بحث نمی شم ولی این رو هم بدونید که چنین چیزی در ایران رسم نیست. بسته های نرم افزاری که مشکل دارند و نرم افزارهای سفارشی به صورت حضوری نصب و تنظیم می شوند.

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

* اولین و مهمترین و شاید بزرگترین دلیل را، راحتی در هنگام تولید بدون صرف هزینه اضافه دانست. راحتی به این معنی که پایگاه داده SQL Server با داشتن مجموعه ابزارهای برنامه نویسی قدرتمند بسیاری از کارها را راحت کرده است. غافل از اینکه در مرحله فروش دچار مشکل خواهد شد.

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

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

معرفی تعدادی پایگاه داده جایگزین
در ادامه می خواهم شما را با چند گزینه دیگر از پایگاه داده ها اشنا کنم و مواردی را که می توان با این پایگاه دادها انجام داد. همچنین چه نوع نرم افزارهایی را می توان با انها توسعه داد. این پایگاه دادها با توجه به معیارهای ایرانی انتخاب کرده ام.

SQL Server  و Oracle و MySQL
من اینگونه در نظر می گیرم شما خواننده محترم با این پایگاه داده آشنا هستید و موارد استفاده را هم می دانید.

Firebird
این پایگاه داده با داشتن موتوری قدرتمند از اکثر استانداردهای SQL پشتیبانی می کند.
مزیت های مهم: امکان استفاده از این پایگاه به عنوان یک پایگاه داده توکار و یا به عنوان یک سرور موجود هست. همچنین امکان استفاده از این پایگاه داده در چند سیستم عامل وجود دارد.
عیب مهم: تنها مورد ذکر شده عدم پشتبانی از fulltext search هست. ابزارهای مدیریتی گرافیکی توسط خود تولید کننده ارائه نمی شود و باید از ابزارهای سایر شرکتها استفاده شود.

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

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

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

دسته بندی نرم افزارها و پایگاه داده های قایل استفاده
در ادامه به بررسی که نرم افزارهای تولیدی در ایران می پردازم و پایگاه داده ای مناسب برای آنها

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

دسته دوم: نرم افزار های اداری/دفتری
داده های دریافتی این گونه نرم افزارهای با توجه به نوع کار در حد متوسطی قرار دارد.
نرم افزار باید بتواند به صورت شبکه در چند سیستم نصب شده و کار کند.
در چنین مواردی انتخاب های فایل طرح Firebird و PostgreSQL و Blackfish و SQL Server و MySQL هستند.
همانطور که مشخص هست در این دسته گزینه بیشتری برای انتخاب وجود دارد.
بهترین گزینه برای نرم افزارهایی که دارای کاربران شبکه محدود هستند BlackFish و برای تعداد کاربران بیشتر  SQL Server است.

دسته سوم: نرم افزارهای تک نفره
داده های دریافتی این نرم افزارها در حد محدودی قرار دارد. نیازی نیست که نرم افزار به صورت تحت شبکه نیز کار کند.
همانند دسته دوم پایگاه داده های قابل انتخاب زیاد هستند که باید به انها موارد SQLite و Access رو هم اضافه کرد.
اگر وجود امکانات کامل برای پایگاه داده ضروری باشد BlackFish گزینه مناسبی هست در غیر اینصورت SQLlite می تواند گزینه خوبی باشد.

دسته چهار: نرم افزارهای utility یا کاربردی
داده های دریافتی بسیار محدود بوده و ممکن است نیازی به دریافت و دخیره اطلاعات موجود نباشد.
تنها گزینه های قابل استفاده SQLite و Access هستند.

لطفا پایگاه داده مورد استفاده خودتون رو به من در بخش نظر ها اعلام کنید.
پایگاه داده خوبی داشته باشد!

* مطالب مرتبط:
SQLite پایگاه داده ای سبک و چابک





ویژگیهای جدید در CSS 3 بخش دوم

15 10 2008

این مقاله ادامه مقاله بخش اول هست که به بررسی ویژگی های جدید در CSS 3 می پردازیم.

تعدادی از ویژگی ها با صورت لیست وار

بخش اول

  • Selector ها – انتخاب کننده های عناصر
  • text-shadow – سایه در زیر متن
  • border-image – تصاویر برای حاشیه عناصر
  • border-radius – خمیده کردن حاشیه عناصر
  • box-shadow – سایه در زیر یک کادر
  • text-overflow – از محدوده خارج شدن متن
  • word-wrap – خط شکن در متون طولانی
  • resize – قابلیت تغییر اندازه کادر ها توسط کاربر
  • outline – خطوط پیرامون اشیا

بخش دوم

  • @page – انتخابگرهای صفحه
  • multiple backgrounds – چندین زمینه برای اشیا
  • background-origin و background-clip – تعیین محدوده و موقعیت به صورت پیشرفته برای پس زمینه ها
  • Opacity – تعیین شفافیت یا آلفای یک شیئ
  • رنگهای HSL و HSLA و RGBA
  • Multi-column – چند سطونی کردن متون
  • Web fonts – فونت های سفارشی برای سایت
  • Speech – برای تعیین نحوه خواندن متون توسط نرم افزار

توضیح پیرامون ویژگی های فوق در بخش دوم

انتخابگر @page

ویژگی که در CSS 3 تغییر زیادی کرده انتخابگر page@ هست. این نوع انتخابگر ها با نام media شناخته می شن و با کارکتر @ مشخص میشوند. چون این موارد هنوز تکمیل نشده است و احتمال تغییر در اونها خیلی زیاده در موردشون توضیح نمی دم اما برای اطلاعات بیشتر می تونید به اینجا مراجعه کنید: http://www.w3.org/TR/css3-mediaqueries

انتخابگر مورد نظر من که خیلی جالب هست page@ هست. این انتخابگر یا selector این قدرت رو میده که به صفحه به صورت تکه تکه استیل تعیین کنید. نحوه کار این ویژگی اینطور هست که صفحه را به چندین قسمت تقسیم کرده و امکان تنظیم ویژگی های css رو به آنها میده. در تصویر زیر می بینید که صفحه به چندین قیمت تقسیم شده و سه قسمت از راست پر رنگ نشان داده شده اند:

CSS3 Paged Media Margin Boxes

CSS3 Paged Media Margin Boxes

به این کد توجه کنید

@page {
size: 8.5in 11in;
margin: 10%;

@right-top {
content: «Hamlet»;
}
@right-middle {
content: «Page » counter(page);
}
@right-bottom {
font-size: 14pt;
}
}

در این کد ابتدا صفحه به عنوان یک مدیا در نظر گرفته میشه و سپس طول 8.5 اینچ و ارتفاع 11 اینج و مقدار margin 10 درصد از کل صفحه داده میشه. در انتخابگر بعدی قسمت بالا راست right-top از صفحه انتخاب شده و متن اون Hamlet قرار داده میشه. همونطور که میبینید امکان تعریف تو در توی انتخابگر های مدیا وجود داره. بخش های بعدی هم right-middle برای سمت راست وسط و right-bottom برای راست پایین هستند.

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

top-left-corner, top-left, top-center, top-right, top-right-corner, left-top, left-middle, left-bottom, right-top, right-middle, right-bottom, bottom-left-corner, bottom-left, bottom-center, bottom-right, bottom-right-corner

اطلاعات بیشتر: http://www.w3.org/TR/css3-page

multiple backgrounds

با استفاده از این ویژگی این امکان فراهم می شود که به جای تعیین یک پس زمینه چندین پس زمینه جداگانه تنظیم کنید.

امکان تنظیم چندین پس زمینه برای من یک آرزو بود تا زمانی که این ویژگی رو تو CSS 3 دیدم. تصور اینکه چه قدرتی این ویژگی به شما خواهد دور از انتظار هست. پس برای اینکه گوشه ای از قدرت این ویژگی رو ببینید به تصویر زیر نگاه کنید:

Multiple backgrounds

Multiple backgrounds


در آدرس: http://www.css3.info/wp-content/uploads/2007/09/multiple-backgrounds-example.html

البته در حال حاظر فقط مرورگر safari امکان نمایش چندین پس زمینه را دارد.

تو این صفحه فقط به یک تگ div برای تنظیم زمینه پس زمینه داده شده است! در ضمن از هیچ تگ اضافه هم استفاده نشده است.

background: url(body-top.gif) top left no-repeat,
url(banner_fresco.jpg)  top 11px no-repeat,
url(body-bottom.gif) bottom left no-repeat,
url(body-middle.gif) left repeat-y;

اطلاعات بیشتر: http://www.w3.org/TR/css3-background/#the-background-image

background-origin

این ویژگی موقعیت اعمال ویژگی موقعیت یا background-position را تحت تاثیر قرار میده و موقعیت کلی را تغییر می دهد.

این ویژگی سه مقدار می گیرد که border، padding و content هستند. در صورت انتخاب padding موقعیت یا position با توجه گوشه بالایی سمت چپ ویژگی padding شیئ در نظر گرفته خواهد شد. در صورت انتخاب border موقعیت با توجه به گوشه بالایی سمت چپ ویژگی border شیئ در نظر گرفته خواهد شد و در صورت انتخاب content موقعیت با توجه به گوشه بالایی سمت چپ محتویات یا متن داخل شئ در نظر گرفته خواهد شد.

برای دیدن نمونه به تصویر بعدی نگاه کنید.

background-clip

این ویزگی تعیین می کند اعمال ویژگیهای پس زمینه در قسمت حاشیه به چه صورت باشد. این ویژگی دو مقدار می گیرد که اولی border هست و تایین می کند اعمال پس زمینه فقط تا border ادامه داشته باشد. مقدار دوم padding هست که مشخص می کند که اعمال پس زمینه تا ناحیه Padding باشد.

ویژگی های background-clip و background-origin در تصویر زیر مشخص شده اند.

در تصویر زیر در سطر اول برای background-clip مقدار border و در سطر دوم مقدار padding انتخاب شده است.
همچنین برای ویژگی background-clip ردیف اول اعمال مقدار border ردیف دوم padding و ردیف سوم content را نشان می دهد.

background origin and clip

background origin and clip

اطلاعات بیشتر: http://www.w3.org/TR/2005/WD-css3-background-20050216

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

رنگهای HSL و HSLA و RGBA
امکان انتخاب رنگ ها را طیف رنگهای مختلف میدهد. در گذشته باید زنگها حتما در استاندارد RGB رنگ انتخاب میشد.

برای مطالعه پیرامون Opacity و رنگها به این مقاله مراجعه کنید: A brief introduction to Opacity and RGBA

Multi-column
ویژگی جالب دیگری که اضافه شده امکان ستون بندی متون است. این ستون یندی به دو صورت قابل تعریف است؛ اولی با تعیین عرض برای هر ستون و دومی با تعریف تعداد ستون ها.
در حال حاضر این ویژگی به طور غیر رسمی توسط مرورگرها FireFox و Safari پشتیبانی می شود.

FireFox
-moz-column-width: 13em;
-moz-column-gap: 1em;
Safari
-webkit-column-width: 13em;
-webkit-column-gap: 1em;

توضیحات کامل: http://www.w3.org/TR/css3-multicol

Web fonts

امکان تغییر فونت های سایت به فونت هایی سفارشی را می دهد.

تغییر دادن فونت های سایت به فوت سفارشی ویژگی کاملا جدیدی نیست و توسط IE 5 پشتیبانی شده بود. ولی به این علت که نوع فونتی که مورد استفاده قرار می گرفت (Embedded Open Type .eot) مورد استقبال سایر مرورگر ها قرار نگرفت؛ تا الان که به صورت استاندارد درآمده است.
در حال حاظر امکان استفاده از فونت های TrueType .ttf و OpenType .otf باید توسط مرورگر ها فراهم شود. نکته ای که در اینجا مهم است لایسنس داشتن فونت ها است.
اعمال فونت های سفارشی توسط ویژگی @font-face فراهم شده است.

@font-face {
font-family: Delicious;
src: url(‹Delicious-Roman.otf›);
}

جالب است بدانید که یکی از دلایل عقب افتادن عرضه FireFox 3.1 پیاده سازی این ویژگی است.

نمونه اعمال شده: http://www.css3.info/preview/web-fonts-with-font-face
توضیحات کامل: http://www.w3.org/TR/css3-webfonts/#font-descriptions

Speech
Speech یا خواندن متون توسط نرم افزار ویزگی جدیدی در Css 3 نیست ولی دچار تغییرات زیادی شده است. این دسته از ویژگی ها امکان تعیین سرعت، کلفتی صدا، جنسیت خواننده و .. را می دهد.
این ویزگی ها این امکان را به شما می دهد که در زمانی که خسته هستید به چشمان خود استراحت دهید تا نرم افزار برای شما متون را بخواند.
در میان مرورگر ها، مرورگر Opera از چندین نسخه قیلی این ویژگی را دارا می باشد که متون را بخواند، ولی در حالت عادی این امکان در ان غیر فعال است و برای فعال کردن آن باید بسته مربوطه را دریافت و نصب نمایید.

توضیحات کامل: http://www.w3.org/TR/css3-speech





ویژگیهای جدید در CSS 3 بخش اول

5 10 2008

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

کار بر روی استاندارد CSS 3 از سال 2002 شروع شد، یعنی نزدیک به یک سال از زمانی که پرونده CSS 2.1 بسته شد. کار بر روی این استاندارد هنوز به پایان نردسیده و شاید تا یک یا دو سال آینده هم به طول بکشه ولی با این حال بسیاری از موارد این استاندارد تکمیل شده است.
نکته ای که در این وسط خیلی مهمه پشتیبانی مرورگر ها از این استاندارده. متاسفانه چون خیلی از موارد به موقع آماده نشده اند پشتیبانی کاملی توسط مرورگر های قدیمی از آنها نمی شود، پس برای آزمایش و مشاهد مواردی که در ادامه مطرح خواهد شد باید آخرین نسخه و یا حتی نسخه آزمایشی را دریافت کنید.

در حال حاظر مرورگر FireFox 3.1 نسخه آزمایشی و Opera 9.5 و Safari نسخه آزمایشی بسیاری از موارد زیر را پشتیبانی می کنند. متاسفانه IE در زمینه خیلی ضعیف عمل کرده و آخرین نسخه آن یعنی IE 8 beta 2 پشتیبانی کاملی از موارد زیر ندارد.

تعدادی از ویژگی ها با صورت لیست وار

بخش اول

  • Selector ها – انتخاب کننده های عناصر
  • text-shadow – سایه در زیر متن
  • border-image – تصاویر برای حاشیه عناصر
  • border-radius – خمیده کردن حاشیه عناصر
  • box-shadow – سایه در زیر یک کادر
  • text-overflow – از محدوده خارج شدن متن
  • word-wrap – خط شکن در متون طولانی
  • resize – قابلیت تغییر اندازه کادر ها توسط کاربر
  • outline – خطوط پیرامون اشیا

بخش دوم

  • @page – انتخابگرهای صفحه
  • multiple backgrounds – چندین زمینه برای اشیا
  • background-origin و background-clip – تعیین محدوده و موقعیت به صورت پیشرفته برای پس زمینه ها
  • Opacity – تعیین شفافیت یا آلفای یک شیئ
  • رنگهای HSL و HSLA و RGBA
  • Multi-column – چند سطونی کردن متون
  • Web fonts – فونت های سفارشی برای سایت
  • Speech – برای تعیین نحوه خواندن متون توسط نرم افزار

توضیح پیرامون ویژگی های فوق

Selector ها
یکی از مهمترین بخش های CSS انتخابگر ها هستند که برای انتخاب عناصر در صفحه مورد استفاده قرار می گیرند. برای گسترش توانایی ها، چند ویژگی جدید در نسخه 3 به CSS اضافه شده که به صورت خلاصه توضیح میدم.
انتخاب کننده [att^=val]
در این حالت عناصری انتخاب خواهد شد که مقدار ویژگی att آن با val شروع شده باشد. برای مثال

a[title^=»ho»] {background: green;}

که مشخص می کند لینک هایی که مقادیر title انها با حرف ho شروع شده باشد رنگ سبز رو به عنوان پس زمینه بدهد.

انتخاب کننده [att$=val]
در این حالت عناصری انتخاب خواهد شد که مقدار ویژگی att آن با val پیان پذیرفته باشد. برای مثال

a[title$=»t»] {background: green;}

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

انتخاب کننده [att*=val]
در این حالت عناصری انتخاب خواهد شد که در ویژگی att آن مقدار val یافت شود. برای مثال

a[title*=»ont»] {background: green;}

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

تست این موارد بر روی FireFox 3.1 و Opera 9.5 به خوبی کار کردند ولی IE 8 بدترین نمره را کسب کرد. برای تست این که مرورگر شما کدامیک از انتخاب گر ها را پشتیبانی می کنه از لینک زیر استفاده کنید: http://www.css3.info/selectors-test

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

text-shadow
برای ایجاد سایه در زیر متون مورد استفاده است. یکی دیگر از ویژگیهای جالب که با ترکیب آنها می توان سایت های جذاب را خلق کرد.

تصویر زیر را مشاهده کنید که از ترکیب چندین سایه تشکیل شده است. کد این تصویر:

multiple-shadows

نتیجه اعمال چندین سایه با استفاده از text-shadow

text-shadow:0 0 4px white, 0 -5px 4px #FFFF33, 2px -10px 6px #FFDD33, -2px -15px 11px #FF8800, 2px -25px 18px #FF2200;

توضیحات کامل: http://www.w3.org/TR/2003/CR-css3-text-20030514/#text-shadows

ادامهٔ مطلب »