Pull to refresh
-8
0
Дмитрий @dim2r

Программирование

Send message

Персона. Андерс Хейлсберг – создатель Turbo Pascal, Delphi и C#

Reading time7 min
Views28K

«Я написал огромное количество полезных программ. И совсем немного бесполезных»

У некоторых людей есть потребность создавать что-то новое. Когда эта потребность реализуется в полной мере, появляются произведения искусства, научные открытия, прорывные технологии. Таким человеком является Андерс Хейлсберг, создатель Turbo Pascal, Delphi и C#.

Для многих студентов ВУЗов Turbo Pascal до сих пор остается первым языком, с которого начинается знакомство с программированием. В свое время он был своеобразным прорывом в разработке программного обеспечения. Недаром «в народ» пошел не Pascal, а именно Turbo Pascal.

Однако Хейлсберг на этом не остановился. Благодаря его неугасающей потребности создавать новое появились Delphi и С#. Поэтому для многих Андерс является одним из «супергероев» ИТ-индустрии.
Читать дальше →
Total votes 68: ↑66 and ↓2+64
Comments10

Глубокое обучение для новичков: распознаем рукописные цифры

Reading time11 min
Views103K

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



Читать дальше →
Total votes 39: ↑35 and ↓4+31
Comments5

6 концепций функционального программирования. Польза и примеры использования

Reading time9 min
Views40K
Доброго времени суток! Меня зовут Иван Смолин, я разработчик мобильных приложений на платформе iOS. Сегодня предлагаю вам окунуться в мир функционального программирования. Статья носит по большей части теоретический характер, нежели практический. В ней я постараюсь дать определения основным понятиям функционального программирования и покажу примеры реализации на C, Objective-C, Swift, Haskell.

Функциональное программирование — это парадигма программирования, которая акцентируется на вычислении через функции в математическом стиле, неизменяемость, выразительность и уменьшение использования переменных и состояний (ссылка).

Существует 6 основных концепций:

  • концепция первого класса и функций высшего порядка
  • концепция чистых функций
  • концепция неизменяемого состояния
  • концепция опциональности и сопоставления с образом
  • концепция ленивости и бесконечных структур данных
  • концепция лямбда-исчислений

Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments27

Находим ошибки в коде проекта LLVM с помощью анализатора PVS-Studio

Reading time17 min
Views8.8K
PVS-Studio vs LLVMОколо двух месяцев назад я написал статью о проверке компилятора GCC с помощью анализатора PVS-Studio. Идея статьи была следующая: предупреждения GCC — это хорошо, но недостаточно. Надо использовать специализированные инструменты анализа кода, например, PVS-Studio. В качестве подтверждения я показал ошибки, которые PVS-Studio смог найти в коде GCC. Ряд читателей заметили, что качество кода GCC и его диагностики так себе, в то время как компилятор Clang современен, качественен, свеж и молод. В общем Clang — это ого-го! Что ж, значит пришло время мне проверить с помощью PVS-Studio проект LLVM.
Читать дальше →
Total votes 46: ↑41 and ↓5+36
Comments40

Власти США разрешили исследователям заниматься пентестами и реверс-инжинирингом без юридических последствий

Reading time2 min
Views11K


В пятницу, 28 октября, на сайте библиотеки Конгресса США был опубликован обновленный список исключений из правил закона Digital Millennium Copyright Act (DMCA), запрещающих осуществление «обхода цифровых средств управления доступом». Эти правила регулируют условия, на которых частные пользователи могут взаимодействовать и манипулировать цифровым контентом, принадлежащим правообладателям, без риска юридических последствий для себя.

В список текущий исключений входят и те, которые облегчат исследователям информационной безопасности проведение работ по тестированию программных продуктов.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments10

Я техлид. Что делать?

Reading time13 min
Views43K
Больше года я занимаю должность технического лидера в своей компании, и хочется поделиться наработками по теме. Имеет смысл уточнить: я веду отдел iOS-разработки из 10 человек в компании-аутсорсере. В моём случае должность подразумевает оптимизацию работы отдела, распределение задач между разработчиками и активности, связанные с программированием. Расскажу немного о своём опыте, наработках и умозаключениях. Статья может быть полезна прежде всего новичкам на аналогичной должности, либо тем, кто на неё метит. Какие-то практики и принципы могут быть переносимы на обычную разработку, на другие платформы или даже другие специальности.
Читать дальше →
Total votes 53: ↑50 and ↓3+47
Comments30

Как устроено тестирование «тяжелого» банковского софта в немецкой фирме

Reading time11 min
Views22K
Добрый день, Хабр. В этой статье я хочу показать жизненный цикл тестирования клиентского портала разрабатываемого изначально для крупнейшего немецкого банка (Deutsche Bank) и далее для ведущих банков в немецкоязычной Европе (UBS – Швейцария, Raifeissen – Австрия), а также для других банков работающих по европейскому стандарту EBICS.

Вначале немного предыстории.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments20

Статистика для математика

Reading time3 min
Views24K

В современных условиях интерес к анализу данных постоянно и интенсивно растет в совершенно различных областях, таких как биология, лингвистика, экономика, и, разумеется, IT. Основу этого анализа составляют статистические методы, и разбираться в них необходимо каждому уважающему себя специалисту в data mining.

К сожалению, действительно хорошая литература, такая что умела бы предоставить одновременно математически строгие доказательства и понятные интуитивные объяснения, встречается не очень часто. И данные лекции, на мой взгляд, необычайно хороши для математиков, разбирающихся в теории вероятностей именно по этой причине. По ним преподают магистрам в немецком университете имени Кристиана-Альбрехта на программах «Математика» и «Финансовая математика». И для тех, кому интересно, как этот предмет преподается за рубежом, я эти лекции перевел. На перевод у меня ушло несколько месяцев, я разбавил лекции иллюстрациями, упражнениями и сносками на некоторые теоремы. Замечу, что я не профессиональный переводчик, а просто альтруист и любитель в этой сфере, так что приму любую критику, если она конструктивна.

Вкратце, лекции вот о чем:
Читать дальше →
Total votes 38: ↑37 and ↓1+36
Comments7

Что значит «Нам нужно больше времени»??

Reading time7 min
Views16K
Мы, как технари, уделяем мало времени разговорам о коммуникации, управлении проектами и приоритизации. Это те навыки, которые превращают хорошего программиста в отличного инженера. Сегодня я собираюсь сфокусироваться на одном из аспектов управления проектами, в котором мы очевидно плохи – искусстве оценки сроков.

image

Если есть сомнения в том, что это действительно необходимый навык, вспомните этот ужасный, но часто задаваемый вопрос: «Как много времени это займёт?». Даже если вы супер-Agile и не верите в дедлайны, будьте уверены, что кто-нибудь сломается под давлением и выдаст дату, к которой и будет привязана ваша команда. И когда эта дата наступит, а вы не будете готовы к запуску, ваш менеджер будет злиться, потому что из-за вас она будет глупо выглядеть; отдел продаж будет злиться, потому что они обещали самым важным заказчикам продукт уже сегодня; и ваша команда тоже будет злой, потому что они работали пять выходных подряд пытаясь вложиться в невозможный дедлайн. Так что давайте избежим всего этого и создадим план, пригодный к жизни.

Для примера я хочу предложить упражнение, которое я позаимствовал из курса “Intro to Development” от Microsoft. Цель – оценить время покраски комнаты. Это тот тип упражнения, который не требует каких-то специфичных знаний о какой-то системе.

Теперь, прежде чем скроллить вниз, подумайте и набросайте свою оценку — сколько времени уйдет на то, чтобы покрасить комнату? Не пропускайте эту часть – важно записывать свои мысли, чтобы следить за их эволюцией.

Готово?
Total votes 21: ↑20 and ↓1+19
Comments8

Атака на оракула. Подробный гайд по векторам атак на Oracle DB

Reading time17 min
Views35K


Сегодня я бы хотел поговорить о векторах атак на СУБД Oracle на разных стадиях: как прощупать слабые места базы снаружи, проникнуть и закрепиться внутри плюс как все это дело автоматизировать с помощью специализированного софта. Архитектура и возможности базы данных весьма интересны, занимательных моментов немало, а значит, немало и способов все испортить. Однако не забывай: ломать — не строить, поэтому вся дальнейшая информация предоставлена исключительно с целью выявить недочеты в защищенности тестируемых систем и повысить безопасность.
Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments5

Разработка коммерческого электронного устройства с нуля

Reading time6 min
Views83K
Приветствую!

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

С чего все начиналось


Изначально мы занимались разработкой программного обеспечения для чип-тюнинга. Одна из основных задач которого — считать прошивку из ЭБУ (электронный блок управления двигателем) и записать ее обратно. Понятное дело, что для этих целей нужно каким-то образом связать компьютер и ЭБУ при помощи адаптера. Когда раньше подавляющее количество ЭБУ использовало простейший способ приема-передачи данных, достаточно было использовать простейший адаптер на транзисторах или специализированной микросхеме. Однако на сегодняшний день большинство автомобилей для «общения» своих компонентов со внешней средой используют CAN шину. Адаптер для CAN шины на транзисторах уже не соберешь, и тут однозначно нужен процессор, который будет управлять всем по определенной программе.
Так возникла первая проблема — как побороть CAN шину. Для того, чтобы не изобретать велосипед выбор сделан на использовании готового адаптера, который работает по стандарту J2534. Для тех, кто не в курсе, стандарт J2534 это стандарт, описывающий аппаратную и программную части устройства, с помощью которого можно произвести подключение к ЭБУ посредством компьютера. Разработали его американцы. Основной причиной его разработки стало законодательное закрепление возможности обновление прошивки ЭБУ не специализированным дилерским сервисом, а любым желающим. Собственно, если каждый желающий может обновить прошивку на своем телефоне, то почему он не может это сделать со своим автомобилем.

Самый доступный импортный аналог стоит в районе 200 долл. США. Как впоследствии оказалось, два одинаковых устройства, удовлетворяющие стандарту J2534, могут работать по-разному с одним и тем же программным обеспечением. Поэтому изначально пришлось привязаться к конкретному производителю и его устройству.
Читать дальше →
Total votes 61: ↑57 and ↓4+53
Comments44

Кластеризация с пакетом ClusterR, часть 2

Reading time7 min
Views6.9K
Эта статья посвящена кластеризации, а точнее, моему недавно добавленному в CRAN пакету ClusterR. Детали и примеры ниже в большинстве своем основаны на пакете Vignette.

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

Наиболее известные примеры алгоритмов кластеризации — кластеризация на основе связности (иерархическая кластеризация), кластеризация на основе центров (метод k-средних, метод k-медоидов), кластеризация на основе распределений (GMM — Gaussian mixture models — Гауссова смесь распределений) и кластеризация на основе плотности (DBSCAN — Density-based spatial clustering of applications with noise — пространственная кластеризация приложений с шумом на основе плотности, OPTICS — Ordering points to identify the clustering structure — упорядочивание точек для определения структуры кластеризации, и др.).

В первой части: гауссова смесь распределений (GMM), метод k-средних, метод k-средних в мини-группах.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments0

В поисках Святого Грааля бизнес-анализа

Reading time8 min
Views17K

Пою что вижу, или вижу, что пою?


Основная задача бизнес-аналитика при разработке нового ПО – изучение предметной области и формальное описание полученных сведений в виде модели (Domain Model). Аналитик должен петь то, что он видит и то, что он хочет увидеть. Для этого у него должен быть язык, на котором он исполнит свою песню. Однако, аналитик не всегда знаком с подходящим языком, и потому часто пользуется другими языками. Отчасти это происходит по причине того, что управление проектом ведется не с точки зрения предметной области, а с точки зрения реализации. И тогда с аналитиком может произойти несчастье: он может перестать видеть то, что надо петь и начать видеть лишь то, для чего есть слова в словарном запасе используемого им языка. Все остальное перестает для него существовать. Тогда, вместо того, чтобы петь, что он видит, аналитик начинает видеть то, что поет. Должен сразу заметить, я не против языков, я против сужения области анализа, которое возникает по причине недостаточности этих языков.

Структура таблицы

Читать дальше →
Total votes 13: ↑11 and ↓2+9
Comments128

Знакомство с парадигмами построения моделей предметной области

Reading time11 min
Views24K

Введение


Возможно, кто-то задаст вопрос, а причем тут математика? Отвечу сразу: все, что здесь изложено, относится непосредственно к математике.
Изучая литературу по теории построения моделей предметной области, я обнаружил серьезный пробел. Авторы статей и книг сразу берут одну из нотаций моделирования: ER-диаграммы, или диаграммы классов, и в быстром темпе начинают их использовать для описания предметной области. При этом описание парадигмы, в которой производится это моделирование остается вообще не раскрытым. А следовательно, не раскрытыми остаются ограничения той или иной нотации. Увы, мы все умеем строить модели, но мало кто умеет объяснить то, что он построил в одной из существующих парадигм. Поэтому я часто слышу дикие с точки зрения любой парадигмы термины: класс типов, типы классов, виды типов и так далее, но ни разу не слышал корректный термин «класс классов». Этот пробел в нашем образовании очень серьезен. И я объясню почему.

Давайте зададим аналитикам простой вопрос.

Те, кто моделировал процессы, наверно, знакомы с нотацией BPMN. Очень часто при моделировании операции по заключению договора я встречаю такой фрагмент диаграммы:



Видно, что в результате заключения договора рождается нечто, что передается в другую операцию. Но что обозначает элемент диаграммы в виде листа с загнутым уголком? Нам надо точно знать, что именно передается из одной операции в другую, иначе трудно будет объяснить другим, что от них требуется. Итак, что создается на выходе из операции «Заключить договор»?
Варианты ответов, которые я слышал, следующие:

  • Бумажка с печатью
  • Бумажки с печатью
  • Класс бумажек с печатью
  • Договор
  • Договоренность
  • Информация о договоренности
  • Файл MS Word с названием договор
  • Запись в базе данных
  • Поток каких-то объектов

Пока я наблюдаю отсутствие согласия между аналитиками на предмет того, что же все-таки передается, и что значат термины «договор», «поток», «договоренность», «информация», «данные». Чтобы ответить на этот вопрос, мне пришлось копать глубоко и в сторону парадигм. Причем, ответ потребовал разбиения вопроса на два. Первый вопрос был: «Как корректно сформулировать вопрос?» А второй был: «Как на него ответить?». Для правильной формулировки нужно было выбрать подходящую парадигму. Эта статья посвящена рассказу о двух парадигмах: Аристотелевской и логической, и почему я выбрал логическую в качестве рабочей. Ответа на поставленный вопрос в этой статье я не дам. Ответ я дам в другой статье.
Читать дальше →
Total votes 17: ↑15 and ↓2+13
Comments76

Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

Reading time9 min
Views75K
Вот уже около трех лет я использую в работе принципы Spec By Example, Domain Driven Design и CQRS. За это время накопился опыт практического применения этих практик на платформе .NET. В статье я хочу поделиться нашим опытом и выводами, которые могут быть полезными командам, желающим использовать эти подходы в разработке.

Факты, цифры, код
Total votes 39: ↑39 and ↓0+39
Comments45

Все что вы хотели узнать о BPM, но боялись спросить

Reading time8 min
Views30K
В сети имеется множество публикаций о том, ради чего стоит внедрить BPM (Business Process Management) в вашей компании. Как обычно формулируются преимущества, которые дает бизнесу внедрение BPM:

  1. Визуальное моделирование и выполнение бизнес-процессов.
  2. Набор готовых компонент для построения гибких бизнес-процессов.
  3. Взаимодействие с пользователем для выполнения ручных действий.
  4. Гибкость конфигурирования бизнес-процессов.
  5. Поддержка версионности бизнес-процессов.

Это не все, что можно упомянуть, но достаточно типичный набор преимуществ платформы.

На самом ли деле все так безоблачно? Не пора ли всем выбросить старые инструменты, и полностью перейти на новую платформу?
Читать дальше →
Total votes 33: ↑25 and ↓8+17
Comments47

Создаем хардварный логгер клавиатуры

Reading time13 min
Views50K
У тебя наверняка не раз возникала ситуация, когда программные логгеры клавы не могли решить поставленных задач. Например, отловить пароль от биоса с помощью программного кейлоггера, загружаемого системой, невозможно. Лично я столкнулся с подобной проблемой, когда мне нужно было узнать админский пароль в локальной сети одной фирмы. Тогда я и подумал, что было бы очень круто сделать «железный» логгер, который бы подключался между клавиатурой и компьютером и ловил все нажатые клавиши, начиная с включения компьютера. В предлагаемой статье изложены принципы работы PS/2 интерфейса, и перехват данных, передаваемых по нему.

image
Парочка аппаратных логгеров клавиатуры

Принципы


Для того чтобы сконструировать подобное устройство, сначала нужно разобраться с тем, как же работает клавиатура. Есть два основных типа клавиатур: АТ (старый стандарт) и PS/2. Отличаются они только разъемами: АТ имеет DIN, а PS/2 — miniDIN. Первый — большой круглый разъемчик с пятью штырьками, второй — маленький, как у мышки, с шестью пинами. По протоколу обмена они полностью совместимы. Наверняка, ты видел переходники с широких старых разъемов на новые маленькие. Этот стандарт появился еще в 1984 году вместе с первым персональным компьютером IBM PC и используется по сей день, практически не претерпев никаких изменений.
Читать дальше →
Total votes 230: ↑212 and ↓18+194
Comments84

Google Cloud Vision API‎. Будущее Computer Vision as a service настало?

Reading time8 min
Views39K
Год назад Google сваял платформу Cloud Vision API‎. Идея платформы — предоставить технологии Computer Vision, в которых Google является безусловным лидером, как сервис. Пару лет назад под каждую задачу существовала своя технология. Нельзя было взять что-то общее и добиться, чтобы алгоритм решал всё. Но Google замахнулся. Вот, прошёл уже год. А технология всё так же не на слуху. На хабре одна статья. Да и та ещё не про Cloud Vision api, а про Face api, которое было предшественником. Англоязычный интернет тоже не пестрит статьями. Разве что от самого Google. Это провал?



Мне было интересно посмотреть что это такое ещё весной. Но сил полноценно посидеть не хватало. Изредка что-то отдельное тестировал. Периодически приходили заказчики и спрашивали, почему нельзя применить Cloud Api. Приходилось отвечать. Или наоборот, отсылать с порога в этом направлении. И внезапно понял, что материала на статью уже достаточно. Поехали.
Читать дальше →
Total votes 44: ↑41 and ↓3+38
Comments26

В ядре Linux обнаружена опасная 0-day уязвимость Dirty COW (CVE-2016-5195)

Reading time2 min
Views43K


В ядре Linux обнаружена опасная уязвимость, которая связана с обработкой подсистемой памяти ядра механизма copy-on-write (COW). Эксплуатируя баг можно спровоцировать так называемое состояние гонки (race condition). При эксплуатации уязвимости неавторизованный локальный пользователь сможет получить доступ к memory mappings с правом записи, хотя доступ должен быть ограничивать только чтением (read-only). Уязвимость относится к privilege escalation.
Читать дальше →
Total votes 68: ↑67 and ↓1+66
Comments51

LastPass взломан, меняйте ваш мастер-пароль

Reading time1 min
Views70K


В официальном блоге LastPass появилось уведомление, указывающее на то, что сервера компании были скомпрометированы. Подозрительные действия в сети компании были замечены в минувшую пятницу.
Читать дальше →
Total votes 45: ↑42 and ↓3+39
Comments130

Information

Rating
Does not participate
Location
Самарская обл., Россия
Registered
Activity