• Внутренность boolinq для взрослых

      Статья для тех, кому интересна реализация библиотеки boolinq из предыдущего моего поста. В этой статье я копну в исходники и покажу несколько интересных приёмов, которые позволили сделать библиотеку «ленивой» и расширяемой.


      Читать дальше →
    • LINQ to Objects на языке C++

        Всё началось с того, что я в институте и после его окончания писал код на C++ и не знал бед. Но тут в один прекрасный день пришлось писать код под .NET на C#. Сперва немного поплевался, но потом ничего — втянулся. Увидел выгодные отличия от C++: безопасность, строгость и т.д. Также не смог обойти стороной LINQ при работе с коллекциями…



        Читать дальше →
      • Rule Engine, или как сделать систему проще

          Добрый дня всем!

          В этой статье я не буду касаться технических вопросов и не приведу примеров кода. Эта статья призвана дать понятие, что такое Rule Engine, для чего эта штука и что она умеет. Если вас заинтересует такой подход к построению систем, то вы без проблем найдете Rule Engine на ваш вкус и цвет.

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

          Вопросы и ответы



          Задайте себе вопросы:

          • Кто, как и на основании чего решает, в каком порядке самолеты садятся и взлетают?
          • Какова может быть цена неверного решения?


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

          Итак, кто? Ответ: в большинстве случаев люди. Не без помощи компьютеров конечно, но все таки люди. Теперь вопрос: как? Есть список возможных вариантов, человек из них выбирает. Вариантов дается немного, поэтому в принципе особых мук выбора нет. И последний вопрос: на основании чего? Есть правила, их нужно придерживаться и по возможности выполнять. Например, задержка вылета более чем на полчаса весьма нежелательна. Ну и главный вопрос: а причем тут Rule Engine?
          Читать дальше →
        • Нелегкий выбор Python или PHP. А может и то и другое?

          Несмотря на название, в данной статье не будет «холиварных» высказываний, обзоров достоинств или недостатков языков. По большей части данная статья носит философский, исключительно субъективный характер с небольшой примесью личного опыта.

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

          Формально, даже трудно передать, чем данный язык не устраивал. На любое утверждение или пример, найдется более грамотный специалист и поклонник PHP, который возразит: что надо делать не так, а вот так и все нормально будет, или вообще что это не проблема, а наоборот достоинство. Просто скажу так — этот язык перестал нравиться исключительно подсознательно, вот неприятно на нем писать и все. Не приносит работа удовлетворение.
          Читать дальше →
        • Как вы пишете условия в СИ-подобных языках? Со скобками в условиях или без?

             

            Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

            Как вы пишете условия в СИ-подобных языках? Со скобками в условиях или без?

            • 62.1%if ((a != b) || (c != d) && !e) { }1654
            • 34.8%if (a != b || c != d && !e) { }928
            • 2.9%Свой вариант, напишу в комментариях79
          • Еще одна статья о code review

              Что такое code review


              Code review - инженерная практика в терминах гибкой методологии разработки. Это анализ (инспекция) кода с целью выявить ошибки, недочеты, расхождения в стиле написания кода, в соответствии написанного кода и поставленной задачи.

              К очевидным плюсам этой практики можно отнести:
              • Улучшается качество кода
              • Находятся «глупые» ошибки (опечатки) в реализации
              • Повышается степень совместного владения кодом
              • Код приводится к единому стилю написания
              • Хорошо подходит для обучения «новичков», быстро набирается навык, происходит выравнивание опыта, обмен знаниями.

              Читать дальше →
            • Давайте сделаем паузу. Способ улучшения синхронизации потоков


                Пауза — временное молчание, перерыв в звучании музыкального произведения в целом или какой-либо его части или отдельного голоса.
                [Википедия]

                Удивительно, но иногда так бывает, чтобы что-то сделать в целом быстрее, надо это делать медленнее или вообще с паузами. Например, при имплементации активного ожидания spin-wait в многопотоковом коде рекомендуется использовать инструкцию pause, которая, как утверждает Intel Instruction Set Reference, делает это ожидание наиболее эффективным. «Какая чушь!» — скажете вы. Как может быть ожидание эффективным? Разработчики микропроцессоров утверждают, что при активном ожидании с инструкцией pause чип потребляет намного меньше энегии еще со времен Pentium 4. В чем еще может быть эффективность ожидания? Поговорим об этом ниже.
                Читать дальше →
                • +49
                • 13,1k
                • 5
              • Что нам стоит «умный» продукт построить?

                • Перевод
                В последнее время словосочетание «машинное обучение» (Machine Learning, ML) стало невероятно модным. Подобно любой распиаренной технологии, энтузиазм здесь превосходит уровень реализации конкретных продуктов. Можно спорить, но мало какие алгоритмические технологии со времен потрясающих инноваций от Google 10-15 лет назад привели к появлению продуктов, широко распространившихся в массовой культуре. Не то, чтобы с тех пор не было прорывов в машинном обучении, не было столь потрясших и имевших в основе вычислительные алгоритмы. Netflix может использовать умные рекомендации, но он и без этого Netflix. А вот если бы Брин и Пейдж не анализировали в своих корыстных целях графовую структуру веба и гиперссылки, у нас не было бы Google.

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

                Я не пытаюсь убедить вас не делать классных продуктов, основанных на машинном обучении. Я всего лишь пытаюсь прояснить, почему это так непросто.
                Читать дальше →
                • +18
                • 2,1k
                • 5

              Самое читаемое