Дмитрий @depp
User
Как FriendFeed использует MySQL для хранения данных без схемы
7 min
3.3KTranslation
Условия
Мы используем MySQL для хранения любых данных FriendFeed. Наша база данных растёт вместе с числом пользователей. Сейчас у нас более 250 миллионов записей, это записи пользователей (post'ы), комментарии, оценки («likes»)
По мере того как росла база данных, мы время от времени имели дело с проблемами масштабируемости. Мы решали проблемы стандартными путями: slave-сервера, используемые только для чтения, memcache для увеличения пропускной способности чтения и секционирование для увеличения пропускной способности записи. Однако, по мере роста, использованные методы масштабируемости привели к затруднению добавлению новой функциональности.
В частности, изменение схемы базы данных или добавление индексов к существующим 10-20 миллионов записей приводили к полной блокировке сервера на несколько часов. Удаление старых индексов требовало времени, а не удаление ударяло по производительности, так как база данных продолжала использовать их на каждом INSERT. Существуют сложные процедуры с помощью которых можно обойти эти проблемы (например создание нового индекса на slave-сервере, и последующий обмен местами master'a и slave), однако эти процедуры настолько тяжелые и опасные, что они окончательно лишили нас желания добавлять что-то новое, требующее изменение схемы или индекса. А так как наши базы сильно распределены, реляционные вещи MySQL как например JOIN никогда не работали для нас. Тогда мы решили поискать решение проблем, лежащее вне реляционных баз данных.
Существует множество проектов, призванных решить проблему хранения данных с гибкой схемой и построением индексов на лету (например CouchDB). Однако, по-видимому ни один из них не используется крупными сайтами. В тестах о которых мы читали и прогоняли сами, ни один из проектов не показал себя стабильным, достаточно зрелым для наших целей (см. this somewhat outdated article on CouchDB, например). А все это время MySQL работал. Он не портил данные. Репликация работала. Мы уже в достаточной мере понимали все его узкие места. Нам нравился MySQL именно как хранилище, вне реляционных шаблонов.
Все взвесив, мы решили создать систему хранения данных без схемы поверх MySQL, вместо использования полностью нового решения. В этой статье я попытаюсь описать основные детали системы. Так же нам любопытно как другие сайты решили эти проблемы. Ну и мы думаем, что наша работа будет полезна другим разработчикам.
+104
Разработка Ленты, борьба с Ощущением раздутости («Почему» Интерфейса, часть 3)
5 min
2.9KTranslation
Было:

Стало:

От себя: лента, лента, лента, лента. Она великолепна.
Автор — Дженсен Харис, Director of Program Management for the Microsoft Windows User Experience Team. (Подскажите адекватный перевод.)
Это вторая часть в моей серии из восьми статей, в которых я укажу на некоторые причины, которые побудили нас принять решении о создании нового пользовательского интерфейса в Офисе 2007.

Стало:

От себя: лента, лента, лента, лента. Она великолепна.
Автор — Дженсен Харис, Director of Program Management for the Microsoft Windows User Experience Team. (Подскажите адекватный перевод.)
Это вторая часть в моей серии из восьми статей, в которых я укажу на некоторые причины, которые побудили нас принять решении о создании нового пользовательского интерфейса в Офисе 2007.
+52
Как создать приложение на iPhone не имея Mac OS Х и SDK?
2 min
48K
Я всегда хотел попробовать себя в таком деле, как написание приложений для iPhone. Пусть для начала оно было простым, как «Hello world!», но зато написанное своими руками. Тем более платформа iPhone OS стала очень популярна, и большинство разработчиков отдают предпочтение именно ей. Но как говорится — мои желания не совпадают с моими возможностями. SDK доступен только для маков, а возможности купить мак у меня нет — дорогой. Но в интернете, случайно, узнал об одном сервисе о котором я расскажу далее.
+30
Компьютерная фирма — о рекламе
13 min
1.6KНа Хабре уже не раз были статьи о рекламе, её правильности, неправильности, эффективности и убыточности. Имея в данном вопросе определённый опыт в малом бизнесе, решил оным и поделиться. Для кого эта тема является наболевшей – милости прошу под кат.
+78
Как организовать работу с заказчиками из других городов?
4 min
19K
Привет.
За последнее время к нам в консультацю стало поступать много вопросов, ответы на которые будут интересны индивидуальным предпринимателям и небольшим организациям. Вначале мы хотели сделать «Юридический FAQ», но потом поняли, что информации собралось очень много и в обычный FAQ она не поместится. Поэтому мы создали этот блог, где будем доступным языком рассказывать о некоторых моментах ведения малого бизнеса и обо всем новом, что происходит на нашем сервисе Мое Дело.org
Сегодня топик будет о том, как грамотно организовать работу с заказчиками, находящимися в других городах.
+32
Два протокола управления проектами
5 min
5.3KДоброго времени суток.
Я пришел в управление проектами из программирования. То есть, нет так давно, я еще писал код и мне это очень нравилось. Меня мало беспокоили волнения, происходящие где-то на верху — «у менеджеров». Все поменялось в 2004, когда меня назначили тим лидом.
Это был большой и сложный проект. Мы работали как удаленная офшорная группа в постоянной атмосфере прессинга со стороны менеджмента. Оценки задач спускались сверху, и чтобы хоть как-то справиться с задачами, приходилось работать до позднего вечера и по выходным.
Тогда я начал задумываться о причинах такой ситуации, начал читать посты и книги по менеджменту. Как программист, находящийся под впечатлением революционных архитектурных решений — таких, как MVC и паттерны Фоулера, я полагал, что есть *техническое* решение наших проблем с менеджментом — нужно его только отыскать и применить.
Следующие несколько лет я искал *супер фреймворк* для управления проектами. Но только недавно понял, что его нет и быть не может. Проблема заключается в том, что в разработке ПО одновременно используются 2 конфликтующих протокола общения между участниками Процесса.
Сейчас я расскажу о моем текущем видении проблемы, а также опишу одну из возможных стратегий совместного использования этих двух протоколов.
Я пришел в управление проектами из программирования. То есть, нет так давно, я еще писал код и мне это очень нравилось. Меня мало беспокоили волнения, происходящие где-то на верху — «у менеджеров». Все поменялось в 2004, когда меня назначили тим лидом.
Это был большой и сложный проект. Мы работали как удаленная офшорная группа в постоянной атмосфере прессинга со стороны менеджмента. Оценки задач спускались сверху, и чтобы хоть как-то справиться с задачами, приходилось работать до позднего вечера и по выходным.
Тогда я начал задумываться о причинах такой ситуации, начал читать посты и книги по менеджменту. Как программист, находящийся под впечатлением революционных архитектурных решений — таких, как MVC и паттерны Фоулера, я полагал, что есть *техническое* решение наших проблем с менеджментом — нужно его только отыскать и применить.
Следующие несколько лет я искал *супер фреймворк* для управления проектами. Но только недавно понял, что его нет и быть не может. Проблема заключается в том, что в разработке ПО одновременно используются 2 конфликтующих протокола общения между участниками Процесса.
Сейчас я расскажу о моем текущем видении проблемы, а также опишу одну из возможных стратегий совместного использования этих двух протоколов.
+70
Что такое генетический алгоритм?
1 min
24KВ рамках проекта Computer Science Student сегодня я постараюсь дать короткое наглядное объяснение: что такое генетический алгоритм? В самой простой и общей формулировке для решения самой простой задачи. Исходные коды решения (код не самый качественный, потому что писался на скорую руку; но код и не важен в этом курсе) и текст самих заданий доступен на CS-Student Wiki.
Первая часть
Вторая часть — под катом.
Первая часть
Вторая часть — под катом.
+68
Netsukuku — свой собственный интернет
5 min
67K
В последнее время в хабрасообществе довольно активно обсуждаются темы, связанные с пиратством, закручиванием правительствами всевозможных гаек и прочим беспределом. Обсуждаются варианты противодействия политике контроля, цензуры и деанонимизации сети.
Странно, что на всем этом фоне не было ни одного поста о таком занимательном проекте, как Netsukuku. Цель которого, ни много ни мало — построить свой интернет с шахматами и администраторшами.
Бред? Не совсем.
+195
Простое применение DataTemplate
4 min
24KДобрый день.
Для меня, моя жизнь как программиста, делится на два этапа. До того как я познакомился с WPF, и после. Мне пришлось очень плотно работать с этой технологией в рамках одного проекта, в результате чего я приобрёл некоторые знания, которыми хочу с вами поделиться. То что написано ниже, не откровения, и для тех кто знаком с WPF может показаться банальностью. Всё это описано в сети, в том или ином виде, проще или сложнее, но есть у всех этих описаний одна особенность — английский язык. Поэтому я приведу ниже очень короткий, но как мне кажется ёмкий пример того, что можно сделать при помощи Data Templates. Особенно этот пример будет интересен тем, кто только посматривает в сторону WPF.
Для меня, моя жизнь как программиста, делится на два этапа. До того как я познакомился с WPF, и после. Мне пришлось очень плотно работать с этой технологией в рамках одного проекта, в результате чего я приобрёл некоторые знания, которыми хочу с вами поделиться. То что написано ниже, не откровения, и для тех кто знаком с WPF может показаться банальностью. Всё это описано в сети, в том или ином виде, проще или сложнее, но есть у всех этих описаний одна особенность — английский язык. Поэтому я приведу ниже очень короткий, но как мне кажется ёмкий пример того, что можно сделать при помощи Data Templates. Особенно этот пример будет интересен тем, кто только посматривает в сторону WPF.
+14
Javascript для Notepad++
4 min
32KЗдравствуй Храбрачеловек,
сегодня я решил поделиться с тобой Plugin'ом для Notepad++, который позволит тебе спомощью JavaScript автоматизировать некоторые действия над текстом
сегодня я решил поделиться с тобой Plugin'ом для Notepad++, который позволит тебе спомощью JavaScript автоматизировать некоторые действия над текстом
+40
Перегрузка функций в JS
4 min
57KКак известно, в JavaScript нельзя создать несколько функций, различающихся только списком параметров: последняя созданная перезапишет предыдущие. Про различие на уровне типов параметров говорить не приходится вообще. Обычно, если программист хочет создать функцию с множественным интерфейсом, он пишет что-то вроде такого:
Пока пример выглядит не очень страшно, однако интерфейсов может со временем стать заметно больше, тогда функция станет плохочитаема. Посмотрим, что можно с этим сделать.
- // getRectangleArea(x1, y1, x2, y2) или
- // getRectangleArea(width, height)
- function getRectangleArea(x1, y1, x2, y2) {
- if(arguments.length==2) return x1*y1;
- return (x2-x1)*(y2-y1);
- }
* This source code was highlighted with Source Code Highlighter.
Пока пример выглядит не очень страшно, однако интерфейсов может со временем стать заметно больше, тогда функция станет плохочитаема. Посмотрим, что можно с этим сделать.
+92
Mantis + Subversion у себя на компьютере с Windows XP. Пошаговая инструкция для удобной организации работы с кодом
6 min
5.7K
Исторически сложилось, что багтрекер в нашей команде – это Mantis. Для работы над ошибками очень хорошая и простая в обучении система. Буквально садись и работай. Но для удобной организации работы ей явно не хватает связки с Subversion. В связке Subversion+Mantis помогают организовать работу с кодом небольшой команды программистов. Более подробно про организацию работы у нас я описал в прошлой статье.
А сейчас давайте поговорим, как установить Subversion у себя на компьютере и связать его с Mantis на сервере.
+38
Формы в Zend Framework
6 min
13KTranslation
Меня часто спрашивают, какой мой любимый компонент в Zend Framework, и я всегда отвечаю: «Forms» (формы).
В парадигме модель-представление-контроллер формы всегда играют непростую роль. Конечно, форма — это всего лишь HTML,
но для меня это нечто более абстрактное.
По сути, форма — это HTML, средствами которого пользователь вводит и получает данные, но кроме этого форма еще выполняет
нормализацию, проверку, фильтрацию данных и вывод сообщений об ошибках, если они есть.
Это может потребовать довольно-таки значительного объема кода.
В парадигме модель-представление-контроллер формы всегда играют непростую роль. Конечно, форма — это всего лишь HTML,
но для меня это нечто более абстрактное.
По сути, форма — это HTML, средствами которого пользователь вводит и получает данные, но кроме этого форма еще выполняет
нормализацию, проверку, фильтрацию данных и вывод сообщений об ошибках, если они есть.
Это может потребовать довольно-таки значительного объема кода.
+16
Превью API Яндекс.Бара для разработчиков: Яндекс.Бар с вашими кнопками
2 min
8.1KНезависимые разработчики, веб-мастера и владельцы интернет-ресурсов! Эта версия Яндекс.Бара для вас.
Разрабатывая Яндекс.Бар, мы всегда думали, что реализации достойны компоненты всех сервисов, пусть не самых популярных, но интересных вам и вашим пользователям. Что кнопки на панели Яндекс.Бара должны уметь работать не только с сервисами Яндекса, но и с вашими любимыми сайтами вне портала. Что установка новых кнопок не должна вынуждать вас переставлять Бар целиком.

В результате наших размышлений и работы над ними, в новой версии Яндекс.Бара 5.0 Beta появился язык описания пользовательски кнопок и поддерживающий его API. Эта связка зовется «xButton».
xButton — это возможность разместить свою кнопку в миллионах браузеров пользователей Яндекс.Бара. Любой желающий может написать свою кнопку или набор кнопок и предложить его другим пользователям.
Разрабатывая Яндекс.Бар, мы всегда думали, что реализации достойны компоненты всех сервисов, пусть не самых популярных, но интересных вам и вашим пользователям. Что кнопки на панели Яндекс.Бара должны уметь работать не только с сервисами Яндекса, но и с вашими любимыми сайтами вне портала. Что установка новых кнопок не должна вынуждать вас переставлять Бар целиком.

В результате наших размышлений и работы над ними, в новой версии Яндекс.Бара 5.0 Beta появился язык описания пользовательски кнопок и поддерживающий его API. Эта связка зовется «xButton».
xButton — это возможность разместить свою кнопку в миллионах браузеров пользователей Яндекс.Бара. Любой желающий может написать свою кнопку или набор кнопок и предложить его другим пользователям.
+29
LogParser — привычный взгляд на непривычные вещи
5 min
58KКогда я в очередной раз использовал LogParser, то чтобы проникнуться и чужим опытом, ввел его название в поиск на Хабре. Как результат — сообщение «Удивительно, но поиск не дал результатов». Вот уж воистину удивительно, когда столь интересный инструмент обойден вниманием. Пришла пора восполнить этот пробел. Итак, встречайте LogParser. Маленькая, но чертовски полезная утилита для любителей SQL.
Из названия инструмента, казалось бы, очень непросто понять, что он делает в разделе SQL. А правда заключается в том, что он такой же LogParser, как и ChartGenerator. В то смысле, что он справляется с обоими задачами с одинаковыми успехом. В целом я бы его охарактеризовал как SQL-процессор гетерогенных данных. Концепция работы в общем такова, что он берет данные из некоторого формата и преобразует их в табличный вид (собственно говоря, только на этом этапе и выполняется иногда парсинг). Затем, посредством выполнения над этими табличными данными некоторого SQL-запроса формирует таблицу с результатом и сохраняет ее опять же в некотором формате. Если коротко, то цепочка выглядит как подготовка входных данных->SQL-процессинг->генерация выходных данных.
Из названия инструмента, казалось бы, очень непросто понять, что он делает в разделе SQL. А правда заключается в том, что он такой же LogParser, как и ChartGenerator. В то смысле, что он справляется с обоими задачами с одинаковыми успехом. В целом я бы его охарактеризовал как SQL-процессор гетерогенных данных. Концепция работы в общем такова, что он берет данные из некоторого формата и преобразует их в табличный вид (собственно говоря, только на этом этапе и выполняется иногда парсинг). Затем, посредством выполнения над этими табличными данными некоторого SQL-запроса формирует таблицу с результатом и сохраняет ее опять же в некотором формате. Если коротко, то цепочка выглядит как подготовка входных данных->SQL-процессинг->генерация выходных данных.
+36
Безопасная авторизация с передачей хешированного пароля
4 min
30KПри разработке одного проекта, появилась задача осуществить защиту в случае просмотра трафика, и просмотра исходника (могут узнать хеш пароля) злоумышленниками. Имея доступ ко всем данным, никто не должен авторизоваться на сервере, не зная исходный пароль. Варианты подмены IP адреса, получение пароля непосредственно в момент ввода (keylog), или брутфорс исключаем, это уже не забота веб сайта.
Пароль по сети передаваться не будет, поэтому используется хеширование прямо в браузере, для этого использую небольшую библиотеку JavaScript SHA-1. Почему SHA-1, а не, допустим, MD5? Считается, что SHA-1 немного надежнее, да и сама JavaScript библиотека меньше, чем аналогичная (на том же сайте) для MD5.
Пароль по сети передаваться не будет, поэтому используется хеширование прямо в браузере, для этого использую небольшую библиотеку JavaScript SHA-1. Почему SHA-1, а не, допустим, MD5? Считается, что SHA-1 немного надежнее, да и сама JavaScript библиотека меньше, чем аналогичная (на том же сайте) для MD5.
+3
Эмуляция NES (Dendy) на Flash
2 min
2.6K
Представляю Вам первый в своем роде проект в интернете, позволяющий эмулировать NES ROMs на Flash.
Встречайте www.nesbox.com! На сайте собрана коллекция из 1804 игр! (мне в детстве такое и не снилось.
+107
Представления (VIEW) в MySQL
10 min
482KВ комментариях Хабра упоминались вопросы по использованию представлений. Данный топик является обзором представлений, появившихся в MySQL версии 5.0. В нем рассмотрены вопросы создания, преимущества и ограничения представлений.
Представление (VIEW) — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению.
Представления иногда называют «виртуальными таблицами». Такое название связано с тем, что представление доступно для пользователя как таблица, но само оно не содержит данных, а извлекает их из таблиц в момент обращения к нему. Если данные изменены в базовой таблице, то пользователь получит актуальные данные при обращении к представлению, использующему данную таблицу; кэширования результатов выборки из таблицы при работе представлений не производится. При этом, механизм кэширования запросов (query cache) работает на уровне запросов пользователя безотносительно к тому, обращается ли пользователь к таблицам или представлениям.
Что такое представление?
Представление (VIEW) — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению.
Представления иногда называют «виртуальными таблицами». Такое название связано с тем, что представление доступно для пользователя как таблица, но само оно не содержит данных, а извлекает их из таблиц в момент обращения к нему. Если данные изменены в базовой таблице, то пользователь получит актуальные данные при обращении к представлению, использующему данную таблицу; кэширования результатов выборки из таблицы при работе представлений не производится. При этом, механизм кэширования запросов (query cache) работает на уровне запросов пользователя безотносительно к тому, обращается ли пользователь к таблицам или представлениям.
+103
Ведический подход к работе фрилансером
3 min
5KБудет полезно начинающим, еще не окрепшим фрилансерам с неустоявшимся подходом к клиентам. Сразу скажу, что данная статья — не оплот фен-шуя и прочей, непочитаемой it-сообществом ерунды. Здесь изложен естественный логический подход к жизни, в частности к отношениям с клиентами.
+42
Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Registered
- Activity