19
.
12
.
2023
13
.
12
.
2023
Conferences
Ruby

A look back at Friendly.rb 2023

Cezary Kłos
Ruby Developer

This year, we had the incredible opportunity to attend the first-ever Friendly.rb Conference in Bucharest, Romania. With its focus on fostering a friendly and inclusive Ruby community, the conference proved to be a truly educational and motivating. Stay a while and see our experience and key takeaways from this remarkable gathering of enthusiasts.

Taking advantage of the fact that the organizers have just published recordings of presentations on the Friendlyrb Youtube Channel, I would like to share our experience and key takeaways from this remarkable gathering of enthusiasts. Stay awhile and listen before heading to these insightful recordings!

Day 1

Venue: Event was held in independent theatre Apollo 111, conveniently placed next to the Old Town. Great, cameral place where you could sit at next to the speaker on the stage. Dimmed light, comfortable seats and great coffee made it a pleasure to spend time there. It also created inviting atmosphere to chat with each other.

The day started with Adrian greeting attendees, presenting agenda and speakers.

Talk 1: Xavier Noria - Zeitwerk Internals

The day started with dive into inner workings of Zeitwerk library by it’s author, and member of Rails core team Xavier Noria. Zeitwerk is a code loader that replaced classic autoloader in Rails 6 and since Rails 7 it is the only option available. It is responsible of loading classes and modules on demand (autoloading) or upfront (eager loading).

The presentation was a technical, deep dive into the mechanisms that run the library. However, Xavier started by explaining fundamental principles to establish a baseline, upon which he introduced more advanced concepts. Thanks to this approach, the presentation was useful for everyone, regardless of their knowledge of Ruby.

Talk 2: Svyatoslav Kryukov - Let there be docs!

Next on stage was Svyatoslav Kryukov from Evil Martians, convincing us to try the documentation-first approach to Rails API development. He compared different ways of writing API and its documentation, pointed out their PROS and CONS, and highlighted the respective tooling. These approaches were: manually written documentation, code first, test first, and documentation first.

Some key points to consider are: start small with one endpoint, stick to the OpenAPI format, use proper tools, write documentation, and consult it before proceeding with any further work.

All of this was sprinkled with humor and AI-generated pictures. You can find the presentation and the link to resources here.

Lightning talk: Lorin Thwaits - Build with Brick

During live coding session Lorin Thwaits presented his gem Brick. Brick can turn any existing relational database into Rails curd application within minute in RAM without any code. The gem can, among other things: draw an ERD schema, expose API, generate models, migrations and seeds. It also neatly integrates with “admin panel” gems like ActiveAdmin, Trestle, Forest, and Avo.

Talk 3: Naijeria Toweett - React-ing to Rails

The third talk of the day was presented by Naijeria Toweett, who shared her inspiring journey of discovering and ultimately falling in love with Ruby on Rails. Naijeria captivated the audience with her success story, of building an application for a non-profit organisation. What made her accomplishment even more remarkable was the fact that she managed to complete the project in just 3 weeks, after initially struggling for a period of 6 months while using React and Node.js for development. Her story is a great example of how embracing new technologies can have a powerful impact in the world of software development. Keep up the amazing work!

Talk 4: Tom de Bruijn - Crafting elegant code with Ruby DSLs

We attended Tom de Bruijn's talk on DSL and metaprogramming. He explained how DSL can make projects more readable and user-friendly. He also showed examples of everyday DSL usage, like RSpec.

Tom demonstrated how to create a custom DSL by rewriting code. He discussed dynamic definition for methods and using blocks with metaprogramming, using blocks with DSL, and DSL classes like Puma::DSL.

Tom also talked about using modules and customisation potential with prepend, and he explained how to create plugins. His talk showcased the power and flexibility of DSL and metaprogramming, highlighting their potential to simplify and enhance coding projects.

Talk 5: Irina Paraschiv - Mental Health for developers

Irina highlighted the often neglected subject of mental health. She explained that, similar to physical health, mental health is not a one-time matter, but rather requires ongoing attention.

The presentation included the "The Game of Good Mental Health," in which Irina discussed four key areas for maintaining optimal mental well-being. The audience showed significant interest in this topic, as evidenced by the numerous questions posed by attendees following the presentation.

Talk 6: Nick Sutterer - Beyond the Service-Object

Nick mentioned the concept of abstraction levels and how they are present not only in programming but also in various aspects of life. He emphasized the importance of balancing abstractions to ensure their usefulness.

In the context of Rails, Service Objects serve as an abstraction that helps us manage business logic throughout the project. They allow us to separate logic from other concerns, making it easier to maintain and test.

This line of thinking led Nick to create the Cells library and later on Trailblazer. He compared them to the dry-monads and Interactor gems and introduced the recently published Trailblazer PRO tracing tool.

Although we had the opportunity to listen to this presentation at the Ruby Warsaw Community Conference in July, Nick made significant changes to the slides and added more interesting details, along with plenty of jokes. It was, as always, a great time with Nick :)

City walk tour

After a full day of presentations, we enjoyed an hour-long walking tour. There were two topics to choose from: "Old Town Legends & Stories" or "Communism vs Monarchy". Both tours concluded at the iconic rooftop bar, Linea - Closer to the moon, where an afterparty filled with more interesting discussions and networking occurred.

Day 2

Talk 1: Elena Tanasoiu - Service Modeling at GitHub

The second day began with presentation that really left an impression on us from Elena Tanasoiu who spoke about Service Modeling at GitHub. It's no secret that GitHub is the biggest Rails monolith in the world, and Elena's talk focused on the challenges and strategies of optimizing such a mammoth system. She shared the steps to identify issues and bottlenecks, providing us with invaluable insights from inside the world's leading software development platform.

Elena revealed some fascinating stats - 40% of rows are fetched from a single table and around 50% of all requests are handled by just five controllers. These figures shed light on the potential hotspots for optimisation. She also discussed how GitHub relies on Unicorn, which added another layer of depth to the conversation. Elena's talk was a clear demonstration of the power of strategic optimization in handling large scale systems.

Talk 2: Jason Swett - Getting the Most Out of ChatGPT

Jason demonstrated how we can leverage the potential of ChatGPT in our day-to-day development. He made an interesting point about how our expectation that ChatGPT will write complete software is naive. Instead, he contrasted it with how we actually create software - in small, incremental pieces that are reviewed and corrected before being released.

He also shared a valuable tip of instructing ChatGPT to ask questions before providing an answer. This prevents ChatGPT from making assumptions and allows it to discover problems that we may not be aware of.

PS. Jason has a snail-mail programming newsletter, check it out!

Talk 3: Ayush Newatia - Turbo Native to make hybrid apps that don’t suck

“Hybrid apps sucks” - it’s a well known fact back from 2009.  Ayush debunked some common misconceptions during his talk. Over the years, mobile devices have greatly improved their JavaScript processing speed. The introduction of libraries like Turbo Native and the recent addition of Strada have further enhanced hybrid app development.

Ayush shared some hot tips how to mix native parts with hybrid to speed up development but keep the native feel of the app.

Talk 4: Lucian Ghinda - State of the Rubyverse

After the lunch break, Lucian took us on a tour of the wide world of Ruby. It's not just limited to CRuby and Ruby on Rails.

First, he covered the classic CRuby and its recent new features. Then, he introduced us to a variety of different Ruby implementations, including FullStaq Ruby, JRuby, TruffleRuby, mruby, and DragonRuby. Next, Lucian delved into web frameworks, showcasing notable examples such as Hanami 2, Sinatra 3.1, and Roda. After that, he touched some popular gems and tools. Finally, he touched on desktop libraries like Scrape and Glimmer.

A significant portion of the presentation focused on new features in CRuby, such as endless functions, pattern matching, and Data type. Lucian encouraged us to embrace these features in our projects instead of avoiding them or completely restricting them with Rubocop.

Lightning talk: Julian Cheal - Doing music with Ruby

Julian Cheal demonstrated how he programs music using Ruby during a live coding session. As unusual as it may sound, he utilized Sonic Pi and Ableton to compose music. His performance received a lot of applause.

Talk 5: Gabriela Luhova - The Power of We

In her talk "The Power of We," Gabriela Luhova highlighted the value of team unity. This topic took on a new dimension during the pandemic, prompting Gabriela's team to address their dynamics head-on with insights drawn from "The Five Dysfunctions of a Team".

To gain a deeper understanding of their team dynamics, they further explored with two other quizzes: the "16 Personalities Test" and "12 Types of Underappreciated Software Developer". Armed with these insights, they started making changes to strengthen their team dynamics and enhance their performance. These changes touched communication style at work, and included  unique team-building activities - from culinary meetups to city tours and karaoke nights.

She described their culture as being "family supporters", creating an environment where employees can leave work feeling fulfilled and relaxed, without the need to unload work stress onto their families. She also recommended the book "It Doesn't Have to Be Crazy at Work", reinforcing her commitment to a balanced and stress-free work culture. Gabriela’s talk was a powerful testament to the impact of a strong and supportive team dynamic on a company's success.

Lightning talk: Yaro Shmarov - Hotwire

The last lighting talk was given by Yaro, who is a big promoter of Hotwire. He showed us how and when to use it as a replacement for time and money-consuming frontends built, for example, in React.

Talk 6: Jeremy Smith - Making It as an Indie Developer

Jeremy Smith's keynote, "Making It as an Indie Developer," was a treasure trove of practical advice and insights. He presented a comprehensive framework for aspiring indie developers, outlining the key stages in the journey from being an employee to becoming self-employed.

Firstly, Jeremy stressed the importance of understanding your 'why'. This becomes the foundation of your motivation, the driving force that pushes you forward in this challenging journey.

Next, he talked about the transition phase. From marketing and sales to project management, Jeremy highlighted the essential skills that developers need to master. He suggested proposing a transition to your current employer, such as reducing working hours, rather than making a sudden leap into self-employment.

Jeremy also touched on the significance of improving daily work performance and protecting your energy and emotions. He stressed the importance of managing oneself, a skill crucial for navigating the ups and downs of indie development.

In the quest for customers, Jeremy advised mapping your skills to market needs and going where the customers are. He also spoke about perfecting your pitch and thinking like a business, underlining the need for a commercial mindset in the world of indie development.

Overall, Jeremy's keynote was a roadmap for anyone aspiring to make it as an independent developer.

Day 3 - trip to Sinaia

On the third day, we met at the train station at 9:20 and took the train to the beautiful city of Sinaia, nestled in the valley between two mountains. The weather was perfect for our trip. In Sinaia, we visited a 15th-century monastery and the stunning Peleș Castle, a Neo-Renaissance palace built between 1873 and 1914.

After immersing ourselves in Romanian culture and history, we walked to a cable car that transported us from an altitude of 1400m to 2000m, reaching the summit of Furnica (2103m). From there, we were treated to a breathtaking panorama.

After descending in the cable car and returning to Sinaia, we discovered that the Siana Forever Festival was taking place. We enjoyed live music, delicious food, and watched a parade.

It was a very valuable conference to attend. We got to learn exciting things and meet wonderful, passionate people. All held in beautiful country with a rich history to explore. If you missed it, do not worry. There will be the next edition in 2024, so get your tickets until you can — just like we already did!

PS. Huge thank you to the organizers of Friendly.rb for permission to use the photos in this post.

Cezary Kłos
Ruby Developer

Check my Twitter

Check my Linkedin

Did you like it? 

Sign up To VIsuality newsletter

READ ALSO

How to become a Ruby Certified Programmer Title image

How to become a Ruby Certified Programmer

14
.
11
.
2023
Michał Łęcicki
Ruby
Visuality
Vector Search in Ruby - Paweł Strzałkowski

Vector Search in Ruby

17
.
03
.
2024
Paweł Strzałkowski
ChatGPT
Embeddings
Postgresql
Ruby
Ruby on Rails
LLM Embeddings in Ruby - Paweł Strzałkowski

LLM Embeddings in Ruby

17
.
03
.
2024
Paweł Strzałkowski
Ruby
LLM
Embeddings
ChatGPT
Ollama
Handling Errors in Concurrent Ruby, Michał Łęcicki

Handling Errors in Concurrent Ruby

14
.
11
.
2023
Michał Łęcicki
Ruby
Ruby on Rails
Tutorial
Recap of Friendly.rb 2024 conference

Insights and Inspiration from Friendly.rb: A Ruby Conference Recap

02
.
10
.
2024
Kaja Witek
Conferences
Ruby on Rails

Covering indexes - Postgres Stories

14
.
11
.
2023
Jarosław Kowalewski
Ruby on Rails
Postgresql
Backend
Ula Sołogub - SQL Injection in Ruby on Rails

The Deadly Sins in RoR security - SQL Injection

14
.
11
.
2023
Urszula Sołogub
Backend
Ruby on Rails
Software
Michal - Highlights from Ruby Unconf 2024

Highlights from Ruby Unconf 2024

14
.
11
.
2023
Michał Łęcicki
Conferences
Visuality
Cezary Kłos - Optimizing Cloud Infrastructure by $40 000 Annually

Optimizing Cloud Infrastructure by $40 000 Annually

14
.
11
.
2023
Cezary Kłos
Backend
Ruby on Rails

Smooth Concurrent Updates with Hotwire Stimulus

14
.
11
.
2023
Michał Łęcicki
Hotwire
Ruby on Rails
Software
Tutorial

Freelancers vs Software house

02
.
10
.
2024
Michał Krochecki
Visuality
Business

Table partitioning in Rails, part 2 - Postgres Stories

14
.
11
.
2023
Jarosław Kowalewski
Backend
Postgresql
Ruby on Rails

N+1 in Ruby on Rails

14
.
11
.
2023
Katarzyna Melon-Markowska
Ruby on Rails
Ruby
Backend

Turbo Streams and current user

29
.
11
.
2023
Mateusz Bilski
Hotwire
Ruby on Rails
Backend
Frontend

Showing progress of background jobs with Turbo

14
.
11
.
2023
Michał Łęcicki
Ruby on Rails
Ruby
Hotwire
Frontend
Backend

Table partitioning in Rails, part 1 - Postgres Stories

14
.
11
.
2023
Jarosław Kowalewski
Postgresql
Backend
Ruby on Rails

Table partitioning types - Postgres Stories

14
.
11
.
2023
Jarosław Kowalewski
Postgresql
Backend

Indexing partitioned table - Postgres Stories

14
.
11
.
2023
Jarosław Kowalewski
Backend
Postgresql
SQL Views in Ruby on Rails

SQL views in Ruby on Rails

14
.
11
.
2023
Jan Grela
Backend
Ruby
Ruby on Rails
Postgresql
Design your bathroom in React

Design your bathroom in React

14
.
11
.
2023
Bartosz Bazański
Frontend
React
Lazy Attributes in Ruby - Krzysztof Wawer

Lazy attributes in Ruby

14
.
11
.
2023
Krzysztof Wawer
Ruby
Software

Exporting CSV files using COPY - Postgres Stories

14
.
11
.
2023
Jarosław Kowalewski
Postgresql
Ruby
Ruby on Rails
Michał Łęcicki - From Celluloid to Concurrent Ruby

From Celluloid to Concurrent Ruby: Practical Examples Of Multithreading Calls

14
.
11
.
2023
Michał Łęcicki
Backend
Ruby
Ruby on Rails
Software