Открыть список
Как стать автором
Обновить
2
Карма
0
Рейтинг

Software Engineer

  • Публикации
  • Комментарии

Разработка кода не глядя

ПрограммированиеAccessibility
Из песочницы

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

Читать дальше →
Всего голосов 134: ↑132 и ↓2 +130
Просмотры25.9K
Комментарии 70

Математические обозначения: Прошлое и будущее

Блог компании Wolfram ResearchЗанимательные задачкиПрограммированиеМатематикаПрофессиональная литература
Перевод


Перевод поста Стивена Вольфрама (Stephen Wolfram) "Mathematical Notation: Past and Future (2000)".
Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko за помощь в переводе и подготовке публикации

Содержание


Резюме
Введение
История
Компьютеры
Будущее
Примечания
Эмпирические законы для математических обозначений
Печатные обозначения против экранных
Письменные обозначения
Шрифты и символы
Поиск математических формул
Невизуальные обозначения
Доказательства
Отбор символов
Частотное распределение символов
Части речи в математической нотации
Стенограмма речи, представленной на секции «MathML и математика в сети» первой Международной Конференции MathML в 2000-м году.

Резюме


Большинство математических обозначений существуют уже более пятисот лет. Я рассмотрю, как они разрабатывались, что было в античные и средневековые времена, какие обозначения вводили Лейбниц, Эйлер, Пеано и другие, как они получили распространение в 19 и 20 веках. Будет рассмотрен вопрос о схожести математических обозначений с тем, что объединяет обычные человеческие языки. Я расскажу об основных принципах, которые были обнаружены для обычных человеческих языков, какие из них применяются в математических обозначениях и какие нет.

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

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

Традиционная математическая нотация представляет математические объекты, а не математические процессы. Я расскажу о попытках разработать нотацию для алгоритмов, об опыте реализации этого в APL, Mathematica, в программах для автоматических доказательств и других системах.

Обычный язык состоит их строк текста; математическая нотация часто также содержит двумерные структуры. Будет обсуждён вопрос о применении в математической нотации более общих структур и как они соотносятся с пределом познавательных возможностей людей.

Сфера приложения конкретного естественного языка обычно ограничивает сферу мышления тех, кто его использует. Я рассмотрю то, как традиционная математическая нотация ограничивает возможности математики, а также то, на что могут быть похожи обобщения математики.
Читать дальше о математической нотации, её прошлом и будущем...
Всего голосов 52: ↑51 и ↓1 +50
Просмотры45.3K
Комментарии 9

Главный вопрос программирования, рефакторинга и всего такого

Блог компании PVS-StudioСовершенный кодC++C
Улучшим качество кода!
Я написал маленькую электронную книгу в которой рассматриваю вопросы как сделать код лучше. Книга ориентирована на Си/Си++ программистов, но будет интересна и разработчикам, использующих другие языки. Формат книги не подходит для моего любимого Хабра, но мне интересно получить обратную связь и обсудить мысли, изложенные в статье. Поэтому я решил разместить здесь только анонс, а с самой статьей можно познакомиться здесь. И приглашаю в комментарии для обсуждения.
Читать дальше →
Всего голосов 66: ↑53 и ↓13 +40
Просмотры46.3K
Комментарии 97

Три мысли для любителей Android по мотивам I/O 2015

Разработка под Android
В данной статье я хочу поделиться с сообществом тремя мыслями по мотивам Google I/O 2015, которые, на мой взгляд, могут быть очень полезными для всех любителей Android в этом году.

image

Читать дальше →
Всего голосов 33: ↑21 и ↓12 +9
Просмотры18.7K
Комментарии 4

Методы аутентификации по сетчатке глаза

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

На сегодняшний день технология 3d печати позволила сильно удешевить сканеры сетчатки глаза. Эндрю Баставрус вместе со своей командой напечатали на 3d принтере насадку для смартфона, которая позволяет наблюдать сетчатку через камеру телефона.

Данная статья посвящена описанию алгоритмов сопоставления признаков сетчатки глаза и является продолжением статьи о сегментации кровеносных сосудов.

Обзор методов биометрической идентификации/аутентификации приведён здесь.

Способы сопоставления признаков сетчатки глаза


Одной из наиболее важных проблем при использовании сетчатки глаза для распознавания личности является движение головы или глаза во время сканирования. Из-за этих движений может возникнуть смещение, вращение и масштабирование относительно образца из базы данных (рис. 1).

image
Рис. 1. Результат движения головы и глаза при сканировании сетчатки.

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

Алгоритмы аутентификации по сетчатке глаза можно разделить на два типа: те, которые для извлечения признаков используют алгоритмы сегментации (алгоритм, основанный на методе фазовой корреляции; алгоритм, основанный на поиске точек разветвления) и те, которые извлекают признаки непосредственно с изображения сетчатки (алгоритм, использующий углы Харриса).
Читать дальше →
Всего голосов 32: ↑31 и ↓1 +30
Просмотры22.1K
Комментарии 0

Почему от 3D болит голова / Часть 7: Сдвиг во времени между ракурсами

Научно-популярноеAR и VRВидеотехникаМозгЗдоровье

S3D: No pain IS gain




Сегодня речь пойдет о проблеме, которая почему-то очень редко упоминается, но при этом регулярно встречается в фильмах — примерно в 10 раз чаще перепутанных ракурсов — сдвиге во времени между ракурсами. Искать эту проблему — весьма нетривиальная задача с точки зрения компьютерного зрения. Однако в итоге нами был создан алгоритм, который позволяет обнаружить сдвиг с точностью до 0,1 кадра. В результате было найдено более 500 проблемных сцен в 27 фильмах из 105 проанализированных. Самые большие сдвиги — на 1–2 кадра, наименьшие — на 0,1 кадра. Интересно, что сдвиг во времени — один из самых болезненных артефактов после перепутанных ракурсов. Почему такое происходит, как выглядит, сильно ли заметно и можно ли исправить, будет рассказано дальше.

Осторожно, траффик - много примеров из фильмов...
Всего голосов 21: ↑21 и ↓0 +21
Просмотры10.5K
Комментарии 28

ГМО. Группе ученых не удалось доказать вред ГМ-пищи. Разбор исследования дилетантом и комментарии специалистов

Научно-популярноеБиотехнологии
Из песочницы
image

Я вижу, что сообществу интересна тема генетически модифицированной пищи. Были интересные публикации, которые оказались для меня полезны, но до сих пор здесь не публиковали разбор какого-то конкретного исследования. Я не специалист, не имею специального образования, но интересуюсь темой и постараюсь рассказать об одной нашумевшей работе по исследованию ГМО.
Читать дальше →
Всего голосов 126: ↑117 и ↓9 +108
Просмотры67K
Комментарии 313

Сравнение 24-битного и 16-битного звука: результаты аудиотеста

Звук
Блогер Archimago немало сил потратил, чтобы ответить на вопрос: какое качество звука человек способен определять на слух? В рамках одного из его последних аудиотестов респондентов просят вслепую различить звуки с динамическим диапазоном 24 бит и 16 бит. Каждый из них скачивал несколько пар 24-битных файлов, один из которых претерпел конверсию 24-16-24 бита, то есть на практике был 16-битным файлом. Их просили определить разницу.

В тесте приняли участие 140 добровольцев (138 мужчин и 2 женщины: честная демографическая картина для аудиофилов). Средний возраст респондентов: 44 года.

Согласно анкетам, более 20% респондентов назвались музыкантами и звукоинженерами, поэтому можно сравнить результаты среди «профессионалов» и любителей, с учётом статистической погрешности.

Стоимость аудиоаппаратуры у участников опроса чаще всего лежит в диапазоне от $1000 до $3000.
Читать дальше →
Всего голосов 53: ↑51 и ↓2 +49
Просмотры132.9K
Комментарии 150

Можно ли верить коду в редакторе? bi-directional текст

Информационная безопасностьНенормальное программированиеPythonПрограммирование
def maps():
	print "maps maps maps"

def spam():
	print "Erasing everything..."
	print "done."

Вы знаете, что если очень долго смотреть на следующую строку, то там останутся только три слова «spam»?

s = "spam‮" ,spam ,"‬spam"
s[1]()

Действительно, первая строка очень необычная. В целом, в результате этого кода будет выполнена зловредная функция spam.

Посмотреть на ideone. (Для тех кто не знает: там внизу есть вывод выполнившейся программы)
Читать дальше →
Всего голосов 56: ↑48 и ↓8 +40
Просмотры21.6K
Комментарии 32

Ёжик во фрактальном тумане

ПрограммированиеМатематика
Эта статья — последняя из серии моих хабрастатей о фракталах. В хабрастатье «Рисуем картинки с помощью кривой Гильберта» рассказывалось о котёнке по имени Гав, в хабрастатье «Кош на комплексной плоскости» — о перетекании фракталами в горизонт, в хабрастатье «Ночь фракталов» — об алгоритме времени убегания. В этой статье пойдёт речь о ёжике в тумане и, конечно же, о коте.



Читать дальше →
Всего голосов 115: ↑112 и ↓3 +109
Просмотры46.8K
Комментарии 17

Почему я люблю Qt и вы все тоже должны его любить

ПрограммированиеC++Qt

После суток жизни поста я начал замечать утечку кармы, так что заранее прошу прощение за возможно недопустимый стиль изложения в статье и субъективизм

Привет, Хабрахабр!

Последнее время я не мог не обратить внимание на популярность темы Qt на хабрике, но тем не менее, в комментах продолжают встречаться люди, которые говорят откровенно лживые и непонятные вещи. Этим постом я хотел развеять малость заблуждений о Qt и рассказать, почему же ты должен пересесть со своих Java/Obj-C/.NET на мягкий и пушистый Qt.

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

Ну, что, поехали?
Поехали!
Всего голосов 254: ↑138 и ↓116 +22
Просмотры258.9K
Комментарии 191

Так ли прост строковый оператор +

.NETC#

Введение


Строковый тип данных является одним из фундаментальных типов, наряду с числовыми (int, long, double) и логическим (bool). Тяжело себе представить хоть, сколько либо полезную программу, не использующую данный тип.

На платформе .NET строковый тип представлен в виде неизменяемого класса String. Кроме того, он является сильно интегрированным в общеязыковую среду CLR, а так же имеет поддержку со стороны компилятора языка C#.

В этой статье я бы хотел поговорить о конкатенации, операции, которая выполняется над строками так же часто, как операция сложения над числами. Казалось бы, о чем тут можно говорить, ведь все мы знаем о строковом операторе +, но как оказалось, есть у него свои тонкости.
Читать дальше →
Всего голосов 56: ↑48 и ↓8 +40
Просмотры22.2K
Комментарии 10

Горизонтальное масштабирование небольших Web-приложений на Java (вопросы собеседований)

ПрограммированиеJava
Tutorial
Эта тема была поднята в ходе нескольких (3+) собеседований который я прошёл за последние полтора месяца — в разных вариациях но примерно об одном. Казалось бы, известные вещи — но собрав все ответы и объяснения какие я давал (и кое-что что нашёл позже в гугле), решил сохранить их не у себя в гугл-драйве, а написать краткий обзор.

Речь шла о небольших и типовых приложениях Enterprise / Web на Java, каких пишется множество (ну такие, на 10-100 тысяч клиентов, миллион посещений и т.п.). Пусть это будет обобщённый диалог в виде вопросов и ответов.

 

В: Допустим, у вас есть приложение (самое обычное — JSP, Spring, Hibernate например) развернутое на томкате (Apache Tomcat) и вы однажды замечаете что сервер с томкатом загружен на 80% в среднем. Что делать?

Читать дальше →
Всего голосов 53: ↑44 и ↓9 +35
Просмотры32.1K
Комментарии 87

Синхронизация в Android приложениях. Часть первая

Блог компании e-LegionРазработка мобильных приложенийРазработка под Android
Tutorial
image
На дворе 2014 год, доля Android JellyBean перевалила за 60%, появились новые тренды в дизайне. В общем, случилось много всего интересного. Но синхронизация данных с сервером осталось неотъемлемой частью большинства приложений. Существует много способов реализации ее в приложении. Android предоставляет нам SyncAdapter Framework, который позволяет автоматизировать и координировать этот процесс и предоставляет множество плюшек в довесок.

Account


Для начала нам потребуется собственный аккаунт на устройстве. Сначала, я думаю, стоит ответить на вопрос, зачем? Действительно, зачем?

Краткое резюме преимуществ:
  • Поддержка фоновых механизмов вроде SyncAdapter
  • Стандартизация способа авторизации
  • Поддержка различных токенов (прав доступа)
  • Шаринг аккаунта с разграничением привилегий (возможность использовать один аккаунт для различных приложений, как это делает Google)

Шаги для получения плюшек:
1) Создание Authenticator'а
2) Создание Activity для логина
3) Создание сервиса для общения с нашим аккаунтом

Читать дальше →
Всего голосов 52: ↑51 и ↓1 +50
Просмотры59.8K
Комментарии 12

Экономим память: Picasso vs UniversalImageLoader

Разработка под Android
Из песочницы
Привет, Android-разработчики!
Я думаю, каждый из нас сталкивается с загрузкой изображений по URL. Самый простой способ решения этой задачи: использовать готовую стороннюю библиотеку. Как правило, одним из таких готовых решений оказывается Universal Image Loader (UIL), Picasso. Когда я спрашиваю у разработчика, почему он выбрал ту или иную библиотеку, то, как правило, получаю разные ответы. Например, «у Picasso/UIL нет проблем с memory leaks», или «Square делают только правильные вещи», или просто «Да вот использую UIL, работает – и хорошо».
Так вот, мне стало интересно: какая из этих 2-х библиотек оптимально использует память? Я использую UIL и имею проблему с OutOfMemory на старых устройствах. Возможно, Picasso это лекарство?
Так появилась идея этого benchmark-а.
Результаты:
Всего голосов 20: ↑20 и ↓0 +20
Просмотры17.2K
Комментарии 28

Применение преобразования Пуассона для бесшовного наложения изображений

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


Читать дальше →
Всего голосов 84: ↑75 и ↓9 +66
Просмотры34.3K
Комментарии 33

Просто о make

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

Мое упорное игнорирование make в течении долгого времени, было обусловлено удобством используемых IDE, и нежеланием разбираться в этом 'пережитке прошлого' (по сути — ленью). Однако, все эти надоедливые кнопочки, менюшки ит.п. атрибуты всевозможных студий, заставили меня искать альтернативу тому методу работы, который я практиковал до сих пор. Нет, я не стал гуру make, но полученных мною знаний вполне достаточно для моих небольших проектов. Данная статья предназначена для тех, кто так же как и я еще совсем недавно, желают вырваться из уютного оконного рабства в аскетичный, но свободный мир шелла.
Читать дальше →
Всего голосов 104: ↑98 и ↓6 +92
Просмотры298.6K
Комментарии 107

Восстановление открытых файлов но удаленных c файловой системы linux

Системное администрированиеВосстановление данных
Всех с прошедшим новым годом!
В этой заметке я бы хотел поделиться как можно восстановить открытый файл в linux.

Предыстория


Зашел человек на канал посвященный debian в jabber и сказал что взломали его jabber-bot и выполнили команду:
$ rm -rf /*

так как это было выполнено не под рутом, особых проблем быть не должно, но конфигурационные файлы бота удалены. Бот остался запущен и задача была восстановить открытые им файлы и попробовать максимально быстро поднять всё с теми же настройками.
Читать дальше →
Всего голосов 84: ↑67 и ↓17 +50
Просмотры27.5K
Комментарии 32

Производящие функции — туда и обратно

АлгоритмыМатематика
«Производящая функция является устройством, отчасти напоминающим мешок. Вместо того чтобы нести отдельно много предметов, что могло бы оказаться затруднительным, мы собираем их вместе, и тогда нам нужно нести лишь один предмет — мешок».
                                                                                                                                                               Д. Пойа

Введение


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

Идея производящих функций достаточно проста: сопоставим некоторой последовательности <g0, g1, g2, ..., gn> — дискретному объекту, степенной ряд g0 + g1z + g2z2 +… + gnzn +… — объект непрерывный, тем самым мы подключаем к решению задачи целый арсенал средств математического анализа. Обычно говорят, последовательность генерируется, порождается производящей функцией. Важно понимать, что это символьная конструкция, то есть вместо символа z может быть любой объект, для которого определены операции сложения и умножения.
Читать дальше →
Всего голосов 73: ↑70 и ↓3 +67
Просмотры76.1K
Комментарии 36
1

Информация

В рейтинге
5,887-й
Зарегистрирован
Активность