Обновить
1397.1

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

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

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

Изучаем OpenGL ES2 для Android Урок №3. Освещение

Время на прочтение20 мин
Охват и читатели17K
Перед тем как начать
Если вы новичок в OpenGL ES, рекомендую сначала изучить уроки №1 и №2, так как данный урок опирается на знания предыдущих уроков.
Основы кода, используемого в этой статье, взяты отсюда:
1. http://andmonahov.blogspot.com/2012/10/opengl-es-20.html
2. http://www.learnopengles.com/android-lesson-two-ambient-and-diffuse-lighting/
В результате мы получим такую картинку на экране устройства или эмулятора.

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

Результаты и разбор задач финала Яндекс.Алгоритма 2016

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

29 июля в Минске прошёл финальный раунд чемпионата по программированию Яндекс.Алгоритм. Победителем стал Егор EgorK Куликов — выпускник мехмата МГУ и бывший сотрудник Яндекса. Второе место — у Николы Йокича из Швейцарской высшей технической школы Цюриха. В составе команды школы он был финалистом ACM ICPC. Третье место занял Макото Соэдзима, выпускник Университета Токио. Геннадий Короткевич, победитель двух предыдущих Алгоритмов, занял шестое место.


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


image


В этом году мы получили на четверть больше заявок на участие в Алгоритме, чем год назад, — 4578. Среди участников пока немного девушек — 372. В списке зарегистрировавшихся есть представители 70 стран; больше всего соревнующихся — из России, Индии, Украины, Беларуси, Казахстана, США и Китая. В финале приняли участие 25 человек.


Задачи для Яндекс.Алгоритма составляют сотрудники Яндекса и приглашённые эксперты, среди которых — финалисты и призёры ACM ICPC. По условиям состязания, участники могут использовать разные языки программирования. Статистика Яндекс.Алгоритма показывает, что самый популярный язык — С++; его выбрали более двух тысяч человек. Второе место поделили Python и Java.

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

Подключение шлюзов Intel для интернета вещей к IBM Watson

Время на прочтение3 мин
Охват и читатели5.6K
Когда речь идёт о разработке для интернета вещей, на первый план выходят скорость и качество. Чем быстрее идея превратится в стабильный рабочий прототип, тем больше у неё шансов развиться дальше, пойти в производство и стать настоящей «вещью», которую, вполне возможно, сочтут полезной миллионы. Что нужно для такого превращения? Intel и IBM подготовили ответ на этот и многие другие насущные вопросы IoT-разработчиков. А именно, речь идёт о совместной инициативе компаний, которая направлена на то, чтобы дать всем желающим современные аппаратные решения (Intel IoT Developer Kit) и облачную платформу, рассчитанную на нужды интернета вещей (IBM Watson IoT).


Если описать эту инициативу в двух словах, то окажется, что, пользуясь компонентами из Developer Kit, можно быстро собрать прототип IoT-устройства, написать для него программы и подключить всё это к облачной платформе IBM Watson. В результате, например, может получиться некая интеллектуальная система, которая собирает данные, возможно, выполняет их предварительную обработку, и отправляет информацию в облако, где её можно хранить и анализировать. На самом деле, это – очень простой сценарий, инструменты Intel и IBM позволяют, без преувеличения, создавать в сфере IoT всё, на что хватит фантазии разработчиков.
Читать дальше →

SObjectizer: от простого к сложному. Часть I

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

В первой статье мы рассказали о том, что такое SObjectizer и почему он получился именно таким. Во второй – попробуем показать, как может выглядеть более-менее реальный код на SObjectizer. С демонстрацией того, в какую сторону этот код обычно эволюционирует. Ибо первоначально, когда у разработчика появляется возможность работать с Actor Model, он начинает этой возможностью злоупотреблять, создавая проблемы и себе, и тем, кто будет эксплуатировать программный продукт, написанный в стиле «актор на каждый чих». Только спустя некоторое время и некоторое количество набитых шишек приходит понимание того, что прелесть модели акторов вовсе не в возможности создавать их десятками тысяч или даже просто тысячами. Но давайте пойдем последовательно, не опережая события.


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

PostgreSQL. Как правильно хранить котов или история одной миграции

Время на прочтение7 мин
Охват и читатели27K
История взята из реального проекта. Но поскольку реальный проект слишком скучный (и под NDA), в этой статье используется упрощенный пример.

Жил-был один проект. И была у него база данных. И была в базе таблица для хранения, ну, скажем, котов. Вот такая:
CREATE TABLE cats (
    id serial,
    cname varchar(20),
    ctype varchar(20),
    primary key(id)
);

Все довольно просто: у каждого кота есть id, имя и некий тип.

Конечно, у нас были бизнес-требования к котам и их типам. Например, мы точно знали, что у нас есть типы big furry, neko и sudden danger. Предполагали, что могут появиться типы long tail и sleeper-eater. Но мы ожидали, что требования будут меняться. И пока не известно, какие в итоге понадобятся типы. Поэтому использовали тип данных varchar(20).
Читать дальше →

Маслобойка

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

Ты слышал про парня, который попрощался с OOП?


О нет. Ещё один? Что же он сказал?

Он описал все обещания OOП, и как ни одно из них на самом деле не было исполнено, и что все возможности ООП обходятся дороже, чем они реально стоят, и функциональное программирование лучше, и ...


Ох. Да, я слышал всё это раньше...

Таким образом, OOП окончательно умерло, и мы можем двигаться дальше.


Двигаться дальше к чему?

Ты чего? К следующему технологическому прорыву, конечно!


А, к этому… И что там у нас на очереди?

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

Обзор физики в играх Sonic. Части 7 и 8: пружины и штуковины, суперскорости

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


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

Персональный рейтинг депутатов каждому при помощи JavaScript и браузера Chrome

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

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


Голоса депутатов находятся на vote.duma.gov.ru. Нам остаётся проголосовать за важные для нас законопроекты в соответствии со своим видением и получить рейтинг на основе которого и делать выбор на выборах.


Я выбрал наименее затратный путь и написал JavaScript расширение для Chrome. Работа с ним организованна через консоль браузера (Ctrl + Shift + J). Бонусом я протестировал поддержку русского языка в JavaScript без препроцессоров.


Под катом вас ждёт код с комментариями и комментарии к статье.


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

Rust: for и итераторы

Время на прочтение6 мин
Охват и читатели18K
(предыдущая статья)

В данной статье мы обсудим for циклы, а так же родственные понятия итераторов и «итерируемых объектов».

В зависимости от вашего предыдущего опыта с другими языками программирования данные концепции могут показаться очень знакомыми в плане синтаксиса и семантики, или же совершенно новыми и непонятными. Наиболее близкие их аналоги можно найти в Питоне, но, думаю, программисты на Java, C# или же (современном) C++ так же увидят много пересечений с тем что есть в их языках.
Подробности

Облачное хранилище: новые функции API

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


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

При этом мы рассказали далеко не обо всём: за время работы над API мы запустили несколько новых функций, которые, как мы надеемся, окажутся полезными для вас.
Читать дальше →

«Заложено природой»: Система хранения данных на основе ДНК

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


/ фото MIKI Yoshihito CC

В нашем блоге на Хабре мы регулярно делимся с вами последними новостями из мира IaaS. Например, недавно мы говорили о том, какие изменения ждут дата-центры в будущем. Мы также рассказывали, как крупные интернет-компании хранят свои данные. Сегодня нам бы вновь хотелось обратиться к теме хранения данных и рассказать о перспективной разработке – хранилищах на основе ДНК.
Читать дальше →

Кодогенерация в языке Go

Время на прочтение3 мин
Охват и читатели19K
В данной статье хотелось бы рассмотреть некоторые возможности кодогенарации в рамках языка Go, которые могут частично заменить встроенную рефлексию и не потерять типобезопасность на этапе компиляции.
Язык программирования Go предоставляет мощные инструменты для кодогенерации. Очень часто Go ругают за отсутствие обобщений (generics) и это в самом деле может стать проблемой. И вот тут на помощь приходит кодогенерация которая на первый взгляд довольно трудна для небольших рутинных операций, но тем не менее является достаточно гибким инструментом. Уже существует некоторое количество готовых библиотек кодогенерации покрывающих базовые потребности в обобщениях. Это и «эталонный» stringer и более полезные jsonenums с ffjson А мощный gen и вовсе позволяет добавить в Go немного функциональщины, в том числе добавляет аналог так не хватаемого многим forEach для пользовательских типов. Ко всему прочему gen довольно легко расширяется собственными генераторами. К сожалению gen ограничен кодогенерацией методов для конкретных типов.
Собственно тему кодогенерации я решил затронуть не от хорошей жизни, а из за того, что столкнулся с небольшой задачей для которой не смог найти другого подходящего решения.
Читать дальше →

Распределенное выполнение Python-задач с использованием Apache Mesos. Опыт Яндекса

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

Подготовка релиза картографических данных включают в себя запуск массовой обработки данных. Некоторые задачи хорошо ложатся на идеологию Map-Reduce. В этом случае задача инфраструктуры традиционно решается использованием Hadoop или YT


В реальности часть задач таковы, что разбиение их на маленькие подзадачи невозможно, или нецелесообразно (из-за наличия существующего решения и дорогой разработки, например). Для этого мы в Яндекс.Картах разработали и используем свою систему планирования и выполнения взаимосвязанных задач. Одним из элементов такой системы является планировщик, запускающий задачи на кластере с учетом доступных ресурсов.
Workflow Graph


Эта статья о том как мы решили эту задачу с использованием Apache Mesos.

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

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

Rust: & и ref в паттернах

Время на прочтение5 мин
Охват и читатели12K
(продолжение)

Как вам, думаю, известно, Раст входит в число языков реализующих сопоставление с образцом (pattern matching). В случае если вам незнаком данный термин, вы можете думать о нём как об обобщёном switch выражении в котором мы сравниваем объекты не только по значению, но и по структуре:

match hashmap.get(&key) {
    Some(value) => do_something_with(value),
    None => { panic!("Oh noes!"); },
}

Разумеется сравнением дело не ограничивается. Как вы можете видеть в примере выше, объекты так же могут быть деструктурированы во время сопоставления (Some(value)) и их части присвоены другим переменным (value), которые могут быть далее использованы в соответствующей ветви match выражения.

Изящно, не правда ли? В Расте сопоставление с образцом это хлеб и масло не только для match, но и для for, (if) let и даже для обыкновенных аргументов функции.

Однако, долгое время я достаточно смутно представлял себе что происходит в случае когда мы добавляем к сопоставлению ссылки и заимствования. & и ref являются двумя «операторами» часто используемых при этом. Разнице между ними и будет посвящена данная статья.
Читать дальше →

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

Время на прочтение10 мин
Охват и читатели29K
Многие языки программирования включают в себя избыточные возможности. Развитие языка включает в себя работу по их исключению.

Существует много языков программирования, и новые продолжают появляться всё время. Лучше ли они тех, что уже существовали раньше? Очевидно, что на этот вопрос невозможно ответить, пока не будет дано чёткое определение что же такое «лучше» в отношении языков программирования.

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

«Совершенство достигается не тогда, когда нечего добавить, а тогда, когда нечего убрать»

Антуан де Сент-Экзюпери

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

Наши центры разработки по стране с «телепортами» до любого города

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

Типовое рабочее место: два монитора, дорожный ноутбук, лампа, интернет

У нас очень много работы в разработке, и далеко не вся она требует присутствия в Москве, и далеко не всех разработчиков можно легко найти в столице. Поэтому принцип довольно простой: находим разработчиков в городе, где им приятно жить, снимаем там хороший и удобно расположенный офис и просто присылаем задачи. Связь по сети, еда в ближайшем ресторане по абонементу. И все счастливы. Мы — тем, что получаем «головы», которых нет в Москве, по ценам города (разница с Москвой вполне окупает аренду офиса), а разработчики могут работать у себя и путешествовать по стране.


Тестировщик в Иркутске

«Телепорты» сделаны так: можно поехать в любой другой такой же центр разработки на 4 недели на пробу поработать там. С сохранением зарплаты, и ещё гостиница и питание — за счёт компании. Если «порт приписки» Москва, то, перемещаясь в другой офис, надо ещё обязательно прочитать семинар.

Проекты, над которыми работают распределённо по стране, — от автоматизации АЭС до разного прикладного софта «Ленты», Мосгорсуда, Росстата и так далее.

Всего у нас сейчас 7 таких центров — от маленького офиса на 5 человек в бизнес-центре до большой региональной команды из 30 разработчиков и тестировщиков. Но, конечно, исторически пока больше всего разработчиков и тестировщиков в Москве — около 250 человек (это один из самых больших отделов в КРОК). Однако скоро процент работающих в других городах грозит приблизиться к половине. География довольно обширная: Москва (включая отдельный небольшой офис в Троицке), Петербург, Нижний Новгород, Самара, Иркутск, Пермь, Краснодар.
Читать дальше →

Разработка личной системы управления

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

Мотивация


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

Если интересно, что с этим может поделать отдельный человек — добро пожаловать под кат.
Читать дальше →

uDev tech events: Харьков, 9 августа. Better Architecture with UX-Driven Design

Время на прочтение1 мин
Охват и читатели2.8K
Что посетить: uDev Tech Events
Когда: 9 августа, вторник, 18:00
Где: г. Харьков, Premier Palace Hotel

Тема встречи: Better Architecture with UX-Driven Design


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

Видео докладов с DevConf 2016

Время на прочтение1 мин
Охват и читатели17K
17-го июня в инновационном центре “Сколково” прошла очередная ежегодная конференция DevConf, а Badoo в очередной раз снимали видео выступлений. Программа была богата на именитых спикеров и интересные доклады, поэтому сделать подборку из самых «вкусных» выступлений было крайне сложно. Но мы, как минимум, постарались…

Познавательного вам просмотра!

«Развитие ветки PHP-7», Дмитрий Стогов, Zend Technologies




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

«Пока не село Солнце»: Стоит ли заставлять программистов работать 80 часов в неделю

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


/ фото Joshua Blount CC

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

Сегодня нам бы хотелось затронуть тему продолжительности рабочего дня. Один из пользователей социального сервиса Quora задал вопрос, который породил бурное обсуждение среди разработчиков. Он пытался выяснить, как заставить программистов оставаться в офисе 80 и более часов в неделю. Нас заинтересовала эта тема и мы решили посмотреть, что думают на этот счет сами разработчики.
Читать дальше →

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