Pull to refresh
4
0.5
Send message

*Занудно* умничанье - это не демагогия. Назвать одноплатником - ошибка, она раз 10 в статье встречается. Назвать компьютером - допустимо, но зачем, если "плата с микроконтроллером" - привычнее и точнее.

Процессор общего назначения - внутри микроконтроллера. На мнение отдельной Foundation плевать, но если не плевать - она эти же основы в своей книжке повторяет. "Microcontrollers ... are computers stripped back to their bare essentials", "type of computer, but it’s not the only type", "CPU: 32-bit dual-core ARM...".

Память, CPU, ввод-вывод есть. В традиционном широком смысле микроконтроллеры - это компьютеры. А сужать смысл можно сколько угодно (What's a Computer?). Но за одноплатным компьютером закрепился другой смысл, да.

"Протереть" SSD получится ещё как, спросите у владельцев видеорегистраторов 4К.

Это должна быть история из серии "Logitech бесплатно меняет мышку в n-ый раз", потому что добраться до гарантийного ресурса, храня видео неделю или дольше (речь ведь не об автомобильных регистраторах? в них SSD не поставить), тяжело - придётся найти SSD с особо низким гарантийным ресурсом. Например, у BX500 4TB на QLC-памяти он 1000 TBW. Это 250 перезаписей всего или 0.23 перезаписей в день (DWPD) в течение 3 гарантийных лет. 1 перезапись в 4 дня. Но можно найти хуже - WD Green SN350 2TB, 1 перезапись в 22 дня.

Но будет из серии "я меняю термопасту 4 раза в год" или "торренты убивают жёсткие диски" - "SSD 100% протёрся, с чего ему ещё умирать?".

Переделать(перепрошить) самому не проблема

Об этом не хотелось говорить, чтобы остаться в контексте первого коммента о производителях, так-то ещё у eMMC есть какой-то более официальный путь перевода в pSLC.

Вообще, у "непонятного" по ссылке цена соответствует теоретическому трёхкратному удорожанию. И у него был китайский аналог (Phison E18, низкая цена, [1][2][3][4]). Правда, он не покидал пределы Китая и "китайнет" слишком огорожен, чтобы разбираться дальше.

P3006R1 говорит, что UB в такой конструкции сейчас есть:

alignas(T) std::byte storage[sizeof(T)];
::new (&storage) T();
// ...
T *ptr_ = reinterpret_cast<T*>(&storage);  // UB

Он ссылается на понятие pointer-interconvertible (появилось в P0137R1). На всё это ведут комменты на stackoverflow.

Если шутят, что программирование на Rust - это борьба с компилятором, то надо шутить, что программирование на C++ - это борьба с оптимизатором (который в рамках стандарта может действовать по принципу "вижу UB - не вижу препятствий").

Оптаны, да, хорошая вещь, только доставка обойдётся в треть цены минимум.

Так у pSLC была/будет та же проблема - несколько моделей под Chia существует, но до нас не доезжали (что-то непонятное до сих пор продаётся).

Для майнинга не нужна надёжность, только ресурс (можно считать одним из аспектов надёжности или совсем другим свойством). А если смотреть ещё глубже, ресурс - для окупаемости, которая достигнется скорее с чем-то незамысловатым (списанные Micron MAX?), чем с новыми pSLC SSD.

Видеонаблюдением сильно "протереть" SSD вроде же никак не получится. SLC обретает смысл при >3 перезаписях в день, то есть видео придётся хранить меньше 8 часов. Если хранить хотя бы неделю, то уже будет QLC подходить.

Да и наверное можно в холодильник положить

Известная мысль, но вроде никто на практике не доходил до этого. Логично засунуть в герметичный пакет с силикагелем и не вытаскивать, пока не отогреется.

Та же табличка из JESD218 (Table D.1 — Expected retention (weeks)) примерно удваивает retention при уменьшении температуры хранения на каждые 5 градусов.

upd: то есть +20°C -> -20°C даёт улучшение примерно в 2^8 раз. Всё ниже +25°C - это экстраполяция за пределы таблицы, но с сухим выключенным SSD ничего странного не должно случиться.

Поправлю себя: "(b) ... для лучшего выравнивания износа" и можно добавить (a.2) перемещать данные только по результатам ручного чтения, без автоматических фоновых проверок (пользователь запускает чтение всего диска, контроллер замечает проблемы).

Было бы интересно если бы кто-нибудь разбирающийся рассказал.

На реддите упоминают Phison SmartRefresh, в котором есть "RTMS guarantees that the entire drive is scanned entirely in a specific period (e.g., once every week)".

И упоминают похожий StaticDataRefresh у Silicon Motion. В одном месте написано, что он работает как (а.2) ("monitor the error bit levels at each read operation"), в другом - как (a) ("automatically scans cells at a temperature-dependent rate").

NewMaxx, который там известен постами про SSD, пишет, что есть "разумные основания ожидать" автоматического перемещения от современных SSD и что он в каких-то прошлых постах разбирал StaticDataRefresh.

По таймеру (ну, "periodic refresh feature") - это то, как Samsung со второго раза исправил проблему в 840 EVO / 840.

Но на самом деле нет, в "опциях для продвинутых пользователей" спрятан имеется -outfile. Ну, в работе с видео незаменимые двоичные конвейеры бывают.

Это ещё и покупателю невыгодно. Три TLC SSD стоят как один pSLC. Отказаться от диска с бэкапом, от диска с зеркалом и в итоге потерять всё, скажем, из-за бага в прошивке? Так что ли его надо использовать? А если с бэкапами порядок, отказоустойчивость нужная есть, но душа просит чего-то ещё, то куда тут дешевизну приткнуть?

Да и на самом деле душа просит только поворчать. Вот за океаном в рамках бесконечной распродажи оптейна есть предложение даже покруче, чем pSLC SSD.

Он про другое, не связанное с 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 (это будет сырая строка, которую надо парсить).

Что-то сложное у вас написано. зачем тут вообще 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'ы называть операторами, по нечётным - инструкциями, сохраняя вид лихой и придурковатый и извиняясь за то, что он вчера он выбирал "неправильный" перевод термина.

и возможность объявления

Тьфу, это же только в 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.

Information

Rating
1,900-th
Registered
Activity