Тебе не приелось слово REST? Нет, я не говорю об отдыхе, я говорю про тот самый архитектурный стиль. Пожалуй, слишком часто я слышу о том, что у тех REST API, у этих REST API, а потом, оказывается что всё не так просто. Здесь пойдет речь о том какой смысл в этой аббревиатуре и что в неё вкладывают все вокруг, мы вспомним идеи и посмотрим как их реализуют.
пʼятниця, 12 жовтня 2018 р.
понеділок, 10 вересня 2018 р.
Browsh
Нашел интересную штуку: текстовый браузер, который может работать в терминале и поддерживает HTML5, CSS3, JS, видео и WebGL.
неділя, 12 серпня 2018 р.
Книга по x86 ассемблеру
Многие говорят, что сейчас знание ассемблера не нужно, что это прошлый век и все такое. Однако когда такие "советчики" встречаются с багом компилятора или с непонятным core dump'ом они почему-то сразу смолкают.
Конечно, я тоже не приветствую программирование всего кода на ассемблере, но иногда знание его просто необходимо в вышеупомянутых случаях.
Неплохое введение по ассемблеру можно найти в книге А. Столярова "Программирование на языке ассемблера NASM"
Книга бесплатная. Рекомендую, если вы совсем "чайник".
пʼятниця, 4 травня 2018 р.
Git в качестве создателя отчетов
В некоторых компаниях руководство требует отправлять отчеты о проделанной работе за неделю. Для быстрого составления отчета можно воспользоваться командой
git log --author="author_name" --after="1 week ago" --oneline
субота, 10 березня 2018 р.
Мягкое введение в машинное обучение
Хочу поделиться прекрасной статьёй, которая дает представление о том, что такое машинное обучение и в чем различие между аналитическими и обучающимися моделями. В качестве важной особенности статьи хочу отметить, что она написана очень просто, на простом английском, и читатель (сужу по себе) получает удовольствие не только от закрепления знаний (или даже от их получения), но и от чтения, практики языка.
пʼятниця, 9 березня 2018 р.
Инициализаторы в if С++17
В C++ можно объявлять переменные, которые преобразуются в bool, прямо в скобках оператора if
:
if (bool is_enabled = IsEnabled()) assert(is_enabled); while (bool should_contunue = ShouldContinue()) assert(should_continue); if (void* ptr = GetPointer()) assert(ptr != nullptr); if (std::optional<int> value = GetOptional()) assert(value.has_value());
В C++17 ввели инициализаторы непосредственно в операторе:
if (Status status = Foo(); !status.ok()) return status;
Что сильно напоминает Go:
if err:= Foo(); err != nil { return err }
середа, 28 лютого 2018 р.
Разработчики Instagram о работе с Python и Django
Нашел серию статей разработчиков Instagram о том, к каким методам им приходится прибегать для поддержания работы веб-версии, написанной на Python и Django.
пʼятниця, 23 лютого 2018 р.
Квадрокоптеры-атлеты
Квадрокоптеры-атлеты балансируют с тростью. Странно звучит, не так ли? Сегодня поделюсь с вами видео из robot lab в TEDGlobal. Raffaello D'Andrea демонстрирует применение моделей из теории управления и не только на квадрокоптерах. Сначала, один коптер с одной и тойже моделью балансирует как с тростью, так и с фужером с жидкостью. Смотрится очень эффектно. Затем, коптеры-атлеты выполняют кувырки и ловят мячи сетью, отбивают летящие мечи и имитируют другую среду, например, вязкую жидкость или гравитацию Плутона. В общем, очень занимательное видео, длится 16 минут. Рекомендую к просмотру.
понеділок, 19 лютого 2018 р.
"японский морской бой" на квантовом компьютере
В январе писал про квантовые вычисления и вот попалась интересная статья. Уже видел "квантовые шахматы", на ютубе есть ролик со Стивеном Хокингом и человеком-муравьём из одноименного фильма. Здесь же "японский морской бой". Автор рассказывает как воспользоваться облаком IBM для квантовых вычислений в примитивной игре. Статья даст вам некоторое представление о том, где может пригодиться суперпозиция кубита.
середа, 7 лютого 2018 р.
Телеграм сделал виджет для аутентификации
Долгое время все те, кто хотел прикрутить к своему сайту или приложению аутентификацию через телеграм выкручивали всякие финты с ботами и даже с кастомными клиентами (на хабре есть пара статей), мне тоже на паре своих пет-проектов пришлось через это пройти. Проблема была в том, что пользователю необходимо было явно обратиться к боту авторизации и только после этого процесс взаимодействия мог быть запущен (deep linking спасал нас как мог). Вчера телеграм наконец-то представил возможность разместить на сайте виджет для аутентификации. Попробую в ближайшее время, тем более есть где заменить самописную реализацию. По заявлениям это первая стадия введения Telegram ID. Ссылка на официальный обзор
неділя, 4 лютого 2018 р.
Kotlin Generics
Первый релиз языка Kotlin включает в себя Kotlin Generics. Обобщенные типы, благодаря которым мы с вами можем писать более гибкие приложения с меньшим дублированием кода и большей типобезопасностью. Одно из важных преимуществ, которое дает вашему приложению использование Generics - проверка типов на этапе компиляции. Дизайнеры языка Kotlin ввели новые ключевые слова для работы с дженериками, что по началу может ввести в ступор даже опытного Java разработчика. Сегодня мы с вами обсудим что такое “дженерики”, удалим страх перед словами типа “контравариантность”, а заодно познакомимся с reified generics и star-projection.
Система типов в Kotlin
Нашёл отличную статью, которая на пальцах в картинках разбирает иерархию типов, включая Any, Nullable Types, Unit и Nothing. Для новичков в Kotlin - cтатья полезная, для опытных разработчиков, только если закрыть какие-то пробелы.
LazyInstance
В C++ глобальные объекты не POD типов имеют динамические инициализаторы. Это означает, что при запуске приложения до вызова функции main произойдет инициализация этих глобальных объектов. Это, конечно, влияет на время старта приложения. Но самое страшное, что эта инициализация и, соответственно, деинициализация глобальных объектов в разных единицах трансляции происходят недетерминированно. То есть в стандарте языка не указывается, в каком порядке будут вызываться конструкторы и деструкторы объектов. Как правило, это зависит от порядка линковки объектных файлов. Что это влечет за собой? А то, что если вы в одном файле создаете глобальный объект и инициализируете его значением другого глобального объекта в другой единице трансляции или при закрытии приложения начинаете обращаться к таким глобальным объектам, результат непредсказуем. Чаще всего возникает краш.
вівторок, 23 січня 2018 р.
Семантическое версионирование 2.0
Восхитительное чувство, когда один раз взглянув на новую версию сторонней библиотеки ты понимаешь, можно ли её смело обновлять или нужно быть готовым к изменениям в собственном коде. В сухую нумерацию пакетов вносит осмысленность Семантическое версионирование. У семантического версионирования есть свой сайт и основные посылы я брал оттуда (ссылка в конце статьи).
понеділок, 22 січня 2018 р.
Шаблон TolerantReader и Закон Постела
При взаимодействии множества систем постоянно встает вопрос об интеграции. Когда мы начинаем работать с чьим-то API, существует риск, что представители API могут его изменить и мы будем к этому не готовы. Системы эволюционируют, развиваются и, порой, следствие этой эволюции - развитие API. По началу, изменения могут быть незначительными, почти совместимыми, но даже к таким изменениям мы должны быть готовы. С обратной стороны, когда мы кому-то отдаем своё API, нам нужно понимать, что наши клиенты могут быть готовы к переменам, если мы будем осторожны, консервативны к изменениям.
понеділок, 1 січня 2018 р.
Квантовые компьютеры сегодня
С чего начать год, как не с революционных технологий? История квантовых компьюторов тянется из прошлого века, но последние 2-3 года эта сфера интересует всё большее количество людей. В основе квантового компьютера стоит понятие кубита.