• CFD 3D: простой симулятор воды





    Введение


    CFD (Computational fluid dynamics) — вычислительная гидродинамика.
    Используется для моделирования разных процессов в жидкостях, а также разных типов жидкостей (например мёд, нефть — это все жидкости).

    В данном посте рассматривается 2D симулятор обычной воды с открытой поверхностью и препятствиями (для 3D версии все аналогично + доступны исходники).
    Поверхность воды представляет собой границу, отделяющую воду от воздуха.Это позволяет моделировать волны, падение капель и т.д.
    Читать дальше →
  • Процедурный генератор хрущёвок

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

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

      В общем, недолго думая, я сел и написал генератор хрущёвок на C# под Unity3d. Под катом описание работы алгоритма и размышления на тему uv-карт, сабмешей и шейдеров.
      Читать дальше →
    • Отказываемся от шаблонных шаблонных параметров

        Использовать шаблонные шаблонные параметры С++ довольно сложно. Хочу продемонстрировать силу boost::mpl и показать трюк, позволяющий описывать шаблоны, полностью отказавшись от шаблонных шаблонных параметров.
        Продемонстрирую проблему. Есть класс, принимающий тип объекта и тип контейнера для этого объекта.
        template <typename T, typename Container>
        struct A
        {
          typedef Container<T> type;
        };
        

        Так писать нельзя, вы должны использовать шаблонные шаблонные параметры, чтобы указать, что Container сам по себе является шаблоном.
        Читать дальше →
      • Пишем приложения для Google Glass

        Несколько дней назад я имел возможность основательно попрактиковаться в разработке приложений для Google Glass. Полученный опыт растеряется со временем, так как пока разрабатывать что-то ещё под “очки” не планирую. Чтобы поделиться пока ещё свежими впечатлениями решил написать этот топик.
        Думаю, всем кто интересуется Google Glass известно, что представляет собой программная “начинка” этого гаджета. Да, это Android 4 с адаптированным launcher-ом. Да, в “очках” вполне можно запускать обычные android-приложения, установив их туда через adb. Известно вам наверняка и про Mirror API, который до недавнего времени считался единственным способом официально предоставить свой сервис пользователю Google Glass. Ниже я немного расскажу о использовании этого инструмента. Но главное, о чём хотелось бы рассказать — как писать под Google Glass полноценные android-приложения, используя пока ещё не официальный Glass Development Kit.
        Читать дальше →
        • +26
        • 17.2k
        • 6
      • Тестирование в Яндексе. Матчеры: когда они полезны и как легко их использовать

          Апельсины здесь ни при чёмКак вы могли догадаться по картинке справа, речь пойдёт об автоматизированном тестировании. Точнее о такой технологии, как матчеры. Они помогают серьёзно сократить дублирование кода и упростить код тестов для восприятия, а создавать и использовать матчеры достаточно просто.

          Сама по себе технология матчеров не новая — в текущем виде она была залита в репозиторий в июле 2012 года, а появилась и того раньше. Но, несмотря на это, многие о ней до сих пор не слышали или по каким-то причинам избегают. Мы хотим рассказать, как легко получать преимущества от её использования, и поделиться с вами нашей библиотекой матчеров.
          Читать дальше →
        • Основы MPI

          Прочитал статью «Основы MPI для «чайников»» и понял, что статья новичка способна отпугнуть.

          Теория


          Начнем с начала

          Первое время не было единого стандарта (API) для параллельных вычислений и программистам приходилось писать для каждого кластера архитектурно-специфический код. Но, как известно, программисты люди рациональные и быстро было решено организовать стандарты (самые известные — MPI, OpenMP).
          Читать дальше →
        • Dojo Build System, собственный опыт создания сборки

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

          А поговорим мы о системе сборки.
          Читать дальше →
        • Новая технология C++ AMP от Microsoft для вычислений на GPU

            Технология C++ Accelerated Massive Parallelism (C++ AMP) построенная на платформе Microsoft DirectX, согласно новому блог-посту. Microsoft планирует сделать эту технологию частью следующего Visual C++ компилятора и полностью интегрировать в следующую версию Visual Studio, под кодовым именем Visual Studio vNext (скорее всего выйдет под названием Visual Studio 2012).
            Читать дальше →
          • Таблицы Юнга в задачах поиска и сортировки

            Таблицы Юнга являются широко известным (в узких кругах) типом объектов, изучаемых в комбинаторике и смежных науках: ссылка, ссылка, книжка. Ниже рассматривается применение частного вида таблиц Юнга применительно к таким стандартным алгоритмическим задачам, как поиск и сортировка. С этой точки зрения таблицы Юнга весьма близки пирамидам, собственно так они и позиционируются в учебнике Кормена и ко (упражнения в разделе, посвященном пирамидам).
            Читать дальше →
          • Конкурентный доступ к реляционным базам данных

            СхемаВопросы параллелизма в компьютерных вычислениях очень сложны! Причинами большой сложности являются огромное количество деталей, которые нужно учитывать при разработке параллельных программ. В программирование и без того существует большое количество деталей, которые создают почву для ошибок, параллелизм же, добавляет ещё.

            Вопросы конкурентного доступа к реляционным базам данных встают практически перед любыми разработчиками прикладного программного обеспечения и не только перед ними. Результатом такой востребованности этой области является наличие большого количества созданных архитектурных паттернов. Это позволяет успешно справляться с большой сложностью разработки таких программ. Ниже пойдёт речь о таких рецептах, а также механизмах на которых базируется их реализация. Повествование будет иллюстрироваться примерами кода на Java, но большинство материала не привязано к языку. Цель статьи — описать проблемы конкурентного доступа к реляционным базам данных, в качестве введения в предмет, а не полноценного охвата темы.
            Читать дальше →
          • Знакомство с библиотекой шифрования libgcrypt

            Добрый день, хабрахабр!

            imageВ процессе написания одной из своих программ мне понадобилось разобраться с библиотекой шифрование и де-шифрования текста. Я разобрался и теперь хочу поделиться накопленным опытом и знаниями с сообществом.

            В данной статье речь пойдет о библиотеке libgcrypt.
            Читать дальше →
          • Распознавание рукописных математических выражений

              Здравствуй, Хабр!

              В этой статье я хочу поделиться опытом распознавания рукописных математических выражений. Хотя уже и существуют такие средства распознавания рукописных формул как «Панель математического ввода» mip.exe в Windows7, разнообразие подходов к решению данной проблемы не может не впечатлять. Об одном из таких подходов я и собираюсь рассказать.




              Читать дальше →
            • Масштабирование карты, наложение меток и отображение маршрута без использования javascript

                imageОднажды, загорелся я идеей создания инструмента просмотра маршрута на карте своего города без использования javascript. Даже были аргументы в пользу этого. Например, использование своих изображений карт.
                UPD: Есть аналоги у популярных сервисов c их картами (на момент создания о них еще не знал):

                Спасибо за ссылки комментирующим
                Но мы делаем свою.
                Что из этого вышло
              • И опять про MVC

                Я нашел в сети очень мало реализаций MVC для JavaScript, поэтому хотел бы раскрыть преимущества данного подхода именно в реализации JavaScript.

                Заранее скажу, что использование MVC больше подходит к бизнес приложениям, играм, интерфейсам типа админки или что-то подобное Gmail/Google docs. Если у вас промо-сайт с тысячей баннеров и летающими снежинками по экрану, использование MVC бессмысленно и даже вредно.

                Немного истории:
                Читать дальше →
              • TDD в JavaScript. Разработка приложения

                  Всем привет. Данная статья посвящается методологии Разработки через тестирование (TDD) в применении c JavaScript.
                  Напишу лишь вкратце о методологии TDD, более подробную информацию можно почерпнуть из ссылки выше.

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

                  Читать дальше →
                • Быстрое вычисление точной 3D карты расстояний с использованием технологии CUDA

                    Карта расстояний (Distance Map) — это объект, позволяющий быстро получить расстояние от заданной точки до определенной поверхности. Обычно представляет собой матрицу значений расстояний для узлов с фиксированным шагом. Часто используется в играх для определения «попадания» в игрока или предмет, и для оптимизационных задач по совмещению объектов: расположить объекты максимально близко друг к другу, но так, чтобы они не пересекались. В первом случае качество карты расстояний (то есть точность значений в узлах) не играет большой роли. Во втором — от нее могут зависеть жизни (в ряде приложений, связанных с нейрохирургией). В этой статье я расскажу как можно достаточно точно обсчитать карту расстояний за разумное время.
                    Читать дальше →
                  • Уж такой элементарный C/С++: может->является

                      Вопрос на пять: что напечатает эта простая программа:
                          #include <stdio.h>
                      
                          typedef int a;
                          a b = 5;
                      
                          int main()
                          {
                             a(b);
                             printf("%d\n", b);
                             return 0;
                          }
                      
                      Уже натерпевшиеся от своего любимого языка, но ещё не прошерстившие всех бизонов gcc, почувствуют подвох — и правильно. Подсказка номер ноль: это скушает С++, но и простой С не подавится.
                      Если не догадались, милости прошу!