Как стать автором
Обновить
3
0
Владимир @KislyFan

Программист dotnet

Отправить сообщение

Примеры дел есть? Фамилии, Имена, предьявленные обвинения, решения судов?

Мощность такого оборудования измеряется в милливатах, этого хватит максимум на реализацию "hot spot", чтобы телефон мог закемпиться на сектор. Никакой хоть сколько-нибудь ощутимой интерференции это не создаст.

И кстати OpenBTS и его форки это вполне себе полноценная базовая станция по 3GPP с одним сектором и одним передатчиком. На оффсайте можно посмотреть кейсы с примерами успешного коммерческого использования.

Раньше системный блок называли процессором, теперь pcb breakout называют микроконтроллером. Времена меняются, а люди - нет.

Удивлен, что нет pgModeler и Aqua Data Studio

Результат почти не поменялся, ну в пределах флуктуаций.

BenchmarkDotNet=v0.13.1, OS=ubuntu 21.04
AMD FX(tm)-8120, 1 CPU, 8 logical and 4 physical cores
.NET SDK=6.0.100-preview.7.21379.14
  [Host]     : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
  DefaultJob : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT


|                                 Method | Iterations |      Mean |     Error |    StdDev | Code Size |
|--------------------------------------- |----------- |----------:|----------:|----------:|----------:|
|                 ForWithCustomIncrement |      10000 |  6.147 us | 0.0387 us | 0.0343 us |      30 B |
|             ForeachWithEnumerableRange |      10000 | 64.961 us | 0.7376 us | 0.6539 us |     385 B |
|                 ForeachWithYieldReturn |      10000 | 79.919 us | 0.7037 us | 0.5876 us |     299 B |
|             ForeachWithRangeEnumerator |      10000 |  6.182 us | 0.0260 us | 0.0243 us |     333 B |
|          ForeachWithRangeEnumeratorRaw |      10000 |  6.199 us | 0.0362 us | 0.0338 us |     333 B |
| ForeachWithRangeEnumeratorRawWithLocal |      10000 | 28.486 us | 0.2395 us | 0.2000 us |     368 B |

Линк на сренерированный markdown

Совершенно верно

[Benchmark]
public int ForeachWithRangeEnumeratorRawWithLocal()
{
    var enumerator = (0..(Iterations - 1)).GetEnumerator();        
    return EnumerateItAll(enumerator);

    [MethodImpl(MethodImplOptions.NoInlining)]
    static int EnumerateItAll(RangeEnumerator enumerator)
    {
        var a = 0;
        while (enumerator.MoveNext())
            a += enumerator.Current;
        return a;
    }
}

Пересобрал с разкомментированным DisassemblyDiagnoser, еще раз приведу результат

BenchmarkDotNet=v0.13.1, OS=ubuntu 21.04
AMD FX(tm)-8120, 1 CPU, 8 logical and 4 physical cores
.NET SDK=5.0.400
  [Host]     : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT
  DefaultJob : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT


|                                 Method | Iterations |      Mean |     Error |    StdDev | Code Size |
|--------------------------------------- |----------- |----------:|----------:|----------:|----------:|
|                 ForWithCustomIncrement |      10000 |  6.125 us | 0.0586 us | 0.0549 us |      30 B |
|             ForeachWithEnumerableRange |      10000 | 69.712 us | 1.1155 us | 1.2399 us |     433 B |
|                 ForeachWithYieldReturn |      10000 | 77.253 us | 1.4753 us | 2.0681 us |     365 B |
|             ForeachWithRangeEnumerator |      10000 |  6.171 us | 0.0640 us | 0.0567 us |     340 B |
|          ForeachWithRangeEnumeratorRaw |      10000 |  6.228 us | 0.0513 us | 0.0480 us |     340 B |
| ForeachWithRangeEnumeratorRawWithLocal |      10000 | 27.767 us | 0.1562 us | 0.1461 us |     370 B |

Мне честно говоря было лень копировать простыню под кат, загрузил на github https://github.com/iamkisly/ForHabrahabr/blob/main/FastEnum_with_NoInlining_attr_01092021_2040/Benchmarks-asm.md#net-509-5092135908-x64-ryujit-5

С использованием [MethodImpl(MethodImplOptions.AggressiveInlining)]

|                                 Method | Iterations |      Mean |     Error |    StdDev |
|--------------------------------------- |----------- |----------:|----------:|----------:|
|                 ForWithCustomIncrement |      10000 |  6.038 us | 0.0337 us | 0.0316 us |
|             ForeachWithEnumerableRange |      10000 | 63.210 us | 0.8231 us | 0.7699 us |
|                 ForeachWithYieldReturn |      10000 | 78.043 us | 1.2545 us | 1.1735 us |
|             ForeachWithRangeEnumerator |      10000 |  6.090 us | 0.0416 us | 0.0369 us |
|          ForeachWithRangeEnumeratorRaw |      10000 |  6.094 us | 0.0239 us | 0.0224 us |
| ForeachWithRangeEnumeratorRawWithLocal |      10000 |  9.214 us | 0.0637 us | 0.0532 us |
BenchmarkDotNet=v0.13.1, OS=ubuntu 21.04
AMD FX(tm)-8120, 1 CPU, 8 logical and 4 physical cores
.NET SDK=5.0.400
  [Host]     : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT
  DefaultJob : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT


|                                 Method | Iterations |      Mean |     Error |     StdDev |    Median |
|--------------------------------------- |----------- |----------:|----------:|-----------:|----------:|
|                 ForWithCustomIncrement |      10000 |  5.911 us | 0.0171 us |  0.0152 us |  5.906 us |
|             ForeachWithEnumerableRange |      10000 | 68.460 us | 1.3414 us |  1.5968 us | 67.668 us |
|                 ForeachWithYieldReturn |      10000 | 89.176 us | 4.1332 us | 11.7252 us | 84.396 us |
|             ForeachWithRangeEnumerator |      10000 |  6.087 us | 0.0410 us |  0.0364 us |  6.076 us |
|          ForeachWithRangeEnumeratorRaw |      10000 |  9.171 us | 0.0918 us |  0.0766 us |  9.152 us |
| ForeachWithRangeEnumeratorRawWithLocal |      10000 | 27.249 us | 0.1797 us |  0.1501 us | 27.258 us |

Это без атрибута NoInlining, а это с ней

BenchmarkDotNet=v0.13.1, OS=ubuntu 21.04
AMD FX(tm)-8120, 1 CPU, 8 logical and 4 physical cores
.NET SDK=5.0.400
  [Host]     : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT
  DefaultJob : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT


|                                 Method | Iterations |      Mean |     Error |    StdDev |
|--------------------------------------- |----------- |----------:|----------:|----------:|
|                 ForWithCustomIncrement |      10000 |  6.106 us | 0.0520 us | 0.0461 us |
|             ForeachWithEnumerableRange |      10000 | 70.015 us | 1.3127 us | 1.1637 us |
|                 ForeachWithYieldReturn |      10000 | 77.383 us | 1.5419 us | 2.0584 us |
|             ForeachWithRangeEnumerator |      10000 |  6.115 us | 0.0234 us | 0.0208 us |
|          ForeachWithRangeEnumeratorRaw |      10000 |  6.128 us | 0.0349 us | 0.0292 us |
| ForeachWithRangeEnumeratorRawWithLocal |      10000 | 27.460 us | 0.2394 us | 0.1999 us |

// * Hints *
Outliers
  Benchmarks.ForWithCustomIncrement: Default                 -> 1 outlier  was  removed (6.26 us)
  Benchmarks.ForeachWithEnumerableRange: Default             -> 1 outlier  was  removed (76.72 us)
  Benchmarks.ForeachWithYieldReturn: Default                 -> 2 outliers were removed (86.81 us, 91.80 us)
  Benchmarks.ForeachWithRangeEnumerator: Default             -> 1 outlier  was  removed (6.18 us)
  Benchmarks.ForeachWithRangeEnumeratorRaw: Default          -> 2 outliers were removed (6.23 us, 6.24 us)
  Benchmarks.ForeachWithRangeEnumeratorRawWithLocal: Default -> 2 outliers were removed (28.46 us, 29.80 us)

me@Bella:~$ uname -a Linux Bella 5.11.0-34-generic #36-Ubuntu SMP Thu Aug 26 19:22:09 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Ну и собственно вопрос, где "научиться плохому" или хорошо разбираться в IL?

У нас на корпоративном сайте была одна страница, где на основе заполнения <input> полей js-скрипт заполнял hidden поле формируя в нем запрос

execute procname @input1=1,@input2=2,&etc

Ну вы поняли.. теперь человек ответственный за это работает на один из ведущих банков страны. Причем без шуток -_-

Да, с видеокартой nvidia. Тут больше вопрос в том, что у вас был небольшой негативный опыт, после которого вы поставили крест на попытках и распространяете уже неактуальные сведения. Я за 15 лет использования ubuntu понял одно: обновился на свежую версию, и что-то не заработало, то откатись на предыдущую.. а сам отправь грамотный багрепорт, и подожди пару месяцев. У меня лишь однажды был баг с новой картой nvidia, не поднимались родные дрова с новой версией ядра, пришлось посидеть c nouveau пока nvidia подвезли обновления в репы.

У меня была забавная ситуация. ПК с включенным в bios режимом fast boot и с dual boot (ubuntu/win10) и не очень новая карта wifi. Чтобы c комфортом посидеть в интернетах, надо было загрузиться в win10, перезагрузиться в ubuntu и уже можно комфортно работать без фризов и дисконнектов. По всей видимости драйвера из win загружали свое firmware, которое сильно отличалось от их же под *nix системы.

Абсолютно обратная ситуация, сижу на ubuntu с картами nvidia начиная с 7.04 (Feisty Fawn) и горя не знаю. Проприетарные драйвера делают свое дело.

Вопрос в другом, зачем на одноплатник вешать такие задачи, с которыми он справляется с большим трудом?

Вот за что я люблю *nix сообщество, так это за умение создать самому себе проблему.. просто потому что "захотелось странного", а потом с гордостью рассказывать об этом опыте ​

Особенно доставляет то что сам stackoverflow написан на шарпе

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

На Java есть Zookeeper, Kafka, Hadoop, Elastic Search

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

для микросервисов есть Go, для простых сайтов — PHP

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

на desktop правит бал Qt

Начнем с того что это опять фреймворк, который к тому же ну ни разу не стандарт, а просто единственно что вменяемо выглядит на С++. А во вторых, смерть standalone приложений - это вопрос времени, их нишу займут гибридные веб сервисы, и тут dotnet уже впереди всех со своим Blazor.

что ее живо — игрушки на Unity

Юнити популярен потому что ему нет альтернатив с тем же порогом вхождения. Это не заслуга языка или фреймворка, а разработчиков и маркетологов из UniTech.. и скорее его (языка) бич. На собеседованиях в компании не связанных с геймдевом крайне не рекомендуется упоминать о том, что ты делал игрушки на юнити. Надеюсь не надо объяснять почему.

Смысл мессаджа в том, что быть популярным в какой-то узкой области, не значит являться лидером или быть лучше. В MS вовремя поняли что условия меняются и поезд энтерпрайза уходит, и предприняли верные шаги. Кроссплатформенность, оптимизации производительности, развитие языка и фреймворка.. все это (если они не поменяют темп и курс) поможет им "пройти как моча сквозь снег" и забрать себе жирный кусок пирога.. благо все предпосылки для этого есть.

Ну это же дичь, и ненависть ради ненависти. Тут еще не хватает лозунга "windows must die!" для полноты картины. В общем обычный пример фанатичного красноглазия.

где других фреймворков-то и нет

Я может быть буду не объективен, потому что .net мой любимый язык, но все же думаю, что вы не правы. Да, многие проводят знак равенства C# = Net Framework, но это не так как минимум потому что пока еще есть свободный Mono, есть коммерческий Mono/Xamarin.. он конечно со временем исчезнет, как самостоятельное явление (а судя по roadmap это произойдет примерно с выходом NET7.0), но существовать не перестанет. Есть .NET Micro Framework.

Если смотреть шире, то фреймворк не имеет альтернатив не потому что майкрософт ось зла, а потому что это жирная стандартная библиотека языка, и прикладные фреймворки выиграли гонку с другими решениями.. aspnet выиграл не потому что это кровавый энерпрайз, а потому что его альтернативы не выросли. Тот же Spring-Net не смог, хотя и был чрезвычайно популярен до появления собственных DI в dotnet core. Или например winforms, silverlight устарели и умерли, а wpf еще не умер, но вот уже почти.. его место стремится занять MAIU (бывший Xamarin Forms).

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

В силу обстоятельств перепробовал VS, VS Code, Mono Developer и Rider, но так и не смог понять восхищения продуктами JB. Для меня единственным фактором использования Rider оказалось то что для Linux Desktop просто нет достойной альтернативы, и по этой же причине он (Rider) совершенно не конкурент для VS2019/2022 в окнах.. ну разве что только по цене лицензии. Ах да! Лицензия! Модель распространения Rider без community лицензии.. это сильно. Можно конечно пользоваться EAP, но это совершенно не тоже самое.

Если я правильно понимаю, то речь вот об этом issue в dotnet/csharplang (https://github.com/dotnet/csharplang/issues/4436). Там собственно и предлагают дать abstract static методы без реализации.

Информация

В рейтинге
Не участвует
Откуда
Краснодар, Краснодарский край, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Backend Developer
SQL
.NET
.NET Core
Entity Framework
ASP.Net
MSSQL