Pull to refresh
3
1.2
Send message

Готов утверждать, что pdf вечен.

*Анекдот про сына еврея-юриста*.

За алармизмом насчёт срока жизни форматов наверняка есть некоторые деньги. Архивистам тоже было бы досадно соптимизировать самих себя.

Справедливо, это один из пяти способов начиная с v2.10.

Но можно заметить, что синий [0;0;255] превратится в 70 вместо теоретических 77. Потому что коэффициенты адаптировали из sRGB'шного D65 под работу в D50 внутри приложения, но, видимо, на этом и закончилось (обратного преобразования при сохранении и где-ещё-потребуется не будет).

С учётом художественных целей - в общем-то опять не важно.

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

Извините, но вам пафос читать мешает.

Алгоритмов перевода в оттенки серого много, с разными целями. Если оттенки серого нужны, скажем, художнику, то CL-подход для него не корректнее других.

Гимп, фотошоп, октав, матлаб, scikit - нигде его нет, потому что не ставятся цели, на которых CL-подход стал бы лучше других. Но если поставить, то конечно не единственное, ещё коэффициенты.

С пониженным содержанием wtf-per-line
im_path = "..."
src = ImageSource(im_path, end=0)
\     .ConvertToPlanarRGB().ConvertBits(32)

ncl = src.ToYYY709()
 cl = src.ApplyGamma(2.2).ToYYY709().ApplyGamma(1/2.2)

Interleave(
\   src.MySub("source           ")
\ , ncl.MySub("   NCL luma      ")
\ ,  cl.MySub("       CL luma   ")
\ , src.MySub("           source")
\).WithReverseNoDup().AssumeFPS(0.5)

return last.ConvertBits(8, dither=0) # ordered dither


function ToYYY709(Clip c) { # Y planes inside RGB Planar Single fmt
    Expr(c.ExtractR(), c.ExtractG(), c.ExtractB(), 
    \   "x 0.2126 * y 0.7152 * z 0.072 * + +", format="RGBPS")
}
function ApplyGamma(Clip last, Float gamma) {
    Expr("x {gamma} pow".Format())
}
function MySub(Clip last, String text) {
    Subtitle(text, size=24, font="Courier New", align=8)
}
function WithReverseNoDup(Clip c) {
    c + c.Trim(1,0).Reverse().Trim(1,0)
}

Там в самом грубом приближении так будет. Если отменить-вернуть гамму, то значение у насыщенных цветов вырастет.

ncl_luma = 0.3*R + 0.6*G + 0.1*B
cl_luma = (0.3*R^2 + 0.6*G^2 + 0.1*B^2)^(1/2)

G = B = 0
ncl_luma = 0.3*R
cl_luma = (0.3*R^2)^(1/2) = 0.3^(1/2) * R ~= 0.55*R
0.55*R > 0.3*R

Первое как обычно, не выходя из гамма-скорректированного пространства, и с нарушением принципа constant luminance из-за этого. Второе в линейном свете + обратно применяем гамму для отображения.

----

APNG
Исходник
src = ImageSource(im_path, end=0).ConvertToPlanarRGB().ConvertBits(32)

ncl = src.ConvertToY(matrix="PC.709").YToRGB()
 cl = src.ApplyGamma(1/2.2).ConvertToY(matrix="PC.709").ApplyGamma(2.2).YToRGB()

blank = "    "
B1 = blank
B2 = B1 + B1
B3 = B1 + B1 + B1

Interleave(
\   src.MySub("source"+B3)
\ , ncl.MySub("ncl-luma"+B1)
\ ,  cl.MySub(B1+"cl-luma")
\ , src.MySub(B3+"source")
\ ,  cl.MySub(B1+"cl-luma")
\ , ncl.MySub("ncl-luma"+B1)
\).AssumeFPS(0.5)

return last.ConvertBits(8, dither=0) # ordered dither

function MySub(Clip last, String text) {
    Subtitle(text, size=18, font="Courier New", align=8)
}

function ApplyGamma(Clip last, Float gamma) {
    Levels(0, gamma, 1, 0, 1, coring=false)
}

function YToRGB(Clip last) {
    CombinePlanes(planes="RGB", source_planes="YYY", pixel_type="RGBPS")
}

ffmpeg -y -i cl_ncl.avs -plays 0 out.apng

В статье ещё к коэффициентам придраться можно, взять BT.709/sRGB-коэффициенты (0.2126, 0.7152, 0.0722) вместо BT.601 (0.299, 0.587, 0.114).

Корректный алгоритм решает какую-то задачу, этот решает.

Оттенки серого требуются для разных целей и редкая цель выиграет от "только что работали в целых числах и вот уже два powf()". Художественные цели не выиграют, сжатие обычно тоже.

В следующей части говорят про случай, когда на LZ 127 пришлось замедлиться и лишиться связи.

Скорость для снижения опасности для ремонтников и недопущения срыва импровизированного покрытия пришлось заметно снизить — из-за чего мощная бортовая радиостанция перестала работать, ветровые электрогенераторы не давали достаточного питания. https://habr.com/ru/companies/ruvds/articles/1001936/

Потом в R101 было необычное: ветрогенераторы в гондолах двигателей и генератор также можно было крутить двигателем-стартером.

Each engine car also contained a 40 bhp (30 kW) Ricardo petrol engine for use as a starter motor. Three of these also drove generators to provide electricity when the airship was at rest or flying at low speeds: at normal flight speeds the generators were driven by constant-speed variable-pitch windmills. https://airshipsonline.com/airships/r-101/

С XOR ведь проблема, что с точки зрения стандарта оно не обязано работать:

2.3.5 Q11. Is the XOR linked list idiom supported?
Our reading of C11 and proposal for C2x: C11: the text does not clearly specify. C2x proposal: no. C2x proposal (no-provenance option): yes
N2263 (2018)

Хоть вроде передумали и планируют дать гарантии:

So the overall conclusion was not to ban such usage of pointers through integers.
https://gustedt.wordpress.com/2025/06/30/the-provenance-memory-model-for-c/

Если вспомнить отношение комитета к оптимизациям и alias analysis - это была не пустая угроза. В предыдущий раз его увлечение оптимизациями здесь привело к расхождению со стандартом операционных систем и браузеров (в C89 появился strict aliasing, который в рамках стандарта решили сделать неотключаемым; против стандарта идти несложно (-fno-strict-aliasing), но до этого не надо было доводить).

Местное законодательство, регуляторы - в космосе их нет.

А куда они денутся? Если в законах США есть белые пятна на эту тему, их закрыть несложно. Рычаги давления всё те же - ракеты летают из США, бизнес в США, сам человек в США. Но говорить как о будущей свободной гавани можно (говорить вообще можно).

нельзя поместить далеко, например в другом конце земного шара

Ещё один конец земного шара найти дешевле, их у него много.

Видимо, так:

У США некоторые трудности с расширений энергосети, потому что 25 лет потребности были на одном уровне (4000 ТВт-ч в год). И эту политическую проблему (кто заплатит за новые электростанции и кому они, в конечном счёте, нужны) можно представить как физическую, чтобы обрадовать инвесторов: «ЦОД будущего будут потреблять много энергии», где «много» незаметно превращается из «2% от мировой генерации + местные политические дрязги» в «все пустыни уже в солнечных панелях и конца не видно».

orbital data centers is a first step towards becoming a Kardashev II-level civilization, one that can harness the Sun’s full power

500 to 1000 TW/year of AI satellites into deep space, meaningfully ascend the Kardashev scale and harness a non-trivial percentage of the Sun’s power.

https://www.spacex.com/updates#xai-joins-spacex

Да, но как?

Можно, например, назвать гифкой WebM, а потом ещё раз на самом деле перекодировать в гифку.

В новости подписаны - camelcamelcamel.com. Есть ещё такой агрегатор с текущими ценами, без графиков.

PS: что-то страшное с картинками происходит, тёмные времена наступают.

  • Оригинальные графики были в png

  • CDN tomshardware сжал их в lossy webp (хотя мог бы в lossless, это не фото)

  • Для хабра вместо оригинала взяли, похоже, скриншоты в меньшем масштабе

  • Сохранили их снова в lossy webp или jpeg 4:2:0

  • <здесь могла быть ваша нейросеть>

  • И залили на сайт в png

Апконверты в png (можно с потерей в качестве) - вроде норма у новостников.

...где нужно знать точное время выполнения. Оптимизация в таки случаях вообще отключается, hal или ll в случае stm32 не используются. Если интересна данная тема - посмотрите документ do-178c, идентичные документы есть и для других отраслей, наиболее известны такие нюансы в автомобильной промышленности.

Я бы это замял вместе с volatile. У DO-178B/C тёплые отношения с кодогенератором MATLAB'а. У MISRA и AUTOSAR нет претензий к оптимизациям-компилятора-в-рамках-стандарта. Читаемость кода в принципе отражается на безопасности. Важно знать время выполнения худшего случая и решения компилятора здесь на эту... знаемость не влияют.

Вроде бы остаётся часть DO-178B/C с наибольшими требованиями (DAL A), где хотят прослеживаемость до машинного кода, но (не)знакомство с той внутренней кухней само всплывёт, ненастоящие сварщики не пройдут.

Французы из ANSSI справедливо замечали, что за избеганием оптимизаций компилятора может стоять неуверенность в безопасности кода (или несогласие со стандартом, но подразумевается, что такой роскоши нет... или что её надо выражать через обращение взора на Rust):

In particular, the use of compilation options such as -fno-strict-overflow, -fwrapv, -fwrapv-pointer, -fno-delete-null-pointer-checks or -fno-strict-aliasing is most of the time indicative of a risky usage of the C language. ...

By default, compilation options shall be as strict as possible with the aim of increasing the stringency of the compiler to the fullest. ...

RULE — Enable a reasonably high optimization level. For GCC and CLANG, the optimization level must be at least -O1, and ideally -O2 or -Os. ...

RECOMMENDATION — Use the strictest compilation options

ANSSI Guidelines (PDF)

(где-то был ещё вариант "тестировать по советам выше, но на проде подстраховаться")

Просто этот вопрос может помочь на собеседовании выявить более высокий опыт кандидата.

Пишет код с учётом "гарантированных" оптимизаций, говорит про читаемость, про одни аспекты стандартов - заваливаем его с вашими аргументами.

Пишет код с избыточными ручными оптимизациями, говорит о проверенных традициях, о других аспектах стандартов - заваливаем с моими аргументами.

В итоге можно узнать... лояльность. Станет он говорить, что указанная оптимизация не только у GCC не отключалась на -O0, но и у компилятора CompCert (https://godbolt.org/z/TaP6h1jdM) - значит, лезет в бутылку. Зачем ему это? Мог бы аккуратно разузнать, как у нас принято и показать, что он под всё подстроится.

Это повод расширить сферу ответственности пилота или автомата?

если за 10 лет до mod добрались

К 1979 добрались (Unix v7 - github).

Ответ: При использовании volatile не будет гарантирована детерминированость.

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

PS: возвращаясь к "компилятор для разработчика или разработчик для компилятора":

Не хорошо на МК выполнять операции взятия остатка от деления и деление на 2...

Компилятор это оптимизировал в 1974, за исключением остатка:

	/*
	 * Try to change * and / to shifts.
	 */
	case TIMES:
	case DIVIDE:
	case ASTIMES:
	case ASDIV:
		tree = pow2(tree);
	}

Код из Unix v6, но по сравнению с v4 только комментарий добавился.

То есть совет перестал работать лет 40 назад, если за 10 лет до mod добрались...

Но лучше всего вызвать __builtin_popcount, если поддерживается

Где улучшения доведены до конца и будет (если нет инструкции в целевой архитектуре) либо алгоритм с SIMD-within-a-register, либо таблица:
https://github.com/gcc-mirror/gcc/blob/master/libgcc/libgcc2.c#L822

C-C++-C#-1C

Закономерность ведёт к D и напоминает о пропуске C𝄪 (видимо, пропущен из-за плохой поддержки в юникоде).

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

Конечно не учёл, вы же не учитывали "Ну если серьёзно..." в соседнем комменте и смайлики в начале ветки и не захотели смотреть на расчёты как на крайние оценки снизу-сверху, призванные напомнить, что компьютеры в принципе жрут немного по сравнению с кондиционерами, металлургическими заводами, людьми и прочими не менее сравнимыми вещами.

1
23 ...

Information

Rating
1,630-th
Registered
Activity