Category: Videos, lectures and talks

Субботние лекции: Как перестать верить технологиям

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

Как выжить этим отважным парням в таких условиях? Есть на эту тему триптих из трёх лекций.

Первая:

Как ответ на неё последовала вторая:

там он ссылался на эту офтопную лекцию

И финальная третья лекция

В чём разница между модульными, интеграционными и функциональными тестами?

Есть большой и постоянный холивор на тему названий для разных категорий тестов. Например вот в статье
Unit and integration are ambiguous names for tests автора предлагает свою терминологию.
И везде принята немножко разная терминология. Например в Grails юнит тесты могут тестировать один класс: сервсис, или контроллер или даже вьюху, но при этом всё что можно мокается а вместо базы используется легковесная имитация на основе ConcurrentHashMap.
В интеграционных тестах у тебя уже появляется спринговый контекст, работает депенденси инжекшен и есть реальная база к которой можно SQL запросы посылать.
Функциональные тесты в Греилс это тесты через Selenium когда запускается реальный браузер и робот ходит и кликает.

Но вообщем говоря всё равно остаётся множество вопросов и на них хорошо рассказал Алексей Речиков в своём докладе «How we testing our software “Google way”»

Слайды

UPD: ещё мне понравился доклад по теме

Как жить на Legacy проекте

Несколько хороших и обязательных к просмотру лекций про то как разрабатывать и сопровождать старые легаси проекты.
Кстати тут нужно сказать что legacy — это переводится не просто как «наследство» а как некий дар, например когда бабушка передаёт внучке кольцо. Авторы термина хотели заложить какое-то позитивное значение 🙂

На эту тему почти на всех конференциях рассказывает Виктор Полищук:

Примечательна также классификация которую Виктор использует:

What is…

  • Very old projects, had been written long long ago.
  • The Highlander: Old mature projects, had been written ages ago. Optimization required.
  • Paragon: Die Hard Nobody knows why it is still alive.
  • Fashion or market victims: Nobody wants this sh%t anymore.
  • Problem Child: Nobody loves it. Sentenced Customer tired of supporting it, everything is up to you.
  • Apathetic: Nobody cares

What is usually NOT…

  • Badly written projects which are not in production.
  • Low quality designed projects.
  • Small projects.
  • Every project you don’t understand.

legacy code - переписать это говно мамонта

Виктор Полищук — Все что вы хотели знать о Legacy-коде, но стеснялись спросить

Виктор Полищук — Legacy: как победить в гонке

И этот доклад вдохновил ребят из ДатаАрта сделать свой доклад:

И продолжение «Travel, Legacy and SWAT. Q&A Session»

Презентация Michael Feather, автора книги Работа с унаследованным кодом:

Дмитрий Миндра: Refactoring Legacy Сode

Virtual JUG: Testing and Refactoring Legacy Code

Сергей Немчинский — Как создаются и поддерживаются Enterprise.
Очень хороший доклад где раскрывается суть легаси проектов, как они возникают и какая у них специфика.

Статья Практика рефакторинга в больших проектах в сотый раз о вечном. Для тех кто ещё халтурит и не прочёл замечательную книгу Working Effectively with Legacy Code

Ну и несколько интересных статей на окололегасиную тематику:
* Что иметь в виду при переписывании программного обеспечения
* Читайте код, с остальным справится компилятор
* Рентабельный код
* Поиск и чтение унаследованного кода
* Large scale refactoring

Небольшой конспект с добавлениями моих мыслей.
1. На легаси проекте всегда есть несколько параллельных подходов и технологий. В разное время были попытки и не всегда законченные сделать что-то правильно не выкидывая старого. Например если у вас был старый API и вы решили сделать новый — то у вас есть новый АПИ но клиенты всё равно используют старый потому что в нём были фичи которые вы в новый переносить не будете или ещё не решили как его сделать правильно. Точно также если у вас был JSF и вы решили переписать на Spring MVC то теперь у вас половина кода на Спринге и половина на JSF.
На моём текущем проекте живут одновременно чисто сервлеты, чисто JSP, JSF, JSP + Tiles, немного Velocity, Spring 3.0.7 и мы даже не можем перейти на Спринг 3.1, куча контролеров на Tapestry 4 (к которому уже даже документации не найдёшь), и Tapestry 5.0 который по сути совсем другой фреймворк и мы не можем даже переписать на Tapestry 5.3, просто потому что уже никто его не знает.
Всё это живёт одновременно и активно используется. Всё находится в полупереходном состоянии потому что пока начали переписывать и делать новые ошибки, вдруг выяснилось что чего-то сделать на новом практически невозможно и вообще уже наделали новых ошибок что уже и переписывать так пожалуй не стоит. Всё это устарело и затраты на обновление больше чем на переписывания с ноля.
Из-за версионного просака обновится невозможно. И иногда нужно просто смириться что это останется таким навсегда (привет Кобол программистам).
2. На лагаси проекте очень многое можно просто выкинуть. Очень много нуждается в оптимизации. Но как понять что можно менять а что нет? Как найти проблему? Т.е. здесь на первый план выходит и самое принципиальное это знать как используется программа: вам нужен мониторинг, вам нужно сборка и визуализация логов (logstash+elastic+kibana), или статистика юзаджей, вам нужен доступ к базе на продакшене, вам нужен доступ ко всем конфигам а то и вовсе к серверам. Насколько только это возможно. Именно с этого и следует начинать первым делом.
Допустим ты ковыряешься в коде и видишь кучу проблем связанных с тем что у вас регистрозависимые (case sensitive) логины пользователей, т.е. User и user это два разных пользователя. Потому что дальше ваша система шлёт эти юзернеймы через АПИ в другую систему которая их не поддерживает. И ты должен иметь возможность прямо сейчас посмотреть в конфигах включена ли эта возможность, посмотреть в базе как много пользователей с дублицироваными юзернеймами. Нужно погрепать логи как много пользователей столкнулось с этими проблемами.
Нужно поискать по истории ревизий кода когда добавлялся этот функционал и зачем. Нужно расспросить всех коллег кто что-то знает про это.
Т.е. на легаси проекте для того чтобы сделать какое либо изменение порой требуется настоящее и полноценное исследование, расследование, с допросами и большой археологической работой по изучения пластов кода и поиском то ишью трекеру.
Какая нибудь заброшенная страничка на Вики тебя может реально выручить. Отсюда следует следующий пункт…
3. Всё что только можно нужно записывать и потом никогда не выбрасывать. Желательно любые обсуждения и митинги потом записывать хотя бы тезисно и рассылать по почте, и её, корпоративную почта нужно беречь и лелеять. Возможно даже вам следует хранить логи и бекапы бд баз хотя бы за год. «Чем больше бумаги тем чище жопа». И не бойтесь что создаёте мусор — археологи по мусорным кучам восстанавливают знание о целых эпохах цивилизаций.
Просто поймите — даже самые очевидные для вас вещи следует записывать потому что команда совершенно точно поменяется полностью. Это всё равно что представьте что послезавтра весь ваш код, всю вики, все письма, весь репозиторий просто передадут на разработку в другую компанию.
4. На Вики писать и перечитывать\переписывать\обновлять статьи это абсолютно обязательная работа ничуть не меньшая чем писать код. Тикеты в ишью трекере периодически нужно проходить и перечитывать. Реально очень многие проблемы, уж поверьте, давно известны и даже были попытки их исправить. Это нудное занятие вам сэкономит кучу времени. Но читать их следует только после того как вы уже хоть немного разобрались с проектом, иначе вы не поймёте о чём там вообще идёт речь.
Дело в том что на легаси проекте из-за большого числа джира тикетов по закону больших чисел вы практически наверняка там точно есть практически все баги и проблемы, и вы можете достаточно точно оценить ситуацию с разными компонентами системы.
В совокупности с письмами из сапорта и логами это даёт хорошую картину на весь проект. Это важная метрика которая вам поможет вам понять размер трагедии.
5. На любом легаси проекте почти наверняка есть огромные проблемы со сборкой проекта. Обычно она не тривиальная, требуется ANT и Maven конкретной версии, собирается проект почти наверняка только под шестую джаву, требуются ручные действия. Билд долгий, тесты blinking (то падают то нет) и очень много из низ вообще отключены через @Ignore. Есть самодельно пропатченные версии библиотек. И это вам очень сильно повезёт если проект мавенизирован и зависимости вообще известны и доступны с Maven Central репозитория.
Из-за того что у вас много либ (а их наверняка много) а у вас нет возможности дать каждой свой classpath, у вас точно есть куча проблем с конфликтующими или дублирующимися зависимостями.
И для успешной жизни на проекте вам следует опустится вот это вот болото Мавена и стабилизировать билд. Это второе по важности после логов и мониторинга и метрик что следует сделать.
6. Любой код без тестов автоматически становится легаси. Ваша задача любой ценой покрыть код тестами. На каждый баг — покрываете то место тестами. Вплоть до драконовского правила не принимать новый код без тестов хотя и без фанатизма. Да, вам придётся замокать пол мира, написать кучу фикстур и стабов, написать долгие интеграционные тесты которые пол базы загрузят, но без этого вообще никак. Когда создавалось множество легаси проектов тогда тестирование ещё не было принято как промышленная практика или фреймворки которые были тогда не очень были рассчитаны на то что их нужно будет как-то тестировать. Сами тестовые библиотеки и техники с тех пор прошли большой и мучительный путь, и в каждом фреймворке уже изначально идёт куча вспомогательных классов и стабов и документации о том как тестировать.
Поэтому на легаси проекте это совершенно нормальная практика когда функционал написанный\исправленный за час вы в три раза дольше покрываете тестами. Постепенно самое гадкое вы всё таки покроете тестами а ваша архитектура всё таки начнёт постепенно становится лучшей для тестирования. Это трудозатратный путь, но он оправдан и рано или поздно принесёт плоды, просто верьте.
7. Дальше нужно улучшить логирование — подчистить лог от огромных стектрейсов и пофиксить то что их продуцирует. Дописать логи везде где только нужно, все входящие и выходящие реквесты в АПИ тоже логировать. При этом нужно сделать так чтобы логирование имело смысл по максимуму. Также в логах у вас почти наверняка будет множество секьюрной информации: пароли пользователей и ключи от АПИ, номера кредитных карт или что нибудь ещё такое чего там не должно быть. Представьте что ваши логи взломали хакеры — вы должны максимально им усложнить жизнь.
8. Улучшить мониторинг — через JMX пробросить все важные метрики: количество активных сессий или реквестов. Повключать всякие опции JVM для мониторинга. Об этом Виталий Тимчишин рассказывал в клубе анонимных программистов презентация, видео (часть 1), видео (часть 2) но лучше новую инфу поискать, особенно про FlightRecorder.
9. Билд нужно ускорить и улучшить насколько это возможно. У вас должен быть самый лучший CI tool — TeamCity. Собираться в нём должно всё что только может быть собрано.
10. Вам нужно ввести версионирование БД и db migration tool — DBMaintain, FlywayDB, LiquiBase.
11. Грамотно разнести тесты как в Гугле поделить их по времени выполнения. Тут ключевой момент в том что если для TDD разработки ваш тест должен отрабатывать быстро (максимум 15 секунд) иначе она не приживётся. Сам билд в CI тоже нужно ускорить как только можно (запуск тестов в параллели, использовать in-memory file system).
12. У вас совершенно точно будут множество проблем с базой данных — конекшен пул будет забиваться, будет множество проблем с уровнем изоляции транзакций, запросы будут долго тупить, N + 1 проблемы, данные будут неконсистентными итд. Эти проблемы нужно чётко методично разруливать — обновить либу Tomcat JDBC Connection Pool, загнать всю работу с базой строго в рамки DAO, самые используемые и статические данные закешировать и сделать так чтобы кеш можно было сбросить через JMX или JavaMelody.
13. Саму базу тоже как правило следует подчистить и хорошенько нормализировать. Делать это нужно очень аккуратно и осознано и обязательно основываясь на реальной статистике. Для PostgreSQL есть утилита pg_stats. По ней можно определить как данные используются и сравнив с кодом можно понять свойства данных: как часто они изменяются, как часто они инсертятся или они read only. Где нужно натянуть индексы. Это очень принципиально потому что даёт нормальный прирост скорости и вообще от данных следует отталкиваться.
14. Дальше вам следует возвести китайскую стену между старым кодом и новым, как рассказывал Витя Полищук. У вас должно быть чёткое понимание что в этой части системы мы пытаемся создать островок удачи и везения, где всё прилично и правильно и после этого перетащить на этот остров весь функционал из плохого кода. Этот островок может быть совершенно отдельным модулем\микросервисом отделённым чётким API и интерфейсами. И жёстко следить за тем чтобы в нём был порядок.
У меня например на проекте например даже уволили сотрудника за то что он не стал переписывать старый функционал а за уши притянул его скопипастив код в островок удачи. Теперь нам оставшимся сцыкотно там гадить.
15. Всё что только можно резать на модули, модули выделять в микросервисы которые общаются по простому протоколу типа REST или JSON-RPC.
У вас наверняка есть часть системы и код который никогда уже не перепишешь и всё что можно с этим сделать — только выделить эту гангрену в отдельный модуль.
16. Memento mori — вам следует честно и сразу думать даже о новом функционале как о выброшенном позже и заранее думать о том как его убрать. Микросервисы как раз неплохо решают эту проблему.
17. Стоит максимально улучшить процесс деплоя — для начала достичь zero downtime но конечно в идеале вообще continuous deployment, но даже не мечтайте 🙂 Даже без zero downtime ваш цикл комит — старт сервера должен быть максимально маленьким. Суть в том что если вы начнёте что-то менять то вам придётся постоянно выкатывать хотфиксы которые фиксят баги после ваших фиксов багов. Если вы начнёте наводить порядок на легаси проекте, да даже просто что-то делать особо ничего не трогая, всё равно у вас будут всплывать проблемы и их нужно будет фикисть по горячему.
18. Если у вас есть внешний API то вам следует проксировать его через фасад где чётко вести статистику кто его дёргает и как. Далее если ваш АПИ будет меняться вам следует самим сделать SDK где вы его сами заимплементите. Всё таки это относительно редкость когда клиенты вашего АПИ используют что-то другое кроме PHP, Java или JavaScript, ну или что там у них. Поэтому вы можете сами написать или попросить клиентов поделится с вами их обвёртками над вашим АПИ и сделать его своим официальным. Далее вы можете менять и экспериментировать с АПИ при этом каждый раз выкатывать новую версию SDK. Т.е. это вам даёт дополнительный рычаг гибкости.
Кроме того попытаться заимплементить ваше собственное АПИ очень хорошо поможет вам понять как мучаются ваши клиенты и заметить частые ошибки.
19. После этого можете пробовать постепенно обновлять ваши библиотеки зависимостей на новые версии, тщательно и внимательно просматривая их чейнджлоги и ища всякие баги которые есть с этой версией. Реально в интернете вы уведите много релевантной информации. Первым делом обновлять следует тестовые библиотеки, особенно моки (EasyMock, Mockito) потому что они изменяют байткод. Проверить что тесты проходят как и ранее и не сломались.
Далее следует обновлять сами плагины Мавена — это тоже довольно опасная операция как оказалось на практике.
После этого утильные либы: Apache Commons Lang, Apache Commons Collections, Guava, JodaTime, Jackson, итп.
Потом можно попробовать проайпдейтить Quartz который в основном используется для джоб и другие либы типа Apache POI чья поломка для пользователей пройдёт почти незаметно.
Потом нужно проадейтить те либы которые делают инструментацию байткода и всякую магию: Hibernate и куча всего другого. Это самое злобное.
После этого можно пробовать перейти на новую джаву.
После перехода на новую джаву можно выкинуть JodaTime и JodaMoney и кучу другого хлама. И обновить остальные либы типа Спринга.

Продолжение следует

Анализ исходного кода open source

В последнее время начало довольно много появляться исследований кода причём с какими-то очень странными результатами и почти всегда просто потрясающего идиотизма выводами. Мне стало интересно откуда они черпают информацию и как анализируют код потому что у самого давно уже было много идей занятся подобными исследованиями.
И сразу же нашёл сайт GitHubArchive который создал один из известных разработчиков протокола HTTP2 Илья Григорик.
На этом сайте лежит вся публичная информация которую можно получить через API гитхаба с 2012го года. И по этой всей информации можно делать SQL запросы за вменяемое время.
Очень прикольный доклад где чуваки проанализировали и построили много интересных графиков: какой язык вызывает больше всего ненависти а какой больше фана, как взаимосвязаны между собой языки и какие нации в мире больше всего комитящие в Гитхаб. Много неожиданного

Что сегодня посмотреть программисту вместо сериалов

Ну как там у вас воскресенье проходит? Если есть свободное времячко я вам советую посмотреть эти видео которые мне оказались интересными.

Иконоборцы (Iconoclasm — Ted Neward)

Интересный рассказ Тэда Ньюварда про тех инноваторов которые нарушали сложившиеся каноны и стереотипы и в итоге оказывались правы.
Начинается с того что компьютеры уже вообщем-то умнее нас, хотя мы их презираем и чтобы выжить в эволюционной гонке нам нужно самим менятья. ИМХО непонятно к чему это было сказано. Дальше раскрыл тему что вообще-то мы склонны соглашаться с коллективом и не протестовать и всячески этого избегаем.
Но находятся те кто бросает вызов и может либо преуспеть либо очень сильно проиграть.
Что общего между иконоборцами и что отличает этих людей от остальных? Какую стратегию выбрать.
Очень советую вообщем даже если у вас нет желания высовываться

Языковая сложность — Александр Пиперски

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

«Uncle» Bob Martin — «The Future of Programming»

Дядя Боб автор программисткого бестселлера Clean Code рассказывал почему-то не про будущее программирования, а про прошлое начиная с деятельности Алана Тьюринга и привёл к мысли что мы, программисты, управляем миром. Он разобрал тему почему мы так плохо программируем — оказывается дело в том что рост количества программистов экспонеционален и поэтому ежегодно примерно половина программистов имеет опыт меньше пяти лет и делают множество ошибок. И нам не хватает некой дисцпилины что рано или поздно приведёт к огромной трагедии с человеческими жертвами. И тогда государство введёт ограничения и регуляции на нашу профессию. Вообщем в этом он и видит мрачное будущее программирования.

Виктор Полищук — Legacy: как победить в гонке

Виктор очень матёрый программист поработавший в «кровавом энтерпрайзе забирающем душу» рассказывает что вообще-то вы должны радоватся если работаете на старом и состоявшемся проекте — ведь он успешный и радует заказчика. Дальше он рассказывал какие базовые меры можно предпринять чтобы оживить проект и двигать его дальше.
Однозначно ценный опыт для программистов, жалко что мало информации по этой теме появляется

Парное программирование — Сергей Бережной

Очень просто, для джуниоров, толково и наверное почти полностью раскрытая тема как работать в паре и почему иногда это работает просто супер а иногда совсем нет.

Командная строка Unix — Виктор Ашик

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

Decision Tables and Decision Trees

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

Евгений Кривошеев — Осознанность проектирования

Мы много говорим про архитектуру систем но что она есть сама по себе мы слабо представляем.
Узнал про Cynefin Framework, потом как нибудь изучу его.

Николай Алименков — Современный взгляд на реализацию классических дизайн-паттернов в Java

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

Антон Кекс — Цифровая подпись в Java, Россия vs Эстония

Эстония проделала огромную работу в информатизации общества и эстонец Антон Кекс рассказал как у них всё это работает и как внедрять нам.
Очень круто и просто рассказал про такие сложные вещи да ещё и покодил. Я прям захотел себе получить электронное резеденство Эстонии

Презентация интернет магазина Алексея Земскова ZemsMarket.ru

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

Show me yours…

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

Дайджест прикольных докладов по Java

Никита лапин из новосибирской компании Excelsior которые пилят крутую JVM ExcelsiorJet и компиляторы для Оберона и Модулы2 (если кто такие помнит те оценят).

Про то как можно Яву полноценно компилировать сразу в нейтив код без всякого байткода

Про то как джава платформа пытается решить старые проблемы с модульностью и лёгкостью инсталяции

Вообще меня в этом докладе напрягло что пацаны из Эксельсиор походу не учавствуют во всяких там JSRах и узнают о том что будет в новой джаве уже кагбы постфактум. Как-то несерьёзно, особенно что команда OpenJDK у них считай под боком — в Питере, всего в трёх часовых поясах.
Кстати для меня это был самый интересный доклад за последнее время, давно интересовался темой.

Александр Олейников рассказал как на примере сервиса Яндекс.Телепрограмма лучше проектировать API. Ничё такого, но для мидлов будет самое то

Владимир Цукур рассказал как правильно готовить REST API.
Он вообще красавчик и его доклады всегда классные, несмотря на его тягу наматанить подачу инфы.

Вообще чтобы оценить всю глубину «какой только хернёй люди не страдают лишь бы не юзать WebServices» и у вас есть время попердеть мозгом чтобы познать Истину, рекомендую посмотреть видосы с 19той встречи #uadevclub. Я вам гарантирую катарсис.

Ну и про микросервисы, куда же без них. У нас новый базворд который срочно нужно дописать в резюме пока эйчарки ещё не отошли от девопс. Доклад норм, но я в тему не въехал ещё чтобы оценить

Артём Оробец, один из разработчиков клёвой базы данных OrientDB которого схантили в Смарлинг рассказал… ну вообщем что-то там рассказал. К сожалению Артём не мастер крутых докладов, хотя по теме мог бы выдать много вау вау брейн бум.
Тем кто уже немного въехал в тему NoSQL будет интересно, а те кто уже въехал полностью ничего особо нового не узнают.

Вообще, у них там в Смарлинге походу бьют палками девелоперов чтобы они на разные конфы ходили докладывать и хакатоны хакатонить. Это такая стратегия чтобы заманивать всяких джава старов.
Там есть ещё немного их докладов про континьюс деливери, про то как девочка потеряла QA джоб и стала автоматизатором, но они вроде ничем таким примечательным не отличаются.
Советую по тем темам лучше посмотреть доклады с 22й встречи #uadevclub и с SeleniumCamp, они позадорнее.

Алексей Токарь, главный технарь в Яндекс Украина рассказал про MongoDB.
Алексей когда-то меня собеседовал, мужик толковый, но объясняет мало (с понтом «ну это же все знают,чё»).
Рассказ я полностью не смотрел, мне Монга индифферентна, но вроде тоже достойный

Алексей Дёмин рассказывает как боротся с проблемами серверной джавы, типа утечек памяти. Рассказ так себе, но по теме инфы вообще мало. Тоже советую сначала посмотреть доклады с 20й встречи #uadevclub где Виталий Тимчишин классно рассказал про то какими тулами и как пользоваться.

Алексей Резчиков делится правильным опытом как разбрестись с зоопарком тестов. Лёха как всегда на высоте. Ключевая идея: у вас юнит тесты должны прогоняться максимально быстро чтобы девелопер не заскучал и не пошёл читать хабру. Без быстрых тестов никакого ТДД не получится.
А все остальные тесты скидывайте на CI. Но это я очень вульгарно и отсебятиной, лучше смотрите сами.
Полезно будет только синьйорам которые уже пару проектов имели проблемы по теме (как йа)

33 клёвый вещей и тулов для Джавы:
Lombok, Guava, LambdaJ, Mockito, Spock, Byteman, Groovy, Gradle, Logback

Ну и на закуску коротенький лайттолк про то что в восмьмой Джаве наконец-то причесали дейт апи.
Кагбе особо ниочём, но для ознакомления с ThreeTen сойдёт.

Вообще, если вы хотите заюзать JSR 310 я бы рекомендовал заложить больше времени.
Особенно если вы будете мигрировать с JodaTime то там будет мноооооооого подводных камней. Я возможно единственный человек в мире который знает чем там они отличаются поскольку переколбасил плагин для греилс. И я вам сразу говорю: покройте всё что сможете тестами, благо юнит тестить на Spock даты элементарно.
У меня есть черновик где записано куча моментов как правильно мигрировать но мне его нужно будет как-то сесть и привести в порядок, так что сори ребят.

Memento mori

Год назад мой брат Андрей рассказал про доклад Design for Repleceability  на конференции JavaZone. Вчера в разговоре он опять вспомнил про неё и я наконец посмотрел его и настоятельно советую его теперь посмотреть всем.
The most important question to be asked when developing a new software system is «How will we replace it?» It is however a question seldom asked. Instead organization focus on reusability, which unfortunately helps create rigid and inflexible architectures. The talk shows how to design systems made up of small parts, why you should standardize on protocol and not platform and how you will end with a system that is easier to scale and maintain.
В двух словах идея следующая: Если вы будете думать о смерти своего продукта то он станет лучше. А проект умрёт, причём довольно быстро.
Если вы напишите программу которая будет проживёт десять лет то вы станете очень богатым человеком
Так вот, чтобы не переписывать всю систему, то нужно использовать SOA архитектуру и разбивать на отдельные приложения-модули, например модуль авторизации, модуль админки и публичная часть сайта.
В любой момент вы можете заменить модуль, переписать его на новых технологиях а то и вовсе на другом языке программирования.
При этом если они все модули работают с одной базой то это всё равно одно приложение, потому что вы не можете безопасно отключить его и делать с ним всё что захотите.
Модули будут общаться по протоколу. Желательно очень простой протокол типа REST+JSON а не замудрённый SOAP.
Но у REST нет такого механизма для описания своих параметров и методов как WSDL файлы в SOAP.
На самом деле есть — WADL, но о нём никто вообще не знает и похоже стандарт мёртв.
Для решения этой проблемы вы просто на каждый сервис генерируете обычную XHTML страничку со всеми параметрами запроса. Любой человек сможет её понять.
Поскольку ваши приложения живут независимо то вы получаете горизонтальное масштабирование и устойчивость к падениям.
Кроме горизонтального масштабирования приложения вы ещё получаете горизонтальное масштабирование команд: каждое приложение может делать отдельная маленькая гипер-продуктивная команда из трёх-семи человек, причём если у вас например нет возможности нанять зажравшихся явистов можете набрать команду из школьников PHP’ешников и выделить их в отдельную команду.

Видео лекций

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

Яндекс молодцы и выкладывают видео и презентации с своих конференций и докладов.
Я часть из них просмотрел и решил написать небольшой отчётик с рекомендациями.

Не все из них хороши.
Например вот эти смотреть вообще не стоит
Хроники серверного Жаваскрипта
Редактор/среда разработки
Тестирование
вот эта лекция сама по себе не очень как то, хотя и тема интересная, короче лучше почитать статьи
Безопасность веб-приложений
вот эта лекция хорошая, для начинающих сложновата, но всё же хороший старт — буду кидать знакомым студентам
Системы контроля версий
Вот эта лекция открыла мне глаза на мой джаваскрипт.
Я конечно знал что у меня не всё идеально, но столько мелких моментов о которых я даже не догадывался. Вообщем, ещё одна серьёзная тема, опять надо закидываться книжками, опять пропускать жизнь за окном ковыряя проекты на которых тренироваться, опять внедрять на работе и косячить 😦
Паттерны JavaScript
А вот лекция из Курсов информационных технологий Яндекса. Первая часть лекции посвящена разбору вступительных задач (много Си и линукса), а вот с 39той минуты начинается вторая весть которая посвящена профессиям в IT, и полезно будет студентам
Профессии в мире информационных технологий

Из последнего просмотренного меня просто привела в восторг вот эта лекция, всем советую

Лекции Александра Степанова в Яндексе

Крутые лекции Александра Степанова в Яндексе.
Программистам и математикам — must see.

Лекция «Наибольшая общая мера последние 2500 лет»

Greatest Common Measure: the Last 2500 Years. Originally prepared as the 1999 Arthur Schoffstall Lecture in Computer Science and Computer Engineering at the Rensselaer Polytechnic Institute.

Степанов рассказывает о простой, вроде, вещи — алгоритме поиска НОД. Но рассказывает очень захватывающе. Очень интересно, как многие известные и несколько не столь известных математиков приложили руку к этому алгоритму. Ещё интересней начало второй части лекции, когда оказывается, что и в наше время этот алгоритм совершенствуется. Возникает ощущение, что история делается сейчас. Что даже в таких устоявшихся вещах можно найти нечто новое.

(c) adaptun

Видео</h3

Слайды

PDF (en)
PowerPoint (en)
PDF (ru)
PowerPoint (ru)
Ну или кривовато сконверченое с гугл доксов чисто чтобы поклацать онлайн:

Лекция «Преобразования и их орбиты»

Transformations and their orbits. Lecture based on Chapter 2 of Elements of Programming

Видео

Слайды

PDF (en)

UPD

Если вам понравилось про историю математики рекомендую передачу ВВС: История математики

Универсальный язык Вселенной – математика. За основу всех наук, будь то технические или естественные, взята именно она. Интуитивное понимание основ математики позволило ученым древности освоить и разработать первые математические законы применяемые сегодня. Фильм расскажет о зарождении этой удивительной науки, первых открытиях, способах её применения, использования, развитии и преобразовании. Будут показаны современные математические аспекты и будущие перспективы.