Disclaimer: this was my first multi-day conference 1 so I don't have a lot of conference experience off of which to base my opinions. It seemed like most attendees agreed though when I say FSF was superbly-organized. Also note that this is not a complete list of all the talks, only the ones I took the most notes on.
Davy Stevenson - "Orders of Magnitude" - @davystevenson
- Our brains are not good with big and small numbers. As web developers we have to work in the world of trillionths and trillions so we need to rely on tools instead of our intuition when calculating probabilities.
Brian Lilies - "Running Ruby Apps" - @bryanl
- Treating your servers like cattle instead of pets allows you to know for sure what your app is doing. Use new servers each time you deploy so you know that the environment looks exactly the same as the artifact created during the build.
Aaron Patterson - "Request and Response" - @tenderlove
- Rack Middleware: when you send a request in Rails, before hitting the router it must go through copious layers of middleware, which can result in too much computation only to return a 404. Perhaps the router should not be buried in middleware.
- We should eliminate Middleware and encourage competition, or different types of Middleware for different purposes.
- In Spain, it's 'el OL' #lol
Aaron Quint - "Beyond JSON: Improving inter-app communication" - @aq
- JSON is easy at first... but as apps get more complex it can become a 'bag of glass'2.
- Protocol Buffers are worth checking out -- Handles change well without versioning, using nique tags -- Explicit types defined in a schema, including nested types -- Can specify required vs optional fields.
- Quint created a simple protocol and client server for request/response TCP Server in go (TCPEZ).
- To Read: Google's Dapper Paper: (Building a distributed system without introspect-ability is a fool's errand).
Sandi Metz - "Nothing is Something" - @sandimetz
- 'if' is an enabler. We should substitute a smarter object instead of checking for nil
- An object does still have to contain a conditional sometimes, but it should be in the right place.
- Inject the players. Use dependency injection. Run from inheritance because it will usually spiral out of control.
- I should probably learn Smalltalk
Here's a video from the RailsConf talk in 2015:
Ernie Miller - "How to build a skyscraper" - @erniemiller
We can learn lessons about how to craft software well from unexpected places: such as skyscraper building (see slides)
Piotr Solnica - "Blending Functional and OO Programming in Ruby" - @solnic
- Prefer stateless Objects and use injection dependency
- Get rid of mutable objects. Once you instantiate something, it must be 'ready' because you can't change it later on.
- Objects should only have one single public method (e.g. #call(input))
- Single responsibility principle leads to objects that are like functions
John Cinnamond - "Extreme Objected-Oriented Ruby" - @jcinnamond
Super cool talk inspired by Sandi Metz's talk where she declared that 'if' is not necessary. Throughout the talk, John built up purely OO numbers. His code ended up looking something like this:
<span class="pl-c1">One</span>.<span class="pl-k">+</span>(<span class="pl-c1">One</span>).<span class="pl-k">==</span>(<span class="pl-c1">Two</span>)
He then created some challenges to try out.
Rachel Andrew - "The Business of Front End Development" - @rachelandrew
- We're becoming good at making simple things very complicated (through the use of libraries and frameworks).
- As a community, we should pay attention to web standards and spec development. By learning frameworks, we are masking the issues instead of working to solve them. Get frustrated! Push for better solutions!
- Prioritize the users' experience over your ease of development 3
- Progressive Enhancement for the win 4 -- "a robust site or application in the more traditional sense minimizes its dependencies. The minimum dependency for a web site should be an Internet connection and the ability to parse HTML"5 -- What is the minimum that I need to ship? How can i ensure that minimum protects the core experience for everyone? -- Never say 'oh yeah, accessibility is coming'
Massimiliano Mantione - "Transducers FTW!" - @M_a_s_s_i
Really good explanation of what a transducer is and how to use them. Check out the slides.
Nick Heiner - "Procedural Content in JS" - @nickheiner
- There are a lot of different ways to generate content: Midpoint Displacement Algorithm, Iterative subdivision, Markov Chains, Perlin Noise, Simplex Noise, Voronoi Noise, L-Systems/Grammar-based modeling
- npm has tools to generate these
npm install perlin simplex-noise voronoi l-system markoff
- Lessons learned from generating a map of a city using these tools: -- Use a seedable randomness source6 so you can: use automated testing and reproduce results using the same seed -- Log Everything -- Configure Everything - good parameters are important -- Use the appropriate algorithm. If you use a big subdivided square for the main grid system, it's hard to create diagonal lines.
- Check out the list of references at the end of the slides
Steven Wittens - "The Pixel Factory" - @unconed
This was the most visually-appealing talk of the conference for me. I strongly recommend just taking a look at the slides since the talk was extremely mathematical, and Wittens' passion is using 3D graphics to explain complex math as it applies to rendering graphics.
- Checkout MathBox, library for making math diagrams in WebGL
- We can simulate warped space with graphics using differential geometry (so cool!) :
f(x, y, z, time, intensity) -> (x, y, z)
2 Just stick a bunch of stuff into this hash without thinking about it then when you want to pull something out it's like a bag of glass. ↩