Talks
Lightning Talks 2
Ginny Hendry
1 talk
John Woodell
@woodie
7 more speakers
See all speakers

Lightning Talks 2

by Ginny Hendry, John Woodell, Jimmy Zimmerman, Nora Howard, Alistair Coburn, Wayne E. Seguin, Tim Harper, Andrew Clay Shafer, and Howard Yeh

The video titled "Lightning Talks 2" features a series of brief presentations from various speakers at the MountainWest RubyConf 2010, discussing key concepts and tools related to software development and agile methodologies. The speakers include Wayne E. Seguin, John Woodell, Tim Harper, Ginny Hendry, Jimmy Zimmerman, Nora Howard, Alistair Coburn, Andrew Clay Shafer, and Howard Yeh.

Key Points Discussed:
- Indexing in Databases: Wayne Seguin emphasizes the importance of having an efficient index in database queries. He introduces a decision framework for determining when an index is needed and advocates for testing queries to ensure performance before deployment. His practical example involves a unit test in MongoDB that assesses query performance using a rating system.

  • Tools for Development: The speaker highlights Instaweb, a tool that sets up a local web server to browse repositories conveniently without an internet connection.

  • Genealogy and Ruby FS Stack Gem: John Woodell shares his work with the Ruby FS stack gem, which simplifies interactions with the FamilySearch API. He highlights the collaborative nature of FamilySearch's genealogy data and provides insight into features like retrieving pedigree data through concise code examples.

  • RubyMine IDE: Tim Harper discusses RubyMine as a robust integrated development environment (IDE) that enhances productivity with features like quick documentation access and efficient project organization.

  • Location-Based Tweeting App: Ginny Hendry shares her experience building a Sinatra app for tweeting location data, showcasing the integration of Google Maps for easier location sharing.

  • Hexagonal Architecture: Alistair Coburn introduces the concept of hexagonal architecture, explaining how it separates application logic from external interfaces, thereby simplifying testing and enhancing security.

  • Bash Deployment Server Manager (BDSM): Andrew Clay Shafer presents BDSM, a deployment framework designed for managing server operations effectively and adapted to different management systems.

  • Giddy for Git Hooks: Howard Yeh describes Giddy, a tool for managing Git hooks without modifying Git’s core operations, aimed at improving team collaboration and automating submodule updates during branch changes.

  • Agile Methodologies: The discussion wraps up with the fundamentals of Agile practices, reinforcing collaboration among teams to improve project outcomes.

Conclusions and Takeaways:
The session concludes with a call to adopt new practices in agile development, stressing the importance of teamwork, communication robustness, and the continuous enhancement of software practices. These insights are designed to inspire attendees to enrich their contributions to the software community and improve their development practices.

00:00:15.400 To help you make informed decisions about indexing, I have a little decision tree for when to decide whether you need an index. First, ask yourself: will a customer ever be waiting for the result of the query? If no, then okay, you might not need an index. If yes, consider how many documents are in your collection or how many records are in your table. If there's only one, an index is unnecessary; but if there's more than one, then you should never do an unindexed read. We are aware of this, but we may not implement it as well as we should.
00:02:20.959 How can you be sure you have a good index on your query—not just any index, but an efficient one? The typical approach is to perform a thorough review and analysis before deployment, followed by monitoring after deployment, perhaps using a tool like New Relic. Sometimes, such assessments only come into play when customers call to complain about poor response times following the deployment of a feature with an inadequate index. What this boils down to is the reliance on upfront design and untested code deployment, which are both detrimental practices to us agile developers. Instead, we should be actively testing our queries as part of our development process.
00:04:02.519 I realized how simple it is to create a test for a query, so I published my findings as a gist. Here is the main part: it's a unit test that sets up a collection. You could do this in MongoDB or any other database; I particularly implemented it in MongoDB. The test involves setting up a query and asserting that it returns a rating of at least 50. This rating is simply a score derived from an explanation function available in MongoDB, which other databases should also provide. By running this test repeatedly, you can ensure you do not deploy code without an adequate index.
00:04:43.720 The rating you receive will fall between zero and 100, with 100 representing a perfect index and zero indicating an inadequate one. For instance, I recently ran a query test where the minimum rating needed was 50, and my result returned 99.5, indicating a very good index. You can set your testing thresholds at 50 or 60 to ensure your indexed queries are functioning properly. This practice will help prevent poor performance in production.
00:06:21.599 Now, I would like to switch gears a bit. Who here has used Git or GitHub? Occasionally, one might find themselves away from their primary repository. For instance, you might be working on a development box without your repository or be on an airplane. In such cases, it's essential to have tools at your disposal that can help you navigate and manage your repositories, even without a stable internet connection.
00:07:03.440 One nifty program is Instaweb. Imagine you have a repository on your local machine, and you want to quickly browse through it. By installing Instaweb, you can type a simple command and spin up a local web server. Then, you can easily browse your repository as if it were on the internet, providing a user-friendly interface for examination. This capability is incredibly convenient and is pre-installed on many systems, making it readily available.
00:08:19.720 Next, I want to discuss a project I am passionate about: the Ruby FS stack gem. This gem helps you tap into the world's genealogy. My interests lie in two areas: Ruby programming and family history. This is a surname cloud of all my ancestors for the last nine generations; if you see any surnames here that are familiar, we may be related. For instance, one of my great-grandfathers, Marshall Felch, had a dinosaur quarry near Denver, and one of his dinosaur fossils is housed at the Smithsonian. Another of my ancestors, Amanda Coburn, was a Civil War nurse who famously defended herself during an attempted robbery.
00:09:25.000 I work for FamilySearch, which is the world’s largest genealogy organization. Sponsored by The Church of Jesus Christ of Latter-day Saints, FamilySearch has an extensive amount of genealogy data and thousands of volunteers ready to assist you. If you're ever in Salt Lake City, I highly recommend visiting the family history library at Temple Square to connect with your past.
00:10:20.000 FamilySearch operates a collaborative family tree where users can add information about their ancestors. Chances are, if you have no connections established in the system, you can still trace back a few generations and connect with a large family tree. We have an API that allows you to operate with this family tree, serving approximately 700 million person records. The API offers functionalities like creating, reading, and manipulating person records, so you can read large chunks of data and build powerful genealogy applications.
00:11:01.399 The Ruby FS stack gem simplifies interactions with the FamilySearch API, using JSON for data serialization. I'm currently working to encompass all the functionalities of the FamilySearch API with a clean interface and convenience methods, making it thoroughly tested and easy to debug. There are future integrations with tools that could use Google Books to gather ancestor stories, bringing more value to users seeking their family histories.
00:12:02.040 I'd now like to show a quick code demo using the FamilySearch API. The first example retrieves a pedigree, fetching four generations worth of records in just 16 lines of code. Despite potential connection limitations, I hope to demonstrate some powerful search capabilities. For instance, I can issue a search query for someone with the name Parker; if I run this, I will get results that include family search IDs and relationships. This capability allows you to build lists of your ancestors seamlessly and straightforwardly.
00:13:52.600 I've learned a lot from others regarding tools and wanted to share a few things I find useful. One tool I want to share is RubyMine, an integrated development environment (IDE). It’s robust and convenient, especially for those coming from an IDE background. RubyMine is a commercial product but offers a free trial. After trying it out, I liked it enough to purchase a license. In RubyMine, views of your project can be organized logically, grouping controllers, models, and more clearly for easy navigation.
00:15:25.260 One of the excellent features of RubyMine is its support for rake tasks and code navigation. You can query rake tasks effortlessly and access all your feature files in one place. The IDE also allows you to jump to your definitions with speed, making coding more efficient. Additionally, the documentation feature lets you view method documentation quickly, enhancing your workflow and productivity. If you have any questions or want to discuss RubyMine further, feel free to reach out to me after my talk.
00:16:52.680 Now, I want to shift gears to something a bit different. I don't currently have an iPhone, which sometimes makes me feel left out in this community. However, I wanted to build a tool that allows me to tweet with my location, so I created a Sinatra app using a gem that simplifies Twitter OAuth authentication. I integrated Google Maps to make it easy to tweet my current location. This way, even without an iPhone, I can still share updates about where I am.
00:17:52.520 I deployed my application on Heroku, utilizing a free instance to support my app. Setting it up required a simple configuration, registering the authentication keys as environment variables. I then built a simple client to send out location-based tweets. With this application, I can manage my tweets with location data seamlessly. It's strangely rewarding to see the outcome of this project, and I'm happy to share it with you all.
00:19:13.203 Before I conclude, I want to clarify one thing publicly: our next speaker, Alistair Coburn, did not pay admission to the conference, and this is the second consecutive year he has attended for free. Let's give him a round of applause as he shares his insights today. Please remember that all your valuable conference resources were shared willingly and without charge by Alistair. Today, we are privileged to have him with us.
00:20:56.480 Alistair will advance discussions around hexagonal architecture, a concept by Greg Young. This architecture emphasizes that applications should not depend on external details, and instead, utilize adapters for things like UIs or databases to maintain unit tests and other standards easily. His version includes mechanisms for automatic testing wherein the user sends in commands and gets updates according to events in a message queue. The coding and operations that revolve around this architecture can help build robust applications and should be explored.
00:22:11.679 Alistair's command-event architecture allows programmers to ensure high security while working on high-volume automated systems. By utilizing adapters, teams are capable of managing user interactions with applications without direct database dependencies, making their systems both testable and deployable without risking security breach areas. If anyone has questions, they should feel free to ask after his talk.
00:23:12.760 I want to pivot towards discussing the Bash deployment server manager (BDSM), a framework I created that streamlines server management and deployment processes. Integrating operations like Apache and NGINX, this tool allows for smooth service management, thereby addressing many intricacies commonly faced in server administration. BSDM was designed with modularity in mind, meaning it supports various extensions and can easily adapt to your server management system.
00:24:23.120 BDSM positively integrates with tools like RVM, enabling rapid installation and deployment for Rails, Unicorn stacks, or any other services your application needs. Since its inception, BDSM has continually refined functionalities and fixed problems I experienced with previous deployment tools. I am currently looking for beta testers who are willing to explore and contribute towards enhancing the framework further.
00:25:40.360 I would also like to introduce you to a project I call Giddy, which helps to manage Git hooks without modifying underlying Git architecture. Giddy allows teams to share hooks consistently without being forced into dependency on Giddy itself. This means that you can manage your repository's hooks easily even amidst a team setting. Sharing hooks across team members helps maintain uniformity without adding complexity.
00:27:10.400 One of the ways Giddy improves efficiency is by automating common frustrations like using submodules. For instance, when switching between branches, Giddy automates the submodule updates. After setting up the hooks, actions like checking out a branch can automatically update submodules without the hassle of manual commands every time. Additionally, if there's a team member who publishes a hook, it gets shared easily without entangling the repository's state.
00:28:40.799 To wrap up my discussion about Agile methodologies, I want to highlight how fundamental principles can drive productive software development practices. At its core, Agile encourages collaboration among developers, product managers, and stakeholders. Recognizing that all roles contribute to achieving a successful product can help eliminate confusion, increase communication, and smooth operations across teams. It’s essential to ensure that everyone understands the common goal, leading to happier teams and better products.
00:29:55.920 I appreciate all of you for attending today. I hope the insights shared at this conference inspire you to adopt new practices in Agile development, foster better communication within your teams, and ultimately enrich your contributions to the software community.