• Релиз Mono 4.0 с импортом кода из referencesource.microsoft.com и corefx


      — Сделали поддержку C# 6 по-умолчанию
      — Потюнили в плане улучшения производительности GC и рантайм
      — Ускорили операции с float на 30-40%
      — Добавили поддержку PowerPC64 LE
      — И, самое главное импортировали очень большой кусок BCL из .NET Framework.
      Список импортированного кода
    • Храним 300 миллионов объектов в CLR процессе

        Камень преткновения — GC


        Все managed языки такие как Java или C# имеют один существенный недостаток — безусловное автоматическое управление паматью. Казалось бы, именно это и является преимуществом managed языков. Помните, как мы барахтались с dandling-указателями, не понимая, куда утекают драгоценные 10KB в час, заставляя рестартать наш любимый сервер раз в сутки? Конечно, Java и C# (и иже с ними) на первый взгляд разруливают ситуацию в 99% случаев.

        Так-то оно так, только вот есть одна проблемка: как быть с большим кол-вом объектов, ведь в том же .Net никакой магии нет. CLR должен сканировать огромный set объектов и их взаимных ссылок. Это проблема частично решается путём введения поколений. Исходя из того, что большинство объектов живёт недолго, мы высвобождаем их быстрее и поэтому не надо каждый раз ходить по всем объектам хипа.

        Но проблема всё равно есть в тех случаях, когда объекты должны жить долго. Например, кэш. В нём должны находиться миллионы объектов. Особенно, учитывая возрастание объемов оперативки на типичном современном серваке. Получается, что в кэше потенциально можно хранить сотни миллионов бизнес-объектов (например, Person с дюжиной полей) на машине с 64GB памяти.

        Однако на практике это сделать не удаётся. Как только мы добавляем первые 10 миллионов объектов и они “устаревают” из первого поколения во второе, то очередной полный GC-scan “завешивает” процесс на 8-12 секунд, причём эта пауза неизбежна, т.е. мы уже находимся в режиме background server GC и это только время “stop-the-world”. Это приводит к тому, что серверная апликуха просто “умирает” на 10 секунд. Более того, предсказать момент “клинической смерти” практически невозможно.
        Что же делать? Не хранить много объектов долго?

        Зачем


        Но мне НУЖНО хранить очень много объектов долго в конкретной задаче. Вот например, я храню network из 200 миллионов улиц и их взаимосвязей. После загрузки из flat файла моё приложение должно просчитать коэффициенты вероятностей. Это занимает время. Поэтому я это делаю сразу по мере загрузки данных с диска в память. После этого мне нужно иметь object-graph, который уже прекалькулирован и готов “к труду и обороне”. Короче, мне нужно хранить резидентно около 48GB данных в течении нескольких недель при этом отвечаю на сотни запросов в секунду.

        Вот другая задача. Кэширование социальных данных, которых скапливаются сотни миллионов за 2-3 недели, а обслуживать необходимо десятки тысяч read-запросов в секунду.
        Читать дальше →
      • Особенности внедрения DLL и установки хуков в Modern-приложениях Windows 8/10

        • Tutorial
        Для чего вообще нужно внедрять свои DLL-ки в чужие процессы и устанавливать там хуки? Для того, чтобы понять какие функции будет вызывать это приложение, с какими параметрами и что эти функции вернут. Таким образом мы можем понять внутреннюю логику работы этого приложения, узнать к каким файлам оно пытается получить доступ, какие данные пересылает по сети, мы можем добавить в него логирование, профилирование, отладить баг, получить из приложения некоторые данные или наоборот — добавить в его интерфейс что-нибудь нужное нам. Хуки использует известная утилита Spy++ для работы с окнами приложений, DirectX-отладчики вроде RenderDoc, некоторые утилиты от SysInternals, программы типа ApiMonitor и т.д.

        Некоторое время назад я писал вводные статьи об использовании хуков на примерах библиотек Microsoft Detours и madCodeHook (если вы совсем не знакомы с хуками — это то, с чего можно начать). Описанных там техник достаточно для работы с обычными приложениями, но время не стоит на месте и вот сегодня у нас уже есть Metro Modern-приложения, входящие в комплект Windows 8 и Windows 10, а также распространяющиеся через Microsoft Store программы сторонних производителей. К примеру, новый браузер Spartan — это Modern-приложение. Внедрение DLL в эти процессы имеет свои особенности и на первый взгляд может даже показаться невозможным, но это не так. В этой статье я расскажу, как мы можем залезть внутрь Modern-приложения и установить в нём хуки в своих коварных целях.
        Читать дальше →
        • +22
        • 13k
        • 1
      • Как мы начали создавать конференции

          Всем привет! «Мы» — это только я — создаю конференции для .Net разработчиков. Начинал с того, что в прошлом году собрал 200 человек в сумме по Москве, Питеру, Екатеринбургу. В этом году ожидается до 700 человек. И, как говорится, это только начало. О том, как я начинал в прошлом году, и с каким количеством косяков повстречался, я и хочу поведать.

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

          Перед тем, как начать


          Во-первых необходимо собрать максимум информации, которая будет уникальной и по которой будет не найти ничего в интернете. Это будет крайне желательно, поскольку именно за нее люди готовы заплатить деньги. У меня в качестве этой информации были примеры «как снять дамп с виртуальной памяти всех .Net объектов», а также «клонирование потока с сохранением места исполнения кода и замыканием всех переменных». В этом примере рассказывается о манипуляциях со стеком и TEB.
          Читать дальше →
        • Как правильно оформить поставку программного обеспечения

          • Tutorial
          Вопрос выбора договорной схемы распространения программного обеспечения далеко не праздный, поскольку прямо связан с налоговыми последствиями. Данная заметка поможет вам быстро разобраться в особенностях договоров, применяемых для дистрибуции ПО, и сделать осознанный выбор.
          Читать дальше →
        • Открой Open Source 2ГИС

            Open Source 2ГИС
            2ГИС выпускает справочники и карты городов с 1999 года. За это время мы прошли большой технологический путь — от одного ПК-приложения с данными для Новосибирска до API карт и справочника, десктопных приложений на Windows, Ubuntu и OS X, мобильных приложений на Android, iOS, Windows Phone и Blackberry с данными по 270 городам мира.

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

            Этими инструментами с удовольствием делимся на Гитхабе, а для удобства сделали ещё и Open Source раздел на 2ГИС.Технологиях. Чтобы вы разобрались, что есть что, мы расскажем о наших флагманских инструментах с открытым кодом.
            Читать дальше →
          • Делаем скриншоты правильно: практические советы

            • Tutorial
            Устройство для снимка экрана на первых компьютерах (Command-Shift-3)
            Устройство для снимка экрана на первых компьютерах (Command-Shift-3)

            Если вы когда-либо делали хелп или мануал для своего приложения, наверняка вы отметили, как неожиданно много времени и сил занимает создание скриншотов.

            Ведь кажется, что скриншот — это “секунда работы, Alt+PrintScreen и Ctrl+V!”. Некоторые клиенты удивляются, когда слышат, что скриншот в мануале может стоить и $2 и даже $5.

            В этой статье я расскажу, как правильно делать скриншоты, почему это не просто “два клика” и какие подводные камни встречаются на пути неопытного скриншотера. Рассматривайте ее как чеклист или список практических советов для тех, кто документирует ПО. Надеюсь, это поможет вам избежать разочарований и порадовать юзеров красочными понятными картинками.
            Читать дальше →
          • Командно-ориентированная навигация в xaml-приложениях

              Недавно мы уже узнали о принципе прямых инжекции и эффективном связывании вью-моделей с представлениями, а также о том, каким образом создавать расширения привязки. Продолжим исследование библиотеки Aero Framework и рассмотрим ещё один архитектурный вопрос.

              Навигация между представлениями (экранами) в xaml-ориентированных приложениях довольно важная и интересная задача. Особенно это касается её реализации в рамках паттерна MVVM. В идеале вью-модели не должны содержать никаких прямых ссылок на представления, чтобы быть кросс-платформенными и сохранялась возможность повторного их использования в нескольких проектах. Сегодня мы узнаем, как этого достичь.

              Читать дальше →
            • Под капотом образовательного проекта Хекслет

                Привет, Хабр!



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

                Напомню, Хекслет — это платформа для создания практических уроков по программированию в настоящей среде разработки. Под настоящей средой разработки мы подразумеваем полноценную машину, подключенную к сети. Эта важная деталь отличает Хекслет от других образовательных проектов (например, Codecademy или CodeSchool) — у нас нет симуляторов, все по-настоящему. Это позволяет обучать и обучаться не только программированию, но и работе с базами данных, серверами, сетью, фреймворками и так далее. В целом, если это запускается на Unix-машине — этому можно обучать на Хекслете. При этом, понимая это или нет, пользователи используют Test-Driven Development (TDD), потому что их решения проверяются юнит-тестами.

                В этом посте я расскажу про архитектуру платформы Хекслет и инструменты, которые мы используем. О том, как на этой платформе создавать практически уроки — в следующей статье.
                Читать дальше →
              • Как создавалась одна из самых эмоциональных сцен «The Last of Us»

                  image
                  Скриншот из игры

                  Серьезно нашумевший в 2013 году проект «The Last of Us» по праву считается одной из жемчужин среди игр для PlayStation 3, а после и PlayStation 4. Студия-разработчик Naughty Dog, известная среди игроков благодаря таким франшизам как Crash Bandicoot и Uncharted, всегда очень внимательно подходит к работе, в особенности учитывая то, что уже много лет их главный хлеб — это эксклюзивы для японских консолей. Можно долго спорить о предпочтениях, но большинство геймеров сходятся в одном: The Last of Us получила более сотни призов в номинации «Игра Года» по версиям различных издательств по всему миру не просто так. Одной из самых сильных сторон проекта называлась история, что неудивительно, ведь награду гильдии сценаристов США кому попало не дают. А сцена встречи с жирафами в постапокалиптическом мире, как это не дико звучит, сыграла в описании этой истории и придании ей эмоционального окраса не последнюю роль. Предлагаю Вам познакомиться с воспоминаниями Джона Суини, одного из художников студии Naughty Dog.

                  Публикация содержит сюжетные спойлеры. Если вы: 1. Геймер, ценящий сюжет. 2. Все еще не играли в The Last of Us. 3. Не смотрели прохождение или трехчасовой игрофильм на YouTube, то вам стоит воздержаться от прочтения и познакомиться с историей главных героев самостоятельно.
                  Читать дальше →
                • Простое объяснение движения денег в банковской системе

                  • Перевод
                  От переводчика: В последние месяцы в жизнь многих людей прочно вошли новости сферы финансов. Одна из недавних тем — возможное отключение России от системы SWIFT. Угроза выглядит очень серьезно, но что на самом деле грозит стране, если события будут развиваться по этому сценарию? Наш сегодняшний материал призван помочь разобраться с тем, как все устроено в глобальном мире финансов.

                  На прошлой неделе [статья опубликована в ноябре 2013] Twitter сошел с ума из-за того, что кто-то перевел почти 150 миллионов долларов за одну транзакцию в криптовалюте. Появление такого твита было в порядке вещей:



                  Транзакция 194 993 биткоинов стоимостью в 147 миллионов долларов порождает много тайн и спекуляций

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

                  С помощью этой статьи я попытаюсь изменить ситуацию и проведу простой, но, надеюсь, не слишком упрощенный, анализ в этой области.
                  Читать дальше →
                • Главные темы CodeFest 2015

                    image

                    По традиции в последние выходные марта мы проводим крупнейшую IT-конференцию за Уралом. 28—29 марта встречаемся там же, где и в прошлом, и позапрошлом, и позапозапрошлом году — в новосибирском Экспоцентре. Поводы те же: познакомиться с крутыми спикерами, пообщаться с коллегами по отрасли и пошуметь на афтепати.

                    В программе семь треков: mobile-, frontend- и backend-разработка, тестирование, управление продуктами и проектами, дизайн и поток квартирников — так у нас называются дискуссионные панели.
                    Итак, к главным темам программы
                    • +22
                    • 8,7k
                    • 3
                  • PVS-Studio: 25 подозрительных фрагментов кода из CoreCLR


                      Корпорация Microsoft выложила в открытый доступ исходный код движка CoreCLR, который является ключевым элементом .NET Core. Эта новость, конечно же, не могла не привлечь наше внимание. Ведь чем больше аудитория у проекта, тем тревожнее будут выглядеть найденные подозрительные места. Несмотря на авторство Microsoft, как в любом крупном проекте, тут есть на что посмотреть и над чем задуматься.

                      Введение


                      CoreCLR является средой исполнения .NET Core, выполняя такие функции как сборку мусора или компиляции в конечный машинный код. .Net Core — это модульная реализация .Net, которая может быть использована как база для огромного количества сценариев.

                      Исходный код с недавнего времени доступен на GitHub и проверялся с помощью PVS-Studio 5.23. Как и я, желающие могут получить полный лог проверки с помощью Microsoft Visual Studio Community Edition, выход которой тоже был недавней новостью от Microsoft.
                      Читать дальше →
                    • Age of JIT compiling. Part I. Genesis

                        Тема рантайма платформы .NET освещена весьма подробно. Однако работа самого JIT, результирующий код и взаимодействие со средой исполнения – не очень.

                        Ну что ж, исправим это!

                        Узнаем причины отсутствия наследования у структур, природу unbound delegates.

                        А еще… вызов любых методов у любых объектов без reflection.
                        Читать дальше →
                      • Age of JIT compiling. Part II. CLR is watching you

                          Продолжая тему JIT-компиляции .NET'a, сегодня мы рассмотрим диспетчеризацию методов у интерфейсов, generics (как классов, так и отдельных методов вместе с реальными сигнатурами); производить отладку релизных сборок с оптимизациями; разберемся с истинным предназначением типа System.__Canon (это не то, что Вы подумали).
                          Читать дальше →
                        • Конференция Mobius 2015 по мобильной разработке: анонс докладов

                            Всем привет!

                            В последние две недели я что-то слегка забегался и перестал следить за докладами, опубликованными на сайте Mobius 2015. Сегодня зашел и офигел: пока я мотался по командировкам, наш программный директор Андрей real_ales Дмитриев замутили нереально крутую программу! Лично мне кажется, что она на голову выше как прошлогодней, так и вообще любой программы любой другой мобильной конфы.



                            На сегодня программа Mobius 2015 сформирована на 85%: анонсировано 18 докладов из планируемых 21. Все доклады мы разбили на 5 групп: Devices, Tools, Tests, Security и Others. Сейчас, за 4 недели до конфы, самое время для того, чтобы коротко по ним пройтись.
                            Обзор докладов Mobius 2015
                          • Программа и материалы курса «Multicore programming in Java»

                            • Tutorial
                            Добрый день.
                            Меня зовут Головач Иван, я буду уже второй раз вести спецкурс-вебинар «Multicore programming in Java». В этой статье предлагаю на рассмотрение программу курса и наиболее полезные ссылки по вопросам многопоточности в Java.

                            Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

                            Кратко о курсе: стартует 1 сентября, ведется в режиме вебинаров дважды в неделю (понедельник + четверг) в 19.00-22.00 (по московскому времени), состоит из 16 лекций по 2.5 часа (=40 лекционных часов), рассчитан на Java Middle.

                            1. Модуль #1: Между hardware и New JMM
                            1.1 Программа модуля
                            1.2 Литература к модулю
                            2. Модуль #2: java.util.concurrent
                            2.1 Программа модуля
                            2.2 Литература к модулю
                            3. Модуль #3: Fork/Join Framework + Parallel Streams
                            3.1 Программа модуля
                            3.2 Литература к модулю
                            4. Модуль #4: “Неклассические архитектуры”
                            4.1 Программа модуля
                            4.2 Литература к модулю
                            Читать дальше →
                            • +17
                            • 30,4k
                            • 1
                          • Сертификация Microsoft

                            • Tutorial

                            Сертификация Microsoft предназначена для специалистов в различных областях, связанных с информационными технологиями, а также c сертификациями аппаратного и программного обеспечения на предмет совместимости с продуктами Microsoft.

                            Экзамены сдаются в центрах VUE. Экзамены по направлению Office сдаются в Certiport центрах тестирования.

                            Стоимость экзаменов обычно равна 80$ (60 EU), но некоторые экзамены могут стоить дешевле (60$).
                            Общую картинку можно увидеть на следующем плакате:
                            Читать дальше →
                          • Легкое управление списками баз 1С

                            «Лучше день потерять, а потом за пять минут долететь» (с) м/ф Крылья, ноги и хвосты.



                            На «Хабре» есть три отличных поста про управление списками баз в 8.х:

                            1. «Управление списками баз 1С 8.2»;
                            2. «Как приготовить сотни баз 1С и не сойти с ума»;
                            3. «Управление списком баз 1С 8.2 с помощью Active Directory».

                            Каждый из них содержит свой кусок паззла от полноценной картины: Легкое управление списками баз 1С.
                            Читать дальше →