• Производительный сетевой сервер на PHP

      Вы пробовали заказать в Макдональдсе жаренного на орудийном шомполе поросенка с домашним вином и, на десерт, девушку рядом с вами за столиком, для приятной беседы во время трапезы? Даже не думали об этом?? Вот-вот — статья как раз об этом, о стереотипах программиста и лени, двигающей прогресс. А если серьезно — в статье мы напишем очень полезный многим высокопроизводительный сетевой сервер на PHP за пару часов. Я совершенно серьезно :-)

      Читать дальше →
    • QtCreator: Qt кросс-компиляция из linux 64 в linux 32, win32, win64 и Mac OS X; upx, usb, dmg, etc



        Библиотека Qt позволяет делать действительно кроссплатформенные приложения. Единожды написанный код можно откомпилировать под многие операционные системы. Но проблема именно в слове «компилировать», т.к. подразумевается, что необходимо перезагрузиться под целевую систему, иметь в ней настроенную среду разработки, установленный и настроенный зоопарк библиотек. Спасает кросс-компиляция — компиляция, производящая исполняемый код для платформы, отличной от той, на которой исполняется.
        Читать дальше →
      • Google glass с точки зрения разработчика

          Google Glass
          Недавно я получил доступ к долгожданным очкам Google Glass и начал писать для них свое приложение.
          О Glass я знал только то, что это — устройство на Android, к которому нужно подключиться через Android Debug Bridge и запускать свои программы.

          Это оказалось не так!

          Обзоров самих очков и их начинки уже хватает, я хочу немного рассказать, что представляют собой очки с точки зрения программиста, и как должна работать правильная программа для них.
          Читать дальше →
        • PHP IPC — Межпроцессное взаимодействие в PHP


            Целью данной заметки является ознакомление PHP-разработчиков с возможностями межпроцессного взаимодействия в данном языке. Заметка не предполагает во всех деталях рассказать о каждой из возможностей, деталях реализации или показать рабочие примеры кода.

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

            Хотите узнать больше?
          • Электровелосипед своими руками

              Тема электротранспорта меня интересовала всегда.
              И вот наступил долгожданный момент, когда я от теории наконец перешел к практике. О своём опыте я поведаю ниже.

              Пара мыслей в качестве вступления.
              Почему именно сейчас так активно заговорили про электромобили, электросамолёты, электробайки? Наконец почти разрешилась основная проблема электротранспорта — начали появляться достаточно компактные и емкие батареи. Более того, они заряжаются за терпимое время. Собственно только этого и ждали, все остальное давно создано и «обкатано» — кузов, ходовая часть, электроника, электромоторы. Все это уже используется сотню лет. А электромоторы позволяют использовать непривычные решения — к примеру устанавливать себя в ступицы самих колес.

              К делу!

              Технические характеристики:

              — велосипед обычный, средней ушатанности, цена примерно 200$
              — электромотор на 48V и мощность 380W
              — батарея на 48V и 10A
              — скорость без помощи педалей по ровной дороге 35-40 км/ч
              — дальность поездки 22-25 км по легкой холмистой местности и в городе
              — время полного заряда 2 часа

              image

              Надо отметить, что переоборудование не сильно бросается в глаза и большинство людей на улице просто не замечают ничего необычного в велосипеде.
              Читать дальше →
            • Конвертируем HTML в PDF при помощи Dompdf

              • Перевод
              • Tutorial

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

              Dompdf — это отличная библиотека, способная генерировать PDF из HTML-разметки и CSS-стилей (в большинстве случаев это стили, совместимые с CSS 2.1 с поддержкой некоторых свойств CSS3). Мы можем определить, как наше содержимое должно выглядеть, используя эти знакомые технологии, и после легко конвертировать его в фиксированный документ. Также эта библиотека имеет и другие полезные и интересные функции.
              Читать дальше →
            • Грань между UI и UX

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

              «Основная проблема интерфейса в том что это интерфейс. Интерфейсы — это препятствия на пути. Я не хочу сосредоточивать свои силы на интерфейсе. Я хочу сосредоточиться на работе… Я не хочу осознавать себя использующим компьютер, я хочу осознавать себя делающим дело».

              Дональд Норман

              Проблема заключается в том, что если процесс, обслуживаемый интерфейсом, сложный и запутанный, то и интерфейс будет такой же. Процесс мутный — интерфейс мутный. У вас будут россыпи тогглов, чекбоксов и списков, а перед использованием интерфейса, нужно будет пройти 2-ух недельные курсы подготовки, и сдать экзамен.

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

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

              Читать дальше →
            • Нагрузочный тест c помощью Go

                Добрый день, Хабрахабр.
                Вы, вероятно, знакомы с JMeter. Если в кратце — очень удобный инструмент для проведения нагрузочного тестирования, имеет огромный функционал и много-много полезных фишек. Но статья не о нем.

                С чего началось

                В нашем проекте есть довольно нагруженный узел, JMeter помогал долгое время. Проффилирование и оптимизации дали свой профит, но все уперлось в маленькую проблему. JMeter не мог создать очень большой трафик, а если более точно, то после 10 секунд нужного нам режима, происходил OutOfMemory и тестирование прекращалось, в некоторых случаях проблемы не было, но скорость отправки запросов заметно уменьшалась, при этом загрузка CPU — 400%, решалось перезапуском программы. Пользоваться было крайне не удобно.
                Итак, мы имеем проблему, и ее нужно решить, первое, что пришло в голову — сделать свой мини-тест, отвечающий минимальным требованиям. Давно было интересно попробовать Go на вкус. Так родилось приложение go-meter. При написании возникало очень много вопросов, ответов на которые либо не было, либо они не объясняли проблему, поэтому я решил поделиться опытом и примером рабочего кода, если Вам интересно, прошу подкат.
                Читать дальше →
              • HoloEverywhere 1.6.8

                • Tutorial
                Logo
                Всем единообразия, или доброго времени суток!
                Листая тут хабр наткнулся на статейку Подключение шрифтов в своем проекте автора mcavalon, думал подчерпнуть чего-нить интересное… Но увидев очередной TextView.setTypeface how-to, зевнул и пошел читать другую статью (@rus1f1kat0r, привет кстати :)).

                Так вот, несколько минут назад (на момент написания этих строк это были еще минуты, а не часы, совершенно непреднамеренно меня выдернули девушки) я выпустил HoloEverywhere 1.6.8, основной фичей этого релиза является продвинутый FontLoader, ну и еще несколько плюшек, как всегда.
                Читать дальше →
                • +31
                • 11k
                • 3
              • Оптимальная параллелизация юнит-тестов или 17000 тестов за 4 минуты

                  Сегодня мы поговорим про разработанную нами утилиту, которая оптимизирует тестирование PHP-кода с помощью PHPUnit и TeamCity. При этом нужно понимать, что наш проект — это не только веб-сайт, но и мобильные приложения, wap-сайт, Facebook-приложение и много чего ещё, а разработка ведется не только на PHP, но и на C, C++, HTML5 и т.д.

                  Методы, которые мы описываем, прекрасно адаптируются под любой язык, любую систему тестирования и любое окружение. Поэтому наш опыт может оказаться полезным не только разработчикам веб-сайтов на PHP, но и представителям других областей разработки. Кроме того, в ближайшем будущем мы планируем перевести нашу систему в Open Source ― без обязательной привязки к TeamCity и PHPUnit ― наверняка она кому-нибудь пригодится.
                  Читать далее
                • Декораторы в PHP. Реализация расширения

                    По результатам опроса в первой статье, решено было сделать обзор реализации расширения. К этому моменту в угоду существующим IDE немного изменился синтаксис, который, пожалуй, был наиболее обсуждаемым моментом.
                    Это не еще-одна-статья-о-hello-world-расширении, т.к. желающим разобраться в основах легко найти массу материалов как на самом Хабре, так и в русскоязычном RTFG.
                    Статья о предпосылках, реализации и подводных камнях. В ней будет мало PHP, в основном C.
                    Запасаемся попкорном и расчехляем gdb и valgrind
                    • +33
                    • 11,2k
                    • 8
                  • Организация архитектуры взаимодействия Activity и Service

                      Приветствую!

                      Сегодня я решил поведать Вам мой способ организации activity-service interaction в Android приложениях. Мотивирован топик тем, что достаточно часто можно встретить приложения, в которых, скажем, поход на сервер организовывается внутри активити в AsyncTask. При этом часто встречается верная мысль, что это надо делать в сервисах, но нигде в оф. документации нет ни слова об организации правильной архитектуры двустороннего взаимодействия между ними.

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

                      Об этом методе я буду рассказывать далее.
                      Читать дальше →
                    • Development Environment при помощи Vagrant и Chef






                      В данной статье я постараюсь познакомить вас с замечательными утилитами Vagrant и Chef на примере автоматического конфигурирования development environment для PHP разработчика (на самом деле, PHP здесь только как пример, все нижеописанное может быть использовано для любого стека технологий).

                      Что будем делать?



                      Будем настраивать виртуальную машину (ВМ) с Ubuntu 12.04 для работы над проектом на PHP, а именно:

                      • Apache
                      • MySql
                      • PHP 5.4
                      • xDebug
                      • Memcached
                      • Composer
                      • Настроим сразу Virtual Host на определенную папку, доступную как с виртуальной машины, так и с реальной. Всё это параметризируем для удобства создания и использования.
                      • и другое..


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

                      Как это может помочь вам?



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


                      Всё это — реальность. Вопрос только «как?».

                      Читать дальше →
                    • Dater — определяет часовой пояс, локализует и форматирует время в PHP



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

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

                        И так, встречайте — Dater, и его основные возможности:

                        • Биндинг форматов
                        • Локализация текстов и форматов
                        • Расширение списка опций форматирования
                        • Автоопределение часового пояса
                        • Конвертация времени с учётом часового пояса
                        • Автоматическая конвертация времени в $_GET, $_POST, $_REQUEST с учётом часового пояса
                        • Автоматическая конвертация часового пояса в шаблоне отправляемых данных
                        Читать дальше →
                      • Фильтр Блума на PHP

                          Что это?


                          Википедия гласит:
                          Это вероятностная структура данных, придуманная Бёртоном Блумом в 1970 году, позволяющая компактно хранить множество элементов и проверять принадлежность заданного элемента к множеству. При этом существует возможность получить ложно-положительное срабатывание (элемента в множестве нет, но структура данных сообщает, что он есть), но не ложно-отрицательное.



                          А попроще


                          Это способ проверки существования элемента в огромной выборке.
                          как это работает?
                        • Файловый менеджер (Silex + Kendo UI) — Tutorial

                          Внезапная история из прошлого! Дело было так. Несмотря на то, что я программист «немного другого толку», обратились ко мне со стандартной просьбой – сделать сайт. Обычно я не берусь за подобные дела, но в этот раз решил немного подзаработать, тем более что это был не сайт-визитка или интернет-магазин, а нормальный сайт с базой некоторых объектов, объекты добавляются-редактируются-удаляются (аля CRUD) и с ними необходимо выполнять некоторые операции. О! подумалось мне, да это идеальная задача для (название фреймворка скрыто) и после всяческой бухгалтерии я незамедлительно приступил к делу.

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

                          Правда, появилась небольшая как бы просьба. Файловый менеджер, тот, с помощью которого на сайт в статью можно вставить картинку, ему не понравился. Вот хотелось ему чтобы всё как-то проще было. А тут и кнопок целых 20! Да и действий много. А нужно-то всего-навсего загрузить картинку на сервер и вставить на страничку. Ну ладно, подумал я, их же целый интернет, да и сам я много раз делал подобные решения. Но один страшен, как чёрт, другой по одному файлу загружает за раз, а вот третий ничё так вроде, но платен. В общем, история завершилась быстро, созданием простенького файлового менеджера с нуля. Но как-то сиделось мне, да и взгрустнулось. И выпил я (сока с мякотью, конечно). И открыл IDE и понеслось…
                          Читать дальше →
                        • Новое расширение PHP позволяет добавлять произвольные методы к скалярам

                            На Github появилось новое экспериментальное расширение PHP “scalar_objects”, с помощью которого можно добавлять любые методы к числам, строкам, массивам.
                            Выглядит это примерно так:

                            $result = $string->replace('shit', 'candy')->remove(',')->toUpper()->split(" ")->sort();
                            

                            Симпатично, не правда ли?
                            Инструкции по установке можно найти по ссылке выше, требуется PHP 5.4.
                            Имейте ввиду, что расширение находится в очень ранней альфа-версии, первый коммит датирован 24 января.
                            Радует, что автор расширения — контрибьютор PHP Никита Попов: есть вероятность, что подобное API когда-нибудь добавят в ядро интерпретатора.
                            Дальше я просто покажу как можно использовать эти новые возможности в разработке.
                            Читать дальше →
                          • Сравнение производительности: curl, php curl, php socket, python pycurl

                            Мне предстоит проект, модуль которого будет большую часть времени работать с другим сервером, отправляя ему GET запросы.
                            Я провел тесты чтобы определить каким способом получать страницу будет быстрее (в рамках предполагаемых технологий проекта).

                            Первые 3 теста: каждым из способов выполнялось по 50 запросов подряд к одному сайту.

                            image
                            Дальше еще много интересных графиков, таблиц и код
                          • Разрабатываем новый формат файла для бэкапа сайтов

                              Сейчас работаю над новым PHP-скриптом, который будет бэкапить не только базу данных, но и все файлы сайта.

                              Изначально планировалось использовать один из распространённых форматов архивов. В данном случае, первое, что приходит в голову — ZIP и TAR. Для них есть множество готовых классов, а расширение ZIP даже входит в стандартную поставку PHP. Но изучив спецификации форматов, а также опробовал готовые решения, склонился к изобретению своего велосипеда.

                              Просьба «велосипедохейтеров» воздержаться от комментариев в стиле «хватит нам велосипедов». В конце концов, без создания «велосипедов» не было бы ни Google, ни Google Chrome, ни Facebook, ни WinRAR и 7-Zip.
                              Читать дальше →
                            • Adobe бесплатно раздает Creative Suite 2 (или же не раздает?)

                                Читайте UPD7, Adobe разместила официальный ответ в своем блоге.

                                Акция невиданной щедрости от Adobe. Они решили раздать хоть и устаревший, но все же полный Creative Suite второй версии. Доступны версии как под Mac (PowerPC) так и под Windows.

                                В комплекте:
                                • Creative Suite 2
                                • Acrobat 3D 1.0 for Windows
                                • Acrobat Standard 7.0
                                • Acrobat Pro 8.0
                                • Audition 3.0
                                • GoLive CS2
                                • Illustrator CS2
                                • InCopy CS2
                                • InDesign CS2
                                • Photoshop CS2
                                • Photoshop Elements 4.0/5.0
                                • Adobe Premiere Pro 2.0


                                Спешите, количество скорее всего ограничено. Получить можно тут. Для получения необходима регистрация.


                                Скачать можно тут

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