Pull to refresh
16
0
Вадим @veitmen

User

Send message

Отображение иерархической структуры данных в WPF с помощью привязки и шаблонов

Reading time17 min
Views25K
Введение

Представление набора данных в виде иерархической структуры (любого уровня вложенности) в WPF осуществляется очень просто. Как правило, для этого используется класс System.Windows.Controls.TreeView и выглядит результат как-то так:


Я продемонстрирую два случая построения такого дерева, отличающихся друг от друга источником данных:
  • База данных, размещённая на MS SQL Server 2008
  • XML-файл.

Читать дальше →

Кручу-верчу, взлететь хочу

Reading time1 min
Views1.1K
Создать эту сборную солянку меня частично сподвиг вчерашний пост про кубика Рубика. Думаю, для развития темы и продвижения в массы пойдет…

image

Я не понимаю, что сподвигает людей на ТАКИЕ действа — может быть излишки свободного времени, или желание выделиться из серой толпы, или… но в любом случае, смотрится это действительно крайне впечатляюще!!!
Читать дальше →

Тестирование Spring приложений. Транзакции в тестировании

Reading time6 min
Views23K
spring-overview

Про полезность подхода TDD (разработка через тестирование, test driven development) не слышал только ленивый или глухой. Но сегодня мы не будем обсуждать всю его полезность и красоту, а также проблемы и недостатки. Сегодня мы попробуем посмотреть, как разрабатывать unit-тесты для spring приложений. Также мы немного тронем ручное управление транзакциями в unit-тестах.
Читать дальше →

Вышел ASP.NET MVC V2 Preview 1 — разбор полетов

Reading time5 min
Views1.2K
imageНа днях MVC 2 Preview 1 стал доступен широкой публике. Этот релиз фреймворка несет в себе весьма значительные нововведения, которые я постараюсь кратко описать в этой заметке. Прежде всего, необходимо заметить, что как и в случае с первой версией, статус “Preview 1” – означает техническую демонстрацию изменений и нового функционала. Ожидается, что заинтересованное сообщество разработчиков протестирует и оценит этот релиз и на основе отзывов в MVC Framework  будут внесены изменения для выпуска Preview 2 и так далее, до финального релиза второй версии. Другими словами, данный релиз не предназначен для использования, что называется, “в production”. Весьма вероятно, что последующие релизы могут содержать более или менее значительные изменения, из-за которых, может быть нарушена совместимость проекта написанного для preview 1 с выпусками preview 2 и так далее.
Читать дальше →

Отличная идея: цветовая индикация ввода пароля

Reading time1 min
Views1.9K
Разработчик Mattt Thompson предложил, на мой взгляд, очень оригинальную и интересную идею цветовой индикации ввода пароля в поля формы. Для введенного пароля считается хэш который представляется в виде трех цветных полосок рядом с полем ввода пароля. Таким образом, во-первых, производится валидация повторного ввода пароля. А во-вторых и это самое главное, зная свой цветовой код вы сможете сразу узнать ошиблись вы или нет при первом вводе пароля.


Более подробно о идее в блоге автора. Попробовать идею на живом примере можно здесь.
Плагин для jQuery с реализацией идеи github.com/mattt/Chroma-Hash доступен по лицензии MIT.

PS: НЛО! Введи такую фичу на Хабре, поддержи оригинальную идею!

Small Basic теперь на русском языке!

Reading time1 min
Views4.7K
С сегодняшнего дня доступна локализованная версия Small Basic. Весь API переведен на русский язык.

Это, бесспорно, радостная новость. Надеюсь, что теперь начинающим программистам будет еще проще осваивать программирование.

smallbasic_ru_mini.png
Читать дальше →

Несколько полезных аспектов для PostSharp

Reading time11 min
Views11K
В .net-е есть несколько серьезных AOP-фреймворков, но ни один их них не «рулит» так как PostSharp. Будучи большим фанатом (а также пользователем) сего фреймворка, хочу представить сообществу несколько «рецептов». Некоторые из них я создал сам, другие нашел в интернете и адаптировал под свои нужды. Тут я покажу несколько самых «сочных» рецептов. А если вы не знакомы с фреймворком или идеологией AOP, могу порекоммендовать вот этот вебкаст. Итак, начнем?

Читать дальше →

Многоуровневое дерево с маркерами, сохраняющее состояние (HTML, CSS, jQuery, Cookies)

Reading time6 min
Views19K
Продолжается развитие темы о многоуровневом дереве с маркерами. Многоуровневое дерево с сохранением состояния узлов
Теперь дерево выросло и окрепло, стало взрослее и помнит выбранный узел и состояние кажого узла в отдельности.
Страницу можно перезагружать, а дерево все равно будет помнить все что вы открыли и выбрали!

Читать дальше →

NetBeans 6.5: бесплатное и быстрое IDE для PHP

Reading time1 min
Views5.3K
Не смотря на то, что я в последнее время программирую на .NET, недавно мне пришлось работать над небольшим проектом на PHP. В связи с этим я занялся поиском удобной, но в тоже время, бесплатной IDE. Конечно, я знаком с Eclipse и PHP Development Tools for Eclipse, но все же хотелось узнать, а есть ли другие бесплатные программы с приличным функционалом. В результате, я вспомнил о NetBeans.
Читать дальше →

Система управления задачами opentodo

Reading time1 min
Views6.3K
Приветствую!

Решил поделиться с сообществом своим проектом.
opentodo — система управления задачами, написанная на языке Python (Django Framework).

Возможно, по тем или иным причинам вам не подходят существующие системы наподобие Basecamp, Мегаплан и т.п. И вы хотели бы использовать более простое решение с открытым исходным кодом, которое вы сможете бесплатно установить на своем сервере в интернете или внутри сети компании, и при необходимости доработать под свои нужды. Тогда opentodo может заинтересовать вас.

Особенности

  • Простой, удобный интерфейс в стиле Gmail
  • Добавление задач, назначение ответственных и сроков выполнения
  • Возможность прикреплять файлы к задачам и проектам — скриншоты, документацию и т.п.
  • Жизненный цикл задач: Новая, Принята, Завершена, Одобрена
  • Цветовое кодирование задач в зависимости от статуса
  • Комментарии к задачам
  • E-mail уведомления
  • Управление пользователями с помощью стандартной панели администрирования Django
  • Разграничение доступа пользователей к проектам

Онлайн демо


Посмотреть в работе можно здесь: demo.opentodo.ru

Где скачать и как установить


Архив для загрузки и инструкция по установке доступны на странице проекта на Google Code:
code.google.com/p/opentodo

Исходный код под управлением системы контроля версий на сайте GitHub:
github.com/mgrigoriev/opentodo

Условия распространения: GNU General Public License v3.

Надеюсь, мой скромный проект для кого-то окажется полезным и поможет в организации работы :)

P.S. Спасибо участникам дискуссионной гугл-группы django russian, а также всем, кто прокомментировал пост на design.leprosorium.ru, за отзывы и ценные советы по улучшению opentodo.

UPD: убедительная просьба — полегче в демо! Анонимность не оправдывает вандализм :)

Внимание! Пароли!

Reading time1 min
Views588
Многие уже, наверное, знают о том, что в ночь с 21 по 22 марта сайт free-lance.ru был подвержен DDoS-атаке. Есть мнение, что также имел место и взлом БД, в результате чего «утекла» вся пользовательская база вместе с логинами/паролями (администрация сайта принудительно сменила пароли всем пользователям, что наводит на мысли). Поскольку аудитория Хабра и Фри-ланс.ру пересекается, мы не исключаем, что у некоторых пользователей совпадают пароли от аккаунтов на обоих сайтах.

Кроме того, среди зарегистрированных на Хабре людей, как это ни печально, достаточно много тех, у кого установлен слишком простой пароль. Это очень плохо. Мы делаем все, чтобы аккаунт каждого пользователя был неприступен, но мы не сможем его полноценно защитить, если пользователь этому препятствует, устанавливая пароль вида «123456» или «qwerty».

В связи с этим настоятельно рекомендуем сменить пароль к вашему аккаунту на Хабре.

Хакеры могут обрушить «умную» электросеть

Reading time2 min
Views907
Специалисты по безопасности предупреждают американское правительство, что внедрение национальной системы «интеллектуальных» электросетей грозит невиданными хакерскими атаками. По их мнению, с помощью простого оборудования стоимостью за $500 хакеры могут произвести атаку, которая приведёт к каскадному отключению.

Интеллектуальные электросети (smart grid) — это новая инициатива властей, которую поддерживают многие IT-компании, в том числе Google. На неё выделено аж $4,5 млрд из свежепринятого плана по стимулированию экономики США. Проект предусматривает снабжение всех домов в стране интерактивными счётчиками, подключенными в единую информационную систему, а также апгрейд энергетической инфраструктуры. Вот два главных преимущества нового подхода:

1. Каждое устройство (будь то стиральная машина или сервер) сможет самостоятельно определять, в какое время электричество имеет наименьшую стоимость (ночью, под утро) и автоматически запускать ресурсоёмкие процессы именно в это время.

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

Однако такая система имеет ряд уязвимостей, считают эксперты. По их мнению, слабым местом являются счётчики, объединённые в одну сеть. По их мнению, хакер может проникнуть в систему и произвести массовую манипуляцию показаний счётчиков. Таким образом, злоумышленник может инициировать одновременный запуск миллионов бытовых приборов по всей Америке. Это сразу же вызовет перегрузку сетей и каскадное отключение подстанций. Проблема в том, что индустрия, которая уже приступила к производству интеллектуальных электросчётчиков (как фирма Itron) до сих пор не выработала общего стандарта безопасности на них. Такое чувство, что они просто торопятся освоить выделенные из бюджета деньги.

Идея: функция форматирования для удобной локализации строк

Reading time2 min
Views1.4K
Проблема: при переводе приложений на другие языки (чаще мы сталкиваемся с русификацией англоязычных продуктов) чаще всего страдает поддержка множественных форм чисел. Например, «1 заметка, 2 заметки, 5 заметки» или якобы универсальное «1 file(s)» и т.д. Дело в том, что во всех языках программирования обычно дело не идет дальше варианта sprintf() или какого-то шаблонизатора, а поддержку множественных форм надо каждый раз программировать ручками: если N = 1, то «1 заметка», иначе «N заметок». А делать это каждый раз лениво. Эту задачу частично решает фреймворк gettext, где есть понятие нескольких вариантов локализованной строки, но это не сильно облегчает жизнь, ибо в одной строке, показываемой пользователю, может быть несколько частей, зависящих от чисел («Найдено 23 файла в 3 папках»), а значит куски строк надо потом все равно склеивать между собой.

Поэтому мне пришла следующая идея: почему бы не придумать какой-то общий формат, микроязык (по аналогии с вполне устоявшимся форматом функции format() или sprintf()), чтобы адресовать эту проблему и упростить в дальнейшем написание локализуемого кода.

Как известно, в разных языках разное количество множественных форм числа. В английском их два («1 file», «many files»). В русском — три («1 файл», «2 файла», «много файлов»). В арабском их вообще, как говорит нам Pootle, аж 6 штук. Поэтому нам нужно иметь возможность задавать прямо в строке набор из нескольких подстрок и параметр, от которого зависит выбор этих подстрок.

Предлагаемый формат подстроки с множественными вариантами:
{%COUNTER%|FORM0|FORM1|FORM2[|FORM3][|FORM4][|...]}

где
%COUNTER% — это некое имя переменной, которое может иметь значения [0,1,2,3,...]
FORM0 — это версия строки для значения COUNTER = 0 (это особый случай, обычно требующий отдельного сообщения)
FORM1, FORM2 и т.д. — это альтернативные варианты текста для каждой множественной формы данного языка; для английского это будет два варианта, для русского — три и т.д.

Пример на английском языке:
{%F%|No files|1 file|%F% files} found in {%D%|0 folders|1 folder|%D% folders}.

Это даст нам следующие конечные варианты строки на выходе при подстановке различных значений %F% и %D%:
%F% = 0, %D% = 1 => No files found in 1 folder.
%F% = 1, %D% = 2 => 1 file found in 2 folders.

Тот же пример строки, переведенной на русский:
{%F%|Не найдено файлов|1 файл найден|%F% файла найдено|%F% файлов найдено} в {%D%|0 папках|1 папке|%D% папках|%D% папках}.

Это даст нам следующие конечные варианты строки на выходе при подстановке различных значений %F% и %D%:
%F% = 0, %D% = 1 => Не найдено файлов в 1 папке.
%F% = 1, %D% = 2 => 1 файл найден в 2 папках.

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

Было бы здорово иметь реализацию подобного микроязыка на разных языках программирования.

Надеюсь, кому-нибудь идея пригодится.

UPD: Результат не заставил себя долго ждать: в данном топике хабраюзер webdew делится реализацией функции на C#, за что ему большое спасибо.

Три парадигмы F#

Reading time16 min
Views21K

Введение


Все, кто так или иначе связан с .NET программированием знает, что уже в следующую версию Visual Studio будет встроен новый язык программирования — F#, который позиционируется как функциональный, чем сразу, так уж повелось, вызывает подозрения в бесполезности. Для того, чтобы показать, что F# — куда больше, чем просто ФЯП (хотя и просто ФЯП — это очень немало), я и написал все нижеследующее.
Эта статья, несмотря на изрядную длину, не претендует на то, чтобы полностью описать всю функциональность языка. Это всего лишь краткий обзор, призванный продемонстрировать широкий спектр возможностей, каждая из которых заслуживает отдельной статьи, и даже не одной.
Кроме того, написав такой пространный пост, я хотел сделать задел на будущее, чтобы в дальнейшем мне не отвлекаться на незначительные вещи базового уровня. Конечно, сразу головой в пруд — это действенно, но и какой-никакой фундамент не помешает.
А уже в следующий раз я приведу пример на волнующую тему пригодности F# для обычной профессиональной программистской деятельности.
И еще раз, под катом действительно МНОГО текста. И не говорите потом, что я вас не предупреждал. =)
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity