Search
Write a publication
Pull to refresh
0
0
Alexznadr @Alexznadr

User

Send message

Do It Yourself Java Profiling

Reading time17 min
Views61K
На прошедшей конференции Appication Developer Days, Роман Елизаров (elizarov) рассказал, как профилировать, т.е. исследовать производительность любых Java-приложений, без использования специализированных инструментов, будь они хоть вендорские, хоть open-source.Оказывается, можно использовать малоизвестные, встроенные в JVM возможности (threaddumps, java agents, bytecode manipulation), и быстро и эффективно реализовать профилирование, которое можно запускать постоянно даже на боевой системе.Вот видео доклада (тут оно косолапо эмбедится, но оно 1280x720, все отлично читаемо):

Но я предлагаю также, взглянуть на 70K текста иллюстрированной статьи-стенограммы под катом, составленной мной по видео и слайдам.
Статья-стенограмма. Многобукв.

Редактирование древовидных структур с SonataAdminBundle в Symfony2

Reading time9 min
Views14K
Редактирование древовидных структур — довольно частая задача в веб-разработке. Это очень удобно пользователю, поскольку дает ему возможность создавать любые иерархии у себя на сайте. Естественно, что после перехода на Symfony2, одной из первых задач стало создание такого иерархического списка страниц и написание админки к нему. А так как в качестве админки я использую SonataAdminBundle, то задача сводилась к настройке его для редактирования деревьев.
Читать дальше →

Масштабируем CSS спрайты с SVG, убивая сразу трех зайцев

Reading time6 min
Views66K
Привет, Хабр.
Сразу хочу отметить, что если мы говорим об иконках, их можно масштабировать двумя способами (других я просто не знаю): конвертировать иконки в шрифт и подключать их через @font-face, либо использовать SVG в качестве формата для этих иконок.

Немного отойду от темы и расскажу предысторию.

Предыстория


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

Я давай проверять, везде ли все красиво выглядит. Оказалось, что не все так хорошо как хотелось бы, потому как в некоторых размерах иконки выглядели кособокими, а при отключенном сглаживании вообще противно смотреть на них стало. Что делать? Использовать второй вариант — SVG, о чем и пойдет речь.
Подробно о создании CSS спрайтов с SVG

Искусство переговоров — это просто бизнес, ничего личного

Reading time11 min
Views57K
Неожиданным результатом публикации предыдущей статьи стало то, что многие из моих знакомых, коллег и друзей прочитали указанную в ней книгу. За этим последовали интересные дискуссии в скайпе. Я понял, что люди часто рассматривают один и тот же вопрос под разными углами и делают выводы отличные от моих, но не менее ценные. Данный пост написан не только с целью поделиться знаниями и опытом освоения искусства переговоров, но и с надеждой на то, что с помощью читателей мне откроются идеи, которых самому узреть не удалось.

Итак, сегодня я хочу поговорить о книге профессора Гэвина Кеннеди «Договориться можно обо всём» и о том, как навык ведения переговоров помогает в профессиональной деятельности и повседневных активностях. Саму книгу я прочитал довольно давно, но только сейчас накопилось достаточное количество ярких примеров того, что указанные в ней практические советы эффективны и действуют почти безотказно.

Читать дальше →

Что значат для вас юнит-тесты?

Reading time5 min
Views8K
С технической точки зрения юнит-тесты – это очень простой инструмент, основанный на паре несложных концепций: (1) тестируемый класс, (2) набор тестовых методов, завернутых в некоторый класс и (3) набор методов, с помощью которых можно удостовериться в том, что состояние тестового класса соответствует (или не соответствует) некоторому значению.

Это очень простая штуковина, которая может кардинальным образом повлиять на процесс разработки в целом. С одной стороны существует TDD (“test-first approach"), при котором тесты «драйвят» не только процессом кодирования, но и процессом проектирования (т.е. дизайном системы). С другой стороны существуют разработчики с противоположной точкой зрения, которые считают юнит-тесты пустой тратой времени, потому что они не приносят никакой ценности пользователю.

Читать дальше →

Кластерные и «обычные» индексы MySQL (InnoDB)

Reading time5 min
Views142K
Все мы помним хрестоматийное объяснение «что такое индексы в БД и как они облегчают задачи поиска нужных строк». Уверен, у большинства из вас перед глазами встаёт нечто подобное:

Некластерный индекс

И сразу становится очевидно, насколько меньше данных нужно перелопатить для поиска двух-трёх нужных строк. Гениально. Просто. Понятно.

И лично мне всегда казалось, что улучшать эту схему некуда… Пока я не познакомился с кластерными индексами. Оказалось, что всё не так уж радужно с «обычными» индексами.

Итак, что же такое кластерный индекс, чем он лучше некластерного, и как с ним обстоит дело у MySQL.
Читать дальше →

Клиентская аналитика: Большой Брат знает, что ты купишь завтра и когда сменишь провайдера

Reading time4 min
Views37K
Если вы знаете, что один из ваших клиентов завтра проснётся с мыслью о покупке нового планшета — можно уже сегодня прислать ему письмо с кодом на скидку. Если вы понимаете, что по всем признакам клиент собирается перейти к другому провайдеру, можно повысить ему скорость, снизить цену или предложить что-то ещё. Это клиентская аналитика.

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

Именно так выглядит Data Mining в клиентской аналитике. И именно так это уже работает на практике в сотнях крупных компаний по всему миру и в нашей стране.



Читать дальше →

Модуль nginx для борьбы с DDoS, ставим cookie через Flash

Reading time4 min
Views10K
После публикации статьи о модуле nginx, предназначенном для борьбы с ботами я получил множество откликов, в которых люди спрашивали о поддержке Flash.
Я был уверен, что при должных усилиях желающие могли реализовать эти функции самостоятельно, как сторонние приложения, без изменения кода самого модуля, но никто этого не сделал, поэтому пришлось сделать PoC.
Читать дальше →

Как и почему мы меняли конфигурацию шардов в архитектуре Evernote

Reading time4 min
Views5.8K
В прошлогоднем обзорном посте, посвященном архитектуре Evernote, мы дали общее описание серверов — “шардов”, которые используем и для хранения данных и для логики приложений. Поскольку Evernote — более персональный сервис, чем, скажем, социальная сеть, то мы можем легко разнести данные отдельных пользователей по различным шардам, чтобы обеспечить достаточно простую линейную масштабируемость. Каждая пара таких шардов управляет двумя виртуальными машинами:

image

Каждая из этих виртуальных машин хранит транзакционные “метаданные” в базе данных MySQL на массиве RAID-1 из пары 300-гигабайтных дисков Cheetah со скоростью вращения шпинделя 15000 rpm. Отдельный массив RAID-10 из 3-терабайтных дисков Constellation (7200 rpm) разбит на разделы для хранения больших файлов текстового поискового индекса Lucene для каждого пользователя. Спаренные виртуальные машины дублируют каждый из этих разделов от текущей основной к текущей дополнительной машине с помощью синхронного DRBD.
Читать дальше →

Три причины использовать ключевые слова широкого соответствия в кампаниях Google AdWords (перевод)

Reading time4 min
Views14K
Автор — Бриттани Бислак

Оригинал

— Эта статья является очередным доказательством простой истины — многообразие настроек рекламной кампании стремится к бесконечности, но лишь опыт покажет, какие подойдут именно вам. (iConText)

Распространено заблуждение, что использование ключевых слов широкого соответствия в кампаниях AdWords приводит к неконтролируемым тратам и некачественному трафику. Однако при грамотном использовании, они могут стать наиболее успешными словами в рамках кампании. Нужны ли вашим AdWords-кампаниям ключевые слова широкого соответствия? Вот три причины, почему вам следует об этом задуматься:
Читать дальше →

Language Oriented Programming (LOP) в действии

Reading time9 min
Views3.4K


В продолжении предыдущей публикации по теме Domain Driven Design, где Николай Гребнёв последовательно свёл тему проектирования при помощи DDD к необходимости использования языка предметной области, — в данной публикации будет обсуждаться практика проектирования и разработки как самих языков, так и программирование на них (опыт компании JetBrains).

Доклад smax Максима Мазина с прошлогодней конференции архитекторов ПО Application Developers Days

Видео доклада:




Скачать

ftp.linux.kiev.ua/pub/conference/peers/addconf/2011/1a1-language-oriented-programming-mazin.avs.avi

Презентация




docs.google.com/present/view?id=dccwwvbq_729dxjj82gc

Текстовка доклада (выполнена Belonesox)



Читать дальше →

Многозадачность в микроконтроллерах на основе продолжений

Reading time8 min
Views27K
Программисты C и так не избалованы возможностями языка, а разработчики встроенных систем на микроконтроллерах ограничены еще больше, зачастую их программы работают на голом железе, без поддержки ОС.
Возможность использования в С сопрограмм, генераторов, кооперативной многозадачности часто может сильно упростить программу и сэкономить силы, но эти возможности языка не очевидны и многие про них не знают.
Продолжения (contionuation) позволяют запомнить состояние выполнения программного потока (функции), и вернуться к этому месту в дальнейшем.
Используя продолжения, мы можем получить сопрограммы (coroutine), а это уже практически готовые генераторы, итераторы и кооперативная многозадачность.
Читать дальше →

Статистический анализ проектных оценок, или почему правильные оценки всегда превышаются

Reading time8 min
Views6.9K
В своей работе мне постоянно приходится делать оценки для проектов, задач и работ, которые еще только предстоит выполнить, и поэтому точно измерить их невозможно. Недавно один из крупных клиентов Аксенчер, обратился в нашу компанию с просьбой помочь в разработке более систематизированной методики подготовки таких оценок. Проект так и не случился, но материалы, которые я собрал, оказались чрезвычайно полезными для меня самого. Я смог понять, почему, несмотря на планирование проектов по аккуратно выверенным оценкам, люди почти всегда превышают бюджет. Понял, что, гарантируя вписаться в бюджет с вероятностью в 95%, подрядчики гарантируют, что с вероятностью 95% им столько времени и денег не нужно. Ниже я описал свои выкладки, которые, возможно, вас тоже заинтересуют.
Читать дальше →

Введение в CSS3 Multicolumn. Работаем с колонками

Reading time8 min
Views68K
apples

Как расположить текст на странице в несколько колонок? И можно ли это делать автоматически? Наверняка, многие из тех из вас, кто занимается или занимался раньше веб-разработкой, сталкивались с такой задачей — и часто упирались в сложные решения, требующие хитрых стилей, либо применения дополнительных библиотек на JavaScript (см. например Columnizer-плагин для jQuery).

Многоколоночная верстка контента (не путать с задачей общей многоколоночной верстки страницы, которая скорее ближе к проблеме расположения блоков по сетке) долго пробивала себе дорогу в мире веб-стандартов и, наконец-то, не просто достигла статуса Candidate Recommendation в виде соответствующего модуля CSS3 Multi-column Layout, но и получила достаточно широкую поддержку в браузерах: где-то с префиксами (-moz- или -webkit-) и где-то в актуальных (Opera 11.1+) и планируемых версиях (IE10+), причем сразу без префиксов.
Читать дальше →

Новая программа Facebook Preferred Marketing Developer

Reading time2 min
Views3.1K
На протяжении последних трех лет наши две программы, Preferred Developer Consultant (PDC) (Признанные специалисты по разработке приложений) и Marketing API Program (MAP) (Программа маркетинговых API), помогали компаниям находить разработчиков для создания приложений под платформу Facebook, оптимизировать социальные плагины, управлять рекламными кампаниями и разрабатывать стратегии общения с аудиторией посредством Страниц Facebook. Сегодня мы хотим сообщить вам о слиянии двух вышеуказанных программ в одну, которая будет называться Preferred Marketing Developer (PMD) (Признанный специалист по разработке маркетинговых решений). Программа PMD поможет разработчикам находить себе клиентов, а компаниям привлекать консультантов для реализации рекламных кампаний и эффективного представления своего бренда в Facebook.

image

В этом году мы зафиксировали рекордное число желающих принять участие в наших программах. Список новых членов программы PMD, ранее не участвовавших в PDC или MAP, включает в себя 141 компанию из 20 стран мира. Всего же в программе PMD зарегистрированы 232 компании из 35 стран мира.
Новая программа PMD поможет разработчикам:
  • Находить нужную информацию при помощи новых инструментов поиска, которые придут на смену справочникам PDC и рекламных API. Клиенты смогут искать разработчиков по критериям месторасположения и опыта работы, а также видеть их реализованные проекты и отзывы заказчиков.
  • Отображать на своей странице имеющийся опыт работы с приложениями и сервисами Pages, Ads и Insights. Указанная информация будет использоваться механизмами поиска PMD, благодаря чему потенциальные клиенты смогут быстрее находить подходящих специалистов.
  • Получать более подробную информацию о целях и внутреннем устройстве программы при помощи обновлённого сайта для разработчиков
  • Экономить время при регистрации, благодаря применению новой унифицированной формы заявки. Теперь разработчики могут подавать заявку на вступление в любой удобный момент, а не ждать наступления периодов приёма.

Читать дальше →

Размеры массивов в Java

Reading time2 min
Views32K
Размеры объектов в Java уже обсуждались на Хабре, например, здесь или здесь. Мне бы хотелось подробнее остановиться на размерах многомерных массивов — простая вещь, которая для меня стала неожиданной.

Оптимизируя вычислительный алгоритм по памяти, я наткнулся на то, что при определённых (вполне разумных) входных параметрах создаётся массив float[500][14761][2]. Сколько он может занимать в памяти (на HotSpot 1.6.0_26 32bit, если кому интересно)? Я примерно прикинул, что 500*14 761*2*sizeof(float) = 500*14 761*2*4 = 59 044 000 байт плюс какой-то оверхед. Решив проверить, как на самом деле, я воспользовался Eclipse Memory Analyzer (невероятно волшебная вещь, рекомендую!) и обнаружил, что «Retained Heap» для этого массива составляет 206 662 016 байт! Неплохой оверхед — 350%. Посмотрим, почему так получилось.
Читать дальше →

Нахождение максимальной общей подпоследовательности

Reading time6 min
Views50K
В настоящей статье я хотел бы сделать обзор популярных алгоритмов для решения задачи нахождения максимальной общей подпоследовательности или LCS (longest common sequense). Так как акцент сделан на обучении, а не на реальном использовании, в качестве языка для реализации выбран Python, что позволит сократить количество кода и сконцентрироваться на основных идеях.
Читать дальше →

TeamLab: прогулка по каналам продвижения, или как мы создавали social buzzz

Reading time5 min
Views10K
Когда мы рассказывали о нашей системе переводов, нас попросили написать и о том, как идет продвижение TeamLab, в особенности, на зарубежные рынки. Сегодня попробуем. Были и взлеты и падения, шли очень часто методом проб и ошибок, но любой опыт бесценен, вот им и поделимся, может, кому пригодится. Не будем писать умных, и уже ставших банальными, советов про SEO, Adwords и прочее, постараемся быть по максимуму конкретными.



Итак, выжимка из основных методов привлечения новых пользователей и укрепления лояльности уже существующих, которые успешно срабатывают для нашего проекта и по сей день:
Читать дальше →

Три ключевых принципа ПО, которые вы должны понимать

Reading time13 min
Views241K

Разрабатывая приложения, мы постоянно сталкиваемся с новыми подходами, языками и концептами. И постоянно мы мечемся в сомнениях «смогу ли я быть на волне, оставаться конкурентоспособным, учитывая все изменения и тренды?». Давайте задумаемся на мгновение, вспомнив фразу из моего любимого фильма «Касабланка» — в любви законов новых нет — так создан свет.

Все, что касается любви, применимо и к коду. Новых законов в коде нет. Если вы четко понимаете основные идеи разработки, вы способны максимально быстро адаптироваться к новым подходам. В этой статье я расскажу вам о трех основных принципах, которые, наряду с другими, позволяют регулировать сложность разработки. Я поделюсь своим видением вопроса, которое, надеюсь, поможет вам в повседневной работе.
Читать дальше →

Некоторые тонкости установки на сайт кнопок «Поделиться» (share) социальных сетей

Reading time5 min
Views206K
Сегодня, в эпоху социальных медиа, принято давать посетителям сайта возможность поделиться с друзьями. Мы делали промо-страницу к Дню Рождения интернет-магазина Allsoft и нам нужно было установить кнопки «Поделиться» от Facebook, Twitter, Одноклассников, Вконтакте и Мой мир.

С первого взгляда показалось — что может быть тут особенного — поставил готовый html/js код и готово? Но тонкости оказались в деталях: что если для одной соц. сети нужно передавать один текст, а для другой — другой? Как правильно передать картинку и описание во все сети? А если несколько разных вариантов текста и картинок на одной странице? Как почистить уже закешированную информацию о ссылке в соц.сети? На все эти вопросы нам пришлось найти ответы, которые и вы сможете узнать из этой статьи.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity