Halt
0
Maidsafe? Да нет, буквально на той неделе с разработчиками общался.
Halt
0
Просто из описания у меня сложилось впечатление, чтобы начать работу нужно сначала закинуть средства, потом еще шуровать кошельками и т.д.
Halt
+1
Скажите, а в чем принципиальное отличие от других аналогов, например maidsafe? Ну кроме того, что Sia гораздо менее удобна и понятна конечному пользователю.

Особенно в плане «запустил — работает».
Halt
0
А еще мы нарисуем картинку с шестеренкой, которая не сможет крутиться, но этого тоже никто не заметит :)
Halt
+2
Так там наоборот из 30 получится 3. Реализация трейтов преобразования поможет автоматически захватывать ошибки разных типов вообще без map_err(). Просто пишете ?, а оно само разберется.
Halt
+4
Добавлю еще немного про обработку ошибок. В книге хорошо описано, как правильно работать с ошибками. Там разобраны все типичные ситуации: как создавать собственный тип ошибок, как пробрасывать ошибки наверх и т.д.

При чтении можно мысленно заменять try!() на ?, смысл будет тот же.
Halt
+1
О господи, ну давайте напишу 192КГц. Неужели вы не видите, что суть того комментария не в цифрах?
Halt
+6
Видимо товарищ имеет в виду кастаньеты.
Halt
+2
Спасибо за ГОСТ, теперь понятно. А на товарища выше не обращайте внимания, у него все комментарии как на подбор, один лучше другого. Потрясающе осмысленная деятельность, в общем.
Halt
0
Вы что-то все в кучу смешали.

Любой аудиокодек оптимизирован в соответствии с, как вы это называете, особенностями звуковых волн, на то он и аудио. Переменный битрейт не имеет никакого отношения к lossless, это всего лишь способ оптимизации потока.

FLAC в отличие от MP3, Vorbis, Speex и прочих кодеков с потерями, параллельно с коэффициентами модели записывает и текущую ошибку декодирования по сравнению с оригиналом. При декодировании эта дельта используется для восстановления исходной формы сигнала.

Разумеется, для сохранения дельты нужно место, поэтому FLAC будет весить больше. Но это плата за lossless.
Halt
0
Кстати, раз тут заговорили о ванили. Всегда хотел узнать, что по факту означает эта «идентичность натуральному»?

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

Я правильно понимаю, что «идентичный натуральному» подразумевает именно полную химическую идентичность или все совсем не так?
Halt
0
Я не говорю что он должен быть лучше или хуже. Вопрос был в том, теряется что-то или не теряется. Я и написал, что да, в случае MP3 потеря информации есть, даже при большом битрейте.
Halt
+1
Потери бывают разные. Можно потерять на дискретизации/квантовании, можно в процессе компрессии. Частота дискретизации в 48К намного превышает физические возможности уха примерно так же, как 200Гц для изображения.

Так вот, FLAC производит компрессию обратимым образом. То есть, при декомпрессии вы получите ровно те же отсчеты, что были изначало сняты с АЦП.

Напротив, MP3 «теряет» информацию на основе психоакустической модели, поэтому после декомпрессии мы будем слышать резольтат «со вкусом» оригинала.
Halt
+2
А как же Serde?
Halt
+1
Посмотрите на фрагмент, приведенный ниже или на полный вариант в окрестности строки 152.

impl ServerState {
    pub fn parse(&mut self, message: &str) -> Result<(), &'static str> {
        for (k, v) in parse_table(&message) {
            match k {
                "frame" => self.frame = Rc::new(Frame::parse_from(v)?),

                "deaths" => self.deaths = v[1 .. v.len()-1] // strip quotes
                    .split(',')
                    .filter(|e| e.len() > 0) // a,,b
                    .map(|x| x.parse().map_err(|_| "parse error"))
                    .collect::<Result<_,_>>()?,

                // TODO
                _ => unimplemented!()
            }

        }

        Ok(())
    }

    // ...
}


Из функции я выбрасываю колхозную ошибку &'static str, ибо лень и прототип. Фукнции парсинга возвращают нормальные ошибки, которые надо привести к строке.

Самое интересное происходит в обработке «deaths»: с помощью функциональной магии и трансформации монад мы преобразуем Collection<Result<T, E>> в Result<Collection, E>>, который потом разворачиваем с помощью ?.
Halt
+3
Если опустить детали реализации, то `?` просто выбрасывает ошибку из функции. Нормальное же значение «проглатывается» на текущем лексическом уровне. Подробнее можно посмотреть в документации.

Если у вас есть операция, которая возвращает к примеру io::Result, а ваша функция определяет свой тип ошибки, то к вашим услугам метод map_err().
Halt
+4
Могу посоветовать поглядывать в регулярно обновляющийся milestone predictions, дабы быть в курсе относительно планируемого времени интеграции фич.

Очень жаль, что impl Trait находится в неопределенном состоянии (на то имеются веские причины). А остальное вполне движется. Я уже несколько месяцев пользуюсь VSCode + RLS и оно «просто работает».

Не уверен что я прав, но похоже RLS используюет инкрементальную компиляцию, что в последнее время здорово ускорило анализ изменений. Это помимо того, что они запилили специальный режим работы компилятора, который выполняет только проходы, необходимые для сбора информации о коде (без лишней кодогенерации).

А с учетом того что все это теперь распространяется через rustup, то начать пользоваться можно в пару команд.
Halt
+3
И еще 15 на специализированном сайте вакансий.
Halt
0
Не путайте подтверждения и блоки. Насколько я понимаю, повесить свое подтверждение (подпись) можно на уже существующий блок. Для этого не требуется считать PoW. Количество таких подтверждений определяет ценность именно этой версии блока для сети.

Если ничего не путаю, потребуется 10 минут на то, чтобы кто-то нашел очередной блок и внес в него вашу транзакцию (если его устроит комиссия) и еще сколько-то от узлов аудиторов на его подтверждение.
Halt
+1
Выше уже написали, что расчет сложности опирается не на время, а на сами блоки и их количество. Каждый следующий блок должен содержать хеш предыдущего (блокчейн же).

Сложность определяется не для каждого блока, а для серии из 2016 блоков, то есть имеется некий гистерезис, который позволяет прогнозировать условия, выставляемые сетью для новых блоков.

Любые конфликты в блокчейне регулируются по извечному принципу «у кого длиннее, тот и круче». Ну да, некоторые блоки могли быть одновременно найдены несколькими участниками (или блоки с недостаточной сложностью были ошибочно пущены в оборот), но рано или поздно консенсус сойдется на одном из вариантов.

Именно поэтому, прежде чем считать транзакцию валидной и принять оплату, надо дождаться нескольких независимых подтверждений, но это уже вопрос гарантий.
Halt
0
Спасибо за статью! Довольно интересно описано.

Консенсус Накамото решает главный бич анонимных сетей — атаки Сибиллы, в которых злоумышленник создает кучу фейковых узлов, чтобы «задавить» получившимся большинством мнение честных пользователей.

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

Дело в том, что сетевые адреса в Netsukuku назначаются произвольным образом. Поскольку в распределенной сети по определению нет единого центра, который раздавал бы адреса и следил за отсутствием коллизий, нужно было механизм разрешения коллизий, когда они все-таки возникают.

Одна из ситуаций массовой коллизии адресов может возникнуть, когда между двумя анклавами сети появляется новый узел, связанный с обоими. Теретически может возникнуть ситуация, когда большое количество машин по обе стороны имеют одинаковые адреса.

Чтобы разрешить подобную коллизию, был разработан механизм, который позволил решить, какая из подсетей должна поменять свои адреса.

В основе алгоритма лежала идея, очень похожая на PoW. Каждый узел сети генерировал PoW который использовался как голос в поддержку своей подсети. По результатам голосования, проигравшая подсеть перестраивала свои адреса.

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

Не будь этого механизма, всю сеть можно было бы положить одним узлом, постоянно меняющим свои адреса.
Halt
+1
Насколько я понимаю, вопрос тут не в часах, а в самом факте появления очередного блока.

Новые блоки регулярно появляются в сети. Каждая нода, так или иначе знает, как часто ей присылают очередной блок. Соответственно, у нее могут быть ожидания относительно того, какого размера PoW должен быть у следующего блока с учетом этой частоты.

Короче говоря, получается та же самая схема с «честным большинством». Если бо́льшая часть узлов считает, что PoW должен быть X, то злонамеренному меньшинству нет смысла пытаться генерировать фальшивую PoW Y < X, поскольку:

1. Все равно нужно тратить энергию на вычисление даже PoW меньшего размера
2. Рано или поздно эта ветвь будет проигнорирована как фальшивая и по определению более короткая (ведь честных майнеров больше)

При таком подходе, фактический алгоритм вычисления уже не особо важен, главное чтобы его придерживалось большинство, сам он не имел логических дыр и хорошо работал независимо от количества узлов сети.
Halt
0
Ну вот это вы зря. Они неоднократно заявляли, что специально проектировали интерфейс пот VR и я могу с этим согласиться — все сделано очень на уровне.

Я бы даже сказал, по сравнению с бродилками, эта игра дает бо́льшее ощущение присутствия: по сюжету вы находитесь в кабине корабля, в кресле пилота. В реальности вы тоже сидите в кресле, практически в той же позе. При использовании нормальных органов управления (джойстик и селектор газа) отвлекаться на управление не придется.

Поэтому все внимание уходит именно на игровой процесс. И здесь как нельзя кстати подходит возможность независимого управления кораблем и головой пилота. Возможность смотреть не по курсу движения корабля — одно из самых больших преимуществ VR, особенно в бою.
Halt
0
Ваша точка зрения понятна, но это же не значит, что игра не подходит для использования с VR.
Halt
+1
И традиционно не упомянули Elite: Dangerous. Или потому что не отваливают обозревателям, или потому что нацелены на HTC (хотя и под окулусом вполне работает).
Halt
+4
Ну а мне оно нужно, сжатие это? Если я готовлю в первый раз, мне интересно узнать замысел автора. В последующие разы — я уже или сам запомню или буду читать рецепт по диагонали. Зачем тут экономить на «байтах» — в упор не пойму.

А то получится хрестоматийное: «…вместо риса взяла гречку, вместо свинины говядину, жарила не на подсолнечном, а на оливковом — такая гадость получилась! В общем, не рекомендую этот рецепт».
Halt
+3
А может уже прямо в рецепте указывать, какие параметры критичны, а какие можно «сколько не жадно/влезет»?

«Возьмите два куриных яйца любого размера» vs «отмерьте 200г муки; больше не надо — не будет кататься, меньше — будет жидко».

Во-первых, мне как экспериментатору интересно, что будет, если (недо|пере)ложить. Во-вторых, это дает эмпирические оценки и подтверждение того, что положил ровно столько, сколько нужно.
Halt
0
Smacker применялся в Starcraft для cut сцен и выглядел весьма неплохо для того времени.
Halt
+3
Хе хе, ждем чудо-вакансий от HR с текстом «опыт production разработки на Rust от 5 лет».
Halt
+2
Я уж даже хз, вообще есть ли программисты которые на нем хоть раз не программировали?
Есть и очень много. Моя статистика показывает, что о Rust слышало в разы больше, чем о Smalltalk. Обычно просто с недоумением выпучивают глаза. Единицы пробовали, еще меньше имеет хоть какое-то мнение.

Это за примерно 5 лет времени, пока я занимаюсь своей VM.
Halt
0
Про emscripten это и так понятно. Но разработчиков на C, D, Go, Rust, C# будет трудно объединить из-за идеологических разногласий, и здесь нужен аналог С для unix. Это мое мнение.
Вы не понимаете, что делает emscripten. Он берет LLVM IR код и транслирует его в вид, понятный виртуальной машине JS. Соответственно, любой фронтенд, генерирующий IR код (rust, clang, mono, llst…), сможет быть использован для веба.
Halt
+6
В Rust сборки мусора нет. При желании, ее можно реализовать отдельной библиотекой, если вы сможете придумать, зачем.
Halt
+6
Автор похоже собрал без --release. Не удивительно.
Halt
+2
Я вас действительно не понимаю. Давайте посмотрим на все это с позиции начальства:

…итак у меня-начальника есть команда работников, работа делается, проекты идут (иначе были бы другие страхи и проблемы). У меня есть N толковых сотрудников, на которых по сути все и держится. Выходит, что я полностью завишу от этих людей и их желания работать. Что мне нужно сделать, чтобы я был уверен в завтрашнем дне?

Наверное нужно создать здоровую рабочую атмосферу, мелкие удобства, поощрять сотрудников за инициативу, давать им учиться и реализовать себя? Короче, сделать так, чтобы людям было интересно и комфортно работать в моей компании? Чтобы они 10 раз подумали, даже если есть более оплачиваемая альтернатива, стоит ли оно того, если у нас тут так классно?

Нет конечно! Будем их кошмарить до последнего и грозить увольнением за прямое проявление профессиональных качеств! Чтобы шкурой, сволочи, чувствовали, что я для них царь и бог! Ведь это так логично, а еще Толян из таксопарка и Колян из СТО говорили, что с работниками только так, иначе сбегут при первой возможности!

Странно выходит. Голова должна болеть у начальства, а по факту защищаете его именно вы? Хотя никаких поводов для этого вам не дали?
Halt
+5
И в регионах можно найти толковую работу. А на свою ситуацию смотрите не как «мне делают одолжение, давая работу», а «я делаю одолжение, работая в этой компании».

Если вы действительно ценный (возможно и незаменимый) специалист, то гораздо вероятнее именно второй вариант. И начальство это прекрасно понимает, просто гораздо удобнее взять на понт, тем более, что получается.
Halt
+22
По моему, это был самый тупой способ «сохранить выращенных спецов» из всех, что я когда-либо слышал… Бежать надо из такой компании и радоваться, что они проявились «во всей красе» до того, как вы на них положились.
Halt
0
А на R3000 не заведется даже в теории?

P.S.: По названию — HIPS :)
Halt
+5
Не комментируют, наверное потому, что релиз проходной. Конечно, cargo check это важно и полезно, но не настолько круто, как custom derive :) Вот когда инкрементальную компиляцию включат по умолчанию будет интересно (хотя у меня и так вроде работает нормально).

P.S.: Еще неплохо было бы написать про возможность использования Self в реализациях и в структурах.