Про суровые условия - это уже в другую сторону перегиб. JESD218 говорит, что изношенные* SSD клиентского класса должны год хранить информацию без питания, корпоративного класса - 3 месяца. Для клиентского класса подразумевается, что SSD используется при 40 градусах и хранится при 30, для корпоративного температуры другие, но примерно эквивалентные, судя по табличке в приложении (retention in weeks как функция от температуры хранения и температуры работы).
Если SSD изношен не на 100%, а на 10%, это теоретически должно выливаться в 10x к сохранности (исходя из равномерного выравнивания износа + того, что пишет Infineon + написанного в JESD47).
10 лет назад была история с Samsung 840 и 840 EVO и медленным чтением старых данных. Память была 2D TLC - что-то вроде нынешней QLC. Тормоза людей беспокоили больше, чем шанс потери данных (до потери данных доходило редко?).
* то есть когда запись достигла заявленного производителем TBW. Тестовая нагрузка по соседнему стандарту - JESD219 (для корпоративных SSD - более тяжёлая).
Всё-таки он уже 8 лет кроссплатформенный и на роль всесторонней замены cmd.exe его метили изначально.
Mozjpeg'овский jpegtran, например, имеет вывод только в stdout, в Powershell перенаправление двоичного потока в файл тоже сломано в рамках этой багофичи.
Скажите, пожалуйста, в каком сценарии такое требуется?
Когда строка аргументов уже есть*, или когда её нужно сильно менять. В некоторых программах строка аргументов плавно перетекает в целый скриптовый язык, как в imagemagick, нужна гибкость хотя бы на уровне батников.
* Выше можно дописать @echo off & set "bat_args=%*" & pwsh... и получить доступ из Powershell-части так:$env:bat_args (это будет сырая строка, которую надо парсить).
Что-то сложное у вас написано. зачем тут вообще Invoke-Expression?
Проще не выйдет, потому что cmd.exe и Powershell щепетильно относятся к расширениям. Файл должен иметь расширение .bat или .cmd, чтобы его выполнял cmd.exe. Но чтобы сработал pwsh -File, нужно расширение .ps1. Не обойтись без временного файла с правильным расширением (.ps1) или "eval" файла как строки.
Есть такое, "контрится" через Array subexpression operator, который @()
В одних случаях через @() , в других через ,(). Если если вместо первого по ошибке использовать второе, то вместо пустого массива можно получить массив с одним $null. Если наоборот, то где-то вместо двухмерного массива может получиться одномерный. В третьих случаях через -NoEnumerate, в четвёртых лучше заранее смириться. Для отладки полезен вывод ConvertTo-Json $obj.
Не знаю, возврат массива из одного элемента мог бы оказаться меньшей проблемой - выручала бы фича member-access enumeration, когда обращение отсутствующему члену массива разворачивается в обращение к членам всех элементов: @('abc','def').ToUpper() (у массива нет методаToUpper() , поэтому метод вызовется у каждого элемента массива).
Есть же Invoke-Expression, вы его даже использовали ниже
У eval есть известные недостатки, иногда его стоит избегать... и нелепым образом как-нибудь добывать парсер аргументов (самописный / на регулярках / из cmd.exe / изConvertFrom-Csv / из WinAPI CommandLineToArgvW).
Там есть идея начинать команды с глагола из одобренного списка ради унификации, но обычно аз-за алиасов это проблем не вызывает ("Alias: ping" - откуда это? Ни в wiki, ни в 7.2 нет).
Гениев надо искать другим образом.
Powershell до последнего времени не умел передавать через пайпы двоичные данные. Объекты внутри Powershell - нормально, текст и нативные приложения - нормально, двоичные данные и нативные предложения - нельзя, они парсятся как текст, ломаются и это не отключалось первые 17-18 лет. Решение - вызывать cmd.exe /с и использовать пайпы в нём.
Powershell при вызове нативных приложений автоматически парсит аргументы, чтобы их можно было записывать как в обычном шелле (а не массивом строк), но отдельно доступа к парсеру не даёт. ./metaflac --show-bps --show-md5sum "some name.flac" - да, но если аргументы лежат в переменной-строке, то никак нет, распарсить в массив строк надо как-нибудь самостоятельно. С помощью вызова cmd.exe, например.
Команды по умолчанию принимают пути с wildcard'ами. * и ? в Windows и так нельзя использовать в именах файлов, так в чём же проблема? А к ним добавили [ и ]. Проблема решается специальным параметром -LiteralPath (-lit) вместо [-Path], но его повсюду добавлять утомительно, поэтому во все команды его решили и не добавлять...
И так далее. Powershell то гениален, то гениально туповат. Неизбежное "разворачивание" массива из 1 объекта в объект. Театр безопасности с запретом запуска двойным кликом или перетаскиванием, что решается опять не без помощи cmd.exe, подобными файлами-химерами:
<# : batch part begin
@echo off & pwsh -c "cat '%~f0' | Out-String | Invoke-Expression" & pause & exit /b
batch part end #>
# powershell code...
Сказал человек, не знающий разницы между оператором и инструкцией /s
Удивительно, но собеседуемый ради денег может даже согласиться по чётным дням statement'ы называть операторами, по нечётным - инструкциями, сохраняя вид лихой и придурковатый и извиняясь за то, что он вчера он выбирал "неправильный" перевод термина.
В комменте как будто путаются возможности и обременения. От наличия винды не должна просыпаться непреодолимая тяга спиратить фотошоп, можно пользоваться тем же свободным ПО, ставить только из пакетных менеджеров и так далее.
Начиная хотя бы от глубоко уродской (это моя субъективная оценка) структуры отображения веток комментариев.
Если речь о новом дизайне, то заядлые пользователи реддита с этим тоже согласны. Но там есть и старый (без входа в аккаунт: old.reddit.com, а в настройках аккаунта можно сделать так, чтобы reddit.com имел старый дизайн).
вот вопрос лентопротяжного механизма намного сложнее и адекватного считывателя
Можно оставить камеру и коды, но двигать ленту или камеру рывками, чтобы камера почти всё время была неподвижна относительно ленты (нет смаза => можно поднять скорость протяга или плотность записи).
Механизмы поискать в древней литературе. Киноплёнку протягивали мальтийским крестом, кривошипно-коромысловым механизмом... модельки даже готовые есть:
Или ещё проще - протягивать как раньше, но подсветку заменить на вспышку-стробоскоп. Подсветка работает только мгновение -> смаза нет (такую функцию давно запихивают в телевизоры и мониторы). Яркость, конечно, придётся увеличить. Но это не тру, с механизмами будет интереснее играться.
мелкомягкие до последнего тянули лямку FAT. Зачем ?
В смысле? Windows 9x тянет лямку до конца, но Windows NT изначально имеет NTFS и будущем заменит Windows 9x (то есть если правильно переформулировать вопрос, получится "почему не заменила раньше?").
Если смотреть на американские цены (потому что стабильность + для них есть агрегаторы: раз, два, три), то разрыв увеличился: HDD стоят в целом так же (20-терабайтники стали дешеветь), а SSD подорожали.
Нашёл источник разницы (по крайней мере, один): Note that libopus forces a wideband [8000 Hz] cutoff for bitrates < 15 kbps - ffmpeg docs
В opusenc (консольном приложении из набора Opus-tools) это ограничение почему-то не действует, спектр до 20 кГц.
Также:
- в opusenc нет ФНЧ как опции
- в ffmpeg при таком битрейте поведение меняют только -cutoff 4000 и -cutoff 6000, а -cutoff 12000, -cutoff 20000 и отсутствие опции работают как -cutoff 8000
- настраивать для улучшения качества почти нечего (дальше названия настроек из ffmpeg): можно поднять -frame_duration до максимума (60), вручную задать -application (audio), на очень низких битрейтах избавиться от высоких частот (-cutoff N) и стерео (-ac 1).
del
Он про другое, не связанное с trim.
Есть постоянно запитанный SSD, на нём лежат старые данные, заряд медленно-медленно, но утекает и контроллер при этом может:
(a) периодически перемещать данные (по результатам фоновой проверки или по таймеру)
(b) перемещать старые данные только при записи новых, для выравнивания износа (wear leveling)
(c) не трогать старые данные совсем
Наверное, обычно делают (b).
Про суровые условия - это уже в другую сторону перегиб. JESD218 говорит, что изношенные* SSD клиентского класса должны год хранить информацию без питания, корпоративного класса - 3 месяца. Для клиентского класса подразумевается, что SSD используется при 40 градусах и хранится при 30, для корпоративного температуры другие, но примерно эквивалентные, судя по табличке в приложении (retention in weeks как функция от температуры хранения и температуры работы).
Если SSD изношен не на 100%, а на 10%, это теоретически должно выливаться в 10x к сохранности (исходя из равномерного выравнивания износа + того, что пишет Infineon + написанного в JESD47).
10 лет назад была история с Samsung 840 и 840 EVO и медленным чтением старых данных. Память была 2D TLC - что-то вроде нынешней QLC. Тормоза людей беспокоили больше, чем шанс потери данных (до потери данных доходило редко?).
* то есть когда запись достигла заявленного производителем TBW. Тестовая нагрузка по соседнему стандарту - JESD219 (для корпоративных SSD - более тяжёлая).
Третья лишняя "S" в нике подразумевает автора поддельного репозитория, распространявшего малварь, если что.
Всё-таки он уже 8 лет кроссплатформенный и на роль всесторонней замены cmd.exe его метили изначально.
Mozjpeg'овский jpegtran, например, имеет вывод только в stdout, в Powershell перенаправление двоичного потока в файл тоже сломано в рамках этой багофичи.
Когда строка аргументов уже есть*, или когда её нужно сильно менять. В некоторых программах строка аргументов плавно перетекает в целый скриптовый язык, как в imagemagick, нужна гибкость хотя бы на уровне батников.
* Выше можно дописать
@echo off & set "bat_args=%*" & pwsh...
и получить доступ из Powershell-части так:$env:bat_args
(это будет сырая строка, которую надо парсить).Проще не выйдет, потому что cmd.exe и Powershell щепетильно относятся к расширениям. Файл должен иметь расширение .bat или .cmd, чтобы его выполнял cmd.exe. Но чтобы сработал pwsh -File, нужно расширение .ps1. Не обойтись без временного файла с правильным расширением (.ps1) или "eval" файла как строки.
В одних случаях через
@()
, в других через,()
. Если если вместо первого по ошибке использовать второе, то вместо пустого массива можно получить массив с одним$null
. Если наоборот, то где-то вместо двухмерного массива может получиться одномерный. В третьих случаях через-NoEnumerate
, в четвёртых лучше заранее смириться. Для отладки полезен выводConvertTo-Json $obj
.Не знаю, возврат массива из одного элемента мог бы оказаться меньшей проблемой - выручала бы фича member-access enumeration, когда обращение отсутствующему члену массива разворачивается в обращение к членам всех элементов:
@('abc','def').ToUpper()
(у массива нет методаToUpper()
, поэтому метод вызовется у каждого элемента массива).У eval есть известные недостатки, иногда его стоит избегать... и нелепым образом как-нибудь добывать парсер аргументов (самописный / на регулярках / из cmd.exe / из
ConvertFrom-Csv
/ из WinAPICommandLineToArgvW
).Там есть идея начинать команды с глагола из одобренного списка ради унификации, но обычно аз-за алиасов это проблем не вызывает ("Alias: ping" - откуда это? Ни в wiki, ни в 7.2 нет).
Гениев надо искать другим образом.
Powershell до последнего времени не умел передавать через пайпы двоичные данные. Объекты внутри Powershell - нормально, текст и нативные приложения - нормально, двоичные данные и нативные предложения - нельзя, они парсятся как текст, ломаются и это не отключалось первые 17-18 лет. Решение - вызывать cmd.exe /с и использовать пайпы в нём.
Powershell при вызове нативных приложений автоматически парсит аргументы, чтобы их можно было записывать как в обычном шелле (а не массивом строк), но отдельно доступа к парсеру не даёт.
./metaflac --show-bps --show-md5sum "some name.flac"
- да, но если аргументы лежат в переменной-строке, то никак нет, распарсить в массив строк надо как-нибудь самостоятельно. С помощью вызова cmd.exe, например.Команды по умолчанию принимают пути с wildcard'ами.
*
и?
в Windows и так нельзя использовать в именах файлов, так в чём же проблема? А к ним добавили[
и]
. Проблема решается специальным параметром -LiteralPath (-lit) вместо [-Path], но его повсюду добавлять утомительно, поэтому во все команды его решили и не добавлять...И так далее. Powershell то гениален, то гениально туповат. Неизбежное "разворачивание" массива из 1 объекта в объект. Театр безопасности с запретом запуска двойным кликом или перетаскиванием, что решается опять не без помощи cmd.exe, подобными файлами-химерами:
Сказал человек, не знающий разницы между оператором и инструкцией /s
Удивительно, но собеседуемый ради денег может даже согласиться по чётным дням statement'ы называть операторами, по нечётным - инструкциями, сохраняя вид лихой и придурковатый и извиняясь за то, что он вчера он выбирал "неправильный" перевод термина.
Тьфу, это же только в C++ так. "A condition can either be an expression or a simple declaration."
https://en.cppreference.com/w/cpp/language/if
https://en.cppreference.com/w/c/language/if
Так не делают со времён Алгола-68, наверное. Потому что
-:=
,+:=
,*:=
,/:=
,%:=
...Но была и другая возможность - переиспользовать
as
.Можно отметить две вещи в C: возможность "опасного" присваивания внутри if (плохо) и возможность объявления, в нём нет места для ошибки (хорошо):
Из этих двух вещей в одних языках унаследовали только хорошую (D), в других - только плохую (JS).
Я на этот поток сознания могу только сказать:
choco install krita
"блуждания по интернету в поисках инсталляторов" и переустановка раз в полгода - это именно про увлечение пиратскими фотошопами, а не про что-то ещё.
В комменте как будто путаются возможности и обременения. От наличия винды не должна просыпаться непреодолимая тяга спиратить фотошоп, можно пользоваться тем же свободным ПО, ставить только из пакетных менеджеров и так далее.
Если речь о новом дизайне, то заядлые пользователи реддита с этим тоже согласны. Но там есть и старый (без входа в аккаунт: old.reddit.com, а в настройках аккаунта можно сделать так, чтобы reddit.com имел старый дизайн).
Можно оставить камеру и коды, но двигать ленту или камеру рывками, чтобы камера почти всё время была неподвижна относительно ленты (нет смаза => можно поднять скорость протяга или плотность записи).
Механизмы поискать в древней литературе. Киноплёнку протягивали мальтийским крестом, кривошипно-коромысловым механизмом... модельки даже готовые есть:
https://www.thingiverse.com/thing:2944616
https://www.thingiverse.com/thing:5957938
https://ru.wikipedia.org/wiki/Скачковый_механизм
Или ещё проще - протягивать как раньше, но подсветку заменить на вспышку-стробоскоп. Подсветка работает только мгновение -> смаза нет (такую функцию давно запихивают в телевизоры и мониторы). Яркость, конечно, придётся увеличить. Но это не тру, с механизмами будет интереснее играться.
(по нашим ценам статистику просто не собрать: то выбросят в продажу диски, то нет, то ли новые они, то ли с затёртым SMART'ом)
В смысле? Windows 9x тянет лямку до конца, но Windows NT изначально имеет NTFS и будущем заменит Windows 9x (то есть если правильно переформулировать вопрос, получится "почему не заменила раньше?").
Если смотреть на американские цены (потому что стабильность + для них есть агрегаторы: раз, два, три), то разрыв увеличился: HDD стоят в целом так же (20-терабайтники стали дешеветь), а SSD подорожали.
Нашёл источник разницы (по крайней мере, один):
Note that libopus forces a wideband [8000 Hz] cutoff for bitrates < 15 kbps - ffmpeg docs
В opusenc (консольном приложении из набора Opus-tools) это ограничение почему-то не действует, спектр до 20 кГц.
Также:
- в opusenc нет ФНЧ как опции
- в ffmpeg при таком битрейте поведение меняют только
-cutoff 4000
и-cutoff 6000
, а-cutoff 12000
,-cutoff 20000
и отсутствие опции работают как-cutoff 8000
- настраивать для улучшения качества почти нечего (дальше названия настроек из ffmpeg): можно поднять
-frame_duration
до максимума (60
), вручную задать-application
(audio
), на очень низких битрейтах избавиться от высоких частот (-cutoff N
) и стерео (-ac 1
).Самосборный NAS - всё ещё NAS.