Upload large files with ASP.NET MVC and IIS 7


Hi there.

Here is couple of recommendations about uploading large files into ASP.NET MVC application. You have to make two configurational changes:

1. Update your web.config with following directive:

<location path="FileUpload">
 <system.web>
 <httpRuntime executionTimeout="600" maxRequestLength="100000" />
 </system.web>
 </location>

2. Goto IIS Management Panel, open your site and application, double click Request Filtering feature, and pick «Edit Feature Settings…» on the right side panel. You’ll see «Request Limits» panel with «Maximum allowed content length (bytes)» setting.

IIS 7 Maximum request size setting

Command-line style:

appcmd set config "Default Web Site/naotmc" -section:requestFiltering -requestLimits.maxAllowedContentLength:104857600 -commitpath:apphost
Опубликовано в .NET, ASP.NET, ASP.NET MVC, C#

Merge two layers with alpha channels


Recently I’ve faced interesting task and would like to share solution with community. Task sounds quite simple: «merge two images with (a,r,g,b) components (i.e. 24-bit) into single image, preserving right transparency and color values (for example as Photoshop does)». The solution came only after very strong research, because formulas are not as simple as expected to be. Source code example presented below.

///

/// Merges two pixel one on other
///

/// Back pane
/// Front pane
/// Mixed pixel data (color), taking their alpha-channels into consideration
public static Color MergePixels(this Color lb, Color lf)
{
int alpha = lf.A + lb.A * (255 - lf.A) / 255;
if (alpha == 0) return Color.FromArgb(0, Color.White); // both layers are completely transparent, return opaque pixel

// calculate appropriate color values
int r = (lf.A * lf.R + (alpha - lf.A) * lb.R) / alpha;
int g = (lf.A * lf.G + (alpha - lf.A) * lb.G) / alpha;
int b = (lf.A * lf.B + (alpha - lf.A) * lb.B) / alpha;

return Color.FromArgb(alpha, r, g, b);
}

Treat this code as mnemonic because types conversion has been skipped in this example in order to keep it simple.

Tagged with: ,
Опубликовано в .NET, C#

The way to convert generic type into C# string representation


Today I’ve faced with task to convert variable of type Type (wich can be generic) into string exression. For example, I have such variable:
Type someType = typeof(Dictionary);
and I need to have C#-string representation of this type as follows: «Dictionaнy<Int32,String>«. Quite useful during T4-templates generation.
Here is small code snippet for that:

public class GenericTypeFormatter
{
private const char GenericTypeParameterPrefix = '<';
private const char GenericTypeParameterSuffix = '>';
public static string GenericTypeToString(Type type)
{
if (!type.IsGenericType) return type.Name;
Type[] args = type.GetGenericArguments();

StringBuilder joinedTypeArgs = new StringBuilder();
foreach (Type t in args)
{
if (joinedTypeArgs.Length > 0) joinedTypeArgs.Append(",");
joinedTypeArgs.Append(GenericTypeToString(t));
}

return
type.GetGenericTypeDefinition().Name.Replace("`" + args.Length, "") +
GenericTypeParameterPrefix +
joinedTypeArgs +
GenericTypeParameterSuffix;
}
}

Опубликовано в .NET, C#

Ajax Benchmark 2


По просьбам читателей и из собственного любопытства решил обновить данные тестирования скорости работы браузеров с XmlHttpRequest. На этот раз подошел к процессу немного более старательно, благодаря чему выяснилось, что прошлые результаты несколько неверно отражали картину, поскольку, например, опера показала себя такой выдающейся из-за кэширования XML-ответа сервера.
Для каждого браузера было произведено 4 этапа тестирования.
1. Большой XML-ответ (50 Кб) (Big)
2. Маленький XML-ответ (154 б) (Small)
3. Большой XML-ответ без запрещения кэшировавния (Cached-Big)
3. Маленький XML-ответ без запрещения кэшировавния (Cached-Small)
Результаты приведены на диаграмме ниже. Меньшее время (и меньший размер столбика), разумеется отражает лучший результат.
К сожалению не было возможности протестировать IE 7.
Ajax XmlHttp Benchmark
Результаты в числах:
Ajax Benchmark Data

Опубликовано в AJAX

Microsoft.com Site Beta Version Screenshots


Зайдя сегодня на www.microsoft.com и понажимав несколько раз F5 🙂 всплыло окно с предложением поучаствовать в тестировании бета-версии нового сайта Майкрософт.
Интерфейс кардинально изменился, минимум постбэков, весь стиль очень напоминает Windows Vista 🙂 Выглядит всё это примерно так:
Microsoft.com site beta screenshot #1
‘Microsoft.com site beta screenshot #2

Опубликовано в Uncategorized

VS2003 & VS2005 Tooltips


Маленькое знаете ли вы, что… про Microsoft Visual Studio 2003/2005:
Когда у вас открыто порядочное число файлов в проекте и вы хотите закрыть все закладки, лучше щелкнуть по открытой и в контекстном меню выбрать Close All But This, и затем вручную «добить» последнюю закладку. Это сработает намного быстрее чем просто Close All, поскольку студия не будет активировать каждый открытый файл.

Опубликовано в Uncategorized

Новая версия Google Talk!


Сегодня вышло в свет обновление Google Talk (GTalk). Мы теперь умеем:

  1. Передавать файлы (peer-to-peer)
  2. Отправлять голосовую почту (пока пользователя нет в сети, записать GTalk’ом и отправить ему в почтовый ящик)
  3. Отображать в списке контаков возле статуса название композиции, которая в данный момент у вас проигрывается. Поддерживаются iTunes, Windows Media Player, Winamp, Yahoo Music Engine

Список достаточно приятный, чтобы скачать себе эту обновочку. Удачи!

Опубликовано в Gmail & Google Talk, Uncategorized

Windows Live Writer C# Highlighter Plugin


Мой плагин к Windows Live Writer позволяет подсвечивать исходный текст на C#. Как всегда бета, копируйте его в папку установки WLW, поддиректорию plugins (как правило C:\Program Files\Windows Live Writer\plugins). Далее можно пользоваться: меню Insert/C# Code…;

Download: WLWHL.zip, 21 Kb.

Example (created with WLWHL):

for (int i=0; i<10; i++)
{ //writes value of i Console.WriteLine("Value: "+i); /* just a comment */ }

Или вот суперпример:

if (var == true)
    return true;
else if (var == false)
    return false;
else
    return (!false && !true);
Опубликовано в C#

Counties/Regions/Cities database (for developers)


Когда-то по роду деятельности понадобилась мне база данных стран, областей и городов.
Выдрал я её с сайта singles.ru, делюсь архивом.
CSV-файл в формате:

ID страны;ID региона;ID города;название (страны/региона/города)

Скачать файл можно здесь (ZIP, 52 Kb);

Опубликовано в .NET, ASP.NET, Uncategorized

AJAX Benchmark


Сегодня стало любопытна скорость работы различных браузеров по отправке/приему XML посредством Ajax.
Произвёл измерение времени получения при помощи XmlHttpRequest 10 массивов чисел int из 16 элементов. Копию XML приводить лень :).
И вот какие любопытные результаты получились:

0.101 сек — Opera 8.5 (7700)
0.125 сек — Internet Explorer 7.0.5296 beta
0.156 сек — Opera 9 beta (8367)
2.000 сек — Mozilla Firefox 1.5.0.4
4.000 сек — Internet Explorer 6.0.3790

Огромный отрыв оперы неясен, и печально, что мои любимые браузеры настролько ей проигрывают. Но даже визуально работать с сайтами, активно использующими Ajax, на порядок приятнее в Опере.

Похоже в 7 версии IE ситуацию исправили в приятную сторону!

Опубликовано в .NET, AJAX, C#