DEV: Рубиновые тона – Telegram
DEV: Рубиновые тона
3.22K subscribers
143 photos
2 videos
8 files
976 links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Tokei - классный инструмент, который показывает статистику проекта (на каком языке сколько строк кода, в частности). Очень быстро работает, запускается одной командой https://github.com/XAMPPRocky/tokei
👍9
Небольшая выжимка по следам урока о случайных числах.

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

Так вот, процесс создания случайных, точнее псевдослучайных, чисел в компьютере - это довольно любопытная тема. Самый простой пример генератора случайных чисел (RNG) - это линейный конгруэнтный генератор, который выражается формулой f(x) = a * x + c (mod m). Казалось бы, звучит сложно, но по факту алгоритм следующий:

- Берём изначальное "сообщение", которое может быть числом, словом, строкой. Это сообщение называется seed.

- Хэшируем его по заданному алгоритму, хотя бы с помощью keccak256. Получаем на выходе число в диапазоне до 2 ** 256 - 1 (ну, или в другом, зависит от алгоритма). Это и будет нашим первым случайным числом.

- Проблема, однако, в том, что это число лежит в очень большом диапазоне, а нам, к примеру, нужно получить число от 0 до 10. Ну, это не беда - мы можем просто использовать остаток от деления на 10, то есть нормировать изначальное число.

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

- Эту операцию можно повторять сколько угодно раз. Естественно, процесс может быть сложнее, чем просто увеличение на 1, но суть остаётся прежней.

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

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

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

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

Случайные числа можно использовать для создания потоковых шифров, а пример такого шифра можно посмотреть в видео-уроке (в общем, он несложный). https://youtu.be/q9PWljGSpKY
👍7🔥1
Слово разлука все более теряет свою жестокую окраску, и скоро ее почти не будет. Ведь мы и теперь узнаем мысли на расстоянии посредством
писем, слышим голос в телефон, и, как говорят, не сегодня-завтра вновь изобретенный особый аппарат даст нам возможность передавать свое изображение на расстоянии.

Мы будем и слышать, и видеть того, кого нет с нами, и останется для нас только одна тоска - тоска о касании.


Забавно, а ведь Тэффи написала это ещё до революции в России, то есть до эпохи исторического материализма. Аппарат изобрели, но он всё ещё не умеет передавать касания, увы...

Впрочем, про это был очень любопытный роман у Лема про "дистантников", когда можно было удалённо управлять неким телом. Естественно, всякие хитрые личности с помощью этого стали устраивать амурные приключения, и многие задались вопросом - а считается ли это изменой, ведь тело-то не твоё? Особо продвинутые даже работали через два прокси, то есть залезали в ещё одного дистантника 😂 Это из романа Pokoj na Ziemi (Мир на Земле), очень рекомендую 🚀
👍5🤯2
У меня тут небольшой "юбилей" - 13 миллионов закачек, если считать все созданные гемы (ну, то есть Ruby, другие языки тут не считаю). https://rubygems.org/profiles/bodrovis

Что хочу сказать по этому поводу - не стоит бояться публиковать свои творения для мира. Пусть даже ваше решение поможет паре человек, это всё равно классно. Да, оно может быть неидеально, но, в конце концов, найдутся люди, которые помогут довести его до ума. Ну, главное укажите правильную лицензию (MIT в простом случае), чтобы к вам не имели претензий 😂
👍21🔥6👏4
Знаете, я тут на досуге подумал, что за время моей "карьеры" в институте (где я работал фактически за бесплатно) было два эдаких максимума, только один с плюсом, а другой - с минусом, причём второй произошёл уже где-то ближе к увольнению.

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

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

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

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

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

https://www.youtube.com/watch?v=bUU7b-g5Dlk
😁4😢42
Небольшой тизер - в ближайшее время проведём стрим по Ruby, поговорим о практическом использовании и посмотрим на примере относительно большой проект, который я вот только недавно переписал с нуля. Будет про организацию кода, тесты (с webmock), метапрограммирование - в таком духе. Вот как раз только сделал merge для pr 😂
👍36🔥11👏1
Раз идея со стримом всем зашла, чему я действительно очень рад, давайте встретимся завтра вечером в 20:30 UTC+3. Правда вышло забавно, тк я думал, что сегодня среда, и в четверг можно подготовиться, а выходит, что четверг-то сегодня 😂😂 Но это не беда, уже успел большинство приготовлений сделать https://youtube.com/live/tpQJmG101Gw?feature=share
🔥203👍3🙏3
Итак, вторая часть обещанного стрима состоится завтра. В этот раз мы посмотрим проект поменьше и обсудим, как создать удобную конфигурацию для пользователя, как работать с архивами, потоками, как создавать свои задачи rake и не только. https://youtube.com/live/4VssXSv6gQQ?feature=share
11👍43🔥3
Лучший комментарий на стриме - почему докладчик в шляпе? Даже не придумал сразу, что ответить. 😄

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

Берегите себя https://www.youtube.com/watch?v=DxkeOkaVRLo
👍7🔥4
Знаете, когда у меня спросят, почему мне не нравится экосистема JS, я отвечу просто. Потому, что для обычного форматирования кода TS в проекте ESM нужно добавить себе в package.json вот это вот

    "@typenoscript-eslint/eslint-plugin": "^6.0.0",
"@typenoscript-eslint/parser": "^6.0.0",
"eslint": "^8.33.0",
"eslint-config-prettier": "^8.0.0",
"eslint-import-resolver-typenoscript": "^3.5.1",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^5.0.0",


После чего создать отдельный файл с вот этим вот

module.exports = {
root: true,
parser: "@typenoscript-eslint/parser",
parserOptions: {
tsconfigRootDir: __dirname,
project: ["./tsconfig.eslint.json"],
ecmaVersion: 2022,
},
plugins: ["@typenoscript-eslint", "node", "prettier"],
extends: [
"eslint:recommended",
"plugin:@typenoscript-eslint/recommended",
"plugin:node/recommended",
"plugin:import/recommended",
"plugin:import/typenoscript",
"plugin:@typenoscript-eslint/recommended-requiring-type-checking",
"prettier",
],
rules: {
"prettier/prettier": "error",
"@typenoscript-eslint/consistent-type-assertions": [
"warn",
{
assertionStyle: "angle-bracket",
},
],
"@typenoscript-eslint/no-explicit-any": "off",
"node/file-extension-in-import": [
"error",
"always",
{ tryExtensions: [".js", ".json", ".node"] },
],
"node/no-missing-import": "off",
"node/no-unpublished-import": ["off"],
"import/no-unresolved": "error",
"import/no-named-as-default": "off",
"@typenoscript-eslint/no-unsafe-assignment": "off",
"@typenoscript-eslint/no-unsafe-member-access": "off",
"@typenoscript-eslint/no-unsafe-call": "off",
"@typenoscript-eslint/no-unsafe-argument": "off",
"@typenoscript-eslint/no-unsafe-return": "off",
"@typenoscript-eslint/unbound-method": "off",
},
settings: {
"import/parsers": {
"@typenoscript-eslint/parser": [".ts", ".tsx"],
},
"import/resolver": {
typenoscript: {
alwaysTryTypes: true,
typenoscript: true,
node: true,
},
},
},
};


Кроме того, нужно сделать отдельный tsconfig специально для ESLint. А если у одной из этих библиотек выйдет новая большая версия, то всё вообще перестанет работать, пока другие не добавят совместимость.

В языках типа Elixir или Rust задача форматирования кода решается одной встроенной командой. Dixi.
😱6👍21
Ну, и дополнение к посту выше. В общем-то, я не хочу, чтобы это выглядело, как "наброс" (как выразился один из читателей). Я вообще-то за набросами никогда не был замечен.

Это вполне осознанная оценка, основанная на достаточно большом опыте. Впервые с JS я столкнулся ещё до того, как нам рассказали, что такое AJAX, после чего появился мега-костыль из криптонита под названием jQuery (между прочим, он используется на очень многих сайтах до сих пор). По нему тогда реально издавали целые книги, причём довольно толстые.

Потом нам рассказывали, что нужно срочно переходить на backbone, потом появился angularjs, а потом - бац - и новая версия angular оказалась абсолютно несовместимой с предыдущей. Потом фреймворки стали сыпаться прямо как из рога изобилия: их было столько, что люди заводили целые темы на форумах, чтобы понять, что учить.

Это не говоря о всяких решениях типа grunt, webpack и прочих, которых тоже существует изрядно. Потом грянул TS, который должен был решить все проблемы, а затем новая история - CommonJS vs ESM. Да, их можно подружить, только зачастую все плюют и бросают это дело.

Да много чего ещё можно рассказать... Но, честно говоря, я не хочу тут устраивать поле боя. Если вам нравится этот язык, то используйте на здоровье. Но мне он не импонировал никогда, и теперь ситуация не изменилась. Честно говоря, если бы мне сказали, что писать можно только на JS, то я бы послал к чёртовой матери всю разработку и переквалифицировался бы в управдомы.
😁11👍10👌3🤯1
А помните, раньше нужно было просто показать, как поменять местами значения двух переменных без использования третьей? И всё - уже король. https://www.youtube.com/watch?v=KJoPIgg17U4
😁5🌚4👍1🔥1
Это ОБНОВЛЁННЫЙ урок по Solidity и Hardhat, в рамках которого мы узнаем, как начать работу с этой платформой и чем она может помочь. Мы научимся писать автотесты, узнаем про Mocha, Chai и Ethers 6, а также про важные особенности данного процесса. Также разберём Typechain.

https://www.youtube.com/watch?v=GD6fz56-cEQ
🔥18👍21👏1
Друзья ⚠️ Стрим по ИИ придётся перенести на завтра, у нашего гостя технические сложности. Прошу прощения 😒
🫡4👍2👏1😱1
Выходные, так что можно расслабиться 😜

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

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

Из анимации:

- Suzume no Tojimari
- Puss in Boots: The Last Wish

Из игр:

- Trails of Cold Steel IV (The Legend of Heroes)
- Trails into Reverie (The Legend of Heroes)
- We Were Here Together

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

Из музыкальных альбомов:

- Drif (Heilung)
- The God Machine (Blind Guardian)
- Undir Köldum Norðurljósum (KÆLAN MIKLA)

То ли ещё будет... 😄
🔥15👍5🏆1
Знаете, друзья, я тут набрёл на довольно смешную вещь в твиттере. https://twitter.com/oldLentach/status/1688644558572105730

Так вот, есть у Веллера такой рассказ про Лаокоона и его фаллос (написан ещё бог знает когда). Очень советую почитать, смешно. Так вот это тот самый случай и есть. Меня прямо смех разбирает, правда на фоне чрезвычайно омерзительного настроения на фоне... да на фоне всего, честно говоря.

Улыбайтесь, господа. Улыбайтесь!
4👍2