Обновить
1312.03

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

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

Использование источников света OpenGL для построения цветных теней

Время на прочтение8 мин
Охват и читатели8.8K
Как известно, OpenGL версии 1 позволяет использовать не менее восьми штатных источников света. Используя эти источники можно достаточно просто строить качественное цветное освещение без применения карт освещённости. Как оказалось, при разработке самодельных простейших трёхмерных движков, их авторам эта возможность не кажется очевидной и потому ими игнорируется. Описанный ниже способ не подходит для перемещающихся в пространстве источников света, но отлично подходит, если остальные параметры источника света изменяются во времени (например, изменяется цвет источника освещения, или он мигает). Как построить качественное освещение с использованием штатных источников освещения OpenGL и будет рассказано в статье.
Читать дальше →

Как проектировать программы (HtDP)

Время на прочтение6 мин
Охват и читатели20K
Следующая статья о том, как писать игры на Scheme

Учебник HtDP (How to Design Programs), посвящен программированию на языке Scheme в среде drRacket.
drRacket можно скачать с сайта.
Вводная часть учебника содержит описание функции empty-scene, предназначенной для работы с изображениями. Например, эта программа создает пустую сцену

#lang racket  
(require 2htdp/image)      ;библиотека для работы с изображениями 
(empty-scene 100 60)     ;сцена (канвас) размером 100х60 

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

Игры, в которых нужно писать код: Grid Garden, Elevator Saga и другие

Время на прочтение3 мин
Охват и читатели150K

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

Сервисы на Go: как мы их пишем и поддерживаем

Время на прочтение12 мин
Охват и читатели27K


Написать сетевой сервис на Go очень просто: в стандартной библиотеке есть куча инструментов, а если чего-то и не хватает, то на Github есть много модных библиотек для удовлетворения большинства нужд.


Но что, если необходимо написать с десяток разных сервисов, работающих в одной инфраструктуре?


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


У нас в Badoo крутятся >30 самописных демонов, написанных на разных языках, и ~10 из них – на Go. Все эти демоны работают на порядка 300 серверах. Как мы к этому пришли, не получив в итоге «зоопарк», как админы с мониторингом умудряются спать спокойно, не ограничивая при этом никого в смузи, а девелоперы, QA и релизеры живут дружно и до сих пор не переругались – читайте под катом.

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

Кому нужны звонки, когда есть чаты и боты?

Время на прочтение4 мин
Охват и читатели11K
Есть у компаний добрая традиция: рассказывать о своих «профильных» технологиях. Как они всем нужны, развиваются и что без них никуда. Когда два года назад я пришел в Voximplant рассказывать про автоматику звонков, про звонки я знал только то, что они есть. Ну и еще страшное слово «АТС», которое обычно какая-нибудь циска в углу.

Прошло два года, в течении которых мессенджеры должно были вот-вот убить звонки. К мессенджерам присоединились чат-боты, биг дата, дип лёрнинг. У звонков вообще не было шансов. Но они почему-то не умирали. От слова «совсем». Миллионы звонков в месяц исправно удваивались, отдел продаж не вылезал из встреч, а ко мне в фейсбук, скайп и телеграм постоянно заходили разработчики, которым надо автоматизировать звонки.

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

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

Многорукий бандит в задаче поиска объектов в видеопотоке

Время на прочтение7 мин
Охват и читатели7.1K
Drawing На Хабре уже неоднократно затрагивалась тема применения так называемых “бандитов” для интеллектуального анализа данных. В отличии от уже привычного обучения машин по прецедентам, которое сплошь и рядом применяется в задачах распознавания, многорукий бандит применяется для построения в некотором смысле “рекомендательных” систем. На Хабре уже очень подробно и доступно рассказано о идее многорукого бандита и применимости ее к задаче рекомендации интернет-контента. Мы же в своем очередном посте хотели рассказать вам о симбиозе обучения по прецедентам и обучения с подкреплением в задачах распознавания видеопотока.
Читать дальше →

Элементы функционального программирования в C++: композиции отображений

Время на прочтение8 мин
Охват и читатели16K

Стандартная библиотека языка C++ очень неплоха. Долгие годы стандартные алгоритмы верой и правдой служат простому плюсовику!


Но вся отрасль бурно развивается, и язык C++ вместе с ней. Уже давно люди стали понимать, что как бы хороши ни были стандартные алгоритмы, у них есть большой недостаток: нулевая компонуемость. Иначе говоря, невозможно без дополнительных сложностей объединить в цепочку несколько алгоритмов преобразования, фильтрации, свёртки и т.д. и т.п.


Существует несколько вариантов решения данной проблемы. Один из них — ленивые вычисления и диапазоны — уже на подходе к стандартной библиотеке.


Однако, и старые добрые алгоритмы пока рано списывать со счетов.


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

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

Обратная сторона авиабилета. Как Туту.ру помогает подобрать оптимальный тариф

Время на прочтение14 мин
Охват и читатели22K

image


Весной 2014 года были приняты поправки к Воздушному кодексу РФ, позволяющие авиакомпаниям заключать договор на перевозку без возврата платы за проезд в случае расторжения договора. Иными словами, на рынке авиаперевозок появились невозвратные тарифы. До этих изменений авиакомпании могли лишь удерживать штраф в размере не более 25% от стоимости билета, если пассажир сдавал билет позднее, чем за сутки до вылета. Новые поправки позволили авиакомпаниям предложить пассажирам более дешевые, но невозвратные билеты.


В это же время появились бюджетные «безбагажные тарифы». На самом деле, полностью безбагажными их назвать нельзя: по закону РФ, пассажир имеет право провезти с собой до 10 кг личных вещей. И здесь есть интересный момент: закон не регулирует, каким образом пассажир перевозит эти 10 кг — в салоне самолета или в багажном отсеке. Как известно, в салон нельзя брать множество вещей: например, жидкость более 100 мл, маникюрные ножницы, пилочку и некоторые гаджеты. Даже если тариф включает провоз багажа, каждая авиакомпания сама определяет максимальный вес и размеры багажа и ручной клади на одного пассажира.


Пассажиры путались в тарифах, возникало много вопросов, связанных с провозом багажа и доплатой перевеса. В этой статье я хочу рассказать, что и как мы сделали, чтобы облегчить пользователям Tutu.ru поиск наиболее подходящих авиабилетов среди десятков доступных вариантов.

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

Идиоматичный Kotlin, набор хороших практик

Время на прочтение9 мин
Охват и читатели28K


Чтобы полностью раскрыть все преимущества Kotlin, пересмотрим некоторые подходы, которые мы используем в Java. Многие из них могут быть заменены на лучшие аналоги из Kotlin. Давайте посмотрим на то, как мы можем написать идиоматичный код на Kotlin.
Читать дальше →

Грязные трюки в коде игр

Время на прочтение13 мин
Охват и читатели123K


[Когда график поджимает и проект уже пора выпускать, программисты могут прибегать к грязным трюкам, чтобы уже наконец выпихнуть игру за дверь. В этой статье собрано девять примеров таких «костылей» из реальной жизни.]

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

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

Логирование, интерфейсы и аллокации в Go

Время на прочтение5 мин
Охват и читатели20K


Привет Хабр. Последний свой пост я публиковал сравнительно недавно, так что вряд ли вы успели забыть, что меня зовут Марко. Сегодня публикую перевод небольшой заметки, которая касается нескольких очень вкусных оптимизаций из еще не вышедшего Go 1.9. Эти оптимизации позволяют генерировать меньше мусора в большинстве программ на Go. Меньше мусора – меньше задержки и затраты на сборку этого мусора.


Эта статья о новых оптимизациях компилятора, которые готовятся к релизу Go 1.9, но я бы хотел начать разговор с логирования.

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

Пять книг по программированию, которые стоит прочесть

Время на прочтение3 мин
Охват и читатели63K
Выбрать всего пять книг оказалось непростой задачей. Каждый раз, добавляя книгу в список, я задавал вопрос: почему именно эта? Я решил выделить пять ключевых направлений, в которых должен развиваться разработчик, и привести по одному примеру книги в каждом из них.

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


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

Почему мы меняем цветовые схемы?

Время на прочтение6 мин
Охват и читатели18K

Вступление


Знаете, что я заметил? Мы очень много времени уделяем кастомизации цифрового пространства. Это начинается со смены обоев и тем рабочего стола, переходит в долгий подбор скина в Aimp (Winamp, для староверов) и заканчивается оформлением цифрового рабочего места.

Как только я меняю среду разработки или редактор кода, то первым делом лезу в цветовые схемы и ищу любимые цвета. У программистов уже сложились целые культы вокруг определенных цветовых палитр. Что лучше — Obsidian или Monokai? Можно мне Selenitic, только фон более темный? И все в таком духе. Бывало, что ко мне приходили друзья и, прежде чем начать показывать свой проект, меняли тему на другую, более привычную для них. Это раздражает, но я их понимаю.


… на самом деле комикс не о цветовых схемах, но он отлично походит.
Читать дальше →

Ближайшие события

Митап по SQL Server: ждём только вас

Время на прочтение3 мин
Охват и читатели4.1K
Друзья, с радостью анонсируем наш «Майский митап 'SQL и не только'». Вместе с другими участниками TechGuruDay мы соберемся 18 мая в офисе ЛАНИТ, чтобы обсудить особенности Microsoft SQL Server и другие вопросы.

TechGuruDay – это творческая реализация нашей попытки создать неформальную группу IT-профессионалов для обмена уникальным опытом и мнениями на самые злободневные темы. Все организационные вопросы мы решаем на площадке Meetup.com, а делимся наболевшим и угощаемся плюшками на офлайн-встречах, как раз таких, как «Майский митап».

Приглашаем вас присоединиться к нашей компании. Больше деталей о предстоящем митапе и небольшой экскурс в историю наших митапов (со ссылками на презентации и видео выступлений) вы найдете внутри поста.


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

Релиз кросс-платформенного XAML UI-фреймворка AvaloniaUI 0.5

Время на прочтение3 мин
Охват и читатели20K

Состоялся релиз версии 0.5 кросслплатформенного XAML UI фреймворка AvaloniaUI (раннее назывался Perspex). Фреймворк сделан по тем же принципам, что и WPF/UWP, т. е. используется XAML, биндинги и шаблонизированные элементы управления. На текущий момент это единственный способ сделать UI на настоящем XAML, который будет работать на Windows, OS X и Linux (так же имеется экспериментальная поддержка iOS и Android).


КПДВ


Каталог встроенных контролов (gif 3MB)


Начать работать с фреймворком можно скачав дополнение для Visual Studio 2017 и создав проект из шаблона. Так же стоит ознакомиться с документацией на wiki.


В этом релизе: Поддержка .NET Core, переход на GTK3 для *nix-систем, поддержка вывода через Linux fbdev, система расширений, исправлено множество ошибок.

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

Deep Learning против рака. Конкурс Intel

Время на прочтение2 мин
Охват и читатели5.5K


Рак шейки матки — страшное заболевание, ежегодно уносящее сотни тысяч жизней. Но еще страшнее то, что большинство этих жизней можно было спасти. Рак шейки матки развивается очень медленно, и в случае обнаружения опухоли в первые 5 лет после ее появления шанс выживания практически 100%. Таким образом, регулярные обследования могут извести это заболевание на корню. К сожалению, 85% женщин Земли регулярная медицинская помощь недоступна. Их могут спасти технологии машинного распознавания фотоснимков, снижающие требования к квалификации врачебного персонала и увеличивающие процент правильных диагнозов. Именно такие алгоритмы распознавания и создаются в рамках конкурса программистов Intel & MobileODT Cervical Cancer Screening, в котором мы приглашаем вас поучаствовать.
Читать дальше →

Прикладное применение задачи нелинейного программирования

Время на прочтение14 мин
Охват и читатели14K
Доброго времени суток, Хабр! В свое время, будучи студентом младших курсов, я начал заниматься научно-исследовательской работой в области теории оптимизации и синтеза оптимальных нелинейных динамических систем. Примерно в то же время появилось желание популяризировать данную область, делиться своими наработками и мыслями с людьми. Подтверждением этому служит пара-тройка моих детских незрелых статей на Хабре. Тем не менее, на тот момент эта идея оказалась для меня непосильной. Возможно ввиду моей занятости, неопытности, неумения работать с критикой и советами или чего-то еще. Можно до бесконечности пытаться найти причину, но ситуацию это не изменит: я забросил эту идею на полку, где она благополучно лежала и пылилась до этого момента.

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

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



Ну что ж, всем заинтересовавшимся:
Добро пожаловать под кат

Soft Mocks для Go! (переопределение функций и методов в runtime)

Время на прочтение4 мин
Охват и читатели5.5K

Soft Mocks для Go!


Основная идея Soft Mocks для PHP — это переписывание кода «на лету» перед include(), чтобы можно было поменять реализацию любых методов, функций и констант во время исполнения. Поскольку go — компилируемый язык, то логично делать то же самое на этапе компиляции. В этой статье я расскажу по свой проект Soft Mocks for Go.

Функциональность


Возможности Soft Mocks for Go весьма ограничены — вы можете временно переопределить нужные вам функции и методы, а потом откатить свои правки. Также можно вызвать оригинальную функцию.

При использовании soft mocks, следующий код:

func main() {
    closeFunc := (*os.File).Close
    soft.Mock(closeFunc, func(f *os.File) error {
        fmt.Printf("File is going to be closed: %s\n", f.Name())
        res, _ := soft.CallOriginal(closeFunc, f)[0].(error)
        return res 
    })  
    fp, _ := os.Open("/dev/null")
    fmt.Printf("Hello, world: %v!\n", fp.Close())
}

Напечатает вот что:

File is going to be closed: /dev/null
Hello, world: <nil>!

Скачать библиотеку можно тут.
Читать дальше →

Добавляем в Chromium селектор :focus-within

Время на прочтение6 мин
Охват и читатели12K


В этой статье рассказывается о внедрении в Chromium/Blink новой фичи. А именно — псевдокласса :focus-within из спецификации Selectors 4. Также поговорим о разных вещах, с которыми приходится сталкиваться при разработке.
Читать дальше →

Свой Bot за несколько часов, или поговорим о пиве с машиной

Время на прочтение7 мин
Охват и читатели12K
Тема по улучшению взаимодействия машин и человека сейчас актуальна как никогда. Появились технические возможности для перехода от модели «100 кликов» к парадигме «скажи, что ты хочешь». Да, я имею в виду различные боты, которые уже несколько лет разрабатывают все кому не лень. К примеру, многие крупные компании, не только технологические, но и retail, logistics, банки в данный момент ведут активный Research&Design в этой области.

Простой пример, как, например, происходит процесс выбора товаров в каком-либо интернет магазине? Куча списков, категорий, в которых я роюсь и что-то выбираю. It suck's. Или, допустим, заходя в интернет банк, я сталкиваюсь с различными меню, если я хочу сделать перевод, то я должен выбрать соответствующие пункты в меню и ввести кучу данных, если же я хочу посмотреть список транзакций, то опять таки, я должен напрягать как мозг, так и указательный палец. Гораздо проще и удобнее было бы зайти на страницу, и просто сказать: «Я хочу купить литр молока и пол-литра водки», или просто спросить у банка: «Что с деньгами?».

В список профессий, которым грозит вымирание в достаточно близкой перспективе, добавляются: теллеры, операторы call центров, и многие другие. И на простом примере, реализовать который у меня заняло часов 7, я покажу, как можно достаточно просто сделать интеграцию распознавания речи, и выявления сущностей, на примере открытого Wit.Ai (Google Speech API интеграция также включена).


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

Вклад авторов