Что ж, результаты опроса выше интересные. Выходит, что у многих первым языком был Паскаль - это, в общем, вполне ожидаемо. Но также в лидерах внезапно Ruby и C, что сравнительно нетипично (я бы ожидал увидеть на втором месте Питон или JS). Также любопытно, что почти никто не начинал с чего-то типа Java или C#. Ну, с Solidity понятно 😄 Хотя были и другие ответы - к примеру, R и Basic.
В общем, любопытно получилось. Спасибо за участие 🤟
В общем, любопытно получилось. Спасибо за участие 🤟
👍9🔥5🎉2
В этом уроке по Solidity мы узнаем, как немного оптимизировать наш код и убрать дублирующийся код с помощью паттерна file, который также можно назвать dynamic dispatch. Посмотрим, как этот паттерн работает, как его реализовать и как задействовать вместе с ним перегруженные функции. https://www.youtube.com/watch?v=6LS6LPppu80
YouTube
Solidity и смарт-контракты Ethereum, урок #53 | File pattern (dynamic dispatch, DRY, перегрузка)
ХОТИТЕ СТАТЬ РАЗРАБОТЧИКОМ Solidity, узнать об Ethereum, блокчейне и многом другом ещё больше?!
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
Мои друзья из GUIDE DAO (бывшая школа MCS) предлагают скидку 0,1 ETH на ВСЕ СВОИ БУТКЕМЫ ПО КРИПТЕ! Материалы этих буткемов подготовлены мной и другими специалистами:…
👍10❤🔥3⚡1❤1🔥1
В этом уроке по Elixir мы поговорим о перечислимых (перечисляемых?) типах и о работе с ними. Рассмотрим модули Enum и Stream (для ленивого перечисления), а также узнаем о том, что такое списковые включения (list comprehensions).
https://www.youtube.com/watch?v=gNoOX8gI1H4
https://www.youtube.com/watch?v=gNoOX8gI1H4
YouTube
Elixir и функциональная разработка, урок #9 | Перечисления, enum, stream, списковые включения
В этом уроке по Elixir мы поговорим о перечислимых (перечисляемых?) типах и о работе с ними. Рассмотрим модули Enum и Stream (для ленивого перечисления), а также узнаем о том, что такое списковые включения (list comprehensions).
Таймкоды:
00:00 Введение…
Таймкоды:
00:00 Введение…
❤5👍1🔥1🍾1
Ещё немного вас повеселю, как вы это любите. В общем вышел трек, конечно же, небольшой (как это было у Тэффи). Название отсылает к пану Станиславу. Надо ещё что-то написать, но не знаю, что именно. Менеджер PR говорит - импровизируй, потом придумаем https://www.youtube.com/watch?v=lheZSb2GIdQ
YouTube
The Invincible (by Ravens Die Laughing), v1 demo | Dark, post-metal, experimental, space
The Invincible by Ravens Die Laughing. Dark, post-metal, experimental. Composed and produced by Kruk.
Cover image by John Fowler
Cover image by John Fowler
❤2🔥1
Залетайте сегодня вечерком https://youtube.com/live/SC-hfIuCF1Y?feature=share
YouTube
Интеллектуальная игра GuideDAO Answer
Традиционная интеллектуальная игра GuideDAO Answer снова в эфире! 6 знатоков, команда YouTube, 24 вопроса и один вредный ведущий.
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам: https://www.youtube.com/channel/UCN2waErKU52T_41pGgUimXw/join…
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам: https://www.youtube.com/channel/UCN2waErKU52T_41pGgUimXw/join…
❤6
Я тут потихоньку готовлю пару уроков про хэши и прочее, и пока для интереса сделал простую реализацию для алгоритма Луна. Это довольно интересный, но простой принцип свёртки, который можно использовать для быстрой проверки корректности разных кодов, кредитных карт и прочего.
Грубо говоря, если у нас есть какой-то длинный идентификатор (код) из цифр, мы можем сделать для него контрольный разряд. Делается так:
1) Берём каждую цифру из кода по очереди, начиная с самой правой
2) Суммируем эти цифры, но каждый второй элемент предварительно умножаем на 2, начиная с самого правого. Так, если есть последовательность "1234", то выходит что-то в духе "4 * 2 + 3 + 2 * 2 + 1".
3) Если в результате умножения на 2 вышло число > 10, то просто суммируем его разряды (к примеру, если 14, то делаем 1 + 4)
4) Получившийся результат R используем в формуле (R mod 10) - или аналогичной, там их много
5) Итог и будет контрольным разрядом, который дописывается в конец кода
6) Для проверки корректности этого разряда достаточно применить операцию к коду ещё раз (предварительно отбросив код)
К примеру, имея код
"1369"
получаем
(9 * 2) + 6 + (3 * 2) + 1
18 + 6 + 6 + 1
(1 + 8) + 6 + 6 + 1
22
(22 mod 10) = 2
2 и будет контрольным битом для всей свёртки. Забавно, так как подобный алгоритм позволяет защитить от некоторых типичных опечаток при вводе кодов, номеров кредиток и прочего, хотя, к сожалению, не от всех.
Можно написать простую реализацию (хотя и наивную)
Грубо говоря, если у нас есть какой-то длинный идентификатор (код) из цифр, мы можем сделать для него контрольный разряд. Делается так:
1) Берём каждую цифру из кода по очереди, начиная с самой правой
2) Суммируем эти цифры, но каждый второй элемент предварительно умножаем на 2, начиная с самого правого. Так, если есть последовательность "1234", то выходит что-то в духе "4 * 2 + 3 + 2 * 2 + 1".
3) Если в результате умножения на 2 вышло число > 10, то просто суммируем его разряды (к примеру, если 14, то делаем 1 + 4)
4) Получившийся результат R используем в формуле (R mod 10) - или аналогичной, там их много
5) Итог и будет контрольным разрядом, который дописывается в конец кода
6) Для проверки корректности этого разряда достаточно применить операцию к коду ещё раз (предварительно отбросив код)
К примеру, имея код
"1369"
получаем
(9 * 2) + 6 + (3 * 2) + 1
18 + 6 + 6 + 1
(1 + 8) + 6 + 6 + 1
22
(22 mod 10) = 2
2 и будет контрольным битом для всей свёртки. Забавно, так как подобный алгоритм позволяет защитить от некоторых типичных опечаток при вводе кодов, номеров кредиток и прочего, хотя, к сожалению, не от всех.
Можно написать простую реализацию (хотя и наивную)
class Luhn
def add_validation_to(code)
"#{code}#{check_digit_for(code)}"
end
def valid?(code)
code_chars = code.to_s.chars
check_digit_for(code_chars[0...-1]) == code_chars[-1].to_i
end
private
def check_digit_for(code)
digest = code.to_s.chars.reverse.map(&:to_i).inject(0) do |res, num|
res + num.divmod(10).sum
end
digest % 10
end
end
luhn = Luhn.new
validated = luhn.add_validation_to('12345')
puts luhn.valid?(validated)
👍17🌚10🔥4❤1
Есть такой формат XLIFF, он используется в некоторых системах типа Angular, Symfony, iOS. В общем, сделал по нему обзор с точки зрения спецификации (что там есть, как это устроено) и как всё это дело перевести без сильных проблем (тк формат куда сложнее, чем обычный JSON). Тут можно почитать https://lokalise.com/blog/how-to-open-and-translate-xliff-files-in-our-online-editor/
Lokalise Blog
XLIFF files translation with Lokalise online editor | Lokalise
Learn to open & translate XLIFF files effortlessly with our online editor. Simplify localization tasks for seamless multilingual content management.
👍7
Ещё к вопросу о всякой криптографии. В этот раз простой пример реализации RSA - это алгоритм, где используется открытый и закрытый ключ. По факту, это всё строится на простых числах.
Изначально задаются два простых числа (случайных) и по ним вычисляется открытый и закрытый ключ. А затем получается, что если использовать правильную формулу при шифровке с помощью открытого ключа, то расшифровать сообщение можно закрытым ключом, опять же если задействовать правильную формулу. Это уже доказали всякие умные дядьки, так что нам можно просто пользоваться плодами их работы.
Выходит что-то такое
Это пока наброски грядущих уроков, но в целом любопытная штука
Изначально задаются два простых числа (случайных) и по ним вычисляется открытый и закрытый ключ. А затем получается, что если использовать правильную формулу при шифровке с помощью открытого ключа, то расшифровать сообщение можно закрытым ключом, опять же если задействовать правильную формулу. Это уже доказали всякие умные дядьки, так что нам можно просто пользоваться плодами их работы.
Выходит что-то такое
# frozen_string_literal: true
require 'prime'
class SimpleRSA
def initialize(limit = 20)
p = random_prime(limit)
q = random_prime(limit)
@max = p * q
totient = (p - 1) * (q - 1)
@pub_key = pub_key_from totient
@priv_key = priv_key_from totient
end
def encrypt(string)
message = message_for string
message.map do |char_code|
(char_code**@pub_key) % @max
end
end
def decrypt(secret)
secret.map do |s_char|
(
(s_char**@priv_key) % @max
).chr
end.join
end
private
def priv_key_from(totient)
d = gcd_extended(totient, @pub_key)[2]
d.positive? ? d : (totient - d.abs)
end
def pub_key_from(totient, generator = Prime::EratosthenesGenerator.new)
next_prime = generator.next
return if next_prime >= totient
return next_prime if gcd_extended(next_prime, totient)[0] == 1
pub_key_from totient, generator
end
def gcd_extended(a, b)
return b, 0, 1 if a.zero?
gcd, x1, y1 = gcd_extended(b % a, a)
x = y1 - (b / a) * x1
y = x1
[gcd, x, y]
end
def random_prime(limit)
Prime.take(rand(0..limit)).last
end
def message_for(str)
str
.upcase
.chars
.map(&:ord)
end
end
d = SimpleRSA.new
enc_message = d.encrypt('hi from kruk')
puts enc_message.inspect
puts d.decrypt(enc_message).inspect
Это пока наброски грядущих уроков, но в целом любопытная штука
🔥13👍7👀2👏1
В этом уроке по криптографии мы обсудим, что такое хэши, зачем они нужны и как работают. Мы обсудим некоторые ключевые свойства хэшей и узнаем откуда они появились. Также мы рассмотрим алгоритм Луна и напишем собственный алгоритм для хэширования произвольных строк.
По моему скромному мнению, видео этой серии будут интересны для любого специалиста IT.
https://www.youtube.com/watch?v=IglTG5MGgvg
По моему скромному мнению, видео этой серии будут интересны для любого специалиста IT.
https://www.youtube.com/watch?v=IglTG5MGgvg
YouTube
Crypto bits #1 | Пишем свой хэш, алгоритм Меркла-Дамгора, алгоритм Луна, как работают хэши
В этом уроке по криптографии мы обсудим, что такое хэши, зачем они нужны и как работают. Мы обсудим некоторые ключевые свойства хэшей и узнаем откуда они появились. Также мы рассмотрим алгоритм Луна и напишем собственный алгоритм для хэширования произвольных…
❤15👍9🔥5❤🔥1👏1👾1
Знаете, я сейчас вдруг вспомнил забавную вещь. Люди, у которых намётанный глаз, почему-то легко распознают тех, кто работает в сфере IT. И это вовсе не преувеличение, потому что меня раскрывали в разных странах 😂 Возможно, выдавал парашют, волочащийся сзади.
- Скажем, однажды таксист напрямую спросил, не работаю ли я случайно программистом, а то очень похоже. Ну, спросил вежливо, просто для поддержания разговора, потом ещё поинтересовался, как часто я взламываю сайты
- Несколько лет назад в Черногории мы встретили девушку, которая переехала откуда-то с постсоветского пространства, разговорились, она сразу подметила, что я из IT. Дескать, у неё раньше был парень тоже "какой-то такой".
- Недавно ходил подключать себе 5G и покупать новый маршрутизатор, так девушка-консультант высказалась в духе того, что "ты похож на чела, который с настройкой сможет сам разобраться, так что объяснять не буду что к чему"
- Ну, и много лет назад сотрудница одного ночного клуба тоже заметила, что я наверняка из какой-то такой области
И вот думай что хочешь. Ну, я воспринимаю это, как комплимент. Но всё равно забавно 😂 У вас такое бывало?
- Скажем, однажды таксист напрямую спросил, не работаю ли я случайно программистом, а то очень похоже. Ну, спросил вежливо, просто для поддержания разговора, потом ещё поинтересовался, как часто я взламываю сайты
- Несколько лет назад в Черногории мы встретили девушку, которая переехала откуда-то с постсоветского пространства, разговорились, она сразу подметила, что я из IT. Дескать, у неё раньше был парень тоже "какой-то такой".
- Недавно ходил подключать себе 5G и покупать новый маршрутизатор, так девушка-консультант высказалась в духе того, что "ты похож на чела, который с настройкой сможет сам разобраться, так что объяснять не буду что к чему"
- Ну, и много лет назад сотрудница одного ночного клуба тоже заметила, что я наверняка из какой-то такой области
И вот думай что хочешь. Ну, я воспринимаю это, как комплимент. Но всё равно забавно 😂 У вас такое бывало?
👨💻16
Во-первых, большое спасибо за отзывы по новой серии (crypto bits). А, во-вторых, залетайте на стрим в среду, будем говорить об ассиметричном шифровании и попробуем написать свою реализацию RSA 😄 https://youtube.com/live/ttsRlTJJizI?feature=share
YouTube
Crypto bits #2 | Асимметричное шифрование, протокол Диффи-Хэллмана, ЭЦП, RSA на коленке, УЦ
В этом уроке мы узнаем, что такое асимметричное шифрование, как оно работает и зачем нужно. Поговорим о протоколе Диффи-Хэллмана, электронных цифровых подписях, сертификатах безопасности, удостоверяющих центрах, а также напишем свою простую реализацию RSA…
👍9🔥4
У меня тут новый пост вышел, в этот раз про разновидности JSON и использование этих файлов для хранения переводов https://lokalise.com/blog/json-l10n/
Lokalise
How to translate JSON files: guide to l10n & i18n with examples
In this article you'll learn about JSON localization, internationalization, working with JSON, and how to translate JSON files.
❤8⚡2
Начинаем через минут 40
https://youtube.com/live/ttsRlTJJizI?feature=share
https://youtube.com/live/ttsRlTJJizI?feature=share
YouTube
Crypto bits #2 | Асимметричное шифрование, протокол Диффи-Хэллмана, ЭЦП, RSA на коленке, УЦ
В этом уроке мы узнаем, что такое асимметричное шифрование, как оно работает и зачем нужно. Поговорим о протоколе Диффи-Хэллмана, электронных цифровых подписях, сертификатах безопасности, удостоверяющих центрах, а также напишем свою простую реализацию RSA…
❤8👍3
Ладно, сегодня (и завтра) просто музыка. Ставь лайк, если помнишь эту игру. Мицуда, конечно, гений, а для меня во многом и учитель https://www.youtube.com/watch?v=RC31xi_hTnE
YouTube
新編「CHRONO CROSS」- Cosmosky Orchestra
ゲーム音楽・劇伴音楽演奏楽団、コスモスカイオーケストラです。
リバイバルコンサート(2015年10月12日@オリンパスホール八王子(東京都))にて演奏しました、
新編「CHRONO CROSS」を公開いたします。
こちらの動画では第4回定期演奏会で演奏いたしました「クロノクロスメドレー」
(https://www.youtube.com/watch?v=t48qx...)を再び編曲し、
新たに生まれ変わったメドレーをお届けいたします。
演奏、及び動画公開の許可を下さいましたプロキオン・スタジオ様、セプ…
リバイバルコンサート(2015年10月12日@オリンパスホール八王子(東京都))にて演奏しました、
新編「CHRONO CROSS」を公開いたします。
こちらの動画では第4回定期演奏会で演奏いたしました「クロノクロスメドレー」
(https://www.youtube.com/watch?v=t48qx...)を再び編曲し、
新たに生まれ変わったメドレーをお届けいたします。
演奏、及び動画公開の許可を下さいましたプロキオン・スタジオ様、セプ…
👍6
Вышел новый hardhat-toolbox с поддержкой ethers 6 https://github.com/NomicFoundation/hardhat/blob/main/packages/hardhat-toolbox/CHANGELOG.md Информация по ethers 6 и нововведениям здесь, их в общем не так много https://www.youtube.com/watch?v=bzzf0ANyq70
GitHub
hardhat/packages/hardhat-toolbox/CHANGELOG.md at main · NomicFoundation/hardhat
Hardhat is a development environment to compile, deploy, test, and debug your Ethereum software. - NomicFoundation/hardhat
🔥6👍2
В срочном порядке опубликовал FAQ по Solidity, где упоминаются типичные проблемы и несколько нововведений из toolbox 3 и ethers 6 https://bodrovis.tech/en/categories/solidityethereum/posts/faq-po-kursu-solidity
Ilya Krukowski
FAQ по курсу Solidity - by Ilya Krukowski
Ответы на часто задаваемые вопросы по бесплатному курсу Solidity на YouTube.
🔥10👍7
Друзья, хотел попросить вас об одном одолжении. У вас уйдёт на это буквально минута, а нам будет полезно. Суть в том, что мы выкатываем новую большую фичу и требуется её, так сказать, подсветить.
Выкатывается фича завтра в районе обеда (это 13:00 UTC+3). Что я прошу вас сделать:
- Создать аккаунт на Product Hunt https://www.producthunt.com/ Там просто нужно указать любую действующую почту, имя, загрузить любой аватар, и в разделе bio написать хотя бы одно слово (типа "developer").
- Зайти сюда и нажать Upvote https://www.producthunt.com/posts/lokalise-flutter-sdk Голосовалка как раз откроется завтра в обеденное время
- Написать под голосовалкой любой комментарий типа "great", "thank you", "cool".
Всё. В общем, это действительно дело минуты, но нам поможет. Заранее большое спасибо.
Выкатывается фича завтра в районе обеда (это 13:00 UTC+3). Что я прошу вас сделать:
- Создать аккаунт на Product Hunt https://www.producthunt.com/ Там просто нужно указать любую действующую почту, имя, загрузить любой аватар, и в разделе bio написать хотя бы одно слово (типа "developer").
- Зайти сюда и нажать Upvote https://www.producthunt.com/posts/lokalise-flutter-sdk Голосовалка как раз откроется завтра в обеденное время
- Написать под голосовалкой любой комментарий типа "great", "thank you", "cool".
Всё. В общем, это действительно дело минуты, но нам поможет. Заранее большое спасибо.
Product Hunt
Product Hunt – The best new products in tech.
Product Hunt is a curation of the best new products, every day. Discover the latest mobile apps, websites, and technology products that everyone's talking about.
👍26❤2😁1