• Mockанье зависимостей в node.js приложениях

    • Markdown

    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
        • 28,6k
        • 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,2k
            • 8
          • W for Wikipedia

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

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

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


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

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

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

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

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

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

                  конфеткаВы никогда не сталкивались с проблемой как объяснить человеку, неиспорченному общением с железным другом, азы программирования?

                  Так уж получилось, что мы, работая в компании ГдеЭтотДом (я и anei), относительно часто ходим обедать в МуМу. Остаток от обеда обычно представляет собой фирменную конфетку. Которую мы не едим — вот такое несоответствие типов.

                  Но мы нашли выход, скармливая их Валерке.
                  Я, честно говоря, не знаю, причем тут программирование, Валерка и конфетки, но, в общем, однажды…
                  Подходит Александреску к Валерке и говорит:
                  Читать дальше →
                • css Rotate. Возможен и в IE

                    Буду краток.
                    css свойство transform:rotate в ИЕ не доступно.
                    Но все знают что есть фильтр progid:DXImageTransform.Microsoft.Matrix, который конечно поворачивает изображение. Но скажем так не совсем правильно.
                    99% статей про использование этого фильтра содержат примерно такую фразу.
                    filter: матрица трансформации
                    left:?
                    right:?
                    *ps: left и right находятся эмпирически

                    На самом деле это не так.
                    Читать дальше →