Search
Write a publication
Pull to refresh
1
Эльмар @Echoes11read⁠-⁠only

User

Send message

Контракты в Kotlin или как заключить сделку с совестью

Level of difficultyEasy
Reading time7 min
Views6.4K

Всем привет, меня зовут Иван, я Android-разработчик и сегодня мы с вами поговорим об контрактах. Я попробую рассказать и показать примеры для работы с API

Читать далее

Линус Торвальдс: Критика C++ — Комплексный анализ

Level of difficultyEasy
Reading time12 min
Views27K

Линус Торвальдс, создатель (и великодушный диктатор) Linux, всегда с особой критикой относился к C++, объясняя почему он отвергает его в разработке ядра Linux. Но он не просто резко высказывается против использования C++, а приводит ряд аргументов, которые мы с вами сегодня и рассмотрим.

Читать далее

Надоели вредные привычки — читай этот текст

Level of difficultyEasy
Reading time16 min
Views41K

Привет, Хабр! Я Лера, технический писатель в Авито. В этой статье я разбираю тезисы Джеймса Клира в его работе «Атомные привычки». Материал будет полезен тем, кто хочет подробно разобраться в природе привычек и понять, как незначительные изменения могут сильно улучшить траекторию ваших результатов и уровень жизни в целом.

Читать далее

Kotlin. Лямбда vs Ссылка на функцию

Reading time3 min
Views14K

Kotlin уже давно стал основным языком программирования на Android. Одна из причин, почему мне нравится этот язык, это то, что функции в нем являются объектами первого класса. То есть функцию можно передать как параметр, использовать как возвращаемое значение и присвоить переменной. Также вместо функции можно передать так называемую лямбду. И недавно у меня возникла интересная проблема, связанная с заменой лямбды ссылкой на функцию.

К проблеме

Алонзо Чёрч: забытый архитектор современного программирования

Level of difficultyEasy
Reading time7 min
Views3.9K

Все знают Алана Тьюринга. Он создал компьютер, который помог взломать Энигму, а также заложил основы концепции искусственного интеллекта. Его знаменитый тест «проверки на вшивость» недавно прошел ChatGPT (правда, не всех это убедило, да и к самому тесту есть вопросы).

Но вот про Алонзо Чёрча, ближайшего сподвижника Тьюринга, который сыграл огромную роль в появлении современных функциональных языков программирования, как-то редко вспоминают. Мы решили исправить эту ситуацию и рассказать про этого удивительного человека.

Читать далее

REST API на Java без фреймворков

Reading time9 min
Views77K
Перевод статьи подготовлен специально для студентов курса «Разработчик Java».




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

Вы можете сказать, что Spring — это стандарт и зачем изобретать велосипед? А Spark — это хороший удобный REST-фреймворк. Или Light-rest-4jis. И я скажу, что вы, конечно, правы.

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

Сообщество open source очень активное, и есть большая вероятность, что ошибки в фреймворке будут быстро исправлены. Но все же, я хотел бы призвать вас подумать, действительно ли вам нужен фреймворк. Если у вас небольшой сервис или консольное приложение, возможно, вы сможете обойтись без него.
Читать дальше →

Заметки по книге «Философия разработки ПО»

Reading time11 min
Views16K


Возможно, вы понимаете как писать хороший код, как придерживаться хорошего дизайна. Но структурировать эти знания не получается. Книга Джона Оустерхаута “A philosophy of software design” может помочь исправить это.


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


Здесь я хочу сделать краткое изложение всей книги в виде заметок, которые я записывал, когда читал её.

Читать дальше →

Дожить до 94 лет и потратить $37 млрд на благотворительность: мифы и факты об «оракуле из Омахи» Уоррене Баффетте

Level of difficultyEasy
Reading time7 min
Views5.8K

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

С другой стороны, многие воспринимают его уже скорее как героя анекдотов, чем реального человека, эдакого маскота фондового рынка. Но в биографии этого человека есть много интересного. Как помогли Баффетту на пути ценные жизненные уроки, вынесенные в 11 лет, или книжки, прочитанные в семилетнем возрасте, какой момент был в его судьбе переломным, по мнению ChatGPT, и как он заработал прозвище «оракула из Омахи» — под катом.

Читать далее

Kotlin под капотом — смотрим декомпилированный байткод

Reading time10 min
Views22K


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

Я специально упущу довольно избитые и известные моменты так как, наверное, нет смысла в сотый раз писать о генерации геттеров/сеттеров для var и подобных вещах. Итак начнем.
Читать дальше →

Поиск лишних Component Dependencies с помощью Dagger SPI

Level of difficultyMedium
Reading time10 min
Views2.7K

Многие из Android-разработчиков для Dependency Injection используют Dagger или его «обёртку» Hilt. Но не многие из них используют Dagger SPI. Этот механизм предоставляет нам доступ к графу зависимостей, что позволяет нам добавить свои проверки графа и не только. В этой статье я хочу рассмотреть работу с Dagger SPI на примере поиска неиспользуемых Component Dependencies. После прочтения статьи вы сможете находить их, или при желании сможете писать свои проверки графа зависимостей. Ну или что вам там в голову взбредёт. 

Читать далее

Метод локусов или чертоги разума: краткая история знаменитой мнемотехники

Reading time11 min
Views11K

Среди научно‑популярных книг, которые мне доводилось переводить, особняком стоит «Мастерская памяти» от издательства «Портал» (большая часть сотрудничества с этим издательством пришлась на тревожный пандемийный период, и я могу только лишний раз поблагодарить уважаемых Веру Малышкину и Любовь Родионову за то, что тогда помогли мне от него отвлечься). Автор этой книги, Лин Келли — австралийка в возрасте за 60, которая профессионально, в спортивном режиме, выступает в своей возрастной группе в соревнованиях по «мнемонической атлетике». Книга максимально актуальна в наше время, так как помогает бороться и с дефицитом внимания, и с недостаточной концентрацией и, что вообще незаменимо — с возрастным ухудшением памяти. В этой статье я хочу подробнее рассказать об одной из самых важных рассмотренных в ней мнемонических техник, которая наиболее известна в древнегреческой трактовке и называется «чертоги разума». В английских источниках встречаются формулировки «memory palace» и «mind palace» а также «brain attic» — это вариант, в котором данную технику переосмыслил Артур Конан‑Дойл.

Читать далее

Пять лучших NLP инструментов для работы с русским языком на Python

Level of difficultyEasy
Reading time5 min
Views17K

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

Читать далее

Алгоритм Ляна-Кнута для расстановки мягких переносов

Reading time4 min
Views13K
При работе с текстом часто возникает потребность корректно расставить переносы. Задача на первый взгляд не такая уж очевидная, нужно учитывать особенности каждого языка, чтобы решить, в каком месте разорвать слово. Как правильно формализовать такие требования, и как потом применить их в алгоритме? Одно из самых распространенных на сей день решений предложил Франклин Марк Лян, студент известного профессора Дональда Кнута. Алгоритм так и называется – «Алгоритм Ляна-Кнута», он применяется в издательской системе TeX, автор которой опять же Д. Кнут.

Алгоритм основан на сравнении исходного слова с набором правил (шаблонов). Чем больше правил и чем качественнее они составлены, тем лучше будут расставляться переносы. В пакете TeX можно найти готовые бесплатные наборы правил для многих языков, нужно только внимательно смотреть на условия использования и распространения.
Узнать больше

Многомодульный BDSM. Бутылочные горлышки среди модулей

Level of difficultyMedium
Reading time15 min
Views2.5K

Часто бывает, что после разбиения проекта на модули скорость его сборки сильно ниже ожидаемой. Причины могут быть разные, от кривых настроек Gradle до неподходящего железа. Сегодня я хочу разобрать одну из причин — бутылочные горлышки среди модулей, и как с ними бороться.

Читать далее

Перестаньте молиться на принципы S.O.L.I.D

Reading time6 min
Views48K

В мире разработки программного обеспечения существует множество "священных коров" — принципов и практик, которые принимаются как данность и редко подвергаются критическому анализу. Особенно показательна ситуация с принципами SOLID на русскоязычных ресурсах: достаточно открыть Хабр, чтобы найти 100500 статей о SOLID, и в каждой из них принципы интерпретируются по-разному.


Само существование такого количества "объяснительных" статей говорит о фундаментальной проблеме: если принципы требуют толкования, значит их названия не являются самодостаточными и интуитивно понятными. А если каждый разработчик понимает принципы по-своему, возникает вопрос — зачем вообще нужны принципы, которые не дают однозначного руководства к действию? Принципы SOLID, предложенные Робертом Мартином, давно стали одной из таких "священных коров". Однако пришло время честно признать: то, как мы используем SOLID сегодня, часто противоречит изначальным идеям и в целом иногда может приносить больше вреда, чем пользы. Зависит от контекста.


SRP не SRP


Самый яркий пример искажения первоначального замысла — это интерпретация принципа единственной ответственности (SRP).

Читать дальше →

Шаблоны GRASP: Low Coupling (низкая связанность) и High Cohesion (высокое зацепление)

Reading time4 min
Views68K
И снова здравствуйте. Меня зовут Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Специально к старту нового набора на курс «Архитектура и шаблоны проектирования» я продолжаю серию своих публикаций про шаблоны GRASP.




Введение


Описанные в книге Craig'а Larman'а «Applying UML and patterns, 3rd edition», GRASP'овские паттерны являются обобщением GoF'овских паттернов, а также непосредственным следствием принципов ООП. Они дополняют недостающую ступеньку в логической лестнице, которая позволяет получить GoF'овские паттерны из принципов ООП. Шаблоны GRASP являются скорее не паттернами проектирования (как GoF'овские), а фундаментальными принципами распределения ответственности между классами. Они, как показывает практика, не обладают особой популярностью, однако анализ спроектированных классов с использованием полного набора GRASP'овских паттернов является необходимым условием написания хорошего кода.

Полный список шаблонов GRASP состоит из 9 элементов:

  • Information Expert
  • Creator
  • Controller
  • Low Coupling
  • High Cohesion
  • Polymorphism
  • Pure Fabrication
  • Indirection
  • Protected Variations

В прошлый раз мы обсудили принцип Creator. Сейчас я предлагаю рассмотреть два принципа GRASP, которые имеет смысл рассматривать только в паре, потому что рассмотрение их по отдельности в пределе приводит к явно плохому коду. Эти принципы могут рассматриваться не только в контексте микропроектирования, но и при проектировании, например, микросервисов. Ниже поговорим о Low Coupling и High Cohesion.
Читать дальше →

Как вас обманывают в лазерной коррекции зрения: сравнение SMILE с CLEAR и SmartSight

Level of difficultyEasy
Reading time12 min
Views52K

Хорошая новость — в России готова к конкуренции отечественная разработка технологии для экстракции лентикулы. Плюс отличная новость: в России теперь есть VISUMAX 800 от Zeiss, который делает коррекцию всего за 9 секунд! Это — SMILE Pro. И именно он — «тот же SMILE, но современнее».

Помните, как в начале пути технология SMILE встречала яростное сопротивление с профессиональной сцены и в кулуарах? Приходилось цифрами, статистикой, публикацией книги побеждать LASIK, доказывая, что 100%-но фемтосекундная экстракция лентикулы SMILE — это лучший метод.

Шли годы и те, кто «жевал попкорн», наблюдая баталии между SMILE и LASIK, сами стали осваивать технологию. Компании-конкуренты разрабатывали «дженерики» SMILE, и с их появлением началась новая эпоха — время лазеров для лентикулярной экстракции. Эти лазеры не относились к  SMILE-технологии, но везде рекламировались как «новейший, усовершенствованный SMILE.

Теперь плохая новость. Сегодня немало клиник, которые пытаются «примазаться к успеху проверенных технологий» и продать CLEAR и SmartSight как «тот же SMILE, но современнее». А страдаете от этого вы — пациенты, которые потом месяцами ждут, когда же, наконец, «просветлеет в глазах» после таких инноваций.

Так в чем же отличия? Давайте разберем, как вас могут обмануть при выборе лазерной коррекции зрения, и что нужно знать, чтобы не попасться на удочку недобросовестного маркетинга

Читать далее

Сломать объект с помощью финализации

Reading time3 min
Views8.8K

Вчера перевели в статус Candidate новый JEP 421: Deprecate Finalization for Removal. Путь к удалению механизма финализации из Java начался в Java 9, когда метод Object.finalize() был впервые объявлен deprecated. Рано или поздно механизм исчезнет из Java, поэтому если вы его используете, самое время задуматься об альтернативах. Однако статья не об этом.


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

Читать дальше →

Что полезно знать Java-разработчику про вывод типов

Reading time9 min
Views21K

image


В Java 8 кардинально переработали процедуру вывода типов выражений. В спецификации появилась целая новая глава на эту тему. Это весьма сложная штука, изложенная скорее на языке алгебры, чем на языке нормальных людей. Не каждый программист готов в этом разобраться. Я, разработчик IDE, которому приходилось ковыряться в соответствующем коде, к своему стыду тоже довольно плохо разбираюсь в этой теме и понимаю процесс только по верхам. Причём сложно не только мне, но и авторам компилятора Java. После выхода Java 8 обнаружились десятки багов, когда поведение компилятора не соответствовало спецификации, либо текст спецификации был неоднозначен. В средах разработки для Java ситуация обстояла не лучше: там тоже были баги, причём другие, поэтому код мог отображаться ошибочным в вашей IDE, но успешно компилироваться. Или наоборот. С годами ситуация улучшилась, многие баги исправили, хотя всё ещё в спецификации остались тёмные углы.

Читать дальше →

Жизнь, пульсирующая в черной дыре

Level of difficultyHard
Reading time7 min
Views57K

На habr ранее активно обсуждалась теория Вселенной, осциллирующей в черной дыре, которая развивается в ряде работ, в том числе моих с соавторами (но не только). Чего стоит дискуссия от 2018 года на 600 комментариев «Жизнь внутри черной дыры» (отмечу, что я не инициировал этот пост, просто меня спросили — не возражаю ли я, а я, конечно, вовсе нет). Там, конечно, много странных заявлений, но я не принимал прямое участие в этой дискуссии, потому что был слишком занят дальнейшим развитием теории. Но в этом году ситуация изменилась: работа над моделью циклической Вселенной с переменной гравитационной массой для меня практически завершена. Она подробно изложена в книге «Осциллирующая Вселенная», которая опубликована в бумажном и электронном варианте издательством Челябинского государственного университета в феврале 2023 года. Книгу (со свежими уточнениями на 25 сентября 2023 года) можно скачать на сайте Пущинской обсерватории.

Читать далее
1
23 ...

Information

Rating
Does not participate
Date of birth
Registered
Activity