Рубрика «Программирование» - 624

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

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

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

Под катом подробности – описание методики, выводы, контент курса и описание того, как вы можете сделать подобную вещь в своем городе.
Читать полностью »

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

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

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

Предисловие

В прошлом уроке Вы научились создавать окно и собирать примеры. В этом уроке Вы научитесь рисовать объекты! Что же, прошу под кат.
Читать полностью »

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

Предисловие

Если появляется желание начать изучать OpenGL — то чаще всего натыкаешься на уроки NeHe и сразу начинаешь с устаревшего OpenGL. Но в интернете есть хороший набор уроков по новому OpenGL 3.3, поддерживаемый сообществом. Сам набор разделен на 3 группы: Базовые уроки, Продвинутые уроки и Всякое. Я постараюсь выпускать по статье на каждый урок, а в начале каждой статьи буду оставлять небольшое содержание. Спасибо.
Читать полностью »

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

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

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

Читать полностью »

Rust: & и ref в паттернах - 1
Как вам, думаю, известно, Раст входит в число языков реализующих сопоставление с образцом (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 являются двумя «операторами» часто используемых при этом. Разнице между ними и будет посвящена данная статья.
Читать полностью »

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

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

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

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

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

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

Наши центры разработки по стране с «телепортами» до любого города - 1
Типовое рабочее место: два монитора, дорожный ноутбук, лампа, интернет

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

Наши центры разработки по стране с «телепортами» до любого города - 2
Тестировщик в Иркутске

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

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

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js