برخی برنامه نویس‌ها برای بررسی اینکه ببینند یک تابع خروجی غیر null داره این کار را انجام می دن:

if ( my_func() != '') {
 //do something
}

این یه اشتباه بزرگه! جواب این شرط true هست! چراکه جاوااسکریپت undefined برمی گردونه درستش اینه:

if ( my_func() != null) {
 //do something
}

به اینطور اشکالات برنامه نویسی اصلاحا خطای منطقی می گن

نمی‌دونم شما هم مشکل من رو با گوگل دارید یا نه من این باگ رو براشون report کردم ولی تا الان که براش کاری نکردن.

مشکل اینه که وقتی تو حالت ssl نیستین‌ (https) پنجره ads که سمت راست صفحه شما به نمایش درمیاد و حاوی توضیحات بیشتر درمورد جستجوی شماست یا ممکنه حاوی تبلیغات باشه موجب می شه اولین نتیجه جستجو قابل کلیک نباشه! خیلی اتفاق نادری افتاده که اینطور شده ولی خوب یه مشکل اعصاب خورد کنه برای این مشکل من یه add-on با greasemonkey نوشتم که خیلی ساده است و بانصبش مشکل مرتفع می‌شه.

دانلود

سلام دوستان

تو یکی از قسمت‌های رادیو‌گیک تو وبلاگ جادی (کیبورد آزاد) یه تبلیغ جانانه برای fastdic.com کرده بود علتش هم که خیلی روش تاکید داشت سرعت خیلی بالای اون بود.

خوب ما هم می‌خوایم یه همچین چیزی برای خودمون داشته باشیم بنابراین شروع می کنیم.

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

۱) دیتابیس: حدود سال ۱۳۸۴ یک دیتابیس دیکشنری پیدا کردم که یه گوشه‌ی هارد تا الان نگهداری کرده بودمش و الان می‌خوام از همون استفاده کنم. یک فایل متنی ۵۹۴۹۹ سطری به این شکل

text-dictionary

پس ما ابتدا لغت انگلیسی رو داریم بعد فاصله::فاصله بعد لغت فارسی حالا تا اینجا رو داشته باشید که باهاش کار داریم

۲) باید دیتابیسی رو برای اینکار طراحی کنیم جدولی که برای اینکار در نظر گرفتم ۳ فیلد داره (من یک عادتی دارم و همیشه یک فیلد id توی جدول قرار می دم هرچند حتی اگه به اون نیاز نباشه)

فیلدها شامل:

id از نوع integer

english از نوع varchar که طولش ۲۵۵ حرف هست

persian از نوع varchar که طولش ۱۰۲۴ حرف هست (طولانی‌ترین معنی که پیدا کردم ۷۴۴ کاراکتری بود)

خوب اینجا می‌خوام چندتا فوت کوزه گری بگم

فوت کوزه‌گری ۱

ایندکس‌گذاری جداول در زمان SELECT زدن تاثیرگذارترین موضوع در سرعت Queryها هست!

persian هم که بیشتر حرف داره fulltext می‌کنیم تا بتونیم روش fulltext search کنیم

با توجه به اینکه فیلد english کمتر از ۲۵۶ حرف داره اون رو index می کنیم برای اینکه کیفیت جستجو را بالا ببریم فیلد english  را fulltext کردم.

برای کلید اصلی (primary key) هم id v رو انتخاب می‌کنیم مطابق تصویر زیر (روی عکس کلیک کنید تا سایز اصلی رو ببینید)

db-dictionary

خوب جدول آمادست حالا ادامه مرحله یک رو جلو می‌بریم

یه متن بلند بالا داریم که باید تبدیل شه به INSERT در نزدیک به ۶۰۰۰۰ QUERY منطقا ما بیکار نیستیم (و البته از حوصله هم خارجه) که دستی اینکار رو انجام بدیم

یک راه اینه که از Excel استفاده کنیم از tabs->data->from text که توش delimiter (یا همون جدا کننده) را : قرار می دیم و ادامه ماجرا (یک وقت دیگه آموزش می‌دمش)

من دوست دارم از یک روش گیکی‌تر و قابل استفاده در تمام سیستم‌عامل‌ها استفاده کنم؛ برای اینکار نیاز به vim داریم که تقریبا برای تمام (بله درست شنیدید تمام) سیستم‌عامل‌های موجود نسخه داره (…,Windows, Linux, Mac, OS/2, Amiga, Android, i/Os) می تونید از اینجا دانلودش کنید. این برنامه خیلی جالبه تقریبا تمام زبان‌های برنامه‌نویسی رو پشتیبانی می‌کنه Open Source(بخونید آزاد) هست؛ تحت shell (ویندوزی‌ها بخونن DOS)هست؛ می‌تون فایل‌های گیگابایتی رو مثل آب خوردن بازکنه و روشون پردازش‌های سنگین انجام بده؛ خیلی جذاب و دوست داشتنیه و امکاناتش بینهایت! خوب بهتره دست از تعریف و تمجید بردارم و کار رو شروع کنیم

خوب حالا که vim رو دانلود کردین دیکشنری لغات رو هم دانلود کنید.

من دیکشنری و فایل gvim74.exe رو توی درایو 😀 قرار دادم برای باز کردن دیکشنری اول باید dos یا shell رو باز کنید

D:
gvim74.exe fa-en-utf8.txt

 

شکل دیکشنر ما به ازای هر سطر بصورت زیر هست

english Word :: ترجمه فارسی

 و ما می خواهیم اون رو تبدیل کنیم به

INSERT INTO dictionary VALUES (NULL, "english word","ترجمه فارسی");

برای اینکار کافیه توی VI دستورات زیر را بنویسیم  برای نوشتن دستور در VI ابتدا باید : بزنید تا بخش دستور فعال شه در واقع منظور از : در ابتدای خط همین هست (اگه همین دستورات رو copy/paste کنید خودش می‌فهمه که دستوره )

:%s!^!INSERT INTO dictionary VALUES (NULL, '!g
:%s! :: !','!g
:%s!$!');!g
:wq

خوب حالا این دستورات یعنی چه

در این دستورات علامت ! نقش جدا کننده را بازی می کند

در خط اول s% یعنی به ازای تمام یافته‌ها به جای ^ که نشان دهنده ابتدای سطر است ($ هم نشان دهنده انتهای سطره 😉 ) دست INSERT را قرار بده و g هم یعنی replace کن به عبارتی ما یه find and replace ساختیم.

در خط دوم می گیم هر جا :: دیدی بجاش ‘,’ بگذار

و در خط سوم هم می گیم پایان هر خط ;(‘ بگذار تا دستور ما بسته بشه

و در نهایت wq: یعنی ذخیره کن و خارج شو!

{ادامه دارد}

خوب من همیشه این مشکل را داشتم! دلم می خواهد چندتا(مثلا 5 تا 10) خبر مهم (واقعا مهم) رو در لحظه مرور مطالعه کنم. در حال حاضر نتوانستم سایتی با این کاربری پیدا کنم که واقعا این کار را درست و بی آلایش انجادم بدهد. یا با هدف‌های سیاسی خبرها چیده می‌شوند یا تعدادشان خبرها زیاد است مثلا در یک نمونه می‌دیدم در هرموضوع (سیاسی، اقتصادی، ورزشی و …) ۱۵ خبر ارائه می‌کرد! و نمونه‌های دیگر هم قوی نیستند فقط یک اسم پوچ و تهی.

خوب من این سرویس را به چند صورت نیاز دارم (شاید در نهایت فرق چندانی در خروجی کار نداشته باشد چون فقط در لایه نمایش تغییرات داریم)

۱) نمایش به صورت ساده و واضح با قالبی ساده و زیبا.

۲) نمایش مینیمالیستی مخصوص مرورگرهای موبایل قدیمی بدون سیستم عامل(بخوانید جاوا)

۳) خروجی json جهت بهره‌گیری در App گوشی‌های Android و Apple

ابتدا باید بدانیم از چه روشی برای کارمان استفاده کنیم.

بعد از کمی بررسی چند خبرگزاری و سایت مناسب را انتخاب می کنیم مثلا من خبرگزاری مهر، سایت خبری تابناک و سایت خبری عصرایران را انتخاب می‌کنم.

خبرگزاری مهر خیلی حرفه‌ای عمل می‌کند و یک تلکس خبری بسیار فعال دارد که گاهی در یک دقیقه چند خبر را به خروجی ارسال می‌کند،‌ برای تمام استان‌ها بخش موضوعی دارد و rss ارائه می‌کند اما آماری از میزان بازدید خبرها ارائه نمی‌کند؛ اما در هنگام مشاهده یک خبر در ستون چپ پربیننده‌ترین های خبرگزاری وجود دارد که ۱۰ خبر برتر در بازه زمانی نامشخصی! را ارائه می کند.

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

{ادامه دارد}

درباره‌ی این وبلاگ

در این بلاگ نگاه من را درباره دنیای فناوری و برنامه نویسی خواهید دید. امیدوارم مطالب آن راهگشا باشد.

تصاویر