• Проектирование и разработка шаблонного движка на C# и ANTLR

      Предыстория


      Уже много лет мы помогаем нашим клиентам отправлять потребителям хорошие, информативные и человеческие письма. В них вместо сухого “Добрый день” мы пишем “Здравствуйте, Никита!”, а вместо “Ваш баланс пополнился” сообщаем “вы получили 25 баллов”. Но маркетологи становятся все изобретательнее, и современное письмо от интернет-магазина должно выглядеть так:


      В реальной жизни всего этого на порядок больше в каждом письме


      И мы хотим уметь генерировать такие письма автоматически.

      Читать дальше →
    • Автоматизация нагрузочного тестирования: связка Jmeter + TeamCity + Grafana



        Изображение: Flickr

        В нашем блоге на Хабре мы продолжаем рассказывать о построении DevOps-культуры в компании — например, в одном из последних топиков мы описывали то, какие задачи решаем с помощью системы SaltStack. Сегодня речь пойдет о другой интересной теме — автоматизации нагрузочного тестирования с помощью связки нескольких готовых инструментов.
        Читать дальше →
        • +25
        • 11.9k
        • 5
      • Короткая шпаргалка по блокировкам при чтении и изменении данных в зависимости от уровня изоляции транзакции в MSSQL

          Read Uncommitted

          • если в одной транзакции поменять данные — селект этих данных (в другой транзакции или без транзакции) не будут ждать окончания первой транзакции и вернут записанные данные незакомиченных транзакций
          • если в одной транзакции считать данные — апдейты этих данных в другой транзакции не будут ждать окончания первой транзакции
          • шаред локи не используются. Что аналогично установке NOLOCK хинта во все селекты в Read Commited
          • эксклюзивные локировки устанавливаются в процессе выполнения стейтмента и снимаются по окончанию транзакции


          Read Committed + read_committed_snapshot off

          (alter database xxx set read_committed_snapshot off)

          • если в одной транзакции поменять данные — селект этих данных (в другой транзакции или без транзакции) будут ждать окончания первой транзакции. Селект с NOLOCK хинтом вернёт изменённые, но не закомиченные данные.
          • если в одной транзакции считать данные — апдейты этих данных в другой транзакции не будут ждать окончания первой транзакции
          • шаред локировки устанавливаются в процессе работы стейтмента и снимаются по окончанию стейтмента
          • эксклюзивные локировки устанавливаются в процессе выполнения стейтмента и снимаются по окончанию транзакции


          Дальше
        • Конкурс по программированию на JS: Классификатор слов

            Компания Hola объявляет начало весеннего конкурса по программированию! Призовой фонд увеличен:

            1. Первое место: 3000 USD.
            2. Второе место: 2000 USD.
            3. Третье место: 1000 USD.
            4. Возможно, мы решим отметить чьи-то чрезвычайно оригинальные решения двумя специальными призами в 400 USD.
            5. Если Вы отправите кому-то ссылку на этот конкурс, поставив наш адрес в CC, и этот человек займёт призовое место, Вы получите половину суммы приза (разумеется, не в ущерб награде победителя). За одного победителя такую награду может получить только один человек — тот, кто отправил ссылку первым.

            Мы ищем талантливых программистов, поэтому авторы интересных решений будут приглашены на собеседования.

            Опубликовано дополнение: Тестовая программа, часто задаваемые вопросы, типичные ошибки.
            Опубликовано дополнение: О ходе тестирования.


            Правила


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

            Условия конкурса на английском языке размещены на GitHub. Ниже — перевод на русский язык.

            Читать дальше →
          • Введение в machine learning: с чего начать изучение и как применять

              image
              Машинное обучение — это математическая дисциплина, изучающая алгоритмы способные выделять знания из данных. Несмотря на то, что эта дисциплина в основном теоретическая, в жизни большинства людей она с каждым годом играет все большую и большую роль. Так, сложно сейчас встретить человека, который бы ничего не слышал о торговых роботах, Яндексе, Google Street View, Siri.

              В докладе коллеги Алексадра Сенова из проекта Synqera для очередного нашего технического i-Free meet-up проведен небольшой экскурс в машинное обучение. Из него мы узнаем чуть больше про области применения, рассмотрим основные задачи, возникающие в рамках машинного обучения, а так же алгоритмы их решения. Уделим внимание проблемам, возникающим при их применении, приведем пару примеров и рекоммендаций по дальнейшему изучению.

              Подробности
            • Про Бурали-Форти, Пуанкаре и то самое определение единицы

                Если вы, уважаемый мой читатель, имеете обыкновение проводить много времени в интернете, вы наверняка уже видели эту картинку с цитатой:

                image

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

                В нижеследующем тексте я раскрою перед вами тайну этого загадочного сочетания символов. Пожалуйте под кат, однако помните поучительную историю о любопытной Варваре, которой на базаре рассказали про парадокс Банаха-Тарского, отчего она сошла с ума, разрезала себе нос на конечное количество частей и склеила из них рогатую сферу Александера.
                N.B. Я предупреждал.
              • Архитектура Intel RealSense SDK

                • Translation

                Пакет Intel RealSense SDK по своей архитектуре отличается от своего предшественника — пакета Intel Perceptual Computing SDK. Если вы, будучи разработчиком, использовали Intel Perceptual Computing SDK для разработки приложений, вы быстро оцените улучшенную модель программирования в новом SDK, предоставляющую доступ к поддерживаемым режимам работы через несколько популярных платформ разработки приложений. В этой статье мы описываем основные изменения в Intel RealSense SDK.
                Читать дальше →
              • Смотря на код с закрытыми глазами

                От переводчика

                Эта статья — перевод блогозаписи Флориана Бейджерса, слепого программиста из Нидерландов.
                Перевод любительский, поэтому прошу указывать на ошибки и критиковать.
                Я не нашёл корректного перевода слова accessibility, поэтому перевёл его как «доступность». Если есть вариант получше — предложите, пожалуйста.
                Антон Туманов предложил «адаптированность», за что ему большое спасибо.
                Как заметил в комментарии pepelsbey, «доступность» является корректным переводом, вернул её обратно.
                Почему я сделал перевод? Я наткнулся на опрос на Quora.com «Как программируют слабовидящие программисты?». Ответы людей меня впечатлили, а блогозапись Флориана показалась наилучшим вариантом для введения в этот важный вопрос.

                Я — программист. А ещё я слеп. Слеп, как крот, как говорится. Таков я от рождения.

                Когда я говорю об этом своим товарищам, то те из них, у кого никогда не было проблем со зрением, обычно задают один из трёх вопросов:

                • Как же ты тогда можешь читать то, что я пишу?
                • Ого. А как ты тогда можешь кодить?
                • Или — самый популярный вопрос — А ты видишь сны?

                Мне задают эти вопросы снова и снова. Поэтому в этой блогозаписи я хочу на них ответить. Я попытаюсь нарисовать картинку для тех из вас, кто интересуется доступностью и тем, как слепые люди пользуются компьютером, кодят и выполняют другие работы в 21 веке.
                Читать дальше
              • Современные операционные системы. 4-е изд

                  Привет Хаброжители!
                  У нас вышло 4-е измененное издание книги «Современные операционные системы».

                  image

                  Эндрю Таненбаум представляет новое издание своего всемирного бестселлера, необходимое для понимания функционирования современных операционных систем. Оно существенно отличается от предыдущего и включает в себя сведения о последних достижениях в области информационных технологий. Например, глава о Windows Vista теперь заменена подробным рассмотрением Windows 8.1 как самой актуальной версии на момент написания книги. Появился объемный раздел, посвященный операционной системе Android. Был обновлен материал, касающийся Unix и Linux, а также RAID-систем. Гораздо больше внимания уделено мультиядерным и многоядерным системам, важность которых в последние несколько лет постоянно возрастает. Появилась совершенно новая глава о виртуализации и облачных вычислениях. Добавился большой объем нового материала об использовании ошибок кода, о вредоносных программах и соответствующих мерах защиты. В книге в ясной и увлекательной форме приводится множество важных подробностей, которых нет ни в одном другом издании.
                  Читать дальше →
                • История Вселенной за один день

                    Здравствуйте.
                    Хочу предложить Вашему вниманию великолепный документальный сериал «Космос: Пространство и время» от канала FOX и National Geographic, являющийся продолжением научно-популярной передачи «Космос: Персональное путешествие с Карлом Саганом». Год выпуска 2014, фильм сделан на очень высоком уровне и самое главное — никакого креационизма, мистики и прочей чепухи.

                    image

                    Ведущий — американский астрофизик, доктор философии по физике, писатель и популяризатор науки Нил Деграсс Тайсон (Плутон негодует), очень интересно и доступно расскажет о том, что происходило начиная с первой секунды существования нашей Вселенной.

                    Читать дальше →
                  • От чего защищает strong name в .net cборках?

                      Основная цель strong name или подписи сборки это ее уникальность в GAC(Global assembly cache). На основании сборки во время подписи вычисляется криптографический открытый ключ, закрытый хранится в секрете у производителя сборки, хеш-функция от которого и составляет public token, что, по сути, есть strong name для сборки. Public token сохраняется в метаданных сборки и в паре с именем сборки, версией, и культурой, и служит для уникальной ее идентификации.

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

                      Но многие заблуждаются думая, что сборка со строгим именем защищена от модификации. Справедливости ради, стоит заметить, что если производитель сборки опубликовал public token или открытый ключ, например на своем сайте, то всегда можно проверить соответствует ли этот ключ или токен тому ключу, который зашит в используемые сборки, но это скорее придется проверить вручную. Важно другое, что строгое имя не защитит сборку от модификации, как многие думают, и соответственно механизм в CLR не отработает, как положено и загрузит модифицированную сборку.
                      Читать дальше →
                    • Играем с генетическими алгоритмами

                        Одним субботним декабрьским вечером сидел я над книгой The Blind Watchmaker (Слепой Часовщик), как на глаза мне попался невероятно интересный эксперимент: возьмём любое предложение, например Шекспировскую строку: Methinks it is like a weasel и случайную строку такой же длины: wdltmnlt dtjbkwirzrezlmqco p и начнем вносить в неё случайные изменения. Через сколько поколений эта случайная строка превратится в Шекспировскую строку, если выживать будут лишь потомки более похожие на Шекспировскую?

                        Сегодня мы повторим этот эксперимент, но в уже совершенно другом масштабе.



                        Структура статьи:
                        1. Что такое генетический алгоритм
                        2. Почему это работает
                        3. Формализуем задачу со случайной строкой
                        4. Пример работы алгоритма
                        5. Эксперименты с классикой
                        6. Код и данные
                        7. Выводы

                        Осторожно трафик!
                        Читать дальше →
                      • Как работает декомпиляция в .Net или Java на примере .Net

                        • Tutorial

                        Сегодня хотелось бы поговорить про декомпиляцию приложений (все применительно к той же Java, да и любому языку с некоторыми допущениями и ограничениями, но поскольку сам я — .Net разработчик, примеры будут совсем немного MSIL'овизированы :) ).

                        Для вводной, перечислю текущие средства декомпиляции в мире .Net:
                        • JetBrains dotPeek (поддержка R# хоткеев, сервер символов)
                        • Telerik JustDecompile (также не плохой, множество хоткеев)
                        • RedGate Reflector (аналог dotPeek, но платный. Изначально был основным в мире .Net, но пока был бесплатным)
                        • icsharpcode ILSpy (хороший, opensource. Полезен, когда вы сами пишете код, использующий Mono.Cecil, т.к. Это даст лучшее понимание его работы)
                        • 9rays Spices .Net Decompiler
                        • Dis# с функцией inplace editor

                        Для программной декомпиляции:
                        • Mono.Cecil (основной, самый крутой декомпилятор в мире .Net. На выходе получаете объектное «зеркало» содержимого сборки. Т.е. Максимально-упрощенно, без наворотов типа конвертации массива IL в DOM).
                        • ICSharpCode.Decompiler (надстройка над mono.cecil, переводящая array[MSIL] в DOM, где есть циклы, switches и if'ы. Является частью SharpDevelop/ILSpy)
                        • Harmony Core (аналогичное от меня, но сохраняющее информацию о символах. В среднем состоянии, не готова для прода, помощь приветствуется).


                        А теперь, хотелось бы описать как они работают (вам же интересно, как работает машинка от JetBrains?). Чтобы как минимум понять, насколько это сложно: написать свой декомпилятор .Net сборки обратно в код на C#.



                        Читать дальше →
                      • WoodyMac — деревянный конструктор будущего

                          Не берусь утверждать что каждый, но во всяком случае — большинство из нас в детстве сталкивались с конструкторами.
                          Некоторые из них запомнились больше, часть некоторых навсегда остались в «коробочках для гаек» (если мы говорим о железном конструкторе «Конструктор»).

                          И если оставить в стороне «премиальное» на те времена Lego и его китайские заменители из 90-х, остается еще одна ниша — деревянные конструкторы.

                          Кроме, собственно, классических кубиков — у меня сохранились отчетливые воспоминания о конструкторе «Дом»

                          image

                          Однако, прогресс неумолимо приблизился и к ним…

                          Читать дальше →
                        • Логика мышления. Часть 6. Система проекций



                            Для тех, кто только присоединился, я советую начать с первой части или хотя бы с описания используемой нами волновой модели коры. Суть волновой модели в том, что информация кодируется одновременно двумя способами. Первый способ – это паттерны вызванной активности, соответствующие обнаруженным нейронами-детекторами явлениям. Второй – волны идентификаторы, распространяющиеся от паттернов вызванной активности и несущие уникальные узоры. Уникальность узора каждой из волн позволяет на удалении от источника сигнала узнать о его активности. При таком подходе хорошо объясняется сформулированное Мак-Каллоком и Питсом несоответствие между объемом зон коры и количеством волокон в пучках, проецирующих информацию от них на другие зоны.
                            Читать дальше →
                          • Оформление резюме для зарубежных компаний

                            Disclaimer


                            Текст не претендует на истину в последней инстанции, описанное ниже основано на собственном опыте и рекомендациях людей с больше чем двадцати годами опыта в IT в США и Канаде.

                            Анализ резюме рекрутером


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

                            У вас есть 3-5 минут чтобы заинтересовать своим резюме. Это то, сколько будет уделено времени на него в начале, в лучшем случае. Часто резюме могут отсеяться спустя 10 секунд. Вас никто не знает, вы это лист бумаги с текстом, и это единственное, что вас может отличить от других. Представьте, что вы хотите купить новый телевизор, вас вряд ли будут интересовать длинные мануалы или 5 страничные описания. Выбирая из десятков и сотен аналогов, нужно за 5-10 секунд сделать предварительный отсев по определенным параметрам. Оставшимся 5-10 устройствам вы выделите чуть больше времени, а потом еще помешкаете выбираю между двух. Как то так и происходит отбор кандидатов.
                            Читать дальше →
                          • Работа для программиста в США: 5 простых шагов

                              image Статья про то, что делать тем, кто хочет переехать работать в США. Я предполагаю инженерные позиции, на которые проще всего получить визы, но, возможно, статья окажется полезна и другим специалистам.

                              Мой опыт несколько отличается от нижеописанного (я попала на работу в США после стажировки). Но за 4 года в США пообщалась с людьми, которые попали сюда разными путями и набрала кое-какой опыт. Так что если бы я очень хотела найти работу в США сегодня, то я бы действовала примерно так, как описано ниже.

                              Заранее извиняюсь, если мой тон кому-то покажется наставническим — я не имею амбиций учить других жизни, просто иногда у меня получается такой стиль.
                              Читать дальше →
                            • Жонглирование. Теория. Практика

                                Настороженно отношусь к непрофильным топикам, но решил написать этот по следующим причинам:
                                • У жонглирования есть своя теория — стройная и математически привлекательная!
                                • Мы живем не только работой. Жонглирование — отличное развлечение и разминка после долгого сидения за компом.
                                • В пятницу приятно немного расслабиться и почитать не очень серьезные статьи. К тому же, будет чем заняться на выходные, особенно если у вас не было определенных планов.

                                Теория


                                Утверждать, что жонглирование — это последовательность бросков, все равно, что сказать, что музыка — это просто последовательность нот. Нельзя назвать это неправдой, но любой, хоть немного знакомый с музыкальной теорией, возмутится последним определением — столь поверхностным и недалеким.
                                Читать дальше →
                              • 50 цитат о программировании всех времён

                                • Translation
                                Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

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

                                49. Lisp — это не язык, а строительный материал.
                                — Alan Kay

                                48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
                                — Edward V Berard
                                Читать дальше →