Как стать автором
Обновить
118
0
Матрозов Олег @Mear

WebDev

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

PHPExcel и большие файлы

Время на прочтение4 мин
Количество просмотров100K
PHPExcel — отличная библиотека с огромным функционалом по работе с форматами xls, xlsx. Можно считывать, записывать, менять форматирование, задавать формулы, а из xlsx можно и картинки вытаскивать.

На хабре уже был пост про эту библиотеку - Универсальное чтение ячеек в PHPExcel. Я остановлюсь только лишь на главном минусе PHPExcel — вечно памяти не хватает, все время сыпятся ошибки «Fatal error: Out of memory». Этот пост о том, как это обойти.

Читать дальше →
Всего голосов 33: ↑25 и ↓8+17
Комментарии23

Настройка и оптимизация MySQL сервера

Время на прочтение9 мин
Количество просмотров315K
В этой статье будут описаны различные настройки MySQL, преимущественно те, которые влияют на производительность. Для удобства все переменные разделены по разделам (базовые настройки, ограничения, настройки потоки, кэширование запросов, тайминги, буферы, InnoDB). Сначала уточним имена некоторых переменных, которые изменились в версии 4 MySQL, а в сети продолжают встречаться и старые и новые варианты имен, что вызывает вопросы.
Читать дальше →
Всего голосов 180: ↑171 и ↓9+162
Комментарии19

Firefox 15 поддерживает свободный аудиоформат Opus

Время на прочтение2 мин
Количество просмотров5.2K
В браузере Firefox 15 (бета-версия) реализована поддержка свободного аудиоформата Opus. Этот кодек недавно приняли для рассмотрения в качестве стандарта организацией IETF, он качественно превосходит любые другие стандарты кодирования и передачи звука.


Читать дальше →
Всего голосов 66: ↑59 и ↓7+52
Комментарии122

Windows Sockets, IOCP и Delphi

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

Пролог


Недавно я столкнулся с необходимостью эффективной работы с сокетами в Windows приложении. Задача типичная для нагруженного сервера. Нетипичным тут будет казаться только язык реализации — Delphi.
Я хочу описать способ массовой асинхронной работы с большим количеством сокетов с использованием I/O Completion Ports.
Читать дальше →
Всего голосов 29: ↑21 и ↓8+13
Комментарии37

Как правильно сортировать контент на основе оценок пользователей

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


В оригинале название звучит как «How Not To Sort By Average Rating». Я подумал, что дословный перевод «Как не сортировать по усреднённому рейтингу» будет малопонятен и хуже отражает содержание статьи.

Постановка проблемы


Вы занимаетесь веб программированием. У вас есть пользователи, которые оценивают контент на вашем сайте. Вы хотите разместить высоко оцененный контент наверху, а низко оцененный — внизу. Для этого на основе пользовательских оценок вам нужно вычислить некий «рейтинг».

Неправильное решение №1

Рейтинг= (Число положительных оценок) - (Число отрицательных оценок)

Читать дальше →
Всего голосов 458: ↑423 и ↓35+388
Комментарии134

Запрос номера из реестра «Россвязи»

Время на прочтение2 мин
Количество просмотров24K
Доброго времени суток!
Давно искал инструмент, чтобы быстро можно было узнать принадлежность того или иного телефонного номера к тому или иному оператору связи и/или региону.

Всегда использовал для этих задач МТТ, чего, в принципе всегда хватало.
Но хотелось чего-то ещё более простого и быстрого.

Если Вас также как и меня интересовало что-то подобное, прошу под кат.
Читать дальше →
Всего голосов 53: ↑51 и ↓2+49
Комментарии47

(Не)безопасный серфинг?

Время на прочтение3 мин
Количество просмотров23K
Сегодня многие популярные браузеры поддерживают автообновление, однако значительную часть плагинов к ним нужно обновлять самостоятельно. Внушительное количество пользователей делает это крайне редко, не задумываясь или не зная, что в большинстве случаев атакуются не только браузеры, но и плагины!

Под катом — любопытная статистика проверок безопасности браузеров и плагинов на наличие потенциальных уязвимостей по результатам работы онлайн службы SurfPatrol в 2011 году. Данные предоставляются по Рунету.
Читать дальше →
Всего голосов 51: ↑43 и ↓8+35
Комментарии23

Определение доминирующих тонов на изображении [v 1.1]

Время на прочтение2 мин
Количество просмотров53K
После публикации прошлой статьи, я полностью забил на попытку выполнить алгоритм при помощи HSV или Lab координат. Забил на использовании библиотек цветов и вообще на сам скрипт забил.

Но что-то стало скучно и опять зачесались руки поработать с изображениями и одновременно захотелось исправить уже имеющийся алгоритм.
Скрипт: link

Читать дальше →
Всего голосов 113: ↑107 и ↓6+101
Комментарии76

3D кнопки с помощью CSS3

Время на прочтение6 мин
Количество просмотров44K
Здравствуй, дорогой хабрадруг! Сегодня мы научимся создавать объемные кнопки CSS3! Они основаны на популярной PSD фриби от Orman Clark для его веб-сайта Premium Pixels. Мы постараемся создать копию этих кнопок с помощью CSS с минимальным количеством кода HTML.

Preview

Читать дальше →
Всего голосов 98: ↑73 и ↓25+48
Комментарии59

Универсальное чтение ячеек в PHPExcel

Время на прочтение4 мин
Количество просмотров103K
Привет, Хабр!
Мне по работе часто приходится импортировать Excel-документы средствами PHP.
Для этого я использую библиотеку PHPExcel, которая на сегодняшний день является весьма удобным инструментом.
Но есть несколько «скользких» моментов, связанных с чтением данных из ячеек, о которых я хочу рассказать хабрачитателям, а также разобрать функцию, решающую эти проблемы.
Читать дальше →
Всего голосов 52: ↑48 и ↓4+44
Комментарии29

Асинхронный обмен данными поверх HTTP

Время на прочтение4 мин
Количество просмотров11K
Не так давно на работе передо мной была поставлена задача реализовать механизм асинхронного обмена данными между веб-приложением на Java и веб фронт-эндом на стороне клиента. Задача заключалась в том, чтобы клиент получал апдейты с минимальной задержкой, при этом апдейты могли приходить со скоростью 100 апдейтов в секунду, так и 1 апдейд в минуту, т.е. желательно не слать лишних запросов со стороны клиента.

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

Читать дальше →
Всего голосов 61: ↑53 и ↓8+45
Комментарии46

Создание радиостанции. От идеи до реализации

Время на прочтение4 мин
Количество просмотров15K
Всем привет!
У многих, наверное, слушая радио, было желание создать свою собственную радиостанцию. Такое желание 7 лет назад появилось и у меня, представлял себя директором крупной радиостанции, где крутится только моя любимая музыка, куда звонят люди и передают приветы. Детские «розовые» очки с меня снял отец – объяснил, что для этого нужно зарегистрировать радиоволну, закупить огромное количество оборудования, провести переговоры с правообладателями на музыку, и все это должно сопровождаться огромными пачками денег в разные кабинеты с дядями в галстуках. Вот так вот и рушатся детские мечты, но «розовая» мечта превратилась в тщательное обдумывание возможности создания радиостанции. И вот только в этом году у меня появились единомышленники, и мы начали воплощать накопленные за долгое время идеи.
Читать дальше →
Всего голосов 65: ↑53 и ↓12+41
Комментарии28

Введение в HTML5 History API

Время на прочтение4 мин
Количество просмотров241K
До появления HTML5 единственное, что мы не могли контролировать и управлять (без перезагрузки контента или хаков с location.hash) — это история одного таба. С появлением HTML5 history API все изменилось — теперь мы можем гулять по истории (раньше тоже могли), добавлять элементы в историю, реагировать на переходы по истории и другие полезности. В этой статье мы рассмотрим HTML5 History API и напишем простой пример, иллюстрирующий его возможности.

Основные понятия и синтаксис


History API опирается на один DOM интерфейс — объект History. Каждый таб имеет уникальный объект History, который находится в window.history. History имеет несколько методов, событий и свойств, которыми мы можем управлять из JavaScript. Каждая страница таба(Document object) представляет собой объект коллекции History. Каждый элемент истории состоит из URL и/или объекта состояния (state object), может иметь заголовок (title), Document object, данные форм, позиция скролла и другую информацию, связанную со страницей.

Основные методы объекта History:
  1. window.history.length: Количество записей в текущей сессии истории
  2. window.history.state: Возвращает текущий объект истории
  3. window.history.go(n): Метод, позволяющий гулять по истории. В качестве аргумента передается смещение, относительно текущей позиции. Если передан 0, то будет обновлена текущая страница. Если индекс выходит за пределы истории, то ничего не произойдет.
  4. window.history.back(): Метод, идентичный вызову go(-1)
  5. window.history.forward(): Метод, идентичный вызову go(1)
  6. window.history.pushState(data, title [, url]): Добавляет элемент истории.
  7. window.history.replaceState(data, title [, url]): Обновляет текущий элемент истории
Читать дальше →
Всего голосов 51: ↑51 и ↓0+51
Комментарии22

Инструменты поисковиков для продвижения сайтов

Время на прочтение4 мин
Количество просмотров9.1K
В предыдущих статьях мы рассказали про базовые принципы поисковой оптимизации, при выполнении которых можно достаточно хорошо улучшить позиции своего сайта в результатах поиска.

Сегодня мы хотим рассказать о некоторых дополнительных возможностях, которые вы можете использовать при продвижении своего сайта через инструменты от самих поисковых систем Яндекс.Вебмастер и Google Webmasters.

Данный обзор инструментов идет в продолжение первых двух статей (см часть 1 и часть 2)

Сейчас мы разберем такие важные вопросы как:
  • Присвоение региона сайту
  • Формирование особых сниппетов
  • Обзор самых важных слов сайта
  • Анализ мета-описаний страниц сайта
  • Проблемы индексации
Эти инструменты хорошо известны профессионалам, но далеко не все, кто самостоятельно занимается продвижением своего сайта, знает о них. Эта статья именно для них.
Читать дальше →
Всего голосов 78: ↑60 и ↓18+42
Комментарии22

Пишем простой плагин к веб-браузеру используя FireBreath

Время на прочтение3 мин
Количество просмотров8.5K
Как уже писали ранее на Хабре, FireBreath — это фреймворк для разработки кросс-платформенных плагинов, используя технологии NPAPI [1] и ActiveX Control hosts, что позволит использовать плагин в следующих браузерах: Gecko/Firefox, Google Chrome, Apple Safari, Opera, Microsoft Internet Explorer 6, 7, and 8.

Мне пригодился этот фреймворк для следующего: в проекте (веб-приложение) использовался Java-апплет для печати Pdf-файлов напрямую на принтер, но из-за различных проблем с Java Policy и правами, не удалось добиться стабильной работы апплета + различные мелкие баги, как-то захват апплетом фокуса после загрузки или зависание браузера во время печати. Возможно, просто руки кривые. В общем, печать то работала, то нет, и это никого не устраивало.

Как вариант было решено попытаться написать плагин, который позволит избавиться от апплета и печатать файлы быстро и надежно. Собственно, печать осуществляет теперь тот же Java код, переписанный в виде jar файла. Однако прослойкой, которая осуществляет взаимодействие между джавой и клиентским кодом, является плагин браузера.

Теперь напишем простой «считай, ничего не делающий» плагин, который будет писать данные в файла в локальной файловой системе.
Читать дальше →
Всего голосов 57: ↑53 и ↓4+49
Комментарии4

.phar — исполняемые PHP-архивы

Время на прочтение4 мин
Количество просмотров54K
Данную статью я хочу посвятить одному интересному нововведению в PHP 5.2 (с версии 5.3 входит в стандартную поставку PHP) — PHAR.
image
PHAR — это утилита для создания исполняемых архивов в PHP, аналог JAR в Java.
PHAR ползволяет упаковать много файлов в один, в результате чего Ваше приложение может работать с целой библиотекой, как с одним файлом.
PHAR умеет создавать, читать, записывать и конвертировать такие форматы, как TAR, ZIP и, собственно, PHAR.
Доступ к файлам в архиве осуществляется напрямую, без необходимости распаковки архива, через PHP Stream Wrapper, тоесть с файлами из архива работают все функции, которые поддерживают PHP Stream Wrapper.
Читать дальше →
Всего голосов 137: ↑128 и ↓9+119
Комментарии80

Мини-фреймворк своими руками

Время на прочтение11 мин
Количество просмотров13K
Недавно, прочитав про мини-фреймворк Silex, я подумал: а что в нем сложного? Попробовал написать нечто подобное и получилось довольно легко.
How-to по написанию своего мини-фреймворка - под катом.
Всего голосов 114: ↑80 и ↓34+46
Комментарии67

Нечёткий поиск в тексте и словаре

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

Введение


Алгоритмы нечеткого поиска (также известного как поиск по сходству или fuzzy string search) являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.

В этой обзорной статье я рассмотрю следующие понятия, методы и алгоритмы:
  • Расстояние Левенштейна
  • Расстояние Дамерау-Левенштейна
  • Алгоритм Bitap с модификациями от Wu и Manber
  • Алгоритм расширения выборки
  • Метод N-грамм
  • Хеширование по сигнатуре
  • BK-деревья
А также проведу сравнительное тестирование качества и производительности алгоритмов.
Читать дальше →
Всего голосов 171: ↑170 и ↓1+169
Комментарии33

База GeoIP – страны и города, январь 2011

Время на прочтение2 мин
Количество просмотров12K
Вышла в свет новая версия русскоязычной базы данных стран и городов. Основные изменения:
— для перевода названий городов использован API Карт Google (идея chernikov)
— для поиска по странам СНГ подключена база geobaza.ru (идея derketzer)
Результат этой работы доступен для свободного скачивания.
Читать дальше →
Всего голосов 91: ↑88 и ↓3+85
Комментарии49

Информация

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