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

فیلتر کردن ریکوئست‌های 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 رو پیاده‌سازی کنم. این کار احتمالن بیشتر طول می‌کشه و الگوریتم پیچیده‌تری هم هست. با توجه به این که حوصله‌ی مقاله خوندن ندارم، برنامه‌م اینه که مثل کاری که با کد پایتون کردم، کد جاوای الگوریتم رو به سی‌شارپ پورت کنم و در حین پورت کردن طریقه‌ی کارش رو بفهمم.

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

مرتب‌کردن همه‌ی فایل‌های 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"

آپدیت جدید افزونه‌ی Jadi2 و افزونه‌ی CE93 Oracle Mirror برای دست‌رسی به داکیومنت‌های جاوا بدون نیاز به … که یادم رفته بود دربارش بنویسم

حدود یک ماه پیش با یکی از بچه‌های دانشکده‌ی کامپیوتر، افزونه‌ی CE93-Oracle رو نوشتیم. یکی از دوستان زحمت بخش وب‌ش رو کشید که وقتی به oracle.ce93.ir می‌رید، محتویات docs.oracle.com رو نشون بده و oracle.ce93.ir/a هم محتویات docs.oracle.com/a رو نشون بده.

و من هم اول می‌خواستم از کدهای Jadi2 برای اون استفاده کنم که دیدم یک‌سری مشکل فنی داره و امکان‌پذیر نیست. اگه یادتون باشه گفتم در نسخه‌ی بعدی Jadi2 یه کاری می‌کنم که عکس‌هایی که توی jadi.net هستن رو هم خود کروم از jad2.undo.it لود کنه. برای این کار لازمه هر request رو چک کنیم و اگر مال ما بود، (ینی با jadi.net یا freekeyboard.net شروع می‌شد) رو به jadi2.undo.it ری‌دایرکت کنه.

پس از چند ساعت تلاش شبانه، اون شب تونستم راه خوبش رو پیدا کنم و تا فرداش افزونه‌ی CE93-Oracle آماده شد ولی آپدیت جدید Jadi2 به تعویق افتاد. ۸ روز پیش دوباره تلاشی کردم برای درست کردنش که به دلیل حوصله نداشتن متوقف شد و امروز با وجود این‌که حوصله نداشتم، چون برنامه‌نویسی حس خوبی به آدم می‌ده و پروژه‌ی اصلی‌ای که این روزها دارم روش کار می‌کنم هم به دلیل زیاد روش کار کردن خسته‌کننده شده برای چند ساعت، تصمیم گرفتم که بجای اتلاف وقت، جادی۲ رو درست کنم که حالا آمادست :)

در پایان هم لینک‌های چیزهایی که بالا معرفی کردم:

کد افزونه‌ی CE93 Oracle Mirror

خود افزونه‌ی CE93 Oracle Mirror

کد افزونه‌ی Jadi2

افزونه‌ی Jadi2

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

به نظرتون توسعه GTranslate رو ادامه بدم؟

چند روز پیش توی گشت و گذاری که توی کروم استور داشتم، فهمیدم که نسخه دوم افزونه رسمی Google Translate، بالاخره قابلیت ترجمه از طریق راست کلیک رو اضافه کرده (+ یک قابلیت دیگه که اجازه میده ترجمه رو زیر کلمه‌ای که انتخاب کردید ببینید. البته با توجه به سرعت اینترنت یه ذره طول می‌کشه بیاد)

موضوع اینه که چند سال پیش وقتی این افزونه رو درست کردم، برای این بود که هیچ افزونه دیگه‌ای برای این کار نبود. ولی الان با توجه به این‌که دوتا افزونه‌ی پرطرفدارتر از GTranslate هستن که کارایی‌شون مشابهه، در یک دو راهی گیر کردم که آیا توسعه رو ادامه بدم یا نه.

نظر شما چیه؟

معرفی نرم‌افزار WebMatrix: ویرایش سایت و کار کردن با کلی زبان برنامه‌نویسی

با این‌که خیلی‌ها نظرشون نسبت به مایکروسافت منفیه ولی من از این شرکت خوشم میاد. حداقل در زمینه‌ی برنامه‌نویسی به نظرم بهترین ابزارهای برنامه‌نویسی و بهترین زبان برنامه‌نویسی مال این شرکته.

فکر کنم از سال ۲۰۱۰، مایکروسافت نرم‌افزاری به اسم WebMatrix رو معرفی کرد که برای ویرایش سایت‌ها بود. یعنی شما سایت‌تون رو بهش اضافه می‌کردید (از طریق لوکال، Web Deploy یا چندتا تکنولوژی دیگه) و بعد با استفاده از اون می‌تونستید سایت‌تون رو ویرایش و به‌روز رسانی کنید.

مثلا من با Web Deploy به سرور وصل می‌شم و کدهای دو برنامه‌نویس رو با کمک وب‌ماتریکس ویرایش می‌کنم که خیلی راحت‌تر از ویرایش‌گر وردپرسه!

Screenshot (19)

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

پی‌نوشت با CTRL+ K و بعد CTRL + D می‌تونید کدتون رو مرتب کنید و این امکان بیش‌تر از چیزی که فکر می‌کنید کاربردیه :)