Archive for 2009/09

رفع غلط های املایی سایت با Firefox

۱۳۸۸/۰۶/۲۰ ۴:۰۱ Salar https://www.blogger.com/profile/08261083424775464146 منتشر شده در تاریخ : ۱۳۸۸/۰۶/۲۰ دسته بندی : ، ، ، 0

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

در این روشی که معرفی می کنم هیچ کاری لازم نیست انجام بدید فقط کد زیر رو در نوار آدرس سایتتون وارد کنید. توجه کنید که مرورگر باید Firefox باشه (روی opera 10 امتحان کردم و جواب داد):

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0


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

Firefox Spell Checking Website

در حقیقت این کد تمام صفحه رو در حالت ویرایش قرار میده، در این صورت هست که فایرفاکس و مرورگر های جدید اقدام به یافتم غلط های املایی می کنند.

نکته: برای اینکه این غلط یابی برای فارسی درست کار کنه باید دیکشنری فارسی فایرفاکس رو نصب کنید. اینجا.

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

 

بدست آوردن سطح دسترسی Administrator در ویندوز

۱۳۸۸/۰۶/۱۶ ۰:۵۶ Salar https://www.blogger.com/profile/08261083424775464146 منتشر شده در تاریخ : ۱۳۸۸/۰۶/۱۶ دسته بندی : ، 2

VistaUAC

از ویندوز ویستا به بعد و همچنین در ویندوز 7 مدیریت UAC قوانین سخت گیرانه ای رو برای سطح دسترسی کاربر و برنامه های کاربر به منابع سیسیتم و سیستم عامل در نظر گرفته است. این قوانین شامل اجرای تمامی برنامه ها در سطح دسترسی کاربر معمولی است و به همه آنها اعمال می شود. یعنی اگر کاربر فعلی دسترسی administrator داشته باشد باز هم برنامه های اجرا شد توسط آن با سطح user معمولی اجرا خواهد شد.

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

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

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

راه حل اول- اولین و ساده ترین راه این است که از کاربر بخواهید با راست کلیک کردن بر روی برنامه شما و انتخاب Run as Administrator به برنامه این سطح دسترسی را بدهد. این راه حل مناسب و کاربر پسندی نخواهد بود.

راه حل دوم- در صورتی که از Visual Studio استفاده می کنید، دومین راه حل همراه با نسخه 2008 آن عرضه شده. این مورد بر این اساس هست که برنامه ها در صورتی که از یک manifest خاص استفاده کنند، ویندوز تشخیص خواهد داد که آن برنامه نیاز به مجوز admin دارد و این مورد توسط درخواستی از کاربر اعلام خواهد شد.

به این منظور نیاز به یک Application Manifest خواهد بود. برای افزودن آن به پروژه روی نام پروژه کلیک راست کرده و Add -> New Item رو انتخاب کنید. از این پنجره آیتم Application Manifest File رو انتخاب کنید. فایلی با نام app.manifest به پروژه اضافه خواهد شد. محتویات این فایل مانند زیر است:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>

تنها قسمت مهم برای ما requestedExecutionLevel هست که درخواست مجوز مورد نیاز رو مشخص می کنه. در ادامه آن، مقدار level نشان دهنده مجوز درخواستی است. این مقدار شامل موارد زیر است:

asInvoker: حالت پیش فرض سیستم که همان کاربر معمولی خواهد بود.

requireAdministrator: درخواست مجوز admin را مطرح می کنه. این درخواست باید برآورده بشه و برنامه حتما باید با این مجوز اجرا بشه در غیر اینصورت و درصورت عدم پذیرش کاربر برنامه اجرا نخواهد شد.

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

پس یکی از موارد requireAdministrator یا highestAvailable را با توجه به نیاز خود انتحاب کنید و فایل مذکور رو تغییر بدید. همچنین در بخش assemblyIdentity اطلاعات برنامه شما قرار دارد که تغییر آن اختیاری است.

در نهایت فایل app.manifest به این صورت خواهد بود:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="SalarBlog.AdministratorElevate.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>

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

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

ابتدا لازم است تا سطح دسترسی کاربر فعلی را بررسی کنیم:
public static bool AdministratorIsInRole()
{
return new WindowsPrincipal(WindowsIdentity.GetCurrent())
.IsInRole(WindowsBuiltInRole.Administrator);
}

در این تابع موجز دسترسی Administrator بررسی شده است. سپس با استفاده از تابع ShellExecute ویندوز و پارامترهای آن درخواست اجرا را مشخص می کنیم:
public static void Elevate()
{
ShellExecute(IntPtr.Zero, "runas",
Application.ExecutablePath + "", "", "", 1);
}

[DllImport("shell32.dll")]
private static extern void ShellExecute(IntPtr intPtr, string p, string p3, string p4, string p5, int p6);

و سرانجام کافی هست تا اینها را یکجا و در کد برنامه قرار دهید. برنامه نهایی مانند زیر خواهد بود:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Security.Principal;
using System.Runtime.InteropServices;

namespace AdminElvate
{
static class Program
{

[STAThread]
static void Main()
{
if (!AdministratorIsInRole())
{
Elevate();
return;
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

static bool AdministratorIsInRole()
{
return new WindowsPrincipal(WindowsIdentity.GetCurrent())
.IsInRole(WindowsBuiltInRole.Administrator);
}
static void Elevate()
{
ShellExecute(IntPtr.Zero, "runas",
Application.ExecutablePath + "", "", "", 1);
}

[DllImport("shell32.dll")]
private static extern void ShellExecute(IntPtr intPtr, string p, string p3, string p4, string p5, int p6);

}
}

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