Pull to refresh
-19
Karma
0
Rating
Fortop @Fortop

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

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

VK corporate blog Website development *PHP *Compilers *
Translation
Хэш-таблицы используются везде, в каждой серьёзной С-программе. По сути, они позволяют программисту хранить значения в «массиве», индексируя его с помощью строк, в то время как в языке С допускаются только целочисленные ключи массива. В хэш-таблице строчные ключи сначала хэшируются, а затем уменьшаются до размеров таблицы. Здесь могут возникать коллизии, поэтому нужен алгоритм их разрешения. Существует несколько подобных алгоритмов, и в РНР используется стратегия связных списков (linked list).

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

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

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

А если без JavaScript?

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

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

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

Edison corporate blog Venture investment Start-up development
Translation
image

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

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

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

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

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

Programming *System Analysis and Design *
Sandbox

image


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


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


Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 13K
Comments 15

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

VK corporate blog Perfect code *IT Standards *Debugging *
Translation


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


Читать дальше →
Total votes 143: ↑141 and ↓2 +139
Views 86K
Comments 63

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

Social networks and communities
социальный граф 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
Views 25K
Comments 18

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

Self Promo

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




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

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

Читать дальше →
Total votes 193: ↑160 and ↓33 +127
Views 2.9K
Comments 285

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

SQL *
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
Views 64K
Comments 34

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

Web analytics *
Предыдущие части:
Часть 1. Вступление
Часть 2. Сбор данных

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

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

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

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

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

Server optimization *
Хочу рассказать об очередном результате моих изысканий в области оптимизации производительности Web-серверов.
На этот раз речь пойдет об оптимизации сложного логирования в однопоточном неблокирующем вэб-сервере.
Читать дальше →
Total votes 69: ↑61 and ↓8 +53
Views 2.5K
Comments 105

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

Website development *

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


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


танцуем с бубном
Total votes 99: ↑95 and ↓4 +91
Views 8.6K
Comments 147

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

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

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

Information

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