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

29 آذر 1388

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

اولین ابزارهایی که در این زمینه تولید شدند الگوریتم های ساده ای داشتند که با استفاده از Reqular Expression ها کار می‌کردند و به همین دلیل مشکلاتی هم داشتند. برای مثال JSMin و Dean Packer از چلاننده(Minifier) های معروفی هستند که به همین روش کار می‌کنند. مثلا JSMin نمی‌تواند همه‌ی کاراکترهای خط جدید (line feed) را حذف کند چون ممکن است باعث بوجود آمدن باگ در برنامه شود. Dean Packer هم برای اینکه درست کار کند باید تمام دستورات اسکریپت به «;» ختم شده باشند.

این شد که توسعه دهنده ها به فکر تولید چلاننده‌هایی افتادند که بتواند مثل یک موتور اسکریپت (JavaScript Engine) اسکریپت را تفسیر نموده و به بهینه ترین نحو بچلاند. اولین چلاننده از این نسل Dojo ShrinkSafe بود که بر پایه موتور اسکریپت Rhino نوشته شده است. کمی بعد یاهو هم چلاننده ای تولید کرد با نام YUI Compressor که نسبت به سایر چلاننده‌‌های موجود از کارایی بهتری برخوردار بود و این برتری را تا مدتها حفظ کرد و هم اکنون که بیش از دو سال از انتشار نسخه‌ی اول آن می‌گذرد اکثر پروژه ها و فریم ورک های جاوااسکرپیت از این چلاننده برای چلاندن اسکریپت‌هایشان استفاده می‌کنند.

حدود یکی دو ماه پیش گوگل هم پا به عرصه رقابت گذاشت و چلاننده‌ی خودش را با نام Closure Compiler عرضه کرد. این چلاننده از تکنیک های جدیدی استفاده میکند که باعث شده نرخ فشرده سازی آن حدود 10 تا 20 درصد از YUI بیشتر باشد. از نکات قابل توجه در این چلاننده این است که قابلیت شناسایی و حذف کدهای بلااستفاده(dead code) را از درون اسکریپت دارد.

چلاننده‌ی گوگل مشابه YUI یک برنامه Java است که از خط دستور اجرا میشود ولی علاوه بر این گوگل این برنامه را به صورت اپلیکشن تحت وب و API هم ارائه کرده است.

برای مقایسه‌ی تکنیک های بکار رفته در YUI Compressor و Closure Compiler دیدن این slideshow رو توصیه می‌کنم.

مقایسه‌ی Git با Subversion

23 شهریور 1388

امروز بعد از مدتها یادم اومدم وبلاگ هم دارم. گفتم یه چیزی بنویسم تا اینجا از این وضع در بیاد.

توی شرکت داریم پروژه‌ها رو از svn به git سوئیچ می‌کنیم. دیدم بهانه‌ی خوبیه تا درباره‌ی git بنویسم.
از اونجایی که اکثر برنامه‌نویس‌ها با svn آشنایی دارن به جای نوشتن در مورد git به مقایسه‌ی git با svn می‌پردازم. اینجوری راحت‌تر می‌تونید تصمیم بگیرید که آیا نیازی به تغییر سیستم کنترل سورس فعلیتون به git هست یا نه.

این روزها سیستم‌های توزیع شده‌ی کنترل سورس (Distributed Version Control) کم کم دارن جای سیستم‌های کنترل سورس سنتی متمرکز (Centralized) مثل svn رو می‌گیرن. از جمله git یکی از این سیستم‌های کنترل سورس توزیع شده است که محبوبیت زیادی پیدا کرده.
قسمت عمده‌ای از تفاوت‌های git و svn برمی‌گرده به تفاوت مدل توزیع شده و مدل متمرکز، برای همین ابتدا این دو مدل رو توضیح میدم.
خواندن دنباله‌ی این نوشته »

آزمون آنلاین توسعه‌ی وب

26 اسفند 1387

اگر یادتون باشه حدود 2 یا 3 سال پیش سایت brainbench.com آزمون php رو رایگان کرده بود. امروز دوباره رفتم ببینم هنوز هم رایگانه یا نه.

آزمون php رایگان نبود. توی لیست آزمون های رایگانش گشتم ببینم چیزی داره که به درد ما بخوره. آزمون «مفاهیم توسعه‌ی وب» (Web Development Concepts) رو پیدا کردم. 40 تا سوال داشت با 3 دقیقه وقت برای هر سوال. واقعا سوال ها خوب طراحی شده بودند. اگر شما هم توی همین زمینه کار می‌کنید توانایی‌هاتون رو یک محک بزنید. برای رزومه هم خوبه. یک کاربرد خوب این آزمون برای کارفرماها اینه که میتونن برای استخدام نیرو از این آزمون استفاده کنند.

این هم نتیجه‌ی آزمون من:

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

راهکارهایی برای بهینه سازی سایت

6 دی 1387

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

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

در ادامه این مقاله که در واقع برگرفته از کتاب «High Performance Web Sites» هست می پردازیم به اهمیت و راهکارهای بهینه سازی سمت کاربر.
لازم به ذکر است که این کتاب نوشته‌ی Steve Souders مسئول performance در یاهو می باشد.

خواندن دنباله‌ی این نوشته »

خطای دید

23 آذر 1387

در این تصویر دو مربع A و B همرنگ هستند. اگر باور نمی‌کنید از یک colorpicker استفاده کنید (برای دیدن تصویر بزرگتر روی عکس کلیک کنید).

این تصویر در سال 1995 توسط ادوارد ادلسون پروفسورای علوم بصری منتشر شد.

نکته جالب اینجاست که حتی بعد از اینکه می‌فهمی دو مربع یک رنگ هستند باز هم باور نمی‌کنی!

در واقع ما نمی‌بینیم، مغز ما می‌بینه و پردازش میکنه و ما حاصل پردازش رو درک می‌کنیم.

آپدیت:

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

در ضمن توی این صفحه علت این خطای دید توضیح داده شده.
توی پاراگراف پایانی نوشته «این تصویر بر خلاف سایر حقه های تصویری به جای اینکه خطای سیستم بینایی رو ثابت کنه صحت عملکرد سیستم بینایی رو ثابت میکنه. سیستم بینایی نورسنج فیزیکی خوبی نیست اما هدف این نیست. وظیفه اصلیش اینه که اطلاعات تصویر رو تبدیل به اجزاء معنی دار کنه و بوسیله اونها ماهیت اشیایی رو که می‌بینه تشخیص بده»

منبع

اوبونتوی 8.10 و GPRS ایرانسل

4 آذر 1387

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

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

فقط مشکل اصلی قیمتشه که اصلا به صرفه نیست.

اوبونتوی 8.10

27 آبان 1387

بالاخره دی وی دی اوبونتوی 8.10 رو گیر آوردم و نصبش کردم.

از جمله قسمت هایی که توی اوبونتوی جدید خیلی تغییر کرده قسمت Network Manager هست. همه جور شبکه رو ساپورت میکنه. انواع بی سیم و با سیم رو داره. ولی ظاهرا dialup اونقدر قدیمی شده که دیگه کلا حذفش کردند. مجبور شدم gnome-ppp رو نصب کنم. نمی‌دونم چرا بدون دسترسی root درست کار نمیکنه. درایور مودم هم که فعلا نسخه رایگان 14 کیلو رو نصب کردم. واقعا زجر آوره این سرعت. ولی خوشبختانه امروز متوجه شدم که طلسم ADSL توی منطقه ما شکسته شده. خدا رو شکر نمردیم و دیدیم.

در ضمن به مناسبت نصب اوبونتوی 8.10  یه حالی به سیستم دادم و رمش رو ارتقا دادم. اولش که بالا اومدم دیدم 5 گیگ رم رو 3.2 گیگ نشون میده یه سرچی کردم فهمیدم سیستم عامل های 32 بیتی بیشتر از 3.2 گیگ رم رو ساپورت نمیکنن برای رفع این مشکل توی اوبونتو سه تا راه حل هست. یک اینکه اوبونتوی 64bit نصب کنی، دو اینکه کرنل نسخه سرور رو نصب کنی و سوم اینکه کرنل رو خودت از سورس با PAE کامپایل کنی. فعلا قصد دارم نسخه 64 بیتی رو در کنار همین نسخه نصب کنم ببینم اگر مشکل خاصی باهاش نداشته باشم کلا سوئیچ کنم به 64 بیتی. تا از قابلیت های سی پی یو 64 بیتی هم استفاده بشه.

Keyword Substitution

6 آبان 1387

در svn یک قابلیتی وجود داره که میتونه یکسری کلید واژه های خاص رو با متغییرهایی نظیر شماره revision و تاریخ ویرایش و … جایگزین کنه.

پرکاربردترین کلید واژه Id است که ترکیبی از سایر کلید واژه ها شامل نام فایل، شماره rev و تاریخ و مولف است.

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

$Id: calc.c 148 2006-07-28 21:30:43Z sally $

این همان قابلیت Keyword Substitution در svn است که عبارت $Id$ را با عبارت فوق جایگزین کرده است.

با استفاده از این قابلیت وقتی از پروژه export می گیرید در ابتدای هر فایل اطلاعات مولف ، تاریخ و شماره revision را دارید که ممکنه بعدها به دردتون بخوره.

و اما نحوه فعال کردن این قابلیت :

svn propset svn:keywords "Id" myfile.php

این دستور باعث میشه کلید واژه Id برای فایل myfile.php فعال بشه. و بنابراین هر جا در این فایل عبارت $Id$ قرار داشته باشه در هنگام کامیت با اطلاعات مربوطه جایگزین میشه و در کامیتهای بعدی هم به صورت خودکار آپدیت میشه.

در ضمن اگر از TortoiseSVN  استفاده می کنید از منوی TortoiseSVN قسمت properties می توانید از این قابلیت استفاده کنید.

اطلاعات بیشتر

آپدیت : برای فعال کردن این قابلیت روی تمام فایل های php موجود در یک شاخه (و زیر شاخه های آن) به مسیر مورد نظر رفته و دستور زیر را اجرا کنید:

find -type f -name "*.php" -exec svn propset svn:keywords "Id" {} \;

برای حذف این قابلیت از روی یک فایل دستور زیر را اجرا کنید:

svn propdel svn:keywords myfile.php

دومین جشن نصب لینوکس در مشهد

18 مهر 1387

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

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

اهداف و برنامه‌های این جشن عبارتند از:

  • آشنایی با آزادی نرم‌افزار، لینوکس، و نرم‌افزار آزاد
  • آشنایی با سیستم عامل لینوکس
  • نصب سیستم عامل لینوکس در کنار سیستم‌عامل فعلی علاقه‌مندان
  • آموزش اولیه لینوکس
  • رفع اشکالات مقدماتی کاربران

زمان و مکان:

  • زمان: روز جمعه، ۱۹ مهرماه، از ساعت ۲ الی ۸ شب
  • مکان: بلوار فروسی، میدان جانباز به سمت چهارراه مهدی، شمارهٔ ۱۴۱، مرکز انفورماتیک بین‌الملل

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


جستجو در گوگلِ 8 سال پیش

12 مهر 1387

گوگل به مناسبت جشن تولد ده سالگیش در یک اقدام جالب امکان جستجو در قدیمی ترین ایندکس موجود یعنی گوگل سال 2001 رو فراهم کرده.

در نتایج جستجو اگر روی لینک «view old version on the Internet archive» کلیک کنید می تونید با استفاده از سایت archive.org نسخه مربوط به سال 2001 رو ببینید.

با مقایسه نتایج جستجو های اون موقع با الان میشه به سیر سریع تحولات وب پی برد. مثلا کلمه blog فقط 76400 نتیجه رو بر میگردونه در حالی که الان حدود 3.5 میلیارد نتیجه رو بر میگردونه. کلمه ubuntu نتایج بی ربط بر میگردونه و کلمات youtube و BitTorrent هم اصلا هیچ نتیجه ای رو بر نمیگردونند.