• Как мы начали создавать конференции

      Всем привет! «Мы» — это только я — создаю конференции для .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,9k
                        • 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С.
                        Читать дальше →
                      • Расшифровываем формулу Хабра-рейтинга или восстановление функциональных зависимостей по эмпирическим данным

                          Если вы когда-нибудь читали раздел помощь на Хабре, то наверняка видели там прелюбопытнейшую строчку:
                          Допустим, вы написали публикацию с рейтингом +100 — это добавило к вашему персональному рейтингу величину Х. Через несколько десятков дней этот самый Х вычтется, тем самым вернув вас на прежнее место.
                          то наверняка задавались вопросом, что это за Х и с какого он района чему он равен?

                          Сегодня мы ответим на этот вопрос.


                          (измеряем Хабра-рейтинг в попугаях)

                          Структура статьи


                          1. Аналитический вывод
                          2. Регрессия
                          3. Исключения
                          4. Устойчивая регрессия
                          5. Скрипт и данные
                          6. Почему скрывать функцию бесполезно
                          7. Что с этим можно сделать?
                          8. Интерпретация формулы
                          Читать дальше →
                        • Лучшие грабли российских IT-стартапов



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

                            2. «Сам дурак»
                            Большая проблема — нежелание слушать мнение окружающих. Когда половина проекта готова и внезапно становится понятно, что проект нежизнеспособен, есть два варианта: резко меняться или сворачиваться. Знаете, что часто делают руководители IT-стартапов? Перестают слушать людей снаружи, превращают команду в секту и упорно допиливают продукт. Потому что полработы уже сделано.

                            3. Не знать конкурентов
                            Офигенный подход аутистов — взять и сделать прототип без изучения рынка. Незнание прямого конкурента, косвенного конкурента и западных аналогов продукта — это не самая хорошая идея. Нужно смотреть, кто уже работал в этом направлении и, главное, с какими проблемами сталкивался. Потому что эти проблемы придут к вам. Ещё полезно замерять показатели конкурентов и сравнивать со своими. Если конкурентов нет — это повод насторожиться. Возможно, ваш продукт никому не нужен.
                            Читать дальше →
                          • Баг в CLR: как затащить объект в песочницу без маршаллинга и вызвать Callback

                              Добрый день! Надеюсь, я уже завоевал на Хабре достижение «узнал автора по заголовку» -) Однако сегодня речь пойдет о свежей, еще не закрытой уязвимости в .Net, на которую меня навел своей мыслью один человек (кто подкинет ему инвайт?), который написал мне на почту:

                              Вы пытались IL кодом приводить объекты к строковому типу и передавать в другие домены?


                              Сначала я его не понял, но потом родился пример кода, который пробрасывает любой объект типа, находящегося в SharedDomain в песочницу и позволяет использовать его методы БЕЗ маршаллинга.

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

                              Первое, что нам понадобится — это ставшие обыденностью, методы EntityPtr.ToPointer() и *.ToInstance() из DotNetEx. Их комбинация заставляет приводить объект к несовместимому типу. Т.е. к тому типу, которым он не является:
                              string str = EntityPtr.ToInstance<string>(EntityPtr.ToPointer(new List<int>()));

                              Естественно, если вызвать любой метод у такой «строки», ничего не получится: вылетит Exception (кроме виртуальных методов от object — их позиции в таблице вирт методов совпадут с переопределенными в нашем типе и вызов произойдет корректно)

                              Однако, поскольку строка является уже сериализованным объектом, то при маршаллинге она передается по ссылке, без копирования. Это значит, что мы можем прокинуть ее в метод, код которого выполняется в «песочнице» и там, внутри, сделать кастинг обратно в тип.
                              Читать дальше →
                              • +20
                              • 7,7k
                              • 9
                            • Пишем расширения c Roslyn к 2015 студии (часть 2)

                              • Tutorial
                              … Эта статья является продолжением первой части о написании расширений к студии с Roslyn.

                              Тут я буду описывать что делать, если мы хотим сгенерировать/поменять какой-нибудь код. Для генерации кода мы будем статические методы класса SyntaxFactory. Некоторые методы требуют указать ключевое слово/тип выражения/тип токена, для этого есть перечисление — SyntaxKind, который содержит все это вместе.

                              Хорошо, давайте для примера сгенерируем код, содержащий число 10. Это делается просто.

                              SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(10))

                              Я не шутил, когда говорил, что чтобы создать код проще всего распарсить строку. Благо, SyntaxFactory предоставляет кучу методов для этого (ParseSyntaxTree, ParseToken, ParseName, ParseTypeName, ParseExpression, ParseStatement, ParseCompilationUnit, Parse*List).

                              Но это не путь настоящего самурая.
                              Давайте генерировать по пути самурая
                              • +27
                              • 6,3k
                              • 2