Pull to refresh
18
0
Михаил Бринчук @Thecentury

User

Send message

Корзинка с сюрпризами — cпасите наши push'и

Reading time5 min
Views2.7K
TLDR: Сделал набор скриптов автоматизации миграции Bitbucket репозиториев с Mercurial на Git.

В один непрекрасный день мой любимый хостинг репозиториев Bitbucket объявил о скором прекращении поддержки репозиториев Mercurial в пользу Git, после чего все Mercurial репозитории будут удалены.

image
Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments10

.NET Core с блокнотами Jupyter — Preview 1

Reading time3 min
Views9.4K
Когда вы думаете о блокнотах Jupyter, на ум, вероятно, приходит код Python, R, Julia или Scala, а не .NET. Сегодня мы рады сообщить, что вы можете писать .NET-код в Jupyter Notebooks.

Try .NET развился, чтобы поддерживать больше интерактивных возможностей в Интернете с помощью сниппетов исполняемого кода, генератора интерактивной документации для .NET Core с глобальным инструментом dotnet try. Ну а теперь .NET доступен в Jupyter Notebooks.

Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments6

Веб-приложение на Kotlin + Spring Boot + Vue.js

Reading time40 min
Views46K
Добрый день, дорогие обитатели Хабра!

Не так давно мне представилась возможность реализовать небольшой проект без особых требований по технической части. То есть, я был волен выбирать стек технологий на своё усмотрение. Потому не преминул возможностью как следует «пощупать» модные, молодёжные многообещающие, но малознакомые мне на практике Kotlin и Vue.js, добавив туда уже знакомый Spring Boot и примерив всё это на незамысловатое веб-приложение.
Посмотреть, что из этого вышло
Total votes 19: ↑18 and ↓1+17
Comments21

Как я учил змейку играть в себя с помощью Q-Network

Reading time3 min
Views12K

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


Обучение с подкреплением


В машинном обучении RL(Reinforcement Learning) достаточно сильно отличается от других направлений. Отличие состоит в том, что классический ML алгоритм обучается уже на готовых данных, в то время как RL, так сказать, сам создает себе эти данные. Идея RL состоит в том, что помимо самого алгоритма, который называют агентом, существует среда(environment), в которую этот агент и помещается. На каждом этапе агент должен совершать какое-то действие(action), а среда отвечает на это наградой(reward) и своим состоянием(state), на основе которого агент и совершает действие.

Читать дальше →
Total votes 22: ↑21 and ↓1+20
Comments12

Как использовать HTTP заголовки для предупреждения уязвимостей

Reading time7 min
Views117K


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

Безопасность не менее важна, чем содержание или поисковая оптимизация сайта. Тысячи сайтов взламываются из-за ошибок в конфигурации или недостаточной защиты. Если вы владелец сайта или специалист по защите информации, и интересуетесь защитой сайта от кликджекинга, внедрения кода, уязвимостей MIME типов, XSS-атак и т.д., то данная инструкция будет вам полезна.

В этой статье я расскажу о разных заголовках HTTP для использования с различными веб-серверами, сетевой периферией или сетями доставки контента, чтобы повысить уровень защищенности сайта.
Читать дальше →
Total votes 39: ↑34 and ↓5+29
Comments28

История зрения или миф о «нечленимой сложности»

Reading time12 min
Views46K
Факты не перестают существовать
оттого, что ими пренебрегают.

Олдос Хаксли

Попытаюсь развеять «миф о нечленимой сложности» на примере глаза. Его часто любят приводить в пример креационисты.

Основная претензия звучит так: «Если глаз создала эволюция, то как она смогла создать столь сложный инструмент без промежуточных форм? Какая польза в половине глаза?» (есть ещё вариант с половиной крыла, по сути, мало отличающийся от этого вопроса).

Я далёк от биологии, но ответ на этот вопрос могу попробовать дать, поскольку это не так сложно, как кажется, и потому, что «ничто в биологии не имеет смысла, кроме как в свете эволюции», как сказал Ф.Г. Добржанский. Только с этой позиции «необъяснимое», на первый взгляд, биологическое явление становится простым и логичным.

Вопреки мнению многих людей, наши организмы — далеко не идеал совершенства, они имеют множество недостатков. У нашего вида, например, сложное строение ступни (хотя мы давно не живём на деревьях), от которого мы получаем кучу травм; икота, доставшаяся нам от наших предков — рыб и амфибий, возвратный гортанный нерв, огибающий дугу аорты и возвращающийся назад (у жирафа он достигает длины 4 метров вместо нескольких сантиметров — я бы выгнал такого конструктора). У мужчин семенные канатики также делают петлю, огибая мочеточники. Ну и много других забавных вещей.

Отрывок из книги «Самое грандиозное шоу на Земле»
Глаз позвоночного в своем лучшем случае, скажем у ястреба или человека, это превосходный точный инструмент, способный на чудеса высокого разрешения, конкурирующий с лучшими приборами от Цейсса и Никона. Будь это не так, Цейсс и Никон напрасно бы тратили время, производя фотографии высокого разрешения для наших глаз. С другой стороны, Германн фон Гельмгольц, великий германский ученый 19 века (вы можете назвать его физиком, но его вклад в биологию и психологию еще больше), сказал о глазе:

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

Одна из причин, по которым глаз кажется лучше, чем его оценил физик Гельмгольц, в том, что позже мозг выполняет удивительную работу по улучшению изображения, как ультра-сложный автоматический фотошоп. Что касается оптики, человеческий глаз достигает качества Цейсса/Никона только в фовеальной области — центральной части сетчатки, которую мы используем для чтения. Когда мы сканируем сцену, мы передвигаем фовеальную область в разные части изображения, видя каждую в максимальной четкости и деталях, и мозговой «фотошоп» обманывает нас, заставляя думать, что мы видим всю сцену в одном и том же качестве детализации. Высококачественные Цейссы и Никоны между тем на самом деле отражают всю сцену с почти одинаковой четкостью.

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

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

Но теперь представьте, что я скажу вам, что фотоэлементы глаза направлены назад, в обратную сторону от сцены, на которую смотрят. «Провода» соединяющие светочувствительные клетки с мозгом идут через всю поверхность сетчатки, так что световые лучи должны пройти через ковер собравшихся проводков перед тем, как попасть на светочувствительные клетки. Это неразумно, но все и того хуже. Одно из последствий того, что светочувствительные клетки направлены назад — то, что провода, передающие данные от них, должны как-то пройти через сетчатку назад к мозгу. В глазу позвоночного они собираются к особому отверстию в сетчатке, где ныряют сквозь нее. Отверстие, заполненное нервами, называется слепым пятном, поскольку оно не видит, но «пятно» — это слишком мягко сказано, поскольку оно весьма велико, скорее, как слепая область, что тем не менее не является слишком большим неудобством для нас благодаря «автоматическому фотошопу» мозга. И снова, верните его [инструмент] назад, он не просто плохо спроектирован, это дизайн полного идиота.

Или нет? Будь это так, глаз бы ужасно видел, но это не так. Он, в действительности, очень хорош. Он хорош потому, что естественный отбор, как чистильщик работая над бесчисленным множеством мелких деталей, прошелся после большой исходной ошибки установки сетчатки задом наперед и спас высококачественный точный инструмент. Это напоминает мне сагу о телескопе Хаббла. Вы помните, он был запущен в 1990 году и, обнаружилось, что он имеет крупный дефект. Из-за незамеченной ошибки в калибровке аппарата, когда его полировали на земле, основное зеркало хотя и немного, но [функционально-] значимо отклонялось от нужной формы. Дефект обнаружился после того, как телескоп был запущен на орбиту. Решение было смело и изобретательно. Астронавты, доставленные на телескоп, успешно смонтировали на нем нечто вроде очков. После этого телескоп заработал очень хорошо, и три последующих сервисных миссии обеспечили дальнейшее улучшение. Я хочу сказать, что даже крупный дефект конструкции, грубая ошибка может быть скорректирована последующей починкой, искусность и тонкость которой при соответствующих обстоятельствах совершенно компенсируют исходную ошибку. В эволюции в основном крупные мутации, даже если они могут привести к улучшению в правильном направлении, почти всегда требуют много дальнейших поправок, операций по зачистке множеством мелких мутаций, возникающих позднее и получающих преимущество при отборе, поскольку сглаживают острые кромки, оставленные исходной крупной мутацией. Вот почему люди и ястребы видят так хорошо, несмотря на грубую ошибку в их исходной конструкции. Снова Гельмгольц:

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

Каждый организм — и результат и, одновременно, жертва своей собственной истории. На каждом шаге эволюции отбор обеспечивает решение актуальных задач, без учёта перспективы. Заглядывать в будущие перспективы развития в эволюции просто некому (кроме «Создателей» из сказок, нарушающих принцип причинности – один из основных постулатов науки). Главный механизм эволюции — преимущественное выживание и оставление потомства существами, более приспособленными к тому образу жизни, который они ведут в данный момент, в той динамично изменяющейся среде, которая их окружает. Конечно, выживание, помноженное на отрезки времени, слабо понимаемые неискушённым разумом. В каждый следующий момент приспособления, которые были достигнуты на предыдущем этапе, могут оказаться морально безнадёжно устаревшими и стать «ископаемыми» генами.
Исследовать
Total votes 64: ↑62 and ↓2+60
Comments351

Боты в телеграм: опыт, откровения, советы по разработке

Reading time10 min
Views26K
Давайте сразу по делу. Содержание статьи:
  • С чего мы начали писать ботов в Telegram. Первый опыт.
  • Создание nodejs библиотеки bot-brother для быстрого написания ботов.
  • Разбираем код свеженаписанного бота DeloreanBot
  • Общечеловеческие рекомендации по созданию популярного бота
  • Философские рассуждения о монетизации ботов


Поехали.
Читать дальше →
Total votes 26: ↑19 and ↓7+12
Comments19

Титаник на Kaggle: вы не дочитаете этот пост до конца

Reading time31 min
Views81K
Привет, хабр!

#{Data Science для новичков}

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

Данная работа описывает мою попытку создать модель для предсказания выживших пассажиров «Титаника». Основная задача — тренировка в использовании инструментов применяемых в Data Science для анализа данных и презентации результатов исследования, поэтому данная статья будет очень и очень длинной. Основное внимание уделено исследовательскому анализу (exploratory research) и работе по созданию и выбору предикторов (feature engineering). Модель создаётся в рамках соревнования Titanic: Machine Learning from Disaster проходящего на сайте Kaggle. В своей работе я буду использовать язык «R».
Читать дальше →
Total votes 42: ↑35 and ↓7+28
Comments5

Поиск с помощью регулярных выражений может быть простым и быстрым

Reading time21 min
Views48K
В этой статье мы рассмотрим два способа поиска с помощью регулярных выражений. Один широко распространён и используется в стандартных интерпретаторах многих языков. Второй мало где применяется, в основном в реализациях awk и grep. Оба подхода сильно различаются по своей производительности:



В первом случае поиск занимает A?nAn времени, во втором — An.

Степени обозначают повторяемость строк, то есть A?3A3 — это то же самое, что и A?A?A?AAA. Графики отражают время, требуемое для поиска через регулярные выражения.

Обратите внимание, что в Perl для поиска строки из 29 символов требуется более 60 секунд. А при втором методе — 20 микросекунд. Это не ошибка. При поиске 29-символьной строки Thompson NFA работает примерно в миллион раз быстрее. Если нужно найти 100-символьную строку, то Thompson NFA справится менее чем за 200 микросекунд, а Perl понадобится более 1015 лет. Причём он взят лишь для примера, во многих других языках наблюдается та же картина — в Python, PHP, Ruby и т. д. Ниже мы рассмотрим этот вопрос более детально.

Наверняка вам трудно поверить приведённым данным. Если вы работали с Perl, то вряд ли подмечали за ним низкую производительность при работе с регулярными выражениями. Дело в том, что в большинстве случаев Perl обращается с ними достаточно быстро. Однако, как следует из графика, можно столкнуться с так называемыми патологическими регулярными выражениями, на которых Perl начинает буксовать. В то же время у Thompson NFA такой проблемы нет.

Возникает логичный вопрос: а почему бы в Perl не использовать метод Thompson NFA? Это возможно и следует делать, и об этом пойдёт далее речь.
Читать дальше →
Total votes 85: ↑79 and ↓6+73
Comments14

Этот притягательный постапокалипсис

Reading time5 min
Views25K

© Антон Кокарев

Выхода Fallout 4 осталось ждать недолго. Множество фанатов по всему миру уже до дыр засмотрели тизеры игры, на форумах обсуждаются детали увиденного, и с новой силой разгорелся спор между адептами олдскульных «правильных» Fallout’ов 1/2 и теми, кому пришлись по душе скитания по пустоши в третьей части игры. Но оба лагеря геймеров, как и множество людей, никогда не игравших ни в какой Fallout, объединяет тяга к прекрасному — к постапокалипсису, к миру, лежащему в руинах. Вероятно, у психологов найдется в загашниках пара теорий, объясняющих, почему широким народным массам так интересна тема разрушенного мира, в котором выживают остатки человечества. Но не будем заниматься самодеятельным психоанализом, а лучше в преддверии выхода нового Fallout'a почитаем книги и посмотрим фильмы, в которых действие разворачивается во времена постапокалипсиса.
Читать дальше →
Total votes 26: ↑22 and ↓4+18
Comments21

Подводные камни Entity Framework и производительность

Reading time15 min
Views67K
При работе с Entity Framework, как и с любым другими ORM, часто возникают вопросы, связанные с его производительностью. Многие разработчики из-за незнания нюансов делают ошибки, приводящие к плохим результатам. Затем, во время анализа проблем и поиска решений, недостаточно разобравшись в вопросе, приходят к выводу, что улучшить ситуацию можно только переходом на другой ORM или отказом от него вообще. Хоть в некоторых ситуациях такое решение может оказаться разумным, зачастую не все так плохо — просто нужно знать нюансы. В этой статье я попытался собрать те подводные камни, с которыми мне чаще всего приходилось сталкиваться на практике.
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments21

Примеры использования Moq

Reading time8 min
Views151K
Moq – это простой и легковесный изоляционный фреймврк (Isolation Framework), который построен на основе анонимных методов и деревьев выражений. Для создания моков он использует кодогенерацию, поэтому позволяет «мокать» интерфейсы, виртуальные методы (и даже защищенные методы) и не позволяет «мокать» невиртуальные и статические методы.

ПРИМЕЧАНИЕ
На рынке существует лишь два фрейморка, позволяющих «мокать» все, что угодно. Это TypeMockIsolator и Microsoft Fakes, доступные в Visual Studio 2012 (ранее известные под названием Microsoft Moles). Эти фреймворки, в отличие от Moq, используют не кодогенерацию, а CLR Profiling API, что позволяет вклиниться практически в любой метод и создать моки/стабы даже для статических, невиртуальных или закрытых методов.
Читать дальше →
Total votes 25: ↑23 and ↓2+21
Comments3

Обратная сторона луны

Reading time14 min
Views46K
При написании приложений, одной из важнейших вопросов являются потребление памяти и отзывчивость (скорость работы).

Считается, что сборщик мусора – черный ящик, работу которого нельзя предугадать.

А еще говорят, что GC в .NET практически не настраиваемый. А еще, что нельзя посмотреть исходники как классов .NET Framework, так и CLR, GC и т.п.

А я скажу как бы ни так!

В данной статье мы рассмотрим:
  • структура организации размещения объектов в памяти
  • CLR 4.5 Background Server GC
  • правильная настройка сборщика мусора
  • эффективный апгрейд приложений до .NET 4.0+
  • правильное ручное управление памятью

Читать дальше →
Total votes 138: ↑132 and ↓6+126
Comments28

Практикум Silverlight: Начинаем работать с Composite Application Library

Reading time6 min
Views1.9K

Для кого эта статья



Данный пост будет интересен для вас если:

  1. Вы нацелены на развитие
  2. Вы работаете с RIA средой, такой как Silverlight (так же WPF)
  3. Если вы уже где-то слышали такие слова как Composite Application Guidance, Composite Application Library
  4. Вы заинтересовались статьей Павла ИвченковаСоздание приложения на WPF с использованием принципов TDD 
  5. Вам было интересно прочитать статью AcervUse Case Driven Development и Composite UI Application Block

Читать дальше →
Total votes 33: ↑22 and ↓11+11
Comments13

Information

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