28 февр. 2009 г.

TransactionScope и ASP.NET

Вещи оказались совершенно несовместимые. При изучении TransactionScope выяснилось, что если в процессе обработки транзакции начинается еще одна транзакция в том же процессе (но например в соседнем потоке), то создается распределенная транзакция и дальше, учитывая что страниц будет открываться сразу и много - получается совершенная каша с фиксацией в непонятный момент времени. Кроме того чтобы это заработало нужно сначала помудрить с правилами разрешения и настройками сервера. Самое плохое, что сначала всё хорошо, проблемы начинаются через несколько минут работы сайта, потому сразу не понятно помогло найденное лекарство или нет. На данный момент пришел к выводу, что оно того не стоит - проще в начале страницы транзакцию запускать и в конце завершать без всяких оберток вручную.

23 февр. 2009 г.

Оказалось нельзя

В блоггере вставлять теги картинок в комментарии... непонятно...

Кто кого переупрямит...

вот понравилась кому-то ветка про Scroll Lock, пишет туда постоянно, ну в общем осталенное "эээ" - самое осмысленное.... Интересно кому это раньше надоест - ему писать сообщения в никуда и он перестанет или мне их постоянно удалять и я включу разрешение комментов только авторизованным пользователям...

22 февр. 2009 г.

Asus EEE PC 701 & проблемы WiFi

Проблема

Сейчас постоянно работаю через WiFi на удаленном рабочем столе, так что все проблемы в сети сразу на лицо. Недавно стал замечать, что временами от ASUS до WiFi роутера пинги идут по 1.5-4 секунды!, в то время как обычно 1 милисекунда, при этом ресурсы полностью свободны: запущен mstsc и нортон антивирус.

Путь решения

Проблема решилась поднятием частоты процессора в 1.5 раза помощью программы для управления частотой процессора на Asus EEE PC eeectl.

Обработка удаления в наследнике DataContext

Проблема: Через LINQ не удаляется объект

При просмотре запросов через DataContext.Log выясняется, что в базе даже запросы на удаление не уходят.

Пример

var db = new DBDataContext();
db.Log = Console.Out;
var q = from obj in db.PublicObjects
        where obj.ObjectID == new Guid("56547e27-be08-4440-962e-8e20bc1fb1ba")
        select obj;

var o = q.Single();
db.PublicObjects.DeleteOnSubmit(o);
db.SubmitChanges();
Запрос нормально отрабатывается, но объект не удаляется и так раз за разом.

Причина

В DataContext для моей БД был определен partial метод DeletePublicObject, при этом базовый объект перестает отрабатывать свою схему удаления
partial class DBDataContext
{
  partial void DeletePublicObject(PublicObject instance)
  {
    instance.OnDetele();
  }
}

Решение

Нужно или самому выполнить MS-SQL комманду для удаления через ExecuteCommand или вызвать метод, который отрабатывает удаление по умолчанию - ExecuteDynamicDelete. Я выборал второй путь, вот что получилось.
partial class DBDataContext
{
  partial void DeletePublicObject(PublicObject instance)
  {
    instance.OnDetele();
    ExecuteDynamicDelete(instance);
  }
}
Вставка и обновление записей обрабатываются аналогично, для них соответственно методы по умолчанию это ExecuteDynamicInsert и ExecuteDynamicUpdate.

16 февр. 2009 г.

Сокращение количества запросов к базе в LINQ

Проблема

Допустим у Вас есть объект LINQ, сопоставленный какой-то таблице, например Site и есть свойства этого объекта, хранящиеся в другой таблице, которые представлены свойством InterfaceSetting.

Вы выбираете сам объект, например так:

var q = from site in DB.Sites

        where site.id == (Guid)Session["SiteID"]
       select site;

CurrentSite = q.Single();
Потом Вы обращаетесь к свойству CurrentSite.InterfaceSettings, при этом LINQ делает еще один запрос в базу, чтобы вытянуть связынный объект.

Путь решения проблемы

Если по логике приложения эта связь используется часто, то логично было бы сразу запрашивать связанный объект в одном запросе с основным. Это можно сделать при помощи LoadOptions объекта DataContext, например так: partial class DBDataContext
{
   partial void OnCreated()
   {
       var load_options = new DataLoadOptions();

       // Настройки интерфейса всегда загружаем сразу вместе с сайтом, одним запросом к базе
       load_options.LoadWith<Site>(site => site.InterfaceSetting);

       LoadOptions = load_options;
   }
}

13 февр. 2009 г.

Microsoft Visual Studio 2008 SP1 удаляет файл .designer.cs при редактировании .dbml

Суть проблемы

При редактировании структуры LINQ to SQL в .dbml файле и сохранении проекта пропадает файл .designer.cs, связанный с этой БД и проект не компилируется, т.к. отсутствует описание класса БД.

Причина проблемы

Ошибка Visual Studio, проявляется когда в соответствующем .cs файле (например db.dbml соответствует db.cs) перед namespace стоят директивы using, например так:
using System;
using System.Linq;
using System.Xml.Linq;
namespace Site_constructor
{ 

Путь обхода проблемы

Обойти проблему можно переместив директивы using внутрь namespace, чтобы стало так:
namespace Site_constructor
{
    using System;
    using System.Linq;
    using System.Xml.Linq;
    using System.Data.Linq;

Восстановление удаленного .designer.cs

Надо нажать правой кнопкой на .dbml файл и выбрать пункт "Run custom tool"

Связанные ссылки

Источник пути обхода Тикет в обратной связи Microsoft

9 февр. 2009 г.

Н-дя...

Вот стоит себе машина перед подъездом... в общем-то стоит уже несколько лет, а вот именно перед этим наверно месяц... Пару дней назад упёрли аккумулятор... ну упёрли... ну ладно, куппил новый, поставил... Сегодня нахожу разбитое лобовое стекло, упёртый шнурок от этого стекла (шнурок что уперли 50 рублей стоит...) + слитый бензин и упертые щетки... Аккумулятор - ну понимаю или себе поставить или толкнуть можно... Щетки понимаю - хорошие щетки новые, тоже относительно дорогие... Бензин - тоже понимаю... Стекло... если бы чтобы в салон залезть или из окна чем-то кинуть - ну то же бы понял ну или кирпич хотябы... - так нет, пробито и приподнято, чтобы вот этот шнурок 50-рублевый вынуть.... вот этого я понять уже не могу....

7 февр. 2009 г.

Формы титулования в царской России

н-дя... а я-то всё думал - зачем нужны отдельные названия брату жены например.... оказалось чтобы быстрее выяснять как надо обращаться к титулированной особе... особенно понравилось «ВАША СВЕТЛОСТЬ» — к младшим детям правнуков императора и их мужским потомкам, а также к светлейшим князьям по пожалованию; При обращении к лицам, имевшим те или иные чины «Табели о рангах», лица равные по чину или нижестоящие были обязаны употреблять следующие титулы (в зависимости от класса): «ВАШЕ ВЫСОКОПРЕВОСХОДИТЕЛЬСТВО» — к лицам в чинах 1 и 2 классов; «ВАШЕ ПРЕВОСХОДИТЕЛЬСТВО» — к лицам в чинах 3 и 4 классов; «ВАШЕ ВЫСОКОРОДИЕ» — к лицам в чинах 5 класса; «ВАШЕ ВЫСОКОБЛАГОРОДИЕ» — к лицам в чинах 6 — 8 классов; «ВАШЕ БЛАГОРОДИЕ» — к лицам в чинах 9 — 14 классов. Кроме того, в России существовали титулы, употреблявшиеся при обращении к членам Императорского дома Романовых и лицам дворянского происхождения: «ВАШЕ ИМПЕРАТОРСКОЕ ВЕЛИЧЕСТВО» — к императору, императрице и вдовствующей императрице; «ВАШЕ ИМПЕРАТОРСКОЕ ВЫСОЧЕСТВО» — к великим князьям (детям и внукам императора, а в 1797—1886 гг. и правнукам и праправнукам императора); «ВАШЕ ВЫСОЧЕСТВО» — к князьям императорской крови; «ВАША СВЕТЛОСТЬ» — к младшим детям правнуков императора и их мужским потомкам, а также к светлейшим князьям по пожалованию; «ВАШЕ СИЯТЕЛЬСТВО» — к князьям, графам, герцогам и баронам; «ВАШЕ БЛАГОРОДИЕ» — ко всем остальным дворянам. При обращении к духовным лицам в России употреблялись следующие титулы: «ВАШЕ ВЫСОКОПРЕОСВЯЩЕНСТВО» — к митрополитам и архиепископам; «ВАШЕ ПРЕОСВЯЩЕНСТВО» — к епископам; «ВАШЕ ВЫСОКОПРЕПОДОБИЕ» — к архимандритам и игуменам монастырей, протоиереям и иереям; «ВАШЕ ПРЕПОДОБИЕ» — к протодиаконам и диаконам.

6 февр. 2009 г.

Пенсионный фонд удивляет

Сегодня утром на сотовый позвонили из пенсионного фонда и вежливо, приятным голосом напомнили что нужно придти подписать бумажки до конца февраля.... так приятно стало, что даже пошел и подписал прямо сегодня же...

Пенсионный фонд удивляет

Сегодня утром на сотовый позвонили из пенсионного фонда и вежливо, приятным голосом напомнили что нужно придти подписать бумажки до конца февраля.... так приятно стало, что даже пошел и подписал прямо сегодня же...

3 февр. 2009 г.

Добавить HTTP-заголовок в asp.net

Response.AddHeader(“Header”, “value”);

Есть еще метод Response.Headers.Add(“Header”, “Value”), но он на asp.net 3.5 вызывает исключение

This operation requires IIS integrated pipeline mode

Так что лучше пользоваться первым методом.

Для чего нужна ScrollLock

Впервые за 16-летний опыт общения с компьютером я наткнулся на использования клавиши Scroll Lock на клавиатуре.

Если Scroll Lock включен, то в Excel при нажатии на курсорные клавиши не курсор двигается по ячейкам, а весь лист относительно экрана, а курсор остается на том месте, где был. Видимо это нужно для удобного обзора таблиц.

2 февр. 2009 г.

Ошибка при создании проекта Database Project в Visual Studio.

При создании проекта Database project стала появляться ошибка

An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

Проблема оказалась в следующем:

При первой попытке создания у меня на компьютере небыло установлено никакой MS-SQL БД и Visual Studio выдавала ошибку подключения. Затем я установил MS-SQL Express, но результат остался прежним – ошибка появлялась, причем данные соединения не запрашивались.

Дело оказалось в том, что Visual Studio видимо первый раз попробовала подключиться к серверу localhost\ без именования экземпляра, это и запомнила, а MS SQL Express устанавливается с именем localhost\SQLEXPRESS

Решение проблемы

Удалил из реестра ветку (delete key)

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio

Машина не заводится…

Пару дней назад завожу машину, не заводится… ладно думаю, аккум сел, поехал на такси. На следующий день прихожу снимать аккумулятор на зарядку и вижу, что его в общем-то упёрли…

TinyMCE, список ссылок

В опциях нужно задать параметр
external_link_list_url="PageWithLinks", который может быть как статическим, так и динамически генерировать нужные ссылки, вот пример того, что должен отдавать файл:

var tinyMCELinkList = new Array(
// Name, URL
["Moxiecode", "http://www.moxiecode.com"],
["Freshmeat", "http://www.freshmeat.com"],
["Sourceforge", "http://www.sourceforge.com"]
);



Опцию нужно задавать при вызове инициализации TinyMCE:

tinyMCE.init({
...
external_link_list_url : "myexternallist.js"
});



Примеры взяты из документации: http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/external_link_list_url

Для asp.net этот параметр задается в списке атрибутов объекта
<tinymce:TextArea ID="PageContent" theme="advanced" ...
external_link_list_url="LinkList.aspx"
runat="server" EnableViewState="False" />

Первые шаги на сноуборде

Как собрался

Получилось почти совершенно непредвиденно - девушка знакомая позвонила и говорит - поехали кататься, ну поехали говорю, в след. выходные... в результате поехали на след. день. До этого сноуборд только рядом видел, сам никогда не стоял.

Первый спуск

Доски и снаряжение взяли в прокат. Пришли на горку как одевать - никто из нас не знает, благо там уже кто-то катался и как одевать доску нам объяснили. Самое интересное, что чуть только на ней привстаешь - тут же начинаешь ехать по склону, так что просто стоять получилось далеко не с первого раза (а уже после нескольких спусков).

Первый раз поднимаюсь на сноуборде

Первый раз стою на ногах (точнее немного еду уже)

Спуск

Ну естественно я шлепнулся... Причем не просто шлепнулся, а хорошенько так еще покувыркался (эх... надо было снимать...) Второй раз тоже, но кувыркался уже меньше... Потом покатались еще и тут настала пора снимать видео

video

Потом с переменным успехом примерно час катания-валяния и самое тяжолое - поднимания обратно в горку (на этой мелкой горке подъемник не работает). И вот наконец-то я научился спускаться и просто горки мне показалось уже мало... взял еще на спуске небольшой ускоритель :)

video

Потом покатались еще немного и пошли домой - уставшие и довольные...