00:00:20.519
I just wanted to do a quick recap of the 5K and how it went today. We had a really good time. We had 21 runners, which I think is the most we've ever had, or maybe a tie for the most. The weather was nice at 50 degrees, and we actually missed the rain by just a few minutes. It started to rain right after we finished and people were leaving. Oh, and there was a panda. We'll get to that in a moment.
00:00:55.039
So I'm going to share a couple of pictures. Here’s everyone kind of gathering around, waiting for Ben maybe to show up. We actually started without him, but he did catch up and came in third place. If he had started with us, I think he would have won. You'll notice in the pictures that we had a panda hiding there, and we actually captured some footage of the elusive panda running around, with the handler trying to capture it.
00:01:36.240
We had a great time at the event. One more thing I want to point out is that we had a lot of swag available. We have a few more shirts, specifically the one I'm wearing. We have about four or five more larges and a couple of extra larges or double extra larges. So if you're interested, just come up and see me by the door after the talk.
00:02:04.720
Lastly, I want to say thanks to Instructure, my employer, for sponsoring this event. It was a lot of fun, and we hope to do it again next year. For those of you that participated or care, we have the race results posted here, so you can check your times. Also, check us out on GitHub, where we have a lot of interesting projects going on. Thanks again to Ben and everyone else who helped make this happen.
00:02:27.599
Now, it's story time, very brief lightning talk. You can code in many places: you can code on rocks, on docks, on a boat, with some goats, actually cows, near a train, or on a plane. You can code when it's still or when it's chill. You can code in the green or by a stream. You can code by the light or just before night. Don't just code in your lair; write code everywhere. Last summer, when I worked on talks for Cascadia and other conferences, Ryan and I visited most of these places and wrote code at each one of them.
00:03:31.800
If you love something, do it as many places as possible. It's awesome. Thank you. Hi, I’m Ryan Florence and I work with Jon on his team at Instructure. I’m not a Ruby guy; I’m more of a JavaScript guy. But I wrote a lot of Ruby a couple of weeks ago. I’m in charge of our CSS, and every day, someone comes to me and asks, 'How do I build a table to look like this?' I got tired of answering those questions and decided to save everyone time.
00:03:46.799
So we built a tool called Dress Code. It's a Ruby gem that you can include in your gem file. It's mostly a command-line tool. The way it works is in your project, you define a style guide YAML file, which you can name whatever you want. It just has a few properties to find the stylesheets you want to pull documentation from and a couple of other things.
00:04:13.439
So, if I hand it the config file that I want and hit enter, it generates your style guide. I’ve got a style guide here. You might be wondering where we got this style guide. If I go to my stylesheets folder and mark up my CSS with the @styleguide directive and the name of the component, then just give it a sample block for your HTML to bring it to life. Dress Code not only shows the demo, but it also renders it so that people can copy and paste this stuff with confidence.
00:04:55.039
It's also great for developing your CSS components because you just write your test case next to your CSS and refresh the page. You can even do custom templates. For example, in our app in Canvas, I've got a custom template that gets put into our app views folder and then rendered along with all our stylesheets, JavaScript behaviors, and everything else.
00:05:29.919
But how do we get the table with green inline styles? Sorry about that. Hi, I’m Nick Howard. I work on a project called Mira, where I do a lot of JVM bytecode writing. I wanted to practice my skills, so I decided to make a calculator called the Oh God Y Calculator. This was inspired by how we often use heavy interpreted languages like IRB for calculations, pulling in a huge runtime, which feels inefficient.
00:06:19.599
The Oh God Y Calculator allows you to take a calculation expression, parse it, compile it to bytecode, and then execute it. The runner looks kind of like this: you are in a loop, printing a prompt; if someone types 'exit', you exit; otherwise, you take the expression, compile it, and put the result of evaluating it. It doesn’t handle everything well yet, and it's definitely a work in progress.
00:06:44.840
How it works is that Keg gives you the ability to define a grammar and specify actions when the grammar is encountered. For instance, if there’s an integer, it pushes it onto a stack, and when there’s an addition operation, it puts it onto the stack as well. If you’ve ever written assembly or a compiler, it's similar to that.
00:07:14.680
There's a lot of tricky setup involved because I'm using a library called BScript to write all the bytecode. Basically, I'm building a class file in memory and writing all the bytes to it before loading it and having JRuby execute it. That’s the gist of it.
00:07:58.479
So, while I was trying to think of a good idea to pursue during the hackathon, in the vein of Ryan and Aaron Patterson's talk at RailsConf about the worst ideas ever, I thought of this project. I know I’m not presenting anything impressive, but it’s something.
00:08:43.599
Many of you are familiar with what Array#map does. You take an array, pass a block to it, and it returns a collection resulting from calling that block on all the elements. You can also use a shorthand syntax, using an ampersand followed by a symbol for the method you want to call. So what’s the point of the ampersand? I came up with an idea a long time ago to simplify this.
00:09:06.880
If I could get rid of it altogether, then I could pass a symbol to map instead of the block. I'm passing the same amount of information, and actually it’s more because that opaque blob of code could have side effects. I want to directly instruct it to apply this to all elements and return the results.
00:09:34.560
It seems like a great idea: less typing, fewer hoops to jump through, possible optimizations—sounds good to me! I pitched this idea to Eric Hodel, aka Dr. Brain, and Aaron Patterson, better known as Tender Love, at Seattle’s RubyConf, but they thought it was the stupidest idea ever.
00:10:55.620
I should mention that I haven’t written any C code since I was in college, and just last night at 2 a.m. I glanced at Ruby's C code and was confused, so I’m not an expert here. What I ended up with is a very simple structure: I initialize an array, loop over it, and push onto the array the result of yielding numerous elements.
00:11:23.720
Unfortunately, my new version of the code is too long to fit on one slide; you can look at it afterward if you want. But I turned the Ruby method 'collect' into one that accepts arguments, which didn’t happen previously. I also added nested if-else statements, which are pretty neat. The structure is mostly the same, though.
00:11:54.679
So I wrote this benchmark: I took an array of ten things and called `to_i` on it. Because, you know, calling `to_i` on an integer should be almost a no-op. The preliminary test I ran had the block syntax at about a second. When I ran the code before my modifications, the proc version did slightly better than it.
00:12:15.080
After applying my change, here’s the updated test of the block syntax versus my implementation. You can see how using my version is significantly faster, especially when mapping over an array of ten things a million times.
00:12:47.920
As a result, you absolutely should apply this patch to the latest version of Ruby. It really helps in improving performance, and it sold me on the great potential for optimizing code.
00:13:01.159
Thank you. Hi everybody. I was eavesdropping on some conversations earlier today, and it was said that all these lightning talks are about the presenters, but this isn't really about me. Instead, I decided to turn this lightning talk into a lightning call for help.
00:13:11.399
Last night, after Ryan's talk and during the hackathon, I was thinking about how to deal with Active Record objects. Has anyone played with Verus? The gem Verus is really powerful. It lets you include a module in your class and gives you model-like behavior without all that table nonsense.
00:14:03.920
Let me show you where I started and how I could use some help naming something. We discussed the challenge of naming something when creating an aggregate class. Is anyone familiar with domain-driven design? I’m thinking about aggregate classes.
00:14:27.920
So I have a root aggregate class A, and inside it, I want to have class B with certain attributes. I would like to use setters and getters to pass through to the underlying model while also encapsulating the validations. The end goal is to have class B include Verus for the attribute syntax and then validate the fields below.
00:15:05.440
I want to know what to call this class. We’ve got aggregate class A, and I need help naming that inner class. You'll notice that on line eight, I'm still not specific about its purpose. So before we wrap up in the next few minutes, I’d like you to shout out some suggestions. Keep them clean!
00:15:42.759
I just want to be able to use some block syntax and I want line eight to generate the class for me. I have this code working perfectly, even though it might disappear in the final implementation. This is how I've wired things up. I don't need the class declaration for now because I can extend the module, but that will change once I get the database table set up.
00:16:20.720
The block syntax that I want to utilize is as follows, and this module does some intricate things like building an anonymous class and setting constants. I apologize for the late-night rambling, but if you see something you don't like, please correct me. I hope everyone really enjoys it, but I could really use help figuring out what to call it.
00:16:39.599
Okay, so that's the challenge: what would I call this inner class? Imagine class A as the aggregate class, and class B in this case will hold attributes as part of a quote which may include something like dates. My intention here is to use the gem Wicked to create a wizard-based step process where each little class can validate itself without resorting to using a cumbersome state machine.
00:17:57.759
I was thinking these kinds of things while trying to figure out a name for the aggregate. The challenge rests with its noun-verb nature: aggregate could be both a noun and a verb. This language issue is frustrating, as is the struggle with finding the right terminology.
00:18:32.080
Even drawing a blank on useful names, I even considered the British thesaurus. If anyone thinks of a relevant suggestion for a name, please let me know! I’m leaning towards something scalable that can succinctly describe its purpose.
00:19:01.200
To tie this back to the aggregate concept: I’d like to clarify that while I'm hoping for a name that’s descriptive, I also want to facilitate using it easily. Hence, I'm after some syntax that could be something like 'aggregate me' or 'create aggregate'. I wish naming it was easier, and… yeah, because naming classes can be quite the trouble.
00:19:40.759
Thank you for helping out with this. Here's my contact info, and I’d love feedback!
00:20:00.160
Now let me pull up my presentation. My talk is titled 'Hexagonal Architecture with Rails'. This is really just an invitation to have a discussion. You can reach me on Twitter at pad Wasabi, or by my handle. I want to ask, raise your hand if your primary app is a standard Rails app with a database.
00:20:11.840
Alright, maybe half the crowd. How about if you’ve done a little scaling, a load balancer across some databases—fewer hands. And are there any who work in larger shops with some databases carrying and some not balanced? How many of you are working with distributed services in the cloud? Quite a few.
00:20:34.640
So, let’s shout out to some people I used to work with at Marcio, who I hope are watching online. When the only tool you have is a hammer, every app looks like a nail. I appreciated the recent talks on how to break up Rails apps, but instead, I want to discuss building apps outside of Rails.
00:21:03.200
There’s a concept known as hexagonal architecture, developed by Alistair Cockburn. There’s a good talk from Ruby Midwest in 2011 called 'Architecture: The Lost Years' for more information.
00:21:15.200
Hexagonal architecture explains that your application shouldn’t be boxed in its surroundings but should function independently from any service it's tied to.
00:21:30.960
It allows designing your application such that input and output interactions aren’t dependent on a specific method of implementation. For example, you may want a way to receive input via a command-line or through queuing systems.
00:22:14.200
If you’re building a large system, you want to consider all components and how they fit together. Therefore, I wanted to open a discussion on this topic and gather some insights or experiences.
00:22:37.920
Okay, shifting topics, today I’m going to talk about 'Taking Back Your Mental RAM' or a strategy to learn everything! First thanks to Mike for the birthday mention yesterday, while I was taking a bathroom break.
00:24:40.200
Also, a thank you to Pat and the organizers for hosting another great conference, and, of course, to Matts and others in the community for making our lives so fulfilling.
00:25:01.760
I’m Tyler Bird, a husband, father, engineer at Engine Yard, and I’m discussing getting things done—something David Allen discusses. There’s usually an inverse relationship between how much is on your mind and how much you're getting done.
00:25:41.280
He spoke about mental RAM; our cognitive capacity is limited. By writing everything down, capturing tasks in a trusted system, we can concentrate better on the tasks at hand.
00:26:27.799
Concentration is key; when you're in flow, time stands still or sometimes races by quickly. It’s important to recognize how you got into flow to return to it efficiently.
00:26:53.600
As developers, we always aim at improving and balancing the backlog of tasks, this mental RAM challenge of wanting to learn with the tasks done.
00:27:18.000
I propose a tool called Ruby Community College, a self-study social network for learning and teaching within the Ruby community, where there are modules— Campus Library and Dictionary.
00:27:54.560
The Campus Library allows you to take and leave courses—consume other experts’ courses and share your own content with the community.
00:28:39.919
The Library module isn’t just for browsing social media, but it has a curated collection of valuable resources, articles, and educational materials for enhancing learning.
00:29:13.920
The Dictionary module addresses concepts and jargon about programming, which is essential to understand as you grow as a developer.
00:29:50.200
We have a developing team currently collaborating weekly and invite other interested people to join us because we need design assistance, moderators, as we are just getting started.
00:30:25.600
Here's my contact info, reach out if you'd like to get involved.
00:30:49.160
I'm not sure this talk will resonate because I'm presenting something I shared last year at the London Sci-Fi convention. I was there to discuss Raspberry Pi, but no one had access to them!
00:31:12.679
It led to a conversation about how our computing environment has changed and how that affects new programmers. I was lucky to be of the right generation to experience the early days of computers.
00:31:57.799
The journey began with cheap home computers, which were built modestly and were personal, making programming less daunting for many.
00:32:45.520
That demand for programming and DIY knowledge has transformed through the years. Just check out this classic Research Machines 380Z!
00:33:12.799
This was my first notable experience programming where I learned a lot by deciphering lines of code.
00:33:31.800
I think the real magic of my childhood computing experience was the innocence in breaking things apart and learning how they worked.
00:33:52.600
Computers should inspire curiosity, not intimidate. Unfortunately, today’s ecosystem portrays a vastly different experience for kids today.
00:35:16.119
I often share stories, and many are familiar with the experiences and principles derived from working with the early digital technology.
00:35:33.360
Lately, there has been a resurgence in interest in processor like Raspberry Pi and new kits aimed at connecting us back with that discovery in programming.
00:36:03.840
There’s still so much to learn from that passion as we focus on improving our engagement with new technologies.
00:36:28.960
I believe it is not only important to teach skills but also to instill a love for the craft that we all have as programmers.
00:37:06.560
I also hope that with community engagement and enthusiasm, we can build an environment that allows children to express that hunger for learning and developing.
00:38:05.559
Thank you for your time! I look forward to engaging with you all in further discussions.
00:39:28.640
This brings me to a relatively quick talk I want to call 'Developer Productivity', though I might also call it ‘Anti-Productivity’ based on earlier discussions. What I'd like to present today is the theme of wasted talent and wasted productivity. A question for you all—how many in this room earn six figures or more?
00:41:50.240
I suspect most of you do, or at least have the capacity to in the near future. However, I’ve found most companies are willing to spend on salaries but not on actual productivity enhancements for developers. I’m the founder of CircleCI, and while we offer continuous integration and deployment services, we primarily focus on increasing developer productivity.
00:43:30.000
This talk will be split into two parts, one being ‘Hell is Other People’. The biggest productivity sex offenders are often the colleagues that share your workspace and disrupt your focus.
00:44:50.000
An open plan office can be detrimental to productivity because you frequently have sales staff, loud phone conversations, or other distractions that draw your focus away from your coding work at hand.
00:45:45.000
We require different work environments as knowledge workers, and interruptions from unnecessary chatter can break that concentration. When I’ve worked in those environments, I've found it hard to find my flow to deliver effective work.
00:46:35.000
Another challenge is the disruption we interrupt ourselves with. Enablement features in our tools can pull us out of our focus state. This all calls back for improvement in our work environment.
00:48:00.000
People spending all day on those distractions can hinder our productivity immensely. So a gentle reminder: the goal is to reduce interruptions—from ourselves and others. I encourage you to consider enhancing your work environment.
00:49:30.000
Throwing money at the productivity issue can significantly help—enabling more private workspaces or even subsidizing lunches can bring back an hour to the workday. By investing back into the productivity of your team, you can yield great results.
00:50:00.000
Ultimately, we call for an understanding of our environments as developers and adjust toward better productivity strategies. Thank you for your attention!