28.07.2017 [c#][linq] Преобразовать одну коллекцию в другую с "добавлен
 
Нужно преобразовать одну коллекцию в другую с "добавлением" номера элемента.
Сделал так:
int index = 0;
IEnumerable<DestType> destItems = srcItems
    //.AsParallel()
    .Select(si=> new DestType(si.Name, index++));

Затем нужна параллельная обработка — сделал через .AsParallel().

Корректно ли это решение? Например смущает index++ при параллельной обработке.
Может сделать через Interlocked.Increment(ref index)? Или другой способ

PS. Номер — должен быть уникальным, последовательность необязательна.

27.07.2017 прокси
 
так понял прокси не просто перенаправлет содержимое потока на другой порт и адрес
нужно использовать WebProxy
как перехватить запрос из браузера и получить url и тело запроса?
желательно Core 2

извиняюсь, вроде бы нашел
http://kbyte.ru/ru/Programming/Articles.aspx?id=66&amp;mode=art

27.07.2017 Project Snowflake
 
Здравствуйте.

Отсюда:

Garbage collection greatly improves programmer productivity and ensures memory safety. Manual memory management on the other hand often delivers better performance but is typically unsafe and can lead to system crashes or security vulnerabilities. We propose integrating safe manual memory management with garbage collection in the .NET runtime to get the best of both worlds. In our design, programmers can choose between allocating objects in the garbage collected heap or the manual heap. All existing applications run unmodified, and without any performance degradation, using the garbage collected heap. Our programming model for manual memory management is flexible: although objects in the manual heap can have a single owning pointer, we allow deallocation at any program point and concurrent sharing of these objects amongst all the threads in the program. Experimental results from our .NET CoreCLR implementation on real-world applications show substantial performance gains especially in multithreaded scenarios: up to 3x savings in peak working sets and 2x improvements in runtime.


Там 40 страничный pdf, я пока не читал (и не факт что буду), но не осуждаю.

26.07.2017 Socket не могу соединиться с портами кроме 80го
 
'No connection could be made because the target machine actively refused it'
почему-то только с 80 соединяется
var receive = new Socket(SocketType.Stream, ProtocolType.Tcp);
receive.Connect("127.0.0.1", settings[0]);

25.07.2017 как писать прокси на core под консоль
 
нужно написать прокси HTTP, UDP консольное приложение
с чего начать? какие классы использовать?
нашел пример asp.net core но это не то, не знаю как оттолкнуться
хотя бы как слушать заданный порт?

21.07.2017 PHP из-под NET - как?
 
Всем привет!

Есть РНР-скрипт, который надо вызвать из Шарпа в сервисном приложении
Скрипт загружает данные (1 раз) и потом к ним идет обращение (через РНР-методы)

Как проще всего решить эту задачу?
Переводить скрипт на Шарп долго, мучительно и не хочется
Создавать из РНР-скрипта СОМ-объект я не умею
Может, кто подскажет какую-нибудь оболочку для этого (я что-то не нашел)

PS. Глобальная задача — получать координаты по IP оффлайн (бесплатный вариант)
Т.е., скачать одну из известных БД и работать с ней (в моем случае )
К сожалению (или к счастью), у них у всех свой формат, а примеры API встречались только на скриптовых языках (типа РНР)
Спасибо

21.07.2017 Online IDE C#
 
Недавно открыл для себя https://dotnetfiddle.net/

Оно не просто позволяет запускать код, но еще и есть InteliiSense. Так же можно подключать NuGet-пакеты. Очень круто, особенно InteliiSense.

Но может есть что-то еще лучше?

20.07.2017 Удаленный мониторинг служб
 
Добрый день!

Имеется приложение написанное на net/C# и состоящие из несколько WCF и windows сервисов. Поставлена задача удаленного мониторинга работы приложения: факт работы каждого сервиса, количество обращений (за некоторую единицу времени), время обработки обращения, количество ошибок (в дальнейшем видимо с детализацией каких именно). Скорее всего список задач мониторинга будет расширяться.
Само приложение работает на удаленных серверах и административного доступа к нему нет. Но по организационной договоренности там проводят обновление версий приложения, возможно могут доустановить еще какое-либо приложение (хотя не факт).
Приложение высоконагруженное.
Возникает вопрос: как решить поставленную задачу. Сразу оговорюсь, что в мониторинге я не разбираюсь и для меня это совершенно новая область.
Первое, что выдал гугл — windows communication foundation. Сразу возникло множество вопросов: можно ли сравнительно простыми путями формировать сообщения самостоятельно, как настроить для отправки отчетов удаленно, кто будет выступать получателем сообщений, учитывая, что приложение высоконагруженное и задерживать службы длительными отправками неприемлимо.
Второе, порекомендовали посмотреть в сторону prometheus и формированием метрик. Взял https://github.com/andrasm/prometheus-net . Само с собой вроде работает, но prometheus установленный в рабочей сети метрик на моей машине не видит. Местный систадмин хотя prometheus и хвалит, но в его настройках разбирается слабо и объяснить причину не может. Попробовал локально запустить wmi exporter. Его prometheus видит, но в нем нет метрик формируемых тестовым приложением и как их туда поместить непонятно. Кроме того не вполне понятно, как в метриках передавать такие данные как время обработки обращения и/или причины ошибки.

Собственно вопрос. Что и как посоветуете использовать? Пожалуйста, не просто название, а с объяснением или ссылками на статьи с подробным разбором и примерами. Если что-то из вышеизложенного, то подсказать как решить возникшие проблемы.

20.07.2017 Версии System
 
Приветствую всех.
Используется VS 2015
При создании нового проекта при использовании .Net Framework 4.6.1 по умолчанию создаются ссылки на библиотеки (dll) System.* версии 4.0
Однако используемая внешняя библиотека требует использования system библиотек версии 4.3
Каким образом это сделать при создании нового проекта?
Можно ли поменять версии системных библиотекm (System.*) у существующего проекта? Если да, то как?

18.07.2017 [Ann] .Net Core 2.0 globalisation mode
 
Сабж.

.NET Core 2.0 includes a new opt-in globalization mode that provides basic globalization-related functionality that is uniform across operating systems and languages. The benefit of this new mode is its uniformity, distribution size, and the absence of any globalization dependencies. The downside is that it doesn't actually provide globalization functionality.


Решение абсолютно гениальное в своей элегантности и чем-то напоминает цветовую палитру от Генри Форда. Один маленький свитч полностью убирает все проблемы с локализацией приложения.
  Скучные подробности

When enabling the invariant mode, all cultures behave like the invariant culture. The invariant culture has the following characteristics:
* Culture names (English, native display, ISO, language names) will return invariant names. For instance, when requesting culture native name, you will get "Invariant Language (Invariant Country)".
* All cultures LCID will have value 0x1000 (which means Custom Locale ID). The exception is the invariant cultures which will still have 0x7F.
* All Date/Time formatting and parsing will use fixed date and time patterns. For example, the short date will be "MM/dd/yyyy" regardless of the culture used. Applications having old formatted date/time strings may not be able to parse such strings without using ParseExact.
* Numbers will always be formatted as the invariant culture. For example, decimal point will always be formatted as ".". Number strings previously formatted with cultures that have different symbols will fail parsing.
* All cultures will have currency symbol as "¤"
* Culture enumeration will always return a list with one culture which is the invariant culture.

...

String casing (ToUpper and ToLower) will be performed for the ASCII range only. Requests to case code points outside that range will not be performed, however no exception will be thrown. In other words, casing will only be performed for character range ['a'..'z'].

...
* IDN support doesn't conform to the latest standard.
* IDN support will be incorrect if the input IDN string is not normalized since normalization is not supported in invariant mode.
* Some basic IDN strings will still produce correct values.

(с)


Надо будет предложить аналогичные switch для устранения принципиальных недостатков floating point math (все значения ведут себя как целые) а также для упрощения многопоточного программирования (при дедлоке оба потока получают блокировку). Если есть ещё идеи — не стесняемся, подкидываем

17.07.2017 Entity Framework и модульность
 
День добрый, коллеги.

Есть у меня проект, в котором база данных в некотором смысле "модульная" — некоторые таблицы запросто могут отсутствовать в базе. Их наличие зависит от того, купил ли пользователь соответствующие модули или нет.
На данный момент в проекте используется одновременно несколько подходов работы с данными — и прямые SQL-запросы и Linq2Sql. Я работаю над тем чтобы заменить всё это на Entity Framework. И вот эти "модульные" куски DB схемы меня слегка озадачили. Как с ними работать по-человечески? Есть какие-нибудь проверенные временем подходы?
Мне пока на ум приходит три варианта:

1. Генерируем маппинги для Entity Framework с учётом всех возможных таблиц, в рантайме тщательно следим, чтобы не было обращений к несуществующим таблицам — перед обращением к таблицам из каждого "модуля", проверяем, включен ли этот модуль у клиента. Вроде как должно работать, но потенциально могут всплыть баги там, где забыли сделать проверку. Особенно это чревато в тех местах, где обращение идёт не явно, а через референсы у объектов.

2. Генерируем отдельно маппинги для основной структуры БД и отдельно для каждого модуля. Обращаемся к "модульным" данным в явном виде, через загрузку соответствующего контекста. Этот вариант выглядит разумным, когда количество модулей небольшое — для 3..5 модулей должно быть нормально. Для 30..50, боюсь, получится спагетти-код.

3. Хранимые процедуры. В этом варианте прячем все различия за интерфейсом хранимой процедуры. В этом подходе всё вроде как нормально, за исключением того что хотелось бы иметь всю бизнес-логику на стороне C#.

Что посоветует вселенский разум?

17.07.2017 зачем SyntaxTrivia входит в состав токенов?
 
Почему было принято именно такое проектное решение? Как это можно использовать? В каких языках программирования такое применяется и несёт смысловую нагрузку?

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

Абстрактно можено представить себе язык типа Python, в котором количество пробелов перед словом может влиять на его свойства,
но там ведь не одно слово в строке — как поступать с остальными?

Я бы создал два синтаксических узла "ведущие пробелы" и "остальные пробелы строки" и повключал бы всю тривию туда,
а не к смежным узлам.

В WhitePaper по Roslyn написано:

In general, a token owns any trivia after it on the same line up to the next token. Any trivia after that line is associated with the following token. The first token in the source file gets all the initial trivia, and the last sequence of trivia in the file is tacked onto the end-of-file token, which otherwise has zero width.

Спрашивается, почему нельзя (неудобно) было сделать Trivia доступными из обоих смежных токенов (раз уж она между ними находится)?

Чего я не понимаю?

16.07.2017 unsafe в Roslyn
 
почему при написании Roslyn (который вообще-то абстрактная библиотека работы с абстрактным текстом из стандартных байтов)
было нужно использовать unsafe код?

Ну почему никак, никак было без него нельзя?

http://source.roslyn.io/#Microsoft.CodeAnalysis/InternalUtilities/Hash.cs,184

16.07.2017 YAML -- какую библиотеку лучше заюзать (или не связываться)?
 
Есть прога с кучей конфиг-файлов, сейчас на JSON. Хочу добавить YAML для более человеко-удобного конфигурирования.

XML вообще не френдли, куча этих тегов.

JSON чуть лучше, но не идеал.

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

Вопрос: какую либу на .Net заюзать для YAML?

15.07.2017 Использование LogicalSetData и AsyncLocal для хранения стека родительского треда
 
Привет, друзья.

Давно чешутся руки протянуть иерархию вызовов через все потоки, для логирования полного стека при возникновении исключений.
Для этого можно использовать CallContext.LogicalSetData, а в перспективе перехода на свежую версию .NET Framework — AsyncLocal.

Само собой, это потребует создания обёрток для ThreadPool, Thread и, боюсь, что Task.
Видите ли вы какие-нибудь подводные камни в этом? В случае CallConext — это ремотинг, который потащит свойства за собой, но данная проблема у меня решена радикально, пользовательские свойства выпиливаются в процессе сериализации сообщения. С AsyncLocal такой проблемы не будет.

Главное — быть может, это уже сделано и мы можем через тот же CallContext добраться до стека родительского потока на момент вызова текущего (с поддержкой ThreadPool и Task)?

Реализация планируется очень простой: создаём маркер вида "Thread {ManagedThreadId} at {StartTime}", при необходимости залогировать исключение, оставляем также и его. Если это первое использование маркера — логируем следом стек вызова, который породил данный поток.

Несколько перпендикулярный, но всё же смежный вопрос по схожей теме — есть ли безопасный способ задать имя каждому запускаемому потоку, для удобства отладки и разбора дампов? Опять же, с поддержкой ThreadPool и Task?

12.07.2017 Отображение XML на структуру данных
 
Привет всем,

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

PS: Вопрос здесь, потому что прогамма пишется на .NET

12.07.2017 вытянуть изображение по 4м точкам
 
задаются 4 точки, на которые нужно вытянуть изображение, как это сделать?
пример http://widger.ru/widger.ru

10.07.2017 [Rx] Ограничить время выполнения
 
Мне нужно ограничить время выполнения обработчиков.
При чём в одном обработчике может быть много команд и хотелось бы прекратить выполнения по достижении максимального времени в заданном промежутке.
Псевдокод:

class ExecutionLimiter
{
 // maxExecutionTime - максимально допустимое время работы
 // executionPeriod -  окно времени для измерения времени выполнения
 public ExecutionLimiter(Action[] actions, int maxExecutionTime, int executionPeriod)
 {
  _actions = actions
 }

 // время начала -> время выплонения
 Dictionary<DateTime, int> _previousEecutionTimes;

 DoActions()
 {
   clearOldMeasurements();
   // проверка что можно выполнять действия
   if(_previousExecutionTimes.Sum() >= maxExecutionTime) return;

   foreach(var action in actions)
   {
    // выполняем действие и записываем сколько времени заняло
    var startAction = Date.Now;
    action();
    var executionTime = Data.Now - startAction;
 
    // записываем сколько выполнились
    _previousEecutionTimes.Add(executionTime);
    // удаляем старые данные
    clearOldMeasurements();
 
    // если больше чем положено, выходим.
    if(_previousEecutionTimes.Sum() >= maxExecutionTime)
    {
      break;
    }
   }
 }

  // удаляем старые данные
 clearOldMeasurements()
 {
   var now = Date.Now;
   foreach(var kv in _previousExecutionTimes) { if(kv.Key < now - _executionPreiod) _previousExecutionTimes.Remove(kv.Key);
 }
}



Может есть идеи как организовать такое через Rx если вообще стоит?

09.07.2017 Новые GUID ы - {9A19103F-16F7-4668-BE54-9A1E7A4F7556}
 
У меня вопрос такой:
что за GUID — {9A19103F-16F7-4668-BE54-9A1E7A4F7556} ?

Где описан формат файлов с таким GUID'ом ?

и ещё:
unknown project type {2150E333-8FDC-42A3-9474-1A3956D46DE8} — solution folder
unknown project type {778DAE3C-4631-46EA-AA77-85C1314464D9} — VisualBasicProjectSystemPackage
unknown project type {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} — C++
unknown project type {9A19103F-16F7-4668-BE54-9A1E7A4F7556} — CSharpProjectSystemPackage
unknown project type {D954291E-2A0B-460D-934E-DC6B0785DB48} — Store App Universal
unknown project type {F184B08F-C81C-45F6-A57F-5ABD9991F28F} — VB.NET
unknown project type {FAE04EC0-301F-11D3-BF4B-000000000000} — ???

07.07.2017 Как теперь дебажить System.Windows.Forms? Что там опять поломали?
 
Почему опять в отладочной информации нет сведений об исходном коде?
Можно откуда-нибудь загрузить символы с сорцами чтоб не полагаться на трухлявые мелкософтовские сервера?