DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.22K subscribers
143 photos
2 videos
8 files
976 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Ещё немного вас повеселю, как вы это любите. В общем вышел трек, конечно же, небольшой (как это было у Тэффи). Название отсылает к пану Станиславу. Надо ещё что-то написать, но не знаю, что именно. Менеджер PR говорит - импровизируй, потом придумаем https://www.youtube.com/watch?v=lheZSb2GIdQ
2🔥1
Я тут потихоньку готовлю пару уроков про хэши и прочее, и пока для интереса сделал простую реализацию для алгоритма Луна. Это довольно интересный, но простой принцип свёртки, который можно использовать для быстрой проверки корректности разных кодов, кредитных карт и прочего.

Грубо говоря, если у нас есть какой-то длинный идентификатор (код) из цифр, мы можем сделать для него контрольный разряд. Делается так:

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🔥41
Есть такой формат XLIFF, он используется в некоторых системах типа Angular, Symfony, iOS. В общем, сделал по нему обзор с точки зрения спецификации (что там есть, как это устроено) и как всё это дело перевести без сильных проблем (тк формат куда сложнее, чем обычный JSON). Тут можно почитать https://lokalise.com/blog/how-to-open-and-translate-xliff-files-in-our-online-editor/
👍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
15👍9🔥5❤‍🔥1👏1👾1
Знаете, я сейчас вдруг вспомнил забавную вещь. Люди, у которых намётанный глаз, почему-то легко распознают тех, кто работает в сфере IT. И это вовсе не преувеличение, потому что меня раскрывали в разных странах 😂 Возможно, выдавал парашют, волочащийся сзади.

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

- Несколько лет назад в Черногории мы встретили девушку, которая переехала откуда-то с постсоветского пространства, разговорились, она сразу подметила, что я из IT. Дескать, у неё раньше был парень тоже "какой-то такой".

- Недавно ходил подключать себе 5G и покупать новый маршрутизатор, так девушка-консультант высказалась в духе того, что "ты похож на чела, который с настройкой сможет сам разобраться, так что объяснять не буду что к чему"

- Ну, и много лет назад сотрудница одного ночного клуба тоже заметила, что я наверняка из какой-то такой области

И вот думай что хочешь. Ну, я воспринимаю это, как комплимент. Но всё равно забавно 😂 У вас такое бывало?
👨‍💻16
У меня тут новый пост вышел, в этот раз про разновидности JSON и использование этих файлов для хранения переводов https://lokalise.com/blog/json-l10n/
82
Общая информация по ИИ и краткие советы/рекомендации
👍11🔥2
Да, были майнеры в наше время...
😁11👀4👍2🌭1
В срочном порядке опубликовал FAQ по Solidity, где упоминаются типичные проблемы и несколько нововведений из toolbox 3 и ethers 6 https://bodrovis.tech/en/categories/solidityethereum/posts/faq-po-kursu-solidity
🔥10👍7
Вот кто-то с горочки спустился... (BNB)
Друзья, хотел попросить вас об одном одолжении. У вас уйдёт на это буквально минута, а нам будет полезно. Суть в том, что мы выкатываем новую большую фичу и требуется её, так сказать, подсветить.

Выкатывается фича завтра в районе обеда (это 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".

Всё. В общем, это действительно дело минуты, но нам поможет. Заранее большое спасибо.
👍262😁1
Что ж, последнее время видео не было, но они будут - я думаю, буквально завтра. Впрочем, у меня была уважительная причина, ибо жизнь, как обычно, бьёт разводным ключом по голове во многих смыслах (и далеко не всегда в приятных).

На сегодня просто сказка. Вот часто спрашивают - с кем из известных исторических персон вы хотели бы познакомиться? Вот подумайте сами. Действительно: с кем? Честно говоря, выходит, что особенно ни с кем 😄 То есть хотелось бы увидеть какие-то интересные исторические моменты, но, желательно, с безопасной дистанции. Ну, хотя бы узнать: высаживались ли действительно викинги на территории современных США? Но уж знакомиться с Рангаром Лодброком (если он вообще существовал) как-то не хочется. Мало ли, вдруг он сочтёт твою голову достойной отсечения...

Ну, или отобедать с господином Пушкиным. Как-то сильно неловко будет, да и вообще о чём говорить-то? У нас вот его памятник убрали в заказник (хотя это совсем другая и не очень весёлая история). Ну, и так далее.

Впрочем, пару имён я бы назвал, если исключать Маркеса - последнего, увы, мага, который всё же был нашим современником. Во-первых, я бы назвал Лондона - если судить по многочисленным мемуарам и воспоминаниям современников, Джек был свой в доску парень и у нас тема для беседы бы нашлась точно. Выпить, вспомнить о былых временах, о путешествиях, приключениях, поболтать об экономике - это пожалуйста.

Во-вторых, это Тэффи, я так думаю. Хотя было бы неловко, и я бы наверняка спросил - а про меня вы тоже напишете смешной рассказ? Расскажете всем, как в мыслях вы хотели бы убежать куда-нибудь подальше, а не сидеть тут с нудным мужиком... Но зато было бы весело 😂

Впрочем, это просто фантазии на тему. Уверен, у вас есть другие соображения на эту тему. Скоро увидимся 😀
🔥14🤔2
В этом уроке продолжаем говорить про OpenZeppelin Defender. В этот раз узнаем, как легко создать Multisig и Timelock, настроить их и как добавлять предложения в эту цепочку. Как выясняется, для этого нам не потребуется вообще писать код: всё делается через графический интерфейс! https://www.youtube.com/watch?v=ElM2sv9EQw4
👍18🔥1
Сейчас у нас в чате школы заметил анонс очередного занятия по английскому, и там было использовано обращение "guys". Казалось бы, все так говорят - вон в американских фильмах про колледж все так друг друга называют.

Но вообще должен заметить, что это не слишком хорошая идея при общении, скажем, внутри компании, даже если среда неформальная. Просто дело в том, что слово "guys" в основном всё-таки ассоциируется с парнями и получается, что девушек мы выносим за скобки или просто "подразумеваем". Исключение - когда вы действительно обращаетесь только к мужчинам.

Не сказать, что это большая бестактность, но всё-таки нечто, о чём следует помнить. Самое простое - использовать обращение "everyone", "colleagues", может быть даже "friends". Мелкие вещи, которым особенно не учат, но из них впоследствии складывается общее впечатление о человеке. А это особенно важно, если вы работаете в режиме удалёнки - в этом случае все мысли и эмоции мы зачастую выражаем только текстом, смайликами, гифками.
🔥115👍3👎2