• Расшифровываем формулу Хабра-рейтинга или восстановление функциональных зависимостей по эмпирическим данным

      Если вы когда-нибудь читали раздел помощь на Хабре, то наверняка видели там прелюбопытнейшую строчку:
      Допустим, вы написали публикацию с рейтингом +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,6k
          • 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,2k
          • 2
        • Предлагаю нестандартный опросник по .Net

            Предлагаю не совсем стандартный опрос по платформе .Net. Спойлерами раскрыты ответы на вопросы, но все-таки прошу сначала самим ответить на опросник, после чего идти и смотреть ответы :)

            Когда вызывается статический метод, то JIT...
            JIT компилирует вызов прокси-метода, который делает безусловный переход на компилятор необходимого и тот заменяет адрес перехода в прокси на новое тело метода. Это делается по нескольким причинам.

            Изначально, когда методы компилируются, все точки вызова других методов указывают не на скомпилированное тело, а на кусочек ассемблерного кода фиксированной длинны и содержащий одни и те же инструкции для любого метода. По сути меняется только адрес, на который происходит jmp. До того как метод скомпилирован, адрес указывает на компилятор этого метода (потому при первом вызове происходит компиляция). Далее, когда компиляция закончена, аргумент команды jmp меняется с адреса компилятора на адрес целевого, уже скомпилированного метода. Плюсы очевидны: т.к. прокси — содержит одно и те же инструкции, то группу методов можно рассматривать как таблицу с двумя полями: Код и Адрес Перехода с одной стороны и не менять адреса у инструкции вызова метода — с другой.

            Читать дальше →
          • Курсы этичного хакинга и тестирования на проникновение. Новый набор

              Курсы этичного хакинга и тестирования на проникновение. Практическая подготовка.


              Поздравляем всех читателей блога PENTESTIT с новым, 2015-м годом, который, скорее всего, будет сложным, но интересным и многое расставит на свои места. Кризис — время непростое, но что, как не кризис провоцирует компании массово оптимизировать расходы и повышать качество услуг, а сотрудников стимулирует поддерживать, повышать уровень профессиональной подготовки? Кризис — это время возможностей. Как для самосовершенствования, так и для развития нового бизнеса.

              В предыдущих статьях мы подводили итоги нашей работы в 2014 г. Для нас этот год оказался весьма позитивным. Проделав большой объем работы, удерживая на высоком уровне качество услуг, мы смогли сделать большой шаг вперед, расширив рынок не только в России, но и в странах Восточной и Западной Европы, Северной Америки, Азии и, конечно, СНГ. Спасибо всем тем, кто по-достоинству оценил нашу работу и профессионализм.

              Обновленная программа, включающая самый актуальный материал.
              В конце прошлого года мы говорили об изменениях, которые затронут программы обучения «Zero Securty: A» и «Корпоративные лаборатории». Мы дополнили их новыми способами обнаружения и эксплуатации уязвимостей. Отличительной особенностью программы «Корпоративные лаборатории» является то, что помимо хардкорной практической подготовки слушатели получают возможность послушать доклады, которые можно услышать только на профессиональных технических форумах — это одна из отличительных особенностей наших курсов.

              Примеры заданий по эксплуатации уязвимостей.

              Читать дальше →
              • +10
              • 23,9k
              • 3
            • Упаковка, компрессия и защита сборок

                последняя редакция статьи доступна на сайте makeloft.xyz

                Материалы этой статьи описывают механизмы компоновки, компрессии, динамической загрузки, а также пути элементарной защиты .NET-сборок стандартными средствами среды разработки Visual Studio. Однако, возможно, нижесказанное будет в некоторой степени справедливо и для других программных платформ.

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

                Но, обладая определёнными знаниями, можно выполнить весь процесс самостоятельно с полным контролем на каждом шаге и возможностью отладки уже упакованных сборок…

                image
                Читать дальше →
                • +9
                • 9,9k
                • 7
              • Разработка vs. Тестирование, или куда податься выпускнику ФВТ

                  Среди определенной части специалистов сферы IT бытует мнение, что разработку ПО и тестирование следует рассматривать как процессы-антагонисты. Действительно, написание исходного кода, разработка дизайна и т.д. – это созидательные процессы, в то время как тестирование – всегда носит деструктивный характер. На фоне специфики своей деятельности, между специалистами двух областей непрерывно возникают различные рабочие, а иногда и личностные, конфликты. Поэтому команды разработки и тестирования, зачастую, противостоят друг другу, а сотрудники делятся на «чужих» и «своих». К какому же лагерю примкнуть начинающему айтишнику? Попытаемся проанализировать оба направления и ответить на данный вопрос.
                  Читать дальше →
                • Visual Studio + Roslyn = конфигуратор для 1С: Предприятие

                    Roslyn позволяет C# проект преобразовать в открытый XML-формат конфигурации 1С: Предприятие. C#-проект при поддержке Visual Studio автоматически снабжается Intellisense, интерактивной проверкой синтаксиса и типов, рефакторингом, расширенным поиском по проекту, поддержкой XmlDoc. Настраиваемое расположение документов проекта на диске и более выразительный и экономный формат делает C#-проект на Visual Studio лучшим выбором в системах версионирования.

                    Понятно, что от чистой теории до реализации всех особенностей 1С очень далеко. Приведенный в статье пример обладает следующими ограничениями. В примере реализована поддержка нескольких типов объектов и нескольких часто встречающихся свойств. Атрибуты объектов могут быть одного типа, хотя 1С допускает составной тип. Трансляция кода в код 1С не поддерживается. Реализованы англоязычные наименования.

                    Читать дальше →
                    • +12
                    • 11,8k
                    • 9
                  • C#: Внутреннее строение инициализаторов массивов

                    Наверняка почти каждому, кто имел дело с C#, известна подобная конструкция:

                    int[] ints = new int[3] { 1,2,3 };//А если уж вдруг и не была известна, то отныне и впредь уж точно
                    

                    Вполне логично было-бы ожидать превращение этой конструкции в нечто подобное:

                    int[] ints = new int[3]; 
                    ints[0] = 1; 
                    ints[1] = 2; 
                    ints[2] = 3;
                    

                    Увы и ах, на деле орех гораздо более морщинист, чем кажется с первого взгляда, и имеются некоторые тонкости, на которые будет указано позже. А до тех пор, наденем ношеную «IL freak» майку (у кого имеется) и погрузимся в недра реализации.
                    Погрузись, и ты узнаешь насколько глубока кроличья нора
                  • Дайджест интересных, топовых и фатальных материалов из мира Хабра за 2014 год

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

                      Для рейтинга был найден последний, судя по дате, пост 2013 года. Первый после него пост 2014 года был 11 января. Видимо автор начал писать его до НГ, а потом резко оказалось 11 января после праздников. А вот следующий уже ближе к началу года. В общем, возможно, есть минимальные погрешности.

                      За 2014 год на Хабре и GT, куда переехали некоторые посты, находится 7672 опубликованные записи. Это примерно 21 пост в сутки.

                      Из всех этих записей были выбраны 20 топовых по количеству плюсов, 10 антитоповых по количеству минусов, и по 15 интересных записей из разных хабов, где количество постов с рейтингом +20 было более 10. Интерес поста оценивался простой формулой «на глаз». Результат равен рейтингу*5 плюс количество попаданий в избранное*2 и плюс комментарии. Коэффициенты добавлены для того, чтобы минусные посты ушли дальше в минус и, если в них было много комментариев, они не вытеснили интересные посты из топа.

                      В общем, дайджест топовых, фатальных и интересных постов Хабра за 2014 год под катом.
                      Посмотреть длинный список постов
                    • Введение в .NET Core

                      • Перевод


                      На конференции connect(), мы объявили, что .NET Core будет выпущен полностью как программное обеспечение с открытым исходным кодом. В этой статье мы сделаем обзор .NET Core, расскажем, как мы собираемся его выпускать, как он соотносится с .NET Framework и что это все означает для кросс-платформенной разработки и разработки с открытым кодом.
                      Читать дальше →
                    • Расширяем C# с помощью Roslyn. Безопасные вызовы

                        У вас никогда не возникало ощущения, что в языке X, на котором вы в данный момент программируете чего-то не хватает? Какой-нибудь небольшой, но приятной плюшки, которая может и не сделала бы вашу жизнь абсолютно счастливой, но определенно добавила бы немало радостных моментов. И вот вы с черной завистью посматриваете на язык Y, в котором эта штуковина есть, грустно вздыхаете и тайком льете по ночам слезы бессилия в любимую подушку. Бывало?
                        Будем лечить
                        • +31
                        • 7,5k
                        • 7
                      • Интеграционное тестирование в Java EE, Адам Бин

                        • Перевод
                        • Tutorial
                        Прагматичное интеграционное тестирование может повысить вашу производительность и гарантировать развертывание JavaEE-приложения.

                        Адам Бин (Германия) – консультант, тренер, архитектор, член экспертной группы Java EE 6 и 7, EJB 3.X, JAX-RS, и JPA 2.X JSRs. Java Champion, Top Java Ambassador 2012 и JavaOne Rock Star 2009, 2011, 2012 и 2013 гг. Автор книг «Real World Java EE Patterns–Rethinking Best Practices» и «Real World Java EE Night Hacks–Dissecting the Business Tier».

                        Предлагаем вам ознакомиться с переводом статьи Адама «Integration Testing for Java EE»
                        Читать статью
                        • +9
                        • 22,4k
                        • 1
                      • Concurrency структуры в .net. ConcurrentDictionary изнутри

                        Все началось с одного собеседования, которое и натолкнуло меня к написанию данной статьи. Довольно большая часть разработчиков на платформе .Net не понимает базовые вещи, хотя и использует их повседневно, например lock-ом оборачивают все методы, использующие ConcurrentDictionary, хотя можно было бы обойтись обычным Dictionary<>.

                        В науке существуют 3 основных способа реализации конкурентных структур данных:
                        • Lock-free структуры данных;
                        • Fine-grained блокировка;
                        • Transactional memory implementation(транзакционная память);

                        ConcurrentDictionary<TKey, TValue> — это thread-safe аналог Dictionary<TKey, TValue>. В его основе лежит, так называемый Fine-grained блокировка.
                        Читать дальше →
                        • +24
                        • 21,2k
                        • 6
                      • С# 6, Roslyn, умные дома и контроль дизайна приложений на онлайн встрече DevLabs

                          Что является главным на любой конференции для разработчиков? На мой взгляд любую конференцию определяют не организаторы, не помещение и даже не наличие обедов. Их прежде всего определяют люди и те доклады, которые они делают. Ведь при годных и интересных докладах остальное уходит на второй план =) Потому, при проектировании очередной онлайн встречи разработчиков .Net мы крайне ответственно подошли к вопросу выбора спикеров и тем. В перенасыщенную конференциями, осень, мы рады представить онлайн-конференцию по вопросам разработки на платформе .Net.

                          Что будет? Три НЕ разжеванные вдоль и поперек, темы. Онлайн-конференция, на которую можно сходить бесплатно, из любого города. И послушать про новый язык C#6, Roslyn и историю его эволюции, про возможность сделать умный дом привычными для .Net разработчика, средствами и про автоматическую проверку нарушений дизайна приложений при помощи зарекомендовавшего себя годами, продукта PostSharp, который совсем недавно обжился новыми функциями и поддержал кросс-платформенную разработку с Xamarin

                          Я рекомендую пройти под кат (либо напрямую к нам в DevLabs) и ознакомиться со спикерами и темами докладов более подробно и записаться. Ведь несколько часов экспертного мнения никогда не повредят.

                          Онлайн-встреча будет проводиться: 20 декабря, в субботу, с 11:00 до 15:30

                          Видеозаписи всех докладов будут доступны для зарегистрировавшихся участников в течение недели после мероприятия
                          Списки статей спикеров и информация по темам докладов
                          • +21
                          • 14,4k
                          • 7
                        • .NET/Mono в Java? Легко!

                            Здравствуйте. Хочу представить свой проект – компилятор .NET/Mono в Java. Целью проекта является создание компилятора, и набора стандартных библиотек позволяющих переносить написанные приложения и библиотеки на платформу Java, версии 1.6 и выше. Из аналогичных проектов мне известен лишь проект dot42. Но он заточен под Android и имеет собственную стандартную библиотеку не совсем совместимую с .NET/Mono.

                            Пока есть только альфа версия, и поэтому для реального использования компилятор пока не годится, однако уже частично работоспособен, генерирует валидный код Java и поддерживает часть стандарта ECMA-335.

                            Исходные коды на github.com: https://github.com/zebraxxl/CIL2Java

                            Подробнее о том, что не поддерживается, что поддерживается и как это все работает.
                          • Как собрать студию для съемки видео c минимальными затратами и за три дня

                              Василий К., продюсер студии N.S.Media снимал лекции для нашего проекта BeSmart.net. А между делом он рассказал нам историю о том, что снимать видео совсем не сложно. Для этого не нужно почти ничего кроме желания и находчивости. Студию для съемки видеолекций можно собрать на коленке, документальный фильм — снять на iPhone.


                              Читать дальше →
                            • Как работает декомпиляция в .Net или Java на примере .Net

                              • Tutorial

                              Сегодня хотелось бы поговорить про декомпиляцию приложений (все применительно к той же Java, да и любому языку с некоторыми допущениями и ограничениями, но поскольку сам я — .Net разработчик, примеры будут совсем немного MSIL'овизированы :) ).

                              Для вводной, перечислю текущие средства декомпиляции в мире .Net:
                              • JetBrains dotPeek (поддержка R# хоткеев, сервер символов)
                              • Telerik JustDecompile (также не плохой, множество хоткеев)
                              • RedGate Reflector (аналог dotPeek, но платный. Изначально был основным в мире .Net, но пока был бесплатным)
                              • icsharpcode ILSpy (хороший, opensource. Полезен, когда вы сами пишете код, использующий Mono.Cecil, т.к. Это даст лучшее понимание его работы)
                              • 9rays Spices .Net Decompiler
                              • Dis# с функцией inplace editor

                              Для программной декомпиляции:
                              • Mono.Cecil (основной, самый крутой декомпилятор в мире .Net. На выходе получаете объектное «зеркало» содержимого сборки. Т.е. Максимально-упрощенно, без наворотов типа конвертации массива IL в DOM).
                              • ICSharpCode.Decompiler (надстройка над mono.cecil, переводящая array[MSIL] в DOM, где есть циклы, switches и if'ы. Является частью SharpDevelop/ILSpy)
                              • Harmony Core (аналогичное от меня, но сохраняющее информацию о символах. В среднем состоянии, не готова для прода, помощь приветствуется).


                              А теперь, хотелось бы описать как они работают (вам же интересно, как работает машинка от JetBrains?). Чтобы как минимум понять, насколько это сложно: написать свой декомпилятор .Net сборки обратно в код на C#.



                              Читать дальше →
                            • Курсы этичного хакинга и тестирования на проникновение

                                Курсы этичного хакинга и тестирования на проникновение.


                                Если вы увлекаетесь информационной безопасностью и хотите усовершенствовать свои навыки в короткое время — предлагаем ознакомиться с обновленными программами обучения в области практической ИБ от Pentestit.

                                Разрабатывая уникальные по своему формату и методике обучения курсы этичного хакинга: «Zero Security: A» (начальная подготовка) и «Корпоративные лаборатории» (профессиональная подготовка), мы стараемся сделать обучение не только эффективными, но и удобными. Основное отличие программ обучения заключается в том, что первая рассчитана на базовую подготовку в области этичного хакинга, а вторая — на профессиональную подготовку не только этичного хакинга, но и построения эффективных систем ИБ. В любом случае, даже опытные специалисты, посетившие первую программу, открывают для себя что-то новое, не говоря уже о «Корпоративных лабораториях», включающих материал, по уровню сравнимый с докладами на профессиональных хакерских конференциях. Кроме этого, каждый набор пополняется новым материалом, что позволяет передать специалистам, проходящим обучения, наиболее актуальную на момент обучения информацию.

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


                                Читать дальше →