• Попытка решить проблему выбора авиабилетов перед отпуском
    0
    Вам нужны достаточно большие массивы актуальных данных, которые известны только GDS системам, у которых авиакомпании заводят свои тарифы. Разные авиакомпании работают с разными GDS, кто-то с российской, кто-то с зарубежными, их несколько. Чтобы иметь «все», получается, надо «ходить» по API ко всем. Это ж сколько Вы будете им платить за такое кол-во запросов к ним…
    Или Вы будете «парсить» сайты авиакомпаний? У многих есть защита на кол-во запросов от одного и того же IP-адреса.
  • Ассемблерные вставки… в C#?
    +1
    Кстати. Если Вам достаточно иметь метод с передаваемыми аргументами, то вполне достаточно аллоцировать память через Marshal.AllocHGlobal например, потом запротектить на выполнение (единственный хак вне платформы), затем в этот участок памяти перелить опкоды (тут iced либа в помощь), затем через тот же Marshal получить вполне законный управляемый делегат — Marshal.GetDelegateForFunctionPointer, который можно где-то сохранить и переиспользовать. Все законно, в рамках платформы.
  • Ассемблерные вставки… в C#?
    +6
    Чтобы Вы не тратили время на разработку и отладку генератора нативного кода, вот Вам ссылка на проект, в котором реализованы все инструкции x86/x64, даже векторизация.
  • Короткая фото-история о путешествии на Кавказскую Горную Обсерваторию ГАИШ МГУ
    +1
    Известная дорога через Кисловодск в Джилы-Су у склона Эльбруса. Чуть дальше от поселения Кичи-Балык можно попасть в Долину нарзанов. В самом Джилы-Су даже европейских ребят можно встретить, купающихся в серебрянных источниках. Эх, какие термы можно было бы там сделать…
    Вы увидели только малую часть той великолепной дороги (полностью асфальтированной, кстати) с прекрасными пейзажами, скозь высокогорные луга с коровками и овечками, иногда сквозь облака, а в конце дороги вот:

  • typeof(T) vs. TypeOf⟨T⟩
    +1
    Есть еще один распространенный и интересный case:
    typeof(SomeType) == someInstance.GetType()
    Такой код очень хорошо понимает компилятор и хорошо оптимизирует, фактически заменяет на TypeHandle == TypeHandle, что в итоге превращается в небольшое число процессорных инструкций.

    Предложенное Вами решение показывает себя хуже в этом распространенном сценарии.

    static private object stringObject = "";
    
    // ...
    
    [Benchmark] public bool typeof_string_Equals() => typeof(string) == stringObject.GetType();
    [Benchmark] public bool typeof_string_Is() => stringObject is string;
    [Benchmark] public bool TypeOf_string_Equals() => TypeOf<string>.Raw == stringObject.GetType();
    


    typeof_string_Equals: 1.533 ns
    typeof_string_Is: 1.759 ns
    TypeOf_string_Equals: 5.251 ns

    И, да, зря Вы спорите насчет потокобезопасности Dictionary. Он не просто потокоНЕбезопасен, он не всегда работает просто инвалидно с точки зрения данных — бывает он намертво вешает поток, который заходит за чтением, если другой поток зашел за модификацией.
  • Генерация кода во время работы приложения: реальные примеры и техники
    +1
    Итак, в этом, на мой взгляд, заключается потенциал использования IL напрямую. Генерировать методы с его помощью, по-моему, занятие бесполезное, для этого есть более подходящие средства. Но вот модификация существующего кода IL может помочь в определенных ситуациях.

    Expression'ы оказывается компилятся в нечто не самое быстрое, как всем может показаться. Цитата из статьи от Sergey Teplyakov:
    Expression.Compile creates a DynamicMethod and associates it with an anonymous assembly to run it in a sandboxed environment. This makes it safe for a dynamic method to be emitted and executed by partially trusted code but adds some run-time overhead.

    Поэтому, иногда генерация на IL вместо Expression оправдана.
  • Бой стекла. Можно ли разбить фасад небоскреба?
    0
    Помимо физических нагрузок, термоупрочненное (закаленное) стекло должно проходить тест на искусственное старение в специальной камере. Суть в том, что стекло содержит вкрапления других молекул, помимо кремния, некоторые металлы и их окиси. При закаливании структура стекла выстраивается, но эти вкрапления упорно сопротивляются подчиняться этой структуре. Длительное жаровое воздействие под солнечными лучами может вызвать разную реакцию структуры и неподчиненных структуре вкраплений, после чего закаленное стекло саморазрушается. Если стекло производителя стекла (не производителя стеклопакетов) некачественное, то тест на старение с большой вероятностью обнаружит это, стекло разрушится в камере.
  • Почему важно проверять, что вернула функция malloc
    +3
    Получается причина одна, просто приведены разные сценарии ее проявления. Но в любом случае Вы правы.
    Если честно, я теряюсь в догадках, какая связь между проектом Chromium и LLVM, но она есть

    Наверное генерят нативный код для исполнения JavaScript виртуальной машиной.
  • Java с ассемблерными вставками
    0
    только на win-платформ

    Если на той платформе, что Вы имеете ввиду, есть возможность обеспечить доступ к куску памяти на выполнение, помимо записи и чтения, то можно и на ней. В статье пример с виндовым VirtualAlloc(Ex), в который можно передать MemoryProtection.Execute*. Если будете работать под .NET Core в Linux/macOS, то выделить кусок памяти можете через Marshal, а потом запротектить этот кусок самописной на С простой либой, которая просто вызывает mprotect, ну а вызвать этот метод либы можно стандартным для .NET DllImport.
  • Java с ассемблерными вставками
    +1
    Да, очень интересно. Но большого смысла не имеет. Много сложной работы, шансы ошибиться и закрашить приложение, процессорозависимый нативный код из платформонезависимого C#/Java и т.д…
  • Java с ассемблерными вставками
    +3
    Эх, было в юности такое увлечение.
  • ААА! Пришло время переписывать на .NET Coreǃ
    +3
    К сожалению, сейчас .NET Core не покрывает нужды десктопной разработки. Возможно, когда-нибудь это изменится. Но это уже совсем другая история.

    .NET Core, как и старший .NET Framework, умеет в DllImport, маршалинг между managed и unmanaged. Т.е. платформа как исполнитель управляемого кода и интегратор с неуправляемым ОС-специфичным кодом как раз все позволяет и покрывает. Поэтому правильнее говорить, что нынешний набор пакетов не покрывает все нужды десктопной разработки.
  • Робот-космонавт «Федор» станет постоянным участником испытаний пилотируемого корабля «Федерация»
    +3
    Зачем ему нацепили гопро на ухо, если у него есть голова, в которой, надо полагать, должны быть свои камеры?
  • Электроны: на задворках атомов
    –1
    Нет, но это означает, что они часть системы, которая наделяет определенные частицы зарядом, который дает им возможность взаимодействовать. Вернее наделяет чем-то таким, за счет чего они взаимодействуют, а заряд — это мера взаимодействия.
  • Электроны: на задворках атомов
    0
    Ну как? Без фотонов нет поля, в котором заряд как таковой имел бы смысл, не сближал и не отталкивал другой заряд.
  • Электроны: на задворках атомов
    0
    А нет ли противоречий в том, что переносчиком электромагнитного взаимодействия между заряженными частицами выступает беззарядовый фотон, по современным представлениям?
  • Электроны: на задворках атомов
    0
    Не обращайте внимания. Ваш комментарий по своему интересен, где-то лет 10 назад в унвере читал что-то про электрон как композицию из нескольких фотонов.
    Да вообще интересно как взаимодействуют фотон и электрон. Загадочное исчезновение фотона при столкновении с атомом с последующим переходом электрона атома на следующий энергетический уровень. Или обратный процесс, загадочное рождение и испускание фотона с переходом электрона на более стабильный нижний энергетический уровень. Вот что там происходит? Может быть правда есть какие-то нити, клубки? Может они интересным образом сплетаются друг в друга и расплетаются при определенных обстоятельствах. Вот непонятно! Что есть энергетический уровень электрона в атоме? При этом вне атома электроны и фотоны взаимодействуют слабо, никаких поглощений и испусканий нет, только небольшое рассеяние друг о друга. Может быть электрон в атоме правда вовсе не электрон, а вместе с протоном нечто качественно новое? Ой меня понесло. Заминусуют!
  • Электроны: на задворках атомов
    0
    Вы не допускаете, что какие-то элементы, обладающие некоторыми свойствами, при объединении в некую систему, могут зарождать новые явления, качественно новые свойства системы, доступные только на ее уровне и недоступные на уровне отдельно взятых элементов?
  • Для чего нужен Apache Ignite / GridGain, на примере .NET & C#
    +1
    Скажите, «вынесение JVM в отдельный процесс» будет единственным вариантом использованиям, или опция запуска в том же процессе останется? Такое ощущение, что для .NET Core Вы в итоге запилите как раз «тонкий клиент», т.к. это проще.
  • Для чего нужен Apache Ignite / GridGain, на примере .NET & C#
    +1
    Также в планах есть вынесение JVM в отдельный процесс и полноценный тонкий клиент на чистом дотнете.

    А это не будет затратнее? Добавите целых 2 прослойки сетевого взаимодействия, по 1 на каждой из сторон. Что есть сейчас — очень привлекательно. Тут вообще вопрос в том, что зачем брать отдельным сервисом какое-то хранилище, если его можно использовать прям в этом же процессе, т.е. избавить от оверхеда на сетевой трафик запрос-ответ и инфраструктуру их обслуживания.
  • Используем Apache Ignite в быту
    0
    На сайте написано ".NET starts the JVM in the same process and communicates with it via JNI & C++". Это именно то, что Вы описали в Межпроцессном взаимодействии?
  • Outernet: там где не работает Internet
    +4
    Ну да. Сначала 10Гб новостей погоды с рисунками, «основными новостями», «полезный» текст, хоть и read-only, но классно. А как взлетит и капитализируется, объем данных вырастит до 50Гб, будет 10Гб новостей погоды с рисунками, «основными новостями», «полезный» текст, хоть и read-only, но классно; и 40Гб «отбираемыми» админами рекламы, навешивания лапшы на уши и развлекательных шоу, и конечно же в режиме read-only. Так и не понял, чем это отличается от ТВ, которое итак есть по всему шарику, нужна лишь тарелка и приставка, что тоже можно уложить далеко до 100$.
  • Tabula Sense: стол со смыслом
    +2
    Не увидел удобного отсека для казюлек.
  • Из хирурга в разработчики: как в 40 лет сменить профессию?
    +1
    Время от времени подумываю о своей востребованности как программиста в 40 лет (через 10 лет) и сильно парюсь… А есть вот прям замечательные примеры, когда в 40 только приходят в сферу.
    Успехов!
  • Смотреть на звезды: лучшие открытые обсерватории мира
    +3
    Да, Вы правы. Комментарий выше про САО более точен, т.к. САО — это и БТА и РАТАН и РТФ-32 в одном флаконе. И расположение высоко в горах с практически чистым от светового загрязнения небом явно более выгодное, чем пример в статье из Лос-Анжелеса, где фиг его знает как вообще обсерватория работает при таком ярком городе.
  • Смотреть на звезды: лучшие открытые обсерватории мира
    +3
    А как же БТА в Архызе?
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    0
    Вы правы, между собой коммерческие вопросы они могут решать как хотят. Я не утверждал, что кто-то здесь неправ. Просто столкнулся с проблемой, нужна была отладка, а другие инструменты для меня крайне неудобны и их пришлось использовать.
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    0
    Например, мне хочется видеть .NET (если отбросить детали, продукт МС) в мире Linux, видеть как платформа займет свою нишу, где успешно крутится та же JVM. Мне кажется C# имеет все шансы занять Enterprise тему и потеснить Java, когда .NET Core будет достаточно стабилен. Хочу делать кроссплатформенные продукты на C#. Вы и все интересующиеся .NET Core комьюнити таким образом двигаете платформу в этом направлении.
    Мне удобно писать в Rider'е, так производительнее для меня, т.к. Rider это не только редактор и плагины для подсветки, это куча классных инспекций из ReSharper, которые я использую каждый день и не собираюсь отказываться. Вам удобно делать свои .NET Core продукты в Visual Studio Code — Ваше право. Почему в итоге мы с Вами не можем двигать продукт (не важно коммерческий он для них или нет, они его двигают всеми силами) МС .NET Core удобным для нас с Вами способом?
  • Редизайн Хабрахабра и Гиктаймс. Финишная прямая
    +3
    Dark theme короче не дождемся.
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    0
    Для запуска случайно не нужно Core CLR билдить в дебаге и перебрасывать либы в исполняемую директорию приложения, как это делается например для просмотра asm дампов jit'a? (Работает конечно, но блин неудобно)
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    0
    За ссылки спасибо!
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    +2
    Дорогие JetBrains, IDE сделали, все супер. Теперь надо для мира .NET Core под Linux / macOS позаботиться о профайлинге. Ну куда же мы без dotTrace и dotMemory? Ниша не занята. А это как никак джентльменский набор.
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    +1
    Сравнивал JetBrains Rider, Visual studio for Mac, Visual Studio Code под macOS. При том, что это для OS проекта. Для повседневной работы использую VS 2017 (Windows).
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    +7
    В одном из EAP (17 вроде) сообщили, что МС изменила лицензцию на пакет, который Rider использовал для отладки, пакет стал доступен только для Visual Studio for Mac, Visual Studio Code — ну так видимо МС решили надавить на конкурентов (JetBrains Rider / Visual studio for Mac / Visual Studio Code — прямые конкуренты). Из-за чего в Райдере сломалась отладка вообще. В последующих EAP ребята оперативно вернули отладку (видимо сами что-то писали), для Windows в 18 EAP'е, для Mac/Linux в 23. С тех пор отладка работает, но ее отсутствие заставило попотеть и запускать VS for Mac. В общем, ребята из JetBrains торжественно преодолели эту проблему, за что и спасибо.
  • JetBrains Rider 2017.1 — первый релиз новой кроссплатформенной .NET IDE
    +6
    Использовал все EAP'ы с самого начала для работы над OS проектом в .NET Core, очень удобная IDE, хотя и были баги. История про проблемы с отладкой (неожиданное изменение лицензирования пакета от МС) оставила неравнодушной! Среди альтернатив на macOS по разработке на .NET (Core) — лучшее, по моему субъективному мнению.
  • Если нет разницы между двумя вариантами кода, выбирай тот, который проще отладить
    +2
    В Вашем варианте тогда нужен default обработчик, где Вы что будете делать? Скорее всего надо кидать исключение, если ни один из case не заматчил объект. Или просто проглотите и ничего не сделаете?
  • Миллион WebSocket и Go
    +2
    Все это уже есть. Например, на яве в netty. Получается бросили кучу уисилий, написали велосипед и он всеравно будет медленней, чем готовые решения.

    Автор в том числе акцентирует внимание на zero-copy upgrade, смысл которого в том, чтобы не парсить Http заголовки, а сразу их анализировать и матчить. В netty дефолтная реализация в виде пайплайна будет выглядеть примерно так: HttpResponseEncoder + HttpRequestDecoder + HttpObjectAggregator + WebSocketsHandshaker — т.е. в netty как раз готовое решение будет далеко не zero-copy.
    Но на netty можно написать свой хэндлер, который будет zero-copy, но тогда это та же работа, что они и сделали (почти, за исключением остальной инфраструктуры).
  • Миллион WebSocket и Go
    0
    Теперь понял, что Вы имели ввиду. Ваш пример имеет право на жизнь.
  • Миллион WebSocket и Go
    0
    Мы точно говорим о C#? Когда придет следующая часть, то куда она будет передана, если у Вас уже висит незавершенная задача, запущенная с определенными параметрами (не вижу в Вашем примере)? Поясните, где в Вашем примере запускаемая задача берет первый кусок сообщения, потом останавливается и ждет получения слеующего. Это важно для понимания Вашего хода мыслей в этом обсуждении.
  • Миллион WebSocket и Go
    –1
    Представьте, что вам пришел буфер, в котором header Connection находится в конце и не полностью, а его продолжение прийдет первыми байтами в новом буфере (на данный момент обработки нового буфера нет): первая порция байт-буфера "...................Connecti" и вторая порция байт-буфера «on: Upgrade\r\n........»
    — Ваш ReadUntilSpace что сделает? Не понятно. Допустим он завершится, тогда выполнение перейдет в SkipUntilEOL, который также никуда не сможет прочитать.
    Ваш код будет работать, если Вы получили целостное Http сообщение.
    А автомат, о котором я говорю, на шаге чтения названия заголовка просто остановится, прочитав Connecti, запишет, что заголовок Connection пока что еще матчится, но не до конца. Автомат закончит обработку буфера и все. При поступлении следующей порции байт-буфера «on: Upgrade\r\n........», автомат продолжит с сохраненного состояния, дочитает «on: », запомнит общее состояние автомата и что заголовок Connection заматчен успешно и переключится на следующий шаг чтения значения заголовка. Так обрабатывается все сообщение, всеми приходящими кусками. Декодирование веб-сокет фрейма работает почти аналогично, только сильно проще.