بایگانی دسته: فناوری

مباحث آی‌تی ما!

فیلتر کردن ریکوئست‌های SingleR توی فیدلر

SingleR یکی از تکنولوژی‌های وب باحال مایکروسافت برای پیام‌های آنیه که مثلن بهتون اجازه می‌ده به راحتی چیزی مثل یه چت‌روم درست کنید که بدون نیاز به ریفرش کردن صفحه پیام‌های چت آپدیت بشن.

تو پروژه‌ای که الان دارم روش کار می‌کنم از SingleR برای مدیریت نوتیفیکشن‌های کاربرا استفاده کردن. مشکل این‌جاست که اگر بخوام با Fiddler ریکوئست‌های کاربرا رو مسیریابی کنم، تعداد زیادی از ریکوئست‌های SingleR رو می‌بینم و این کار مسیریابی رو خیلی سخت می‌کنه. (باید حواسم باشه که بین اون همه ریکوئست، پترن کدوم‌شون متفاوته و اون رو سریع پیدا کنم و ببینم آیا اون ریکوئست، اونی که می‌خوام هست یا نه)

pic

برای حل این مشکل، کار که من کردم این بود که توی منو سمت راست، رفتم توی بخش Filters و تیک Use filters رو زدم و توی بخش Request headers تیک Hide if URL contains رو زدم و توی تکست‌باکس جلوش، vshub رو وارد کردم.

بعدش توی بالای همون بخش رو Actions زدم و Run filterset now رو زدم تا فیلتر اعمال بشه.

پیاده‌سازی یک الگوریتم خلاصه‌سازی خیلی ساده

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

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

SplitContentToSentences: یه پیاده‌سازی خیلی ابتدایی از تابعی که یه متن بگیره و لیستی از جمله‌هاش رو برگردونه.

SplitContentToParagraphs: بر اساس Enterهایی که توی متن زده شده، متن رو به تعدادی پاراگراف تقسیم‌بندی می‌کنه.

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

FormatSentence: این تابع تمام کارکترهای غیرحروف رو از جمله حذف می‌کنه تا در پردازش‌هامون نگران این‌جور کارکترها نباشیم (و لازم نباشه بودن یا نبودن‌شون رو بررسی کنیم)

GetSentecesRanks: در این تابع، تمام جملات متن ورودی رو دو به دو با هم مقایسه می‌کنیم و یه عدد به هر جمله اختصاص می‌دیم: حاصل جمع خروجی تابع SentencesIntersection که جمله‌ی اصلی و بقیه‌ی جمله‌های متن رو بهش ورودی دادیم.

GetBestSentence: بهترین جمله از متن ورودی رو با استفاده از امتیازهایی که در GetSentecesRanks به دست آوردیم خروجی می‌ده.

و در نهایت تابع GetSummary متن و عنوان متن رو می‌گیره و با استفاده از توابع بالا، یه خلاصه‌ی ساده از متن خروجی می‌ده.

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

پی‌نوشت: بلاگ‌نویسی در مورد کارهایی که می‌کنیم پیشنهادی بود که امروز استادی سر کلاس داد و پیشنهاد خوبی بود به نظرم. بخشی از انگیزه‌ی نوشته شدن این نوشته (که احتمالن به کار کسی هم نیاد) از اون استاد گرفته شده.

ریبوت کردن روتر TP-Link با چند خط کد پاورشل

داشتم تلاش می‌کردم یکم با روترم ور برم و کدی توی اینترنت پیدا کردم که توش روترش رو ریست می‌کرد. من هم برابرنهاد پاورشلی‌ش رو نوشتم :)

 

فقط یادتون نره که متغیرهای ip و user و pass رو درست تنظیم کنید.

مرتب‌کردن همه‌ی فایل‌های solution توی ویژوال استودیو

Formatting یا مرتب‌سازی کد، یکی از امکانات جذاب یه ویرایشگر برای منه. کاری که می‌کنه اینه که کد رو به شکل خاصی مرتب‌سازی می‌کنه. مثلن فاصله‌گذاری‌ها و خطوط رو تصحیح می‌کنه تا کد زیباتر و خواناتر بشه و از این‌جور کارها.

توی ویژوال استودیو با زدن Ctrl + K + D ویژوال استودیو کدهای صفحه‌ای که توش هستید رو براتون ویرایش می‌کنه. حالا اگر بخواید همه‌ی فایل‌های solutionای که توش هستید رو مرتب‌سازی کنید چی؟

برای این کار، Package Manager Console رو از Tools -> Nuget Package Manager -> Package Manager Console باز کنید و کد زیر رو اون‌جا وارد کنید و اینتر رو بزنید:

function f($projectItems){$projectItems | ForEach-Object {$_.ProjectItems | ForEach-Object { if ($_.Name -ne $null -and $_.Name.EndsWith( ".cs" ) -and -not $_.Name.EndsWith( ".Designer.cs" ) -and -not $_.Name.EndsWith( ".tt.cs" )) {$window = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}'); if ($window){Write-Host $_.Name;[System.Threading.Thread]::Sleep(100);$window.Activate();$_.Document.DTE.ExecuteCommand('Edit.FormatDocument');$_.Document.DTE.ExecuteCommand('Edit.RemoveAndSort');$window.Close(1);}} }}; if ($projectItems){ $projectItems | % { f($_.projectItems) } } }

$dte.Solution.Projects | % { f($_.ProjectItems) }

منبع

اگر gitignore کار نمی‌کنه

برای من چند بار پیش اومده که یک‌سری از فایل‌ها رو کامیت کنم و بعد از اون متوجه اشتباهم بشم و gitignore رو آپدیت کنم تا گیت دیگه به اون فایل‌ها نگاه نکنه. مشکل اینه که گیت برای فایل‌هایی که تا حالا داشته بهشون نگاه می‌کرده دیگه به gitignore توجه نمی‌کنه و اون‌فایل‌ها از سیستم حذف نمی‌شن.
من قبلن این‌جا جواب رو پیدا کرده بودم ولی این دفعه که سرچ کردم، این‌جا پیداش کردم (و لینک استک‌اورفلو رو از توی هیستوری چت‌هام با مهدی پیدا کردم).
برای حل مشکل، اول از همه همه‌ی تغییرات‌تون رو کامیت کنید (و تغییراتی که می‌خواید اعمال نشند رو discard کنید. توجه کنید که با discard کردن اون تغییرات از دست می‌رن). بعد  git shell رو باز کنید و دستورات زیر رو بزنید:


git rm . -r --cached
git add .
git commit -m "fixed untracked files"

حل مشکل URL شامل کارکترهای یونیکد توی IIS 8

وقتی که از URL Rewrite استفاده می‌کنید، یک‌سری ملاحظات امنیتی باعث می‌شه که کارکترهای یونیکد از آدرس‌هایی که شامل کارکترهای یونیکد هستن حذف بشن. برای همین، مثلن این‌جا نمی‌تونید برید دیگه و وقتی برید این‌جا، وردپرس فکر می‌کنه که صفحه‌ی اصلی سایت باز شده.

ما سرورمون رو عوض کردیم. قبلن از IIS 7.5 استفاده می‌کردیم و اون‌جا، مشکل‌مون رو این‌جوری حل می‌کردیم که به سرور می‌گفتیم که آدرسی که به وردپرس تحویل می‌دی، آدرس unencoded باشه. این مساله، این مشکل امنیتی رو به وجود میاره که اگر مثلن به IIS بگیم که فقط کاربرهایی که هویت‌سنجی شدن می‌تونن به test.php دسترسی پیدا کنن، این محدودیت رو می‌شه با فرستادن ریکوئست به test%2ephp دور زد.

نمی‌دونم چرا ولی توی IIS 8 با همون web.config به مشکل خوردیم و باعث می‌شد کلن همه‌ی آدرس‌هامون internal server error بگیره. بنابراین پس از اندکی جست‌وجو، به این‌جواب رسیدم. برای حل مشکل، کافیه به وردپرس بگیم که به‌جای آدرسی که از سرور می‌گیری، آدرس unencodedش رو بگیر. برای این‌کار اول wp-config.php این کد رو اضافه می‌کنیم:

if ( isset($_SERVER['UNENCODED_URL']) ) {
$_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL'];}

 

Spotify ، بهترین هدیه به برنامه‌نویسان

سلام ، فکر کنم که چون این اولین پستمه ، لازمه که خودمو معرفی کنم: من امیرحسینم ، دانشجوی سال اول (که تازه تموم شده) کامپیوتر و دوستان زمان راهنمایی و دبیرستان مهدی و احمدعلی که خوب، کنکور کار خودشو کرد و تونست فیزیکی جدامون کنه ولی خدا رو شکر هنوز دوستیهامون رو فراموش نکردیم ، برعکس خیلی‌های دیگه که کردن.

قرار شد که منم در کنار دوبرنامه‌نویس قدیمی اینجا، بشم برنامه‌نویس 2.5 و در کنار دوستان، دل‌نوشته‌هامون رو انتشار بدیم و در کنارش از اون جور مطالبی بنویسیم که تو نت زیاد گیر نمیاد. پس چند وقت یه بار به ما هم یه سری بزنید و یا مشترک RSSfeed ما بشین.

ضمنا خوشحال میشم اگر توییر من @tabaplus و اینستاگرم من 2taba رو هم دنبال کنید.

خیلی وقت پیش که بیشتر از الان به صنعت گیم علاقه‌مند بودم، یه ویدئو دیدم که توش تیم برنامه‌نویسی انجین شرکت Ubisoft رو نشون می‌داد و به غیر از نکات فنی جالبی که اون ویدئو داشت، این نکته‌اش برام جالب بود که تقریبا همگی هدفون‌های بسیار غولی از شرکت‌های درست و حسابی مثل AKG، Sennhieiser و BEATS روی کله‌هاشون بود و همزمان به شدت مشغول کدزنی بودند!

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

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

حالا که به دانشگاه رسیدیم و کار کدینگیمون از قبل هم بیشتر شده، هر حجمی از دانلود هم به زودی تکراری میشه و دیگه داشتیم از کد زدن می‌افتادیم که معجزه رخ نمایی کرد: Spotify

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

ولی بهترین بخش اسپاتیفای بخش radio اونه که شما با انتخاب یک playlist شروع به گوش کردن به آهنگ‌هاش می‌کنید و در این بین، وقتی از آهنگی لذت بردید، کافیه این را به اسپاتیفای بگید تا آهنگ‌های بیشتری براتون آماده کنه که حدس می‌زنه با سلیقه‌تون سازگارتره. و واقعا هم در این کار استاده. در کمتر از 2 ساعت، بهترین آهنگ‌های عمر من رو اسپاتیفای ردیف کرد، در حالی که playlistیی که با اون شروع کرده بودم، تقریبا هیچ ربطی به آن آهنگ‌های عالیی که در ادامه‌ش اومدن نداشت!!

با این که اسپاتیفای برای کاربرای رایگانش محدودیت‌هایی قائل می‌شه، ولی چیزی از لذت این سرویس از دست نمی‌ره و لذت این که حقوق تولیدکنندگان موسیقی هم رعایت شده، همه‌ی سختی‌هاش رو جبران می‌کنه. تازه اگر هم خواستید می‌تونید در ایران با gift cardهای اختصاصی‌ش، سرویس premiumش رو خریداری کنید و از شر محدودیت‌ها هم خلاص شید.

به جرئت می‌توانم بگویم که درلیست Must-haveهای هر برنامه‌نویس نسبتا حرفه‌ای، یک هدفون باکیفیت به همراه اسپاتیفای جا داره و چون اپلیکیشن اون برای هر دستگاهی، قدیمی و جدید، (از سیمبین تا Windows Phone و حتی ویندوز و لینوکس) موجوده، هر بهانه‌ای برای آهنگ گوش نکردن رو از آدم می‌گیره.