Pull to refresh
  • by relevance
  • by date
  • by rating

Иерархия на Хабре

Lumber room
Может это уже обсуждали, но я не нашел:
— Предлагаю ввести на Хабрахабре какие-то почетные звания и привелегии. И чтобы эти привелегии снять могли только старшие по званию (или только некоторые звания).

Зачем это делать:
— побудить участников к каким-то действиям для получения звания
— сделать более понятными правила, ведь «рядовой не имеет права голоса, генерал может создавать блог» понятнее, чем «от столько до стольки то-то, меньше стольки — се-то», извините за неприятную аналогию с армией. Можно «хабрабосс», «хабраюнга», «хабрадед» и т.п.
— сделать более осмысленным понятие кармы и способ ее закрепления — заработать карму легко, а теряется «на раз-два».

Кстати (не в тему), еще предложение: поиск на Хабре стоит сделать более гибким (научить искать по разным окончаниям).
Total votes 18: ↑1 and ↓17 -16
Views 200
Comments 8

Порядок выполнения событий в DOM

Lumber room
Столкнулся с проблемой в своём календарике — есть два элемента, один из которых позиционируется абсолютно на весь экран, полупрозрачная затемняющая занавеска а второй — форма. Вы наверняка видели такие решения при показе картинок в lightbox или аутидентификации на habrahabrе..






Проблема в том, что при любом нажатии на внутренний элемент, событие автоматом вызывается на родительском элементе. Это заставило меня задуматься как над решением, так и над теорией как браузеры работают.

Две с половиной модели



Как оказывается, существует две модели передачи событий в объектно-ориентированной иерархии
  • Пузырьковый метод (bubbling), когда событие возникает внутри и затем передаётся родительским элементам наружу. MS Internet Explorer, Opera, Firefox
  • Захват события (capturing), событие обрабатывается сначала у родителей, а потом проникает глубже. Opera, Firefox


Консорциум W3C благоразумно решили что разработчикам может быть удобно в любую сторону направлять события (event propagation), поэтому по стандарту две модели объединены — событие сначала захватывается, а потом возвращается как пузырёк.

Читать дальше →
Total votes 13: ↑10 and ↓3 +7
Views 291
Comments 8

Web-типографика — четыре золотых совета

Typography *
Основы web-типографики пришли к нам из далекого 1991 года, еще от небезызвестного Tim Berners-Lee :)

Если оглянуться назад, в страшные времена царствования IE 1.0, то web-типографика (я не говорю о web-дизайне) находилась в зачаточном состоянии. На данный момент, ситуация иная. Мы имеем достаточно средств, для грамотного оформления текста на web-странице.

Cуть web-типографики заключаться не просто в выборе нужного шрифта и умение отличить начертание одного шрифта от другого.


Рис. 1: Как показали последние опыты, 90% тренированных обезьян правильно отличают шрифт Helvetica.

Мы поговорим о web-типографике как о рецепте, содержащем четыре основных компонента. Если вы когда-нибудь пытались приготовить суфле, то скорее всего, смогли ощутить насколько важен рецепт его приготовления.
Читать дальше →
Total votes 66: ↑47 and ↓19 +28
Views 3.8K
Comments 64

15 примеров отличной типографики

Typography *
Translation
Британский сайт I Love Typography, посвящённый типографике, опубликовал список с примерами отличной типографики. Этот список составлен по итогам II кв. 2008 года. Предыдущие «хит-парады» можно найти здесь и здесь.

Каждый пример сопровождается кратким комментарием, а нажатие на скриншот ведёт на оригинальный сайт.

Seed Conference


Нет флэша, нет картинок, нет лишнего шума; просто хорошо стилизированный шрифт и хорошо написанный текст: реальное доказательство того, что с помощью только шрифта можно получить отличный результат. Хотелось бы увидеть ещё несколько примеров такого рода.


Читать дальше →
Total votes 66: ↑58 and ↓8 +50
Views 9.4K
Comments 36

Иерархические (рекурсивные) запросы

SQL *
Дерево объектов

Чтобы понять рекурсию, сначала надо понять рекурсию. Возможно, поэтому рекурсивные запросы применяют так редко. Наверняка вы представляете что такое SQL-запрос, я расскажу, чем рекурсивные запросы отличаются от обычных. Тема получилась объемная, приготовьтесь к долгому чтению. В основном речь пойдет об Oracle, но упоминаются и другие СУБД.

Читать дальше →
Total votes 108: ↑103 and ↓5 +98
Views 406K
Comments 159

10 приемов, разрушающих хрупкую красоту кода

Website development *
Статья приводится в сокращении из-за ограничения на объем материала.

Для меня программирование — это не только технология, но и, во многом — искусство. И, поэтому, большое значение имеет красота кода.

Последние несколько лет я собирал приемы программирования, разрушающие в программном коде его утонченную красоту:
  1. Объявление всех переменных в начале программы;
  2. Возврат результата функции через ее параметр;
  3. Отсутствие локальных функций;
  4. Отсутствие else if;
  5. Использование параллельных массивов;
  6. Хранение размера массива в отдельной переменной;
  7. Доступ к свойствам объекта через obj.getProperty() и obj.setProperty(value);
  8. Использование рекурсии для вычисления факториалов и Чисел Фибоначчи;
  9. Отсутствие именованных параметров функции;
  10. Невозможность объявления объектов «на лету».
Наверняка, в некоторых местах вы будете со мной несогласны — ведь чувство красоты у всех разное.


Объявление всех переменных в начале программы


В двух словах:

Переменные должны объявляться в начале логического блока, в котором они используются, а НЕ в начале функции или программы.


Читать дальше →
Total votes 402: ↑324 and ↓78 +246
Views 94K
Comments 411

Как работать с руководителем

GTD *

Введение


«Наибольшей выгода будет тогда, когда каждый в команде будет думать не только о своем успехе, а о своем успехе и об успехе команды в целом»
Х/ф «Игры разума»

Есть очень много статей на тему того, как руководить людьми. Но я почти не встречал материалов на тему, что значит быть подчиненным. Видел модели: «пусть начальник даст мне свободу, а я тогда обязательно добьюсь результата, а сейчас один контроль», «мир есть мир: начальник всегда прав, мое дело молчать в тряпочку».

Сам я работаю ведущим программистом, руковожу группой программистов.

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

Стоит отметить, что руководители бывают разными, и эти принципы где-то могут не работать. Но, как показывает мой опыт 2,5 лет работы в крупной компании, опыт работы других людей, а также аналитика из книг для руководителей, где говорится об успешных сотрудниках (о лучших из лучших) и об их качествах, есть много общего.

Читать дальше →
Total votes 82: ↑72 and ↓10 +62
Views 5.5K
Comments 55

Отображение иерархической структуры данных в WPF с помощью привязки и шаблонов

.NET *
Введение

Представление набора данных в виде иерархической структуры (любого уровня вложенности) в WPF осуществляется очень просто. Как правило, для этого используется класс System.Windows.Controls.TreeView и выглядит результат как-то так:


Я продемонстрирую два случая построения такого дерева, отличающихся друг от друга источником данных:
  • База данных, размещённая на MS SQL Server 2008
  • XML-файл.

Читать дальше →
Total votes 41: ↑24 and ↓17 +7
Views 21K
Comments 17

Реализация иерархии — объединение Adjacency List и Materialized Path через one-to-many

MySQL *
Sandbox
Хранение иерархии в MySQL довольно затертая тема, воскурив хабр неоднократно я тем не менее не нашел для себя оптимальной структуры, сочетающей легкость поддержки и удобство пользования. Велосипед изобрелся сам...
Читать дальше →
Total votes 21: ↑18 and ↓3 +15
Views 19K
Comments 26

Степени — ключ к быстрой иерархии в реляционной БД

Programming *Algorithms *
После публикации на Хабре своей первой статьи, об одном из способов организации иерархии в реляционной БД, у меня осталось чувство не доведенного до конца дела.
Судя по комментариям, кто-то принимал предложенный метод за другой, спрашивали чем не устраивает “django-mttp”, рассказывали о поддержке деревьев в PostgreSQL…
Спасибо всем отписавшимся, но из-за сумбурного изложения в самой статье, думаю, что я не сумел донести до читателя то, что хотел. А “если я чего решил, то выпью обязательно”(с)

Поэтому, я решился на еще одну попытку изложения интересующего меня подхода. А именно — хранение иерархии в числовом коде, вычисляемом на основании данных о размерности дерева. То есть, заранее определены максимальные количество Уровней и количество Детей у каждого Родителя (возможные диапазоны достаточно велики, поэтому, заранее пугаться этого не стоит). При таких вводных, код, каждого иерархического элемента, будет являться и путем до него, и включать диапазон всех Детей. А это сулит скорость, и много еще чего…
Далее — с картинками и таблицами, без привязки к какой-либо БД (ибо это не важно).
Читать дальше →
Total votes 10: ↑6 and ↓4 +2
Views 10K
Comments 11

Современные технологии проектирования ПО в контексте теории коммуникации и метода декомпозиции

Programming *
Sandbox
Использование родного языка для начинающих изучать программирование является традиционной практикой в процессе обучения информатики. Ей оппонирует профессиональная и научная разработка ПО, в которой Английский язык является «лингво франка». Где формальный английский — это тщательным образом выбранные имена ключевых слов и переменных, обращённые к ассоциативному и творческому мышлению на языке оригинала.
Читать дальше →
Total votes 9: ↑6 and ↓3 +3
Views 9K
Comments 9

Архитектура карьерного роста

Project management *
Tutorial

С понедельничком (говорят — самым депрессивным в году), хабровчане!
После публикации этой статьи, многие заметили, что я шустрый карьерист, и у меня начали просить совета на тему: как обеспечить карьерный рост в IT-индустрии. Во избежание повторения одних и тех же советов разным людям в личных сообщениях я и пишу эту статью, делясь в ней историей своего собственного карьерного роста и основными наблюдениями, которые я сделал за 13 лет опыта работы в больших и не очень компаниях.
Сразу предупрежу, что не претендую на изложение универсальной теории карьерного роста сферического коня в вакууме, и большинство замечаний искривлено призмой моего восприятия. То, что неоднократно работало в моем случае, необязательно сработает в вашем.

Читать дальше →
Total votes 140: ↑125 and ↓15 +110
Views 119K
Comments 152

Для чего нормальным пацанам нужна миссия компании — и немного кибернетики

Мосигра corporate blog


«Миссию» обычно продают компании в рекламном агентстве вместе с ещё тёплым брендбуком. Ну, то есть если это реально был брендбук, а не мануал по тому, как нельзя рисовать логотип на заборах. Миссия входит в ритуал обмена бабок учредителя на чужой базар.

Дальше на миссию забивают болт и работают как раньше. Точнее, про неё иногда вспоминают пиарщики и рассказывают после пресс-релизов про благотворительность. Честных миссий я видел всего несколько, в одной у крупной компании третьим пунктом даже шло «обогащение инвесторов».

Но, тем не менее, если вы используете распределённое управление, эта вот самая непонятная фигня вам жизненно необходима.
Читать дальше →
Total votes 90: ↑82 and ↓8 +74
Views 46K
Comments 40

Ответ на Решетчатое наследование

Abnormal programming *ООP *
Sandbox
Эта публикация — ответ на текст «Решетчатое наследование», опубликованный хабрапользователем potan, с предложением альтернативы, на субъективный взгляд автора, более близкой к ООП с классами (для случая с ограниченным набором классов).
Читать дальше →
Total votes 8: ↑4 and ↓4 0
Views 3K
Comments 10

Long live the king: жестокий мир иерархии в стае бродячих собак

ua-hosting.company corporate blog Mathematics *Reading room Popular science Ecology


В больших группах людей всегда появляется лидер, осознанно или нет. Распределение власти от высшей до низшей ступени иерархической пирамиды обладает рядом преимуществ для группы как в целом, так и для отдельно взятых индивидов. Ведь порядок всегда лучше хаоса, не так ли? На протяжении тысяч лет человечество во всех цивилизациях реализовывало иерархическую пирамиду власти самыми разными способами и на основе самых разных аспектов — от физической мощи (армия) до духовного просвещения (церковь). Среди социальных животных также встречается формирование иерархии, однако чаще всего она имеет всего лишь две ступени — лидер и все остальные. В случае же собак ступеней больше, и взаимосвязь между представителями каждой из них является движущей силой всей стаи.

Сегодня мы с вами познакомимся с исследованием иерархии внутри стаи бродячих собак, на которое ученые из Эксетерского университета (Англия) потратили целый год. Как члены стаи распределяются по ступеням иерархии, между какими ступенями не утихает открытая вражда и насколько сильно негативное влияние внутренних конфликтов на целостность и благополучие стаи? Об этом и не только нам поведает доклад исследовательской группы. Поехали.
Total votes 22: ↑17 and ↓5 +12
Views 9.2K
Comments 8

PostgreSQL Antipatterns: насколько глубока кроличья нора? пробежимся по иерархии

Тензор corporate blog High performance *PostgreSQL *SQL *Database Administration *
В сложных ERP-системах многие сущности имеют иерархическую природу, когда однородные объекты выстраиваются в дерево отношений «предок — потомок» — это и организационная структура предприятия (все эти филиалы, отделы и рабочие группы), и каталог товаров, и участки работ, и география точек продаж,…



Фактически, нет ни одной сферы автоматизации бизнеса, где хоть какой-нибудь иерархии да не оказалось бы в результате. Но даже если вы не работаете «на бизнес», все равно можете легко столкнуться с иерархичными связями. Банально, даже ваше генеалогическое древо или поэтажная схема помещений в торговом центре — такая же структура.

Существует много способов хранения такого дерева в СУБД, но мы сегодня остановимся только на одном варианте:

CREATE TABLE hier(
  id
    integer
      PRIMARY KEY
, pid
    integer
      REFERENCES hier
, data
    json
);

CREATE INDEX ON hier(pid); -- не забываем, что FK не подразумевает автосоздание индекса, в отличие от PK

И пока вы всматриваетесь в глубину иерархии, она терпеливо ждет, насколько же [не]эффективными окажутся ваши «наивные» способы работы с такой структурой.


Давайте разберем типовые возникающие задачи, их реализацию на SQL и попробуем улучшить их производительность.
Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Views 6.2K
Comments 20

Nested Sets для Javascript

JavaScript *Node.JS *
Sandbox
На любом современном сайте (да и на сайтах постарше) встречаются вложенные структуры, иерархия объектов, деревья. Самый распространенный пример — каталог.

Сегодня множество проектов разрабатывается с использованием Javascript. Как же хранить древовидные структцры в этом случае? Об этом и хотелось бы поговорить.
Читать дальше →
Total votes 16: ↑10 and ↓6 +4
Views 3.6K
Comments 17

PostgreSQL Antipatterns: «Бесконечность — не предел!», или Немного о рекурсии

Тензор corporate blog PostgreSQL *Programming *SQL *Database Administration *
Рекурсия — очень мощный и удобный механизм, если над связанными данными делаются одни и те же действия «вглубь». Но неконтролируемая рекурсия — зло, которое может приводить или к бесконечному выполнению процесса, или (что случается чаще) к «выжиранию» всей доступной памяти.


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

В PostgreSQL возможность использовать рекурсивные запросы через WITH RECURSIVE появилась еще в незапамятные времена версии 8.4, но до сих пор можно регулярно встретить потенциально-уязвимые «беззащитные» запросы. Как избавить себя от проблем подобного рода?
Читать дальше →
Total votes 20: ↑19 and ↓1 +18
Views 4.7K
Comments 9

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

ua-hosting.company corporate blog Popular science Biotechnologies Ecology


Насекомые — удивительные создания. Многие из них обладают крайне необычными свойствами и умениями. Кто-то испускает свет, кто-то может пережить ядерный удар, а кто-то бегает так быстро, что вынужден останавливаться, чтобы понять свое местоположение. Уникальностей много, как и семейств насекомых. Муравьи же уникальны своей численностью, организованностью и беспрекословной верой в монархию (Боже, храни Королеву). Разные виды муравьев проявляют те или иные навыки в зависимости от среды обитания и гастрономических предпочтений. К примеру, красные огненные муравьи (Solenopsis invicta) используют собственные тела для постройки живого плота, чтобы пережить наводнения. Однако этот метод спасения от смерти через утопление не является единственным, так как муравьи вполне способны использовать инструменты, чтобы избежать гибели. Ученые из Британского экологического общества (Лондон, Великобритания) выяснили, что черные огненные муравьи используют песок при сборе жидкой пищи, чтобы не утонуть. Как именно муравьи используют песок, меняется ли их поведение в зависимости от ситуации, и насколько эффективен такой навык выживания? Ответы на эти вопросы мы найдем в докладе ученых. Поехали.
Total votes 24: ↑24 and ↓0 +24
Views 4.5K
Comments 5

PostgreSQL Antipatterns: DBA-детектив, или Три дела о потерянной производительности

Тензор corporate blog PostgreSQL *SQL *Database Administration *Reverse engineering *
Сегодня вместо решения абстрактных алгоритмических задач мы выступим в роли детектива, по крупицам доставшейся информации исследующего неэффективные запросы, и рассмотрим три реальных дела, встречавшихся в разное время на просторах нашего приложения СБИС, когда простота и наивность при написании SQL превращалась в дополнительную нагрузку для PostgreSQL-сервера.


Дедукция и индукция помогут нам вычислить, что же все-таки хотел получить от СУБД разработчик, и почему это получилось не слишком оптимально. Итак, сегодня нас ждут:

  • Дело о непростом пути вверх
    Разберем в live-видео на реальном примере некоторые из способов улучшения производительности иерархического запроса.
  • Дело о худеющем запросе
    Увидим, как можно запрос упростить и ускорить в несколько раз, пошагово применяя стандартные методики.
  • Дело о развесистой клюкве
    Восстановим структуру БД на основании единственного запроса с 11 JOIN и предложим альтернативный вариант решения на ней той же задачи.
Расследовать
Total votes 17: ↑17 and ↓0 +17
Views 3.7K
Comments 3
1