• Основные отличия Java IO и Java NIO
    +16
    Нет, в джаве это именно расшифровыется как new io. Вот полное название JSR 51: New I/O APIs for the JavaTM Platform. В седьмой добавили NIO.2 JSR 203: More New I/O APIs for the JavaTM Platform («NIO.2»)
  • Как мы строили офис мечты с блэкджеком и пуфиками (почти за копейки)
    –7
    Подскажите, пожалуйста, будет ли приложение для айфона с плоским дизайном айос 7? Скоро айос 8 выйдет, Альфа-Лаборатория есть, офис веселый есть, а дизайн приложения все еще старый.
  • Как мы строили офис мечты с блэкджеком и пуфиками (почти за копейки)
    +51
    OMG, опять опен-спейс. Да как в нем вообще можно нормально работать?
  • ZooKeeper в качестве системы гарантированной доставки для Яндекс.Почты
    0
    Понятно, спасибо.
  • ZooKeeper в качестве системы гарантированной доставки для Яндекс.Почты
    0
    Ага, как раз хотел вам об этом написать. Но в текущей версии не возможно реализовать идемпотентное добавление сообщений в очередь, возможно дублирование. Кажется, они хотят реализовать схему, подобную вашей, в будущих версиях.
  • ZooKeeper в качестве системы гарантированной доставки для Яндекс.Почты
    0
    Ок, спасибо. Еще один вопрос. Со стороны консьюмеров гарантировать exactly-once обработку сообщений можно, например, хранением текущей позиции в кольцевом буфере вместе с обработанными сообщениями. А как вы гарантируете exactly-once запись сообщений в zookeeper? Гарантируете ли вообще?
  • ZooKeeper в качестве системы гарантированной доставки для Яндекс.Почты
    +1
    Не пытались использовать Kafka от Linkedin, учитывая, что вы уже используете zookeeper как кольцевой буфер, из которого разные бэкэнды читают одни и те же данные?
  • Внедрение зависимостей the Python way
    0
    Ага, не удалась моя попытка для людей что-то новое и хорошее сделать. Мне уже в комментах предлагают даже модули патчить в рантайме и методы классов подменять для тестов. Брр.
  • Внедрение зависимостей the Python way
    –3
    А как объекты узнают про ваш мок? Напишите, пожалуйста, как бы вы переписали код с тестом из самого первого примера с User + Mailer.
  • Внедрение зависимостей the Python way
    0
    Это скорее про моделирование интерфейсов. А вообще zope — это попытка сделать энтерпрайз в питоне. Во всяком случае так было раньше.
  • Внедрение зависимостей the Python way
    0
    Скорее, зачем вообще нужно внедрение зависимостей, потому что сама концепция вне языка.

    Смотрите, у вас в приложении много взаимодействующих компонентов. Например, как в статье, у вас есть Mailer, который отвечает за отправку электронной почты. Это может быть какая-то очередь, а может SMTP-клиент. Этот Mailer используется во многих местах: при регистрации пользователя, подтверждении почты, восстановлении пароля, в рекламных рассылках. Т.е. этот компонент используют различные классы.

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

    Самой концепции много лет. Подробнее можно почитать на википедии, хотя информация там довольно запутанная. Нужно ли вообще внедрение зависимостей? Да, это не только мое мнение. Посмотрите на количество фреймворков, в т.ч. и от Гугла: Google Guice, Spring, Google Pinject, Objective-C Typhoon и многие другие.
  • Pdef — компилятор и язык описания интерфейсов для веба
    0
    Думал, я много вариантов рассматривал, но не получится. Пидеф функционально намного мощнее. Он поддерживает нормальные цепочки вызовов, а JSON-RPC только название метода и его аргументы. Например, в пидефе возможен такой вызов:
    github().user("ivan-korobkov").repo("pdef").like();
    

    Он уйдет вот таким запросом на сервер:
    POST /user/ivan.korobkov/repo/pdef/like HTTP/1.1
    

    Т.е. изначально пидеф намного ближе к обычному REST'у, только пока ограничений больше.
  • Pdef — компилятор и язык описания интерфейсов для веба
    +1
    Хотелось бы чтобы сообщество разработчиков помогло с кодогенераторами для других языков. Точно не хватает PHP, JavaScript, Ruby, C++, C# и многих других языков. Если говорить про развитие самого языка, то на несколько месяцев думаю заморозить функциональность. Это поможет стабилизировать проект. В дальнейшем хотелось бы добавить аннотации и полноценную поддержку REST. Это два приоритетных направления. Плюс, возможно, появится официальный бинарный формат для серверного взаимодействия (скорее всего MessagePack).
  • Pdef — компилятор и язык описания интерфейсов для веба
    +1
    Пидеф — это не протокол сериализации, в отличие от Protobuf, Avro, Thrift, MessagePack и Cap'n Proto. Формат данных может быть любым. По-умолчанию, это JSON. Если говорить о функциональных отличиях, то он поддерживает циклические зависимости, наследование и интерфейсы (как и Cap'n Proto). Плюс, пидеф использует HTTP, тогда как все остальные — собственные бинарные форматы передачи данных.
  • Базы данных в онлайн-играх. От Аллодов Онлайн до Skyforge
    +2
    BTM — это и есть XA менеджер, он и выполняет. Ссылка есть в ответе на мой первый вопрос.
  • Базы данных в онлайн-играх. От Аллодов Онлайн до Skyforge
    +1
    А что будет если менеджер two-phase коммита умрет в момент совершения транзакции, которая prepared на обоих базах данных, но закоммичена только на одном из них?
  • Базы данных в онлайн-играх. От Аллодов Онлайн до Skyforge
    +1
    Каким образом обеспечиваете консистентное состояние при взаимодействии с двумя и более базами данных одновременно? Например, при продаже предмета нужно зачислить деньги одному игроку на шарде А и списать деньги с другого игрока на шарде Б. В целом, как обеспечиваете и обеспечиваете ли вообще атомарность распределенных изменений, затрагивающих несколько шардов? Спасибо.
  • Система офлайн-уведомлений Badoo
    +2
    Можете рассказать поподробнее:
    1. Для агрегации событий нами была разработана специальная СУБД
      Если я правильно понимаю, то для пользовательских данных вы используете реляционную базу данных, а для событий собственную. В этом случае, каким образом вы гарантируете консистентность данных между ними? Two-phase commit, idempotence или какой-нибудь другой механизм?
    2. Данные пользователей хранятся не только в памяти, но и сохраняются на диск, поэтому уведомления не теряются [при перезапуске демона]. Каким образом вы обеспечиваете durability и высокую производительность [25kreq/s]? append-only + fsync на несколько событий или иным способом? Возможна ли все-таки потеря данных при падении демона?
    3. Каким образом вы отмечаете отправленные события? Что будет, если электронное письмо или push-уведомление уже отправлено, событие еще не помечено, как отправленное, а демон упал? Будет ли одно и то же событие продублировано при перезапуске демона (т.е. получит ли пользователь два одинаковых сообщения)?

    Спасибо.
  • Итоги конкурса. часть 2: Бэкендеры
    +1
    Но круче:
    def uniq(iterable):
      result = list(set(iterable))


    Это не круче. Из названия функции не понятно, что она должен обязательно возвращать список. Лучше просто использовать set там, где нужны только уникальные значения, и не придумывать бессмысленных функций.
  • Еще немного о производительности Java
    +2
    Большое количество реальных сравнений производительности Java написано людьми, у которых есть только начальные представления о ней. К сожалению, в этом случае легко получаются результаты, которые свидетельсвуют о ее низкой производительности. Чаще всего это происходит из-за отсутствия «прогрева» приложения перед тестированием (чтобы JIT заработал), плюс, незнание об автобоксинге примитивов в коллекциях (в джаве все примитивы преобразуются в объекты перед помещением в коллекции).

    Однако во многих случаях производительность джавы может держаться на уровне C++. Лучшей статьей на эту тему, наверное, является Java vs. C Performance… Again от одного из прошлых сотрудников Sun и разработчика серверной версии JIT-компилятора, Cliff Click.
  • Пора завязывать использовать символы табуляции в коде
    +18
    Важно не использование табуляции или пробелов, а постоянство. В своих новых проектах используйте то, что вам больше нравится. Во всех остальных придерживайтесь уже сложившегося стиля написания кода. А утверждение, что табуляция лучше пробелов — обычный холивор.
  • Android стал самой продаваемой смартфонной ОС
    –3
    А кто-нибудь знает текущию доли операционных систем, учитывая что Android — это линукс? Чует мое сердце, что такими темпами он станет самой популярной операционной системой в будущем :-)
  • Текущее состояние инструментов. Взгляд пользователя
    0
    Вы еще спросите, почему все IDE, а также emacs и vim сделаны так, что ими могут пользоваться только программисты.
  • Текущее состояние инструментов. Взгляд пользователя
    +2
    Порог вхождения в РСУВ (DVCS) высок. Многие не пользуются ими не потому что думают, что это им не нужно, а потому что это на самом деле сложно. В том числе программисты, которые в большинстве своем тоже люди.

    Пару консольных команд программистам выучить сложно да понять структуру репозитория, основанную на обычных деревьях? Я считаю, что таких людей вообще можно не относить к программистам.
  • Python-way. Работа над ошибками
    +7
    У вас ошибки в статье. Во-первых, данный код будет прекрасно работать и будет позволять обращаться ко всем атрибутам словаря.
    class mydict(dict):
        def __getattr__(self, key):
            return self[key]
        def __setattr__(self, key, value)
            self[key] = value
    

    Потому что метод __getattr__ вызывается только тогда, когда атрибут не найден. Для перехвата всех обращений к атрибутам существует метод __getattribute__.

    Во-вторых, неверно, что
    self.key является синтаксическим сахаром для self.__getattr__(key).

    Правильно: getattr(self, key) вызовет self.__getattribute__(key).
  • Сравнение скорости процессоров dedicated-серверов
    +5
    На графике этого нет. На нем есть шкала, к которой если присмотреться, тогда можно понять.
  • Сравнение скорости процессоров dedicated-серверов
    +8
    >>> Обратите внимание, полулогарифмическая шкала.
    Это надо сразу в графике писать, а не в середине статьи закапывать.
  • Бэкенд Twitter перешёл на Protocol Buffers
    0
    Самых распространенных две: google protobuf и apache thrift (по сути, разработка Фейсбука). Сравнение производительности и функциональности можно посмотреть на thrift-protobuf-compare/.
  • Делитесь знаниями
    +2
    Согласен, просто ужасно, что автофокус на поле ввода поломали.
  • Как правильно давить конкурентов (мастер класс от Lenovo)
    +4
    А с чего все взяли, что там давление одинаковое?
  • Сколько стоит ваш именной домен
    +1
    > мне все больше кажется, что все крупные киберсквотеры негласно сотрудничают или являются частью крупных контор по регистрации доменов.

    Информация о дате, до которой оплачен домен, является открытой.
  • Python 2.7 beta 1
    0
  • AMD Opteron 6000: 12 серверных ядер
    +1
    В Core Quad, и правда, использовалась одна шина памяти для всех четырех ядер. Opteron'ы и Xeon'ы (начиная с 7300 серии) используют несколько. Например, у четырехядерного Xeon'а 7300 по одной на каждое ядро.
  • Материалы продвинутого уровня по Питону
    +3
    Не знаю. Я бы не рекомендовал вообще видео. Читать быстрее, и информации так больше. Третий Питон… А он вам зачем нужен? На нем еще практически никто не разрабатывает, библиотеки не портированы. Молод он еще.
  • Ричард Фейнман о резиновых лентах
    +1
    Извиняюсь, вот ссылка: Fun to Imagine on Youtube.
  • Ричард Фейнман о резиновых лентах
    +5
    Да выложите же вы все монологи Ричарда Фейнмана "Fun to Imagine" (youtube). Они же очень короткие. Толку, что на хабре каждый день появляется по одному. PS их всего 12.
  • США: криптография — охота на ведьм началась?
    +3
    требуется ещё и приложить все исходные коды… хотя для особых фриков предлагается ещё и альтернативный способ: распечатать и прислать исходные коды почтой или по факсу.

    Я бы точно им по факсу отправил. Можно даже что-то вроде кампании организовать: «Следуй законам — шли код по факсу».
  • Креативное разрушение Microsoft
    +1
    Думаю, вы неточно воспринимаете Яву. Ява, в первую очередь, — это язык бизнес приложений: Google Adwords, Oracle, SAP и т.д. И Майкрософт, разрабатывая C#, старалась создать язык, который бы конкурировал именно в этой сфере. У них получилось. Кстати, до того, как создать C#, они разработали собственную реализацию Явы, J++. Однако, они внесли в нее много нововведений (допустим, делегаты) и сообщество Явы не признала ее. Ну, а Майкрософт продолжила развивать свое детище, и сейчас мы имеем C#. Молодой, красивый статически типизируемый язык, который основан на Яве, но привнес очень много из таких языков, как Питон и Руби.
  • Креативное разрушение Microsoft
    +19
    Мне нравится Майкрософт. На сегодняшний день она сделала прекрасную среду для разработки, создала реального конкурента Яве — C#, который функциональнее нее и очень быстро развивается. Сделала мощную базу данных MSSQL. Пришла в веб-приложения со своим Silverlight. Выпустила нормальный веб-фреймворк ASP.NET MVC, уже вторая версия на подходе. Показала головосрывательный проект Natal, который, возможно, станет новой Xbox. Перечислять можно еще очень долго.

    А вот к производителям железа (не считая мышек/клавиатур) Майкрософт никогда не относилась, поэтому ждвать от нее классных гаджетов — глупо. Еще, Майкрософт — это большая компания, в которой ведется много разработок, и которая способна в сжатые сроки (по рыночным мерка) добавить инновационную функциональность в свои продукты.
  • Асинхронный http-клиент, или почему многопоточность — лишнее
    +2
    Черно-белая подсветка кода выглядит классно. Еще бы оттенков серого добавить и был бы шедевр.