Однажды мы с нашей командой решили попробовать gRPC для своих задач. После некоторых обсуждений, пришли к выводу, что будем использовать асинхронные клиент и сервер. Однако, под рукой оказался рабочий пример из документации только для одного режима. Примеры остальных режимов взаимодействия, основные принципы работы асинхронных операций, принципы работы асинхронного сервера и клиента в gRPC и многое другое под катом.
Валерий Шиманский @vertu77
User
CPU-лимиты и агрессивный троттлинг в Kubernetes
8 min
38KTranslation
Прим. перев.: эта поучительная история Omio — европейского агрегатора путешествий — проводит читателей от базовой теории до увлекательных практических тонкостей в конфигурации Kubernetes. Знакомство с такими случаями помогает не только расширять кругозор, но и предотвращать нетривиальные проблемы.
Доводилось ли вам сталкиваться с тем, что приложение «застревало» на месте, переставало отвечать на запросы о проверке состояния (health check'и) и вы не могли понять причину такого поведения? Одно из возможных объяснений связано с лимитом квот на ресурсы CPU. О нем и пойдет речь в этой статье.
TL;DR:
Мы настоятельно рекомендуем отказаться от CPU limit'ов в Kubernetes (или отключить квоты CFS в Kubelet), если используется версия ядра Linux с ошибкой CFS-квот. В ядре имеется серьезный и хорошо известный баг, который приводит к избыточному троттлингу и задержкам.
Доводилось ли вам сталкиваться с тем, что приложение «застревало» на месте, переставало отвечать на запросы о проверке состояния (health check'и) и вы не могли понять причину такого поведения? Одно из возможных объяснений связано с лимитом квот на ресурсы CPU. О нем и пойдет речь в этой статье.
TL;DR:
Мы настоятельно рекомендуем отказаться от CPU limit'ов в Kubernetes (или отключить квоты CFS в Kubelet), если используется версия ядра Linux с ошибкой CFS-квот. В ядре имеется серьезный и хорошо известный баг, который приводит к избыточному троттлингу и задержкам.
+38
Книга «Глубокое обучение. Погружение в мир нейронных сетей»
6 min
71K Привет, Хаброжители! Недавно у нас вышла первая русская книга о глубоком обучении от Сергея Николенко, Артура Кадурина и Екатерины Архангельской. Максимум объяснений, минимум кода, серьезный материал о машинном обучении и увлекательное изложение. Сейчас мы рассмотрим раздел «Граф вычислений и дифференцирование на нем» в котором вводятся основополагающее понятие для реализации алгоритмов обучения нейронных сетей.
Если у нас получится представить сложную функцию как композицию более простых, то мы сможем и эффективно вычислить ее производную по любой переменной, что и требуется для градиентного спуска. Самое удобное представление в виде композиции — это представление в виде графа вычислений. Граф вычислений — это граф, узлами которого являются функции (обычно достаточно простые, взятые из заранее фиксированного набора), а ребра связывают функции со своими аргументами.
Если у нас получится представить сложную функцию как композицию более простых, то мы сможем и эффективно вычислить ее производную по любой переменной, что и требуется для градиентного спуска. Самое удобное представление в виде композиции — это представление в виде графа вычислений. Граф вычислений — это граф, узлами которого являются функции (обычно достаточно простые, взятые из заранее фиксированного набора), а ребра связывают функции со своими аргументами.
+55
Книга «Программирование для детей. Учимся создавать сайты, приложения и игры. HTML, CSS и JavaScript»
1 min
38KВсем привет! Мы издали книгу для детей, обучающую программированию. Профессор Бейрстоун и доктор Дэй (и, конечно пес Эрнест) играючи научат этому всего за шесть увлекательных приключений! Создавать собственные сайты, игры или приложения с помощью HTML, CSS и JavaScript — это весело и увлекательно.
Чтобы вы поняли, что это не только развлечение, но и серьезное веб-программирование мы покажем вам фрагмент книги про «Построение маршрута». Речь пойдет про добавление материала с другой страницы, встраивание карты с границу с помощью веб-api, применение api key, изучение принципа работы тега <iframe> и планирование маршрута с помощью карт Google.
+12
Нейронные сети для начинающих. Часть 1
7 min
1.5MПривет всем читателям Habrahabr, в этой статье я хочу поделиться с Вами моим опытом в изучении нейронных сетей и, как следствие, их реализации, с помощью языка программирования Java, на платформе Android. Мое знакомство с нейронными сетями произошло, когда вышло приложение Prisma. Оно обрабатывает любую фотографию, с помощью нейронных сетей, и воспроизводит ее с нуля, используя выбранный стиль. Заинтересовавшись этим, я бросился искать статьи и «туториалы», в первую очередь, на Хабре. И к моему великому удивлению, я не нашел ни одну статью, которая четко и поэтапно расписывала алгоритм работы нейронных сетей. Информация была разрознена и в ней отсутствовали ключевые моменты. Также, большинство авторов бросается показывать код на том или ином языке программирования, не прибегая к детальным объяснениям.
Поэтому сейчас, когда я достаточно хорошо освоил нейронные сети и нашел огромное количество информации с разных иностранных порталов, я хотел бы поделиться этим с людьми в серии публикаций, где я соберу всю информацию, которая потребуется вам, если вы только начинаете знакомство с нейронными сетями. В этой статье, я не буду делать сильный акцент на Java и буду объяснять все на примерах, чтобы вы сами смогли перенести это на любой, нужный вам язык программирования. В последующих статьях, я расскажу о своем приложении, написанном под андроид, которое предсказывает движение акций или валюты. Иными словами, всех желающих окунуться в мир нейронных сетей и жаждущих простого и доступного изложения информации или просто тех, кто что-то не понял и хочет подтянуть, добро пожаловать под кат.
+50
Интерполяция замкнутых кривых
8 min
17KВсем привет! Недавно возникла практическая необходимость использовать интерполяцию для замкнутых кривых. Проект разрабатывался под .Net на C#, а готовых реализаций алгоритма я не обнаружил, впрочем, как и для других языков и технологий. В результате пришлось самому изучить мат.часть существующих методов и написать свою библиотеку. Наработками и готовым решением готов поделиться с вами.
+43
Смотря на код с закрытыми глазами
6 min
123KОт переводчика
Эта статья — перевод блогозаписи Флориана Бейджерса, слепого программиста из Нидерландов.
Перевод любительский, поэтому прошу указывать на ошибки и критиковать.
Я не нашёл корректного перевода слова accessibility, поэтому перевёл его как «доступность». Если есть вариант получше — предложите, пожалуйста.
Антон Туманов предложил «адаптированность», за что ему большое спасибо.
Как заметил в комментарии pepelsbey, «доступность» является корректным переводом, вернул её обратно.
Почему я сделал перевод? Я наткнулся на опрос на Quora.com «Как программируют слабовидящие программисты?». Ответы людей меня впечатлили, а блогозапись Флориана показалась наилучшим вариантом для введения в этот важный вопрос.
Эта статья — перевод блогозаписи Флориана Бейджерса, слепого программиста из Нидерландов.
Перевод любительский, поэтому прошу указывать на ошибки и критиковать.
Как заметил в комментарии pepelsbey, «доступность» является корректным переводом, вернул её обратно.
Почему я сделал перевод? Я наткнулся на опрос на Quora.com «Как программируют слабовидящие программисты?». Ответы людей меня впечатлили, а блогозапись Флориана показалась наилучшим вариантом для введения в этот важный вопрос.
Я — программист. А ещё я слеп. Слеп, как крот, как говорится. Таков я от рождения.
Когда я говорю об этом своим товарищам, то те из них, у кого никогда не было проблем со зрением, обычно задают один из трёх вопросов:
- Как же ты тогда можешь читать то, что я пишу?
- Ого. А как ты тогда можешь кодить?
- Или — самый популярный вопрос — А ты видишь сны?
Мне задают эти вопросы снова и снова. Поэтому в этой блогозаписи я хочу на них ответить. Я попытаюсь нарисовать картинку для тех из вас, кто интересуется доступностью и тем, как слепые люди пользуются компьютером, кодят и выполняют другие работы в 21 веке.
+221
Долгожданный рокеткам на «Союзе»
1 min
81KРакеты-носители на базе королёвской «семерки» летают уже пятьдесят семь лет, но всё это время на них не ставили видеофиксаторы («рокеткамы»). Для телеметристов это было не особо нужно, а желание фанатов космоса посмотреть «как оно выглядит в полёте» не становилось достаточно заметным для того, чтобы только для этого потратить деньги и время и сделать модуль видеофиксации с передачей видео на Землю по космическим стандартам. На форуме «Новостей космонавтики» даже собирали подписи под открытым письмом к Роскосмосу с просьбой установить на «Союзы» рокеткамы. Не знаю, подействовало ли это письмо, или же это инициатива ЕКА, но на днях случилось радостное событие — на «Союз», стартовавший с Куру, установили рокеткам! И теперь мы можем посмотреть, как отделяются боковушки и вторая ступень, практически, от первого лица. Для меня это очень радостная новость, надеюсь и вам понравится:
+164
Обзор PocketBook Touch
5 min
29KПо результатам тестов авторитетного европейского журнала ComputerBild, последняя модель марки PocketBook – Touch — признана лучшим ридером.
Устройства оценивались в пяти категориях: качество экрана, функционал, технические характеристики, дополнительные функции и сервисное обслуживание. С опережением в каждой из категорий победителем стала модель PocketBook Touch.
Что же из себя представляет данный ридер и чем он так хорош?
Устройства оценивались в пяти категориях: качество экрана, функционал, технические характеристики, дополнительные функции и сервисное обслуживание. С опережением в каждой из категорий победителем стала модель PocketBook Touch.
Что же из себя представляет данный ридер и чем он так хорош?
+7
Съёмка показаний счетчика на телефон с последующим распознаванием
20 min
185KВступление
Так сложилось, что я живу в коттеджном поселке, где нет центрального отопления, а значит, каждый греет свою квартиру самостоятельно. Чаще всего для этих целей используются газовые котлы, метод достаточно дешевый, жаловаться не на что, но есть одна тонкость. Для корректной работы газового котла (внезапно) необходимо наличие газа в трубе.
Возможно, так ведут себя не все котлы, но наш отключается даже при кратковременном перебое с подачей газа и не включается обратно, если подача восстановится. Если кто-то есть дома, то это не проблема, нажал кнопку и котел греет дальше, но если вдруг так сложилось, что мы решили всей семьей поехать в отпуск, а на дворе зима, хорошая такая, чтоб -20°C, то последствия могут быть плачевными.
Решение простое — оставить ключи родственникам/друзьям/соседям, чтобы они могли приехать и включить котел, случись какая-нибудь неприятность. Хорошо, если есть сосед, который будет каждый день заходить и проверять, всё ли в порядке. А если нет? Или он тоже решит уехать куда-нибудь на выходные?
Итак, я решил наладить выкладывание показаний счётчика куда-нибудь в Интернет, чтоб я мог находясь где-нибудь в дальней поездке периодически проверять, тратится ли газ, а если вдруг перестанет тратиться, то срочно звонить родственникам/друзьям/соседям (или кому там я оставил ключи), чтобы приехали и нажали кнопку.
Конечно, после простого выкладывания показаний в Интернет я решил не останавливаться на достигнутом и замутил ещё распознавание показаний и графическое представление, об этом читайте в части 2 данного топика.
+93
Потоки — это Goto параллельного программирования
6 min
39KСразу раскрою мысль, вынесенную в заголовок. Использование потоков (также именуемых нити, треды, англ. threads) и средств прямой манипуляции ими (создание, уничтожение, синхронизация) для написания параллельных приложений оказывает столь же пагубное влияние на сложность алгоритмов, качество кода и скорость его отладки, какое вносило использование оператора Goto в последовательных программах.
Как когда-то программисты отказались от неструктурированных переходов, нам необходимо отказаться от прямого использования потоков сейчас и в будущем. И так же, как каждый из нас использует структурные блоки вместо Goto, вместо потоков должны использоваться структуры, построенные поверх них. Благо, все инструменты для этого появились во вполне традиционных языках.
Автор фото: Rainer Zenz
Как когда-то программисты отказались от неструктурированных переходов, нам необходимо отказаться от прямого использования потоков сейчас и в будущем. И так же, как каждый из нас использует структурные блоки вместо Goto, вместо потоков должны использоваться структуры, построенные поверх них. Благо, все инструменты для этого появились во вполне традиционных языках.
Автор фото: Rainer Zenz
+50
Раздаем 500К на организацию кружков робототехники
5 min
57KUPD: Конкурс завершен
Почти два года назад мы начали активно продвигать робототехнику в Екатеринбурге. Вскоре после начала нашей деятельности пришло понимание, что самый верный способ привлечения людей в эту сферу — работать со школьниками. Чем мы, собственно, успешно и занялись. Довольно быстро возникло желание масштабировать наш опыт. Нам удалось разделить это желание с двумя екатеринбургскими ИТ-компаниями — Naumen и Экстрим, результат — см. заголовок поста.
Под катом подробнее о том, как мы дошли до такой жизни. Сразу хочу разочаровать большинство присутствующих: выделять деньги будем только жителям Свердловской области, подробные условия здесь.
+74
Реверс-инжиниринг для самых маленьких: взлом кейгена
8 min
110KTutorial
Этот пост будет интересно действительно тем, кто только начинает интересоваться этой темой. У людей с опытом он, возможно, вызовет только зевки. За исключением разве что, может быть, эпилога…
Реверс-инжиниринг в той менее легальной части, где он не касается отладки и оптимизации собственного продукта, касается в том числе и такой задачи: «узнать, а как у них это работает». Иначе говоря, восстановление исходного алгоритма программы, имея на руках ее исполнимый файл.
Для того, чтобы держаться азов и избежать некоторых проблем — «взломаем» не что-нибудь, а… кейген. В 90% он не будет запакован, зашифрован или иным способом защищен — в том числе и нормами международного права…
Реверс-инжиниринг в той менее легальной части, где он не касается отладки и оптимизации собственного продукта, касается в том числе и такой задачи: «узнать, а как у них это работает». Иначе говоря, восстановление исходного алгоритма программы, имея на руках ее исполнимый файл.
Для того, чтобы держаться азов и избежать некоторых проблем — «взломаем» не что-нибудь, а… кейген. В 90% он не будет запакован, зашифрован или иным способом защищен — в том числе и нормами международного права…
+50
Cетевое взаимодействие посредством TCP в C# — свой велосипед
10 min
50KTutorial
Приветствую!
Продолжу серию постов посвященных программированию, на этот раз я хочу поговорить на тему сетевого взаимодействие посредством TCP соединения между .Net приложениями. Статья может быть полезна новичкам или тем кто еще не сталкивался с сетью по отношению к .Net. Полностью работоспособный пример прилагается: http://yadi.sk/d/1OxmAFuCN3kmc.
Подробности под катом.
+2
Повышение визуального качества для фотографий документов
5 min
35KВ последнее время пользователи все чаще получают изображения документов при помощи фотокамер или мобильных устройств, прибегая к помощи сканера изредка, в особых случаях. В то же время, для изображений, получаемых фотокамерами, характерны следующие недостатки: геометрические искажения (о них мы говорили в статье про автоматическое выделение документа), неравномерность освещения (часто можно видеть тени или засветки при использовании вспышки), падение контраста, расфокусировка, смаз, цифровой шум при недостаточном освещении. Постараемся избавиться от этих недостатков, применяя некоторые преобразования к исходному изображению, чтобы приблизить его вид к отсканированному.
+92
2ndb — тетрадка для записей, которая изучает, а затем улучшает того, кто в ней пишет
18 min
15KУ вас есть такие друзья, которые всё время что-то записывают в тетрадку или в файлик в Google Docs? Вы спрашивали у них о том, зачем они это делают, и что именно они туда пишут? Если нет, то отвечу за них (не за всех, но за многих):
Это употребляемая еда (в том числе её энергетическая ценность), расходы, время, затрачиваемое на сериалы (игры, работу, спорт), их планы на будущее, их ощущения от того, что они потребляют (например, оценка шоколадок) и прочие метрики и сведения об их жизни.
Но задумайтесь: если информации настолько много, и она настолько подробна, то ведь наверняка из этих данных можно что-то получить? Используя их, можно вычислить что-то ещё. Найти тенденции, закономерности. И тогда это уже будет не просто тетрадка, а действительно ценный и незаменимый инструмент, который не только позволяет хранить информацию, но и может давать советы. Он мог бы рекомендовать человеку скорректировать что-то в своей жизни таким образом, который, согласно результатам статистического вычисления, с наибольшей вероятностью даст желаемый результат.
Именно такую систему я бы и хотел описать более подробно: программный продукт, способный собирать информацию (на начальных этапах это в основном те данные, которые пользователь предоставляет самостоятельно, регулярно занося их в систему) и, анализируя её, находить в ней различные тенденции, связывать разнообразные аспекты человеческой жизни по каким-либо общим параметрам (например, обнаруживая хронологическую связь) и информировать пользователя в том случае, если у системы есть для него какие-либо рекомендации, советы или предостережения.
Это употребляемая еда (в том числе её энергетическая ценность), расходы, время, затрачиваемое на сериалы (игры, работу, спорт), их планы на будущее, их ощущения от того, что они потребляют (например, оценка шоколадок) и прочие метрики и сведения об их жизни.
Но задумайтесь: если информации настолько много, и она настолько подробна, то ведь наверняка из этих данных можно что-то получить? Используя их, можно вычислить что-то ещё. Найти тенденции, закономерности. И тогда это уже будет не просто тетрадка, а действительно ценный и незаменимый инструмент, который не только позволяет хранить информацию, но и может давать советы. Он мог бы рекомендовать человеку скорректировать что-то в своей жизни таким образом, который, согласно результатам статистического вычисления, с наибольшей вероятностью даст желаемый результат.
Именно такую систему я бы и хотел описать более подробно: программный продукт, способный собирать информацию (на начальных этапах это в основном те данные, которые пользователь предоставляет самостоятельно, регулярно занося их в систему) и, анализируя её, находить в ней различные тенденции, связывать разнообразные аспекты человеческой жизни по каким-либо общим параметрам (например, обнаруживая хронологическую связь) и информировать пользователя в том случае, если у системы есть для него какие-либо рекомендации, советы или предостережения.
+2
Пять способов выгореть для программиста
4 min
113KTranslation
От переводчика
Выгорание в жизни программиста может случиться по самым разнообразным причинам; если задаться целью перечислить все пути, которыми оно подкрадывается к нам, то одно лишь это перечисление займет немало времени. Это еще один повод, по которому не стоит недооценивать процесс выгорания — иначе однажды вам придется искать дорогу обратно, и стоить это может очень дорого. Последняя строка вовсе не голословна — мне самому однажды смогла помочь лишь любовь к коду — когда уже, казалось бы, все осточертело и ничего не хотелось, чтение подвернувшегося Макконнелла навеяло воспоминания о том, как же когда-то мне нравилось программировать. И сегодня мне нравится делать это снова.
А теперь — слово автору.
Я отошел от своего выгорания только недавно — несмотря на то, что случилось оно несколько лет назад. Да, мне было непросто… очень непросто. Когда я думаю о произошедшем, на ум приходит немало причин тому, что случилось со мной — но самое интересное заключается в том, что каждой из них я никогда раньше не придавал значения. Хотите повторить мой путь и выгореть? Пожалуйста, у меня готов целый список, как следует поступать в таком случае:
Признайтесь себе: бизнес хочет, чтобы вы создавали наилучший продукт «для наших клиентов». Вы откладываете в долгий ящик какой-либо функционал из-за того, что не успеваете к дедлайну. Вы планируете проект и анализируете его со всех сторон для того, чтобы разбить на несколько «перевариваемых» частей, которые затем должны быть воплощены одним из кодеров (в роли обезьянки, или code monkey, кстати говоря, можете быть и вы один). Вы создаете рабочий прототип, затем получаете обратную связь и делаете еще одну итерацию. И все это — без единой мысли о себе любимом.
Выгорание в жизни программиста может случиться по самым разнообразным причинам; если задаться целью перечислить все пути, которыми оно подкрадывается к нам, то одно лишь это перечисление займет немало времени. Это еще один повод, по которому не стоит недооценивать процесс выгорания — иначе однажды вам придется искать дорогу обратно, и стоить это может очень дорого. Последняя строка вовсе не голословна — мне самому однажды смогла помочь лишь любовь к коду — когда уже, казалось бы, все осточертело и ничего не хотелось, чтение подвернувшегося Макконнелла навеяло воспоминания о том, как же когда-то мне нравилось программировать. И сегодня мне нравится делать это снова.
А теперь — слово автору.
Я отошел от своего выгорания только недавно — несмотря на то, что случилось оно несколько лет назад. Да, мне было непросто… очень непросто. Когда я думаю о произошедшем, на ум приходит немало причин тому, что случилось со мной — но самое интересное заключается в том, что каждой из них я никогда раньше не придавал значения. Хотите повторить мой путь и выгореть? Пожалуйста, у меня готов целый список, как следует поступать в таком случае:
1. Думать о проекте и только о нем
Признайтесь себе: бизнес хочет, чтобы вы создавали наилучший продукт «для наших клиентов». Вы откладываете в долгий ящик какой-либо функционал из-за того, что не успеваете к дедлайну. Вы планируете проект и анализируете его со всех сторон для того, чтобы разбить на несколько «перевариваемых» частей, которые затем должны быть воплощены одним из кодеров (в роли обезьянки, или code monkey, кстати говоря, можете быть и вы один). Вы создаете рабочий прототип, затем получаете обратную связь и делаете еще одну итерацию. И все это — без единой мысли о себе любимом.
+130
Много бесплатных книг по программированию
7 min
345KTranslation
Списки книг
- 25 бесплатных книг по информатике
- Шпаргалки
- CodePlex: Список бесплатных книг
- Бесплатные технические книги
- Galileo Computing (Немецкий)
- How to Design Programs: An Introduction to Computing and Programming
- Microsoft Press: Бесплатные книги
- MindView Inc
- Проект O'Reilly's Open Books
- TechBooksForFree.com
- Theassayer.org
- Wikibooks: Программирование
- Неплохая подборка, редактируемая сообществом (JIghtuse)
- Книги на Русском (telteron)
Программирование графики
+182
Организация MDIF объявила о создании бесплатной сети Outernet
1 min
30KСкрытый текст
странно, что новости до сих пор нет на хабре
В понедельник организация MDIF объявила о создании новой мировой сети доступа в Интернет. Проект получил название «Outernet» и предполагает размещение на околоземной орбите миниатюрных спутников CubeSats, покрывающих сетью Wi-FI все континенты.
+28
Простой скрипт на Python для заучивания английских слов или почему я не использую карточки
4 min
30KTutorial
На хабре уже не раз поднималась тема изучения английского языка (пруф). Она рассматривалась с разных ракурсов. Кто-то писал, что не зачем учить слова, при изучении иностранного. Кто-то делился способами, коих великое множество, от простых карточек, до целой тетради, исписанной по самое не хочу. В конце концов есть LinguaLeo, так же замечательный сервис, на котором без дополнительной платы можно учить по 10 слов в день. Хотя иногда платить не хочется, а 10 слов кажутся весьма небольшим количество для молодого организма, который познает таинства и прелести иностранной мовы. Тогда возможно этот скрипт вам будет полезен.
+10
Information
- Rating
- Does not participate
- Location
- Рязань, Рязанская обл., Россия
- Date of birth
- Registered
- Activity