Поскольку я столкнулся с существенными затруднениями в поисках объяснения механизма обратного распространения ошибки, которое мне понравилось бы, я решил написать собственный пост об обратном распространении ошибки реализовав алгоритм Word2Vec. Моя цель, — объяснить сущность алгоритма, используя простую, но нетривиальную нейросеть. Кроме того, word2vec стал настолько популярным в NLP сообществе, что будет полезно сосредоточиться на нем.
Ogoun @Ogoun
.NET + DE/ML
Исследование скорости вызова метода различными способами
7 мин
12KРезультат и выводы для тех кто не любит длинный текст
100.000 вызовов, 20 итераций теста, x86 | 100.000 вызовов, 20 итераций теста, x64 | 1.000.000 вызовов, 10 итераций теста, x86 | 1.000.000 вызовов, 10 итераций теста, x64 | |
---|---|---|---|---|
Прямой вызов | Min: 1 ms Max: 1 ms Mean: 1 ms Median: 1 ms Abs: 1 |
Min: 1 ms Max: 1 ms Mean: 1 ms Median: 1 ms Abs: 1 |
Min: 7 ms Max: 8 ms Mean: 7,5 ms Median: 7,5 ms Abs: 1 |
Min: 5 ms Max: 6 ms Mean: 5,2 ms Median: 5 ms Abs: 1 |
Вызов через отражение | Min: 32 ms Max: 36 ms Mean: 32,75 ms Median: 32,5 ms Rel: 32 |
Min: 35 ms Max: 44 ms Mean: 36,5 ms Median: 36 ms Rel: 36 |
Min: 333 ms Max: 399 ms Mean: 345,5 ms Median: 338 ms Rel: 45 |
Min: 362 ms Max: 385 ms Mean: 373,6 ms Median: 376 ms Rel: 75 |
Вызов через делегат | Min: 64 ms Max: 71 ms Mean: 65,05 ms Median: 64,5 ms Rel: 64 |
Min: 72 ms Max: 86 ms Mean: 75,95 ms Median: 75 ms Rel: 75 |
Min: 659 ms Max: 730 ms Mean: 688,8 ms Median: 689,5 ms Rel: 92 |
Min: 746 ms Max: 869 ms Mean: 773,4 ms Median: 765 ms Rel: 153 |
Вызов через делегат с оптимизациями | Min: 16 ms Max: 18 ms Mean: 16,2 ms Median: 16 ms Rel: 16 |
Min: 21 ms Max: 25 ms Mean: 22,15 ms Median: 22 ms Rel: 22 |
Min: 168 ms Max: 187 ms Mean: 172,8 ms Median: 170,5 ms Rel: 22.7 |
Min: 218 ms Max: 245 ms Mean: 228,8 ms Median: 227 ms Rel: 45.4 |
Вызов через dynamic | Min: 11 ms Max: 14 ms Mean: 11,5 ms Median: 11 ms Rel: 11 |
Min: 12 ms Max: 14 ms Mean: 12,5 ms Median: 12 ms Rel: 12 |
Min: 124 ms Max: 147 ms Mean: 132,1 ms Median: 130 ms Rel: 17 |
Min: 127 ms Max: 144 ms Mean: 131,5 ms Median: 129,5 ms Rel: 26 |
Вызов через Expression | Min: 4 ms Max: 4 ms Mean: 4 ms Median: 4 ms Rel: 4 |
Min: 4 ms Max: 5 ms Mean: 4,15 ms Median: 4 ms Rel: 4 |
Min: 46 ms Max: 55 ms Mean: 50 ms Median: 50,5 ms Rel: 6.7 |
Min: 47 ms Max: 51 ms Mean: 47,7 ms Median: 47 ms Rel: 9.4 |
UPD: новый вывод от mayorovp: лучше всего использовать Expression
UPD: и как подсказал CdEmON, такое исследование было опубликовано на хабре ранее
+9
+26
Котфускация исполняемого .net кода
6 мин
65K(пятница)
Обычно развернутое приложение в файловой системе выглядит как-то так:
Совершенно незащищенное от инструментов типа рефлектора или IlSpy, но что если оно станет таким:
По крайней мере легкий ступор хакеру-неофиту обеспечен. Приятно смотрится,и антивирусы не заинтересуются.
Обычно развернутое приложение в файловой системе выглядит как-то так:
Совершенно незащищенное от инструментов типа рефлектора или IlSpy, но что если оно станет таким:
По крайней мере легкий ступор хакеру-неофиту обеспечен. Приятно смотрится,
+118
SynchronizationContext — когда MSDN подводит
20 мин
64KПеревод
Не знаю почему, но информации об этом новом класса в .NET Framework, действительно немного. Документация MSDN почти ничего не говорит о способах использования SynchronizationContext. Должен сказать, изначально я и сам плохо представлял назначение этого класса и как его использовать. После продолжительного изучения вопроса я наконец понял его назначение и решил написать эту статью чтобы помочь разобраться другим разработчикам.
+3
Аутентификация и авторизация в ASP.NET Web API
5 мин
78KТуториал
Перевод
Вы создали WebAPI и теперь хотите контролировать доступ к нему? В этой серии статей мы рассмотрим несколько вариантов защиты WebAPI от неавторизрованых пользователей. Серия будет охватывать обе стороны, и аутентификацию и авторизацию пользователей.
Первая серия статей дает общий обзор аутентификации и авторизации в ASP.NET Web API. Другие статьи описывают общие сценарии аутентификации для WebAPI.
- Аутентификация — позволяет однозначно идентифицировать пользователя. Например, Алиса входит в систему со своим логином и паролем, и сервер использует эти данные для аутентификации Алисы.
- Авторизация решает может ли пользователь выполнить те или иные действия. Например, Алиса может иметь право на чтение ресурса, но не может создать новый ресурс.
Первая серия статей дает общий обзор аутентификации и авторизации в ASP.NET Web API. Другие статьи описывают общие сценарии аутентификации для WebAPI.
+15
Highly Available кластер RabbitMQ
6 мин
74KТуториал
Знакомимся с RabbitMQ
Переводы на хабре:
RabbitMQ tutorial 1 — Hello World
RabbitMQ tutorial 2 — Очередь задач
RabbitMQ tutorial 3 — Публикация/Подписка
Сразу дополню некоторые недочеты. И кратко повторю основные термины.
Принцип работы архитектуры использующей rabbitMq
+16
«Address Already in Use» или как избежать проблем при завершении TCP соединения
6 мин
38KТуториал
Перевод
Корректное отключение
Для корректного завершения сетевого подключения обе стороны должны послать пакеты с сигналом о завершении (FIN), которые указывают что стороны не будут больше отсылать данные, также каждая сторона должна подтвердить (ACK) получение сигнала о завершении сетевого обмена данными. FIN инициируется когда приложение вызывает метод close(), shutdown() или exit(). После завершения работы метода close() ядро переходит в режим ожидания подтверждения от второй стороны приема сигнала о завершении. Это делает возможной ситуацию когда процесс инициировавший отключение будет завершен прежде чем ядро освободит рессурсы связанные с подключением, и снова разрешит использовать порт для связывания с другим процесоом (в этом случае, при попытке использования порта мы получим исключение AddressAlreadyInUse).
+25
Смена парадигмы программирования на C#, переход на сигналы и очереди (слоты)
7 мин
17KВ этом посте я рассматриваю концепцию и ее реализацию (пока в начальной, но рабочей стадии), которая с недавних пор стала меня сильно привлекать. Опыта в программировании на сигналах у меня ранее не было, поэтому что-то мог упустить или неоптимально продумать, потому и пишу сюда. Надеюсь на квалифицированные отзывы и советы. Несмотря на то что библиотека только начала развиваться, я уже начал ее использование в реальных проектах, на реальной нагрузке, это помогает быстро понять что действительно нужно и куда двигаться дальше. Так что весь приведенный код находится в рабочем состоянии, компилируется и готов к использованию. Единственное все делается на Framework 4.5, но не думаю что это будет для кого-то препятствием, если же идея окажется стоящей, пересобрать под 3.5 проблем не будет.
Устройство обычного приложения на .NET подразумевает что у нас есть набор классов, в классах есть данные, и методы которые эти данные обрабатывают. Также нашим классам надо знать друг о друге, о public методах, свойствах и событиях. То есть у нас сильносвязная архитектура. Конечно мы можем уменьшить связность, построить взаимодействие исключительно через интерфейсы и фабрики (что увеличит размер кода раза в два, и существенно усложнит читабельность), можем убрать открытые методы и стоить все на событиях, придумать можно много чего, но перейти к слабосвязанной архитектуре все равно не выйдет, получим в лучшем случае «среднюю» связанность.
Да, и еще есть такая вещь, которая с развитием процессоров становится все более актуальной, это асинхронность, microsoft делает много хорошего в этом направлении, тот же PLINQ, всякий сахар вроде await, но все это делается все равно в привычных рамках ООП, и нам все еще приходится самим создавать потоки, пускай и в виде тасков, но самим. Нужно отслеживать окончание исполнения задач, чтобы определить когда рессурсы станут ненужными.
В общем все это постепенно надоедает, становится лень писать одни и те же вещи в каждом новом проекте, когда правильнее было бы сосредоточиться на логике задачи.
Что же не так с текущей парадигмой
Устройство обычного приложения на .NET подразумевает что у нас есть набор классов, в классах есть данные, и методы которые эти данные обрабатывают. Также нашим классам надо знать друг о друге, о public методах, свойствах и событиях. То есть у нас сильносвязная архитектура. Конечно мы можем уменьшить связность, построить взаимодействие исключительно через интерфейсы и фабрики (что увеличит размер кода раза в два, и существенно усложнит читабельность), можем убрать открытые методы и стоить все на событиях, придумать можно много чего, но перейти к слабосвязанной архитектуре все равно не выйдет, получим в лучшем случае «среднюю» связанность.
Да, и еще есть такая вещь, которая с развитием процессоров становится все более актуальной, это асинхронность, microsoft делает много хорошего в этом направлении, тот же PLINQ, всякий сахар вроде await, но все это делается все равно в привычных рамках ООП, и нам все еще приходится самим создавать потоки, пускай и в виде тасков, но самим. Нужно отслеживать окончание исполнения задач, чтобы определить когда рессурсы станут ненужными.
В общем все это постепенно надоедает, становится лень писать одни и те же вещи в каждом новом проекте, когда правильнее было бы сосредоточиться на логике задачи.
+1
Библиотека для регистрации и отлова нажатий 'горячих' комбинация клавиш
3 мин
6.3KПод комбинацией клавиш понимается любое количество одновременно нажатых клавиш, нажатых в любом порядке, которое может позволить ваша клавиатура. Для конечного пользователя, однако, не стоит превышать количество более пяти в одной комбинации, т.к. игровые клавиатуры есть не у всех.
Другой вариант добавления, где в качестве комбинации берутся текущие нажатые клавиши, удобно в случае когда пользователь назначает комбинацию сам. В демке есть пример подобной записи комбинаций.
Теперь при нажатии комбинации LeftCtrl+H (или H+LeftControl), мы увидим приветственное сообщение.
Пример использования
HotKeysManager manager = new HotKeysManager();
manager.AddHotKey(new HotKeyCombination(() => { MessageBox.Show("Привет, Хабр!"); }) { Keys.LControlKey, Keys.H });
Другой вариант добавления, где в качестве комбинации берутся текущие нажатые клавиши, удобно в случае когда пользователь назначает комбинацию сам. В демке есть пример подобной записи комбинаций.
manager.AddHotKey(new HotKeyCombination(HookManager.CurrentDownedKeys.ToArray(), () => { MessageBox.Show("Привет, Хабр!"); }));
Теперь при нажатии комбинации LeftCtrl+H (или H+LeftControl), мы увидим приветственное сообщение.
+21
Кластеризация точек на основе регулярной сети
4 мин
17KВ данной статье я рассмотрю два алгоритма, первый — непосредственно кластеризация, второй — построение контура кластера в виде выпуклого многоугольника, прикладная задача для улучшеного восприятия полученного результата.
+32
Исполнение куска кода от имени конкретного пользователя
4 мин
2.9KПостановка задачи
Представим следующую ситуацию, есть каталог A, к которому имеет доступ только пользователь userA, есть каталог B, соответственно доступ к нему имеет только пользователь userB, требуется скопировать файлы из каталога A в каталог B, учитывая что программа может быть запущена пользователями userC, userD, userF,… и т.д.
Набросок решения
В качестве одного из способов решения можно использовать следующую схему:
программа запускается от имени любого пользователя, затем авторизуется под пользователем userA, читает файл в память, возвращается к начальному пользователю, авторизуется под пользователем userB, пишет файл в конечный каталог, возвращается к начальному пользователю. При больших размерах файлов можно придумать разбиение на блоки, но это уже не относится к данной задаче.
+16
Пишем архиватор на основе ZLib в .NET
4 мин
17KЗачем пишем
- потому что удобно иметь свой настраиваемый инструмент, в котором можно вмешаться в архивацию на любом этапе
- потому что это интересно
- потому что многие архиваторы имеющие api, платные, а насчет других см. первый аргумент.
+6
Эффект Кембриджского университета
2 мин
42KПеремешивание букв. Эффект Кембриджского университета.
По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы чиатем не кдаужю бкуву по отдльенотси, а все солво цликеом.
Тема очень старая и гуляет по интернетам давно, но везде приводится как пример один и тот же текст, мне было интересно попробовать данный эффект на собственных текстах, в результате чего и родилась эта программа.
+45
+25
Работа с мониторами через WinAPI
2 мин
7.2KВозможности
Используя нижеприведенные классы можно получать информацию о количестве мониторов, их параметрах, а также задавать рабочие области.
Зачем нужно
В частности мне понадобилась подобная функциональность для создания своей панели в WPF, наподобие панели задач. Собрал информацию по интернету и оформил в удобном для себя виде.
Использование
В своей программе пишем:
DisplayDispatcher dispatcher = new DisplayDispatcher();
При этом автоматически произойдет поиск мониторов и определение их параметров. Выведем данные в ListBox:
for (int i = 0; i < dispatcher.Count; i++)
lbMonitors.Items.Add(String.Format("Экран #{0} ({1}x{2}) {3}",
i, dispatcher[i].ScreenWidth, dispatcher[i].ScreenHeight,
((dispatcher[i].Availability) ? " Основной" : "")));
Кроме ширины и выоты также доступны данные о занимаемой области на виртуальном рабочем столе (MonitorArea) и рабочей области на нем же (WorkArea).
+14
Мгновенная передача данных в сети
1 мин
2.4KD-Link обявили о создании первых сетевых интерфесов работающих на сцепленных частицах. Данная технология позволит создавать сети подобные p2p с мгновенной передачей данных. Собственно скорость передачи данных будет ограничена только скоростью внутренних компонентов.
Тестовая установка позволила произвести передачу по сети со скоростью 300Мб/с. Но главным показателем технологии является не скорость, а дальность передачи, теоретически даже если принимающий компьютер будет находиться в другой галактике, скорость и стабильность передачи останутся неизменными.
Кратко технологию можно описать так, принимающий и передающий источники при производстве облучаются расщепленными когерентными частицами, что приводит их в связанное состояние, затем к ним подключается питание и они осуществляют взаимную синхронизацию(т.к. с течением времени удаленные связанные частицы рассинхронизируются, требуется их внешняя поддержка в таком состоянии). После этого устройство готово к использованию, к контейнеру со связанными частицами подводится читсет КМОДа(квантовый модулятор/деводулятор), через который и осуществляется передача данных.
Почитать:
Откуда все пошло
Квантовая телепортация
Разжевано про сцепленные частицы
Тестовая установка позволила произвести передачу по сети со скоростью 300Мб/с. Но главным показателем технологии является не скорость, а дальность передачи, теоретически даже если принимающий компьютер будет находиться в другой галактике, скорость и стабильность передачи останутся неизменными.
Кратко технологию можно описать так, принимающий и передающий источники при производстве облучаются расщепленными когерентными частицами, что приводит их в связанное состояние, затем к ним подключается питание и они осуществляют взаимную синхронизацию(т.к. с течением времени удаленные связанные частицы рассинхронизируются, требуется их внешняя поддержка в таком состоянии). После этого устройство готово к использованию, к контейнеру со связанными частицами подводится читсет КМОДа(квантовый модулятор/деводулятор), через который и осуществляется передача данных.
Почитать:
Откуда все пошло
Квантовая телепортация
Разжевано про сцепленные частицы
+13
25 кадр у Фримена
1 мин
3.7KПросматривая очередную серию мультов Фримена заметил мелькание чего-то похожего на QR код, заинтересовался, нашел этот кадр:
Оказалось действительно код. Нашел онлайн декодер от гугла, который и помог восстановить исходное сообщение:
Сакральный смысл парадокса с котом Шредингера состоит в обратном.
Обычно речь идет о том, что в отсутствие наблюдателя кот находится в суперпозиции, в которой он одновременно наполовину жив, а наполовину мертв.
Такая вот вирусная реклама для it'шников.
Кому интересно можете найти сами, на видео, отмотав к 01:59.
P.S. Это статья не про Фримена и поиск смысла в его мультиках. А просто про интересный ход, про скрытие информации в видеопотоке, что используется почти в каждой его серии.
Оказалось действительно код. Нашел онлайн декодер от гугла, который и помог восстановить исходное сообщение:
Сакральный смысл парадокса с котом Шредингера состоит в обратном.
Обычно речь идет о том, что в отсутствие наблюдателя кот находится в суперпозиции, в которой он одновременно наполовину жив, а наполовину мертв.
Такая вот вирусная реклама для it'шников.
Кому интересно можете найти сами, на видео, отмотав к 01:59.
P.S. Это статья не про Фримена и поиск смысла в его мультиках. А просто про интересный ход, про скрытие информации в видеопотоке, что используется почти в каждой его серии.
+77
+2
Индексирование и поиск с помощью Xapian в .NET
3 мин
4.2KЕсли слово Xapian вам незнакомо, рекомендую ознакомиться с небольшой статьей.
Вкратце же, Xapian — представляет собой написанный на с++ набор инструментов для индексирования текстовой информации, с возможностью поиска по базе индексированной информации. Для работы не требует установленного сервера, достаточно наличия его библиотек. Может обрабатывать огромные массивы информации(проверено до 1.5Тб), измеряемой миллионами документов. Является конкурирующим продуктом Sphinx и Apache Lucene.
Мной он был выбран из этих трех продуктов за возможность использования из .Net.
Вкратце же, Xapian — представляет собой написанный на с++ набор инструментов для индексирования текстовой информации, с возможностью поиска по базе индексированной информации. Для работы не требует установленного сервера, достаточно наличия его библиотек. Может обрабатывать огромные массивы информации(проверено до 1.5Тб), измеряемой миллионами документов. Является конкурирующим продуктом Sphinx и Apache Lucene.
Мной он был выбран из этих трех продуктов за возможность использования из .Net.
+24
Информация
- В рейтинге
- 5 426-й
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Backend Developer, Software Architect
Senior
От 600 000 ₽
C#
Microsoft SQL Server
.NET Core
WPF
.NET
ASP.Net
Database
MongoDB