مطالب
با کمک link blog ها در زمان خود صرفه جویی کنید

این مطلب در حقیقت خلاصه و چکیده‌ی RSS‌ خوانی‌های دو سال اخیر بنده است.
برخلاف فوروم‌های ایرانی که سعی می‌کنند نقش تمام رسانه‌ها را به صورت یکجا بازی کنند، برای مشاهده مقالات جدید یا اخبار به روز فناوری‌های مرتبط، راهی بجر وبلاگ خواندن وجود ندارد (یک استثناء اینجا وجود دارد و آن‌هم مباحث وارز است. در این یک مورد هم بیشتر فوروم‌های خارجی فعال هستند تا وبلاگ‌های آن‌ها).
خوب، در ابتدا هر سایتی که به نظر با کیفیت است به لیست RSS reader ما اضافه می‌شود و همینطور هر روز این لیست بیشتر و بیشتر خواهد شد. ابتدا روزی نیم ساعت RSS خوانی خواهید داشت بعد می‌شود روزی 2 ساعت و بعد از یک مدتی هم از کنترل خارج می‌شود.
در لابلای تمام این سایت‌هایی که من الان جمع آوری کرده‌ام و تعدادشان به چند هزار(!) می‌رسد، چند سایت (حدود 30 سایت) هستند که اصطلاحا link blog نام دارند و به صورتی پیوسته، خلاصه‌ی مفید وبلاگ‌های روز را ارائه می‌دهند (که پشتکار آن‌ها قابل ستایش است).
اکنون کار من بجای روزی چند ساعت زیر و رو کردن مطالب RSS feed وبلاگ‌هایی که ثبت کرده‌ام، صرفا به مرور سریع این link blog ها خلاصه می‌شود و انصافا گنجینه‌ای با ارزش هستند (خصوصا از این جهت که کار دست بوده و خودکار تهیه نمی‌شوند).
برای import ساده‌ی این لیست، فایل opml آن‌ها ‌را از آدرس زیر می‌توانید دریافت کنید.


این مجموعه برای راه اندازی یک سایت خبری کفایت می‌کند ...

مطالب
سه مطلب کوتاه

مشکل فایرفاکس با سایت‌های msdn و codeplex
هر از چند گاهی در بلاگ‌های msdn و یا سایت codeplex با خطای زیر از طرف سایت مواجه می‌شوم:

Bad Request - Request Too Long
HTTP Error 400. The size of the request headers is too long.

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


IE8 و ارائه‌ی fakepath بجای آدرس فایل
کنترل استاندارد آپلود فایل در مرورگرهای جدید، دیگر آدرس محلی فایل را حتی در اختیار اسکریپت‌های سمت کاربر نیز قرار نمی‌دهند. فایرفاکس مدت زیادی است که این مورد را پیاده سازی کرده. اما IE بجای اینکه یک رشته‌ی خالی را بازگشت دهد مسیر c:\fakepath را ارائه خواهد داد (fakepath جزو استاندارد html 5 است). اگر احیانا با این مورد برخورد داشتید، با استفاده از تنظیم زیر می‌توان مانند سابق مسیر کامل را نیز دریافت کرد:

Internet Explorer -> Tools -> Internet Option -> Security -> Custom ->
find the "Include local directory path when uploading files to a server"
-> click on "Enable"

اهمیت این مورد هم برای من این است که IE، یعنی همان مرورگر کاری در اکثر شرکت‌ها (و این مورد فوق را به سادگی از طریق گروپ پالیسی می‌توان به تمام کامپیوترها اعمال کرد).

علت تایم آوت و باز نشدن یک سری از سایت‌ها در ایران
مدت زیادی این سؤال برای من وجود داشت که وجه مشترک سایت‌هایی مانند dotnetkicks.com ، summerofnhibernate.com ، lessthandot.com و امثال آن چیست که از این طرف باز نمی‌شوند؟
اگر به آدرس‌های فوق که به سایت domaintools.com ختم می‌شوند، مراجعه کنید و سپس برگه‌ی Server Stats آن‌ها را ملاحظه نمائید، همگی توسط Godaddy.com Inc هاست می‌شوند. این شرکت غیرمحترم، IP های ایرانی را بسته است (مطلب جدیدی هم نیست).

مطالب
دیتابیس سایت Stack Overflow

مدتی است که سایت Stack Overflow دیتابیس سؤال و جواب‌های خود را به صورتی سخاوتمندانه در اختیار عموم قرار داده است. مجوز استفاده از این اطلاعات cc-wiki است،‌ به این معنا که مجاز هستید این اطلاعات را به اشتراک بگذارید (کپی، توزیع و امثال آن)، مجاز هستید این اطلاعات را با اطلاعاتی دیگر ترکیب کرده و کار جدیدی را ارائه دهید؛ با این شرط که فراموش نکنید از بانیان اصلی این کار یاد نموده و همچنین کار تولیدی شما نیز باید بر مبنای همین مجوز cc-wiki باقی بماند.



این دیتابیس که با فرمت xml ارائه شده در حقیقت دامپ اطلاعات عمومی سایت بوده که اطلاعات شخصی کاربران از آن حذف شده است و شامل فایل‌های زیر می‌باشد:
1. badges.xml
2. comments.xml
3. posts.xml
4. users.xml
5. votes.xml

این اطلاعات شامل سایت‌های همخانواده‌ی Stack Overflow، Server Fault ، Super Userو Meta Stack Overflow نیز می‌شود.

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

حجم این اطلاعات چند گیگ می‌شود که جهت آشنایی با نحوه‌ی import آن به SQL Server می‌توان به مقالات زیر مراجعه نمود:

مطالب
سخت افزارهای قدیمی و ویندوز 7

یک مودم d-link قدیمی external دارم (DFM-560E) که آخرین درایور آن مربوط به ویندوز XP، آن هم 32 بیتی است.
با نصب ویندوز 7 64 بیتی این مودم به صورت یک analog modem غیرقابل استفاده در device manager شناسایی شد. هر چند ویندوز 7 توانایی یافتن آخرین درایورهای مرتبط را از اینترنت و سایت مایکروسافت دارد اما چون مطابق جستجویی که انجام دادم این نوع مودم d-link صرفا برای خارج از آمریکا تهیه و تولید شده، دیگر درایوری برای آن تهیه نخواهد شد. خوب، خدا را شکر!
این مودم، مستعمل ماند تا اینکه در یکی از سایت‌ها، مقاله‌ی زیر را دیدم:


این مقاله در مورد همان گزینه‌ی add new hardware ویندوزهای قبلی که در اینجا به نام add legacy hardware تغییر نام یافته، صحبت می‌کند.
در device manager ویندوز 7 از منوی Actions گزینه‌ی add legacy hardware را انتخاب کنید تا همان ویزاد آشنای add new hardware ویندوز XP ظاهر شود. تمام مراحل آن هم مانند قبل است.
در مرحله‌ی have disk مربوط به مودم، فایل زیر را که مربوط به معرفی درایور مودم ویندوز 64 بیتی است به آن معرفی کردم و مشکل حل شد (احتمالا با تمام مودم‌هایی با chipset از نوع Conexant باید کار کند).
دریافت فایل




الان هنوز همان analog modem شناسایی نشده باقی است اما مودم فوق نیز شناسایی شد و بدون مشکل کار می‌کند.



هنگام ساخت کانکشن دایال آپ هم این مودم جدید شناسایی شده و قابل استفاده است.




مطالب
فایرفاکس 3.5.6 و غیرفعال شدن افزونه‌ها

امروز فایرفاکس 3.5.6 به صورت خودکار نصب شد؛ پس از نصب هم هیچکدام از افزونه‌های نصب شده ظاهر نشدند. به عبارتی به نظر همه‌ی آن‌ها غیرفعال شده بودند. اگر هم قرار باشد از فایرفاکس بدون افزونه استفاده کرد، استفاده از IE8، هم از نظر میزان مصرف حافظه و هم از نظر تعداد باگ‌های امنیتی کمتر گزارش شده (مطابق آمار) ارجحیت بالاتری دارد.
پس از اندکی جستجو مشخص شد که کاربران دیگری هم به این مشکل دچار شده‌اند.

راه حل ساده‌ای هم دارد:
فایرفاکس را بسته و پوشه‌ی Profiles مربوط به فایرفاکس را پیدا کنید. برای مثال:
C:\Users\Vahid\AppData\Roaming\Mozilla\Firefox\Profiles
در این پوشه و زیر پوشه‌های آن چهار فایل زیر را پیدا کرده و به یک پوشه دیگر منتقل کرده و یا حذف کنید:
extensions.cache
extensions.ini
extensions.rdf
compatibility.ini

اکنون با اجرای فایرفاکس این فایل‌ها مجددا تولید شده و مشکلات مربوطه هم برطرف می‌شود.
پس از تولید خودکار مجدد این فایل‌ها، مجددا افزونه‌ها ظاهر شدند و همه چیز مثل قبل شد!

مطالب
استفاده از API ترجمه گوگل

مطابق Ajax API ترجمه گوگل، برای ترجمه یک متن باید محتویات آدرس زیر را تحلیل کرد:
http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q={0}&langpair={1}|{2}
که در آن پارامتر اول، متن مورد نظر، پارامترهای 1 و 2 زبان‌های مبدا و مقصد می‌باشند. برای دریافت اطلاعات، ذکر ارجاع دهنده الزامی است (referrer)، اما ذکر کلید API گوگل اختیاری می‌باشد (که هر فرد می‌تواند کلید خاص خود را از گوگل دریافت کند).
بنابراین برای استفاده از آن تنها کافی است این URL را تشکیل داده و سپس محتویات خروجی آن‌را آنالیز کرد. فرمت نهایی دریافت شده از نوع JSON است. برای مثال اگر hello world! را به این سرویس ارسال نمائیم،‌ خروجی نهایی JSON‌ دریافت شده به صورت زیر خواهد بود:

//{\"responseData\": {\"translatedText\":\"سلام جهان!\"}, \"responseDetails\": null, \"responseStatus\": 200}

در کتابخانه‌ی System.Web.Extensions.dll دات نت فریم ورک سه و نیم، کلاس JavaScriptSerializer برای این منظور پیش بینی شده است. تنها کافی است به متد Deserialize آن، متن JSON دریافتی را پاس کنیم:

GoogleAjaxResponse result =
new JavaScriptSerializer().Deserialize<GoogleAjaxResponse>(jsonGoogleAjaxResponse);

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

//ResponseData.cs file
public class ResponseData
{
public string translatedText { get; set; }
}

//GoogleAjaxResponse.cs file
using System.Net;

/// <summary>
/// کلاسی جهت نگاشت اطلاعات جی سون دریافتی به آن
/// </summary>
public class GoogleAjaxResponse
{
public ResponseData responseData { get; set; }
public object responseDetails { get; set; }
public HttpStatusCode responseStatus { get; set; }
}
با این توضیحات، کلاس نهایی ترجمه گوگل ما به شکل زیر خواهد بود:

using System;
using System.Globalization;
using System.IO;
using System.Net;
using System.Web;
using System.Web.Script.Serialization;

//{\"responseData\": {\"translatedText\":\"سلام جهان!\"}, \"responseDetails\": null, \"responseStatus\": 200}

public class CGoogleTranslator
{
#region Fields (1)

/// <summary>
/// ارجاع دهنده
/// </summary>
private readonly string _referrer;

#endregion Fields

#region Constructors (1)

/// <summary>
/// مطابق مستندات نیاز به یک ارجاع دهنده اجباری می‌باشد
/// </summary>
/// <param name="referrer"></param>
public CGoogleTranslator(string referrer)
{
_referrer = referrer;
}

#endregion Constructors

#region Properties (2)

/// <summary>
/// ترجمه از زبان
/// </summary>
public CultureInfo FromLanguage { get; set; }

/// <summary>
/// ترجمه به زبان
/// </summary>
public CultureInfo ToLanguage { get; set; }

#endregion Properties

#region Methods (2)

// Public Methods (1)

/// <summary>
/// ترجمه متن با استفاده از موتور ترجمه گوگل
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public string TranslateText(string data)
{
//ساخت و انکدینگ آدرس مورد نظر
string url =
string.Format(
"http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q={0}&langpair={1}|{2}",
HttpUtility.UrlEncode(data), //needs a ref. to System.Web.dll
FromLanguage.TwoLetterISOLanguageName,
ToLanguage.TwoLetterISOLanguageName
);

//دریافت اطلاعات جی سون از گوگل
string jsonGoogleAjaxResponse = fetchWebPage(url);

//needs a ref. to System.Web.Extensions.dll
//نگاشت اطلاعات جی سون دریافت شده به کلاس مرتبط
GoogleAjaxResponse result =
new JavaScriptSerializer().Deserialize<GoogleAjaxResponse>(jsonGoogleAjaxResponse);

if (result != null && result.responseData != null && result.responseStatus == HttpStatusCode.OK)
{
return result.responseData.translatedText;
}
return string.Empty;
}
// Private Methods (1)

/// <summary>
/// دریافت محتویات جی سون بازگشتی از گوگل
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
string fetchWebPage(string url)
{
try
{
var uri = new Uri(url);
if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
{
var request = WebRequest.Create(uri) as HttpWebRequest;
if (request != null)
{
request.Method = WebRequestMethods.Http.Get;
request.Referer = _referrer;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; ; rv:1.8.0.7) Gecko/20060917 Firefox/1.9.0.1";
request.AllowAutoRedirect = true;
request.Timeout = 1000 * 300;
request.KeepAlive = false;
request.ReadWriteTimeout = 1000 * 300;
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

using (var response = request.GetResponse() as HttpWebResponse)
{
if (response != null)
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd().Trim();
}
}
}
}
}
return string.Empty;
}
catch (Exception ex)
{
Console.WriteLine(String.Format("fetchWebPage: {0} >> {1}", ex.Message, url), true);
return string.Empty;
}
}

#endregion Methods
}
مثالی در مورد نحوه‌ی استفاده از آن برای ترجمه یک متن از انگلیسی به فارسی:

string res = new CGoogleTranslator("https://www.dntips.ir/")
{
FromLanguage = CultureInfo.GetCultureInfo("en-US"),
ToLanguage = CultureInfo.GetCultureInfo("fa-IR")
}.TranslateText("Hello world!");

مطالب
چند نکته کوتاه و عمومی در مورد قبل و بعد از نصب ویندوز 7

- فایل ISO ایی که از سایت‌های این دور و اطراف قابل دریافت است، یک DVD از نوع bootable به شما ارائه نخواهد داد. بنابراین نیاز است تا این قابلیت را فراهم کرد. خود مایکروسافت برنامه سورس بازی را در آدرس زیر جهت تهیه یک bootable DVD یا حتی bootable flash drive از روی فایل ISO دریافت شده ارائه داده است:


- نیاز است تا کلیه افزونه‌ها، کلمات عبور ذخیره شده و غیره‌ی فایرفاکس را بتوان به سیستم جدید انتقال داد. ابزار رایگان و سورس باز MozBackup این‌کار را به بهترین نحو ممکن میسر می‌سازد: +

- پس از نصب، نیاز به صفحه کلید فارسی مرغوب می‌باشد : + و +

- پس از نصب ویندوز 7 ، درایو ویندوز قبلی موجود شما ناپدید شده است! نحوه‌ی رفع مشکل : +

- هر چند در پیدا کردن درایورها از اینترنت مشکلی ندارد، اما بد نیست یکبار هم سیستم را با ابزار رایگانی جهت به روز بودن درایورها بررسی کرد: +

- اگر هنگام کار با Virtual PC مایکروسافت هنگام اتصال به VPN با خطای 721 متوقف شدید، نگران نباشید. با انتخاب گزینه‌ی run as admin این مشکل برطرف می‌شود.

- تنظیم DNS جدید گوگل نیز توصیه می‌شود: +

و یک گجت تقویم فارسی هم کفایت می‌کند : + و یا +

مطالب
کتابخانه‌ی انواع و اقسام مدل‌های داده‌ای

سایت databaseanswers.org قسمتی را دارد تحت عنوان Data models که طراحی دیتابیس بیش از 600 سیستم را جمع آوری کرده است.
از data model سیستم مدیریت ارتباطات



تا data model یک باغ وحش





مطالب
دریافت کتاب از Google books

پیرو مطلب "آیا نمودارهای UML هنوز هم استفاده‌ی صنعتی گسترده‌ای دارند یا خیر؟" در کامنت‌های این مطلب، اکثرا عنوان می‌کردند که از CRC cards استفاده می‌کنند. کتاب معروف CRC cards هم به نام The CRC card book مربوط به سال 1997 است و در کتاب فروشی‌های این دور و اطراف یافت نشد (یا حداقل من نیافتم). اما این کتاب در Google books موجود است.

برنامه رایگان و سورس بازی برای این منظور در CodePlex موجود است که پس از دریافت آدرس کتاب، کل آن‌را از Google books دریافت کرده و یک خروجی pdf و یا تصویری ارائه می‌دهد.



آنچنان سرعت بالایی برای دریافت یک کتاب ندارد اما کار می‌کند (برای دریافت یک کتاب شاید نصف روز معطل شوید).

مطالب
رفع مشکل initializing toolbox هنگام باز کردن یک پروژه وب

بعد از نصب مجموعه AJAX Control Toolkit و همچنین نمونه‌های مشابه موجود برای سیلورلایت و WPF دو مشکل برای VS2008 من رخ داد :

1- از کار افتادن نوار ابزار کنترل‌ها (کار نمی‌کرد! نمی‌شد روی کنترلی کلیک کرد)
2- به ازای باز کردن هر صفحه aspx و امثال آن در IDE ، حدود یک دقیقه در پایین صفحه، سمت چپ نوشته می‌شد، initializing toolbox و بعد هم IDE تقریبا هنگ می‌کرد.

نحوه رفع مشکل:
روی tool box کلیک راست کرده و گزینه reset toolbox را انتخاب کنید.
حدود 10 دقیقه با مصرف CPU نزدیک به 100 درصد همه چیز مرتبط و مثل روز اول می‌شود.
بعد از این، باز کردن فایل‌های پروژه فقط با یک کلیک امکان پذیر شده و مشکل هنگ IDE برطرف می‌شود.

البته VS 2008 خام با پروژه‌های وب خیلی مشکل دارد و عملا بعد از نصب SP1 آن کاملا روان شده و درست کار می‌کند.