[Archived] Джун уронил прод – Telegram
[Archived] Джун уронил прод
310 subscribers
1 video
70 links
Канал в архиве. Весь актуальный контент выходит здесь @from_junior_to_senior



Площадка для авторских статей о программировании, технологиях, инструментах разработки программного обеспечения

Блог @from_junior_to_senior
Навигация - @djuupbot
Обсуждения
Download Telegram
Forwarded from From Junior to CTO (Ivan Osipov)
Кодогенерация

Два года назад я узнал о проекте jooq. Это генерация кода с помощью которого можно работать с БД из Java. Автоматически создаются классы на основе схемы бд. Тогда это мне показалось чем-то новым, но с тех пор прошло время и генерация кода стала ощущаться чем-то странным. Тем не менее сама по себе задача интересная и отчасти уже решена. На днях открыл для себя библиотеку JavaPoet и её разновидность KotlinPoet, которая сейчас в Early-Access Release, но это нас не остановит, не так ли?

Создадим пустой проект на Kotlin и подцепим gradle зависимость

compile 'com.squareup:kotlinpoet:0.6.0'


внутри функции main опишем генерируемый класс:

val userClass = ClassName("example", "User")


класс находится в каком-то файле, по этому нам нужно этот файл описать, тут куча всяких билдеров и появилось острое желание сделать для этого Kotlin DSL ибо "слишком много шумного кода". Итак, к файлу:

val file = FileSpec.builder("example", "model")
...
.build()
file.writeTo(System.out)


Здесь мы говорим о том, что будем генерировать файл model c пакетом example, а затем распечатаем его на экран. Между инициализацией билдера и его терминальным вызовом build() происходит основной экшен. Например, мы можем добавить класс User в этот файл:

.addType(TypeSpec.classBuilder(userClass)
...
.build())
.build()


А в класс можно добавить проперти, но важно понимать, что библиотека не гарантирует компилируемости результата, так что сразу защищайтесь от вещей типа lateinit val, которые не скомпилируются. Итак, добавим к нашему классу свойство name:

.addProperty(PropertySpec
.varBuilder("name", String::class, KModifier.LATEINIT)
.build())
.build()


Так мы описали спецификацию var переменной типа String с модификатором lateinit

В результате описанного выше примера у нас сгенерируется следующий код:

package example

import kotlin.String

class User {
lateinit var name: String
}


Библиотека на GitHub здесь: https://github.com/square/kotlinpoet
Код, который мы рассмотрели выше для удобочитаемости выложил вот сюда: https://goo.gl/yuY7jd
Forwarded from From Junior to CTO (Ivan Osipov)
Instant View in Action
Полное руководство по разработке Instant View

Пользуетесь функцией Instant View? Это кнопочка в самом низу поста, который содержит в себе ссылку. При клике на кнопку вам становится доступен контент, который вы получите перейдя по ссылке, но при этом контент вы просматриваете прямо внутри телеграмма. Самый частый гость на просторах нашего мессенджера это telegra.ph, как его опытный пользователь могу сказать, что это отличный и простой как 5 копеек сервис для написания статей с минимумом возможностей. Однако, если у вас есть любимый сайт с которого вы хотели бы закидывать статьи прямо в соседний чат и для него телеграм до сих пор не поддерживает Instant View, то это можно исправить. На примере своего сайта я покажу и объясню как настроить Instant View для вашего случая, а результат вы увидите во время чтения этого поста с телефона.

Статья:
https://news.1rj.ru/str/iv?url=https%3A%2F%2Fi-osipov.ru%2Fpost%2Finstant-view-in-action%2F&rhash=cc209de8fde944
Forwarded from From Junior to CTO (Ivan Osipov)
Шаблон TolerantReader и Закон Постела

Время чтения: 8 минут

При взаимодействии множества систем постоянно встает вопрос об интеграции. Когда мы начинаем работать с чьим-то API, существует риск, что с представители API могут его изменить и мы будем к этому не готовы. Системы эволюционируют, развиваются и, порой, следствие этой эволюции - развитие API. По началу, изменения могут быть незначительными, почти совместимыми, но даже к таким изменениям мы должны быть готовы. С обратной стороны, когда мы кому-то отдаем своё API, нам нужно понимать, что наши клиенты могут быть готовы к переменам, если мы будем осторожны, консервативны к изменениям.

Статья:
https://news.1rj.ru/str/iv?url=https%3A%2F%2Fi-osipov.ru%2Fpost%2Fpostels-law-and-tolerant-reader%2F&rhash=cc209de8fde944
Forwarded from From Junior to CTO (Ivan Osipov)
Семантическое версионирование 2.0

Время чтения: 5 минут

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

Статья:
https://news.1rj.ru/str/iv?url=https%3A%2F%2Fi-osipov.ru%2Fpost%2Fsemanantic-versioning-2_0%2F&rhash=cc209de8fde944
Forwarded from From Junior to CTO (Ivan Osipov)
Хорошие новости!
6-7 апреля состоится конференция JPoint 2018 в Москве. Я там буду выступать с докладом Kotlin DSL: Теория и Практика. Больше подробностей по ссылке в конце. Учитывая количество статей на эту тему от меня, вы, вероятно, уже знакомы с основами, а доклад - это отличная возможность закрепить знания и, конечно, приходите просто познакомиться!

Ссылка на доклад: https://goo.gl/pSZigZ
Forwarded from From Junior to CTO (Ivan Osipov)
Protocol Buffers

Когда передача данных в виде JSON и XML объектов кажется слишком тяжеловесной, на помощь, в качестве альтернативы, приходит Protocol Buffers. Сегодня мы с вами разберемся с этим набирающим популярность протоколом сериализации и напишем небольшой демонстрационный пример на Java.

Статья:
https://news.1rj.ru/str/iv?url=https%3A%2F%2Fi-osipov.ru%2Fpost%2Fprotocol-buffers%2F&rhash=cc209de8fde944
Forwarded from From Junior to CTO (Ivan Osipov)
Система типов в Kotlin

Сейчас пишу статью по Kotlin Generics и тем временем решил освежить знания об иерархии типов. Нашёл отличную статью, которая на пальцах в картинках разбирает иерархию типов, включая Any, Nullable Types, Unit и Nothing. Для новичков в Kotlin - cтатья полезная, для опытных разработчиков, только если закрыть какие-то пробелы.

Ссылка на статью:
http://natpryce.com/articles/000818.html
Forwarded from From Junior to CTO (Ivan Osipov)
Kotlin Generics

Время чтения: 25 мин.

Первый релиз языка Kotlin включает в себя Kotlin Generics. Обобщенные типы, благодаря которым мы с вами можем писать более гибкие приложения с меньшим дублированием кода и большей типобезопасностью. Одно из важных преимуществ, которое дает вашему приложению использование Generics - проверка типов на этапе компиляции. Дизайнеры языка Kotlin ввели новые ключевые слова для работы с дженериками, что по началу может ввести в ступор даже опытного Java разработчика. Сегодня мы с вами обсудим что такое “дженерики”, удалим страх перед словами типа “контравариантность”, а заодно познакомимся с reified generics и star-projection.

Читать статью:
https://news.1rj.ru/str/iv?url=https%3A%2F%2Fi-osipov.ru%2Fpost%2Fkotlin-generics%2F&rhash=cc209de8fde944
Сейчас прохожу очередные онлайн курсы, вспоминаю мат. анализ и линейную алгебру, даже жаль, что в моем институте её подавали не так круто, как это делают современные преподаватели, особенно те, кто успел поработать в реальных проектах и применить знания на практике. У онлайн курсов есть один весомый недостаток - отсутствие погружения. Вы можете начинать курсы как угодно часто и бросать их так же часто, более менее реальный вариант - оплатить обучение, но какие есть альтернативы? Вы, наверное, слышали о городе Иннопо́лис с одноименным университетом? Так вот, оказалось, что учиться там можно абсолютно бесплатно. Это то самое реальное погружение в комьюнити и процесс обучения, чего не даст ни один онлайн курс, погружение, которое поможет по настоящему пробить карьерный потолок. Однако, уверен, вам, как и мне, кажется, что "бесплатно" это подозрительно. Оказывается, туда действительно серьёзный отбор, нужны знания Intermediate знания английского, хорошо, что записаться не сложно. Есть 4 направления: Управление разработкой ПО, Разработка безопасных систем и сетей, Управление большими данными, Робототехника. Нашел статью на хабре https://habrahabr.ru/article/329364/ Очень интересно было почитать истории действующих разработчиков, которые уехали учиться. Для тех, кто захотел получить образовательный грант, есть ссылка на описание конкурса в 2018: https://apply.innopolis.ru/~weW4O Был прямо удивлен, когда среди историй прочитал о том, как ребятам довелось пообщаться с Кентом Беком.
В прошлом посте об Инополисе писал про курсы с мат. анализом и линейной алгеброй. Оказалось, что кому-то интересно и про сами онлайн курсы. В своем блоге дал обзор на них и рассказал как пройти их бесплатно. Почитать можно по ссылке: https://news.1rj.ru/str/from_junior_to_senior/94
Сегодня в 19.30 (МСК) трансляция митапа. Доклады:
Андрей Бреслав - Kotlin: практика разработки современного языка программирования
Александр Федоров - Как киту съесть Java-приложение и не поперхнуться (про запаковывание Java в докер контейнеры)
Ссылка:
https://www.youtube.com/watch?v=YbRGHWcl6ZE
Forwarded from From Junior to CTO (Podcast)
Спустя 5 месяцев затишья к вам в радио приемники снова прилетел From Junior To Senior Podcast.
В пятом выпуске подкаста мы обсудим микросервисы, я расскажу о процессе подачи доклада на JPoint и немного поговорим о курсах DataScience.

Sound Cloud

Ищите в iTunes 🎧

Слушайте прямо внутри Telegram
——
Контент о котором я говорю:
Книга: Sam Newman. Создание микросервисов
Point 2018. Kotlin DSL: Теория и Практика
Пост о курсе
Forwarded from From Junior to CTO (Ivan Osipov)
Закон Стиглера об эпонимии

Минутка истории. Пока проходил курсы, услышал про интересное эмпирическое наблюдение, которое описал Стивен Стиглер в своей статье "Stigler's law of eponymy" в 1980 году. Звучит оно следующим образом: "Никакое научное открытие не было названо в чесь первооткрывателя". Эпоним — лицо от имени которого образовано имя нарицательное или имя собственное чего-либо. В России закон Стиглера носит название "принцип Арнольда", который В.И. Арнольд сформулировал в 1998 году.

Для того, чтобы вы представляли масштаб, вот вам несколько примеров:
Арабские цифры были изобретены в Индии.
Числа Фибоначчи существовали в индийской математике за 200 лет до н.э.
Распределение Гауса, тот самый колокольчик, нормальное распределение, ввел Муавр в 1733.
Болезнь Альцгеймера была описана несколькими людьми до Алоиза Альцгеймера.

Интересно, что, по мнению самого Стиглера, первооткрывателем закона был Роберт Мертон, т.е. закон применим сам к себе.

Вот ссылка с другими примерами:
https://goo.gl/fmVk4A
Forwarded from From Junior to CTO (Ivan Osipov)
Анализируя данные, часто нам приходится строить графики и если вы учились в техническом вузе, то для вас должно быть очевидно, что далеко не каждый построенный график будет принят. Одни будут отклонены из-за неподписанных осей, другие из-за отсутствия размерностей, третьи смешались и неразличимы на одной диаграмме. Рисовать графики это своего рода искусство. Сегодня я принёс статью, которая рассказывает о популярных ошибках при построении диаграмм. В ней, например, вы узнаете, что pie chart'ы в технической отрасли можно встретить не часто, вместо них используются гистограммы. В статье вы найдете примеры из разных сфер, примеры о корреляции курения и рака лёгких, примеры из химии. Для тех, кто не хочет терять времени на всю статью, я приведу краткий перечень популярных ошибок, которые упоминаются:
- неподписанные оси
- отсутствие размерностей
- излишнее связывание точек рассеивания
- неуместное инвертирование осей
- вводящий в заблуждение масштаб
- недостаточная детализация в экстремумах
- игнорирование существования логарифмического масштаба

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

Статья:
http://www.ruf.rice.edu/~bioslabs/tools/data_analysis/graphic_examples.html
Forwarded from From Junior to CTO (Ivan Osipov)
Мягкое введение в машинное обучение

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

Ссылка:
https://miguelgfierro.com/blog/2016/a-gentle-introduction-to-the-basics-of-machine-learning
Решил разузнать поподробнее о жизни людей в Иннополисе.
Студенты живут в современных номерах кампуса, которые уже обставлены новой мебелью. По всей территории раскидан бесплатный Wi-Fi, а сама территория кампуса охраняется. На территории расположился спорт. комплекс университета с тренажерным залом, бассейном и другими ништяками. Естественно, для студентов это всё сделали бесплатно. Никогда не видел, чтобы институт так вкладывался в своих студентов. Судя по фотографиям из их лекционных залов, становится очевидно, что исписанная мелом доска плавно уходит в прошлое, приятно помахать ей в след.

На всякий случай напомню, что в Иннополисе ведется набор на четыре направления магистратуры:
Управление разработкой ПО
Разработка безопасных систем и сетей
Управление большими данными
Робототехника
Раньше писал о Russian AI Cup и даже статьи были об опыте участия в этом чемпионате по разработке ИИ. Russian AI Cup это ежегодный контест и как вы понимаете, ждать целый год до следующего соревнования жуть как долго. По этому, от тех же авторов есть "Мини AI Cup". Это тоже соревнования по ИИ, но менее масштабные. Вот сайт соревнований http://aicups.ru В оффициальной группе в телеграмме вывесили расписание проведения чемпионата. Ссылка на пост: https://news.1rj.ru/str/aicups/48246
Сейчас песочница открыта в тестовом режиме. Почитать о мире для которого пишется ИИ можно вот здесь: http://aicups.ru/round/1/
Forwarded from From Junior to CTO (Ivan Osipov)
Регрессия к среднему

Выше мы с вами уже говорили о линейной регрессии, сегодня мы поговорим о регрессии к среднему.
В далёком 1885 году Френсис Гальтон в своей работе "Регрессия к середине в наследственности роста" показал, что отклонение от среднего роста детей равняется 2/3 отклонения от среднего роста их родителей. Еще один результат работы Гальтона - Машина Гальтона ( https://img1.liveinternet.ru/images/attach/b/2/24/203/24203870_img06.gif ). В конце будет видео. На видео и на картинке как раз показана машина Гальтона. Кратко, возьмём некоторое пространство и разделим его на n ячеек. Сверху поставим множество штырьков и вертикально будем сбрасывать шарики. Каждый шарик отбивается от штырька и равновероятно уходит либо вправо, либо влево. В результате оказывается, что шарики ссыпались в ячейки так, что сформировали гауссиану. Здесь мы наблюдаем плотность вероятности нормального распределения (нормальное распределение описывает вероятность события, которое является следствием большого колличества слабо взаимозависимых случайных событий). Интересно, что если у такой машины убрать дно, а снизу поставить еще одну такую машину Гальтона, то окажется что после прохождения шариками через новые штырьки снова сформируется аналогичная гистограмма.

Попытаемся теперь понять эффект регрессии к среднему. Зафиксируем один шарик, который в нижней машине находится в ячейке ближе к краю, окажется, что наиболее вероятно, что этот шарик пришел не из ячейки вертикально расположенной над ним, а от ячейки, которая ближе к среднему. Это происходит из-за того, что в середине шариков больше. Тоже самое можно провернуть со студентами. Например, допустим студентам дали очень сложный тест. Теперь возьмём 10% тех, кто получил наивысший бал, проведем тест еще раз и окажется, что скорее всего средний бал в этой группе упадет. Это происходит, потому что люди которые были удачливы в первый раз, не будут так удачливы во второй. Это и есть эффект регрессии к середине.

Ссылка на видео с машиной Гальтона: https://www.youtube.com/watch?v=1DTRzPRfu6s
На хабре вышла статья обозревающая программу конференции JPoint 2018. По текущему расписанию мой доклад поставили на 6 апреля, приходите, подходите, познакомимся вживую.

Статья на хабре: https://habr.ru/p/351776/