00:00:00
Hey!
00:00:23
Hello! Alright, great. Hi everybody!
00:00:28
I'm Bradley Schaffer, also known as Soul Cutter on the internet, Twitter, GitHub, and pretty much everywhere else.
00:00:34
I work for a company called Table XI. We're a small to medium-sized consultancy based in Chicago, Illinois, and we solve problems.
00:00:40
So, if you have any problems, feel free to talk to me or email me at [email protected].
00:00:46
I am also a contributor on the RSpec core team. While I'm not one of the more active contributors right now, I genuinely enjoy RSpec.
00:00:55
As part of my initiation as a contributor, I learned many RSpec secrets, which brings us to the topic of this talk.
00:01:02
This talk is about things we don’t tell users of RSpec that we use to write awesome tests. You are about to be let in on the first secret.
00:01:14
Many people ask me how to test code that includes yields. What many don’t know is that you can easily test this using the yield matchers included in RSpec expectations.
00:01:27
I have included a few examples here of different ways you can test yielding.
00:01:34
It also works with composite matchers, so if you see an example with a hash, anything that implements triple equals will work for matching the arguments to a yielded block.
00:02:00
This is the first secret: you can test this stuff quite easily without needing any fancy tricks.
00:02:12
Now, this next one is one of my favorite secrets. It's a feature called aggregate failures.
00:02:19
For a long time, the rule of thumb is that there should only be one expectation per test. However, I believe this can make your tests harder to read.
00:02:40
While it works well and the tests actually run, the automatically generated documentation can become confusing. For example, saying 'user when registered should be registered' is tautological and doesn't make much sense.
00:02:52
Aggregate failures give you a way to write tests that contain multiple expectations. It will let you know about each failure within that example without stopping at the first failure.
00:03:16
There are two ways to trigger this feature. The first is by tagging your example with the word 'aggregate_failures'. This will cause the test to run through all the expectations in that example.
00:03:40
If you're not familiar with the RSpec example metadata system, you can come talk to me later; it's a handy feature. If it feels too magic, you can also use the aggregate_failures do block to ensure that all expectations run.
00:04:11
The output you get from using aggregate failures is much clearer. It outlines each line that fails, allowing for a more concise understanding of what went wrong.
00:04:23
I find this especially valuable when your test setup is expensive, like when running Selenium tests. It saves substantial time, as these features are built into RSpec, and require no special configuration.
00:05:08
The next topic involves something that requires some special configuration from the spec helper.
00:05:19
It's important to gather your thoughts, especially if you're running on only four hours of sleep and trying to recall everything learned at the Mountain West Ruby Conference, which is just a mix of economics and technology.
00:06:10
This is my last chance to speak at Mountain West Ruby conference, so I decided to title my talk 'Reevaluating Value.'
00:06:15
The reason for this title is that our understanding of value often seems skewed toward classical economics notions of supply and demand.
00:06:27
For example, things that are scarce tend to be viewed as valuable, like gold, which is hard to find and therefore precious.
00:06:42
Diamonds also illustrate this point, as the De Beers company intentionally restricts supply to enhance perceived value.
00:07:00
However, a different perspective on value is that, in some situations, abundance creates value instead of scarcity, particularly when considering items that foster connections and enable information exchange.
00:07:27
For instance, if in the 1970s I owned the only fax machine in the world, that device would be essentially worthless due to its lack of connection capabilities with others.
00:08:02
However, after gifting the fax machine to a friend, the value of both machines increased as more machines allowed for communication between users. This exemplifies how abundance can lead to increased value.
00:08:34
The same principle applies to phones and computers, where having multiple items creates worth through their ability to connect people and share information.
00:09:05
Thus, an abundance of connected devices, like the countless brain cells in a human mind, yields immense value when used collectively.
00:09:39
Thinking about the value of the Mountain West Ruby Conference, the videos may be accessible online, but true value comes from personal interaction and connection.
00:09:53
Creating meaningful exchanges and discussions here is what truly enriches the experience.
00:10:04
For example, I had a memorable conversation with Matt, a presenter, after the conference, allowing me to connect with another member of the Ruby community.
00:10:12
Through conferences, I've formed connections that directly contribute to my learning and growth in this field.
00:10:35
Additionally, I remember once reaching out to Jim Wyrick, the creator of the XML Builder gem, about improvements I thought were necessary.
00:10:45
To my surprise, he responded, clarified my misconceptions, and offered valuable insights, thus creating a meaningful connection.
00:11:06
I express my gratitude to Mike for fostering a community that creates connections like these and produces significant value.
00:11:15
I attribute my professional success to my engagement with tabletop role-playing games (RPGs).
00:11:27
RPGs have taught me to tackle seemingly impossible situations, collaborate as a team, articulate my thoughts, and appreciate individual contributions.
00:11:39
In essence, I want to present a bit about the structure of an RPG session and its relevance to work.
00:11:50
In RPGs, the Dungeon Master (DM) orchestrates the game while the players act within the story, making decisions that influence the game world.
00:12:00
A successful RPG involves interactions among the players that create a rich narrative experience while utilizing role mechanics.
00:12:19
In RPGs, various attributes and skills are used to determine the success of actions, emphasizing the importance of collaboration.
00:12:32
As you navigate through different scenarios, you learn to articulate your strategy and engage directly with the collaborative process of storytelling.
00:12:50
Ultimately, the essence of Dungeons and Dragons (D&D) lies in storytelling and interactions among players.
00:13:01
The storytelling element brings depth to the experience, showing what's truly valuable about collaboration.
00:13:13
In my current D&D campaign, I portray a whimsical half-dragon barbarian called Swift. My character’s unique qualities create interesting dynamics and adventures when paired with a mute monk named Drusilla.
00:13:45
The interactions and antics that arise in these sessions highlight the importance of collaboration and creativity.
00:14:00
In conclusion, I value storytelling and the time I spend with friends more than technical minutiae such as rules or specifications.
00:14:20
D&D fulfills my need for problem-solving and teamwork, as it creates opportunities to share and experience diverse stories.
00:14:41
Thank you for listening!
00:15:11
Next, I'm Ben Eggett. I'll share some advice on starting and improving your career in the tech industry.
00:15:32
First, understand why we write software: to enrich people's lives.
00:15:47
When starting a career, you often feel hesitation, apprehension, and a lack of confidence.
00:16:04
My opinion is that technical skills are overrated; personality and passion for learning are more crucial.
00:16:18
Empathy is essential. It helps you understand other people's feelings and how they impact the software we create.
00:16:38
Practice humility; recognizing that you don’t know everything will encourage you to continue learning.
00:16:55
Be open to learning about new technologies without committing to any of them prematurely.
00:17:14
Avoid tribalism; inclusivity is key in our community.
00:17:26
Get involved in events and make use of any learning opportunities that come your way.
00:17:40
Sharing knowledge and helping others will contribute to your growth as a developer.
00:17:50
Mentorship is vital. You cannot grow alone; surround yourself with those who support and guide you.
00:18:02
Don't let anyone discourage you. Show them that you can succeed through your actions.
00:18:12
Now I want to shift topics and share about a programming language I've come to love: Crystal.
00:18:28
It's a statically typed language with a friendly syntax resembling Ruby. It compiles into efficient, native code.
00:18:45
Crystal has a modern standard library, allowing creation of web applications quickly, and it offers extraordinary speed.
00:19:16
You can easily obtain the string representations of your code through various methods. The built-in HTTP client and server capabilities are also beneficial.
00:19:40
I encourage you to check it out; whether you're a Ruby developer or not, you may find working with Crystal refreshing.
00:20:09
Finally, I'd like to give thanks to Mike and the community for fostering such a welcoming environment. It’s something special.
00:20:33
I have enjoyed my experiences attending the Mountain West Ruby Conference, and I appreciate the opportunity to share my insights.
00:20:45
Hi, I'm Andrew Butterfield. This is my second Mountain West Ruby Conference, and I want to talk about searching for the unattainable.
00:21:10
Reflecting on some legends you may recall from school, such as Sir Walter Raleigh's pursuit of El Dorado and Ponce de León's quest for the Fountain of Youth.
00:21:29
These explorers had resources, crews, and knowledge, yet they all failed to discover what they sought. Spoiler: These things don't exist.
00:21:46
As we navigate our own pursuits, we often feel that there are unattainable goals or obstacles we face.
00:22:06
One reason for this could be what I call the 'agile gambit,' where we sometimes misunderstand agile principles and neglect some beneficial methods from traditional approaches.
00:22:19
Our industry has shifted significantly towards agile development, and in doing so, we must remain faithful to its benefits.
00:22:36
Another phenomenon is the 'street lamp effect,' signifying that we may search for solutions where they aren't present while ignoring other viable avenues.
00:22:55
Lastly, moving into complacency can lead us to diminish our capacity for improvement.
00:23:09
Recognizing these elements can help us attain those seemingly unattainable goals.
00:23:23
Thank you for your time, and I hope these thoughts resonate with you!