А при чем здесь GFS? Это не файловая система в прямом смысле. Это распределенная система по хранению файлов. На жестких дисках все равно ext2 или что-либо подобное.
Специально для тестирования чисел с плавающей запятой в unittest.TestCase есть методы assertAlmostEqual и assertNotAlmostEqual. Они вычисляют разницу между двумя числами, после округляют до указанного количества знаков после запятой и сравнивают результат с нулем. Конечно, списки с числами придется сравнивать вручную.
Я тоже сначала статью закончил словами, что в реальности это практически нигде не пригодится. Только как-то мрачно получалось, поэтому убрал. Думаю, что стоит расценивать только как демонстрацию гибкости Питона.
Это gEdit, стандартная тема Cobalt, стандартная подстветка для Питона + шрифт Consolas от Микрософта. Дальше просто вырезал нужный фрагмент да сделал тень.
Мне не совмем понятно, зачем вы сделали Cache синглтоном? Можно же было просто создавать его инстанс и передавать его MemcacheProtocol. В реальности это упрощает связи в программе. Да и потом, представьте, что вам потребуется заменить Cache на обычный dict. Сейчас это очень сложно, а с инстансом можно обойтись сабклассом: class DictCache(dict): ...
Очень режет глаз не указывание четких зависимостей в классах. Сейчас поясню. У вас Cache hard-coded в MemcacheProtocol. А хотелось бы видеть нечто подобное:
class MemcacheProtocol(LineOnlyReceiver):
cache = Cache
# либо
class MemcacheProtocol(LineOnlyReceiver):
def __init__(self, cache, ...):
pass
Преимущество на лицо — когда надо заменить только вид кэша, просто создаем новый сабкласс или передаем другой кэш. К сожалению, даже в стандартной библиотеке такой подход редко встречается.
Жизненный пример: в модуле weakref есть WeakKeyDictionary. Когда потребовалось использовать свой конструктор для создания слабых связей, пришлось переписать полностью весь класс. А хотелось бы так:
class MyWeakDict(WeakKeyDictionary):
weakref_factory = MyWeakref
Чем-то этот принцип напоминает inversion of control, только здесь я делаю упор просто на указание всех явных зависимостей класса, а не на их инициализацию.
Вот только не надо «купит большая корпорация». Citrix уже купила разрабатываемый всем миром Xen, и что в итоге? RedHat да и другие разработчики быстро переключилась на открытую KVM. Открытое, никому не принадлежащее программное обеспечение тем и хорошо, что его могут разрабатывать много различных коммерческих компаний на равных.
Джейм Эллрой, «Черная орхидея», «Секреты Лос-Анджелеса», «Американский таблоид». А вообще читать надо все книги, начиная с цикла «Лос-Анджелесский квартет».
Пишет умные, захватывающие, жестокие детективы. По моему мнению (да и не только по моему), это лучше детективы в мире. Сам называет себя Толстым в криминальном чтиве. По нескольким книгам сняты фильмы, лучшие: Черная орхидея и Секреты Лос-Анжелеса. Последний получил два оскара (просто остальные забрал Титаник ;-).
Единственное, о чем хотелось бы предупредить: у Эллроя очень сложный язык, поэтому его очень сложно переводить, а плохой перевод легко может убить книгу. Если знаете английский (даже в совершенстве), попробуйте открыть любую книгу в оригинале, и убедиться, что без словаря под рукой (а также мультитрана и urbandict) его читать вообще не возможно.
P.S. Говорят, в этом мире есть два типа людей: те, которые не читали Эллроя, и те, которые читали все его книги ;-)
Вы знаете, мне достаточно того, что компания существует, получает прибыль и платит зарплату своим сотрудникам. Я всегда считал, что этого достаточно — создавать хорошие рабочие места, это и есть социальная направленность бизнеса. А требовать от него вкладывать деньги в некоммерческие проекты, в благотворительность — это не правильно. Здесь каждый решает сам для себя.
И еще меня возмущает, когда люди пытаются переложить обязаности государства на бизнес. Это государство должно заботиться о бездомных детях, лечить тяжелобольных, помогать старикам, а не бизнес.
В общем, для меня Яндекс — это и есть социальный проект.
Еще для уменьшения количества используемой памяти (вдруг данные большие будут) можно заменить
zip
наitertools.izip
, который возвращает генератор.unittest.TestCase
есть методыassertAlmostEqual
иassertNotAlmostEqual
. Они вычисляют разницу между двумя числами, после округляют до указанного количества знаков после запятой и сравнивают результат с нулем. Конечно, списки с числами придется сравнивать вручную.Cache
синглтоном? Можно же было просто создавать его инстанс и передавать егоMemcacheProtocol
. В реальности это упрощает связи в программе. Да и потом, представьте, что вам потребуется заменитьCache
на обычныйdict
. Сейчас это очень сложно, а с инстансом можно обойтись сабклассом:class DictCache(dict): ...
Очень режет глаз не указывание четких зависимостей в классах. Сейчас поясню. У вас
Cache
hard-coded вMemcacheProtocol
. А хотелось бы видеть нечто подобное:Преимущество на лицо — когда надо заменить только вид кэша, просто создаем новый сабкласс или передаем другой кэш. К сожалению, даже в стандартной библиотеке такой подход редко встречается.
Жизненный пример: в модуле
weakref
естьWeakKeyDictionary
. Когда потребовалось использовать свой конструктор для создания слабых связей, пришлось переписать полностью весь класс. А хотелось бы так:Чем-то этот принцип напоминает inversion of control, только здесь я делаю упор просто на указание всех явных зависимостей класса, а не на их инициализацию.
Пишет умные, захватывающие, жестокие детективы. По моему мнению (да и не только по моему), это лучше детективы в мире. Сам называет себя Толстым в криминальном чтиве. По нескольким книгам сняты фильмы, лучшие: Черная орхидея и Секреты Лос-Анжелеса. Последний получил два оскара (просто остальные забрал Титаник ;-).
Единственное, о чем хотелось бы предупредить: у Эллроя очень сложный язык, поэтому его очень сложно переводить, а плохой перевод легко может убить книгу. Если знаете английский (даже в совершенстве), попробуйте открыть любую книгу в оригинале, и убедиться, что без словаря под рукой (а также мультитрана и urbandict) его читать вообще не возможно.
P.S. Говорят, в этом мире есть два типа людей: те, которые не читали Эллроя, и те, которые читали все его книги ;-)
И еще меня возмущает, когда люди пытаются переложить обязаности государства на бизнес. Это государство должно заботиться о бездомных детях, лечить тяжелобольных, помогать старикам, а не бизнес.
В общем, для меня Яндекс — это и есть социальный проект.