• Новый паттерн UI — боковая навигация

    • Translation
    Занимаюсь редизайном приложения 10tracks для Android, и решил позаимствовать красивый интерфейсный ход старших братьев — Facebook и других. На эту тему нашлась хорошая статья, переводом которой спешу поделиться с вами. Между тем эта статья — больше платформа для дискуссии, чем нерушимые устоявишеся правила.


    За последний год интерфейс Android улучшался с феноменальной скоростью (я подобрал небольшую галерею приложений, которые мне нравятся в Google+). Много изменений являлись лишь косметическими (тема Holo в ICS, шрифт Roboto, и т.д.). Мы не увидели больших качественных изменений в принципах проектирования интерфейсов. Но, возможно, как раз сейчас происходит одно такое.

    Почти одновременно несколько приложений внедрили у себя боковую навигацию как в приложении Facebook. Сначала мы увидели, как она используется в новом дизайне Spotify, а затем почти сразу решение переняли Evernote. Не прошло и года, в новом дизайне приложения Google+ представили аналогичный паттерн.
    Читать дальше →
  • Kohana, Image Preview – это просто

    С недавних пор, примерно год назад, перед нашей командой стояла задача выбора PHP фреймворка для реализации «серьезных» проектов. Почему в итоге выбрали Kohana, я уже и не помню, скорее всего интуитивно, подкупившись на его простоту, легкость и не высокий порог входа. На тот момент текущая версия была 3.0 и мы полные энтузиазма вгрызлись в документацию.

    В любом «серьезном» проекте перед разработчиком встает задача генерации уменьшенных копий загружаемых пользователем картинок. Почитав различные HOW TO, мы решили использовать генерацию превью при запросе изображения через url.
    Читать дальше →
  • Анти-спам модуль для Kohana

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

      Поэтому было решено поискать на хабре готовые библиотеки или методики по борьбе со спамом.
      Читать дальше →
    • HybridAuth — интеграция сайта с социальными сетями

      • Tutorial

      Введение


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

      1. Авторизация пользователей в случае закрытия Loginza или отказа от нее — в этом случае мы потеряем пользователей, в привязанных профилях которых не указан email;
      2. Дополнительная информация, например, ВКонтакте умеет отдавать фото пользователя в нескольких видах, в том числе квадратный аватар. С Логинзой получить эти данные не представляется возможным, сервис сам решает какие данные запрашивать и какие отдавать;
      3. С момента продажи Яндексу Логинза начала умирать: на запросы пользователей никто не отвечает, сервис не развивается, а находится в том виде, в котором был 1-2 года назад.

      Встал вопрос замены и использовать альтернативные сервисы желания уже не возникало — никто не представлял возможности «общаться» с соц. сетью напрямую, а расширенные поля профиля обычно включались в платные услуги. Хотелось автономного решения с возможностью гибкой настройки запрашиваемых полей и в итоге я остановился на php библиотеке HybridAuth.
      Подробнее о HybridAuth
    • Пишем модуль uLogin для Kohana 3.2

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

      Читать дальше →
    • Защита от SQL-инъекций в PHP и MySQL

      К своему удивлению, я не нашёл на Хабре исчерпывающей статьи на тему защиты от инъекций. Поэтому решил написать свою.

      Несколько пространный дисклеймер, не имеющий прямого отношения к вопросу
      Давайте признаем факт: количество статей (и комментариев) на тему защиты от SQL-инъекций, появившихся на Хабре в последнее время, говорит нам о том, что поляна далеко не так хорошо истоптана, как полагают некоторые. Причём повторение одних и тех же ошибок наводит на мысль, что некоторые заблуждения слишком устойчивы, и требуется не просто перечисление стандартных техник, а подробное объяснение — как они работают и в каких случаях должны применяться (а в каких — нет).

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

      Я не буду пытаться изображать полиглота и писать рекомендации для всех БД и языков разом. Достаточное количество опыта у меня есть только в веб-разработке, на связке PHP/MySQL. Поэтому все практические примеры и рекомендации будут даваться для этих технологий. Тем не менее, изложенные ниже теоретические принципы применимы, разумеется, для любых других языков и СУБД.

      Сразу отвечу на стандартное замечание про ORM, Active record и прочие query builders: во-первых, все эти прекрасные инструменты рождаются не по мановению волшебной палочки из пены морской, а пишутся программистами, используя всё тот же грешный SQL. Во-вторых, будем реалистами: перечисленные технологии — хорошо, но на практике сырой SQL постоянно встречается нам в работе — будь то legacy code или развесистый JOIN, который транслировать в ORM — себе дороже. Так что не будем прятать голову в песок и делать вид, что проблемы нет.

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

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

      Правила, соблюдение которых гарантирует нас от инъекций


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

      Всего два пункта.
      Разумеется, практическая реализация этих правил нуждается в более подробном освещении.
      Но у этого списка есть большое достоинство — он точный и исчерпывающий. В отличие от укоренившихся в массовом сознании правил «прогонять пользовательский ввод через mysql_real_escape_string» или «всегда использовать подготовленные выражения», мой набор правил не является катастрофическим заблуждением (как первое) или неполным (как второе).

      Но вперёд, читатель — перейдём уже к подробному разбору.
      Читать дальше →
    • Хочешь быть iOS разработчиком? Будь им!

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

      Читать дальше →
    • arcticModal — jQuery-плагин для модальных окон

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

        Недавно SamDark писал о правильных модальных окнах и представил сообществу плагин The Modal. Полностью согласен с его виденьем модальных окон, но в представленном плагине не хватало функционала. У меня уже давно из проекта в проект кочевали наработки по этой же теме, вот решил тоже оформить их в виде плагина.
        Подробнее
      • Objective-C Runtime изнутри

          (оригинал — Mike Ash, взято отсюда)

          Многие Cocoa разработчики имеют довольно смутное представление об Objective-C Runtime API. Они знают, что он существует где-то там (некоторые не знают даже этого!), что он важен, и Objective-C без него неработоспособен, но обычно этим все знания и ограничиваются.

          Сегодня я расскажу о том, как устроен Objective-C на уровне Runtime и о том, как конекретно вы можете это использовать.
          Читать дальше →
        • Резюме проблемы «двух и более учителей» и субъективное мнение о ИИ-сообществе

            Пока я тут излагал мысль она несколько растеклась по статьям

            1. Модель функционального разделения сознания и бессознательного. Введение
            2. Модель проявления сознания или ИНС без эффекта забывания
            3. Проблема «двух и более учителей». Первые штрихи
            4. Обучение с подкреплением на нейронных сетях. Теория

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

            Попробуем подытожить и считайте это расширенная статья обещанная в опросе. А заодно мне сказали, что в ИИ-сообществе есть серьезные проблемы. После ряда комментариев — да видимо действительно есть. Попробуем посмотреть на тенденцию.

            Читать дальше →
          • Локализация мобильных приложений. Часть 2

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

              Но мы меня простим и сделаем вид, что это цикл статей ;).

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

              Попробуем ответить на каждый из этих вопросов по отдельности.
              Читать далее...
            • 10 критически важных event ID для мониторинга


              Рэнди Франклин Смит (CISA, SSCP, Security MVP) имеет в своем арсенале очень полезный документ, рассказывающий о том, какие события (event IDs) обязательно должны отслеживаться в рамках обеспечения информационной безопасности Windows. В этом документе изложена крайне полезная информация, которая позволит Вам “выжать” максимум из штатной системы аудита. Мы подготовили перевод этого материала. Заинтересованных приглашаем под кат.
              Читать дальше →
            • Шрифт для регистрационных номерных знаков (автомобильных номеров)

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


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


              Читать дальше →
            • Поддержка Private VLAN в Windows Server 2012

                Одной из главных компонент нового Hyper-V в Windows Server 2012 является Hyper-V Extensible Switch. Hyper-V Extensible Switch представляет собой программный управляемый коммутатор второго уровня, обладающий рядом интересных возможностей, среди которых поддержка технологии Private VLAN (PVLAN). Я вкратце опишу реализацию PVLAN в свиче Hyper-V и в большей степени сосредоточусь на вопросах настройки частных VLAN-ов для виртуальных машин (ВМ). Посмотреть технологию в действии вы можете в первой демонстрации веб-каста, посвященного новым возможностям Hyper-V в Windows Server 2012.
                Читать дальше →
                • +13
                • 23.2k
                • 4
              • Памятка пользователям ssh

                  abstract: В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые не боятся шелла. В отличие от большинства руководств, которые кроме ключей и -L/D/R опций ничего не описывают, я попытался собрать все интересные фичи и удобства, которые с собой несёт ssh.

                  Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.

                  Оглавление:
                  • управление ключами
                  • копирование файлов через ssh
                  • Проброс потоков ввода/вывода
                  • Монтирование удалённой FS через ssh
                  • Удалённое исполнение кода
                  • Алиасы и опции для подключений в .ssh/config
                  • Опции по-умолчанию
                  • Проброс X-сервера
                  • ssh в качестве socks-proxy
                  • Проброс портов — прямой и обратный
                  • Реверс-сокс-прокси
                  • туннелирование L2/L3 трафика
                  • Проброс агента авторизации
                  • Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
                  Читать дальше →
                • Золотое правило производительности

                  От переводчика: Это перевод заметки товарища по имени Steve Souders, который очень плотно занимается вопросами производительности веб-сайтов и даже написал пару неплохих книг на эту тему.

                  Вчера я проводил семинар в Google Ventures для некоторых из инвестируемых ими компаний. Я не знал насколько подготовленной в вопросах производительности будет аудитория, так что я сделал обзор вопросов, связанных с производительностью, начиная с первых моих выступлений в 2007 году. Уже несколько лет я не рассказывал о методах улучшения производительности, описаных в моем блоге "High Performance Web Sites". Я прошелся по таким вещам, как Меньше HTTP-запросов, Добавление заголовка Expires и Gzip.

                  Но мне надо было вернуться еще дальше. Думая о тех временах, когда еще не существовало конференции Velocity и самого понятия WPO, я решил, что должен пояснить почему я занялся именно клиентской оптимизацией. Я нашел слайды, поясняющие «Золотое правило производительности»: 80-90% времени ожидания пользователем занимает работа браузера.

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

                  Читать дальше →
                • Улучшаем релевантность поиска в sphinxsearch

                  Sphinxsearch является поисковым движком для быстрого fulltextsearch, может получать данные из mysql, oracle и mssql, может выступать сам хранилищем(realtime индексы). Также sphinx имеет режим работы через api и через sphinxql — аналог протокола sql(с некоторыми ограничениями), что позволяет подключить поиск через sphinx на сайте с минимальным изменением кода. Это один из немногих великих, крупных и открытых проектов разработанный в России. На моей жизни я видел как sphinx обрабатывает порядка 100-200 поисковых запросов на 2 миллиона записей из mysql и при этом сервер свободно дышал и его не тошнило, mysql начинает умирать уже на 10 запросах в секунду на аналогичном конфиге.

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

                  Sphinx содержит две независимые программы indexer и searchd. Первый строит индексы по данным взятым из базы данных, второй производит поиск по построенном индексу. А теперь перейдем к настройкам поиска в sphinx.

                  morphology

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

                  Пример нормализации слова стеммингом на русском.
                  Слова “яблоко”, “яблока”, “яблоку” будут обрезаны в “яблок” и любой поисковый запрос с вариацией слова “яблока” будет тоже нормализован и найдет записи со словами которые были описаны выше.
                  Читать дальше →
                • Тренажёр для клавиатурных сочетаний

                    Сайт shortcutfoo.com служит для изучения и тренировки клавиатурных сокращений в разных программах. Он ориентирован прежде всего на разработчиков — есть курсы для изучения Vim, Sublime Text, Emacs, TextMate, XCode, *nix консоли. Приятный интерфейс, ничего лишнего, есть возможность создавать свои пакеты комбинаций для тренировки. Несколько неудобно, что он не позволяет видеть результат применения команд, а только даёт их текстовые описания, так что это скорее интерактивная шпаргалка, чем полноценный тренажёр. Тем не менее есть так называемый drill mode, в котором нужно набирать сочетания клавиш по памяти и на скорость.

                  • GUI, не GUI — или как включить и отключить графический интерфейс в Windows Server 2012



                      Когда появилась самая первая версия Server Core многие администраторы избегали его по той причине, что они могли использовать исклюительно возможности командной строки, а это не всегда удобно. Однако, в Windows Server 2012 ситуация поменялась, теперь стало возможным использовать гибридный режим, т.е. возможно как отключение, так и включение графического интерфейса.
                      Читать дальше →