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

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

فیلتر کردن ریکوئست‌های 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 و حتی ویندوز و لینوکس) موجوده، هر بهانه‌ای برای آهنگ گوش نکردن رو از آدم می‌گیره.

لطفن فایل readme.html وردپرس خودتون رو پاک کنید!

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

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

آپدیت جدید افزونه‌ی 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

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

OneDrive حالا عکس‌هاتون رو بر اساس چیزی که توی عکس‌ها می‌بینه دسته‌بندی می‌کنه!

به نظر میاد فناوری درک تصاویر مایکروساقت، زودتر از زمانی که انتظارش رو داشتم داره وارد زندگی روزمره می‌شه (با توجه به کمیت و کیفیت اینترنت ایران، تا ۴۰ سال آینده انشاالله وارد زندگی روزمره ما هم میشه)

امروز که رفتم توی سایت وان‌درایو دیدم توی تصاویر بخشی به اسم Tags اضافه شده. وقتی اون صفحه رو باز کردم با کلی عکس توی دسته‌های مختلف مواجه شدم!

Screenshot (16)

اولش حدس زدم که این‌ها بر اساس تگ‌هایی که من روی صورت افراد زدم دسته بندی شدن (به نوشته‌های زیر دسته‌بندی‌ها دقت نکردم) ولی بعد دیدم که این‌ها، تگ‌های افراد نیستن بلکه عکس‌های من رو به‌صورت موضوعی دسته‌بندی کرده.

اگر برنامه‌نویس باشید می‌دونید که این کار اصلن آسون نیست و من رو یاد این عکس xkcd می‌ندازه

tasks

 

در آخر توجه‌تون رو به تعدادی از تشخیص‌های این سیستم جلب می‌کنم:

این دسته‌بندی Textایه که برای من درست کرده، حتی متن‌های فارسی رو هم تشخیص داده!

Screenshot (15)

 

پایین هر عکس تگ‌ش رو نوشته:

Capture

Capture2 Capture3 Capture4

و البته این سیستم اشتباه هم داره هنوز:

Capture5

 

پی‌نوشت: گوگل هم پیش‌رفت جالبی داره. برای پیدا کردن اون عکس xkcd توی گوگل سرچ کردم xkcd bird detector و اولین لینک نتیجه‌ای که می‌خواستم بود در صورتی که هیچ‌جای صفحه bird یا detector نبود.

پی‌نوشت ۲: این فناوری مایکروسافت رو بذارید کنار هالولنز…

پی‌نوشت ۳: فلسفه وجود تگ «خفن» اینه که این واقعا mind blowingئه و واقعا خفن، نتونستم در مقابل وسوسه‌ش مقاومت کنم :)