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



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

Блог @from_junior_to_senior
Навигация - @djuupbot
Обсуждения
Download Telegram
🍽 Анонс

Алгоритмы поиска кратчайшего пути: BF, Дейкстра, A Star

Уже завтра начинается Russian AI Cup. Последние дни я провёл в изучении алгоритмов поиска пути, а это значит, что самое время написать об этом. В ближайших статьях мы с вами рассмотрим практическое применение алгоритмов поиска по графу, а именно алгоритм поиска в ширину, алгоритм Дейкстры и A Star. Меня утомляют скучные объяснения, по этому, я простым языком расскажу о том как алгоритмы работают и могут быть применены, дам ссылки на очень крутые источники, более того, скину исходники алгоритмов на Java, которыми вы сможете воспользоваться для решения своих задач. Присоединяйтесь к участию и присылайте свои результаты!

Читать другие статьи: t.me/djuupbot
VR (Virtual Reality) - огромная индустрия сегодня, когда я вижу новости от facebook об очередных достижениях в виртуальном мире, я не удивляюсь, что мои инвестиции в них растут. Вы только представьте соц сеть в виртуальной реальности... Убойно! Если вы до сих пор путаете VR и AR (Augmented Reality/Дополнительная реальность) прочитайте вот этот пост t.me/fit_predict/96. Нашел много интересной аналитики, новостей и даже приложения, которые следует испытать, вот здесь @fit_predict. Отличный агрегатор информации о перспективных технологиях.
Автор, ведущий data scientist, также публикует обзор интересных новостей, но основной уклон делает на информацию об интересных мероприятиях и обучающих программах в области искусственного интеллекта.
Статья

Алгоритмы поиска кратчайшего пути: Поиск в ширину

Автор: @ivan_osipov

Время чтения 🕔: 10 минут

Описание:
Хотите наконец разобраться в поиске путей по графу? Первый алгоритм, который мы рассмотрим, поиск в ширину. В статье мы разберем алгоритм, особенности реализации и пример. Также вы найдете ссылки на исходники, которые можете переиспользовать при решении собственных задач.

Читать: Алгоритмы поиска кратчайшего пути: Поиск в ширину

Теги: #java #pathfinding #algorithms
​​Статья

Алгоритмы поиска кратчайшего пути: Алгоритм Дейкстры

Автор: @ivan_osipov

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

Описание:
Продолжим изучать поиск путей по графу? Второй алгоритм, который мы разберем, алгоритм Дейкстры. Теперь мы будем использовать взвешенный граф по которому и построим маршрут. В статье мы разберем алгоритм и пример применения в картинках. Ссылки на код, который можно запустить или переиспользовать при решении собственных задач, под катом.

Читать: Алгоритмы поиска кратчайшего пути: Алгоритм Дейкстры

Теги: #java #pathfinding #algorithms
Forwarded from From Junior to CTO (Ivan Osipov)
По ощущениям первая волна интереса к микросервисам утихла, теперь можно свежим взглядом посмотреть в эту сторону. Сейчас появилась хорошая инфраструктура для построения микросервисных архитектур, один Spring Cloud чего стоит. Плюс очевиден тренд на реактивные потоки данных (Reactive Streams). Плюс докер, который дает дополнительный уровень изоляции. Хотя я совершенно не верю в то, что написание микросервисов на разных языках это сколь-нибудь живой кейс, тем не менее сам подход интересный и влечет за собой решение большого количества интересных задач. Так, например, давайте ответим на вопрос, а как же нам авторизировать пользователя в каждом из микросервисов? Взглянем на прошлое. Существуют монолитные системы, все сервисы в одной куче, при входе вам выдаются права и проблем с их отслеживанием не возникает, но миктосервисы... Микросервисы сегодня это множество отдельно запускаемых приложений, в принципе, мы могли бы дать доступ каждому из них к бд с пользователями, но только представьте, какую нагрузку это даст на систему. Так дело не пойдет. В ходе изучения вопроса, я встретил следующий популярный вариант: пользователь аутентифицируется через OAuth2 на сервере авторизаций, который обладает полной информацией о пользователе, пользователь получает свого рода ссылку или токен, который вне сети микросервисов бесполезен, однако, при обращении к API, предоставив токен/ссылку, можно восстановить "значение" запросом от действующего сервера к серверу авторизаций. Значение в нашем случае это JSON Web Token. Полученный объект - это зашифрованная информация, расшифровать которую могут исключительно сервера с ключом. Получается, что сама информация о пользователе из сети микросервисов не выходит, а рамках неё - пропагируется, простым языком - прокидывается. Одно из условий - каждый сервер должен уметь расшифровать то, что он получил. Вот такой незатейливый способ авторизации по токену, который мы получаем от пользователя после его аутентификации. Ниже прикладываю ссылку на статью, где это всё более подробно разобрано, материал и его качетво хороши, так что если вы заинтересовались, то вперёд
https://nordicapis.com/how-to-control-user-identity-within-microservices/
Forwarded from From Junior to CTO (Ivan Osipov)
ICO Телеграм

Таким просто нельзя не поделиться. Есть подкрепленные слухи о том, что Телеграм будет проводить ICO, если вы не в курсе криптовалютного мира, то это процесс, когда происходит первичное размещение криптомонет. Название проекта Telegram Open Network. Судя по тому что пишут - это хороший способ монетизировать мессенджер и при этом не забрасывать мессенджер рекламой или чем похуже. Грядёт что-то интересное. Надеюсь, что это продвинется дальше чем просто слухи.

Источник: https://www.facebook.com/id77777/posts/10154846872521076
Forwarded from From Junior to CTO (Ivan Osipov)
Media is too big
VIEW IN TELEGRAM
FullHD ролик о Telegram Open Network
Forwarded from From Junior to CTO (Ivan Osipov)
API Docs

Как вы пишете доки к API приложения? Какие средства используете? Документация актуальна? Часто для документирования HTTP API используется swagger, простой и понятный инструмент, но сегодня мы поговорим о чем-то чуть более сложном, о чем-то чуть более продвинутом, а именно о Spring REST Docs. Довольно удивительно, что в разных кругах REST обозначает не сколько стиль архитектуры, сколько, в принципе, использование HTTP для построения API приложения. Spring Rest Docs (SRD) - это один из проектов Spring, который позволяет писать документацию к вашим REST сервисам и вот каким образом. Знакомы с TDD? Успели полюбить написание тестов? Здесь это пригодится. Документация в проекте SRD генерируется на основе написанных вами тестов. Как это выглядит?

Упрощенно, процесс следующий: пишем тест -> запускаем его -> генерируется сниппет в формате asciidoctor -> сниппет компилируется в html/pdf/другие форматы.

Тест для Spring Boot выглядит следующим образом.
Вы конфигурируете объект MockMvc, например, так (JUnit 5)
@SpringBootTest
@ExtendWith({RestDocumentationExtension.class, SpringExtension.class})
public class SampleJUnit5ApplicationTests {
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;

@BeforeEach
public void setUp(RestDocumentationExtension restDocumentation) {
this.mockMvc = MockMvcBuilders
.webAppContextSetup(context).apply(
documentationConfiguration(
restDocumentation))
.build();
}
...
}

Затем с его помощью пишите тест, например, так
@Test
public void sample() throws Exception {
this.mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andDo(document("sample"));
}

В результате у вас генерируются сниппеты, которые складываются в определенную папку в проекте, а уже из сниппетов генерируется документация. Какие я здесь вижу плюсы:
- документация всегда актуальна и есть пример запуска в виде теста;
- покрытие тестов неизменно растёт;
Минусы:
- навязывание TDD;
- документирование смешивается с тестированием (хотя, может быть это не минус).
Ниже дал ссылки, где можно почитать подробнее, если вы заинтересовались.

Spring Rest Docs: https://goo.gl/CF3NRv
Getting Started: https://goo.gl/WdRdF8
Примеры: https://goo.gl/cujcj5
Forwarded from From Junior to CTO (Ivan Osipov)
Последний рабочий день в этом году закончился, а это значит, что впереди 2 недели отдыха смешанного с реализацией отложенных до "свободного времени" идей и личностного роста. Этот год в самом его начале я обозвал "годом перемен", всё так и произошло. В этом году я закончил магистратуру, успел с женой дважды слетать в отпуск, посетил JPoint, в мою жизнь пришёл Kotlin, я открыл для себя мир телеграма, который затем открыл для меня мир статей, переслушал огромное колличество мотивирующей и бизнес литературы, что в корне изменило моё мышление и взгляды, начал свою дорогу в инвестировании и довольно успешно, сделал много открытий для себя лично, в общем год получился насыщенным. Всё это при поддержке моей жены, которой можно было довериться в любой ситуации. С Наступающим всех вас! Ставьте цели, идите к ним, не сомневайтесь и достигать задуманного. Помните, что остановиться в стремлении к лучшему можно в любой момент, так зачем это делать сейчас? Спасибо, что читаете! До следующего года!
Forwarded from From Junior to CTO (Ivan Osipov)
Квантовые компьютеры сегодня

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

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

Сегодня за первенство на рынке квантовых компьютеров борется сразу несколько компаний, среди которых IBM, D-Wave и подключившийся в 2015 году Intel. Ключевым приемуществом квантовых компьютеров перед классическими является возможность выполнять вычисления параллельно на физическом уровне опираясь на квантовую теорию. Такой подход поможет решать комбинаторные задачи в миллионы раз быстрее, чем это происходит сейчас на классических ПК.

Сегодня, компания IBM делает очень большой вклад в развитие инфраструктуры квантовых компьютеров. Компания, которая проспала мобильную революцию, в ноябре 2017 года реализовала 50 кубитный квантовый компьютер, что является хорошим показателем для универсальных квантовых компьютеров. Вы можете встретить упоминания о том, что d-wave продали свой 2000 кубитный компьютер, но обратите внимание на то, что он адиабатический, по сути это другой подход к реализации, направленный на конкретные задачи, а не что-то универсальное. Развивая спрос IBM выпускает обучающие видео, которые знакомят людей с этим новым сранным миром квантовых вычислений.

На рынке квантовых технологий есть еще одно направление - квантовые сенсоры. Всё в том же ноябре 2017 года Apple купила стартап InVisage, который разрабатывал "квантовую плёнку", по сути через несколько лет мы можем увидеть новый IPhone с камерой, которая даже при контрастном освещении не теряет объекты, а при низкой освещённости сможет делать снимки с дневным качеством.

Квантовые технологии - это важный фронт прогресса компьютерных вычислений. Не смотря на то, что в бытовых условиях мы с вами врядли увидим реализации на основе атомов охлажденных до "около" абсюлютного нуля, скорее здесь приживется подход от IBM на базе конденсаторов из ниобия, нелинейного алюминиевого моста и кремниевого чипа. Тем не менее, уже сегодня в этой области развиваются квантовые облачные вычисления и первое с чем я предлагаю вам познакомиться это IBM Quantum Experience. По сути, это облачная платформа, которая знакомит вас с построение программ для квантовых компьютеров. Похоже на что-то революционное. Пойду изучать, ниже ссылка
IBM Q Experience: https://goo.gl/YN9LCA
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