• Видеозаписи семинара CLRium #2

      Добрый день! Не так давно прошла серия семинаров CLRium по новейшим технологиям и редко-раскрываемым темам CLRium #2. Мы собрали у себя в залах около 740 человек, что для нас является — фантастическим результатом. Сегодня хотелось представить вам свежие видеозаписи семинара и ссылки на репозитории спикеров:

      День 1:

      Ссылки с привязкой ко времени:

      Читать дальше →
    • Настройка Xamarin Studio для полноценной работы с кодом

        При знакомстве с Xamarin обычно разработчиков в первую очередь смущает Xamarin Studio, которым иногда приходиться пользоваться по тем или иным причинам.

        Также цена редакции Business (1к$ в год) и Indie (25$ в месяц) может стать серьезным аргументом, чтобы на постоянной основе пользоваться Xamarin Studio не только iOS, но и Android разработчикам (будем надеяться, что теперь после покупки Microsoft сделает адекватные цены на эти лицензии).

        IDE Xamarin Studio (XS) на самом умеет гораздо больше, чем может показаться в начале с настройками по умолчанию. О том, как настроить и выжать побольше из Xamarin Studio, пойдет речь далее
        Читать дальше →
        • +11
        • 17.1k
        • 5
      • Шесть подработок для ИТ-специалиста, за которые платят в долларах



          Не поймали за хвост удачу в виде главного бага известного сервиса, нет желания “толкаться” на oDesk или не хочется делать то же, что уже и так делаете в рабочее время?

          Мы нашли альтернативные и не суперконкурентные варианты: излагать технический опыт по-английский, получать ренту с кода или завести монетизируемое хобби, связанное с математикой, инженерией или общением.

          Три пункта не про работу
        • CLRium #3. Анонс докладчиков



            15 апреля в Санкт-Петербурге, 22 апреля — в Москве, 29 апреля — в Омске, 13 мая — в Екатеринбурге и 20 мая — в Новосибирске пройдет серия семинаров CLRium #3.

            В прошлом году мы говорили об околохакерских штуках — разборе памяти .NET куч, приведение типов, между которыми приведение невозможно… Делили текущий поток на два… Говорили о ядре нового .NET Core и пытались понять, для чего нам нужен (и нужен ли?) Roslyn

            В этом же году мы поговорим о другом. О сугубо практически полезных вещах, о которых вы ранее наверняка не знали, но в которых таится огромная сила и мощь. Об изменяемых языках программирования, производительности и кроссплатформенной разработке GUI. Что значит «об изменяемых»? Это значит, что язык умеет менять собственный синтаксис.

            Как и ранее, у нас будут:
            • Максимально глубокие, отборные доклады по редко-раскрываемым вопросам
            • Мы будем говорить только о том, о чем вы наверняка, до того не знали
            • Максимально-полезные доклады, которые усилят Вас как специалиста
            • Почти все доклады — от 1,5 часов. Что позволит докладчикам не экономить и рассказать все что они знают
            Читать дальше →
            • +19
            • 5.2k
            • 4
          • Декораторы в typescript: оружие против сложности или бесполезная «свистелка»?

              Вы, наверное, уже наслышаны о такой странной вещи для js/ts разработчика, как декораторы. Вообще это паттерн проектирования, который можно использовать в любом языке. Но некоторые языки программирования, например python, притащили этот паттерн в свой синтаксис, чем вызвали противоречивую реакцию среди разработчиков. TypeScript уже зарекомендовал себя как сорока, тянущая удачный синтаксис из разных языков программирования. Но пойдут ли ему на пользу декораторы?

              Читать дальше →
              • +14
              • 14.5k
              • 6
            • SQL Server 2016 RC0

              • Tutorial


              На глаза попалась уже вторая новость на Хабре о том, что скоро Microsoft «подружит» SQL Server и Linux. Но ни слова не сказано про SQL Server 2016 Release Candidate, который стал доступен для загрузки буквально на днях.

              В следующем месяце планируется выпустить RTM, поэтому далее под катом разбор некоторых нововведений, которые будут доступны в рамках новой версии: отличия в установке, дефолтные трейс-флаги, новые функции и киллер-фича для анализа плана выполнения.
              Подробнее
            • Готовим ASP.NET Core: создаем собственный Tag Helper

                Мы продолжаем нашу колонку по теме ASP.NET Core публикацией от Станислава Ушакова ( JustStas) — team lead из компании DataArt. В статье Стас рассказывает о способах создания своих собственных тег-хелперов в ASP.NET Core. Предыдущие статьи из колонки всегда можно прочитать по ссылке #aspnetcolumn — Владимир Юнев
                В прошлый раз мы рассмотрели уже существующие в ASP.NET Core 1.0 тег-хэлперы. В этот раз мы рассмотрим создание собственных тег-хэлперов, что может упростить генерацию небольших переиспользуемых участков HTML-разметки.


                Введение


                Формально тег-хэлпером является любой класс, наследующий от интерфейса ITagHelper.На практике напрямую от ITagHelper наследовать не надо, удобнее наследовать от класса TagHelper, переопределяя метод Process / ProcessAsync, которые рассмотрим по ходу статьи.
                Читать дальше →
              • Готовим ASP.NET 5, выпуск №6: Continuous Deployment с Visual Studio Team Services — полное руководство

                • Tutorial
                Вслед за замечательными анонсами с конференции Connect 2015 мы продолжаем знакомить вас со сценариями использования новых технологий и сервисов для организации непрерывной разработки и тестирования ваших приложений.

                Недавно мы рассказывали о реализации непрерывных процессов разработки и тестирования с помощью Visual Studio Team Services (ранее Visual Studio Online). В статье подробно описывается как на базе репозиториев Git в Visual Studio Team Services организовать процесс разработки на базе Scrum и с помощью интеграции с Visual Studio обеспечить непрерывные процесс тестирования и разработки кода (Continuous Integration & Testing).


                В этой статье мы рассмотрим следующий шаг в построении полного цикла DevOps – обеспечение непрерывного развертывания (Continuous Deployment) с помощью новых возможностей настраиваемых шаблонов сборки и публикации проектов в Visual Studio Team Services. Мы будем использовать проект на базе ASP.NET 5 и увидим как для таких проектов обеспечить полный цикл от редактирования кода до автоматической сборки и развертывания в облаке Azure (может быть любым местом).
                Читать дальше →
                • +11
                • 11.1k
                • 2
              • Архитектура Stack Overflow

                • Translation
                image

                Чтобы понять, как все это работает, давайте начнем с показателей Stack Overflow. Итак, ниже приводится статистика за 12 ноября 2013 и 9 февраля 2016 года:

                статистика
                • 209,420,973 (+61,336,090) HTTP-запросов к нашему балансировщику нагрузки;
                • 66,294,789 (+30,199,477) страниц было загружено;
                • 1,240,266,346,053 (+406,273,363,426) битов (1.24 TБ) отосланного HTTP-трафика;
                • 569,449,470,023 (+282,874,825,991) битов (569 ГБ) всего получено;
                • 3,084,303,599,266 (+1,958,311,041,954) битов (3.08 ТБ) всего отослано;
                • 504,816,843 (+170,244,740) SQL-запросов (только из HTTP-запросов);
                • 5,831,683,114 (+5,418,818,063) обращений к Redis;
                • 17,158,874 (not tracked in 2013) поисков в Elastic;
                • 3,661,134 (+57,716) запросов Tag Engine;
                • 607,073,066 (+48,848,481) мс (168 часов) выполнения SQL-запросов;
                • 10,396,073 (-88,950,843) мс (2.8 часов) затрачено на обращение к Redis;
                • 147,018,571 (+14,634,512) мс (40.8 часов) затрачено на запросы к Tag Engine;
                • 1,609,944,301 (-1,118,232,744) мс (447 часов) затрачено на обработку в ASP.Net;
                • 22.71 (-5.29) мс в среднем (19.12 мс в ASP.Net) на формирование каждой из 49,180,275 запрошенных страниц;
                • 11.80 (-53.2) мс в среднем (8.81 мс в ASP.Net) на формирование каждой из 6,370,076 домашних страниц.


                Вы можете спросить, почему существенно сократилась продолжительность обработки в ASP.Net по сравнению с 2013 годом (когда было 757 часов) несмотря на прибавление 61 миллиона запросов в день. Это произошло как и из-за модернизации оборудования в начале 2015 года, так и из-за некоторого изменения параметров в самих приложениях. Пожалуйста, не забывайте, что производительность – это наша отличительная особенность. Если Вы хотите, чтобы я более подробно рассказал о характеристиках оборудования – без проблем. В следующем посте будут подробные спецификации железа всех серверов, которые обеспечивают работу сайта.

                Итак, что изменилось за прошедшие 2 года? Кроме замены некоторых серверов и сетевого оборудования, не очень многое. Вот укрупненный список хардварной части, которая обеспечивает работу ресурса (выделены различия по сравнению с 2013 годом):

                • 4 Microsoft SQL Servers (новое железо для 2-х из них);
                • 11 Web-серверов IIS (новое оборудование);
                • 2 сервера Redis (новое оборудование);
                • 3 сервера Tag Engine (новое оборудование для 2-х из 3-х);
                • 3 сервера Elasticsearch (те же, старые);
                • 4 балансировщика нагрузки HAProxy (добавлено 2 для поддержки CloudFlare);
                • 2 брандмауэра Fortinet 800C (вместо Cisco 5525-X ASAs);
                • 2 маршрутизатора Cisco ASR-1001 (вместо маршрутизаторов Cisco 3945);
                • 2 маршрутизатора Cisco ASR-1001-x (новые!).

                Что нам необходимо, чтобы запустить Stack Overflow? Этот процесс не сильно изменился с 2013 года, но из-за оптимизации и нового железа, нам необходим только один web-сервер. Мы этого не хотели, но несколько раз успешно проверили. Вношу ясность: я заявляю, что это работает. Я не утверждаю, что это (запуск SO на единственном web-сервере) — хорошая затея, хотя каждый раз выглядит весьма забавно.
                Читать дальше →
              • Готовим ASP.NET Core: создаем свой кроссплатформенный модульный фреймворк

                  Мы продолжаем нашу колонку по теме ASP.NET Core очередной публикацией от Дмитрия Сикорского ( DmitrySikorsky) — руководителя компании «Юбрейнианс» из Украины. В этот раз Дмитрий рассказывает о своем опыте разработки модульного кроссплатформенного фреймворка на базе ASP.NET Core. Предыдущие статьи из колонки всегда можно прочитать по ссылке #aspnetcolumn — Владимир Юнев
                  Из-за специфики моей задачи, последнее время достаточно много приходится размышлять о модульной и расширяемой архитектуре веб-приложений на ASP.NET Core (а до этого — на ASP.NET предыдущей версии). В результате появился ExtCore — небольшой кроссплатформенный фреймворк с открытым кодом, позволяющий буквально простым подключением NuGet-пакета превратить ваше веб-приложение в модульное и расширяемое.


                  Основные возможности


                  ExtCore умеет обнаруживать и использовать типы (а также, представления и статический контент), определенные как в проектах (в виде исходного кода или NuGet-пакетов), на которые есть явные ссылки в зависимостях, так и в проектах, которые размещены в определенной папке в виде скомпилированных DLL-сборок.

                  Для удобства, опционально, эти проекты могут быть условно объединены в расширения (т. е. каждое расширение может состоять из одного или многих проектов). Также, каждое расширение может иметь класс (в одном из проектов), реализующий интерфейс IExtension, а ExtCore, в свою очередь, позволяет в любой момент получить доступный набор экземпляров всех классов, реализующих этот интерфейс. Эти классы можно использовать для предоставления метаданных, описывающих расширения, инициализации расширений (например, регистрации маршрутов) и т. д.

                  Хотя непосредственно сам фреймворк и не содержит какого-либо функционала, связанного с работой с данными, но все, что для этого необходимо (в т. ч. единый контекст хранилища для всех расширений), реализовано в расширении ExtCore.Data, о котором ниже.
                  Читать дальше →
                • Байесовская нейронная сеть — потому что а почему бы и нет, черт возьми (часть 1)

                    То, о чем я попытаюсь сейчас рассказать, выглядит как настоящая магия.

                    Если вы что-то знали о нейронных сетях до этого — забудьте это и не вспоминайте, как страшный сон.
                    Если вы не знали ничего — вам же легче, полпути уже пройдено.
                    Если вы на «ты» с байесовской статистикой, читали вот эту и вот эту статьи из Deepmind — не обращайте внимания на предыдущие две строчки и разрешите потом записаться к вам на консультацию по одному богословскому вопросу.

                    Итак, магия:


                    Слева — обычная и всем знакомая нейронная сеть, у которой каждая связь между парой нейронов задана каким-то числом (весом). Справа — нейронная сеть, веса которой представлены не числами, а демоническими облаками вероятности, колеблющимися всякий раз, когда дьявол играет в кости со вселенной. Именно ее мы в итоге и хотим получить. И если вы, как и я, озадаченно трясете головой и спрашиваете «а нафига все это нужно» — добро пожаловать под кат.

                    Читать дальше →
                  • Математика на пальцах: методы наименьших квадратов

                    • Tutorial

                    Введение




                    Я математик-программист. Самый большой скачок в своей карьере я совершил, когда научился говорить:«Я ничего не понимаю!» Сейчас мне не стыдно сказать светилу науки, что мне читает лекцию, что я не понимаю, о чём оно, светило, мне говорит. И это очень сложно. Да, признаться в своём неведении сложно и стыдно. Кому понравится признаваться в том, что он не знает азов чего-то-там. В силу своей профессии я должен присутствовать на большом количестве презентаций и лекций, где, признаюсь, в подавляющем большинстве случаев мне хочется спать, потому что я ничего не понимаю. А не понимаю я потому, что огромная проблема текущей ситуации в науке кроется в математике. Она предполагает, что все слушатели знакомы с абсолютно всеми областями математики (что абсурдно). Признаться в том, что вы не знаете, что такое производная (о том, что это — чуть позже) — стыдно.

                    Но я научился говорить, что я не знаю, что такое умножение. Да, я не знаю, что такое подалгебра над алгеброй Ли. Да, я не знаю, зачем нужны в жизни квадратные уравнения. К слову, если вы уверены, что вы знаете, то нам есть над чем поговорить! Математика — это серия фокусов. Математики стараются запутать и запугать публику; там, где нет замешательства, нет репутации, нет авторитета. Да, это престижно говорить как можно более абстрактным языком, что есть по себе полная чушь.
                    Математика для программистов!
                  • Windows Phone как экспериментальная платформа

                      Большинство IT-компаний не делают версии своих продуктов под Windows Phone, потому что доля мобильной операционной системы от Microsoft меньше, чем у iOS и Android. Тем не менее, это третья крупнейшая мобильная операционная система на рынке, и в Badoo Windows Phone приложение уже давно существует.

                      Изначально оно было написано аутсорсным разработчиком на Silverlight и долгое время не обновлялось, и несколько лет у продукта не было выделенного отдела. В 2014 году в компанию пришел разработчик Windows Phone и стал поддерживать это приложение, а я стал получать на тестирование некоторые его задачи.

                      Через пару месяцев было решено написать полностью новое приложение, забросив почти все старые наработки во многом потому, что код был далек от идеала, а на его поддержку тратилось очень много времени. Первым новым приложением для Windows Phone стал экспериментальный проект Badoo — Hot or Not. По концепции он очень похож на Badoo, но в нем гораздо меньше функционала и он несколько отличается. Всего за 3 месяца мы вдвоем сделали приложение Hot or Not с нуля в одной ветке Git-репозитория, которую в итоге замержили в Master. А приложение TeamCity было настроено так, что каждый коммит разработчика собирался как отдельное приложение, что позволяло мне, как тестировщику, видеть историю изменений клиента.

                      Читать дальше →
                    • Собеседование в Booking.com (часть 2, заморская)



                        В первой части моей истории про собеседование в Booking.com я рассказал лишь половину, а именно все, что касалось удаленного общения из Москвы. Я остановился на том, что получил письмо от рекрутера с заголовком, который гласил «Interview Invitation To Amsterdam!». Это значило, что скоро мне предстояла поездка в Нидерланды, чтобы лично встретиться с кем-то из компании и пообщаться с глазу на глаз.
                        Читать дальше →
                      • Сравнение Angular 2 и Aurelia side by side

                          image

                          Не так давно в мире web-разработки произошло важное событие — вышла бета Angular 2. И уже можно строить предположения о том, как он будет выглядеть после релиза.

                          Но оценка сама по себе, в вакууме, напоминает выбор электроники по рекламным буклетам производителя. Все фишки, которые есть в гаджете, упомянуты. А все, которых нет — не упомянуты и мы можем про их существование даже не задуматься. Поэтому гораздо эффективнее оценивать сравнивая с чем-то еще.

                          Так и родилась мысль сравнить Angular 2 с новым, но весьма амбициозным проектом Aurelia, который так же недавно вышел в бету. А заодно пополнить копилку Хабра информацией об этом фреймворке, поскольку пока ее гораздо меньше, чем информации об Angular 2.
                          Читать дальше →
                          • +30
                          • 36k
                          • 8
                        • Как продать приложение, которое не приносит прибыль? И сколько оно стоит?

                            Давайте посмотрим правде в глаза — заработать на инди-приложении становится все сложнее. Под катом я расскажу, как можно продать ваше приложение, если оно перестало приносить прибыль, и сколько можно получить. В долларах :)
                            Читать дальше →
                          • Сравнение строк в C# (по умолчанию)

                              Часто бывает, что мы соединяем 2 коллекции или группируем коллекцию при помощи LINQ to Objects. При этом происходит сравнение ключей, выбранных для группировки или связывания.
                              К счастью, стоимость этих операций равна O(n). Но в случае больших коллекций нам важна эффективность самого сравнения. Если в качестве ключей выбраны строки, то какая из реализаций сравнения будет использована по умолчанию, подходит ли эта реализация для ваших строк и можно ли, указав IEqualityComparer<string> явно, сделать эту операцию быстрее?
                              clients.Join(orders, 
                                                 c => c.Name, 
                                                 o => o.ClientName, 
                                                 (c, o) => CreateOrederDto(c, o));
                              

                              Как же выбирается реализация компаратора, если пользователь не указал её явно?
                              Пороемся в исходном коде coreclr
                              • +28
                              • 35k
                              • 1
                            • Исходные коды библиотеки нейронных сетей на F# для .NET Framework

                                Периодически я получаю запросы относительно исходных кодов нейронных сетей, использованных в моих работах по анализу тональности, генерации текстов, а также в статьях на Хабре. Поэтому я решил выложить всё-таки их в открытый доступ, вместе с библиотекой на которую они опираются, несмотря на достаточно сырой код. В этой статье я напишу где взять, что можно сделать и немного о том, как пользоваться. Написана библиотка на языке F#, но использовать ее можно из любого .NET языка.
                                Читать дальше →
                                • +21
                                • 15.5k
                                • 7
                              • Готовим ASP.NET Core: поговорим подробнее про OWIN и Katana

                                  Мы рады поделиться с вами очередной статьей из серии статей о платформе ASP.NET Core (ранее ASP.NET 5). В этот раз Вячеслав Бобик — .NET-разработчика из компании Radario, продолжит свой рассказ о платформе рассказом про применение технологий OWIN, Katana и связанные вопросы. Все статьи цикла вы всегда можете найти тут #aspnetcolumn — Владимир Юнев

                                  Немного истории


                                  В далекие времена, когда только появился ASP.NET MVC версии CTP, никто и не задумывался, о кроссплатформености, о том, что было бы здорово запускать приложения, написаные на этом фрейворке, не только на IIS, но и на другом вэб-сервере, и на другой ОС.
                                  Со временем, богатство фреймворка ASP.NET MVC росло, росла и монолитная библиотека System.Web, от которой зависит фреймфорк и увеличивалась его сложность. В какой-то момент, а именно с четвертой версией, этот фрейворк стал довольно большим, почти прибитым гвоздями к IIS.

                                  С другой стороны, был ASP.NET Web API, который не имел прямых зависимостей на событийную модейль IIS, и мог хостится самостоятельно без IIS(self-hosting). В какой-то момент к ребятам из Microsoft пришло понимание, того, что нужен инстумент позволяющий возможность запускать вэб-приложения написанные на .Net не только на IIS, но и на других вэб-серверах, а так же обеспечивать возможноть гибко встраиваться в процесс обработки запросов. В итогде появилась спецификация OWIN и проект Katana.
                                  Читать дальше →
                                  • +10
                                  • 19.2k
                                  • 5
                                • Опыт переезда для работы программистом в Берлин (часть 2)

                                    Добрый день! В первой части я рассказывал о том, как получал визу и искал жилье, а в этой расскажу, как найти работу в Германии и как это делал я. Забегая вперед, скажу, что в Берлине мне потребовалась 10 дней, чтобы получить первый оффер, который я в итоге и принял. Но приготовления были, конечно, более длительными.
                                    Читать дальше →