Pull to refresh
112
0
Андрей Солнцев @asolntsev

Пользователь

Send message

Как работает хэширование

Level of difficulty Medium
Reading time 12 min
Views 56K

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

Хэш-функции фундаментальны и используются повсюду.

Но что же такое хэш-функции и как они работают?

В этом посте я собираюсь развенчать мифы вокруг этих функций. Мы начнём с простой хэш-функции, узнаем, как проверить, хороша ли хэш-функция, а затем рассмотрим реальный пример применения хэш-функции: хэш-таблицу.
Читать дальше →
Total votes 76: ↑73 and ↓3 +70
Comments 49

Килрой был здесь. Самый популярный мем аналоговой эпохи

Reading time 3 min
Views 29K

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

Он выгравирован на камне в Национальном мемориале Второй мировой войны в Вашингтоне — в маленькой нише, где его видели очень немногие. Для поколения Второй мировой войны это навеет воспоминания. Для нового поколения это мелочи, которые являются неотъемлемой частью американской истории и легенды.

Это была причуда своего времени.

История популярного мема периода ВМВ
Total votes 126: ↑122 and ↓4 +118
Comments 58

ML в тестировании, TestOps, воркшопы: программа конференции Heisenbug

Reading time 6 min
Views 2.4K


Область тестирования продолжает активно развиваться — с появлением новых инструментов, обновлением старых, а также появлением в IDE поддержки для начала автоматизации тестирования. «Теоретические аспекты-то остаются теми же», — скажете вы. И будете правы. Но, к сожалению, сделать тестирование так же идеально, как описано в блоге Мартина Фаулера, получается не у всех и по сей день. А более современный инструментарий для написания селекторов, кода, интеграции с CI/CD, удобные плагины позволяют приблизиться к «совершенному» и делать все удобнее и быстрее.

«Какие еще новые инструменты, плагины? О чем он говорит?», — возможно, спросите вы. Давайте поясню. А точнее, пояснят программный комитет и спикеры Heisenbug: в программе конференции, которая пройдёт 6-9 апреля в онлайне, есть ответы и на этот вопрос, и на многие другие.
Что там у вас?
Total votes 19: ↑19 and ↓0 +19
Comments 0

Как законтрибьютить в опенсорс, чтобы не сгореть со стыда

Reading time 13 min
Views 13K

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


На осеннем TechTrain Андрей Солнцев (asolntsev) и Артем Ерошенко (eroshenkoam) показали на примере Allure и Selenide, как справиться с техническими и психологическими трудностями. Прямо во время доклада они сделали изменения в опенсорсных проектах.



Под катом — расшифровка их доклада и видео с фестиваля. Далее повествование будет от лица спикеров.

Total votes 54: ↑52 and ↓2 +50
Comments 6

Уязвимости в реализации межпроцессного взаимодействия в Android-приложениях

Reading time 13 min
Views 7.1K

Последние 6 лет я работаю экспертом по информационной безопасности в Одноклассниках и отвечаю за безопасность приложений.


Мой доклад сегодня — о механизмах межпроцессного взаимодействия в Android и уязвимостях, связанных с их неверным использованием.



Но сначала пара слов о том, как появился этот доклад.


Наверное, вы уже заметили, что на каждом Heisenbug есть как минимум один доклад про безопасность, например про XSS или поиск уязвимостей в веб-приложениях. Тема мобильной безопасности осталась не охвачена, хотя мы живем в 2020 году, и аудитория мобильных приложений уже давно превысила аудиторию веба. Мне хотелось выбрать тему из мира мобильной безопасности — достаточно конкретную, чтобы выдержать формат технического доклада, но при этом достаточно распространенную.

Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Comments 2

Всегда презентуйте свою работу

Reading time 4 min
Views 27K
У нас на работе есть Сергей, он заместитель директора по общехозяйственным вопросам или же просто завхоз. Перегорела лампа – к нему. Сломался стул – к нему. Дверь с петель сорвали – Сергей починит. Нужна новая розетка – он поможет. Не хватает площадей – организует стройку. И вообще спасибо ему за свет и тепло в нашем офисе! Нет, серьезно, мы все понимаем, что это его заслуга, он нашел людей, проконтролировал их работу и проводит технические обслуживания, поэтому у нас в офисе всегда светло и тепло. Свою работу он никак не презентирует, поскольку то, что он может все это сделать ни для кого не является тайной, он же завхоз, а, значит, умеет все это делать (иначе завхозом он не стал бы). Логично, правда? С другой стороны его работу за него никто не делает: лампочки не меняют, замки не чинят, снег не чистят, воздух с батарей не спускают. Конечно, со временем можно даже медведя на мотоцикле научить ездить, так что коллеги научились болты выпадающие подкручивать, батареи регулировать, самые продвинутые выучили что если мебель ломается нужно ему звонить, а когда нужно купить что-то новое то что-то старое нужно сфотографировать чтобы точно то купил. Работа его кажется людям сложной (или же люди просто не хотят делать сами даже если так быстрее) и в неё никто не лезет, не претендует на его лавры.
Читать дальше →
Total votes 80: ↑77 and ↓3 +74
Comments 43

Дизайнерское тестирование: топ-10 докладов Heisenbug 2018 Piter

Reading time 6 min
Views 6.3K


Привет! Мы открыли видеозаписи докладов Heisenbug 2018 Piter. А специально для Хабра сделали подборку десяти лучших докладов по мнению посетителей конференции — специалистов в области тестирования. Самым понравившимся докладом внезапно оказался самый «оффтопный»!

Доклады в подборке расположены по возрастанию рейтинга. Но это не значит, что «младшие» намного хуже: у всех, за исключением лидеров, примерно одинаковая оценка от 4,27 до 4,52. Поэтому, как обычно, смотреть нужно всё. Встретимся под катом!

Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Comments 0

Mod и остаток — не одно и то же

Reading time 4 min
Views 253K


Приготовьтесь, вас ждёт крайне педантичная статья, которая вполне может спасти вас на собеседовании или сэкономить несколько часов при вылавливании бага в продакшне!

Я сейчас активно работаю над вторым сезоном «Руководства для самозванца» и пишу о шифре RSA для SSH, который, очевидно, является самым загружаемым фрагментом кода в истории IT.

Хочется полностью разобраться в этой истории. Кто придумал этот шифр, как он работает, почему работает и будет ли работать в будущем. Сейчас я раскопал одну чертовски интересную историю. Я не криптоманьяк и вижу, как других буквально засасывает в эту область. Но мне это тоже интересно, потому что повсюду есть маленькие норки, а меня как сороку привлекают блестящие штучки в глубоких норках. Я также очень хорош в метафорах.
Читать дальше →
Total votes 77: ↑72 and ↓5 +67
Comments 75

Flaky tests

Reading time 18 min
Views 29K
Что неприятнее «красного теста»? Тест, который то зелёный, то красный, и непонятно, почему. На нашей конференции Heisenbug 2017 Moscow Андрей Солнцев (Codeborne) рассказывал, из-за чего они могут возникать и как снижать их число. Примеры в его докладе такие, что прямо-таки кожей ощущаешь боль, возникавшую при столкновении с ними. А советы полезные — причём ознакомиться с ними стоит как тестировщикам, так и разработчикам. Есть и неожиданное: можно узнать, как порой можно разобраться в проблеме, если оторваться от экрана и поиграть с дочкой в кубики.

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


Читать дальше →
Total votes 36: ↑35 and ↓1 +34
Comments 16

Почему IDEA лучше Eclipse

Reading time 5 min
Views 212K

Священный спор


Принято считать, что есть «вечные» вопросы, на которые нет правильного ответа. Например, что лучше: Windows или Linux, Java или C#; Чужой против Хищника или Чак Норрис против Ван Дамма.

Одним из таких холиваров считается выбор лучшей IDE для Java:


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

Так вот, я утверждаю, что это не просто дело вкуса. Есть объективные причины, почему
Intellij IDEA однозначно лучше, чем Eclipse.

Подчёркиваю, мы сейчас рассматриваем обе среды именно как Java IDE.

Я не буду приводить кучу мелких различий вроде плагинов, горячих клавиш и т.п. — этому посвящены многие страницы в интернете, а объясню лишь одно, самое главное отличие. Как правило, о нём не знают ни идеяшники, ни эклипсофилы, ибо первые привыкли к нему и не знают, что в других IDE этого может и не быть, а вторые привыкли жить без него, и даже не догадываются, что может быть лучше. Более того, эклипсники его не замечают, когда пробуют IDEA ради интереса, ибо привыкли работать по-старому.

Итак, главное различие между IDEA и Eclipse
Total votes 185: ↑139 and ↓46 +93
Comments 262

The Pros & Cons of Test-Driven Development

Reading time 18 min
Views 15K


Разговор вёл IvanPonomarev

Test-driven development (TDD) — практика, известная уже довольно давно. Разработка через короткие циклы «прежде всего пишем юнит-тест, затем код, потом проводим рефакторинг, повторяем» в ряде компаний принята в качестве стандарта. Но обязательно ли команда, достигшая хорошей степени зрелости процесса разработки, должна принимать TDD? Как и для большинства других практик Extreme Programming, споры по поводу TDD до сих пор не стихают. Оправдываются ли первоначальные затраты на обучение и внедрение TDD? Даёт ли TDD ощутимый выигрыш? Можно ли этот выигрыш измерить? Нет ли случаев, когда TDD проекту вредит? А есть ли ситуации, когда без TDD решить задачу просто невозможно?

Об этом мы поговорили с разработчиками-экспертами Андреем Солнцевым asolntsev (разработчик из таллинской компании Codeborne, который практикует Extreme Programming и придерживается TDD) и Тагиром Валеевым lany (разработчик в JetBrains, также разрабатывает опенсорсную библиотеку StreamEx и анализатор байткода Java HuntBugs; убежден, что TDD — бесполезная практика). Интересно? Добро пожаловать под кат!
Читать дальше →
Total votes 40: ↑37 and ↓3 +34
Comments 199

Каково оно учить JavaScript в 2016

Reading time 10 min
Views 348K


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

— Это теперь называется Front-End инженер, но да, я — именно он. Я работаю с вебом в 2016. Визуализации, музыкальные плееры, летающие дроны, которые играют в футбол, все что угодно. Я только что вернулся из JsConf и ReactConf, так что я знаю новейшие технологии для создания веб-приложений.

— Круто. Мне нужно создать страницу, которая отображает последние действия со стороны пользователей, так что мне просто нужно получить данные от REST и отобразить их в какой-то фильтруемой таблице, ну и обновлять её, если что-то изменится на сервере. Я думал, может быть, использовать JQuery для извлечения и отображения данных?

— О, Мой Бог! Нет! Никто больше не использует JQuery. Ты должен попробовать React: это — 2016!
Читать дальше →
Total votes 260: ↑238 and ↓22 +216
Comments 298

Сферическое тестирование в вакууме: Как есть, как должно быть, как будет

Reading time 15 min
Views 17K
Тестирование занимает особое место в работе каждого из нас. Это очень важная, сложная, не самая приятная, часто недоведённая до конца, недооценённая часть нашей работы. Поэтому я, как практикующий разработчик и технический руководитель небольшого стартапа, был рад возможности побеседовать с экспертом в этой области и задать ему свои наболевшие вопросы. Почему программисты не работают по TDD? Как правильно решать проблемы, связанные модульным тестированием системы, работающей с базой данных? Как избавиться от «человеческого фактора» и автоматизировать, в конце концов, тестирование пользовательского интерфейса?



В рамках подготовки Joker 2016 вышел пост про легаси, который вызвал бурное обсуждение тестирования в Java, которое мы решили продолжить в интервью с Николаем Алименковым.

Николай — специалист в области разработки на Java уже с 12-летним стажем. Помимо основной рабочей деятельности, он — сооснователь и тренер тренингового центра XP Injection, активный участник и докладчик на международных конференциях. При его участии были организованы IT-конференции Selenium Camp, JEEConf, XP Days Ukraine и IT Brunch. Мы поговорили как о том, что можно улучшить в области тестирования в своей команде «здесь и сейчас», так и о том, к каким технологическим переменам нам следует готовиться в будущем.

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

— Мне кажется, что эта идея заведомо была некорректной. Предполагалось, что такие проверки могут заменить тесты и сделать код самоверифицированным, но, к сожалению, не срослось. Причина очень простая: в этой идее полагаются на то, что, разработчик, когда он пишет код, одновременно думает и о реализации, и о побочных явлениях, которые могут произойти. Но разработчики не так хорошо переключают контекст налету. Вместо этого юнит-тесты заставляют делать сначала фокус на тестирование, а потом возвращаться к фокусу на разработку.
Читать дальше →
Total votes 43: ↑39 and ↓4 +35
Comments 48

ООП будущего: Барух Садогурский и Егор Бугаенко о том, как мы будем программировать через 20 лет

Reading time 23 min
Views 56K
Концепция объектно-ориентированного программирования воспринимается разработчиками по-разному: кто-то говорит, что ей уже пора на свалку истории; кто-то кодит и не задумывается о том, что, как и почему он делает; а кто-то пытается работать в «pure OOP» парадигме, переворачивая классические паттерны с ног на голову.

В преддверии Joker 2016 мы попросили Баруха Садогурского обсудить судьбу Java и ООП с Егором Бугаенко. Что из этого получилось, слушайте в аудиоформате или смотрите в видео:



А под катом лежит полная расшифровка интервью со всеми ссылками.
Читать дальше →
Total votes 68: ↑58 and ↓10 +48
Comments 331

О Legacy-коде без максимализма: что делать

Reading time 11 min
Views 28K


Представьте, что вам дали задачу поправить часть кода. В голове возникнет много мыслей. Кто его написал? Когда? А может он — legacy? Где документация? Давайте попробуем разобраться с «наследием» основательно и со всех сторон. Поможет нам в этом вопросе Андрей Солнцев @asolntsev (http://asolntsev.github.io/), разработчик из таллинской компании Codeborne. Начнём.

— Андрей, вы знакомы с трудами Michael Feathers, например, «Working Effectively with Legacy Code»? В книге акцентируется внимание на важности тестирования и выделяется одно из ключевых отличий legacy от не legacy-кода — это наличие тестов. Вы согласны с этим мнением?

Абсолютно согласен! Скажу больше: юнит-тесты — необходимое, но недостаточное условие. И с юнит-тестами можно навалить так, что сам Геракл не разгребёт.
Что для настоящего джедая мастхав, так это:
  1. TDD — то есть тесты ДО кода.
  2. Чистый код (и чистые тесты).


Я очень люблю книгу Robert C. Martin «Clean Code» («Чистый код»). Это для меня настольная библия. Категорически всем советую. Кстати, его блог тоже великолепен.

Читать дальше →
Total votes 53: ↑44 and ↓9 +35
Comments 61

Впечатления от работы с Play! Framework 2.1 + Java

Reading time 13 min
Views 62K
Шла четвёртая неделя тяжёлых боёв с Play! Framework 2.1 + Java. Победа неумолимо приближалась, но до полной капитуляции было далеко.
После обнадёживающих новостей про развитие Play! 2.1, например в LinkedIn, было решено попробовать его в одном новом проекте. Испытать его, так сказать, в деле. Что из этого получилось? Я бы сказал, что это была небольшая война между мной и Play! 2.1. Почему? Подробности под катом, а для нетерпеливых:

Краткий вывод

Для штурма надо было брать секретное оружие под кодовым названием Scala. Если встать лицом к лицу с Play! Framework 2.1 и крикнуть со всей силы: «Ты есть Scala-фреймворк!», то он испугается такой прямоты и скромно откроет свои двери в мир больших возможностей.
«Не знаете Scala?» — «Используйте Play 1.2».
«Хорошо разбираетесь в Scala?» — «Обязательно попробуйте Play 2.1. Но всё равно запаситесь терпением».

Подробные сводки с фронтов
Total votes 39: ↑36 and ↓3 +33
Comments 40

UI тесты: Cucumber + Selenide

Reading time 8 min
Views 68K

Часть 1


Сегодня поговорим о создании UI smoke-теста для сайта с использованием фреймворков Cucumber и Selenide. Статья рассчитана на junior, который совсем ничего не знает про данные фреймворки. Опытный junior найдет во второй части интересные моменты, до которых я доходил пару месяцев.
Статья состоит из двух частей:


  • в первой описано создание нашего теста простейшим способом – чтобы запускалось и при этом никаких сложных вещей из фреймворков не использовалось. Только создадим описание фичи (.feature файл) и класс описания степов с использованием Selenide.
  • во второй части в тот же самый тест добавим всякие интересные штуки от Selenide, посмотрим, как создавать красивые отчеты, которые будут содержать текст фич (мн.ч от слова «фича»).

Фреймворки


Selenide – фреймворк (а точнее библиотека), обертывающий Selenium. Чем он отличается, прекрасно описано автором, Андреем Солнцевым. Главное отличие – Selenide позволяет сократить кучу строчек кода при написании UI тестов, что является одной из главных задач при создании тестов/написании кода, ибо Вы должны заботиться о том тестере, который придет после Вас и должен будет разбирать Ваше творение.


Cucumber – это фреймворк, реализующий подход BDD/TDD.


Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 15

Несколько цитат или Мечты Всегда Сбываются…

Reading time 2 min
Views 6K
Выписал для себя несколько цитат. Но решил поделиться с теми, кто мечтает, стремится, воодушевляет себя и… сталкивается с непониманием и равнодушием близких и не очень людей. Дерзайте, друзья, не останавливайтесь. Человек может сделать все, что он задумал, реализовать самые безумные идеи. Нужно только идти вперед и не опускать руки. Эти цитаты можно распечатать и повесить на стену, перечитывая каждый день.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Comments 12

Как написать отличную статью и завоевать умы

Reading time 12 min
Views 17K

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

В данной статье мне хотелось бы предложить несколько вариантов того, как стоит создавать статьи, как их подавать и как поддерживать жизнь своей статьи.
Читать дальше →
Total votes 131: ↑96 and ↓35 +61
Comments 77

Information

Rating
Does not participate
Location
Эстония
Date of birth
Registered
Activity