Pull to refresh
-19
0
Fortop @Fortop

Пользователь

Send message

Массивы в РНР 7: хэш-таблицы

Reading time22 min
Views35K
Хэш-таблицы используются везде, в каждой серьёзной С-программе. По сути, они позволяют программисту хранить значения в «массиве», индексируя его с помощью строк, в то время как в языке С допускаются только целочисленные ключи массива. В хэш-таблице строчные ключи сначала хэшируются, а затем уменьшаются до размеров таблицы. Здесь могут возникать коллизии, поэтому нужен алгоритм их разрешения. Существует несколько подобных алгоритмов, и в РНР используется стратегия связных списков (linked list).

В Сети есть немало замечательных статей, подробно освещающих устройство хэш-таблиц и их реализации. Начать можно с http://preshing.com/. Но имейте в виду, вариантов структуры хэш-таблиц — несметное множество, и ни один из них не совершенен, в каждом есть компромиссы, несмотря на оптимизацию циклов процессора, использования памяти или хорошее масштабирование потокового окружения (threaded environment). Одни варианты лучше при добавлении данных, другие — при поиске и т. д. Выбирайте реализацию в зависимости от того, что для вас важнее.

Хэш-таблицы в РНР 5 подробно рассмотрены в материале phpinternalsbook, который я написал вместе с Nikic, автором хорошей статьи про хэш-таблицы в РНР 7. Возможно, её вы тоже сочтёте интересной. Правда, она писалась до релиза, поэтому некоторые вещи в ней слегка отличаются.

Здесь же мы подробно рассмотрим, как устроены хэш-таблицы в РНР 7, как с ними можно работать с точки зрения языка С и как ими управлять средствами РНР (используя структуры, называемые массивами). Исходный код в основном доступен в zend_hash.c. Не забывайте, что хэш-таблицы мы используем везде (обычно в роли словарей), следовательно, нужно проектировать их так, чтобы они быстро обрабатывались процессором и потребляли мало памяти. Эти структуры решающе влияют на общую производительность РНР, поскольку местные массивы не единственное место, где используются хэш-таблицы.
Читать дальше →
Total votes 58: ↑57 and ↓1+56
Comments14

А если без JavaScript?

Reading time3 min
Views71K
В нашем мире без JavaScript никуда! Куча фреймворков, библиотек и прочей радости! jQuery плотно вошел в нашу жизнь. React с Angular пробивают дорогу к светлому будущему. Да и не за горами поддержка браузерами ES6 без Babel.

Но если тема заходит об обычном сайте со стандартным функционалом, не редки случаи, когда JavaScript начинают “злоупотрелять”. И все, в принципе, нормально… Но порой задаешься вопросом: «А если без JavaScript?».
Total votes 90: ↑76 and ↓14+62
Comments131

Стратегическое эссе Пола Грэма: Рефрагментация (часть 1)

Reading time14 min
Views13K
image

У старости есть одно преимущество, и заключается оно в том, что все изменения, происходящие в вашей жизни, становятся заметны. Одним из таких значительных изменений, что мне довелось наблюдать, является фрагментация. Направления политической деятельности Соединенных Штатов гораздо противоречивее, чем раньше. На самом деле, общего между ними меньше, чем когда-либо. Творческие люди толпами устремляются в определенные города в поисках счастья, и покидают родные места. А возрастающее экономическое неравенство влечет за собой увеличения разрыва между богатыми и бедными. И вот вам моя гипотеза: все эти тенденции являются по сути проявлением одного и того же. Более того, проблема не в том, что существует сила, разделяющая нас, а в том, что существуют некие силы, притягивающие нас друг к другу, и такое притяжение для нас губительно.

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

Этими двумя силами были война (в основном вторая мировая) и рост крупных корпораций.

(Просьба, рекомендации по переводу слать в личку)
Total votes 29: ↑27 and ↓2+25
Comments28

Автоматизация бизнес-процессов или что такое «Сложность». Часть 1

Reading time6 min
Views13K

image


Про автоматизацию бизнес-процессов (БП) написано много. В литературе, да и в интернете, хорошо описаны преимущества автоматизации повседневных рутинных процессов посредством Business Process Management (BPM), а также Workflow Management Systems (WMS).


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


Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments15

Подводные камни Bash

Reading time32 min
Views94K


В этой статье мы поговорим об ошибках, совершаемых программистами на Bash. Во всех приведённых примерах есть какие-то изъяны. Вам удастся избежать многих из нижеописанных ошибок, если вы всегда будете использовать кавычки и никогда не будете использовать разбиение на слова (wordsplitting)! Разбиение на слова — это ущербная легаси-практика, унаследованная из оболочки Bourne. Она применяется по умолчанию, если вы не заключаете подстановки (expansions) в кавычки. В общем, подавляющее большинство подводных камней так или иначе связаны с подстановкой без кавычек, что приводит к разбиению на слова и глоббингу (globbing) получившегося результата.


Читать дальше →
Total votes 143: ↑141 and ↓2+139
Comments63

Анализ социального графа

Reading time8 min
Views27K
социальный граф UkrTweet
Количество американских патентных заявок связанных с социальными сетями последние 5 лет росло на 250% каждый год (ссылка). Так, например, одна корпорация подала патентную заявку на метод ценообразования который учитывает положение покупателя в социальном графе (обсуждение на Slashdot). Другая корпорация недавно воплотила максимально упрощенный вариант этой схемы, продавая свои новые телефоны влиятельным узлам социального графа за $0, а остальным за $530.

Анализ социальных сетей (Social Network Analysis) существовал задолго до Интернета, но в последнее время набирает обороты.

Мне было интересно посмотреть, как эффективно алгоритм, выделяющий кластеры в графах, сработает для некоторых групп в Twitter, которые представляют для меня интерес.

23 января в Запорожье пройдет #UKRTWEET — первый всеукраинский баркэмп посвященный Twitter. Граф выше показывает, кто из его участников, с кем разговаривает и кого упоминает.

Заметка ниже посвящена анализу этого графа. Весь код используемых здесь скриптов лежит на github. Изложение, в какой-то мере, вдохновлено недавно упомянутой на Хабре книгой Тоби Сегаран «Программируем коллективный разум», код примеров которой доступен на сайте автора.

Также о data mining в Twitter я говорил 16 января на первой в этом году донецкой встрече "Кофе и код". Поэтому здесь параллельно проведу анализ группы людей из Донецка, которые пишут в Twitter. Кстати, в этом году донецкие встречи будут регулярными — каждую третью субботу месяца (следующая 20 февраля). Следите за группой.

Добывать информацию
Total votes 54: ↑42 and ↓12+30
Comments18

Зарплата напоказ

Reading time6 min
Views3.2K

Я когда-то работал в компании, где нельзя было говорить о своей зарплате под страхом… я даже не знаю чего. Как дети испытывают ужас от того, что “взрослые заругают”, так и мы боялись ей делиться. О том, какая кара нас ожидает, приходилось только догадываться.




Ад в представлении Босха.

И все равно все все знали. Почему? Потому что чтобы закон работал, за ним должна стоять идея, которую разделяет большинство. Какая идея стояла за этим законом? Идея скрыть несправедливую оплату труда. Ведь если она справедливая, то зачем скрывать?

Читать дальше →
Total votes 193: ↑160 and ↓33+127
Comments285

Создаем OLAP куб. Часть 2

Reading time4 min
Views65K
OLAP

Итак, продолжаем создавать куб.
Напомню, что в предыдущей статье, мы создавали Data Warehouse для хранения голосов хабра-пользователей за хабра-топики. Для тех, кто хочет начать сразу создавать куб, я выложил скрипт, который создает и наполняет хранилище (на моей машине скрипт занял 10 минут и нагенерил 1866268 хабра-голосов).
Для того, чтобы создать OLAP куб, нам понадобится:
  • SQL Server, на котором хранится наш HabraDW (подойдет любой);
  • Microsoft SQL Server, с запущенными Analysis Services (2005/2008);
  • Business Intelligence Studio, которая входит в пакет клиентских приложений для Microsoft SQL Server-а, и интегрируется с Visual Studio, если она у вас установлена (2005/2008);
Читать дальше →
Total votes 56: ↑48 and ↓8+40
Comments34

Веб-аналитика: анализируй это! Часть 3. Базовые метрики

Reading time4 min
Views22K
Предыдущие части:
Часть 1. Вступление
Часть 2. Сбор данных

Пришло время поговорить о метриках — тех величинах, которые считает любая система статистики. Начнем с прямых метрик — тех, которые можно посчитать легко и без применения формул.
Читать дальше →
Total votes 34: ↑31 and ↓3+28
Comments21

Простое сравнение изображений с помощью php

Reading time3 min
Views26K
Алгоритм возможно не новый, и не является идеалом, но, на удивление, работает. Никаких графов и корелляции.

Для начала, стоит отметить, что сравнение очень приблизительно (по крайней мере, на данном этапе), временами две совершенно разные фотографии оказываются похожими процентов на 60%, так же не учитываются жесткие модификации (повороты, инверсия, обрезка) – для этого нужно доводить и доводить. Лично для меня самым главным оказались два параметра: скорость, независимость от разрешения изображения и возможность сравнивать «изображения» прямо в базе данных.
Читать дальше →
Total votes 161: ↑153 and ↓8+145
Comments64

Хитрости с логированием в однопоточных неблокирующих серверах.

Reading time6 min
Views2.7K
Хочу рассказать об очередном результате моих изысканий в области оптимизации производительности Web-серверов.
На этот раз речь пойдет об оптимизации сложного логирования в однопоточном неблокирующем вэб-сервере.
Читать дальше →
Total votes 69: ↑61 and ↓8+53
Comments105

Кропотливая оптимизация PHP-приложений (рассматриваю PHP5, но большинство справедливо и для 4-й ветки)

Reading time9 min
Views8.8K

Когда во сне снится «ой а если сервера не хватит...»


Для начала, Доброй Ночи. Пишу что-то полезное вроде впервые (если не считать разного рода полу-тестов в моём блоге). Человек я допытливый до жути, неожиданно в голову пришло, что могу помочь сэкономить кому-то много времени ;).


танцуем с бубном
Total votes 99: ↑95 and ↓4+91
Comments147

Разработка снизу-вверх и базы данных.

Reading time5 min
Views3.6K
    Пол Грэм в своих эссе часто касается темы разработки снизу-вверх. Этот метод упоминается у него, когда он пишет о разработке програмного обеспечения, о способе ведения бизнеса, о преимуществах open source и блогах. Ниже я опишу почему при этой модели разработки взаимодействие с базой данных встает поперек глотки, и предложу решение уместное в некоторых случаях.

читать далее...
Total votes 7: ↑6 and ↓1+5
Comments6

Information

Rating
Does not participate
Location
Донецкая обл., Украина
Date of birth
Registered
Activity