Pull to refresh
1
0
Send message

Многопоточные вычисления в PHP: pthreads

Reading time5 min
Views99K

Недавно я попробовал pthreads и был приятно удивлен — это расширение, которое добавляет в PHP возможность работать с несколькими самыми настоящими потоками. Никакой эмуляции, никакой магии, никаких фейков — все по-настоящему.



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


Стоит отметить, что автор расширения, Joe Watkins, в своих статьях предупреждает, что многопоточность — это всегда не просто и надо быть к этому готовым.


Кто не испугался, идем далее.

Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments62

Badoo перешли на PHP7 и сэкономили $1M

Reading time16 min
Views104K
Badoo перешли на PHP7 и сэкономили $1M

Мы сделали это! Несколько сотен наших application-серверов переведены на PHP7 и прекрасно себя чувствуют. Насколько нам известно, это второй переход на PHP7 проекта такого масштаба (после Etsy). В процессе мы нашли несколько очень неприятных багов в системе кеширования байт-кода PHP7, но они исправлены. А теперь — ура! — благая весть для всего PHP-сообщества: PHP7 действительно готов к продакшену, стабилен, потребляет значительно меньше памяти и дает очень хороший прирост производительности. Ниже мы подробно расскажем, как мы перешли на PHP7, с какими трудностями столкнулись, как с ними боролись и какие результаты получили.
Читать дальше →
Total votes 169: ↑159 and ↓10+149
Comments304

Основы репликации в MySQL

Reading time10 min
Views328K
С репликацией серверов MySQL я познакомился относительно недавно, и по мере проведения разных опытов с настройкой, записывал, что у меня получалось. Когда материала набралось достаточно много, появилась идея написать эту статью. Я постарался собрать советы и решения по некоторым самым основным вопросам, с которыми я столкнулся. По ходу дела я буду давать ссылки на документацию и другие источники. Не могу претендовать на полноту описания, но надеюсь, что статья будет полезной.
Читать дальше →
Total votes 72: ↑70 and ↓2+68
Comments44

Собеседование на должность JavaScript разработчика

Reading time4 min
Views287K


Недавно прочитал неплохой пост на тему поиска работы QA и подумал, что похожий пост был бы полезен для JavaScript разработчиков. В конечном счёте, веб движется вперед семимильными шагами, и соискателей на позицию JavaScript программиста хоть отбавляй (разумеется, хороших всегда меньше).
Читать дальше →
Total votes 126: ↑115 and ↓11+104
Comments313

PHP и различные виды NoSQL

Reading time11 min
Views69K


В последнее время набирают популярность различные NoSQL базы данных. Эта статья начиналась как изучение особенностей графитовой графовой базы данных Neo4j. Но, в процессе подбора информации, мне захотелось систематизировать информацию о NoSQL решениях и о графовых базах данных, в частности.
В ходе этого небольшого исследования, были выбраны для подробного рассмотрения СУБД, успешно применяющиеся в области Web. И, поскольку в тегах присутствует «PHP», я выбирал СУБД, которые уже можно использовать с этим языком.

Читать дальше →
Total votes 120: ↑108 and ↓12+96
Comments34

Шпаргалка по шаблонам проектирования

Reading time2 min
Views1.4M

Перевод pdf файла с сайта http://www.mcdonaldland.info/ с описанием 23-х шаблонов проектирования GOF. Каждый пункт содержит [очень] короткое описание паттерна и UML-диаграмму. Сама шпаргалка доступна в pdf, в виде двух png файлов (как в оригинале), и в виде 23-х отдельных частей изображений. Для самых нетерпеливых — все файлы в конце статьи.

Под катом — много картинок.

Читать дальше →
Total votes 192: ↑179 and ↓13+166
Comments66

Зашифрованное взаимодействие между клиентом и сервером на Laravel 4

Reading time17 min
Views21K

Введение


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

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

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

В этой статье я расскажу о том, как организовать зашифрованное взаимодействие между клиентом и сервером. В качестве серверной площадки будет приложение на движке Laravel 4.1 (последняя версия на момент публикации). Предполагается, что в качестве клиента будет выступать приложение, написанное на C#, но в этой статье я не буду описывать написание клиента. Вместо этого могу порекомендовать статью с CodeProject'а, в которой приводится пример использования криптографии на C#: Encrypting Communication between C# and PHP. Собственно эта статья и стала отправной точкой для моих изысканий.
Читать дальше →
Total votes 22: ↑17 and ↓5+12
Comments9

Межсайтовая авторизация 2

Reading time2 min
Views27K
По итогам поста, сделанного в июле 2009 и продолжительным испытаниям, мы пришли к простой и оптимальной для нас схеме межсайтовой авторизации.
Спешу поделиться с общественностью
Total votes 51: ↑41 and ↓10+31
Comments61

Назад, к технологиям верхнего палеолита, от любимых всеми REST, STATEless, CRUD, CGI, FastСGI и MVC

Reading time7 min
Views68K
«Только со смертью догмы начинается наука.»
// Галилео Галилей


«Я начал завидовать рабам. Они всё знают заранее. У них твёрдые убеждения.»
// х/ф Марка Захарова «Убить дракона» по мотивам пьесы Евгения Шварца


Уже пару лет и дня не проходит, чтобы я не услышал (или не прочитал) от людей, начинающих новые проекты, фразу типа «Возьмем серверный движок для REST API и MVC, и погнали». Сначала я думал, что у этих слов есть один источник, может книжку какую завезли во все магазины или где-то в топе поисковиков лежит статья, зомбирующая разработчиков. Если же выяснять у них, что они понимают под REST и MVC, то можно повредиться умом. Ну с MVC уже все ясно, об этом я уже давно писал, ничего не изменилось, только усугубилось, стоит набрать в Google Images «mvc» и мы увидим страшное, стрелочки в любые стороны. Ну а про REST отвечают следующее: ну как же, нам нужно из браузерного GUI и мобильного приложения вызывать серверные методы, например: setUserCity(userId, cityId) или calculateMatrix(data) или startVideoConverter(options, source, destination) а потом мы столкнемся с большой нагрузкой и архитектура REST все решит. Дальше я задаю вопросы, от которых глаза округляются уже у тех, кто недавно еще горел праведной верой, рвался в бой и точно знал, что к чему в этом мире. Теперь можно перейти к рассмотрению терминологической катастрофы, в эпицентре которой мы с вами пребываем.
Читать дальше →
Total votes 121: ↑98 and ↓23+75
Comments160

Шпаргалка по SOLID-принципам с примерами на PHP

Reading time10 min
Views440K
Тема SOLID-принципов и в целом чистоты кода не раз поднималась на Хабре и, возможно, уже порядком изъезженная. Но тем не менее, не так давно мне приходилось проходить собеседования в одну интересную IT-компанию, где меня попросили рассказать о принципах SOLID с примерами и ситуациями, когда я не соблюл эти принципы и к чему это привело. И в тот момент я понял, что на каком-то подсознательном уровне я понимаю эти принципы и даже могут назвать их все, но привести лаконичные и понятные примеры для меня стало проблемой. Поэтому я и решил для себя самого и для сообщества обобщить информацию по SOLID-принципам для ещё лучшего её понимания. Статья должна быть полезной, для людей только знакомящихся с SOLID-принципами, также, как и для людей «съевших собаку» на SOLID-принципах.

Читать дальше →
Total votes 110: ↑100 and ↓10+90
Comments67

Майнинг и как он работает: матчасть

Reading time6 min
Views559K

Привет, %username%!
Я расскажу и покажу как работает основа генерации денег в криптовалютах — майнинг. Как создается первый блок, новые блоки и как появляются деньги из ниоткуда.
Чтобы было проще понять, мы напишем свой импровизированный майнер для импровизированной криптовалюты HabraCoin.
Читать дальше →
Total votes 274: ↑252 and ↓22+230
Comments482

8 HTML элементов, которые вы не используете (а следовало бы)

Reading time4 min
Views96K
image
Веб сегодня все больше и больше семантический. Но что означает «семантический»? Почему это важно?

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

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

Ок, итак семантическая разметка — это хорошо, но как ее использовать. Лучше всего начать с замены обычных тегов на более выразительные. Давайте посмотрим восемь элементов, которые позволят вам войти в эту игру.
Читать дальше →
Total votes 214: ↑175 and ↓39+136
Comments101

Пузырьковая сортировка и все-все-все

Reading time5 min
Views614K

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

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

image: пузырьки

Сделать первый шаг в изучении сортировок
Total votes 116: ↑104 and ↓12+92
Comments35

Правильные способы исключения файлов в Git

Reading time1 min
Views207K
Иногда встречаю в файле .gitignore то, чего там быть никак не должно. Например, папка .idea, в которой лежат конфиги известных IDE от JetBrains. Это часть вашего рабочего окружения и она никаким боком не относится к проекту и репозиторию. Если над проектом работает несколько человек и каждый из них добавит конфиги своего окружения в .gitignore, то он превратится в нечитаемую помойку.

В этом топике я расскажу о правильных способах исключения файлов и о том когда какой способ использовать.
Читать дальше →
Total votes 98: ↑74 and ↓24+50
Comments68

Функции в PHP 5.6 — что нового?

Reading time10 min
Views60K

Слева направо: Rasmus, Build 5.4, Version 5.5, Relise 5.6

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

  • Новый синтаксис для функций с переменным числом аргументов и радостный отход в историю мороки с func_get_args():
    function fn($reqParam, $optParam = null, ...$params) { }
    

  • Опускаем указание значений для необязательных аргументов:
    function create_query($where, $order_by, $join_type = '', $execute = false, $report_errors = false) { }
    create_query('deleted=0', 'name', default, default, /*report_errors*/ true);
    

  • Импорт функций из пространства имён:
    use function foo\bar\baz;
    baz();
    

  • Исключения вместо набивших оскомину фатальных ошибок:
    <?php
    function call_method($obj) {
        $obj->method();
    }
    
    call_method(null); // oops!
    
    try {
        call_method(null); // oops!
    } catch (EngineException $e) {
        echo "Cool Exception: {$e->getMessage()}\n";
    }
    

  • Добавление модификатора deprecated:
    deprecated function myOldFunction() { }
    

  • Вызов методов и доступ к свойствам создаваемого объекта:
    new foo()->xyz;
    new baz()->bar(); 
    

Большинство из приведенных предложений пока находятся на стадии обсуждения. Но среди них уже есть утверждённые и даже реализованные.

Также искушённого читателя ждёт эксклюзив: изучая чужие умные мысли, я и сам решился написать собственный RFC. Сейчас вы не увидите его в списке предложений, так как на данный момент он находится на самом начальном этапе — на рассылке internals@lists.php.net.

А начну обзор с RFC, который уже реализован и гарантированно попадает в релиз 5.6.

Синтаксис для функций с переменным числом аргументов

Реализовано в PHP 5.6, Принято 36 голосами против 1

И сразу в бой: рассмотрим код, который показывает как переменный аргумент ...$params будет заполняться в зависимости от количества переданных аргументов:
function fn($reqParam, $optParam = null, ...$params) {
    var_dump($reqParam, $optParam, $params);
}
 
fn(1);             // 1, null, []
fn(1, 2);          // 1, 2, []
fn(1, 2, 3);       // 1, 2, [3]
fn(1, 2, 3, 4);    // 1, 2, [3, 4]
fn(1, 2, 3, 4, 5); // 1, 2, [3, 4, 5]

$params будет пустым массивом, если число переданных аргументов меньше, чем число объявленных. Все последующие аргументы будут добавлены в массив $params (с сохранением порядка). Индексы в массиве $params заполняются от 0 и по возрастанию.
Читать дальше →
Total votes 98: ↑83 and ↓15+68
Comments203

Ускоряем Nginx за 5 минут

Reading time5 min
Views281K
image
Попытайтесь повторить это сами

Как правило, настроенный должным образом сервер Nginx на Linux, может обрабатывать 500,000 — 600,000 запросов в секунду. Но этот показатель можно весьма ощутимо увеличить. Хотел бы обратить внимание на тот факт, что настройки описанные ниже, применялись в тестовой среде и, возможно, для ваших боевых серверов они не подойдут.

Минутка банальности.

yum -y install nginx

На всякий пожарный, создадим бэкап исходного конфига.

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
vim /etc/nginx/nginx.conf

А теперь можно и похимичить!
Бдыжь-бдыжь
Total votes 203: ↑138 and ↓65+73
Comments127

Десятка лучших консольных команд

Reading time2 min
Views198K
imageВ данном посте я расскажу о наиболее интересных командах, которые могут быть очень полезны при работе в консоли. Однозначных критериев определения какая команда лучше другой — нет, каждый сам для своих условий выбирает лучшее. Я решил построить список команд на основе наиболее рейтинговых приемов работы с консолью от commandlinefu.com, кладовой консольных команд. Результат выполнения одной из таких команд под Linux приведен на картинке. Если заинтересовало, прошу под кат.
Узнать больше
Total votes 382: ↑346 and ↓36+310
Comments215

Drupal 8 — революционные изменения

Reading time5 min
Views58K
image В быстро меняющемся мире IT, да и не только, выигрывают те, кто постоянно развиваются: остановился — значит проиграл. Это справедливо в частности и для CMS. Стараясь идти в ногу со временем, не за горами выход новой версии CMS Drupal 8.

На данный момент, доступна 3 альфа версия Drupal 8. Было создано несколько инициативных групп, работающих над основными направлениями: Управление конфигурациями, Дизайн, Мобильные устройства, Многоязычность и Вебсервисы. Ядро сейчас имеет 1600+ контрибутеров (это примерно в два раза больше чем было у Drupal 7). В новой версии сделано более 500 нововведений и изменений. Ниже я упомяну, по моему мнению, наиболее значимые из них. Изменения описываются по отношению к Drupal 7, т.е. предполагается что читатель знаком с Drupal 7.
Читать дальше →
Total votes 40: ↑29 and ↓11+18
Comments70

I2P: Прозрачный доступ из любого браузера

Reading time2 min
Views370K


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

Но куда уходить людям?

Что бы был доступ к информации, свобода слова и соблюдались хотя бы те правила, которые есть в конституции?

Mesh сети не подходят, Tor — тоже не может обеспечить требуемого, остается I2P.

Сегодня мы поговорим как настроить прозрачный доступ в I2P, с помощью которого каждая домохозяйка сможет открыть любой сайт в этой сети.
Читать дальше →
Total votes 129: ↑115 and ↓14+101
Comments174

Интеграция веб-сервисов в популярные cms

Reading time10 min
Views22K
В этой статье мы дадим рекомендации как за короткий срок освоить cms и написать для неё расширение, модуль или плагин, а также расскажем о результатах и нашем опыте интеграции сервиса Cackle в эти системы. Cтатья может стать руководством для тех, кто собирается делать интеграции сервисов с cms системами или просто создать модуль.

Перед тем как решить с какой cms делать интеграцию стоит собрать статистику по запросам на интеграцию своих пользователей, а также посмотреть на общую статистику по cms на сайтах зоны .RU (http://statonline.ru/metrics/webapp_cms?tld=ru) из которой видно, какие cms имеют самую большую популярность.
image

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

Интеграция позволяет удобным образом встраивать сервисы в cms и максимизировать выгоду от его использования. Идеальным решением является установка плагина в несколько кликов. Приемлемым решением может быть мод — инструкция по допиливанию cms, при котором изменяются скрипты cms. Для нашего проекта любая интеграция комментариев Cackle для cms обычно включает следующие пункты:

— Cинхронизация комментариев с сервиса Cackle в локальную БД каждые 5 минут
— Отображение html для SEO
— Экспорт существующих на сайте комментариев в Cackle
— Возможность ресинхронизации(повторное копирование комментариев в локальную БД)
— SSO (авторизация своих пользователей)
— Счётчик комментариев на главной странице
— Виджет последних комментариев

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

Мы сделали интеграции нашего сервиса комментариев Cackle в следующие cms системы:
Wordpress, Drupal, DLE, InstantCms, Joomla, Bitrix.

Теперь хронологическом порядке опишем наш опыт по интеграции для каждой cms.
Читать дальше →
Total votes 35: ↑30 and ↓5+25
Comments11
1

Information

Rating
Does not participate
Registered
Activity