• Какой PHP-фреймворк вы используете?

      Два года назад zizop задавал аналогичный вопрос. Любопытно сравнить, насколько изменился расклад сил.

      Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

      Какой PHP-фреймворк вы используете?

    • Архив интересного кода

        Преподаватель из Стэнфордского университета Кит Шварц (Keith Schwarz) уже несколько лет пополняет свой архив интересного кода — образцы самых лучших алгоритмов и структур данных, когда-либо изобретённых человечеством (Шварц весьма амбициозно оценивает свою коллекцию).

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

        Кит Шварц дает разрешение использовать свой код всем желающим без всяких ограничений.
        Читать дальше →
      • Ruby on Rails. Установка, настройка, начало работы

        • Tutorial

        Зачем.


        В этой маленькой статье, которую с удовольствием прочитал бы сам неделю назад, я попытался собрать все вещи, которые понадобились бы человеку, задумай он «с нуля» написать приложение на RoR. То есть не углубляясь ни в одну из областей, описать необходимый минимум действий, чтобы установить, настроить и написать своё первое приложение.Здесь собрано, как мне кажется, всё, что нужно и я надеюсь этот текст сэкономит кому-нибудь несколько часов поиска в интернете). Сам изучаю RoR вторую неделю, так что не судите строго).

        Установка.


        Просто и быстро ror ставится через rvm c rvm.io.

        >\curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled
        


        Запустить rvm:

        >source /Путь_к_домашней_директории*/.rvm/scripts/rvm
        

        *$HOME в дальнейшем.
        После этого в $HOME/.bash_profile должна появиться строчка:

        [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
        


        и при каждом открытии консоли rvm будет подгружаться, но у меня этого не случилось — пришлось ещё в $HOME/bashrc прописывать:

        . ~/.bash_profile
        


        Теперь всё точно должно быть хорошо.
        Устанавливаем нужную(скорее всего это будет самая последняя) версию руби (сколько их и в чём отличие можно посмотреть здесь -http://www.ruby-lang.org).
        >rvm install 1.9.3
        

        Проверка на успешность создания
        >ruby -v
        

        должна вернуть более подробную информацию, вроде
        ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux].
        

        В процессе установки я случайно установил несколько версий, что потом доставило некоторые неприятности). Посмотреть список установленных версий руби можно так:
        >rvm list
        Если версий несколько, то текущая будет помечена "=>", дефолтная — "*", а текущая и дефолтная — "=*". Поменять на нужную используемую версию можно так:
        >rvm use ruby-1.9.2-p320 (любая нужная версия)
        

        Чтобы поменять дефолтную версию руби пишем:
        >rvm use ruby-1.9.2-p320 --default
        

        Читать дальше →
      • Одиннадцатая заповедь: «Не откладывай»

          Сегодня мне позвонили из библиотеки и попросили вернуть книгу. Я не удивился, так как помнил, что недавно истёк срок сдачи и хотел уже сходить сдать книгу в библиотеку. Каково же было моё удивление, когда я узнал, что задолжал книгу больше, чем на год!



          Конечно, все очевидно: я обманывал себя постоянным откладыванием на завтра так часто, что мысль «надо бы вернуть книгу» вышла в естественный распорядок дня. Тогда я задумался: как много вещей я откладываю и чем это грозит?

          И вот, что я обнаружил:
          Читать дальше →
        • Манга «Занимательная статистика», «Тайна катастроф» и другие похожие книги

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

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

            Я сделал что-то вроде ретроспективы: первая книга — свежий японский комикс-манга о матстатистики издания 2010 года, дальше — книга из 80-х о математике, теории катасроф. Последняя — учебник радиоэлектроники для начинающих, знакомый нескольким поколениям читателей по всему миру, начиная с 30-х годов.

            В качестве иллюстрации поста приведу обложку другой манги из той же серии, что и книга о статистике:

            image

            Читать дальше →
          • Подключение SkyDrive в Linux

            SkyDrive&Ubuntu

            Доброго времени суток.

            Хочу обратить ваше внимание на пару скриптов для работы со SkyDrive в Linux. Скрипты написаны на Python и скорее всего будут работать в любой *NIX системе, и не только *NIX. Первый предоставляет возможность работать с аккаунтом в командной строке, второй, модуль для FUSE, позволяет подключить содержимое SkyDrive к файловой системе. Проект практически нигде не упоминается. Сам я на него наткнулся случайно, после того, как не смог подключить SkyDrive с использованием недокументированного WebDAV. И стал искать другой способ подключения, исходя из предположения, что, раз у SkyDrive есть API, то кто-нибудь должен этим воспользоваться.
            Читать дальше →
            • +15
            • 22,6k
            • 9
          • Время подключать исходники. Введение в Source Maps

            • Tutorial
            В современной разработке ваш код сильно отличается от кода на «боевом» сервере (production) после компиляции, минификации, объединения и разных оптимизаций. Тут-то и вступают в игру карты кода (source maps), показывая точное соответствие элементов готового рабочего кода проекта и вашего кода разработки. В этом вводном уроке мы возьмём простой проект и запустим его с помощью различных компиляторов JavaScript с целью посмотреть работу карт кода в браузере.
            Читать дальше →
            • +20
            • 43k
            • 3
          • Лёгкий сайт или как посадить браузер на диету

            • Перевод

            А что если объединить профессионалов, работавших над крупными web проектами, чтобы создать исчерпывающее руководство по оптимизации front-end разработки?
            И получить в результате не скучную инструкцию, а что то поинтереснее? А если позвать Briza Bueno (Americanas.com), Davidson Fellipe (Globo.com), Giovanni Keppelen (ex-Peixe Urbano), Jaydson Gomes (Terra), Marcel Duran (Twitter), Mike Taylor (Opera), Renato Mangini (Google), и Sérgio Lopes (Caelum) чтобы собрать лучшие практики?

            Именно это мы и сделали! Мы научим вас создавать быстрые сайты.

            Zeno Rocha, руководитель проекта.


            Читать дальше →
          • Uploadcare — файловое хранилище для сайтов и приложений

              image
              Привет! Хочу рассказать о проекте, который наверняка окажется полезным многим разработчикам. В двух словах объяснить, зачем он нужен, достаточно сложно, но я попробую. Uploadcare — сервис для приложений и сайтов, упрощающий получение файлов от пользователей, их хранение и передачу по сети.

              Тот, кто хоть раз делал форму с <input type="file">, знает, что ничего сложного в этом нет, но есть неприятные моменты, возникающие по пути. Вот только некоторые из них:

              — нельзя сохранить форму с файлом по ajax;
              — нельзя показать форму с уже выбранным файлом;
              — если вы ожидаете картинку, нужно убедиться, что загружена картинка;
              — сервер должен быть готов принимать большое тело запроса;
              — в некоторых фреймворках загруженный файл является источником повышенной опасности;
              — удобная загрузка нескольких файлов реализуется достаточно сложно;
              — индикация процесса загрузки реализуется еще сложнее;
              — на диске сервера может закончиться место;
              Читать дальше →
            • Как сократить количество написаного кода при ajax запросах? И ассинхронная отправка файлов

              Итак ajax запросы, всё просто, все привыкли их уже писать, но всё же как можно сократить количество написанного кода.
              jquery.async.js

              Сразу пример:
              <form action="/" jasync>
              	<input type="submit" />
              </form>
              
              форма отправляется ассинхронно

              <input type="file" href="/" multiple jasync />
              <div type="file" href="/" multiple jasync>Выберите файл</div>
              <div href="/" jasync dropfile>Перетащите файлы и они отправятся на сервер</div>
              
              файлы загружаюся асинхронно

              <a href="/" jasync data="year=2013&month=5" class="send">отправить данные</a>
              
              данные отправляется ассинхронно

              И тут у многих наверное возник вопрос, как обрабатывать полученные данные, если форма не валидна зачем её отправлять, а если я хочу ещё отправить дополнительные параметры?
              Читать дальше →
            • Порождающие грамматики Хомского

              • Tutorial

              Небольшое предисловие


              Этот текст является продолжением поста , в котором автор попытался как можно более просто и без сложных математических выкладок описать понятия формального языка и грамматики. На этот текст пришло достаточно много откликов и автор счел себя обязанным написать продолжение.

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

              Читать дальше →
            • Хостинг картинок за полчаса

              • Tutorial
              Сегодня проекты, особенно на начальном этапе, строятся из готовых блоков. Например, умный хостинг или сервис быстрой отправки сообщений в браузер пользователю. Складывая такие блоки по-разному, можно получить совершенно неожиданный результат. И чем больше разных блоков вам доступно, тем разнообразнее могут получаться проекты. Иногда появляются блоки, которыми можно заменить сразу несколько других блоков. И сами эти блоки — такие же проекты, состоящие из других блоков.

              imageНасколько просто сейчас сделать такой сервис, как хостинг изображений? В принципе, его и раньше было несложно сделать. Но прогресс не стоит на месте, и за то же самое время теперь можно учесть больше нюансов. Я уже рассказывал о проекте Uploadcare. Это сервис, позволяющий облегчить работу с файлами: загрузку, хранение, обработку и раздачу конечному пользователю. Его и будем использовать в качестве основного блока.

              Пример будет написан на Питоне. Во-первых, потому что Питон я знаю лучше всего, во-вторых библиотека pyuploadcare обновляется в первую очередь. На самом деле, для Uploadcare есть библиотеки под разные языки, и все они в open source. Если в нужном вам модуле отсутствует какая-то функциональность, можно дождаться, когда она появится, или дописать самому.
              Читать дальше →
            • Юнит-тестирование для чайников

              • Tutorial
              Даже если вы никогда в жизни не думали, что занимаетесь тестированием, вы это делаете. Вы собираете свое приложение, нажимаете кнопку и проверяете, соответствует ли полученный результат вашим ожиданиям. Достаточно часто в приложении можно встретить формочки с кнопкой “Test it” или классы с названием TestController или MyServiceTestClient.



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

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

              We need to go deeper
            • JavaScript обёртка скроллбара в виде jQuery плагина

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

              Существует два основных подхода для стилизации скроллбара средствами HTML/CSS, каждый из которых имеет свои плюсы и минусы:

              • Эмуляция скролла средствами JavaScript
              • JavaScript обёртка над родным скроллом

              Читать дальше →
            • Новый фильтр увеличения резкости от Adobe будет платным


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

                Полтора года назад на конференции Adobe Max 2011 компания Adobe анонсировала фильтр для интеллектуального исправления смазанных видеокадров и фотоснимков. Качество работы фильтра было просто фантастическим, судя по демкам. К сожалению, допилить технологию не успели к выходу CS6, но сейчас ждать осталось недолго.
                Читать дальше →
              • Автопрефиксер — окончательное решение проблемы префиксов в CSS

                  Автопрефиксер — утилита нового поколения для добавления префиксов к экспериментальным свойствам из CSS 3. Она берёт с Can I Use последние данные о префиксах и популярности браузеров, читает ваш файл стилей, находит свойства и значения, которым действительно нужны префиксы и добавляет их.

                  Вы просто пишите обычный CSS:
                  a {
                      transition: transform 1s
                  }
                  


                  Автопрефиксер сам заменит нужные (и только нужные) свойства и значения (обратите внимание на -webkit-transform):
                  a {
                    -webkit-transition: -webkit-transform 1s;
                    -o-transition: -o-transform 1s;
                    transition: -ms-transform 1s;
                    transition: transform 1s
                  }
                  


                  Эта утилита работает во время выкладки сайта на сервера (и на машине программиста во время разработки), так что не заметна для клиентов и не требует какой-то поддержки от браузеров.

                  Проблема


                  К сожалению текущие инструменты плохо решают задачу:
                  • Писать вереницы свойств руками — очевидно плохое решение. Такой код невозможно читать, легко забыть поправить остальные свойства при редактировании.
                  • В Sass и LESS вам нужно самому следить за актуальностью префиксов и копировать примеси из проекта в проект. К тому же примеси могут решить проблему только у свойств, а не у значений (например, calc()).
                  • Compass или Bourbon уже лучше, там список примесей хранится централизовано и его легче держать актуальным (но практика показывает, что обычно в примеси добавляют все префиксы не следя за актуальностью). Проблема значений всё так же не решена.
                  • Самая главная проблема Sass и LESS, что вам всё равно нужно постоянно думать «из CSS 3 это свойство или нет?» — и в зависимости от этого использовать примесь или нет. Эту проблему немного решил Stylus — у него синтаксис примесей не отличается от обычных свойств, так что префиксы добавляются невидимо. Впрочем, проблема актуальности и значений всё равно остались.
                  • Есть ещё скрипты добавления префиксов прямо в браузере, например Prefix Free, но лучше всего обрабатывать стили на этапе разработки и выкладки, а не повторять обработку каждый раз в браузере клиентов.

                  Понятно, что языки препроцессоров не позволяют решить проблему полностью, нужен был фундаментально новый инструмент.
                  Читать дальше →
                • YaUI — буддийская кросплатформенная нативная JavaScript библиотека UI

                  Эта история началась, когда мой друг и соратник, Яп Чэ-шень, сказал мне следующее:

                  — Я больше не хочу никогда в своей жизни писать на Дельфи! Я поклялся: больше ни единой строчки! С сегодняшнего дня все свои проекты и библиотеки перевожу на JavaScript!

                  Яп — китаец, с классическим менталитетом, свойственным его народу. Я многие годы работаю с ним над гуманитарными проектами в области оцифровки древней литературы, в первую очередь, «Буддийской библии» — Типитаки. Познания Япа, как в области самых древних текстов, так и самого современного программирования, не перестают удивлять меня уже более десяти лет — с тех пор, как мы начали сотрудничать и общаться на самые разные темы. Для себя я давно понял, что, если Яп что-то говорит, а я не согласен или не понимаю, то это лишь значит, что надо продолжать обсуждение, и вся громада причин и следствий в размышлениях моего друга выйдет на поверхность, и как всегда окажется, что Яп прав. Кажущаяся эмоциональность китайцев, на самом деле, необычайно рациональна.
                  Читать дальше →
                • PHP HTML DOM парсер с jQuery подобными селекторами

                  Добрый день, уважаемые хабровчане. В данном посте речь пойдет о совместном проекте S. C. Chen и John Schlick под названием PHP Simple HTML DOM Parser (ссылки на sourceforge).

                  Идея проекта — создать инструмент позволяющий работать с html кодом используя jQuery подобные селекторы. Оригинальная идея принадлежит Jose Solorzano's и реализована для php четвертой версии. Данный же проект является более усовершенствованной версией базирующейся на php5+.

                  В обзоре будут представлены краткие выдержки из официального мануала, а также пример реализации парсера для twitter. Справедливости ради, следует указать, что похожий пост уже присутствует на habrahabr, но на мой взгляд, содержит слишком малое количество информации. Кого заинтересовала данная тема, добро пожаловать под кат.
                  Читать дальше →
                • Rusmode — решение проблемы с русской раскладкой

                    Проблема


                    Думаю многие из русскоговорящих пользователей Vim часто сталкивались с проблемой, что при переключении на Vim с почты/скайпа/браузера забывали переключить раскладку. Далее события развиваются следующим образом:
                    1. У вас нет никакого map руских символов — Vim пищит, вы материтесь и переключаете раскладку;
                    2. У вас есть map русских символов — скорее всего он кривой, команды не выполняются, Vim пищит, вы материтесь и меняете раскладку.

                    Очевидно, что map русских символов — не выход из положения.
                    А что же выход?
                  • Нельзя просто так взять и обратиться к фоновой странице

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

                    В расширении браузера Google Chrome (и Chromium) наиболее важна по функциям — фоновая страница. Она имеет специальный URL вида chrome-extension://ciegcibjokpkcklhgbpnmnikpkmkhbjk/, где длинное имя домена — случайное имя, создаваемое в недрах браузера, которым именуется также каталог расширения где-то в служебной папке ОС. Из контентного скрипта (аналогичного юзерскриптам, исполняемым на странице браузера) можно получить доступ к файлам и картинкам расширения. Но нельзя выполнить много функций, путь к которым лежит через фоновую страницу: устроить хранилище, относящееся к группе реальных доменных имён; хранить настройки расширения, общие для всего расширения. Нужно лишь добраться в Мордор к фоновой странице. Однако, нельзя просто так, по URL, это сделать.
                    Как же добраться к фоновой странице?
                    • +25
                    • 36k
                    • 8