Search
Write a publication
Pull to refresh
1
0
Дмитрий @SHadDim

Пользователь

Send message

Таймер для вытяжки

Reading time4 min
Views104K


Во время последнего ремонта квартиры я задумался об улучшении бытового уровня. Одним из осуществленных удобств был таймер для вытяжки в санузле. С одной стороны, это повысило комфорт, поскольку устройство само отключало вентилятор, с другой – положительно сказалось на экономии электричества. Далее изложено описание и реализация таймера. Его легко приспособить для кратковременного включения любой силовой нагрузки мощностью до 1 кВт.
Читать дальше →

Объектный пул и быстрое создание объектов в куче

Reading time5 min
Views18K
Хочу поделится очередным велосипедом собственной сборки на С++. Велосипед умеет быстро создавать и выдавать объекты. В результате получаем скорость создания (не отдачи) объектов на 30% быстрее чем просто с new. Объектный пул — вещь не новая, и в общем — чего о нем и говорить то. Но как говорится — главное в деталях.
Детали

Линейная регрессия на пальцах в распознавании

Reading time7 min
Views39K
Линейная регрессия на пальцахВ задаче распознавания ключевую роль играет выделение значимых параметров объектов и оценка их численных значений. Тем не менее, даже получив хорошие численные данные, нужно суметь правильно ими воспользоваться. Иногда кажется, что дальнейшее решение задачи тривиальное, и хочется «из общих соображений» получить из численных данных результат распознавания. Но результат в этом случае получается далеко не оптимальный. В этой статье я хочу на примере задачи распознавания показать, как можно легко применить простейшие математические модели и за счет этого существенно улучшить результаты.
Читать дальше →

Разработка Windows 8.1 приложений на XAML/С#. Часть 3. Панели инструментов

Reading time6 min
Views8K
image
Windows 8.1 предлагает разработчику новые возможности для создания панелей инструментов в приложениях. Мы рассмотрим эти возможности и создадим навигационную панель и панель действий для приложения из прошлой статьи.
Читать дальше →

Алгоритм проверки на простоту за O (log N)

Reading time2 min
Views201K

Проверка на простоту


Чтобы определить, является ли данное число N простым, безусловно, достаточно написать простой цикл поиска делителей числа N:

bool prime(long long n){ 
	for(long long i=2;i<=sqrt(n);i++)
		if(n%i==0)
			return false;
	return true;
}


Данная функция проверки числа на простоту достаточно эффективна — асимптотика ее работы O (sqrt(N)). Однако, иногда в спортивном программировании нужно уметь проверять число на простоту быстрее.

В некоторых случаях, когда требуется выполнять такую проверку для чисел из некоторого диапазона, то целесообразно воспользоваться алгоритмом Решето Эратосфена.

В данной статье я рассмотрю другой способ выполнять единичные проверки на простоту — тест Ферма.
Читать дальше →

Быстрая, экономная, устойчивая…

Reading time10 min
Views61K

Если вам понадобится алгоритм сортировки массива, который:
  • Работал бы гарантированно за O(N*log(N)) операций (обменов и сравнений);
  • Требовал бы O(1) дополнительной памяти;
  • Был бы устойчивым (то есть, не менял порядок элементов с одинаковыми ключами)

то вам, скорее всего, предложат ограничиться любыми двумя из этих трёх пунктов. И, в зависимости от вашего выбора, вы получите, например, либо сортировку слиянием (требует O(N) дополнительной памяти), либо пирамидальную сортировку (неустойчив), либо сортировку пузырьком (работает за O(N2)). Если вы ослабите требование на память до O(log(N)) («на рекурсию»), то для вас найдётся алгоритм со сложностью O(N*(log(N)2) — довольно малоизвестный, хотя именно его версия используется в реализации метода std::stable_sort().

На вопрос, можно ли добиться выполнения одновременно всех трёх условий, большинство скажет «вряд ли». Википедия о таких алгоритмах не знает. Среди программистов ходят слухи, что вроде бы, что-то такое существует. Некоторые говорят, что есть «устойчивая быстрая сортировка» — но у той реализации, которую я видел, сложность была всё те же O(N*(log(N)2) (по таймеру). И только в одном обсуждении на StackOverflow дали ссылку на статью B-C. Huang и M. A. Langston, Fast Stable Merging and Sorting in Constant Extra Space (1989-1992), в которой описан алгоритм со всеми тремя свойствами.

Так что же это за алгоритм?

Десктопные CRM-2: вам шашечки или ехать?

Reading time14 min
Views60K
Еще пару недель назад эта статья замышлялась в лучших традициях: с группой лидеров и аутсайдеров. Однако это было бы нечестно: компании, которые выбирают CRM, разные. У каждой свои цели и задачи и именно под них покупается, а иногда и дорабатывается CRM. Вообще, в России и СНГ можно насчитать более 20 десктопных CRM, однако большинство из них, увы, не проходят даже первого беглого взгляда и сносятся сразу после установки демо-версии.

Было выбрано шесть сильных решений, которые в посте распределены не строго, но все-таки по мере совокупности их известности и функциональности. Именно эти CRM тестировались нашей компанией для покупки. Забегая вперед, скажу: окончательное решение еще не принято, но фавориты определены.


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

От версионной миграции БД к управлению изменениями в БД

Reading time6 min
Views10K
Спасибо людям, которые не стесняются поделиться своими мыслями и опытом, пусть даже негативным, по многим важным вопросам организации работы с системами БД. Я наткнулся на статью «Версионная миграция структуры БД: почему так лучше не делать», думал прокомментировать ее, но, рассмотрев дату публикации, решил написать свою. Совершенно очевидно, что автор имел собственное представление о значении и смысле слов, вынесенных им в заголовок. А неточное представление привело к тому, что решалась совсем не та задача. На Хабре довольно давно появились статьи, посвященные организации версионной миграции БД. Они легко обнаруживаются поиском по ключевым словам. Вот в этой статье: ВЕРСИОННАЯ МИГРАЦИЯ СТРУКТУРЫ БАЗЫ ДАННЫХ: ОСНОВНЫЕ ПОДХОДЫ приведено отличное введение в терминологию, задачи и основные методики их решения.
Мне хотелось бы на собственном примере рассказать о тех нежданных проблемах, которые без приглашения внезапно возникли перед нашей группой на одной из моих старых работ, и о том, чего нам тогда не хватало, для быстрого и эффективного разрешения ситуации – в общем, тоже негативный опыт — вдруг кому-то пригодится сейчас или в будущем. Несмотря на то, что в нашей компании мы более широко подходим к решению подобных задач, объединяя их под термином «Управление изменениями в БД», я постараюсь оставаться в поле терминологии из статьи выше.

ОПЫТ ПРОШЛЫХ ЛЕТ – О НЕРЕШЕННЫХ ПРОБЛЕМАХ

В 1997 году перед группой разработчиков, куда я только что вошел, была поставлена задача в течение 3 месяцев создать программный комплекс, который реализует автоматизированную технологию, которая должна была лечь в основу бизнес-деятельности всей компании. Дело давнее и, с вашего разрешения, я не буду углубляться в подробности и детали технологии и бизнес-процессов. Важно то, что нужно было обработать и взаимоувязать ежедневно принимаемые данные, поставляемые в значительных объемах из двух независимых внешних источников, накапливать их в хранилище, с минимальными задержками выдавать ответы по произвольным запросам от наших потребителей – менеджеров внутри компании, выполнять прогноз множества показателей на основе ретроспективного анализа накопленных объемов информации. Эта задача была выполнена, была создана типичная внутренняя корпоративная система, которая работает с той поры и до сих дней, успешно видоизменяясь и дорабатываясь в течение всего этого срока.
Читать дальше →

Excel загрузка и выгрузка данных, используя OpenXML

Reading time13 min
Views57K
Решил написать статью, о том, как сделать выгрузку данных в Excel файл по шаблону и считывать данные из Excel.
Началось всё с того, что на работе, дали указание, уйти от MS Office, на бесплатные аналоги.
У нас уже была система выгрузки, основанная на библиотеке “Microsoft.Office. Interop.Excel” и много готовых шаблонов, для выгрузки тех или иных отчётов.
Поэтому надо было найти бесплатную библиотеку, работающую с офисом. И сделать так, чтоб выгрузка работала по той же системе, что и раньше. Ибо переделывать все шаблоны и структуру, не хотелось.
Вот я и наткнулся на OpenXML. И думал, сейчас по быстрому найду решение в интернете и всё готово (т.к. на это было выделено мало времени). Но подходящего решения так и не нашёл, поэтому и решил написать эту статью, для тех у кого будет, такая же проблема.
Саму библиотеку, можно скачать бесплатно с сайта Micrisoft (я использовал в проекте OpenXML sdk 2.5 “ OpenXMLSDKV25.msi ”)
здесь.
После скачивания “OpenXMLSDKV25.msi ”, устанавливаем и заходим в папку
“C:\Program Files\Open XML SDK\V2.5\lib” там лежит библиотека, которая нам понадобится, мы её подключим к проекту (ниже будет описано, как).
Проект был написан на Visual Studio 2010 (Framework 4.0).
Ниже пример шаблона (сделан для теста) “C:\Templates\template.xlsx”.
Читать дальше →

Средства построения графиков для .NET

Reading time4 min
Views105K

Не так давно пришлось столкнуться с тривиальной задачей — найти решение, которое позволит рендерить рисунки графиков для .NET. Сразу оговорюсь, что меня интересовали только линейные графики. Камнем преткновения, который подтолкнул к переделыванию уже существующего решения (это были графики, встроенные в rdlc отчеты), было быстродействие. В целом, к искомому решению были предъявлены такие требования:
  1. Необходимо оставить данную оптимизацию незамеченной для конечного пользователя, следовательно, решение должно быть широко настраиваемым, чтобы, в конечном счете, выглядеть так же, как и предшественник.
  2. Работать быстро (ну понятно, пользователи не любят ждать).
  3. Желательно, быть бесплатным или с открытым исходным кодом. Покупка не стала бы большой проблемой, найди я отличное платное решение, но начать лучше с open source.

Интересно

Пузырьковая сортировка и все-все-все

Reading time5 min
Views641K

Все отлично знают, что из класса обменных сортировок самый быстрый метод – это так называемая быстрая сортировка. О ней пишут диссертации, её посвящено немало статей на Хабре, на её основе придумывают сложные гибридные алгоритмы. Но сегодня речь пойдёт не про quick sort, а про другой обменный способ – старую добрую пузырьковую сортировку и её улучшения, модификации, мутации и разновидности.

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

image: пузырьки

Сделать первый шаг в изучении сортировок

Wireshark — приручение акулы

Reading time10 min
Views1.1M


Wireshark — это достаточно известный инструмент для захвата и анализа сетевого трафика, фактически стандарт как для образования, так и для траблшутинга.
Wireshark работает с подавляющим большинством известных протоколов, имеет понятный и логичный графический интерфейс на основе GTK+ и мощнейшую систему фильтров.
Кроссплатформенный, работает в таких ОС как Linux, Solaris, FreeBSD, NetBSD, OpenBSD, Mac OS X, и, естественно, Windows. Распространяется под лицензией GNU GPL v2. Доступен бесплатно на сайте wireshark.org.
Установка в системе Windows тривиальна — next, next, next.
Самая свежая на момент написания статьи версия – 1.10.3, она и будет участвовать в обзоре.

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

Начинаем плаванье


Для начала захвата достаточно выбрать свой сетевой интерфейс и нажать Start.
Читать дальше →

А вдруг успешным стартапам просто повезло?

Reading time4 min
Views65K
От переводчика: сделал перевод интересной статьи от Vianney Lecroart, 38-летнего французского программиста и предпринимателя. Он размышляет на тему того, что нужно для уcпеха проекта, делится своим опытом.

Когда мне было 25, я присоединился к своему первому стартапу в качестве разработчика. Я был убежден, что если мы создадим привлекательный продукт, люди будут говорить о нем, использовать его, и это принесет нам успех.

С 2000 по 2004 мы получили $ 10 млн., наняли опытных людей и 4 года работали на MMORPG Ryzom. Это было еще до того, как Blizzard Entertainment выпустила World of Warcraft.
Читать дальше →

Собираем удобную документацию для CMake

Reading time9 min
Views12K

Всем привет!

Наверное, каждого, кто хотя бы раз сталкивался с CMake, посещала мысль: почему документация на официальном сайте лежит в виде большущего одностраничного документа, использование которого доставляет больше неудобств, чем должно приносить пользы? Оказывается, нужно выполнить всего несколько шагов, чтобы получить удобную документацию с деревом категорий, списком подразделов и адекватным форматированием всей информации. Подробности сего действа под катом.
Читать дальше →

Тестирование: явный выбор карьеры

Reading time6 min
Views45K
Это перевод статьи.

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

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

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

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

Джон Стивенсон в своей статье пишет: «Да, ХХХ, был таким отличным тестером, но он был вынужден перейти в разработчики, чтобы иметь возможность развиваться в компании» и именно эту фразу я слышал в той или иной форме несколько раз. В нашем случае это был переход либо в разработчики, либо в управляющих проектом. Оба варианта рассматривались в качестве единственного реального прогресса для тестировщика. //Примечание переводчика: не совсем ясно, почему игнорируется путь QA Engineer -> Senior QA Engineer -> Lead QA Engineer. Но оставляю это на совести автора.

Это сделало меня грустным.
Читать дальше →

Что не так с ООП и ФП

Reading time5 min
Views70K
Я не понимаю причины существования бесконечных споров вокруг Объектно-ориентированного (ООП) и Функционального (ФП) программирования. Кажется, что такого рода вещи находятся за пределами человеческого понимая, и о них можно спорить бесконечно. Много лет занимаясь исследованием языков программирования, я увидел четкий ответ, и зачастую я нахожу бессмысленным обсуждение этих вопросов.

Если кратко, то как ООП, так и ФП неэффективны, если доходить в их использовании до крайности. Крайностью в ООП считается идея о том что “все что угодно является объектом” (чистое ОП). Крайностью для ФП можно рассматривать чистые функциональные языки программирования.
Читать дальше →

Простой пример использования WCF в Visual Studio 2010. Часть 2

Reading time5 min
Views27K
Вы читаете вторую часть:

image

Предыдущая часть описывала простейший пример создания службы (service) WCF и её вызова из клиентского приложения. В этой части вы сможете узнать, как можно достичь точно такого же результата, но теперь мы будем настраивать всё вручную. Таким образом, мы переопределим (override) стандартные конечные точки, настроим наши собственные, и в итоге получим точно такое же поведение нашего приложения.
Читать дальше →

Простой пример использования WCF в Visual Studio 2010. Часть 1

Reading time10 min
Views95K
Вас ожидают две части:



Прошло много времени с тех пор, как я написал оригинальный пост Простой пример использования WCF. Это было еще до выхода Visual Studio 2008, и с тех пор многое изменилось. Поскольку множество людей по-прежнему задают вопросы в комментариях к тому посту, давайте посмотрим, что в настоящее время мы должны сделать, чтобы поднять и запустить службу (service), а также обратиться к ней из клиентского приложения.
Читать дальше →

Кроссворд на основе украденной у Adobe базы паролей

Reading time1 min
Views79K
Как известно, больше месяца назад компания Adobe сообщила о хакерской атаке на свои сервера, в результате которой была украдена база данных пользователей, включающая ФИО, зашифрованные пароли и номера банковских карт, а также исходники её главных продуктов. Изначально говорилось о 2.9 миллионах скомпрометированных учетных записей, но реальность оказалась намного страшнее.

Вскоре файл с 130 324 429 уникальными записями весом в 10GB был выложен в открытый доступ и любой желающий смог скачать и покопаться в нем.

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

Полет квадрокоптера на высоте 1км

Reading time2 min
Views231K
Всегда было интересно как мир выглядит с высоты. Что видят птицы, чего не видно на картах googleEarth. Так пришло увлечение мультикоптерами, летать под облаками, фотографировать, снимать видео.


Подробности полета

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity