Как стать автором
Обновить
0
0
_iline @Nick0N

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

Отправить сообщение

Исключения в Python теперь считаются анти-паттерном

Время на прочтение9 мин
Количество просмотров57K
Что такое исключения? Из названия понятно — они возникают, когда в программе происходит исключительная ситуация. Вы спросите, почему исключения — анти-паттерн, и как они вообще относятся к типизации? Я попробовал разобраться, и теперь хочу обсудить это с вами, хабражители.

Проблемы исключений


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

Исключения трудно заметить


Существует два типа исключений: «явные» создаются при помощи вызова raise прямо в коде, который вы читаете; «скрытые» запрятаны в используемых функциях, классах, методах.

Проблема в том, что «скрытые» исключения и правда трудно заметить. Покажу на примере чистой функции:

def divide(first: float, second: float) -> float:
    return first / second

Функция просто делит одно число на другое, возвращая float. Типы проверены и можно запустить что-то такое:  

result = divide(1, 0)
print('x / y = ', result)

Заметили? На самом деле до print исполнение программы никогда не дойдет, потому что деление 1 на 0 – невозможная операция, она вызовет ZeroDivisionError. Да, такой код безопасен с точки зрения типов, но его все равно нельзя использовать.
Читать дальше →
Всего голосов 116: ↑71 и ↓45+26
Комментарии149

22 порт SSH переносить или нет

Время на прочтение2 мин
Количество просмотров28K
Случайно наткнулся на дискуссию трехмесячной давности, о необходимости переноса порта SSH. Очень много участников дискуссии убеждено в отсутствии необходимости переноса порта на нестандартный порт.

Достаточно перейти на авторизацию по ключам и поставить Fail2ban и это уже будет гарантией безопасности. К сожалению, мы живем в реальном и мире, который постоянно меняется и предложенные меры безопасности уже не являются всегда достаточными.
Читать дальше →
Всего голосов 37: ↑21 и ↓16+5
Комментарии98

UHCI, или самый первый USB

Время на прочтение7 мин
Количество просмотров12K


Доброго времени суток, дорогой читатель! Меня просили написать про UHCI — хорошо, пишу.

Возможно, вам пригодиться эта статья, если, к примеру, вы не имеете достаточных навыков написания драйверов и чтение документации к хардвейру. Простой пример: хотите написать свою ОС для мини-ПК, дабы какая-нибудь винда или очередной дистрибутив линукса не загружали железо, и вы использовали всю его мощь исключительно в своих целях.
Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии5

Как мы делали БелАЗ. Часть 1 – Железо

Время на прочтение15 мин
Количество просмотров83K


Наверное, все знают, что большие карьерные самосвалы имеют электромеханическую трансмиссию (уже с 1968 года): ДВС вращает генератор, энергия от которого приводит в движение тяговые электродвигатели в задних колесах самосвала. В интернете можно найти много обзорных статей и «тест драйвов» этих машин, но многие технические подробности обычно опускаются. Эта серия статей будет написана с изнаночной стороны, от имени разработчиков электрической трансмиссии: как мы это разрабатывали, на каких контроллерах, на каких двигателях, как отлаживали и запускали машину. Также мы готовы ответить на интересующие вопросы в комментариях. Интересно? Добро пожаловать под кат.
Читать дальше →
Всего голосов 213: ↑213 и ↓0+213
Комментарии256

Box-shadows.css

Время на прочтение3 мин
Количество просмотров7.3K
image

Всем привет!

В современном дизайне, при создании сайтов и приложений, многие разработчики применяют эффект глубины и объема, нередко обращаясь к таким css свойствам как box-shadow и drop-shadow. Некоторые считают, что в 2018 году это тренд. И действительно, немало как иностранных, так и российских сайтов, которые в 2018 году стали чаще применять тени.

Читать дальше →
Всего голосов 23: ↑13 и ↓10+3
Комментарии11

[Перевод] Вышел Elasticsearch 6.3.0

Время на прочтение4 мин
Количество просмотров9.3K
13 Июня вышел Elasticsearch 6.3.0 на основе Lucene 7.3.0. Это последний стабильный релиз и уже доступен для использования в облаке через службу Elasticsearch на Elastic Cloud.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии5

Angular cli 6: зачем нужен и как использовать

Время на прочтение5 мин
Количество просмотров22K


Всем привет!

Версия Angular 2.0.0 вышла в сентябре 2016 г. И сразу же появилось большое количество подходов к построению и сборке приложений на этом фреймворке. На просторах интернета можно найти Angular seed на любой вкус.

Мы тоже создали свой Angular seed: создали общий project-template, обязали все команды, разрабатывающие фронт-энд, использовать одну структуру приложений.

А уже через полгода, в марте 2017 года, увидела свет версия Angular cli (cli – command-line interface) 1.0.0. Идея, взятая за основу, просто отличная: систематизировать подход к разработке приложений на Angular 2+. Стандартизовать структуру приложения, создание сущностей внутри приложения, а также автоматизировать сборку приложения. Эти задачи и позволяет решить Angular cli, значительно экономя ваше время.

В статье я покажу, как перейти на Angular cli 6
Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии4

Хватит терпеть жару в квартирах

Время на прочтение6 мин
Количество просмотров119K

Предисловие:
На написание данной публикации меня вдохновила, ставшая культовой, статья "Прекратите скручивать". Скрутки — это бич современности, которые не смотря на то, что они давным давно запрещены, все еще повсеместно используются электриками, особенно электриками из ЖЭКа. Поскольку я являюсь членом правления в нескольких ТСЖ, то мне приходится много контактировать с представителями рабочего класса, обслуживающими наши многоквартирные дома. И если в электрике бич — это скрутки, то в сантехнике, таким бичом являются полипропиленовые трубы! Но, обо всем по порядку.


Последние несколько недель многие жители нашей необъятной Родины умирали от жары. Днем на улице тепло, а отопление еще не выключили. Знакомая ситуация? Невозможно спать, нечем дышать, воздух сухой. Мало того, что это самая большая статья расходов в платежках за коммунальные услуги, так и при этом мы вынуждены жить в антисанитарийных условиях, когда температура воздуха в квартирах достигает 30 градусов жары. По нормативам СанПиН 2.1.2.2645-10 максимальная температура в жилых комнатах не должна превышать 24 градуса:


image


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

Читать дальше →
Всего голосов 92: ↑85 и ↓7+78
Комментарии530

TON: Telegram Open Network. Часть 1: Вступление, сетевой уровень, ADNL, DHT, оверлейные сети

Время на прочтение9 мин
Количество просмотров104K

TON: Telegram Open Network


Уже две недели Рунет шумит про Telegram и ситуацию с его бессмысленной и беспощадной блокировкой Роскомнадзором. Рикошетом задело многих, но всё это — темы для постов на Geektimes. Меня же удивило другое — я до сих пор не видел на Хабре ни одного разбора запланированной к выходу на базе Telegram сети TON — Telegram Open Network. Мне захотелось восполнить этот недостаток, ибо поизучать там есть что — даже несмотря на отсутствие официальных заявлений о нём.


Напомню — ходят слухи о том, что Telegram запустил очень масштабное закрытое ICO, уже собрав в нём невероятные суммы. Предполагается, что уже в этом году будет запущена собственная криптовалюта Gram — и у каждого пользователя Телеграма автоматически появится кошелёк, что само по себе создает немалое преимущество перед остальными криптовалютами.


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


Что же говорится в этом документе? Я попробую пересказать его своими словами, близко к тексту, но по-русски и чуть более человечно (да простит меня Николай со своей склонностью уходить в формальную математику). Имейте в виду, что даже в случае его подлинности, это черновое описание системы и оно, весьма вероятно, изменится к моменту публичного запуска.

Итак, приступим
Всего голосов 84: ↑83 и ↓1+82
Комментарии129

Архитектура кода

Время на прочтение15 мин
Количество просмотров61K
В этой статье я хочу поделиться своим личным опытом, связанным с правильной организацией кода (архитектурой). Правильная архитектура существенно упрощает долгосрочную поддержку.
Это очень философская тема, поэтому я не могу предложить ничего более, чем мой субъективный анализ и опыт.

Проблемы, симптомы


Мой начальный опыт программиста был весьма безоблачным – я без лишних проблем клепал вебсайты-визитки. Писал код, как я это сейчас называю “в строчку” или “полотном”. На маленьких объемах и простых задачах все было хорошо.

Но я сменил работу, и пришлось разрабатывать один единственный вебсайт в течение 4-х лет. Естественно, сложность этого кода была несопоставима с визитками из моей прошлой работы. В какой-то момент проблемы просто посыпались на меня – количество регрессии зашкаливало. Было ощущение, что я просто хожу по кругу – пока чинил “здесь”, сломал что-то “там”. И поэтом это “здесь” и “там” банально менялось местами и круг повторялся.

У меня исчезла уверенность в том, что я контролирую ситуацию – при всем моем желании недопустить баги, они проскакивали. Все эти 4 года проект активно разрабатывался – мы улучшали уже существующий функционал, расширяли, достраивали его. Я видел и чувствовал, как удельная стоимость каждого нового рефакторинга/доработки растет – увеличивался общий объем кода, и соответственно увеличивались затраты на любую его правку. Банально, я вышел на порог, через который уже не мог переступить, продолжая писать код “в строчку”, без использования архитектуры. Но в тот момент, я этого еще не понимал.
Читать дальше →
Всего голосов 44: ↑41 и ↓3+38
Комментарии25

Apache Kafka: обзор

Время на прочтение12 мин
Количество просмотров359K
Привет, Хабр!

Сегодня мы предлагаем вам сравнительно краткую, но при этом толковую и информативную статью об устройстве и вариантах применения Apache Kafka. Рассчитываем перевести и выпустить книгу Нии Нархид (Neha Narkhede) et. al до конца лета.


Приятного чтения!
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии19

Never Fail Twice, или как построить мониторинговую систему с нуля

Время на прочтение10 мин
Количество просмотров12K
У нас было 2 виртуальные машины, 75 сайтов, десятки тысяч машин для мониторинга, тысячи метрик, две базы данных и одна очередь ActiveMQ, Python и целое множество библиотек всех сортов и расцветок, pandas, а также numpy, dash, flask, SQL Alchemy. Не то чтобы это был необходимый запас для системы, но если начал собирать компоненты, становится трудно остановиться. Единственное, что вызывало у меня опасение — это JavaScript. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем JS зомби. Я знал, что рано или поздно мы перейдем и на эту дрянь.

image
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии9

Создаем TUI на python

Время на прочтение4 мин
Количество просмотров51K

Привет, Хабр! В этой статье я расскажу про npyscreen — библиотеке для создания текстовых интерфейсов для терминальных и консольных приложений.



Читать дальше →
Всего голосов 63: ↑63 и ↓0+63
Комментарии40

REST API Best Practices

Время на прочтение7 мин
Количество просмотров422K
Привет, Хабр! Представляю вашему вниманию перевод статьи "REST API Best Practices" автора Krishna Srinivasan.

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

Disclamer: все best practies основаны на моем личном опыте. Если вы имеете другое мнение, не стесняйтесь отправлять его мне на email, и мы обсудим его.

Здесь представлен список best practices, которые будут обсуждаться в этой статье:

1. Конечные точки в URL – имя существительное, не глагол
2. Множественное число
3. Документация
4. Версия вашего приложения
5. Пагинация
6. Использование SSL
7. HTTP методы
8. Эффективное использование кодов ответов HTTP
Читать далее
Всего голосов 55: ↑48 и ↓7+41
Комментарии195

RxJS: Не отписывайся

Время на прочтение5 мин
Количество просмотров11K
Привет, Хабр! Представляю вашему вниманию перевод статьи "RxJS: Don’t Unsubscribe" автора Ben Lesh.

Ну… ладно, просто не отказывайся от подписок.

Я часто помогаю кому-нибудь в отладке проблем с их RxJS кодом, в том числе со структурированием приложений, которые несут в себе много асинхронного кода. При этом я всегда вижу одно и тоже, как люди держат обработчики на тоннах подписок. Разработчик делает 3 HTTP-запроса с Observable, сохраняя 3 объекта подписки, которые будут вызваны, когда произойдет какое-то событие.

Я знаю, почему так происходит. Люди привыкли использовать `addEventListener` N раз, а затем, когда они больше не нужны, вызывать `removeEventListener` N раз. Естественным будет делать то же самое и с объектами-подписками, и по большей части вы будете правы. Но есть и лучшие способы. Сохранение слишком большого количества объектов подписок — это знак того, что вы управляете своими подписками императивно и не пользуетесь преимуществами Rx.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии2

Rust: используем serde для сериализации

Время на прочтение6 мин
Количество просмотров7.1K

Сериализация данных посредством serde. Недавно я писал Rust-код для работы со сторонним источником данных в TOML-формате. В других языках я бы подгрузил данные какой-либо TOML-библиотекой и прогнал бы по ним мою программу, однако я слышал про serde — библиотеку сериализации на Rust, так что я решил попробовать ее.


Подробности — под катом.

Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии0

Выбираем веб-шрифты: руководство для начинающих

Время на прочтение11 мин
Количество просмотров63K
Устраните элемент таинственности в выборе шрифтов с нашим пошаговым руководством

Если всё сделать правильно, то типографика становится невероятно мощным инструментом. Обратимся к сочинениям Роберта Брингхёрста, чья книга «Основы стиля в типографике» (The Elements of Typographic Style) десятилетиями служила остроумным справочником для профессионалов. Там вы найдёте возвышенную формулировку ремесла. По Брингхёрсту, типографика «существует для уважения контента», а правильная типографика «показывает каждый элемент, каждое отношение между элементами и каждый логический нюанс текста».

Может, эти слова кажутся вдохновляющими или пугающими. Но очевидный факт в том, что правильный выбор типографики всегда отражает конкретные потребности самого проекта. Это не только эстетические потребности, но также технические и функциональные — и очень разные сообщения вы можете создать из фрагментов текста, прокручивая выпадающий список от Alegreya до Zapf Dingbats. Некоторые шрифты лучше работают в заголовках, а другие хорошо читаются в абзацах. Некоторые семейства достаточно велики, чтобы вместить международные алфавиты и специальные символы. И если шрифт идёт в разных стилях (например, курсив или малые прописные) и начертаниях (от тончайшего Hairline до ультра-чёрного), то по мере сборки проекта он предоставит больше возможностей для тонкой настройки дизайна.

Конечно, есть о чём подумать, но некоторые из наиболее важных соображений — это практические и функциональные особенности проекта. Начав с уже известных вещей и пройдя по следующим пунктам, вы найдёте шрифт, который соответствует вашим нуждам.
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии1

Операционные системы с нуля; Уровень 0

Время на прочтение11 мин
Количество просмотров132K

Добрый день/вечер/ночь/утро! Есть один экспериментальный курс по операционным системам. Есть он в Стэнфордском университете. Но часть материалов доступно всем желающим. Помимо слайдов доступны полные описания практических занятий.


Чем этот курс отличается от прочих других? Большая часть кода пишется самостоятельно и выполняется на вполне реальном современном железе. В качестве целевой платформы выбран Raspberry Pi 3 model B. Т.е. достаточно актуальная архитектура AArch64. ARMv8 Cortex-A53, четыре ядра, 64-бита и вот это всё. В качестве основного языка программирования выбран Rust. Который безопасный, быстрый, без GC и так далее. Его, Rust, предполагается изучать во время курса.


Тут есть про диски, файловые системы, операции ввода-вывода, потоки /процессы, планирование, виртуальную память, защиту и безопасность, прерывания, параллелизм и синхронизацию. Как и в любом другом, уважающем себя курсе. Разница в актуальности материала и в количестве практики. Коддить придётся много.

Читать дальше →
Всего голосов 80: ↑78 и ↓2+76
Комментарии55

Создаем CSS кейлоггер

Время на прочтение4 мин
Количество просмотров33K

Часто бывает так, что внешние JS файлы выглядят как угроза для клиента, в то время как внешнему CSS не придают особого значения. Казалось бы, как CSS правила могут угрожать безопасности вашего приложения, и собирать логины? Если вы считаете что это невозможно, то пост будет вам полезен.


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

Читать дальше →
Всего голосов 88: ↑87 и ↓1+86
Комментарии32

Kotlin 1.2: общий код для JVM и JavaScript

Время на прочтение5 мин
Количество просмотров20K

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


В версии Kotlin 1.1 мы официально выпустили поддержку JavaScript — возможность транслировать код на Kotlin в JS и выполнять его в браузере. В этой версии мы добавляем к этому возможность переиспользования кода между JVM и JavaScript. Теперь вы можете использовать одну и ту же реализацию бизнес-логики во всех компонентах вашего приложения — бэкэнде, фронтэнде в браузере и мобильном приложении под Android. Мы также работаем над библиотеками, которые в этом помогают — в частности, над кросс-платформенной библиотекой для сериализации.


Читать дальше →
Всего голосов 32: ↑29 и ↓3+26
Комментарии26

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность