February 2009 Blog Posts

WPF Search Text Box

26 February 2009 |

Содержательная статья о том как сделать на WPF прикольный контрол: SearchTextBox. Если вдруг кому надо, но было лень, или кому надо, но он этого не осознавал смотрите: WPF Search Text Box.

Microsoft Free Hosting

25 February 2009 |

Мы давно говорили (Microsoft + Developer + Web = Challenge) и писали в анкетах Microsoft, что если они хотят продвигать свои технологии Web разработки, то разумней всего дать людям бесплатный хостинг, в особенности студентам.

Мы далеки от мысли что Microsoft прислушилась ко мне... Идея витала в воздухе и вот она материализовалась (Бесплатный веб-хостинг для студентов). Только криво, не масштабно, без пиара, и судя по всему не на постоянной основе, а в виде рекламной акции, полумера получилась ни туда и ни сюда...

WPF: Disable ImageButton

18 February 2009 |

При разработке пользовательского интерфейса часто применяют кнопки на которых вместо/вместе с надписями присутствуют картинки. В этом не трудно убедится, если посмотреть на ToolBar программы в которой вы читаете эту заметку.

Если такой элемент управления важен, то: как в WPF его можно создать? Обычно чтобы получить кнопку с картинкой делают что-то вроде этого:
<Button x:Name="standartButton">
  <Image Source
="/WpfImageButton;component/help.png"/>
</Button>
Все логично, просто и гибко... Но за гибкость приходиться расплачиваться необходимостью время от времени уделять внимания деталям и что еще хуже прыгать между уровнями абстракции.

На практике часто бывает что кнопку нужно заблокировать, для этого у нее или одного из  контейнеров ее содержащих устанавливается значение свойства IsEnabled в false. Что в этом случае произойдет с кнопкой и что как вам кажется должно произойти? Логичный ответ: картинка должна изменить свой внешний вид, к примеру стать серой, и не реагировать на клик мыши. Реагировать на клик кнопка не будет, а вот серой не станет и никак внешне не будет отличается от кнопки в состоянии Enabled. Вот о том как сделать картинку серой будет рассказано в этой заметке.

Метод как сделать кнопку серой описан в: Rendering disabled ('grayed out') image buttons in WPF его мы и будем использовать. Целевое поведение универсально и часто требуется на практике, не очень здорово если каждый раз для его реализации нужно будет писать несколько десятков строк кода.

Раньше, до появления WPF, стандартной практикой было создания своего контрола с добавлением поддержки такого поведения. Наследование не всегда хороший способ, использованием Attached Properties можно добиться того же эффекта. Исходный код примера реализации обоих подходов: WpfImageButton.zip. Ленивые могут посмотреть видео с комментариями.

Religion In Our Country

17 February 2009 |

Светское государство — государство, которое регулируется на основе гражданских, а не религиозных норм; решения государственных органов не могут иметь религиозного обоснования.
... «светскость» определяется не наличием противоречий с религиозными установками, а свободой от таковых.
Wikipedia

Указ также предусматривает, что в священный для мусульман месяц Рамадан продажа алкоголя будет полностью запрещена.
Алкоголь в Чечне будут продавать два часа в сутки

Государство гарантирует равенство прав и свобод человека и гражданина независимо от пола, расы, национальности, языка, происхождения, имущественного и должностного положения, места жительства, отношения к религии, убеждений, принадлежности к общественным объединениям, а также других обстоятельств.
Конституция РФ

Возникает пара очевидных вопросов:
Чеченская республика входит в состав РФ?
РФ это светское государство?

Чему верить, тому что видишь вокруг или тому что написано в конституции?

Проекция Отношения

13 February 2009 |

Высказывая в блоге точку зрения на тот или иной вопрос часто использую ссылки на публикации других авторов, иллюстрирующих мысль. К примеру в статье Public Judgement использовалась ссылка на сайт писателя Виктора Шендеровича. Мне бы не хотелось чтобы читатель на основе ссылки делал выводы об отношение к автору или к его творчеству в целом.

К примеру мне бы не хотелось, чтобы складывалось впечатление что я согласен и одобряю к примеру вот эту статью: Угол отражения, мне кажется очевидным что в ней сознательно идет демонстрация одних и сокрытие других сторон, передергивание фактов и т.д. По данному вопросу у меня есть заметка: Palestine Vs Israel, кажется она не очень совместима со статьей Угол отражения. Это только пример, то же касается и других ссылок встречающихся в блоге.

С протокольными вопросами кажется все.

Вот был недавно любопытный опыт: попытался читать новости агентств BBC и CNN, как региональные(для России) так и общемировые. Читал неделю и бросил. Про наши СМИ было сказано достаточно, так вот продукция BBC и CNN по качеству не сильно отличается, от отечественного продукта. Получать информацию из этих источников (наши СМИ, BBC, CNN) это значит получить заведомо и сознательно искаженную картину мира.

Public Judgement

11 February 2009 |

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

Какая замечательная идея, в этом очень сильно должно быть заинтересованно телевидение, как бы было замечательно посмотреть заседание типа: Депутат Абельцев против писателя Шендеровича, ни надо никаких актеров, никаких сценариев все на халяву. А ведь были времена когда в России был по настоящему публичный суд, только это было давно, еще до революции. Но такого не может быть, потому что не может быть, потому что яблоко падает сверху вниз, под действием законов гравитации, потому что если убрать кубик из основания пирамидки, то она очень даже может и разрушиться...

Sleep Of Developer

11 February 2009 |

Что то в этом есть, что то не очевидное "типа не буду", что то более глубокое есть в этой аналогии: Не будите спящего программиста.

Aphorism: Idea On Air

10 February 2009 |

История GreatWords.ru — сайта, где можно найти и записать умные слова из книг, краткие гениальные высказывания — началась с моей простой фразы: «Давно хочу сделать сайт, где буду записывать все цитаты. Книг читаю много… всё, что выписываю, теряется».
(Великие слова)

Идея витает в воздухе и через некоторое время начинают появляться реализации. Вот так выглядела первая идея уже в моем исполнении:

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

Последнюю реализацию можно увидеть в правом верхнем углу этого блога или почитать: (jQuery + Jsonp + WCF и Aphorism Gadget Evolution).

Разработчики GreatWords.ru подошли к вопросу более основательно, источник афоризма, теги... Разные цели, в моем случае исследовательский/учебный проект для себя. Но меня удивил интерес читателей блога к гаджету, поэтому появление других проектов на эту тему закономерно.

Pool, Java & Internet

10 February 2009 |

Иногда хочется расслабиться/отвлечься простая online игра может стать хорошем выбором. Речь идет о бильярде, простом бильярде в который вы можете поиграть как с компьютером, так и с товарищем. Т.е. ко всему прочему это еще и способ общения.

Конечно суть заметки не только в том чтобы рассказать: вот есть бильярд в который можно поиграть. В проекте http://poolonline.ru/ бросилась в глаза реализация, наверное в первый раз вижу красивый, удобный в использование интерфейс сделанный на Java в виде Rich Internet клиента. Java имеет перед .NET серьезное идеологическое преимущество: многоплатформенность (mono - не считается...). Увидев такое достойное приложение решил посмотреть, как оно будет работать под Linux. Еще перед тем как пробовать решил: если запустится то напишу о том что Java все еще жива и сильна, если нет... то, что многоплатформенность у Java не сильно отличается от .NET. Если исползовать основные библиотеки, то приложение написанное как на Java так и на .NET запустятся на Linux, с поправкой на тестирование... но это только теория, а на практике пишут под какую то конкретную платформу. Ах да забыл сказать на Linux бильярд не запустился...

Хороший бильярд понравилось, если нет работы, а думать не можется, то можно поигарть...

Film: Office Space

08 February 2009 |

Недавно посмотрел фильм офисное пространство (комедия), очень понравился. Есть мнение что читателям блога тоже понравиться. Экономический кризис лучшее время для просмотра этого фильма. От просмотра фильма максимум удовольствия получать люди работавшим в крупных компаниях (IBS, ОТР, РБК...) и чья работа связана с информационными технологиями.

Питер Гиббонс после неудачного сеанса гипноза становится человеком с поменявшимися жизненными взглядами. Его новая философия - "забей на работу". Если он и показывается теперь в офисе, то только для того, чтобы играть в компьютерные игры, нарушать внутренний распорядок, а также говорить своему боссу, куда тому следует засунуть свои идиотские распоряжения. Но подобные действия, как ни странно, только поднимают его авторитет, зарплату и должность. Используя новые возможности, он разрабатывает схему присвоения чужих денег. (Офисное пространство)

MSSQL 2008 FILESTREAM: Dark Side

08 February 2009 |

Относительно недавно в блоге были заметки: SQL Server 2008: FILESTREAM и Upload Large Files Over HTTP, в которых рассказывалось о новом типе данных в SQL Server 2008 - FILESTREAM. Напомним, что такое FILESTREAM:

Хранилище FILESTREAM объединяет компонент SQL Server Database Engine с файловой системой NTFS, размещая данные больших двоичных объектов (BLOB) типа varbinary(max) в файловой системе в виде файлов. С помощью инструкций Transact-SQL можно вставлять, обновлять, запрашивать, выполнять поиск и выполнять резервное копирование данных FILESTREAM. Интерфейсы файловой системы Win32 предоставляют потоковый доступ к этим данным.

Несмотря на то, что заметки основывалось на практике важные ограничения/особенности использования этого типа данных не были описаны, они стали очевидны после некоторого время использования тестового приложения.

Первый вопрос: У Вас есть таблица в которой один из столбцов типа FILESTREAM. Что произойдет с файлом соответствующем записи если ее удалить обычной SQL командой DELETE? ..... Нет не правильно файл не удалиться, он останется на диске: Базовые файлы удаляются сборщиком мусора FILESTREAM. Этим вопросом заинтересовался, когда заметил сокращение свободного места на диске, потому что использовал FILESTREAM для хранения больших файлов. Так когда же сработает сборщик мусора? И как его принудительно запустить? Ответы на эти вопросы есть в статье (Configuring FILESTREAM Garbage Collection):

All FILESTREAM file operations are mapped to a Log Sequence Number (LSN) in the database transaction log. As long as the transaction log has been truncated past the FILESTREAM operation LSN, the file is no longer needed and can be garbage collected. (FILESTREAM Storage in SQL Server 2008)

Чтобы принудительно запустить сборщик мусора FILESTREAM, достаточно выполнить набор команд:

DBCC SHRINKFILE('DataBaseName_log', 1)
CHECKPOINT

Проблема конечно не приятная, но понимаемая и решаемая.

Работа с FILESTREAM поддерживает транзакционность в рамках базы данных, одно из основных преимуществ FILESTREAM, но какой ценой это достигается. Обновление данных типа FILESTREAM выполняется не совсем очевидным способом и хуже того этот механизм нельзя изменить на уровне API. Что произойдёт физически с файлом, если в конец сохраненного файла добавить ещё данных? Подумали?.... Попробуйте подумать... Ответ:

Filestream does not currently support in-place updates.  Therefore an update to a column with the filestream attribute is implemented by creating a new zero-byte file, which then has the entire new data value written to it.  When the update is committed, the file pointer is then changed to point to the new file, leaving the old file to be deleted at garbage collection time. (Appending Data Using SQL 2008 Filestream)

Т.е. в результате обновления физически создается еще один файл, старый файл при этом остается до тех пор пока не будет выполнен сборщик мусора FILESTREAM. Т.е. ко всему прочему возвращаемся к первому вопросу. Если файл большой(несколько гигабайт), то операция создания нового файла сама по себе ресурсоемка. Вот чем приходится расплачиваться за транзакционность...

Caramel

04 February 2009 |

Ешьте дети карамель будете здоровы

Вместе Победим - Кого?

02 February 2009 |

- Я очень люблю ПЖ!
- А я его ещё больше ку!

...в знак поддержки политики Кремля на улицы вышли и "единороссы", которые стали инициаторами всероссийской акции "Народ! Медведев! Путин! Вместе победим!". (В России проходят массовые акции в связи с кризисом)

Политическая власть — способность одного человека или группы лиц контролировать поведение граждан общества, исходя из общенациональных или общегосударственных задач. (Wikipedia)

Люди выходят на митинг в знак поддержки политики Кремля. Какой смыслом в этих словах. Поддерживать политику власть держащих, тех кто обладает властью, защитить их, от кого? Как и кто может обидеть власть, да еще так что ее надо защищать, это просто противоречит самому понятию власти. Забавный феномен, обратимся к истории, где и когда еще встречалось или встречается подобное.

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

Америку открыл..., все всё понимают, до такой степени, что даже перестают замечать когда это слышат. Зачем об этом говорить... - чтобы услышав подобную новость, не пропустить ее мимо, а немножко задуматься, улыбнуться или огорчиться...