Pull to refresh
21
0
Сергей Качкин @kachini

User

Send message

jQuery Events изнутри

Reading time9 min
Views59K
Статья написана в рамках конкурса среди студентов Технопарка Mail.ru.
image

Думаю, JavaSript-библиотека jQuery в представлении не нуждается, но на всякий случай напомню, что jQuery призвана ускорить разработку, предоставить синтаксический “сахар” для нативного js и избавить разработчиков от проблем, связанных с кроссплатформенностью.
Прежде чем говорить о том, как устроена обработка событий в jQuery, нельзя не упомянуть об истории обработки событий в браузере.
Читать дальше →
Total votes 70: ↑65 and ↓5+60
Comments2

Невыносимая сложность программирования

Reading time4 min
Views81K

A n00b y0u areКогда-то книга “Совершенный код” Стива МакКоннела произвела на меня большое впечатление. Я лично думаю, что эту книгу обязательно должен прочесть каждый, кто зарабатывает на жизнь написанием кода. Особенно настоятельно я рекомендую эту книгу новичкам.

Настоящие размышления о программировании посвящаются главе 33 “Личность” и тем, кто решил связать свою жизнь с разработкой программного обеспечения.
Читать дальше →
Total votes 149: ↑115 and ↓34+81
Comments66

Crossfilter.js, dc.js и D3.js для визуализации Данных

Reading time4 min
Views35K
Приветствую ценителей красивой и функциональной визуализации данных! Предлагаю вашему вниманию небольшой обзор нескольких JavaScript библиотек, которые вкупе с D3.js позволят создать интерактивную визуализацию многомерных данных с возможностью применения фильтрации «на лету».


Заинтересовались, тогда добро пожаловать под кат.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments15

Знай сложности алгоритмов

Reading time2 min
Views996K
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
Читать дальше →
Total votes 312: ↑296 and ↓16+280
Comments99

Потоки, блокировки и условные переменные в C++11 [Часть 2]

Reading time7 min
Views162K
Для более полного понимания этой статьи, рекомендуется прочитать ее первую часть, где основное внимание было уделено потокам и блокировкам, в ней объяснено много моментов (терминов, функций и т.д.), которые без пояснения будут использованы здесь.
В данной статье будут рассмотрены условные переменные…
Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments8

Путешествие через вычислительный конвейер процессора

Reading time16 min
Views133K
Так как карьера программиста тесно связана с процессором, неплохо бы знать как он работает.

Что происходит внутри процессора? Сколько времени уходит на исполнение одной инструкции? Что значит, когда новый процессор имеет 12, или 18, или даже 31-уровневый конвейер?

Программы обычно работают с процессором, как с чёрным ящиком. Инструкции входят и выходят из него по порядку, а внутри совершается некая вычислительная магия.

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

Эта статья рассказывает, как устроен вычислительный конвейер x86 процессора.
Читать дальше →
Total votes 160: ↑159 and ↓1+158
Comments43

Советы Google по кодированию на языке Python. Часть первая: советы по программированию

Reading time13 min
Views114K

Хай, Хабр!
Сегодня я хочу представить, дорогому хабрасообществу свой первый хабраперевод. Программировать на языке Python — подобно песне. Но еще лучше, когда Ваш код читаем и понятен, а значит чуть более поэтичен, чем обычно бывает производстве. У каждого свои правила и свои стереотипы относительно написания и оформления исходного кода, на каком бы языке он ни был написан. Множество копий сломано о щиты на форумах, но, как ни крути, нельзя не считаться с мнением авторитетных товарищей. Так что сейчас будет представлен перевод первой части стайл-гайда для языка Python от Google. Коснется он именно постулатов написания кода (вторая часть тоже скоро появится, а посвящена она будет форматированию исходного кода). Сразу предупреждаю: тут много (если не большая часть) прописных истин, которые все знают уже давно. Но я искренне надеюсь, что Вы сможете найти тут что-то новое или хотя бы вспомнить старое. Приступим под катом. И pdf тут как тут.
Читать дальше →
Total votes 122: ↑109 and ↓13+96
Comments58

Новшества node-webkit версии 0.5.1

Reading time3 min
Views15K
Позавчера (27 апреля) из праведных недр интеловского Центра технологий с открытым исходным кодом (а это тот самый Центр, который hshhhhh обозревал неделю назад во блогозаписи «Печеньки для пингвина») вышла в свет новая версия движка node-webkit могучего объединения Node и WebKit (точнее даже не просто WebKit, а Chromium — и в дальнейшем, вероятно, Blink), обеспечивающего быстрое и бесхитростное создание GUI-приложений методами веборазработки (код на JavaScript с употреблением API от Node.js, а интерфейс на HTML да на CSS) под операционные системы Windows, Mac OS X и Linux.

Новая версия имеет номер 0.5.1; на её основе нетрудно составить и запустить, например, вот такое окно:

[скриншот]

Одну из предыдущих версий node-webkit (0.4.1) мне довелось обозреть в начале февраля, а теперь на дворе конец апреля. Настала пора рассказать обо всех тех изменениях, которыми сопровождался выход версии 0.4.2, за нею 0.5.0, и затем 0.5.1 наконец. Рассказываю:

Читать дальше →
Total votes 44: ↑34 and ↓10+24
Comments20

Всплывающая фиксированная навигация jQuery

Reading time2 min
Views3.5K
Всплывающая фиксированная навигация



Я хотел бы показать вам навигационную панель, которая появляется при прокрутке содержания страницы в низ, и остается на своем месте.
Буду использовать для реализации jQuery, чтобы была совместимость в том числе IE.
Читать дальше →
Total votes 23: ↑6 and ↓17-11
Comments9

Мониторинг «на коленке» – использование Cacti для контроля Jаva приложений

Reading time9 min
Views47K
В статье описывается решение для мониторинга с использованием Cacti на примере задачи анализа и контроля потребления ресурсов большого Java-приложения.

Передо мной стояла задача – в краткие сроки предложить меры по стабилизации большого трехзвенного Java-приложения, имеющего проблемы с потреблением памяти и производительностью. Времени, как обычно, мало: 1-2 недели на все. На фирме отсутствовала подходящая инфраструктура мониторинга приложений, и в мою задачу не входило ее создавать. Вариант с использованием JConsole не подходил из-за необходимости анализировать потребление за продолжительное время и смотреть его после возможных внезапных перезагрузок приложений.

В одной из фирм, где я работал, было реализовано впечатляющее по удобству и простоте решение для мониторинга Java-приложений на основе RRD Tool. Состояло оно из несложной надстройки на perl-скриптах, обеспечивающих сбор и отображение данных через HTTP и ряда доработок-агентов сбора данных в самом приложении. Для меня это стало идеей решения, однако, времени на написание обвязки над RRD у меня не было.

После аккуратного поиска нашелся бесплатный инструмент, реализующий необходимую мне надстройку – Cacti. Cacti это приложение, написанное в инфраструктуре Apache-PHP-MySql, позволяющее настраивать сбор и отображение данных мониторинга на основе веб-интерфейса. Разобраться с ним оказалось несложно, пару дней для подъема инфраструктуры, затем настройка и дописывание агентов сбора данных и все.

Далее в статье подробно описывается решение, позволившие решить мою задачу и, в конце концов, провести успешную стабилизацию приложения на фирме.

Дальше...
Total votes 15: ↑14 and ↓1+13
Comments10

Пишу игрушечную ОС (о реализации мьютекса)

Reading time4 min
Views27K

Продолжаю блог о разработке игрушечной ОС (предыдущие посты: раз, два, три). Сделав паузу в кодировании (майские праздники, всё-таки), продолжаю работу. Только что набросал сканирование PCI-шины. Эта штука понадобится для работы с SATA-контроллером: следующее, что хочу сделать — это простенький драйвер диска. Он позволит поэкспериментировать с проецированием постоянной памяти на адресное пространство (своппинг, доведённый до логического конца). А пока хотел бы описать реализацию мьютекса.
Читать дальше →
Total votes 70: ↑63 and ↓7+56
Comments11

Особенности работы или «За что я люблю JavaScript»: Замыкания, Прототипирование и Контекст

Reading time17 min
Views103K
Зародившись как скриптовый язык в помощь веб-разработчикам, с дальнейшим развитием JavaScript стал мощным инструментом разработки клиентской части, обеспечивающий удобство и интерактивность страницы прямо в браузере у пользователя.

Из-за специфичности среды и целей, JavaScript отличается от обычных языков программирования, и имеет множество особенностей, не понимая которые, довольно сложно написать хороший кроссбраузерный код.

Думаю, что большинство программистов, писавших код на JavaScript больше пары дней, сталкивались с этими особенностями. Цель данного топика не открыть что-то новое, а попытаться описать эти особенности «на пальцах» и «недостатки» сделать «преимуществами».

В данном топике будут рассматриваться:

  1. Замыкания
  2. Прототипирование
  3. Контекст выполнения

Читать дальше →
Total votes 112: ↑91 and ↓21+70
Comments85

Pthread_cond_timedwait: проблема, решение, дискуссия

Reading time4 min
Views15K
Здравствуйте, уважаемые Хабраюзеры!

Продолжая серию постов по многопоточному программированию, хочется коснуться одной фундаментальной проблемы использования сигнальных переменных в Linux, к сожалению, не имеющей пока красивого универсального решения (а может оно просто неизвестно мне). Многие, к сожалению, даже не догадываются о том, что такая проблема имеет место быть.

Рассмотрим простой пример использования сигнальной переменной:

struct timeval now;
struct timespec timeout;
gettimeofday(&now, 0);
timeout.tv_sec = now.tv_sec + 2;      // 2 sec
timeout.tv_nsec = now.tv_usec * 1000; // nsec

retval=0;
pthread_mutex_lock(&mutex);
while(!somethingHappens() && retval==0)
{
    retval=pthread_cond_timedwait(&condition, &mutex, &timeout);
}
pthread_mutex_unlock(&mutex);


Читать дальше →
Total votes 35: ↑30 and ↓5+25
Comments37

Связные списки в функциональном стиле

Reading time2 min
Views20K
Рассмотрим вариант реализации связных списков через замыкания.

Для обозначения списков будем использовать нотацию, похожую на Haskell: x:xs, где x — начало списка (head), xs — продолжение (tail).



В качестве языка реализации я выбрал JavaScript.

Конструируем список

Читать дальше →
Total votes 44: ↑36 and ↓8+28
Comments24

Кластер высокой доступности на Red Hat Cluster Suite

Reading time3 min
Views26K
В поисках решения для построения HA кластера на linux, я наткнулся на довольно интересный продукт, который, по моим наблюдениям, несправедливо обделен вниманием уважаемого сообщества. Судя по русскоязычным статьям, при необходимости организации отказоустойчивости на уровне сервисов, более популярно использование heartbeat и pacemaker. Ни первое, ни второе решение у нас в компании не прижилось, уж не знаю почему. Может сыграла роль сложность конфигурации и использования, низкая стабильность, отсутствие подробной и обновляемой документации, поддержки.

После очередного обновления centos, мы обнаружили, что разработчик pacemaker перестал поддерживать репозиторий для данной ОС, а в официальных репозиториях была сборка, подразумевающая совершенно другую конфигурацию (cman вместо corosync). Переконфигурировать pacemaker желания уже не было, и мы стали искать другое решение. На каком-то из англоязычных форумов, я прочел про Red Hat Cluster Suite, мы решили его попробовать.

Общая информация


RHCS состоит из нескольких основных компонентов:
  • cman — отвечает за кластеризацию, взаимодействие между нодами, кворум. По сути, он и собирает кластер.
  • rgmanager — менеджер ресурсов кластера, занимается добавлением, мониторингом, управлением групп ресурсов кластера.
  • ricci — демон для удаленного управления кластером
  • luci — красивый веб интерфейс, который подключается к ricci на всех нодах и предоставляет централизованное управление через веб-интерфейс.


Как и в heartbeat и pacemaker, ресурсы кластера управляются стандартизированными скриптами (resource agents, RA). Кардинальное отличие от pacemaker состоит в том, что redhat не подразумевает добавления пользовательских кастомных RA в систему. Но это с лихвой компенсируется тем, что есть универсальный resource agent для добавления обычных init скриптов, он называется script.

Управление ресурсами идет только на уровне групп сервисов. Сам по себе ресурс невозможно включить или выключить. Для распределения ресурсов по нодам и приоритезации запуска на определенных нодах используются failover domains, домен представляет собой правила запуска групп ресурсов на определенных нодах, приоритезацию и failback. Одну группу ресурсов можно привязать к одному домену.

Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments12

Частые ошибки при разработке lockfree-алгоритмов и их решения

Reading time13 min
Views59K
На хабре уже было несколько статей про lock-free алгоритмы. Этот пост — это перевод статьи моего коллеги, которую мы планируем публиковать в нашем корпоративном блоге. По роду деятельности мы пишем огромное количество lock-free алгоритмов и структур данных, и этой статьей хочется показать, насколько это интересно и сложно одновременно.



Эта статья во многом похожа на эту статью, но в той статье рассматриваются не все проблемы, с которыми можно столкнуться, разрабатывая lock-free структуры данных, и уделяется очень мало внимания решению этих проблем. В этой статье хочется детально остановиться на некоторых решениях, которые мы используем в реальной реализации lock-free структур данных в нашем продукте, и больше внимания уделить оценке производительности.
Читать дальше →
Total votes 148: ↑147 and ↓1+146
Comments52

90 рекомендаций по стилю написания программ на C++

Reading time20 min
Views409K
От переводчика. Искал в интернете простой и легко применимый гайдлайн по написанию программ на C++. Мне понравился один из вариантов, и я решил его перевести и опубликовать. Если хабрапользователи хорошо встретят этот топик, могу перевести и другие связанные документы, а также гайдлайны по написанию кода от других компаний.

1 Введение


Настоящий документ содержит рекомендации по написанию программ на языке C++.

Рекомендации основаны на установившихся стандартах, собранных из различных источников, личного опыта, частных требований и потребностей определённых проектов, а также почерпнутых из источников (см. ниже).

Но для появления ещё одного списка рекомендаций, помимо указанных источников, есть несколько причин. Основная причина — их излишняя обобщённость, поскольку зачастую требуется задать частные правила (в особенности правила именования). Данный документ содержит комментарии, что делает его более удобным в использовании при проведении ревизий кода, чем другие уже существующие документы. К тому же, рекомендации по программированию обычно вперемешку содержат описания проблем стиля и технических проблем, что не совсем удобно. Этот документ не содержит каких-либо технических рекомендаций по C++, делая упор на вопросах стиля.
Читать дальше →
Total votes 181: ↑137 and ↓44+93
Comments213

Истинное могущество регулярных выражений

Reading time16 min
Views93K
Как частый посетитель тэга PHP на StackOverflow, я очень часто встречаю вопросы о том, как распарсить какие-то конкретные аспекты HTML, используя регулярные выражения. Самый распространённый ответ на это:
«Ты не можешь парсить HTML с помощью регулярных выражений, потому что HTML не является регулярным. Используй XML парсер, и будет тебе счастье»

Это утверждение — в контексте вопроса — находится где-то между сильно вводящим в заблуждение и абсолютно неправильным. Что я хочу попытаться продемонстрировать в этой статье, так это то, насколько могущественны современные регулярные выражения на самом деле.
Читать дальше →
Total votes 182: ↑172 and ↓10+162
Comments39

О правильном использовании памяти в NUMA-системах под управлением ОС Linux

Reading time7 min
Views28K
Недавно в нашем блоге появилась статья о NUMA-системах, и я хотел бы продолжить тему, поделившись своим опытом работы в Linux. Сегодня я расскажу о том, что бывает, если неправильно использовать память в NUMA и как диагностировать такую проблему с помощью счётчиков производительности.
Читать дальше →
Total votes 28: ↑25 and ↓3+22
Comments5

Information

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