با فایل .htaccess کنترل را در دست بگیرید – قسمت دوم

مهر ۱۲م, ۱۳۸۸

در ادامه بحث Authorization می‌خوام دو تا از دستوراتی را معرفی کنم که شبیه دستورات شرطی عمل می‌کنند. اولین <Files></Files> و دیگری <Directory></Directory> است. Filesبر روی فایل‌ها و Directory بر روی شاخه‌ها اعمال می‌شوند. به مثال زیر توجه کنید:

<Files *.jpg>

Order Allow,Deny

                             Allow from 123.123.123.123

</Files>

 

با این دستور، و البته با فرض اینکه IP سرور شما ۱۲۳/۱۲۳/۱۲۳/۱۲۳ باشد، شما اجازه استفاده از عکس ها را فقط به سرور خود میدهید. در این صورت اگر در سرورهای دیگر عکسی با منبع سایت شما داشته باشند، سرور شما از نمایش آن جلوگیری خواهد کرد. با این روش شما از افتادن ترافیک سایت‌های دیگر بر دوش سرور خود جلوگیری می‌کنید. یا یک مثال کاربردی‌تر اینکه

<Files *.php>

                             Order Allow,Deny

</Files>

با این کار از اجرا و نمایش تمام فایل های php جلوگیری می‌کنید. البته نکته مهمی وجود دارد و آن این است که برای دستوراتی شبیه require و include در برنامه نویسی مشکلی از نظر دسترسی پیش نخواهد آمد. اما اگر به جای PHP تمام فایل‌ها را در این ماجرا شریک کنید (توسط*.* ) ، نمی توانید فایل‌های CSS یا JS را در برنامه خود استفاده کنید. چون این فایل‌ها توسط مرورگر شناسایی شده و درخواست آنها صادر می‌شود (برخلاف php که موقع اجرا توسط آپاچی اضافه می‌شوند.)

 

Redirect 

انتقال شاخه‌ به مسیر جدید به دو حالت صورت می‌گیرد؛ شکل ساده و شکل دارای عبارت منظم. این انتقال توسط کد ۳۰۱ به مرورگر ارسال شده است. در صورتی که این کد نوشته نشود، بصورت پیش‌فرض ۳۰۲ ارسال خواهد شد. این کدها از نظر موتورهای جستجوگر بسیار مهم است و کسانی که روی سئو SEO یا Search Engine Optimization کار می‌کنند باید به این‌ها نیز توجه کنند.

Redirect 301 /olddir/oldfile.html http://example.com/newdir/newfile.html

RedirectMatch 301 /oldDir/(.*) /newDir/$1

 

۳۰۱ – Moved Permanently یا انتقال دائمی. در صورتی که برای همیشه از مسیر جدید استفاده خواهید کرد، حتما” توسط کد ۳۰۱ صفحه را ارسال کنید. با این کار موتورهای جستجو آدرس جدید را بجای آدرس قبلی قرار خواهند داد.

۳۰۷ – Temporary Redirect یا انتقال موقت.
مدیریت خطاها (Error Handling)

لیست کاملی از خطاهایی که میتوانید به جای نمایش آنها، این صفحات را برای خود سفارشی کنید:

ErrorDocument 400 /errors/file.php?error=400
ErrorDocument 401 /errors/file.php?error=401
ErrorDocument 402 /errors/file.php?error=402
ErrorDocument 403 /errors/file.php?error=403
ErrorDocument 404 /errors/index.php?error=404
ErrorDocument 405 /errors/index.php?error=405
ErrorDocument 406 /errors/index.php?error=406
ErrorDocument 407 /errors/index.php?error=407
ErrorDocument 408 /errors/index.php?error=408
ErrorDocument 409 /errors/index.php?error=409
ErrorDocument 410 /errors/index.php?error=410
ErrorDocument 411 /errors/index.php?error=411
ErrorDocument 412 /errors/index.php?error=412
ErrorDocument 413 /errors/index.php?error=413
ErrorDocument 414 /errors/index.php?error=414
ErrorDocument 415 /errors/index.php?error=415
ErrorDocument 416 /errors/index.php?error=416
ErrorDocument 417 /errors/index.php?error=417
ErrorDocument 500 /errors/index.php?error=500
ErrorDocument 501 /errors/index.php?error=501
ErrorDocument 502 /errors/index.php?error=502
ErrorDocument 503 /errors/index.php?error=503
ErrorDocument 504 /errors/index.php?error=504
ErrorDocument 505 /errors/index.php?error=505

در مواقع رخ دادن هرکدام از این خطاها، صفحه به آدرس مورد نظر ارجاع داده خواهد شد. در ضمن میتوانید یک پیغام را نمایش دهید:

ErrorDocument 404 “<b>Page Not Found</b>”

 

تنظیمات PHP (php.ini) 

فلگ‌ها توسط php_flag و مقادیر توسط php_value کنترل می‌شوند.نمونه‌هایی را در زیر می‌بینید:

php_flag asp_tags off
php_flag register_globals off
php_flag session.auto_start on
php_flag display_errors off
php_value upload_max_filesize 8M
php_value session.cookie_lifetime 3600

 

گروه دستورات بعدی توسط ماژول mod_mime اجرا می‌شوند و فایل مبدأ آنها mod_mime.c است. این ماژول امکاناتی را برای مشخص کردن تایپ فایل‌ها و مشخصات آنها فراهم می‌آورد.(در واقع محتوای Header هدر صفحه کنترل می‌شود.)

AddDefaultCharset utf-8

AddCharset windows-1256 .html

AddLanguage fa .php

اگر واقعا” از نوشتن متاتگ برای ست کردن charset خسته شده‌اید، خط اول بسیار به کار شما می‌آید. AddCharset نیز charset مورد نظر را فقط برای پسوند خاصی ست می‌کند. AddLanguage نیز زبان فارسی (یا مخفف آن fa) را به Content-Language در Header صفحات پی اچ پی اضافه میکند.

AddEncoding x-gzip .gz
AddEncoding x-compress .z

این دستور نیز برای ست کردن Content-Encoding هدر بکار می‌رود.

 

AddType image/gif .photo

AddType application/x-httpd-php .asp .jsp

AddType text/css .mycssext

خب این قسمت خیلی جذاب و کاربردی است. شما توسط AddType یک تایپ جدید یا پسوند جدید تعریف می‌کنید. با این کار هکرها به راحتی متوجه php بودن کد شما نمی‌شوند. (البته اگر مسائل دیگری مثل X-Powered-By را درنظر گرفته باشید!!) برای مثال من در خط اول، پسوندهای photo را عکس‌های gif معرفی کرده‌ام. خط دوم، خواسته‌ام که تمام فایل‌هایی با پسوند asp یا jsp نیز از نوع  phpشناخته شوند و توسط مترجم php اجرا شوند. در نهایت گفته‌ام که پسوندهایی mycssext فایل‌های مربوط به css هستند. بعنوان مثال شاید کاربرد این دستور را در سایت بانک ملت (فایل‌هایی با پسوند bm) دیده باشید!

<Location /images>

    ForceType image/gif

</Location>

درصورتی که فایل‌های شاخه images توسط مرورگر درخواست شوند، جدای از پسوند آنها، مرورگر مجبور به پردازش آنها بعنوان عکس با پسوند gif خواهد بود.

Posted in دسته‌بندی نشده‌ها | Comments (۲)

با فایل .htaccess کنترل را در دست بگیرید – قسمت اول

مهر ۱۱م, ۱۳۸۸

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

بدلیل نیاز طراحان و برنامه‌نویسان وب برای تغییر و کنترل وب سرور آپاچی بسته به نیاز خود و با هدف ایجاد کنترل دسترسی بر روی شاخه‌های مختلف فایل‌های .htaccess (یا hypertext access یا distributed configuration files) بوجود آمدند. چون در سیستم عامل های Unix فایل‌هایی که با نقطه (dot) شروع می‌شوند مخفی هستند، نام این فایل با نقطه شروع می‌شود و بهمین دلیل این فایل در سیستم عامل ویندوز بطور معمولی قابل ایجاد نیست. اگر از سیستم عامل ویندوز استفاده میکنید، برای ساختن این فایل میتوانید از این اسکریپت php کمک بگیرید:


<?php
$fp=fopen('.htaccess','w+');
fclose($fp);
?>

این فایل در هر شاخه می‌تواند ایجاد شود و قوانین آن بر روی شاخه جاری و تمام زیرشاخه‌ها اعمال می‌شود. از عمده‌ترین موارد استفاده فایل .htaccess میتوان به تصدیق و اجازه (Authentication  و Authorization )، ترجمه‌ی URLها و مدیریت خطاها اشاره کردکه در زیر به شرح آنها خواهم پرداخت.

 

تصدیق کاربر (Authentication)

امکانی که به شخصی‌سازی صفحات وب کمک میکند.

AuthType Basic

AuthUserFile /usr/username/.htpasswd

AuthName “My Secret Area”

Require valid-user

خط اول، توع تصدیق را Basic معرفی میکند. دومین خط مسیر کامل (و نه نسبی) فایل حاوی نام کاربری و رمزعبور است. لیست نام‌های کاربری و رمزهای عبور در این فایل که با نام .hpasswd مشخص میشود بصورت زیر است:

username1:password1

username2:apr1.KB4i…ykeDUewbZvNgqrlXnecld0

درمورد دومین خط رمزعبور باید بگم که شما میتونید رمزعبور خودتون رو بصورت کد شده توسط الگوریتم MD5 بگذارید. سایت‌هایی هستند که این کار رو انجام میدهند مثل این.

سومین خط این کد، توضیحی است که به کاربر درمورد درخواست رمزعبور نمایش داده می‌شود.

و بالاخره خط چهارم این امکان را فعال می‌کند.

 

اجازه‌های دسترسی (Authorization)

که با دو دستور Allow یا Deny و توسط ماژول mod_access صورت می‌گیرد. این اجازه‌ها می‌توانند بر روی نام میزبان، IP کاربر، نوع درخواست(یا Environment Variables) صورت گیرند. به مثال توجه کنید:

Allow from apache.org

Deny from 10.1.2.3

Deny from 10.1

Deny from 10.1.0.0/255.255.0.0

خط اول فقط به میزبان apache.org اجازه استفاده می‌دهد. خطوط بعدی اجازه را روی IP تعریف میکند.

SetEnvIf User-Agent Chrome let_me_in

Order Deny,Allow

Deny from all

Allow from env=let_me_in

این چهار خط بطور کلی دسترسی را برای همه کاربران می بندد! البته کاربرانی که با مرورگر Chrome وارد شده باشند، اجازه ورود دارند! جالب است، نه؟! )برای اینترنت اکسپلورر: MSIE، موزیلا فایرفاکس: Firefox و اپرا:Opera  تایپ کنید)

در مورد Order، همین طور که از نامش مشخص است، اولویت دستورهای Deny و Allow را مشخص میکند. شاید در این دستور نیازی به آن نباشد ولی درصورت نوشتن کدهای زیاد برای دسترسی های مختلف، ترتیب اولویت‌ها نیاز به مشخص شدن دارند.

Order Allow,Deny

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

Order Deny,Allow

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

SetEnvIf User-Agent MSIE let_me_in

Order Allow,Deny

Allow from env=let_me_in

و جدول خلاصه:

         نتیجه در Allow,Deny

نتیجه در Deny,Allow

مطابقت 

پذیرفته می‌شود

پذیرفته می‌شود

فقط با Allow

رد می‌شود

رد می‌شود

فقط با Deny 

رد می‌شود

پذیرفته می‌شود

بدون مطابقت 

رد می‌شود

پذیرفته می‌شود

با هر دو 

نکته ۱: تمام درخواست‌هایی که توسط Deny رد میشوند، با خطای ۴۰۳ (Forbidden) بازگردانده می‌شوند.

نکته ۲: چنین شرط هایی که مرورگر کاربر را چک میکنند، امنیت ضعیفی دارند چون UserAgent یا هدر مشخص کننده مرورگر کاربر، قابل تغییر است!

Posted in دسته‌بندی نشده‌ها | Comments (۰)

CUL.ir سایتی برای کاهش طول پیوندها با ایده‌های نو

مهر ۱۰م, ۱۳۸۸

بعد از بوجود آمدن سرویس‌هایی مینی بلاگ شبیه توییر و نمونه‌ی فارسی آن وی ویو بعلت محدودیت در نوشتن مطالب مخصوصا” انتشار پیوندها از این طریق، نیاز جدیدی بوجود آمد  براین اساس که لینک‌هایی با طول زیاد قابل انتشار نبودند و انتشار آنها با مشکل مواجه میشد. البته قبل از آنها نیز، بخاطر سپردن و ساده سازی لینک های طولانی چنین نیازی را بوجود آورده بود اما این سرویس‌ها چنین نیازی را پررنگ تر کردند. طبیعی است که چنین سایت‌هایی بسته به محبوبیت خود دارای عمر مفیدی هستند چون این سایت‌ها از الگوریتم‌هایی جهت ساده سازی لینک با کمترین حروف ممکن استفاده می‌کنند و چون تعداد کلمات و عبارات کوتاه (تا حدی که کاربران را راضی نگه دارد) بی نهایت نیست، با افزایش تعداد لینک‌های ثبت شده، در نهایت کارایی خود را از دست می‌دهند و ناچار جای خود را به رقبای خود واگذار میکنند.

سایت cul.ir به همین منظور ایجاد و مورد استفاده قرار گرفته است. البته خدماتی که این سایت به کاربران خود می‌دهد، دقیقا” شبیه رقبای خود نیست و ایده‌‌ و نوآوری‌ را همراه داشته است که به آنها اشاره می‌کنم.

جالب‌ترین امکانی که سایت cul.ir به شما میدهد این است که شما در هر لحظه و در هر صفحه‌ای از وب که باشید، قادرید همان آدرس جاری را در سایت cul.ir ثبت و لینک کوتاه شده آن را دریافت کنید. بدین صورت که بعنوان مثال من در آدرس:

http://www.xn--mgbx7cghb83g.com/1388/05/%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87%E2%80%8C%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9/

هستم. برای کوتاه کردن این لینک، کافی است در نوار آدرس مرورگر به اول این آدرس، آدرس سایت cul.ir را اضافه کنید که چیزی شبیه این میشود:

Cul.ir/ http://www.xn--mgbx7cghb83g.com/1388/05/%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87%E2%80%8C%DA%AF%DB%8C%D8%B1%DB%8C-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9/

بعد از وارد شدن به این آدرس، لینک کوتاه شده خود را دریافت کنید. :)

http://cul.ir/8f

Posted in دسته‌بندی نشده‌ها | Comments (۰)

اندازه‌گیری زمان اجرای توابع جاوا اسکریپت

مرداد ۲۳م, ۱۳۸۸

بعضی اوقات پیش اومده که ما یک تابع یا کلا” انجام یک کاری توسط جاوا اسکریپت رو به چندین حالت مختلف برنامه نویسی میتونیم بنویسیم یا انجام بدیم. برای سایت های کوچک و سایتی که استفاده خیلی کمی از جاوا اسکریپت استفاده میکنند شاید مورد مهمی به نظر نیاید اما برای سایت های وب ۲ و سایت هایی که استفادی زیادی از تکنولوژی های جدید جاوا اسکریپت مثل آژاکس (Ajax) میکنند در نظر گرفتن زمان اجرا میتواند عامل بسیار مهمی باشد. البته باید در نظر داشت که کاربران امروزه از تب ها برای استفاده از سایت های مختلف اسفاده میکنند نه از پنجره های متعدد. و این عامل را حتما” باید در نظر داشت که وقتی شما موتور یک مرورگر را مثلا” برای اجرای جاوا اسکریپت در اختیار میگیرید، مسلما” برای تب های دیگر درصد کمتری اختصاص می یابد. بنابراین درصورتی که سایت شما کدهای سنگینی داشته باشد، علاوه بر سایت شما، باعث کند شدن مرورگر هم شده و کاربر را بشدت ناراضی میکند.
و این ها دلایلی است که باعث میشود که زمان اجرای توابع جاوا اسکریپت برای ما اهمیت پیدا کند.
در فایرباگ (Firebug) در قسمت Console تبی با نام Profile وجود دارد که این کار را انجام میدهد! برای مثال شما تابعی نوشته‌اید و میخواهید زمان اجرای آن را اندازه گیری کنید. برای این کار کافیست ابتدا یک بار دکمه Profile را بزنید و سپس آن تابع را اجرا کنید. حال دوباره دکمه Profile را بزنید تا زمان اجرای آن را با تمام جزئیات ببینید.
اگر قصد دارید چندین تابع را با هم مقایسه کنید، تمام توابع را بعد از زدن دکمه Profile اجرا کنید و اگر میخواهید کل اسکریپت(script) های سایت را بررسی کنید، بعد از زدن دکمه Profile صفحه را رفرش کنید و دوباره Profile را بزنید.
برای مثال به عکس زیر توجه کنید.


من برای یک درخواست Ajax و اجرای یک تابع بعد از آن، کدی نوشتم (البته با استفاده از کتابخانه jQuery) و آنرا اجرا کردم که نتیجه آنرا میبینید.
توابعی که نام آنها بصورت (?)() است، توابع داخلی هستند که نام خاصی ندارند. برای مثال:


(function(){
//	Do something;
})();

ستون Calls تعداد دفعات اجرای هرکدام از توابع در مدت زمانی است که شما Profile را نگه میدارید. برای مثال تابع success یکبار اجرا شده است.
ستون Percentage درصد زمان سپری شده نسبت به کل توابع مورد بررسی قرار گرفته برای این تابع را نمایش میدهد.
ستون Own Time مدت زمان اختصاصی هر تابع را نمایش میدهد. این زمان شامل مدت زمان سپری شده برای توابعی که از داخل این تابع فراخوانی شده اند، نمی باشد.
ستون Time زمان کل هر تابع، با در نظر گرفتن تمام توابع فراخوانی شده از داخل آن میباشد.
ستون های Avg,Minو Max هم بترتیب میانگین، حداقل و حداکثر زمانها را برای هر تابع نمایش می دهد.
در نهایت هم File، لینکی به آدرس فایلی که این تابع در آن قرار دارد برای دسترسی سریع تر برقرار کرده است.

Tags: , , , ,
Posted in Mozilla FireFox, javascript, مرتبط با وب 2 | Comments (۳)

خطای ۴۰۴ و مدیریت آن

تیر ۲۷م, ۱۳۸۸

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

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

یک کاری که میشد انجام بدیم، اینکه سر هر جایی که فیلد آدرس عکس رو از پایگاه داده میخوندیم، شرط بذاریم ولی خیـــــلی بود!

پس دنبال راه بهتری که استفاده از فایل .htaccess بود،رفتیم.

به این صورت که اگه فایل .htaccess رو با محتوای زیر برای مثال در شاخه Folder قرار بدین، آن شاخه تمام زیر شاخه های آن مشمول این قانون میشوند.

پیدا نشدن فایل درخواستی مرورگر باعث میشه که سرور خطای ۴۰۴ رو برگرداند که ما این خطا رو میگیریم و redirect میکنیم به سمت عکس (یا بطور کلی صفحه)مورد نظر.

ErrorDocument 404 /notFound.htm

البته جز خطای ۴۰۴، بقیه خطاها هم قابل مدیریت شدن هستند. اطلاعات بیشتر

Tags: , ,
Posted in تجربه ها | Comments (۰)

اعداد بزرگ در php 32 بیتی

تیر ۱۳م, ۱۳۸۸

امروز نیاز به این داشتم که چک کنه یک عدد ۱۷ رقمی عدد هست یه نه(مثلا” رشته نباشه). قبلا” به این صورت استفاده میکردم:


<?php
echo (double)$_GET['number'];
?>

اما خب این برای اعداد کمتر از ۱۰ رقمی هست.

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


<?php
echo bcadd($_GET['number'] , 0 );
?>

اگه در برنامه ای نیاز به محاسبات اعداد بزرگ داشتید میتونید به این جا مراجعه کنید و توضیح php رو راجع به آن بخونید.

Tags: , ,
Posted in php | Comments (۰)

Browsers CSS Hack

اردیبهشت ۳۱م, ۱۳۸۸

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


/***** Selector Hacks ******/

/* IE 6 and below */
* html #uno  { color: red }

/* IE 7 and below */
*:first-child+html #dos { color: red }

/* IE 7 and modern browsers */
html > body #tres { color: red }

/* Modern browsers (not IE 7) */
html>/**/body #cuatro { color: red }

/* Opera 9.27 and below */
html:first-child #cinco { color: red }

/* Safari */
html[xmlns*=""] body:last-child #seis { color: red }

/*safari 3+, chrome 1+, opera9+, ff 3.5+ */
body:nth-of-type(1) #siete { color: red }

/* safari 3+, chrome 1+, opera9+, ff 3.5+ */
body:first-of-type #ocho {  color: red }

/* saf3, chrome1+ */
@media screen and (-webkit-min-device-pixel-ratio:0) {

#diez  { background: #FFDECE; border: 2px solid #ff0000  }
}

/***** Attribute Hacks ******/

/* ie6 and below */
#once { _color:blue }

/* ie7 and below */
#doce { *color: blue } /* or #color:blue */
/* 'Modern Browsers' includes IE8, whether you agree or not.. :) */

Tags: , , , , , ,
Posted in CSS, Damn ie, Mozilla FireFox | Comments (۱)

گیفت سنتر

اردیبهشت ۱۰م, ۱۳۸۸

گیفت سنتر (فروشگاه اینترنتی) در دومین جشنواره وب ایران کاندید شده است.

لینک خبر » http://www.webna.ir/news/?id=-703910829

Posted in دسته‌بندی نشده‌ها | Comments (۱)

GWT (Google Web Toolkit)

اردیبهشت ۴م, ۱۳۸۸

برگرفته از knol.google.com

چکیده فارسی

ماموریت GWT بهبود ریشه ای کیفیت appهای تحت وب, با قادر ساختن توسعه گرها به استفاده از ابزارهای فعلی جاوا در تولید appهای Ajax با کیفیت بالا برای تمام مرورگرهای مدرن است.GWT گام بزرگی جهت کم کردن فاصله appهای وب با appهای ویندوز است. GWT انتخاب مناسبی برای تولید Enterprise application ی تحت اینترانت و اینترنت است.

کلمات کلیدی GWT – Google Web Toolkit – Ajax Java Framework – Google Ajax Compiler

متن کامل

مقدمه

از اوایل سال ۲۰۰۵, که Ajax توسط یک معمار اطلاعات معرفی شد تا بحال تکنولوژی ها و ابزارهای زیادی مبتنی بر آن ارائه شده است و جالب است که پس از گذشت ۲۰سال, برنامه نویس های Ajax با مشکلاتی دست و پنجه نرم می کنند که برنامه نویسهای آن زمان در برنامه های TSR تحت DOS با آن روبرو بودند. البته خیلی از این مشکلات توسط framework ها مختلفی که برای Ajax ارائه شده است , برطرف شده است. مثلا در ATLAS که مایکروسافت ارئه کرده است, برنامه نویسی Ajax بسیار ساده شده است ولی جالب است که خود مایکروسافت تمایل زیادی به استفاده از آن ندارد! مایکروسافت در واقع به همان اندازه که کار را ساده کرده است, از کیفیت و کارایی آن نیز کاسته است به نحوی که برنامه نویسها در حین کار با Atlas بزودی متوجه می شوند که اساسا خیلی از کارها را با Atlas نمی توانند انجام بدهند و در مواردی که انجام می شود سرعت و قابلیت اطمینان آن رضایتبخش نیست. از بین تمام پیاده سازیهایی که از Ajax شده شاید بتوان Gmail و Google Map را جز بهترین به حساب آورد, به نحوی که شرکت های معظمی مانند یاهو و مایکروسافت هنوز نتوانسته اند محصولات قابل رقابتی با آنها ارائه کنند.

در اقدامی غیر منتظره در ماه می ۲۰۰۶, گوگل اقدام به ارائه frameworkی برای تولید appهای Ajax, مبتنی بر تجربه موفق gamil و google map نمود.همان گونه که از گوگل انتظار می رود, GWT کاری بزرگ , باکیفیت و سرشار از ایده های نو است, که انتظار می رود تحول بزرگی را در تولید نرم افزار ایجاد کند و در بسیاری از موارد, انتخاب بهتری از appهای معمولی ویندوز(rich client) و یا وب باشد.

GWT

Google web toolkit یک framework سورس باز جاوا است که به شما امکان می دهد که از تکنولوژهایی که تولید appهای Ajax را دشوار و مستعد باگ می کنند, رهایی یابید. با GWT می توانید appهای java را با ابزارهای دلخواه java توسعه و دیباگ کنید. زمانی که کار شما آماده ارائه به تولید شد, کامپایلر GWT آن را به javascript و html ی که با انواع مرورگرها سازگاری دارد, ترجمه می کند.

تفاوت GWT با frameworkهای دیگر این است که شما کد سمت مرورگر را بجای javascript با java می نویسید. و این به این معنی است که شما از منابع و ابزارهای بسیار زیادی که هم اکنون در java موجود است, در طرف مرورگر(client side) استفاده کنید. همچنین شما می توانید از مزایای OOP مانند encapsulation و ارث بری در طرف مرور گر بهره مند شوید و همچنین می توانید کد طرف مرورگر را به صورت واقعی دیباگ کنید. هسته GWT یک کامپایلر java به javascript است که کد جاوا اسکریپت سازگار با مرورگرهای Internet Explorer, Firefox, Mozilla, Safari و Opera را تولید می کند. به همراه GWT یک کتابخانه از کنترلهای متدوال مانند منو, پنل, کلید, درخت و …. عرضه شده است.

ساختار GWT

GWT ابزارهای جامعی را درخور چالشهایی که برای تولید rich internet application وجود دارد, گرد هم آورده است.

Java to js compiler

در طرف مرورگر کدهای جاوا را به جاوا اسکریپت تبدیل می کند.

JSNI

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

JRE Emulation

یک زیر مجموعه از Java runtime library که برای برنامه نویسی سمت Client استفاده می شود.

Widgets and Panels

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

I18N

چند تکنیک برای بین المللی کردن app و تنظمیات مرتبط با آن ارائه می کند.

RPC

پیاده سازی گوگل از remote procedure call برای ارتباط برقرار کردن کدهای client با کدهای سمت سرور.

XML Parser

با توجه با اهمیت و گسترش روز افزون XML, GWT کلاسهایی را برای کار با آن فراهم آورده است.

Managing the browser history

یکی از اشکالات موجهی که به rich internet application ها گرفته می شود این است که آنها کلید برگشت مرورگر(back button) را نقض می کنند. این از آنجا ناشی می شود که وقتی شما با جاوااسکریپت محتوای صفحه را به صورت داینامیک عوض می کنید, کاربر انتظار دارد که با زدن کلید برگشت به حالت قبل بازگردد, ولی این اتفاق می افتد چونکه مرورگر متوجه تغییرات داینامیک شما نمی شود. GWT این مشکل را برطرف نموده است.

JUnit Integration

همیشه نوشتن کدهایی برای تست برنامه به صورت اتوماتیک, تکنیک خوبی محسوب می شود. در حال حاضر frameworkهای متعددی سالهاست که این پروسه را ساده تر کرده اند, JUnit یکی از بهترین آنها برای توسعه گرهای جاوا است. GWT بجای نوشتن این framework از ابتدا, از JUint پشتیبانی می کند.

مزایا

زمان توسعه

GWT با فراهم آوردن امکان استفاده از جاوا در سمت کلاینت و سرور, امکان دیباگ واقعی هر دو طرف, استفاده از OOP در سمت UI , بعهده گرفته سازگار بودن کد تولید شده با انواع مرورگرها, فراهم آوردن امکان استفاده از ابزارها و frameworkهای موجود جاوا, صرفه جویی بسیار زیادی را در زمان توسعه و پشتیبانی appهای Ajax به همراه دارد.

سرعت و کیفیت اجرا

appهای GWT همیشه به اندازه appهایی javascript که با دست نوشته می شوند, سریع اجرا می شوند. تیم GWT وسواس بسیار زیادی در این زمینه به خرج داده است مثلا تمام تصاویر صفحه را در سمت سرور به یک تصویر تبدیل می کند و در سمت کلاینت فقط بایک request آن را دریافت, و به تصاویر اصلی می شکند.GWT همچنین در انتخاب اسم متغیرها و حتی فضای خالی بین کدها بهینه عمل کرده است. در نسخه اخیر GWT(1.4), برای دریافت جاوا اسکریپت و CSS ها از طرف از سرور, از متد PKZip استفاده شده است.

اندازه جاوا اسکریپت تولید شده

اندازه جاوااسکریپت تولید شده برای یک برنامه کاربردی معمولیGWT با تمام امکانات حدود ۱۰۰ کیلوبایت خواهد بود, که قابل cache شدن بوسیله مرورگر نیز می باشد, بعد از آن فقط تکه های کوچک اطلاعات هستند که رد و بدل می شوند.

پهنای باند مورد استفاده

GWT مانند appهای معمولی وب postback ندارد و فقط اطلاعات مورد نیاز هستند که رد و بدل می شوند, در مقایسه با appهای معمولی وب که حتی با تیک زدن یک checkbox کل صفحه postback می شود و دوباره load می گردد, پهنای باند و ترافیک شبکه به طور قابل توجه ای صرفه جویی می شود.

امنیت

GWT اطلاعات کمتری را در سمت کلاینت باقی می گذارد که به صورت javascript فشرده شده است و قابلیت خوانایی ندارد, در نتیجه امنیت بهتری حاصل می شود

حل مشکلات پرداخت online

GWT برای مشکلاتی که به هنگام پرداخت آنلاین پیش می آید, راه حلهای قطعی ارائه می دهد(حداقل در تئوری).

عدم وابستگی به platform

GWT مبتنی بر جاوا است و کد تولید شده توسط آن جاوااسکریپت و HTML معمولی است که باعث می شود به plateform وابسته نباشد.

سورس باز

GWT سورس باز(Open source) است که کمک زیادی به توسعه اجزاء و درک مکانیزمهای آن می کند. همچنین تجربه نشان داده است که پروژهای سورس باز به دلیل داشتن توسعه گرها یی که در تمام جهان پراکنده هستند, بهتر پیشرفت می کنند و پشتیبانی بهتری دارند.

معایب

SEO

شرکتهایی که از GWT برای پیاده سازی وب سایت ها استفاده می کنند ممکن است با این مشکل روبرو شوند که موتورهای جستجو محتوای صفحات آنها را اندیکس نمی کند. این مشکل در واقع مربوط به تمام وب سایتهای داینامیک می گردد و از آنجا ناشی می شود که وقتی محتوای صفحات بوسیله javascript تغییر می کند, آدرس آن ثابت می ماند بنابراین موتورهای جستجو شاخصی برای دسترسی به صفحه جدید را ندارند.برای این مشکل راه حل های متعددی ارائه شده است مثلا یک وب سایت موازی استاتیک با وب سایت داینامیک وجود داشته باشد, که تاحدی مشکل را برطرف نموده اند.

نتیجه گیری

GWT قدرت appهای ویندوز را به appهای وب می دهد و به شما امکان می دهد که نرم افزارهای تحت اینترانت و اینترنت غنی تر را در زمان کمتری تولید کنید. هزینه نگهداری آنها نبز به مراتب پایین تر خواهد بود. GWT نیز مانند جاوا دارای منابع فراوان به صورت وب سایت, کتاب, مقاله, ویدئو, کد آماده و ابزارهای ۳rd party مانند GWT Designer است. GWT محصول زیربنایی شرکت گوگل است در مدت کوتاهی که عرضه شده رشد قابل توجهی داشته است و انتظار می رود که platform عمده برای تولید appهای داینامیک باشد.(برای مشاهده آهنگ رشد GWT و همچنین مقایسه بین فراگیر بودن java نسبت به c#, به www.google.com/trends مراجعه کنید و عبارت gwt یا java,c# را تایپ کنید)

Tags: , , ,
Posted in Java, gwt, javascript | Comments (۰)

حذف کامنت ها

فروردین ۱۲م, ۱۳۸۸

برای حذف کامنت های جاوا اسکریپ این رو استفاده کردم. اگه میخواین بدونین واسه چی، واسه کم شدن حجم فایلjs

درواقع این رو در بخش Regular Expression در قسمت Replace برنامه Notepad++ استفاده کردم

دقت داشته باشین که g در آخر پارامتر اول تمام اتفاقات از این regExp رو برمیگردونه.
اگه نباشه فقط اولین عبارتی که پیدا میشه با پارامتر دوم replace شده و تموم!


str.replace(/(<!--(.*)-->)|(\/\*(.*)\*\/)|(\/\/(.*))/g,'');

Tags: , , , ,
Posted in javascript | Comments (۲)