Pull to refresh
5
0
varcharik @muhomor

User

Send message

High Performance MySQL, Second Edition

Reading time1 min
Views6.3K
Наконец нашел на бесплатном торренте эту долгожданную книгу, тут недавно её продавали за 10 вмз :-)
Но теперь каждый может скачать её бессплатно!!! :-) Что и я сделал и уже наслаждаюсь чтением этой книги.

http://www.btmon.com/Other/Unsorted/High_Performance_MySQL_2nd_Edition_Jun_2008_eBook-DDU.torrent.html

P.S. Спасибо всем, кто мне добавил кармы, я благодаря этому смог выполнить свое обещание и написать эту статью
habrahabr.ru/blogs/mysql/38907
Total votes 87: ↑59 and ↓28+31
Comments83

MySQL Performance real life Tips and Tricks

Reading time9 min
Views37K
Пообещал вчера написать статью о реальных случаях оптимизации БД MySQL.
Пришлось сегодня вставать утром пораньше чтобы воплотить обещанное в жизнь.
Централизованное управление мыслями поддерживать еще сложно, поэтому не судите строго за казусы и ляпсусы в моей статье.

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

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

Читать дальше →
Total votes 143: ↑139 and ↓4+135
Comments93

Firefox3. Забавность

Reading time1 min
Views734
Кто знает, для чего нужна такая вот вещь?
Если в адресную строку вписать это:

chrome://browser/content/browser.xul

нажать ввод, то получится весьма оригинально, а может и полезно. Можно делать это пока не надоест ;)
Total votes 265: ↑204 and ↓61+143
Comments117

Конец CSS expressions

Reading time1 min
Views5.5K
По информации официального блога разработчиков IE поддержка CSS expressions, многими оспариваемое решение, в восьмой версии будет отключена по умолчанию. В числе причин названы безопасность и высокая затратность в плане производительности.

Однако, поддержка CSS expressions сохранится в режиме совместимости с седьмой версией браузера, для поддержки уже существующих проектов.

Таким образом, Microsoft, похоже, еще раз демонстрирует свое желание придерживаться рекомендаций и стандартов в реализации новой версии браузера.
Total votes 57: ↑48 and ↓9+39
Comments36

Миниатюрное приложение-калькулятор

Reading time1 min
Views3.1K
Т.к. Google Chrome умеет сохранять ярлыки к приложениям и запускать их без браузерной обвязки, решил сделать для себя небольшое приложеньице-калькулятор. Выглядит оно так:

7.56 КБ

Читать дальше →
Total votes 118: ↑96 and ↓22+74
Comments88

FF3 справедливо наказывает за размещение блочного элемента внутри строкового

Reading time1 min
Views2.6K
Отлаживаю html-верстку чужого проекта, созданную до появления Firefox 3. В коде часто встречаются ошибочные конструкции вида:
<a href="#">
<div>Hello, bugs!</div>
</a>
CSS я из примера изъял, но и без него подобный код в Firefox 3 даст результат, который вряд ли понравится заказчику. Клик по такой ссылке приводит к появлению двух точек в левом нижнем и левом верхнем углу (это легко проверить на пустом документе):



Иногда такие конструкции ошибочно применяются для создания кнопок из ссылок. Firefox 2 по умолчанию эту ошибку прощает — а Firefox 3 уже нет. Чтобы избежать этой ошибки, не нужно помещать div внутрь тэга a, нужно вместо этого присвоить свойство display:block стилю самого тэга a. Блочные элементы (div) внутри строковых (а) — невалидны.

Update: в этом вопросе и сам Гугл не без греха (спасибо, uratsakidogi)
Total votes 67: ↑51 and ↓16+35
Comments55

Горячие клавиши

Reading time1 min
Views1.4K
Чтобы порадовать хабрапользователей, мы ввели горячие клавиши на Хабре:

Ctrl + ← (Alt + ←)
    Переход на предыдущую страницу (для страниц с постраничной навигацией)

Ctrl + → (Alt + →)
    Переход на следующую страницу (для страниц с постраничной навигацией)

Alt + R
    Подгрузка новых комментариев (на странице просмотра хабратопика)

Alt + C
    Переход к следующему новому комментарию (на странице просмотра хабратопика)

Если горячие клавиши не заработают, попробуйте сбросить кэш броузера.
Total votes 86: ↑75 and ↓11+64
Comments49

CSS Sprites 2: время Javascript

Reading time11 min
Views4.4K
Ощущение динамики часто являлось тем, что отличало насыщенные Flash-ем сайты от сайтов, основанных на стандартах html. До недавнего времени флэш-интерфейсы всегда казались более живыми, они взаимодействовали с пользователем динамично, и это тот функционал, который остальные сайты не могли просто взять и скопировать.

Конечно, позже состояние дел изменилось — появились эффекты для динамических интерфейсов, поддерживаемые такими JS-библиотеками, как Prototype, Scriptaculous, Moo, YUI, MochiKit (и этот список можно продолжить). Сейчас самое время (через 4 года) вспомнить технику CSS Sprites и посмотреть, сможем ли мы добавить в неё «немного динамики».
Читать дальше →
Total votes 64: ↑50 and ↓14+36
Comments46

jQuery in Action. Глава 1. Введение в jQuery.

Reading time3 min
Views21K
Как я уже писал, я начал читать книгу «jQuery in Action» (авторы Bear Bibeault и Yehuda Katz). В данной серии статей (а я планирую довести дело до конца) я буду выкладывать самые интересные моменты из каждой главы этой книги. Это будут основные идеи, примеры или и то и другое вместе :-)

Читать дальше →
Total votes 97: ↑77 and ↓20+57
Comments28

Перечисления в PHP

Reading time2 min
Views18K
Часто ли вам приходилось сожалеть о том, что в PHP нет перечислений как таковых?

Да, кто-то обходился конвенцией именования и получалось нечто вроде:
define( 'COLOR_RED', 'F00' );
define( 'COLOR_GREEN', '0F0' );
define( 'COLOR_BLUE', '00F' );

Или нечто вроде:
// данную переменную ЗАПРЕЩЕНО модифицировать
$colors = array(
    'red' => 'F00',
    'green' => '0F0',
    'blue' => '00F',
);

Но оба подхода имеют существенные недостатки:
  • В первом случае члены перечисления не образуют явной группировки
  • Во втором случае есть риск что переменная будет изменена
  • И в обоих этих случаях мы не можем делать проверку на тип переменной (type hinting)


Под катом предлагаю решение без вышеописанных недостатков…
Читать дальше →
Total votes 73: ↑54 and ↓19+35
Comments54

Проектирование по контракту

Reading time5 min
Views23K
Два года назад мне посчастливилось побывать на лекции замечательного человека, одного из разработчиков языка Eiffel, Бертрана Мейера. Он читал в нашем университете (СПб ГУ ИТМО) лекцию о довольно интересной концепции проектирования ПО. Называется она «проектирование по контракту». Суть этой концепции я попытаюсь описать ниже.

Вот, например, когда вы с клиентом договариваетесь о совместной работе, то вы заключаете контракт. Т.е. вы описываете обязанности обоих сторон и возможные последствия в случае неожиданных ситуаций. Данный подход можно применить и к разработке ПО, где в качестве сторон выступают программные модули.
Проектирование по контракту является довольно простой, но, в то же время, мощной методикой, основанной на документировании прав и обязанностей программных модулей для обеспечения корректности программы. Я считаю, что корректная программа – это программа, которая выполняет не больше и не меньше того, на что она претендует.
Читать дальше →
Total votes 71: ↑62 and ↓9+53
Comments56

GenericObject

Reading time12 min
Views815
<?php

/**
* Пример реализации Generic-класса
*
* Возможности:
* 1. Осуществляет доступ к параметрам класса через методы get* set* (accessors/mutators)
*     Пример: $object->setName('Dima'); $object->getName();
*     При изменении стандартного поведения метода (добавление дополнительной логики)
*     можно просто определить его в классе при этом не изменяя интерфейс класса.
* 2. Поддерживает встроенную валидацию данных с возможностью использовать или заранее
*     определенные типы данных (numeric, string, email, date и др.)
*     или регулярные выражения.
* 3. Имплементирует паттерн Lazy initialization для инициализации объектов.
*     Позволяет загружать параметры объекта из БД (например) не сразу при инициализации,
*     а только при первом запросе.
*
* Видимые недостатки:
* 1. Отсутствует возможность использовать автокомплит в IDE, так как методы явно не определены
*
* Плюсы:
* 1. Позволяет избежать дублирования кода при определении однотипных методов set и get
* 2. Сокращает код классов и централизует управление параметрами
* 3. При необходимости можно расширить функциональность. Например, добавив callback функции
*     или принудительную фильтрацию данных.
* 4. Избавляет от рутинных обязанностей проверки входящих данных, тем самым
*     обеспечивая некоторый уровень безопасности.
*     Это совсем не дает 100% гарантии — не стоит забывать об этом.
* 5. Не вносит коррективы в интерфейс классов. Можно легко сочетать обычные классы и классы
*     наследующие GenericObject без видимых различий для клиентов класса. При необходимости
*     можно легко отказаться от использования просто переопределив все гетеры и сетеры.
* 6. Упрощает работу с классами, предоставляя удобный и естественный способ
*     инициализации объектов:
*     $obj1 = new Class(123);
*     $obj2 = new Class(array(
*         'param1' => 'value1',
*         'param2' => 'value2')
*     ));
*/


Далее код реализации и пример использования
Total votes 113: ↑76 and ↓37+39
Comments56

Использование связки из PHP и MySQL совместно с Google Maps

Reading time13 min
Views17K

Отсебятина


А вот и перевод третьего урока по Google Maps API. Этот урок — как видно из названия — посвящен созданию карт при помощи данных, хранящихся в БД. Как и предыдущие — кросс-пост из моего блога.

Читать дальше →
Total votes 53: ↑44 and ↓9+35
Comments23

Работа с веб-серверами на php посредством SOAP

Reading time2 min
Views57K
Не буду останавливаться на вопросе, что такое веб-сервисы и зачем они нужны. В сети очень много статей на эту тему. Просто постараюсь вкратце показать, каким простым способом возможно создание клиента к любому веб-сервису на php.
Читать дальше →
Total votes 53: ↑34 and ↓19+15
Comments23

wysiwyg своими руками

Reading time3 min
Views24K
Существует куча платных\бесплатных визуальных редакторов на любой вкус и цвет. Но что, если они работают не во всех браузерах, Вас не устраивает дизайн или функциональность, или просто душа лежит к написанию своего собственного? Ответ на вопрос, как это сделать —
Читать дальше →
Total votes 70: ↑61 and ↓9+52
Comments47

PHP Конференция 2007 — о чем хотят услышать(рассказать) веб-разработчики в 2007

Reading time1 min
Views1.1K
О чем я хочу услышать (рассказать) на PHP Conf 2007?

Из уже заявленных докладов:
  • PHP/MapScript и MapServer, Публикация картографических данных с помощью PHP в WEB
    PHP & Flash, новая альтернатива для создания Rich Internet Applications
    XForms — новое поколение веб-форм
    WAP (WAP 1.1, WAP 2.0, I-mode, юзабитити WAP сайтов, личный опыт)
    WEB службы снаружи и изнутри
    Технические и маркетинговые аспекты поисковой оптимизации сайтов

    подробности здесь: phpclub.ru/talk
Total votes 20: ↑17 and ↓3+14
Comments29

Wapnest – бесплатный wap-обменник нового поколения

Reading time1 min
Views8.3K

Основной целью Wapnest является загрузка файлов с компьютера в телефон, не используя при этом кабеля или Bluetooth. Все просто: выбираешь файл, закачиваешь его в обменник, получаешь код для загрузки и любой по этому коду может забрать файл с wap.wapnest.ru.
Кроме этого можно заливать файлы в приватную зону, где только владелец может просматривать и скачивать их.
Читать дальше →
Total votes 41: ↑34 and ↓7+27
Comments45

Что PHP может узнать о браузере посетителя?

Reading time3 min
Views30K

О чем это?


Возможно ли узнать более детальную информацию о браузере посетителя кроме строки, содержащейся в $_SERVER[«HTTP_USER_AGENT»]: поддерживает ли яву, апплеты, таблицы стилей и фреймы? А может это вообще гуглобот зашел?
Читать дальше →
Total votes 104: ↑73 and ↓31+42
Comments33

Выдаем тикеты при кешировании

Reading time1 min
Views688
Системы кеширования, с которыми я сталкивался, разработаны по принципу: задай объекту Cache параметры кеширования и работай с объектом Cache. До определенного времени меня устраивала подобная работа с кешем. Однако время не стоит на месте и однажды мне понадобился более удобный способ работы с кешем. В итоге появилась собственная реализация, основанная на тикетах. Суть ее состоит в том, что надо у объекта Cache запрашивать тикет, у тикета уже выставлять параметры (ключ, префикс и т.п.), и тикет должен уметь сохранять данные и извлекать их из кеша.
Это решило проблемы конфликтов при кешировании, когда кто-то начал работать с объектом Cache, выставлял какие-то параметры и передавал управление в метод, который тоже работает с кешем. Появилась возможность обмениваться тикетами.

Реализация для PHP, кеш ориентирован на хранение и извлечение данных из файловой системы: code.google.com/p/ewgra/source/browse/#svn/trunk/cache
Total votes 11: ↑8 and ↓3+5
Comments12

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity