Pull to refresh
  • by relevance
  • by date
  • by rating

Имитация свойств для элементов перечислений (Enumerations) в .NET Framework 3.5

Lumber room
Уверен, многие периодически сталкивались с необходимостью указания каких-либо простых свойств для элементов перечислений в C#.

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

Я же хочу предложить вам несколько иной, более универсальный и изящный способ, основанный на атрибутах, методах расширения и рефлексии.
Читать дальше →
Total votes 15: ↑9 and ↓6 +3
Views315
Comments 22

Рефлексия. Моей компании 5 лет?

e-Legion
Даже в названии рука не поднялась написать повествовательное предложение. Если кому интересен поток сознания владельца it-компании возрастом ровно-ровно 5 лет — под кат.
Читать дальше →
Total votes 135: ↑79 and ↓56 +23
Views15.8K
Comments 85

Пара слов о дневнике проекта

Project management
Конфуций сказал однажды: «умный человек учится на своём опыте, мудрец — на чужом». В этой статье я постараюсь сделать ещё один шаг в направлении к «умному человеку» и поделиться, как можно аккумулировать свой опыт в течение проекта.

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

Как не наступать на грабли менеджеру проекта? Вопрос, на самом деле, не очевиден. Понятно, что от этого нет универсального лекарства. Первый и самый простой вариант — «это придёт с опытом». Именно поэтому, опыт — это очень ценный ресурс, потерю которого нужно минимизировать. Один из таких способов максимально сохранить опыт от прошедших проектов я активно применяю и сейчас вам его опишу. Называется он – дневник проекта.
Читать дальше →
Total votes 55: ↑53 and ↓2 +51
Views3.1K
Comments 16

В Chrome (dev) реализованы будущие функции JavaScript

JavaScript
Комитет ECMA сейчас работает над разработкой следующей версии JavaScript, известной под кодовым названием Harmony. Он должен быть закончен к концу следующего года и станет самым большим обновлением за всю историю языка. Разработчики Chrome и V8 решили уже сейчас реализовать некоторые будущие функции JavaScript в браузере Chrome (версия для разработчиков).

Чтобы активировать новые функции, нужно в последнем релизе с dev-канала набрать chrome://flags и включить флаг Experimental JavaScript features.
Читать дальше →
Total votes 40: ↑34 and ↓6 +28
Views2.3K
Comments 93

Первые шаги с Chromium Embedded Framework и .NET

JavaScript.NETC#
Sandbox
Tutorial
Chromium Embedded Framework (CEF) — это проект с открытыми исходными кодами, созданный в 2008 году как элемент управления Web browser, работающий на базе Chromium от Google.
На данный момент это довольно мощный инструмент для разработки настольных приложений, со списком решений, использующих этот контрол можно ознакомиться здесь. Но достаточно сказать, что его используют такие широко известные продукты, как Evernote и Steam.

Итак, что же дает этот фреймворк?
Читать дальше →
Total votes 36: ↑35 and ↓1 +34
Views72.3K
Comments 18

Добавляем чуть больше рефлексии: декораторы

Python
Последнее время приходится довольно много работать с Python. Решая одну из текущих задач, возникла необходимость внутри функции-декоратора проверить задекорирован ли декорируемый метод другим декоратором. К сожалению, стандартные средства рефлексии языка не позволяют это сделать. Точнее, используя, например, модуль inspect из стандартной библиотеки это сделать можно, но уж больно не нравился такой подход.

Под катом свой метод решения задачи, вылившийся в небольшую библиотеку, доступную для общего пользования.
Читать дальше →
Total votes 13: ↑7 and ↓6 +1
Views8.5K
Comments 35

Compile-time рефлексия D

ProgrammingD
Tutorial
Доброго времени суток, хабр!

Сегодня поговорим о том, что делает метапрограммирование в D таким гибким и мощным — compile-time рефлексии. D позволяет программисту напрямую пользоваться информацией, которой оперирует компилятор, а не выводить её хитрыми способами. Так какую информацию позволяет получить компилятор и как её можно использовать?
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Views3.6K
Comments 6

Compile-time рефлексия D, практика

ProgrammingD
Tutorial
Доброго времени суток, хабр!

В прошлой статье были рассмотренны базовые элементы compile-time рефлексии, те кирпичики, из которых строят «настоящие» метаконструкции. В этой статье я хочу показать некоторые такие приёмы. Попробуем реализовать сигналы и слоты, похожие на те, что в Qt, будет примерно так:
class Foo : XObject
{
    @​signal
    void message( string str );
}
class Bar : XObject
{
    @​slot
    void print( string str ) { writefln( "Bar.print: %s", str ); }
}
void main()
{
    auto a = new Foo, b = new Bar;
    connect( a.message, b.print );
    a.message( "hello habr" ); // Bar.print: hello habr
}

Осторожно: много кода (с комментами).
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Views4.9K
Comments 0

Рефлексия в Caché

InterSystemsWebsite developmentProgramming
Tutorial


Тема рефлексии нечасто поднималась на форумах или блогах Caché. Быть может потому, что понятие рефлексии как таковое в Caché явно не обозначено. Тем не менее рефлексия в Caché присутствует и может стать очень полезным инструментом в разработке.
Читать дальше →
Total votes 24: ↑21 and ↓3 +18
Views6.1K
Comments 11

Сравни меня полностью. Рефлексия на службе .NET разработчика

.NETC#
Sandbox


Недавно передо мной встала следующая задача: необходимо сравнить множество пар объектов. Но есть один нюанс: объекты — самые что ни на есть object'ы, а сравнивать нужно по всему набору публичных свойств. Причём совершенно необязательно, что типы сравниваемых объектов реализуют интерфейс IEquatable<T>.

Было очевидно, что следует использовать рефлексию. Однако при реализации я столкнулся со множеством тонкостей и в конечном счёте прибегнул к чёрной магии динамической генерации IL. В этой статье я хотел бы поделиться опытом и рассказать о том, как я решал эту задачу. Если Вас заинтересовала тема, то прошу под кат!
Читать дальше →
Total votes 34: ↑31 and ↓3 +28
Views26.7K
Comments 20

Добавляем рефлексию для перечислений (enum) в C++

ProgrammingC++
Sandbox
Недавно в нашем проекте возникла необходимость программно получать информацию о перечислениях (enum), например, имена констант в виде строк, а также общий список всех имеющихся в enum-е констант.

enum Suit { Spades, Hearts, Diamonds, Clubs };

Обычно решение данной задачи базируется на дублировании значений, например, внутри switch-а:

switch(value)
{
    case Spades:   return "Spades";
    case Hearts:   return "Hearts";
    case Diamonds: return "Diamonds";
    case Clubs:    return "Clubs";
    default:       return ""
};

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

Поэтому я постарался найти путь, который вообще не требовал бы дублирования, но при этом полностью справлялся бы с поставленной задачей. Думаю, у меня получилось.

Далее в статье я опишу способ, позволяющий организовать рефлексию для enum-ов. Кому интересно — добро пожаловать под кат.
Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Views22.7K
Comments 14

Маппинг в C# на примере сериализатора для AMF

Programming.NETApache FlexC#ООP
Sandbox
Tutorial
Приветствую, друзья. Сегодня речь пойдёт о реализации маппинга на C#, а так же о применении сей реализации в решении реальных задач на примере отправки данных AMF на сервер. Всё нижеизложенное не претендует на какие-либо эталоны реализации алгоритмов и паттернов проектирования кода, это лишь описание одного из множества, далеко не всегда очевидных для новичков, решений.

В процессе изучения статьи, Вы узнаете как реализовать собственные атрибуты и как их применять, познакомитесь с методами расширений типов и применением рефлексии на практике, узнаете об основах MSIL в целом и OpCodes в частности, а так же о том, как можно сериализовать объекты в AMF с помощью потоков.
Читать дальше →
Total votes 20: ↑17 and ↓3 +14
Views15.4K
Comments 6

[CppCon 2017] Herb Sutter: Метапрограммирование и кодогенерация в C++

C++
Sandbox

Продолжаю серию публикаций Fil по CppCon 2017. В докладе представлены ранние наработки по добавлению рефлексии и кодогенерации в C++, а также по метаклассам, которые позволят генерировать части классов C++. В стандарт эти новшества попадут не ранее, чем в C++23.

Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Views9.5K
Comments 7

[CppCon 2018] Herb Sutter: На пути к более простому и мощному C++

ProgrammingC++

В своём выступлении на CppCon 2018 Herb Sutter представил общественности свои наработки по двум направлениям. Во-первых, это контроль времени жизни переменных (Lifetime), который позволит обнаруживать целые классы багов на этапе компиляции. Во-вторых, это обновлённый proposal по метаклассам, которые позволят избежать дублирования кода, один раз описывая поведение категории классов и потом подключая его к конкретным классам одной строчкой.

Читать дальше →
Total votes 20: ↑19 and ↓1 +18
Views9.1K
Comments 21

JS. Proxy. Подводный камень, о котором нужно знать

JavaScript
Эта статья будет интересна тем кто использует Proxy, для реактивности или рефлексии.
Поведение JS методов, нам хорошо знакома если мы просто используем их в рамках объекта.
Если метод передается через свойство другому объект, то он работает с тем this, который определен в рамках другого объекта.

let obj1={prop1:'HEllo',method1(){console.log(this);}}
let obj2={method2:obj1.method1};
obj2.method2();

Это необходимо ясно понимать при использовании Proxy.
Читать дальше →
Total votes 15: ↑13 and ↓2 +11
Views4K
Comments 3

Развитие команды и рефлексия как управленческая коммуникация тимлида

Конференции Олега Бунина (Онтико)GTDPersonnel ManagementIT careerConferences
Мы уже поднимали тему коммуникации как важнейшего навыка управленца любого уровня. Эффективность коммуникаций в компании напрямую влияет на её развитие, поэтому сегодня подробно обсудим два понятия: развитие и рефлексию.

Поговорим, что такое развитие в команде, что такое развитие человека и что такое развитие управленца. Рассмотрим траектории роста разработчика от исполнителя до тимлида. Обсудим, с чем придется столкнуться, что понадобится преодолеть и кем можно стать. Выясним, какие инструменты помогут и выделим пять областей развития тимлида.


Главным инструментом для развития я считаю рефлексию. Это понятие обычно ассоциируется с ретроспективами, обратной связью, performance-review. Но в основе рефлексии лежит глубинный психологический процесс, поэтому предлагаю начать с основ и рассмотреть рефлексию подробнее.
Читать дальше →
Total votes 37: ↑34 and ↓3 +31
Views10.8K
Comments 5

Как проблемами с Mail.ru и ФСБ ковалась репутация Павла Дурова и вера в «Телеграм»

Instant MessagingHistory of IT
Запущенный в 2013 году на рынке, вроде бы и так не испытывающем дефицита в мессенджерах, «Телеграм» моментально начал менять правила игры, первым распознав, что рядовому юзеру хочется защиты приватности его коммуникаций — и открыв, тем самым, тогда ещё никем не занятую нишу для захвата, в которую, уже вслед за ним, после устремились и другие мессенджеры. А Telegram, тем временем, уже отбивал аудиторию у пабликов в соцсетях, и даже начал превращаться в медийную платформу, уводя землю из-под ног у других площадок — от блогов до традиционных медиа.

В феврале 2016 года Дуров заявил о 100 миллионах пользователей «Телеграма», а 22 марта 2018 года мессенджер достиг «обитаемости» в 200 миллионов человек.

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

Продолжение: «По разные стороны государства: как Facebook прожаривали в Конгрессе США, пока «Телеграм» воевал с ФСБ»
Читать дальше →
Total votes 123: ↑90 and ↓33 +57
Views44K
Comments 156

По разные стороны государства: как Facebook прожаривали в Конгрессе США, пока «Телеграм» воевал с ФСБ

Instant MessagingHistory of ITSocial networks and communities
Пути «Фейсбука» и «Вконтакте» разошлись так основательно, что никто давно не попрекает VK его происхождением. Разошёлся «Вконтакте» по разным дорогам и с Павлом Дуровым. А с успехом мессенджера «Телеграм» прекратились сравнения Дурова с Марком Цукербергом. Остались только два гениальных миллениала, превратившие свои идеи в миллиардные бизнесы. У каждого из них свой путь, но от общих вызовов им никуда не деться.

Будучи лидерами своего поколения в сетевом пространстве, они не просто меняют её ландшафт — они формируют коридор возможностей для миллениалов в целом. Если возникшую проблему Facebook и Telegram решают одинаково — их выбор становится выбором 2 миллиардов их пользователей. Если же на очередной вызов меняющегося интернета они дают разные ответы — то возникает пространство выбора, и право окончательного решения остаётся за пользователями. Разумеется, не только Дуров с Цукербергом определяют эти коридоры возможностей, но они, помимо собственного влияния, ещё и репрезентативны для самого влиятельного поколения в интернете на сегодняшний день.

В этом смысле, и для «Фейсбука», и «Телеграма» показательными оказались 2016–2018 годы. С самого возникновения всемирной паутины, она была территорией анонимности с островками безопасности. Однако в Сети уже годами копятся факторы, враждебные анонимности. В 2016 году они, возможно, впервые достигли критической массы превращения в угрозу, заметную в глобальном масштабе. А в 2018 произошло открытое столкновение.
Читать дальше →
Total votes 35: ↑29 and ↓6 +23
Views11.9K
Comments 15

Как дискомфорт помогает нам совершенствовать процесс разработки

True EngineeringDevelopment ManagementProject managementAgile
image

Я тимлид и моя задача — обеспечить продуктивную работу команды. Это непросто, поскольку готового рецепта успеха не существует. Конечно, есть признанные методологии: Agile, Lean, Value Stream Mapping. Они дают общие ориентиры и ценности, что уже неплохо, но это лишь ориентиры. А с конкретными решениями, будь добр, вертись сам. На то ты и тимлид.

В статье я расскажу, как мы с командой постепенно сформировали и теперь регулярно уточняем подход к эффективной работе. Ключевой момент в том, что выбранные инструменты действительно приняты всей командой и прижились в работе. Это даёт надежду на то, что подход полезный.
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Views11.9K
Comments 7

Хочешь стать эффективнее — «сломай руку»

Development ManagementProject managementPersonnel Management
Sandbox

Ад менеджера


Что есть для нас типичная работа управленца в более или менее крупной компании. Встречи, планирования, подведение итогов, делегирование задач подчиненным и что-то в том же духе. Это затягивает, это поглощает, это просто высасывает рабочий день. Процент продуктивных встреч с каждой новой встречей сводится к нулю, так как часто бывает, что встречами мы просто сами для себя пытаемся оправдать свою полезность здесь и сейчас. Бесконечный цикл митингов и переговоров, как вырваться из него и реализовать свой рабочий день оптимально.

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

Не запрещай другим делать то, что тебе не по силам


Итак, как-то на новогодние праздники я уехал во Вьетнам и почти сразу отхватил неплохой такой вывих плеча, не буду в подробностях рассказывать как это произошло, но если кратко: глупо, больно и неудобно.
Читать дальше →
Total votes 14: ↑9 and ↓5 +4
Views5.1K
Comments 3
1