Pull to refresh
6
0

Небесный механик

Send message
Там от оси Х ц.м. отстоит всего на 6 мм, поэтому (исключая ориентацию ОСК-ТП, в ОСК стабилизируют исходя из этого. Я так понимаю, под LVLH вы подразумевали ОСК, а под специальной LVLH — ОСК-ТП) в свободном полете ориентируют исходя именно их этого. <...> Так что мягко говоря на МКС ни о какой компенсации и нулевом расходе там речи не идет, под успокоение станцию тормозят весьма активно.

Я немножко о другом. Не про ТП. Понятно, что стыковки требуют расходов топлива. Как и развороты большие. Но для спутников связи, к коим можно отнести спутники SpX, это не так актуально, там аппарат чаще всего просто должен поддерживать свою ориентацию антенной к земле (если говорить грубо, понятно, что есть тонкости разные). То есть быть неподвижным в ОСК, она же LVLH.

Чтобы не тратить постоянно топливо, в обычном полете аппарат управляется гиродинами. МКС как и спутники ДЗЗ ( тот же «Ресурс-П»), равно как и спутники связи, равно как и любой аппарат, которому долго нужно поддерживать свою ориентацию для выполнения своей целевой задачи. МКС, как пример такого аппарата, не симметрична, центр масс смещен (по-моему не на 6 мм, а на величину порядка метра от оси X, но не суть), что вызывает гравитационный момент, стремящийся развернуть космический аппарат. На высотах где летает МКС еще и атмосфера участвует, также создавая момент силы.

Но станция при этом находится в специальной ориентации ОСК+разворот. Эта ориентация рассчитывается из таких соображений, чтобы средний за виток момент сил (гравитация + атмосферное трение) только поворачивал момент импульса гиросистемы (мы же в ОСК летаем, объект всегда одной стороной на землю смотрит) во время орбитального движения. Гиросистема не насыщается потому, что момент силы на космический аппарат не увеличивает модуль момента импульса гиросистемы, а весь уходит на поворот вектора момента импульса при орбитальном движении в ОСК. Понятно, что чем больше момент сил, тем больше должен быть момент импульса, запасенный в гиродинах, и, чисто технически, такие ориентации ограничены ёмкостью гиросистемы. Но в пределах этой емкости можно не только бесконечно долго поддерживать ориентации вида ОСК+разворот без расхода топлива, но и совершать без расходов топлива небольшие маневры (оставаясь в ОСК, опять же), что важно, например, для спутников ДЗЗ, которым нужно снимать не только подспутниковые точки, но и точки влево-вправо от подспутниковых.

В идеальном случае в центре этого набора ориентаций есть одна ориентация (так называемая TEA — Torque Equilibrium Attitude) в которой суммарный за виток момент сил на объект вообще равен нулю и для ее поддержания нужен нулевой момент гиросистемы. К сожалению в реальности это положения равновесия неустойчивое — любое движение экипажа, перекачка топлива, перенос груза, перемещение солнечных батарей — все влияет на него (тем более, речь идет о среднем за виток равновесии, в каждый конкретный момент его нет даже в теории), поэтому в этой ориентации гиродины используются для парирования этих неустойчивостей, имея в среднем за виток околонулевой момент импульса.

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

Точно также как люди, например, не могут объяснить, как именно они понимают, что красный цвет — это красный, а оранжевый — это оранжевый, потому что мы не ощущаем сигналы от разных цветочувствительных клеток в сетчатке раздельно. Или как мы можем только весьма грубо описать характеристики чьего-то голоса (явно недостаточно подробно, чтобы другой человек сколько-нибудь точно узнал этот голос по описанию), но можем весьма эффективно отличать голоса знакомых людей среди голосов незнакомых.

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

Во-первых, 3° получается не за счет эллиптичности, а за счет того, что ракета со старта должна была двигать немного к югу (по азимуту 92°), а потом уже приблизившись к экватору, завернуть брать курс точно на восток. По-английски это называется dogleg maneuver. Это если грубо. Вообще, прицеливание в нужную плоскость — это отдельная задача, которая сейчас решается специальными бортовыми алгоритмами. Это раньше ракеты умели только лететь по фиксированному азимуту и менять только тангаж.

Во-вторых, наклонение в любой точке орбиты сменить можно вниз вплоть до той широты, на которой проекция этой точки на земную поверхность находится. Если апогей и перигей находятся в плоскости экватора, т.е. аргумент перигея равен 0° или 180°, то наклонение в апогее можно изменять в любых пределах.
* аргумент перигея — угол, отсчитываемый в направлении движения по орбите от восходящего узла орбиты до перигея
** восходящий узел орбиты — точка, в которой эллипс орбиты пересекает экватор с юга на север

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

В-четвёртых, наклонение обнуляется не «сначала», а совместно с другими манёврами по выходу на ГСО, потому что по теореме Пифагора один манёвр с компонентами приращения скорости по нормали к орбите (для смены наклонения) и в плоскости орбиты (для изменения формы орбиты) требует меньшего суммарного приращения, чем два манёвра по отдельности.

яичница(яйца) = яйца |> чистка |> жарка

Подавляющая часть аварий — это износ подвижного состава или рельс.

Большинство тяжёлых аварий это почти всегда человечески фактор помноженный на особую внутреннюю структуру РЖД (когда много чего замалчивается и сваливается на сотрудников «стрелочников»… уж поверьте я учавствовал в таком мероприятии, как слесарь, в сокрытии косяков приведших к повреждению подвижного состава после аварии… чтобы выглядело как «ну вагоны то старые»… чтобы до уголовки не дошло у руководства и причастных к эксплуатации… это приводит к видимости что у нас всё отлично и ничего не происходит… у нас например один раз вагон в рейс уехал с шваброй, которой полы моют, вместо детали тележки… чтобы не придрались на приёмке к остутствию детали)
множество аварий и сходов 2000х годов это отголоски начала 90х годов когда навыпускали кучу литья для грузовых тележек с нарушением технологии и до сих пор не могут всё вагоны с ними выловить.
У РФ вообще конечно одни из самых современных и надёжных железных дорог в мире, но в США в некоторых местах нас сильно опережают. (ну и отстают тоже, например в электрификации)

Про что? Про универсальность РИТМа я у Вас же в блоге и писал. Это, мягко выражаясь, не секрет: Шмелев буквально в каждой презентации этот момент подчеркивает.


Насчет негодности корабельных реакторов для АЭС — мне казалось, это самоочевидно. На военных кораблях и ПЛ РУ соединена через ТЗА с винтом, она в принципе никогда не работает подолгу на высоких режимах. Самые многочисленные РУ, лодочные, вообще 95% времени работают на 10% от номинала. У авианосцев средняя загрузка повыше, но ненамного, 20-25%. И корабельные установки не ограничены обогащением топлива. Американские РУ работают на АЗ практически оружейного обогащения, выше 90%, наши несколько ниже, но, в общем, тоже и близко не соответствуют требованиям МАГАТЭ по нераспространению. К энергетической РУ требования практически противоположные: от нее требуется как раз месяцами, а лучше годами молотить на 80-90% номинала на топливе обогащением <20%, а желательно вообще ~5%. "Адаптировать" к этому режиму корабельную установку практически нереально, надо проектировать с нуля.


Единственный тип корабельных реакторов, которые довольно сильно похожи на энергетические, это ледокольные. Все эксплуатируемые атомные ледоколы — атомэлектроходы, РУ КЛТ-40 на них крутит обычную энергетическую турбину производства КТЗ, которая через генератор питает ходовые и маневровые электромоторы. Нормальный рабочий диапазон у КЛТ-40, если я ничего не путаю, 35-75% номинала, обогащение АЗ там все равно выше 20%, но все же не военное. Все это нивелировали частично за счет конфигурации АЗ, частично за счет топливной композиции и получилась КЛТ-40С для "Академика". Параллельно ОКБМ проектировали РИТМ-200. И в какой-то момент стало ясно, что все эти доработки в новой РУ должны быть исходно. И так и сделали. И теперь есть реактор, который ставится на ледоколы, но вообще может работать и на АЭС и его АСУТП может подключаться в Smart Grid и штатно следовать за нагрузкой по суточным циклам. Егоров из АСЭ на арктическом форуме вчера эту тему излагал городу и миру.

или не хватает этого сайта sorting.at с демонстрацией семнадацати видов сортировки
UFO landed and left these words here
Есть ещё такая штука как «Piecewise Cubic Hermite Interpolating Polynomial». Кусочно-полиномиальная интерполяция кубическими сплайнами Эрмита. Может дать лучшие результаты в некоторых случаях. Вот пример из Matlab: www.mathworks.com/help/matlab/ref/pchip.html
И конкретно здесь мне интересно знать для await\async и рядом связанных.

Этот механизм, как мне показали, удобен для асинхронных вызовов. Целевая ниша асинхронных вызовов: не частые внешние запросы, но с возможной(!) длительной обработкой.

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

Вот вы еще не разобрались в механизме, а уже делаете о нем выводы. Все, на самом деле, совсем не так.

Во-первых, сам по себе механизм async/await — это всего лишь синтаксический сахар вокруг продолжений (continuations). Да, он очень умный, да, он разворачивает эксепшны, следит за жизненным циклом объектов и контекстом синхронизации, но это всего лишь удобная обертка вокруг Task.ContinueWith().

(кстати, будем честными, тоже не уникально для C#: в F# есть совершенно свои async workflows, в Scala — for-comprehension for Futures).

Во-вторых, построен этот механизм вокруг реактивной парадигмы, которая радикально отличается от потоков. Смысл ее в очень простом — когда у нас есть потенциально долгоиграющая операция, мы оборачиваем ее в «нам нужен результат когда он будет» (Task в C#, Async в F#, Future в Scala, Promise/deferred в JS и так далее) и прекращаем текущее выполнение. Именно прекращаем (отдаем контроль внешнему фреймворку), а не блокируем — это важно.

А дальше у нас есть набор композиций, которые позволяют нам сказать «когда этот результат появится, мы хотим сделать с ним вот это» (а так же «если произошла ошибка, мы хотим сделать вот это» и так далее), и каждое «это» — это «продолжение» (continuation), очередная функция, которая может быть как синхронной (т.е. вернуть простой результат), так и асинхронной (вернуть обещание результата в будущем), и дальше эта картинка продолжается и продолжается и продолжается.

В C#, опуская детали, это без синтаксического сахара выглядит так:

webClient
  .ReadStringAsync()
  .ContinueWith(FindParent)
  .ContinueWith(parentUri => new Request(parentUri).ReadAndParse(n+1))


И так далее.

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

Скажем, CalculateFibonacciAsync может внутри себя открывать другой поток, в нем запускать вычисление, а по его завершению возвращать поток в пул, а результат — потребителю. А уж упомянутая Stream.ReadAsync — открывать асинхронную операцию чтения, вешать делегат на ее завершение, и не трогать потоки вообще; причем в зависимости от нижележащей системы, того, что она поддерживает, и банально типа потока, эта асинхронная операция чтения может быть реализована через совершенно разные вызовы API — но для потребителя это все равно всего лишь обещание байтового массива когда-то в будущем. А при чтении из потока в памяти (который просто абстракция над буфером) результат будет просто синхронным — но пользователь снова не заметит разницы.

Прелесть .net не в том, что это единственная система, где есть реактивное программирование. Прелесть в том, что (а) оно есть в стандартной библиотеке (б) оно как можно больше опирается на возможности ОС (ц) оно продвигается фреймворками (стандартные интерфейсы в том же WebAPI почти все асинхронны, в OWIN — все асинхронны, в Windows Runtime, насколько я помню, вообще нельзя писать синхронный I/O код). Просто в MS однажды поняли, что для того, чтобы система была отзывчивой, нужно по максимуму избегать блокирующих операций — и решили сделать все, чтобы программисту (а) было удобно писать в неблокирующем стиле и (б) было сложно писать в блокирующем. Второе удалось хуже, чем первое, но мы только в начале пути.
>> Я это честно признал, т.к. не щупал. А сейчас пытаюсь понять по вашему описанию

Чтобы понять как это работает попробуйте пописать код через Task.ContinueWith, Microsoft.Async и т.п. в MSVS 2010.
Там нету ключевых слов async/await, что СИЛЬНО усложняет код, но позволяет понять что же все-таки за этими словами кроется (хотя бы приблизительно).
А так?
for (var iterator = list.GetEnumerator(); iterator.MoveNext();){
    ...
}

Согласен, что да. может и не быть. Но это не упрощает написание кода, а только усложняет.

Это проблемы вашего опыта, а не C#/.net.

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

«В любом случае» я использую foreach. Я просто показал вам, как решить вашу конкретную задачу.

Иными словами, основной мой посыл: «работа с итераторами в C# проще, чем в C++» требует серьезных примеров.

Вот вам один простой пример:

IEnumerable<ValidationError> Validate()
{
  if (Name == null) yield return ValidationError.FromProperty("Name");
  if (Text == null) yield return ValidationError.FromProperty("Text");
  if (Price < 0) yield return ValidationError.FromProperty("Price");
}


(да, я знаю, что есть валидационные библиотеки, атрибуты, блаблабла, но рано или поздно вам надо написать какой-то кусок такого кода руками)
Поподробнее:

var selectedOrders = from o in context.Orders
                     where o.Freight > 30
                     orderby o.ShippedDate descending  
                     select o;

http://localhost:12345/Northwind.svc/Orders?Orderby=ShippedDate&?filter=Freight gt 30


Т.е. нарушение DRY (да, я ленив) при использовании .h-файлов — это нормально? Зачем сначала заставлять разносить объявление и определение, а потом подтыкать это подпорками в IDE?
Код вызова:
Task task = new WebClient().DownloadStringTaskAsync(«microsoft.com»);
task.Wait(); // Здесь мы ждем завершения задачи, что блокирует поток
TextBox.Text = task.Result;

Вот оно и видно, что не пробовали. Так на TPL писать противопоказано. Вот правильный вариант:

//на время вызова существующий поток, скорее всего, будет "отпущен" и сможет выполнять другие задачи
TextBox.Text = await new WebClient().DownloadStringTaskAsync(«microsoft.com»);


Т.к. в C# потоки это обертка над потоками системы, то я не вижу принципиальных различий между потоками в C# и С++

Вот только задачи (Task) в TPL — это не обертка над потоками, а абстракция уровнем выше, поэтому ваше рассуждение тут немного не применимо.
На чистом пресноводном водоеме подальше от берегов и с глубиной метров 10, не менее — как раз большей частью фона становятся космические мюоны. И это и есть 3,2 мкР/ч. Вернее, 0,032 мкГр/ч поглощенной в человеческом теле дозы. Правда, что покажет дозиметр при этом — довольно таки бабка надвое сказала. Вернее, это можно определить по площади счетчика: 1 частица на квадратный сантиметр в минуту. На уровне моря, естественно. Эффективность регистрации у них — практически 100%.
Когда у вас подскакивал фон — случайно дождей у вас не было? Потому что есть такое явление, связанное с теми же самыми космическими мюонами: они дают тормозной рентген, и его интенсивность резко возрастает во время дождя. Плюс дожди осаждают продукты распада радона. В результате иногда во время дождя мощность дозы подскакивает в 2-3 раза.
Так что 3 мкР/ч на земной поверхности малореально, 6 бывает, в зависимости от подстилающей поверхности. Обычно таки 8-12, если не на гранитах (там больше).
У меня, к сожалению, нет под рукой спектра гамма-фона, который я снимал в Москве, но могу показать то, что дает производитель одного из наших приборчиков — измерено в Питере (у меня картинка в целом близкая, только разрешение чуть лучше). То есть в вашем СЗФО. Маленький пичок в районе 650-го канала — это калий-40, большой горб — урановый ряд. Пик от цезия должен быть около трехсотого канала, чуть выше имеющегося там горбика 609 кэВ (радий-226), но его там нет. Если бы он давал заметный вклад в мощность дозы — он бы был хорошо заметен. От кобальта (правда, кобальт после Чернобыля уже изрядно стух) — два горба в районе калия. Там тоже пусто. Следовательно, доля антропогенного вклада в радиационный фон в Питере равна ноль целых шиш десятых.
image
Тогда уж стоит ещё упомянуть, что помимо спецификатора noexcept, есть ещё и compile-time оператор c тем же именем, который принимает на вход выражение и возвращает false, если в составе этого выражения есть хоть один вызов функции без noexcept спецификатора, и true в противном случае (более подробно о правилах можно прочитать здесь):
void f() noexcept;
void g();

cout << noexcept(f()); // true
cout << noexcept(g()); // false
cout << noexcept(true ? f() : g()); // also false

Такая встроенная примитивная compile-time проверка на то, может при вычислении выражения броситься исключение или нет. Можно использовать в сочетании со спецификатором noexcept:
void use_f() noexcept( noexcept(f()) ) // noexcept(true)
void use_g() noexcept( noexcept(g()) ) // noexcept(false)
Всё, что связано с DWARF'ом поляжет нафиг (а это отладчик и zero-cost exceptions). Кроме того, если их не помечать, то peepholeы могут переставить местами инструкции, которые переставлять нельзя. Про RTX_FRAME_RELATED_P, как и про многое другое, написано в gccint.
1

Information

Rating
5,082-nd
Location
Монино, Москва и Московская обл., Россия
Registered
Activity