متفرقه – ۱
بهمن ۱۴م, ۱۳۸۸
قصد نداشتم تا ۷-۸ روز دیگر پست جدیدی بنویسم. اما :(
اول از همه اینکه امروز متوجه شدم که SourceForge هم به جمع تحریم کنندگان ایران پیوست و بعد از شرکت های دیگر مثل گوگل، نوکیا و سان، سایت sf.net دیگر اجازه دانلود فایلهای خود را به کشور ایران نمیدهد. این یعنی فاجعه ! من یکی که تقریبا یکی از دوست داشتنی ترین سایتها را از دست دادم (البته اگر به امید این اینترنت لکنته ایران باشم :دی ) دلیل اصلی نوشتن این پست هم همین مطلب بود، که چون خیلی کوتاه بود دو تا مطلب کوتاه دیگر هم مینویسم.
دوم، هرگز از table برای فرمت دهی صفحات استفاده نکنید. دست کم من که اصلا از table برای اینکار استفاده نمیکنم و خواهش میکنم شما هم اینکار را انجام ندهید. خیلی جالب بود، چند وقت پیش برخوردم به سایت http://shouldiusetablesforlayout.com ! ببینیدش (اسم را ببینید و محتوا را).
سوم، من تا حد ممکن برنامه نویسی ویندوز را کنار گذاشتم. تقریبا این یک اعلام رسمی است! همین جا اعلام میکنم که فقط از نرم افزارهایی استفاده میکنم که مجاز به استفاده از آنها هستم (یعنی یا اینکه لیسانس آنها اجازه استفاده به من را میدهد،یا اینکه لیسانس آنها را خریده ام و به صورت قانونی در اختیار دارم) و به همین دلیل ساده، چون امکان خرید ویندوز برای من نیست (نه اینکه پول ندارم :دی حیفم می آید که پولم را صرف خرید ویندوز کنم خصوصا که دارم جمع میکنم که لیسانس Zend Studio را که نزدیک آخرش هست تمدید کنم!) بنابراین از ویندوز استفاده نمیکنم!
FireBug
بهمن ۱۱م, ۱۳۸۸
شاید اگر FireBug نبود اینقدر FireFox رو دوست نداشتم. سالهاست که از فایرفاکس استفاده میکنم و بارها افرادی را دیدم که میگفتند مثلا فلان مرورگر (Browser)،از فایرفاکس سریعتره، یا استاندارد تره. منتها هیچ وقت هیچکس رو ندیدم که بگه برای یهWeb Developer مرورگر بهتری از فایرفاکس هست، و اگر هم گفته چرت و پرت بوده.
یکی از دلایل من همین فایرباگه. اگه برای یه کار کوچک هم دم دستم نباشه،کلا احساس میکنم که فلجم! یعنی وقتی نصب نیست و جایی هستم که امکان نصبش هم نیست،کلا بیخیال کار میشم و میشینم فیلم میبینم یا میرم یه گوشه کتاب میخونم. چرا؟ سادست نصبش کنید (از اینجا برای نصبش اقدام کنید)بعد متوجه خواهید شد.
فایرباگ از چند قسمت تشکیل شده، اولیش کنسول هست که از خطاهای جاوا اسکریپت، تا درخواستهای آژاکس (یه دوستی میگفت بنویس ایجکس) و اگه یه سری افزونه دیگه هم نصب باشه پیغامهای اون افزونه ها همه رو نشون میده.
خواندن ادامه این مطلب »
مترجم گوگل
دی ۲۸م, ۱۳۸۸
همون طور که مطمئنا میدونید مترجم گوگل یکی از ابزارهای قدرتمندیه که توی وب خیلی میتونه کاربردی باشه و کمک کنه. اگه بخواید از این مترجم توی طرف کلاینت استفاده کنید مثلا با کمک جاوا اسکریپت، تقریبا هیچ کاری نداره، چون گوگل API اونو در اختیارتون گذاشته و با افزودن یه سری کد جاوااسکریپت به کد صفحتون، همه چی در اختیار شماست.
اما اگه بخواید از این کد برای طرف سرور استفاده کنید مثلا برای PHP مشکلاتی پیش میاد. چند تا کلاس توی PHPClasses پیدا کردم واسه این کار ولی همه یه روش نسبتا بد داشتن، صفحه مربوط به گوگل رو میخوندن، درخواستو میفرستادن و بعد هم در نهایت صفحه بازگشتی رو بررسی میکردن برای جواب که اصولا روش خیلی بدیه! اگه گوگل یه تغییری تو صفحه بده (که داد) دیگه اون کدها کار نمیکنن.
این شد که نشستم و یه کد واسه این کار نوشتم، یه کد که خیلی ساده به وب سرویس اصلی درخواست رو ارسال میکنه و پاسخ رو که json هم هست، رو به آرایه تبدیل میکنه و در اختیار قرار میده.
این کلاس برای ارسال درخواست از CURL استفاده میکنه اما در صورت در دسترس نبودن از Snoopy استفاده میکنه. قابلیت شناسایی زبان هم وجود داره که میتونه در مواردی مفید باشه.
این کلاس بالاخره امروز تایید شد و در این آدرس قرار گرفت.
البته دموی این کد رو هم میتونید اینجا ببینید.
به روز رسانی : بلافاصله بعد از انتشار کلاس، یک نفر خبر داد که این کلاس با نسخه جدید مترجم گوگل کاملا سازگار نیست، این شد که نشستم و این کلاس رو برای نسخه جدید مترجم هم آپدیت کردم.
Open Search – PHP
دی ۲۳م, ۱۳۸۸
خیلی وقت پیش یه کلاسی نوشته بودم برای پیاده سازی پروتکل Open Search . اگه دیده باشید ، بروزر های جدید، مثلا فایرفاکس (همه نسخه ها) و اینترنت اکسپلورر (از نسخه ۷ -گویا- به بعد) یه پنل اضافه کردن به سمت راست بالا برای جستجوی مستقیم تو بعضی موتورهای جستجو.
این پانل میتونه موتورهای جستجوی جدید رو هم قبول کنه،و شما برای اضافه کردن سایت خودتون به این پانل، باید یه فایل XML اضافه کنید به سایتتون و یه سری تگ هم توی قسمت Head صفحه بنویسید. اونوقت کاربر هر وقت که سایت شما رو ببینه اون پانل تغییراتی میکنه که نشون میده که سایت فعلی از قابلیت Open Search پشتیبانی میکنه. و بعد از اون کاربر میتونه موتور جستجوی شما رو هم به لیست اضافه کنه.
برای اینکار چند وقت پیش یه کلاس نوشتم و اونو تو سایت PHPClasses گذاشتم. میتونید از این ادرس بگیریدش. اگه سوالی بود هم همینجا میتونید بپرسید.
باز هم آژاکس – قسمت سوم
دی ۱۸م, ۱۳۸۸
توی دو پست قبلی توضیح دادم که چطوری میشه بدون اینکه نیازی باشه کد html اصلی رو تغییر داد فقط با اضافه کردن جاوا اسکریپت به صفحه و با کمک jQuery میشه یه صفحه رو بدون اینکه قابلیت کار معمولی خودشو از دست بده (مثل خیلی صفحه ها که میبینید اگه جاوااسکرپت نباشه کار نمیکنن) به یه صفحه کاملا آژاکسی تبدیل کرد. البته تو این نوشته همون صفحه واقعا Full Ajax میشه :) توی قسمت قبلی مونده بود قسمت ویرایش که بگی نگی یه کم سنگینتره و نیازمند دقت بیشتر.
اول از همه یه کم نیازمند تغییر کد هستیم دلیلشم اینه که من زیاد دقت نکرده بودم وقتی کد اولیه رو ایجاد کردم. (خوب اصولا من آدم بی دقتی هستم، یا به قول دوستم که معتقده هیچ وقت نگو بی! بگو کم! کم دقتم). به هر صورت بنا به دلایلی برای ویرایش دو تا درخواست آژاکس انجام میشه. اولی اطلاعات فیلد مورد نظر رو درخواست میکنه و دومی هم واقعا درخواست ویرایش رو به سرور میفرسته. خیلی وقتها میشه اولین درخواست رو از بین برد،یعنی به یه نحوی اطلاعات مورد نظر رو از فیلدهای html گرفت، مثلا اطلاعات رو از داخل عنصر td (تو این مثال)بگیریم که لازمه اون، افزودن یه id به اون فیلده که بعد بشه محتواشو به راحتی گرفت. به هر صورت،اینجا درخواست اول حاوی id اون اطلاعات مورد نظره که نیازی نیست اصلا نگرانش باشیم،چرا که از قبل لینک حاوی این اطلاعات هست. یعنی هر لینک مقصدی داره که کاملا مشخصه و اطلاعات مربوط به همون id رو داره. اما برای راحتی، id ردیف جدول که بعدا باید محتواش عوض بشه تو خصیصه rel مربوط به لینک ویرایش ذخیره کردم واسه روز مبادا (امروز).
اما اولین درخواست :
//3-1 we can use stored data to create new form, but I want to
//use the get request to get the data :)
//So get the target of this link
var target=$(this).attr('href');
//3-2 Send request to server and get the current data
$.get(
target,// Target of this link
{},//No data needed at all, all required is
function(data){//Call
//3-3 :Just show message
$("#msg").removeClass('message') //Remove any old class, just in case
.removeClass('errmessage')
.addClass(data.class) //Add new
.html(data.msg); //change message(innerHTML)
//3-4 : If done show the edit form (or in this case simply alter
// Edit form.
if (data.affected>-1) {
//Simply change the add form to edit form.
//Change the oper field to edit
$('#addform input[name=oper]').attr('value','edit');
//Add a hidden field contain id of field,first remove it if any :)
$('#addform input[name=id]').remove();
$('<input type="hidden" name="id" value="'+data.affected+'" />').appendTo('#addform');
//ID of form is not important :) let it be add form :)
//Change the label of data field
$('#addform label[for=data]').html('Edit this data :');
//Set the data in text box(we add a new part to result json)
$('#addform input[name=data]').attr('value',data.data);
$('#addform input[name=submit]').attr('value','Edit');
//Remove cancel btn if any
$('#addform input[name=cancel]').remove();
$('<input type="submit" value="Cancel" name="cancel" />').appendTo('#addform')
.click(resetFunction);
}
},
"json" //Data type, see add function
);