Pull to refresh
2
0
Send message

Архитектура и дизайн Android приложения (мой опыт)

Reading time7 min
Views14K
Хабр, привет!

Сегодня я хочу рассказать об архитектуре, которой я следую в своих Android приложениях. За основу я беру Clean Architecture, а в качестве инструментов использую Android Architecture Components (ViewModel, LiveData, LiveEvent) + Kotlin Coroutines. К статье прилагается код вымышленного примера, который доступен на GitHub.

Disclaimer


Я хочу поделиться своим опытом разработки, я ни в коем случае не претендую на то, что мое решение является единственно верным и лишенным недостатков. Архитектура приложения – это своего рода модель, которую мы выбираем для решения той или иной задачи, и для выбранной модели важна её адекватность применения к конкретной задаче.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments23

Mein Linux

Reading time5 min
Views63K

На Хабре в последнее время появилась серия холиварных статей:
Семь причин, почему Линукс
Главная причина, почему не Linux (от автора предыдущей статьи)
Главная причина, почему все-таки Linux


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


Так что я решил написать свою статью, она будет совсем небольшой не очень большой, не пугайтесь.

Читать дальше →
Total votes 106: ↑93 and ↓13+112
Comments751

Лучшие вопросы средней сложности по SQL на собеседовании аналитика данных

Reading time14 min
Views89K
Первые 70% курса по SQL кажутся довольно простыми. Сложности начинаются на остальных 30%.

С 2015 по 2019 годы я прошёл четыре цикла собеседований на должность аналитика данных и специалиста по анализу данных в более чем десятке компаний. После очередного неудачного интервью в 2017 году — когда я запутался в сложных вопросах по SQL — я начал составлять задачник с вопросами по SQL средней и высокой сложности, чтобы лучше готовиться к собеседованиям. Этот справочник очень пригодился в последнем цикле собеседований 2019 года. За последний год я поделился этим руководством с парой друзей, а благодаря дополнительному свободному времени из-за пандемии отшлифовал его — и составил этот документ.

Есть множество отличных руководств по SQL для начинающих. Мои любимые — это интерактивные курсы Codecademy по SQL и Select Star SQL от Цзы Чон Као. Но в реальности первые 70% из курса SQL довольно просты, а настоящие сложности начинаются в остальных 30%, которые не освещаются в руководствах для начинающих. Так вот, на собеседованиях для аналитиков данных и специалистов по анализу данных в технологических компаниях часто задают вопросы именно по этим 30%.

Удивительно, но я не нашёл исчерпывающего источника по таким вопросам среднего уровня сложности, поэтому составил данное руководство.
Читать дальше →
Total votes 23: ↑21 and ↓2+25
Comments17

PEP 572 (Выражения присваивания в python 3.8)

Reading time28 min
Views21K
Привет, Хабр. В этот раз мы рассмотрим PEP 572, который рассказывает про выражения присваивания. Если Вы до сих пор скептически относитесь к оператору ":=" или не до конца понимаете правила его использования, то эта статья для Вас. Здесь вы найдёте множество примеров и ответов на вопрос: «Почему именно так?». Эта статья получилась максимально полной и если у Вас мало времени, то просмотрите раздел, написанный мной. В его начале собраны основные «тезисы» для комфортной работы с выражениями присваивания.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments13

Неироничная ненависть к JavaScript

Reading time4 min
Views35K

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

Читать дальше →
Total votes 94: ↑62 and ↓32+49
Comments423

Цена JavaScript-фреймворков

Reading time13 min
Views17K
Нет более быстрого способа замедлить сайт (такой вот каламбур), чем использовать на нём кучу JavaScript-кода. При использовании JavaScript приходится расплачиваться за это производительностью проектов не менее чем четыре раза. Вот чем JavaScript-код сайта нагружает системы пользователей:

  • Загрузка файла по сети.
  • Парсинг и компиляция распакованного исходного кода после загрузки.
  • Выполнение JavaScript-кода.
  • Потребление памяти.

Эта комбинация оказывается очень дорогой.



А мы включаем в состав своих проектов всё больше и больше JS-кода. По мере того, как организации движутся в сторону сайтов, работающих на базе фреймворков и библиотек вроде React, Vue и прочих, мы делаем основной функционал сайтов очень сильно зависящим от JavaScript.

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

Выяснить это мне помог проект HTTP Archive.
Читать дальше →
Total votes 37: ↑33 and ↓4+46
Comments28

Еще один шаг к оптическим компьютерам

Reading time3 min
Views5.8K
Мы уже рассказывали об инженерах из Бристоля, которым удалось телепортировать фотон с одного чипа на другой. Сегодня продолжаем тему — поговорим о технологии, которая позволит строить оптические каналы передачи данных на кремниевых чипах и продлит действие закона Мура.

Что еще у нас есть на Хабре: новая лицензия для приложений в Open Source Initiative.

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments4

Нейро-стимуляция спинного мозга позволит ходить людям, парализованным после травм позвоночника

Reading time6 min
Views12K
«Это потрясающее чувство. Я вновь могу согнуть колени, самостоятельно поднять ноги и даже пошевелить пальцами», — рассказывает один из участников экспериментального лечения, которому удалось вернуть свои двигательные способности за счет технологии спинномозговой стимуляции. После травмы позвоночника, полученной 2010 году, его ноги были парализованы.



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

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

Какие механизмы реабилитации уже существуют и могут быть использованы для лечения?
Total votes 18: ↑18 and ↓0+18
Comments5

Биоразнообразие, возможно, развивалось по принципу игры камень-ножницы-бумага

Reading time12 min
Views3.5K

Недавние открытия добавляют веса свидетельствам того, что нетранзитивная конкуренция видов обогащает разнообразие природы



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

Пионер синтетической биологии в Калифорнийском университете в Сан-Диего (UCSD) Джефф Хэйсти всю свою 20-летнюю карьеру разрабатывал стратегии, делающие возможной совместную работу генетических схем у искусственно созданных бактерий. Но несколько лет назад Хэйсти пришлось признать, что даже ему не удаётся обмануть скромную бактерию Escherichia coli.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments1

Моя шпаргалка по pandas

Reading time8 min
Views630K
Один преподаватель как-то сказал мне, что если поискать аналог программиста в мире книг, то окажется, что программисты похожи не на учебники, а на оглавления учебников: они не помнят всего, но знают, как быстро найти то, что им нужно.

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



Нельзя сказать, что это — исчерпывающий список возможностей pandas, но сюда входят функции, которыми я пользуюсь чаще всего, примеры и мои пояснения по поводу ситуаций, в которых эти функции особенно полезны.
Читать дальше →
Total votes 32: ↑30 and ↓2+47
Comments8

Темная Вселенная. Часть 2

Reading time10 min
Views25K
И вновь доброго времени суток! Данная статья является продолжением ранее опубликованной статьи о нашей «темной» Вселенной. В данной части мы продолжим рассмотрение различных интересных особенностей в космологии, над объяснением которых бьются множество ученых.

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

Отрицательная масса


После публикации первой части возникло много вопросов по поводу такой характеристики «темной жидкости» как отрицательная масса. Поэтому я решил остановиться на данной теме подробнее.
Читать дальше →
Total votes 72: ↑72 and ↓0+72
Comments125

Возможные сценарии распространения COVID-19

Reading time11 min
Views69K


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

Уделив проблеме вечер, я решил ответить при помощи математики на следующие вопросы:

  • Эффективны ли принимаемые меры? Насколько?
  • Будет ли у нас как в Италии? Самое страшное всё ещё впереди?
  • Насколько вероятно сейчас встретить заражённого в транспорте?
  • Удастся ли полностью побороть новый вирус?

В итоге, я создал небольшую программу для моделирования (бинарник, исходник) и получил с её помощью результаты — обнадёживающие, но неоднозначные. За деталями — прошу под кат.
Читать дальше →
Total votes 101: ↑69 and ↓32+60
Comments203

Реализуем преобразования кода на Python

Reading time10 min
Views24K
Привет, Хабр.

Сегодня мы предлагаем вам перевод статьи, затрагивающей не самую обсуждаемую тему: компиляцию кода в Python, а именно: работу с абстрактным синтаксическим деревом (AST) и байт-кодом. Притом, что Python является интерпретируемым языком, такие возможности в нем чрезвычайно важны с точки зрения оптимизации. О них мы сегодня и поговорим.
Читать дальше →
Total votes 7: ↑6 and ↓1+8
Comments4

Julia и квантовые вычисления

Reading time11 min
Views5.8K


Мы представляем Yao (статья), пакет с открытым исходным кодом Julia для решения практических задач в исследованиях квантовых вычислений. Имя Yao происходит от первого китайского иероглифа, означающего унитарность (幺正).

Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments3

Человек, который никуда не спешил

Reading time7 min
Views13K


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

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

Некоторые водители непрерывно сигналили, очевидно считая всех остальных идиотами, специально стоящими просто так, и не позволяющими им проехать в свои душные офисы, с жёлтыми лампами цвета кошачьей мочи, грязными окнами и дохлыми мухами на пыльных подоконниках.
Читать дальше →
Total votes 26: ↑21 and ↓5+23
Comments17

Ученые находят новые малые планеты за пределами Нептуна

Reading time3 min
Views9.6K
Привет, читатель! Меня зовут Ирина, я веду телеграм-канал об астрофизике и квантовой механике Quant. Перевела для вас статью о поиске транс-нептуновых объектов.
Приятного чтения.

image

Вояджер-2 сделал эту фотографию Нептуна в 1989 году.

Используя данные исследования темной энергии (DES), ученые обнаружили более 300 транс-нептуновых объектов (TНO) — малых планет, расположенных в дальних уголках Солнечной системы. Опубликованное исследование также описывает новый подход к поиску объектов подобного типа и может помочь в поисках гипотетической Девятой планеты и других неоткрытых планет. Работой руководили аспирант Педро Бернардинелли и профессора Гари Бернштейн и Масао Сако.
Читать дальше →
Total votes 16: ↑15 and ↓1+21
Comments1

Игра в бога: искусственные организмы

Reading time7 min
Views14K
Что-то вроде тизера. Ксеноморфы существуют. Учёные создают ксеноморфов. Учёные создают ксеноморфов из соображений безопасности. Я сам в шоке. Под катом подробнее об этом (а это, кстати, совершенно официально называется ксенобиология) и о много другом, чем занимаются современные биологи. Не всё ж вам про COVID-19 читать!

Это первая часть текста, написанного по мотивам эпизода подкаста про искусственные организмы.


Читать дальше →
Total votes 26: ↑25 and ↓1+34
Comments51

Автоматные рекурсивные вычисления

Reading time10 min
Views4.8K

1. Введение


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

В теории автоматов понятие вложенных автоматов, на базе которых строилась бы практика автоматных подпрограмм (АПП), обсуждается редко. Подобная (вложенная) иерархическая организация автоматов, если и рассматривается, то весьма поверхностно. Одной из причин подобного отношения может служить сложность реализации вложенной иерархии на аппаратном уровне [1, 2].

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

При всех частных проблемах формирования вложенной автоматной модели ее формальное определение не вызывает каких-то проблем. Но, с другой стороны, выбор построения иерархии модели, безусловно, будет оказывать существенное влияние на ее программную реализацию.
Читать дальше →
Total votes 4: ↑3 and ↓1+6
Comments2

Почему JavaScript пожирает HTML: примеры кода

Reading time18 min
Views26K
Веб-разработка постоянно развивается. В последнее время стал популярным один тренд, который в основном противоречит общепринятому представлению о том, как нужно разрабатывать веб-приложения. Некоторые возлагают на него большие надежды, а другие испытывают разочарование. У каждого на это есть свои причины, которые в двух словах объяснить достаточно трудно.



Код веб-страницы традиционно состоит из трех разделов, каждый из которых выполняет свои обязанности: HTML-код определяет структуру и семантику, CSS-код определяет внешний вид, а JavaScript-код определяет его поведение. В командах с участием дизайнеров, HTML / CSS разработчиков и JavaScript-разработчиков это разделение получается естественно: дизайнеры определяют визуальные элементы и пользовательский интерфейс, разработчики HTML и CSS размещают эти визуальные элементы на странице в браузере, а JavaScript-разработчики добавляют взаимодействие с пользователем, чтобы связать все вместе и «заставить это работать». Каждый может работать над своими задачами, не вмешиваясь в код остальных двух категорий разработчиков. Но все это справедливо для так называемого «старого стиля».
Читать дальше →
Total votes 24: ↑21 and ↓3+30
Comments26

Функциональное программирование — то, что вам (наверно) рассказывали. Если вы слушали

Reading time16 min
Views31K
Мне нравятся разговоры на тему «мне раньше в школе/институте/родители говорили, а теперь я узнал». Если по счастливой случайности я оказываюсь хоть немного компетентен в обсуждаемом вопросе, то такие разговоры обычно сводятся к одному из трех вариантов: «где вообще ты раньше слышал такую чушь?» (если собеседник прав), «а с чего ты взял, что это так?» (если он не прав) и «ты прав, только это не противоречит тому, что тебе говорили раньше» (в подавляющем большинстве случаев). Нравятся такие разговоры мне по следующей причине: обычно их инициатор не обременен излишним предварительным знанием вопроса, что в некоторых случаях позволяет ему указать на некоторые моменты, которые принимались как очевидные, на самом деле таковыми не являясь. И одной из тем для подобных бесед оказалось функциональное программирование.

Вообще про ФП написано и сказано столько, что вроде бы все вопросы о его применимости, крутости, производительности и т.п. обглоданы до костного мозга. И все-таки такого рода вопросы поднимаются снова и снова, и всегда найдется желающий рассказать о том, что вы все неправильно поняли, а на самом деле оно эвона как. Пожалуй, сегодня я примерю на себя эту неблагодарную роль, поскольку недавно попались на глаза несколько постов на эту многострадальную тему. В первом и втором в очередной раз рассказано, что ФП — дрянь и изучать его — только портить свою карму будущего специалиста. Другие (раз и два) куда более адекватны, в них автор ставит целью объяснить, что все эти ваши лямбды, комбинаторы, категории — не более, чем пыль в глаза, а само ФП — штука простая, понятная и приятная в быту.

Насколько это соответствует истине?
Читать дальше →
Total votes 42: ↑38 and ↓4+46
Comments299
1

Information

Rating
Does not participate
Registered
Activity