Как стать автором
Обновить
-3
Карма
0
Рейтинг

Программист

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

Разработка веб-сайтов *JavaScript *Программирование *
Из песочницы

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


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



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


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

Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 3.9K
Комментарии 0

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

Java *Lisp *Алгоритмы *Функциональное программирование *
Recovery mode

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


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


Видрун, зачатая от морских ветров в верхушках елей,
Видрун, зелень моих ветвей, радость и ноша моих дней,
Видрун, всех вдохновенней и умней, да станет мудрость нашего клана твоей:
Никогда не читай Hacker News
Читать дальше →
Всего голосов 78: ↑62 и ↓16 +46
Просмотры 22K
Комментарии 27

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

Алгоритмы *Haskell *Функциональное программирование *

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


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

Читать дальше →
Всего голосов 27: ↑20 и ↓7 +13
Просмотры 8.9K
Комментарии 7

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

Cisco *Беспроводные технологии *
Из песочницы

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


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

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


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

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

Node.js без node_modules

Разработка веб-сайтов *JavaScript *Node.JS *

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


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


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

Читать дальше →
Всего голосов 39: ↑37 и ↓2 +35
Просмотры 27K
Комментарии 57

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

Информационная безопасность *PDF Разработка под Windows *
Перевод

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

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

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

JavaScript *Компиляторы *



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

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

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

Программирование *Анализ и проектирование систем *Проектирование и рефакторинг *C# *ООП *


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


Определение


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


Пример


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


Антипример


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


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


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


Назначение


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

Читать дальше →
Всего голосов 15: ↑9 и ↓6 +3
Просмотры 15K
Комментарии 58

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

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

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

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

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

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

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

Всего голосов 33: ↑20 и ↓13 +7
Просмотры 16K
Комментарии 320

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

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


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

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

Под катом мы расскажем, зачем нам это понадобилось, как удалось, а так же затронем несколько интересных технических подробностей.
Читать дальше →
Всего голосов 30: ↑29 и ↓1 +28
Просмотры 16K
Комментарии 32

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

Программирование *.NET *Проектирование и рефакторинг *C# *ООП *

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


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


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


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

Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Просмотры 13K
Комментарии 89

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

Программирование *.NET *Проектирование и рефакторинг *C# *ООП *

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


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


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

Читать дальше →
Всего голосов 10: ↑7 и ↓3 +4
Просмотры 9.5K
Комментарии 26

Обзор INSTEAD 1.2.0

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

Введение


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

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

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

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

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

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

Читать дальше →
Всего голосов 189: ↑132 и ↓57 +75
Просмотры 17K
Комментарии 144

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

jQuery *
Перевод
С появлением jQuery, у веб-программистов появилась возможность создавать впечатляющие визуальные эффекты, не прибегая к использованию технологии flash. В данной статье представлено несколько ярких примеров того, каких потрясающих результатов можно достичь, используя стандартные средства браузера и свое воображение.
Читать дальше →
Всего голосов 262: ↑246 и ↓16 +230
Просмотры 114K
Комментарии 78

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

Блог компании Developer Soft

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

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

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

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

Алгоритмы *

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


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

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


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

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

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

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

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

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

Алгоритмы *

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


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

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


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

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

Ищем индекс


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

Решение и вся статья - под катом
Всего голосов 76: ↑72 и ↓4 +68
Просмотры 36K
Комментарии 14

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

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

image

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

Читать дальше →
Всего голосов 166: ↑142 и ↓24 +118
Просмотры 42K
Комментарии 141

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность