В Python 3 больше нет метода __cmp__() и функции cmp(), и рекомендуется использовать __lt__/__gt__/__le__/__ge__/__eq__/__ne__ исключительно. Если нет необходимости определять все операторы сравнения, можно определить один оператор сравнения (например, __eq__) и один оператор упорядочения (например, __lt__), и применить к объявлению класса декоратор @functools.total_ordering — он достроит остальные функции на основании имеющихся.
Если в первом примере под тильдой в filepath='~' понимается домашняя директория текущего пользователя, то это так не работает — будет попытка открыть файл в директории ./~/, т.к. Python не разворачивает шелл-подстановки (и спасибо ему). Чтобы работало, код нужно написать следующим образом:
def __init__(self, filepath = '~', filename = 'sample.txt'):
# открыть файл filename в filepath в режиме чтения и записи
self.file = open(os.path.expanduser(os.path.join(filepath, filename)), 'r+')
Более того, опасно использовать __del__ так, как это было продемонстрировано, так как __del__ вызывается даже для тех экземпляров класса, для которых не было завершено конструирование. Таким образом, если создать FileObject с неправильным именем файла, open() выбросит IOError, и self.file не будет присвоен — но к нему обратится __del__ и получит вдобавок еще и AttributeError, и последующая деинициализация выполнена не будет, лишая __del__ того смысла, который в него вкладывал автор. Будьте осторожнее.
Между точками — 5 мкм. Квадрат в 241 точек имеет сторону в приблизительно 1482911 точку, что дает сторону квадрата 7414550 мкм = 7.414550 м, и площадь порядка 55 м2/ТиБ.
Энергия на запись одной точки — 8 мкДж, на запись 1 ТиБ (241 точек) — 244 мкДж ≈ 17592186 Дж ≈ 4.887 кВт⋅ч, что при цене 0.14$/(кВт⋅ч) дает 0.68$/ТиБ.
Время на запись одной точки — 1/200 с, скорость записи 100 байт/с. Если писать в одно «сопло», запись 1 ТиБ займет 10995116278 секунд ≈ 348.65 лет.
Соответственно, диск в 360 ТиБ будет иметь площадь в 19800 м2 (1.98 гектар), по затратам энергии обойдется в 244.8$, и записываться будет 125'513 лет.
«Все ОС не защищены от гипервизора» — к этому и сводилась суть моего комментария. По реплике же sirinbird складывается ощущение, что он уверен в защищенности *nix-ов от злонамеренных гипервизоров, злонамеренных thunderbolt/pcie-устройств и злонамеренных плат расширения.
По поводу «до лампочки, какая ОС стоит» — да, до тех пор, пока он не собирается вмешиваться в ее работу на более тонких уровнях.
Скорее всего, этот записанный файл в 300 КБ — просто Proof of Concept, а все накинулись на него так, как будто это уже финальный образец технологии. Наверняка оптимизацией плотности, затрат энергии и скорости записи просто еще не занимались.
Открытый PIN никуда не передается и на карте не хранится — PIN вообще не хранится на карте с магнитной лентой ни в какой форме. Правильность PIN сверяется по контрольной сумме или шифроблоку, которую вычисляет сам пин-пад инкрементально во время ввода пользователем — софт банкомата PIN-кода не знает.
На одну точку приходится 4 бита информации — 1 ТиБ записывается 241 точками. 1 точка — 8 мкДж, 241 точек — 244 Дж, что соответствует 1.5 тонны (1'513'668 г) условного топлива (4148 Дж/г), или же 1'760 кВт⋅ч, что по московским тарифам на электроэнергию, обойдется в почти 8 миллионов рублей, или же 243 тысячи долларов США на 1 ТиБ.
Еще нужны поддельные терминалы пополнения счетов мобильных операторов, онлайн-игр, погашения кредитов, оплаты услуг ЖЭКа и прочего, где осознание того, что что-то пошло не так, придет максимум через пару часов.
__cmp__()и функцииcmp(), и рекомендуется использовать__lt__/__gt__/__le__/__ge__/__eq__/__ne__исключительно. Если нет необходимости определять все операторы сравнения, можно определить один оператор сравнения (например,__eq__) и один оператор упорядочения (например,__lt__), и применить к объявлению класса декоратор@functools.total_ordering— он достроит остальные функции на основании имеющихся.filepath='~'понимается домашняя директория текущего пользователя, то это так не работает — будет попытка открыть файл в директории./~/, т.к. Python не разворачивает шелл-подстановки (и спасибо ему). Чтобы работало, код нужно написать следующим образом:Более того, опасно использовать __del__ так, как это было продемонстрировано, так как __del__ вызывается даже для тех экземпляров класса, для которых не было завершено конструирование. Таким образом, если создать FileObject с неправильным именем файла, open() выбросит IOError, и self.file не будет присвоен — но к нему обратится __del__ и получит вдобавок еще и AttributeError, и последующая деинициализация выполнена не будет, лишая __del__ того смысла, который в него вкладывал автор. Будьте осторожнее.
1 точка — 4 бита. 1 байт — 8 бит — 2 точки. 1 ТиБ — 241 точек.
Между точками — 5 мкм. Квадрат в 241 точек имеет сторону в приблизительно 1482911 точку, что дает сторону квадрата 7414550 мкм = 7.414550 м, и площадь порядка 55 м2/ТиБ.
Энергия на запись одной точки — 8 мкДж, на запись 1 ТиБ (241 точек) — 244 мкДж ≈ 17592186 Дж ≈ 4.887 кВт⋅ч, что при цене 0.14$/(кВт⋅ч) дает 0.68$/ТиБ.
Время на запись одной точки — 1/200 с, скорость записи 100 байт/с. Если писать в одно «сопло», запись 1 ТиБ займет 10995116278 секунд ≈ 348.65 лет.
Соответственно, диск в 360 ТиБ будет иметь площадь в 19800 м2 (1.98 гектар), по затратам энергии обойдется в 244.8$, и записываться будет 125'513 лет.
Вроде бы все правильно на этот раз?
По поводу «до лампочки, какая ОС стоит» — да, до тех пор, пока он не собирается вмешиваться в ее работу на более тонких уровнях.
Диск в 360 ТиБ — 87.5 миллионов долларов.
x[i]>K>x[j]->Kдолжно бытьx[i]->K>x[j]->K, иначе код эквивалентен(x[i] > K) && (!x[j]->K).