• Старый ламповый телевизор ежедневно приводил к падению ADSL-соединения в целой деревне

      Абсолютно комичная со стороны ситуация происходила на протяжении последних полутора лет в небольшой деревне Аберхосан недалеко от Уэльса. Последние 18 месяцев жители поселка сталкивались с тем, что около 7 утра интернет в деревне «заканчивался»: целиком пропадало интернет-соединение, либо коннект становился крайне нестабильным. Постоянные вызовы техников и проверка оборудования компании результата не приносили. С техникой все было в норме, но интернет все равно падал.



      Ситуация дошла до того, что провайдер Openreach заменил старые медные и алюминиевые сети на новую проводку, однако существенного результата это не принесло, сбои продолжились. Причина подобного поведения ADSL-соединения крылась в старом ламповом телевизоре который работал буквально как ЭМИ-граната из фантастических произведений.
      Читать дальше →
    • История одного байта

        Предисловие.
        Этот рассказ имеет свою длинную историю. Для многих это, возможно, будет махровый баян, но мне кажется он стоит того, что бы его прочитали новые люди.
        Во всех источниках, где я встречал его сведения об авторе были просты и незатейливы: Dmitry Galuscenko. Если кто-то может указать сайт или e-mail — напишите в комментариях, я с удовольствием добавлю.
        Итак, начнем.


        Мне не хватало байта. Всего одного. Да, да. Того самого, что из восьми бит состоит. Что? Hет, я не псих, хотя одному богу известно, сколь тонкой была граница отделявшая меня от этого состояния.
        Hо все по порядку
      • TeX в SVG: опенсорс-решение в помощь веб-разработчикам образовательных проектов

          Привет! Меня зовут Костя Мамаев, я занимаюсь фронтенд-разработкой в поиске Яндекса. Некоторое время назад мы вместе с другими ребятами из команды помогали образовательным проектам компании. Среди прочего пришлось решить, казалось бы, простую задачку: отображать на экране и распечатывать на бумаге формулы, закодированные в популярном формате TeX. Звучит, как дело пяти минут, но в результате трёх подходов к снаряду появился полноценный микросервис для серверного рендеринга формул в svg и png. В статье расскажу, зачем мы пошли этим путём и почему ни один из существующих проектов не подошёл «из коробки».

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

          Подробнее про три подхода к снаряду
        • Ваши квадрокруги — неправильные

            На днях вышла статья, посвящённая разнице между квадратом со скруглёнными краями и «квадрокругом» — промежуточной фигурой между окружностью и квадратом, полученной из формулы cуперэллипса. Мнения читателей разделились — не все увидели разницу, а кто увидели — не все отдали предпочтение «правильному» варианту. И я подозреваю, почему: эти ваши квадрокруги — ненастоящие!


            Эти - настоящие
          • Мы тратим годы на то, что делается неделю — потому что все ларьки заигрались в IT-гигантов



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

              Если бы меня кто-то спросил, за сколько можно сделать такое приложение в одиночку — я бы сказал: «два месяца на разработку, один на тестирование». Но нас было много, поэтому мы работали больше двух лет.
              Читать дальше →
            • «В карантин нагрузка выросла в 5 раз, но мы были готовы». Как Lingualeo переехал на PostgreSQL с 23 млн юзеров

                image

                Проекту Lingualeo уже 10 лет. Более 23 миллионов человек из России, Турции, Испании и стран Латинской Америки учат с помощью нашего сервиса английский.

                LinguaLeo создавали в конце нулевых – начале десятых годов и использовали передовые на тот момент технологии и методы. Но прошло время, и они сильно устарели. Так что мы решили, что систему пора обновить.

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

                Проблемы зрелого продукта


                «Я пришёл в Lingualeo в августе 2018 руководить бэкэнд разработкой. Тогда бэком занималась команда из 8 разработчиков и 2 админов, которые обслуживали монолит на 1 миллион строк кода преимущественно на PHP. Чтобы внедрить даже небольшую новую фичу, уходило 2 месяца. А затраты на инфраструктуру на 10 000 активных пользователей превышали 1 000 $ в год.

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

                Всего у нас в штате было 20 разработчиков, но развивать продукт было невозможно: если что-то добавить, вылезали неожиданные проблемы. У команды уходило 2–3 недели, чтобы всё починить. Разработчики занимались поддержкой кода из 2013 года, и ресурсов на обновление функциональности не было.
                Читать дальше →
              • Вы уволили самого талантливого сотрудника. Надеюсь, теперь вы довольны

                • Translation
                Недавно довелось прочитать статью под названием «Мы уволили самого талантливого сотрудника. Это лучшее решение, которое мы когда-либо делали». [Очень популярная статья, которая получила массу положительных оценок на Medium — прим. пер.]

                Давайте присядем, вы и я. Нужно поговорить. Если вы не читали статью по ссылке, то уделите 10–15 минут и прочитайте, впитайте её целиком.

                Готовы? Отлично. Теперь разберём этот текст, потому что он значит гораздо больше, чем там написано. Если вы прочитали статью, то понимаете, что автор описывает проблемного сотрудника под вымышленным именем «Рик». Рик — это местный гений с огромным количеством знаний в предметной области, он входит в состав ключевых разработчиков продукта.

                На первый взгляд, это история о технаре, который возомнил себя божьим даром для компании. Он решил, что руководители должны поклоняться земле, по которой он ходит и быть благодарны за одно его присутствие, а руководство вышвырнуло его пинком за дверь, потому что его репутация обналичивала чеки, за которые талант не мог заплатить.
                Читать дальше →
              • Этюд по реализации Row Level Secutity в PostgreSQL

                  В качестве дополнения к Этюд по реализация бизнес-логики на уровне хранимых функций PostgreSQL и в основном для развернутого ответа на комментарий.

                  Теоретическая часть отлично описана в документации Postgres ProПолитики защиты строк. Ниже рассмотрена практическая реализация маленькой конкретной бизнес задачи — скрытия удаленных данных . Этюд посвященный реализации Ролевой модели с использованием RLS представлен отдельно.

                  В статье ничего нового, нет скрытого смысла и тайных знаний. Просто зарисовка о практической реализации теоретической идеи. Если кому интересно — читайте. Кому не интересно — не тратьте свое время зря.
                  Читать дальше →
                  • +16
                  • 1.5k
                  • 3
                • VPN в домашнюю локалку



                    TL;DR: я устанавливаю Wireguard на VPS, подключаюсь к нему с домашнего роутера на OpenWRT, и получаю доступ к домашней подсети с телефона.

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

                    Вместо этого я настроил VPN с доступом в домашнюю локалку. Плюсы такого решения:

                    • Прозрачность: чувствую себя как дома при любых обстоятельствах.
                    • Простота: настроил и забыл, не надо думать о пробросе каждого порта.
                    • Цена: у меня уже есть VPS, для таких задач современный VPN почти бесплатен по ресурсам.
                    • Безопасность: ничего не торчит наружу, можно оставить MongoDB без пароля и никто не утащит данные.

                    Как всегда, есть и минусы. Во-первых, вам придётся настраивать каждый клиент по отдельности, в том числе, на стороне сервера. Может быть неудобно при наличии большого числа устройств, с которых хочется иметь доступ к сервисам. Во-вторых, у вас на работе может оказаться совпадающая по диапазону локалка — придётся разрешать эту проблему.
                    Читать дальше →
                  • Проект «часов Уизли» с демонстрацией местоположения членов семьи

                    • Translation


                    Я хотел удивить жену на Рождество. Она – рыжая, фанат «Гарри Поттера», а ещё и мать; всё это вдохновило меня на создание «часов Уизли». Идею я придумал в феврале, поэтому у меня было 10 месяцев на разработку и создание проекта.

                    Для людей, незнакомых с Гарри Поттером и семейством Уизли, поясню, что у семьи магов Уизли есть волшебные часы, которые показывают не время, а местоположение членов семьи, для каждого из которых есть своя стрелка. Вот отрывок из книги «Гарри Поттер и Кубок огня» (Дж. Роулинг, 2000):
                    Миссис Уизли взглянула на напольные часы, стоявшие в углу. Гарри они понравились. Если вы хотели узнать, который час, они бы вам совсем не пригодились – однако оказывались весьма полезными для кое-чего другого. У них было девять золотых стрелок, на каждой из которых было выгравировано имя одного из членов семейства Уизли. На циферблате были не цифры, а описания мест, где мог находиться каждый из членов семьи. Там были «дом», «школа», «работа», а также «в пути», «потерялся», «больница», «тюрьма»; в том месте, где у обычных часов должна была быть цифра «12», значилось «смертельная угроза». Восемь стрелок указывали на «дом», а стрелка мистера Уизли, самая длинная, всё ещё показывала на «работу».

                    «О, а вот и ваш отец едет!» – внезапно сказала она, вновь посмотрев на часы. Стрелка мистера Уизли вдруг начала крутиться, переходя от «работы» к «в пути», а через секунду вздрогнула и остановилась на отметке «дом» вместе со всеми остальными, и все услышали, как он зовёт их с кухни.
                    Читать дальше →
                  • Коды Рида-Соломона. Часть 1 — теория простым языком

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



                      Читать дальше →
                    • Читаем QR код

                      • Tutorial
                      Иногда возникают такие ситуации, когда нужно прочитать QR код, а смартфона под рукой нет. Что же делать? В голову приходит лишь попробовать прочитать вручную. Если кто-нибудь сталкивался с такими ситуациями или кому просто интересно как же читается QR код машинами, то данная статья поможет вам разобраться в этой проблеме.

                      В статье рассмотрены базовые особенности QR кодов и методика дешифрирования информации без использования вычислительных машин.

                      Иллюстраций: 14, символов: 8 510.
                      Читать дальше →
                    • В одной лодке с «ублюдком»: 11 продвинутых советов по использованию Git

                      *"ублюдок" — вольный перевод слова "git" — "an unpleasant or contemptible person", "неприятный или презренный человек".



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


                      Давайте посмотрим, что можно использовать, чтобы улучшить себе жизнь. Статья предполагает, что читатель умеет пользоваться основными возможностями git и понимает что делает, когда, скажем, вводит в консоль git rebase --merge --autostash.

                      Читать дальше →
                    • Как найти скрытую камеру в съемной квартире или номере отеля


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

                        Случаев, когда постояльцы обнаруживают в своих комнатах и номерах скрытые камеры, становится все больше. Согласно результатам исследования, скрытые камеры находит 1 из 10 пользователей Airbnb. Не меньше таких устройств в отелях и хостелах. Представим масштабы проблемы, если учесть, что постояльцы обнаруживают далеко не все камеры, а только те, что установлены небрежно. Как обезопасить себя от шпионажа? Как минимум можно внимательно обследовать помещение, прежде чем поселиться в нем. В статье мы расскажем, что, где и как искать.
                        Читать дальше →
                      • Aрифметика произвольной точности в Erlang


                          @rawpixel


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


                          Если говорить про Erlang, то он, как и многие другие языки, реализует IEEE754 стандарт для float, в то время как стандартный тип Integer в Erlang реализован с использованием арифметики произвольной точности. Однако, хотелось бы иметь не только bigint, но и возможность оперирования рациональными, комплексными и числами с плавающей точкой с необходимой точностью.


                          В статье представлен минимальный обзор теории кодирования чисел с плавающей точкой и наиболее яркие примеры возникающих эффектов. Решение, обеспечивающее необходимую точность операций через переход в представление с фиксированной точкой, оформлено в виде библиотеки EAPA (Erlang Arbitrary Precision Arithmetic), призванной удовлетворить потребности финансовых приложений, разрабатываемых на Erlang / Elixir.

                          Читать дальше →
                          • +33
                          • 4.4k
                          • 3
                        • Восстанавливаем старые часы «Электроника-7»

                            Доброго времени суток, уважаемые хабражители!

                            Началась эта история так. Во время работы на объекте, разместившимся в здании бывшего завода (кажется, металлоконструкций) с длинным названием (и, конечно же, имени очередного великого лидера партии) я увидел в куче хлама, предназначавшейся на выброс, одну вещь. Каковая вещь ударила по мне страшным приступом ностальгии, ибо точно такая же висела в холле СКБ (с не менее длинным и многосложным названием, чем вышеупомянутый завод), где работала когда-то моя мама, и где прошло немало времени из моего детства. Встречайте — часы «Электроника 7-06».



                            Конечно же, я не мог устоять от соблазна восстановить (а может быть, и доработать?) их. Кому интересен процесс, а равно и конечный результат — прошу под кат (осторожно, некоторое количество схем и фото!).

                            Ностальгировать
                          • Как мы ускоряли время разгрузки товара на складе

                              image
                              Терминал сбора данных Zebra WT-40 со сканером-кольцом. Нужен для того, чтобы была возможность быстро сканировать товар, при этом укладывать физически короба на паллету (свободные руки).

                              На протяжении нескольких лет мы очень быстро открывали магазины и росли. Закончилось это тем, что сейчас наши склады принимают и отправляют порядка 20 тысяч паллет в день. Естественно, сегодня у нас уже больше складов: два больших в Москве — 100 и 140 тысяч квадратных метров, но есть и небольшие в других городах.

                              Каждая сэкономленная секунда в процессах приёмки, сборки или отправки товара в таких масштабах — это возможность сберечь время на операции. А ещё это огромная экономия.

                              Именно поэтому два главных множителя эффективности — это продуманный алгоритм действий (процесс) и настроенные ИТ-системы. Желательно «как часы», но «работающие чуть менее, чем идеально» тоже вполне подойдёт. Всё же мы в реальном мире.

                              История началась шесть лет назад, когда мы присмотрелись к тому, как именно поставщики разгружают фуры у нас на складе. Это было настолько нелогично, но привычно, что сотрудники даже не замечали неоптимальности процесса. Более того, в тот момент у нас не было промышленной системы управления складом, и в основном логистические операции мы доверяли 3PL-операторам, которые использовали свой софт и опыт в построении процессов.
                              Читать дальше →
                            • Как ошибка из 2009 вызывает конфликт Docker for Windows и Razer Synapse

                              • Translation
                              Сегодня мне попался весьма любопытный баг: Docker for Windows не запустится, если у вас запущена панель управления драйвером Razer Synapse.

                              Но интереснее всего то, почему так случилось…

                              Читать дальше →
                            • Гениальный алгоритм создания лабиринтов в игре Entombed, который до сих пор не могут разгадать



                                В 2017 двое ученых, канадец John Aycock и британка Tara Copplestone, опубликовали анализ классической игры Entombed для игровой приставки Atari 2600. Механика этой игры, выпущенной в 1982, крайне проста: археолог, управляемый игроком, должен пробраться по прокручивающимся снизу вверх катакомбам, уворачиваясь от зомби.

                                У Atari 2600 было всего 128 байт ОЗУ; тем не менее, кажущийся бесконечным лабиринт при каждом запуске был новым, т.е. генерировался в памяти. Как же программистам это удалось? Вот комментарий Стивена Сидли — программиста, 38 лет назад создавшего эту игру:
                                Основную часть генератора лабиринтов написал какой-то уволившийся торчок. Я связался с ним, чтобы выяснить, как его алгоритм работал. Он ответил, что придумал этот алгоритм, когда был вусмерть накурен и вдобавок пьян, что написал его сразу на ассемблере прежде чем вырубился, а потом даже близко не мог вспомнить, в чем его алгоритм состоял.
                                Читать дальше →