• Webpack и моканье зависимостей

      В мире JavaScript существуют две фракции. Первая из них — технари, которые все проблемы стараются решать «технично». Вообще технари ребята суровые, я бы даже сказал строгие, и потому любят такую же суровую и строгую типизацию, и везде суют TypeScript, Dependency Injection и другой IoC.

      Вторая же — маги. Кто-то, считает их шарлатанами, и уж никто точно не понимает как работает их код. Но он работает. На строгую типизацию у них табу, а про(от) DI у них есть простая отговорка:

      «Зачем мне уродовать свой код, смешивая ужа с ежом, если это нужно исключительно для тестов?».

      И ведь на самом деле — добавлять в проект DI исключительно чтобы мокать зависимости в тестах — идея не самая умная. Особенно если DI и на самом деле редкий зверь за пределами экосистемы Angular.

      Есть только одно но — если технари от своей профдеформации не страдают, то маги… ну как сказать…

      В общем пару месяцев назад один добрый человек создал мне в proxyquire-webpack-alias issue. Суть была проста — «не работает». Мне потребовался день чтобы изменить ЧТО не работает, на ГДЕ.


      Читать дальше →
      • +14
      • 11,1k
      • 9
    • It's a (focus) Trap

        Люди которые пишут стандарты — очень хитро устроились. Им достаточно написать как должно все хорошо работать, а дальше уже не их проблемы.

        Примерно так и получилось с тем «как должны работать диалоги», точнее «правильные» с точки зрения a11y модальные диалоги.

        В описание к dialog role на MDN все написано очень просто:

        • The dialog must be properly labeled
        • Keyboard focus must be managed correctly

        Проблема в том, что MDN забыла еще об одном важном пункте, а все остальные забыли про один из сказанных – про то, что модал не должен выпускать фокус из своих рук. Активный элемент надо посадить под замок. Не дать ему сбежать из нашей ловушки.


        Это будет настоящий детектив!
      • Mockанье зависимостей в node.js приложениях

          Mocks, fakes, and stubs — три столпа юнит тестирования. Конечно же все знают что это такое, как солить и когда есть. Я честно тоже так думал, пока не столкнулся с действительностью, под которую мне пришлось немного прогнуться.


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


          Component = proxyquire.noCallThru().load(‘../Component’, {
 
               ‘../../core/selectors/common': { getData }

          }).default;
          Читать дальше →
        • Скажи мне, где ты, и я скажу тебе, где ты

            В подмосковном Подольске, в микрорайоне Силикатная-2, есть один лайфхак — когда на дворе уже 9 вечера, и пиво в магазинах уже не продают — достаточно просто перейти дорогу, чтобы его купить. Через дорогу Москва — в ней желаемое до 11 найти можно.

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

            Исторически на этот вопрос отвечает «обратный геокодер»(reverse geocoder). Он важная часть практически всех картографических АПИ — Google, Яндекс, и даже OSM. Но в большинстве случаев его ответ предназначается человеку, и содержит исключительно текстовое описание локации.

            Это-не-технологично! И уж точно непрактично. Esosedi, кушали этот кактус пару лет, а потом просто сделали свой обратный геокодер. Главное как и зачем.

            Совсем недавно на хабре искали Смерть Кащееву (nested set и вложеность административных рубрик), ходили по районам(отображение данных регионов на карте), и (не)попадали на счетчик Яндекса (прямой геокодер). А теперь разберем, что такое обратный геокодер, и зачем он нужен. А потом разберем механики его работы.
            Читать дальше →
          • Как найти себе место на земле и не попасть на счетчик Яндекса

              … эта история началась давным-давно в далекой-далекой стране Краковия, чьи жители беспечно проживали свои жизни и не знали…

              Но сам я местный, и сегодня расскажу вам страшную историю, о том, что мешало спать (лично мне) долгие годы. И это не налоги (с ними все нормально), это — геокодер Яндекс.Карт!
              Геокодер — это один из HTTP-сервисов Яндекс.Карт, получающий в запросе текстовое представление адреса и возвращающий в ответе найденные на его основании объекты. Либо наоборот: получающий координаты и отвечающий адресом.

              Именно геокодер подскажет, где на карте находится чудная страна Краковия. И именно он будет главным героем этой истории, завязка которой была описана совершенно в другой книге — в древнем фолианте Пользовательское соглашение API Яндекс.Карт. Легенда гласит, что существует ограничение на количество запросов к функции геокодирования. Максимально допустимо делать в сутки не более 25 000 запросов к HTTP и JS геокодеру в сутки. Или овсянка, сэр.

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



              Что делать? Для наглядности достанем из кустов рояль — 8 лет назад на Хабре засветился проект «еСоседи» — «Карта интересных мест». Все эти годы я продолжаю работать над ним.
              Читать дальше →
              • +28
              • 29,1k
              • 9
            • Районы… Кварталы…

                Совсем недавно на хабре была статья от AirBnb — «Создавая карту мира». Хорошая и красивая статья про административное деление мира. Один минус — у статьи один комментарий, и то мой.
                Пользуясь случаем проведу опрос — хотели ли бы вы такую карту административных делений?
                А то она у меня есть:



                Вы наверное замечали, что Google.Карты умеют подсвечивать контура городов. С недавнего времени такое есть и на Яндекс.Картах. Мало кто знает, что геометрия есть и на eSosedi.

                А вот когда такая возможность появится на вашем сайте — теперь зависит только от тебя %username%.

                Для достижения эффекта достаточно зайти на data.esosedi.org или GitHub, ознакомиться с документацией библиотеки osmeRegions и начать использовать.

                P.S.: 3 признака того, что год минувший все сделал красиво: 1. Районы 2. Кварталы. 3. Детализация до «Жилые массивы» доступна для некоторых городов.
                Читать дальше →
              • Где смерть Кащеева?

                  Привет ребят, давайте для начала проверим вашу память. Итак:
                  «На море на океане есть остров, на том острове дуб стоит, под дубом сундук зарыт, в сундуке — заяц, в зайце — утка, в утке — яйцо» в яйце игла — смерть Кощея!

                  А теперь, внимание, вопрос — как это формализовать?
                  Как приатачить к яйцу иголку и какова временная сложность детача смертии моей. Как перенести сказку в быль, как это выглядит на B-деревьях и почему на самом деле нет разницы между 2D и 1D.
                  А было все так: давным давно, в неком царстве, некотором государстве, на одном сервисе с шейрингом геолокации очень захотелось Иванушке Дурачку на уровне ЧПУ разделить Москву(/RU/MOW/) и Область(/RU/MOS/). И вообще навести порядок, чтобы все лежало по полочкам красиво и по алфавиту. Но не получалось ему сокровища свои посчитать, и аккуратно разложить. А Василису, хоть и дурак, к сбережениям не пускал.
                  Но решение было найдено.
                  Совсем недалеко над каким-то златом успешно чах Чахлик, еще и смерть он свою прятал по науке.
                  И если задача определения региональной (точнее полигональной) принадлежности некой иголки к некому сундуку выходит за рамки данной статьи, то нам ничто не мешает погрузиться в глубины зайца и посмотреть как он устроен на табличном уровне.
                  PS: и не спрашивайте почему зайца.
                  Читать дальше →
                  • +14
                  • 9,3k
                  • 8
                • W for Wikipedia

                    Что такое «BigData»? Это те данные, которые нельзя просто так переварить. Или нельзя просто так приготовить. Или это вы думаете что нельзя.
                    Особо сильный «перекос», в этом понимании бигдаты спрятался в web-картографии, в картах на различных сайтах.
                    И так уж получилось — на протяжении нескольких лет я катался по различным конференциям, и рассказывал про организацию передачи данных с сервера на Карту. Иногда меня спрашивали — «а где же взять эти ваши много данных».
                    Это не правильные вопросы, правильные вопросы это:
                    — как данные хранить
                    — какие данные, когда и почему передавать на клиент
                    — что такое серверная кластеризация, как она выглядит и почему она нужна
                    — что с данными делать
                    — и зачем это все нужно %username%

                    А насчет откуда взять данные… Есть один такой детский стишок

                    Весь покрытый метками
                    Абсолютно весь
                    Остров Википедии
                    В океане есть


                    И на этом острове растет примерно десять миллионов геотегированных статей, которыми мы и воспользуемся.
                    Но с флорой и фауной там не все так просто — статьи растут на разных языках, в разных местах, и их на само деле много…
                    Поэтому мы, как настоящие герои, немного усложним задачу и добавим немного агрегатных функций, Левенштайна, Мorton кодов, esosedi и немного здравого смысла.

                    Поехали!
                    • +25
                    • 12,5k
                    • 7
                  • Кешируем статику

                    Существует мнение, что nginx — отличный инструмент для отдачи статики.
                    Есть статьи, где описываются настройки sendfile или aio для «улучшения» отдачи.
                    На Хабре есть чего почитать о настройке proxy_store с proxy_cache для минимизации проблем со стороны мозгов сайта.
                    Еще в QA иногда возникают вопросы про кеширование картинок, например.
                    Зачем заниматься этой ерундой! — говорят опытные пользователи — OS лучше вас знает как кешировать файлы! С кешем и префетчем в современных OS, точнее FS, проблем нет! Зачем плодить свои кеши и списки популярных материалов и все такое?...

                    Есть только одно вредное «но» — в среде исполнения nginx (в общем случае Linux) понятие "файл" и вообще «файловая система» — просто понятие.
                    И однажды, когда я, подмонтировав сервер по sshfs, обновил один скриптик, случилось волшебное:
                    1. На каждой страничке стало на 4 картинки больше.
                    2. Сервера сдохли.

                    Что поделать — картинки хранились на glusterFS. Наступил полный FUSE.
                    Читать дальше →
                  • еСоседи — три года спустя

                      eSpsedi Три года назад произошло одно событие, которое мне до сих пор не дает покоя.
                      Три года назад хабр помог мне сделать eSosedi относительно популярным сайтом.
                      И про эти три года я и хочу немного рассказать.
                      Читать дальше →