• Как это сделано: префиксный поиск

      Мы живем во времена, когда кажется, что все просто и все есть. Нужно сделать масштабируемый проект — используем MongoDB, нужна очередь — вот RabbitMQ, нужно поднять функционал поиска — раз плюнуть: ставим Sphinx, Solr, ElasticSearch (нужное подчеркнуть).

      Но здесь лишь доля правды: — при определенном везении можно поставить нужный сервер и все зашевелится. Загвоздка с поиском состоит в том, что пользователи уже порядком привыкли к высокой планке, которую задают «большие ребята», а тот поиск, что поднимется у вас «из коробки», будет явно недотягивать. И если очередь или базу данных вы можете добить железом прежде, чем будете оптимизировать, то поиск железом не добьешь.

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

      Мы посмотрим, как с помощью нашего проекта http://indexisto.com сделан поиск на сайте http://maximonline.ru и сравним его с тем, что есть на других сайтах.

      Для начала несколько примеров. Возьмем запрос «Битва за Лос Анджелес» и представим, что его напишут неправильно «Лос Анжелес биттва». Как видно, пользователь не знает точно, как пишется имя города, и забыл, как звучит название фильма, а также у него дрогнула рука в конце на слове «битва».

      Выберем достойные проекты рунета, в которых есть префиксный поиск, и попробуем поискать там наш запрос:

      Проект Правильный запрос Неправильный запрос
      afisha.ru

      все ОК

      Не найдено
      ivi.ru

      все ОК

      Не найдено
      vk.com

      все ОК

      Не найдено
      maximonline.ru

      все ОК

      все ОК

      Читать дальше →
    • Протокол ухода из жизни

      • Translation
      image

      Об авторе. Питер Хинченс — бельгийский разработчик, писатель и бывший президент Фонда свободной информационной инфраструктуры, ассоциации, которая борется с софтверными патентами в Европе. Автор более 30 протоколов и распределённых систем, основатель свободного проекта ZeroMQ и проекта Edgenet по созданию полностью безопасной, анонимной глобальной P2P-сети, исполнительный директор и ведущий программист компании iMatrix. Автор книг «Культура и империя: цифровая революция», «Код психопата», «Масштабируемый Си» и др.

      Пришло время для моей последней статьи. Я мог бы написать ещё, есть время, но потом буду думать о других вещах: как удобнее устроиться в постели, когда принимать болеутоляющие и о людях рядом со мной.

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

      Я был изолированным и одиноким юношей. Немного аутистичным, наверное. Я думал только о работе, плавании, своих домашних животных, снова о работе. Мысль о том, что людям может нравиться моё общество, была странной. По крайней мере моя работа, казалось, имеет значение. Мы писали генераторы кода на Cobol. Я написал редактор кода, который нравился сотрудникам, потому что элегантно работал на всём. Я самостоятельно выучил Си, ассемблер 8086 и писал программы shareware. Так медленно прошли 90-е.
      Читать дальше →
    • AngularJS: Миграция с 1.2 на 1.4, ч.2

        В первой части мы перебрали все основные проблемы перехода на новую версию, а в этой мы коснёмся того, ради чего мы это делали.


        image


        Как говорилось ранее, главной причиной перехода может служить существенное увеличение в скорости работы приложения: в 4.3 раза более быстрые манипуляции с DOM и в 3.5 раза более быстрые циклы $digest (по сравнению с 1.2), как заявили Джеф Кросс и Бриан Форд на конференции ngEurope.


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


        Давайте же рассмотрим эти инструменты!

        Читать дальше →
        • +14
        • 14.4k
        • 7
      • Поняв Docker

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


          К вашему сведению! В этой статье мы рассматриваем само явление docker-контейнеров, а не составляем список микросервисов, которые гнездятся внутри. Этим мы займемся в следующей серии, во имя справедливости!


          UPDATE: пришлось заменить «докер» на «docker», иначе статья не ищется. Заранее прошу прощения за все «docker'ы» в тексте. Селяви.


          Что мы имеем сегодня


          • Зоопарк дубовых VPS-хостингов.
          • Дорогие IaaS и PaaS с гарантированным vendor lock in.
          • Уникальные сервера-снежинки.
          • Ворох устаревших зависимостей на неподдерживаемой операционке.
          • Скрытые связи частей приложения.
          • Незаменимый админ полубог на скейтборде.
          • Радуга окружений: development, testing, integration, staging, production.
          • Генерация конфигов для системы управления конфигами.
          • Feature flagging.
          docker run docker
        • Паттерн «Репозиторий». Основы и разъяснения

          • Translation
          • Tutorial
          Repository commonly refers to a storage location, often for safety or preservation.
          — Wikipedia

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

          Репозиторий как коллекция


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

          Я хочу внести ясность в этот вопрос. Репозиторий — это коллекция. Коллекция, которая содержит сущности и может фильтровать и возвращать результат обратно в зависимости от требований вашего приложения. Где и как он хранит эти объекты является ДЕТАЛЬЮ РЕАЛИЗАЦИИ.

          В мире PHP мы привыкли к циклу запрос/ответ, который оканчивается смертью процесса. Все, что пришло извне и не сохранилось — ушло навсегда, в этой точке. Так вот, не все платформы работают именно так.
          Читать дальше →
        • Производительность shared-папок в Vagrant

          image

          Руководя крупной и регулярно пополняющейся командой программистов, столкнулся с необходимостью быстро разворачивать среду разработки без танцев с бубном в духе «странно, у меня этот же код работает, а у тебя какая версия такой-то библиотеки?»

          Получив однажды ссылку от заказчика на Vagrant с вопросом «а почему мы это сих пор это не используем?» принялся осваивать это чудо.
          Читать дальше →
        • Потрясающая коллекция бесплатных шрифтов за 2014 год

            Привет, Хабр! Многие уже знают о моей страсти к попытке собрать самое лучше, что может быть полезно для веб-разработчиков или веб дизайнеров. И шрифты — не исключение. Программное обеспечение для работы со шрифтами постоянно развивается. Количество дизайнеров желающих опробовать себя в типографике растет с каждый днем. А сегодня я хочу представить вам их наработки — 30 потрясающих бесплатных шрифтов, которые мне удалось собрать за последний год.

            Polar



            Polar

            Читать дальше →
          • Сети для самых маленьких. Часть десятая. Базовый MPLS

              Сеть нашей воображаемой компании linkmeup растёт. У неё есть уже магистральные линии в различных городах, клиентская база и отличный штат инженеров, выросших на цикле СДСМ.
              Но всё им мало. Услуги ШПД — это хорошо и нужно, но есть ещё огромный потенциальный рынок корпоративных клиентов, которым нужен VPN.
              Думали ребята над этим, ломали голову и пришли к выводу, что никак тут не обойтись без MPLS.

              Если мультикаст был первой темой, которая требовала некоторого перестроения понимания IP-сетей, то, изучая MPLS, вам точно придётся забыть почти всё, что вы знали раньше — это особенный мир со своими правилами.



              Сегодня в выпуске:


              А начнём мы с вопроса: «Что не так с IP?»

              Читать дальше →
            • VPN в каждый дом



                Всем привет! Желание сделать VPN сервер максимально простым в установке и удобным в использовании назревало уже давно. За основу я взял L2TP/IPsec, эта технология нативно поддерживается всеми устройствами и в отличии от PPTP не вызывает проблем при подключении через сотовых операторов.

                tl;dr
                Для установки нам потребуется машинка с Ubuntu 14.04 на борту и «белым» IP-адресом, любой VPS подойдет. Достаточно ввести эту волшебную строчку:
                 curl -sS https://raw.githubusercontent.com/sockeye44/instavpn/master/instavpn.sh | sudo bash 

                и через несколько минут у вас будет рабочий VPN с управлением через браузер (httр://ip-address:8080/) или консоль (instavpn -h).
                Читать дальше →
              • Краткая инструкция: GitHub через I2P

                  Навеяно публикацией «Github опять заблокирован».

                  Новость о блокировке гитхаба заставила задуматься об изготовлении костылей.

                  Почему-то сразу пришла в голову мысль об I2P.

                  И это действительно оказалось несложно.
                  Читать дальше →
                • Github опять заблокирован

                    Обычный вечер веб-разработчика не сулил ничего необычного. Нужно было всего лишь развернуть проект на виртуальной машине.

                    Но тут подкрался Роскомнадзор...
                    $ composer create-project symfony/framework-standard-edition xxx
                    Installing symfony/framework-standard-edition (v2.6.0)
                    <...>
                      - Installing symfony/symfony (2.6.x-dev 09d1a15)
                        Cloning 09d1a15efe18945bb97fac3adc74d56b3bfd42f4
                        Failed to download symfony/symfony from source: Failed to clone git@github.com:symfony/symfony.git via git, https, ssh protocols, aborting.
                    
                    - git://github.com/symfony/symfony.git
                      fatal: unable to connect to github.com:
                      github.com[0: 62.192.255.178]: errno=No route to host
                    

                    image

                    Причём ещё и по требованию Роспотребнадзора. Интересно, при чём тут он?
                  • Анализ HTTP-трафика с Mitmproxy

                    • Tutorial
                    mitmproxy

                    В практике веб-разработчика нередко возникают ситуации, когда требуется отследить и проанализировать трафик приложений, общающихся с сервером по протоколу HTTP (в качестве примера можно привести тестирование приложений для мобильных устройств или HTTP API).

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

                    Для анализа HTTP-трафика существует более специализированное, простое и эффективное решение. Знакомьтесь: mitmproxy. На русском языке подробных публикаций о нем почти нет. В этой статье мы поделимся своим опытом работы с mitmproxy и надеемся, что и вам он окажется полезным.
                    Читать дальше →
                  • Codeship.io: бесплатный CI сервер для приватного репозитория Github/Bitbucket

                    • Tutorial

                    Сразу заинтригую: в результате мы получим связку бесплатного приватного git репозитория на Bitbucket и бесплатный* Continious Integration сервер (SAAS), который будет собирать проект и прогонять все тесты после каждого пуша.
                    * — бесплатная подписка дает возможность тестировать 5 приватных репозиториев и максимум 100 билдов в месяц.

                    Мне этого для личного проекта достаточно.

                    Приведу пример для PHP, проект на Symfony2, но данный сервис поддерживает ещё и Ruby, Node.js, Python.

                    Читать дальше →
                  • Услуги в интернете: как найти сейчас и что обещают в ближайшее время

                    Месяц назад Яндекс запустил сервис заказа бытовых услуг «Яндекс.Мастер» — еще один в свою и так уже не маленькую копилку. Пользователи шутят: «Скоро выйдет сервис «Янедкс.Все»!» Так ли они далеки от истины? Проще сказать, чего гигант рунета пока не может.

                    Так вот, «Яндекс.Мастер». Если кто не слышал еще, это такой сервис для поиска работников напрямую. То есть, в Яндексе посмотрели, сколько запросов на бытовые услуги люди вбивают ежедневно и подумали, что процесс поиска решения такого рода проблем можно ускорить. Не надо искать фирму, чтобы убрать в квартире, собрать мебель или починить кран; нужно просто оставить заявку и все, а система сама подберет мастера. Просто, гениально, со вкусом.

                    Чтобы такой сервис нормально работал, нужно много-много подрядчиков, желательно уже проверенных. Набирать с нуля, конечно же, Яндекс не стал, просто подключил на правах партнеров порядка 70 фирм и агрегаторов бытовых услуг со своими базами исполнителей и рассылает им полученные заявки. Другими словами, идея не нова, и на данный момент уже немало компаний занимаются тем же самым. А Яндекс решил «упорядочить» этот рынок — вовремя ухватить существенную его долю, а если получится, то и возглавить движение в этом достаточно свежем тренде.

                    Давайте рассмотрим несколько наиболее заметных проектов такого типа:
                    Читать дальше →
                  • Pirate Bay начал продвигать новый бесплатный VPN

                      Последние несколько дней на главной странице «Пиратской бухты» вместо их собственного лого висит промо нового бесплатного VPN — FrootVPN. На странице проекта написано, что сервис базируется в Швеции и находится под защитой шведских законов, предоставляет свои услуги бесплатно, используя несколько 10-гигабитных каналов и не ведёт никаких логов.


                      Что мы знаем о тех, кто разместил эту ссылку, кроме удивительной толерантности к jpg-артефактам на логотипах?
                      Читать дальше →
                    • Zend Framework 2: Service Manager

                      • Tutorial

                      Service Manager (SM, CM) в ZF2.


                      Service Manager — это один из ключевых компонентов Zend Framework 2, который существенно облегчает жизнь разрабочика избавляя его от дублирования кода и рутинных операций по созданию и настройки сервисов, позволяя их конфигурировать на максимально высоком уровне. СМ, по своей натуре, является реестром сервисов, основная задача которого — создание и хранение сервисов. Можно сказать, СМ является очень продвинутой версий компонента Zend_Registry из Zend Framework 1.
                      СМ реализует паттерн Service Locator. Во многих частях приложения (например, в AbstractActionController) можно встретить функции getServiceLocator(), которые возвращают класс Zend\ServiceManager\ServiceManager. Такое несоответствие названия метода и возвращаемого типа легко объясняется тем, что getServiceLocator() возвращает объект, реализующий интерфейс ServiceLocatorInterface:
                      Читать дальше →
                    • Создание пакета для Laravel

                      Привет Хабр!

                      Фреймворк Laravel быстро набирает популярность и уже обрел большую армию фанатов. В этой статье я опишу разработку простого пакета для Laravel, а так же публикацию созданного нами пакета на сайте packagist.org для того, чтобы добавлять наш пакет в проект одной строчкой в composer.json.

                      Итак, о чем все это


                      Пакеты (packages) — основной способ добавления нового функционала в Laravel, так говорит нам официальная документация. Мы создадим пакет специально для Laravel, это будет простой блог со списком записей и страницей для просмотра статьи. Мы не ставим целью написать превосходный, универсальный блог с кучей возможностей для кастомизации, мы лишь рассмотрим все тонкости создания пакета, как независимого расширения, которое поможет в будущем избежать дублирования кода в своих проектах, при решении рутинных задач.

                      В итоге мы получим это.


                      Читать дальше →
                      • +15
                      • 25.6k
                      • 3
                    • Увеличиваем новый таможенный лимит в 6,(6) раз

                        image

                        Есть еще люди в селениях, которые получают рассылку от динозавра mail-forwarding'а — Shipito. Недавно их CEO — Джон Ванхара — развел руками перед грядущим приговором всем «пересыльщикам и доставщикам», о чем на хабре уже написали.

                        К сожалению, а может и к счастью, Джон не смог адаптироваться к быстро меняющемуся рынку интернет-доставки, в итоге Шипито сейчас пользуются лишь крайне инерционные люди, остальные же успели перейти к форвардерам с русскими корнями.
                        Ну а наши соотечественники не подкачали! Как многие уже могут знать, компания Shopfans анонcировала новый метод доставки Алтын-Экспресс с уже привычным лимитом €1000 через Казахстан.

                        Мне удалось взять небольшой комментарий у основателя сервиса, и вот, что он рассказал
                        Читать дальше →