Pull to refresh
-3
0

Программист

Send message

Понимание спецификации ECMAScript, часть 2

Reading time9 min
Views4.3K

Привет, Хабр! Представляю вашему вниманию перевод статьи под редакцией xfides


Автор оригинала: Marja Hölttä
Перевод первой части.



Давайте еще попрактикуемся в чтении спецификации. Если вы не видели предыдущую статью, самое время сходить ее посмотреть. В первой части мы познакомились с простым методом Object.prototype.hasOwnProperty. Также, посмотрели список абстрактных операций, которые вызываются при выполнении этого метода. Еще мы узнали о специфических сокращениях «?» и «!», которые связаны с обработкой ошибок. И наконец, мы получили информацию о типах языка, типах спецификации, внутренних слотах и внутренних методах.


Готовы для второй части?

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0

Заклиная техническое интервью

Reading time10 min
Views23K

Предлагаю читателям "Хабрахабра" перевод (возможно лучшей) статьи Kyle Kingsbury, a.k.a "Aphyr".


Давным-давно, на Шпицбергене, когда ты была юной ведьмочкой всего сорока трех лет, мама взяла в свои ладони твои еще не покрытые шрамами руки, и сказала:


Видрун, зачатая от морских ветров в верхушках елей,
Видрун, зелень моих ветвей, радость и ноша моих дней,
Видрун, всех вдохновенней и умней, да станет мудрость нашего клана твоей:
Никогда не читай Hacker News
Читать дальше →
Total votes 78: ↑62 and ↓16+46
Comments27

Типизируя техническое интервью

Reading time9 min
Views9.3K

Предлагаю читателям "Хабрахабра" перевод статьи Kyle Kingsbury, a.k.a "Aphyr".
Ранее: Заклиная техническое интервью


В прежние времена, задолго до восхода Церкви, все заклятья произносились по чистому случаю, все действия были разрешены, а смерть была обыденностью. Многие ведьмы покалечились из-за своей магии, их находили изломанными в центре круга искривленных, застеклившихся деревьев и горящих камней, не гаснущих даже под водой; некоторые полностью исчезали, или начинали путешествовать по горным перевалам, никогда не касаясь ногами земли, никогда не согревая воздух своим дыханием.

Читать дальше →
Total votes 27: ↑20 and ↓7+13
Comments7

Домашняя беспроводная сеть на Cisco Mobility Express руками чайника

Reading time9 min
Views10K

С чего все началось


Как обычно, такие мысли приходят когда нечего делать. Так вот, будучи на море я подумал: а почему бы не сделать дома бесшовный быстрый wi-fi… Как назло еще тесть купил себе Netgear Orbi, который работал на удивление неплохо.

Что у меня было на тот момент


Жилой дом на двух хозяев с железобетонной стеной посередине; 5 разных роутеров (накопились), подключенных через гигабитный коммутатор Cisco, один из которых — Asus RT-N66U — также выполнял функции маршрутизатора.

Честно говоря, не сказал бы, что все работало плохо: напрягало то, что клиенты зубами вцеплялись и не отпускали сеть при переходе от точки к точке; немного не устраивала скорость, хотя, на самом деле, даже g стандарта вполне хватало, а n — тем более.
Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments11

Node.js без node_modules

Reading time5 min
Views28K

На прошлой неделе разработчики Yarn (пакетного менеджера для Javascript) анонсировали новую фичу – Plug'n'Play установку. Эта возможность позволяет запускать Node.js проекты без использования папки node_modules, в которую обычно устанавливаются зависимости проекта перед запуском. Описание фичи декларирует, что node_modules больше не понадобится – модули будут загружаться из общего кеша пакетного менеджера.


Одновременно с ними разработчики NPM также анонсировали свое аналогичное решение проблемы.


Давайте посмотрим на эти решения повнимательнее и попробуем протестировать их в реальных проектах.

Читать дальше →
Total votes 39: ↑37 and ↓2+35
Comments57

Кража NTLM через PDF

Reading time3 min
Views11K

Прошло всего несколько дней после того, как было объявлено, что злоумышленники могут использовать уязвимость в MS Outlook, используя OLE, чтобы украсть NTLM-хэш пользователей Windows.

Исследовательская группа Check Point обнаружила, что утечка дайджеста NTLM возможна и с помощью файлов PDF. Атака возможна без какого-либо взаимодействия с пользователем — достаточно просто открыть файл.
Продолжение внутри
Total votes 24: ↑23 and ↓1+22
Comments5

Компилятор на JavaScript с использованием ANTLR

Reading time19 min
Views16K



В начале этого года я присоединилась к команде, работающей над MongoDB Compass — графическим интерфейсом для MongoDB. Пользователи Compass через Intercom запросили инструмент, позволяющий писать запросы к базе данных, используя любой удобный им язык программирования, поддерживаемый драйвером MongoDB. То есть нам нужна была возможность трансформировать (компилировать) язык Mongo Shell в другие языки и обратно.

Данная статья может стать как практическим руководством, помогающим при написании компилятора на JavaScript, так и теоретическим ресурсом, включающим основные понятия и принципы создания компиляторов. В конце приведен не только полный список всех используемых при написании материалов, а также ссылки на дополнительную литературу, направленную на более глубокое изучение вопроса. Информация в статье подается последовательно, начиная с исследования предметной области и далее постепенно усложняя функционал разрабатываемого в качестве примера приложения. Если во время прочтения вам кажется, что вы не улавливаете переход от одного шага к другому, вы можете обратиться к полной версии данной программы и возможно это поможет устранить возникший пробел.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments3

Принцип единственной ответственности: фундамент декомпозиции

Reading time4 min
Views16K


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


Определение


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


Пример


Lazy<T> — обертка для объекта, чье создание откладывается до первого обращения к нему.


Антипример


Синглтон — класс, не допускающий создания более одного экземпляра. В этом описании нет союзов, но оно неполное — синглтон всегда имеет основную функциональность помимо контроля единственности собственного экземпляра. Синглтон — класс, реализующий полезную функциональность и контролирующий единственность собственного экземпляра. Теперь описание исчерпывающее, но имеет союз "и" — у синглтона два разных назначения. Он не соответствует принципу единственной ответственности.


Еще антипример


Локатор сервисов — позволяет получить доступ к любому сервису приложения. Это описание без исчерпывающего списка сервисов заведомо неполное.


Назначение


Упрощение создания, анализа и модификации программных систем.

Читать дальше →
Total votes 15: ↑9 and ↓6+3
Comments58

Как мы Scrum масштабировали

Reading time6 min
Views11K
Всем привет! Меня зовут Леша. Я работаю в подразделении Альфа-Банка, занимающемся развитием электронных каналов. Интернет- и мобильный банкинг – это все про нас.

Часто, говоря про Scrum, мы подразумеваем одну команду, работающую над одним продуктом и состоящую не более чем из девяти человек. Но иногда продукт бывает настолько сложным, что для его реализации к назначенному сроку девяти человек бывает мало. Что же делать?

Сегодня я хочу рассказать о нашем опыте масштабирования Scrum, когда над одним продуктом работало сразу несколько команд. Как мы до этого дошли и что из этого вышло? Всех заинтересованных прошу под кат.
Здесь должен быть слоник
Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments6

Задача о премировании: почувствуй себя менеджером

Reading time1 min
Views16K
  1. Менеджмент некой компании уделяет большое внимание мотивации сотрудников.
  2. Для поощрения высоких результатов было решено выдавать премии командам по результатам соблюдения сроков и бюджетов проектов.
  3. Решение было доведено до сотрудников.
  4. Одна из команд занималась доработками зрелого и стабильного проекта, успешно выполнила все условия, получила премию.
  5. Другой команде достался новый сложный проект, люди работали над ним с неподдельным энтузиазмом.
  6. К сожалению, и запланированные сроки, и бюджет оказались превышены в разы.
  7. Получившийся в результате продукт дал компании рекордную прибыль.

Если вы менеджер в этой компании, то станете ли премировать вторую команду и почему?

Total votes 33: ↑20 and ↓13+7
Comments320

Как перестать бояться и полюбить синтаксический анализ?

Reading time13 min
Views16K
Как часто, программируя очередную бизнес-фичу, вы ловили себя на мысли: есть же на Земле люди, которые пишут базы данных, распознают лица на фотографиях, делают фреймворки и реализуют интересные алгоритмы. Почему в моей работе всё сводится к перекладыванию из одной таблицы БД в другую, вызову http-сервисов, верстке html-формы и прочей «бизнес-лапше»? Может быть я занимаюсь чем-то не тем или работаю не в той компании?


Хорошая новость в том, что интересные задачи окружают нас повсюду. Сильное желание и смелость творят чудеса на пути к цели — задача любого масштаба станет вам под силу, стоит просто начать её делать.

Недавно мы написали синтаксический анализатор языка запросов 1С и его транслятор в обычный SQL. Это позволило нам выполнять запросы к 1С без участия 1С :) Минимальная рабочая версия на regexp-ах получилась недели за две. Ещё месяц ушёл на полноценный парсер через грамматики, разгребание нюансов структуры БД разных 1С-объектов и реализацию специфических операторов и функций. В результате решение поддерживает практически все конструкции языка, исходный код выложен на GitHub.

Под катом мы расскажем, зачем нам это понадобилось, как удалось, а так же затронем несколько интересных технических подробностей.
Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments32

Критерии простоты

Reading time4 min
Views13K

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


Первый критерий


Особенности мозга человека таковы, что он плохо хранит и отличает более 7-9 элементов в одном списке при оптимальном их количестве 1-3.


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

Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments89

Удобное создание Composition Root с помощью Autofac

Reading time8 min
Views10K

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


Важнейшей частью его реализации является Composition Root — точка сборки, обычно выполняемая по паттерну Register-Resolve-Release. Для хорошо читаемого, компактного и выразительного описания Composition Root обычно используется такой инструмент как DI-контейнер, при наличии выбора я предпочитаю использовать Autofac.


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

Читать дальше →
Total votes 10: ↑7 and ↓3+4
Comments26

Обзор INSTEAD 1.2.0

Reading time5 min
Views299
Выкладываю обзор INSTEAD, который был написан для журнала LGT непосредственно после выпуска версии 1.2.0.

Введение


В августе была выпущена новая версия INSTEAD — интерпретатора простых текстовых приключенческих игр. Журнал LGT уже писал об этом проекте в своем первом номере. Напомним, что больше года назад вышла первая версия программы под номером 0.7.5. Тогда вместе с интерпретатором поставлялась первая и единственная приключенческая игра «Возвращение квантового кота». Игра, будучи по своей сути текстовым приключением, содержала графику и трекерную музыку, что делало ее похожей, в том числе, и на визуальную новеллу. Такой смешанный жанр задал тон и для большинства последующих игр, написанных для INSTEAD.
Код игр для INSTEAD пишется на Lua, а сам движок использует в своей работе SDL и в данный момент работает в Linux/Windows/Mac OS X.
Читать дальше →
Total votes 50: ↑42 and ↓8+34
Comments14

Если бы языки программирования были женщинами

Reading time3 min
Views17K
То ли весна, то ли упоминание о неделе женщин на Хабре заставили меня задуматься о том, какими женщинами были бы языки программирования. Поиск по этой теме выдал пару явно устаревших статей, и я решила написать свою. Просьба воспринять с юмором и не обвинять в шовинизме — я, знаете ли, и сама не мужик :-)

P.S. Придумалось далеко не для всех известных мне языков — раскрытие темы для недостающих только приветствуется.

Prolog
Женщина-мечта: делает все, что вы хотите. К сожалению, иногда описание того, что же вы хотите, занимает больше времени, чем объяснение, как это делать.

BASIC
Горячая разведенка; специализируется на соблазнении подростков, и очень многие получают с ней свой первый опыт. Мнения взрослых о ней разделяются — одни вспоминают ее с нежностью, другие — осуждают ее дурное влияние на юные умы.

Читать дальше →
Total votes 189: ↑132 and ↓57+75
Comments144

Впечатляющие анимационные эффекты

Reading time2 min
Views115K
С появлением jQuery, у веб-программистов появилась возможность создавать впечатляющие визуальные эффекты, не прибегая к использованию технологии flash. В данной статье представлено несколько ярких примеров того, каких потрясающих результатов можно достичь, используя стандартные средства браузера и свое воображение.
Читать дальше →
Total votes 262: ↑246 and ↓16+230
Comments78

Undo/Redo — Хвост виляет собакой

Reading time5 min
Views13K

В этой статье мы продолжим рассказывать о том, как мы делали Undo/Redo в текстовом редакторе XtraRichEdit.

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

Нам же оставалось добавить возможность форматирования участков текста (шрифт, его размер и т.п.) и все остальные «мелочи» типа параграфов со всеми их свойствами, стилей и т.п. А ещё концепт не умел делать Undo/Redo.
Читать дальше →
Total votes 44: ↑34 and ↓10+24
Comments43

Декартово дерево: Часть 3. Декартово дерево по неявному ключу

Reading time12 min
Views56K

Оглавление (на данный момент)


Часть 1. Описание, операции, применения.
Часть 2. Ценная информация в дереве и множественные операции с ней.
Часть 3. Декартово дерево по неявному ключу.
To be continued...

Очень сильное колдунство


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

Вспомним-ка еще раз структуру дерамиды. В ней есть ключ x, по которому дерамида есть дерево поиска, случайный ключ y, по которому дерамида есть куча, а также, возможно, какая-то пользовательская информация с (cost). Давайте совершим невозможное и рассмотрим дерамиду… без ключей x. То есть у нас будет дерево, в котором ключа x нет вообще, а ключи y — случайные. Соответственно, зачем оно нужно — вообще непонятно :)

На самом деле расценивать такую структуру стоит как декартово дерево, в котором ключи x все так же где-то имеются, но нам их не сообщили. Однако клянутся, что для них, как полагается, выполняется условие двоичного дерева поиска. Тогда можно представить, что эти неизвестные иксы суть числа от 0 до N-1 и неявно расставить их по структуре дерева:

Получается, что в дереве будто бы не ключи в вершинах проставлены, а сами вершины пронумерованы. Причем пронумерованы в уже знакомом с прошлой части порядке in-order обхода. Дерево с четко пронумерованными вершинами можно рассматривать как массив, в котором индекс — это тот самый неявный ключ, а содержимое — пользовательская информация c. Игреки нужны только для балансировки, это внутренние детали структуры данных, ненужные пользователю. Иксов на самом деле нет в принципе, их хранить не нужно.

В отличие от прошлой части, этот массив не приобретает автоматически никаких свойств, вроде отсортированности. Ведь на информацию-то у нас нет никаких структурных ограничений, и она может храниться в вершинах как попало.
Если интересно - под кат
Total votes 81: ↑77 and ↓4+73
Comments17

Декартово дерево: Часть 2. Ценная информация в дереве и множественные операции с ней

Reading time14 min
Views39K

Оглавление (на данный момент)


Часть 1. Описание, операции, применения.
Часть 2. Ценная информация в дереве и множественные операции с ней.
Часть 3. Декартово дерево по неявному ключу.
To be continued...

Тема сегодняшней лекции


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

К счастью (или к сожалению?), реальная жизнь такими пустяковыми задачами не ограничивается. О чем сегодня и пойдет речь. Первый вопрос на повестке дня — это так называемая K-я порядковая статистика, или индекс в дереве, которая плавно подведет нас к хранению пользовательской информации в вершинах, и наконец — к бесчисленному множеству манипуляций, которые с этой информацией может потребоваться выполнять. Поехали.

Ищем индекс


В математике, K-я порядковая статистика — это случайная величина, которая соответствует K-му по величине элементу случайной выборки из вероятностного пространства. Слишком умно. Вернемся к дереву: в каждый момент времени у нас есть декартово дерево, которое с момента его начального построения могло уже значительно измениться. От нас требуется очень быстро находить в этом дереве K-й по порядку возрастания ключ — фактически, если представить наше дерево как постоянно поддерживающийся отсортированным массив, то это просто доступ к элементу под индексом K. На первый взгляд не очень понятно, как это организовать: ключей-то у нас в дереве N, и раскиданы они по структуре как попало.

Решение и вся статья - под катом
Total votes 76: ↑72 and ↓4+68
Comments14

Способы оценки эффективности работника

Reading time4 min
Views43K
Многие менеджеры сталкиваются с одной очень занимательной проблемой в IT-сфере. И имя этой проблеме — оценка эффективности работника. Еще пол столетия назад такая задача не вызывала приступов мигрени и паники у руководителей или экономистов, потому что все было просто. Работник закрутил 50 гаек — плохо, закрутил 150 гаек — великолепно! Но пришла революция информационных технологий, и оценка эффективности стала краеугольным камнем.

image

Давайте разберемся, что к чему. Допустим, у нас есть абстрактный IT-работник, очень сильно смахивающий на программиста, который будет создавать не менее абстрактный продукт в некой компании таких же абстрактных работников. Первое, что сделал бы оценщик середины 19 века, это вывел вполне четкие показатели труда. И были бы это время и количество кода. Чем больше кода создает работник, при минимальных временных затратах, тем более эффективный работник. Все это хорошо, но это не работает.

Читать дальше →
Total votes 166: ↑142 and ↓24+118
Comments140

Information

Rating
Does not participate
Location
Россия
Registered
Activity