Pull to refresh
134
0
Иващенко Иван @defuz

Разработчик

Send message

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

Не понимаю где вы увидели противоречие, так что наверное не смогу точно ответить.

Unsafe Rust действительно по уровню гарантий и поведению близок к C/C++, но в нем, к счастью, очень короткий список undefined behaviour.

Safe Rust по уровню гарантий похож скорее на Java, но не является managed языком: ни виртуальной машины, ни сборщика мусора там нет.

Писать на Rust – это примерно как писать на C низкоуровневые библиотеки, и затем использовать их на Java в основном коде, с той лишь разницей, что синтаксически Safe/Unsafe Rust – почти идентичные языки, которые бесшовно интегрируются, без каких-либо накладных расходов.

При этом безопасная часть кода не будет уступать по производительности аналогичной программе на С/С++, хоть и написана на "безопасном языке".

В действительности, 90% Rust-разработчиков никогда не пишут на Unsafe Rust, но весь их код так или иначе основан на Unsafe Rust. Стандартная библиотека языка – это по сути сплошной unsafe-код, завернутый в абстракции, корректное использование которых гарантируется компилятором.

Мне кажется мы уже об определении слов начали спорить, поскольку с вашим вариантом я тоже согласен. Я имел ввиду что создаваемые абстракции безопасные в использовании И эффективные в реализации.

Уточняю: создание абстракций, безопасное использование которых гарантируется компилятором.

Библиотеки, в том числе стандартная библиотека языка, направлены на безопасность без компромиссов с производительностью, это основная парадигма Rust, как бы.

Если Rust ничем не отличается от C/C++, то почему в нем реализованы отдельно ссылки и указатели? Не стоит так безапеляционно заявлять о том, в чем вы не разобрались. Очевидно, в C/C++ не заложен тот инструментарий контроля за безопасностью, который реализован в Rust на уровне языка.

Безопасный код на Rust может упасть с segmentation fault если в нижележащем низкоуровневом коде была допущена ошибка, как и абсолютно любой другой "безопасный" код написанный в другой парадигме.

Rust предлагает новую парадигму построения абстракций между Safe и Unsafe, потому что в основе любой безопасной реализации будут лежать небезопасные примитивы, корректность использования которых лежит на разработчике. Основная идея Rust – локализовать применение небезопасных примитивов, обернув их в безопасную абстракцию. И это работает.

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

Rust – это на самом деле два языка программирования (Safe Rust и Unsafe Rust), причем Safe Rust является подмножеством Unsafe Rust. Эта особенность позволяет разработчикам создавать надежные И эффективные абстракции для небезопасных по свое природе операций, а затем безопасно И эффективно использовать их в прикладном коде.

Так что да, Rust позволяет создавать надежное И эффективное ПО.

  1. Как только вы нашли новый блок, необходимо разослать его остальным майнерам (тут используется классический p2p протокол), иначе магии не случится.

  2. Как только другой майнер получает ваш блок, при условии что он валидный, он сразу же переключается на майнинг нового блока, следующего за вашим. Он делает это потому, что всегда выгоднее майнить начиная с самого большого значения суммарно проделанной работы, если только мы не собрались злонамеренно устроить Split of Brain атакой 51% или перерезав атлантический интернет-кабель.

  3. В блоке, который вы смайнили, вы вписываете свой собственный адрес кошела ("coinbase" транзакция), на который, согласно протоколу, вам положена награда за проделанную работу.

  4. Если говорить о блокчейнах "первого поколения" (Bitcoin), то все что содержат блоки – это только списки транзакций, где у каждой транзакции N входящих адресов и M исходящих, причем сумма входящих денег всегда равна сумме выходящих денег + комиссия (добровольное поощрение майнеру).

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

  6. Чтобы потратить полученные вами деньги, нужно просто подписать транзакцию вашим приватным ключем, хеш публичного ключа которого является буквально идентификатором вашего кошелька о том, что вы намереваетесь перевести деньги на какой-либо другой адрес, и анонсировать эту транзакцию в сеть (отправить майнерам по p2p протоколу). Майнеры включат вашу транзакцию в блок только если она валидна (правильно подписана и у вас действительно есть средства на основании истории предыдущих транзакций), иначе весь их блок будет некорректным и они не получат награду. Так же, майнеры замотивированы включить вашу транзакцию в блок, поскольку за это им достанется комиссия, которую вы назначали в теле транзакции.

  7. Все биткоины однажды были смайнены майнерами и только затем оказались на кошельках "обычных" пользователей. Биткоин как валюта – это абстрактная единица измерения, как метр, и потому ваш биткоин от биткоина соседа принципиально ничем не отличается, так же как не отличается один квадратный метр вашей квартиры и одного квадратного метра его квартиры (хотя площадь квартир может отличаться).

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

Именно по-этому на блокчейне ваши деньги – ваши, это так "согласно протоколу" и согласно предположению, что участники сети ведут себя как рациональные агенты. Сложность построения блокчейн-систем состоит именно в том, чтобы описать такой протокол, в котором наиболее выгодным (в эгоистическом смысле) поведением любого участника сети будет корректное (честное, правильное) поведение.

Биткоин был не первой попыткой создать децентрализованные деньги, но первой системой, в которой пазл сложился воедино правильно, как раз за счет правильной "инсентивизации" (системы поощрения) тех, кто поддерживает корректную работу сети – майнеров.

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

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

Ну и судя по главной странице большинства сервисов, идеальный пользователь – этот тот, который жмет первый же фильм/сериал в списке рекомендаций после просмотра предыдущего, по аналогии с залипанием в YouTube.

Я ума не приложу, почему я должен быть доволен "10000 какого-то говна доступного по подписке", "20 лучших фильмов с Эриком Ланжем" (кто-это вообще?), "Ночь ужасов: низкопробные ужастики за которые нам не нужно платить большие отчисления" и так далее. Неужели кто-то и вправду так потребляет фильмы?

Хотя, конечно, поведение транзакций несколько отличается от SQL и не позволяет получить данные, принять решение, записать данные — такое, насколько мне известно, достижимо только через Redis Script.
Нет, позволяет.
Что касается «как и SQL»: да, настройками Redis можно достичь тех же гарантий, что у MySQL, но это полностью уберёт преимущества в производительности, при этом Redis останется однопоточным, а MySQL — многопоточным.
Из аббревиатуры ACID четыре буквы из пяти Redis обеспечивает «по-умолчанию» и без каких-либо компромиссов с производительностью не хуже чем MySQL. Более того, Redis производительный именно потому, что он принципиально однопоточный.
Ну и кроме того, если мы превращаем Redis в однопоточный и ограниченный по функциональности аналог MySQL, то в чём смысл такой инсталяции Redis?
Даже с записью AOF файла для достижения Durability, Redis выдает 100-200 тысяч операций в секунду.

Поможет ли вам достигнуть аналогичных результатов многопоточность MySQL?

Redis не стоит пытаться превратить в MySQL ровно по той же причине, по которой не нужно пытаться превратить MySQL в Redis – они по разному спроектированы и для разных целей. В некоторых ситуациях использование Redis позволяет создать более отказоустойчивое решение, чем использование MySQL, особенно в условиях ограниченных ресурсов на инфраструктуру, и особенно если под отказоустойчивостью понимать высокую доступность.
Нет никаких ACID транзакций
В Redis есть ACID транзакции. Если сомневаетесь, перечитайте определение ACID.
даже при включённом сохранении на диск данные могут быть потеряны частично либо полностью
Как и для SQL баз данных.
в данных может быть нарушена целостность с точки зрения приложения
Как и для SQL баз данных.
фоновое сохранение данных на диск может нанести ущерб производительности и отказоустойчивости
Как и для SQL баз данных.
Данные имеют time to life. возражение: это не мешает хранить их в SQL СУБД
С такой аргументацией, это не мешает их хранить даже в уме. Redis очень эффективен для хранения time to life данных.
При записи сохранять данные и в Redis, и в основную БД
А о консистентности между двумя БД вы подумали?
избегайте хранения в Redis важных данные или данных, требующих контроля целостности
Что конкретно вам мешает обеспечить высокую надежность хранения данных и обеспечение целостности в Redis?
возражение: перегруженный redis работает медленее
Вот только уровень перегрузки у Redis обычно на один-два порядка выше чем у SQL БД.

В целом Redis проектировался с приоритетом Availability over Consistency, но это отнюдь не значит что Consistency в Redis не достигается, как вы утверждаете в статье.
Де-факто проверка сообществом, в данный момент, это единственный способ верификации.
Как-то сомнительно для меня все это звучит.

В моем понимании, если вы не способны выразить ваше доказательство в какой-либо формальной системе, то лучше считать что у вас нет полного доказательства, а только его набросок. Дальше уже перевести из одной формальной системы в синтаксис proof assistance не выглядит такой уж сложной задачей, плюс, по дороге вы проверите, какие инструменты доказательства вы использовали.

Я охотно допускаю, что даже сотни пар просветленных глаз способны одинаково ошибаться, если у них одна и та же база знаний. Так что все вариации на тему «очевидно что A => B» приниматься на веру не должны, особенно если A и B не вполне определены формально.

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

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

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

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

Что пытается донести эта статья? Что есть такой раздел математики как топология? Так мы в курсе. Что есть proof assistance? Так мы в курсе. Что кто-то назвал что-то другое революционным? Так нам плевать.

В статье ровно ноль интересной информации.
Если вам в хватит упорства, то в конце прогулки будете чувствовать себя Королем Ночи. :)

Это где компилятор Rust выделят память неконтролируемо для разработчика?

Либо я проглядел «и название любимой книги с точкой в конце», либо этого не было в изначальной версии комментария.
Давайте уж разовьем идею в «пользу» и предположим что они хранятся в открытом виде — поможет нам 128 бит, или даже 1024
Не поможет, так что же теперь, «1234» использовать? Сайты должны использовать сложные криптографические функции, предполагая, что пользователи используют слабые пароли. Пользователи должны использовать сложные пароли, предполагая, что сайты используют слабые криптографические функции.
Простая логика:

1. Таблицы переборов строятся таким образом, чтобы ускорить нахождение пароля.
2. Люди стараются придумать пароль таким образом, чтобы им легче было его запомнить.
3. Хорошие таблицы переборов содержат в себе легкозапоминаемые вариации паролей (например, boss, b0ss, bo$$, b0$$ и т.д.)
Между «возьмем Aquamen Notorious» и «возьмем 5 слов» пропасть в 40-48 бит, при условии что слова выбраны случайно. Использование словарных слов для пароля само по себе не плохо, важно лишь правильно оценивать сложность такого пароля. Двух слов совершенно не достаточно, пять-шесть уже вполне приемлемо.
А если это не простой SHA256 а PBKDF2 или bcrypt?
При анализе возможных атак, любые «а что если» работают в пользу злоумышленника, а не наоборот.
и вопрос решён — брутфосом это не перебрать
Ну конечно, ведь два словарных слова и какая-то там дата – это вообще неподъемная задача для современных алгоритмов перебора. :D

Сложность предложенного вами варианта пароля – что-то около 48 бит (условно, 16+16+16), что эквивалентно целым шести случайным байтам. Это если структура пароля известна, если неизвестна – ну скажем 52 бита.

Современный майнер SHA256 способен перебрать ~110T хешей в секунду, или ~47 бит. Таким образом, мне понадобится одна железка из массмаркета и примерно 32 секунды что узнать ваш пароль, при условии что я знаю его хеш.

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

Чем сложнее вам запомнить пароль, тем, внезапно, он надежнее. Если вы думаете что все эти уловки с заменами «o» на «0» защитят вас от брутфорса, то вы очень далеки от современного состояния криптоанализа.

Способ восстановления пароля должен быть максимально однозначным и допускать минимум двусмысленностей. Запомнить тот факт, что вы использовали base64 для его генерации гораздо проще, чем все нюансы выдуманного вами алгоритма (парные «o» на «0» заменяем, или непарные)?
В своих рассуждениях вы упускаете важный момент: хотя человеку, казалось бы, нужно меньше попыток при обучении по-новому пользоваться своим телом (или изучить новый язык), все это происходит отнюдь не на пустом фундаменте.

Вы же не забыли внезапно как пользоваться ногами, как удерживать равновесие и где в вашем зрении верх, а где низ, когда впервые стали на лыжи, верно? Человеческая нейросеть учиться непрерывно по 16 часов каждый день годами (и еще оптимизирует усвоенные данные во сне), и только спустя 15-20 лет превращается в полноценного сознательного индивида, которого мы любим сравнивать с искусственными нейронными сетями.

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

Ни одна искусственная нейронная сеть не знает и не понимает ни одного языка ни на каком уровне.
Ох уж это глубокое и неуловимое «понимание смысла». Готовы дать строгое определение, что вообще это значит, чтобы наша дискуссия обрела, ну, смысл? Иначе получается что вы приводите в качестве достоинства некоторое субъективное ощущение, а не объективный фактор.

Ни одна искусственная нейронная сеть в мире не в состоянии полноценно выполнять переводы.
Почему это? Может они делают это не совсем так же как это делают люди, но это не умаляет их достоинств. По многим критериям они уже превзошли людей переводчиков (из самого банального – словарная база). Вопрос около 5-10 лет, когда ни один человек в мире не сможет сравнится с искусственным интеллектом в этом состязании ни по одному из критериев. А еще через 5 лет нейронная сеть будет способна сымитировать перевод любого из переводчиков, который вам больше нравится, да так что сам переводчик не поймет, его это перевод, или нет.

Я, как и вы, не просто нейронная сеть.
Готовы это доказать?

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

Вот только ирония что мозг (не только человека, а любой) – это такой же оптимизатор, направленный на увеличение вероятности выживания при минимальном энергопотреблении, при чем буквально.
1
23 ...

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Works in
Date of birth
Registered
Activity