Pull to refresh
30
0
Илья Плотников @ilyaplot

Программист

Send message

Traits в php 5.4. Разбираем детали реализации

Reading time8 min
Views53K
Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

Простой пример типажа, чтобы не заглядывать в Википедею:
//определение типажа
trait Pprint 
{
    public function whoAmI()
    {
        return get_class($this) . ': ' . (string) $this;
    }
}

class Human 
{
    use Pprint; //подключаем типаж, ключевое слово use

    protected $_name = 'unknown';
    
    public function __construct($name)
    {
        $this->_name = $name;
    }

    public function __toString()
    {
        return (string) $this->_name;
    }   
}

$a = new Human('Nikita');
echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita

Как видно, к классу Human было добавлено поведение из типажа Pprint.

Но во всём есть свои детали.
О них далее

Развертывание биллинга для небольшой сети с нуля

Reading time11 min
Views63K
Предыстория:
Некие хорошие люди решили начинать провайдерский бизнес. Растянули и разварили оптику в небольшом районе, поставили ящички, засунули туда минимальные свичи, с помощью которых можно организовать VLAN-Per-User, закупили небольшой, для начала, канал у ближайшего магистрала. Встал у них вопрос о том, чем же считать пользователям трафик/денежки и нарезать скоростя.
Общая схема сети должна выглядеть следующим образом:



Кому интересно, далее под катом очень много букв и картинок.
Читать дальше →

Интерполяция: рисуем гладкие графики средствами PHP и GD

Reading time6 min
Views59K
Распространенной задачей для программиста является рисование графиков. Входными данными является массив точек (xi;yi). Как правило, мы знаем только некоторые значения — в определенных точках графика. Чтобы построить непрерывный график кривой необходимо прибегнуть к интерполяции или аппроксимации.



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

В этом топике я хочу продемонстрировать свою библиотеку для PHP, которая производит интерполяцию с помощью многочлена Лагранжа, C-сплайна и сплайна Акимы, а также аппроксимацию кривой Безье. Дополнительно в ней реализована отрисовка отрезка со сглаживанием (антиалиасингом).

Кратко рассмотрим методы интерполяция и аппроксимации.
Читать дальше →

Номер телефона

Reading time1 min
Views289K
Регулярное выражение для валидации номера телефона:

^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$

Ориентировано на российские мобильные + городские с кодом из 3 цифр (например, Москва).

Читать дальше →

Pinba — мониторим php в реальном времени

Reading time4 min
Views57K
Как сказано на официальном сайте
Pinba is a realtime monitoring/statistics server for PHP using MySQL as a read-only interface.

И это действительно так. Она позволит вам в реальном времени получать статистику по работающему приложению, при этом не замедляя само приложение.
Что делать со статистикой — это уже ваше дело, например, мы выводим ее в заббикс и используем как для мониторинга стабильности (нет ошибок, мало число длинных запросов), так и для аналитики.
Удивительно, что про это действительно замечательное изобретение не было еще ни одной статьи на хабре.

Прочитать еще

Пьеса «Разработка многопользовательской сетевой игры.» Часть 3: Клиент-серверное взаимодействие

Reading time7 min
Views16K


Часть 1: Архитектура
Часть 2: Протокол
Часть 4: Переходим в 3D

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

Итак, продолжаем разговор.

В третьей части нашей постановки мы реализуем протокол, напишем сервер и клиент которые будут взаимодействрвать по сети. И (ОМГ!) танки будут ездить!
Под катом то, что вы давно хотели, но боялись спросить…

Добро пожаловать в зрительный зал.

Бесплатные книги

Reading time3 min
Views60K
Несколько книг по разным темам, которые находятся в открытом доступе.

Основы программирования
Читать дальше →

Топик якобы из песочницы

Reading time1 min
Views8.1K
Итак, кроме обычных топиков есть еще и топики из песочницы, при этом их можно публиковать с какой угодно кармой, так что можно опубликовать топик с кармой меньше нуля, для этого (далее на примере хрома): лезем в Developer Tools -> Element -> Search topic-type, меняем значение поля на sandbox и вуаля, топик якобы из песочницы, как подтверждение теории я публикую этот топик с кармой -4.

P.S. т.к. мне терять нечего то если меня забанят то пусть так и будет.

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

Удаленный доступ из Windows на FreeBSD для начинающих

Reading time5 min
Views38K
Однажды надо было наладить удаленный ssh-доступ на рабочей машине под Win ХР к удаленному компьютеру под управлением FreeBSD.
Отдельных мануалов работе во Фрюшке, генерации ключей в OpenSSL и т.д очень много, но подходящего для данной ситуации не нашлось, поэтому я решила свести отдельные инструкции воедино.
Далее — описание всего процесса от подготовки платцдарма до проверки работоспособности.
Читать дальше →

Неблокируемая очередь сообщений для двух потоков

Reading time3 min
Views4.4K
Несколько лет назад, при работе над своим небольшим игровым проектом, у меня возникла необходимость реализовать передачу сообщений от одного потока другому. В ходе поисков вариантов решения появилась идея реализовать неблокируемую очередь.

Подробности под катом.
Читать дальше →

Мгновенный поиск в 75 гигабайтах

Reading time8 min
Views35K
Речь пойдет о том, как был реализован быстрый поиск по большим объемам данных на этой страничке. Там можно искать пароль по хешу, для игрового сервера PvPGN, и генерировать эти же хеши.
Поиск написан на чистом PHP, без использования модулей и сторонней БД. В принципе, таким образом можно наращивать объемы до многих терабайт, было бы место — скорость от этого не сильно пострадает.

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


Читать дальше →

Немного о том как организовывать API веб-службы

Reading time3 min
Views20K
Возникла задача организовать веб-службу, к которой будут обращать обычные клиенты из браузера и другие веб-службы.

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

На билеты можно смотреть цены, предварительно бронировать, выкупать бронь, возвращать купленные и удалять бронь.

Вопрос: как лучше всего организовать API?
А вот так

Google Maps Javascript API V3 и управление маркерами

Reading time3 min
Views29K
Дело было глубокой осенью. Мне поручили разработку раздела, основной задачей которого является указание местоположения объектов фильтрации и поиска на карте. Что стало заметно сразу же — даже при отображении 10 объектов на карте, можно уменьшить зум до такого, при котором они просто сливаются. Если их будет 100 — появятся жутковатые наложения и тени. Не комильфо!

Поиск решения


Решение очевидное, маркеры нужно группировать. В процессе поиска наткнулся на хабростатью, в которой рассмотрены различные способы группировки большого количества маркеров на карте. Нас вполне устраивали «костыли 1-2», то есть группировка маркеров на клиентской стороне, однако… если бы они подошли, не писал бы я сейчас статью ;)

Читать дальше →

Как делать нужные людям проекты, или почему не взлетают стартапы

Reading time9 min
Views8.7K
Сегодня на практических примерах мы разберем два мифа в управлении проектами, в том числе в разработке стартапов:
1. То, что лучший и единственный способ сделать успешный стартап — сделать такой, который решает задачи, хорошо знакомые создателю в повседневной жизни.
2. То, что существует автономизация бизнеса, когда проект можно довести до некоторой точки и больше ничего не делать, а потом он просто будет на автомате приносить деньги.



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

Читать дальше →

In-memory-data-grid. Масштабируемые хранилища данных

Reading time5 min
Views24K
В последнее время интерес к облачным архитектурам растет с каждым днем, так как это один из наиболее эффективных способов масштабировать приложение, не прикладывая больших усилий, а самым узким местом любого высоконагруженного проекта является хранилище данных, в частности реляционная БД. Для борьбы с недостатками традиционных БД в основном используется 2 подхода:

1) Кэширование результатов выполнения запросов
  • плюсы: высокая скорость доступа к данным
  • минусы: требует компромисса между актуальностью данных и скоростью доступа, т.к. данные в кэше могут устареть, а удалять старые данные из кэша с последующим кэшированием новых — это дополнительные задержки и нагрузка на систему

2) NoSQL решения
  • плюсы: хорошая горизонтальная масштабируемость, доменная модель данных совпадает с моделью хранения данных
  • минусы: низкая скорость получения результатов в случае использования диска, практически невозможно обеспечить работу внутрикорпоративного софта, который ориентирован на работу с конкретной реляционной БД.

Сегодня я хочу познакомить вас с таким типом хранилища данных, который объединяет достоинства обоих подходов и при этом имеет ряд преимуществ перед упомянутыми выше решениями: In-memory-data-grid (IMDG).
Читать дальше →

Многопроцессовые демоны на PHP

Reading time3 min
Views44K
Зачем может понадобиться писать демоны на PHP?
  • Выполнение трудоемких фоновых задач;
  • выполнение задач, которые длятся больше, чем время ожидания при HTTP-запросе (30 секунд);
  • выполнение задач на более высоком уровне доступа, чем серверный процесс (читай — под рутом).

Читать дальше →

Как избежать коллизий при записи в Memcache из PHP

Reading time2 min
Views7.4K
Обычно программисты используют технологии по прямому назначению, но я решил провести эксперимент и попробовать использовать сервер memcached как масштабируемое временное key=value хранилище.
Memcached предназначен для простого кэширования статических данных, потому в нем не предусмотрена система избежания коллизий.

Запись данных


Стандартная ситуация

Предположим, что наше PHP приложение работает на одном сервере, а memcached работает на удаленной машине. Мы без проблем сможем читать и писать в одну и ту же ячейку, потому как приложение не WEB, так что процесс один. Из-за линейности процесса, ему не удастся одновременно записывать разные данные в одну и ту же ячейку.
Два и более процесса

Сегодня нам понадобилось разделить приложение на два сервера и начались проблемы. Возникли коллизии при записи в memcache. Выяснилось, что в 80% случаев приложения пытаются одновременно записать свои данные в одну ячейку. Идеальным решением было бы использование shared memory, но она не масштабируется в отличие о Memcached. В связи с большим объемом кода и предполагаемым временем на переписывание приложений, было принято решение добавить костыль.
Читать дальше →

Information

Rating
Does not participate
Location
Сергиев Посад, Москва и Московская обл., Россия
Date of birth
Registered
Activity