Флеш ролик и пути
Вопрос: как задеплоить ролик в папку /sub1/sub2/sub3, но для ролика корнем оставался корень сайта?
Ответ: Использовать параметр base в object-embed (пример под катом для ASP.NET)
Вопрос: как задеплоить ролик в папку /sub1/sub2/sub3, но для ролика корнем оставался корень сайта?
Ответ: Использовать параметр base в object-embed (пример под катом для ASP.NET)
Хм.. даже не знаю с чего начать
Ладно, часто возникает задача, когда сервер должен извещать клиента о чем-то важном и полезном. Например - изменение состояния каких-то объектов мониторинга, готовность результатов работы какой-то длительной операции, изменение состояния других клиентов и т д.
Глобально, реализаций этого сценария 2:
О том как реализовать 2-й сценарий для WebObr.NET + Adobe Flex + RTMP речь пойдет ниже:
Сегодня, когда в очередной раз меня спросили о сабже, чтобы не писать руками, спросил у Google, оказывается в MSDN есть прекрасная статья для тех, кто об этом никогда не слышал и столкнулся с одновременным доступом к БД впервые. Кому интересно - знакомимся: http://msdn.microsoft.com/ru-ru/library/cs6hb8k4.aspx
В предыдущей части мы написали парочку своих аттрибутов, с помощью которых описали маппинг C# класса на таблицу базы данных. Дальше возьмем Reflection и Generic механизмы .NET и напишем класс, который будет являться CRUD контроллером наших сущностей. Для того чтобы класс работал побыстрее, парсинг метаданных вынесен в конструктор, и заглушкой в этой реализации является один метод - ResolveConnection(). Его можно сконфигурировать как в NHibernate классом-конфигуратором, либо впрыскиванием зависимости DbProviderFactory и строки подключения, но это вопросы лишь архитектуры, и я думаю у мало-мальски толкового разработчика будет много идей на этот счет.
Как известно, программисты с давних пор пытаются упростить слой работы с базами данных и используют различные ORM. ORM имеют как достоинства так и недостатки, но цель статьи не описать их, а написать простенький ORM с описанием основных подходов в этом деле. Мир .NET пестрит разными реализациями, список доступных ORM для .NET можно посмотреть например здесь: .NET ORM List. Что будет уметь наш маппер? Работать с различными БД (первоначально тестирован на MS SQL и MS Access), использовать как простые так и составные первичные ключи, обеспечивать оптимистическую блокировку при многопользовательской работе, получать значения автоинкрементных полей и счетчиков автоматически. Ну и может являться платформой для собственных изысканий
Что НЕ реализовано: маппинг полиморфных моделей (ни в одном из 3-х подходов), оптимистические блокировки timestamp, маппинг связанных сущностей, поздняя загрузка и т д.
“Есть такие пирамидки… когда в голову ничего не лезет, посмотришь на нее - и сразу нужные мысли находятся!” - м/с Смешарики, Крош.
Так вот, к чему это я: есть такие пользователи, которым все равно какой разделитель целой и дробной части используется в текущей культуре, им понимаешь ли хочеться и точка и запятая одновременно. А желание пользователя очень часто превращается в закон для разработчика после безуспешных попыток переубедить его.
Многострадальным контролом которому выпало имплементировать это требование, оказался представитель Windows.Forms - NumericUpDown.
Все таки заглянул рефлектором в недра BackgroundWorker-а, как и ожидалось он использует AsyncOperation, который использует в свою очередь для синхронизации SynchronizationContext.
Если при использовании обычных потоков мы проверяли свойство Control.InvokeRequired и в зависимости от него вызывали либо сам метод, либо Invoke-BeginInvoke, то класс SynchronizationContext позволяет писать код, не зная какая именно модель потоков будет использована в приложении. Вот небольшой пример использования его с Windows.Forms:
Как-то давно, когда я переходил с .NET 1.1 на 2.0 меня заинтересовал данный вопрос. Разбираясь как это работает в 2.0 родилась вот эта неболльшая статья: здесь. В ней я рассказал как это работает и как синхронизировать доступ “руками”. Однако Microsoft представляет свое видение этой синхронизации, класс BackgroundWorker, как на мой взгяд удобный, но со своими нюансами.
Я не буду лезть Рефлектором в недра этого класса, сейчас мне это не интересно, просто попытаюсь описать пример работы с ним и сравнить его с традиционной работой с потоками.
Столкнулся с тем что люди которые хорошо осведомлены о Generic классах в платформе .NET не знают как реализовать Generic методы. Синтаксис почти такой же как и у класса, + можно использовать ограничение where. Вот простой пример:
public static List<T> MixList<T>(List<T> targetList)
{
List<T> tmpList = new List<T>(targetList);
List<T> destinationList = new List<T>();
Random rnd = new Random(DateTime.Now.Millisecond);
while (tmpList.Count > 0)
{
int pos = (int)(rnd.NextDouble()*(double)(tmpList.Count - 1));
destinationList.Add(tmpList[pos]);
tmpList.RemoveAt(pos);
}
return destinationList;
}* This source code was highlighted with Source Code Highlighter.