اینم یه تجربه پراکنده دیگه!

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

اون موقع تازه نارنجی رو تعطیل کرده بودند اما هنوز سایت سرجاش بود. به علت کیفیت خوب کار دوستان توی نارنجی هم تگ‌هایی که به مطالب داده بودن به عنوان لیست کلمات کلیدی قابل اعتماد بود. پس من به این نتیجه رسیدم که یه سری اسکریپت بنویسم که این کلمات رو استخراج کنم. یکم توی اینترنت گشتم و ابزارهای مربوط به استخراج اطلاعات از صفحات وب(web scraping) رو بررسی کردم. آخرش به این نتیجه رسیدم که پایتون و beautiful soup رو پیدا کردم و به کمک اون اسکریپ رو نوشتم.

خب اول از همه تابع استخراج تمامی url های تمام پست‌های نارنجی هست

 

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

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

برای اینکه تعداد Thread ها زیاد نشه از یه صف استفاده کردم که الان یادم نیست. همچنین از مجموعه‌های پایتون برای حذف کلمات تکراری استفاده کردم.

پس اگه بخوام کل اسکریپت بصورت یکجا بیارم میشه:

 

به این ترتیب کلمات کلیدی نارنجی بصورت موازی استخراج شد و ذخیره شد!

همین!

اینم یه تجربه پراکنده دیگه!

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

سرویس openshift که توسط غول دنیای متن باز redhat تاسیس شده و اتفاقا یه سرویس اولیه مجانی هم داره سعی میکنه بستر برنامه نویسی مورد نیاز رو در اختیار برنامه نویسان قرار بده و بعدش برنامه نویسی بتونن با استفاده از git نرم افزارهاشون بدون نگرانی در مورد بستری که قرار این نرم افزار رو اجرا کنه مورد آزمایش و تست قرار بدن.

اتفاقا پلتفرمهای پشتیباین شده تقریبا کامل هستند node.js، j2ee، python، django، perl، ruby، ruby on rails رو پشتیبانی میکنه و پایگاه داده‌هایی هم که داره  mySql، postgreSql و monogoDB هست. که تقریبا ۹۰ درصد نیازهای یک برنامه نویس رو پشتیبانی میکنه. اتفاقا چون از git هم برای نصب و راه‌اندازی  هر برنامه استفاده میشه نسخه‌های قبلی اون هم  نگه داشته میشه و این خودش بسیار خوبه.

همچنین یکی دیگه از چیزایی که این سیستم پشتیبانی میکنه اینه شما میتونید از jenkins هم استفاده کنید که یک پلتفرم continious integration هست که به شما کمک میکنه بصورت اتوماتیک نرم افزار شما سر هم بشه و build بشه و تست میشه که آیا قسمت‌های مختلف اون با هم تضاد دارند یا نه. که خب این نکته خیلی خارجیه و هنوز من جایی در اطرافم رو ندیدم که واقعا از یک چنین سیستم در محیط عملیاتیشون استفاده کنند

البته باید بگم که سیستم های دیگه ای مثل heroku هم برای اینکار وجود داره اما من این openshift بیشتر خوشم و اگه بازم عمری بود در مورد سیستم‌های مشابه یکم می‌نویسم.

python logo

اینم یه تجربه پراکنده دیگه

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

اما برم سراغ اصل مطلب که همون پایتون باشه! من تجربم با پایتون بسیار تجربه لذت بخشی بوده. یعنی اینکه بسیار زبون شیرین و تو دل برو ای هست. ساختار زبان تا اونجایی که من میدونم به گونه‌ای ساده شده که سرعت توسعه توش زیاد باشه. چارچوب‌ها و کتابخانه‌های بسیاری خوبی بالاخص برای طراحی وب داره(django, flask, …) که باعث میشه شما بتونید به راحتی خیلی از کارهای سختی که قبلا انجام میدادید رو تنها با چند خط کد انجام بدید.

همچنین یه سیستم خیلی قشنگ هم برای مدیریت پکیج‌ها، نیازمندی‌ها و سایر چیزا داره(pip) که برای شما این امکان رو ایجاد میکنه که یه پروژه رو خیلی سریع استارت بزنید. همچنین برای اونهایی که لینوکس کار میکنن یه سری امکانات داره که به شما اجازه میده بدون اینکه به root سیستم دسترسی داشته باشید خیلی کارهای زیادی رو انجام بدید(virtualenv). وب سرورهای خوبی برای محیط توسعه و حتی محیط‌های عملیاتی داره که بسیار هم خوش دسن.

در مجموع تجربه من این رو میگه که کار کردن با پایتون لذت بخشه و من حتی یک درس شروع برنامه نویسی در سایت coursera.org دیدم اونجا هم از پایتون به عنوان زبون مبتدی ها استفاده کرده بود که خب این خیلی به مبتدی ‌ها کمک میکنه که بتونن زود با دنیای برنامه نویسی آشنا بشن و یه چیزایی یاد بگیرن.

امیدوارم این تجربه هم به درد کسی بخوره.