All streams
Search
Write a publication
Pull to refresh
3
0
Владимир @KislyFan

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

Send message

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

Мощность такого оборудования измеряется в милливатах, этого хватит максимум на реализацию "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 методы без реализации.

Information

Rating
Does not participate
Location
Краснодар, Краснодарский край, Россия
Date of birth
Registered
Activity

Specialization

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