Как стать автором
Обновить
37
0
SkyCat @SkyCat

ИТ

Отправить сообщение

Структуры данных, PHP

Время на прочтение9 мин
Количество просмотров84K
Данный пост является переводом и предназначен для новичков. Ну или для тех, кто забыл лекции с начальных курсов своих вузов. Скорее всего, данный материал уже попадался на хабре в той или иной модификации, но здесь упор на PHP и его особенности.

Структуры данных или Абстрактный Тип Данных (ADT) — это модель, определенная как некий набор операций, которые могут быть применены к самой себе и ограничена тем, какой результат дают эти операции.
Большинство из нас сталкиваются со стеком и очередью в повседневной жизни, но что общего между очередью в супермакете и структурой данных? В этом мы и попробуем разобраться в данной статье, где также будут описаны деревья.

http://www.thisiscolossal.com/2013/01/a-wooden-domino-tree-by-qiu-zhijie/



UPD: s01e02

Осторожно, трафик! Очень много текста!
Всего голосов 57: ↑44 и ↓13+31
Комментарии17

Конвертируем HTML в PDF при помощи Dompdf

Время на прочтение6 мин
Количество просмотров114K

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

Dompdf — это отличная библиотека, способная генерировать PDF из HTML-разметки и CSS-стилей (в большинстве случаев это стили, совместимые с CSS 2.1 с поддержкой некоторых свойств CSS3). Мы можем определить, как наше содержимое должно выглядеть, используя эти знакомые технологии, и после легко конвертировать его в фиксированный документ. Также эта библиотека имеет и другие полезные и интересные функции.
Читать дальше →
Всего голосов 32: ↑26 и ↓6+20
Комментарии18

Управление загрузкой изображений

Время на прочтение4 мин
Количество просмотров132K


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

Использование контейнера для каждого изображения


Простой способ, который можно применить к любому изображению на сайте. Заключается в том, что каждая картинка оборачивается в DIV, который предотвращает построчную загрузку:

<div class="img_wrapper">
    <img src="comicbookguy.jpg" alt=""/>
</div>

С помощью контейнера можно контролировать соотношение сторон картинки, а также использовать индикатор загрузки, что очень удобно, если изображения тяжелые.
Читать дальше →
Всего голосов 61: ↑49 и ↓12+37
Комментарии31

Компактный сервер ETegro Hyperion ES200 G4

Время на прочтение4 мин
Количество просмотров20K

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

Читать дальше →
Всего голосов 23: ↑16 и ↓7+9
Комментарии120

ntop вернулся. Релиз нового поколения — ntopng

Время на прочтение2 мин
Количество просмотров61K
ntop это сетевой зонд, который показывает использование сети подобно *nix приложениям top и processes.
Спустя 15 лет с момента представления оригинального ntop, пришло время создать новый, современный ntop. Мы называем его ntopng, ntop next generation (ntop следующее поколение). Цели преследуемые этим приложением многогранны:

  1. Публикация под GNU GPLv3
  2. Представление современного, основанного на HTML5 и Ajax веб интерфейса (предостережение: вам нужен современный браузер для использования ntopng)
  3. Небольшой движок приложения, разумное потребление памяти и отказоустойчивость
  4. Возможность определить протокол приложения с помощью nDP, DPI (Deep Packet Inspection) фреймворка ntop'a c открытым исходным кодом

Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии27

Переход на MySQL 5.6, а стоит ли?

Время на прочтение17 мин
Количество просмотров48K
После выхода новой версии MySQL в начале этого года, многие задумались о том стоит ли на неё переходить с более старых версий. Чтобы ответить на этот вопрос для себя, вначале необходимо понять, а что именно даст этот переход. В этой статье я постараюсь осветить новые, важные для меня, фичи, которые были включены в дистрибутив новой версии, анализ их производительности и работоспособность новой версии, а так же необходимость что-то менять в коде в связи в переписанным оптимизатором. Так как объем изменений действительно очень велик, для каждого пункта дам ссылку на оригинальную статью по тестирования производительности и исключу из описания воду.
Читать дальше →
Всего голосов 64: ↑63 и ↓1+62
Комментарии32

О тонкостях работы foreach в PHP

Время на прочтение9 мин
Количество просмотров60K
В недавнем дайджесте интересных ссылок о PHP я обнаружил ссылку на комментарий Никиты Попова на StackOverflow, где он подробно рассказывает о механизме «под капотом» управляющей конструкции foreach.
Поскольку foreach действительно иногда работает более, чем странным образом, я счел полезным сделать перевод этого ответа.


Внимание: этот текст подразумевает наличие базовых знаний о функциональности zval'ов в PHP, в частности вы должны знать что такое refcount и is_ref.
foreach работает с сущностями разных типов: с массивами, с простыми объектами (где перечисляются доступные свойства) и с Traversable-объектами (вернее, объектами, у которых определен внутренний обработчик get_iterator). Здесь мы, в основном, говорим о массивах, но я скажу и об остальных в самом конце.

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

Как работает обход массивов
Всего голосов 86: ↑74 и ↓12+62
Комментарии56

Dropbucket.org — хранилище сниппетов для Drupal

Время на прочтение3 мин
Количество просмотров4.2K
image

Я уже достаточно давно работаю с Drupal и за многие годы практики у меня скопилась масса сниппетов для решения различных задач. В течение этого времени где я только не хранил эти куски кода: в блокноте, в evernote, в gist, в IDE (которые сменялись как перчатки). Всякий раз когда мне нужно было найти тот или иной кусок кода в целях переиспользования я или начинал утомительные поиски среди всей этой цифровой кипы или попросту писал код сначала.

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

Так появился сайт Dropbucket.org, который был запущен месяц назад и получил довольно неплохую прессу в западной части сообщества Drupal. На сегодняшний день на сайте зарегистрировалось 800 друпал разработчиков со всевозможных уголков нашей планеты (включая, конечно же, Россию и Украину).

Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии16

WebHostingHub Glyphs — обновление шрифта до 1446 иконок

Время на прочтение1 мин
Количество просмотров8.3K


Недавно выпущенный набор иконок WebHostingHub Glyphs добавилось более 300 новых иконок.

Благодаря пожеланиям пользователей хабрахабр в шрифте появились иконки знака рубля, сети вконтакте и многие другие. Иконки доступны в формате png (белые и черные) и самое главное в виде шрифта в форматах SVG, EOT и TTF. Мы будем рады услышать любые пожелания к дальнейшему развитию сета.
Всего голосов 94: ↑89 и ↓5+84
Комментарии60

intro.js — пошаговое руководство для веб-страницы

Время на прочтение1 мин
Количество просмотров51K


Эта маленькая библиотека позволяет очень просто создать пошаговое введение для сайта или приложения. Достаточно добавить атрибуты data-intro и data-step с описанием и номером шага соответственно к нужным элементам страницы. Вот так:

<a href='http://google.com/' data-intro='Hello step one!' data-step='1'></a>
Читать дальше →
Всего голосов 139: ↑134 и ↓5+129
Комментарии24

Домашний сервер/NAS на платформе Mini-ITX

Время на прочтение10 мин
Количество просмотров278K
UPD3: наткнулся на статью, написанную на схожую тематику. И хотя появление двух таких статей с разницей в сутки — не более чем случайность, но моя вышла позже, а посему я чувствую необходимость это как-то прокомментировать. Во-первых, мне стали более понятны слова AbnormalHead. Если бы я прочитал ту статью раньше, моя не увидела бы свет в том виде, в котором она появилась. Во-вторых, я хотел бы более явно сформулировать цель моей статьи. Когда я собирал свою машину, я столкнулся с тем, что найти материнскую плату с двумя встроенными сетевыми адаптерами под Mini-ITX — это достаточно большая проблема в принципе (с тех пор ситуация в этом направлении улучшилась). Найти то же, но с более чем четырьмя портами SATA — проблема и сейчас, лично я другой кроме описанной в моей статье не знаю. Да, можно поставить дополнительный контроллер, но тогда придется отказаться от чего-то другого. То же и с mini-ITX корпусами: обычных полно, но они не подходят для NAS. Есть корпуса под NAS, но нестандартный блок питания с мелким и высокооборотным вентилятором будет раздражать если не вас, то ваших близких. Найти максимально гибкое решение, которое позволит не идти на компромиссы и собрать хоть NAS, хоть сервер виртуализации, хоть роутер — не так просто. В какой-то момент я уже думал, что невозможно. Однако же оно нашлось и именно им я хочу поделиться в этой статье. Да, она не про умный дом, но имея COM-порты, GPIO и Watchdog на плате его можно построить, а через LVDS можно прикрутить ЖК-экран от старого ноутбука, или вовсе управлять машиной удаленно через vPro/iAMT. Да, она не про NAS, потому что в ней нет ни слова о производительности и софте для этих целей, но из этой машины получится прекрасный NAS (и если взять соответствующий задаче процессор и объем памяти, то цена будет сильно ниже той, что вышла у меня). Да, она и не про домашнюю виртуализацию, потому что здесь не описан мой опыт установки SCVMM (тем более что он еще не закончен). Статья про платформу, на которой все вышеперечисленное можно без особых проблем организовать хоть вместе, хоть поотдельности. И при этом у вас будет не монстр, ревущий на всю квартиру и занимающий полкомнаты, а маленький, тихий, холодный корпус, который можно подключить к любому находящемуся поблизости монитору/телевизору, или не подключать вовсе. Надеюсь, этот опыт будет кому-то полезен.

Свой первый домашний сервер я собрал в 2008 году: Celeron E1400 на mATX платформе ASUS и всё это в прекрасном корпусе Antec NSK 1380. Корпус действительно хорош за исключением двух моментов: 1. Нестандартный формат блока питания (и как следствие возможность поставить только низкопрофильное охлаждение на процессор) 2. Малое число посадочных мест под накопители и плохое их охлаждение (поэтому я никогда не ставил туда больше одного диска — и так было тесно и жарко).

С ролью маршрутизатора эта машина справлялась прекрасно. Но организация на ней файлопомойки уже создавала неудобства: место вечно кончается -> приходится менять диск на новый большего размера (ну не чистить же его в самом деле!) -> для этого надо перенести на новый диск систему -> уж если переносишь, то не обновить ли ее заодно, а то пакеты с новыми часовыми поясами под текущую приходится искать чуть ли не собаками (пламенный привет Федоре) -> … И так каждый раз.

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

Но самый главный аргумент — это, конечно, желание пощупать новые железки! Поэтому я определился с требованиями и отправился в магазин гуглить.

Требования:
  • бесшумность
  • компактность
  • возможность удобной установки/замены дисков и достаточное количество посадочных мест (от 4)
  • универсальность (больше разъемов/интерфейсов, всяких и разных, мало ли что захочется прикрутить)


Форм-фактор Mini-ITX не был обязательным критерием, но логично вытекал из второго пункта. Поэтому я решил для себя, что попытаюсь выжать из него максимум и только в крайнем случае начну смотреть в сторону mATX.

Disclaimer
Знакомство автора с фотографией на момент описанных в статье событий ограничивалось несколькими снимками с камеры жены. Поэтому прежде чем читатель со словами “ну кто же так снимает!” потянется к оружию кнопке “-”, спешу сообщить — я встал на путь исправления! Также, пользуясь случаем, выражаю огромную благодарность моей жене за обработку фотографий. Да-да, это они еще обработаны!

Вот что получилось в итоге
Всего голосов 97: ↑79 и ↓18+61
Комментарии56

Обзор роутера NETGEAR WNDR3800

Время на прочтение10 мин
Количество просмотров52K
Давно хотел поменять свой заросший мхом noname-роутер на что-то более породистое, технологичное и просто современное. Каких-то извращенных требований к будущему устройству у меня не было, то есть мне наверняка подошли бы 8 роутеров из 10. Сегодня речь пойдет только про 1 из тех 8, на котором я остановил свои поиски — NETGEAR WNDR3800, про который на Хабре еще вроде бы никто не рассказывал.



Выбор решений для дома сейчас очень велик, но…
Читать дальше →
Всего голосов 45: ↑38 и ↓7+31
Комментарии62

Собираем, парсим и отдаём логи с помощью Logstash

Время на прочтение10 мин
Количество просмотров286K
Приветствую.

Так уж сложилось, что по долгу работы мне приходится много времени уделять логам. Это и участие в выработке правил и политик сбора/хранения/использования логов, это и разбор разных инцидентов и обнаружение аномалий. За сутки наши программы, сервисы и серверы генерируют ОЧЕНЬ большое количество логов. И потребность копания в логах растёт постоянно.
Мне довелось поработать с коммерческими лог-менеджмент продуктами типа ArcSight, RSA Envision, Q1 Labs. У этих продуктов есть как плюсы, так и минусы. Но в статье речь пойдёт не о них.
Речь будет о Logstash.

Что же такое Logstash? Зачем он нужен? Что он умеет?
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии13

Встречайте долгожданный plugins.jquery.com

Время на прочтение2 мин
Количество просмотров26K
Реестр плагинов jQuery уже давным давно успел превратиться в кладбище. За последние несколько лет по нему стало страшно перемещаться, на могилах некогда популярных библиотек перестали читаться имена, и лишь порывы холодного ветра и странные тени, мелькающие между мраморных плит, могли ожидать случайного путника, на свое несчастье выбравшего дорогу через этот ресурс.

К счастью, царствию уныния и страха пришел конец. Встречайте переродившийся, красивый и удобный, полезный, логичный и пригодный к использованию Реестр Плагинов jQuery
Читать дальше →
Всего голосов 96: ↑95 и ↓1+94
Комментарии25

Контролируемое кэширование страниц в nginx

Время на прочтение3 мин
Количество просмотров37K
Введение

Как известно, nginx умеет кешировать ответ сервера, и выдавать его по запросу вместо обращения к бэкенду, экономя тем самым ресурсы сервера. Скорость отдачи таких закешированных страниц иногда поражает, ради таких скоростей иногда не жалко переносить на javascript многие функции сайта только для того, чтобы иметь возможность закешировать ещё 1 страницу целиком (Например, вынести отрисовку плашки с авторизацией юзера на js, чтобы иметь возможность кешировать страницу, которая идентична для всех пользователей, за исключением этой самой плашки).

Я много раз использовал возможность кэширование nginxом страниц, и натыкался на пару неудобных для себя вещей:
  • Можно легко закешировать вообще все страницы, но для динамических сайтов или для сайтов с авторизацией нужно ли это?
  • Можно закешировать отдельно несколько url, вида /album/*, но не переписывать же конфиг nginx каждый раз при появлении новых разделов сайта?

Читать дальше →
Всего голосов 51: ↑49 и ↓2+47
Комментарии27

Organic Groups в Drupal 7

Время на прочтение6 мин
Количество просмотров14K
Organic groups (OG) для Drupal 6 являются мощным и широко используемым модулем для создания сайтов, которые включают в себя группы, которые являются мини-сайтами в большем Drupal-сайте. Версия OG для Drupal 7 полностью переписана, заключают в себе преимущества Drupal 7 в API для сущностей и полей.
Читать дальше →
Всего голосов 13: ↑9 и ↓4+5
Комментарии2

Используем «Яндекс.Чистый Веб» для защиты от спама

Время на прочтение5 мин
Количество просмотров27K
Уже достаточно долгое время Яндекс предоставляет бесплатный сервис обнаружения спама в сообщениях под названием «Яндекс.Чистый Веб», однако до сих пор он остаётся малопопулярным.

В этом посте я продемонстрирую основные методы работы с API «Яндекс.Чистый Веб» на примере простого PHP-класса.
Подробнее!
Всего голосов 52: ↑46 и ↓6+40
Комментарии28

DivShot — онлайн-сервис прототипирования Bootstrap

Время на прочтение1 мин
Количество просмотров75K
DivShot — отличный новый инструмент для работы с Twitter Bootstrap. С помощью него создавать прототипы интерфейсов с использованием популярного CSS-фреймворка стало до безобразия просто.

Читать дальше →
Всего голосов 155: ↑145 и ↓10+135
Комментарии21

Централизованная система обновления пакетов в Ubuntu

Время на прочтение9 мин
Количество просмотров21K
Всем привет,

Что делать, если аналоги платные или не адаптированы под наши условия? Конечно, писать самому.

Условие:

  • ~ 50 удаленных клиентских станций, работающих на Ubuntu Desktop (10.04-12.10).

Задача:

  1. Получение информации о доступности обновления пакетов, на удаленных клиентских станциях.
  2. Логирование версий пакетов доступных для обновления.
  3. Удаленное обновление одной/всех клиентских станций.

Варианты решения:

  • Landscape – Отлично, но платно.
  • Spacewalk – Только RHEL и ему подобные.
  • Собственная разработка – этот вариант как раз для нас.

Поскольку мои знания ограничиваются одним языком программирования – bash, реализация будет выполнена именно на нем.
Читать дальше →
Всего голосов 47: ↑35 и ↓12+23
Комментарии36

Информация

В рейтинге
Не участвует
Откуда
Ярославль, Ярославская обл., Россия
Дата рождения
Зарегистрирован
Активность