Menu، MySQL و کلا هر چی با M شروع میشه
بهمن ۲۳م, ۱۳۸۸
اولین بار،برای ایجاد کردن یک منوی تو در تو، از یک روش ساده استفاده کردم. روشی که خیلی های دیگر هم از آن مطمئنا استفاده میکنند. (باز هم خیلی بی مقدمه شروع کردم !)
منظورم از منوهای تو در تو خیلی سادست، منوهای کناری سایتها. مثلا یه چیزی مثل شکل زیر:
با این فرض که این منوها قراره از دیتابیس خونده بشن (تو این مورد mysql) و نمایش داده بشن. دیشب یه دوستی هم همین رو پرسید ازم که من اگه باشم چیکار میکنم، و بعد من یه راهی به ذهنم رسید که تا همین الان هم یه کله دارم روش کار میکنم.(البته بگم که یه دوست دیگه هم این ایده رو بهم داد و قرار شد لینکی که اصل ایده از اونجا بوده رو برام بفرسته، ولی این دوست من خیلی بد قوله!!) اول از همه روش قدیمی مو میگم و بعد روش جدیدمو . یعنی قسمت اول روشیه که تا به امروز استفاده میکردم و قسمت دوم روش جدیدیه که مد نظرمه،احتمالا اینو تو دو تا پست سرو سامون بدم تا شاید اون لینکی که دوستم گفت رو تا اون موقع پیدا کردم چون من الان فقط طرح کلیشو میدونم و بقیش کار خودمه و شاید اون بهتر بود.
فرض کنید همون شکلی که بالا هست رو میخوام پیاده کنم. جدولی با یه ساختار ساده ایجاد میکنم :
CREATE TABLE IF NOT EXISTS `simple_menu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(60) NOT NULL, `parent` int(11) NOT NULL, `data` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM;
این روش،خیلی ساده میتونه برای منوهای تو در توی محدود استفاده بشه. مثلا تا ۴ درجه.(مثل همین تصویر اگر که ریشه رو هم یک درجه حساب کنید)و البته قسمت دیتا هم اصلا استفاده ای توی مثال من نداره و مثلا میتونه لینکی باشه که این منو قراره به اون ما رو هدایت بکنه یا یه چیزی شبیه این. تو این مثال، ما زیاد اونو جدی نمیگیریم :)
مثلا برای این تصویر اطلاعات مورد نیاز من خواهد بود :
INSERT INTO `simple_menu` (`id`, `name`, `parent`, `data`) VALUES (1, 'Root', 0, 'Root Data'), (2, 'Home', 1, 'Home Data'), (3, 'Pages', 1, 'Pages Data'), (4, 'Articles', 1, 'Articles Data'), (5, 'PHP', 3, 'PHP Data'), (6, 'Delphi', 3, 'Delphi Data'), (7, 'SQL', 4, 'SQL Data'), (8, 'Ajax', 4, 'Ajax Data'), (9, 'OS', 5, 'OS Data'), (10, 'GTrans', 5, 'GTrans Data'), (11, 'Part1', 8, 'Part1 Data'), (12, 'Part2', 8, 'Part2 Data');
لینوکس و شوقی که گم کرده بودم
بهمن ۲۱م, ۱۳۸۸
خیلی سال پیش، وقتی برای اولین بار یک کامپیوتر دیدم،بلافاصله فهمیدم که کلا همه زندگی ام عوض شده. شاید قبل تر متوجه شده بودم، وقتی که اول ابتدایی بودم و آتاری را برای اولین بار دیدم و آن بازی هواپیمای معروف را! طوری بود که با اینکه به جای مدرسه در یک دژ نظامی بودیم من از مدرسه فرار میکردم و به این کلوپهای آتاری میرفتم. بچه اول ابتدایی وقتی گردن کلفتهای پنجم مثل سگ میترسیدند از ترکه ناظم و مدیر!! البته همیشه انقدر حواسم جمع بود که گیر نیفتم :) -ریزه میزه بودم، بر خلاف الان، وکلاسها هم که به برکت تئوری فرزند بیشتر کوپن بیشتر ۴۰-۵۰ نفره بودن و یک معلم بیچاره که اگه تا ظهر اسم خودشو یادش میموند شاهکار کرده بود و اصلا نمیفهمید کی هست کی نیست تو این میزای ۴ نفره! البته بگذریم از اون دفعاتی که رفقا زحمت لو دادن رو میکشیدن!
اولین بار،برادر بزرگترم در مورد الگوریتم و کشیدن فلوچارت کمی برایم توضیح داد و طوری شده بود که مثل یک مریض روانی شده بودم، برای هر چیزی الگوریتم مینوشتم ،هر چیزی!
تا بالاخره برنامه نویسی را شروع کردم،به صورت جدی.
کم کم ، غرق شدم. باز هم به صورت جدی.
کم کم معتاد شدم به صورت جدی! و آخر سر متوجه شدم که هیچ لذتی وجود ندارد، شوقی برای یاد گرفتن ندارم، چون خیلی بی معنی شده، چی باید یاد بگیرم؟ اینجا کلیک کن، اونجوری میشه، فلان Api فلان کارو میکنه،همینه که هست! اگه اضافه میخوای بشین ببین فلان کمپانی تغییری میده تو اصل این قضیه؟ به یه باگ برخوردی؟ خوب منتظر شو تا پچش بیاد.
آخرش؟ فلان زبان برنامه نویسی رو با بهمان IDE حرفه ای شدی؟ دمت گرم! ولی شرمندتم، کمپانی صاحبش تصمیم گرفته که کلا از بیخ و بن عوضش کنه! اگه میخوای به روز پیش بری همینه که هست!
اونوقت بود که تصمیم گرفتم! شاید همین بیهودگی بود که تصمیم گرفتم دست بردارم از اون چیزی که بهش میگن راحتی! بهش میکن فراوانی نرم افزار، بهش میگن راحتی نصب درایور، بهش میگن بهترین محیط برای بازی (بازی، شوقی که هنوز هم دارم! میترسم دخترم که بزرگتر شد عاقل اندر سفیه نگاهم کنه! کما اینکه الان خیلی ها اینکارو میکنن.)
آره،یه حقیقته که هنوز مشکل دارم با درایور کارت گرافیکم، هنوز نتونستم خیلی کارها رو به همون راحتی انجام بدم که قبلا انجام میدادم، خیلی چیزها نیست!! آره خیلی بازیها رو از دست دادم! ولی حالا انگار که دوباره دارم از مدرسه فرار میکنم که سری بزنم به کلوپ آتاری کوچه بالایی، انگار هنوز دارم رشوه میدم به هم میزی هام. انگار هنوز دارم واسه حل کردن یه تناسب ساده الگوریتم مینویسم.
نمیدونم شاید با مزه باشه ولی فقط نوشتن یه اسکریپت ساده، خیلی ساده واسه تغییر اسم یه سری فایل بر اساس یه الگوی خیلی ساده باعث شد که این پستو بنویسم. با مزه تر اینکه اینکارو تو ویندوز خیلی ساده با یه دستور ren انجام میدادم و اصلا حتی یک بار هم فکر نمیکردم که انجام چنین کاری، چنین شوقی را برایم ایجاد کند.
واسه خنده، ببینید این اسکریپتو :
#!/bin/sh
for i in *
do
if [ "${i##*.}" = "zip" ]
then
#echo $i appears to be a Zip.
ext=cbz
elif [ "${i##*.}" = "rar" ]
then
#echo $i appears to be a RAR.
ext=cbr
else
#echo $i appears to be a not supported.
continue
fi
j=`echo $i | cut -d . -f 1`
j=$j"."$ext
mv "$i" "$j"
done
حرفه ای ها نخندن! (دوست داری بخندی هم بخند، شاید خوشحال هم شدم!) فقط برای تغییر پسوند آرشیوهای کمیکم، کاری که قبلا اینطوری انجام میدادم :
ren *.zip *.cbz ren *.rar *.cbr
آره، من این سادگی رو نمیخوام. فقط همین!
متفرقه – ۱
بهمن ۱۴م, ۱۳۸۸
قصد نداشتم تا ۷-۸ روز دیگر پست جدیدی بنویسم. اما :(
اول از همه اینکه امروز متوجه شدم که SourceForge هم به جمع تحریم کنندگان ایران پیوست و بعد از شرکت های دیگر مثل گوگل، نوکیا و سان، سایت sf.net دیگر اجازه دانلود فایلهای خود را به کشور ایران نمیدهد. این یعنی فاجعه ! من یکی که تقریبا یکی از دوست داشتنی ترین سایتها را از دست دادم (البته اگر به امید این اینترنت لکنته ایران باشم :دی ) دلیل اصلی نوشتن این پست هم همین مطلب بود، که چون خیلی کوتاه بود دو تا مطلب کوتاه دیگر هم مینویسم.
دوم، هرگز از table برای فرمت دهی صفحات استفاده نکنید. دست کم من که اصلا از table برای اینکار استفاده نمیکنم و خواهش میکنم شما هم اینکار را انجام ندهید. خیلی جالب بود، چند وقت پیش برخوردم به سایت http://shouldiusetablesforlayout.com ! ببینیدش (اسم را ببینید و محتوا را).
سوم، من تا حد ممکن برنامه نویسی ویندوز را کنار گذاشتم. تقریبا این یک اعلام رسمی است! همین جا اعلام میکنم که فقط از نرم افزارهایی استفاده میکنم که مجاز به استفاده از آنها هستم (یعنی یا اینکه لیسانس آنها اجازه استفاده به من را میدهد،یا اینکه لیسانس آنها را خریده ام و به صورت قانونی در اختیار دارم) و به همین دلیل ساده، چون امکان خرید ویندوز برای من نیست (نه اینکه پول ندارم :دی حیفم می آید که پولم را صرف خرید ویندوز کنم خصوصا که دارم جمع میکنم که لیسانس Zend Studio را که نزدیک آخرش هست تمدید کنم!) بنابراین از ویندوز استفاده نمیکنم!
FireBug
بهمن ۱۱م, ۱۳۸۸
شاید اگر FireBug نبود اینقدر FireFox رو دوست نداشتم. سالهاست که از فایرفاکس استفاده میکنم و بارها افرادی را دیدم که میگفتند مثلا فلان مرورگر (Browser)،از فایرفاکس سریعتره، یا استاندارد تره. منتها هیچ وقت هیچکس رو ندیدم که بگه برای یهWeb Developer مرورگر بهتری از فایرفاکس هست، و اگر هم گفته چرت و پرت بوده.
یکی از دلایل من همین فایرباگه. اگه برای یه کار کوچک هم دم دستم نباشه،کلا احساس میکنم که فلجم! یعنی وقتی نصب نیست و جایی هستم که امکان نصبش هم نیست،کلا بیخیال کار میشم و میشینم فیلم میبینم یا میرم یه گوشه کتاب میخونم. چرا؟ سادست نصبش کنید (از اینجا برای نصبش اقدام کنید)بعد متوجه خواهید شد.
فایرباگ از چند قسمت تشکیل شده، اولیش کنسول هست که از خطاهای جاوا اسکریپت، تا درخواستهای آژاکس (یه دوستی میگفت بنویس ایجکس) و اگه یه سری افزونه دیگه هم نصب باشه پیغامهای اون افزونه ها همه رو نشون میده.
خواندن ادامه این مطلب »
مترجم گوگل
دی ۲۸م, ۱۳۸۸
همون طور که مطمئنا میدونید مترجم گوگل یکی از ابزارهای قدرتمندیه که توی وب خیلی میتونه کاربردی باشه و کمک کنه. اگه بخواید از این مترجم توی طرف کلاینت استفاده کنید مثلا با کمک جاوا اسکریپت، تقریبا هیچ کاری نداره، چون گوگل API اونو در اختیارتون گذاشته و با افزودن یه سری کد جاوااسکریپت به کد صفحتون، همه چی در اختیار شماست.
اما اگه بخواید از این کد برای طرف سرور استفاده کنید مثلا برای PHP مشکلاتی پیش میاد. چند تا کلاس توی PHPClasses پیدا کردم واسه این کار ولی همه یه روش نسبتا بد داشتن، صفحه مربوط به گوگل رو میخوندن، درخواستو میفرستادن و بعد هم در نهایت صفحه بازگشتی رو بررسی میکردن برای جواب که اصولا روش خیلی بدیه! اگه گوگل یه تغییری تو صفحه بده (که داد) دیگه اون کدها کار نمیکنن.
این شد که نشستم و یه کد واسه این کار نوشتم، یه کد که خیلی ساده به وب سرویس اصلی درخواست رو ارسال میکنه و پاسخ رو که json هم هست، رو به آرایه تبدیل میکنه و در اختیار قرار میده.
این کلاس برای ارسال درخواست از CURL استفاده میکنه اما در صورت در دسترس نبودن از Snoopy استفاده میکنه. قابلیت شناسایی زبان هم وجود داره که میتونه در مواردی مفید باشه.
این کلاس بالاخره امروز تایید شد و در این آدرس قرار گرفت.
البته دموی این کد رو هم میتونید اینجا ببینید.
به روز رسانی : بلافاصله بعد از انتشار کلاس، یک نفر خبر داد که این کلاس با نسخه جدید مترجم گوگل کاملا سازگار نیست، این شد که نشستم و این کلاس رو برای نسخه جدید مترجم هم آپدیت کردم.
