Как стать автором
Обновить
1
0
Коньшин Дан @DanInSpace

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

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

Self Hosted для домашнего сервера

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров23K

Есть отличный термин self hosted, который очень популярен в англоязычном интернете.
Но он плохо переводится, почти как open source - хотя википедия и пытается дать ужасно звучащий термин "самохостинг"...

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

В общем, self hosted - это когда вы решаете, что какие-то вещи лучше хранить у себя, а не отдавать злым корпорациям - фотографии, почту, умный дом, книги, и так далее.
И собираете под это какой-то сервер, полноценным хозяином которого являетесь только вы.

Эту статью я пишу во многом для нескольких друзей, которые решили приобщиться к этому тренду, и здесь будет обзор моего личного self hosted - про всякие разные штуки, которые показались полезны лично мне, и плотно заняли своё место на моём домашнем сервере.

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

Читать далее
Всего голосов 65: ↑65 и ↓0+68
Комментарии124

Ускорение роутера в Django в 51 раз

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров13K

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

Читать далее
Всего голосов 54: ↑53 и ↓1+61
Комментарии17

Пора оставить RAID-5 в далеком прошлом

Уровень сложностиСложный
Время на прочтение4 мин
Количество просмотров22K

Для ЛЛ: RAID-5 совершенно не подходит для современных массивов из дисков на 5-10 Тб по нескольким причинам.

Читать далее
Всего голосов 81: ↑69 и ↓12+84
Комментарии136

Скотч, кабель, Интернет: умный съемный дом

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров19K

Я люблю автоматизацию, гаджеты и IoT

Поэтому, места где я живу, рано или поздно становятся автоматизированными и обвешанными интернетом вещей

Да чего там, у меня даже бойлер по расписанию работает!

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

Автоматизируй это
Всего голосов 55: ↑51 и ↓4+59
Комментарии64

Каково разрешение человеческого глаза (или сколько мегапикселей мы видим в каждый отдельный момент времени)

Время на прочтение5 мин
Количество просмотров216K
Очень часто фотографы, а иногда и люди из других специальностей, проявляют интерес к собственному зрению.

Вопрос, казалось бы, простой на первый взгляд… можно погуглить, и всё станет ясно. Но практически все статейки в сети дают либо «космические» числа — вроде 400-600 мегапикселей (Мп), либо это и вовсе какие-то убогие рассуждения.

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

Начнём с общей структуры зрительной системы


  1. Сетчатка
  2. Зрительный нерв.
  3. Таламус(ЛКТ).
  4. Зрительная кора.



Сетчатка состоит из трёх типов рецепторов: палочки, колбочки, фоторецепторы(ipRGC).
Читать дальше →
Всего голосов 249: ↑244 и ↓5+239
Комментарии404

Я программист, и я тупой

Время на прочтение2 мин
Количество просмотров76K
Я пишу код за деньги уже пятнадцать лет. Пробовал себя и в других ролях – управление продуктом, аналитика, тестирование, – но как-то не пошло. И с течением лет пришел к осознанию, что я не очень умный. К сожалению.

Никаких особых медицинских диагнозов мне не ставили, но мои умственные способности крайне ограниченны. Даже те задачи на Leetcode, которые попроще, вызывают у меня затруднения. Когда я читаю о самом обычном алгоритме консенсуса, у меня кипит мозг. У меня плохо получается отслеживать сложные зависимости в кодовой базе. Я не способен освоить модные языки вроде Rust (пытался, но по правде сказать, для меня это чересчур). Я терпеть не могу микросервисы и современный фронтенд: там слишком много движущихся частей, и уследить за всеми я не в состоянии.

Как же я выхожу из положения?
Читать дальше →
Всего голосов 297: ↑283 и ↓14+324
Комментарии333

Как я собрал красивое ведро для гидропоники

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров29K

Несколько лет назад я писал пост о том, как вырастить на гидропонике крайне острый Trinidad Scorpion CARDI. Он, при его живительных 1.2 миллионах единиц Сковилла, на неподготовленных перцеедов производит впечатление эквивалентное облизыванию паяльника.

Пока Монстр плодоносил и радовал в течение нескольких лет, я продумывал более удобный вариант гидропонной установки, который было бы не стыдно показывать в приличном интерьере гостям. Классический вариант “юного гидропониста” из канализационных труб, алюминиевого скотча и вороха булькающих трубочек был с негодованием забракован женой. Я разработал и протестировал несколько прототипов с 3D-печатными элементами, но потом проект был поставлен на паузу.

Окончательно доделать его получилось после того, как внезапно выяснилось, что коллеги тоже фанаты острого. Мы собрались в нашей виртуальной “курилке”, запилили проект со всеми положенными milestone в Asana и начали тестировать. Садитесь поудобнее, сегодня будет лонгрид-оффтопик, про то, как толпа DevOPS из WiseOPS пилила совместный хобби проект для украшения офиса. Да, мы заняты не только работой) А еще я поделюсь подробной инструкцией и файлами для 3D-печати.

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

Читать далее
Всего голосов 110: ↑109 и ↓1+132
Комментарии166

Выбор первого фотоаппарата — без рекламы, брендов, картинок и почти без технических деталей

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


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

Увлечение фототехникой именуется довольно обидным словом, поэтому назовем таких увлекающихся — «фотогиками». Фотогик может быть фотографом, а может и не быть — это разные хобби, но иногда пересекающиеся. Фотогики часто знают о фотоаппаратах больше, чем фотографы — их ниша в мире фотографии сравнима с нишей оверклокеров из мира IT. Фотогиков — тьма, кучкуются они на ресурсах, посвященных фототехнике, и на тех же ресурсах начинающие обычно задают вопросы о выборе камер.

Для фотографов существует масса курсов и школ, но для фотогиков ничего подобного нет. Было бы странно обучать людей умению собирать один объектив из трех или сравнивать параметры матриц, поэтому все фотогики — самоучки, занимаются самообразованием с помощью форумов и соцсетей. Сценарии развития обычные: неофит задается вопросом «какой фотоаппарат лучше?», озвучивает его на форуме-вконтактике, внимает тем, кого он считает корифеями, потом начинает давать советы другим неофитам, тут ему кажется, что он уже все знает (привет, холивары и статьи в бложики), позже он догадывается, что не все так просто, и последние три фазы повторяются циклично. Крайняя точка выхода из цикла — ничего нового узнать в сообществах он уже не может, а его советы не могут быть поняты большинством других участников, так как содержат в себе ответы с более высокого уровня понимания. И в сообществе становится меньше на одного опытного фотогика.
В итоге, шансов увидеть ответ от гуру на вопрос «какой фотоаппарат лучше?» — крайне мало, вы будете получать ответы от тех, кто еще не знает, сколько всего он не знает. Именно эта категория — самые активные, внушающие доверие и способные производить тонны однотипных материалов по теме. Не буду тыкать пальцем, но одна из подобных статей и побудила меня к собственному опусу о выборе камеры, и даже больше — о выборе фотосистемы для абсолютного новичка в вопросе фототехники.
Читать дальше →
Всего голосов 35: ↑24 и ↓11+13
Комментарии226

Проектируем flutter-приложение «чистым» способом используя bloc

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров22K

Спроектировать и построить приложение не так-то просто. Как правило, всё упирается в продуманную архитектуру, которая должна быть масштабируемой и легко поддерживаемой. Данный материал предлагает вполне элегантный способ, в некотором роде основанный на чистой архитектуре (Clean Architecture).

Рассмотрены:

взаимодействия слоёв

структура папок

основные характеристики каждого уровня

Предлагаю определить сильные и слабые стороны данного предложения.

?
Всего голосов 4: ↑3 и ↓1+2
Комментарии18

Как я чтение всего контента на RSS переводил

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров7.3K

TL;DR В статье рассказывается о том, как мне удалось перевести чтение лент в ВКонтакте**, Telegram, Facebook*, Instagram**, Reddit и почтовых рассылок в единый сервис InoReader. Причем почти без написания своих велосипедов.

Подписаться на RSS
Всего голосов 34: ↑33 и ↓1+40
Комментарии40

await anywhere, взгляд на третью сторону медали: sync vs async vs …

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров13K

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

Узнать? Да!
Всего голосов 27: ↑27 и ↓0+27
Комментарии11

Чеклист, как не превратиться в пепел

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров4K

Около года назад я очень больно столкнулся со своей тёмной стороной – я выгорел. Повезло, моё состояние было не в «пепел», но позднее, отойдя от произошедшего, я решил накидать план действий, чтобы в такое не попадать. Возможно, этот список тоже окажется кому-то полезным. Он был написан в профилактических целях (уж очень не хочется снова попасть в свой персональный адок), и не способен вас вытащить из выгорания, если вы уже в нём. Список носит рекомендательный характер. К нему нужно возвращаться периодически. Забивать не надо. Также полезно, если уже выгорел и приходишь в себя.

Плейлист такой:

Читать далее
Всего голосов 17: ↑12 и ↓5+9
Комментарии8

Стажёр Вася и его истории об идемпотентности API

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

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


Меня зовут Денис Исаев, и я руковожу одной из бэкенд групп в Яндекс.Такси. Сегодня я поделюсь с читателями Хабра описанием проблем, которые могут возникнуть, если не учитывать идемпотентность распределенных систем в своем проекте. Для этого я выбрал формат вымышленных историй о стажёре Васе, который только-только учится работать с API. Так будет нагляднее и полезнее. Поехали.


image

Читать дальше →
Всего голосов 219: ↑216 и ↓3+213
Комментарии163

Как содержать пароли. Мой сетап

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров55K

Я долго собирал информацию о том, как организовать свои аккаунты. Как сделать доступ к ним достаточно надёжным и стойким к утере девайсов. 

Меня интересовало, как я могу залогиниться туда, где многофакторная авторизация через телефон, в случае потери телефона. 

Или, как обезопасить себя от забывания мастер пароля от менеджера паролей? На моей практике я несколько раз забывал пин-код от банковской карты, состоящий из 4-ёх цифр, после ежедневного использования на протяжении многих месяцев. Мозг - странная штука. 

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

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

Пишем на Python как на Rust

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров31K

Я начал программировать на Rust несколько лет назад, и это постепенно изменило мой подход к разработке программ на других языках программирования, особенно на Python. До того, как я начал использовать Rust, я обычно писал код на Python очень динамично, без подсказок типов, повсюду передавая и возвращая словари и время от времени возвращаясь к интерфейсам со «строковой типизацией». Однако, испытав на себе строгость системы типов Rust и заметив все проблемы, которые она предотвращает, я внезапно стал сильно беспокоиться всякий раз, когда возвращался к Python и не получал тех же гарантий.

Читать далее
Всего голосов 88: ↑83 и ↓5+94
Комментарии42

RSync на стероидах с поддержкой Windows

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров34K


На Хабре периодически рассказывают о новых инструментах для синхронизации данных. Это интересная тема. Такие программы используются:

  • для синхронизации файлов на разных устройствах,
  • дедупликации,
  • резервного копирования,
  • сжатия.

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

Кроме того, инструменты синхронизации интересны с алгоритмической точки зрения. Любопытно, как люди умудряются оптимизировать базовые алгоритмы типа rsync, которые вроде бы работают идеально. Но нет, всегда можно придумать что-то получше.
Читать дальше →
Всего голосов 62: ↑62 и ↓0+62
Комментарии30

Дайте крудошлепа

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров114K

Я устроился в небольшую компанию, которая сделал круд‑приложуху на 20 таблиц типа «заметки» и активно ее продавала госорганам за невменяемый бабос.

У нас был 3(три) Т‑Р-И статуса юзера. Anonym → Logined → Phone_Confirmed. Молодой талант до меня увидел в этом граф, и написал класс на 200+ строк, реализующий алгоритм Флойда‑Уоршелла, прикрутил стейт‑машину и не найдя интересных задач, c блеском прошел собес в Яндекс и свалил.

Меня наняли сеньором, и я каюсь ничерта не понял, алгоритм прекрасно работал на первой ступени, на второй давал сбои, тоскливо погуглил этот алгоритм, стер все к черту и написал: if(status==Logined & phone!=null){status=Phone_Confirmed}.

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

Это было вступление.

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

Потому что, только я могу решить задачку, которую вы уже 10 лет решить не можете, когда прилетает пуш‑уведомление или смс и в твоем всплывающем окне написано:

«Ваш шестизначный пароль доступа в наше приложение: 123...»

Не согласен! ...
Всего голосов 395: ↑332 и ↓63+339
Комментарии730

Библиотека конца света

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров11K

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

Читать далее
Всего голосов 30: ↑20 и ↓10+17
Комментарии72

Прекрасный минимализм текстовых файлов

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

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

Читать далее
Всего голосов 136: ↑127 и ↓9+150
Комментарии241

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

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

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


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

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


Существует два типа исключений: «явные» создаются при помощи вызова 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
1
23 ...

Информация

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