• Ворочаем большими объёмами документации



      • А как вы поддерживаете справку по API в актуальном состоянии?
      • Как можно организовать и хранить локализованные версии?
      • Вы проверяете текст на наличие недопустимых символов и на валидность разметки?
      • Как организовать проверку (вычитку) топиков?


      Эти и другие вопросы я часто слышу от технических писателей на конференциях. Для небольших объёмов документации достаточно вручную пересмотреть документы и обновить/подставить/поправить всё, что нужно. А если объёмы документации выросли?

      Наша документация выросла до более чем 154 000 документов только по .NET-линейке продуктов, из них около 140 000 документов — это справка по API. Около 8-10 тысяч топиков добавляются каждый мажорный релиз (т.е. дважды в год). В этой статье я расскажу как мы справляемся с такими объёмами.

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

      Секрет успеха прост
    • CodeRush for Roslyn: Part 1 — полезные фичи для разработки через тестирование

        Мы выпускаем новый продукт — CodeRush for Roslyn (далее CRR). Уже более 10 лет у нас есть другой продукт, который называется просто CodeRush, или CodeRush Classic (сокращенно CRC). Главное отличие CRR от CRC в том, что Roslyn-версия использует парсинг и языковые сервисы встроенные в Visual Studio. CRR полностью написан с нуля, поэтому он быстрый, легкий и уже содержит всё необходимое для эффективной работы.

        В этой статье я расскажу о поддержке тестовых фреймворков в CRR. Почти во всех примерах будет использован проект github.com/dewe/Money. Этот проект использует NUnit Framework, но мы так же поддерживаем xUnit, MSpec и MS Test Framework. Все рассмотренные ниже практики работают одинаково вне зависимости от того, какой тестовый фреймворк вы используете.
        Читать дальше →
      • Иммутабельность в JavaScript

        • Tutorial

        habracut


        Что такое иммутабельность


        Неизменяемым (англ. immutable) называется объект, состояние которого не может быть изменено после создания. Результатом любой модификации такого объекта всегда будет новый объект, при этом старый объект не изменится.

        Читать дальше →
      • Стилизация React-компонентов

        image


        Введение


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


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


        • Подразумевается, что будут использованы современные инструменты разработки вроде babel, webpack, browserify, gulp, post- pre- css-процессоры.

        Читать дальше →
      • Волшебный интерфейс

          Powered Interface

          Как-то на днях у меня возникла необходимость распечатать более десяти чеков из моей истории платежей, используя банкомат одного из крупнейших банков. Я перешёл в платежи, выбрал “История”, прокрутив скроллер списка до нужного платежа, выбрал его, а затем нажал кнопку “Операции” и выбрал печать. И так повторялось для каждого чека: каждый раз происходил переход в главное меню и всё начиналось заново. Я задумался — неужели, несмотря на обилие источников информации по UX, до сих пор тратятся огромные бюджеты на подобные неудобные интерфейсы? Почему разработчики не хотят делать интерфейс, позволяющий пользователю почувствовать себя волшебником, а делают пользователей беспомощными в достижении своих целей? Возможно, причина в том, что, несмотря на обилие теории, эти источники предоставляют мало примеров из реальных проектов.

          Так как мы буквально на прошлой неделе завершили большой Web-проект, в котором как раз стояла цель разработки удобного интерфейса, я решил осветить в статье, на какие основные моменты при проектировании интерфейса стоит обратить внимание, и привёл примеры нашего решения.
          Читать дальше →
        • За один проход

            Среди задач по программированию часто попадаются такие: дана последовательность однотипных элементов (обычно это числа), требуется за один проход по ней найти какую-нибудь характеристику (среднее квадратическое отклонение, количество минимальных элементов, непрерывный участок с наибольшей суммой...) Дополнительное ограничение — последовательность может быть очень длинной, и в память не поместится. Других ограничений на элементы последовательности, обычно, не накладывается.
            С этими задачами всё, более или менее, понятно: нужно найти то, что на мехмате МГУ называют «индуктивным расширением» искомой функции, и реализовать её вычисление. Если найти не удалось (требуемый объём памяти слишком велик), то задача не решается.
            Но попадаются и другие задачи. В них есть дополнительные ограничения на элементы последовательности в совокупности, и эти ограничения приходится существенно использовать для решения (и проверять их не надо). Простейшая такая задача выглядит так:

            Задача 1. В последовательности записаны целые числа от 1 до N в произвольном порядке, но одно из чисел пропущено (остальные встречаются ровно по одному разу). N заранее неизвестно. Определить пропущенное число

            Решение очевидно: просматриваем числа, находим их количество K и сумму S. По условию, N=K+1, значит, сумма чисел от 1 до N будет равна (K+1)*(K+2)/2, и пропущенное число равно (K+1)*(K+2)/2-S. Если вы почему-то боитесь переполнений, то работайте с беззнаковыми числами (там переполнения не страшны — но будьте осторожны при вычислении (K+1)*(K+2)/2 :) ), или вместо суммы ищите XOR всех чисел.
            Другие задачи
          • Визуализируем данные тренировок с DevExpress Dashboard



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

              Лирическое отступление
              Если ты не занимался в детстве никаким циклическим видом спорта, то увлечение спортом может начаться покупкой велосипеда. Велосипед, конечно же, выбирается после изучения множества отзывов и рекомендаций и чтения веломании, и обязательно не «ашанбайк» (см. недавно пролетавшую по интернету шутку про то, как бесит во всем разбираться). Потом получается, что на купленном крутом горном велосипеде кататься по парку и по городу не очень-то интересно, и ты ищешь единомышленников, начинаешь регулярно участвовать в покатушках местного велоклуба и возможно попадаешь на свою первую в жизни любительскую КК гонку. Там вдруг оказывается, что твоя физическая форма позволяет занять почетное место только где-то в конце списка. После этого, если ты не скажешь «ну их, эти гонки», а начнешь изучать ту же веломанию, но уже на предмет тренировок, читать «Библию велосипедиста», зарегистрируешься на страве (http//strava.com), начнешь регулярно тренироваться и вести дневник тренировок — вот тогда начнется спорт, пусть и любительский.

              Другая вещь, которую любят айтишники, это разнообразная статистика и цифры. Обычные спортивные сервисы не позволяют как-то играться со статистикой, предоставляя лишь стандартные виды отчетов, вроде счетчиков пробега или времени по неделям и дням недели и видам активности. Так уж получилось, что автор этих строк одновременно и тренируется, и участвует в разработке DevExpress Dashboard. И конечно же мне захотелось самому сделать дэшборд (и показать всем, как это легко) по данным из своего дневника тренировок.
              Читать дальше →
            • Захвати и визуализируй! Или гистограмма с микрофона средствами Web Audio API



                Я очень люблю «живые» графики. Смертельная скука — смотреть на статичные картинки с цифрами. Мне хочется, чтобы график завораживал, чтобы заставлял человека, который смотрит на него, взаимодействовать и открывать для себя новые грани всех данных на нем. Поэтому любой пример, что попадает мне в руки, и любая библиотека визуализации, которой не повезло оказаться на моей машине, проходит испытание “оживлением”. Вот и в очередной раз, раздумывая, как же еще я могу раскорячить визуализационные виджеты из DevExtreme библиотеки, я задумалась об отображении звука. «Интересно и живо» — подумала я в тот день, запаслась чаем с печеньками и засела за эту задачу. Что у меня в итоге вышло — узнаете под катом.
                Читать дальше →
              • Релиз компонентов DevExpress .NET, HTML5/JS и VCL v2015.2

                  Всем привет!

                  2015-й год близится к своему завершению и мы хотим пожелать всем разработчикам России (да и всего мира, чего уж!) весёлого новогоднего настроения, гармонии во всех ваших делах, ну и чтобы всё, что у вас ещё не получилось сделать до сих пор — обязательно получилось бы в следующем году!

                  А вот у нас, например, ещё в этом году получилось выпустить новую версию компонентов для .NET, HTML/JavaScript и VCL, и если вы используете наши продукты в своей работе и следите за их развитием, то добро пожаловать под кат.


                  Читать дальше →
                • Рисуем вместе. Портрет пользователя ИЕ 8 анфас



                    Примечание: автор вообще сидит на Опере, но это совсем другой вид порока, и речь сейчас не о нём.

                    Многие из нас знают о тяжелой болезни веб-сообщества — пережившем своё браузере Internet Explorer 8, который всё никак не уйдёт на покой.

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

                    Под катом - текущая ситуация, вопрос к вам и ссылка на копипастящуюся версию картинки
                  • Как IT-фрилансеру стать предпринимателем. Часть 3

                      Всем привет! Мы продолжаем серию постов о том, как IT-фрилансеру стать предпринимателем. Вы уже знаете, почему ИП лучше, чем ООО и как зарегистрировать ИП самостоятельно. Сегодня мы расскажем, что ждёт предпринимателя после регистрации.



                      Краткий путеводитель для начинающих предпринимателей от «Я люблю ИП»
                      Читать дальше →
                    • Да, я пишу десктопные приложения под Windows



                        Здравствуйте, меня зовут Владимир и я анонимный разработчик десктопных приложений под Windows. В этом месте все должны сказать «Здравствуй, Владимир!», а кто-то может быть добавит «Молодец, что осознал!». А потом все похлопают. Нет, правда, иногда от чтения Хабра у меня возникают именно такое ощущение, что нормально, нет, даже не «нормально», а допустимо и одобряемо сегодня писать только микросервисы для каких-то стартапов, которые будут по какому-то REST API отдавать данные какому-нибудь фронтенду на Ангуляре, который и будет, наконец, показывать пользователю что-то невероятно полезное, вроде таблицы с аггрегированными отзывами о стрижках пуделей с возможностью посмотреть на гуглокартах где бы в вашем городе можно было сделать именно такую стрижку вашему пуделю (несуществующему). А никаких других программ писать уже нет-нет, никак нельзя! Что за чушь?!

                        Да, многое сегодня происходит в вебе и на мобильных устройствах, но, знаете ли, далеко не всё. Значительная часть приложений по-прежнему является десктопным софтом. И даже (о, ужас!) не под Mac Os или Linux, а под тот самый богомерзкий Windows. И, знаете ли, софт этот живёт, развивается, поддерживается и является ежедневным рабочим инструментом миллионов людей. И никуда он мигрировать не собирается, потому что есть причины, по которым иногда именно десктопное приложение является лучшим вариантом.
                        Читать дальше →
                      • Что написано пером, или как проверить документы в форматах MS Office

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


                          Читать дальше →
                          • +20
                          • 11.1k
                          • 2
                        • SVG-иконки – много и со стилем


                            Маленький рассказ о том, как наша команда решила организовать иконки в грядущем проекте. Чуть-чуть исторического экскурса, взгляды по сторонам (на PNG и векторные шрифты) и рассказ о том, как мы всё-таки обустроились в итоге.

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

                            В общем, есть (и продолжают создаваться) иконки. Надо их положить на веб-страницу. Надо сделать это так, чтобы потом голова не болела про них весь остаток проекта и ещё пару лет в поддержке. Ну и есть дополнительные хотелки:
                            • хочется вектора. Ну, ладно, вектор – это средство, а не цель. Цель – не беспокоиться ВООБЩЕ об изменении размеров, ретина дисплеях, сохранении изображения в разных форматах для разных целей.
                            • хочется стилизации иконок. Потому что у нас из коробки как минимум два набора тем (светлая и тёмная), а то и контрастная, для людей с нестандартным зрением, а то и оранжевенькая какая-нибудь появится ближе к Новому году… В общем – одна и та же по сути иконка должна выглядеть слегка иначе в зависимости от выбранной на странице темы.
                            • хочется динамической стилизации иконок. Статики – нам мало. Этого хватает для скриншотиков и рекламных буклетиков, но не для живых пользователей. А мы хотели жизни! Мы хотели ховера! Мы хотели селекшена!!! И дизаблить, дизаблить их всех!.. Извините.
                            • НЕ хочется, чтобы в этом участвовал JavaScript в любой его форме и проявлении. Иконки – это внешний вид, а за него ответственный HTML + CSS. Ну, ладно, класс selected я готов навесить на элементы, но это последняя граница…

                            Есть и факторы, облегчающие задачу. Иконки сейчас (2015, осень, начинает снежить) в моде плоские, строгие. Если лет пять назад иконки пестрели, то сейчас это ушло под влиянием МС, Эппла, Материал Дизайна…

                            tl;dr Внимание. Следующие несколько разделов – это расплывание мыcлею по древу, причём вширь, обзор решений (в том числе – неудачных) и котик в разных ракурсах.
                            Кому хочется технических подробностей того, что же вышло в итоге – пожалуйте сюда.
                            А для остальных начнём по порядку...
                          • Перевод отрывков из книги Роберта Хайнлайна «Заберите себе правительство» — часть 5

                              «Мама лучше знает!» и «Отец всегда прав!»


                              Типичная привычка людей старшего поколения – пичкать юных потомков изречениями, вроде «Чем старее, тем мудрее!». Молодые люди в ответ обижаются и негодуют, до тех пор, пока сами не постареют достаточно для того, чтобы поучать следующее поколение.
                              Читать дальше →
                              • +15
                              • 17.9k
                              • 2
                            • На Кикстартере — куртка для любителей выпить



                                Осталось 10 часов до окончания приёма предварительных заказов на куртку The Drinking Jacket. Одежда с говорящим названием снабжена 2 внутренними и 2 внешними глубокими карманами (итого, под 4 ёмкости), скрытым карманом для фляжки, разворачиваемыми рукавами-перчатками и замком-молнией, открывающим пиво.

                                Удивительно, но куртка в 9 (!) раз превысила начальную цель по сбору средств: собрано заказов почти на полмиллиона долларов!
                                Читать дальше →
                              • Почему я прекратил ангел-инвестирование (и почему вы никогда не должны начинать). Часть 1

                                • Translation


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

                                Друг представил меня Клейтону Кристоферу (Clayton Christopher), который собирал деньги для своей новой алкогольной компании Deep Addy. Их первый продукт, сладкая чайная водка, был великолепен, и он был опытным предпринимателем, так что и я подключился к проекту.

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

                                Я ошибался.
                                Читать дальше →
                              • Защита переговоров. Антижучки и индикаторы поля


                                  Примеры найденных жучков (источник фото: Интернет)

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

                                  Я узнал, что компания detsys.ru проводит у себя бесплатное обучение по пользованию индикаторами поля и попросил у них на недельку три экземпляра антижучков и еще парочку имитаторов сигналов для проверки работоспособности поисковой техники, для того чтобы повозиться с ними в Хакспейсе.

                                  Под катом немного исторических примеров прослушки и доступные способы самостоятельной проверки своих помещений.
                                  (Если ваши далекие знакомые сталкивались с обнаружением и, не дай бог, с установкой жучков, поделитесь в комментах)
                                  Читать дальше →
                                • Пациент скорее жив, чем мертв? Обследование здоровья программного проекта



                                    Чек-листы – это эффективный инструмент контроля. Они сводят к минимуму возможность упущения важной информации и снижают вероятность совершения ошибок типа «не знал, забыл, закрутился».

                                    Стив Макконнелл в своей книге «Остаться в живых. Руководство для менеджеров программных проектов» приводит тест проекта на выживание. Этот чек-лист из 33-х пунктов, который должен иметь под рукой каждый менеджер, если он хочет привести проект к успеху. Процитирую этот тест с небольшими уточнениями, основанными на личном опыте.

                                    Каждый из 33 пунктов оценивается от 0 до 3:
                                    0 – даже не слышали об этом;
                                    1 – слышали, но пока не применяем;
                                    2 – применяется частично;
                                    3 – применяется в полной мере.

                                    Если какой-то пункт не применим, в силу особенности вашего проекта, ставим оценку равную единице. Итоговая оценка — сумма баллов, по всем пунктам.

                                    Ну, что, берем в руки калькулятор и обследуем ваш проект?
                                    Читать дальше →