<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Tavlin Consulting</title>
    <link>https://www.daydreamsinruby.com</link>
    <description>Musings, thoughts, and services for engineering leaders</description>
    
      <item>
        <title>How to Manage Team Offsites Across Multiple Departments Without Micromanaging</title>
        <link>https://www.daydreamsinruby.com/blog/2026-02-23-aligned-offsite-outcomes/</link>
        <guid>https://www.daydreamsinruby.com/blog/2026-02-23-aligned-offsite-outcomes/</guid>
        <pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>If you're at a larger company, this will sound familiar... You're an engineering leader with multiple teams or departments reporting to you. Each one is planning their quarterly, halfly, or annual gathering. You want them to have great experiences that move their work forward, but you also recognize that what one team needs (and what that team dynamic is) is different from what another team (even in the same department) needs, which is different from what a team in a different area of your scope needs.</p>
<p>So what do you do? Do you mandate that everyone follows the same agenda? (That feels too rigid and doesn't honor that teams are in different places, plus it would never actually work.) Do you let everyone do whatever they want? (That feels too loose and you might end up with wildly different quality of experiences.) Do you try to review and approve every single agenda? (You don't have time for that, and frankly, you shouldn't need to micromanage this.)</p>
<p>As an executive leader, one thing I frequently see is how different team gatherings can be from department to department or team to team, especially in engineering where managers and leaders have different levels of experience planning and leading these sorts of gatherings. Leaders want to create happy, healthy, aligned groups, while recognizing that what each group needs is slightly different. The challenge is figuring out how to ensure some consistency and quality without putting each group in a box or needing them to follow the same outline.</p>
<p>Here's what you can do to balance consistency with flexibility:</p>
<p><strong>1. Outline overarching goals and outcomes</strong></p>
<p>Before any team starts planning their specific gathering, you need to get clear on the high-level outcomes you need from these experiences. Not the detailed agenda, but the bigger picture. What should be true after these gatherings happen? What should people know, feel, or be able to do differently?</p>
<p>For example, your overarching goals might be:</p>
<ul>
<li>Every team should have clarity on their quarterly priorities and how they connect to company goals</li>
<li>Every team should identify at least 2-3 concrete improvements to how they work together</li>
<li>Every team should leave with documented decisions and action items (not just &quot;good discussions&quot;)</li>
<li>Every team should strengthen relationships across team members</li>
</ul>
<p>Notice these are outcomes-focused, not activity-focused. You're not saying &quot;everyone must do a vision exercise&quot; or &quot;everyone needs to include a retrospective.&quot; You're saying what should be different as a result of the time together.</p>
<p>This gives teams flexibility in HOW they achieve these outcomes while ensuring consistency in WHAT gets achieved. The platform team might need to spend more time on technical strategy while the product team focuses on cross-functional collaboration, but both should walk away with clarity on priorities and concrete improvements.</p>
<p>Share these overarching goals with all the teams planning gatherings. Make it clear: these are the non-negotiables. How you get there is up to you, but these outcomes need to happen.</p>
<p><strong>2. Review plans and approaches</strong></p>
<p>Once teams have drafted their plans, create a lightweight review process. This doesn't mean you approve every single agenda item. It means you're checking that:</p>
<ul>
<li>The planned activities actually map to the overarching outcomes you set</li>
<li>There's a balance between strategic work and connection-building</li>
<li>They've thought through how decisions will be made and documented</li>
<li>There's a plan for follow-up and accountability</li>
</ul>
<p>This is also your chance to spot gaps before they happen. Maybe one team has packed their agenda so full there's no breathing room. Maybe another team has lots of &quot;discussion&quot; time, but no structure for turning discussions into decisions. Maybe a team is planning activities that worked great for them last year, but won't address the challenges they're facing now.</p>
<p>A good review conversation sounds like:</p>
<ul>
<li>&quot;I see you've allocated 3 hours to discuss priorities. How will you make sure that turns into actual prioritization, not just talking about priorities?&quot;</li>
<li>&quot;You've got a lot of great activities here. Do you think it's too much for folks? Will they be burnt out by the end of the first day?&quot;</li>
<li>&quot;This agenda looks great for the leadership team. Have you thought about how you'll bring the rest of the team along on these decisions afterward?&quot;</li>
</ul>
<p>The key here is that you're coaching, not mandating. You're asking questions that help them strengthen their plan, not telling them exactly what to do.</p>
<p><strong>3. Plan collective follow-up sessions or shareouts</strong></p>
<p>One of the best ways to create consistency without rigidity is to plan how teams will share their outcomes with each other. This serves multiple purposes:</p>
<p>First, it creates accountability. If teams know they'll be sharing what they decided and what they're committing to, they're more likely to actually make decisions and create real action plans (as opposed to just having nice conversations).</p>
<p>Second, it helps teams learn from each other. Maybe one team tried a new approach to prioritization that really worked. Maybe another one discovered a communication practice they want to adopt. When teams share their outcomes, they're not just reporting—they're teaching each other.</p>
<p>Third, it reinforces the overarching goals. When you bring teams together to share, you can see if everyone actually achieved those outcomes you defined at the beginning. If three teams crushed it on priorities but struggled with relationship-building, that tells you something about what support teams need going forward.</p>
<p>These follow-up sessions don't have to be long or formal. Even 30 minutes in your next all-hands where each team shares their top 3 commitments and one thing they learned can be powerful. Or a shared document where teams post their action plans and what went well.</p>
<p>The key is creating a forum where teams see the common threads while celebrating what made their experience unique to their needs.</p>
<p><strong>4. Send fieldtrippers between teams</strong></p>
<p>Here's one of my favorite approaches for creating consistency and cross-pollination: send people on &quot;field trips&quot; to other teams' gatherings.</p>
<p>This doesn't mean someone sits in on the entire 2-3 day offsite (though it could). It might be someone from the platform team joining the product team's gathering for half a day, or vice versa. Or someone from your leadership team rotating through different team offsites to observe and participate.</p>
<p><a href="https://daydreamsinruby.com/blog/2024-02-26-field-tips-for-offsites/">I've written about this approach before</a>, but here's why it works for consistency:</p>
<p>Fieldtrippers see what &quot;good&quot; looks like in different contexts. They experience how other teams approach similar challenges. They bring back ideas and practices to their own team. And they create connections across teams that wouldn't happen otherwise.</p>
<p>Plus, it's a great development opportunity for emerging leaders on your teams. Seeing how different groups operate and experiencing different facilitation styles helps them grow as leaders themselves.</p>
<p><strong>5. Hire an outside facilitator</strong></p>
<p>Yes yes yes, shameless self promotion, but this also makes sense... Look, all of this takes a lot of time. Defining outcomes, reviewing plans, coaching teams through their design, making sure quality is consistent. And that's on top of all your other responsibilities as a leader. Additionally, it's possible that <em>you</em> don't have the depth of experience to be able to provide creative, meaningful exercises or approaches to achieving these goals.</p>
<p>An external facilitator, especially one familiar with your functional area (like engineering), can help take some of this work off your plate.</p>
<p>Here's what the right facilitator brings:</p>
<p>They can be flexible enough to design and facilitate an experience that is tailored to each team while also ensuring that high-level goals are met. So your platform team gets the technical deep-dive they need, your product team gets the cross-functional collaboration focus they need, but both achieve the overarching outcomes you've defined.</p>
<p>They ensure a level of quality and similar experience across teams. When you have one facilitator working with multiple teams, you get consistency in facilitation approach, quality of experience, and how outcomes are documented and followed up on. Teams aren't comparing notes afterward and realizing one group got a transformative experience while another just did trust falls and called it a day.</p>
<p>They bring objectivity and can navigate dynamics you can't. An external facilitator can ask questions and push back in ways that internal leaders sometimes can't. They can surface issues that might not come up if someone from the company is leading the conversation.</p>
<p>And honestly? They save you time. Instead of reviewing every agenda and coaching every team through their planning, you have one conversation with the facilitator about your overarching goals, they work with each team to design accordingly, and you get consistent quality without being in the weeds of every single plan.</p>
<hr>
<p><strong>The Balance</strong></p>
<p>The goal here isn't perfect uniformity. Different teams need different things and that's okay. The goal is ensuring that regardless of what specific activities happen or how the agenda flows, every team is getting a high-quality experience that achieves the outcomes you need as an organization.</p>
<p>Think of it like this: you're setting the guardrails (overarching goals, quality standards, follow-up expectations), but letting teams drive within those guardrails in whatever way works best for them.</p>
<p>Some teams will need more structure and support. Others will thrive with more autonomy. Your job is to provide the right scaffolding so that every team succeeds, while recognizing that success might look a little different for each one.</p>
<p>And remember, this is iterative. After your teams do their gatherings, talk to them about what worked and what didn't. Use that learning to refine your approach for next quarter or next year. The teams that struggled with certain aspects can learn from the teams that excelled. The overarching goals you set might need adjustment based on what you learned.</p>
<p>The consistency you're after isn't &quot;everyone does the same thing.&quot; It's &quot;everyone gets the support they need to have a transformational experience that moves their work forward.&quot; That's worth investing time and attention in.</p>
<hr>
<p><strong><h5>If you're an engineering leader managing multiple teams and want help ensuring consistency across your team gatherings, <a href="https://calendly.com/asheren/15min">book a free consultation call with me today</a>. I can help you define the right overarching goals, review team plans, or facilitate experiences across multiple teams so you get consistent quality without putting everyone in the same box.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/offsite-alignment.png" alt="people around the world getting together" />
</div>]]></description>
      </item>
    
      <item>
        <title>The Complete Guide to Skip Level Meetings</title>
        <link>https://www.daydreamsinruby.com/blog/2026-02-04-skip-levels/</link>
        <guid>https://www.daydreamsinruby.com/blog/2026-02-04-skip-levels/</guid>
        <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A friend recently asked me to send them the link to my blog post about having effective skip levels, and to my dismay, even though I talk about skip levels all the time, I hadn't ever actually put my thoughts into a blog post!! I'd only incorporated aspects of thinking through offsites as subsections of posts. So, here's your guide to effective skip levels.</p>
<p>First off, what is a skip level?! A skip level is exactly what it sounds like... a conversation with the people who report to the people who report to you.</p>
<p>Now, here are some common sentiments about skip levels:</p>
<ul>
<li>I barely have time for 1:1s, how am I supposed to fit skip levels in?</li>
<li>It's super weird for me to talk to people when I don't have a lot of interaction with them.</li>
<li>Meeting with my skip levels undermine the folks who report to me in the eyes of my skip levels.</li>
<li>My direct reports are uncomfortable with me having skip level conversations.</li>
</ul>
<p>I've always found skip levels incredibly helpful and effective so I want to give you some ideas and tips on how to introduce them, how to structure them, and some new ideas if you don't have time to really chat with everyone.</p>
<h3>How to introduce skip levels</h3>
<p>Skip levels often get this bad reputation for being systems to &quot;check in&quot; on a manager or try to catch individuals in some work issue, but this isn't (and shouldn't!) be what they are used for. Skip levels are used to get information about what's working well and what isn't, about what messages or company priorities are understood by folks and what isn't, to help spot gaps within the system, and to further support individuals.</p>
<p>When I roll out skip levels to managers, I let them know that this is a way for me to get to know individuals as people, understand what they're working on, as well as what they think is going well and what they'd love to see improved more broadly. A key detail here is that I tell managers to please give me a sense of what they're talking about to their individuals (either for improvement needs or growth opportunities) so that I can be on the same page. The last thing I want is to go into a skip level and accidentally give someone signals that they're either doing well where they aren't, or provide advice, ideas, or opportunities that are contradictory to where their manager is trying to encourage them towards.</p>
<p>When I roll out skip levels to individuals, much of the messaging is the same... that these are casual conversations to get to know them, hear more about their perspective on their team or the department or company, and understand what they think is awesome and what they're feeling &quot;meh&quot; about. It's also an opportunity for them to get to know me, so they can also feel free to bring anything that's on their mind that they want to discuss further.</p>
<p>The most important part of this is that there truly can't be any immediate negative consequences to someone sharing something in these skip levels. A large part of these conversations is about building trust with both your direct reports and the folks that report to them, so if you hear something that feels concerning or worth looking into further (and you will), make sure to think about how to handle that in a way that doesn't destroy the trust you're attempting to build or maintain.</p>
<h3>How to structure skip levels</h3>
<p>Usually, my goal is to meet with everyone, individually, once per quarter for 30 minutes (see below if you have a larger department or if once per quarter is just not feasible for you). I'll schedule a handful per week every month and that usually gets me through a good number of folks without it feeling like it pulls too much from my calendar.</p>
<p>I keep these conversations pretty casual HOWEVER I always have a structure for them. We don't need to keep to the structure... much like a regular 1:1, you'll have some folks who come with an agenda and full list of items they want to discuss, and others who will say &quot;things are good&quot; and if you don't have a bit more of a structure, you'll be tempted to end the conversation early or continue it in a way that likely feels awkward and painful for both of you.</p>
<p>My broad questions are:</p>
<ul>
<li>What's on your mind? (always start with just a broad opening. This gives people who came prepared and ready the opportunity to jump right into their agenda, and for others, it gives them a chance to share if there is anything they're thinking about)</li>
<li>What kinds of things are you seeing or working on that's making you happy or feeling positive right now?</li>
<li>What kinds of things are you seeing or working on that are feeling frustrating or unclear?</li>
<li>Anything you want to see more of from me or in the department as a whole?</li>
</ul>
<p>From here, there are always a few &quot;variable&quot; questions I throw in based on what's going on that month.</p>
<ul>
<li>I posted about X in the last couple of weeks, did you have any questions about that? OR How did that land for you?</li>
</ul>
<p>This question is really helpful if I or the company rolled out a new policy, process, or idea in the last couple of weeks. Sometimes I get &quot;oh, I didn't see that. Can you remind me what you're talking about?&quot; From there, sometimes I'll then reinforce with managers the need to share important messages directly with their teams, or it will give me the chance to ask something like: Was the channel I posted in ok? which channel or what method would you have seen it in?</p>
<ul>
<li>I've been noticing X, I'm curious if you've noticed it too/if you have any thoughts about that?</li>
</ul>
<p>This is helpful for information collecting... when I'm starting to see a pattern or trend and I'm curious how it's affecting people.</p>
<ul>
<li>I saw X metric change recently. From your perspective, how are you feeling about X?</li>
</ul>
<p>There are various tools that I use to track and measure developer sentiment and productivity. Sometimes these conversations are after a larger engagement survey, other times after a pulse survey, or a developer satisfaction survey where I'm noticing numbers that have gone up or down. This is my chance to not get the &quot;well I think people might feel,&quot; but to really get just from them and their individual perspective how they interpreted a question or how they're feeling about something.</p>
<h3>Alternate ideas to 1:1 skip level conversations</h3>
<p>Individual skip levels on a regular basis only scales so far. If you have a larger department, you need alternate approaches to keep in touch at this level with folks. It's often the first thing to go or to be cut from the calendar, which leads to issues down the road. So here are a few recommendations for what you can do instead.</p>
<ol>
<li>
<p>Small group skip levels:
Instead of 1:1 skip levels, you could maintain the same structure of the conversation, but have them with groups of 5-8 individuals. This allows you to hear similar perspectives and ideas around the questions you would ask individually, but with a larger group, covering more people in each occurrence. Something to keep in mind with this approach: you have to be really careful with group dynamics. Don't do small groups of people who all have the same manager, be aware of power dynamics if you have folks who are new to their careers with folks at a much more experienced level, etc. And understand how those dynamics may change how the conversation flows (or doesn't).</p>
</li>
<li>
<p>Office hours:
Offer optional, but regular office hours (often monthly) where the agenda discussed is whatever topics people bring to discuss. This gives people a way to proactively bring their thoughts and ideas to you, providing them with that same outlet. I also have periodically posted something like &quot;in this office hours, I'm really curious to hear about X, so if you have a perspective on that or thoughts, please try to attend.&quot; These aren't recorded to allow for freer conversation and they can be a great way to understand what is on people's minds or get information on something. A couple of things to keep in mind with this approach: first, you'll get a lot of people who don't have anything specific they want to talk about but want to hear what other people say or ask about. In this scenario, you risk having one individual regularly dominate the conversation, or everyone coming for that reason and no one really having anything they actively want to discuss. Second, it is up to YOU to make office hours compelling and fun. You want people to want to attend office hours. When there's lots of silence or it feels awkward, people start avoiding attending office hours, and then it's just 30 minutes of wasted time on your and their calendar, so always have a couple of fun topics, stories, ideas, etc. to pivot to so people keep coming back whether there's something &quot;spicy&quot; going on or not.</p>
</li>
<li>
<p>Department-wide retrospectives:
Quarterly, you can run a longer department-wide retrospective. This gives people a structured way to discuss and address things they're loving and things that are concerning to them. Some critical things to think about when going down this path, that make this option a more challenging one: you're only hearing about these issues once in the quarter, which can lead to people waiting until this retro happens, as opposed to you or others proactively putting improvements or solutions in place. Additionally, you should allot enough time to really get into some of these issues, meaning these sessions will likely be 90-120 minutes to allow for adequate time. Finally, speaking from my experience as a facilitator, you need to have a plan to make sure this conversation effectively gets thoughts and ideas out into the open, while keeping it productive and proactive, and making sure everyone remains engaged for that amount of time. This is hard to do with a large department so it takes time to plan and be really thoughtful and intentional about it.</p>
</li>
</ol>
<p>Additionally, I recommend to always try to do skip levels with a handful of individuals. Pick maybe 15 people to try to meet with quarterly. And RESIST THE URGE to make this group just any of your more experienced/higher level folks who are in that skip level layer. If you're only talking to those folks, you'll get a skewed sense of how things are going. Within that mix, pick a few people that are often vocal about changes, people who report to a variety of managers, gender diversity so you're getting broader perspectives, and some who are newer in their career and/or to the company and some who are more tenured.</p>
<h3>Quick tips</h3>
<ul>
<li>Don't take skip level conversations as 100% truth. We know that we catch people on certain days and times. Sometimes they're in a good mood, sometimes not. Sometimes their manager has just had a difficult conversation with them, other times they just got a promotion. Anything that someone tells you in a skip level should be noted, but then, make sure you're checking that information with others or keeping an eye on it. You can also follow up with them in a subsequent skip level, something like &quot;last time you mentioned X, are you still feeling that way?&quot;</li>
<li>Expect it to take a little while for people to warm up. Your title, no matter what it is, makes you scarier for people. Plus, who knows what you'll DO with the information. They don't want to get anyone in trouble (or maybe they do, but they're not sure if talking to you will backfire) and they don't want to be seen as a tattle-tale or fear retaliation of any sort. Plus do you <em>actually</em> know what they do day-to-day? How could someone at your level know or remember what it's like to operate daily like they do? And there's always baggage from other roles in the past where skip levels either didn't happen, didn't happen consistently, or were weaponized in unproductive ways. So keep all this in mind, don't give up, keep your structure, and remember that it'll take a few skip levels to really get people to start talking to you about things.</li>
<li>Once it feels like there's a lull, space them out a bit or mix them up. There will be a point when people are comfortable coming to you outside of skip level times. When, if there's really an issue or a question they have, they'll just ask it in a department meeting, chat app channel, or a DM. When this happens, don't just drop skip levels, because you don't want to start them up when something is wrong or not going well, but you can, at that point, space them out a bit or change the format to maximize your calendar and time.</li>
<li>Take notes! You'll have skip levels less often than 1:1s so you'll want to make sure you're taking some notes so you remember what you talked about last time before going into the next conversation.</li>
</ul>
<hr>
<p><strong><h5>Trying to figure out how to make skip level or other meetings more effective and productive? <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. I'll help you talk through what actions will lead to the outcomes you're looking for.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/skip-levels.png" alt="a person at a table looking confused and concerned trying to figure out what to do next" />
</div>]]></description>
      </item>
    
      <item>
        <title>Stop Planning Birthday Parties When Your Team Needs Business Outcomes</title>
        <link>https://www.daydreamsinruby.com/blog/2026-01-20-offsite-planning-by-consensus/</link>
        <guid>https://www.daydreamsinruby.com/blog/2026-01-20-offsite-planning-by-consensus/</guid>
        <pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Let me set the scene...
You're a manager, Director, VP, or CEO. You run a remote or hybrid team. You KNOW that getting people together builds high-performing teams, you know your team enjoys these opportunities, and you recognize why they're important. You have the budget, you've figured out the dates, you've waited maybe accidentally a bit too long to figure out what you'll <em>actually</em> be doing with this time, but now it's coming up, so you ask your group &quot;what should we make sure to cover in our time together?&quot;</p>
<p>What you hear sounds reasonable. Your direct reports want to hang out together and just have some team bonding time. One or two people have some ideas of a process or approach they want to try out and they want to use that time together to brainstorm and/or get feedback and buy-in. So that's that. You divvy up the agenda, post in a few Slack for good &quot;team bonding activities&quot;, and move on to the next things you have to get done.</p>
<p>Does this sound familiar? Probably. It's what I see a vast majority of leaders do when they're planning and thinking through these gatherings.</p>
<p>Here's some hard truth... even though it feels fine, good enough, maybe even productive, it's not. Your expectations are too low.</p>
<p><strong>What's actually happening here</strong></p>
<p>When you ask your team &quot;what should we cover?&quot; you're asking them to tell you what would make a good birthday party, not what would truly drive business goals forward. They're going to tell you things like:</p>
<ul>
<li>We should hang out more</li>
<li>It would be fun to do an activity together</li>
<li>I have this one idea I want to workshop</li>
</ul>
<p>And look, none of these are <em>wrong</em>. But they're not strategic. They're not going to move the needle on the conversations you've been having or thinking about for six months without resolution. They're not going to get you unstuck on the challenges that keep you up at night. They're not going to create the kind of alignment that makes the next quarter run smoothly instead of continuing to run to the next fire.</p>
<p>And even if your team can tell you what they need, it's up to you to frame and tackle these challenges in the right way, so that they're looking at the heart of the issue and not just a piece of it. They're measuring success against other gatherings they've experienced, which (let's be honest) have probably also been just &quot;fine.&quot;</p>
<p>You can think of it like customer interviews. When you're talking to customers or constituents, they'll give you ideas but you don't build each of those things into features or programs. You take a deeper look at what threads are connecting those requests, examine your customer's journey and their pain points in order to get to what they don't even know to request. THIS is your goal when designing a gathering.</p>
<p><strong>What you're actually optimizing for</strong></p>
<p>Here's what typically happens with this approach:</p>
<ol>
<li>You spend time together</li>
<li>People enjoy seeing each other</li>
<li>You talk about some things</li>
<li>Everyone leaves feeling pretty good and probably with some next steps from some discussions but not all of them</li>
<li>Three months later, not much has actually changed</li>
</ol>
<p>You're optimizing for &quot;did people have a good time?&quot; when you should be optimizing for &quot;what's different six months from now?&quot;</p>
<p>The conversations that have been stuck for months? Still stuck. The alignment issues? Still there (or went away but have since resurfaced). The priorities that feel fuzzy? Still fuzzy. The energy and excitement from the gathering? Gone by the following week when everyone's back to their usual routines.</p>
<p>And look, I get it. People having a good time isn't a bad goal. But when you're investing thousands of dollars (when you count salaries, travel, venue, and opportunity cost), you deserve better ROI than &quot;people enjoyed themselves.&quot;</p>
<p><strong>What better actually looks like</strong></p>
<p>Better gatherings accomplish three things simultaneously:</p>
<ol>
<li>Real strategic work gets done (decisions made, priorities clarified, stuck conversations unstuck)</li>
<li>Deep connections form through tackling those challenges together</li>
<li>Clear action plans emerge that people are still executing (or have completed) six months later</li>
</ol>
<p>Notice I said &quot;simultaneously.&quot; Not team bonding on day one and strategy on day two. Not fun activities in the morning and serious work in the afternoon. The connection happens THROUGH the strategic work. Trust builds when you tackle hard problems together in creative ways and offer people different, more meaningful ways to get to know one another. People leave knowing each other better AND with clarity on what's next.</p>
<p>This is what it looks like when you're asking the right questions during planning:</p>
<ul>
<li>What conversations have we been having for 6+ months without making progress?</li>
<li>What decisions do we need to make that we keep putting off?</li>
<li>Where do we lack alignment that's causing friction in our day-to-day work?</li>
<li>What would be different about how we work together if this time was truly successful?</li>
<li>What do people need to know, feel, and do differently after we're together?</li>
</ul>
<p><strong>How to actually get there</strong></p>
<p>Stop asking your team what activities they want to do. Start asking yourself what outcomes you need to achieve.</p>
<p>Then work backwards:</p>
<ol>
<li>What are the 2-3 most critical outcomes for this gathering? (Not 10 things. Pick the vital few.)</li>
<li>What conversations need to happen to achieve those outcomes?</li>
<li>What's preventing those conversations from happening effectively in our regular meetings?</li>
<li>How can we create the right conditions for breakthrough on these topics?</li>
<li>How do we ensure we're creating an agenda that flows and doesn't just exhaust people with multiple days of heavy or intense conversations?</li>
<li>What accountability structures will ensure the decisions we make actually stick?</li>
</ol>
<p>And here's the thing - you might realize that designing this kind of experience requires expertise you don't have. You can do AN activity. But sequencing 15+ interconnected activities so each builds momentum toward your goals? Facilitating real-time when someone opposes every idea? Navigating power dynamics so all voices are heard? Turning discussions into decisions with real accountability? That's not something you figure out on a Slack thread two weeks before your gathering.</p>
<p><strong>The real question</strong></p>
<p>The next time you're planning a team gathering, ask yourself: Am I planning a birthday party or a business transformation?</p>
<p>If the honest answer is birthday party, that's fine - but own it. Don't expect it to solve your strategic challenges or create lasting change.</p>
<p>But if you actually need business outcomes, if you have real challenges that need solving, if you want your team to be different after this time together - then you need to approach it differently. You need to set your expectations higher. You need to invest in making it actually worth the time and money you're spending.</p>
<p>Your team deserves better than &quot;fine.&quot; Your business deserves better than &quot;good enough.&quot; And you deserve to walk away from a gathering knowing that something real has shifted, not just hoping it made a difference.</p>
<hr>
<p><strong><h5>Ready to plan a gathering that actually produces lasting change? <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. I'll help you identify what outcomes you really need and design an experience that delivers them - not just another &quot;fine&quot; gathering that everyone forgets about by next quarter.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/birthday-party-or-offsite.png" alt="a person at a table looking confused and concerned trying to figure out what to do next" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Don&#39;t Let Others Get Lost in the Reorg Shuffle: Practical Steps for Managing Organizational Change</title>
        <link>https://www.daydreamsinruby.com/blog/2026-01-05-reorgs-for-individuals/</link>
        <guid>https://www.daydreamsinruby.com/blog/2026-01-05-reorgs-for-individuals/</guid>
        <pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Welcome back to a short 3-part series on everyone's favorite topic... reorgs! In our <a href="https://daydreamsinruby.com/blog/2025-08-27-theres-been-a-reorg/">first post</a>, we focused on what to look for when a reorg has resulted in you taking over a new area or department, as well as how to effectively set the tone and move forward. In our <a href="https://daydreamsinruby.com/blog/2025-10-13-reorg-results-new-manager/">second post</a>, we tackled what to do if you get a new manager as a result of a reorg.</p>
<p>This final post will cover the last group affected by reorgs... the individual contributors.</p>
<p>Often, individual contributors end up getting lost in the shuffle when a reorg happens. Here's what I see:</p>
<ol>
<li>The reorg deciders (this can happen at the C-Suite level, or lower, depending on the size of your company) have had months to look at options, map out different scenarios, think through what works best, and socialize this with one another.</li>
<li>The direct reports of those folks are looped in. Usually a few weeks to a few days before the reorganization, so that they have time to wrap their heads around what will happen, align on the messaging, and get on the same page about any working agreements, teams, or processes that may need to change as a result.</li>
<li>Individuals are informed through wide-reaching and then subsequent communications that announces the plan, what's changing, resulting organization structure, and why.</li>
</ol>
<p>Now, don't get me wrong. I actually think this is the right approach. I don't think reorgs should be decided through committee or we should strive for consensus when doing this. For many reasons, it's best when this decision comes from an individual who has solicited feedback from various levels about the new plan, not in the least because individuals have different appetites for change. Some would be fine with a new team or reorg every week. Others get stressed when it happens once a year.</p>
<p>But where I think many places go wrong is expecting this announcement to be a quick blip in the workday and then expecting everyone to get right back to work, without any productivity loss, as if nothing happened. At the very least, people need a little bit of time to process to figure out what it means for them and if there are any changes that are impacting them and their work. So here are a few suggestions, that can be executed at any level, to help make reorgs more palatable for your group and hopefully both allow for and diminish the productivity loss through these announcements.</p>
<h3>Ensure the 'why' is there</h3>
<p>I've seen varying degrees of effective high-level communications. Sometimes, these are excellent and other times they leave a lot to be desired. Additionally, depending on how much trust there is in leadership levels (or how many layers there are between individuals), the whys that are stated may need to be additionally reinforced. Make sure to provide this information to your subgroup. I'll give a couple of scenario examples:</p>
<ol>
<li>Communications come from a CEO and there are 4-6 layers of managers between the CEO and individuals. If your group is more than a skip level away from whomever the communications are coming from, you should reinforce either with the same or more nuanced messaging specifically for your group(s).</li>
<li>Communications from a CEO that is only 2-3 layers of managers in between but there's a lack of trust, or the communications feel very broad and the why isn't super relatable for your subsegment. Here, you also want to provide additional communications and messaging for your group so that they aren't left guessing or filling in those blanks for themselves.</li>
</ol>
<p>For any messaging about the why, you want to make sure it's aligned with the overall message, is as specific as possible, and reassuring. You're likely not going to win over everyone, but hopefully for the folks in that mushy middle, many of them feel better once seeing both overarching communications and messaging from you.
<br></p>
<h3>Help people clearly understand what is and isn't changing for them</h3>
<p>I've said this before and I'll say it again, in the absence of a story, people will create their own. Oftentimes, that wider-reaching messaging is meant to be broad and not specific. What it means is that the more specific you get from company to department to multiple teams to single team, it doesn't feel specific enough. Some things you want to make sure to answer specifically...</p>
<ul>
<li>Is my day to day work changing at all?</li>
<li>Are the people I work with changing at all?</li>
<li>Are the expectation for me and the role I'm in changing at all?</li>
<li>Is the way I do my work changing?</li>
<li>Is there a new team or department mission?
Beyond that, if some of this is unsure, make sure to say that and provide what answers still need to be figured out and by when (ideally) there will be some answers around any changes rolling out.</li>
</ul>
<p>
<h3>Help people rightsize the change by having a little fun with it</h3>
<p>During periods of high growth, or high contraction, reorgs are going to be more frequent, because people are being given growth opportunities and/or it doesn't always make sense to backfill every individual. When this happens, the reorg fatigue is real and can become very disenchanting for folks. The &quot;why&quot; doesn't matter as much when it's happening so often and it <em>can</em> feel like there's constant change happening without any ability to restabilize. Sometimes, this is true, but more often than not, even though team names, structures, or other aspects may change, the actual work that's being done, processes people work with, and more, aren't actually changing that much. My goal is always to help people try to see some positives in the reorgs and also understand that maybe it's not <em>such</em> a big deal.</p>
<p>I was at one company where someone made a &quot;reorg playlist&quot; and whenever a reorg was announced, that playlist was posted and played. One of my favorite things to do is toss a few fun questions about change into Slack throughout the day. Things like: What's your most versatile piece of clothing? Or what's the piece of furniture in your house that has moved around the most? What's your favorite song about movement or change? Any of these can be fun ways to both recognize that people are probably less productive and having more Slack conversations day-of while also adding a bit of fun and levity to these announcements. Now, of course, one warning, when I'm talking about these fun messages, I'm referring to specific reorg announcements. If your company is announcing massive layoffs and there's a reorg announcement coupled with that, please don't try to ask fun Slack questions in that scenario.
<br><br><br>
Good luck if you're in the middle of a reorg! And if you're not, keep these in your back pocket for when you are, because it's probably just a matter of time.</p>
<hr>
<p><strong><h5>Going through a reorg and realizing that what your group really needs is time together to make decisions and just get to know each other better? Have an intro conversation with me today about designing and facilitating your next gathering. You won't regret it! <a href="https://calendly.com/asheren/15min">Book a free chat</a>.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/reorg-picture.png" alt="a group of people brainstorming a reorg" />
</div>
]]></description>
      </item>
    
      <item>
        <title>5 Strategic Things Every Manager Should Do After a Reorganization</title>
        <link>https://www.daydreamsinruby.com/blog/2025-10-13-reorg-results-new-manager/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-10-13-reorg-results-new-manager/</guid>
        <pubDate>Mon, 13 Oct 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Welcome back to a short 3-part series on everyone's favorite topic... reorgs! In our <a href="https://daydreamsinruby.com/blog/2025-08-27-theres-been-a-reorg/">last post</a>, we focused on what to look for when a reorg has resulted in you taking over a new area or department, as well as how to effectively set the tone and move forward.</p>
<p>In a reorg, the leader shifting roles and the individuals on the ground get thought about a lot. How should we communicate this? How will people feel about these changes? What is the leader at the top-level of this reorg looking for? Frequently, however, middle management gets overlooked. Here, I'll define middle management as any manager in between the top-level individual taking over new teams/groups and the individual contributors. These managers are often given information in a haphazard way, when plans, goals, and timelines are usually only partially thought-through and decided.</p>
<p>These individuals quickly shift into understanding what this means for the people reporting to them but not for them specifically. They skip over that part and then succeed or fail under their new manager not because of strategic and purposeful planning and decisions but as a matter of coincidence. Let's talk about 5 things you should do when you've been reorged under a new manager to be successful.</p>
<p><strong>1. Understand who you new manager is as a leader</strong></p>
<p>This is often a suggestion I make because it really affects how you as a manager can be effective with others. What makes them tick? What are they optimizing for? What kinds of things are important to them? Understanding these fundamentals will help you adapt your communication style and priorities to align with theirs (or understand where alignment might take longer), but it goes deeper than that.</p>
<p>You'll want to find out or ask about how they prefer to receive information. Do they like detailed written updates or quick bullet points? Chat app messages or a doc? Deck or a 1-pager? What kinds of information do they like to receive, and equally important, what do they not need to know about? How do they perceive success, both for themselves and for the people reporting to them? These insights will shape every interaction you have moving forward and help you position yourself as someone who makes their job easier rather than harder.</p>
<p><strong>2. Assume a deep dive into your area</strong></p>
<p>Here's the reality: your new manager is going to want to understand what you do, how you do it, and what's currently happening in your space. You should be prepared for this conversation, and you should approach it strategically.</p>
<p>Start by thinking about everything you want to make sure to communicate to them, and then here's the hard part – slim it down to 1/3rd of those things. This individual is going to be coming into information overload from multiple areas, not just yours. You want to make sure they know and remember the primary 3-5 points you want them to walk away with. Of course there's a whole lot more, and there's time for that later, but prioritize ruthlessly.</p>
<p>Focus on your biggest blockers – what's preventing your team from being more effective? What are you MOST hoping for them to do or help you with? What have you been trying to advocate for or push through for a while that maybe now, with new leadership, might have a chance? Are there any people reporting to you or any projects that you truly want to highlight because they're either doing exceptionally well or need immediate attention? Come to them also not just with problems, but also with ideas. Offering something like, here is something that is a blocker or concern for us and here's what I think would help make it better. Remember, this is your chance to set the narrative about your area, so make it count.</p>
<p><strong>3. Help them get to know you and your style</strong></p>
<p>While you're learning about them, don't forget that this relationship is bidirectional. Your new manager needs to understand how you work best, what your management philosophy is, and what you need to be successful. Give them a little overview into how you run things – are you hands-on or do you prefer to delegate? How do you like to communicate with your team? What does your decision-making process look like?</p>
<p>Be honest about your pet peeves and the things that really matter to you. Maybe you're particular about how information flows to your team, or perhaps you have strong feelings about meeting cadences. What information do you need when showing up for a meeting where you're presenting? Whatever it is, surface it now so your manager is aware. This loops back to item 1, where if you know these things about them and they know these things about you, you can often figure out where you might have points of friction and where together you'll compliment each other effectively. The goal is to find your working rhythm as quickly as possible.</p>
<p><strong>4. Provide additional reading</strong></p>
<p>Here's something I've observed time and time again: companies and organizations often work the same way... hurry up and wait. What do I mean by this? I mean you should always be ready with the next 5 things you would do if you suddenly got the bandwidth or approval to do so.</p>
<p>Something I often see, for example, are managers or leaders talking about needing headcount or to hire additional folks. They ask and ask and ask for a while, never getting approval. Then, one day, their boss gives them the approval and all of a sudden, they have to think about a job description, how to hire that person, what the interview process should look like, etc. They're scrambling because they weren't prepared for the &quot;yes.&quot;</p>
<p>Now, of course you don't want to over-optimize and spend all your time on initiatives that won't see the light of day, but you want to have some groundwork laid for that sudden yes. Who would you hire and why? What strategic initiatives would you kick off and why? What processes would you implement or change? Having these thought through, even at a high level, positions you as someone who's strategic and forward-thinking.</p>
<p>This ties directly back to your area deep dive in number 2. You want to have your new manager walk away with key points from your initial conversation, but you also want to have the documents, key points, and decisions outlined in a clear and concise way so that if you're asked for more details or your manager wants to dig deeper, you can quickly and easily pass additional information along to them. Being prepared shows that you're thinking ahead and that you're someone they can rely on.</p>
<p><strong>5. Build relationships with your peers</strong></p>
<p>Often a move to a new manager also comes with a new peer group, and this shift is just as important as your relationship with your new boss. Just as important as understanding how your new manager works and what they care about, you need to get curious about your new peer group. These are the people you'll be collaborating with, potentially competing with for resources, and hopefully supporting as you all navigate this transition together.</p>
<p>What are the top things on their mind right now? How do they like to work – are they collaborative or do they prefer to work independently and sync up periodically? How do they view their peer team versus the folks that report to them? What is that balance for them between supporting their direct reports and supporting their peers? Understanding these dynamics will help you figure out how to be most effective in this new structure and how to build the alliances that will help you and your team succeed.</p>
<p>The reality is that reorgs happen fast, and middle managers often get caught in the shuffle. By being proactive about these five areas, you can set yourself up for success under new leadership instead of leaving it to chance. Remember, your new manager is likely dealing with a lot of change too, so making their job easier by being prepared and clear about your area will go a long way toward building a strong working relationship.</p>
<p>Stay tuned for part 3, where we'll dive into how to make re-orgs easier for individuals across the organization.</p>
<hr>
<p><strong><h5>Looking to up your management game this year and become the leader everyone looks to? <a href="https://daydreamsinruby.com/advising-and-mentoring/">Book 1:1 time with me to help</a> you get there.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/manager-post-reorg.png" alt="a person at a table looking confused and concerned trying to figure out what to do next" />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Secret to Creating Professional Development Experiences That Actually Matter</title>
        <link>https://www.daydreamsinruby.com/blog/2025-09-12-this-is-not-a-typical-womens-leadership-retreat/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-09-12-this-is-not-a-typical-womens-leadership-retreat/</guid>
        <pubDate>Fri, 12 Sep 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A Leadership Retreat. For. Women. Let's break this down.</p>
<p>We've all seen a thousand of them.</p>
<p>The women's leadership retreats that focus on how busy women are. We balance so much. There's so much mental load. We do all the work things, then we come home and do all the house things, and then you add the kid things on top of that. Often women's leadership retreats are promoted as a chance to take a breaks and for self-care.</p>
<p>Or you have leadership retreats. Experiences that are meant to put you in the room with other peer leaders. There are many of these too. Learn X framework, meet others, talk shop, and more.</p>
<p>These are great. And they all serve a purpose. AND most people know that the best part of these experiences is the hallway track. It's those people you happen to meet. Did you sit at a good table for that one dinner? Were you stuck in the bathroom line with someone who you really vibed with and exchanged business cards? It's happenstance. It's serendipitous. And it's the reason people sign up for these kinds of experiences.</p>
<p>But what if the serendipity was intentional? What if instead of having 5 minutes to chat about who you are and what you do in the bathroom line, you had 50 minutes to understand more about where and how your lives and experiences intersect and how to leverage that in a meaningful, non-transactional way.</p>
<p>I hate calling Extraordinary Machines a &quot;Women's Leadership Retreat&quot;. Because those words are so loaded, and the space is so crowded, and there are so many assumptions about what <em>that</em> kind of thing is.</p>
<p>It'll be different, because it's what is needed by so many women looking for that mix of personal development, professional development, and camaraderie. But enough about <a href="https://daydreamsinruby.com/retreat/">Extraordinary Machines</a> and how amazing it will be (hey you, have you signed up yet?!?! You gotta to it before October 1st).</p>
<p><strong>Let's zoom out a little bit. Thinking about your next professional development experience, how to convince your manager or company to pay for it, or thinking about planning something? Out of hundreds of professional development sessions, conferences, and experiences, what makes a really good one?</strong></p>
<p><strong>1. The Right People</strong></p>
<p>There are a variety of ways in which organizers get the right people into the right room. I know we live in a world of AI, but I'm hesitant to say that an algorithm can make this magic happen (although it can potentially be a start). There's a human touch here that is super important. I often think about this in the same way that I think about putting teams together, hiring, or creating effective smaller groups of people. It's a puzzle, where some of the pieces are obvious, and some are a little more challenging. Every puzzle piece belongs to a puzzle, and every puzzle needs all it's pieces to be complete. This can often be done through a recommendations-base or vetted network (for example, needing to be recommended by someone who's in the network or has done the experience in the past), in addition to some sort of application or conversation.
<p><strong>2. The Right Opportunities to Actually Meet Those People</strong></p>
<p>Ok, I feel like if you've been following this blog for any period of time this is one of the things that I post about the most. A gathering is NOT just about putting people in a room (even on the surface, it seems like that's all that's been done). It's about giving people opportunities, easy ins, and fun ways to actually get to know each other. Think about it this way... a handful of times a day someone asks you how you're doing. And most often, people respond with "I'm good" or "I'm fine" even if they're great! or awful! It's because most times people don't actually want to, or feel comfortable enough, giving the real answer. And that one time a day or week where you can actually, really, truly tell someone how you're doing, it feels so refreshing.
<p><strong>3. Content That Makes You Think or See Something In a Different Way</strong></p>
<p>Let's not fool ourselves, we also go to these experiences to learn something. Maybe that's learning about something practical and tangible, or maybe it's learning something about ourselves that feels like a lightbulb moment. When you are presented with new knowledge or understanding of something, a new viewpoint or lens, that leaves you continuing to think about it beyond that session, that's gold.
<p><strong>4. Having Something You Can Immediately Put Into Action</strong></p>
<p>Yes, the above-mentioned perspective shift or idea that you're left with is important, but, just as important is to have something you can actually do within a few days. I have notebooks upon notebooks upon notebooks of notes and information. And I'll refer to them, but in order to feel productive and really give me some momentum post-travel and settling back into my routine, I need to be able to quickly and easily take action on something.
<p><strong>5. That <em>Just Right</em> Feeling</strong></p>
<p>Yes, I'm always looking for that Goldie Locks moment. These experiences can feel too advanced, or too basic, but what's just right? I often recommend one of the best ways to spend your money is with coaching but that leaves you without the people and camaraderie. If you can put one through four together, then it's likely to hit all those high-points that help people walk away with that "just right" feeling.
<hr>
<p><strong><h5>I'm building the experience I wish existed. The room I want to be in and that I want to share with you. If you've been looking for that same room, maybe we should talk. <a href="https://calendly.com/asheren/15min">Book a quick chat with me today</a>.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/retreat-pixar.png" alt="pixar style women in conversation and post-it notes" />
</div>
]]></description>
      </item>
    
      <item>
        <title>5 Essential Things Every Leader Should Evaluate After a Reorganization</title>
        <link>https://www.daydreamsinruby.com/blog/2025-08-27-theres-been-a-reorg/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-08-27-theres-been-a-reorg/</guid>
        <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Re-orgs are just a part of life in companies and organizations. As the facts on the ground change, people need to move around and structures need to change. Departments get restructured, job descriptions and responsibilities change (slightly or drastically). Re-organizations can happen for a variety of reasons, including but not limited to people leaving due to layoffs, high growth and lots of hiring, new leadership that thinks a different organizational structure will be more effective, and growth opportunities for leadership.</p>
<p>These opportunities can be exciting but also daunting. You're not new to the company and so you don't get that same &quot;I'm new here&quot; grace or as much time and space to learn. You're expected to understand what needs to happen and act quickly communicating up, down, and around with expertise and care. To add to it, rarely when there's a reorg, is it completely business as usual. Accompanying these reorganization decisions is often the need for new or updated processes, changing mandates, or clarifying expectations.</p>
<p>Here are five things to look for when overseeing a new department or area.</p>
<ol>
<li>
<p><strong>Goals</strong></p>
<p>You can tell a lot about a team or department by what their goals are (or if they had any goals). These don't necessarily have to be formal OKRs or KPIs. Maybe these goals are written somewhere and checked in on regularly, maybe they're just scribbled somewhere. Maybe there are department goals, or maybe goals are just set team by team. All of this information tells you a lot about where the department and teams are. Some additional questions to ask are:</p>
<ul>
<li>How the goals are set (bottom-up? top-down? a mix of both?)</li>
<li>Once goals are set, how often are they checked on? How do people show the status or progress towards goals? And is that only transparent for the group leaders or is it communicated somehow to individuals as well?</li>
<li>Once goals are set, how often are they changed or stuck to? How frequently do the goals set become irrelevant because new priorities came in?</li>
<li>What did the group actually achieve in the past few quarters? This is less about saying if a group is &quot;bad&quot; or &quot;good&quot; but just understanding what gets written down vs. what actually gets accomplished (we all know that's frequently different) and what were some of the reasons for delays or issues along the way (because there are ALWAYS some delays or issues... again, not necessarily a bad thing, but important to understand what those were and how visible they were/how they were communicated, if at all)
<br></li>
</ul>
</li>
</ol>
  <p>
<ol start="2">
<li>
<p><strong>Team Effectiveness</strong></p>
<p>To summarize this... are the right people in the right seats? And where are the growth opportunities for individuals. Real talk - not everyone is always in the right seat, and sometimes a new leader needs to come in with an outside perspective to ask different or new questions and understand the state of things. I'm always one to try to work with individuals, provide feedback, and help them grow in the right ways, but sometimes there is just a mismatch of skills and ability, or a career desire mismatch where what the group needs from someone doesn't align with what they want to do with their career.</p>
<p>These are rarely blatant. It's looking for things like is there a team or group that is completely misaligned with the rest of the company? Is there a manager or leader who is in super protective mode as opposed to really providing the feedback their group needs? And if so, where does this stem from? Is it from the individual? or is the individual manager operating with past baggage or how they felt they had to operate under a previous leader based on that leader's potentially non-optimal leadership style?</p>
</li>
<li>
<p><strong>Alignment and Clarity</strong></p>
<p>Alignment and clarity are really about understanding how this group's work fits in with the bigger picture. Is the team clear on why they're doing something? Do they know how their work contributes to what the company as a whole is trying to do (which honestly may or may not be connected to the company goals. In an ideal world, there's a clear connection, but it isn't always there)? Do all the teams in the department understand how/if their goals relate to one another and fit within the larger department?</p>
<p>It's easy in larger organizations (and even sometimes in smaller ones) to operate in a silo - to be very clear on what their team is doing but have no sense of adjacent teams, departments, or individuals (in smaller companies) goals and how it all fits together. If there isn't clarity or even awareness, it's a clear spot where you as a new leader can provide those connections and start creating that connective tissue with other areas.</p>
</li>
<li>
<p><strong>Barriers</strong></p>
<p>Ok, you might not get this right away depending on what trust needs to be built and the circumstances of the reorg but understanding where people think the barriers are is such an interesting conversation to have when you're walking into somewhere new. Now, these barriers might be problems or might not be. They also might not be the actual barriers but it's always interesting to understand the perception here of individuals in different areas and different teams. Basically, what do people think is holding them back from whatever it is. It could be holding them back from being a high-performing team, from accomplishing goals, from communicating effectively, from having the culture they want... all sorts of different barriers might be present. The goal here is just to listen and then see where there are patterns or places you want to explore further.</p>
</li>
<li>
<p><strong>Culture and Communication</strong></p>
<p>It's common for assumptions about areas of a company or organization to be around talent, who is in what role and if they're able to execute on their role and responsibilities. AND, it's very possible that some things need to change there (see item 2), but I've found that more often than not, understanding the culture and communication that is happening in a department, in teams, or between all of the above, is incredibly telling.</p>
<p>Now, this bucket is HUGE. Some of the key things I try to hone in on are:</p>
<ul>
<li>What is the mood? If you were to describe how people feel about the department (or if you ask them), what are the 3 words they use?</li>
<li>How do people interact with each other? And are there differences between written communication (slack or chat app) and verbal (in meetings, for example)?</li>
<li>Do people depend on each other? What's the level of perceived trust and reliability on each other (either within a team or between teams)</li>
<li>What communication seems to be happening &quot;up&quot; and &quot;down&quot;? In other news, how is a manager or individual managing up and what information comes to you as the person who they're reporting to and just as important, how is information getting to the team? When you talk to the team, does it seem like they're hearing the messages you're conveying to their manager that you're assuming is being amplified? or does it seem like they're not getting that message for whatever reason? This communication could be through formal OR informal structures (which is also interesting to notice)</li>
</ul>
</li>
</ol>
<p><strong>Here's what I commonly see after a re-organization...</strong></p>
<ul>
<li>A top down message for the department from you, as the new leader</li>
<li>A deep dive from the leader with each area they're taking over</li>
<li>Showing up to a variety of meetings</li>
<li>Potentially skip levels or small group conversations that are mostly a listening tour</li>
<li>Talking about coming up with a new strategy or plan (sometimes even with an associated goal timeline)</li>
</ul>
<p><strong>Here's what I don't see as often...</strong> Actually getting people together to make this progress. Note - I didn't put many qualifiers on this statement. Is it getting people together virtually vs. in person? Is it the whole group or just the leadership? Really any of these is better than what currently happens.</p>
<p>One of the most overlooked opportunities when taking on a new department is bringing people together. As a leader, this gives you the chance to set the tone, meet everyone face-to-face, and most importantly, make real progress on key initiatives that will move your teams forward. Whether it's the entire department or just the leadership team, a well-designed gathering can set the foundation for the incredible work ahead. Of course, you want this time to be useful, valuable, and memorable—which is where thoughtful design and facilitation become essential to striking the right balance.</p>
<p>Now, of course you want this gathering to be good (and, shameless plug, this is where a professional comes into play and can be very helpful), so here are some suggestions about what to do with that time:</p>
<ol>
<li>Helping the team get to know one another. Not through a happy hour or &quot;field trip&quot; (although an experience together can be excellent, if it's been thought through and isn't just branded as &quot;team bonding&quot; that doesn't actually bond the team). This doesn't have to be fancy or expensive. It needs to be meaningful. It needs to actually spark new and interesting conversations, and it needs to build trust.</li>
<li>Identify what the group considers as pain points or places where there can be more efficiency. The best way to do this depends on a handful of different factors apparent within the team, but bringing to the surface these issues and then providing space and time to talk about them in a constructive way helps lay the groundwork for how this first team will work together in the future.</li>
<li>Dream a little bit. It's exciting to get a new group together, even if the circumstances of the reorg were based on constraints or other company issues. Now, you don't want to do a full blue-sky brainstorm if you can't actually take action on any of that, but there are great ways to frame these kinds of sessions so they're still inspirational and energizing while not making empty promises.</li>
</ol>
<p>That right there is probably 2 full days of time together, which gives you plenty to work with.</p>
<p>Stay tuned for parts 2 and 3 of this reorgs series -
<br>Part 2: How to adjust and operate if you're reporting to a new manager
<br>Part 3: How to make re-orgs easier for individuals</p>
<hr>
<p><strong><h5>If you're looking for someone to run your gathering so you can focus on participating instead of running the sessions, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you GSD to set the right foundation with your new team.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/re-org-1.png" alt="people like puzzle pieces intersecting in different ways" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Why Your Fall Business Update Is Putting Everyone to Sleep (And How to Fix It)</title>
        <link>https://www.daydreamsinruby.com/blog/2025-08-05-state-of-the-business/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-08-05-state-of-the-business/</guid>
        <pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Summertime. Most people think about summer as a different place, a chance to slow down, but for most leadership teams, the summer is the perfect time to refocus and align on critical outcomes for the rest of the calendar year. The summer provides the perfect opportunity to get the smaller group together while calls take a little longer to get returned and teammates are in and out of vacations, or, for many nonprofits, staffing immersion experiences or internship programs. The result of this... the September &quot;State of the Business&quot;. It's when everyone is finally back and you, as the company's leader, needs to get everyone back on track and refocused for the next few months.</p>
<p>Often, in the fall, companies have the opportunity to do this in person at a company offsite. Other times, it's remote, but i'm here to say... please make it memorable and engaging. Your staff is tired of looking at a bunch of slides that they have to learn about, process, and respond to within 30 minutes.</p>
<p>Usually, when I say this, I get a variety of responses:</p>
<ul>
<li>
<p>People like this format. I always get good responses to it.
Unsurprisingly, people don't want to tell the CEO, Executive Director, or someone likely multiple steps above them hierarchically that the information they conveyed wasn't done so in an optimal way.</p>
</li>
<li>
<p>This is what people are used to. They would get confused if we did it a different way.
This is a risk, and it definitely involves more time and planning to get it right but if it's planning effectively, then you minimize this risk. Plus, when was &quot;we've always done it this way&quot; the best reason to contunue doing anything the same?!</p>
</li>
<li>
<p>But how can we do this differently? We have a lot of information to get through.
It's hard to think about how to get through as much information but there are lots of interesting ideas. There's also sometimes a question of what information does everyone <em>need</em> to know and then beyond that, doing an optional session for folks who want to know more or get into the weeds on certain things.</p>
</li>
<li>
<p>I don't have the time to think about a different way of facilitating this information.
Hi. My name is Allison :-) But in all seriousness, this is where outside resources can be helpful. You can talk about what information you want to convey, how you've conveyed it in the past, and then work together to convey the information differently and have a better, deeper conversation (either structured with or facilitated by someone outside of the organization)</p>
</li>
</ul>
<p>So, what does this look like in reality? Here are a few ideas (that probably won't <em>exactly</em> for your organization, but give a basis that you can make some small tweaks and changes to)</p>
<ol>
<li>Pre-recording and pre-collecting questions - this enables individuals to actually process and think about the information in advance. My recommendation is to send this at least a week in advance so people can fit it into their schedules. And still keep the time tight... just because you're pre-recording, doesn't mean you should create 40 minutes of content instead of 20.</li>
<li>segments - do a segment and then breakout rooms with something to DO, not just a question to discuss. For example, this can be an open question where you want ideas from people, or writing down what work they know of that maps to these focus items, or have them outline the top 3 things they're excited for and where they think the risks are of the plan.</li>
<li>stations around a room (think about this like museum exhibits and everyone gets to walk around and learn at their own pace). This allows more of your leadership team to get involved as well. They could be presenting facts or information, graphs, short clips from customers, and individuals can ask questions focused in the areas they know less about and spend more time at those stations than the ones for their specific teams.</li>
<li>A more off-the-wall idea - Sending out the information in advance, then coming in and doing smaller group discussions, and having a couple of people volunteer to do slideshow karaoke (15 pre-determined slides, advancing automatically every 15 seconds) with their content based on the state of the company information. It's bound to be memorable.</li>
</ol>
<div style="text-align:center"> 
  <img src="/assets/images/blog/leadership-offsite.png" alt="a person at her table with speech bubbles and inside the bubbles are images of her life goals" />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Productivity Paradox: How Our Obsession with Efficiency is Making Us Less Productive</title>
        <link>https://www.daydreamsinruby.com/blog/2025-07-22-the-productivity-paradox/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-07-22-the-productivity-paradox/</guid>
        <pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Friends! Colleagues! Random people who stumbled upon this post! We have a problem. And that problem is our unhealthy, counterproductive obsession with being productive.</p>
<p>For those who know me, you'll laugh at this opening because many tell me I'm one of the most productive people they've ever met. And it's true! I utilize every minute of every day. My to-do list is immaculately organized into days, subcategories, big things, small things, and a &quot;most important&quot; section. I love systems that streamline my work and maximize what I can accomplish.</p>
<p>And yet, I've had this nagging feeling, really since COVID started, that we're so focused on productivity that it's become unproductive. We're trapped in a paradox where our pursuit of efficiency is actually making us less efficient.</p>
<h3>The Burnout Behind the Numbers</h3>
<p>The statistics paint a stark picture. Despite all our productivity tools and optimizations, 67% of workers believe burnout worsened during the pandemic, and 69% of remote employees are experiencing burnout symptoms. Is it possible that in an attempt to optimize ourselves and make ourselves the most efficient versions we can be, that we are accidentally burning ourselves out faster? Over half of remote employees report working more hours than they did in the office, with 31% working &quot;much more&quot; than before the pandemic. Counteract this with the stories we hear of people holding multiple jobs at once and bragging about working in their PJs or half-heartedly from bed. It's almost as if we're trying to prove we're not those people, that we're the ones who are actually productive, even if it means working ourselves too hard.</p>
<p>We all have bad days and good days, but somewhere along the line, the bad days became less acceptable, even just to ourselves.</p>
<h3>How AI Adds to the Problem (while being a believer in its potential)</h3>
<p>Then came the latest productivity panacea: artificial intelligence. The claims are breathtaking. McKinsey research suggests generative AI could add $2.6 trillion to $4.4 trillion annually to the global economy, and 64% of businesses expect that adopting AI will significantly impact productivity growth. Some studies show AI improving employee productivity by 66% on average, with claims reaching as high as 126% improvement for programmers using AI tools.</p>
<p>But here's where the productivity paradox reveals itself most clearly: 77% of employees say AI tools are doing the opposite of what's expected, actually adding to their workload, and 47% report not understanding how to achieve the expected productivity levels with AI.</p>
<p>I see this in my own work. AI certainly makes me more productive for some tasks - it helped edit this very blog post and answered at least a dozen random questions today. But it also took significant time to set up properly, over the course of months and experimenting with many of the new tools coming out every week. For some workflows, the initial investment was worth it. For others, I've definitely fallen into the sunk cost fallacy, wasting time thinking I could optimize something that didn't need optimizing.</p>
<h3>The Optimization Trap</h3>
<p>This is the heart of our productivity problem: we're spending so much time trying to be productive that we're not actually productive. We optimize our systems, download new apps, read productivity books, and reorganize our workflows - all in service of being more efficient. But these meta-productivity activities often consume more time than the actual productivity gains they provide.</p>
<p>First, it was about proving we could be productive working from home. 81% of remote workers check email outside of work hours, including 63% on weekends and 34% on vacations, hardly the picture of improved work-life balance productivity was supposed to deliver.</p>
<p>When that productivity started to wane (or was perceived to wane), we saw calls for return-to-office mandates, with leaders citing productivity concerns. Yet Bureau of Labor Statistics research finds &quot;little relationship between labor productivity and the ability of workers in an industry to work entirely remotely&quot;.</p>
<h3>The Science of Strategic Slowing Down</h3>
<p>Here's what's particularly interesting: there are decades of research showing that breaks, rest, and unproductive time are essential for actual productivity and creativity. A study published in the Journal of Applied Behavior Analysis found that 75% of students were substantially more productive during sessions with planned breaks. More than 85% of employees believe taking regular breaks would boost their productivity, yet more than one-quarter of workers don't take any break aside from lunch. There are proven systems like pomodoro set up to encourage breaks and yet we still work through them or question their value.</p>
<p>The research is overwhelming: rest breaks do not impact adversely upon productivity, and when coupled with health-promoting practices, can contribute to a paradigm shift for workplace culture. Taking effective breaks in the workplace has been associated with benefits to wellbeing and productivity in several roles. Studies show deliberate rest can boost productivity by 15% and improve work satisfaction by 37%.</p>
<p>Yet despite this mountain of evidence, every conversation, every tool, every minute feels like it needs to be productive. Unproductive time leads to guilt, pressure to make up hours, and more stress—which, ironically, makes us less productive.</p>
<h3>Breaking the Productivity Paradox</h3>
<p>Workplace stress inflicts an annual cost of around $300 billion on the U.S. economy, yet we continue to optimize for the appearance of productivity rather than actual results. We're measuring the wrong things and optimizing for the wrong outcomes.</p>
<p>The most productive teams I've worked with, and the research backs this up, aren't the ones with the most sophisticated productivity systems or the longest working hours. They're the ones that focus on outcomes rather than activities.</p>
<p>Maybe the real productivity hack isn't another app or optimization technique. Maybe it's figuring out what helpful unproductivity looks like for each of us personally.</p>
<p>Because in our quest to optimize every moment, we might just be optimizing ourselves out of the very creativity and sustainability that true productivity requires.</p>
<p>The irony is fascinating: to be more productive, we might need to care a little less about being productive.</p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/productivity-paradox-pen-nub.png" alt="A stylized illustration of a hand holding a pencil, poised to write on a blank tile surrounded by patterned red, beige, and maroon tiles. The hand and pencil cast a long, sharp shadow across the tiled surface, creating a sense of intention and contrast between the blank space and the surrounding complexity." />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Anti-Goal Setting Guide: Creating Objectives People Actually Care About</title>
        <link>https://www.daydreamsinruby.com/blog/2025-05-28-goal-setting-that-doesnt-suck/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-05-28-goal-setting-that-doesnt-suck/</guid>
        <pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The mere mention of &quot;goal setting&quot; often elicits eye rolls and groans from just about everyone. And honestly, who can blame them? In my years working with teams and individuals across various sectors, It's a familiar cycle: organizations mandate goal-setting exercises, people dutifully write down objectives they think sound good, and then those documents gather digital dust until the next review cycle. This happens even for folks who DO truly believe in goal setting and think it's a good idea. It simply gets lost in the grand scheme of all the things going on every day.</p>
<p>Probably most of us have had that direct report (or BEEN that direct report) who just doens't connect with having to write goals. Why spend the time? What is it for? They don't find it motivating at all. And it's relegated to a silly HR checkbox that has to be checked.</p>
<p>So if this is happening everywhere, what's the point?</p>
<p>The biggest hurdle in effective goal setting isn't the mechanics of writing SMART objectives or creating detailed action plans. It's getting people to genuinely care about the goals they're setting. Without emotional investment, goals become nothing more than bureaucratic exercises or forgotten items on a to-do list.</p>
<h3>Three Approaches That Actually Work</h3>
Instead of going through the motions with traditional goal-setting methods that often fail, here are some things that have worked for me that might work for you too:
<p><strong>1. Understand Each Person's Relationship with Goals</strong></p>
<p>Start by exploring how people naturally think about achievements. This is about meeting them where they are, not where some management book says they should be.
Ask questions like:</p>
<ul>
<li>Do you set personal goals, or just professional ones?</li>
<li>Are you someone who works steadily toward milestones, or do you tend to hyperfocus on things until they lose their appeal?</li>
<li>Can you think of a goal you accomplished in the last six months? What was your process?</li>
</ul>
<p>These questions help people understand their own goal-setting patterns and allow you to tailor an approach that works with, not against, their natural tendencies.</p>
<p>This conversation can be revelatory for many people. Helping them recognize what goals they actually DO set, even if not explicitly, helps them realize how they naturally break down tasks and things they want to accomplish every day. Maybe they're someone who plans elaborate vacations by researching and organizing every detail, or even just committed to cooking more often and how they accomplished that task. These patterns reveal how they naturally approach accomplishing things.</p>
<p><strong>2. Create a Future Story</strong>
One of my favorite approaches is asking, &quot;What's the story you want to tell about yourself a year from now?&quot; This flips the common &quot;letter to your younger self&quot; exercise (which I personally don't really like) by putting people in their future seat. What would your future self want to say you accomplished this year?</p>
<p>For me personally, I really relate to the vision board style of this exercise — what do I want my year to look like? What words or images jump out at me when I'm looking through magazines? What am I trying to avoid? This process helps me turn visuals into concrete thoughts about what I want to achieve and how I might do that.</p>
<p>This approach works beautifully because it taps into a personal narrative and identity that feel more &quot;me&quot; and more compelling. (Hot tip, because I'm always talking about how to facilitate conversations effectively, vision-boarding is an awesome group workshop activity that can be done using physical OR virtual boards.) The conversations that emerge and what people realize about their goals for the upcoming year are often better (and easier to translate in to words) than what comes from traditional goal-setting exercises.</p>
<p><strong>3. Break It Down to Build Momentum</strong>
Once someone has identified meaningful goals (starting small with just 1-2 things), help them break these down into manageable steps that match their working style. The right breakdown feels achievable rather than overwhelming, making it less likely they'll abandon the goal midway. Draft a dew of these smaller items and then ask - when you look at these steps, do they feel exciting to tackle or do you start thinking of everything else on your to do list you could do instead of these steps? It's a great gut-check.</p>
<h3>Making Goals Matter</h3>
While I don't have a strong preference for any particular goal framework, I do find that SMART goals (Specific, Measurable, Achievable, Relevant, Time-bound) provide a useful check. But more importantly, I always encourage asking: "Is accomplishing this goal completely within my control?" If not, it might need to be reframed.
<p>A common pitfall I've observed is that people often pick a goal of accomplishing a specific project, but they actually have no control over whether that project gets prioritized or if the scope changes dramatically. It's really important to think about what you can do that's within your control and also the WHY behind it. Why does learning a particular skill seem interesting? What will it enable you to do?</p>
<p>The true test of effective goal setting isn't how well the goals align with some prescribed format — it's whether people naturally reference and work toward them without being prompted. When team members start mentioning their goals in one-on-ones unprompted, or when they excitedly share progress updates, that's when you know you've helped create goals that actually matter to them.</p>
<p>When we reimagine goal setting not as an administrative requirement but as creating the story we want to tell, the process moves from obligation to opportunity. The secret isn't in the framework—it's in connecting goals to what actually matters to each person.</p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/story-telling.png" alt="a person at her table with speech bubbles and inside the bubbles are images of her life goals" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Building Leadership Influence By Asking The Right Questions First</title>
        <link>https://www.daydreamsinruby.com/blog/2025-04-22-executive-communication-by-asking-the-right-questions/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-04-22-executive-communication-by-asking-the-right-questions/</guid>
        <pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A frequent topic among many leaders and leadership circles is how to maximize your level of influence. How do you get the initiatives, projects, and priorities that you want approved <em>actually</em> approved? How come that guy over there always gets a yes while you seem stuck in the no-zone? You find your projects and ideas constantly getting deprioritized or misunderstood, and, let's be honest, it's frustrating.</p>
<p>As a leader of any company, organization, or department, one of the most important skills to learn is about what to communicate, when to communicate, and how to communicate (I know, I'm not telling you anything new here). This becomes increasingly complex because at every stage of leadership, it changes pretty dramatically based on what the group is optimizing for.
<p>A helpful exercise to start with is who are you writing for (pick 1 audience), what information is important to them, and what level of granularity do they need. When communicating up or out, even though it's opposed to what most studies state, many of us provide _too_ many details because we feel more information is critical to get our points, progress, or problems across to the reader. 
<p>Here's a broad generalization of that exercise that you can use as a starter
<p><strong><em>For your peer team at a leadership level</em></strong>
<br>Context needed: what problem is the work related to
<br>Impact on them: what will the impact be on the company or organization as a whole
<br>What information they need: what dependencies or needs do you have from their (or other) teams.</p>
<p><strong><em>For your manager (this could be a board president or CEO)</em></strong>
<br>Context needed: risks and general understanding of progress
<br>Impact on them: How these risks might change priorities or plans that have been communicated previously
<br>What information they need: how concerned or not concerned they need to be</p>
<p><strong><em>For your team</em></strong>
<br>Context needed: How their work fits in with other teams and the greater
<br>Impact on them: what will the impact be on the company or organization as a whole? What do <strong>I</strong> need to do support-wise, resources-wise, or decisions-wise?
<br>What information they need: what dependencies or needs do you have from their (or other) teams.</p>
<p>Let's focus in on thinking through your manager at the executive level... in these communications, <em>everyone</em> is optimizing for time. This might sound silly, but focus on less words that mean more and are easily digestible in a glance. What do <strong>I</strong> need to do as the person reciving this update?</p>
<p>As you can see even from the brief mapping above, executive level communication should be more succint, concrete, and focused over some of the additional details, context, and information you may want to provide to your department or team. Now, this doesn't mean this is all the information YOU have. You <em>present</em> the absolute most important pieces of information. If you're presenting a new idea or initiative, it should be framed with a clear impact on the company or organization as a whole and framed in a way that focuses on what your CEO or Executive Director (or Board President in some circumstances) cares about. For example, we will move from X to Y by doing this.</p>
<p>If you're providing a status update, keep it clear and actionable (see the template below).</p>
<p>Now, your influence won't grow overnight, but gradually with more effective communications, your level of earned trust increases. You become a person who always has the information that's needed, has thought about metrics or company impact, and projects that get green-lit are thoughtfully managed with clear and productive updates (a special note: this doesn't mean every project has to be flawless, but there should be reasonable explanations and conversations around when work gets offtrack in order to get it back on track). Additionally, once how you communicate is more clear, you can focus on if you're pitching the right <em>kinds</em> of ideas because getting your projects, ideas, and initiatives prioritized has 2 parts... part 1: are you communicating the idea effectively? And part 2: does what you're communicating result in better/more company or organization-wide impact than the ideas and desires others are bringing to the table <em>in the eyes of the company leader or leadership team</em>?</p>
<p>Below are two templates you can use. One for mapping some details about who you're communicating with and the second for the actual update to provide.</p>
<h4> Mapping Your Audience </h4>
<object data="/assets/pdfs/Mapping-your-audience-Template.pdf" type="application/pdf" width="600" height="400">
    <p>It appears you don't have a PDF plugin for this browser. No biggie... you can <a href="/assets/pdfs/Mapping-your-audience-Template.pdf">click here to download the PDF file.</a></p>
</object>
<p><a href="/assets/pdfs/Mapping-your-audience-Template.pdf" download>Download PDF</a></p>
<script>
document.getElementById('pdf-download-mapping').addEventListener('click', function() {
  plausible('PDF Downloaded', {props: {pdfName: 'Mapping-your-audience-Template.pdf'}});
});
</script>
<h4>Executive Communication Template</h4>
<object data="/assets/pdfs/Executive-Communication-Template.pdf" type="application/pdf" width="600" height="400">
    <p>It appears you don't have a PDF plugin for this browser. No biggie... you can <a href="/assets/pdfs/Executive-Communication-Template.pdf">click here to download the PDF file.</a></p>
</object>
<p><a href="/assets/pdfs/Executive-Communication-Template.pdf" download>Download PDF</a></p>
<script>
document.getElementById('pdf-download-exec').addEventListener('click', function() {
  plausible('PDF Downloaded', {props: {pdfName: 'Executive-Communication-Template.pdf'}});
});
</script>
<hr>
<p><strong><h5>Trying to nail that communication? <a href="https://daydreamsinruby.com/advising-and-mentoring/">Book 1:1 time with me to help</a>.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/executive-communication.png" alt="split image of group of people working on their laptops and some on the whiteboard" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Why Hackathons Are Breaking (Not Making) Your Engineering Culture</title>
        <link>https://www.daydreamsinruby.com/blog/2025-03-05-lets-do-a-hackathon/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-03-05-lets-do-a-hackathon/</guid>
        <pubDate>Wed, 05 Mar 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In Engineering, it's common to jump into a hackathon as a core activity for a group gathering. And why not? The working principle is that a hackathon scratches so many itches.</p>
<ol>
<li>Engineers are asking for it</li>
<li>Product thinks it's a great idea</li>
<li>It's energizing, you can feel the excitement when ideas come up, when teams start working, and when groups are demo-ing at the end</li>
<li>People get to work with others they don't usually work with</li>
<li>It's relatively easy to organize. There are a few different approaches but they don't change that much and mostly the expectation is that engineers will self-organize effectively.</li>
</ol>
<p>The intended outcome of this time together is a high performing team that encourages one another and, for business goals, realizes how quickly they can ship and iterate when they put their mind to it.</p>
<p>At the end, the entire department or company are cheering with a variety of emojis and excitement. They're in awe of this team that usually works behind the scenes, quietly shipping the work that moves the entire company forward. This is their time in the spotlight and they love it.</p>
<p>And yes, hackathons are great for vibes and feels in the moment but it doesn't actually accomplish some of the key goals of gatherings.</p>
<p>It doesn't actually bring people together and allow them to make meaningfully deeper connections that enable productive work and communication.</p>
<p>It doesn't actually energize people outside of that moment.</p>
<p>It doesn't actually make engineers think or motivate them to work faster and more iteratively when they put their mind to it.</p>
<p>It doesn't help the larger company understand more deeply what engineers care about as company employees or the difficulties they face every day.</p>
<p>And it actually frequently damages morale and expectations in unseen, unspoken, and undocumented ways.</p>
<p>At this point, I bet a lot of you are saying, Hey now. That's not fair. We get great feedback. People love it! They're always asking to do them again!</p>
<p>When this is the case, the goal is to dig into each of these reasons WHY you do a hackathon and ask why or how.</p>
<p>Why are engineers asking to do a hackathon? From my experience working with multiple teams, departments, and companies, it usually falls into 3 buckets.</p>
<p><strong>Bucket 1:</strong> we don't know what else we would do that would be a better use of our time and please please don't make us do ice breakers or sit through a dozen presentations (which commonly seems like the only alternative).</p>
<p><strong>Bucket 2:</strong> I don't have the ability/autonomy to work on great product ideas that I have. This is my chance to prove myself and if I do a great proof of concept/demo, then my idea will make it onto the product roadmap, will be prioritized, and we'll be able to ship it (which feels damn good, when you see something you thought of go into production and be used by real customers)!</p>
<p><strong>Bucket 3:</strong> There so much tech debt, it's driving me crazy. Flaky tests, refactoring, migrations. If only I had a few days to tackle these items, I'd be able to make the codebase so much cleaner and easier to work in.</p>
<p>But if you dig deeper, what are the long-term outcomes?</p>
<p>How do hackathons actually help people connect? They don't. People might work with new folks to pitch an idea or break down tickets. Maybe they jump on something to pair together, but those moments are often few and far between when a group is trying to get something demo-able within a short period of time.</p>
<p>How do hackathons create sustaining energy that lasts beyond the hackathon? They don't. Here, there's a double-edged sword. Either hackathon work makes it into production when it isn't quite ready adding to the maintainability burden OR hackathon work never actually floats to the surface compared to other priorities and work-in-progress pull requests wither on the vine collecting merge conflict after merge conflict until it's decided that if that work happens, it'll just need to start from scratch anyway.</p>
<p>How do hackathons help engineers believe they can do work faster if they put their minds to something? They don't. However, a result of seeing what a team can produce in less than a week often leaves non-technical executives asking &quot;why can't this be our every day velocity and rate of shipping?&quot; which is both unreasonable and dangerous.</p>
<p>There are ways you can create deeper connections, talk about technical concerns and topics in a way that is exciting and energizing, and help convey expertise and contribution to the larger company and non-technical teammates, but a hackathon ain't it.</p>
<hr>
<p><strong><h5>If you're eager to discover what an exceptional offsite, retreat, or gathering facilitation could look like for your group, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you create magical moments and get to GREAT. Whether you're seeking a complete overhaul of a traditional format or looking to infuse your event with fresh, impactful elements, I can help guide you through this journey.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/hackathon.png" alt="split image of group of people working on their laptops and some on the whiteboard" />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Post-Performance Review Guide No One Talks About, Part 2</title>
        <link>https://www.daydreamsinruby.com/blog/2025-02-10-my-performance-review-is-bs/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-02-10-my-performance-review-is-bs/</guid>
        <pubDate>Mon, 10 Feb 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>What if you think your performance review is bullshit? This is very valid and a common feeling. It weaves and dives into all sort of different areas. The performance review process in general is annoying. The feedback I got was ridiculous. The feedback I received was biased. My manager doesn’t even know what I do so how can they effectively give me feedback (this is a common one the higher you get in an organization. You’ll likely be reporting to someone who has a different area of expertise than you do).</p>
<p>To mindfully and meaningfully approach this emotional area of performance reviews and getting feedback, it’s important to first note some of the realities. Performance reviews are a fact of business, and frequently, when performance reviews aren’t in place, it’s even more difficult to understand a perspective that is different than your own about how your work, impact, and behaviors are being seen by others. Even individuals who work independently take moments to pause and reflect and ask for feedback from others around what is going well and what could be going better. An individual who doesn’t do this, regardless of company status, promotional desires, and a whole host of other factors, is just not going to grow and learn as much as those who are regularly reflecting, even if that reflection result is “I think I should keep doing a majority of what i’m currently doing.” Second, sometimes it is true, you may not have gotten great feedback (or even verbal feedback beyond what was written). Your manager might not see enough of what you do or really understand certain aspects of your role.</p>
<p>But here’s something that I always keep in mind, especially for feedback that I don’t agree with OR where I know there are a variety of contributing factors: Why am I getting this feedback? I often try to think about why I’m getting this feedback through 3 lenses… perception, reputation, and visibility. What does my manager think of the work I’m doing? Why might they think that way? What is my manager hearing? Why are they hearing that? What is my manager seeing? Why are they seeing that?</p>
<p>Perception - Perception is looking at how the work or individual is perceived. What does the manager think about the work they're seeing? Is that perception real? Or is it being influenced in some way? How could the work that's being done, conversations, or other interactions be perceived in different ways by different individuals?</p>
<p>Reputation - This is what your manager (or maybe others... remember from the first blog post, a review isn't only reviewed by a single manager, it is often discussed by other parties as well) might be hearing about you or your work. What's the reputation you think you have? Is it something you want to change (because it might not be, and that's ok!) It is common that individuals have reputations at organizations that either work for them or against them.</p>
<p>Visibility - What is the manager seeing? This becomes even more critical as you have managers with larger and larger scopes of responsibility themselves, or when your scope of responsibility grows. It becomes more difficult for you manager to track what you are doing, what progress you are making, and what your day-to-day looks like. In this scenario, you don't want to give them a play-by-play (especially the higher up your go) but you do want to find ways to provide visibility into the work you're accomplishing so they have a better overall view of it even outside of performance review times.</p>
<p>And now, what can I do with that information to help my manager better understand how I am executing in my role, why, and see if we’re aligned on that. After all, while I want to look good, a large part of what we do is making our manager look good or making the company look good. What are THEY optimizing for? What’s helpful for them in their role? These questions can be used whether your manager is the CEO all the way to a team manager.</p>
<hr>
<p><strong><h5>Trying to reframe and not getting anywhere? <a href="https://daydreamsinruby.com/advising-and-mentoring/">Book 1:1 time with me to help</a>.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/reflecting-on-perf-review.png" alt="a man holding his performance review document" />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Post-Performance Review Guide No One Talks About, Part 1</title>
        <link>https://www.daydreamsinruby.com/blog/2025-02-03-reflecting-on-your-performance-review/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-02-03-reflecting-on-your-performance-review/</guid>
        <pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>How often have you completed a performance review and identified actionable goals and next steps only to then not really look at them when work life gets busy again? The day to day, for anyone in a leadership role, gets extraordinarily busy. Think about your last 2 weeks. How many different kinds of tasks have you had to jump into?</p>
<p>People don't frequently think of the post-review review. This is another kind of self-review. It can be a lot to process all at once, and, as humans, we tend to focus on the critical feedback as opposed to the positive feedback we’ve heard. Often individuals in high-performing, high-expectations roles are always striving to do better, not necessarily for a promotion but to be seen as more competent, more capable, and therefore more successful in the challenges roles they take on.</p>
<p>First is the mindset that you go into reviews with. Yes, I might sound like an HR talking head for a moment and this line might feel very “corporate” to folks, but regardless of how performance reviews are used at your company, the true and desired goal is to be able to give individuals valuable feedback that help them succeed at the company. Now, does this play out perfectly and always feel that way at every company? Of course not, but trying to go into reviews with that attitude, and picking out the pieces of the review that resonate with that wavelength, can really go a long way.</p>
<p>Second, is how to process. I always start with give yourself some time. It is hard to give feedback effectively, and it is hard to receive critical feedback. This is why so many people go so long in their careers getting feedback like “just keep doing what you’re doing” or without getting feedback that truly allows them to grow, learn, and improve. When you’re getting feedback, try to take a beat. If you agree with it, great! Ask some clarifying questions and you’re ready to move on to the next step. If you don’t agree with it, or are confused by it, I encourage you to express the confusion or use a statement like “I’m processing this and I’m not sure how I feel about it. I need to think so that I can come back with better questions that will better help me understand where this feedback is coming from” (more on this in the next post). Oftentimes people land on “we agree to disagree” which is an <em>ok</em> place to land but of course not ideal from anyone’s perspective as likely similar feedback will continue surfacing as a result.</p>
<p>Third, and this is the trickiest, is determining what feedback you think is legitimate and not legitimate. We live in the real world and what that means is that people have conscious and unconscious biases. They also see some things and don’t see others. To be honest, they pay attention to some things and don’t pay attention to others until performance review time comes around. After using the processing language above, and before fully coming up with a plan, make a note of what feedback is easy for you to understand, process, and take action on, and what feedback feels more challenging. Not to tease the next post again, but in the interest of keeping this post a reasonable length, stay tuned for more on what to do with the feedback that feels challenging for you to process.</p>
<p>Fourth, use this information to come up with a plan. Hopefully you’ve received actionable feedback with good examples providing where your areas of growth are, but, let’s face it, the higher up you are and the more experience you get, the more likely it is that you’ll get vague or nebulous feedback and will need to figure out how to turn that into actionable feedback for yourself. Don’t try to tackle all the things at once. With your manager, or on your own, attempt to determine which piece of feedback is most impacting your success in your role or at the company and then take some time to figure out what you may be able to do about it. Is it more reading and research? Is it connecting with peers or a mentor on the topic? Is it something else? And by when do you want to do that? Once you have the feedback and you know what you want to do and by when, you can also use that timeline to try to measure the effectiveness of the actions you’re taking to improve in that area, either on your own or with your manager. Having a plan, continuing to look at it, and regularly reflecting on where you think you’ve made progress is the biggest takeaway to a performance review because so often we get the feedback, process it, and then put it down or keep it in the back of our minds without really regularly doing a self-check-in on it.</p>
<p>Notice that this post isn’t at all about giving feedback or having the performance review conversation. There are lots of posts and books about that, but I think what exists less is how to process and what happens as the recipient of a performance review.</p>
<hr>
<p><strong><h5>If you’re trying to process your performance review but finding it challenging, <a href="https://daydreamsinruby.com/advising-and-mentoring/">book 1:1 time with me to help</a>.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/after-performance-review.png" alt="a woman looking with eye glasses looking at her performance review document" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Beyond &#39;Keep Doing What You&#39;re Doing&#39;: Writing Reviews That Matter</title>
        <link>https://www.daydreamsinruby.com/blog/2025-01-22-performance-reviews-for-direct-reports/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-01-22-performance-reviews-for-direct-reports/</guid>
        <pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>You want to do the best you can for your direct reports, but performance reviews are A LOT. You’ve got peer reviews and reviews of each of your direct reports, on top of all the usual duties and coaching other individuals on writing reviews. Within the mix of folks you’re writing reviews for, you’ll frequently have individuals in a few different spots… some that you need to provide more critical feedback for, some that are up for promotion and you’re looking to make the case, and others that are strong and steady where they’re at. Regardless, what almost no one ever wants to hear is “just keep doing what you’re doing.”</p>
<ol>
<li>Think about the individual’s impact. Sometimes it can be easy to overly focus on code shipped (either by that individual or by a manager’s team) but what was the impact of what was shipped. Additionally, hopefully you company assess performance on more than just code shipped. Code shipped shouldn’t overshadow teamwork because one person shipping a lot of code doesn’t set a team or company up for success, so beyond shipped code, where else did the individual have an impact? Or where could they have more impact? This line of thinking is important for both individual contributors and managers at any level of a managerial role.</li>
<li>For reviewing people in management roles in particular, it’s important to look at multiple inputs. What is their team saying about them? What are their peers saying about them? Where and how is their impact felt multiple levels “below” and “above” them (putting in quotes because I hate the terms above and below, but it’s the easiest way to describe things if you’re picturing an org. chart). AND how can you contextualize that information with what you know is happening on a team. For example, a department lead or VP of Engineering looking at turning a team around may not have excellent reviews from the individuals in their reporting line but knowing what challenges they are facing and how they are overcoming those is critical.</li>
<li>Recognize your role in their success or failure. As an individual’s direct or indirect manager, frequently you have a role in what opportunities are offered to those folks. If you’re writing a review (or reviewing ones from your department) and it feels lackluster and when you go to provide constructive feedback to the individual but it feels inactionable, the correct next step is to look in the mirror. What can you delegate, what opportunities can you provide, or what opportunities should you be advocating for them to receive based on their opportunities for growth.</li>
</ol>
<p>One hot tip (that might not help you now but will help you in the future!)... take 1:1 notes! <a href="https://daydreamsinruby.com/blog/2024-01-11-effective-1-1s/">Holding effective 1:1s</a> regularly and taking notes during them is the most effective way to make writing performance reviews a whole lot easier than trying to remember all of the incredible things your direct reports have done over the past number of months.</p>
<hr>
<p><strong><h5>Looking to up your management game this year and become the leader everyone looks to? <a href="https://daydreamsinruby.com/advising-and-mentoring/">Book 1:1 time with me to help</a> you get there.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/writing-reviews.png" alt="a lady resembling a fairy godmother with a glowing magic wand in her hand surrounded by her subordinates" />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Art of Upward Reviews: Writing Feedback Your Manager Will Actually Use</title>
        <link>https://www.daydreamsinruby.com/blog/2025-01-15-performance-reviews-reviewing-your-manager/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-01-15-performance-reviews-reviewing-your-manager/</guid>
        <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In part 1 of this series, we talked about writing your self-review, who reads it, how to format it, and more. In this next section, we’ll go into writing a review for your manager, and this works for managers at any level from line managers to writing a review for the CEO.</p>
<p>Just like a performance review written for you, your goal in writing a review for your manager is to help them become better. You want them to be the manager of your dreams and what you imagine effective management to look like. You want them to be better and do better, because we all always have critical growth areas. Without keeping this in mind, sometimes you may edge towards writing a review that reads “they should keep doing what they’re doing” or you might provide very vague feedback.</p>
<p>Writing a review for your manager can be tricky because you’re never totally sure how the information is used.</p>
<p>Here are some different approaches that your skip level (manager of your manager) might use:</p>
<ul>
<li>Copy and paste excerpts of reviews into their review of the manager</li>
<li>Sharing the reviews directly with the manager (even if they are anonymous)</li>
<li>Take concepts and ideas from the reviews to formulate their own review</li>
<li>Disregard them completely</li>
</ul>
<p>Each of these come with risks… for example if reviews are shared directly with the manager, even if they are anonymous, a manager might try to figure out who wrote what, which means people are less likely to provide specific feedback that could be important for the skip level manager to read or for your manager to receive.</p>
<p>Additionally, your skip level reading these reviews is synthesizing a lot of information… they have their own opinions, they are reading the manager’s self-assessment, likely looking at pulse or company survey results or additional metrics, and reading the reviews from the manager’s direct reports, which may present lots of different trends or information.</p>
<p>First, pick your battles. A performance review shouldn’t be a time to unload all of your complaints and concerns about your manager. Whether you’re having a lot of trouble with your manager or you only see small areas of improvement, a performance review is a time to focus on what are the specific areas they can improve on. Is there a specific area in the career ladder that you feel they’re struggling with? Is there a behavior or something you’ve noticed time and time again that is troublesome or causing issues on the team? Are there barriers that are preventing you or the team from performing to the best of their abilities? Those are really the key areas to focus on.</p>
<p>Second, know what your manager is optimizing for. If you think your manager is doing a great job, this is an awesome opportunity to leverage the skills they’re looking to highlight with their manager, or to get more opportunities to do higher impact work. Where does your manager want to grow? What are they looking for? There’s nothing wrong with understanding that and helping them get there or highlighting some of their accomplishments in that area.</p>
<p>Third, know what your skip level is optimizing for. If you’re looking for ways to connect with your skip level, this is a great reason to put a meeting on their calendar. You can ask them directly what is the most helpful for them to hear about in a review of the manager. And if you’re concerned about how they use the information, as mentioned above, you can ask them. Then you’re operating from a place of knowing as opposed to guessing.</p>
<p>Finally, if, when writing your review of your manager, you have a lot of concerns and feelings that come up, your skip level probably wants to hear about them. Instead of documenting everything in a performance review, it can be helpful to provide some key highlights or areas of improvement using language like “I wish”, “I hope”, or “it would be great if” and then set up a skip level meeting to elaborate on some of the items you wrote.</p>
<hr>
<p><strong><h5>If you’re trying to write an effective review for your manager either to celebrate them or express concerns, <a href="https://daydreamsinruby.com/advising-and-mentoring/">book 1:1 time with me to help</a>.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/manager-review.png" alt="a man in front of his laptop with his hand on his forehead looking stressed" />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Complete Guide to Writing Self-Reviews (That Actually Get Read)</title>
        <link>https://www.daydreamsinruby.com/blog/2025-01-06-performance-reviews-self-review/</link>
        <guid>https://www.daydreamsinruby.com/blog/2025-01-06-performance-reviews-self-review/</guid>
        <pubDate>Mon, 06 Jan 2025 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>It’s performance review time! Welcome to a brief series that will guide you through performance reviews including: writing your own self review, writing a review for your manager, writing reviews for the folks who report to you, and what happens after performance reviews.</p>
<h3>Let's start: Writing a good self-review</h3>
<p>Performance review time can feel like a useless check-the-box exercise but writing reviews (including our own) provides critical information to a variety of audiences. First, let’s go through the audiences for your self-review, because there are some hidden ones you might not often think about.</p>
<ul>
<li><em>Yourself:</em> Self-reviews can be a nice time to reflect on your accomplishments over the last handful of months. It can be challenging to take time to understand what you’re shipped or accomplished. This is a good way to think about both work that has been accomplished, as well as ways that you have elevated and empowered your team including those who report to you, those who are your peers, and those who you report to.</li>
<li><em>Your manager:</em> This one is the most obvious. Your manager should be reading your self review. They’ll use it to understand things you’ve accomplished that maybe they didn’t see as much and understand what you feel are your strongest accomplishments during the review period.</li>
<li><em>Your manager’s peer leadership team:</em> Most companies have a calibration process of some sort where peer teams talk about reviews and expectations to ensure alignment and that everyone is evaluating teams and individuals in the same way. Self-review highlights and manager reviews are frequently surfaced as ways to explain an individual’s performance or determine promotion readiness.</li>
<li><em>C-suite leadership team or a level or two above your manager’s leadership team:</em> This one depends a little bit on the size of your company. If you’re at a huge company, all performance reviews won’t go all the way to the C-Suite but they will still go a level or two above your manager’s peer leadership team.</li>
</ul>
<p>The goal of a self-review in a performance review is to easily highlight and tell the story of the impact and behaviors you’ve exhibited during the performance review period. If you have specific career ladders or company values, this information should speak directly to those with honest assessments of what you’ve accomplished and where you’re hoping to grow. Finally, if you are reporting directly to the CEO or a C-Suite individual, your self-review is frequently for yourself. At that level, your role is not one where you get a lot of concrete feedback from someone who deeply knows your field, but writing a self-review can still be helpful in pinpointing what kind of help you need to seek out from your peers or mentors to continually improve.</p>
<p><strong>How should you format your self-review?</strong></p>
<p>Working with leaders and teams, I often see 2 types of self-reviews. One are teams and individuals who put a lot of pressure on themselves to formulate beautiful paragraphs that articulately explain exactly what was done in lengthy paragraphs. From these, it’s challenging to understand the highlights and exactly what happened and what the result was. The other are teams and individuals who simply will drop a ton of links. Your manager likely doesn't have enough time to click on all of these links and put together the story themselves. 2 approaches, same problem… information that does not make it easy for the reader/your manager to get the information they need. There is a balance between overthinking it and not really putting enough time in. Bullet points are ok (actually, for me as a manager, they are great!) as long as they have enough of the critical context i’m looking for.</p>
<p>For self-reviews, make sure to cover the “elevator pitch” of what was done and any necessary context. Was there a metric or measurable impact? Did you get feedback from peers? What results did you see as a result of the work you did? Instead of simply listing the things you did, think critically about why they were done and what your role was in making it successful.</p>
<p>The higher up you are in an organization, the more concise and specific your self-review should be so that your manager can easily consume the information and get a great picture of the fantastic work you’ve been doing. Remember, department leads, VPs, etc. will need to have a good sense of YOUR review, as well as everyone else’s to be able to advocate effectively. Your goal is to make that as easy as possible for them to do.</p>
<p><strong>Feeling stuck? Try these tips:</strong></p>
<ul>
<li>Interview a friend. As a friend or colleague about what sticks out to them about the work you’ve done during the review period. They don’t have to write it or make it robust, just whatever is on the top of their mind.</li>
<li>Start with this template:
<ul>
<li>What 3 things am I most proud of?</li>
<li>What was my previous growth goal and how did I make progress on that?</li>
<li>What was something really challenging for me that I attempted to get better at?</li>
<li>I enabled my teammates by…</li>
</ul>
</li>
<li>Review 1:1 notes. If you take 1:1 notes, look through them to see what was shared, celebrated, or what feedback was given. It’ll give you a good place to start from.</li>
</ul>
<hr>
<p><strong><h5>Did this resonate but you're still feeling stuck? <a href="https://daydreamsinruby.com/advising-and-mentoring/">Book 1:1 time with me</a> to be your hype woman and help you figure out what to highlight OR use your self-review to work with me to close those gaps that you've identified as areas of growth.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/self-review.png" alt="hand writing in a notebook with a computer in front that says self review" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Grab your spot today for this exclusive virtual workshop on crafting purposeful gatherings</title>
        <link>https://www.daydreamsinruby.com/blog/2024-11-19-workshop-planning-engaging-gatherings/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-11-19-workshop-planning-engaging-gatherings/</guid>
        <pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>One way I frequently start conference talks is by having people take a pause and think for a moment about whatever topic I'm talking about. Pausing, and letting thoughts come to you through words, stories, viceral reactions, or whatever direction your brain takes the prompt in, can be helpful for centering us and focusing on what's to come.</p>
<p>A key highlight of the work I've been doing and how I work with clients is focused on getting moving beyond the surface level. So much of our time is spent in a certain level with our work and our peers. We run from meeting to meeting, often trying to tick things off the to do list in between, without any time to really gather our thoughts and focus on our deeper goals.</p>
<p>That's what this workshop is for. On <strong>January 15, 2025 from 1:00-3:00pm eastern</strong>, we'll virtually dive into the topic of planning an effective gathering: from goals to actionable outcomes.</p>
<hr>
<h3><a href="https://lu.ma/7bmuosy0">Register Today</a></h3>
<h4>This workshop will be capped at 20 participants so grab your spot today</h4>
<hr>
<p>This won't be any ordinary workshop (after all, my whole shtick is about providing experiences to individuals that are engaging and interesting without defining success as being extroverted). Through our 2 hours together, you'll pick a gathering you have coming up (or that you wish you had coming up) and really delve into what you want that gathering to accomplish and how to make that happen. It'll be hands-on, creative, and a unique experience. Instead of focusing solely on the logistics of gathering, we'll drive towards the content aspect to help you plan an incredible experience for your company or team.</p>
<p><strong>Here are some highlights:</strong></p>
<ul>
<li>Gathering and facilitation best practices and practical tips that anyone can put into action</li>
<li>Interactive exercises (that won't make you wish you had your camera turned off)</li>
<li>A deeper understanding of how gatherings drive positive outcomes (good for getting that budget request approved or further justifying the need for it)</li>
<li>Sample agendas and activities</li>
<li>Tools, tips, and tricks</li>
<li>Small group peer networking (meet other amazing people who are also working on planning their gathering)</li>
<li>Considerations for different teams, especially when working with individuals from STEM backgrounds</li>
<li>Reusable worksheets and materials</li>
</ul>
<p><em>and</em> there might be a few additional goodies coming your way as well.</p>
<p><strong><a href="https://lu.ma/7bmuosy0">Make sure to grab your spot today</a>!</strong> and if you're still unsure or have questions, feel free to <a href="https://calendly.com/asheren/15min">schedule a quick 15 minute chat with me</a>.</p>
]]></description>
      </item>
    
      <item>
        <title>Your Essential Checklist for Planning a Gathering: From Logistics to Extras</title>
        <link>https://www.daydreamsinruby.com/blog/2024-10-14-planning-checklist/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-10-14-planning-checklist/</guid>
        <pubDate>Mon, 14 Oct 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Anyone who knows me, knows that I love checklists. They’re helpful in organizing thoughts, to dos, and what needs to be done now vs. in the future. It feeds my type A, planner personality. And, when it comes to planning something like a gathering, there are so many details, logistics, and to dos to keep track of. Here’s my attempt to provide you with a checklist of things to think about related to any gathering, really focused on ones that are 1+ days long.</p>
<h4>Logistics</h4>
<ul>
<li><strong>Budget</strong> what is your budget? Have you accounted for everything and added a bit more “just in case”?</li>
<li><strong>Travel:</strong> will folks be booking their own Travel or will someone be booking for them? Don’t forget to set a “book by” due date so that you’re not spending extra money on things like last minute flights.</li>
<li><strong>Accommodations:</strong> hotel block? Airbnb? Remote or in the middle of a city?</li>
<li><strong>Meeting location:</strong> While it’s tempting to have the meeting location at whatever hotel you are staying at, I frequently recommend to try to do it closeby but in a different location. This helps with a change of scenery and minimizing food and beverage minimums. The exception to this is if you have someone who needs a lactation room during a gathering. In this scenario, it may be easier to be in the primary hotel so that the individual(s) have easy access to their room and a comfortable place to pump.</li>
<li><strong>Food:</strong> will food come to the location? Provided by the meeting location? A certain amount provided for meals on their own? Delivery to the meeting location for lunches? Don’t forget to account for a variety of dietary restrictions and needs. Don’t forget about snacks and water!!</li>
<li><strong>Accessibility:</strong> What kinds of accessible needs to individuals need? This could be anything from a particular kind of chair, to knowing about breaks needed, to wheelchair accessibility. This is helpful to know not just for the travel, accommodations, and meeting space, but also for any groups meals or outings you may be planning.</li>
</ul>
<p>
<p><strong>Suggestions for logistics:</strong></p>
<ul>
<li>Have people send you or post into a central form their flight information or where they’re staying. This helps for coordinating rides to and from the airport.</li>
<li>Have people fill out a form in advance detailing dietary restrictions or any other accommodations or needs they have.</li>
</ul>
<h4>Content</h4>
<p><em>Logistics are important, and, as you can see, involve lots of details and things to think about. As a result, the content tends to be put off or not thought through as critically. While there are less questions there, each one goes <strong>much</strong> deeper and really have the ability to create transformational experiences for attendees that make all those logistics worth it.</em></p>
<p>
<ul>
<li>Mandatory or not? Providing Clarity for folks on which and whether activities are optional or mandatory is critical in setting expectations</li>
<li>Goals - Gathering goals and outcomes/deliverables  that are agreed upon by all stakeholders</li>
<li>Agenda, including breaks, breakouts, and a logical flow that creates the right storyline, vibe, and focus for your gathering. This also might include determining different people who will plan and/or lead each session</li>
<li>Ideally each person will have a detailed outline or semi-detailed outline for their session, the individual session goals, and design and facilitation of it.</li>
<li>Outside speakers or facilitators needed</li>
<li>Materials/setup/information needed for all sessions</li>
<li>Check-ins on whether content is ready/planned (no one wants a session planned on the flight over to the gathering)</li>
<li>Team or sub-group gathering within the larger gathering?</li>
<li>Reservations at any restaurants or locations the group will be visiting</li>
</ul>
<h4>Extras</h4>
<ul>
<li>Covid policy</li>
<li>Sick policy</li>
<li>Emergency policy (yes, I am a worst case scenario thinker)</li>
<li>Communication (internal and external) with related timelines</li>
<li>Supplies</li>
<li>Swag</li>
<li>Think about the folks that your participants are leaving in order to participate in this gathering. Is there any way you can provide a thank you or any support to them to make this time easier for the person who’s away and the people who aren’t</li>
<li>Any religious related accommodations that need to be made?</li>
</ul>
<h4>Just-in-cases</h4>
<ul>
<li>Small, in between get-to-know-you activities</li>
<li>Easy ways for people to start conversations with one another</li>
<li>Snacks</li>
</ul>
<p>
<h3>What did I miss? What would you add?</h3> 
<hr>
<p><strong><h5>If you're eager to discover what an exceptional offsite, retreat, or gathering facilitation could look like for your group, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you create magical moments and get to GREAT. Whether you're seeking a complete overhaul of a traditional format or looking to infuse your event with fresh, impactful elements, I can help guide you through this journey.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/offsite-checklist.png" alt="a list with lots of checkboxes on it" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Unlocking Advanced Facilitation Skills: Insights from Georgetown University&#39;s Transformational Leadership Facilitation Certification</title>
        <link>https://www.daydreamsinruby.com/blog/2024-05-28-unlocking-advanced-facilitation-skills/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-05-28-unlocking-advanced-facilitation-skills/</guid>
        <pubDate>Tue, 28 May 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In February, I had the privilege of completing Georgetown University’s Institute for Transformational Leadership’s Facilitation Certification course. It was an amazing experience and one that a lot of folks have asked me to summarize or they asked what I learned as a result.</p>
<p><br>
<p>To start off, a bit about why I chose this program. I’ve been designing and facilitating meetings and gathering for over 20 years. One would think that by this point, I might not have much to learn about styles, techniques, and approaches, but everyone has growth edges and there’s always more to learn! I decided on this course for a few reasons. First, it was recommended by a handful of friends. I was a part of Cohort 13 (Lucky 13 as we called ourselves!) Each cohort has about 20 people in it, so I was able to chat with a handful of individuals who had previously participated and <em>everyone</em> said it was life changing and gave them so many new tools for their toolbox. Second, there’s always more to know! I’ve used a huge variety of approaches, some that I’ve learned about and others that I’ve created, to facilitate meetings in engaging and interactive ways, but there’s there are so many different approaches to learn, people to connect with, and get that hands-on learning around a modality which goes beyond just reading about it. Third, as a newer business owner, having the official certification is sometimes helpful in order to provide that amount of clout and trust in the experience level. And fourth, as you progress in your career, it becomes more and more difficult to find valuable professional development experiences AND these experiences are significantly more expensive than they are earlier in your career. I was craving a professional development experience and also wanted to be sure it would be a good one.</p>
<p><br>
<p>The course consisted of 4 modules. Each one with a different focus, from understanding who you are as a facilitator, to DEIB, to remote/virtual/hybrid facilitation, to understanding how to approach the design for different clients, groups, and meeting types. Throughout each module, we were both directly experiencing the modality (facilitation approach and design) while also learning how to design and facilitate it ourselves. And, an interesting and vital part of the course is how we were connecting with one another, and, learning how as facilitators to create space for that kind of connection to happen. This last part is super important because while the content of any meeting or gathering is important, the more important piece is how to connect with yourself and others around that topic to experience and engage with it more deeply.</p>
<p><br>
<p>Here’s the part that everyone wants, and those are the straight-forward takeaway tips. BUT here’s what I learned… the tips and tricks are less about bullet points that can be easily taken away and mostly about how you can feel and know where a group is going and what they need in the moment to ensure successful outcomes. There aren’t really clear, easy takeaways because… and the engineers reading this will appreciate it… it depends! You can’t design two identical gathering designs and how you facilitate it for two different groups because they are different. This is similar to how I personally approach engineering leadership work as well, while the same or a similar solution might be useful to put in place… the things that I essentially consider my “playbook”, what it looks like and how it’s implemented for different teams is just that, different. My specific takeaways were personally becoming more comfortable with pivoting and adjusting a plan that’s in flight to give groups what they need while still reaching desired outcomes (and achieving them even more fully by often navigating through instead of around blockers). And recognizing the work I can do in advance and in how I design gatherings to get the group discussing and interacting on a different, deeper level that will result in better conversations, interactions, and outcomes.</p>
<p><br>
And, as I’ve stated other times and in other places, it all comes down to your goals. The one takeaway that I can pass along is that for every meeting and every gathering, know what you’re trying to accomplish and what you want people to walk away with. If you continue to tie each session and moment of the experience back to that (including breaks, social experiences, etc.) that you’ll be able to stay focused on creating successful outcomes.
<hr>
<p><strong><h5>If you're eager to discover what an exceptional offsite, retreat, or gathering facilitation could look like for your group, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you create magical moments and get to GREAT. Whether you're seeking a complete overhaul of a traditional format or looking to infuse your event with fresh, impactful elements, I can help guide you through this journey.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/class-photo.jpg" alt="a group of peoplel raising our glasses to each other" />
</div>]]></description>
      </item>
    
      <item>
        <title>Can&#39;t Meet in Person? Tips for Planning a Great Virtual Offsite</title>
        <link>https://www.daydreamsinruby.com/blog/2024-04-02-tips-for-a-virtual-offsite/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-04-02-tips-for-a-virtual-offsite/</guid>
        <pubDate>Tue, 02 Apr 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Let's face it. The market isn't what it once was. Investors are looking for something different. The bottom line is paramount in every conversation and you have a fully remote and distributed team... there's no way you're going to get approval for an offsite and a virtual offsite just sounds a bit like a punishment. Right?</p>
<p>WRONG!!!</p>
<p>I'm here to tell you that a virtual offsite, while challenging, can be great!! When most people think about a virtual offsite, they think of endless hours in front of their computer screen. They think of so many meetings that could have been emails. And they think of endless presentations. But what if your virtual offsite wasn't that? Because it doesn't have to be. Here are some of my top tips and recommendations for a successful virtual offsite.</p>
<ol>
<li>Update your goals. The goals of a virtual offsite CANNOT be the same as an in-person one. Spend some time thinking about the reasons you want to put the regular day-to-day work down. What should people walk <em>out</em> of this virtual offsite knowing or feeling? You'll have less time in a virtual offsite, so distilling the goals down to the most important items is critical.</li>
<li>Think about timezones. This is the trickiest part of a virtual offsite with a distributed team!! Map out all of your timezones to determine what your core overlap hours are and then critical masses in any other time zones or time zone overlaps. Use those alternate times as ways to plan different team building options or even run the same program twice and then bring it together in the overlap time.</li>
<li>Make it fun. No one wants to sit and watch presentation after presentation. Virtual offsites require extra magic. One thing I've done in the past is use &quot;travel days&quot; creatively to encourage mindset shifts as well as practice with whatever virtual tools we're using in a fun way. I've also sent &quot;offsite kits&quot; to each participant that remain closed until the offsite arrives. It provides a bit of mystery to the week and is a great group &quot;unboxing&quot; activity. In addition to these add-ons, there are some truly excellent virtual team building events and options that teams can really get into and have fun with. You don't have to sacrifice the fun just because things are remote.</li>
<li>Know your tools. The variety and options these days of virtual tools are incredible. Additionally, you can use these boards and tools in non-standard ways to keep people moving and keep things exciting. Think about use of polls, pictures, breakout rooms, virtual whiteboard, post-it-ing, and even just google docs structured in the right way to encourage active participation. I wouldn't recommend using too many tools as you might confuse participants, especially if they are unfamiliar with the tools being used, but again, the options are there and can fit within any budget.</li>
<li>Hire a professional. Planning a virtual offsite takes even more care and consideration than an in-person one. You need to think through a whole variety of tools, agendas, team dynamics, accommodations, and more in order to ensure a fun, inclusive, exciting, engaging, productive event. Hiring someone can help you shortcut hours of research and learning that you'd need to otherwise do on your own.</li>
</ol>
<hr>
<p><strong><h5>If you're eager to discover what an exceptional offsite looks like, talk about what's happening with your group right now, or have the ability to advocate for the budget to have an offsite today, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you get to GREAT. Whether you're seeking a complete overhaul of the traditional offsite format or looking to infuse your event with fresh, impactful elements, I can help guide you through this journey.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/virtual-offsite-kit.png" alt="a box with lots of different objects in it" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Reflection: When was your team last together?</title>
        <link>https://www.daydreamsinruby.com/blog/2024-03-11-reflection-when-was-the-last-time/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-03-11-reflection-when-was-the-last-time/</guid>
        <pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A few months ago, I conducted a relatively informal survey in an attempt to discover the current state of play around team gatherings. I was curious to learn if companies were focusing on getting teams and people together again, if there was clear budgeting for these items, and, finally, if companies had any way of evaluating their success. What I found was:</p>
<ul>
<li>About half of companies are taking the time to do team gatherings again. There is no trend in terms of company size (some small companies are very committed to doing gatherings frequently, while others aren't, and the same is true for larger companies).</li>
<li>Almost no one feels like they have a clear budget or budget guidance when they embark on planning these gatherings</li>
<li>There is almost universally no way that these gatherings are being evaluated. Now, I'm not talking about asking people if they had a good time, how they would rate the experience, and those sorts of questions... that type of post-event survey <em>is</em> happening, but I'm talking about the bigger picture. Did the team walk away feeling more aligned? Did they truly create closer connections with others? What is something they learned? The questions that really help determine the business value of team gatherings.</li>
</ul>
<p>Additionally, one interesting insight was that teams that are in person tend not to set aside these deeper focus days. The thought is that people see each other every day and therefore gatherings such as these aren't as necessary.</p>
<p>I've written posts in the past about <a href="https://daydreamsinruby.com/blog/2023-08-09-dont-cancel-your-offsite/">not cancelling your offsite</a> and how an <a href="https://daydreamsinruby.com/blog/2024-01-04-offsites-are-not-benefits/">offsite isn't a perk or benefit</a>, but days become weeks and weeks become months and months become years. So... when was the last time that your team (team, department, company... however you want to define it) set their day to day work down and truly delved into larger topics and things they need to think more deeply about. And, if we can think about this at the leadership level (because, seemingly, regular and even frequent leadership offsites are still occurring), why is that same time and space not given to other levels of leadership or to groups of individual contributors. As we look back at the last few years, for many, the cancellation of gatherings due to COVID went right into the cancellation of gatherings due to spending constraints. Whether your team is in person every day or remote, connecting them to one another and allowing them to take a step back to solve key, critical problems means so much to them and to the business.</p>
<p>And I'll push even further... think of the last leadership offsite you had. Was it useful and valuable? Did you make the best use of your time? How could it have been better or different? And what changes are you making for next time to ensure the time is spent well?</p>
<p>So... when was the last time folks got together? And when will be the next time?</p>
<hr>
<p><strong><h5>If you're eager to discover what an exceptional offsite looks like, have the ability to advocate for the budget to have an offsite today, or think about different ways to get your team together <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you get to GREAT. Whether you're seeking a complete overhaul of the traditional offsite format or looking to infuse your event with fresh, impactful elements, I can help guide you through this journey.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/intertwined-together.png" alt="vines that started separately and then became intertwined" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Breaking Down Barriers: How Field Trips to Different Team Offsites Spark Cross-Team Collaboration</title>
        <link>https://www.daydreamsinruby.com/blog/2024-02-26-field-tips-for-offsites/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-02-26-field-tips-for-offsites/</guid>
        <pubDate>Mon, 26 Feb 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Do you remember the last time you went on a field trip? Or maybe you can think of your favorite field trip you had as a kid. If you have kids, maybe you've chaperoned a field trip recently. What is the goal of a field trip? The goal of a field trip is to allow people to immerse themselves into learning in a different way than they can in their day-to-day work (or school). Field trips usually provide a new perspective, a way to see something different, or a chance to reflect on something new. How could this concept of a field trip apply to our work as adults? Well, it can be particularly useful for planning offsites, especially if you work in a larger company.</p>
<p>If you manage multiple departments or teams, having an individual &quot;field trip&quot; to a different team's offsite can result in some really interesting opportunities. One of the challenges of having multiple departments or segments of engineering reporting to an individual is the silo-ing that happens between groups. Sometimes, this is unintentional, where teams aren't working together even though they should be. Other times, it doesn't make as much sense for different departments or teams to work together but is still beneficial to create some sort of connective tissue in between these areas. By having someone field trip to a different offsite, it gives individual contributors or other leaders a chance to get to know someone from a different department. Even if they are only participating in sessions as a &quot;fly on the wall&quot;, during meals or other social time, folks can ask them about their work, what their department or area is focused on, what their current and future work looks like, and how they work. If desired, you can also organize some special sessions around this individual. Maybe they do a short presentation on the kind of work they look at, or what teams they most frequently interact with. It might be interesting to have a Q&amp;A with them or have them talk about a particular way their team plans or organizes their work. There are lots of interesting possibilities for how to include the fieldtripper into an offsite to provide valuable information, friendship, and cross-departmental interactions.</p>
<p>This also has benefits for the person selected as the fieldtripper. It can be a professional development opportunity for them to see how a different team or department runs. It can give them a chance to come back and teach the rest of their team or department about something, similar to how they might come back from attending a conference. It can give them an opportunity to lead a session (even just one that is focused on social connections as opposed to business output) in front of a group of their peers that may not be as close or familiar to them.</p>
<p>Realistically, when you're planning an offsite or onsite, one additional person will likely not make a significant impact on your budget as a whole. The next time you're thinking through an offsite, talking with your teams about the offsites they are having, or sharing ideas with peers, consider the impact having a fieldtripper could make.</p>
<hr>
<p><strong><h5>If you're eager to discover what an exceptional offsite looks like, talk about what's happening with your group right now, or have the ability to advocate for the budget to have an offsite today, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you get to GREAT. Whether you're seeking a complete overhaul of the traditional offsite format or looking to infuse your event with fresh, impactful elements, I can help guide you through this journey.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/fieldtripping.png" alt="split path and one one side cool tones that looks drab and on the other it is bright and interesting and exciting" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Finding Your Creative Spaces: Unleashing Innovation and Strategic Leadership</title>
        <link>https://www.daydreamsinruby.com/blog/2024-02-04-find-your-creative-space/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-02-04-find-your-creative-space/</guid>
        <pubDate>Sun, 04 Feb 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>We spend many hours every day at our desks, and people have very impressive desk setups. We've all seen them - multiple monitors, an extensive ergonomic setup, stream decks, lights, microphones, and more. While all of this creates a productive work environment that is beneficial for you and your health, sometimes, it just doesn't work. This post is all about finding your creative spaces.</p>
<p>One of the hardest parts about working remotely is not getting much of a change of scenery AND this is also one of the best parts about working remotely. As a leader, it's vital to find the spaces and places that help you get &quot;unstuck&quot; and tap into a different part of your brain or even motivate you to do something differently. Sitting and typing at a desk can only get you so far when composing blog posts, thinking deeply about company growth, or tackling some complex strategic planning. This can be done through both new and innovative spaces that you might explore as well as through embracing the broader concept of environments that foster creativity, strategic thinking, and effective problem-solving. So, what are these creative spaces? or ways of thinking that help lead to these breakthroughs?</p>
<h4>Thinking beyond the desk</h4>
<p>Your desk is likely the easiest place to work. It's (hopefully) set up in a quiet place and organized to your liking, but I'm not sure about you, but sometimes I feel like my desk traps me. It traps me into a certain way of thinking, it distracts me with other tasks that might feel more urgent and important, and it almost robs me of my ability to think more strategically or let <em>something else</em> flow. WHen I think about my work spaces and the options available to me, I try to focus in on the task i'll be doing and what I feel like will provide me with the most inspiration for that task. Sometimes that task truly needs creative thinking, like planning for an offsite, and sometimes, I just need a change of scenery to be able to focus in a different way, like when i'm writing performance reviews. Here are some of my favorites:</p>
<ul>
<li>A comfy seat or couch. for me, this is best for reading books or articles in a spot where i'm far enough away from my keyboard and computer that I can't just easily jump into or be distracted by something else.</li>
<li>A coffee shop. This is best for me when I need some ambient noise that I'm actively tuning out in order to get other work done and fuels my thoughts in a particular area.</li>
<li>Coworking. This can be at a coffee shop or at a coworking space. This is useful when I want or need to feed off of the energy around me for work i'm trying to accomplish <em>and/or</em> when i'm working on something where i'll want to take some regular breaks that feel more social.</li>
<li>My floor or a different wall of my office. This is best when i'm trying to post-it note brainstorm or do some big picture thinking on larger pieces of paper (more on that in the next section).</li>
<li>A different, unique location based on where you live. I'm lucky enough to live in Washington, DC. This means that I have all the Smithsonian museums at my disposal. While they are <em>awful</em> places to take meetings from, they are fantastic for inspiration. Some of my favorite places to work from have been the <a href="https://americanart.si.edu/visit/renwick">Renwick</a> (while this museum is small and doesn't have many spaces for working, with a notebook and pen, it can be a great space for brainstorming, depending on what exhibits they currently have), the <a href="https://naturalhistory.si.edu/">Museum of Natural History</a>, and the <a href="https://npg.si.edu/home/national-portrait-gallery">National Portrait Gallery</a>'s courtyard.</li>
</ul>
<h4>Changing how you work</h4>
<p>In addition to the change of scenery, finding your creative space might include changing how you work. There are a variety of interesting ways to use your imagination to outline or jot down thoughts when tackling a larger project. One example is just some old-fashioned whiteboarding. I love getting in front of a whiteboard or big blank sheet of paper to just see where I go, write down whatever pops into my mind, and then use that to organize my thoughts later. Sometimes it ends up in an outline, sometimes just a lot of different ideas, and other times key concepts, approaches, or themes I want to dig into further. I always keep a post-it table top easel pad in my office for this reason!! A similar idea is to do this same thing with post-it notes. Use post=its as a way to get out all your thoughts and then move them around, group them together, and see where you end up. This is a great technique for group conversations but it can also be really effective for solo endeavors as well. Finally, you can try a mind map which is similar to a brainstorm but where each idea is connected to something that's already written down and branches get identified along the way. All of these methods are ways to think differently or get your brain going as you're tackling different kinds of work. They're about seeing problems and solutions through a different lens, one that is less linear and more holistic.</p>
<p>As you find your creative space, both physically and mentally, don't forget to follow tried and true advice. Habits like <a href="https://hbr.org/2023/05/how-to-take-better-breaks-at-work-according-to-research">taking regular breaks</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/24749966/">going on walks</a>, and  <a href="https://psych.utah.edu/_resources/documents/psych4130/The%20Cognitive%20Benefits%20of%20Interacting%20with%20Nature.pdf">interacting with nature</a> can significantly increase productivity and creativity. So the next time you're stuck, try a new way of thinking, a new place of working, or just going for a walk to see what clarity you can stumble upon.</p>
<p>In the end, the creative journey is as diverse as the leaders embarking on it. Whether through a change in scenery, a novel approach to problem-solving, or the simple yet powerful act of taking a break, these elements are crucial in nurturing creativity, strategic thought, and visionary leadership. As leaders, we must continually seek and embrace these spaces and methods that best ignite our creative and strategic potential, for in these spaces lies the key to unlocking a more innovative and impactful future.</p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/creative-spaces.png" alt="a person sitting on the floor having drawn lots of interesting pictures with post-its and other work things around them" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Leadership Insights: Crafting Meaningful 1:1s</title>
        <link>https://www.daydreamsinruby.com/blog/2024-01-11-effective-1-1s/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-01-11-effective-1-1s/</guid>
        <pubDate>Thu, 11 Jan 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As managers and leaders, one-on-ones are some of the most important meetings we have. They accomplish a huge variety of goals. For your direct reports, 1:1s give them a space to ask questions, to talk about what's bothering them or on their mind (both positive and negative), provide valuable feedback to you, and give people a place to vent or celebrate. They also provide a space for individuals to be more vulnerable and share about their lives or what else is happening for them right now. This helps create more meaningful and authentic connections between you and the folks who report to you. For folks doing 1:1s with managers of managers or other folks in supervisory roles, they can also help recognize issues that are starting to surface across the organization or surface items that should be discussed with a first team. For managers, they provide a place for YOU to be more vulnerable as well, helping folks see the real you. This is especially helpful for CTOs and VPs as your peer team and how you are perceived within the company changes greatly through this progression. But 1:1s can also be challenging. It's hard to context-switch into them. It's too easy to end up using them as a project update or status report. If you have a direct report who's quiet or who's very talkative, it can be tough to find that balance.</p>
<p>So, how does one get all of this out of a 1:1?</p>
<h4>TL;DR:</h4>
<ul>
<li><strong>Embrace Vulnerability:</strong> Both you and your reports should feel comfortable being vulnerable in these meetings.</li>
<li><strong>Balance of Conversation:</strong> Ensure a balance between listening and sharing, especially with particularly quiet or talkative reports.</li>
<li><strong>Contextual Adaptability:</strong> Adjust your approach based on each individual's communication style and needs.</li>
<li><strong>Role-Specific Challenges:</strong> Recognize how the dynamics of 1:1s change as you progress to higher leadership roles like CTO or VP.</li>
</ul>
<br>
First, start with a few minutes of checking in. Simply asking how they're doing, understanding what's going on in their world at the moment can go a long way. Just remember, it might not click immediately. Like all people, your directs will have had a variety of past experiences with managers, some better and some worse. Those with previously challenging experiences will likely be more hesitant to share or might wonder if you have an ulterior motive. Keep asking, and sharing little bits about your life as well, and you'll get there.</p>
<p>
<p>Second, let them talk about whatever is on their mind. And, always give it more than a surface level &quot;everything is fine&quot; nod. If you have someone who doesn't talk as much or who frequently responds with everything is fine, probe further into that. What feels fine? Could things feel better? Is there anything this week that was frustrating? or that they were really excited about? Allow for some silence as well. While this might feel uncomfortable, it might also be the space and time someone needs to figure out what their real answer is. Conversely, if you have someone who is quite verbose, you can also use these questions to focus them or, as they're sharing, ask questions like what about this feels the most important to you? What feels fixable and what feels out of your control? How can I support or help?</p></p>
<p>
Third, and this is not widely agreed upon, while I try to keep most of the time in 1:1s as their time, I do use the time periodically to cover things that I need to review with them. Common examples are: something I observed that they need feedback on, something I observed that one of their direct reports might need feedback on, understanding how their team is doing, addressing any projects or work that might be off-track, ensuring understanding on something recently rolled out on the department or company level, or clarifying expectations or asking for reinforcement around something I might be rolling out (as well as asking for the mood and perception from their team on these announcements). Relatedly, recognize what information you need and what you don't. Here are some common mistakes I see being made especially by higher level engineering leaders: they use 1:1s as a way to dive deep into technical problems and solutions because they miss being closer to the code (or because they think they need to maintain that level of details on ongoing work). They use 1:1s as a way to get broader updates, especially in 1:1 with department leads who have multiple managers and teams reporting to them. They use 1:1s to vent about what they're frustrated about at their level as a way of connecting further with their reports and ICs. Recognizing what 1:1s should be used for and what they shouldn't be used for is helpful for determining what other meetings you might need to have or communication structures you should have in place, as well as identifying how your relationship might need to change based on the role and position you are holding at the company.</p>
<p>
<br>
<p>I also have some 1:1 logistics and principles that I review with everyone when I start doing 1:1s.</p>
<h4>TL;DR:</h4>
<ul>
<li><strong>Note-Taking:</strong> Keep shared notes for transparency and future reference.</li>
<li><strong>Template Utilization:</strong> Use a 1:1 template to maintain structure and efficiency in meetings.</li>
<li><strong>Flexible Adaptation:</strong> Adapt the template based on individual preferences and needs.</li>
</ul>
<p>First, I always take notes that are shared with the person I'm doing the 1:1 with. I do this for a variety of reasons. So that I and the person I'm meeting with have an easy place to re-review what was discussed or any action items that were decided during our time together. So that if we have a conversation around some more constructive feedback or feedback that might be difficult to hear, we have a place to reflect on that feedback. I also always take notes not just on the feedback but on the conversation that happens about the feedback. This is helpful if someone wants to clarify something after that fact that might have been said or expressed. And finally, I take shared notes because it makes performance reviews SO MUCH EASIER for both myself and my direct if we can just flip through 1:1s from the last 6 months or year and get a sense of what we talked about.</p></p>
<p>
<p>Second, I like to use the 1:1 template that I have linked below. This is <em>not</em> a requirement for folks but I do find it helpful. I also go over how different people utilize this template. Some start next week's 1:1 issue/space as soon as this week's 1:1 has ended. That way, over the course of the week, whenever they think of something, they already have a place they're adding it to. Others take 10-15 minutes before our regular 1:1 to fill out the issue so they can keep their thoughts organized <em>and</em> so that I can do a quick read of whatever we might not get to. Others make sure to give me a &quot;heads up&quot; if they have something particularly frustrating or emotional they might want to discuss so that I can go into the 1:1 with the appropriate information and in the right brainspace. And others, don't fill out the template at all. But we'll still go through the questions and i'll use it as a basic structure as I take notes. These thoughts are usually not full sentences, they're more bullet points or memory joggers to make sure we're using our 1:1 time in the best possible way.</p></p>
<p>This template can be used in notion, as a github issue template where you open a new issue each week, in a google doc, or in any HR 1-1 note taking system your company may be using.</p>
<p><br>
Some final thoughts on 1:1 "logistics":
<p>1:1s should be scheduled for either every week or every other week and, in my opinion, should be somewhere between 30 minutes and an hour. I usually start with 30 minutes for everyone and if we regularly find ourselves going over time, or having more to discuss, I update the timing. I also try very hard to keep 1:1 time as reserved and try, as much as possible, to not move around 1:1 timeslots.</p>
<p>Below is the 1:1 template I use. Some has been developed by me. Other questions borrowed from managers I've worked with in the past. I hope you find it helpful!</p>
<object data="/assets/pdfs/1-1-template.pdf" type="application/pdf" width="600" height="400">
    <p>It appears you don't have a PDF plugin for this browser. No biggie... you can <a href="/assets/pdfs/1-1-template.pdf">click here to download the PDF file.</a></p>
</object>
<p><a href="/assets/pdfs/1-1-template.pdf" download>Download PDF</a></p>
<script>
document.getElementById('pdf-download-link').addEventListener('click', function() {
    plausible('PDF Downloaded', {props: {pdfName: '1-1-template.pdf'}});
});
</script>
<hr>
<p><strong><h5>If you have questions or would like 1:1 guidance, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a> to talk about my 1:1 mentorship and advising offering.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/1-1-picture.png" alt="2 people sitting down to talk 1 on 1" />
</div>
]]></description>
      </item>
    
      <item>
        <title>The Offsite Misconception: Why They&#39;re Not Perks, But Business Essentials</title>
        <link>https://www.daydreamsinruby.com/blog/2024-01-04-offsites-are-not-benefits/</link>
        <guid>https://www.daydreamsinruby.com/blog/2024-01-04-offsites-are-not-benefits/</guid>
        <pubDate>Thu, 04 Jan 2024 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In the well-laid out career website benefits section, nestled between health insurance and flexible work hours, you’ll often find 'regular company offsites' listed as a perk. It's time we address this misconception head-on: Offsites are not a perk. They're not a fringe benefit. Framing them as such does a disservice to their true value in today's business landscape. This isn't about offering a 'fun time' or a pseudo-vacation; it's about recognizing offsites for what they truly are – a crucial investment in the health and effectiveness of a business.</p>
<p>The concept of offsites as a 'perk' paints a misleading picture. They're often perceived as a company's generous way of giving employees a break, a 'thank you' wrapped in the guise of a business trip. While they may offer a change of environment and a break from the routine, their core purpose goes beyond these surface-level benefits. Offsites are strategic investments made by companies to foster better communication, teamwork, and overall productivity. Studies have highlighted how social interaction outside the traditional workspace can improve communication patterns by as much as 50%, a testament to the value of these gatherings. To categorize offsites as a mere benefit, even the ones solely focused on coworking or hanging out, is to overlook the integral role they play in fostering a cohesive, dynamic, and productive work environment – especially as more and more companies (especially engineering teams) become remote or hybrid workplaces.</p>
<p>Beyond their purpose, let's address the less glamorous side of offsites or the side that isn't frequently spoken about. Offsites can pose significant logistical challenges, especially for those with health concerns, mobility issues, or caregiving responsibilities. For such individuals, offsites are not a leisurely escape but an added stressor and often, a significant expense both financially and mentally to ensure all homeside logistics are covered while someone is away. For these employees, offsites aren't a luxury; they're a hurdle. The struggle to participate fully can outweigh the potential benefits. This doesn’t scream 'perk'; it shouts 'obligation'.</p>
<p><strong>Offsites as Business Essentials</strong></p>
<p>Now, don't get me wrong. I'm a HUGE believer in the importance of offsites. I think offsites are critical for business and team development and that <a href="https://daydreamsinruby.com/blog/2023-08-09-dont-cancel-your-offsite/">any team not doing offsites today is making a critical and expensive mistake</a> but that doesn't mean we shouldn't change how we think about them and how we talk about them. In the realm of remote work, the importance of offsites is magnified. The potential isolation that comes with remote setups can affect productivity, with some studies indicating a reduction of up to 21% in isolated employees. Offsites offer an important platform for face-to-face interaction that is vital for team cohesion. When well-supported, remote teams equipped with opportunities for real interaction can surpass the productivity of traditional in-person teams.</p>
<p>The value of offsites extends to the overall health of a company. Motivated workers, often a product of well-planned team interactions, can outperform less engaged peers by over 200%. Furthermore, the happiness fostered by positive team dynamics can increase business productivity by 31%. These aren't just numbers; they are compelling arguments for the necessity of offsites in any business model.</p>
<p><strong>Investing in the Future</strong></p>
<p>Recognizing offsites as essential rather than optional changes the narrative around them. They become a critical investment with tangible returns: enhanced team dynamics, reduced turnover, and a strengthened company culture. Offsites aren’t merely a line item in the perks section; they are a crucial line item in the budget, an investment in the human capital that drives business success.</p>
<p>It’s time for a shift in perspective. Offsites are amazing and fun and wonderful and critical. And also, offsites should be viewed and talked about not as perks but as vital components of a successful business strategy, especially in today’s increasingly digital and remote work landscape.</p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/offsites-as-business-critical.png" alt="stick figure people from different backgrounds all drawing and talking to each other" width="300" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Transforming Meh to Memorable: Secrets of Successful Offsite Planning</title>
        <link>https://www.daydreamsinruby.com/blog/2023-11-24-transforming-meh-to-memorable/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-11-24-transforming-meh-to-memorable/</guid>
        <pubDate>Fri, 24 Nov 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Think of the last offsite you attended or planned... what are the words that come up for you? In what ways did that gathering go as planned and in what ways did it fall short?</p>
<p><br>
When we think of offsites (offsites/onsites/team or department get togethers... for the sake of simplicity, i'll refer to all of them as offsites here) - those pivotal events for groups that are meant to foster team building and alignment, address challenges that need to be addressed in person and bring people together, tackle complex conversation where in person time is critical, and generally recharge everyone in a different way than the usual - we often imagine them in their ideal state... as carefully curated experiences, ones where everyone walks away rejuvenated and excited about the their team, the company, and the future. Even for those who try to keep planning low-key, focusing more on hanging out, the hope is that these goals, at the very least, are accomplished. For those planning more detailed gatherings with additional goals, the ideal state is that each detail has been planned and every outcome has been achieved precisely as envisioned. This dream, buoyed by ambition and aspiration, is what sets us on the journey of offsite planning. It's a journey filled with promise, one where every session and activity we plan is expected to ignite camaraderie, stir innovation, and renew focus.
<p><br>
But the path to a successful offsite is seldom as straightforward as we envision. Let's delve into the nuanced reality of offsite planning, a task that is as challenging as it is rewarding.
<p><br>
The initial phase of planning an offsite is often marked by a surge of optimism and creativity. We start with expectations and hopes, sketching out (even just in our minds) what we envision as the perfect gathering. Engaging activities, deep-diving sessions, recognition of the most important pieces to discuss and address, and moments of genuine connection - these are often just a few of the elements we aim to weave into the tapestry of the event. We see in our mind's eye a team returning not just refreshed, but truly excited, focused on new goals and a renewed sense of purpose. This isn't just another gathering; it's a catalyst for growth and change. This vision is what you talked about and advocated for to get the budget approval to have an offsite! This vision is why people are brought together and why the cost (both monetarily and in time) is deemed as necessary.
<p><br>
However, as planning progresses, the unpredictable aspects of professional life begin to make their presence felt. The day-to-day demands of our jobs don't pause to accommodate our offsite planning efforts. A crisis arises that needs immediate attention, or a key project veers off course, demanding more time and resources than anticipated. Board meetings, stakeholder engagements & alignment, and unforeseen challenges continue to vie for our attention, each adding a layer of complexity to our already packed schedules. Offsite planning drops towards the bottom of the to-do list. "It's not for a while" or "this other thing is on fire and must take priority" is what we think as we re-order and adjust our "must do's".
<p><br>
And then, as offsite planning truly gets underway, the logistical aspect of the event takes center stage, often overshadowing the more strategic elements of the plan. The logistical labyrinth of organizing an offsite is daunting - from ensuring travel arrangements (everything from letting people know dates and times to reminding people to actually book their travel) and accommodations to managing dietary preferences and venue selection (not just for your daytime activities, but also for dinners, team fun time, and more). Each of these tasks, while seemingly mundane, is critical to the success of the event and demands a significant investment of time and effort. And, these things end up taking the "extra" time you have because, realistically, if the venue isn't reserved, or travel isn't booked, then without any participants, an offsite is a mute point anyway.
<p><br>
In the whirlwind of managing these logistics, the core purpose of the offsite - the content and the experiences that will make it truly impactful - frequently takes a back seat. The initial vision of meaningful and engaging sessions gives way to a race against time, with the focus shifting to ticking tasks off a checklist rather than crafting an enriching experience. This shift can leave little room for considering innovative presentation methods or exploring fresh, engaging approaches to content delivery. Because what you've done in the past has always worked "well enough", hasn't it? After all, no one has walked away <i>hating</i> the offsite. And so that becomes the goal... plan a "good" offsite. Plan something that people think was mostly an ok use of their time. Maybe the outcomes won't be as good, maybe you won't accomplish <i>everything</i> you had hoped, but surely it will be fine and some  important things will get discussed, decided, and people will probably enjoy just seeing one another and hanging out together.
<p><br>
In response to these mounting pressures, delegation becomes a necessary strategy. Different aspects of the offsite are handed off to various team members, each contributing their piece to the puzzle. We rely on the collective effort, hoping that when these individual contributions come together, they form a cohesive and effective whole. On the journey to the venue, we often find ourselves finalizing plans and ironing out details, realizing that there hasn't been enough time to fully develop the kind of deep, engaging content we initially envisioned. We think... this will be fine and maybe next time we can make it <i>great</i>.
<p><strong><h3>From Good to Great</h3></strong></p>
<p>In the realm of offsite planning, one of the most significant challenges is envisioning what truly exceptional looks like. Most of us have attended various offsites throughout our careers, and for the most part, they've been acceptable. They've met the basic requirements of bringing teams together, offering a break from the usual routine, and perhaps touching on some key organizational goals. A few might stand out in our memories as lackluster or even counterproductive, but generally, offsites tend to land in the realm of &quot;good enough.&quot;</p>
<p><br>
The reality of offsite planning, with its blend of high aspirations and challenging logistics, brings us to an essential question - how can we ensure that our offsites are both meaningful and feasible?
<p><br>
This prevalence of "good enough" sets a subtle but powerful benchmark. When our experiences are mostly of offsites that are just passable, it becomes challenging to imagine something that goes beyond this norm. How do we conceptualize an offsite that doesn't just tick the boxes but truly elevates the team's experience, engagement, and productivity? How do we even know what that looks like or feels like if our exposure to truly great offsites is limited, it's hard to set a vision that goes beyond the standard, the familiar.
<p><br>
And there's some good news and bad news here. The good news is, there are numerous templates and tools available to assist in the planning process. These resources can guide you through budgeting, provide checklists for logistics, and offer frameworks to get started. However, the bad news is that most of these tools focus predominantly on logistics. They often fall short in guiding you through the more critical aspect of offsite planning - the content. Templates can't capture the unique dynamics of your team or the specific goals you want to achieve. They provide a structure, but not the substance and often leave out critical budget items or checklist boxes to address this portion of the offsite.
<p><br>
AND, as with most ways that we address the fact that we don't know what we don't know, this is where bringing in someone with specific expertise becomes invaluable. It's about breaking the mold of the 'good enough' and venturing into the realm of the extraordinary. 
<p><br>
The first step is to start planning early. For example, if you're thinking about a spring or early summer offsite, you should start planning now. Time is a crucial asset in this process. The earlier you begin, the more space you have to balance the logistical details with the substantive content that will make your offsite truly valuable. Second, think about working with someone. This can help crystallize your vision, aligning it with practical realities and ensuring that every aspect of the offsite, from the logistics to the sessions, is thoughtfully planned and executed.
<p><br>
Planning an offsite shouldn't be about settling for the average or the known. It's an opportunity to explore what greatness in team gatherings looks like, to push beyond the boundaries of the 'just okay,' and to craft an experience that resonates deeply with every participant. Imagine your next offsite as more than just another item on the calendar - but instead as an event that leaves a lasting, positive imprint on your team and organization.
<p><br>
Remember, no one sets out to plan a sub-par offsite. Get the support and resources you need to make your vision of an ideal offsite into a reality. You got this!
<hr>
<p><strong><h5>If you're eager to discover what an exceptional offsite looks like, talk about what's happening with your group right now, or have the ability to advocate for the budget to have an offsite today, <a href="https://calendly.com/asheren/15min">Book a free consultation call with me today</a>. With a range of pricing options and levels of involvement, I'm here to help you get to GREAT. Whether you're seeking a complete overhaul of the traditional offsite format or looking to infuse your event with fresh, impactful elements, I can help guide you through this journey.</h5></strong></p>
<div style="text-align:center"> 
  <img src="/assets/images/blog/dull-to-vibrant.png" alt="split path and one one side cool tones that looks drab and on the other it is bright and interesting and exciting" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Leading Through Pain</title>
        <link>https://www.daydreamsinruby.com/blog/2023-10-11-leading-through-pain/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-10-11-leading-through-pain/</guid>
        <pubDate>Wed, 11 Oct 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In this time of immense trauma and pain, I know many leaders are struggling with what to say and how to say it, for a variety of reasons. Some don't know what to say, some think most (if not all) of their employees are unaffected so there's no need to say anything, and others don't want to wade into the political aspects of the conversations. These are all valid fears and concerns but this is a moment when you shouldn't ignore what is happening.</p>
<p>
Equally important is how you are making time and space for yourself. As you hear, absorb, and listen to pain from others directly or through news sources and social media, it takes a toll on you, especially if you are also directly affected. Here are some thoughts and ideas for supporting your people and supporting yourself.
<h4>Supporting Your People</h4>
<p>I'm often very quiet on these issues, and maybe I'll delete this post in the future but right now Jewish employees are practically begging their non-Jewish friends, colleagues, and companies to reach out. To say <em>something</em> to acknowledge the pain they are experiencing. Your statement does not have to be long, and it does not have to be complex. As a manager, your outreach does not need to be long and it does not need to be complex, but it does need to happen. Here are some things you can say:</p>
<ul>
<li>How can I best support you?</li>
<li>Reaching out to say I am here for you</li>
<li>I can't imagine what this is like</li>
<li>I'm so sorry</li>
</ul>
<p>Some things you can actively do right now for anyone affected by what happening:</p>
<ul>
<li>Make space for what they need</li>
<li>Recognize that what an individual needs might ebb and flow based on news consumption, processing, social media, news they hear from friends and family, and more. When someone tells you what they need, don't assume that's what they need for the next week(s).</li>
<li>Help clear other obstacles for them. If there are parts of work that take more patience or mental energy, those might be tasks they can't or don't want to handle right now. This goes hand-in-hand with helping to recognize and listen to what support they need</li>
</ul>
<h4>Supporting Yourself</h4>
A lot is written about how to support your direct reports or what you should do as a leader in these moments. Leaders go into "go mode". They made a statement, they support the individuals around them, they help make sure others are processing and taking the time they need. They also frequently make statements in larger groups of people to vocalize what folks with less organizational power might not feel comfortable saying. And then, as leaders, we process later. Days later or sometimes weeks later.
<ul>
<li>Make sure you are making time for yourself.</li>
<li>Try to communicate what you need as well from others, from your manager, peers, and/or direct reports</li>
<li>Find your spaces of support. I know that can be extremely difficult, especially for Jewish leaders. It can feel isolating or like you have been deserted. If you find yourself there and can't find a supportive space for yourself, let me know. I'm here for you too.</li>
</ul>
<p><b>Some additional resources from folks who are much more articulate than myself in this moment:</b></p>
<ul>
<li><a href="https://www.inc.com/deborah-grayson-riegel/how-to-talk-about-war-in-israel-when-you-dont-know-much-about-it.html">How to talk about the war in Israel when you don't know much about it</a></li>
<li><a href="https://larahogan.me/blog/resources-leading-through-crises/">Resources for leading through Crises</a></li>
</ul>
<div style="text-align:center"> 
  <img src="/assets/images/blog/sad-heart-hugging.png" alt="a sad girl hugging a heart that is a little damaged" width="300" />
</div>
]]></description>
      </item>
    
      <item>
        <title>Focus Advising Sessions: Delve into Your Leadership Challenges</title>
        <link>https://www.daydreamsinruby.com/blog/2023-09-17-focus-advising/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-09-17-focus-advising/</guid>
        <pubDate>Sun, 17 Sep 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As leaders, we think through solutions to problems every day. We are always working towards tackling the next thing, figuring out how to make our people and our businesses successful. But sometimes you get stuck, or sometimes in a rut, and need someone to brainstorm with, get advice from, or just need an outside perspective from an expert. Enter Focus Advising sessions. Check out these three topic-specific focus advising sessions coming up in the next few weeks. Availability is limited so book your spot today.</p>
<hr>
<p><strong>1. Planning Effective Offsites: Beyond Team Building</strong></p>
<p>The word &quot;offsite&quot; often conjures images of team-building exercises and leisurely activities. While these are essential, an effective offsite should also drive strategic alignment, foster innovation, and enhance team cohesion.</p>
<p><em>Why sign up for a time? Come with questions about:</em></p>
<ul>
<li>The essential components that differentiate a standard offsite from an impactful one.</li>
<li>Setting clear objectives for your offsite and determining ways to measure its success.</li>
<li>Designing activities that not only entertain but also align with strategic business objectives.</li>
<li>Translating the enthusiasm and alignment from an offsite into tangible, daily operational outcomes.</li>
</ul>
<p><strong><a href="https://calendly.com/asheren/effective-offsites">Grab your spot today</a></strong></p>
<hr>
<p><strong>2. Evaluating Your Engineering Team’s Health: A Holistic Approach</strong></p>
<p>The health of your engineering team doesn't solely hinge on deadlines met or code deployed. It encompasses team dynamics, mental well-being, skill development, and the ability to innovate under pressure.</p>
<p><em>Why sign up for a time? Come with questions about:</em></p>
<ul>
<li>Tools and methodologies to assess team health beyond traditional metrics.</li>
<li>Recognizing the importance and impact of mental well-being on productivity and innovation.</li>
<li>Cultivating a team environment that encourages continuous learning and growth.</li>
<li>Identifying potential signs of discord within the team and proactive strategies to address them.</li>
</ul>
<p><strong><a href="https://calendly.com/asheren/team-health">Grab your spot today</a></strong></p>
<hr>
<p><strong>3. Hiring Engineering Leaders: Making Strategic Choices for Your Organization</strong></p>
<p>Navigating the hiring landscape for engineering leaders requires more than just sorting through resumes. It’s about recognizing potential, understanding cultural fit, and predicting how a leader can drive innovation and growth to solve the problems you are currently facing.</p>
<p><em>Why sign up for time? Come with questions around:</em></p>
<ul>
<li>How to discern between technical prowess and genuine leadership potential.</li>
<li>Strategies for identifying candidates who genuinely align with your company's vision and culture.</li>
<li>Addressing challenges related to fostering diversity and inclusion in tech leadership roles.</li>
<li>Tips and best practices to refine your hiring processes for long-term success.</li>
</ul>
<p><strong><a href="https://calendly.com/asheren/hiring-eng-leaders">Grab your spot today</a></strong></p>
<hr>
<p><strong>Why Focus Advising?</strong></p>
<p>Being at the helm, leaders constantly juggle myriad responsibilities. The urgency of day-to-day operations often leaves little time for deep dives into specific areas. Focus Advising sessions offer this precise opportunity - to pause, reflect, learn, and act. By dedicating time to a singular area of concern, leaders can garner in-depth insights, engage in meaningful discussions, and walk away with actionable strategies. It’s not just about troubleshooting; it’s about evolving and leading with confidence.</p>
<p>So, if you want to enhance your leadership prowess, ensure your team's sustained success, or just think through an issues you've been grappling with, these Focus Advising sessions are designed for you. Dive deep, learn, and lead fearlessly.</p>
<hr>
<p>If you're looking for a longer session, <a href="mailto:allison@allisonmcmillan.com">reach out</a>! I'm available for 1:1 advising and mentoring sessions on a regular basis on any topic you'd like to cover.</p>
<p><img src="/assets/images/blog/focus-advising.png" alt="two people talking on a bench"></p>
]]></description>
      </item>
    
      <item>
        <title>Workshop Announcement: Crafting Purposeful Offsites: From Goals to Actionable Outcomes</title>
        <link>https://www.daydreamsinruby.com/blog/2023-09-13-workshop-announcement-crafting-purposeful-offsites/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-09-13-workshop-announcement-crafting-purposeful-offsites/</guid>
        <pubDate>Wed, 13 Sep 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Are you thinking about planning your next offsite? Do you have one coming up for this fall that you haven't quite started planning? Or maybe you have started planning it but you're not thrilled with the direction it's going in? Worried your team won't walk away from it with what they need to? Then this workshop is for you!</p>
<h3><a href="https://lu.ma/i3xlin8v">Register Today</a></h3>
<h4>This workshop will be capped at 20 participants</h4>
<p>I'm offering an interactive workshop on October 11, 2023 where you'll plan your goals and outline the deliverables you want to get from your next offsite.</p>
<p>Jumpstart your Engineering, Product, and Design offsite planning with purpose and clarity. Let’s face it: One of the most challenging aspects of orchestrating an offsite is ensuring every minute counts. Dive beyond the surface-level objectives of &quot;uniting the team&quot; and &quot;finding common ground.&quot; This workshop is your gateway to designing an offsite experience that seamlessly juggles diverse priorities while communicating the indispensable value of such a gathering to stakeholders.</p>
<p><strong>In a dynamic 90-minute session, this workshop will inspire you to:</strong></p>
<ul>
<li>
<p>Spark innovative ideas through brainstorming</p>
</li>
<li>
<p>Exchange insights and solutions with like-minded leaders</p>
</li>
<li>
<p>Establish compelling goals that focus on tangible and intangible outcomes</p>
</li>
<li>
<p>Preview examples of robust, efficient offsite agendas tailored for both in-person and virtual settings</p>
</li>
<li>
<p>Start to understand diverse methodologies to design captivating sessions</p>
</li>
</ul>
<p><strong>Why should you sign up for this workshop?</strong></p>
<ul>
<li>
<p><strong>Cost-Effectiveness:</strong> Guarantee that your offsite's return on investment is significant, saving both time and money. The potential savings from optimizing your offsite can easily amount to thousands.</p>
</li>
<li>
<p><strong>Break Initial Barriers:</strong> Overcome the primary planning challenges, accelerating your offsite's preparation.</p>
</li>
<li>
<p><strong>Tailored Team Insights:</strong> Grasp the unique perspectives of engineering, product, and design teams - how they resonate with offsites, their distinct outlooks, and the language and frameworks that truly engage them.</p>
</li>
<li>
<p><strong>Compelling Advocacy:</strong> Equip yourself to persuasively present the need for offsites, securing the necessary resources and backing from higher-ups.</p>
</li>
<li>
<p><strong>Concrete Deliverables:</strong> Transcend discussions and draft tangible action items, follow-ups, and results that will transform your team's dynamic.</p>
</li>
<li>
<p><strong>Enhanced Team Unity:</strong> Lay the groundwork to foster a sense of alignment and camaraderie among team members, leading to consistent collaborative success.</p>
</li>
<li>
<p><strong>Idea Exchange Platform:</strong> Immerse in a rich exchange of strategies and solutions, drawing from the collective wisdom of peers.</p>
</li>
<li>
<p><strong>Peer Inspiration:</strong> Engage with an assembly of forward-thinking leaders, absorbing ideas that could be the game-changer for your next offsite.</p>
</li>
</ul>
<p><em>Note: This workshop is limited to 20 participants</em></p>
<h3><a href="https://lu.ma/i3xlin8v">Register Today</a></h3>
<hr>
<p><strong><h5>Need help getting started? <a href="https://calendly.com/asheren/15min">Book a free consultation today</a> or <a href="https://daydreamsinruby.com/offsites/">check out my offsite planning service</a></strong></h5></p>
<hr>
<p><strong>Interested in the current state of offsites more broadly? Fill out <a href="https://docs.google.com/forms/d/e/1FAIpQLSfUnFh-xGT2ds7H5TmGsfL5uDTa_ieXpwNjWxVSRApVg1uKHA/viewform">this survey</a> to provide information about your company's offsites and I'll reach out with summarized and anonymized results after they survey closes.</strong></p>
<hr>
]]></description>
      </item>
    
      <item>
        <title>The September Mindset: Paving the Way for End-of-Year Success</title>
        <link>https://www.daydreamsinruby.com/blog/2023-09-01-the-september-mindset/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-09-01-the-september-mindset/</guid>
        <pubDate>Fri, 01 Sep 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>People usually think about December/January as a time of reflection and new beginnings. It's the new year, new you, new goals, new things going on. The START of the year. And while January, to me, means starting new things, it frequently doesn't come with the same period of self-reflection outside of a trite &quot;What new thing should I be doing now?&quot;</p>
<p>September is what always gets me into a particularly reflective mood. It's not the <em>end of the year</em> but, it kicks off a period of reflection as new beginnings start. The transition of summer to fall is a meaningful one, often with more signs and symbols of changes than the end of the year. The pace changes for myself and for most folks around me. You can feel people coming out of summer mode, summer pace, and summer vibes to get back into focus in a more deliberate way. Kids start school, camps end, and the day-to-day looks different.</p>
<p>More specifically, for me personally, beyond atmospheric and schedule changes, to really trigger the SELF reflection piece, Jews also enter the month of <a href="https://www.myjewishlearning.com/article/what-is-elul/">Elul</a>. Before the high holidays (most notably for folks <a href="https://www.myjewishlearning.com/article/rosh-hashanah-101/">Rosh HaShanah</a> and <a href="https://www.myjewishlearning.com/article/yom-kippur-101/">Yom Kippur</a>), we experience Elul, the last month before the new year but the focus of Elul is self-reflection. The <a href="https://www.myjewishlearning.com/article/shofar/">Shofar</a> is blown daily to remind us to do some reflection.</p>
<p>This transition and self-reflection time is a great opportunity for companies to reflect as well. Fall offsites focus on getting teams and individuals aligned to finish strong and NOW, not in December, is when planning, thoughts, and strategy conversations begin to take place for what 2024 will look like. Going into the end of the fiscal year, for many, what do they want to accomplish? Coming out of the summer, how are things going? And, most importantly, how are you self-reflecting to hold yourself accountable and make smart decisions about what YOU want the end of YOUR year to look like. If you're starting your planning conversations and thinking about how you are doing, what you're prioritizing and what you aren't prioritizing, here are some questions to think through:</p>
<ul>
<li>How are you doing? But for real, how are you <em>really</em> doing?</li>
<li>What do you wish you had time for that you don't?</li>
<li>What is going well?</li>
<li>What do you wish was going better?</li>
<li>How is your team doing?</li>
<li>What do you invest in that will pay dividends in the future? for yourself and for your company?</li>
<li>How will you solve those problems today?</li>
</ul>
<p>so... what are you reflecting on as a new quarter comes up and we creep closer to the end of the year?</p>
<p>Here's a helpful worksheet to help you think through current blockers, how you're solving them now, how you want to solve them (or even just brainstorm all the potential solutions!), and what sorts of resources you'd need to solve the problem. I'd encourage you to think through what resources you need to solve the problem in the <em>most</em> ideal way and then also what resources you need to solve the problem in the most <em>realistic</em> way. And then finally, what actions you'll take to find those resources that you need.</p>
<object data="/assets/pdfs/problem-identification-and-solutions-worksheet.pdf" type="application/pdf" width="600" height="400">
    <p>It appears you don't have a PDF plugin for this browser. No biggie... you can <a href="/assets/pdfs/problem-identification-and-solutions-worksheet.pdf">click here to download the PDF file.</a></p>
</object>
<p><a href="/assets/pdfs/problem-identification-and-solutions-worksheet.pdf" download>Download PDF</a></p>
<script>
document.getElementById('pdf-download-link').addEventListener('click', function() {
    plausible('PDF Downloaded', {props: {pdfName: 'problem-identification-and-solutions-worksheet.pdf'}});
});
</script>
<hr>
<p><strong><h5>Need help getting unstuck or solving these problems? <a href="https://calendly.com/asheren/15min">Book a free consultation today</a></strong></h5></p>
<p><img src="/assets/images/blog/fall-reflection.png" alt="a beautiful view of fall with trees reflected in the water"></p>
]]></description>
      </item>
    
      <item>
        <title>Beyond the Spreadsheet: Why Cancelling Team Offsites is a Hidden Cost You Can&#39;t Afford</title>
        <link>https://www.daydreamsinruby.com/blog/2023-08-09-dont-cancel-your-offsite/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-08-09-dont-cancel-your-offsite/</guid>
        <pubDate>Wed, 09 Aug 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Let's chat about offsites for a minute. Offsites are called by a variety of different names at companies... team week, hangout week, coworking week, onsite, offsite, summit, team/department/company gathering, but no matter what you call it, the overarching goal is the same. You want to get people together.</p>
<p>As layoffs continue to deeply affect the tech industry, and companies look at every dollar they spend more carefully, more and more companies are cancelling their offsites. This is a mistake, plain and simple. But I also get it!!! Think about the last offsite you were a part of (or even the last one that you planned).</p>
<ul>
<li>Did people have fun? Probably but what about these other aspects...</li>
<li>Did you have a rubric or a clear way of measuring success? And I'm not talking about the &quot;was it nice to see everyone in person&quot; success (because it's almost always nice to see everyone in person), I'm talking the realer, deeper questions.</li>
<li>Did the offsite result in any deliverables being produced?</li>
<li>Was everyone clear on next steps, action items, and who was owning what?</li>
<li>Did folks with additional logistical constraints to work out so they could travel feel like it was truly worth their time?</li>
<li>Did there end up being some sort of people-related issue that also occurred and then had to be addressed effectively after the fact?</li>
</ul>
<p>I wouldn't be surprised if your answers to those questions were yes, no, no, no, no, yes, in that order. And so when you couple all of <em>that</em> with budget constraints, of course it might feel like it makes the most sense to cancel your upcoming offsite.</p>
<h4>But you shouldn't do it</h4>
<p>Here's why -</p>
<p>Offsites connect teams. They connect individuals to each other. They connect individuals to company goals and milestones. And they connect teams to each other. They (should) energize people. They (should) give people time to process celebrations and grievances in order to move forward in a healthy way for themselves and for the business. Finally, offsites create that connective tissue that allow individuals to work together so much more effectively. Time after time and study after study has shown that teams that know each other better and communicate more effectively are more productive. And that teams where people have closer ties to one another have higher retention and lower turnover rates. And no, this doesn't mean that bringing everyone back to work in person is the solution. It means that these thoughtful, creative, effective touchpoints are critical, not just for your team now, but for where your team will be 3 months and 6 months from now.</p>
<p>If you're not paying for your team's offsite now, you'll just be paying for it in a different way through communication gaps, team dynamics, and productivity hits later. The cost of an offsite is just easier to identify and easier to remove from a spreadsheet than the more hidden costs of teams that aren't quite meeting their potential or don't quite have the motivation that they once did.</p>
<h4>But make sure it's worth it</h4>
<p>If you're going to spend the money, make sure it's worth it. Make sure you're giving yourself enough time to plan an effective offsite. This starts with thinking about all of those questions above, about what led to all those &quot;no&quot;s and ensure that, this time, you have goals and deliverables that are balanced with fun and truly great experiences.</p>
<hr>
<p><strong><h5>Need help getting started? <a href="https://calendly.com/asheren/15min">Book a free consultation today</a> or <a href="https://daydreamsinruby.com/offsites/">check out my offsite planning service</a></strong></h5></p>
<hr>
<p><strong>Interested in the current state of offsites more broadly? Fill out <a href="https://docs.google.com/forms/d/e/1FAIpQLSfUnFh-xGT2ds7H5TmGsfL5uDTa_ieXpwNjWxVSRApVg1uKHA/viewform">this survey</a> to provide information about your company's offsites and I'll reach out with summarized and anonymized results after they survey closes.</strong></p>
<hr>
<p><img src="/assets/images/blog/spreadsheet-destruction.png" alt="a spreadsheet being pulled off of a computer with an ominous scene in the background graphic sketch style"></p>
]]></description>
      </item>
    
      <item>
        <title>Leading through Reorgs</title>
        <link>https://www.daydreamsinruby.com/blog/2023-08-02-leading-through-reorgs/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-08-02-leading-through-reorgs/</guid>
        <pubDate>Wed, 02 Aug 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Reorganizations can be painful, disruptive, and difficult for leaders and engineers. They can also be necessary in the short term and turn out to be extremely helpful in the long-term. I recently had the opportunity to be interviewed by <a href="https://www.linkedin.com/in/suzanbond/">Suzan Bond</a> about my experience leading through reorgs. <a href="https://www.constellaryhq.com/leader-interviews/allison-mcmillan-leading-through-multiple-reorgs">Check out our fun, and hopefully insightful, interview.</a></p>
<hr>
<p><strong><h4>Need help leading your team to the next level? <a href="https://calendly.com/asheren/15min">Book a free consultation today</a> or <a href="https://daydreamsinruby.com/fractional/">check out my Fractional VP of Engineering service</a></strong></h4></p>
<hr>
<p><img src="/assets/images/blog/reorg-chaos.png" alt="people in all different places with lots of chaotic staircases"></p>
]]></description>
      </item>
    
      <item>
        <title>Nurturing Connections in Casual Gatherings</title>
        <link>https://www.daydreamsinruby.com/blog/2023-07-12-elevate-your-hangout-offsite/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-07-12-elevate-your-hangout-offsite/</guid>
        <pubDate>Wed, 12 Jul 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>With businesses increasingly going remote or hybrid, the power of in-person gatherings to forge and fortify connections within teams is vital. Offsites can range from meticulously planned marathons of back-to-back sessions to free-flowing encounters, which on the surface seem laissez-faire but are often assumed to be catalysts for serendipitous collaboration and 'watercooler' brainstorming. They focus on the idea that to plan <strong>nothing</strong> allows for <strong>something</strong> to happen; that when you get smart, collaborative, kind people in the room together, magic is bound to occur. The assumption that people will get to know one another and they'll walk away from the experience with a greater understanding of who everyone is on a more personal level, they'll have had some interesting informal conversations, and that tangents or ad-hoc watercooler &quot;wouldn't it be cool if&quot; brainstorms will fuel the next unknown amount of time until the group can get together again.</p>
<p>While the latter promises an inviting mix of travel, leisure, and informal conversations, it often unwittingly favours extroverts, leaders, and those who know each other already, thereby leaving others on the periphery. Moreover, measuring the success of such offsites is nebulous both for the organizers and the attendees. Have people made new, meaningful connections? Have they delved beyond small talk? Was the offsite worth their time? Here are some suggestions about how to make your hangout offsite truly inclusive, engaging, and impactful without losing its laid-back vibes.</p>
<p><strong>1. Set expectations and understandings beforehand.</strong></p>
<p>Even with a gathering that is more of a hangout, pre-offsite communications are important. Here, you might include suggestions for questions to ask or ways for folks to engage with one another. You might ask people to come with a certain mindset or ask folks to think about ways in which they can connect with others authentically as opposed to just working from a different location for that week. Helping to frame the mindset for the week is really important to determine how people <em>show up</em>.</p>
<p><strong>2. Build in ways for people to meet others they might not otherwise interact with.</strong></p>
<p>One of my favorite ways to do this is through a short unconf. An unconference is a participant-driven time where the agenda is created by the attendees at the beginning of the meeting. Unlike the structured format of a typical conference, an unconference encourages spontaneous and interactive discussion. This can be a brilliant way to make your offsite more engaging.</p>
<p>At the start of the time, invite your team members to propose topics they're passionate about or challenges they're facing that they believe others could benefit from discussing. You can decide if you want to limit the topics to ideas that are work-related or open it up to anything people want to talk about! Vote to determine the ideas the most folks are interested in. Then, create a schedule based on these suggestions and let the organic conversations unfold. This not only encourages active participation but also brings to the fore diverse thoughts and ideas that might not surface in a typical team setting. It allows folks to get to know one another differently.</p>
<p>There are a variety of ways to add in similar aspects to a low-key offsite including pairing folks, having people sit next to different people for every meal, creating rotating walking buddies for breaks, and more. The goal here is to allow folks to interact with people they may not normally interact with AND go deeper than surface level conversation. Remember, you can always make some of these things optional as well.</p>
<p><strong>3. Do <em>one</em> session that's all together and don't let that session be a solely frontal presentation.</strong></p>
<p>Most teams or companies that get together do at least <em>one</em> session with everyone together... if not, it seems like a missed opportunity! But these sessions are frequently a &quot;state of the company&quot; or a usual all-hands that just happens to be happening in person. But what can you <em>do</em> in person that you can't do virtually? Don't miss the opportunity to have folks engage and interact with the material being discussed to really digest it. And no, i'm not talking about a Q&amp;A. I'm talking about a small group discussion after the fact, or a big, but brief brainstorm about next steps, or even fun appreciations or an excitement/fear post-it exercise that enables folks to see what others are thinking and allows leadership to get a better sense of where their team is at. This doesn't have to take a lot of time, or be long and arduous, but if you don't want to miss our on the opportunity to talk to everyone together, in one space, then you definitely don't want to miss out on the  opportunity to make it a lasting experience that will stick with people beyond the offsite.</p>
<p>As the businesses navigate hybrid and remote landscapes, thinking critically about how to connect individuals in ways that energize them and make the company more productive as a whole, it's crucial to reconstruct the idea of an informal hangout as a transformative, communal experience. By incorporating participant-driven activities like unconf, fostering deeper conversations, and capitalizing on the opportunities presented by being physically present, we can shape offsites that cater to a wider range of personalities and preferences. These enhanced offsites, while maintaining their relaxed atmosphere, can forge profound connections among team members, bringing about heightened understanding, empathy, and, ultimately, a more productive and cohesive team. The success of such an offsite then becomes a shared, palpable experience, far removed from the intangible benefits of past gatherings, setting the stage for a new age of team building and collaboration.</p>
<hr>
<p><strong><h3>Need help leveling up your offsite? <a href="https://calendly.com/asheren/15min">Book a free consultation today</a> or <a href="https://daydreamsinruby.com/offsites/">check out my offsites service</a></strong></h3></p>
<hr>
<p><img src="/assets/images/blog/hangout-offsite.png" alt="people getting together around a fire getting to know each other"></p>
]]></description>
      </item>
    
      <item>
        <title>Beating the Heat of Summer PTO: An Engineering Leader&#39;s Guide to Staying Cool</title>
        <link>https://www.daydreamsinruby.com/blog/2023-06-26-managing-summer-pto-effectively/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-06-26-managing-summer-pto-effectively/</guid>
        <pubDate>Mon, 26 Jun 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Here in the Northern hemisphere, summertime is just starting. The sun is shining, the birds are chirping, it's beautiful. But it also signals something else... for many, it signals a change in routine. For those with school-aged kids, the rhythm of life shifts dramatically from the school year schedule, and everyone seems to have vacation on their minds. If you're an engineering leader, this period often means revisiting estimates or roadmaps, accommodating various vacation schedules, and managing the constant revolving door of who's in the office and who's out this week.</p>
<h4>1. Simplify Tracking of Team Availability</h4>
<p>During the summer, the challenge of tracking who's available or out can mount as vacations accumulate. It's not uncommon for team members to be reachable only via email or Slack on certain days. Having a clear overview of everyone's availability can be beneficial for both managers and teammates. It's essential that your team has a concise checklist to follow when preparing to be out, which should typically include steps such as submitting time-off requests to the official HR system, updating adjacent and relevant calendars like their individual calendar and a team calendar (including noting &quot;email/slack only&quot; time), and setting Slack statuses. I also highly recommend a vacation or stop emoji. Several HR systems and Slack PTO integrations can automate this process and help in maintaining transparency.</p>
<h4>2. Implement an Easy Out-of-Office (OOO) Template</h4>
If a team member is headed out for longer than a week, it's helpful to have an easy template for them to fill out before being OOO. A document (or GitHub issue) containing all of the critical information about various projects in flight also helps prevent being pinged or having to ping someone when they're out. Don't forget to do this when you're going on PTO as well! Here are a few items to put on the template:
<ul>
<li><strong>Project in progress:</strong> create one entry for each project in progress including the information below. What is the project/ticket/initiative being worked on? If possible, provide a direct link to where the information lives in case anyone needs to access the work in progress while the main point person is out.</li>
<li><strong>Who's taking it over (if anyone):</strong> If this work is being handed off to someone, or even just &quot;babysat&quot; but someone during PTO time, explicitly say who that person is and how to contact them.</li>
<li><strong>Any important notes or things to know:</strong> This doesn't have to be a full project write-up, but mostly just important things to note. For example &quot;waiting on x&quot; or &quot;should start with a spike answering at least x, y, and z&quot;. Especially if the work is expected to continue while you're out, think of this as transition notes, or even reminder notes for when you or your teammate is back.</li>
<li><strong>Level of urgency:</strong> Clearly state what the level of urgency is for a certain project/ticket/initiative. This can be anything from very critical and work will be fully passed off so that it can continue while away to intending for the item to be put down or paused until you (or the point person) returns. Even if something is expected to be fully paused until returning, it's good to list it as a project so that <em>if</em> there is a question about it, it's clear who they can go to and that it won't be picked up again until the person returns.</li>
</ul>
<h4>3. Set Clear Expectations for Transitioning Out for PTO</h4>
How many times have you been pinged on your first day of PTO or felt the need to ping someone because you had a question almost immediately after they left? Or maybe you accidentally pinged someone because you didn't see that they were, indeed, out on PTO. 
<p>Setting clear expectations for someone going on vacation limits this from happening. Folks know who to go to for questions, they know what work is continuing and what is paused, they can clearly see in a slack channel, slack status, or on a calendar that a person is out. The items above shouldn't take someone more than 30 minutes to complete and it helps so many people do their jobs effectively while one (or many) individual(s) is out.</p>
<h4>4. Have a plan for transitioning folks back in from PTO</h4>
The day folks dread... that first day back from vacation. Emails have piled up, there are notifications galore, you need to find all the information and company happenings that you missed while you were out, and even home routines are brand new again.
<p>Allow the returnees a day or two to catch up, and if you're a manager, provide them with a summary of what they missed. Encourage them to ask questions and take time to settle back into the workflow (especially if someone was out for 2 weeks or longer!). For leaders, it's ok for you to take this time and space too! Give yourself permission to do so. Finally, if someone handed off all of their tickets or work before they left, make sure they know what they're coming back to and what work to pick up.</p>
<hr>
As a manager, you've got some particular follow-ups and to-dos as you recognize how many people will be out of the office (or even if there is only 1 person out at a time but they're back to back on the same team or project). First, in the past, I've created a document titled something like "so you're going to be out of the office" that provides everyone with an easy checklist and an example or two of what these things look like. Second, don't be afraid to adjust timelines and expectations as a result of PTO and be vocal about it. Because PTO is often requested closer to the time off, it's harder to predict the impact at the start of the quarter. Regular weekly updates or communications are a great time to call out projects that are at risk or that need an updated timeline as a result of factoring in PTO. This should not prevent _anyone_ from taking PTO or feeling bad about doing it, but to not raise the impact on work in progress frequently can lead to overworked engineers towards the anticipated ship date or bringing up concerns too late. In the future, you'll also be more aware of times when there are a lot of folks taking PTO and adjust timelines in advance to take that into consideration. Finally, make sure to ask people when they're back how it was! This goes a long way in encouraging people to take time off and transitioning back to work afterwards.
<br>
<br>
<p><h5>Embrace the summer season and have a fantastic vacation!</h5>
<p><img src="/assets/images/blog/managing-pto.png" alt="people in an office with an ideallic setting outside, some working and some not"></p>
]]></description>
      </item>
    
      <item>
        <title>Shaping High-Impact Tech Teams: The Critical Art of Puzzle-Piece Placement</title>
        <link>https://www.daydreamsinruby.com/blog/2023-06-02-building-teams-as-a-puzzle/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-06-02-building-teams-as-a-puzzle/</guid>
        <pubDate>Fri, 02 Jun 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Picture this... a young woman, with piles of paper all around her. Each sheet containing a photograph and a &quot;short sheet&quot;, a quick glance of key information about an individual. The goal, take these hundreds of pieces of paper and organize them into 5 piles. Four piles of 40, the number of individuals that can fit on a tour bus. And 1 pile of the rest, to touch base with for a future tour.</p>
<p>Once upon a time, I was responsible for leading immersive experience trips for college students. For the summer trips, we would receive upwards of 300 applications, for 3-4 buses, with 40 spots on each bus. Seems easy enough, right? Just put people on buses... maybe group them by age or just randomly, they'd have a good time. But this was the trick. These immersive experiences were meant to be life-changing. They were meant to have an impact long-beyond the course of just the trip experience. To create lasting friendships and memories that persisted for years to come. For that to happen, the trip itinerary was one piece... how you moved a group through the experience gradually and stretched their minds but, more than that, the actual people in the group had a tremendous impact on the experience as a whole.</p>
<p>This is how I still think about teams today. Think of teams as puzzles, with each individual serving as a unique piece that fits into the larger picture. And putting together excellent teams means more than just looking at resume bullet points. So how do you start to hone this skill? And can you do this without the gauntlet that is the usual tech interview system?</p>
<p>I'm not gonna lie, it takes time and practice to hone this skill and get to a place where you can ask the right questions and know how to read between the lines on answers in order to determine if someone will be a good fit or not for the team you're building.</p>
<h4>Step 1</h4>
<p>Step 1 is to know who is on your team and what skills and personality traits they bring to the table.</p>
<p>For technical skills, what does familiarity and expertise look like for each individual? (Note I said familiarity and expertise, not years of experience because someone with less years of experience can still be more comfortable or knowledgeable in a certain area of the codebase). What languages are they familiar with? What have they had exposure to in the past? What do they enjoy doing and what do they dislike digging into?</p>
<p>Assessing non-technical skills is a little trickier... how do they interact with conflict or conflicting opinions on the team? How do they communicate - both written and verbally? What does it look like when they resolve issues? When they look at new codebases or new areas... what's their approach? Do they hold the team together in any way?</p>
<p>When you have a good baseline sense for each individual, you can start to think about how these situational or behavioral traits interact together in order to understand the dynamic and balance that exists on your team. People build off of each other so thinking about the variety of personalities and how they cooperate and conflict (in a healthy way) with one another is critical.</p>
<h4> Step 2</h4>
<p>Step 2 is to determine what you need. When you think about the best teams you've worked on, or even the best ones you've observed, what was their &quot;it&quot; factor? It's usually the result of lots of different personalities and types of people coming together... someone who's really extroverted, someone who asks a lot of questions, someone who makes and creates jokes and brings levity to situations, someone who helps balance that with understanding the seriousness of some things, someone who takes a little bit to mull over information before providing thoughts or opinions. And these don't have to be all individual people, it's the collection of characteristics you're looking for.</p>
<p>Balance that with technical needs... How deep is your bench for your critical technical skills? Will you need to stretch into different programming languages in the future? And if so, is there someone that would be a good guide for others in that scenario?</p>
<p>While this might seem overwhelming, especially if it's your first time, understanding your team members on an individual level and observing their group dynamics will make it easier to identify which puzzle pieces are missing that, if added, would bring everyone together and make the entire team a little bit better. Although beyond the scope of this article, the same strategies can be employed to identify individuals who may be exerting a disproportionately negative impact on a group.</p>
<h4>Step 3</h4>
<p>Step 3 is to craft questions that helps you assess these traits to see how they might balance with your team. There are many articles and posts that hotly debate the best way to assess a candidate's technical skills (I have my own opinions as well that I'll opine on in the future) so here, I'll focus on some of the other skills you might be focused on hiring for. So, back to my buses... seems like a lot right? To interview 300 candidates, decide who would be accepted, and put them all onto buses... seems like it would take a while. Well, I had about 2 weeks. 2 weeks to to interview every individual, make decisions, and get them sorted on a bus (or not). The questions I asked had to be brief. They also had to be informative enough that reading the notes of interview 1 would still mean something after interview 201 and straight-forward enough that I could rely on fellow teammates to conduct interviews as well and get adequate enough notes to make decisions. Those interviews were 15 minutes each. They asked 3 questions:</p>
<ul>
<li>Which friends are you applying with and how do you feel about potentially being on a bus without them?</li>
<li>What activities are you involved in?</li>
<li>What do you hope to get out this experience?</li>
</ul>
<p>In addition to that, the &quot;short sheet&quot; had their name, year at school, and major (or what they were thinking about majoring in). It seems brief, it seems like how could I get enough information in 15 minutes and with just these 3 questions to break people up into groups that would help them have a life-changing experience, but it worked. It was just enough to get a sense of them, who they were, what their personality was, and what they loved. Using this information, I'd put together buses that had a little bit of everything... the really positive folks who would lift everyone up on tired days, the super aware folks who would make sure that everyone's voice got heard, the extroverts, the folks who did glue work, the ones who quietly helped, and the ones that pushed boundaries and challenged questions or situations. All of these different types of people were critical to bringing everyone together in a way that just worked.</p>
<p>Despite the tech industry's notorious reputation for multiple rounds of interviews, a clear understanding of the kind of person and skillset needed can ensure the successful filling of any gaps in your team. Those are usually behavior or situational interview questions. I'll give a few examples:</p>
<ul>
<li>Tell me about a time you mentored someone and what you learned from that process</li>
<li>What's something you've done for your team that you've found really fulfilling and meaningful? As a follow up, you can ask how they got other teammates involved or how teammates felt about it.</li>
<li>How do you usually approach providing a code review?</li>
<li>Tell me about a time you disagreed with someone. What was it about and how was it left?</li>
<li>What's something thoughtful that a teammate or manager has done for you in the past to show appreciation?</li>
</ul>
<p>A team is a puzzle where all the pieces need to fit together. A team is an orchestra that sounds beautiful when it's working together really well. A team is also a living being. Every time someone leaves or someone joins a team, it's a new team, a different team, that has a different personality. Teams are constantly evolving and changing. People are constantly learning from one another and advancing or improving their skills in different ways. Being able to see who your team is, where they are at, and what they need to be even better takes practice, but do it enough, observe it enough, and you'll continue to keep getting better at it.</p>
<p><i>Need help figuring out how to do this or what this might look like for your team? <a href="mailto:allison@allisonmcmillan.com">Shoot me an email</a>, <a href="https://calendly.com/asheren/15min?month=2023-06">set up a call</a>, or <a href="https://daydreamsinruby.com/services/">check out my services</a>! I'm happy to help.</i></p>
<p><img src="/assets/images/blog/monster-team.png" alt="a variety of monsters each with different skills standing together"></p>
]]></description>
      </item>
    
      <item>
        <title>The Art of Retrospectives: Lessons from Netflix&#39;s Jewish Matchmaking on Boosting Team Performance</title>
        <link>https://www.daydreamsinruby.com/blog/2023-05-16-jewish-matchmaker-makes-a-retro/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-05-16-jewish-matchmaker-makes-a-retro/</guid>
        <pubDate>Tue, 16 May 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As a surprise to probably no one, I was very excited when Netflix premiered Jewish Matchmaking a couple of weeks ago. The show has lots of fantastic moments, explanations, and interpretations but my favorite part was when the matchmaker did, what I consider, a great retrospective with one of the participants.</p>
<p>What is a retrospective? A retrospective, usually known colloquially as a &quot;retro&quot;, is an opportunity for a team or group of individuals to reflect on (ideally) immediately past work and determine what changes or improvements can be made for the future. While retrospectives became popular as a part of an Agile workflow, they don't have to be used strictly in that sense. Teams do retrospectives when it makes sense for them. Some teams do them at regular intervals regardless of where they are in a workstream, others do it at the end of each sprint, and others will run a retro at the end of each project or feature. Folks can also run retros looking at larger periods of time, for example, a retrospective of the last quarter or the last half of the year.</p>
<p>Inspiration for retros can strike from anywhere and there are dozens of different ways to run effective retrospectives. The primary goals are that you provide folks with:</p>
<ol>
<li>A way to look back and share both positive feelings about what's going well and what felt a little rough</li>
<li>Space to talk about the aforementioned items</li>
<li>Identified actions moving forward to make things better</li>
</ol>
<p>So, what on earth does this have to do with the show Jewish Matchmaking? Well, in episode 4, Aleeza pulls out a worksheet that shows a suitcase (it's right around the 10 minute mark if you want a good visual). Her goal here is to have someone assess their dating history, or otherwise, their dating baggage: &quot;Dating baggage can include negative dating experiences, fears about dating, everything that's inside that you can't see.&quot; She then goes on to say &quot;And we're going to put it on paper to evaluate it together to lighten that luggage.&quot; The goal is to recognize what individuals are carrying around, and what are they <em>thinking</em> that likely impacts their actions, which ultimately also impacts how a project gets executed. This same idea can be used as a retrospective but I've also seen tactics like this used in a &quot;pre-mortem&quot; which is a way to discuss and hopefully allay fears or concerns before a project kicks off. Reflection, understanding, and discussion are the primary ways effective teams move forward and continue to get better and better every day.</p>
<p>Now that we've defined what a retro is and what it's used for, here are some of my favorite retros:</p>
<ul>
<li>6 hats. I love using this one. It has a good variety of approaches and you can even switch up how you do each hat to allow for better participation from both introverts and extroverts</li>
<li>The sailboat retro. The general gist of this one is that you draw a boat with a sail and an anchor and you use the picture to write, post-it, and discuss what weighs you down and what gives you speed.</li>
<li>Liked, Learned, Lacked. I used this one frequently as a <em>personal</em> retrospective when I wanted to do some personal and professional self-reflection. You make 3 columns, liked, learned, and lacked, and write ideas/thoughts down for each one</li>
<li>Draw the sprint/project. Folks draw (or find a gif) that represents the work you're retro-ing on. It's both fun and informative to then have people share and discuss why they drew (or chose) the image they did.</li>
</ul>
<p>The most important thing to remember when running a retrospective is to make sure that there are action items and point people assigned to those at the end of the session. One common pitfall I see frequently from teams is that they are going through the motions of having a retro, but the same issues keep coming up, and there's no progress made on those problems or concerns from one retro to the next. Additionally, action items distilled from the meeting aren't revisited again so they get lost in time and space until the issue happens over and over. The retro is useful for the reflection time, understanding, and discussion but then the actual actions and fixes need to follow in order for this to be an effective use of time and energy.</p>
<p>With that, I'll leave you to it! Go Retro on and don't forget to have fun with it!</p>
<p><img src="/assets/images/blog/baggage.png" alt="a variety of bags and personal items all stacked up on top of each other"></p>
]]></description>
      </item>
    
      <item>
        <title>The Painter&#39;s Tape of Leadership: Mastering Versatility for Effective Management</title>
        <link>https://www.daydreamsinruby.com/blog/2023-05-03-versatility-as-a-leadership-skill/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-05-03-versatility-as-a-leadership-skill/</guid>
        <pubDate>Wed, 03 May 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>When parents of young kids ask for advice on traveling, my one go-to suggestion is to take painters tape. They’ll get plenty of advice and opinions from others… things like best times to travel, equipment to bring (or not to bring), timezone adjustments, etc. but painters tape... that's often a new one for folks. Why painters tape you might ask? Because painters tape is small but incredibly versatile. I’ve used it to childproof hotel rooms, keep cabinets closed, help visually mark something that’s off limits, close things like snack bags, create games to play, and more. It’s surprising how helpful and useful this tool can be.</p>
<p>So what is the painters tape of leadership? The ability to be versatile. A large part of being a manager and leader is understanding versatility and crafting your skillset to be versatile. Versatility is defined as the &quot;ability to adapt or be adapted to many different functions or activities.&quot; This shows up in so many different ways. Think about your last week or last month of your role. In what ways did you adapt to someone else's communication style? What about their leadership style? In what ways did you take on a new task that required you to be versatile... to dig in and tackle something new requiring you to stretch your current abilities? As leaders, we're constantly looking at how best to communicate with our team or our peers, showing up in different ways that are effective in different groups. And beyond that, you can identify who on your team is more versatile and who's less.</p>
<p>So what can you do to push yourself to be more versatile:</p>
<ol>
<li>Learn from others. Ask why things have been done a certain way to understand where they're coming from.</li>
<li>Get comfortable with being uncomfortable</li>
<li>Break down scary tasks into smaller pieces that you can tackle one at a time.</li>
<li>Be curious</li>
</ol>
<p>The next time you're challenged with a task or pushed out of your comfort zone, or attempting to do the same with someone who reports to you, ask yourself what's potentially preventing them, or you, from being more versatile.</p>
<p><img src="/assets/images/blog/painters-tape.png" alt="colorful tape all over"></p>
]]></description>
      </item>
    
      <item>
        <title>5 ways I used AI for my website refresh</title>
        <link>https://www.daydreamsinruby.com/blog/2023-04-10-using-ai-for-a-website-refresh/</link>
        <guid>https://www.daydreamsinruby.com/blog/2023-04-10-using-ai-for-a-website-refresh/</guid>
        <pubDate>Mon, 10 Apr 2023 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Over the past few months, there has been much hubbub over new and improved AI tools like ChatGPT, Dalle, Midjourney, and more. Are these tools replacing work? Will software engineers still be necessary in a few years? How are folks using these tools in their day-to-day lives? And where is the line? What ways of using these tools are useful vs. what ways are potentially thought to be unethical?</p>
<p>I hadn't had much time previously to play around with these tools. I had used Dalle once or twice to generate images for conference talk slides, but that was mostly it. And then I decided to give my website a refresh to give it some new energy and focus on my <a href="https://daydreamsinruby.com/services/" target="_blank">engineering leadership consulting services</a>. It gave me the perfect opportunity to really utilize ChatGPT and Midjourney to see what they could do. Here are the top 5 ways I used them:</p>
<ol>
<li>
<p>Color Palette choices: Admittedly, I do not have a great eye for color palettes and knowing which colors work well together. Instead of looking on color palette sites and trying to determine the best path forward, or what made sense for my website, I asked ChatGPT to please provide me with three business-forward color palettes that have a feminine feel, including the hex value for each color and noting which color would be used for a series of elements (for example, a button, a main section background, a highlight/sidebar, etc.).</p>
</li>
<li>
<p>Explain it to me like I'm 5: Let's just say that it's been a little while since I've dug deeply into my Jekyll website to keep everything updated and in proper working order. There are also amazing tools these days that weren't around when I first launched my website a decade ago... things like Vercel and Netlify, new static website generators, and more. I was so excited to get my hands dirty with these newer approaches but I also wanted to make sure that I wasn't spending too much time in the planning and researching stage before getting to the building stage. ChatGPT was incredibly helpful for a whole series of &quot;please explain this to me like I am 5&quot; questions. I asked things like what is the difference between Astro and 11ty, what are the differences between Vercel and Netlify, how many people are using each, what are the top themes for some of these static site generators, and more. While I dug a little further on my own, being able to ask these questions and even drill down further, gave me a huge shortcut as I got going.</p>
</li>
<li>
<p>Coding skills clarification or refresh: For my website refresh, I ultimately decided to start from scratch and use an 11ty template (see way 2 on how I made this decision), but it's been a little while since I have coded every day, and syntax like Nunjucks was new to me. When a piece of my code wasn't working, or when I needed to refresh my memory on how to do responsive column layouts, I could quickly and easily paste some code into ChatGPT and ask it to please help me out a little bit or explain how something was working.</p>
</li>
<li>
<p>Updating my About Me section: This piece was a bit more iterative. First, I took my previous about me and asked ChatGPT to highlight it in a few ways, for example &quot;Please rewrite this bio focusing on my community work&quot; or &quot;Please rewrite this bio highlighting the strategy work I did&quot;. Then, I took a few different pieces of writing... a couple of versions of my bio, my resume, and previous about me, and asked to please combine them.</p>
</li>
<li>
<p>Midjourney for images: I knew I wanted to have some images, especially to go along with my services offerings. Midjourney was so much fun to use and, I think, ended up providing me with some really incredible images that provide a great visual compliment to what the text on my site is saying. I'm gradually finding more and more uses for Midjourney and reaching for it as a tool more than I thought I would, to be honest. I intend to also use it to create images for blogposts (see below).</p>
</li>
<li>
<p>BONUS: I used ChatGPT to provide me with a one-sentence description of this blogpost to put in the description field.</p>
</li>
</ol>
<p>Overall, for many of the ways I used ChatGPT, I found that I wasn't using it very differently than how I would use google search in the past. Most of the responses ChatGPT generated couldn't be simply copied and pasted without reading it over and making sure it was correct or what I was going for. The main difference between my regular, usual googling for information and utilizing AI tools instead was that I could drill down on specific parts and pieces. It was sort of like having an engineer or friend sitting next to me where I could say &quot;I like this part but not this part, what would be a different option?&quot; or &quot;I didn't quite understand this point, can you please explain it further?&quot; And, of course, the areas where I used ChatGPT to summarize or combine pieces of writing wouldn't be possible otherwise.</p>
<p><img src="/assets/images/blog/building-with-tools.png" alt="building with tools"></p>
]]></description>
      </item>
    
      <item>
        <title>Meetings: what should you be considering?</title>
        <link>https://www.daydreamsinruby.com/blog/2022-06-18-meetings-which-ones-to-consider/</link>
        <guid>https://www.daydreamsinruby.com/blog/2022-06-18-meetings-which-ones-to-consider/</guid>
        <pubDate>Sat, 18 Jun 2022 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Meetings. Saying that word often evokes a very specific emotion or reaction. Do you have too many meetings? Too few? Do the meetings you attend lack purpose? How about the ones that you run? I feel like my life philosophy is &quot;everything in moderation&quot; and I feel the same about meetings. Meetings for the sake of meetings is awful. But no meetings can also be awful. They can be used for a variety of purposes, goals, and reasons. I'll go into more specifics in the future but for now, part of figuring out which meetings may work for you and your team right now is just knowing what kinds of meetings are out there. What kinds of meetings do other teams do? And for what purpose? Here's my quick list of the useful meetings that I've run or attended in the past. Again, these meetings are useful at different times and different &quot;seasons&quot; you team may be in.</p>
<ul>
<li>Retrospectives - a meeting where you look back and look forward to iterate and improve upon a working relationship either within one team or amongst a number of teams</li>
<li>Planning meeting - a meeting to look at what's coming up soon and how that work should be broken down, prioritized, tracked, etc. to get everyone on the same page related to milestones and progress markers.</li>
<li>Pre-mortem - a chance for folks to express their worries, fears, concerns, and excitement usually around a larger undertaking coming up and pre-emptively work to address some of those pain points.</li>
<li>Post mortem - similar to a retrospective but frequently with a slightly different methodology focusing on trying to dig towards fewer, more specific root causes and related action items</li>
<li>Team hang/watercooler - chill time with your team for non-work chit-chat</li>
<li>Virtual offsite - Multi-day gathering potentially covering a wide variety of topics and goals. See offsites.</li>
<li>Focused brainstorm meeting - A longer meeting (1.5-3 hours, in my experience) focusing on collecting a variety of ideas and frequently driving towards creating strategic alignment for the future. Popular methodologies come from places like the Luma Institute or other interactive facilitation sources.</li>
<li>1:1 meeting - regular time for an individual and their manager to connect.</li>
<li>Skip level - regular time for an individual to connect with the manager of their manager</li>
<li>Sync meeting - A chance for everyone to get on the same page. This often happens at a regular cadence (ie- weekly or every other week) but may also happen ad hoc</li>
<li>Quarterly planning meeting - Similar to a regular planning meeting but focusing on a longer timeframe, looking at and planning for initiatives, epics, and other work planned for an upcoming quarter. This may also happen for an upcoming half depending on your company's planning preferences and anticipated roadmap iterations.</li>
<li>Performance review meeting - A dedicated time to talk more deeply about an individuals performance and provide feedback. Often some level of feedback and performance check-in is happening during 1:1s but performance review meetings usually have a bit more formality and are a dedicated time to dive specifically into performance related strengths and areas of growth.</li>
<li>All-hands - regular larger meetings, usually larger than one team (a meeting with a team may be a regular sync or planning meeting). This may be a full department or all-company. The format differs wildly based on the engineering leader planning it and goals of all-hands meetings.</li>
</ul>
<p><strong>You can read more about meeting cadence by checking out my <a href="https://github.com/asheren/manager_tools/blob/master/Managing-Remote-Teams/meetings.md">Manager Tools Repo</a>.</strong></p>
<p>What season is your team in? What do you do? What don't you do that might be useful? What meetings have you run or attended in the past that you've found particularly useful.</p>
]]></description>
      </item>
    
      <item>
        <title>Staring at a blank page</title>
        <link>https://www.daydreamsinruby.com/blog/2022-06-04-staring-at-a-blank-page/</link>
        <guid>https://www.daydreamsinruby.com/blog/2022-06-04-staring-at-a-blank-page/</guid>
        <pubDate>Sat, 04 Jun 2022 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Like many other parents, the pandemic has felt absolutely crushing. Even today, while many are moving into a post-pandemic mindset, saying statements like &quot;now that the pandemic is past us&quot;, those of us with children under 5 feel left behind. We can't transition in to that mindset yet, we can't let ourselves think about when the pandemic will feel more over for us because this group feels largely forgotten, meaning that we don't know when things will improve, or when a vaccination is coming for the littlest one.</p>
<p>One unexpected consequence for me over the last couple of years was the absolute frustration I felt staring at a blank page. When the pandemic hit, i was blogging regularly, I was speaking at conferences regularly, and, like others, had multiple conference talks cancelled or changed to virtual as organizers pivoted and figured out what to do next and how to do it. What followed was 2 years of fog, just trying to get myself and family through day-to-day. My littlest's preschool didn't open, my older one did virtual kindergarten (which, amazingly, went pretty well. I credit our household &quot;normal&quot; of someone working from home for his entire childhood in addition to his incredible teachers for that success). THankfully, we had an extra pair of hands in the house during this time. This year, everyone went back to school in person, with masks, frequent testing, constantly changing rules and accommodations, and regular decision-making around literally every little thing. In addition to this, throughout the pandmeic i've been in a leadership role, supporting others also living and working in a pandemic. Making sure that I was a listening ear, strong support system, and creating accommodating conditions for others was my top priority.</p>
<p>And then I would open up my computer and stare at a blank page.</p>
<p>I'd sit there, thinking about the conference proposals I should be submitting, the people I missed talking to at conferences, the blog posts I should be writing, and then podcast I should be continuing. But I was empty. No matter how frequently I tried, I was just stuck. And that stuckness led to frustration. Other people were writing, other people were speaking, other people were getting things done.</p>
<p>But here's the truth of it... I was getting things done, but what I needed to get done was different. What I did (and still) get done revolves around numbers, exposure, vaccination rates, and risk/benefit calculations. Making sure that I and my family need to be happy and healthy.</p>
<p>And also, I miss it. I miss putting out posts that are hopefully helpful to others. I miss speaking at conferences (or even just attending conferences and catching up with people I used to see regularly!!!). So I'm trying again. I might not succeed. I might not be able to stick with it. But i've reserved 1 hour every saturday morning to sit outside at a coffee truck and write.</p>
<p>Or stare at a blank page for an hour but remind myself that it is ok because i'm building the habit again, and i'm making the time and space for good stuff to happen. Which is the most important part.</p>
<p>The space and time you make for yourself.</p>
]]></description>
      </item>
    
      <item>
        <title>Virtual Conferences: It&#39;s now a thing</title>
        <link>https://www.daydreamsinruby.com/blog/2020-08-16-speaking-at-virtual-conferences/</link>
        <guid>https://www.daydreamsinruby.com/blog/2020-08-16-speaking-at-virtual-conferences/</guid>
        <pubDate>Sun, 16 Aug 2020 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Let's face it... no one is going to conferences any time soon. And I miss it!! I miss traveling. I miss seeing friends. I miss interacting with audiences.</p>
<p>Virtual conferences can be scary... maybe even scarier than speaking in person. While there's plenty of stuff that can go wrong in person, there's other stuff that is challenging virtually. Mainly, it's difficult to figure out how the audience is reacting when you can't see them. And there usually isn't a great way to interact with the audience afterwards in the same ways you would in person. But, having now done it a few times, there are some things to look for and ways to counteract that.</p>
<p>Look for conferences or speaking opportunities that include some sort of interactive component. Is the conference creating a way to interact with the other speakers? Or with the attendees?</p>
<p>Make the time. One of the biggest mistakes I've made so far is making time to present during my time slot but not being present for more of the conference. Being present is a way to engage with others through other content, through twitter, or through whatever other platforms the conference is providing.</p>
<p>Think about places to grab attention in your talk. We know it. We've experienced it. We're all sitting at screens watching talks. It's easy to get distracted with notifications or email or other things. This happens in person as well but when you're in a room with other people, it feels easier to snap back in to what's going on. As a speaker, make it simple for folks to tune back in to your talk and provide places in your talk where the slides or words grab the audience again.</p>
<p>Ultimately, we speak at conferences to teach or help others. Hopefully, we're talking about something that provides people with a new perspective or information they didn't have before. <em>That</em> doesn't change regardless of whether the conference is virtual or not. I can't wait until I'm able to see everyone again in person and speak at conferences. But in the meantime, this virtual conference thing isn't so bad.</p>
<p>Shameless plug - As one of the conference chairs for RubyConf this year, we'll be providing a unique conference experience that provides value to speakers and participants, with options to pre-record your talk or deliver it live. Submit your talk proposal today: https://cfp.rubycentral.org/events/rubyconf2020 or, if you're not submitting to speak, buy your ticket today! http://rubyconf.org/</p>
]]></description>
      </item>
    
      <item>
        <title>Planning for Personal Sparkles: A COVID-19 Plan</title>
        <link>https://www.daydreamsinruby.com/blog/2020-07-11-planning-for-sparkles/</link>
        <guid>https://www.daydreamsinruby.com/blog/2020-07-11-planning-for-sparkles/</guid>
        <pubDate>Sat, 11 Jul 2020 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I've been giving a new talk, based on an old one - planning for personal sparkles: A COVID-19 plan. My former talk was about maximizing your work day but in today's world, I've re-done the talk to focus on how to take advantage of the bits and bursts of focus you may get in a day. There's a lot going on in the world and hopefully this talk helps.</p>
<p>To get practice and follow along, download this <a href="https://drive.google.com/file/d/1db9__PVjxQyP2GF0k1iqDK8sHRPfO9qk/view">worksheet</a></p>
<iframe src="https://drive.google.com/file/d/1db9__PVjxQyP2GF0k1iqDK8sHRPfO9qk/preview" width="640" height="480"></iframe>
]]></description>
      </item>
    
      <item>
        <title>Zoom: A different perspective</title>
        <link>https://www.daydreamsinruby.com/blog/2020-04-18-zoom-a-different-perspective/</link>
        <guid>https://www.daydreamsinruby.com/blog/2020-04-18-zoom-a-different-perspective/</guid>
        <pubDate>Sat, 18 Apr 2020 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Over the last month, I've watched my son's preschool class and preschool teachers transition from in person to online. Sometimes it seems like having 12 4-5 year olds on a call is working well and other times, I don't understand how they make it through the 30 minutes. But listening in and getting emails from them about the activities they are doing has given me an interesting and different perspective on zoom, especially as a manager, who spends almost all of her days in zoom calls.</p>
<p>One of the things the teachers have mentioned that they struggle with frequently is the idea of muting the children. They talk about muting &quot;out of love&quot; and helping the children understand why they need to mute someone sometimes. They dislike muting the children though because, in their eyes, it is literally taking away their voice and their ability to share about themselves.</p>
<p>This week, however, they decided to use it as the trigger for one of their class discussions. The email home started by explaining: &quot;Loris Malaguzzi, the founder or of the Reggio Emilia approach said, 'The child is made of one hundred. The child has a hundred languages, a hundred hands, a hundred thoughts, a hundred ways of thinking, of playing, of speaking.'
Well, the Zoom meeting is our 101st language and we should explore and learn about it just as we are exploring, learning and discovering any other new language that we are introducing in the classroom.&quot;</p>
<p>What a fascinating conversation! I spend all day, every day on Zoom, with peers, with managers, with my team, and I honestly have never thought about processing for myself or with others what that is like. What do I love about video conferencing? What's great? But also, what's not so great? What is frustrating? and what is more exhausting about zoom meetings when compared to in-person ones? The teachers mentioned they would cover all of this with the children as well as ask them how they prepared for meetings or what kinds of things they did before coming to a Zoom meeting?</p>
<p>Well, needless to say, I was very excited to listen in on this conversation and hear how the teachers facilitated it as well as how the children reacted to it. I didn't catch the whole conversation (because my son wanted to take most of the meeting in his room with the door closed) but I did catch the end, which was a fascinating pivot. I honestly assumed that the focus on this conversation would be to help the children process why they were being muted and what the benefits were to conducting a class BUT INSTEAD, the teachers focused on personal responsibility. They took notes throughout the call (on big pieces of paper with a :-) or :-( ... hello retro!) and then used those to help empower the children to realize their own power and responsibility related to the mute button. They helped the children figure out where background noise was coming from and how background noise impacted the class discussion. They had different children muting and unmuting themselves so that they could get a sense of the difference and talk about it together. And they ended with helping the children be excited about helping one another to be heard and recognizing their own power, ability, and responsibility to the rest of their classmates and friends.</p>
<p>I've been thinking about this all week and waiting to find time to write a blog post about it. In summary, what an interesting concept and perspective? While this is an example on a preschool level, I've been thinking about it in the professional world as well. How do we exercise our responsibility and power to ourselves and to our friends related to muting? How can we more effectively notice when someone unmutes and give them space? How can we recognize what our background noises are (either real or metaphorical) in order to be more present or also just be aware of when we may not be able to speak because the actual or mental/emotional background noise is too loud at the moment.</p>
]]></description>
      </item>
    
      <item>
        <title>This is a Coronavirus Post</title>
        <link>https://www.daydreamsinruby.com/blog/2020-04-11-this-is-a-coronaviruspost-post/</link>
        <guid>https://www.daydreamsinruby.com/blog/2020-04-11-this-is-a-coronaviruspost-post/</guid>
        <pubDate>Sat, 11 Apr 2020 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I haven't blogged about anything COVID-19 related yet because, first off, who the fuck with a full time job and little kids has the time to blog anymore, but also because I've just been focusing on the next immediate step. But now we're weeks in to this, we're days and nights and many weekends in to this new &quot;normal&quot;. I've had some moments of reflection, frustrating, appreciation... high highs and some lower lows but I think I've finally been able ot articulate a little bit about how I've been feeling and what some of the side effects are for me, as well as what I need to keep in mind as an engineering manager. I think I've been able to pinpoint 3 overarching feelings for myself.</p>
<p>First, the anxiety. I feel as though I've settled in to a new, higher baseline level of anxiety. Even when I try to I seem unable to fall asleep before 2am. Every evening is spent reviewing the previous day and determining what will change for the next day. Do I need to wear a mask to the same places today as I did yesterday? Can we do the same activities? Should we get delivery groceries instead of shopping ourselves once every 2 weeks? We're so conflicted on food delivery. What are our thoughts on it this week. How is our grocery pantry? What will it look like 3 weeks from now and is there anything I anticipate needing in the next month that needs to be ordered? Because if so, I should put that order in now.</p>
<p>And part of this anxiety is a crushingly new level of mental load. How are the kids? Are they doing ok? Are there new behavioral issues to address? At this age, social interactions and dealing with peers is the most important thing for development... how can I facilitate that when my children can't actually be around any of their peers? What are fair and unfair expectations for young children living through a changing world? What should their schedule be? Am I not spending enough time thinking about what my daughter needs because I'm trying to craft a more effective schedule for my son? When does my mom need groceries again? Should we try to drive and see her this weekend even though we can only stand far apart and the kids lose their patience pretty quickly? Are my partner and I coping with everything ok? Are there improvement we need to make working together? When was the last time we tried to create an at-home date night or something special for ourselves so that we're supporting each other and not just trying to keep everything else running ok? At first, it just felt like every night there was just a little more to review. On top of the normal stuff like, oh, I have to switch out the kids clothes for the new season or a new size, there were a few additional things to talk about. But... we're talking about all these things most nights, and there's so much left to do once the kids go to bed. And then I'm getting less sleep. It's ... exhausting.</p>
<p>Second, I am jealous. It's not something I want to admit or that I like to admit but I'm jealous. I'm jealous of people who have stay-at-home spouses and I'm jealous of people who don't have children. I love my little ones but for me, this all is a constant 24/7 balancing act. The are no side projects, I am not continuing my work on my manager tools repo which I was so excited to get kicked off earlier this year. I'm not thinking of new conference talks, or finishing writing the ones that have been accepted for postponed conferences. Even writing this blog post felt like a sacrifice... I'm praying that my littlest doesn't wake up from her nap (or if she does that she will pleasantly play in her room for a bit while I hustle to finish up my thoughts) and that my older one will continue enjoying his backyard time. Because I'm trying so hard to stay focused on my day job during the day, I can't squeeze time in there. I honestly can barely handle work and kids, let alone the fact that I'm still producing the Parent Driven Development podcast, which seems more important now than ever, and on the Ruby Central board, in addition to new &quot;fun&quot; weekend to dos like sewing masks and preparing for lengthy supermarket excursions that need to be carefully crafted, planned, and executed. And it's actually not so much that the work load all of a sudden feels immensely greater, it's that every day and every moment requires more thoughts, more intention, and more brainpower. I worry that where parents were barely keeping up in the past or finding creative ways to keep up with childless peers, we will be completely left behind in this time where we are balancing so much. There is no binge watching, no new hobbies, and no time to find new creative outlets. It feels like there are only more and more to dos that will not get to done for a long long time.</p>
<p>Third is something I've just figured out this week. The past couple of weeks, work has been affecting me more, which felt odd. Work does not seem that much more or less standard that it was a few weeks ago. The amount of tasks and to dos on my plate is nothing extraordinary and definitely nothing I haven't handled in the past. I'm organized, I'm a list maker, I get sh*t done, and generally, almost anything thrown at me I can handle without getting overly annoyed, without getting overly frustrated, or, if I do, I can generally get over it pretty quickly. But the last couple of weeks have felt... stickier. Like it was harder to have things roll off my shoulder, harder to bounce back, and harder to simply say, I've got a lot of stuff to do today, here's my plan for that, or even, here's what I can control so I'll do that and here's what I can't so this is how I plan to deal with that set of things. I think, right now, it's just a little <em>too</em> much chaos for me. It feels like it's coming from everywhere. From home, at work. I'm more frayed and I've found myself needing to be a bit more careful about getting overwhelmed, what to do when i'm feeling anxious, etc.</p>
<p>Okay, so there you have it. Those are all my feels. But now, i've named them. For the moment, I've sort of figured it out, which means I can put in coping mechanisms and solutions because, at the same time, I have a team of people I manage. I need to be there for them. I want to support them and make sure that together we are able to accomplish incredible things. So, here are my takeaways as a manager. Here are the things that <em>I</em> need to be aware of...</p>
<ul>
<li>I need to make time to have moments of hanging out, chatting with others, and remembering to connect</li>
<li>I need to lean on my support network</li>
<li>I NEED TO TAKE BREAKS EVEN WHEN IT FEELS LIKE I CAN'T BECAUSE I HAVE TOO MUCH TO DO</li>
<li>I need to take a walk, even if it's late, after the kids are in bed</li>
<li>I need to recognize and be okay with all of the things that I can't control right now</li>
<li>I need to get better at determining my 2-3 absolute priorities every day and consider everything else a bonus
and finally,</li>
<li>I need to support my team doing the same</li>
</ul>
]]></description>
      </item>
    
      <item>
        <title>Anger Management and Team Tools</title>
        <link>https://www.daydreamsinruby.com/blog/2019-03-09-anger-management/</link>
        <guid>https://www.daydreamsinruby.com/blog/2019-03-09-anger-management/</guid>
        <pubDate>Sat, 09 Mar 2019 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Recently, I participated in an all-day workshop entitled Anger Management for Parents. I'm a little ashamed to admit it but my toddler pushes my buttons! Mornings are always mayhem and they often devolve into yelling battles with a crying baby, a screaming toddler, and a stressed out mama who loses her temper (that last one is me, in case you didn't guess). I saw this workshop as a chance to do some self-reflection and learn some coping strategies that would help me stay calm in these situations.</p>
<p>Sitting in the room with other parents all who had varying numbers of kids and children of all ages, 0-18, the day ended up being applicable to much more of my life than just my role as a parent. I was amazed at how many strategies related to creating mutual agreements and buy-in and focused on the choices we make.</p>
<p>For example, the day started with an example of 3 scenarios. In scenario 1, you have new carpeting in the dining room. The rule is everyone eats in the kitchen but your partner, trying to get away from the noise and chaos, takes chili in to the dining room, trips and spills some. In scenario 2, your boss is over for a work dinner and spills some wine on the carpet. In scenario 3, your child is home while you run some errands. They eat some tomato soup in the dining room and accidentally drop the spoon. Thinking through each scenario, your reaction to each individual is likely different based on who they are. However, as you may be able to tell, the basis of the situation is the same... someone stains the new carpet, but your reaction is different. Your reaction is the choice you make.</p>
<p>This idea of choosing reactions and thinking about why you choose certain reactions with certain individuals can be applied to home and work life.</p>
<p>Another tool that jumped out as being particularly applicable to managing teams was reframing the problem. Every morning, we have issues leaving the house. It's easy for me to quickly assign blame in this situation. My son doesn't listen, doesn't do things when I tell him to, and I need to ask him 5000 times to do something. But really, the problem isn't solely his. It's all of ours. The workshop suggests figuring out what the core problem is. Without assigning blame or talking about the who, what is going on. In our case, the problem is leaving the house in the morning. The next part is not trying to solve the problem when angry. We recognize that getting out of the house is a high-stress situation so you set up a meeting specifically to talk about it.</p>
<p>Now, what happens next...
At the meeting, you start by stating the problem and that it needs to be solved. Then, everyone gets a chance to offer solutions. Solutions are brainstormed together and every idea gets written down. Once brainstorming is done, together, the involved individuals determine which solution(s) they want to try. This should be thought of as an experiment. There is a problem. There are possible solutions. Let's try something and see if it works. The group decides how long the experiment will last. If the problem is daily, then often trying to stick to the solutions for a week or two is enough. If the problem happens less frequently, then a longer experimental period is necessary. And finally, the group decides how to keep each other accountable. What happens if someone doesn't abide by the solution everyone (including them) agreed to? It's important that this accountability doesn't slide in to punishment and that it isn't thought about in that way, it's simply a reaction or action that will keep everyone engaged and committed to participating in the experiment at hand. And, of course, if the solution doesn't work, then the group comes back together and determines a new solution to try out.</p>
<p>While this works for families (we very recently had our family meeting so I have my fingers crossed that our agreed upon experiment will work), it immediately jumped out at me how effective this approach may be with teams. Creating buy-in, encouraging experimentation, and including everyone in the discussion and decision are key components to successful teams.</p>
<p>Finally, a fascinating component of the workshop was a section called primary emotions. Anger is a secondary emotion. That means that you choose anger (I know. When I first heard this my reaction was, do I really choose anger? I'm pretty sure people make me angry, but stay with me here...). Anger often covers up primary emotions and when you dig deeper into anger, you can recognize what you're really feeling. I thought about the situations when I'm most likely to yell, lose my temper, or feel angry.</p>
<p>For example, when I thought about it more, I realized that my anger in the morning trying to get out of the house is caused by the anxiety of getting to work. I do drop-off and <em>then</em> eat breakfast, get ready, and pump (until recently). All this needs to get done before I have my first meeting of the day. Thinking about it while watching the clock makes me anxious.</p>
<p>In a different circumstance, oftentimes when I get annoyed at my partner for something, I realized it was really because I felt exhausted or overwhelmed by the amount of things I feel I do at home and that manifests in me getting angry as opposed to calmly expressing the way I feel or removing myself from the situation until I can.</p>
<p>Primary emotions are things like exhausted, overwhelmed, devalued, scared, anxious, humiliated, inadequate, disempowered, lonely, ignored, etc.</p>
<p>There was more talked about in the workshop. Some other topics included physical responses to anger or frustration to recognize the early warning signs and understand how your body and brain work when you get angry, mechanisms for helping children of different ages deal with anger, the best strategies to use when you're feeling angry, practicing I statements, and more.</p>
<p>While I was skeptical upon leaving the class, I've actually been working really hard to put these practices in place both at work and at home. The instructors told us we'd just need to keep practicing until these reactions, responses, and mind-shift became second nature. I still need to actively think and keep repeating to myself the lessons I learned but I've been pleasantly surprised at how different our household feels, even just a few weeks afterwards.</p>
<p>Supplemental Links:<br>
<a href="http://pepparent.org/">PEP, Parent Encouragement Program</a><br>
<a href="https://www.cnvc.org/training/resource/feelings-inventory">Feelings List</a><br>
<a href="https://emotionalapi.com/">Emotional API</a></p>
]]></description>
      </item>
    
      <item>
        <title>Parent Driven Development: Goals and What&#39;s to come</title>
        <link>https://www.daydreamsinruby.com/blog/2020-02-03-parent-driven-development-upcoming-goals/</link>
        <guid>https://www.daydreamsinruby.com/blog/2020-02-03-parent-driven-development-upcoming-goals/</guid>
        <pubDate>Mon, 03 Feb 2020 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><a href="https://www.parentdrivendevelopment.com/">Parent Driven Development</a> is 2 years in! I can hardly believe it. Here are some milestones:</p>
<ul>
<li>We've recorded over 40 episodes covering a whole variety of topics, issues, ideas, geniuses, and failures.</li>
<li>We've said goodbye to some panelists and welcome new ones</li>
<li>We have listeners in almost 10 countries</li>
<li>We've had episodes that have hit almost 800 listens.</li>
<li>We've hired an incredible assistant who's helped to so much to keep us on track</li>
</ul>
<p>I'm really happy with what we've been able to do so far and I <strong>think</strong> folks who listen to the podcast have enjoyed, laughed, maybe cried a little, learned, and felt less lonely  as a parent in tech. But I've still got big plans for this podcast because it's important.</p>
<p>Someone once asked me what would you do to get to your goal if there were no boundaries or obstacles? I've started thinking about challenging projects of opportunities in this way because it frees me from my concerns about thinking about what's realistic or not, and allows me to simply dream big. With that in mind, here are some of my goals for the 3rd year of <a href="https://www.parentdrivendevelopment.com/">Parent Driven Development</a>.</p>
<p><strong>1. Garner more financial support</strong></p>
<p>Right now I'm paying out of pocket for all PDD expenses which includes audio editing, podcast assistant costs, website hosting, etc. I think that Parent Driven Development sends an important message and plays a necessary role in the technology ecosystem to make parents feel less alone and make companies and colleagues more aware of common struggles. It provides education, comic relief, and camraderie. But I would love to break even on costs.</p>
<p>Some more specific goals and ideas around doing this are to attract and retain more patreon supporters, engage with sponsors, and attract advertisers.</p>
<p><strong>2. Do more with more support</strong></p>
<p>There is SO MUCH MORE we could do once we're breaking even and maybe even a tiny bit in the black. For starters, a few small things I'd love to tackle this year would be: Swag (hello onesies, nursing tanks, and more!), and small gatherings or get togethers at conferences or events which could include some live recording.</p>
<p><strong>3. Increase listener numbers</strong></p>
<p>We haven't done badly. I'm proud of the number of listeners I have and consistent downloads but our numbers could be better. And the more listeners, the more likely we'll be able to reach some of our other goals, get listener questions, and be able to move beyond, what feels like, the &quot;starter&quot; stage. We're doing more with social media. We're also engaging with different content and brands that we love and who hopefully love us. We're hoping that by reaching out and providing more content, conversation starters, and additional touchpoints, we'll get more listeners, subscribers, and people passing along Parent Driven Development to their friends.</p>
<p>Check out <a href="https://www.parentdrivendevelopment.com/episodes">episodes</a></p>
<p>Support us on <a href="https://www.patreon.com/parentdrivendev?fbclid=IwAR17UydYd8o1kUImjtPn_Iv2NFw7N7KAYPXIsPuu_uEnDZqaEBGn6aKPz04">Patreon</a></p>
<p>Contact us if you're interested in <a href="https://www.parentdrivendevelopment.com/contact">sponsorships</a></p>
<p>Twitter: https://twitter.com/parentdrivendev
Instagram: https://www.instagram.com/parentdrivendev/</p>
]]></description>
      </item>
    
      <item>
        <title>Parenting and Managing: A short list</title>
        <link>https://www.daydreamsinruby.com/blog/2020-01-15-bulleted-list/</link>
        <guid>https://www.daydreamsinruby.com/blog/2020-01-15-bulleted-list/</guid>
        <pubDate>Wed, 15 Jan 2020 00:00:00 GMT</pubDate>
        <description><![CDATA[<h1>A bulleted list of the ways in which being a parent makes me a better manager</h1>
<ul>
<li>Empathizing with anothers perspective</li>
<li>Being ok with someone being unable to see my logic or thought process</li>
<li>Responding to other's emotions with kindness and patience</li>
<li>Recognizing that anothers understanding may be completely different than mine</li>
<li>Knowing that even when I think im being clear, I'm probably not</li>
<li>Adjusting my personal styles to fit someone elses</li>
<li>(Parents of multiple children) knowing that each person is an individual and what works for one may not work for another</li>
<li>Being confident in the fact that sometimes providing boundaries or rules help the result</li>
<li>Being comfortable knowing that sometimes I will need to do something that will not make another person happy</li>
<li>Being ok with someone responding unhappily and at least trying to help them understand the reasoning behind the decision or request</li>
<li>Knowing that the more resources I can get, the better I will be</li>
<li>Understanding deeply that I will always need to work on being better</li>
<li>Telling the difference between what is important and what isn't to me which helps me realize what decisions I can fully empower another to make</li>
<li>Knowing that I won't know if I've done a good job or not for a long time</li>
<li>Being efficient AF</li>
<li>Recognizing tradeoffs and their impact on project, work, home, and other individuals</li>
<li>Constantly coming up with creative solutions, compromises, and suggestions</li>
</ul>
<p>What can you add to this list?</p>
]]></description>
      </item>
    
      <item>
        <title>A Different Kind of Professional Development</title>
        <link>https://www.daydreamsinruby.com/blog/2020-01-03-roi-rummit/</link>
        <guid>https://www.daydreamsinruby.com/blog/2020-01-03-roi-rummit/</guid>
        <pubDate>Fri, 03 Jan 2020 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>At the end of June, I attended a leadership workshop in Jerusalem, Israel, called the ROI Summit. The ROI Summit was started by the Schusterman Family Foundation 13 years ago. It was created to bring together leaders and changemakers all over the world. The conference is about 140 people and the organizers aim to make it 1/3 US, 1/3 Israeli, and 1/3 from the rest of the world. I had heard great things about the Summit but what I experienced during that week went above and beyond my high expectations. From the organization of the conference, to the opportunities to learn from and with one another, to the leadership lessons I took away from the week, I've got a lot to share... but I'm going to try to boil it to my main takeaways.</p>
<p>First, remembering the responsibility leaders have. As the &quot;Bnei Mitzvah&quot; year (13th year or the age a young Jewish person becomes a Jewish adult with a responsibility to the larger community), this year's theme was all about responsibility. Thinking about what it means to be a responsible leader, thinking about being able to respond as a leader, and more. The week was broken down in to three sections: our responsibility to ourselves, our responsibility to our community, and our responsibility beyond that. In our responsibility to ourselves, there were workshops about self-care and we, as busy individuals, were reminded of how you need to take care of yourself in order to take care of others. In our responsibility to the community, we worked to help each other solve problems, took peer-led workshops for skills building, and had &quot;braindates&quot; with one another. Finally, our responsibility beyond that focused on a massive open space session where topics ranged from educational models around the world, to climate change and what we can do about it, to inclusivity and what that really means. On an extremely important note, the conference ended with us thinking about who took on additional responsibilities in our lives in order for us to attend the conference. From colleagues to spouses to others, for me, it was a really interesting note to end on being sure I took time to think about the responsibilities I was able to abandon for the week and who took on more responsibility so I could immerse myself in the Summit experience.</p>
<p>Second, the conference helped push me to reframe problems. Our three keynotes each dug in to challenges they faced and how they persevered through challenge after challenge. They talked about luck and authenticity, owning your narrative, and thinking through problems and solutions. Spark talks, which were select participant lightning talks, focused around life-changing experiences they had and how perspectives (both theirs and others) were changed as a result. I took a molecular gastronomy class that talked about how molecular gastronomy takes foods we know, adds an element, and completely changes them... not how they taste but how they appear, how they transform, and what you can do with food in different forms. The leaders took this experience and related it to the way we think about problems. Lastly, we went through a lightning round case study session where we got in to groups of 4 and used a specific timeframe and structure to help solve one another's problems, not in an obnoxious advice-y way, but in a thoughtful, sincere way.</p>
<p>Third, there was a focus on really getting to know people. Sometimes, until you're really connecting with people, you don't realize how infrequently we do so in every day life. We were broken up in to small group pods of 5-6 people and immediately dove in to deeper topics. The conference encouraged us to think about telling each other what they would know &quot;if you really knew me&quot; as opposed to just covering where we lived, what we did, and the usual &quot;starter&quot; questions. This was reinforced by workshops and sessions. In one session in particular, we spent 30 seconds writing down how we describe ourselves and sharing that with a pair. Then we met with another pair and described how we were feeling in that moment. It was astonishing how quickly we got past the simple descriptors we usually assume describe us to others and got in to more of who we consider our real selves, talking about real things happening in that moment.</p>
<p>I was thrilled and inspired when the final keynote speaker started talking about each of us leaders as dots and took the Hebrew word Tikvah (hope) and broke it down (a common practice when interpreting things Jewishly is to look at the letters that make up a word and derive meaning from it's structure, the order of the letters, etc.). She said that within tikvah is the word kav which means line. She spoke about how hope connects leaders (dots) with lines. She continued telling an old Jewish tale about a &quot;lost and found&quot; rock that people would go to and how people were responsible for returning lost items there and helping others find and reclaim things that were lost. However, it went deeper than that. The interpretation talked about how this rock was not just for things, it was also for people... people who had lost hope or inspiration and others who would wait at the rock to help them find it again. How we need to get to know people in order to find what is lost and return things to others, especially those who are unlike us.</p>
<p>I loved this conference. Here's the recap video if you're curious: https://www.facebook.com/watch/?v=2378525749103296</p>
]]></description>
      </item>
    
      <item>
        <title>A CRDT Fairy Tale Resources</title>
        <link>https://www.daydreamsinruby.com/blog/2019-10-04-CRDT-sources/</link>
        <guid>https://www.daydreamsinruby.com/blog/2019-10-04-CRDT-sources/</guid>
        <pubDate>Fri, 04 Oct 2019 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A list of links, papers, and resources that I use for my talk on CRDTs.</p>
<p><a href="https://www.sciencedirect.com/science/article/pii/S1474034616301811">A string-wise CRDT algorithm for smart and large-scale collaborative editing systems</a><br>
<a href="https://www.youtube.com/watch?v=9xFfOhasiOE">&quot;CRDTs Illustrated&quot; by Arnout Engelen</a><br>
<a href="https://www.youtube.com/watch?v=B5NULPSiOGw">CRDTs and the Quest for Distributed Consistency</a><br>
<a href="https://link.springer.com/chapter/10.1007/978-3-319-19129-4_16">A CRDT Supporting Selective Undo for Collaborative Text Editing</a><br>
<a href="http://jtfmumm.com/blog/2015/11/24/crdt-primer-2-convergent-crdts/">A CRDT Primer Part II: Convergent CRDTs</a><br>
<a href="http://jtfmumm.com/blog/2015/11/17/crdt-primer-1-defanging-order-theory/">A CRDT Primer Part I: Defanging Order Theory</a><br>
<a href="https://www.youtube.com/watch?v=OOlnp2bZVRs">A CRDT Primer: Defanging Order Theory conference talk</a><br>
<a href="https://www.youtube.com/watch?v=veeWamWy8dk">&quot;Practical data synchronization with CRDTs&quot; by Dmitry Ivanov</a><br>
<a href="https://arxiv.org/pdf/1608.03960.pdf">A Conflict-Free Replicated JSON Datatype</a><br>
<a href="https://arxiv.org/abs/1803.02750">Efficient Synchronization of State-based CRDTs</a><br>
<a href="https://www.researchgate.net/publication/266798509_Efficient_State-based_CRDTs_by_Delta-Mutation">Efficient State-based CRDTs by Delta-Mutation</a><br>
<a href="https://arxiv.org/abs/1805.06358">Conflict-free Replicated Data Types (CRDTs)</a><br>
<a href="https://hal.inria.fr/hal-01246212/document">Supporting String-wise operations and selective undo for peer-to-peer group editing</a><br>
<a href="https://arxiv.org/abs/1603.01529">Delta State Replicated Data Types</a><br>
<a href="https://pages.lip6.fr/Marc.Shapiro/papers/rgasplit-group2016-11.pdf">High Responsiveness for Group Editing CRDTs</a><br>
<a href="https://github.com/atom/teletype-crdt">Teletype CRDT library</a></p>
]]></description>
      </item>
    
      <item>
        <title>Parent Driven Development Podcast Assistant</title>
        <link>https://www.daydreamsinruby.com/blog/2019-08-30-podcast-assistant/</link>
        <guid>https://www.daydreamsinruby.com/blog/2019-08-30-podcast-assistant/</guid>
        <pubDate>Fri, 30 Aug 2019 00:00:00 GMT</pubDate>
        <description><![CDATA[<h1>Parent Driven Development Podcast Assistant</h1>
<h2>Summary</h2>
<p><a href="https://www.parentdrivendevelopment.com/">Parent Driven Development</a> (PDD) is a podcast about being a parent in tech, talking about challenging, interesting, and fun topics from a variety of parenting perspectives. We record and publish episodes every 3 weeks.</p>
<p>We're looking for a Podcast Assistant to help accomplish a variety of crucial audience-growing tasks. You'll work with our teams to:</p>
<ul>
<li>Ensure more people are hearing about and enjoying PDD</li>
<li>Help disseminate and report important podcast updates</li>
<li>Improve the listener's podcast experience</li>
</ul>
<h2>A week in the life of the PDD podcast assistant</h2>
<p>Our panel and guests are distributed worldwide which means a lot of our communication is asynchronous. Your typical week would include:</p>
<ul>
<li>Drafting, scheduling, and publishing social media posts on twitter, facebook, and instagram</li>
<li>Providing regular social media analytics updates</li>
<li>Manage the podcast calendar to ensure invites are up to date</li>
<li>Periodically reaching out to  media outlets for content promotion opportunities</li>
<li>Following up with guests before their episode will air</li>
<li>Establish and send out a monthly newsletter</li>
<li>Execute guided and targeted low-key PR efforts</li>
<li>Write brief show notes</li>
</ul>
<h2>Must have</h2>
<ul>
<li>The ability to prioritize a weekly workload</li>
<li>Excellent verbal and written communications skills</li>
<li>An effective process for self-organization</li>
<li>The desire to be a self-starter</li>
<li>Experience with social media</li>
</ul>
<h2>Nice to have</h2>
<ul>
<li>PR experience</li>
<li>Podcast experience</li>
<li>Parenting experience</li>
<li>Experience with outreach and establishing external partnerships</li>
<li>Remote work experience</li>
</ul>
<p><strong>Hours:</strong> 7-12 hours per week<br>
<strong>Compensation:</strong> Commensurate with experience</p>
<h2>To Apply</h2>
<p>Please send a cover letter and resume to Allison at admin@parentdrivendevelopment.com with &quot;Podcast Assistant&quot; as the subject.</p>
]]></description>
      </item>
    
      <item>
        <title>How to brainstorm conference talk topics</title>
        <link>https://www.daydreamsinruby.com/blog/2019-06-08-brainstorm-for-conference-talks/</link>
        <guid>https://www.daydreamsinruby.com/blog/2019-06-08-brainstorm-for-conference-talks/</guid>
        <pubDate>Sat, 08 Jun 2019 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I often get asked how to getting started when you want to speak at conferences. I think the first step of speaking at a conference is brainstorming what you may want to submit to a conference. There are two important points to keep in mind. First, only submit something you are interested in! You'll spend a lot of time on this talk... crafting the proposal, putting the talk together, practicing it, and more. Trust me, you'll get tired of the topic (at least at points). If you're starting off by thinking about what the organizers may want to see as opposed to what's exciting and interesting to you then it'll show in your proposal and in your talk. Second, when you're brainstorming, don't get wrapped up in thinking about if the topic would make a good conference talk or not. First think of ideas, and then, as you craft the abstract and details, start to determine it's viability as a conference talk. And remember, even though someone else may have presented similar information or on a similar topic in the past, your voice and your experience are still important and unique regarding the subject of your talk.</p>
<p>So on to the brainstorm. I've run a few guided brainstorm sessions through asking a few prompts. The brainstorm takes about 30-45 minutes. You want to allow yourself time to think through each promot completely and even when you think there's nothing left to thnk of, give yourself an extraa 30 seconds. Additionally, write down ALL ideas. Anything that comes to mind should be written down. Don't censor yourself or start thinking about whether it would be good in a conference context. Write it down and you'll revisit that part at the end of the brainstorming session.</p>
<p>Prompt 1: What are things you find REALLY interesting (regardless of your level of expertise in them)? And this doesn't just have to be related to work or tech.</p>
<p>Prompt 2: What is something that you specifically have done in the past that you've found really interesting?</p>
<p>Prompt 3: What is a code pattern you've implemented that has made things easier for you as a developer?
Is there anything that you feel like you must implement when you step in to a code base for the first time?</p>
<ul>
<li>for prompt 3, you can tailor this to the type of talk you want to do. So, the above prompt is focused on technical brainstorming but if you were looking to do a talk on a soft skill, the prompt would be something like What are processes or structures you've implements that has made things easier for you as a manager? Is there anything that you feel like you must implement when you join a new team? and so on.</li>
</ul>
<p>Prompt 4: What are some (popular?) blog posts you've read where your reaction was like, &quot;yeah, I knew that&quot;?</p>
<p>So, now you have a list of ideas. Looking at this list, which ones are you excited about? Pick a color and put a dot next to all of the ideas that sounds exciting to you.
 
Finally, pick 3, circle those, and noodle on those. Conference talks are difficult. Whatever you want to present on, you will probably end up presenting on half or even a quarter of that information.</p>
]]></description>
      </item>
    
      <item>
        <title>Management Lessons from Parenting</title>
        <link>https://www.daydreamsinruby.com/blog/2019-05-11-management-lessons-from-parenting/</link>
        <guid>https://www.daydreamsinruby.com/blog/2019-05-11-management-lessons-from-parenting/</guid>
        <pubDate>Sat, 11 May 2019 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>If you are chatting with any group of managers who also happen to be parents, it's common for someone to say &quot;I'm such a better manager because I'm a parent.&quot; It's usually followed with &quot;but I would never say that to my team.&quot; I've been thinking a lot about this statement recently and from one perspective it makes sense. No one wants to feel like they are treating adults like children and no one wants to be treated like a child. But the more I think about it the more I realize that learning lessons from parenting to apply to management are not because you are dealing with people that need to be told what to do or dealt with in a juvenile way, it is because as a parent, you learn intense lessons about communication, compromise, teamwork, and boundaries. You don't have a choice in learning these things, you have to in order to survive (and thrive? whatever that means) as a parent.</p>
<p><strong>Parent Lesson 1: Accept the Differences</strong></p>
<p>As a parent, you quickly learn that your child is different from you (or maybe they are the same as you which can sometimes be worse!) and if you have multiple children they are different from one another. Being able to reconcile these differences manifests in two ways as a manager (and as a parent). First, as a manager or parent I've always needed to recognize my personal style and figure out how to adjust it to fit with the personality of my child or team. As a parent, I am so willing to take a step back in order to determine what my child or children need... do they need more structure? Or more freedom? What sorts of conversations of discipline work best for them? And I've found it differs for each child because they are different people. As a manger, i need to be willing to do the same.</p>
<p>Second, I need to understand and really lean in to the strengths and weaknesses of my children. What do they love to do? And what do they dislike? In what sorts of scenarios do they thrive and where do they need to be coached? My son gets frustrated really easily but if you remind him he can do something and encourage him to break down the process in his mind, he calms down and can solve his own problems. My daughter needs to be left alone. She doesn't want to see you or hear from you. SHE can figure it out and I need to give her a bit of space to do so. Like others, they have different styles and different language works for them. And just because they dislike something, doesn't mean they don't have to do it.</p>
<p>When I work with folks I love to recognize what they are good at and enable them to find a team where their strengths are balanced with their areas of growth and where they can work really well with a team. And I use those lessons from parenting to figure out what sorts of conversations work for each individual to support (and challenge) them best.</p>
<p>Finally, for lesson 1, parenting helps me recognize where my biggest struggles are. Sometimes when my children are the most like or the most unlike me (on either end of the spectrum), it is the most difficult to parent them. Sometimes it's challenging for me to recognize where they're coming from or why they're responding to something in a certain way. Other times, I completely understand and empathize with the issue at hand but I can get sucked in to it as well because I feel the same way. These are the places that are most challenging as a parent and also as a manager.</p>
<p><strong>Parent Lesson 2: Getting Buy-In</strong></p>
<p>If you're a parent, How often have you said or wished you could just say “because I said so”. Think about the most stressful time of your parenting day. For most of us, this is morning time or bedtime. There are so many questions! So many things they should be doing! It's like every morning or every evening they have NEVER done this routine ever before in their life. UGH. Sometimes I actually find myself saying “we do this EVERY MORNING for basically your ENTIRE LIFE. WHY is getting out of the house so difficult?!” (Can you tell what one of my parenting trigger points is?)</p>
<p>But neither in management nor in parenting can I say “because I said so” because here's the thing... no one gives a shi*t. It doesn't matter what I say... in both scenarios. <em>Maybe</em> as a manager you can make your reports do something because you told them to or maybe they'll do it because you asked (this happens sometimes in parenting as well), but it won't work long term. Long term, you'll be seen as the bottle-neck. No one will do anything unless you tell them to do it. And they won't be bought in. They're solely doing things because you told them, not because they understand or because they believe in the actions being taken. And really, again, this isn't comparing individuals you work with to children, it is a situation that occurs in both roles and for very legitimate reasons. So what are some of the approaches the can be employed?</p>
<p>First, take a step back and focus on the problem. Using facts and without blame, what is the problem that you are trying to solve? We need to get out of the house on time. We need to ship a product on time. Etc. Then, leading by asking questions. What do others feel are solutions? What do they feel are aspects contributing to the problem? Or, do they actually know what's next? Sometimes a confidence boost is needed or people just need to feel heard and the best course of action is to say, what would be the next best thing to do here? If you would have picked a different answer, dig in to if it matters. Is your answer more right because it has to be? Or could things be done differently? Others (your children or team) may not accomplish things in the same way you will but it will be accomplished nonetheless.</p>
<p>Second, allowing others to make decisions and knowing when you need to make the decision. Creating buy-in also means empowering others. Giving them choices between two things or even just having individuals decide themselves and using it as an opportunity to stretch where they are currently at. And encouraging others to make decisions also means there can be a conversation about owning outcomes and failures. Sometimes decisions may turn out to be the wrong one. In the car with my son, sometimes we'll reflect a bit on a decision he recently made. If he feels like it was a good decision or a bad decision. What he thinks he might do differently in the future. While I use toddler-friendly language with him, the same important conversations occur with folks I manage because those are their growth opportunities.</p>
<p><strong>Parent Lesson 3: Growing Individuals</strong></p>
<p>It is my job as a parent and as a manager to make individuals better. To help them feel supported, confident, engaged, and challenged. There are a variety of ways in which I do this and language I use with both my teams and with my children and they differ slightly but the core purpose is the same.</p>
<p>One of the things I think is most important is knowing what people are interested in. Allowing people to talk about their lives or encouraging children to direct play are great ways of going about this. Frequently we find ourselves directing activities... let's go to the playground. Do you want to ride your bike? How's that project going? But asking more open questions and allowing others to talk about the things that matter to them or dictate what sorts of activities you participate in can be really enlightening. You can get a sense of what sorts of activities someone loves doing and can dig in to those to create learning and improvement opportunities. This can also be done through asking more direct questions. Asked my children or reports something general like “how are you doing?” Or “what did you do today” will often lead to broad, unhelpful answers. Instead I ask in 1:1s “what's on your mind?” Or I have a list of more specific starter questions I can use (or they can use) to spark conversations. Likewise, at home I'll ask “what made you laugh today?” Or “were you kind to your classmates?” Or even “Did anything make you sad or make you cry today?” I get much better answers on all front that lead to better conversations and discussions.</p>
<p>Lastly, part of helping people grow is embracing the things that you are not comfortable with. People fail and it's hard to watch. You want to set them up for success and you don't want them to feel pain or sadness. With children, the costs can be greater. Sometimes allowing a child to do something you're not comfortable with could lead to injury (for example falling off of a bike) but they are also important things to learn. My son and I are working right now on crossing the street. It's terrifying. The stakes are high. We're currently just practicing in VERY low traffic areas but even though I'm scared, he's ready for the challenge AND one day he's going to need to walk to school or walk around a town and he'll need to know how to responsibly cross a street. This can be the same with folks you work with. Their mistakes could reflect poorly on you as a manager, there could be legitimate consequences or delays shipping a product as a result, and yet, if you don't give them the opportunity to grow in ways that may make you slightly uncomfortable, they will never grow and may not feel that thrill of accomplishment and remain even more engaged. Like my son crossing streets, it's important to find some ways to do this in baby-step style, to reflect, and ensure they're ready for each next step.</p>
<p>So the next time you hear someone compare parenting to management or you say it and immediately roll back the statement for fear that it will be misunderstood, think about all the ways parenting and management can be boiled down to core lessons of communication, recognition, and growth and be happy that if your manager is a parenting, even if they're a little more tired, they're probably a better manager as a result.</p>
]]></description>
      </item>
    
      <item>
        <title>Parent Driven Development: One year of podcasting</title>
        <link>https://www.daydreamsinruby.com/blog/2019-03-20-one-year-of-podcasting/</link>
        <guid>https://www.daydreamsinruby.com/blog/2019-03-20-one-year-of-podcasting/</guid>
        <pubDate>Wed, 20 Mar 2019 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A year ago... okay, a little more than a year ago, but I have 2 kids so I'm just getting around to finally writing a post about this now... I wrote a post about launching a podcast. As I mentioned in <a href="http://daydreamsinruby.com/parent-driven-development-launch/">that post</a>, I literally dreamt about creating the Parent Driven Development podcast and it has been an incredible year of podcasting. To date we've published 25 episodes. Every episode is different and so nice. We have panelists that come from different backgrounds and have a variety of perspectives and our guests have been truly wonderful. Recording the podcast is such a good way to broadcast who we are and what our successes and challenges are. We've found over the course of the year that sometimes we're learning from each other, sometimes they are like group therapy sessions that come at a perfect time, other times it's an opportunity to rant about something that's been frustrating us, and finally they can be opportunities to connect with people on a totally different level.</p>
<p>But the year of podcasting hasn't been without it's challenges. First and foremost, oy is it difficult to find a time that works for folks. We all have children and jobs. Things come up at work, things come up at home, we try to record at the same time every other week but we'll adjust our time based on guest availability or other things. It is definitely tough to make sure we're finding a time that works for everyone. Next is all the kid related stuff. One panelist mentioned that he thought every snow day declared this winter had happened on an episode recording day. We have to contend with that as well as flu season, illnesses, summer schedules, the transitions to camps and different schedules, and more. As with most of parenting, it all basically comes down to being able to roll with as much as possible and trying to record no matter what... even if only 1 or 3 panelists happen to be free. I wouldn't be surprised if we had a future episode with just one panelist talking about any parenting topic interesting to them. We're also always looking for new or diverse panelists. It's important to maintain a balance of gender identities, experiences, backgrounds, and more. Sometimes finding folks or knowing who should be on our radar is tough. And finally, it's hard to be vulnerable on air for whomever is listening! We're talking about our kids, our families, our failures, and our struggles. We use this time to share these parts of ourselves and we never know how folks are going to react to the things we say or do. Sometimes that can be really scary.</p>
<p>I wanted to highlight some of my favorite episodes (although they're all great and you should go binge-listen now).</p>
<ul>
<li><a href="https://www.parentdrivendevelopment.com/internet-privacy-and-kids">Episode 3: Internet privacy and your children</a>. Thank you to <a href="https://twitter.com/wiredferret">Heidi</a> for being our first guest when we had no idea what we were doing!</li>
<li><a href="https://www.parentdrivendevelopment.com/planning-conference-childcare">Episode 9: Planning a conference with childcare</a>. <a href="https://twitter.com/aphoenix">Abby</a> came on to provide some protips on what to think about when thinking about offering childcare at a conference.</li>
<li><a href="https://www.parentdrivendevelopment.com/being-a-trans-parent">Episode 11: Being a Trans Parent</a>. <a href="https://twitter.com/jszmajda">Jess</a> (now a panelist!) talked about talking to kids about gender identity. I learned SO much from this episode.</li>
<li><a href="https://www.parentdrivendevelopment.com/on-call-schedules">Episode 15</a> where we discuss on-call duty with <a href="https://twitter.com/akvanh">Allyson</a> which is something so many of us deal with.</li>
<li><a href="https://www.parentdrivendevelopment.com/fertility-struggles">Episode 20</a> was very impactful for me. We talked with <a href="https://twitter.com/AdamCuppy">Adam</a> about fertility struggles, one of the most difficult topics to discuss related to parenting and something that affects so so many individuals.
and finally</li>
<li><a href="https://www.parentdrivendevelopment.com/the-holidays-a-retrospective">Episode 23</a>. This one was special to me because it really helped me process a difficult holiday season.</li>
</ul>
<p><a href="https://www.parentdrivendevelopment.com/episodes">Check out all the episodes here.</a></p>
<p>Now for a whole lot of thank yous!!!
First and foremost, thank you to <a href="https://twitter.com/therubyrep">Mandy</a> who is the most amazing podcast producer EVER. She does an incredible job making sure we all sound intelligent even though we're all so tired, booking guests, wrangling panelists, and more. This podcast definitely would not survive without her.</p>
<p>Thank you to the <a href="https://www.parentdrivendevelopment.com/hosts">current panelists</a> and to the former panelists as well. I'm so grateful you all give your time, energy, and parenting perspectives to this podcast on a regular basis.</p>
<p>And finally, thank you to all the amazing guests we've had!!!</p>
<p>Stay tuned, we've got some great topics and guests coming up.</p>
<p>If you have questions, comments, or topics you'd like us to tackle, let us know at panel@parentdrivendev.com</p>
<p>(and we're always looking for <a href="https://www.patreon.com/parentdrivendev">patreon supporters</a> and sponsors if that's something your company would be interested in!)</p>
]]></description>
      </item>
    
      <item>
        <title>Strange Loop 2018 Highlights</title>
        <link>https://www.daydreamsinruby.com/blog/2018-11-24-strangeloop-highlights/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-11-24-strangeloop-highlights/</guid>
        <pubDate>Sat, 24 Nov 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In late September, I attended Strange Loop... one of my most favorite conferences. There were lots of interesting talks this year. Here are the ones I recommend checking out. These include both talks I attended and ones I heard where phenomenal. Enjoy!</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=o_4EX4dPppA&amp;index=6&amp;t=0s&amp;list=PLcGKfGEEONaBUdko326yL6ags8C_SYgqH">The Hard Parts of Open Source, Evan Czaplicki</a></li>
<li><a href="https://www.youtube.com/watch?v=afe0RpwaxY8&amp;index=76&amp;t=0s&amp;list=PLcGKfGEEONaBUdko326yL6ags8C_SYgqH">Git from the Ground Up, Safia Abdalla</a></li>
<li><a href="https://www.youtube.com/watch?v=IeBbiQZYmuY&amp;index=10&amp;t=0s&amp;list=PLcGKfGEEONaBUdko326yL6ags8C_SYgqH">Towards Language Support for Distributed Systems, Heather Miller</a></li>
<li><a href="https://www.youtube.com/watch?v=VxINoKFm-S4&amp;index=60&amp;t=0s&amp;list=PLcGKfGEEONaBUdko326yL6ags8C_SYgqH">A Little Taste of Dependent Types, David Christiansen</a></li>
<li><a href="https://www.youtube.com/watch?v=aGJTXdXQN2o&amp;index=38&amp;t=0s&amp;list=PLcGKfGEEONaBUdko326yL6ags8C_SYgqH">A Tale of Two Asyncs: Open Source Language Design in Rust and Node.js, Ashley Williams</a></li>
<li><a href="https://www.youtube.com/watch?v=0TOGBG9g2tE&amp;index=64&amp;t=0s&amp;list=PLcGKfGEEONaBUdko326yL6ags8C_SYgqH">Algorithms for DNA Data Storage, Ruthie Nachmany</a></li>
<li><a href="https://www.youtube.com/watch?v=Jes3bD6P0To&amp;index=32&amp;t=0s&amp;list=PLcGKfGEEONaBUdko326yL6ags8C_SYgqH">Tree-sitter - a new parsing system for programming tools, Max Brunsfeld</a></li>
<li>From Papers We Love: <a href="https://www.youtube.com/watch?v=qzfv1JrhQGo">The Future of the Grid: Policy, Technology, and Market Changes, Casey Canfield</a></li>
</ul>
]]></description>
      </item>
    
      <item>
        <title>Baby Driven Development Resources</title>
        <link>https://www.daydreamsinruby.com/blog/2018-11-10-bdd-resources/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-11-10-bdd-resources/</guid>
        <pubDate>Sat, 10 Nov 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Additional resources From the talk Baby Driven Development:</p>
<ul>
<li><a href="https://www.henrikkleven.com/uploads/3/7/3/1/37310663/kleven-landais-sogaard_nber-w24219_jan2018.pdf">Study on Denmark wage gap</a></li>
<li><a href="https://scholar.harvard.edu/files/goldin/files/goldin_aeapress_2014_1.pdf">2014 study on wage gap</a></li>
<li><a href="https://www.vox.com/2018/2/19/17018380/gender-wage-gap-childcare-penalty">The Childcare Penalty</a></li>
<li><a href="https://english.emmaclit.com/2017/05/20/you-shouldve-asked/">You Should Have Asked. A cartoon about mental load</a></li>
<li><a href="https://www.inhersight.com/">In Her Sight</a></li>
<li><a href="https://fairygodboss.com/">Fairy Godboss</a></li>
<li><a href="http://www.lunarbaboon.com/">Lunar Baboon</a></li>
<li><a href="https://www.parentdrivendevelopment.com/">Parent Driven Development Podcast</a></li>
<li><a href="https://github.com/davedash/parental-leave">Parental leave repo</a></li>
<li><a href="http://bit.ly/2z20u0S">Dividing Household Responsibilities</a></li>
</ul>
]]></description>
      </item>
    
      <item>
        <title>Deploying to Heroku with Rails 5 or Why the secrets.yml file causes trouble</title>
        <link>https://www.daydreamsinruby.com/blog/2018-07-22-deploying-to-heroku-with-rails-5/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-07-22-deploying-to-heroku-with-rails-5/</guid>
        <pubDate>Sun, 22 Jul 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Recently, I started a new side project (more on that in the future), and I wanted to deploy to Heroku. Now, I've done this before as part of a team workflow, but not using Rails 5. My code looked good, I referenced the Heroku docs just to make sure I'd gotten all the steps and deployed. The deploy succeeded but when I went to the site, there was an error... <code>An unhandled lowlevel error occurred. The application logs may have details.</code> So there I had my first direction. I checked the heroku logs and saw:</p>
<p><img src="https://daydreamsinruby.com/images/heroku_runtime_error.jpg" alt="error in the logs"></p>
<p>Now is where things get a little confusing. I had added my <code>secrets.yml</code> file the <code>.gitignore</code> so that my secret keys, etc, wouldn't be checked in to Git, HOWEVER I had added my <code>SECRET_KEY_BASE</code> to my config vars on Heroku which I felt would solve the issue. I re-referenced the Heroku docs because generally they're amazing and I was really surprised that they didn't include anything about this issue. And I saw a handful of stack overflow answers but they seemed pretty convoluted. Heroku makes it a little difficult to deploy a single file that isn't checked in to GitHub, so, while I originally felt like using a gem for a small side project was overkill, I did end up using the <code>dotenv-rails</code> gem.</p>
<p><a href="https://github.com/bkeepers/dotenv">The <code>dotenv-rails</code> gem</a> is pretty straight forward. You install the gem and then create a <code>.env</code> file which you ensure is in your <code>.gitignore</code>. Then you add your ENV vars to that file and that's it. Then I redeployed and all was good on my new site.</p>
]]></description>
      </item>
    
      <item>
        <title>The Books I Read My Kids</title>
        <link>https://www.daydreamsinruby.com/blog/2018-06-26-childrens-stories/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-06-26-childrens-stories/</guid>
        <pubDate>Tue, 26 Jun 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Welcome back from maternity leave to me!! I've just spent the last four months getting to know my new little one and she is pretty awesome. I have also spent the last few months reading a lot of children's books to my son and daughter. What I've learned is that these books are nuts!!! It seems like every kids book I read has a weird message or story that does not make any sense to me as an adult. I took my favorites to share below. Warning! This post contains spoilers.</p>
<p><a href="https://www.amazon.com/Teddy-Bears-Picnic-Aladdin-Picture/dp/0689835302/ref=pd_sbs_14_2?_encoding=UTF8&amp;pd_rd_i=0689835302&amp;pd_rd_r=ZNHRQ7ZPFYVP14FY1HPY&amp;pd_rd_w=jDx4U&amp;pd_rd_wg=pf4lc&amp;psc=1&amp;refRID=ZNHRQ7ZPFYVP14FY1HPY">Teddy Bears Picnic</a> - I liked this book and I even have a record that goes with it. But when you actually READ the story, good lord!! What a creepy plot! A kid sneaks in to the woods and sees teddy bears and has to wear a mask so that the teddy bears don't catch them? That sounds like a horror movie in the making.</p>
<p><a href="https://www.amazon.com/Giving-Tree-Shel-Silverstein/dp/0060256656/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065301&amp;sr=1-1&amp;keywords=the+giving+tree">The Giving Tree</a> - Oh. My. Gosh. I HATE the Giving Tree. Lots of people have different interpretations of this book and maybe my life experience has made me a bit more cynical but to me, this book is about an asshole man who takes and takes and takes. The woman (the tree) is supposed to just be happy but the guy keeps coming back complaining and taking more. The woman keeps saying it's fine (but it's really not) and then at the end, she's super happy when HE'S finally happy with who she is even though by that point he's worn her down to almost nothing. That, my friend, is a crap story and that tree needed to say &quot;Fuck you boy. You cannot take my trunk, you have already taken my apples, leaves, and branches.&quot;</p>
<p><img src="https://daydreamsinruby.com/images/tree.jpg" alt="The Giving Tree"></p>
<p><a href="https://www.amazon.com/Pout-Pout-Fish-Deborah-Diesen/dp/0374360979/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065324&amp;sr=1-1&amp;keywords=pout+pout+fish">Pout Pout Fish</a> - Now, I was excited about buying the Pout Pout Fish. I wanted a book for my son where everyone and everything wasn't happy. And it's <em>mostly</em> a great book. But the book ends with a shiney fish swimming over and kissing the pout pout fish which turns him in to a happy fish! The moral of this story... physical love makes someone happy and without physical love from another, you can't be happy. What a bummer moral.</p>
<p><img src="https://daydreamsinruby.com/images/poutpout.jpg" alt="Pout Pout Fish"></p>
<p>This one I found at the library... the <a href="https://www.amazon.com/Berenstain-Bears-Tooth-Fairy/dp/0062075497/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065345&amp;sr=1-1&amp;keywords=berenstein+bears+tooth+fairy">Berenstein Bears Tooth Fairy book</a> (this isn't the actual title but I can't remember the exact title)- I remember this one from when I was a child. It was great. BUT it's been redone. The best part of this book is when sister bear gets less money than her friend but more money than brother bear got a few years previously. The book goes on to explain fair market price and appreciation vs. depreciation comparing it to gas prices instead of using it as lesson explaining different people and different socioeconomic statuses or to appreciate what you get.</p>
<p><img src="https://daydreamsinruby.com/images/BBears.jpg" alt="Berenstein Bears"></p>
<p><a href="https://www.amazon.com/Sylvester-Magic-Pebble-William-Steig/dp/1442435607/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065362&amp;sr=1-1&amp;keywords=sylvester+and+the+magic+pebble">Sylvester's Magic Pebble</a>- This book is probably ok for a child but pretty traumatizing as an adult. Basically, a donkey finds a magic pebble that grants wishes. He's out one day and gets scared and wishes he was a rock. He turns in to a rock and then can't hold the pebble to make a wish and stays a rock!! (There is a happy ending when, years later, the dad picks up the pebble, sits on the rock and wishes he had Sylvester back.) As a parent, this story is about a child who gets lost!! It is a terrifying read for a mom. Makes me want to cry every time.</p>
<p><img src="https://daydreamsinruby.com/images/sylvester.jpg" alt="Sylvester"></p>
<p><a href="https://www.amazon.com/Baby-Sister-Says-No-Look-Look/dp/0307119491/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065376&amp;sr=1-1&amp;keywords=sister+says+no">Sister Says No</a> - This is an old book from my childhood but what most stands out to me is an utter parenting failure. Basically, the older brother has a play date and his little sister keeps saying no. At one point, the big brother and his friend decide to go in to his room so that they can play without his little sister controlling everything and the mom makes him open his door for his sister! I'm sorry, but let the poor kid play with his friend! And figure out something to do with the little sister who is obviously in the early toddler &quot;no&quot; phase.</p>
<p><img src="https://daydreamsinruby.com/images/little_sister.jpg" alt="sister says no"></p>
<p><a href="https://www.amazon.com/Frederick-Leo-Lionni/dp/3407760078/ref=sr_1_3?s=books&amp;ie=UTF8&amp;qid=1530065395&amp;sr=1-3&amp;keywords=frederick">Frederick</a> - Frederick is actually one of my husband's favorite children's books but when I see Frederick, all I see is a lazy, totally stoned mouse. This mouse tells stories to keep his mouse family warm in the middle of winter once they've run out of food, but here's what I think. If Frederick had just helped his family gather food and prepare for the winter, then maybe they wouldn't be starving and freezing before winter was over.</p>
<p><img src="https://daydreamsinruby.com/images/frederick.jpg" alt="Frederick"></p>
<p><a href="https://www.amazon.com/Just-Forgot-Little-Critter-Book/dp/0307119750/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065412&amp;sr=1-1&amp;keywords=I+just+forgot">I Just Forgot</a> is another one from my childhood but honestly, I find it infuriating to read. It's basically about a toddler who either forgets or doesn't forget but just does what he wants. So sometimes he's like, oh, I just forgot to do this and it made a big mess. Other times he's like, I didn't forget, I just don't like doing that. Tell me, why would I want to read that to my son? All he'd do is get ideas.</p>
<p><img src="https://daydreamsinruby.com/images/forgot.jpg" alt="I Just Forgot"></p>
<p><a href="https://www.amazon.com/Sam-Firefly-P-D-Eastman/dp/0394800060/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065430&amp;sr=1-1&amp;keywords=sam+the+firefly">Sam and the Firefly</a> is a dangerous asshole who causes all sorts of issues by writing incorrect and misleading directions in the sky. And then, when he's caught, we're supposed to feel bad for him! I just don't.</p>
<p><img src="https://daydreamsinruby.com/images/sam.jpg" alt="Sam the firefly"></p>
<p>And now for my top stories...</p>
<p><a href="https://www.amazon.com/Little-Engine-Could-Original-Classic/dp/0448405202/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065446&amp;sr=1-1&amp;keywords=the+little+engine+that+could">The Little Engine That Could</a>. THIS is a classic book. I don't think I know anyone who doesn't know this story. What I didn't pick up on though until recently is that all the trains that pass by the toys that need to get over the mountain to the children are men but the little engine is a woman. Basically, the books is about a bunch of selfish bros who won't help a little train until the lady train comes along (it's the only train referred to as a She) and believes in herself to get over the mountain. I guess this isn't an annoying or frustrating book to read, just really interesting thinking about the role of pronouns in children's literature.</p>
<p><img src="https://daydreamsinruby.com/images/engine.jpg" alt="little engine that could"></p>
<p>And finally, <a href="https://www.amazon.com/Sloth-Slept-Frann-Preston-Gannon/dp/1454916117/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1530065469&amp;sr=1-1&amp;keywords=sloth+slept+on">The Sloth Slept On</a> is about a sloth that a group of kids find who escaped from the zoo. They don't realize he escaped from the zoo and so they send him back to the rainforest where he is from, but then the sloth wakes up and asks how to get back to the zoo. This is classic stockholm syndrome and this sloth actually has no idea how to live in it's real habitat. I bet he's eaten by a predator within five minutes.</p>
<p><img src="https://daydreamsinruby.com/images/sloth.jpg" alt="Sloth Sleeps on"></p>
<p>And there you have it. My rant on ridiculous stories we read to our children. I bet there are dozens more.</p>
]]></description>
      </item>
    
      <item>
        <title>Ruby Memory Usage Vocab Explained</title>
        <link>https://www.daydreamsinruby.com/blog/2018-02-18-ruby-memory-usage-terms-explained/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-02-18-ruby-memory-usage-terms-explained/</guid>
        <pubDate>Sun, 18 Feb 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>For the past few weeks, I've been pairing with <a href="https://twitter.com/tenderlove">Aaron Patterson</a> on the work he's doing trying to enable compacting garbage collection in Ruby. It's been really fantastic working together and he recently wrote a <a href="https://tenderlovemaking.com/2018/01/23/reducing-memory-usage-in-ruby.html">great blog post</a> on the work that's been done. But, garbage collection is a challenging topic that folks feel is inaccessible. I'm sort of obsessed with garbage collection and <a href="https://www.youtube.com/watch?v=PzSvAbceTVE">breaking down the terms and vocabulary</a> so I wanted to highlight a few of the concepts and words mentioned in his post (and some that aren't in the post but that we've been working with) in a more digestible way.</p>
<p>So what do I mean when I say compacting garbage collection? Currently in Ruby, when objects are garbage collected, they can't be moved around, which means they can't be condensed in an optimized fashion in order to free up more of the heap. Compaction enables these objects to be moved around and the references to them (a reference tells you <em>where</em> the object is) get updated. A majority of our work so far has been looking at which of these objects can be moved without messing a whole bunch of stuff up and then how to move them and ensure the reference is updated. The terms below are some of the important ones to note and understand when thinking through and solving this issue.</p>
<p>First is IMEMO. IMEMOs stand for internal memos. They are classes that are used internally in Ruby. The Ruby internals are Ruby objects that shouldn't be exposed and therefore are hidden. In order to ensure that they don't get exposed, iMEMOs are specified as the class type so it's more explicit.</p>
<p>Next is an iseq. An iseq, or instruction sequence, is an object with the type of imemo. Instruction sequences are written in c and are compiled to get Virtual Machine instructions. Instruction sequences are important because they are often pointing or referencing objects like strings or other iseqs that we are trying to unpin or not pin in the first place, so that they can be moved and have their references updated. Iseqs were also quite important to us at this point because a lot of the work we did was to disassemble these instruction sequences on compaction in order to allow them to move.</p>
<p>CDHash. A CDHash is a part of a set of instructions. It's a Ruby hash that is stored IN the instruction sequences. When the code is compiling, these instruction settings happen last. This means that objects in the CDHash need to stay alive until the instructions are all set and compiled. In this scenario, alive means that we want to make sure it doesn't get garbage collected before the insturction sequence finishes compiling. When a CDHash is garbage collected before the instructions are finished compiling, the entire program crashes. Understanding this fact was vital in debugging an issue that was happening when we were disassembling the instruction sequences.</p>
<p>The final term I'll go into is an embedded array. Through this whole dive in to instruction sequences, we talked a lot about arrays. You can see in Tenderlove's post a whole segment on instruction sequences and how they relate to a mark array which affects memory savings potential by reducing the size of the mark array. Though this, I learned there are embedded arrays and non-embedded arrays. An array is 40 bytes. A normal array points at malloc data with a specific size (and then the array size can grow) but if an array is small enough, we don't want to  allocate any data. If the array has less the 40 bytes of data, then instead of mallocing, we can just store the data in the array itself and then change it to malloc data if the array is more than 40 bytes. When this happens, the elements of the array are embedded inside the array itself instead of in the malloc (memory allocation) meaning it's an embedded array.</p>
<p>Hope this is helpful and allows some of you who are less certain of the complex technical terms to feel like you can dive in and continue to follow our work.</p>
]]></description>
      </item>
    
      <item>
        <title>Momming Up... Again</title>
        <link>https://www.daydreamsinruby.com/blog/2018-02-16-momming-up-again/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-02-16-momming-up-again/</guid>
        <pubDate>Fri, 16 Feb 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A few weeks ago I shared a post that I wrote a little bit after I had gone back to work with my first child. Well, fast forward a few years and here I am... pregnant with my second. I've kept my second pregnancy pretty quiet from social media, and was definitely nervous, even though I didn't have a reason to be, about showing at RubyConf. But here I am, I'm pregnant with number two and due very very soon. But here's some good news... I'm no longer as worried about sharing information about being a mom and a mom-to-be again. I've done a lot of thinking and reflecting over the past few months and here's what I'm excited about and not so excited about this second time around.</p>
<h2>The Good</h2>
<p>I'm not sure if it's because I have a child or because it's just become more visible in the industry but it feels like I see parents in tech everywhere. New babies are celebrated and not hidden on Twitter. Moms attend conferences with their kids. I'm part of NUMEROUS slack teams that have parenting channels filled with amazing, supportive, honest individuals. Talking about being a parent doesn't seem as taboo anymore. It feels like jus a regular life thing that happens and that people actually embrace. The tech world of today for parents, while still a work in progress, feels very different than the world of 3 years ago when I had my son.</p>
<p>Along with that fact comes better maternity leave policies. It seems as though almost everywhere I look (although I know it actually isn't all places) parental leave policies are improving. From how long parents can take leave for to the constraints around that time, it feels as though there is a greater understanding and support for recognizing that forcing parents back to work early is not effective for employees or companies. And as companies of all sizes adapt more progressive policies, other companies are forced to do the same in order to remain competitive. That being said, however, my favorite question to ask random recruiters in LinkedIn is &quot;what is the parental leave policy of the company you are hiring for since I only consider working for companies with progressive policies in this area?&quot; If you're not interested in recruiters contacting you, ask this question and most will stop messaging.</p>
<p>Next, I'm glad that this time around I'll be more experienced in tech. For my first I had only been at my first full time job in tech for 10 months before having a baby. That is NOT a lot of time. Everything still felt so new. I never had any idea what I was doing and I was trying to build confidence in myself as a developer and then I was out on leave for 6 weeks. 6 weeks is not a long time to be out when you're a first time mom but it's also a lifetime when you're a new developer. Not looking at code for that time set me back a bit and returning to work while still super sleep deprived and just barely understanding who I was as a mom and who my baby was made jumping back into everything as a junior developer really challenging. This time, as someone with a few more years experience, I don't think it is going to feel quite as foreign to come back and I have a sense (although I could be totally wrong about this) that it won't be as difficult to do little things like watch conference talks or read blog posts while on leave (if I choose to do so!)</p>
<p>And finally, knowing what's up. This isn't related to tech at all, it's just me. I can go into this new parenting experience with a little more knowledge about what it's like to be a parent. Every child and every pregnancy is different but I know how I changed as a person, how my brain chemistry and learning style changed, and how I am as a parent with my first. I have at least some sense of what to expect the second time around. I am going into the experience with better resources for what I need to be successful as a mom of two and more confident in myself as a mother. Even having a broad idea of what to expect and what I may need as an individual, new mom, employee, and more feels like I'm starting this journey in a much better place than I did with my first.</p>
<p>Oh and also onesies!! So many more companies have adorable baby onesies now! I can't wait to outfit my new little lady in as many baby tech clothes as I can get my hands on.</p>
<hr>
<h2>The Bad</h2>
<p>There are lots of great things about being a second time mom and lots of positive changes I've seen in tech over the last few years, however that doesn't mean there aren't things I'm still dreading a little bit. Here are the things I'm not looking forward to.</p>
<p>Pumping. Uugghhh. Pumping is the bane of my existence. By far the worst part of being a working, breastfeeding mom in my opinion. That heavy pump you've gotta lug around with you everywhere. The forced breaks you have to take in order to do it. And for a full year! It honestly seems like forever when you're in the midst of it. I pumped for a year with my first so he'd have breast milk until he was a little older than that and intend (hopefully) on doing the same for this second child. Fortunately, I work from home so there are a whole slew of logistics that I don't have to worry about and I really only have to lug the thing around when I'm traveling but one of the biggest downsides to being remote and pumping is that you're basically tied to your house. I'm not sure what my schedule will be like with number 2 but with my first, because he was not good at nursing, I was pumping about every 2.5-3 hours. This often meant it wasn't worth it to try to get to a coffee shop or cowork because by the time I was settled, I'd have to head home. There's basically no way to pump at a coffee shop and a vast majority of coworking spaces do not have locking, private lactation facilities either. When basically every break you take during the workday is allocated towards pumping, also being remote and tied to home really increases your isolation factor and, for me, is definitely a struggle.</p>
<p>Next, Recognizing the impact it will have on my career. I think with adequate maternity leave this time around the impact might not be as tremendous but in the talk I've done, <a href="https://speakerdeck.com/asheren/abstractions-baby-driven-development">BDD: Baby Driven Development</a>, I speal about an answer to a survey question where parents answer if they feel having a child(ren) has had an affect on their career and if so, what this affect has been. The results are fascinating. More folks who identify as fathers feel having a child has had a neutral or no affect on their career however an overwhelming number of mothers feel it has had a negative affect. As I mentioned earlier, after 6 sleep deprived weeks, it was challenging to jump back into code. I had a lot of ramping up to do and that ramp up was slower as I learned how my brain worked differently. Additionally there is the greater mental load that comes with being a mother. Even if you and your partner are fantastic at sharing responsibilities related to house and childcare, it's still very likely that the woman will take on a lions share of the mental load of being a parent. There are hundreds of small tasks related to being on top of children-related things and making sure your household is running smoothly. Having to keep track of all of that plus transitioning back to work (while pumping and with a sh*t-ton of new hormones in your system) is incredibly challenging. Career driven moms want to be awesome and want to be successful and I think a lot of us put a lot of pressure on ourselves to be all things to all people all the time. Plus, being a new mom means making some sacrifices. I spoke at a lot of conferences last year and while that was awesome, this year I've applied to less because of third trimester travel restrictions, knowing I won't want to travel just after the baby is born, etc. Taking this sort of break is challenging for me and when I am able to return to conference speaking, I can't do quite as much as a mom of two with a full time working spouse. I'll need to be a little choosier about which conferences I apply to and what opportunities I seek out without letting that part of my career, which I love(!) go completely. In short, this time around, one of my goals is to recognize the impact all of these factors have on each other and be the best I can be while being realistic which, most weeks, will probably mean feeling like something won't be quite as successful or prioritized as I want it to be.</p>
<p>Also, the prebirth schedule. Hi. It's currently 5am as I write this. Why am I writing this at a ridiculous hour? Because biologically, as you get closer to your due date, your body switches you from being on a 12 hour circadian rhythm schedule to being on a 24 hour one which is what your baby will need. That means I'm awake. Every night. From about 3:30-5. And I'm super tired. Every day. From about 11:45am-2pm. Know what that's not convenient for?! A FULL TIME WORKING MOM WITH A TODDLER WHO IS NOT DRINKING ANYTHING CAFFINATED!!! At least I feel like I'm using the time productivity this evening to write a blog post.</p>
<p>Finally, all the logistics. Do you know how annoying it is to think through attending an event or a conference as a breastfeeding mother with a full time working spouse?! There are about 1000 things I need to organize on the homefront before going away in addition to thinking through everything that will need to happen at the conference. This includes... will I have access to a fridge and freezer for breastmilk storage purposes, making sure you've got all the parts and pieces you need for pumping, coordinating with conference organizers about what pumping facilities will be available (this is getting better, thank goodness, AND I'm more willing to be picky about what conferences I won't attend if they don't respond or don't have any available facilities, but 3 years ago it was a serious pain!), depending on where the conference is and where those lactation facilities are, how much of the conference will I miss because I'm pumping, and what is the travel like? Will I need to pump on the plane (which sucks and is still not something I'm super comfortable with) or at the airport (probably in a bathroom stall), how difficult will TSA be about getting breastmilk though security, how difficult will gate agents be about having a pump as an extra carry on, etc. (see, I told you pumping was super annoying). All of these factors are enough to make anyone think, well, I'll just stay home instead. They're not unmanageable but they are really taxing to think through.</p>
<hr>
<p>I don't know if everyone feels this way but I feel like there are both things I'm excited about and things I'm not as excited about. That doesn't mean I'm a bad mom, it means I'm a person with complex emotions. In the end, though, there is something really awesome and powerful about being a full time working mom. At the end of the day, how many of your colleages can say they shipped a feature while also growing a freaking human inside of them! I'm looking forward to where this new journey, with this new child, takes me and what sort of kiddo this next one will be.</p>
]]></description>
      </item>
    
      <item>
        <title>Planning a Team Gathering</title>
        <link>https://www.daydreamsinruby.com/blog/2018-02-06-planning-a-team-gathering/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-02-06-planning-a-team-gathering/</guid>
        <pubDate>Tue, 06 Feb 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>For those of us on remote teams, the all-hands is of utmost importance. Getting your entire team together, including remote folks, is incredibly important. Because they are so important, however, it’s vital to put thought and effort into these get togethers. Notice I didn’t say money because a lot of really great team building can be accomplished with a minimal amount of money.</p>
<p>First, think about the goals. I like the think about these gatherings in a few different pieces.</p>
<p>Ideally there is group bonding and a sense of camaraderie that comes out of the week (or few days). This may happen on a few levels, so you can think about it as team, department, and company because it’s important folks leave the week feeling energized and closer to all three of these entities.</p>
<ol start="2">
<li>
<p>I think it’s also important that there is some sort of professional development or learning that takes place.</p>
</li>
<li>
<p>I like for these weeks to be fun.</p>
</li>
<li>
<p>Provide updates and increase transparency. This could happen at all levels. What needs to be clarified or worked out for your immediate team to be more effective. What’s new in the department that needs to be discussed or addressed. Finally, what inspiring company-wide message needs to be given to both inform and encourage everyone.</p>
</li>
</ol>
<p>With these four goals, it’s time to get to planning. I’ve found it helpful to break up days into subject so that folks know what is more or less planned. So, for example, if you have 4 days, your schedule may be:
Day 1: Team day
Day 2: Department Day
Day 3: Company Day
Day 4: Learning Day</p>
<p>Then figure out which elements should be put on each day. Here are some options to consider. On team day, group code review, mob programming, or discussions about team process and flow could be helpful.</p>
<p>On department day, workshops bringing everyone to a more similar level on a technology you’re hoping to move to or even talking through patterns/best practices that the whole department will adapt would be great. Something like talking about a new department style guide, pairing practices, or doing effective code review is great. These discussions and workshops tend to take longer and be more in-depth because there are more people involved and folks may be at different levels or have a variety of opinions. Additionally, you could also have a longer fun activity that gets everyone socializing and speaking with one another.</p>
<p>On company day, I’ve seen day-long hackathons related to the company’s core values, a substantial company update, and some of the fun activities I mentioned on department day. You could have a fun activity on both days, one that includes more folks from different departments that your team/department might interact with and one that is only just the department. Depending on how large your company is, department day and company day may be pretty similar or they might be very different.</p>
<p>Finally, learning day could be an <a href="https://en.wikipedia.org/wiki/Unconference">unconference</a> broken up by lightning talks (not necessarily about tech but about anything anyone wants to speak on) or even paired or group learning that folks sign up for in advance.</p>
<p>On each of these days it’s important to think about the fun components as well, even if everything isn’t company sponsored. What’s going on for lunch? How about dinner? Is there a game night or some sort of optional evening activity? How are you making sure all these activities are accessible and inclusive as well. What is mandatory and what is optional?</p>
<p>This might seem like a lot of work but you really aren’t planning four full days of activities. And remember, some things should be passed off to individuals. The planning team should have a point person on each team that will determine what that team is doing for team day, etc.</p>
<p>Here are some general tips:</p>
<p>Set expectations with the team. If you have folks that are colocated and others coming into town, this step is even more important. How much are folks expected to participate in? What’s the expectation about daytime vs. evening events? What is or isn’t family friendly? When are the travel days for remotes?</p>
<p>Plan with a team. I’ve never worked at a company where a person had this sort of planning as part of their job which means folks are often trying to come up with a successful event while also accomplishing their other regular tasks. If you have a team planning with you and divvy up the responsibilities, everything will go much smoother.</p>
<p>Have a “master of ceremonies” or know which teammate is in charge of each planned item on the agenda. The most successful gathering I’ve planned had a shared google doc which each item written down chronologically. The document listed the name, time, location, and point person for the session, as well as a brief summary  of what was needed from the point person (ie- MC lightning talks, or introduce guest speaker, etc.) and a list of any materials needed.</p>
<p>Put scheduled sessions in everyone’s calendars as early as possible. This helps folks plan out what their week will look like and determine what a realistic workload looks like for that week since the focus is team bonding, but oftentimes real work does need to get done as well.</p>
<p>Send a survey afterwards. There will always be more to improve upon as the team changes. Make sure to send out a post-gathering survey to get anonymous feedback, thoughts, and opinions.</p>
<p>The goal is to have everyone walk away excited about where they work, loving their team, and ready to dive back in and do awesome work.</p>
]]></description>
      </item>
    
      <item>
        <title>Being a new mom in tech</title>
        <link>https://www.daydreamsinruby.com/blog/2018-01-24-being-a-new-mom-in-tech/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-01-24-being-a-new-mom-in-tech/</guid>
        <pubDate>Wed, 24 Jan 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Being a mom in tech is challenging. Being a new mom and fairly new to the tech industry is even more difficult. For a long time, I didn’t write about it. You’ll notice that even though I bring my child to conferences and speak on the topic, there isn’t anything on my blog about it. And that’s because it’s scary to write about. For me, it’s a little bit terrifying to put into print and onto my blog feelings about being a new mother and being in tech. Some of it is raw, a lot of it is very honest. I never know how that will affect future job prospects or people’s opinions of me as an employee. I mean, how many articles and studies are there about the motherhood penalty, the unconscious (or conscious) bias that takes place when interviewing a mom vs. a non-parent or dad, or the difficulty of moms to get hired. And don’t get me wrong, I’m a badass employee… dedicated, driven, focused, and solution-oriented, but i’m also striving to be an awesome mom, all of which comes with compromise and fitting as much as possible into each day. I would hate for any past, current, or future employer to question my abilities as a developer or as a teammate based on the fact that I’m a mother. I have also decided, however, that employers (past, present, and future) that may look down on me or find themselves with doubts as a result of me being a parent, are probably employers that aren’t the right fit for me anyway. So here goes… This is a post that I wrote (but never published) from December 2015. My son was nine months old at the time and actually processing what it meant for me to be a mom and be where I was in my career at the time.</p>
<p>Being a mom in tech
Written December 9, 2015</p>
<p>A few years ago, I transitioned to being a software developer. I was doing nonprofit management for a few years, left it to launch a startup, and through that decided to learn to code. While I expected to hate it, I actually loved the challenges that programming brings and knew it was an industry I would never be bored in. I’ve been a developer for almost two years now and I do love it. It is challenging and interesting and I learn something new every day… which is not something I could say two years into any position i’ve had in the past. BUT therein lies the challenge.</p>
<p>When I started I put in HOURS of extra time. I knew as a career transitioner and an experience professional who was new to code, I’d need to put in the extra effort to get up to speed. I’d spend my weekends working on code side projects, studying more about the methods, practices, and tools we were using at work, and would watch videos, read books and do as much as possible to stay up to date.</p>
<p>As a women in tech I also didn’t mind being the only woman on a team. I didn't really feel different than anyone else, didn’t think I was treated differently, and when my female perspective was different, I treated it as a way to widen others’ perspectives and not something to shy away from.</p>
<p>And then everything changed… then, I became a mom.</p>
<p>Being a mom in tech has been one of the most challenging adjustments I’ve ever had and I am still working on how to balance life and work.</p>
<p>Because I learn something new every day, I need to be sharp every day. Something that isn’t always possible if your baby is having a bad week and you’re getting significantly less sleep every night. The weeks that I only get 4-5 hours of (interrupted) sleep a night and can’t depend on a few cups of coffee during the day to give me those pick-me-ups are tough.</p>
<p>Because I dive into tasks and can work on a problem for hours at a time in order to really understand and solve it, pumping is difficult. I have to pump every 2-2.5 hours in order to have enough milk for my little guy every day and when I pump, I need to force my brain through an enormous context switch… from knee-deep in some technical issues to a relaxed, clear, calm mind that mimics how I would feel if my baby was nursing. I’ve tried working through pumps before and I can do some ancillary email or light-weight tasks, but I can’t continue pushing through a complex technical problem. (and thank goodness I work from home because the days i’m not home and need to find places to pump are even more difficult).</p>
<p>And because I need to continue learning and continue improving my skillset, I need to find blocks of time outside of work to do so. There are no 4 hours blocks of time in my life anymore. Remember, even if I have 4 hours, I need to pump at least once during that time and the moments i’m spending leveling up myself are moments that i’m not spending bonding with or leveling up my child. It’s hard to figure out which is more important and when because neither is more important all the time. It makes it extremely difficult to decide if i’m going to commit to open source, work on a side project, or read some material on a subject i’d like to learn more about… all these options weighed against spending quality time with my child.</p>
<p>While it’s great that I have flexible hours in my industry, it’s also challenging because there isn’t as much understanding around the idea of a hard-stop at the end up the day. And while i’d never noticed many differences between me and my co-workers, those differences are getting harder to ignore and harder for them to relate to. And I understand… they don’t have the context and have never been new dads which might give them some empathy but still isn’t the same as being a new mom.</p>
<p>Being a mom is a new and different experience. It is different than being a new dad in tech, it is different than being a woman in tech. It is just different. I can’t be the only one that feels this way… newly pulled in different directions and trying to determine how to balance it all so that we’re advancing ourselves and our children, giving as much as we should be to our family and our jobs without feeling exhausted all the time.</p>
]]></description>
      </item>
    
      <item>
        <title>Upstream vs. Origin</title>
        <link>https://www.daydreamsinruby.com/blog/2018-01-02-upstream-vs-origin/</link>
        <guid>https://www.daydreamsinruby.com/blog/2018-01-02-upstream-vs-origin/</guid>
        <pubDate>Tue, 02 Jan 2018 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Upstream vs. origin. There are lots of things that are scary or intimidating about contributing to open source. One of my goals for this year is to be less afraid and utilize open source to increase my skillset and sharpen the knife, if you will. This past week I paired with Adam Cuppy and one of the first things we talked about was upstream vs. origin. See, I've always been a little confused about upstream vs. origin because it seems to me that the only time you ever really use upstream is when contributing to open source. In my regular day to day workflow as a developer, I use origin, branches, etc. so I'm pretty comfortable with git but WHAT THE HECK is upstream and if I do it wrong, will I mess up someone's entire repo? Will they hate me forever?! The good news is no!!</p>
<p>When we're looking at upstream and origin, we're basically just looking at working with 2 different remote origins, one origin and one upstream. Upstream is the original repo. When you commit to open source, you often fork the repo and then clone that repo locally, so you need to set 2 remote origins. You need ot set upstream to the original repo so that you can rebase and make sure to keep up to date with any changes that happen there. And then you also need ot set origin which is your fork of the repo. Setting the origin to your fork is just like a regular workflow… you want to set the origin so that when you push, pull, commit, etc. you're doing so from your copy of the repo. And now here's the best part… you will always have pull access but not push access to upstream. It only ever acts as the root so we can make sure to be keeping up with the MOST recently updated version of THEIR master. This also means that because you don't have push access, you really can't F anything up.</p>
<p>Just knowing all of this information makes me so much more comfortable with the idea of contributing to oepn source and gives me a much better understanding of both upstream and origin and why we use both remote origins when contributing to open source.</p>
]]></description>
      </item>
    
      <item>
        <title>Namespacing the Off function</title>
        <link>https://www.daydreamsinruby.com/blog/2017-12-29-jquery-off-namespacing/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-12-29-jquery-off-namespacing/</guid>
        <pubDate>Fri, 29 Dec 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The other week I learned about  the JQuery <code>off</code> function and the cool things you can do with namespacing around that. Using the off function, you can provide a specific handler so that you remove a specific item. Now the danger in this is that you can remove everything that has that handler and that's when namespacing comes in to play. You can namespace <code>off</code> and the specific handler you're looking for so that you can essentially scope the handler in order to find a specific handler instead of removing ALL of the related handlers. This way you know that you're changing something within a specific context instead of anywhere that the handler may exist within the application.</p>
]]></description>
      </item>
    
      <item>
        <title>Parent Driven Development: A podcast about being a parent in tech</title>
        <link>https://www.daydreamsinruby.com/blog/2017-12-16-parent-driven-development-launch/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-12-16-parent-driven-development-launch/</guid>
        <pubDate>Sat, 16 Dec 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A few months ago, I had a dream. No. Really. I had a dream that there was a podcast about being a parent in tech. I woke up and thought, wow. That would be awesome but quickly also told myself that it was an impossibility. I have enough trouble balancing being a parent, my career, conference speaking, volunteering, etc. already. I tried my hardest to put it out of my mind but every time I mentioned it to someone they talked about how interesting it would be and how helpful. I found myself spending moments of free time thinking more and more about the idea. Who could talk on it? What sorts of topics would we cover? What sort of an impact would it have on companies and the tech community at large?</p>
<p>Eventually I decided it was time to make the idea a reality and so it's finally coming to fruition. Parent Driven Development will launch sometime in January and will start by releasing one episode a month (although we're excited to increase the frequency of that schedule if our audience wants more!). The goal is to talk about all sorts of parenting related issues, focused on both children and parents. For example, how do we practice self care as developers and parents? How do we continue learning and stay on pace with peers? We'll also cover additional topics like the importance of parental leave and supporting parents as they return to work. And finally, tougher issues like internet privacy and children, handling difficult situations at work, how to talk about race and gender identity with children, and more. I'm excited that we'll have a diverse panel of folks from all different backgrounds and children of different ages. This podcast will not just be for parents.</p>
<p>Since I've spoken more publicly about my triumphs and struggles related to being a parent in tech and bringing my child to conferences, I've had tons of people approach me. Some ask what it's like to use conference childcare, others say it's nice to know when they have children that they don't have to drop out of the tech world or pick a different career. I've heard dozens of stories about the successes and failures from parents themselves or about the companies they work for. I'm hoping this podcast will bring visibility and an awesome support network for parents in tech, as well as be a valuable source of information for managers, hr representatives, and colleagues looking to support their peers.</p>
<p>Stay tuned for updates as we get our website up and plan for the release of our first episode.</p>
<p>If you or your company is interested in sponsoring or contributing to this project, please let me know by <a href="mailto:admin@parentdrivendevelopment.com">emailing me</a>.</p>
]]></description>
      </item>
    
      <item>
        <title>Git Tricks</title>
        <link>https://www.daydreamsinruby.com/blog/2017-12-09-git-tricks/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-12-09-git-tricks/</guid>
        <pubDate>Sat, 09 Dec 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This week I learned two cool git tricks.</p>
<p>First, use <code>git push --force-with-lease</code> insted of just force pushing. What does force with lease do? Well, it ensures that you're not overwriting someone else's code with your own to make sure you don't lose work (and piss off your coworkers). Recently, a coworker and I were working on the same branch AND we were working alternate hours and irregular schedules. We tried our hardest to make sure we were communicating when either of us did work on the code and what we changed but we also knew that wouldn't be perfect. So we also made sure to use <code>--force-with-lease</code> to make sure we weren't overwriting each other's changes.</p>
<p>Second, I learned about <code>git reset --hard head^</code>. In the past, I've always used <code>git reset --hard HEAD~&lt;number&gt;</code> trying to figure out how many commits I needed to roll back. This is most commonly used (for me) when I accidentally commit onto the wrong brach (for example <code>master</code> when I really want to commit to a feature branch). By using <code>git reset --hard head^</code>, the carrot essentially &quot;pops&quot; off the last commit so that you can then switch to the branch you wanted to ACTUALLY commit the code to and commit it again.</p>
]]></description>
      </item>
    
      <item>
        <title>Leadership Workshop: Company Values and You</title>
        <link>https://www.daydreamsinruby.com/blog/2017-12-03-company-values-and-you/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-12-03-company-values-and-you/</guid>
        <pubDate>Sun, 03 Dec 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<h2>Workshop: <strong>Company Values and You</strong></h2>
<p><strong>Goal:</strong></p>
<p>To have folks think critically about the company values and how they relate to them individually and their team.</p>
<p>To solidify in peoples’ mind’s what the core values are and how to incorporate them into every day thinking</p>
<p><strong>Trigger:</strong>
Break the group up into the number of teams equal to the number of core values you have. For example, if the company has 3 core values, break into 3 groups. If there are 10 core values, break into 10 groups, but try to have no more than 8 people and no less than 3 people in each group.</p>
<p>Give each group 1 large piece of paper with 1 core value written on it and some markers. Each group will have 10 minutes and then will pass the paper clockwise. Do this until every group has gotten every paper.</p>
<p>In those ten minutes, discuss the core value as a group. Write down on the paper what you think of the core value?
What words or concepts come to mind when thinking about this core value?
What are some ways in which your team demonstrates this core value? (if the group is comprised of people from multiple teams, you can write down ways in which each team demonstrates it and if there are any ways in which all the teams demonstrate the value)</p>
<p><em>facilitator note</em>: it might be helpful if you have a screen or whiteboard to write the above questions (and any others you add) so that groups can check in and remember what they’re supposed to be writing on the paper. Also, on these papers, people should feel free to be creative. They can write words, stories, sentences, or can draw pictures.</p>
<p><strong>Discussion:</strong>
Have each team skim over their paper and then take 3 minutes to present it to everyone else.</p>
<p>The presentation should summarize: What were some examples of things written down? How did groups interpret each core value? Was there duplication or agreement about a particular set of ideals?</p>
<p>Put all the papers up on a wall (or table) and give everyone 5-10 minutes to walk around and read through the papers.</p>
<p>Then reassemble the group for the discussion-
Which core value do you think is most important to your team?
Which is most important for you as an individual?</p>
<p><strong>Conclusion:</strong>
Give each person a smaller piece of paper with 1 section per core value. Give the group 10 minutes to individually write down in each section how they incorporate (or want to incorporate) each core value into their day-to-day.</p>
<p>Feel free to discuss these with your manager or hang them up in your workspace so that you keep them in mind as you go about your day-to-day work.</p>
<p><strong>Supporting materials:</strong></p>
<p>Core values and any information written about them</p>
<p>If possible, documentation about when, how, or why the core values were determined and how they came to be</p>
<p><strong>Materials needed:</strong></p>
<ul>
<li>
<p>Large pieces of paper with 1 core value written at the top of each.</p>
</li>
<li>
<p>Markers</p>
</li>
<li>
<p>Pens</p>
</li>
<li>
<p>Smaller pieces of paper with core values in sections</p>
</li>
</ul>
]]></description>
      </item>
    
      <item>
        <title>How to Childproof a Hotel Room in Less than Five Minutes</title>
        <link>https://www.daydreamsinruby.com/blog/2017-11-27-childproof-hotel-rooms/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-11-27-childproof-hotel-rooms/</guid>
        <pubDate>Mon, 27 Nov 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I travel with my son solo a fair amount. In fact, he's now only 2 and a half but has already been to five tech conferences with me, many of those with the two of us traveling solo. One of the things I learned very early on was how to VERY quickly and VERY easily childproof a hotel room. This became even more important once my son was sleeping in a bed (he started climbing out a crib/pack and play at about 18 months so our bed transition came pretty early), but even before that, he would be into everything before I could even close the hotel room door. Here are my tips of how to childproof a hotel room.</p>
<ul>
<li>
<p>Find the room safe. This will keep your child occupied while you childproof the rest of the room.</p>
</li>
<li>
<p>Stuff pillows in between the bed and the nightstand. Most hotels have a rectangular or square nightstand in between the two beds (or next to the one bed if you're still using a crib). There is usually a small gap and sharp corners, but shoving a pillow in there will keep you child from getting caught and from bumping into the corners.</p>
</li>
</ul>
<p><img src="https://daydreamsinruby.com/images/hotel_room_pillows.jpg" alt="hotel room pillows"></p>
<ul>
<li>
<p>Unplug all the phones, both the phone from the wall and the receiver from the phone base. Added bonus, your child can now walk around the room &quot;on the phone&quot; which is really what they want.</p>
</li>
<li>
<p>Find the refrigerator (which you probably need for milk, snacks, etc.) and tape it shut. This way your child won't open and close it incessantly over the next few days which will likely drive you bonkers.</p>
</li>
</ul>
<p><img src="https://daydreamsinruby.com/images/hotel_room_duct_tape.jpeg" alt="hotel room duct tape"></p>
<ul>
<li>Take any chairs and put the back of them against the side of your kid's bed to act as a bed rail.</li>
</ul>
<p><img src="https://daydreamsinruby.com/images/hotel_room_chairs.jpg" alt="hotel room chairs"></p>
<ul>
<li>
<p>Put extra pillows on the floor on the side that does not have chairs as the bed rail.</p>
</li>
<li>
<p>Always use the security chain or extra lock at the top of the door. Most hotel room doors are easier to open than your doors at home. If you're really lucky, your child will figure out that they can open it while you're in the bathroom or doing something equally convenient.</p>
</li>
</ul>
<p>As an aside, I've never had to do this, but you can also use washcloths and tape them around any sharp corners.</p>
<p>Materials needed: Duct, masking, or painters tape. These three tape options will be sticky enough for what you need but won't damage any of the hotel room.</p>
]]></description>
      </item>
    
      <item>
        <title>RubyConf 2017: Themes and Thoughts</title>
        <link>https://www.daydreamsinruby.com/blog/2017-11-24-rubyconf-2017/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-11-24-rubyconf-2017/</guid>
        <pubDate>Fri, 24 Nov 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>RubyConf is my &quot;feels like home&quot; conf. I'm not sure if it's because the ruby community is where I got my start, or because the people and community are just so gosh-darn nice, but after being at many wonderful conferences this year, it felt good to, metaphorically,  go home for a week. There are many incredible RubyConf talks that happen every year and I encourage everyone to watch the videos when they come out in a few weeks, but this year, RubyConf had a interesting overarching tone. All of the keynote talks focused on one theme… your code is not your legacy. Your code is not what you will leave behind. What you will leave behind and what people will remember is you, the people you helped, the folks you had an impact on, and the monumental importance of being nice to yourself and to others.</p>
<p>I love this theme. It started in Matz's keynote, where he shared that he is honestly embarrassed by the phrase MINAWAN (Matz is nice and so we are nice) and instead wishes RINASWAN (Ruby is nice and so we are nice) had caught on. It continued through Chad Fowler's talk on growing old and Andy Croll's talk on the impermanence of software. Both of those talks focused on how the code you write goes away, it gets refactored, it dies and that how you treat people, mentor others, and show your kindness are paramount to the code you write every day. Finally, the theme was concluded with Sandi Metz's talk You're insufficiently persuasive where she used psychology and books like Influence and How to win friends and influence people to talk about what makes people and teams happy when dealing with one another. She dove into the idea of psychological safety which is about being nice to folks and making everyone feel comfortable and left us by saying &quot;you are good enough.”, something we often don't hear enough of in the tech industry. The idea of being nice, reaching out, and the importance of our Ruby community was concluded in the ignite talks after lunch on that last day (which I was lucky enough to participate in).</p>
<p>All of this talk about code and growth and being good enough got me thinking deep thoughts about my career. At times, I feel as though I'm becoming the same developer with a few years of the same experience and not a developer that is constantly being exposed to new challenges and opportunities. This realization strikes panic in to my heart. I've posted before about my dislike of code challenges for a variety of reasons, but, honestly, one of those reasons is I'm just plain not good at them! For years I've worked in super complex legacy code bases. Ones where the schema is challenging and every ticket is an adventure (not always in the fun way). In legacy codebases you have different considerations, you need to carefully consider various problems and solutions not just in regards to the bug or feature you are building, but thinking about the system as a whole. While this is a super valuable skillset, it also  means the number of times I spin up a new application or write <code>def initialize</code> is minimal, leading me trying to remember those early days of coding whenever I even think about doing a tech interview. These are gaps I need to fill and that I want to fill.</p>
<p>I also am very honest with myself and I know that I have limited outside of work hours and bandwidth. There are some things I can drive myself to do solo, but this is not one of them. Over the next few weeks, I'll be looking for pairs, preferably on open source projects. People who like teaching and pairing, to work with me on some of these fundamentals. If you're one of those people, please let me know.</p>
]]></description>
      </item>
    
      <item>
        <title>What I&#39;ve been writing</title>
        <link>https://www.daydreamsinruby.com/blog/2017-05-15-what-ive-written/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-05-15-what-ive-written/</guid>
        <pubDate>Mon, 15 May 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As you may know, I blog in 2 places; here and on the fantastic <a href="https://collectiveidea.com/blog/author/allison-mcmillan">Collective Idea blog</a>{:target=&quot;_blank&quot;}. Recently, I've posted some pieces there that I wanted to share.</p>
<ul>
<li>
<p>What I think makes a <a href="https://collectiveidea.com/blog/archives/2017/02/21/how-to-write-a-more-effective-conference-proposal">strong conference proposal</a>{:target=&quot;_blank&quot;} from my experience reading over 500 talk proposals for RailsConf. Also related to RailsConf was how to <a href="https://collectiveidea.com/blog/archives/2017/04/21/conferencing-success">RailsConf successfully</a>{:target=&quot;_blank&quot;}.</p>
</li>
<li>
<p>A fun piece on <a href="https://collectiveidea.com/blog/archives/2017/05/01/working-remotely">how we work remotely</a>{:target=&quot;_blank&quot;} with some tips from the team.</p>
</li>
<li>
<p><a href="https://collectiveidea.com/blog/archives/2017/05/02/tailoring-retrospectives-by-using-core-values">Running a retrospective through the lens of your company's core values</a>{:target=&quot;_blank&quot;}. After all, they should be more than just posters on the wall.</p>
</li>
<li>
<p>An excellent workshop I attended at <a href="http://codelandconf.com/">Codeland Conf</a>{:target=&quot;_blank&quot;} about <a href="https://collectiveidea.com/blog/archives/2017/05/12/diving-into-web-based-virtual-reality">Web Based Virtual Reality</a>{:target=&quot;_blank&quot;}.</p>
</li>
</ul>
<p>A few posts based on conferences I've been speaking at:</p>
<ul>
<li>
<p><a href="https://collectiveidea.com/blog/archives/2017/10/06/code-a-conference-for-doers">Write/Speak/Code and what makes it so special</a>{:target=&quot;_blank&quot;}.</p>
</li>
<li>
<p><a href="https://collectiveidea.com/blog/archives/2017/10/11/when-strange-loop-melts-your-brain-melt">Strange Loop and the power of learning</a>{:target=&quot;_blank&quot;}.</p>
</li>
<li>
<p><a href="https://collectiveidea.com/blog/archives/2017/11/14/the-truth-about-our-open-source">All Things Open and Open Source at Collective Idea</a>{:target=&quot;_blank&quot;}.</p>
</li>
</ul>
<p>I hope you enjoy!</p>
]]></description>
      </item>
    
      <item>
        <title>Exploring My Code Confidence Levels</title>
        <link>https://www.daydreamsinruby.com/blog/2017-11-04-exploring-my-code-confidence/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-11-04-exploring-my-code-confidence/</guid>
        <pubDate>Sat, 04 Nov 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Last week, I posted a question to twitter to which I got VERY interesting responses. The topic was confidence, particularly self-confidence.</p>
<p>I'm not a new developer. I'm no longer a junior developer. But that doesn't mean that I'm not learning new things. That's part of being a developer, right? Continuing to be faced with problems and challenges that you need to solve and architect solutions for. I love that there are new things I face every day. It's honestly one of my most favorite parts of being a developer. And I do a fair amount to track my learning and growth. I journal. I have a digital notebook where I outline both what I want to learn and what I have learned. I do personal retrospectives every week that summarize what I've learned. I keep a &quot;happy thoughts&quot; folder where I have documents with positive feedback or screenshots of recognition I've received. And I make sure to reflect on where I was 6 months ago, a year ago, a few years ago, etc. But there are so many new things and what I'm realizing is that my attitude and confidence level are starting to make the largest impact on my productivity level.</p>
<p>I'm sure I'm not alone here. Sometimes I feel like I can tackle anything and other times I feel like I'm not even sure if I've learned anything over the past few years. But, it's not about practice. When I first mentioned code confidence on twitter, a lot of people responded with ideas for code exercises I could do, but I know that's not the core of the problem I'm solving. It's not about practice, it's about the fact that when I feel confident, on days where I'm making progress and feeling good, I accomplish a TON. I tackle hard problems. I pick up tickets no matter how familiar or unfamiliar I am with the area they deal with. When I ask questions, they are pointed and have been thoroughly thought through and researched until I truly am stuck. And when I pair, I drive effectively or offer solid thoughts on what direction we should go in next. I can almost always do more than I think I can, but only on those days where I'm feeling confident.</p>
<p>The days where I'm not confident, the opposite happens. I'm hesitant to pick up a ticket unless I can almost immediately see what the solve will be. When I pair, I often offer for the other person to drive and may suggest ideas quietly but infrequently. I think I'll get stuck early and therefore I do. I've worked with some great folks in the past and some not so great folks. I've worked on teams and in situations where the disrespect is obvious and it's hard to be heard or seen as a peer. This is often exasperated by the fact that I work remote. Sometimes in person, it's easier to lift yourself out of a lower place because you have other people around to help you do so. No matter how much chat interaction you have, when people can't see you and you can't see people, it's easy to stare at code and mope until you can reach out for help, and if that request for help goes unanswered or the wrong person answers that cry for help is more easily muted as a remote worker.</p>
<p>The right pair or right sentence can lift me out of a funk and into a better place but I don't want to have to depend on others to do this.</p>
<p><img src="https://daydreamsinruby.com/images/confidence.jpg" alt="confidence quote"></p>
<p>Every year I set goals for myself and every quarter I revisit them. This quarter (and for the next 6 months), I decided that working on my code confidence, or my ability to stay in this confident, more positive mindset for more days or more hours at a time. There are a variety of action steps I've outlined for myself to make progress on this goal but step one is how do I even track this?! I'm curious to learn id there are trends related to when I feel more or less confident. Is it when I get good code reviews from folks on my team? Or does a more difficult review make a difference? Is there a difference between Mondays and Fridays? Do I have confident streaks and then streaks of not feeling confident? Do both trends last the same amount of time? What questions should I be asking myself about this covering some sort of survey or scale on this topic? Does my assessment of the difficulty of tasks I'm working on make a difference? Should that even be noted?</p>
<p>An easy way to track this is to just be able to mark down a happy face or a frown face (or red days and green days) and then go from there, but maybe there are more questions that I'm not thinking about. And if it's just a happy face or frown face, there isn't much context or ability to determine patterns or trends related to it. This is going to be subjective and that's ok. This is really just an experiment for me to think about me, which is why I also want it to be EASY.</p>
<p>Does an app like this exist? Is anyone else doing anything like this? The best way to solve a problem is to know as much about it as possible and so that's what I'm trying to do.</p>
]]></description>
      </item>
    
      <item>
        <title>Workshop: Contributing to Open Source</title>
        <link>https://www.daydreamsinruby.com/blog/2017-10-28-oss-workshop/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-10-28-oss-workshop/</guid>
        <pubDate>Sat, 28 Oct 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><strong>Goal:</strong> Enable every individual to contribute to an open source repository</p>
<p><strong>Trigger:</strong>
Split the group into a few smaller groups (no more than 4). Give each group a repository to look at. Have them pick an issue to look at. Give each group 25 minutes to look into the issue and discuss it. What words are new? What seems like the most critical parts of this issue? How would you go about starting to contribute to this issue?</p>
<p>Take notes, feel free to start coding, etc. At the end of 25 minutes, you’ll present to the other groups what you learned and discussed in form of a song.</p>
<p><strong>Discussion:</strong>
What feels scary about contributing to open source?
What’s challenging about contributing?
What’s fun or exciting about contributing to this repository?</p>
<p><strong>Conclusion:</strong>
Go around and say one thing you’re excited to bring to the open source community
*If possible, provide 45 minutes-an hour for folks to actually contribute while there.</p>
<p><strong>Supporting Materials:</strong></p>
<ul>
<li>Glossary of common open source words used</li>
<li>A few blog posts about research into open source contributors or contributing to open source in general</li>
<li>GitHub’s guide to open source</li>
</ul>
<p><strong>Materials needed:</strong></p>
<ul>
<li>Links and names of a few repositories</li>
<li>Computers</li>
</ul>
]]></description>
      </item>
    
      <item>
        <title>Getting Feedback</title>
        <link>https://www.daydreamsinruby.com/blog/2017-10-15-getting-feedback/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-10-15-getting-feedback/</guid>
        <pubDate>Sun, 15 Oct 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Getting feedback is incredibly important but really difficult. In software development there are no hard and fast rules about what puts you in one level versus another AND it's different at every company. What skills do you have? Which ones do you need? How can you effectively gather the information and feedback you need to create a plan and keep moving forward?</p>
<p>Most folks generally get some feedback via code reviews which can be helpful but that's a whole different subject and post regarding how to get and give feedback on a code review. Regular reviews are also helpful if your company does them but because colleagues know that salary, raises, etc. are dependent on them, many are resistent to giving completely honest or blunt feedback (and for good reason). I find that a helpful way to get feedback is to check in monthly with the folks that you work with the most... both those with more and less experience than you have. You can ask these questions in a meeting or 1:1 OR email them in advance to teammates. I've done both styles before depending on the personalities of my teammates and what I think would work best.</p>
<p><strong>For people with less experience:</strong></p>
<ul>
<li>What do you like about working with me?</li>
<li>Am I approachable when you have questions or are stuck?</li>
<li>Am I a good pair? Do you feel our pairing sessions are productive and do you learn from them?</li>
<li>What do you think is my best contribution to the team?</li>
<li>Where do I hold the team back?</li>
</ul>
<p><strong>For people with more experience:</strong></p>
<ul>
<li>What do you like about working with me?</li>
<li>Where could I improve as a teammate?</li>
<li>Where could I improve technically? and/or technically-speaking, what do you think I should know or be better at compared to other developers at my level of experience?</li>
<li>What would you like to see me doing in 6 months? (ie- where should I be technically? contributing to the team more effectively, etc.)</li>
<li>What do you think is my best contribution to the team?</li>
<li>Where do I hold the team back?</li>
</ul>
]]></description>
      </item>
    
      <item>
        <title>Angelina Ballerina Learns about Memory Allocation Resources</title>
        <link>https://www.daydreamsinruby.com/blog/2017-09-22-memory-resources/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-09-22-memory-resources/</guid>
        <pubDate>Fri, 22 Sep 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Resources used to put together the talk: Angelina Ballerina learns about memory allocation</p>
<h3>Sites</h3>
<p><a href="http://confreaks.tv/videos/rubyconf2016-methods-of-memory-management-in-mri">http://confreaks.tv/videos/rubyconf2016-methods-of-memory-management-in-mri</a>
<a href="http://confreaks.tv/videos/railsconf2015-speed-science">http://confreaks.tv/videos/railsconf2015-speed-science</a>
<a href="http://confreaks.tv/videos/rubyconf2013-object-management-on-ruby-2-1">http://confreaks.tv/videos/rubyconf2013-object-management-on-ruby-2-1</a>
<a href="https://www.youtube.com/watch?v=kZcqyuPeDao&amp;t=258s">https://www.youtube.com/watch?v=kZcqyuPeDao&amp;t=258s</a></p>
<p><a href="https://www.youtube.com/watch?v=yl_zYzPiDto">https://www.youtube.com/watch?v=yl_zYzPiDto</a></p>
<p><a href="https://www.youtube.com/watch?v=t8dj56h2gbg">https://www.youtube.com/watch?v=t8dj56h2gbg</a>
<a href="http://schneems.com/2017/05/17/ruby-backend-performance-getting-started-guide/">http://schneems.com/2017/05/17/ruby-backend-performance-getting-started-guide/</a>
<a href="http://patshaughnessy.net/2013/10/24/visualizing-garbage-collection-in-ruby-and-python">http://patshaughnessy.net/2013/10/24/visualizing-garbage-collection-in-ruby-and-python</a>
<a href="http://michaelrbernste.in/2013/05/20/adventures-in-GC-pedagogy.html">http://michaelrbernste.in/2013/05/20/adventures-in-GC-pedagogy.html</a>
<a href="http://www.schneems.com/2015/05/11/how-ruby-uses-memory.html">http://www.schneems.com/2015/05/11/how-ruby-uses-memory.html</a>
<a href="https://blog.codeship.com/debugging-a-memory-leak-on-heroku/">https://blog.codeship.com/debugging-a-memory-leak-on-heroku/</a>
<a href="https://www.sitepoint.com/ruby-uses-memory/">https://www.sitepoint.com/ruby-uses-memory/</a>
<a href="http://rubylearning.com/blog/2013/06/19/how-do-i-benchmark-ruby-code/">http://rubylearning.com/blog/2013/06/19/how-do-i-benchmark-ruby-code/</a>
<a href="http://help.apm.scoutapp.com/">http://help.apm.scoutapp.com/</a></p>
<p><a href="https://ruby-doc.org/core-2.2.0/ObjectSpace.html">https://ruby-doc.org/core-2.2.0/ObjectSpace.html</a>
<a href="https://www.schneems.com/2017/04/12/jumping-off-the-memory-cliff/">https://www.schneems.com/2017/04/12/jumping-off-the-memory-cliff/</a>
<a href="https://samsaffron.com/archive/2015/03/31/debugging-memory-leaks-in-ruby">https://samsaffron.com/archive/2015/03/31/debugging-memory-leaks-in-ruby</a> 
<a href="https://medium.com/@monfresh/a-trip-down-memory-lane-with-derailed-benchmarks-9d77cbd64f48">https://medium.com/@monfresh/a-trip-down-memory-lane-with-derailed-benchmarks-9d77cbd64f48</a></p>
<p><a href="http://www.justinweiss.com/articles/a-new-way-to-understand-your-rails-apps-performance/">http://www.justinweiss.com/articles/a-new-way-to-understand-your-rails-apps-performance/</a></p>
<p><a href="https://collectiveidea.com/blog/archives/2015/02/19/optimizing-rails-for-memory-usage-part-1-before-you-optimize">https://collectiveidea.com/blog/archives/2015/02/19/optimizing-rails-for-memory-usage-part-1-before-you-optimize</a></p>
<p><a href="https://www.speedshop.co/2017/03/09/a-guide-to-gc-stat.html">https://www.speedshop.co/2017/03/09/a-guide-to-gc-stat.html</a></p>
<p><a href="https://thorstenball.com/blog/2014/03/12/watching-understanding-ruby-2.1-garbage-collector/">https://thorstenball.com/blog/2014/03/12/watching-understanding-ruby-2.1-garbage-collector/</a></p>
<h3>Books</h3>
<p>The Garbage Collection Handbook: The Art of Automatic Memory Collection
by Antony Hosking, Eliot Moss, and Rhys Jones</p>
<p>Garbage collection
by Richard Jones</p>
]]></description>
      </item>
    
      <item>
        <title>Workshops for Engineer, Part 3</title>
        <link>https://www.daydreamsinruby.com/blog/2017-06-04-workshops-for-engineers-part-3/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-06-04-workshops-for-engineers-part-3/</guid>
        <pubDate>Sun, 04 Jun 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In <a href="http://daydreamsinruby.com/workshops-for-engineers-part-1/">part 1</a>, we learned about the formula for writing a workshop and went through how to craft the goals and trigger. Then, in <a href="http://daydreamsinruby.com/workshops-for-engineers-part-2/">part two</a>, we covered the discussion, both how to facilitate and create effective questions. For the last installment of workshops for engineers, we’ll figure out how to bring it all together looking at the conclusion, supporting materials, and materials needed.</p>
<p>The conclusion is how you bring it all together. When you run a great workshop, you need to “close” it in a thoughtful way. A conclusion can be a thoughtful statement, a call to action, or a final thought from the group as a way to conclude. One example is having everyone go around and say one thing they learned about themselves during the course of the activity. Another example is having folks write on an index card their next step and keep it with them. Conclusion statements or activities are generally pretty short… under five minutes.</p>
<p>The supporting materials are what give workshops staying power. Sure, you as the facilitator may know everything that needs to be known about the subject you’re running a workshop on, but, if you need to have multiple facilitators (like if you break people up into smaller groups), the supporting materials are how YOU know that everyone knows the information they need to in order to guide the conversation intelligently and thoughtfully. Finally, supporting materials allow anyone in the future to “pick up” this workshop and run it themselves. Supporting materials are NOT books… you need to ensure that your materials are manageable for a person to get through in a short amount of time. It could include a few blog posts, a particularly good article, examples of leadership styles, or a book excerpt (if you choose to provide a book excerpt as supporting materials, try to get as specific as possible and even go as far as highlighting the key sentences or points).</p>
<p>The materials needed are the final portion of running a successful workshop. This part keeps you happy and organized and also allows others to run your workshop successfully in the future. The materials listed in materials needed should be anything and everything needed. Need scissors to cut big pieces of paper? Tape to put stuff on the wall? Pens? Again, this should cover everything.</p>
<p>And that is how you write an engaging workshop. The first few times you work through this, it will likely take you a bit of time but as you run these workshops you’ll get better and better at writing them, facilitating them, and ensuring that you’re leaving a legacy that future employees can utilize as well.</p>
<p>Be on the lookout for examples of workshops like this in the future!</p>
]]></description>
      </item>
    
      <item>
        <title>Workshops for Engineer, Part 2</title>
        <link>https://www.daydreamsinruby.com/blog/2017-05-15-workshops-for-engineers-part-2/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-05-15-workshops-for-engineers-part-2/</guid>
        <pubDate>Mon, 15 May 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In <a href="http://daydreamsinruby.com/workshops-for-engineers-part-1/">part one</a> of this how-to workshop for engineers, we look at developing goals and the trigger for your event. Those were foundational pieces to get your participants focused on the learning they're doing and engaged. Hopefully through your trigger you've set the scene and they've gone through some sort of activity. They've had fun or thought critically about themselves or both! Next comes the discussion.</p>
<p>The discussion is an incredibly important piece of the workshop. It gives everyone a chance to actually talk and reflect on the activity they just participated in. They hear each other's thoughts and ideas (and sometimes feelings and emotions depending on what sort of workshop you are running and your goals) and can pull a lot of the pieces together. To create discussion questions, think about your goal and what you're hoping to get out of the activity and tailor your questions around that. For example, if you're asking someone to draw something or chose something, ask them to share what they drew or chose and why. If you're doing some sort of quiz, you can ask people what surprised them about the results they received or if they weren't surprised at all. There are also a few different ways to run a discussion. If you have a large group or a good amount of introverts, try starting the discussion in pairs or small groups. Getting people talking together will help them be comfortable before getting to the discussion with a larger group. And, for example, if you do some sort of a quiz, you can have people get together based on their quiz results and then broaden it to the larger group.</p>
<p>A few tips for facilitators:</p>
<ol>
<li>
<p>Get comfortable with silence. If you don't interrupt the silence, someone else will. While it sometimes feels uncomfortable to sit there because it feels like no one has anything left to say, if you just wait a little longer than you're okay with, someone else will often times chime in. Silence also gives introverts a chance to think through what they want to say before volunteering to speak.</p>
</li>
<li>
<p>Ask open ended questions. A closed question is something with a yes/no answer and in a discussion, if you ask a yes/no question, you will get a yes/no answer. However, if you frame the same question as an open question, something that involves responding with an explanation and not just a yes or no, you'll get more involved, more in-depth answers that will often lead to other people speaking and will keep the conversation going.</p>
</li>
<li>
<p>Make sure to call out people who haven't spoken. Don't do this by calling on specific people because that can be intimidating, but if you say something like &quot;does anyone who hasn't spoken yet want to say anything?&quot; It gives folks who might not be comfortable inserting themselves into the conversation the space and time to speak up.</p>
</li>
<li>
<p>Keep the discussion on topic but let it flow. This one is tricky, but if you have a list of questions you want to ask as a part of the discussion, don't ask them as a list. It's weird and makes things feel more like a quiz than a flowing conversation. Keep many of the questions in mind and try to bring up questions naturally as the discussion sort of organically leads to them. Don't worry if you're not good at this right away... this is really tricky to do and takes some practice.</p>
</li>
</ol>
<p><a href="http://daydreamsinruby.com/workshops-for-engineers-part-3/">Part 3</a></p>
<p>Be on the lookout for examples of workshops like this in the future!</p>
]]></description>
      </item>
    
      <item>
        <title>Workshops for Engineer, Part 1</title>
        <link>https://www.daydreamsinruby.com/blog/2017-04-29-workshops-for-engineers-part-1/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-04-29-workshops-for-engineers-part-1/</guid>
        <pubDate>Sat, 29 Apr 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Most people I meet want their team to always be learning and growing. Whether you're a manager of a team, tech lead, or just a colleague, leveling up is important. There are LOTS of bad, boring training workshops. Seminars where you sit and listen, where you stare at a slidedeck and check your watch and wonder what you should be learning from this. This is usually what people think of when they think of leadership training or professional development. But this is so far from what it could be. Enter <a href="https://en.wikipedia.org/wiki/Experiential_education">Experiential Education</a>. Experiential education focuses on creating an experience in order to help participants process and think critically about the goal of the activity. These can be immersion experiences like alternative spring break trips, habitat for humanity house building, educational experiences domestic or abroad, leadership training days, company retreats, or even just the one-off workshop. These workshops are engaging, interactive, and make a much larger impact on the people participating. It seems as though this is something only professionals can do, but it's not! With some thought and understanding, anyone can put together these sorts of activities. This is a three-part series that will walk you through running a workshop.</p>
<p>The formula for a workshop is simple:</p>
<ul>
<li>Goals</li>
<li>Trigger</li>
<li>Discussion</li>
<li>Conclusion</li>
<li>Supporting Materials</li>
<li>Materials Needed</li>
</ul>
<p>We'll talk through the goals and trigger here.</p>
<p>The goal is both the easy and most difficult part. Think about what you want the session to achieve. What are you hoping everyone learns? What do you want the participants to walk away with? You can have multiple goals for a workshop... I usually have between 1 and 3 depending on the topic and audience. Some examples of goals could be: To help the team learn about each other's leadership styles. To understand and work through different communication and conflict styles. To help each person look at what type of leader they want to become. To learn about sorting algorithms.</p>
<p>The trigger comes next. The trigger is what kicks off and gets people thinking. It's the pre-cursor to the discussion. A trigger activity can be anywhere from 5 to 45 minutes depending on what needs to be accomplished to give the participants enough to have a thoughtful discussion about it afterwards. There are hundreds of ways to execute this, including skits, drawing, social barometers, quizzes, self-identification. An example of a trigger would be making a line down the middle of a room and having one side be agree and the other disagree. The leader of the workshop would then make statements and people would choose which side of the line they stand on. Another example would be everyone breaking into groups and learning something and then doing a skit to present that information to the entire group. These triggers are NOT complex, but they're creative, they get everyone thinking and moving and really engaging with the topic at hand.</p>
<p>Stay tuned for the post on what's involved in the discussion, conclusion, supporting materials, and materials needed.</p>
<p><a href="http://daydreamsinruby.com/workshops-for-engineers-part-2/">Part 2</a></p>
<p>Be on the lookout for examples of workshops like this in the future!</p>
]]></description>
      </item>
    
      <item>
        <title>Running an Engineering Book Club</title>
        <link>https://www.daydreamsinruby.com/blog/2017-04-15-running-a-book-club/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-04-15-running-a-book-club/</guid>
        <pubDate>Sat, 15 Apr 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I recently finished reading <a href="https://www.manning.com/books/elixir-in-action">Elixir in Action</a> as a part of a book club. While runnning this book club, I learned a lot about what our group felt worked and what didn't work. I know that lots of people run books clubs both at work and outside of work so here are my tips.</p>
<p><strong>1. Find people who have similar schedules</strong></p>
<p>This book club met once a week, virtually, for an hour, during the weekday. For me personally, meeting during the workday was important because I don't have much outside time. This also meant that this group was also comprised of people who preferred to meet during weekday office hours, an important point to realize for book clubs that are looking to have more diverse participants. Another book club meets virtually on Sundays for an hour. A book club does not (and maybe should not) be a lot of people so find a core group of folks that can meet together based on what works in their lives... and the book club doesn't need to be with only work people. One of the things our book club really liked was that if one person had to skip because work was challenging that week, it didn't mean that bookclub couldn't happen. Additionally, having a book club with people who work at different places and in different codebases, led to really interesting discussions and a greater ability to learn from each other's experiences.</p>
<p><strong>2. Meet once a week and have point people</strong></p>
<p>At the start of book club, each person claimed a chapter or two. In order to participate in book club you had to claim a chapter. Claiming a chapter meant that you were &quot;presentng&quot; at the beginning of the meeting. This didn't have to be anything intense, simply a 5-10 minute chat that summarizes the chapter and goes over the main highlights. This way, if someone didnt have a chance to read that week, they could still attend and could still discuss, ask questions, and participate. That person would also facilitate the discussion which often focused around just discussing the different parts of the chapter, looking at code exercises, or talking about what parts we liked or disliked.</p>
<p><strong>3. Every section/few weeks, add in a week dedicated to code sharing/code challenges</strong></p>
<p>One of the main issues that we found was that people did not often have enough time to both complete the code exercises in the book and read the chapter. For Elixir in Action in particular, the book is broken up into three sections. At the end, we realized that it would have been helpful to add a &quot;code&quot; week at the end of each section which would have enabled us to actually write the exercises and share them with one another.</p>
<p><strong>4. Keep the momentum going but allow yourselves 1 or 2 catchup weeks</strong></p>
<p>Book clubs can be long. If you do 1 chapter a week, you're often looking at a 3-4 month book club for most books. It can be really challenging to keep that momentum going through vacations, holidays, busy times at work, etc. It's important to continue to take the pulse of your book club and determine when you might want to skip a week. We did this twice when we realized no one had had a chance to read the chapter except for the chapter point person. Instead of trying to force a conversation, we just postponed the chapter to the following week and used that allotted time to catch up on reading.</p>
<p><strong>5. Try to set reminders and communicate in between meetings</strong></p>
<p>Our book club had a private slack channel which was great for setting up pairing sessions if someone wanted to pair on an exercise, or share links and resources that came up during our meeting. Additionally, for reminder, the easiest thing to do was to set up 2 reminders. One reminder was the day before book club and the other was 2 hours before.</p>
<p><strong>6. Take notes</strong></p>
<p>Each week, the note-taker was the person who would be &quot;presenting&quot; the following week. This note-taker then put up a pull request in our book club github repo. This is helpful to look back on but was also helpful if someone had to miss a week of bookclub. They could easily catch up on what they missed.</p>
<p>Book clubs can be great but they can also be really challenging to run successfully, especially with certain books that might not have as much fodder for discussion. What do you find that works? Or if you still haven't hit on something, feel free to try these tips out.</p>
]]></description>
      </item>
    
      <item>
        <title>Leadership Workshop: Values in Stickers</title>
        <link>https://www.daydreamsinruby.com/blog/2017-03-15-leadership-in-stickers/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-03-15-leadership-in-stickers/</guid>
        <pubDate>Wed, 15 Mar 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><strong>Leadership Development</strong></p>
<p><strong>Goal:</strong> To help individuals think about their current values as a leader and reflect on how they have changed in the past few years</p>
<p><strong>Trigger:</strong> Have each laptop sticker represent a characteristic.</p>
<p>The characteristics are:</p>
<ul>
<li>transparency</li>
<li>work/life balance</li>
<li>teaching, learning</li>
<li>fairness</li>
<li>integrity</li>
<li>decisiveness</li>
<li>authenticity</li>
<li>empowerment</li>
<li>communication</li>
<li>freebie (ie- something you think about when thinking about Judaism that isn’t covered in the other aspects)</li>
</ul>
<p>Participants have 10 minutes to walk around and this about the things they value the most as a leader. Tell participants they can pick as  many or as few characteristics as they would like and they can pick multiples of a sticker if that value is particularly important to them.</p>
<p><strong>Discussion:</strong> Who would like to share which stickers they chose and why? Think about which stickers you may have chosen 5 years ago... would they be the same? or would they be different?</p>
<p><strong>Conclusion:</strong> There are many different leadership values and leadership styles and we are always evolving as leaders. Feel free to keep these stickers on your laptop or in your office to periodically think about if your values as a leader have changed since doing this exercise.</p>
<p><strong>Supporting materials:</strong> none</p>
<p><strong>Materials needed:</strong> 11 different types of small laptop stickers with enough for each participant to take a couple, pieces of paper in case someone doesn't want to put stickers on their laptop. Sign that shows which laptop sticker is which characteristic</p>
]]></description>
      </item>
    
      <item>
        <title>Hack your Workday, Part 4</title>
        <link>https://www.daydreamsinruby.com/blog/2017-03-01-hack-your-workday-p4/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-03-01-hack-your-workday-p4/</guid>
        <pubDate>Wed, 01 Mar 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In the last part of our series, let's look at how you can assess your progress and easily determine what future goals should be. To recap, in <a href="http://daydreamsinruby.com/hack-your-workday-p1/">part 1</a> we created goals. In <a href="http://daydreamsinruby.com/hack-your-workday-p2/">part 2</a>, we put action items to those goals and established a system for accountability. For <a href="http://daydreamsinruby.com/hack-your-workday-p3/">part 3</a>, we started looking critically and creatively at our workdays and our workday schedule to shove as much learning in there as possible. Now, how the heck do we know if we're actually learning and doing a good job?! And how do we decide when we assess our goals if we should move on, add something new, or replace a current goal?</p>
<p>There are many ways to think about your progress as well as continually jot down things you want to learn more about which can help lead to easily figuring out future goals. This does involved blocking out a small bit of time to reflect but you can do this by leveraging the meetings you currently have to do this. At the end of every sprint, look at the stories you've completed or the pull requests you've reviewed. Determine what you learned during the past sprint. Jot down these items in a separate tab. If you have time, do a little reading about each item in spare moments. If it's not a specific goal, you might not absorb every detail but you'll get a slightly better understanding, and if there is a recurring theme, you can think about making that subject a future goal. If you don't work in sprints, make time to do this every 2 weeks or so. If you remember, you can also do this adhoc... every time you come up against something new, jot it into a note (or whatever system you're using) to read more about it later. I have a running &quot;Things I want to read more about&quot; section with a note for each week and I add topics to it each week. Then when I have a chance, I'll go to that list, start from the top, read a bit and jot down notes in that same file. Do I do this every week? Nope. But it's there and I try to do it at least every couple of weeks without being too hard on myself if this part slips (as long as I'm still accomplishing my larger goals).</p>
<p>You can also use retrospectives to think about you personally. In addition to a team retro, at the end of every week, I take 20-ish minutes to do a personal retro. I learned this technique from a colleague a few years ago. It's simple and to the point. I take out a piece of paper (or a digital note since I like to keep these documented) and I write three sections... Liked, Learned, and Lacked. And then I spend 20 minutes filling it out. I note the things that were great, the things that were not so great, and the things that I learned. I also don't keep this focused on work. Sometimes life is life and sometimes my work week is affected by what's going on in my world. I make note of these things as well because a personal retro for me isn't just a personal work retro, it's a retrospective and chance to reflect on my week as a whole person.</p>
<p>And keep a work notebook. My work notebook is a mix of above, it's my personal retros plus the notes I take on the things I want to learn more about. When I look at the end of every quarter at all of the retro notes and all of my notes on things I've learned, it really helps me assess if a goal fell by the wayside or if I was able to make good progress.</p>
<p>Figure out what tools work best for you. I personally use OneNote or Evernote (you can see more on this in my <a href="http://daydreamsinruby.com/how-I-organize/">how I organize</a>{:target=&quot;_blank&quot;} post). I have 1 note listing all my goals and then additional notes whenever I learn things or take notes. I'll also go old school often and just write things down in notebooks. You can also use alternatives like Trello, ToDoist, Wunderlist, etc. Whatever you use, just use something so that you can look at your goals and action steps frequently.</p>
<p>Reflect at least every six months. I prefer to reflect at the end/beginning of every quarter to determine if I need to change goals, focus on a specific goal more, or just maintain my current course of action. It's important to set a date and put it in your calendar or on your goals list so you don't forget. If you never look at your goals or never update them, then it's just like you don't have any at all.</p>
<p>Finally, most of the examples I've used in this series focus on technical learnings and challenges, but you can use this same technique for soft skills. For example, if you want to get better at communicating or pairing or giving positive feedback, you can use these same tips and techniques to discover opportunities to practice and evaluate during the work day.</p>
<p>I hope you've enjoyed this series and you have a new excitement towards learning and getting the most out of your work day.</p>
<p>Read <a href="http://daydreamsinruby.com/hack-your-workday-p1/">Part 1</a>, <a href="http://daydreamsinruby.com/hack-your-workday-p2/">Part 2</a>, and <a href="http://daydreamsinruby.com/hack-your-workday-p3/">Part 3</a></p>
]]></description>
      </item>
    
      <item>
        <title>Who am I? Drawing myself as a leader workshop</title>
        <link>https://www.daydreamsinruby.com/blog/2017-03-01-leadership-as-a-drawing-workshop/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-03-01-leadership-as-a-drawing-workshop/</guid>
        <pubDate>Wed, 01 Mar 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><strong>Goal:</strong></p>
<ul>
<li>To have colleagues and peers think introspectively about themselves as a leader and end the workshop with a better understanding of who they want to be</li>
</ul>
<p><strong>Trigger:</strong>
Give everyone a large sheet of paper and tell them to spread out around the room. They can grab any writing implements they would like (and can always get up during the activity and grab more/different ones). Explain to them that we're going to spend some time drawing who they want to be as a leader and then we'll discuss it (if they'd like).
<em>Facilitator Tip</em>: In between each direction/step, give a few minutes for the group to really thinking about what they're doing (usually around a full 4-5 which feels like a lot but is really important for critical thinking and allowing people time to think of things that didn't immediately come to them when you first ask each question) ... you can judge the room to see how many people are done vs. still working on their drawing</p>
<ul>
<li>You can start with drawing the outline of a person, it can be as sophisticated or as simple as you'd like.</li>
<li>To the side of the person, anywhere on the page, write the three characteristics you think are most important for a leader to have (a leader is whatever you define it as). Put a box around these words.</li>
<li>Now, let's start filling in the person, think about the whole person. Start with the head, what characteristics do they have? Think about their eyes, ears, mouth, hair, jewlery, accessories, etc.</li>
<li>Now let's look at the rest of the person... what are they wearing... clothing, shoes, again accessories, jewlery, etc.</li>
<li>Think about the tools this person needs and draw those... what are they holding, what are they using. Do they have a bag? if so, what's in it?</li>
<li>Around the person write down all of the things about them, what impacts them as a leader and their leadership style?</li>
<li>Add anything else to your picture that you feel represents who this person is as a leader.</li>
</ul>
<p><strong>Discussion:</strong>
<em>Facilitator tip:</em> Bring everyone together (with their pictures) into a circle</p>
<ul>
<li>Who wants to share what they drew and why they chose to draw what they did?</li>
<li>What aspect was the most difficult to think about/draw items for?</li>
<li>Now that you are seeing other peoples, what do you wish you had thought of/added to your drawing?</li>
<li>How is this similar or different from the leader you are today?</li>
<li>What are some concrete steps you can take to become the leader in the picture... the one you want to be?</li>
</ul>
<p><strong>Conclusion:</strong>
We'll go around the circle and say the 1 leadership characteristic based on your drawing that you want to start focusing on immediately.</p>
<p>(after doing that) Feel free to hang your drawings up, keep them somewhere, and refer to them periodically as you're coming up with your goals for yourself and for you on the team.</p>
<p><strong>Supporting Materials:</strong>
None</p>
<p><strong>Materials Needed:</strong></p>
<ul>
<li>Large pieces of paper</li>
<li>A variety of writing utensils including markers, crayons, colored pencils, and pens
_ If you want to get REALLY crafty, you can also use different materials, construction paper, etc. in which case you also need glue</li>
</ul>
]]></description>
      </item>
    
      <item>
        <title>Hack your Workday, Part 3</title>
        <link>https://www.daydreamsinruby.com/blog/2017-02-20-hack-your-workday-p3/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-02-20-hack-your-workday-p3/</guid>
        <pubDate>Mon, 20 Feb 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Ok, so in <a href="http://daydreamsinruby.com/hack-your-workday-p1/">part 1</a> we learned all about goals and the importance of goal setting. Then in <a href="http://daydreamsinruby.com/hack-your-workday-p2/">part 2</a> we put action steps to those goals to accomplish them and found some friends/colleagues/peers/mentors who could help hold us accountable. Now, let's accomplish those goals within the confines of our workdays!</p>
<p>First, think about your day to day tasks. If you're already a professional developer, you likely work on stories (or cards or tickets, depending on what project management tool your team uses). Keep a close eye on which stories relate to your learning goals. As much as you can try to accomplish your goals while accomplishing your work. If you can, the best thing to do is pick up or assign yourself to the story most related to your learning goals/goals. For example, if you want to improve your JavaScript, pick up the story that you know has some simple JavaScript tasks (at first) and then as you learn more, pick up the stories that involve more complex JavaScript. At first you might only pick up a story that involves reading and making a small change, but then as you make strides to accomplishing your goal, you might pick up a story that forces you to write JavaScript from scratch or refactor more complex JavaScript. If you can't pick up the story, pay attention to who does pick it up and ask if they would be willing to pair on it. You might not have control over which tasks you accomplish but if you can pair, even for a part of the story, you'll be learning more about what you're trying to accomplish. If your team pairs a lot, make sure to gradually drive more and more in order to ensure the lessons are sinking in. Finally, if you can't pick up the story and you can't pair on it, make sure to read the pull request closely once it's up. Regardless of whether the PR is open or closed, you can read through what's going on and ask questions on parts you don't know much about or don't understand. If you have a team that won't support the questions you're asking, then jot down methods, syntax, etc. that you want to understand better and look them up when you have a chance.</p>
<p>Second, think about which of your goals are slightly broader, for example, they might touch on more stories. Whereas for a goal related to JavaScript, you may need to really try to pick up JavaScript-related sotries, think about a goal related to testing. You could be learning about testing for every story you pick up and every task you accomplish. Start a story by looking at the tests... do they exist? What do you think of them? Compare them to the file they are testing. Think about why each method was tested and how it was tested. Really think through the foundation that's there. If there aren't any tests, great!! Look at a similar file (if oen exists) to see how tests were written there. If possible, test drive the story you're writing. If your company doesn't allow that, hopefully they at least allow you to add tests afterwards. And specifically call out your test files in your PR. Ask for feedback specifically on your specs and spec file. Depending on how your team is at giving feedback, try to ask questions you're likely to get good answers to. You may need to come up with more concise, specific questions to get the feedback you need to learn more. You will likely be learning lots of different things in every task you complete, but I've found when I have limited time, I can't absorb everything so I learn a bunch but I make sure I completely understand and pay a little more attention to the items related to the goals I've set.</p>
<p>Lastly, think about what additional resources you can use as time-fillers and try to have these queued up in tabs or bookmarks. You likely won't be busy every second of every day. Often, if you're stuck on a task and no one is free to assist, or you're waiting for code review, etc. you can often find yourself with 30 minutes or little bits of time here and there to learn. Find the folks that talk about you're learning goals on confreaks, figure out some good blogs to check out or blog posts to read when you have time. I honestly don't recommend books because if you're trying to learn during work and just have bits and pieces of time here and there I find it difficult to follow and keep momentum going with a book, but if it works for you then have a book handy as well! Find some not-super-time-consuming code exercises (like Project Euler or old code challenges from technical interviews) that you can use to practive. Discover a podcast or 2 that you can listen to when you take a walk or are driving somewhere and note the episodes that relate to what you're trying to be more proficient at.</p>
<p>In summary, you can incorporate all this learning and complete your goals within the confines of your workday if you stay focused and creative.</p>
<p>Read <a href="http://daydreamsinruby.com/hack-your-workday-p1/">Part 1</a>, <a href="http://daydreamsinruby.com/hack-your-workday-p2/">Part 2</a>, and <a href="http://daydreamsinruby.com/hack-your-workday-p4/">Part 4</a></p>
<p>In Part 4, you'll learn how to assess if you're achieving the goals you've set and how to make time, without making time, to figure out what you've accomplished and naturally determine what your next goals may include.</p>
]]></description>
      </item>
    
      <item>
        <title>Hack your Workday, Part 2</title>
        <link>https://www.daydreamsinruby.com/blog/2017-02-10-hack-your-workday-p2/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-02-10-hack-your-workday-p2/</guid>
        <pubDate>Fri, 10 Feb 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><a href="http://daydreamsinruby.com/hack-your-workday-p1/">You've got your goals</a>! You've put some hard work into thinking them through and making sure they align with how much time you have and what you want to learn. So what now? Well, we're still in the planning and prep phase, but trust me it'll pay off once you start working.</p>
<p>The next step is to add action steps to each of your goals. You've got broad goals identified and a timeframe in which to complete them. This next step is all about identifying how you will measure success and what you need to do in order to be successful. I usually do this by just adding a few bullet points below each goal outlining the action items. Think through the following questions:</p>
<ul>
<li>
<p>How will I know if I'm making progress?</p>
</li>
<li>
<p>What are the smaller things that need to be learned or done in order to accomplish this goal?</p>
</li>
<li>
<p>What is my plan for breaking this goal down into smaller parts in order to accomplish each of those one step at a time?</p>
</li>
</ul>
<p>Goals are larger and broader. If you try to tackle them without a plan and without being able to celebrate small wins, it'll be rough going.</p>
<p>Here are some examples based on the example goals from the last post:</p>
<ul>
<li>
<p>Write a useful script</p>
<ul>
<li>Research common scripts</li>
<li>Determine 3 scripts that might be both helpful and easy</li>
</ul>
</li>
<li>
<p>Understand the basics of relational data modeling and relational data</p>
<ul>
<li>Understanding datatype structures of postgres (char vs. text vs hstore)</li>
<li>When given real world objects, how do you UML model that (ie- people)</li>
<li>Normalization up to the third level (read about)</li>
<li>Practice some SQL statements</li>
<li>Joins, different kinds</li>
<li>Unions</li>
<li>Sub queries</li>
<li>Working with a GUI for visualization</li>
</ul>
</li>
<li>
<p>Continue to improve in testing and learn more about testing concepts like stubbing, mocking, and message chains</p>
<ul>
<li>Test setups from scratch</li>
<li>refactor and evaluate current tests</li>
</ul>
</li>
<li>
<p>Give constructive feedback</p>
<ul>
<li>Read at least 5 more PRs every week than I currently am</li>
<li>Make comments on at least half of the PRs I read</li>
<li>Determine what constructive feedback looks like via asking teammates, reading blog posts, etc.</li>
</ul>
</li>
</ul>
<p>Finally, show these new, beautiful, wonderful goals to a few people. You need some allies to help keep you accountable and motivated. Show these learning goals to a friend, a manager, a peer, etc. and ask if they'd be okay with you checking in with them about it every ince in a while.</p>
<p>Read <a href="http://daydreamsinruby.com/hack-your-workday-p1/">Part 1</a>, <a href="http://daydreamsinruby.com/hack-your-workday-p3/">Part 3</a>, and <a href="http://daydreamsinruby.com/hack-your-workday-p4/">Part 4</a></p>
]]></description>
      </item>
    
      <item>
        <title>Hack your Workday, Part 1</title>
        <link>https://www.daydreamsinruby.com/blog/2017-02-01-hack-your-workday-p1/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-02-01-hack-your-workday-p1/</guid>
        <pubDate>Wed, 01 Feb 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Before becoming a parent, I had oodles of time... of course I didn't realize this but it was true. When I was learning to code, I spent hours and hours and hours programming. In the zone? No problem, I'll just keep going. Want to catch up on a few conference videos over the weekend? Sounds great. Can't go to a conference but want to know what's covered? I'll just keep my eye on Twitter during the conference. I look at this freedom now and laugh... like a histerical I-have-so-little-free-time now that thinking about all that free time is funny. I've also felt more frustration at the community that I know and love. People the say get involved in open source, code every day, just do more on the weekends, etc. I found that when attending conferences or reading about ways to continue leveling up, the suggestions always seemed aimed at folks with a significant amount of free time.</p>
<p>I had my son when I was only 10 months into my first full-time developer position after doing a career transition and teaching myself to code. After having my kiddo, I needed to figure out how the heck I was going to keep up and continue learning. While having a child is what sucks all my time (in the most wonderful way possible), I also started to understand other folks. The people that have larger families, are taking care of older or sick relatives, ones that work multiple jobs... copious amounts of free time is NOT always an option. This series will provide some tips and tools to making the most of your work day because in this industry, we've all gotta be learning all the time.</p>
<p>Tip #1 is to create learning goals. You can't focus your desires unless you know what you want to learn. Think critically about these goals. They should be achievable within the timeframe you're setting for yourself, actionable, measureable, and concrete. This is SUPER hard to do in software development because you usually can't set as a goal to build a specific feature, for example, especially if you're looking at accomplishing these goals within the context of your work day. Remember, you also aren't always in charge of your destiny at a company. They could switch what project you're on, change your priorities, etc. so banking on a goal related to a specific feature is challenging. Make sure your goal is also a little flexible and will work no matter where you are. Not to mention the fact that creating measurable goals is challenging.</p>
<p>Make sure to develop goals within whatever timeframe you're determinig for yourself. My personal style is to write goals at the beginning of every year and revisit/revise them quarterly. I try to make most of my goals achievable within a quarter, but there will often be 1 or 2 of them that go a little longer than that.</p>
<p>Measurable goals are tough within software development because there are very few quantitiative measurements you can commit to. For example, you can't say how many lines of code you'll write or how many features or refactors you'll complete. When determining a goal, also think about how you might measure your progress and determine success. We'll talk about this a little more in a future post as well.</p>
<p>Don't write too many goals. I usually try to keep my list to around 5, some smaller and some bigger. Remember, you're confined to the work day and want to make sure you're getting all your work done so don't overcommit.</p>
<p>A great resource to read through is learning about SMART goals. These goals are specific, measurable, asignable, realistic, and time-related. You can read more about it <a href="https://en.wikipedia.org/wiki/SMART_criteria">here</a> or by Googling &quot;SMART goals&quot;. A lot of these posts provide some really helpful tips for making sure you can actually assess success or failure of a goal.</p>
<p>Okay, so here are some examples, without the additional action items which we'll cover in the next post:</p>
<ul>
<li>Learn more about APIs</li>
<li>Ask at least 100 questions per week</li>
<li>Write a useful script</li>
<li>Increase my confidence level as a developer</li>
<li>Understand the basics of relational data modeling and relational data</li>
<li>Continue to improve in testing and learn more about testing concepts like stubbing, mocking, and message chains</li>
<li>Give constructive feedback</li>
</ul>
<p>Try writing a few yourself and see how it goes.</p>
<p>Read <a href="http://daydreamsinruby.com/hack-your-workday-p2/">Part 2</a>, <a href="http://daydreamsinruby.com/hack-your-workday-p3/">Part 3</a>, and <a href="http://daydreamsinruby.com/hack-your-workday-p4/">Part 4</a></p>
]]></description>
      </item>
    
      <item>
        <title>Retrospectives: Tips and Reasons</title>
        <link>https://www.daydreamsinruby.com/blog/2017-01-21-retrospectives/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-01-21-retrospectives/</guid>
        <pubDate>Sat, 21 Jan 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Retrospectives are an important part of any engineering culture. Whether your team is actively working on sprints and iterations or just periodically using the time to check-in, allowing teams to have set times where they look back and reflect is vital for team healthy and employee morale. One of the things I like most about retrospectives is that there are a variety of methodologies and ways you can run them. For example, if you are a small team of developers mostly working on individual projects, you can run retros together to reflect on individual challenges of your project and incorporate that into thoughts and reflections on the team culture as a whole. Or if your team is large enough, you can run regular retrospectives just with your immediate team.</p>
<p>There are also literally hundreds of different methodologies and ways to run retrospectives. I suggest rotating who leads them (which also provides a valuable training opportunity), and, if possible, allow whoever is running the retrospective to pick what methodology is used. Often times I think teams will find a methodology that works for them and that will be chosen regardless of who's running it, but it's nice to allow for the option to &quot;mix it up&quot; a little bit. My two favorite sites for retrospective ideas are <a href="http://www.funretrospectives.com/">here</a>{:target=&quot;_blank&quot;} and <a href="http://tastycupcakes.org/">here</a>{:target=&quot;_blank&quot;}.</p>
<p>Finally, think about how to make retrospectives remote-friendly. For example, use google docs or trello boards, use collaborative whiteboards, have everyone log in from their own computer, etc. Just because a methodology is presented with post-it notes or isn't a remote-friendly format, doesn't mean you can't change it to be so.</p>
<p>I think one of the most important aspects of a retrospective is that teammates respect one another and respect what each individual is saying. If you have a &quot;bad influence&quot; or detractor on your team, one way to help ensure they respect the other teammates is to use one retrospective to &quot;create a contract&quot;. This often happens at the beginning of group experiences when you want expectations to be set for how the group will behave but don't want to be the manager or individual that says &quot;here are the rules&quot;. In this approach, you start by saying that you want these sessions to feel as comfortable and productive as possible and so it's important the team comes up with the rules they, as a group, want to follow. Generally something about listening and respect will be suggested by someone in the group and agreed upon by the rest.</p>
<p>I'll be posting more tips like this and full outlines of retrospectives and learning workshops, so keep a lookout.</p>
<p>Happy retro-ing!</p>
]]></description>
      </item>
    
      <item>
        <title>How I organize</title>
        <link>https://www.daydreamsinruby.com/blog/2017-01-14-how-I-organize/</link>
        <guid>https://www.daydreamsinruby.com/blog/2017-01-14-how-I-organize/</guid>
        <pubDate>Sat, 14 Jan 2017 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I am a busy lady. I've got a husband and am the dedicated mom to a toddler son. I speak at conferences. I run a meetup. I help organize other meetups. I meet weekly with a mentor. I'm on the RailsConf program committee. I'm a full time developer. I have run the ruby and rails scholar/guide program. I'm part of an Elixir book club. I'm a part of a social book club. I am NOT a senior developer. I keep my inbox clear and clean. Man, i'm almost exhausted just writing all of those things.</p>
<p>This is a lot. Really, almost a crazy amount of stuff to be doing on a regular basis. If I wasn't organized, I would probably go crazy. So, I thought i'd share how I juggle all these things and make sure no balls get dropped.</p>
<p><a href="https://tweetdeck.twitter.com/">Tweetdeck</a>{:target=&quot;_blank&quot;}: Twitter is an important part of how I learn and find interesting things to read. I use tweetdeck to organize my twitter streams and people I follow into specific categories and then I have them listed in order or priority. There are some streams I check twice a day, while others I just check once a week or when I have time. It helps me keep focus on a specific subject and stay in context amidst the twitter noise. It also helps me not miss important announcements like conferences cfp openings or meetups and keep up with friends.</p>
<p><a href="https://evernote.com/">EverNote</a>{:target=&quot;_blank&quot;}: This is now a legacy system for me because of their changed pricing, but evernote was great when I used it. It's flexible and searchable. You can even take pictures of things you've written by hand and that will also be searchable (sort of... depending on how legible your handwriting is). You can also organize things into notebooks and you can open up notes in separate windows enabling you to look at multiple notes at once. I use evernote to keep track of to-do lists, thoughts, blog post ideas, conference talk proposals (before they're fully formulated), code notes, and terminal commands or screenshots after walking through code so I can look over it again in the future. The downside is the new free plan limits you to 2 devices and there are always syncing issues.</p>
<p><a href="https://www.onenote.com/">OneNote</a>{:target=&quot;_blank&quot;}: I switched to OneNote when EverNote changed to having their service only available on 2 devices. OneNote is pretty good. The same syncing issues exist in OneNote as do in EverNote. Additionally, the thing sthat really drives me crazy is that OneNote is constantly asking me to sign in in order to sync. But there are some great features. Besides being able to use it for the same purposes as EverNote above (ie- idea management, notebooks, code notes, etc.), but within a notebook, these items can show up as tabs and within tabs you can have many pages. So, for example, I create a list of items I'd like to cover in my weekly 1:1s. I keep a 1:1s tab in my work notebook and then under the tab, I have a &quot;page&quot; for every week. It's easy to find the notebook/tab/page when the meeting rolls around or when I have an item to add to it. The major downside to OneNote is that you can't open up tabs, notes, or pages into separate windows so you can only look at one note at a time. In terms of note-taking/to do type applications, I've also heard good things about <a href="https://en.todoist.com/">todoist</a>{:target=&quot;_blank&quot;}, <a href="https://www.wunderlist.com/">wunderlist</a>{:target=&quot;_blank&quot;}, and, if you've got some $$, <a href="https://www.ulyssesapp.com/">Ulysses</a>{:target=&quot;_blank&quot;}.</p>
<p><a href="http://airmailapp.com/">Airmail</a>{:target=&quot;_blank&quot;}: I'm a big believer keeping up with email. Maybe this is an irrational stresser, but when I've got that red number hovering, I feel like it's something that NEEDS to be taken care of (this is also why I often close my email or hide the app bar when I'm programming.) Airmail allows you to get all of your inboxes in one place. I currently have five email addresses and if I had to go to separate places for all of them, I'd go crazy. The other nice thing is that you can easily file specific emails into folders in a different email address and you can get an email at one address but reply from another which I find really convenient. One tricky part is that any time you need to create a new folder, you need to go into the interface to create it and then re-map the account. Another is that you need to be careful to make sure you're emailing and responding from the account that you want to be.</p>
<p><a href="https://github.com/">Github repos</a>{:target=&quot;_blank&quot;}: Github is great for a variety of reasons. I use public and private repos for the same reason others do... to keep track of projects and things I've worked on codewise. One thing that's a little unique, I think, is that I use a private repo to keep track of conference talk proposals. For unique conference proposals, I create a folder for that conference and keep any proposals I've submitted under that conference's folder. For proposals that are more standard and the basic information like abstract and details, I just keep the proposal files in root. I also have a file for my bio and the list of conferences I've proposed to or want to propose to with the date of the conference, location, and when the proposal is due. The BIGGEST win for this approach is that when I'd like feedback, I can just create a PR and invite a few people to review it. They can review in one place and see each other's comments to agree or disagree.</p>
<p><a href="https://www.google.com/calendar">Calendars</a>{:target=&quot;_blank&quot;}, a few of them: If you think five email accounts are crazy, wait until I tell you how many calendars I look at.... it's eight. A few works ones, a few personal ones including both one that I share with my husband and one that is just my personal one. Calendars are great and I basically live my life by them. My work calendar tends to be pretty succinct and simple but my personal calendars are a bit more complex. Mostly, my calendar with my husband has EVERYTHING. It's how we know who's doing what for which evenings (we each get at least one night a week toddler-free) which allows us to figure out which nights are best to cook (we still cook 4ish nights a week), in addition to things like doctor appointments, conferences, travel, and more. The most helpful aspect of calendaring is using it as a reminder system. If there's something that needs to be done in a few months (like an appointment to be made) or a person I need to follow up with, I set it in my calendar and am reminded to do so. Finally, since I work from home I also use my personal calendar to remind myself to take a walk a couple times a week.</p>
<p><a href="https://www.one-tab.com/">OneTab</a>{:target=&quot;_blank&quot;}: OneTab is a great chrome extension that keeps me focused. The premise is simple. If you have lots of tabs open, you can pull them all into one tab. When you pull everything into one tab, it organizes all the tabs/links into a group and then you can close, re-open, and move around the tabs. It's really helpful. I do, however, make sure that once I hit 90 tabs, I take some time to prune them or go through them and read the things.</p>
<p>To-Do lists: I LIVE by my to do list. I used to do it pen and paper but ultimately decided to migrate it to a virtual platform so that it would sync and so that I could add to it regardless of where I was and what piece of tech I had with me. My to do list is fairly specific which is why it's been difficult for me to use some of the other options I metioned earlier. My to do list is broken down by day of the week. At the end of every day, I look at the list for the next day, decide what didn't get done from that day and decide what day i'll move it to. Every weekend I look at every day of the upcoming week and I make sure things are balanced... days i'll have more meetings and therefore might be choppy, I'll put some additioanl smaller tasks because I likely won't go heads down as much, and days where I'm mostly free, I limit my to do list items so I can focus on code. I also look at evenings and make sure I'm only making a day's to do list as long as the amount of time I have in that day. So, for example, if the daytime AND evening look pretty packed, I try not to have more than 4-5 items on the to do list and i'll balance it by having a few more things on the to do list for different days. Now, here's where my to do list doesn't fit the mold... I have a &quot;weekend&quot; section and an &quot;other&quot; section. The weekend section is often things I think about during the week that are personal and need to be taken care of over the weekend. The other section are longer term things... things that don't need to happen this week or next week, but maybe a month from now that I don't want to lose track of. For example, recently I've been thinking about purchasing a new keyboard. I don't want to put this on the calendar because it's not really a &quot;remind me to do this at some point&quot; type of to-do. It's a &quot;when the time seems right and I've got some extra funds, pull the trigger on this&quot;. Occassionally if something has remained on &quot;other&quot; too long, i'll try to filter it into the to do list for that week or the following one if it makes sense. Finally, there are a few recurring items on the to do list, like a personal retro every Friday (more info on that below).</p>
<p>Personal retros: Being busy can be really challenging. In order to make sure you're accomplishing and not falling into the trap of being busy for busy sake, you need time to reflect. Every Friday I take 30 minutes to do a personal retro. It's super simple and I keep all the notes in a OneNote notebook. I look at the previous week and think about what I've LIKED, what I've LEARNED, and whats LACKED. This is not just focused on work things but should definitely include work stuff (especially the learned part so you can keep track of what you're learning).</p>
<p>Time blocking for specific types of tasks: The last part of the puzzle is minimizing context switching. I can't code for 30 minutes and then read a book and then answer some emails and then make a haircut appointment, etc. etc. If I'm going to have a lot of meetings, I put lots of small tasks on that day... knock out a few blog posts, think about solutions for a committee I'm on, tweet to recruit speakers for the meetup, etc. Which also means that those tasks are taken care of for the days I do have pretty clear and on those days I can really go heads down and focus focus focus on technical challenges. Even within the smaller tasks, I try to limit context switching. If I know I have a meeting related to a specific topic, I'll try to also accomplish related to do list items.</p>
<p>None of these tools are perfect. There are trade-offs to each one. And sometimes I still go a little crazy or feel a little overwhelmed. These systems took a bit of time to put in place initially, but now that they're established, they've become lifesavers for me and my busy life. I'd love to hear your favorite apps for organizing!</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads</title>
        <link>https://www.daydreamsinruby.com/blog/2016-01-13-interesting-reads/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-01-13-interesting-reads/</guid>
        <pubDate>Wed, 13 Jan 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I love reading interesting posts on various topics. There are a lot of great blogs and great writers out there. The last few weeks, I've read some particularly interesting pieces about soft skills and growth and development as a programmer. I wanted to highlight a few of those here.</p>
<p><a href="http://www.tablexi.com/developers/xi-to-eye-the-sticky-note-game/">How we use sticky notes for professional development</a> - This is a great post about creating goals and accountability to keep individuals focused and moving forward. The thing I really love about this audio post is that it is an interactive methodology to workshop through these thoughts.</p>
<p><a href="https://medium.com/@skamille/how-do-individual-contributors-get-stuck-63102ba43516#.diqf37fah">How individual contributors get stuck</a> - A great piece by Camille Fournier about paying attention to individuals. This is a great list of things to think about if you manage a team or do 1:1s. Additionally though, as a colleague, if you are in a company that has little structure or management, this is a great list of things to recognize in colleagues in order to encourage and motivate one another.</p>
<p><a href="https://hbr.org/2016/12/stop-setting-goals-you-dont-actually-care-about">Stop setting goals you don't actually care about</a> - Got this one from <a href="https://twitter.com/kwugirl">KWu</a> posting it on twitter. Goal setting is really hard (and I think a lot of people don't even really do it) but it can be super helpful in moving yourself and your career forward. This is a good piece on making sure you are creating goals that work for you and that you want to work for.</p>
<p><a href="https://www.kennethreitz.org/essays/the-reality-of-developer-burnout">The reality of developer burnout</a> - Yes, we all want to advance professionally but it's also important to take care of ourselves. This is a good, short piece about recognizing when things are going wrong and what to do to change it and help yourself.</p>
<p><a href="https://www.kevinlondon.com/2015/05/05/code-review-best-practices.html">Code Review best practices</a> and <a href="https://hypothes.is/blog/code-review-in-remote-teams/">code review in remote teams</a> - Two posts that really break down good code reviews. I'm a big proponent of constructive feedback in code reviews as well as making sure you're talking about the positives of the code as well. These two reads give tangible steps and things to keep in mind when reviewing code. It's hard to keep these things in mind when you're in the midst of reviewing a pr so the next time you do, after reviewing, open up one or both of these and check out how your comments align with these best practices.</p>
]]></description>
      </item>
    
      <item>
        <title>RubyConf 2016 writeup</title>
        <link>https://www.daydreamsinruby.com/blog/2016-11-21-rubyconf-2016-writeup/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-11-21-rubyconf-2016-writeup/</guid>
        <pubDate>Mon, 21 Nov 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I was lucky enough to be a speaker this year at RubyConf 2016. You can check out my talk, “Even the Justice League Works Remotely” <a href="http://confreaks.tv/videos/rubyconf2016-even-the-justice-league-works-remotely">here</a>{:target=&quot;_blank&quot;} on Confreaks, see the slides <a href="https://speakerdeck.com/asheren/even-the-justice-league-works-remotely">here</a>{:target=&quot;_blank&quot;}, and the related blog post <a href="http://collectiveidea.com/blog/archives/2016/11/21/even-the-justice-league-works-remotely">here</a>{:target=&quot;_blank&quot;}. And while that was really exciting, the more important part is that I got to see old friends, make new ones, and learn a WHOLE lot. Here are some of the highlights…</p>
<p>In Matz’s <a href="http://confreaks.tv/videos/rubyconf2016-opening-keynote">Keynote</a>{:target=&quot;_blank&quot;}, there were some really interesting things discussed. Matz focused on the community, talking about keeping Ruby relevant through innovation and the strength of the community. He also introduced guilds which is a new concurrency model. Every object belongs to a guild and you can transfer object between guilds. Guilds run on independent threads and every guild is parallel. This seems like an interesting idea that will continue to evolve in the near future. The other thing that was discussed are type interfaced and a new type of static analysis that will be coming that will be like structural typing with type inference… words that i’m excited to learn more about.</p>
<p>I saw an amazing talk by <a href="https://twitter.com/chrisarcand">Chris Arcand</a>{:target=&quot;_blank&quot;} called <a href="http://confreaks.tv/videos/rubyconf2016-deletion-driven-development-code-to-delete-code">Deletion Drive Development</a>{:target=&quot;_blank&quot;}. I made a decision a couple minutes into the talk to stop taking notes and just follow along. It was a super interesting talk about figuring out what pieces of code are no longer being used, looking at edge cases and the different pieces you need to look at in terms of looking at the Ruby parser, processing the Sexpression, etc. The slides are excellent and the talk is really good. Highly recommended.</p>
<p><a href="http:///www.twitter.com/jeffcohen">Jeff Cohen’s</a>{:target=&quot;_blank&quot;} ’s talk on <a href="http://confreaks.tv/videos/rubyconf2016-computer-science-the-good-parts">CS-The Good Parts</a>{:target=&quot;_blank&quot;} finally explained to this non-cs degree holder what a linked list is and what a binary tree is so that was pretty awesome.</p>
<p><a href="https://twitter.com/mediaremedial">Tara Scherner de la Fuente</a>{:target=&quot;_blank&quot;}’s <a href="http://confreaks.tv/videos/rubyconf2016-you-have-the-empathy-of-a-goat-documenting-for-the-user">keynote</a>{:target=&quot;_blank&quot;} had some really great points. First, a top to use  Docs Doctor which is apparently now <a href="https://www.codetriage.com/">Code Triage</a>{:target=&quot;_blank&quot;}. My favorite part were her tips for writing… just do it, write a readme, write installation instructions or do the second draft of a thing. To make it good you want to use simple sentences, no jargon, think about the context and user, write your way to the main point and then move the main point to the top, and use specific examples.</p>
<p><a href="https://twitter.com/indirect">Andre Arko</a>{:target=&quot;_blank&quot;}’s talk on <a href="http://confreaks.tv/videos/rubyconf2016-from-no-oss-experience-to-the-core-team-in-15-minutes-a-day">Contributing to open source</a>{:target=&quot;_blank&quot;} gave a very honest look at the tradeoffs to consider when working on open source projects and actually acknowledged why some people legitimately can’t spend the time contributing to open source so applause for that. The part of the talk I liked the most was the overall message that you should do the thing that has the tradeoffs you’re happy with.</p>
<p><a href="https://twitter.com/thejonanshow">Jonan</a>{:target=&quot;_blank&quot;}’s <a href="http://confreaks.tv/videos/rubyconf2016-building-hal-running-ruby-with-your-voice">talk</a>{:target=&quot;_blank&quot;} about using alexa and hal to deploy was really great. I learned a ton of new concepts and it was a lot of fun to watch. I also want to do a shout out to <a href="https://twitter.com/tehviking">Brandon</a>{:target=&quot;_blank&quot;}’s <a href="http://confreaks.tv/videos/rubyconf2016-the-long-strange-trip-of-a-senior-developer">talk</a>{:target=&quot;_blank&quot;} about becoming a senior developer was also really good. He spoke about 12 traits of senior developers and different levels that folks will be at <strong>for that specific characteristic</strong> when they’re junior, mid, senior, or beyond.</p>
<p>Lastly, the talk I think I took the most notes at was <a href="https://twitter.com/practice_cactus">Stella</a>{:target=&quot;_blank&quot;}’s talk about <a href="http://confreaks.tv/videos/rubyconf2016-the-little-server-that-could">servers</a>{:target=&quot;_blank&quot;}. This is actually something that has come up recently and an area I wanted to level up in so it was perfect. She talked about sockets, listening for requests, handling requests, and closing a socket. There was great information about stream sockets and datagram sockets, stepping through how a server works and common problems or issues.</p>
<p>All in all, as usual, RubyConf was a great time and I continue to love how friendly, welcoming, and nice our community continues to be.</p>
]]></description>
      </item>
    
      <item>
        <title>Database Cleaner</title>
        <link>https://www.daydreamsinruby.com/blog/2016-11-20-database-cleaner/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-11-20-database-cleaner/</guid>
        <pubDate>Sun, 20 Nov 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A few months ago, I was writing the first feature spec for a new application at <a href="http://www.collectiveidea.com">Collective Idea</a>{:target=&quot;_blank&quot;}. It led to the discovery of needing to add Database Cleaner! Here's the blog post I wrote up afterwards on <a href="http://collectiveidea.com/blog/archives/2016/10/31/troubleshooting-feature-specs">Troubleshooting Feature Specs</a>{:target=&quot;_blank&quot;}.</p>
]]></description>
      </item>
    
      <item>
        <title>New Girl on the Block</title>
        <link>https://www.daydreamsinruby.com/blog/2016-10-15-new-girl-on-the-team/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-10-15-new-girl-on-the-team/</guid>
        <pubDate>Sat, 15 Oct 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>First and foremost, I am excited to officially announce that about a month ago I
started working at <a href="http://www.collectiveidea.com">Collective Idea</a>{:target=&quot;_blank&quot;}.
Collective Idea is made up of an awesome set of folks based in Michigan with a handful of
us working remotely around the country. The company impressed me from the get-go
with their interview process focused around pairing and getting to know me as an
individual, the folks on their team that constantly highlighted the importance
of work/life balance and provided numerous examples of when the company ensured
that people and their families came first, and their desire and openness to
individuals taking iniative to step up and see areas of improvement within Collective
Ideas processes and structure.</p>
<p>I accepted an offer at Collective Idea a full three weeks before my actual start date.
At first I thought that was great! I would actually have some time and space to
get things done! And at first it was great... until I started thinking about my
new position. That's when the doubts started creeping in... will they fire me in the
first 20 minutes of my first day? What if they're disappointed in my abilities? What
if I can't deliver what they're hoping I can? Not to mention the fact that I've never
worked in a consultancy before so didn't really know what to expect.</p>
<p>Well, I'm happy to say that I've been at the company for over a month now and I'm still
employed! I <em>think</em> I'm adding value and hope that I'm seen as a good hire. But that
got me thinking... being new is hard! I honestly (and almost laughably) thought that
after I had my first developer position, all other job starts would just happen
without issue or concern. But there are new and different concerns you have when starting
another developer position. For me, these concerns were things like, what would I
be expected to know? How quickly should I be able to pick up new things? What is my
role/responsibility as a more experienced developer outside of a technical capacity?
How many questions are ok to ask? How much time should I allow to learn things? and
the list sort of goes on.</p>
<p>As a new person on a team, here are the things I found myself doing:</p>
<ol>
<li>
<p>Ask a lot of questions, but try to learn who to ask which questions to.
This is slightly more complicated at Collective Idea because there are no managers, PMs,
etc. Everyone works as a team, recognizes what work needs to happen where and steps
up to do it. Therefore, I ask technical questions to people on my project team (and sometimes outside of my team depending on availability). I ask company process questions to either a
few of the people who did my initial introductory onboarding or my 1:1 peer. And I ask
company technical questions to learn about preferences like Rubocop, etc. in our
general channel. By asking questions to a variety of people in a variety of places, I'm
also able to connect with different people at the company and not bother one person
all the time.</p>
</li>
<li>
<p>Try to pair.
This is definitely a personal preference but I love pairing and I know that pairing
is the fastest way for me to ramp up and learn, especially now that I'm working on
greenfield applications, something I haven't done in years. I'm sometimes worried
about asking in a general room to pair so it's also been really helpful to have a handful
of other folks in the company outside of my project ping me to offer to pair. In general though,
pairing is encouraged and I've found myself pairing a majority of the week which
also helped me quickly build bonds with colleagues, especially as a remote developer.</p>
</li>
<li>
<p>Get a handle on the slack channels.
At some companies there are literally hundreds of slack channels so this can be difficult
but at ours, the number isn't so overhwelming. It's really nice to scroll through them
and pick a handful, as well as ask for recommendations, to learn where some of the
off-topic banter takes place.</p>
</li>
<li>
<p>Learn the company vibe.
As a person who's got a signficant background in management and company culture, I
always feel like that's where I can provide value fastest... and I ALWAYS want to try to
prove myself as quickly as possible, but this often isn't the right approach. As
a new employee, I need to understand the company vibe and flow, the individuals there,
how things work, and how people interact in order to effectively make suggestions
or contribute new thoughts and ideas down the road.</p>
</li>
<li>
<p>Get some face time.
This tip is particularly important for those working remotely but if you're working remote, try
to get some face time in. The first week I was at Collective Idea, I mentioned in our
daily standup, and on slack, that I would love to do get-to-know-you hangouts with
anyone who was interested. A few people took me up on it and it was great to get to know
and a handful of people on the team. Additionally, I was lucky because a company retreat was already
planned for three weeks after I started which was the best. Since a majority of
the company works from an office in Michigan, it was really great to get out there
to visit, chat, and get to know everyone. While I don't think working from an office every
day is necessary, face time with individuals and building that rapport is a must.</p>
</li>
</ol>
]]></description>
      </item>
    
      <item>
        <title>What I&#39;ve been up to</title>
        <link>https://www.daydreamsinruby.com/blog/2016-10-15-upcoming-talks/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-10-15-upcoming-talks/</guid>
        <pubDate>Sat, 15 Oct 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Well, I certainly have been remiss at updating the blog but it is for good reason!
Life has been crazy. In addition to starting a new job at <a href="http://www.collectiveidea.com">Collective Idea</a>{:target=&quot;_blank&quot;} (blog post coming soon), I have also had the honor of recently speaking at
the inaugural <a href="https://chiwomenintech.wordpress.com/">Chicago Women in Tech conference</a>{:target=&quot;_blank&quot;} and getting accepted
to speak at <a href="http://www.rubyconf.com">RubyConf</a>{:target=&quot;_blank&quot;} in November. A very exciting and
busy fall season for me but I promise to try to be better at updating more often.</p>
]]></description>
      </item>
    
      <item>
        <title>Conference Childcare</title>
        <link>https://www.daydreamsinruby.com/blog/2016-11-13-childcare-at-tech-conferences/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-11-13-childcare-at-tech-conferences/</guid>
        <pubDate>Sun, 13 Nov 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A few months ago, I brought Devin to <a href="http://www.thestrangeloop.com/index.html">Strange Loop</a>{:target=&quot;_blank&quot;} in St. Louis. While I did a summary of the conference, I never linked to a few other posts I wrote specifically about the experience of bringing him. Devin loved his first tech conference and, as a mom traveling solo with him, I learned a lot about what information I need from organizers as well as what I as a parent need to think about.</p>
<p>Those posts weren't up here but instead were posted in conjunction with the Leaky Abstractions group on Medium. Here are the links to those posts...
<a href="https://medium.com/leaky-abstractions/conference-childcare-part-1-helpful-thoughts-for-conference-organizers-203d2b34df5b#.x3lzcaa48">Conference Childcare: For Organizers</a>{:target=&quot;_blank&quot;}
<a href="https://medium.com/leaky-abstractions/conference-childcare-part-2-parent-preparation-d39c0c041eec#.cpvgpquyp">Conference Childcare: Parent Preparation</a>{:target=&quot;_blank&quot;}</p>
]]></description>
      </item>
    
      <item>
        <title>StrangeLoop 2016: A Summary</title>
        <link>https://www.daydreamsinruby.com/blog/2016-09-24-strangeloop-2016-summary/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-09-24-strangeloop-2016-summary/</guid>
        <pubDate>Sat, 24 Sep 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Last week, I had the pleasure of attending <a href="http://www.thestrangeloop.com/index.html">Strange Loop</a> in St. Louis. Strange Loop is a great conference and one of my favorites for many reasons. First, it’s incredibly diverse… it was the first conference I ever attended where I looked around and saw handfuls of women in the audience. Second, the organizers are fantastic. I brought my 1.5 year old with me this year and we both had a great time. There was childcare provided for both the conference AND pre-conference day and activities like the City Museum opening party were family friendly. Third, it is one of the few non-ruby conferences I attend which means that my mind is stretched in a different way. My Strange Loop agenda is often filled with learnings about scalability, new programming languages, and functional programming approaches to problems. The ability to be exposed to this type of information makes me better informed and gives me a broader perspective on programming and the work I do.</p>
<p>This year, I started StrangeLoop at the pre-conference day attending the first ever <a href="http://www.elm-conf.us/speaker/">Elm Conf</a>. Elm Conf was GREAT! Last year, Richard Feldman gave an amazing <a href="https://www.youtube.com/watch?v=FV0DXNB94NE">introduction to Elm</a> talk and i’ve been playing around with/keeping an eye on the language ever since. It was really fantastic to get to attend the first confernece. It started with <a href="https://twitter.com/czaplic">Evan</a> speaking about the language and community… a great way to set the tone. The moved on to <a href="https://twitter.com/ohanhi">Ossi</a> talking about doing client work using elm and interesting approaches and learnings he’s had through actually using elm in production. Then, there was a talk from <a href="https://twitter.com/luke_dot_js">Luke</a> about the more human side of programming and elm and afterwards lightning talks. The day continued after lunch with <a href="https://twitter.com/joelquen">Joel</a> talking about using random in elm through a great example of generating Roman names, <a href="https://twitter.com/jschomay">Jeff</a> speaking about Storytelling, <a href="https://twitter.com/jessitron">Jessica</a> talking about a cool new way to use templates which makes programming in Elm EVEN better, and <a href="https://twitter.com/splodingsocks">Murphy</a> walking us through a music app written in elixir, phoenix, and elm (this is sort of what I want to explore more) that was pretty sweet. The day ended with <a href="https://twitter.com/rtfeldman">Richard</a> talking about using elm to make it impossible to do things that shouldn’t be done (ie- you should only be able to compile VALID css stylesheets) and a Q &amp; A which I sort of missed because of a small childcare issue. I would have loved to know more about who was in attendance at Elm Conf, and I hope the organizers are able to get information about who in the room is using Elm at work or in production, who is playing around with it, and for whom was Elm Conf their first exposure to Elm. I met some really friendly, awesome people throughout the day which always makes me happy when looking into a new language and I hope the Elm language and community continue to grow in a positive way.</p>
<p>The next day started off with a brief trip to the emergency room for <a href="https://en.wikipedia.org/wiki/Nursemaid%27s_elbow">nursemaid’s elbow</a>… just one of the side-effects of deciding to bring a kid to a tech conf I guess and so I missed the first keynote. I’m just going to touch on each talk with a sentence or two on what they were about. One of the best things about Strange Loop is that they get the talks up online within days, so you can already check them all out.</p>
<p><a href="https://www.youtube.com/watch?v=sMy4L-J6fFs">Nicola</a> speaking about journalism and collecting data to write stories spoke about look at data from a microscopic view, tearing it apart to decide if the information journalists have are able to provide them with a full picture in order to ethically report on an issue. The talk covered a few different stories that have been published over the last few years, went over the data received from these stories, and how that data was collected in order to help the audience determine if the story was a feature (a great story to report on based on the data received) or a bug (a story that maybe had some questionable components when looking at the data and how the data was received).</p>
<p><a href="https://www.youtube.com/watch?v=_1rh_s1WmRA">Zach</a> spoke about what information you want to keep in mind when building a server and how to keep the factors in mind when you’re designing a system. His talk has a great example called “the parable of the pumpkin carver” which provides a great example for thinking about resource distribution and load balancing.</p>
<p><a href="https://www.youtube.com/watch?v=HfD9IMZ9rKY">Julia</a> who’s excitement is contagious dove into linux debugging tools covering <code>strace</code>, <code>wireshark</code>, <code>perf</code>, <code>egrep</code>, and a few more. Definitely check out this talk and the related zine for some straightforward commands that will help you debug problems faster. We explored the tools above using three mystery scenarios… the first, a missing config file, the second, a slow program, and the third, a website showing up in french instead of english.</p>
<p><a href="https://www.youtube.com/watch?v=qCUI5ryyMSE">Adam</a> spoke next about network defense and a need to create trustworthiness in critical systems. He provided some tools and suggestions but his main take-away was that companies, even those who are adversaries, should work together when they experience an attack because if one company is experiencing an attack, it’s likely that a similar company will have the same issue.</p>
<p>Afterwards, <a href="https://www.youtube.com/watch?v=Rzdxgx3RC0Q">Scott</a> talked about netflix caching. As a fan and frequent user of netflix, it was pretty interesting to learn about the different pieces of the interface that are cached and how. He also talked about some of the architecture, what everything is built in, and how everything connects together.</p>
<p>And then lastly, I went to <a href="https://www.youtube.com/watch?v=pDdE3PKy6mo">Mike’s</a> talk on Alexa and go. I seem to have not taken many notes (I’m pretty sure I was doing some therapeutic coloring which is really important at the end of a StrangeLoop day). This talk was really interesting though because it went though how modules and components of programs for new tech like Alexa are being built.</p>
<p>The day ended with an incredible keynote from <a href="https://www.youtube.com/watch?v=fNe1i7nVbXI">Ashley</a>. It was really fantastic and I highly recommend you watch it. Numerous times, it caused a lot of the audience to tear up and was really interesting and compelling.</p>
<p><strong>Day two</strong></p>
<p>Day two began with <a href="https://www.youtube.com/watch?v=rWYifOE8LDc">Paul</a> talking about mobile and how mobile web has changed, evolved, and whats coming.</p>
<p>Then <a href="https://www.youtube.com/watch?v=Oh5oC98ztvI">Lee</a> spoke about GraphQL and how the language was created. He spoke about the principles and lessons that they learning in the process. These included things like, think like a client, make sure you’re solving a real problem, and using software as communication.</p>
<p>Afterwards, <a href="https://www.youtube.com/watch?v=pYbgcDfM2Ts">Andre</a> talked about metrics and how some numbers can be decieving. There are lots of great point in here about looking at things like runtime lag, VM lag, routing, request time, etc. but one of the most important things he talked about was to not rely on averages. Average numbers make you think that you understand whats going on and make you think that an average is also standard distribution but it’s not, so you need to look closer at the numbers.</p>
<p>One of the best talks I went to was <a href="https://www.youtube.com/watch?v=02h74L1PmaU">Lea’s</a> about the languages for 3D knitting. This talk was really awesome. As a crafty person, it’s great to hear about some of the science and tech behind industrial knitting machines. Lea spoke about knitting terms and different machines that do industrial knitting and how they all work. She then talked about knitPaint and a variety of other languages that you can use for designing and executing patterns on a knitting machine. She went over a few libraries and other things out there as well related to programming and knitting.</p>
<p>Next, <a href="https://www.youtube.com/watch?v=L1-oLdnoigQ">Jennie</a> talked about monitoring. She covered different types of monitoring… system monitoring, application monitoring, and business intelligence-related monitoring. She talked about scaling online games and talking about what that scale looks like (which is huge) and walked through a pipeline of information and where and how pieces need to change in order to accommodate better monitoring at scale.</p>
<p>In the next session, <a href="https://www.youtube.com/watch?v=uwiaT3MoDVs">Andy</a> talked about Guile which is a new programming language based on Scheme. He spoke about the different types that exist in the language, aspects of the language like speed benchmarks, etc. and finally what’s coming up in language development.</p>
<p>Almost closing out the day, Gary talked about reproducibility, or having the same action do the same thing. He spoke through three interesting systems of react rendering functions, bundler, and git, to show different mental models and how the actions always lead to the same results, One of the main takeaways was the reproducibility leads to good mental models which leads to the tools we love where the designs aren’t obvious.</p>
<p>In the closing keynote, <a href="https://www.youtube.com/watch?v=2BvVZU4IPKc">Leigh</a> did a great job talking about security and what folks should keep in mind.</p>
<p>As a sidenote, two talks I wish I went to were the talk on <a href="https://www.youtube.com/watch?v=lvclTCDeIsY">Tulip</a> and the talk on <a href="https://www.youtube.com/watch?v=4KhXwl0L61g">diversity</a>. Definitely check them out as well if you have a moment.</p>
<p>If you want to check out other notes, Trevor did an amazing job <a href="http://trevmex.com/page/2">here</a>.</p>
]]></description>
      </item>
    
      <item>
        <title>So you&#39;re looking to hire?</title>
        <link>https://www.daydreamsinruby.com/blog/2016-09-06-hiring-for-learning/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-09-06-hiring-for-learning/</guid>
        <pubDate>Tue, 06 Sep 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Recently I completed a fairly intense and thorough job hunt. Early on in the process, I spent some time thinking about my must-haves and my nice-to-haves. I thought through what was important to me and what I needed in order to be happy in my next position. However, as I spoke with company after company about available positions, it was obvious that most had not done the same. Their job descriptions as well as answers about company culture were vague and non-descript. Of the few specifics they could mention to me or from conversations further on in the process, I found that ultimately their hiring process didn't reflect what they wanted in a candidate.</p>
<p>Most companies I spoke with have 4-6 rounds in their hiring process (that includes some sort of take home project if one existed). For a candidate, this is a lot of time to dedicate to an interview process. Diving into the rounds, in the first round, where we (the candidate and company) were just getting to know each other, almost all companies spoke about the benefits offered as a way of selling their company, but when I asked about parental leave, almost none (and actually maybe not a single company I spoke with) knew what their policy was. Second, when I asked what they look for in a candidate, 90% of the interviewers answered &quot;someone who can learn.&quot; Now that's lovely but what does that even mean? I can show dozens of examples in my work history and personal life where I have had to take a challenging problem, break it down, learn what to do, and have a successful outcome but this wasn't actually what most companies as looking for.</p>
<p>As I solved take home code projects that had nothing to do with the every day job of being a developer and weren't related to anything I had accomplished in the past two years, I found myself getting more and more frustrated. These projects didn't test my abilities. They tested if I had time. Time to complete these challenges. Time to practice these types of problems which were totally different than my day to day role. They were essentially an ineffective use of time that had no bearing on if I would be a good employee or not and they definitely didn't test if I could learn effectively. Code challenges are like any test you take in school. Most of us probably had a class in school where we knew all the material but weren't good at taking the type of test the class was given. Maybe you liked science but were awful at multiple choice tests so you got a C and were so-so at history but got an A because you were a good essay writer. How frustrating was that? If only you could be tested in a way that would both evaluate you as a student and give you the opportunity to show that in a way that's most effective for you.</p>
<p>In addition to <a href="http://daydreamsinruby.com/technical-interviews-revised-process/">thinking about what companies could do to assess candidates more effetively</a>{:target=&quot;_blank&quot;}, what I wish companies would do is think about <strong>what they're trying to accomplish</strong> through their hiring process. I don't just want a wish-washy answer like &quot;we what smart people who learn well&quot;. That doesn't help a company or the candidates applying. I want real ideas like &quot;the ability to create an architecture for a problem's solution&quot;, &quot;knowledge of databases&quot;, &quot;the ability to communicate ideas and work together effectively&quot;, or even &quot;the ability to assess different solutions and put them in place.&quot; And then think about <strong>how you are getting those answers through your hiring process</strong>. Hint hint: if your goal is to find someone who can communicate ideas effectively and work with others, a take-home code challenge probably isn't getting you anywhere near the ability to assess that skill.</p>
<p>Oh yeah... And I'm still waiting to hear back from at least 10 companies who I spoke with about two weeks ago and said they'd let me know within 3-4 days. I know it seems like a waste of time to follow up with someone who you're going to reject but it really doesn't take much to create a nice form rejection letter and spend 10 minutes sending that out. It'll also make a big difference in your reputation. When job hunting, I specifically ask about bad hiring processes or unresponsive companies so i'm not wasting my time applying.</p>
<p>In this job, just like my last, when considering offers from similar companies that met my must-haves and nice-to-haves, I gave a lot of weight to their interview process and how I feel I was treated throughout. I will also be sure to recommend to colleagues companies I felt had a great interview process and will warn away from ones that were good on paper but in reality had time consuming code challenges, unnecessarily lengthy processes, or were just plain unresponsive. Because if that's what a company is like when they're recruiting you, I can only imagine how it will be when you're working there.</p>
<p>In case you're curious, here's my list of must-haves and nice-to-haves...</p>
<p>My must-haves:</p>
<ul>
<li>Family friendly company</li>
<li>Maternity leave policy with, at the VERY least, 6 weeks of paid leave and an additional 6 weeks of unpaid leave</li>
<li>Some work from home opportunities</li>
<li>Desire from the team to pair and mentor</li>
<li>Salary increase</li>
</ul>
<p>Additional points for:</p>
<ul>
<li>Fully Remote</li>
<li>Support for attendance and speaking at conferences</li>
<li>Thought-out interview process that respected a candidates time and effort</li>
<li>Diverse team</li>
<li>Support for learning and growth at all levels</li>
</ul>
<p><strong>If you'd like help in figuring this out, check out my <a href="http://daydreamsinruby.com/consulting">consulting page</a>{:target=&quot;_blank&quot;}</strong></p>
]]></description>
      </item>
    
      <item>
        <title>Github Pages and Jekyll: Getting Started</title>
        <link>https://www.daydreamsinruby.com/blog/2016-09-09-github-pages-and-jekyll-getting-started/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-09-09-github-pages-and-jekyll-getting-started/</guid>
        <pubDate>Fri, 09 Sep 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>For many years I used blogger to blog about tech-related topics. A few weeks ago, I finally decided that I would take the plunge and move my blog over to GitHub pages. I started by outlining the parts of this process. first, I’d need to determine what information I wanted on my blog. Then, I’d need to find a template I liked. I briefly debated doing the whole design on my own but ultimately, it didn’t make sense to do so with so many good templates out there. After, i’d need to populate the new content. Finally, I wanted to get all my previous blog posts imported into the new GitHub pages. All of this was actually surprisingly easy.</p>
<p>I ended up using the <a href="https://mmistakes.github.io/so-simple-theme/">so simple</a>{:target=&quot;_blank&quot;} theme. There were some plusses and minuses to this. The main plus was that I really like the design and documentation. The minus was that there were a lot of features and items I knew I wasn’t using which meant I needed to spend some time carefully cutting code, deleting sections, and making sure I wasn’t accidentally deleting a piece of code I needed.</p>
<p>There were two tricky things I ran into when I started that I wanted to share.</p>
<ol>
<li>There are actually different docs related to getting started on a Jekyll blog and github pages. I started by using <a href="https://pages.github.com/">these docs</a>{:target=&quot;_blank&quot;}. When I ran into trouble getting everything working, I was pointed in the direction of <a href="https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/">this link</a>{:target=&quot;_blank&quot;}. What the second link and set of docs does is basically set up Jekyll and using Github pages via a Github pages gem. The gem pulls in everything you need for it to all work nicely together. So, in short, if you’re getting started and google ‘Github pages blog with Jekyll”, don’t follow the instructions in the more basic post, make sure to build your blog with Jekyll using the github pages gem.</li>
<li>When I started working with the theme, things weren’t actually loading and working like they were supposed to. This is because I had downloaded the <code>_site</code> folder in addition to everything else. What I later learned was that <code>_site</code> is auto generated by Github pages so if you’re using a theme and you see that before you start entering your unique content, you can delete it and it’ll regenerate when you run <code>jekyll build</code> and <code>jekyll serve</code>.</li>
</ol>
]]></description>
      </item>
    
      <item>
        <title>Github Pages and Jekyll: Importing from Blogger and URL Redirects</title>
        <link>https://www.daydreamsinruby.com/blog/2016-09-10-github-pages-small-hints/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-09-10-github-pages-small-hints/</guid>
        <pubDate>Sat, 10 Sep 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As I mentioned, I’m sharing a few lessons learned from moving my site over to a github pages site using Jekyll. I was actually surprised at how much information was out there especially about importing from old blogs and redirecting urls. I purchased Daydreaminruby from name cheap and they have excellent documentation about having the right A records, CName, etc. when looking to make sure everything is hooked up right. You can find that documentation <a href="https://www.namecheap.com/support/knowledgebase/article.aspx/9645/2208/how-do-i-link-my-domain-to-github-pages">here</a>{:target=&quot;_blank&quot;}. I mean seriously! Look at all those screenshots and arrows! I love it.</p>
<p>The I needed to import all my old blogs. I expected this to be sort of complex and annoying but it was way simpler than almost anything else i’d done with the blog. Following the instructions on the Jekyll docs, I got a backed up copy from blogger of all my posts, then I did:</p>
<pre><code>ruby -rubygems -e 'require &quot;jekyll-import&quot;;
JekyllImport::Importers::Blogger.run({
&quot;source&quot; =&gt; “PATH/TO/FILE.xml”})’
</code></pre>
<p>in the terminal and that was that! Pretty nifty.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Code Hospitality</title>
        <link>https://www.daydreamsinruby.com/blog/2016-09-01-abstractions-code-hospitality/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-09-01-abstractions-code-hospitality/</guid>
        <pubDate>Thu, 01 Sep 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><a href="https://twitter.com/nodunayo">Nadia Odunayo</a>{:target=&quot;_blank&quot;} talk on <a href="https://speakerdeck.com/nodunayo/the-guest-a-guide-to-code-hospitality">Code Hospitality</a>{:target=&quot;_blank&quot;} was really fantastic. I had heard good things about this talk from when she gave it at RailsConf so I was looking forward to seeing it in person and it’s a really great metaphor for learning to code. She started by talking about being a guest or being a host. A host is receiving a guest, they need to learn approaches to problem solving and communication. When we don’t have good on boarding and aren’t effectively walking through code with peers, we’re being bad guests and hosts at work. She has a quote from her friend who said “it’s like rails is my city and I’ve lived here my whole life.” It’s a great way to think about working with newcomers. You’ve been in this city a while, you know the neighborhoods, restaurants, etc. but someone who is brand new doesn’t know that critical information and it’ll take them a little while to learn it. We should talk about how we can better collaborate when lots of people might feel vulnerable (as being new to a codebase or even being the experienced person on a codebase often makes us feel).</p>
<p>There are a few random points from this talk that really struck a cord with me. First, guest/host is NOT junior/senior. In the same way that sometimes you’re a guest in someone’s home and sometimes someone is hosting you, it works the same way with code. Regardless of experience, sometimes the person with less years of developer experience might have more experience with a specific codebase, in which case, they are the host, and vice versa. Second, I’m a BIG proponent of “don’t touch my keyboard” when pairing because I don’t learn as effectively. This is often really difficult for people and I understand why but nadia’s talk gave a great example. She spoke about a guest she had who she took to dinner a few blocks away one evening. She led the way and her guest just followed. A few days later, they were discussing a meeting place and she said to her guest “just meet me at the restaurant we ate at the other night.” Her guest then asked for directions and she didn’t understand, they had just been there the other night. Here’s the key, the guest wasn’t paying much attention and even if she was she had only been there once! If she had led or even chosen what restaurant they were going to, she would have likely been able to find her way there again, or at least gotten halfway there. This is SO similar to what I think about when I tell people not to touch my keyboard.</p>
<p>Some suggestions for being a good host include having your codebase in a state ready to receive guests by naming things well and having objects with clear responsibilities. Orientations also help. You can do this by providing diagrams (maps) or visual cues (turn left at the big monument), and documentation like a travel guide or readme file.</p>
<p>Nadia provides a <a href="https://gist.github.com/nodunayo/c919477906aab6c1af6065ff8e868d3e">template for code hospitality here</a>{:target=&quot;_blank&quot;}. It walks through things you might want to document at your company about an app like the history, approaches, reading material, and a walk through. You want to tell teammates the story of the codebase while still creating a safe space for questions, failures, etc. Make sure you’re demonstrating to new teammates that they should feel at home and help make them comfortable.</p>
<p>Finally, she talked about ways in which teams could communicate using this example. For example, realizing that there might be many directional ways one could get to a specific location. You want to have retros and give effective feedback that offers a solution. So instead of saying “it was great” about a pairing session, you could say “I felt like I was being heard when you stopped typing and explained that concept to me. I really enjoyed that.”</p>
<p>Code hospitality enables us to empathize. In closing she said, only when we treat our colleagues as guests can we thrive.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Creating a Self_sustaining Culture of Learning</title>
        <link>https://www.daydreamsinruby.com/blog/2016-09-01-abstractions-culture-of-learning/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-09-01-abstractions-culture-of-learning/</guid>
        <pubDate>Thu, 01 Sep 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><a href="https://twitter.com/jmmastey">Joe Mastey’s</a>{:target=&quot;_blank&quot;} talk on <a href="https://speakerdeck.com/jmmastey/building-a-self-sustaining-culture-of-learning-v2">Building a Self-Sustaining Culture of Learning</a>{:target=&quot;_blank&quot;} was really great. He talked about establishing a learning plan and structure in a company based on what he’s found has been effective. The slides are really excellent so definitely take a look in order to get the highlights of his talk and recommendations if you’re looking to do the same at your company.</p>
<p>There are lots of benefits to having learning built in to your culture mainly related to attraction and retention of talent. There are three phases when putting a learning plan in place. For each phase, Joe covered what the phase is, what the approach is and then what worked and what some of the pitfalls could be during this phase. I’ll go through the phase and approach for each but will leave you to check out the slides for what worked and the pitfalls.</p>
<p>When no learning plan is really established, you’re likely going to start with phase 1, Guerrilla learning. This is often ad hoc learning, boarding from stoties, only a few folks are driving the learning initiatives if there are any, and there’s resistance to taking time away from shipping. The approach to use here is to think opportunistically, focus on things that will provide fast returns without a lot of time investment and things that improve people in their primary roles. At this point it’s less about learning what you want to learn and more about learning something that could make you better every day so that you can prove to managers that spending time learning is important.</p>
<p>The second phase is when you expand to others. This is where new hires learn a bit, people want more but maybe aren’t quite empowered yet, there’s often some group learning initiatives, a slightly more standardized on boarding process, and still a core group of people who drive the learning forward. For this phase, you want to look at cross-trainings, leverage internal experts, make sure you’re shining a light on good role models, mentoring the mentors (this is big! You want to do this so the mentors don’t burn out and so they feel they’re getting something as well as opposed to just organizing and giving), and you start to initiate learning opportunities with a  longer payoff.</p>
<p>Finally, you want to make it stick. In this phase, learning should start to be self-sustaining. It should be so normal that it’s borng. You want to build momentum so that it’s sustainable and there is likely dedicated learning for all engineers. For this approach, you want to make people forget that learning was ever NOT part of their job. Everyone in every department gets involved and you can try some riskier things.</p>
<p>Creating a learning culture is difficult but so great when you can actually make it to phase 3 so good luck and follow the suggestions if you’re working on it!</p>
<p>ps: Both Joe and I <a href="http://daydreamsinruby.com/consulting/">work with companies</a>{:target=&quot;_blank&quot;} in order to help them put plans like this in place so if it’s something you want to do or that you’re struggling with, please reach out! We’re happy to chat.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Anatomy of a Great Pull Request</title>
        <link>https://www.daydreamsinruby.com/blog/2016-09-01-abstractions-pull-requests/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-09-01-abstractions-pull-requests/</guid>
        <pubDate>Thu, 01 Sep 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Starting to come towards the end of the conference, <a href="https://twitter.com/sgrif">Sean Griffin</a>{:target=&quot;_blank&quot;} spoke about the “Anatomy of a Great Pull Request”. I’m gonna be honest and say that a lot of this stuff seems sort of like common sense to me but it was good information nonetheless. I actually often keep a checklist for when I open a PR to make sure i’m providing the right amount of information to make it easy for anyone looking over my PR to approve it, so I got some great nuggets in this talk to add to that list.</p>
<p>First, when you’re looking to contribute to an open source project, Sean recommends following this process:</p>
<ol>
<li>Read the contribution file</li>
<li>Have tests</li>
<li>Follow the style guide</li>
<li>Write code you’re proud of</li>
</ol>
<p>Okay, so now into PRs. PRs are actually NOT about code. Make sure to keep the size reasonable. No one has time to review a PR with 10,000 changed lines of code. Then, don’t assume context. Make sure to link to the docs, link to any related sections, and even link to other links or code. When you’re contributing to a large open source project, convince the folks in charge why the problem matters, again, give context to the issue. Then think about how many users will be affected by the fix? how complex is the fix? and is there an easy work around for the issue?</p>
<p>After that, show that your change is the best solution. Explain why you wrote the code the way you did. And remember that features are easy to add but hard to remove. You can also give context in the commit message. Pro tip: if you’re confused about what a piece of code is doing, use git blame to read the commit message from that piece of code (also why you should write good commit messages). As you’re coding a solution, you can also write longer commit messages in order to alleviate the need to put comments the code. But remember, if you squash your commits, amend the commit message.</p>
<p>Finally, remember that your third pull request is when you start to make an impact because it takes time to get to know a codebase, a reviewer, for a reviewer to get to know you, etc. And remember to be nice. Not everything can be merged. Maintainers are working hard to have a clean codebase and sometimes it sucks when they say the PR you worked on actually won’t get merged in. You can be sad, but be nice and the key is empathy.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Lucky</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-31-abstractions-lucky/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-31-abstractions-lucky/</guid>
        <pubDate>Wed, 31 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><a href="https://twitter.com/saronyitbarek">Saron</a>{:target=&quot;_blank&quot;} is a fantastic speaker. Anyone who has seen any of her talks knows that she’s charming, funny, and very engaging. <a href="https://www.youtube.com/watch?v=BUmV6fsZegs">In this talk</a>{:target=&quot;_blank&quot;}, she addressed privilege. Early on she spoke about how contributing to open source sounds easy but you actually need numerous things to do so: code, communication, time (which often means money), a computer, and the internet. She threw out some interesting facts about how many people in the world have internet access (less than 1/2) and how many Americans still have no broadband internet (11 million). She spoke about all the ways in which she is privileged where other people may not be. For example, health… examples of this can be if someone is blind, deaf, or even color blind. Someone’s health effects their accessibility to things and often has a significant financial impact. She mentioned student debt and how debt can lead folks to take a job and not a career. She also spoke about luck vs. hard work. One of the most interesting things that she said was that you have to be lucky first in order to work hard later.</p>
<p>In the end of her talk, she gave some examples of what someone can do with their luck. You can expand the problem pool by following people unlike you, volunteering, and amplifying voices, and you can incorporate these things into your product but thinking about accessibility, internet speeds, and conventions.</p>
<p>This talk was good, but to be honest, when I sit in a talk like this, I wonder what “unlucky” people think. I know a lot of people in our community have a lot of luck and privilege. I’ve had some privilege… I went to college and graduated without any debt, I’ve always had access to computers and internet, etc. but I also didn’t have the freedom to take european vacations or unpaid internships and knew, for example, when going into college that if I could work harder and finish in three years, that would be better than finishing in four and needing to pay that extra year of tuition. And there are lots of people out there who, no matter how hard they work, won’t be able to go to college and are working ten times harder than most of us just to get by. There is space in our community and at conferences for people to talk about the privilege they have and what people like them with privilege can do to help others but, in a talk like this, I wonder how many of those folks without luck and without privilege are in our industry and if they feel like there’s a space for them to talk abut what they think could be helpful and how people with privilege could help them. I think about Mike’s ordinary people talk from the day before where he says that we shouldn’t think about how a woman or person of color would design a product for them but we should actually get THEM and hire THEM to design the product. In reflecting on this talk, I think that’s who I want to see a talk like this from, not someone who has privilege telling others with privilege how to use their privilege but someone without it telling others what is and isn’t helpful.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: NPM: Past, Present, and Future</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-31-abstractions-npm-past-present-future/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-31-abstractions-npm-past-present-future/</guid>
        <pubDate>Wed, 31 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Day 3 started off with a keynote by <a href="https://twitter.com/seldo">Laurie Voss</a>{:target=&quot;_blank&quot;} about <a href="http://slides.com/seldo/abstractions-npm#/">NPM</a>{:target=&quot;_blank&quot;}. I don’t know much about NPM but I wish I knew more, so I took a lot of notes.</p>
<p><em>npm past</em></p>
<p>Npm is all about sharing code, that’s how and why they started. Npm helps you share code, make packages, discover, and install. There are over 4.5 million people using npm and over half of cpm users have only been using it for six months. JavaScript code before npm was hard to share. Some of the perks of npm as a package manager is that there is no dependency hell and there’s semantic versioning. Related to dependency hell, npm and the module loader were written at the same time so they work very nicely together. For semantic versioning, we know versions as something like 2.15.54, or breaking.feature.fix, or major.minor.patch. Using semantic versioning reduces risk and allows for lots of small modules in npm. Small modules are super popular, it’s actually one of the reasons npm is s popular. There are over 300,000 modules in npm. And this works because npm makes it really easy.</p>
<p>The registry stores the packages. Modules are hosting in a variety of places but everything is in the registry because you don’t want to have to just rely on GitHub. Npm exists to make sure js, node, and everything else are working well together. The registry also enables discovery. A registry is faster than having to do a <code>git clone</code> or something similar. Git is for developing and collaborating but npm is for distributing.</p>
<p><em>npm present</em></p>
<p>This section was sort of a greatest hits of cool stuff about npm you should probably know.</p>
<p>So first you want to make sure you’re always updating your npm by doing <code>npm install -g npm</code>. Currently you can also use a <code>scope</code> command which let you publish your packages under your own name. You can also group packages together and have private packages. The <code>npm init</code> file controls how npm runs, you can add defaults there, change it, etc. There’s also <code>promzard</code>. You can do <code>npm install</code> with <code>- -save</code> to add a package to your dependencies. You can also do <code>- -save-dev</code> to only in stall it to your dev dependencies. Bundled dependencies makes downloading packages faster. Additionally, when you <code>npm install</code> npm goes to the server, gets a list of all the versions, and puts one of those persons on your computer. It also puts the version into the local cache of your computer. Because of this, you can also do an install offline.</p>
<p>There are run scripts, mainly <code>npm start</code>, <code>npm stop</code>, <code>npm restart</code>, and <code>npm test</code>. You can use these scripts to get dev dependencies for specific things like mocha.</p>
<p>Now on to <code>.npmignore</code>. It works like <code>.gitignore</code> and automatically excludes things from your package. You also need to remember to change your semantic versioning number when you change you package. You can do this right from the command line by doing something like <code>npm version patch -m “bump to version %s.”</code> There’s something called <code>shrink wrap</code> and then finally npm organizations. There you can give permissions to specific teams by checking out <code>npm team</code> and <code>npm access</code>. In team, you can <code>create</code>, <code>destroy</code>, etc. and in access you can <code>grant</code>, <code>revoke</code>, etc.</p>
<p>You can work on multiple packages by linking them user <code>npm link</code> and you can publish with distinct tags. You can also <code>npm unpiblish &lt;pkg&gt;@&lt;version&gt;</code>, but you actually never want to do this. First, you can’t unpublish after 24 hours. Second, once you publish, it’s out there in the world and unpublishing doesn’t get that data back.</p>
<p>In order to keep packages up to date you can check out <code>npm outdated</code> and do <code>npm update</code>, There are package config variables that you can change with the <code>npm config set</code> command. There are also lifecycle hooks like <code>publish</code>, <code>test</code>, <code>start</code>, etc, and each of these has a <code>pre</code> command and a <code>post</code> command to allow for work flow automation and validity checks. You can put default config options in your <code>.npmrc</code> file. Install the Wombat cli which gives you the latest experimental stuff and allows you to manage web hooks by doing <code>npm install wombat -g</code>. And you can use web hooks to automatically deploy.</p>
<p>Wow. That was a lot of commands. So now for</p>
<p><em>npm future</em></p>
<p>Npm is now the package manager for javascript. There are some big challenges coming up related to discover and trust and es6 modules. For example, discovery is great but finding the best module for something you want to do is becoming really difficult AND people want to know if they can trust a specific package. And then security is an issue. There’s the node security project which checks a package against known vulnerabilities. Npm is also thinking about reliability via <a href="https://greenkeeper.io/">greenkeeper.io</a>{:target=&quot;_blank&quot;} which check for outdates dependencies that will break things and about efficiency since the size of packages is becoming an issue.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Kubernetes Abstractions</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-30-abstractions-kubernetes/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-30-abstractions-kubernetes/</guid>
        <pubDate>Tue, 30 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>My second day ended (sort of) with <a href="https://twitter.com/kelseyhightower">Kelsey Hightower’s</a>{:target=&quot;_blank&quot;} talk on <a href="http://kubernetes.io/">kubernetes</a>{:target=&quot;_blank&quot;}. As I mentioned before, I did want to get a little exposure to some Dev-ops-y stuff and kubernetes is a new thing I’ve heard in passing recently. The talk was focused on container deployments using kubernetes. Kubernetes is a framework for building distributes systems. The key kubernetes abstractions are that it assumes you app is in a container, there are pods, secrets, and services.</p>
<p>After that very brief intro, Kelsey then jumped right into a demo (he warned us at the beginning that this wouldn’t be an intro to kubernetes talk but rather something a little more advanced). The demo was that we have a container and we want to run it. Kubernetes does the deployment but we do not want to pin the app to nodes. He showed some simple commands to create the deployment in kubernetes and launch 5 pods. Then looked at these pods, then got nginx running. Kelsey mentioned to update servers, you set the image and then update the declaration inside kubernetes which will do a rolling update without any drops.</p>
<p>He spoke about building your own schedule, saying the anything you create in kubernetes is in a central class and needs the global cluster state. We want them to feel reactive. And finally we want to use a resource scheduler to look at incoming workloads and make decisions about placement to make sure we’re efficiently using resources When the video is posted, check out the awesome Tetris example used in order to explain this concept... and give Kelsey an excuse to play Tetris on stage.</p>
<p>Finally, he walked through a great example related to updating certs in an application which helped explain the usefulness of a framework like kubernetes.</p>
<p>The slides for this talk aren’t up yet, but it looks like Kelsey has done it a number of times so recordings of this talk or very similar ones are online.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Get a Whiff Of This</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-26-abstractions-get-a-whiff/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-26-abstractions-get-a-whiff/</guid>
        <pubDate>Fri, 26 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Friday morning started for me with <a href="https://twitter.com/sandimetz">Sandi’s</a>{:target=&quot;_blank&quot;} talk on code smells and refactoring entitled <a href="https://speakerdeck.com/skmetz/get-a-whiff-of-this">“Get a Whiff of This”</a>{:target=&quot;_blank&quot;}. Sandi started by talking about a bunch of different code smells starting with bloaters. Bloaters include long methods, large classes, data clumps, long parameter lists, and primitive obsession. They are basically things that do not need to be that big. The next code smell type is tool abusers. this includes switch statements (conditionals), refused bequest (inheritance-related), alternative classes with different interfaces, and temporary fields. Tool abusers means that these things can be beneficial but these code smells misuse them. Then we have change preventers which are things that make your code  really difficult to chance in the future like divergent change (things that should be the same but are different), shotgun surgery, and parallel inheritance hierarchies. Next are the dispensable or the things you can do without which includes lazy class, speculative generality (adding something to a feature before it’s requested), data class, and duplicated code. And finally we have couplers which glue objects together. These are things like feature envy (sending more messages to another object than to yourself), inappropriate intimacy (sending messages from private methods), method chaining, and middle man.</p>
<p>Then we moved into discussing refactoring. When refactoring, you want to alter the arrangement of the code without changing the behavior. The nice thing about code smells is that every code smell has a recipe for fixing it.</p>
<p>From here, i’ll honestly refer you again to <a href="https://speakerdeck.com/skmetz/get-a-whiff-of-this">the slides</a>{:target=&quot;_blank&quot;} because Sandi’s examples are always excellent and are documented so clearly visually. This is always the point in her talks where I fin it MUCH more valuable to put down the pen, stop taking notes, and just watch the magic happen.</p>
<p>I will say at the end she did mention a few tools for looking for code smells in your code, the main one being <a href="https://github.com/troessner/reek">reek</a>{:target=&quot;_blank&quot;}.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Optimizations You Shouldn&#39;t Know About</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-26-abstractions-optimizations/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-26-abstractions-optimizations/</guid>
        <pubDate>Fri, 26 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>My next Friday talk was <a href="https://twitter.com/tenderlove">Aaron Patterson’s</a>{:target=&quot;_blank&quot;} on “Optimizations You Shouldn’t Know About” and sure enough everything he mentioned was new to me! I don’t think the slides are up yet for this talk either which makes it particularly difficult. See, I think aaron’s talks are great and I always learn A TON, but Aaron talks really fast and goes through stuff at lightning speed. I often end up writing down words or pieces of concepts to google and learn more about later. So here is a collection of random words, phrases, and partial concepts that I learned during aaron’s talk.</p>
<p>Peephole optimization is where you remove useless instructions. Wikipedia says “peephole optimization is a kind of optimization performed over a very small set of instructions in a segment of generated code. It works by recognizing sets of instructions that can be replaced by shorter or faster sets of instructions.”</p>
<p>Case/when byte code is generates a hidden hash and dispatches something but this only happens in certain scenarios.</p>
<p>When looking for optimizations, you want to find the call site. In ruby, the call site is the “.”. For example, in <code>hello.world!</code> the call site is <code>.</code>. In <code>x=foo(Object.new)</code> there are two call sites. The <code>.</code> in <code>Object.new</code> and an implicit call site on the left of <code>foo</code> because it is <code>self.foo</code>. Call sites are everywhere.</p>
<p>Ruby VM recap which is important for call site caching. You see the instructions and the stack. Stack-based where the byte code is stored as an array or arrays. In this, you see the operator and the operand. So if the instruction is <code>push 6</code> and the stack is <code>6</code>, the operator is <code>push</code> and the operand is <code>6</code>.</p>
<p>Find-method- looking for the method, if it’s not found, then it moves up the stack to find it. Method lookup is an O(n) operation because you BenchMark to check out the speed. The more ancestors there are, the slower the call.</p>
<p>There are also ways to speed up method calls. For example you can cache things that never change. The call cache is a data structure that contains the method lookup and is stored inline with byte code. This is called an inline cache.</p>
<p>Somehow this leads you to be able to look at a hash where they key is the class serial number and the value is the method.</p>
<p>You can tell if the cache is missing by doing <code>p Ruby(M.stat)</code>. If it’s global, the method state should never change.</p>
<p>There can also be runtime breakage, which is where a singleton class access breaks it. The cache  also typically misses new classes or modules.</p>
<p>The session also briefly covered monomorphic, polymorphic, and metamorphic cases. These terms related to the number of types at a call site.</p>
<p>Aaron then touched on measurement of these things saying you need to measure the impact of the cache by measuring the impact of the call sites that are polymorphic and you can do this by logging the method caches.</p>
<p>Finally, in summary, Aaron said that you should only optimize cod that matters and everyone should use polymorphism for better optimization.</p>
<p>Hopefully this summary at least exposed you to some new words and concepts. I’ll let google take it from here.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: BDD: Baby Driven Development</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-25-abstractions-baby-driven-development/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-25-abstractions-baby-driven-development/</guid>
        <pubDate>Thu, 25 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I also spoke on the first day! If you’re interested seeing the slides from my talk: BDD: Baby Driven Development, <a href="https://speakerdeck.com/asheren/abstractions-baby-driven-development">check them out here</a>{:target=&quot;_blank&quot;} (spoiler alert: the pie chart slides are my favorite). The slides cover some results from a survey I put out for parent developers (which can be found <a href="https://twitter.com/allie_p/status/716221793640587264">here</a>{:target=&quot;_blank&quot;} if you’re interested in filing it out since it’s an ongoing research project). The talk also provides some suggestions and solutions that companies can put in place, that parents can work on, and that colleagues without children can try out. So if you're reading this and thinking, &quot;I don't have kids so I won't get anything out of these slides&quot;, there are some good, tangible takeaways for you too.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Dancing with Data</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-25-abstractions-dancing-data/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-25-abstractions-dancing-data/</guid>
        <pubDate>Thu, 25 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I’m pretty bummed because I got to this talk late, so my notes are a little sketchier than usual. I would highly recommend you check out <a href="https://speakerdeck.com/barrettclark/making-data-dance-abstractions">Barrett’s slides</a>{:target=&quot;_blank&quot;} because they had lots of good information and great code samples. So here’s what I’ve got…</p>
<p>First, Barrett talked about window functions. The definition from the documentation is that “a window function performs a calculation across a set of table rows that are somehow related to the current row.” There are lots of window functions but the ones to focus on are <code>lead()</code>, <code>lag()</code>, <code>first_value()</code>, <code>last_value()</code>, and <code>row_number()</code>. The slides are really good for walking through and example. We then went into subqueries and the piece to really look at is the fact that in the examples we have a base query and then named subqueries. They’re wrapped in an outer query and then we can refactor in order to DRY out the whole query. We then talked  a little bit about DB views. Barrett recommended to check out <a href="https://github.com/thoughtbot/scenic">Scenic</a>{:target=&quot;_blank&quot;} which is actually something i’ve been hearing a bunch about recently.</p>
<p>Highlights that are just words or phrases in my notes to look into further include “view concurrently” which will be available in PostgreSQL 9.4 and subqueries for field values.</p>
<p>Finally, we discussed a little bit of tooling which included the psql command line, <a href="https://www.postgresql.org/ftp/pgadmin3/">pgadmin</a>{:target=&quot;_blank&quot;}, <a href="https://www.navicat.com/">navicat</a>{:target=&quot;_blank&quot;}, visual query plans (which helps explain and analyze) like <a href="https://explain.depesz.com/">https://explain.depesz.com/</a>{:target=&quot;_blank&quot;} and <a href="http://tatiyants.com/pev/#/plans">http://tatiyants.com/pev/#/plans</a>{:target=&quot;_blank&quot;} which will let you see the hot spots (note: this will differ depending on the environment you’re looking at). Finally, database datatypes that are awesome and you should look into more are Array, DateRange and TSRange, JSON and JSONB, and UUID. And check out upset which is an update or insert for data.</p>
<p>Also, here's <a href="https://twitter.com/barrettclark">Barrett's twitter handle</a>{:target=&quot;_blank&quot;} and he's got an awesome <a href="http://www.informit.com/store/data-visualization-toolkit-using-javascript-rails-and-9780134464435">new book out</a>{:target=&quot;_blank&quot;} if you want to dive into this further.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Let Us Now Praise Ordinary People</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-25-abstractions-ordinary-people/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-25-abstractions-ordinary-people/</guid>
        <pubDate>Thu, 25 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The last session I went to before the evening keynote on the first day was <a href="https://twitter.com/monteiro">Mike Monteiro’s</a>{:target=&quot;_blank&quot;} talk entitled “Let us now praise ordinary people” (doesn’t look like slides have been posted from this talk yet). Now i’m gonna be honest, the first five minutes, I wasn’t really sure where this talk was going. To me, it seemed a little rant and a  little annoyed. The opening premise was that there are tons of resources, presentations, ideas, and talks about how to change the world. Everyone wants to change the world but you need to go deeper than that and ask how and for who?</p>
<p>That’s when the talk actually started to get deeper. He was speaking from the perspective of a designer and saying that designers could change the world but the world isn’t changed by people who apply to do it, it’s changed by people who just want to live their ordinary lives. He also put the onus on the audience and said that we can change the world because we don’t have an option… we don’t get to opt out.</p>
<p>He then went a bit into how to do this. (I’m pretty sure there are three steps in this process, but I only seem to have notes for two so you’ll have to just be on the lookout for the slides to be posted to get that third vital part). First, get ignorant about your place in the world. What he means by this is that empathy is important but empathy only allows for those who have time to feel it. Design a system where you could be on the other side of the results and it would be okay. So, for example, he talked about AirBnB. AirBnB is great for the people on the good side of it but if you place yourself on the other side of it… the people who are getting evicted because a landlord can make more money if the place is an AirBnB rental, would you be happy? Would that be ok? Probably not. So when you design systems, you want to keep that other piece in mind as well. Second, look like the world. You don’t want to assume how people would behave in a situation, hire them to design it. You see examples of this all the time… a male designer is trying to figure out how to design something for women… how about ask a woman to design it? People are more informed about themselves than others. Ultimately, your role in the world is to leave it in a better state than you found it (this actually might be the third point, but I didn’t note it in my notes). We need to change what we design, how we design, and who designs.</p>
<p>He closed by talking about how important it is to think critically. think critically about how you spend your time, about how the world works, etc. He ended by saying that we need to remember that we are ordinary people and that it is our job to help and elevate one another.</p>
<p>The talk was definitely funny and to the point and in the end, I think the story that was told was excellent and it definitely was perception-shifting. I’m glad I decided not to leave and see where he was going with his opening.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: The Twelve-Factor Container</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-26-abstractions-twelve-factor-container/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-26-abstractions-twelve-factor-container/</guid>
        <pubDate>Fri, 26 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Moving right along, one of the things I loved about Abstractions was that it wasn’t focused on a specific programming language or topic. As a result, when I looked at the schedule, I knew I wanted to challenge myself to go to lots of different things… a little elixir, a little design, a little devops, and more. <a href="https://twitter.com/caseywest">Casey West’s</a>{:target=&quot;_blank&quot;} talk on <a href="http://www.slideshare.net/Pivotal/the-twelve-factor-container">The Twelve-Factor Container</a>{:target=&quot;_blank&quot;} was my devops for the day. And i’ve got lots of notes for this one.</p>
<p>In this talk, Casey covered the twelve factors that lead to operational maturity. It’s based on the factors outlined <a href="https://12factor.net/">here</a>{:target=&quot;_blank&quot;}. For each factor, Casey mentioned what the factor was, what the anti-patterns the exist are and what the best practices should be. So here goes…</p>
<ol>
<li>
<p>Code base deploys to a stack. The anti-pattern here is that you build separate images for staging and production and then you manage the config. You often also have tags for dev and prod. The best practice is to have feature flags or an ENV file of some sort, It takes some work to do feature flags correctly and effectively but if you put in that time at the beginning, it’s well worth it in the end.</p>
</li>
<li>
<p>Explicitly declare and isolate dependencies. Dependencies can also be abstracted and managed externally. The anti-pattern here is to look at latest but there can be major api incompatibilities and this can be very problematic because containers are an immutable packing that you’ve built. You want isolation between the build phase and the deploy phase. The best practices are to declare version numbers of upstream dependencies. Oftentimes you’l use a base image and then build on top of that and second, to depend on the base images for the default file system and run time. This makes it easier to rebuild intermediate containers.</p>
</li>
<li>
<p>Store config in env. The anti-pattern here is to have a <code>config.yml</code> file or hard-coded feature flags. The best practice is to simply use environment variables.</p>
</li>
<li>
<p>Treat backing services as attached resources, connecting to data stores, microservices, etc. The anti-pattern here is to rely on a stateful,long-term local disk. If you don’t use the 12-factor principles to build the application, then this is often the first issue you deal with. One env that does to this well with local disk is google cloud. He then talked a little bit about volume mounting in this scenario. The best practice to to connect to network-attached services using connection information from the environment with a service like <a href="https://www.hashicorp.com/blog/vault.html">Vault</a>{:target=&quot;_blank&quot;}.</p>
</li>
<li>
<p>Strictly separate build and run stages. The anti-pattern here is to install on deploy but the best practice is to build immutable images, then build, deploy, run. Secondly, you want to respect that lifecycle of buid, run, destroy.</p>
</li>
<li>
<p>Execute the app as one or more stateless processes. The anti-pattern here is NFS or a network file system. I don’t know much about NFS so unfortunately, can’t provide more details but would be happy to be pointed in the direction of some good resources to learn more. The best practice is to schedule LRPs by distributing them across a cluster of physical hardware. This can provide a return of interfaces between the application instances and the underlying software.</p>
</li>
<li>
<p>Export services via port bindings. Don’t hard code the ports the software runs in. Get the port from the env.</p>
</li>
<li>
<p>Scale out via a process model. This takes down processes when the load is low.
(can you tell my brain was getting tired at this point in the talk?)</p>
</li>
<li>
<p>Maximize robustness with fast startup and graceful shutdown. You want to mitigate against traffic spike by having fast startup times. And you want to have a graceful shutdown if an instance blows up, you want to make sure you have have bad, corrupt, or lost data. The key term I learned while discussing this point was the “Hug of Death” which sounds very ominous.</p>
</li>
<li>
<p>Keep dev, staging and prod as similar as possible. Best practice here is to run containers in development. It helps you spin tup architectural dependencies so you can tweak instances. etc. You can also run the app in dev against the app in prod to compare if both are in containers.</p>
</li>
<li>
<p>Treat logs as event streams. The anti-patterns here is to have random log files all over the file system. Instead of doing this use STDOUT and manage logging applications and systems.</p>
</li>
<li>
<p>Finally, run admin and management tasks as 1 off processes. The best practice here is to reuse application images within specific entry points for tasks.</p>
</li>
</ol>
<p>There are more factors to explore like api as first class in an application, secrets management, health metrics, and global distribution.</p>
<p>There was a short additional part about becoming cloud native and the difficulties there but I think the 12-factor walk through was really the meat of this presentation.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Style Guide best Practices</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-31-abstractions-style-guide-best-practices/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-31-abstractions-style-guide-best-practices/</guid>
        <pubDate>Wed, 31 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><a href="https://twitter.com/brad_frost">Brad Frost</a>{:target=&quot;_blank&quot;} had an incredible talk about Style Guide Best Practices and I really hope the slides go up soon because they were great. As someone who admittedly doesn’t have the best design eye, i’m always looking for good ways to see and know if there are style issues I should be concerned about or how to help other on my team or non-developers that I work with think about styling and consistency. I guess, for me, what it comes down to is less “does this look pretty” and more “are we being consistent” which is why I thought this talk was really great AND had some super actionable, tangible takeaways that I can use when trying to use my design eye in the future.</p>
<p>Brad started talking about the idea of companies and brands. As a user, I want to see 1 brand. In order to think about this, someone has to think about six different types of style guides. First, there’s brand identity. Does the brand convert a clear identity of who they are. West Virginia University was given as a brand that does this well. Then there is a design lunges style guide. This related mostly to material design. Third, the voice and tone style guide. How does the company want to speak? What sort of language do they use? Mail chimp is a great example of this. One thing to note is that it’s easy to think about a fun playful tone you want to create for the positive scenarios or confirmation messages, but make sure you’re thinking about how to use that tone and voice for negative scenarios as well, like when a credit card is declined. Fourth, there is the writing style guide for grammar, etc. Fifth, the code style guide which could be things like SMACSS, BEM, css guidelines, modularity, and more. GitHub has a good example of code guidelines. And then finally, pattern libraries looking at the pages, responsive design and looking at designing systems of components. For example, tools like bootstrap and foundation are great but it does mean that so many pages end up looking so similar. The other framework pitfalls might be that you don’t need everything that’s in the package and you’re subscribing to some els’ed structure instead of creating your own. There were a few more pitfall points that I didn’t quite capture in my notes.</p>
<p>The major benefits of pattern libraries, which is what the rest of the talk focused on, are that they promote UI consistency and cohesion, they lead to faster production because you’re not reinventing the wheel every time you need something, there is a shared vocabulary, they’re easier to test, a useful resource (great to go back to as you continue developing), and finally, they are pretty future-friendly because you set them up once and son’t have to set them up again. Brad showed some great examples of how many different button types exist on large airline or bank sites to help demonstrate these points and more. He then went on to talk about how you sell the idea of investing time in creating a pattern library style guide to a company. You can to show, not tell. SO first, conduct an interface inventory which shows the decision-makers all the different button types, styles, etc. (The slide provides a great list of different things you can inventory). This also helps you as the person selling the idea to point out all the inconsistencies which lets you get buy-in, establish a scope of work, lays the groundwork, an plants seeds for spending time on something like this.</p>
<p>Once you are given permission to actually work on this, there’s a great methodology he introduced called the atomic design methodology. He also wrote <a href="http://atomicdesign.bradfrost.com/">a book</a>{:target=&quot;_blank&quot;} on this which I believe is either free and asks for a donation or is very very well priced. Here’s the methodology… atoms -&gt; molecules -&gt; organisms -&gt; templates -&gt; pages. So, you start with atoms. You want to really break the interface down as much as possible. Look at the <code>h1</code>s, <code>button</code>s, <code>field</code>s, <code>images</code>, etc. The you want to take those atoms and put them together into molecules, a molecule is a UI component like a search form. The the molecules make up an organism so you take the molecules and put them into context like a header might include a search form molecule and a nav molecule. From there, you move on to a template which takes the organisms and puts them into a page layout, so the content and skeleton of a page. Finally, you make a page by putting content into the template. You validate or invalidate the underlying assumptions, you test variations like dashboards, alert messages, etc.</p>
<p>To break it down a different way you can look at it as reference (atoms) -&gt; build (molecules, organisms, and templates) -&gt; review (pages)</p>
<p>You want to stylize pieces at a time and explore different ideas together so that the dev-designer interaction isn’t do the discovery, then do all the design, then hand it over complete to the developers. Make you're you’re making element collages and not putting too much time into high fidelity mockups too early.</p>
]]></description>
      </item>
    
      <item>
        <title>Abstractions: Elixir Session</title>
        <link>https://www.daydreamsinruby.com/blog/2016-08-23-abstractions-session-1/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-08-23-abstractions-session-1/</guid>
        <pubDate>Tue, 23 Aug 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This past week, I had the pleasure of attending Abstractions. Sold out at 1500, it wasn’t a language specific conference which enabled me to attend lots of different sessions and topics. The people were great, the conference was packed and the organizers did a fantastic job! As a caveat, again, these are all notes from the talks I attended so my apologies advance if some write-ups are more clear than others.</p>
<h3>The first of many</h3>
<p>The first talk I went to was one by <a href="https://twitter.com/josevalim?lang=en">Jose Valim</a>{:target=&quot;_blank&quot;} on <a href="http://elixir-lang.org/">Exploring Elixir</a>{:target=&quot;_blank&quot;}. I haven’t had a chance to play around with elixir at all yet but had heard a lot about Elixir and phoenix and know a fair amount of companies that are starting to move in this direction. I figured this would be a great intro into some of the key terms and vocabulary used. Part of the focus was on the fact that Elixir is great for building concurrent applications. Concurrency means a bunch of processes that are isolated and every time they change information, the process needs to send that information. In Elixir, every process has a supervisor so that what is going on in one process doesn’t affect the other process. Processes can be things like stats, mailers, etc. that package and run our code. They can also be started and stopped. Processes have supervisors and both are packing into applications. Then the message passing is how the processes communicate.</p>
<p>Jose used the elixir REPL (which is like IRB) to show us a few things. He talked about how things are named obviously which is helpful and that you can run an observer that will then show you all the information you’re looking for. Opening up the tools for discovering all of this information, you can look at nodes and even use the UI to kill nodes in order to see what will happen. For example, when you kill a node, the pool will notice something is wrong and will start a new process. These applications give us visibility into the state, introspection and monitoring abilities, and make it each to break aspects into components. All of this means Elixir applications are concurrent, allow developers to fail fast, and fault tolerant.</p>
<p>He mentioned the goals of the language were compatibility, accessibility, and productivity. Compatibility means that you can call Erlang from elixir, for example, without an issue. Accessibility means there will be a tool for making more tools of the same kind, like writing tests or a library that writes queries using Elixir. Productivity means that everyone has a good programming experience resulting in priorities like good error messages, documentation, good tooling (<a href="http://elixir-lang.org/docs/stable/ex_unit/ExUnit.html">Exunit</a>{:target=&quot;_blank&quot;}, <a href="http://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html">Mix</a>{:target=&quot;_blank&quot;}, and iex were mentioned specifically), and hex package management.</p>
<p>From there, we did a quick demo app. Here are some highlights. You can clear error messages in tests. Documentation is write-in markdown. The framework can take documentation and write a test for it. <a href="http://www.alchemist-elixir.org/">Alchemist</a>{:target=&quot;_blank&quot;} is a toolkit for writing code (demonstrating the types of tools that are starting to exist in the community). Finally, to get started with Elixir go through the <a href="http://elixir-lang.org/getting-started/introduction.html">“getting started” guide</a>{:target=&quot;_blank&quot;}.</p>
]]></description>
      </item>
    
      <item>
        <title>Remote Non-Senior Developers, Part 2: What You Should Consider</title>
        <link>https://www.daydreamsinruby.com/blog/2016-07-29-remote-non-senior-developers-part-2/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-07-29-remote-non-senior-developers-part-2/</guid>
        <pubDate>Fri, 29 Jul 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="p1"><br /></div><div class="p1"><span class="s1"><a href="http://allisonsherenmcmillan.blogspot.com/2016/07/remote-non-senior-developers-part-1.html" target="_blank">Part 1</a> of this post was all about what companies need to consider and think about when hiring a remote developer. It's just as important for folks considering being a remote developer to think about a few critical pieces as well. </span>Real talk time... Not everyone is cut out to be a remote worker regardless of your level of expertise. Some days are great and some are really challenging. If you're a non-senior considering remote work you need to be BRUTALLY honest with yourself because if you're not and you actually wouldn't be a great remote developer then it'll actually be you who suffers the most. So what are those things you should think about?&nbsp;</div><div class="p2"></div><ol><li>&nbsp;Are you a self-sufficient worker? As a remote worker you need to set up a schedule for yourself and get into a routine. You need to push yourself through the days where you're tired and a little checked out. And you need to be filling in the gaps. Working on an issue and stuck but no one is free to pair? If you twiddle or thumbs or go watch tv, remote work is not for you but if you say to yourself, "ok, I can't figure out this problem but it has to do with ______. I'm going to read the docs, find some blog posts, or find a conference talk to watch until someone is available to pair" then you're on the right track.&nbsp;</li><br /><li>Can you boldly, bravely, and shamelessly ask question? This is the most difficult part. You can't be fearful and let imposter syndrome take over because you'll never get anything done. When you're stuck, no one can see that you're stuck or maybe frustrated. You can lean over and say "hey, can you check this out real quick?" You've gotta announce it in a slack channel. And sometimes that sucks but it's important! When I began, I made it a goal to ask 100 questions a week so that I could frame asking questions as a positive thing. It wasn't something I needed to do because I didn't know anything, it was something I had to do to learn and accomplish my goals.&nbsp;</li><br /></ol><div>And finally, what structural pieces can you put in place to help you be successful.</div><ol><li>Coworkers to work with. But you're remote you say? How would this happen? Well, there are lots of other remote workers as well! I generally try to cowork at least once a week preferably with a group of ruby developers. There's no doubt in my mind that you do miss some learning when you're not in an office. You miss overhearing snippets of technical conversations or jumping into a conversation because it sounds interesting so try to creat that for yourself.</li><br /><li>Regularly scheduled pairing sessions. As I got more experienced and started working on more challenging tickets, I would get stuck (as everyone does). Additionally I try to take a "challenge ticket" every week. Challenge tickets are tickets that are just above my skill level. I know they're within reach but I can't quite wrap my head around how to start them or what an effective plan of action would be. They're tickets I have to pair on. We have a pretty small team so sometimes there wasn't anyone free to help. I decided to set up scheduled pairing times. I have one hour a week with two coworkers that is in the calendar to ensure the time is blocked. The time can be used to ask some quick questions and get a few tickets out the door, work on a challenge ticket, or pair on something they are working on. And sometimes we cancel it if it's not needed but the point is that it's there, blocked off.&nbsp;</li><br /><li>A regular way to evaluate yourself. I try to do weekly personal retros which is something I noticed a coworker doing. He just reviews 3 things; liked, learned, lacked. I keep these documented in Evernote and they're a great way to looks back and see all the things that have been going on.&nbsp;</li></ol><br /><div class="p1"><span class="s1">I hope you've enjoyed this short series and it's given you some good information to consider. Again, <a href="https://speakerdeck.com/asheren/remote-non-senior-developers" target="_blank">here are the slides</a> from the original talk.</span></div>
]]></description>
      </item>
    
      <item>
        <title>Remote Non-Senior Developers, Part 1: What Your Company Should Look For</title>
        <link>https://www.daydreamsinruby.com/blog/2016-07-22-remote-non-senior-developers-part-1/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-07-22-remote-non-senior-developers-part-1/</guid>
        <pubDate>Fri, 22 Jul 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="p1">When I tell developers I meet at conferences or elsewhere that I transitioned from a career in nonprofit management to becoming a software developer I usually get smiles. And then, when I add that since becoming a Dev I've only worked remotely, the smile changes to skepticism. I understand hat skepticism. People have views of what will help a junior Dev be successful, some companies have had bad experiences with non-senior remote developers, and there are lots more stories out there. But as remote work and distributed teams become more prevalent in the field, companies shouldn't feel like they can't hire, train, grow, and mentor less experienced developers as a result. Last month at the United Silver Spring Ruby meet up, I spoke about being a non-senior remote developer (note: non-senior does not explicitly mean junior although I was a remote junior developer). Folks of all experience levels were interested to hear what I had to say because many can't envision what a non-senior remote teammate might look like. Here's s little bit about my experience, what I think makes a successful remote non-senior Dev. Part 1 will cover what a company should look for when considering hiring someone and then part 2 (coming out next week) will go over what a less experienced developer should think critically about before deciding to go remote.&nbsp;</div><div class="p2"><span class="s1"></span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">I won’t lie to you. It does take a special type of person to be a remote worker regardless of their level. This is why some companies decide not to have remote employees at all. And it is a little riskier to hire a remote worker with less experience because do can have a higher risk of not being successful if they are not great (I say great because they do need to be better than good) at the things that make remote workers of any level good remote workers. Here are some characteristics you want to look for when hiring for a remote non-senior developer.&nbsp;</span></div><div class="p2"><span class="s1"></span><br /></div><ol class="ol1"><li class="li1"><span class="s2"></span><span class="s1">Someone who takes initiative. There are going to be bumps and issues and as a non-senior dev. In order for the employee to learn and grow as much as they possibly can, they’re going to need to make some decisions, put improvements in place, and get the rest of the team on board with what they need.&nbsp;Make sure that as a company, you look for someone who has done this in the past or has the potential to do this.</span></li><br /><li class="li1">Good communication skills. This is necessary for any developer but especially when remote. How can they articulate their thoughts, the research they've done, a problem they're facing, etc.&nbsp;</li><br /><li class="li1"><span class="s1">Learn about their past. Are they a new professional or just new to development? When I became a developer I had about 7 years of prior professional experience and had already been working from home for 2 years in different industries successfully. I might not be a senior developer technically, but I’ve got all the other skills necessary to be successful.</span></li><br /><li class="li1"><span class="s1">Make sure the person understands what remote work is all about. Ask them about the best and worst parts of working remotely. I don't like working remotely because I can work in my pjs (which I don't do, for the record). I like it because I have a schedule, more work time without a commute, and a quiet distraction-free workspace. I also have opinions about the parts of working remotely I don't like. I’m aware of all the good parts and bad parts of remote work and I know what i’m getting into when I accept a remote position. You want to ensure you’re hiring someone who also understands these aspects or has at least thought through them.</span></li><br /><li class="li1"><span class="s1">And maybe most importantly, someone who isn't afraid to say to a slack channel that they are stuck, frustrated, or need help. Without this personality trait, the individual won't be successful because asking questions is probably the most important skill a developer can have.</span></li></ol><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">I find the best way to learn about all of the characteristics above is to ask behavioral interview questions. Instead of the interview where you decide if you'd like to chill with the candidate, ask about scenarios. For example, tell me about when you were stuck on a problem, what did you do? What if no one was available to help you? What was a time you had an issue with a teammate, how did you address it and how was it solved (if at all)?&nbsp;</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Now finding the right candidate is half the battle, but you also want to make sure they’re set up for success. A person isn't an island. They can only exist and thrive if they're put in an atmosphere to do so. Companies sometimes feel they don't have enough resources or structures in place to support a non-senior person but if you have the right candidate, you actually just need a few small things to ensure success.</span></div><div class="p2"><span class="s1"></span><br /></div><ol class="ol1"><li class="li1"><span class="s2"></span><span class="s1">A good manager who has had some experience/training. This person will be vital for support and working through issues that may come up on the team. They should be an ally and be able to recognize when issues are actually opportunities to help the team as a whole grow and learn more about things like diversity, empathy, mentorship and more.&nbsp;</span></li><br /><li class="li1"><span class="s1">A kind, caring team. It is easy as a non-senior Dev to be scared of asking questions but if the team they are put on is supportive, thoughtful, positive, and constructive it will really go a long way in creating an environment with lots of psychological safety where it is easy to learn.&nbsp;</span></li><br /><li class="li1"><span class="s1">A system of regular check-ins. It's great if you have a good manager but that manager (or even a tech lead) need to be regularly checking in with this person, especially at the beginning.&nbsp;I think 1-1s are a vital part of a healthy team culture regardless of experience level or if folks are remote, but it’s even more important when you don’t see each other every day in person.</span></li><br /><li class="li1"><span class="s1">A partially remote team. Even if your current team of remotes are only senior, having a partially remote team means you understand some of the baseline difficulties of remote work regardless of level. It also hopefully means you have some processes in place to allow for easy, async communication and remote pairing tools that are widely used and understood. I'm not saying it won't work if your first remote hire is non-senior but it's definitely going to be a steeper mountain to climb.&nbsp;</span></li><br /></ol><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">That's it. Really not as involved as you thought it'd be, is it?</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Here are the original slides from the talk I gave:&nbsp;<a href="https://speakerdeck.com/asheren/remote-non-senior-developers">https://speakerdeck.com/asheren/remote-non-senior-developers</a></span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Stay tuned for Part 2 next week.</span></div><div class="p2"><span class="s1"></span><br /></div><br /><div class="p1"><span class="s1">And if you’re interested in hiring a remote software developer or want to speak more about the points made here, <a href="https://twitter.com/allie_p" target="_blank">get in touch</a>!</span></div>
]]></description>
      </item>
    
      <item>
        <title>Technical Interviews - A Revised Process</title>
        <link>https://www.daydreamsinruby.com/blog/2016-07-11-technical-interviews-revised-process/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-07-11-technical-interviews-revised-process/</guid>
        <pubDate>Mon, 11 Jul 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="p1"><span class="s1">I recently attended a handful of conferences, some of which I’ve spoken at. A topic that is frequently discussed based on the research I’ve been doing in regard to the the benefits and challenges of being a parent and developer is technical job interviews. More specifically, people focus on the questions of what do companies ask? What do they expect?&nbsp; And how well do these processes actually asses an applicant’s ability to do the job? One of the things I’ve found in my research is that parents have difficulty showing what they are capable of because they have less time to contribute to open source and side projects. The proliferation of take home code challenges as a response to the backlash against white boarding in interviews has solved some problems but created others. Giving a large chuck of focused time and attention outside of work hours to accomplish a code challenge is often difficult for parents, caregivers, or people who have significant outside-of-work responsibilities. As a result, I’ve done a lot of thinking and discussing about what an effective interview process might be, especially for developers with 2-3 years of experience.</span></div><div class="p2"><br /><span class="s1"></span></div><div class="p1"><span class="s1">I started by thinking about what I do at work. I refactor (a lot). I research (a lot). I learn (a lot). And I work through understanding code that other people wrote (a lot). What I don’t do a lot is code from a blank page. Companies always say that they just want to hire people they know can solve problems and can learn. From what I’ve heard, most technical challenges don’t really accomplish this. I’m not saying the methodology below is perfect but I think it comes closer to a solution where unconscious biases and the dependence on a significant amount of free time are less of a factor while still showing technical capabilities.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Here is what I suggest an interview process contain. Ideally this would be broken up into a short (1.5-2 hours or less) take home portion and an in-person or virtual conversation in lieu of a pairing session and/or take home code project. I think I see the first three items as ideal for a take-home portion and the last two as either take home portions with additional discussion or fodder for some fantastic technical conversations.</span></div><div class="p1"><b><br /></b></div><div class="p1"><b>1.&nbsp;Breaking apart a problem or feature</b>.&nbsp;</div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">One skill I find extraordinarily useful in my day-to-day experience is to be able to break apart a problem or feature. I’m often looking at issues and asking additional questions based on my knowledge of the codebase, and making sure that something doesn’t strike me as problematic within the context of a solution. An example to use in a challenge could be technical, but that may be difficult without a lot of domain knowledge. Keep in mind that an interviewer can also tell someone’s prowess for problem-solving by giving a candidate a scenario that is completely unrelated to tech. How do they reason through it? What pieces does someone highlight? What additional questions would they want to ask? If it seems applicable, what might a diagram of the solution look like? All of these reasoning come into play really often, especially for developers who have 2-3 years of experience, oftentimes a group that is looking to grow in this area and understand what additional questions and considerations more senior developers ask when solving a similar problem.</span></div><div class="p1"><b><br /></b></div><div class="p1"><b>2.</b>&nbsp;<b>Research a topic, library, or other implementation strategy.&nbsp;</b></div><div class="p2"><span class="s1"><b></b></span><br /></div><div class="p1"><span class="s1">This is a great one because we look at this stuff all day long. Developers hear about new tools at a meet up and think about if it’s applicable or if it could help their company in any way. During the day, developers are asked about a feature or functionality and want to see what’s out there and what might be worth implementing or do you want to roll your own? Having to do this research, including listing potential pros and cons, commenting not only on the result but how a candidate came to that conclusion is really powerful. A candidate could include what they read, where they looked, how they got started and more! They could also not include these things which would also be extremely telling in an interview. Ultimately, the “right” answer might depend on project context but this would tell the interviewer a lot about what they might do on the job and how much confidence you could have in something they recommended. Finally, one of the things I love about this question is that it is scalable to every level since you expect junior developers to evaluate possible items differently than a senior developer might.</span></div><div class="p1"><b><br /></b></div><div class="p1"><b>3.</b>&nbsp;<b>Provide an explanation for something.</b>&nbsp;</div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Oftentimes at work, developers are helping to teach each other and learn from one another. I think great code reviews sometimes include a person commenting “what’s this?” or “I haven’t seen this design pattern before. Can you explain it a little further or provide some learning resources?” Most companies want to make sure they’re hiring a team player, someone who isn’t just writing code but contributing to an overall positive culture for a team. For this, I’d suggest a simple term (not some complex process that has lots of different polarizing opinions surrounding it), possibly something related to the company’s codebase that they’ve found new people coming in don’t have lots of experience with or that they need to be taught. Make sure to say it’s okay to google and use resources if a candidate needs to (I assume that a good answer to this question will likely site at least one or two different resources). As an additional consideration, I’ve talked about the importance of actually <a href="http://allisonsherenmcmillan.blogspot.com/2016/05/mentorship-wants-vs-needs.html" target="_blank">interviewing for mentorship</a>&nbsp;if that’s something your company values. In this case, if mentorship and team learning is a company or team value, a company interviewing might ask for two different explanations… one that someone would provide to peers at a similar experience level and one that would be a more appropriate explanation to a junior or brand new developer. This is also a great way to get other people on the team involved in the interview process. Show a couple of teammates at these levels the explanations (without the candidates name, if possible) to see if they understand them.</span></div><div class="p1"><b><br /></b></div><div class="p1"><b>4. Refactoring</b></div><div class="p2"><span class="s1"><b></b></span><br /></div><div class="p1"><span class="s1">We all know that this is what most developers do every day. We refactor. We solve bugs, we tweak features, and we refactor. I LOVE refactoring and I like to think most other developers do as well so provide that as a technical challenge, or even something to pair on. Provide either a method or a file with some code you, as an interviewer, would consider dirty, smelly, ugly, slightly confusing, or whatever other adjective you want to use for it and have the candidate refactor it. You can see their thought process when approaching code, you can probably have a really amazing conversation about this thought process, methodologies used to refactor, different ways of refactoring, and more. If you’re providing a file or more than one example, let the interviewee pick where to start. Again, while this can be a portion of a take home assignment, I think both interviewer and interviewee will get more out of the exercise if they’re doing it as a part of a conversation and it also helps the company interviewing be mindful of outside time spent on challenges.</span></div><div class="p1"><b><br /></b></div><div class="p1"><b>5. Tell me what this file is doing.</b></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Finally, the last item on this list is a blanket- what is this file doing? How many companies have big, complex monolith applications at this point? And how many times do you spend time during your work day working through code, figuring out what’s going on? This is another perfect example of something that can spark a great conversation, show an interviewer how a candidate goes about figuring these problems out (there are a variety of ways to do this) and this skill likely directly affects a person’s ability to accomplish the job successfully. Another super scalable activity because you can show files of different complexity levels to different candidates based on their number of years of experience.</span></div><div class="p2"><span class="s1"></span><br /></div><br /><div class="p1"><span class="s1">Again, I’ve written these suggestions as good options for mid-level developer interviews, but, as I mentioned specifically in a few points, they could be altered slightly to be applicable for interviewing at any level. What do you think? If you interview, do you employ any of these strategies? If you currently depend on long (I define long as anything over 3 hours, even for a junior level developer) take home challenges, would these alternative “assignments” help you asses a developer more effectively when looking at their everyday responsibilities?</span><br /><span class="s1"><br /></span><span class="s1">And if you do interview like this (or would love to test it out), I'd love to talk because I'm looking for my next great career opportunity. <a href="https://twitter.com/allie_p" target="_blank">Get in touch.</a></span></div>
]]></description>
      </item>
    
      <item>
        <title>Write/Speak/Code: the conference highlights</title>
        <link>https://www.daydreamsinruby.com/blog/2016-06-23-writespeakcode-conference-highlights/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-06-23-writespeakcode-conference-highlights/</guid>
        <pubDate>Thu, 23 Jun 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="p1"><span class="s1">Last week I attended Write/Speak/Code for the first time. Now, I’ve attended a good amount of conferences. I find most of them pretty interesting, I always learn something, but I was blown away at how much I was able to take home from this conference. From the pedagogical approaches to the actual content to the awesome women I met, this is a conference to keep your eyes open for in the future.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">I took a grand total of 20 PAGES OF NOTES, so this is going to be my attempt to recap what went on. I want to start by saying that I’ve never been to an all-female conference and honestly wasn’t sure what to expect. I have a lot of male friends and so it wasn’t really until I entered this industry that my “otherness” of being a women became a <i>thing.</i> I have to say that it was actually really awesome. It is so rare that you’re in an entire room with smart, technical women respecting one another. I think, as a result, this conference had a very different vibe and the interactions I had with everyone were just lovely.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">The sessions were quite interesting. I decided to participate in the alumna track since I’ve already done a fair bit of conference speaking. The alumna track was focused on leadership development, self care, and personal realizations that can be put to use in personal and work settings.&nbsp; Some of the highlights included K Wu’s session on ask vs. guess culture. I’d never heard these terms before. She did a great job describing both cultures and also giving tips for interacting with colleagues, managers, and direct reports who might come from the opposite culture as you. From there, we looked at leadership and conflict styles looking at the Hippocrates four temperaments as behavior preferences and different conflict styles and how we interact with our team as a collection of individuals who might have very similar or very different conflict styles. Examining our conflicts styles really made me think a lot about processes in tech and how some processes might give an advantage or disadvantage to folks with a specific conflict style.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">One really interesting point was that over and over again, there was a clarification made in sessions to think about your responses, personality, and style in the context of how you are at WORK. This was interesting to me because women often are expected to act differently at work than in their personal lives and often many of us feel like we can’t bring our whole selves to work. I would be curious if men also feel this way and if there would have needed to be such an emphasis on “are we talking about our overall selves or our work selves in this scenario?”</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">There were a couple of interesting talks that had really tangible, actionable steps. For example, Annyce<b>’</b>s talk on creating videos and Neha’s talk on branding yourself were two of the best I’ve seen in those areas and really provided great, easy steps anyone could take and work towards in a thoughtful productive way.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">There were also some tough sessions… one about self-care which really magnified the pressure many of us feel in the industry and put forth some coping solutions and some very real- talk about whistleblowing, being taken seriously in the industry, and how to give and receive advice.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">There was a FASCINATING talk by Liz on algorithmic accountability and algorithm biases which taught me about how the ways in which a human develops an algorithm, especially a learning algorithm. can introduce biases. That’s definitely a topic I want to learn more about and found the examples incredibly interesting.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">One major accomplishment for me was contributing to open source. I helped build a gem years ago to open source but have basically been scared of OSS ever since. I don’t have a ton of time and Ive heard some really scary stories about getting involved in projects. As part of write/speak/code though you actually get time to work on OSS. This is a big deal for me because I basically have no unspoken for time in my life. I looked over a bunch of projects and ended up working on the callback women rails app (a twitter handle that I rely on to find out about conferences and LOVE). It was a great experience and by the end of the day, I had a PR that was merged in. I’m hoping to keep up with the community and the project and contribute more in the future.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Finally, the last day was self-care day. It was great. There were really interesting talks about burnout, personal journeys, wellness, and salary negotiations. Overall, the conference was fantastic. You could tell the organizers put an incredible amount of thought and effort into the event. The speakers presenting thoughtful, intelligent, actionable presentations. The fellow participants were engaged, respectful, and kind. And, of course, the swag bag was awesome.</span></div><div class="p2"><span class="s1"></span><br /></div><br /><div class="p1"><span class="s1">For a full least of speakers, the schedule and the slides, check out: <a href="https://2016.writespeakcode.com/pages/schedule"><span class="s2">https://2016.writespeakcode.com/pages/schedule</span></a></span></div>
]]></description>
      </item>
    
      <item>
        <title>Pull Requests - It&#39;s all about the details</title>
        <link>https://www.daydreamsinruby.com/blog/2016-06-20-pull-requests-its-all-about-details/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-06-20-pull-requests-its-all-about-details/</guid>
        <pubDate>Mon, 20 Jun 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="p1"><span class="s1">Let’s talk about pull requests. Most people I know operate through a PR system at work. The basic process goes like this:</span></div><ol class="ol1"><li class="li1"><span class="s2"></span><span class="s1">Write code</span></li><li class="li1"><span class="s2"></span><span class="s1">Push up the branch and create a pull request</span></li><li class="li1"><span class="s2"></span><span class="s1">Put a few details in the description about what changes were made</span></li><li class="li1"><span class="s2"></span><span class="s1">Wait for comments</span></li><li class="li1"><span class="s2"></span><span class="s1">Improve code based on comments if needed</span></li><li class="li1"><span class="s2"></span><span class="s1">Ship it</span></li></ol><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">The description portion of the Pull Request can be incredibly important though in making sure your code is reviewed effectively and getting better comments. This is something I’ve been focusing on personally recently and that we’ve been focusing on more as a team. Even though putting more thought and effort into crafting a pull request takes a little more time, it helps us QA much more effectively and allows us to have better context when reviewing each other’s code.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">So here are some quick tips to crafting effective PRs.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">First, start with user stories. This is something I only recently started doing but it basically acts as a summary of what is going on in english. As a ___, when I ___, I want to see ___.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s3">Example:</span></div><div class="p1"><span class="s1"><i>As a developer,</i></span></div><div class="p1"><span class="s1"><i>When I go to the github repo’s readme</i></span></div><div class="p1"><span class="s1"><i>I want to see clear instructions to get set up</i></span></div><div class="p2"><span class="s1"><i></i></span><br /></div><div class="p1"><span class="s1"><i>As a developer,</i></span></div><div class="p1"><span class="s1"><i>When I go to the github repo’s readme</i></span></div><div class="p1"><span class="s1"><i>I want the setup instructions to work</i></span></div><div class="p2"><span class="s1"></span><br /></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Second, what happened bullet points. This is just an overview of the biggest changes. It should potentially re-iterate some of your git commit history but not all of it. If you’re still working on creating a clear git commit history with small, specific commits, this section might be a little bigger.&nbsp;</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Third, screen shots. To take a screenshot of a specific portion of a screen, on a mac, you use SHIFT + CMD + 4. It’s often helpful to annotate that screenshot by placing arrows or text onto the image. An easy way to do this is to open the screenshot, open the toolbox, and place the arrow shape into the image and then save it. You can see where all these things are below.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1"><b>Open Toolbox</b></span></div><div class="p1"><span class="s1"><b><br /></b></span></div><div class="p1"><span class="s1"><b><a href="http://2.bp.blogspot.com/-zSCI9PbvwrM/V2g20sItwYI/AAAAAAAAAYk/NcCUT5teuFMhf1df6XJMseWYvNethLC_wCK4B/s1600/open_toolbox.png" imageanchor="1"><img border="0" height="57" src="https://2.bp.blogspot.com/-zSCI9PbvwrM/V2g20sItwYI/AAAAAAAAAYk/NcCUT5teuFMhf1df6XJMseWYvNethLC_wCK4B/s400/open_toolbox.png" width="400" /></a></b></span></div><div class="p2"><span class="s1"><b></b></span><br /></div><div class="p1"><span class="s1"><b>Select Shape</b></span></div><div class="p1"><span class="s1"><b><br /></b></span></div><div class="p1"><span class="s1"><b><a href="http://2.bp.blogspot.com/-VrWlzBfEOU0/V2g232ocXDI/AAAAAAAAAYs/ETsPuNQbX54rChGfSKFKp7Xt_XYvg4g1ACK4B/s1600/select_arrow_option.png" imageanchor="1"><img border="0" height="56" src="https://2.bp.blogspot.com/-VrWlzBfEOU0/V2g232ocXDI/AAAAAAAAAYs/ETsPuNQbX54rChGfSKFKp7Xt_XYvg4g1ACK4B/s400/select_arrow_option.png" width="400" /></a></b></span></div><div class="p2"><span class="s1"><b></b></span><br /></div><div class="p1"><span class="s1"><b>Select arrow option</b></span></div><div class="p1"><span class="s1"><b><br /></b></span></div><div class="p1"><a href="http://4.bp.blogspot.com/-hicTeYSPXN8/V2g2tNZhoBI/AAAAAAAAAYc/UT__yQfRz0AWpFyw8ggRSrAExU-f3KR3gCK4B/s1600/choose_shape.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="52" src="https://4.bp.blogspot.com/-hicTeYSPXN8/V2g2tNZhoBI/AAAAAAAAAYc/UT__yQfRz0AWpFyw8ggRSrAExU-f3KR3gCK4B/s400/choose_shape.png" width="400" /></a><span class="s1"><b><br /></b></span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1"><br /></span></div><div class="p1"><span class="s1"><br /></span></div><div class="p1"><span class="s1"><br /></span></div><div class="p1"><span class="s1">Fourth, record video or screencast. I’m not great at recording a demo video but screencasts can be really helpful. <a href="http://recordit.co/" target="_blank">RecordIt</a> was recommended to me and it’s been great so far. It’s really simple to understand, use, and post where necessary.&nbsp;</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Fifth, Add QA instructions as a checklist. At my company, developers do a pretty in depth QA of each other’s issues in addition to code review. Creating a QA checklist also helps you as a developer think through possible edge cases or flag critical paths that need a more in depth look. This QA checklist should be specific, include links and then what should be seen. It’s often easiest to make this as a checklist so that whoever is QA’ing can just check off the items as the QA. The example below is VERY simple, but hopefully it is easy to imagine what instructions for a more complex feature or bug fix might look like.</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s3"><b>Example:</b></span></div><div class="p1"><span class="s1">Go to <a href="http://www.allisonsherenmcmillan.blogspot.com/"><span class="s3">www.allisonsherenmcmillan.blogspot.com</span></a> and sign in as an admin</span></div><div class="p1"><span class="s1">Go to the consulting tab</span></div><div class="p1"><span class="s1">[ ] You should see bold headlines</span></div><div class="p1"><span class="s1">Sign out of the admin role</span></div><div class="p1"><span class="s1">Go to the consulting tab</span></div><div class="p1"><span class="s1">[ ] You should still see the bold headlines</span></div><div class="p2"><span class="s1"></span><br /></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Sixth, add labels in Github. This is more in reference to the code review processSome of the labels we use include things like “Ready for improvement”, “Don’t merge or review”, etc. Sometimes if I don’t have time to complete the description for a PR, I’ll just temporarily slap a “Don’t merge or review” label on there until I can complete it.</span></div><div class="p2"><span class="s1"></span><br /></div><br /><div class="p1"><span class="s1">Finally, open your PR and get excited for some great feedback. By spending more time on your PR description, you'll get better feedback and you'll be able to ship more confidently.</span></div>
]]></description>
      </item>
    
      <item>
        <title>Mentorship: Wants vs. Needs</title>
        <link>https://www.daydreamsinruby.com/blog/2016-05-08-mentorship-wants-vs-needs/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-05-08-mentorship-wants-vs-needs/</guid>
        <pubDate>Sun, 08 May 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Mentors generally have the best of intentions. They want to help, they want to teach, they want to give back to the community oftentimes because they received assistance and mentorship to reach the level they are at. But sometimes, what a mentee needs doesn’t quite match up with what a mentor wants to give. In conversations about mentorship, I feel this piece isn’t frequently addressed. There are plenty of conversations about mentorship and plenty of common topics that are discussed. I always hear about how to find a mentor or mentee, how to have a successful relationship, and i’ve written/spoken about these subjects in the past <a href="http://allisonsherenmcmillan.blogspot.com/2013/11/mentorship-from-n00bs-perspective.html">here</a> and <a href="https://speakerdeck.com/asheren/tim-gunn-morpheus-and-gandalf-reimagining-what-mentorship-means">here</a>.<br /><br />One of the most important aspects to consider in both personal and professional mentorship is do the learning styles of the two people match up? I have different mentors for different subjects. I have some people I talk to about being a woman in tech or about work/life balance, etc. and I have other mentors that meet with me more frequently to cover technical skills. For me, I consider these technical mentors to be both personal people I meet with and more experienced developers I work with every day. Thinking about learning styles is important for both. People learn and teach differently. When establishing a relationship with a personal mentor, make sure you’re working with someone who understands how you think and make sure you understand how they explain things or walk through code with you.<br /><br />Companies with a focus on team health and personal growth have good intentions and look for senior developers that have a vested interest in mentoring in order to grow their less experienced developers. Less experienced developers look for teams and team members they can learn from. When looking for opportunities, talking to senior developers about how they mentor is incredibly important but even better is when you can pair or ask a technical question to see how they explain a concept and whether they use language and an approach you can understand. One of the most important questions to ask when pairing or interviewing at a company is “can you repeat that?” or “can you explain that in a different way?” Those questions reveal mountains of information about how they might interact with an individual on a regular basis, and how much one can expect to learn from a person or team while working there.<br /><br />Additionally, for companies who feel mentorship is an important team value, consider including your least experienced developers in interviews, and not just in the culture-fit interview portion. Involve them in pairing session or in one of the technical interviews. It will show candidates that you are serious about mentorship and the growth of the whole team, and will ensure that you hire someone that your less experienced developers learn from effectively. While this likely isn’t the case for everything related to hiring, when it comes to mentorship on a team, It’s not about what the senior developer or company wants, it’s about what the less experienced developers need.<br /><br />A learn/teach mismatch can be extremely frustrating and emotionally taxing. A mentor might get frustrated explaining the same concept over and over again, while a mentee (especially one who’s new to the field) might think they don’t belong in tech or just can’t understand. This same experience can be true in the context of work. A more senior developer might think the members of their team aren’t growing or aren’t learning. They may get frustrated if they’re re-explaining concepts. Less experienced developers feel stunted in their growth, feel bad about asking the same question more than once, and feel themselves like they aren’t meeting their potential. The broad implications of this are, at best, general dissatisfaction and, at worst, a lack of desire to play the role of either mentor or mentee in the future.</p>
]]></description>
      </item>
    
      <item>
        <title>Parenting and Developing</title>
        <link>https://www.daydreamsinruby.com/blog/2016-04-05-parenting-and-developing/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-04-05-parenting-and-developing/</guid>
        <pubDate>Tue, 05 Apr 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A few months ago, I was learning how to balance being a new-ish software developer and a new mom. I reached out to a few mothers in the community and was amazed at what I heard. Every mom talked about facing similar challenges which got me thinking... do all parents feel this way? Are we all feeling isolated about the same issues?<div><br /></div><div>As a result, I put together a survey and tweeted it out to parents (mothers and fathers) who are also developers. The results have been fascinating and very telling of issues and trends in this area.</div><div><br /></div><div>The great people at Ruby on Ales allowed me to speak about the survey and it's findings this past weekend (video will be posted once it's available).</div><div><br /></div><div>As I mentioned in the talk, this research will be ongoing. The more data I can collect, the better! If you are a developer and a parent, or know someone who is, <i>Please</i> fill out this survey if you have a chance. It's super short and we're all busy parents so don't worry about complete sentences or well-thought out responses... just a simple stream of consciousness is more than okay with me!</div><div><br /></div><div>Thank you in advance!!! And ping me if you've got any questions.</div><div><br /></div><div>Survey link: <a href="https://allisonmcmillan.typeform.com/to/BbVmbH">https://allisonmcmillan.typeform.com/to/BbVmbH</a></div></p>
]]></description>
      </item>
    
      <item>
        <title>Rails Runner to the Rescue</title>
        <link>https://www.daydreamsinruby.com/blog/2016-02-26-rails-runner-to-rescue/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-02-26-rails-runner-to-rescue/</guid>
        <pubDate>Fri, 26 Feb 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Yes! I finally have something good and technical that I can blog about!! <br /><br />This week, I was working on one of our smaller applications. At GA, we send out surveys to students in order to get feedback on courses and programs and I was looking to add a new survey template. After becoming familiar with the codebase, I discovered that new surveys have previously been added by creating a bin file and then running that script since new surveys require tons of validations and therefore it is too complex to just add a survey via the console. And so that’s what I set off to do. Now, the actual creation of the survey wasn’t so difficult. The app is very modular and pretty clean and easy to understand. I finished up that task (as well as updated the readme to find this sort of information a bit easier) and then I said, ok great, well, now I have to deploy it to our staging environment. And so I sat for a moment and thought, well, how do I run a bin script only in staging. Enter <code>rails runner</code>. Rails Runner is an easy way to execute 1 file in an environment of your choosing. You can find a tiny bit more about rails runner in the rails docs <a href="http://guides.rubyonrails.org/command_line.html#rails-runner">here</a>.<br /><br />So based on <a href="http://stackoverflow.com/questions/4543744/how-to-run-a-simple-file-on-heroku">this post</a>  I ran what I thought was the correct command…<br /><br /><code>heroku run bundle exec rails runner ./bin/file_name -r staging</code><br /><br />and I got an error<br /><br /><code>/app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.2/lib/rails/commands/runner.rb:62:in <code>eval': /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.2/lib/rails/commands/runner.rb:62: syntax error, unexpected '.' (SyntaxError)&lt;br /&gt;./bin/file-name&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;WHAT?!&lt;br /&gt;&lt;br /&gt;okay well, maybe I don’t need that ‘.’ in front of /bin and that is the issue. and so I ran&lt;br /&gt;&lt;br /&gt;&lt;code&gt;heroku run bundle exec rails runner bin/file_name -r staging&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and got another error&lt;br /&gt;&lt;br /&gt;&lt;code&gt;/app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.2/lib/rails/commands/runner.rb:62:in </code><top required="">': undefined local variable or method `bin' for main:Object (NameError)</top></code><br /><br />well, now I was confused. I obviously needed the ‘.’ there and the first error was pointing to a syntax error… was there a typo in my code? I looked (and had a colleague look as well) and couldn’t find anything. I searched and searched (there really isn’t much about rails runner, which is why I decided to write this blog post!). okay, a little while passed and so I said to myself “it’s time to pair!”<br /><br />I grabbed a colleague who suggested to see if we could even just get into the shell and then run the command from there, so I entered <code>heroku run bash</code>. Success! I’m in. Then we just did an ‘ls’ to make sure we were in the right place. Yup, right place. So then we did <code>ls bin</code> and the file wasn’t in the bin folder! Here’s where I had my moment… I thought that I needed to run the bin scripts BEFORE deploying the PR to staging so that the files would exist and the surveys would appear in our staging environment. HOWEVER, rails runner was looking into the staging code base in order to find the files but of course, they weren’t there because I hadn’t merged the branch in.<br /><br />Merged the branch in, and then ran <br /><br /><code>heroku run bundle exec rails runner ./bin/file_name -r staging</code><br /><br />and the problem was solved. Just a simple order of operations issue.</p>
]]></description>
      </item>
    
      <item>
        <title>Searching through logs</title>
        <link>https://www.daydreamsinruby.com/blog/2016-03-24-searching-through-logs/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-03-24-searching-through-logs/</guid>
        <pubDate>Thu, 24 Mar 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Recently, I needed to check out which endpoints in a specific version of our api were being hit/ if they were being hit at all. This involves searching through the paper trail logs, which was an interesting process so I thought I’d write about it.<br /><br />First, I want to say, there is a better path than the one I took. It wasn’t until after I did all this log downloading and searching that I discovered the paper trail CLI. I haven’t had a chance to take a deep dive into it yet, but I assume using it is better than downloading 30 days of log files and than combining them into 1 log file.<br /><br />Which is what I did first. I had to look at 30 days worth of logs, so I went to the paper trail heroku add-on and downloaded all 30 days worth of logs. Then I used <code> cat *.tsv &gt;merged.tsv</code> to put all of the 30 files into 1 file. After that, I checked which endpoints I needed to look at by just looking at the routes file. Luckily, there are a pretty finite number of endpoints for the specific version I was looking at. I think, if I was dealing with significantly more endpoints, i’d need to figure out a better systems for ensuring that I’ve checked all the endpoints.<br /><br />Then, for the simple endpoints (ie- /livestreams or /livestreams.json for the index endpoint or /livestreams/ for the show endpoints) I just ran a simple <code>grep -c</code> command which greps for that path and then counts it. For example <code> cat FILE_PATH | grep -c /v1/livestreams.json</code>.<br /><br />When I got to a slightly more complex endpoint, for example, one that had a path like /v1/livestreams/something_unique_here/watched I couldn’t just grep for the endpoint, I needed to use a grep compatible regex to find the number of results that had “watched” at the end. I did this by searching <code> cat FiLE_PATH | grep -c ‘/watched\b’</code> which looks only for the last bit of the url.<br /><br />And that’s it. Pretty simple but I hadn’t handled searching through large log files or any sort of complex grepping before.</p>
]]></description>
      </item>
    
      <item>
        <title>Arlington Ruby&#39;s Ruby Retrosession 2016</title>
        <link>https://www.daydreamsinruby.com/blog/2016-03-06-arlington-rubys-ruby-retrosession-2016/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-03-06-arlington-rubys-ruby-retrosession-2016/</guid>
        <pubDate>Sun, 06 Mar 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Arlington Ruby RetroSession… Retro ruby for short was this past weekend. I’ve been to retro ruby the past few years, with the exception of last year when I was in labor. It was so fantastic to be back at a community event. I love the unconf idea and feel like I always get a lot out of the conversations so it was great to be able to participate.<br /><br />The sessions were as follows:<br /><br /><ul><li>Rspec</li><li>Advanced Newbie (including mentorship, cs without a cs degree, importer syndrome, and ways to step up as an advanced newbie)</li><li>Freelancing</li><li>Everything APIs</li><li>Functional web stacks</li><li>productivity tools hack</li><li>infrastructure as code</li></ul>and<br /><ul><li>making a safe space.</li></ul><br /><br />Since this was a 2-track conference, I only went to half of these. There was also ice cream, a retro at the end, and lightning talks.<br /><br />In addition there was a separate newbie track. Notes and resources gathered from that track are here: <a href="https://gist.github.com/kalimar/1a23222b59fd0208f88d">https://gist.github.com/kalimar/1a23222b59fd0208f88d</a><br /><br />So first I went to the advanced newbie session. We started by talking about mentorship and setting up both formal and informal mentorship opportunities. We never really got into ways to step up, but one CS subject that was mentioned as important for non-cs folks to know was Cryptography and a specific place to do this is through <a href="http://cryptopals.com/"><b>CryptoPals</b></a>. Another suggestion related to learning cs fundamentals was by watching university courses. A list of these are available through the Github repo <b><a href="https://github.com/prakhar1989/awesome-courses">awesome courses</a></b>.<br /><br />Next I went to everything APIs. The conversation kicked off by asking what do you want the JSON return to look like and how that is a major decision what crafting an API… looking at the response types. I took some notes about things related to APIs that I didn’t know like how api versioning relates to 2 things, the schema and endpoints, where, I think, only the endpoint is usually considered. <br /><br />There was a great discussion about good practices for external APIs which includes different strategies of putting docs into the actual api. And another discussion about how people like to create APIs… both <b><a href="https://github.com/ruby-grape/grape" target="_blank">grape</a></b> and <b><a href="https://github.com/rails-api/active_model_serializers" target="_blank">active model serializers</a></b> were mentioned.<br /><br />Some random tools mentioned and things to look up were: <b><a href="https://github.com/synctv/swagger_yard" target="_blank">Swagger yard</a></b> was also mentioned as a way to auto-generate documentation. <b><a href="https://github.com/realestate-com-au/pact" target="_blank">Pact</a></b> which writes tests in web mock style and then generates a JSON fixture file which gets shared with the micro service where the JSON is generating the response. It then uses a rake task, I think, to execute the tests. This goes along with <b><a href="https://github.com/bethesque/pact_broker" target="_blank">pact broker</a></b> which is an intermediate layer. <b><a href="https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html" target="_blank">Graphql</a></b> is really strict about endpoints but generates great docs and is just 1 endpoint… you tell it what object or data structure you want and then it just gives you back only that stuff. <b><a href="https://github.com/etsy/statsd" target="_blank">Statsd</a></b> helps you figure out what is still being used which helps with what endpoints are still needed or can be deprecated.<b><a href="https://github.com/mashery/iodocs" target="_blank"> I/O docs</a></b> generates query explorers. <br /><br />Finally, for API design, someone mentioned <b><a href="http://tastypieapi.org/" target="_blank">tasty pie</a></b> which is big in the python community and would be great if something similar existed for the ruby community and <b><a href="https://en.wikipedia.org/wiki/HATEOAS" target="_blank">HATEOAS</a></b> which is a  response call that tells you everything else you can do with your API.<br /><br />After I bounced between productivity hacks and functional web stacks but spent most of my time in productivity hacks. There’s always great stuff out there. A full-ish list of what was discussed can be found in the <a href="https://hackpad.com/RetroRuby-2016-LQp0Q1zqa6t" target="_blank">hackpad</a>.<br /><br />The last session I attended was about infrastructure as code. This was really interesting to me because, I feel like one of the next steps for me is to learn more about devops and how deployments, etc. actually work, without the magic of Heroku. The session started out talking about what we think about when we think about infrastructure as code… things like <a href="https://www.docker.com/" target="_blank">Docker</a>, <a href="https://www.ansible.com/" target="_blank">Ansible</a>, version control, <a href="https://puppetlabs.com/" target="_blank">Puppet</a>, and <a href="https://www.chef.io/chef/" target="_blank">Chef</a>. It is  humans changing code and code changing computers. The reason we do this is so that the infrastructure code is repeatable and can be replicated in the future. There are lots of challenges to infrastructure as code but the main thing mentioned was that if you don’t stay up to date on it, then there can be lots of security holes. Additionally, if you want to start learning about thing like Docker, etc. the barrier is pretty high. The tutorials are fairly difficult and since it’s all changing so quickly, lots of information, tutorials, and documentation is out of date.<br /><br />Some tools mentioned:<b><a href="https://flynn.io/" target="_blank"> flynn.io</a></b> which is a platform as a service. There’s an interface for Docker, push heroku-like commands, and buildpacks. <b><a href="https://www.openshift.com/" target="_blank">Open shift</a></b> by Red Hat. <a href="https://www.terraform.io/" target="_blank"><b>Teraform</b></a> which is a command line utility that can go across services and configure them (i’m not sure this is the best explanation but this is at least a piece of what it does). <b><a href="https://www.ottoproject.io/">Otto</a></b> by Hashicorp which is an opinionated system which seems like it might be a good option for an off-the-shelf solution.<br /><br />Some good resources to get started include <b><a href="https://www.expeditedssl.com/aws-in-plain-english" target="_blank">AWS in plain english</a></b> and <b><a href="http://12factor.net/" target="_blank">twelve factor app</a></b> which talks a lot about the decisions that need to be made and the things you should be thinking about when you’re looking at infrastructure stuff. Finally, it was suggested that to get started learning about this, to just create a VM on your machine and play around using something like <b><a href="https://www.vagrantup.com/" target="_blank">vagrant</a></b>. And remember, devops is stressful so find a mentor, find a support group, and practice #hugops often.<br /><br />I didn’t take as many notes on the lightning talks. Someone gave a great talk about note-taking (which I obviously love doing) and suggested to take notes in markdown and to create a notes folder in every repo (or just in your projects folder) and add it to your .gitignore. I actually love this suggestion because recently, I find i’ve got over 10 notebooks filled with notes and without having the time to add color coded tabs to these notebooks, it’s getting more difficult to find things I KNOW I learned so I’ve been debating starting to take these notes in a more searchable fashion (but don’t really want to just have a gazillion notes in evernote) so this sounds like a great suggestion. Also, taking the notes in markdown would force me to become better at it which I think would be super beneficial in general. The other thing I wrote down was a github repo called <b><a href="http://chrisarcand.com/introducing-dug/" target="_blank">Dug</a></b> which provides a more transparent view into open source software and allows you to organize github notifications better than you can with just gmail filters. Also, there were a few talks that related to sleep but I didn’t take notes on any of those because I have an 11 month old. One day I’ll sleep again.<br /><br />That’s all! Retro Ruby was awesome. It was so much fun to see people again, learn stuff, and have great conversations. Here's the <a href="https://hackpad.com/RetroRuby-2016-LQp0Q1zqa6t">Hackpad</a> with notes from the whole conference.<br />Plus the t-shirts glow in the dark!!!!</p>
]]></description>
      </item>
    
      <item>
        <title>On what the heck to blog about</title>
        <link>https://www.daydreamsinruby.com/blog/2016-02-01-on-what-heck-to-blog-about/</link>
        <guid>https://www.daydreamsinruby.com/blog/2016-02-01-on-what-heck-to-blog-about/</guid>
        <pubDate>Mon, 01 Feb 2016 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="p1"><br /></div><div class="p2">A few months ago, I made a commitment to start blogging again at least once per month. I keep this reminder on my to-do list and try to keep a running list of topics that I can write on. This WAS great when I had a lot of hours to put into extra learning, extra reading, and all those other great things you do when you’ve got more time. I blogged about side projects, issues I faced, interesting blog posts I’d read that week and a whole bunch of other things that I thought were pretty interesting.<span class="s1"></span></div><div class="p2"><span class="s1"></span><br /></div><div class="p1"><span class="s1">Now that I have a small kiddo who periodically requires some attention (and by periodically I mean I looked away for like 5 seconds the other day to finish something and he totally face-planted), even more of my learning is done on the job. What I do at work is really interesting. The app is fairly complicated and so I new and different things every week. From feature builds to bug fixes to investigations, every day is varied. However, with all this learning i’m doing at work, and all the notes I take in my notebook so I can study and remember everything in the future, it’s hard to blog about these things. Why? Because there’s so much contextual knowledge around the problem and the solution. Aside from the fact that a lot of things are proprietary, you need to know a lot about the application, data structure, and history of development in order to understand why we need to solve some of the problems that we do. Furthermore, oftentimes what I am doing is a small piece of a larger puzzle since my tasks are often more digestible than whole large-scale tasks and to blog about this small piece would require a significant understanding of the larger component I’m working on. Finally, I still find it difficult to figure out which solutions are only applicable to that specific problem I’m solving and which are applicable to many different situations.</span></div><div class="p2"><span class="s1"></span><br /></div><br /><div class="p1"><span class="s1">So, what do you blog about when you’re not working on a side project? How do you come up with ideas? I wish I could blog more often but I’m currently feeling like it just takes so long to figure out what to talk about!</span></div>
]]></description>
      </item>
    
      <item>
        <title>Chrome Extensions and a Return to Meetups!</title>
        <link>https://www.daydreamsinruby.com/blog/2015-12-25-chrome-extensions-and-return-to-meetups/</link>
        <guid>https://www.daydreamsinruby.com/blog/2015-12-25-chrome-extensions-and-return-to-meetups/</guid>
        <pubDate>Fri, 25 Dec 2015 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Well, I missed my &quot;blog post a month&quot; by a week or so, but I finally got an idea for a blog post! A few weeks ago, I finally made it back to <a href="http://arlingtonruby.org/" target="_blank">Arlington Ruby</a> (as a part of me trying VERY hard to start going back to meetups and getting re-acquainted with the community I love so much) and learned about making chrome extension from <a href="https://twitter.com/kyloma" target="_blank">Casey Watts</a>. Nope, it has nothing to do with Ruby but it was really interesting to learn about. There were two components of this presentation that I enjoyed. The first was the actual technical content of learning how to do a chrome extension and the second was the presenter's teaching methodology.<br /><br />Let's start with the technical content. Did you know that making chrome extensions is super easy?! In about 30 minutes, we already created like 3 chrome extensions. There are 2 things we learned... bookmarklets and actual chrome extensions. According to the presentation, a bookmarklet is &quot;a bookmark that runs javascript on the current page instead of taking you to a new page&quot; (like a regular bookmark would).The basic premise of both bookmarks and chrome extensions is altering the &quot;location&quot; field on the &quot;add page&quot; form in order to execute the javascript.<br /><br />An extension is only slightly more complicated than a bookmarklet... at least the examples we did during the meetup, but i'm sure that this is where it can get really complex with more sophisticated ideas. An extension has a manifest.json file which outlines the name, version, description, javascript files (or html or css) you want to pull in, and where you want the extension to work.<br /><br />Finally, we spent a little bit of time talking about examples of chrome extensions people might want to build, how to distribute and deploy a chrome extension, and some security things to keep in mind when either downloading or deploying an extension.<br /><br />As I mentioned earlier, I still assume that making a more complex extension is more difficult. It seems like it could potentially involve a significant amount of code and because of how the code is pulled into a chrome extension, could be complicated to mentally keep it all straight and organized. All in all though, I had no idea that building an extension was so straightforward and I can't wait to think more critically about extensions I use or actions that might make sense to make an extension for.<br /><br />The second part of this presentation that I liked was how it was taught! It is really difficult to teach something technical without really knowing the group of people you are teaching. It is even more difficult to do this when you know that there will be a pretty diverse level of skills in attendance as well. Casey did a great job! He started by framing what we were doing and what the end goal of the &quot;lesson&quot; was. He then had us pair up, which enabled everyone to work with someone on the parts of lesson that were self-guided. It was great to bounce ideas off of someone else and, we all know that often at technical meetups it can be difficult to meet other people. The guide that he walked us through was really clear and easy to understand. You could move through it faster if you were more experienced or slower if you were less so. It was a lesson but felt very laid back, informal, and fun. Finally, we worked independently in small chunks of time but then came together in between those times. When we came together as a group, Casey made sure we were all paying attention and as a result I think there was much more group participation than if he had just hoped that everyone was engaged instead of really enforcing that they do so. I feel like everyone left having met/spoken to someone AND actually having learned a bit more about chrome extensions.</p>
]]></description>
      </item>
    
      <item>
        <title>RubyConf Australia</title>
        <link>https://www.daydreamsinruby.com/blog/2015-11-18-rubyconf-australia/</link>
        <guid>https://www.daydreamsinruby.com/blog/2015-11-18-rubyconf-australia/</guid>
        <pubDate>Wed, 18 Nov 2015 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I am actually working on a more technical post. It's so difficult to come up with them when I can't show code from work since that's what i'm doing and learning al day!<br /><br />In the meantime I wanted to announce that I'm SO excited to be speaking at <a href="http://www.rubyconf.org.au/2016/speakers" target="_blank">RubyConf Australia</a> in February about working remotely with the phenomenal <a href="https://twitter.com/devneck" target="_blank">Kevin Hopkins</a>.</p>
]]></description>
      </item>
    
      <item>
        <title>Look ma, I’m on a podcast!</title>
        <link>https://www.daydreamsinruby.com/blog/2015-10-25-look-ma-im-on-podcast/</link>
        <guid>https://www.daydreamsinruby.com/blog/2015-10-25-look-ma-im-on-podcast/</guid>
        <pubDate>Sun, 25 Oct 2015 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="p1">I talk to people all the time about what it’s like to work remotely, especially what it’s like to work remotely as a newer developer. The wonderful folks at The Frontside decided that it would make a great topic for their podcast this week. Here’s a link:&nbsp; <a href="https://frontsidethepodcast.simplecast.fm/">https://frontsidethepodcast.simplecast.fm/</a> &nbsp;Enjoy!</div><div class="p2"><span class="s1"></span></div>
]]></description>
      </item>
    
      <item>
        <title>I&#39;m Back!</title>
        <link>https://www.daydreamsinruby.com/blog/2015-10-20-im-back/</link>
        <guid>https://www.daydreamsinruby.com/blog/2015-10-20-im-back/</guid>
        <pubDate>Tue, 20 Oct 2015 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><span style="background-color: rgba(255, 255, 255, 0.00784314); color: #444444; font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;">After a hiatus (which was admittedly even longer than I thought it was!), I've decided that everyone’s got to start somewhere. So, in an attempt to re-commit to blogging, and not let this be another dead technical blog on the interwebs, this is a simple update post. I had envisioned doing something more substantial than just an update but after watching “post on blog” float on my to-do list from one week to the next, I figured its best to just get something up and try to get things going again.</span><br /><span style="background-color: rgba(255, 255, 255, 0.00784314); color: #444444; font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;"><br /></span><span style="background-color: rgba(255, 255, 255, 0.00784314); color: #444444; font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;">Since the last time I blogged, I am still at General Assembly, learning new things every day. I spoke at Ruby Nation 2015 about presenters! My first technical talk. I took a mobile development/swift course, attended Strangeloop and DCamp again, and had a baby (there will definitely be a future post about taking maternity eave as a newer developer AND having to take pumping breaks as a dev, two things that I've found very difficult).</span><br /><span style="background-color: rgba(255, 255, 255, 0.00784314); color: #444444; font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;"><br /></span><span style="background-color: rgba(255, 255, 255, 0.00784314); color: #444444; font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;">I'm looking forward to getting back to posts about things I'm learning like more Javascript and writing better tests, things I've found newly challenging like anything related to coding and babies, and things I've gotten better at like being a remote junior developer. My goal is to post <i>at least </i>once a month so see you in a few weeks!</span></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 6/27 - 7/10</title>
        <link>https://www.daydreamsinruby.com/blog/2014-07-12-interesting-reads-627-710/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-07-12-interesting-reads-627-710/</guid>
        <pubDate>Sat, 12 Jul 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Seems as though either lots of people are on vacation and therefore there is less to read OR I am just super crazy busy and have missed some great posts. Well, I've only got a few posts for today but they're good ones, so check them out.<br /><br /><a href="https://medium.com/@maebert/9-things-i-learned-as-a-software-engineer-c2c9f76c9266">Things I learned as a Software Engineer</a><br /><br /><a href="http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/">An older but great post about making fat models skinnier</a><br /><br /><a href="http://www.theeffectiveengineer.com/blog/what-qualities-make-a-good-startup-engineer">What makes a good startup engineer (as opposed to a regular engineer)</a><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Asking the questions</title>
        <link>https://www.daydreamsinruby.com/blog/2014-07-01-asking-questions/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-07-01-asking-questions/</guid>
        <pubDate>Tue, 01 Jul 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>When someone is asked to describe me, the word ‘shy’ does not come to mind. I am not a quiet person and I don’t fear asking questions. In fact, I know that pushing myself to never be embarrassed and to ask any question that came to mind as I was learning to code is absolutely what helped me progress to where I am today. However, recently, I’ve found myself holding back and keeping a bit quieter and why? Because I think that I should know better.<br /><br />When I first started on this journey of learning to code, I knew nothing and I mean, nothing. I had never opened the terminal before, had never used the command line, really didn’t know all that much beyond basic information about computers in general. Because I had no knowledge, I decided I could ask anything. Nothing was off limits and nothing was a stupid question because everything was new to me. In my first full time contract position, I asked lots of questions. I was able to do this without fear and without concern because I told everyone that it was my first full time position and I still had a lot to learn.<br /><br />I wrote a post a while ago about how the things you worry about change as your progress from super new to new and then new to first full time position, so I think this is a thing that happens when transitioning from a first position to a second one. <br /><br />Recently, I’ve been afraid to ask questions. I know that’s silly and completely unwarranted. Everyone knows that for your entire life as a programmer, asking questions is the best way to learn! I hope to never stop asking questions! So, what’s been stopping me. Well, part of me feels like I should know better. I’ve been learning for a while now… I’m not completely brand new to programming anymore, but what does that mean? How much should I know? Is it okay to ask to be reminded of things? Or to need a refresher? Are other people judging me when I ask a question? Especially if the question seems super simple? <br /><br />Logically, I know asking questions is great. The more questions I ask, the better I’ll get. And the better I get, the more confident I’ll become (or at least that’s what I think). But even though I know all of this and it makes sense in my mind, a small part of me is still worried about what other people think of me, about how much or little I progress on a regular basis, and about what I now or don’t know. I just keep reminding myself that asking questions is good! And that asking makes me better! And finally, that if I don’t ask… even the simple questions that I might be embarrassed about having to ask, then I’ll never know the answer and that’s even worse.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 6/21 - 6/27</title>
        <link>https://www.daydreamsinruby.com/blog/2014-06-28-interesting-reads-621-627/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-06-28-interesting-reads-621-627/</guid>
        <pubDate>Sat, 28 Jun 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Just a few short reads this week on SQL, servers, interviews, and teams.<br /><br />Enjoy!<br /><br /><br /><a href="http://open.bufferapp.com/distributed-team-benefits/?utm_source=Software+Lead+Weekly">Working on a distributed team</a><br /><br /><a href="http://www.nomachetejuggling.com/2014/06/24/the-worst-programming-interview-question/">A perfectly bad interview question</a><br /><br /><a href="http://carlos.bueno.org/2014/06/mirrortocracy.html">Culture fit and its danger</a>s<br /><br /><a href="http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/">SQL joins</a><br /><br /><a href="https://blog.engineyard.com/2014/ruby-app-server-arena-pt1">App server comparisons</a></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 6/14 - 6/20</title>
        <link>https://www.daydreamsinruby.com/blog/2014-06-21-interesting-reads-614-620/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-06-21-interesting-reads-614-620/</guid>
        <pubDate>Sat, 21 Jun 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Short on time this weekend, but lots of good reads both very technical and not. A few great reads for newer developers.<br /><br />Enjoy!<br /><br />I recently got an Up and I love it. I also love when companies do interesting things with their data like Jawbone did in this post: <a href="https://jawbone.com/blog/the-divided-states-of-steps/">https://jawbone.com/blog/the-divided-states-of-steps/</a><br /><br />Mise en Place and organizing your day: <a href="http://blogs.hbr.org/2014/06/how-to-spend-the-first-10-minutes-of-your-day/">http://blogs.hbr.org/2014/06/how-to-spend-the-first-10-minutes-of-your-day/<br /></a><br /><br />OoooOOOooo, Thoughtbot's playbook. A really interesting read for anyone working for a tech company or interested in working for one. I'm amazed at their level of documentation here: <a href="http://playbook.thoughtbot.com/">http://playbook.thoughtbot.com/</a><br /><br />Swift and Ruby: <a href="http://littlelines.com/blog/2014/06/11/why-rubyist-will-love-swift">http://littlelines.com/blog/2014/06/11/why-rubyist-will-love-swift</a><br /><br />This is a great, interesting resource… and I've actually been asked a bunch of these questions in interviews: <a href="http://www.toptal.com/ruby-on-rails#hiring-guide">http://www.toptal.com/ruby-on-rails#hiring-guide</a></p>
]]></description>
      </item>
    
      <item>
        <title>Landing the Gig</title>
        <link>https://www.daydreamsinruby.com/blog/2014-06-18-landing-gig/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-06-18-landing-gig/</guid>
        <pubDate>Wed, 18 Jun 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br /><br />I recently started as an Engineer at General Assemb.ly. The past few weeks have been really great! After posting that I was starting there, I got a request via twitter to do a blog post on interviewing, so here it is and hopefully, it’s helpful.<br /><br />General Assemb.ly is actually my second paid programming position. The first, was as a developer on contract for Foodstand, a new startup powered by Purpose. My experience looking for my first position versus my second one was incredible different so I’ll go into both a bit.<br /><br /><br /><b>The first job ever.</b><br /><br />I’m not going to lie, this job hunt was tough! Yes, there are a lot of places hiring developers out there, however, not as many are open to hiring junior developers, especially when that junior developer has no previous paid programming employment and no CS degree. I completed an average of 5 interviews per company for my first search. Most of these interviews were short consisting of just meeting someone and having a conversation for about 30 minutes. Generally, there were two longer parts; the code part (which for me happened to be primarily a take home code exercise) and the more technical interview when we reviewed the code.<br /><br />Of these five interviews, three were somewhat technically focused and two were just schmoozing and answering the same questions you would in any other interview. To get into a little more specifics, the first interview was generally just a phone screen. It had lots of getting-to-know-you questions (like “tell me a little bit about yourself”) and then some more broad technical questions. These were questions like “what does MRI stand for?” and “what is the difference between include and extend?” From what I understood, the expectation was not that I would know all the answers but that I would know some of them and exude a sense of broad general knowledge. For these, I brushed up on my ruby, went through ruby monk, took notes, and actually made flashcards to help me remember all the different pieces. <br /><br />The second technical part of the interview was usually something having to do with code. Yes, I was asked to fizzbuzz with paper and pencil, but I also received a few take-home assignments. Build a bot was one. Another was giving me a set of failing tests and making them pass. These generally didn’t have timeframes associated with them and employers were open to asking questions as I completed the assignment.<br /><br />The third technical part was usually reviewing this code work and/or asking some more in depth questions. They usually started with “so, walk me through how you attempted to solve this problem” and then conversation branched into different subjects from there. I, personally, didn’t have any interviews that involved pairing which I was relieved about at the time (but changed my opinion on that for my second search).<br /><br />So, now here are some general tips and thoughts. <br /><br />First, for my first job hunt, I did not apply to a single job where I didn't get a soft introduction meaning that at no point did I blindly send a resume to a company. This is where being involved in the community is really important. At RubyConf, I met a ton of people in person. My primary job hunt strategy was posting on twitter where incredible people made amazing introductions for me. It is rare, I think, for a company to hire a junior developer just from a blind resume drop so these intros were really priceless. <br /><br />Second, I was very careful about interviewing them as much as they were interviewing me. While I wasn’t picky about what industry I was looking to be in, I was picky about the type of environment and culture I was looking for. Furthermore, as a women who is new to developer but has major career accomplishments pre-career transition, it was important that I not sell myself short and find a company that recognizes both my future potential but also current worth as an employee. I asked potential employers a lot of questions about support provided to junior developers, what sorts of structures and systems they have in place to foster learning, and other questions I felt were important as I made this transition. <br /><br />Third, you should hear about positions and decisions quickly. Yes, there were a lot of interviews, but generally, there was a less than 3 day turn around time for scheduling the next interview. There is such a desire for developers these days that companies know that even if I’m not the right fit now, I might be in the future. Therefore, I found that companies are pretty transparent and quick to let you know if you’re moving forward or not… which is a welcome change from my last industry where you’d interview and then wait a month to hear if you were being offered a position or not.<br /><br />Fourth, think about what you want out of this first position. I know a lot of newer developers who start as QA engineers, project managers, sales engineers, and other positions that involve code but aren’t specifically developer or engineer roles. When I interviewed at these positions, I was very careful to ask about the path to transitioning and becoming a full-time developer because I didn’t want to get stuck and I didn’t want my professional developer to be siloed away from the other developers. I was also pretty adamant about getting a developer role as opposed to one of the roles mentioned above but either path is fine, as long as you have asked the right questions, are clear with what you want your end goal to be, and are comfortable with being in that role.<br /><br />The final piece that I think I realized more in hindsight that when I was looking for a position is that if I walked out of an interview feeling stupid, or awful about my abilities, then it was not the right place for me. Mostly, I felt interviews went well and it was great to meet lots of different developers and talk to them about what they were working on but sometimes, I left an interview feeling completely awful, like an idiot, and like I would never ever ever find a job. The places that made me feel that way, probably would have also made me feel that way if I was on the job and made a mistake or didn't know how to do something. An important thought to keep in mind when you’re slogging your way through.<br /><br />The position I ended up with was great for me at the time. It was a full time contract position in a subject matter I was very interested in. The dev culture was just starting to develop so I was able to have an impact on what that looked like. The team seemed really great and while I was a little concerned about being the only fulltime developer on the project, there was outside support and structures in place to provide more support once I started. This was a great position for me at the time. I was there for 4 months with my contract being extended a few times. In the end, however, there wasn’t enough senior-level support so I felt my learning was moving as quickly as I knew it could.<br /><br /><b>Onto the second hunt.</b><br /><br />This job hunt was completely different. After I got my first position, I continued to stay involved in the community. Others around me knew how much I was learned and I had shown that I was able to succeed as a developer so when I started looking again, I didn't have to look very far. I actually didn’t even launch a full job search. I spoke to two local companies I was interested in and General Assemb.ly. The other primary difference is that this time I had 1-2 interviews for each company as opposed to 5. At all three companies, I had great initial conversations. For the local ones, the interviews were relaxed because they had seen me progress over the last few months. At one, I had worked with most of the developers already in informal capacities so it was nice to already know a majority of the team. At the second company, I requested to go into the office to pair to get a better sense of what learning from the developers there would be like. At the third company, I had a soft introduction but didn’t know the folks there as well. I had a great initial conversation and then was set up to pair with two of the senior developers. These sessions were great. At one, we went through an old piece of code and discussed how I might refactor it. At the second, we looked at a piece of code and just discussed how I’d get a sense of what the code was doing and then we worked on a test and a method. And that was that… all the places I spoke with and all the interviewing I did.<br /><br />The second time around, interviews were also so much easier because I had real experiences to pull from. The one thing that was a bit more tricky was being able to show code. The first time I looked for a position, I had just been building sites or projects and had everything on github. The second time around, I had progressed significantly in my coding abilities but EVERYTHING I did was private and I couldn’t share any of that code so it was challenging to prove how much I had grown. A nice work-around that someone suggested to me was to focus on blog posts instead. I tried to make time to blog about challenges or things I learned at work so, while I wasn’t able to show code, I was able to show a blog post and talk a bit about the related challenges.<br /><br />In the end, I received offers from all three companies. It was a really really tough choice but General Assemb.ly seemed like a really great fit. I thoroughly enjoyed their interview process (and, I mean, who enjoys an interview process?!), enjoyed the pairing I did, and they’ve got great structures and ideas in place for developers to keep learning and challenging themselves.</p>
]]></description>
      </item>
    
      <item>
        <title>One Giant Post about Ruby Nation</title>
        <link>https://www.daydreamsinruby.com/blog/2014-06-16-one-giant-post-about-ruby-nation/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-06-16-one-giant-post-about-ruby-nation/</guid>
        <pubDate>Mon, 16 Jun 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br /><br />This year again, I attended <a href="http://www.rubynation.org/">Ruby Nation</a>. This year was great because I actually understood what was going on!! Admittedly, I took better notes on the second day than on the first because I was speaking on the first day but most of the session I went to were really great. Also, I apologize in advance because this is just one giant post, as opposed to breaking it up by session which I usually do after conferences.<br /><br />The first session was talking about ruby and government with <a href="https://twitter.com/ultrasaurus">Sarah Allen</a>. She was recently a presidential innovation fellow and spoke a bit about the interesting things she was doing and the really interesting digital data issues that the Smithsonian system has. Sarah brought up some really interesting thoughts about rails in general. One of the most interesting (controversial?) things she talked about was making Rails more accessible. She talked about other platforms like Drupal or Wordpress and the ease of adding certain functionality or widgets there. These are things that Rails doesn’t have. It isn’t super accessible because you don't have the same sort of ability to add widgets or different features. Her point was that potentially being able to make it easier to add widgets would make us more effective programmers and that by doing this, we wouldn’t have to re-work things or add simple, commonly-requested functionality on a regular basis.­­<br /><br />Her talk closed with three interesting points to think about. First, framework leads to language. Second, what if we could add UI features at runtime, and what would that look like? And third, non-developers are co-creators so how to we give them a more active role in rails.<br /><br />The second talk was by <a href="https://twitter.com/eileencodes">Eileen Uchitelle</a> and was about <a href="https://speakerdeck.com/eileencodes/crud-dear-active-record-its-not-you-its-me">CRUD and ActiveRecord</a>. I thought this talk was fantastic, although admittedly got a little lost in the middle. The premise of this talk was that when we assume activerecord is magic and does all these magical things, we end up not paying enough attention to our code and to the actual SQL queries and how they’re functioning. Eileen then went through an example using each of the CRUD methods (create, read, update, delete) and went through ways that the queries could be better, faster, and more effective. For example, in create, she spoke about batch insert and in read she talked about using pluck. Her slides are super clear and definitely worth a read.<br /><br />The third session was <a href="https://twitter.com/hone02">Terence Lee</a> speaking about working with Ruby. He spoke a lot about how to commit and encouraged everyone to get involved with fixing ruby, committing, and getting involved with the core team. I learned that .to_f is to float. Floating objects “represent inexact real numbers.” He talked about the future of ruby being focused on trust, transparency, and onboarding.<br /><br />The fourth talk was given by <a href="https://twitter.com/davystevenson">Davy Stevenson</a> on Ruby as science, art and craft. I thought this talk was really great and looked at code from different perspectives and points of view. She started with science, looking at algorithms and talking about what complexity looks like. Davy went through a variety of big O notation types like linear, quadratic, exponential, and factorial. She described an algorithm as a set of instructions that will solve a particular problem… a great definition for someone who isn’t a math person. She then looked at the convex hull problem and demonstrated different approaches through different algorithms that connect the points and show this convex hull in different ways. I won’t go into them here, but if you want to google them a bit further, she discussed brute force, gift wrapping, and monotone chain algorithms.<br /><br />Then Davy talked about art. The art part was lots of imaged of different interpretations of art and thinking about them. The best part of that segment for me was a quote she mentioned from <a href="http://www.twitter.com/sferik">@sferik</a> where he said that programming is about building powerful things in simple pieces.<br /><br />Finally, Davy discussed craft taking the idea of apprenticeship and artisan abilities and connecting it to code. She said we write code to enrich our own lives and the lives of the people around us and then showed us examples of beautiful code. Definitely take a look at the slides to see what people consider as beautiful code.<br /><br />After this was lightning talks!! There were a few talks… one on muscle driven development, which talked about health and treadmill desks. One on debugging, another on language and thinking about how the language we’re using shapes how we look at solutions. A fourth on <a href="http://www.rubyforgood.com/">Ruby For Good</a> which is going to be awesome and everyone shold check out. The fifth was on the Angelo gem and the last talk was about how you shouldn’t do ops as a dev.<br /><br />From here, we went into the tracks. Again, the talks today, I won’t do justice because I wasn’t focusing as much as I could/should have been but at hopefully I can provide some notes. The first session I went to was <a href="https://twitter.com/johnashenfelter">JohnPaul Ashenfelter</a>’s Machine Learning talk. He did this at <a href="http://www.confreaks.com/videos/3489-railsconf-workshop-machine-learning-for-fun-and-profit">RailsConf</a> as well (a longer version). It was really interesting. Basically, he spoke about different gems and things developers could use to learn more about the users. First, he talked about the sex machine gem which isn’t perfect but can help determine the gender assignment of your user base. Second, he discussed free geoip to show location awareness. After that, he got into clustering a bit and looking at clusters in order to help determine patterns. He walked through the ai4r gem which puts people into clusters and then calculates the centroid (centroid being the center of the random clusters) and finally, it loops through to see if users are closer to the center or their cluster or another cluster. This enables you to see what cluster people are in which is super helpful is your clusters show, for example, what tier users are paying for in your system. Alternatives to this can be hierarchical clusterers or divisive hierarchical clusterers. Finally, he talked about a gem called linalg and how you can use it for collaboration purposes (I think… my notes get a little sketchy here).<br /><br />After that, I went to an ActiveRecord workshop with <a href="http://www.twitter.com/bokmann">Dave Bock</a>. This workshop is fantastic, but very hands on so not many notes. Basically, Dave has a handful of scenarios that each table has to discuss and talk about how they’d architect them. Really helpful for continuing to learn about ActiveRecord, associations, and modeling.<br /><br />The next talks I went to was about tests and having a messy test suite. Presented by <a href="http://www.twitter.com/crsexton">Chris Sexton</a> and <a href="http://www.twitter.com/cupakromer">Aaron Kromer</a>, this talk was great. They went through testing best practices and showed examples of clean, clear test structures. Some highlights were that you shouldn’t deeply nest state in your tests and you can fix this by creating contexts, this way the state is top level and you can test everything. Tests should help organize and expose state. Class declarations should tell what behaviors to test. Finally, the two most important pieces of advice were to prioritize what’s most important to test and then iterate towards that goal and make your tests better as you work towards your goal.<br /><br />The last talk of the day was about <a href="http://sidekiq.org/">sidekiq</a>. I don’t have a ton of notes from this talk as well but presented by <a href="https://twitter.com/subelsky">Mike Subelsky</a>, it was a great walkthrough of sidekiq and what you can tell from the dashboard when running it.<br /><br /><b>Day 2</b><br />I was able to pay more attention on day 2.<br /><br />Day 2 started with <a href="http://www.twitter.com/saturnflyer">Jim Gay</a> talking about east-oriented code. This is a pretty cool concept that operates under the principle of tell, don’t ask. The core of it is that queries travel west and commands travel east. The talked touched on the law of Demeter and talked about east oriented code being different than that. There are four things to keep in mind with east oriented code. First, always return self. In this way the method is prevented from querying, can only tell. It leads to polymorphism, duck typing, and encapsulation. Second, factories are exempt form this. Third, always follow rule 1. And finally, sometimes break rule 3. After rule four, he showed a really interesting rails erb template that described this and walked through it. I left this talk sortof understanding everything but definitely would love to take a look at the code examples and slides in order to comprehend it all a little further.<br /><br />The second talk I went to was on two programmers in one. I loved this talk by <a href="https://twitter.com/janogonzalez">Jano Gonzalez</a>. He talked about how each of us as developers are a little hacker and a little thinker. The hacker wants to get things done, and quickly which can sometimes lead to a maintenance nightmare. The thinker thinks about maintainability, abstractions and all the different layers but sometimes can get away from the problem that they’re trying to solve and can have analysis paralysis. He then told his story about going from hacker to thinker and coming to a good balance with both sides when using ruby. Jano spoke about how the hacker is useful for exploring new territory but the thinker is good from defining components and acceptance criteria. Developers need to deliver value but also diminish technical debt and it’s all about the balance between the two. My favorite part of the talk was when he spoke about the 3 stages of learning from Martial Arts. There is Shu, Ha, and Ri. Shu is when you’re new and you follow all the rules. Ha is when you move on and start adding your own knowledge and breaking some of the rules, and Ri is when there are no rules to follow and no rules to break, you just do it.<br /><br />After that was a talk on google glass by <a href="https://twitter.com/lgleasain">Lance</a>. This was a fun talk and one I just sat back and enjoyed since I’m not really developing with google glass but was just curious. Lance talked about apps as service layers. He then went on to discuss some of the glass specs, things that are great about glass and things that still need to be fixed. He then talked about the Mirror API, which I still have to check out, and how you don’t need to know android in order to program for glass. There’s a concept of static cards which add functionality and a new(?) tool called WearScript which is a bit like phonegap for glass.<br /><br />Interesting talk and really fun to just see some of the programming side of glass.<br /><br /><a href="https://twitter.com/samphippen">Sam</a> spoke about the <a href="https://speakerdeck.com/samphippen/the-anatomy-of-a-mocked-call">anatomy of a mocked call</a> which basically involved doing a deep dive into what a mocked call means technically with rspec, using their internal mocking library. He started by talking about testing and why you test/TDD. His main points were that TDD’ing helps programmers create a mental model. It helps them think through what the code does and then because things change as you program, it helps keep that mental model intact and keeps you on track with the problem you’re trying to solve. In short, tests force behavior.<br /><br />The first part of this deep dive was discussing stubbing. Stubbing is basically faking a response to a method. Moching enables you to verify the collaborations between objects by testing the methods that get called. It creates a mocked expectation. so in the example<br /><code> it “does something” do<br />               allow(foo).to receive(bar)<br />       expect(foo.bar).to eq (nil)<br />    end<br /></code><br /><br />The allow is actually allow= allowanceTarget.new<br /><br />allowanceTarget is a subclass of the TargetBase and calls delegate_to on TargetBase and, with a setup_allowance, TargetBase defines TO as an allowancetarget enabling .to to exist as a matcher.<br /><br />Then there is receive which is also often used as a matcher. Once receive is set up as a matcher, similar to how to is set up as a matcher above, then receive#setup_allowance creates a mock proxy. A mock proxy is an object that manages the metadata of mocks and stubs on the object in the lifecyce of a test. Calling add_stub on this proxy sets up a emthod double which saves the original implementation. Then calling foo.bar (the stubbed implementation) sends a message to the method double which sends a message to the proxy which invokes the stub which returns a value (gosh, I hope I got that right!).<br /><br />When you run a test, rspec also runs setup and teardown before and after the test and at the end of the test, the teardown resets everything. This reminds me a little bit of how testing work in <a href="http://allisonsherenmcmillan.blogspot.com/2014/03/the-unofficial-official-ember-testing.html">ember with quint</a>.<br /><br />Okay, now onto mocks. For explaining mocking, sam worked through the same example but using expect(foo) instead or allow(foo). In this case, expect = ExpectationTarget.new and goes through a similar process as the stub did, except this time with a mock.  Here, once you have the proxy, the proxy callbacks checks to make sure the arguments are valid and the proxy raises if a mock wasn’t called. <br /><br />Finally, I can’t remember at what point sam mentioned this, but during his talk (or when someone asked a question about using spies instead of mocks), he mentioned spies so now I know what spies are! Spies are whenever you do a a stub, it will record the information so you can set an expectation at the end of your test instead of at the beginning. Basically, you can set a spy to collect all sorts of information from you and when the object returns you can ask it questions about it’s experience. The way I envision this is similar to what the Dorothy’s were trying to do in Twister. In Twister, the tornado chasers weren’t able to learn more about tornadoes because they weren’t able to see or understand what was happening inside the tornado. They came up with a way to release thousands of little sensors into the tornado to collect all the information and have them transmit the information back so it could be recorded and studying. From my understanding so far, this is similar to what spies do. <br /><br /><a href="http://www.twitter.com/elight">Evan</a> is great. He’s got so much experience and his talk was on remote pair programming. Now, I work remotely, so I’m familiar with a  lot of the tools, but his talk was less focused on tools like <a href="https://madeye.io/">madeye</a>, <a href="https://www.nitrous.io/">nitrous</a>, and <a href="http://screenhero.com/">screen hero</a> and more focused on command line tools. He spoke a lot about vim and emacs (which made me really want to learn vim again… one day I’ll get around to that). He also spoke about tmux, ssh’ing into machines, and a lot of really interesting concepts. He spoke about how his remote pairing stack has changed over the years and different combinations of things he’s tried which allows people to pick any of these tools and configure it to their remote pairing liking. Overall, an interesting talk and some exposure to remote tools I hadn’t thought about in the past.<br /><br /><a href="https://twitter.com/mark_menard">Mark</a> spoke about <a href="https://github.com/jimweirich/wyriki">wyriki</a> which is a project that <a href="http://en.wikipedia.org/wiki/Jim_Weirich">Jim Weirich</a> was working on when he passed away. I’m gonna be honest and say that Mark lost me pretty early in his explanation but this is what I got. Wyriki is a different way to architect rails applications. It creates new structures of runners in between controllers and models which allow someone to isolate the business logic from everything else. The rest of my notes on this are sparse and it’s pretty obvious I got lost in there, but I think the core takeaway was thinking about different ways to structure apps, so not fat model, skinny controller and not everything in moderation but how to really separates different types of business logic in your apps.<br /><br />Next up was <a href="https://twitter.com/searls">Justin</a>’s talk on breaking up with your test suite. I took frantic notes on this one and listened intently, but eve so I’m sure I missed stuff. Also, <a href="http://blog.testdouble.com/posts/2014-05-25-breaking-up-with-your-test-suite.html">these slides</a> were great and super understandable so check them out. So first was talking about why we should test. there were 8 or 9 ultimate reasons why code should be tested which fall into two essential categories. First, you can gain confidence from the test and you can gain understanding of the code through the tests. BUT he started by discussing that we should question before we test. When thinking about tests, we should think about the purpose, rules, and structure and we should expect that within our test suite these three items should be immediately clear to anyone looking at it.  If we cram lots of different goals and motivations into each test, the test becomes unclear. The rules become debatable, the purpose becomes hazy, and the structure ends up being ad hoc instead of uniform. Every test suite should promote one type of confidence and 1 type of understanding. So, here are some different suites and for each suite Justin went through the user, what the understanding and confidence were, tips, and warning signs.<br /><br />First up was the safety suite. The safety suite is for the browser It checks does the app work and is our product simple. If the tests do not fit inside 30 minute or if you can’t write a new test within 30 minutes then your product probably isn’t simple. These tests shouldn’t see the internal apis. They should bind to what is visible by the user and they should enforce a fixed time-budget. The warnings here are that failure from refactors are often false negatives here and that human intuition overvalues realistic tests. On this type of test suite, numerous releases and branches can get expensive and there is the idea of the superlinear slowdown meaning that the bigger the system, the slower the tests.<br /><br />Next comes consumption tests You should verify behavior and demonstrate usage with these types of tests. The user is the repo’s customer and they are used to verify what you, as the programmer, is directly responsible for. It says, is this code usable? If it’s hard to test, it’s probably hard to use. For these the module boundaries should be meaningful beyond testing (ie- these things talk to each other so they should be tested together). It should fake all the dependencies. It should exercise the public, not private apis. And finally, it should be organized by the consumer’s goals and outcomes. Warnings-wise, these tests need to be fast and this is the only part of the suite that tells you “you just broke something”.<br /><br />The next tests suite are contract tests. Contract tests are used by us. They represent our interests that live in someone else’s repo. It leads to faster feedback making sure that something in the system that someone else is working on, doesn’t break something you’re working on. For these, they should be written for first party dependencies and follow the same rules as consumption tests. These are NOT a replacement for actually going and talking to your fellow dev about what they’re working on.<br /><br />Next is TDD. So, so far, in all these tests suites, none have talked at all about the design of the code. The main value in TDD-ing is to discover tiny, consistent bit that help with big projects. The user is someone concerned with implementation details and the inputs and outcomes. These tests are a sounding board and enable you to have confidence in building small things and learning about what roles our code is playing. Here, he showed a cool chart that had interesting structural points related to putting queries on the left, logic in the middle and commands on the right… reminded me a bit of east-oriented code structures. He also stated that commands and queries should have very little logic. The warning here is that discovery tests yield small disposable units so be okay with throwing stuff away. <br /><br />Next are adapter tests (whoever knew there could be so many different kinds of tests suites!) These tests exercise the adapter API under just realistic enough circumstances. It warns us of outages or API changes. These tests also reduce the cost of swapping dependencies later. For these, don’t test them first and trust the framework. These are similar to contrat tests but contract tests improve communication between colleagues whereas these tests improve the feedback between your code and the 3rd party code. Last warnings are that these tests can be slow and outside of your control and that they can be tricky if you’re using some sort of CI.<br /><br />Phew! that was that talk.<br /><br />One note is that my confusion still lies a bit in integrating all of these different types of tests. Should an apps test suite have all of these things? What does it look like structurally? Are they in the same files or different files? But I think the idea of thinking about all of these different suites and the goals of tests and testing is pretty cool.<br /><br />Production code analysis by <a href="https://twitter.com/danmayer">Dan</a> was a great talk. Dan talked about code cleanup and how to look at a monorail (single large application) and refactor/delete effectively. You want to look at what code is being run to allow for good code cleanup and that lots of these monorails have dead code. Some overarching tips are to celebrate clean up commits as a team and to start by finding large unused code sections by finding unused actions. There are a handful of tools he talked about to help find this dead code. First you can use new relic which can show you for any given endpoint, how often is it being hit and then you can do a route check to see what routes are completely unused. You can also use tools like graphte, statsD and redis to find unused actions. For example, statsD is pretty easy to implement, has lots of info from Etsy’s blog, and can be used to see both timing and emdpoint information. You can look at background jobs in redis to see which jobs aren’t being triggered at all and what events are related to those jobs.<br /><br />For mailer, you can see which is the most popular and least popular mailers by hooking statsD into active mailer. Finally, if you find the actions not being triggered, you can often delete the related views that aren’t being rendered any more.<br /><br />Another good place to look is at translations. Which translations are in memory but aren’t being used anymore? Use the gem humperdink to track these translations. Finally, you may have two methods that are doing the same thing in your code. For this, learn which is best by wrapping the methods in a split. Wrapping them in a split and tracking them with statsD will tell you which method is faster or more effective and allow you to make data-driven decisions.<br /><br />Lastly, Dan talked about logs. Logs are great for cleaning up code. Logs should be searchable and in one place. You should try to standardize the log format and multiple apps that communicate should be in the same system. Once you’ve got good logs, you can do log queries or check out endpoints to see what’s arriving to them. For this, check out the gem imprint. <br /><br /><a href="https://twitter.com/russolsen">Russ Olsen</a> spoke about going to the moon! Wait for this talk to come out on video. I had to leave about 15 minutes early which was a bummer but he’s such a good storyteller, I was on the edge of my seat the whole time.<br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 6/7/14 - 6/13/2014</title>
        <link>https://www.daydreamsinruby.com/blog/2014-06-14-interesting-reads-6714-6132014/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-06-14-interesting-reads-6714-6132014/</guid>
        <pubDate>Sat, 14 Jun 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Busy busy busy this week but I was still able to read a few interesting things. Even though I'm not using Ember on a daily basis anymore, it's still an interesting framework to me so there's an ember post, a little bit of debugging, and then two good soft skills posts. Finally, I haven't had time to finish watching all the railsconf talks I want to but I'm not sure when that will happen so i'll post the talks that are still on my list below.<br /><br />Enjoy!<br /><br /><br />Learn to code, learn to think: http://www.npr.org/blogs/13.7/2014/06/09/320309576/learn-to-code-learn-to-think<br /><br />Feeling like a fraud? Everyone does! <a href="https://medium.com/theli-st-medium/everyone-feels-like-a-fraud-530cfc9c774d">https://medium.com/theli-st-medium/everyone-feels-like-a-fraud-530cfc9c774d</a><br /><br /><a href="http://www.jackkinsella.ie/2014/06/06/a-comprehensive-guide-to-debugging-rails.html?utm_source=rubyweekly&amp;utm_medium=email">Debugging in Rails.</a> A great collection of tools to use and posts on how to use them. <br /><br />Terminology and what it means in rails vs. ember. <a href="http://robots.thoughtbot.com/shared-terminology-yet-different-concepts-between-emberjs-and-rails?utm_source=rubyweekly&amp;utm_medium=email">This was a great post</a> but I think the most confusing piece for me when learning was the use of the term routes and what that means in rails vs. ember so i'm a little disappointed that they didn't include it.<br /><br /><b>RailsConf talks I haven't quite gotten to:</b><br /><a href="http://confreaks.com/videos/3382-railsconf-the-rails-of-javascript-won-t-be-a-framework"><br />The Rails of Javascript won't be a framework</a><br /><br /><a href="http://www.confreaks.com/videos/3358-railsconf-all-the-little-things">All the small things</a><br /><br /><a href="https://www.youtube.com/watch?v=BTTygyxuGj8">Aaron Patterson's closing keynote</a><br /><br /><a href="http://www.confreaks.com/videos/3324-railsconf-lightning-fast-deployment-of-your-rails-backed-javascript-app">Lightning fast deployment of your rails-backed Javascript app</a><br /><br /><a href="http://www.confreaks.com/videos/3315-railsconf-keynote">DHH's Keynote</a></p>
]]></description>
      </item>
    
      <item>
        <title>Haml anyone?</title>
        <link>https://www.daydreamsinruby.com/blog/2014-06-04-haml-anyone/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-06-04-haml-anyone/</guid>
        <pubDate>Wed, 04 Jun 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I announced to the social-media-verse earlier last week that I was starting as an engineer at General Assemb.ly! I’m really excited to be a part of their team and it looks like I’m going to be working on some really interesting projects and products in online education, among other things. <br /><br />One of the first things I did this week was learn some haml. Haml is a markup language that allows someone to “cleanly and simply describe the html of any web document”. Basically haml is cool because it lets you do the same thing you’d do with html or html.erb files but with much less code.<br /><br />For example, you don’t have to close tags! So instead of writing<code> <br />&lt;h1&gt;This is great&lt;/h1&gt;</code> all you do instead is <code>%h1</code> Amazing!!<br /><br />I was really curious then as to how this affects being able to dictate classes and ids for the scss I’ve gotta put in. Well, reading through that was when I decided to write this post because it’s so clean and simple. You use the same symbols you would in the css doc but in the haml doc. For example, <code>%div#awesome</code> is equal to<br /><code><br />&lt;div id=&quot;’awesome’&quot;&gt;<br />&lt;/div&gt;<br />&lt;code&gt;. For classes, it’s similar to %div.more.amazing.stuff is like typing &lt;code&gt; &lt;/code&gt;&lt;/code&gt;<br />&lt;div amazing=&quot;&quot; class=&quot;’more&quot; stuff=&quot;&quot;&gt;<br />&lt;/div&gt;<br /></code>. <br />The only annoying part (so far) is that you have to be careful about your spaces/spacing so it will error if you don't have the right number of spaces as you nest.<br /><br />There’s lots more and the docs are surprisingly good so check out the resources here: <a href="http://haml.info/docs/yardoc/file.REFERENCE.html">http://haml.info/docs/yardoc/file.REFERENCE.html</a><br /><br />And here: <a href="http://haml.info/">http://haml.info/</a></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 5/24 - 5/30</title>
        <link>https://www.daydreamsinruby.com/blog/2014-05-31-interesting-reads-524-530/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-05-31-interesting-reads-524-530/</guid>
        <pubDate>Sat, 31 May 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>There's a whole boatload of good stuff this week! First, There are links to three more talks from RailsConf. Then another talk about leveling up. After that a few interesting blog posts. Finally, agood explanation of dotfiles.<br /><br />Enjoy!<br /><br /><br /><a href="https://twitter.com/seanmarcia">Sean Marcia</a> is awesome and this is his great talk about Bees and saving the world: <a href="http://www.confreaks.com/videos/3318-railsconf-saving-the-world-literally-with-ruby-on-rails">http://www.confreaks.com/videos/3318-railsconf-saving-the-world-literally-with-ruby-on-rails</a><br /><br />Harking back to my management days a bit, this is a good talk about decision making and team working in tech: <a href="http://www.confreaks.com/videos/3487-railsconf-workshop-teamwork-ain-t-always-easy">http://www.confreaks.com/videos/3487-railsconf-workshop-teamwork-ain-t-always-easy</a><br /><br />Okay, I think I've only made it through 5 databases so far but interesting overviews: <a href="http://www.confreaks.com/videos/3374-railsconf-an-ode-to-17-databases-in-33-minutes">http://www.confreaks.com/videos/3374-railsconf-an-ode-to-17-databases-in-33-minutes</a><br /><br />Another talk, but not from RailsConf, about taking your engineering role to the next level: <a href="https://www.youtube.com/watch?v=lgxEmiMJVq4">https://www.youtube.com/watch?v=lgxEmiMJVq4</a><br /><br />Information anxiety and how to parse through what you need/want to learn: <a href="http://blog.codinghorror.com/keeping-up-and-just-in-time-learning/">http://blog.codinghorror.com/keeping-up-and-just-in-time-learning/</a><br /><br />Great post on mentorship: <a href="https://medium.com/theli-st-medium/have-some-coffee-9e468d958e77">https://medium.com/theli-st-medium/have-some-coffee-9e468d958e77</a><br /><br />Interesting post on coding principles every engineer should know. Do you agree? Which would you add?: <a href="https://medium.com/on-coding/coding-principles-every-engineer-should-know-b946b48cc946">https://medium.com/on-coding/coding-principles-every-engineer-should-know-b946b48cc946</a> <br /><br />Lastly, this week I had to set up my first new computer for development. A friend passed this along to me. It's a great step-through of dot files which, I think, seem super intimidating, but aren't IRL: <a href="http://code.tutsplus.com/tutorials/setting-up-a-mac-dev-machine-from-zero-to-hero-with-dotfiles--net-35449">http://code.tutsplus.com/tutorials/setting-up-a-mac-dev-machine-from-zero-to-hero-with-dotfiles--net-35449</a><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 5/17 - 5/23</title>
        <link>https://www.daydreamsinruby.com/blog/2014-05-25-interesting-reads-517-523/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-05-25-interesting-reads-517-523/</guid>
        <pubDate>Sun, 25 May 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Lots of really great links this week. There are a few more RailsConf talks since I had a chance to watch a few more of those this week. Some great posts on terminal and keyboard shortcuts and tricks, and some fun team-related posts.<br /><br />Enjoy!<br /><br /><br />Amazing tips and tricks in <a href="http://mattgemmell.com/mac-keyboard-shortcuts/">this post</a> for keyboard shortcuts.<br /><br />AND amazing tips for terminal in <a href="http://www.mitchchn.me/2014/os-x-terminal/">this one</a>. <br /><br />Leading a team is really hard. Jessie does a <a href="http://www.confreaks.com/videos/3380-railsconf-how-to-be-a-boss-without-the-b-s">great job talking</a> about some of the ways to actually be a GOOD manager.<br /><br />Some great <a href="http://www.confreaks.com/videos/3391-railsconf-cognitive-shortcuts-models-visualizations-metaphors-and-other-lies">tools and thoughts</a> for thinking from railsconf.<br /><br />Love this! <a href="https://speakerdeck.com/aviflombaum/20-things-i-love-about-code">https://speakerdeck.com/aviflombaum/20-things-i-love-about-code</a><br /><br />A really interesting talk about <a href="http://confreaks.com/videos/3392-railsconf-you-are-not-an-impostor">imposter syndrome</a><br /><br />I've always looked at the stages of group development in the context of leadership groups and immersion experiences but this is an interesting post on the <a href="http://pivotallabs.com/agile_team_maturity/">high performing team dynamic in programming</a><br /><br />Does the size of a team affect the quality? <a href="https://www.blogger.com/blog.codeclimate.com/blog/2014/05/21/does-team-size-impact-code-quality">This post</a> talks about some of the data behind it.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 5/10 - 5/16</title>
        <link>https://www.daydreamsinruby.com/blog/2014-05-17-interesting-reads-510-516/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-05-17-interesting-reads-510-516/</guid>
        <pubDate>Sat, 17 May 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I have 8 RailsConf talks bookmarked to watch but I know I won't be able to watch all of them before posting, so I guess I'll have to include them in next week's roundup. That being said, below are a good handful of talks that I've already had a chance to watch and they are awesome so enjoy!<br /><br />Coraline's great talk on apprenticeship: <a href="http://www.confreaks.com/videos/3346-railsconf-artisans-and-apprentices">http://www.confreaks.com/videos/3346-railsconf-artisans-and-apprentices</a><br /><br />10 years keynote: <a href="http://www.confreaks.com/videos/3337-railsconf-keynote-10-years">http://www.confreaks.com/videos/3337-railsconf-keynote-10-years</a><br /><br />Reading Code good (but also is more about becoming better programmers specifically through this method of reading code): <a href="http://www.confreaks.com/videos/3342-railsconf-reading-code-good">http://www.confreaks.com/videos/3342-railsconf-reading-code-good</a><br /><br />In more personal news, I'm starting a new job next week!! I'm very excited to start at a new place but worried I'll be the weakest person on the team (a very common fear, I've been told). While I don't necessarily feel like a phony, I just feel new and still pretty inexperienced. This is an interesting read about how a lot of others feel similarly: <a href="http://www.hanselman.com/blog/ImAPhonyAreYou.aspx">http://www.hanselman.com/blog/ImAPhonyAreYou.aspx</a><br /><br />I'm trying to start getting into hardware hacking a bit more and arduinos fascinate me, but I've had a hard time figuring out where to start. Ruby Rogues did a great podcast on hardware hacking! This was one of the super helpful resources: <a href="http://juliahgrace.com/intro-hardware-hacking-arduino.html">http://juliahgrace.com/intro-hardware-hacking-arduino.html</a></p>
]]></description>
      </item>
    
      <item>
        <title>Setting up Aliases</title>
        <link>https://www.daydreamsinruby.com/blog/2014-05-12-setting-up-aliases/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-05-12-setting-up-aliases/</guid>
        <pubDate>Mon, 12 May 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />For months and months I’ve heard people talk about setting up aliases and profiles and all these custom configs for their computers. I’ve done some basic googling but have stayed away from setting things up because I hadn’t found any simple, easy posts and I had this vision that this whole “set up” thing was super complicated. Guess what? It’s actually ridiculously simple. This is what I get for being too embarrassed to ask about something for an extended period of time.<br /><br />What are aliases? Aliases are basically shortcuts for things you type all the time. The same way that hotkeys work to open up programs and execute certain actions you find yourself constantly using, aliases do that for your terminal.<br /><br />The best place to start is to think about what you type all the time. For me, I type “git status” over a dozen times a day, so that was aliased to gs. <a href="http://www.twitter.com/crsexton">Chris</a> suggested that I set up an alias to open my bash_profile file so that I can quickly add more aliases as I discover what I type the most. As I mentioned, doing this is super easy.<br /><br />1. Open up your bash_profile file<br />2. Set up your aliases by typing <code> alias gs=“git status”</code><br /><br />As you see, the left of the = is what you want the shortcut to be and the right of it is what the shortcut stands for. Once you’re got all your aliases in, quit terminal and reopen it to start using them.<br /><br />Besides aliases, I also learned from <a href="https://twitter.com/johnashenfelter">JP</a> about using homebrew more effectively. <a href="http://brew.sh/">Homebrew</a> is a package manager and with homebrew you can add different packages including <a href="https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion">git bash completion</a> which allows you to tab to complete things like git branch names and more.<br /><br />The final piece of this setup is naming your computer. Apparently this is a thing. I’ve got my Disney princess naming convention for my servers so now I need one for my computer(s). I’ve decided on 80’s cartoons starting with the very-applicable <a href="http://en.wikipedia.org/wiki/Inspector_Gadget#Characters">“penny”</a>. I look forward to naming future computers <a href="http://en.wikipedia.org/wiki/Inspector_Gadget#Characters">Brain</a>, <a href="http://en.wikipedia.org/wiki/Jem_%28TV_series%29">Jem</a>, and, I’m sure, a number of <a href="http://en.wikipedia.org/wiki/Care_Bears">CareBears</a>.<br /><br />Here's a good article for additional reading on setting up git aliases: <a href="http://robots.thoughtbot.com/streamline-your-git-workflow-with-aliases">http://robots.thoughtbot.com/streamline-your-git-workflow-with-aliases</a></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 5/3 - 5/9</title>
        <link>https://www.daydreamsinruby.com/blog/2014-05-10-interesting-reads-53-59/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-05-10-interesting-reads-53-59/</guid>
        <pubDate>Sat, 10 May 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Here are some really great reads from this past week. Lots of good fodder for self-reflection and thinking critically about programming and life, in general<br /><br />Enjoy!<br /><br /><br />The <a href="http://make.bettermistak.es/2014/05/03/fred-brooks-werewolf-hunter/">hardest parts</a> of software development <br /><br />An <a href="https://medium.com/better-humans/585c70410fb4">interesting post</a> about being more interesting… not sure I agree with all the entire post but interesting to think about.<br /><br />Love Love Love this!!: <a href="http://blog.samstokes.co.uk/blog/2014/05/01/what-programming-is-like/">http://blog.samstokes.co.uk/blog/2014/05/01/what-programming-is-like/</a><br /><br />The importance of <a href="https://www.youtube.com/watch?v=Z7dLU6fk9QY&amp;feature=youtu.be">looking up</a> and recognizing what's around you.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 4/26 - 5/2</title>
        <link>https://www.daydreamsinruby.com/blog/2014-05-03-interesting-reads-426-52/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-05-03-interesting-reads-426-52/</guid>
        <pubDate>Sat, 03 May 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>LOTS of really good reads this week on a whole variety of topics. There are some great ember tips and tricks to start with. The a few good iOS pearls. After that, some excellent articles and slides on Rails/ from RailsConf. And then finally, mixed in are some good pieces on imposter syndrome, onboarding, and coding in general. This week is definitely filled with a bunch of articles and posts and slides that are worth spending a few moments on.<br /><br />Enjoy!<br /><br /><br />Some great ember tips… still digging into <a href="http://landongn.com/ember/things-i-wish-someone-had-told-me-when-i-was-learning-ember-js/">most of these</a><br /><br /><a href="http://benscheirman.com/2013/08/the-ios-developers-toolbelt/">Great iOS tools</a> <br /><br />Rails <a href="https://speakerdeck.com/carlosantoniodasilva/tricks-that-rails-didnt-tell-you-about-at-railsconf-2014">tricks and tips</a> from railsconf<br /><br />Interesting read on <a href="https://practicingruby.com/articles/qualities-of-great-software">great qualities of software</a> with more in-depth reading options as well<br /><br />Fascinating read on <a href="http://www.sitepoint.com/refactoring-workout-relentlessly-green/">refactoring</a> in a super disciplined way<br /><br />Awesome <a href="http://ember.guru/2014/master-your-modals-in-ember-js">ember modal</a> action<br /><br />Just worth a read... in a weird way, it kinda reminds me why I love programming: <a href="http://stilldrinking.org/programming-sucks">http://stilldrinking.org/programming-sucks</a><br /><br />I really love the &quot;starter kit&quot; idea: <a href="http://lnbogen.com/2013/04/11/how-to-use-your-unfair-advantage-to-create-an-unforgettable-first-day-for-new-hires/">http://lnbogen.com/2013/04/11/how-to-use-your-unfair-advantage-to-create-an-unforgettable-first-day-for-new-hires/</a>. Growing up in <a href="http://www.youngjudaea.org/">Young Judaea</a>, when you got a leadership position on the board, you were passed a box. This box contained the info you needed to be good at your position but it also included fun items, toys, games, OLD YJ stuff, advice, etc. One of the best parts of having a leadership position was getting this box and then adding to it when you passed it down to the next person. You can't do this the same way in a work position, but I think the starter kit is close.<br /><br />You are NOT an impostor <a href="https://speakerdeck.com/nmeans/you-are-not-an-impostor">slides</a> <br /><br />An <a href="http://martinisoftware.com/2014/05/02/burnout--my-struggle-with-imposter-syndrome.html">honest, amazing piece</a> abut impostor syndrome<br /><br />Writing fewer bugs: <a href="http://ht.ly/wkg96">http://ht.ly/wkg96</a><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Building Analytics</title>
        <link>https://www.daydreamsinruby.com/blog/2014-04-29-building-analytics/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-04-29-building-analytics/</guid>
        <pubDate>Tue, 29 Apr 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br /><br />A key part of any build is figuring out what colleagues want to track and how to effectively manage that data. In this case, there is a lot of stuff to track. I recently finished building a hefty analytics components to the app and wanted to share my approach and some things that drove me crazy.<br /><br />First, I had to really think through which analytics were important. The initial ask was for about 30 different types of analytics, but then, when adding in timeframes, and additional category components, we were talking about close to 400 queries… not super useful for an early launch. Additionally, through my experience with Neighborsations, I could look at these requests and know which ones were most important for raising funds, for identifying user paths, and which ones wouldn’t really be useful until we had a larger critical mass using the application. I also made sure to ask my team what the most important success factors were to them (ie- if this number isn’t what we want it to be, then the business is not successful and we need to make some hard choices, quickly… that’s actually a vital part to determining core metrics and something I learned from <a href="https://twitter.com/sawendel">Steve Wendel</a> who’s awesome at pushing you on those hard questions.)<br /><br />The easiest way to do the queries was through writing DB queries, putting them into a model with methods and then creating a view. The app is an ember-appkit-rails app which kinda mushes the rails api and ember together but I decided to keep this simple and just run everything outside of the ember piece and just keep it as typical rails. <br /><br />There were also a couple of options for running the number… we could have done a rake task or set up a chronjob. Right now, the approach is just to have the business folks hit that page whenever they want new numbers (with the understanding that they shouldn’t hit it too often because it kicks off a bunch of queries that hit the database).<br /><br />To seed the data, I was originally leaning towards factory girl but decided to start with just creating the data I needed in the tests. What I didn’t realize is that the app automatically pulls in fixture data, so everytime I had a <code> to eq </code> it would fail because the number would be incorrect. That taught me… after spending probably too much time trying to figure out how to not have the test pull in the fixtures, I realized I should just embrace them, learn how to set up the fixtures for my tests correctly and use them to generate the data I needed. <br /><br />Then I created a model with the class AdminAnalytics. Each analytic was a separate method. I think if I wanted to go back and continue to refactor further, then I could easily break the model into separate classes. For example, instead of having one overarching AdminAnalytics class, it would probably make more sense to have a Users class, a Posts class, and Ingredients class, etc.<br /><br />Then it was down to the queries. I didn’t have much SQL experience and some of these queries were pretty complicated so it helped me to first write out all of the steps that I was looking for before translating it into an actual query. Once I did that, I could take those queries and use ActiveRecord to give me the rails magic that made the queries a little easier. For example, when joining tables in queries, you don’t have to note the join table… you can just note the two tables and activerecord will figure out the relationship between the two tables on its own. Then, because a lot of the queries involved profile type names or time parameters, I refactored by making those things arguments on the method that could be put in place in the view.<br /><br />Then I created a controller which was literally one line and was able to create a view that just called the instance variable <code>@analytics</code> and the method with whatever arguments I needed. Bam! Analytics.<br /><br />Now, once this was all done, we actually decided to pull the analytics out of the app. Instead of bundling these things together, we made it a separate app entirely that talks to the primary app in order to get the numbers needed. When we pulled it out, we used sequel which made it easier to pull those queries in (although still more difficult than just doing it right in the app). The nice part about the app was being able to use ActiveRecord but it also made the analytic piece dependent on a bunch of different models. For example, to get the total number of users, you just do <code>User.count</code> or to get the total number of posts, <code>Post.count</code>. You’re already depending on two different models here, User and Post. So, part of pulling this piece into a separate app was so that we were no longer relying on multiple models in order to get these numbers.<br /><br />The other thing I really wanted to do was set up a simple dashboard using Dashing. I’d seen people whip these dashboards up in no time flat, so I figured I’d take a stab at it… boy was I mistaken. I think my journey to a dark place started with the decision to use dashing-rails instead of dashing. See, I figured, if I used dashing then I would have to create the connections to the database in order to get the information for the queries I was running. If I used dashing-rails, then the dashboard would be a part of the app and this part would be easier. (If you’re thinking about the paragraph above and thinking, wait a second, you pulled the whole thing into it’s own app anyway in the end, yes. I realize this and boy is hindsight 20/20). Dashing-Rails involves a bit more setup. You’ve gotta set up concurrency, you have to use a database that has lots of threads like puma, etc. The issues started there and just didn’t stop. First, I had an issue with puma and so I upp’ed the number of threads possible and that seemed to fix it. Then, there was a database connection issue. The DB connection would time out almost immediately. We got this working as well, but it still times out. After a certain number of rounds, the thing just kicks the bucket. Then, I had an issue where all my dashboard widget boxes would show up but nothing would show up in them. Sometimes, if I commented things out and then reimplemented them one at a time, they would work again. And there was no rhyme or reason about when the dashboard would start up and kick off, versus when it wouldn’t. <br /><br />So, here’s the really annoying part. I FINALLY got the issues fixed (with the help of lots of pairing with a few different, very patient people) and pushed the dashboard to production, where everything promptly broke and nothing rendered correctly. Then we got it rendering correctly, but the queries still aren’t running correctly. All the while, I’m kicking myself because I was the one who said, “oh, and I’ll build this awesome dashboard to go along with the simple analytics view. It’ll be fun and shouldn’t take too long.” I think the dashboard was mostly a lesson in when to give up. I should have scrapped it after the first week and a half, but I was a little too stubborn and a little too determined to get it done.<br /><br />So, that’s how I built the analytics. For my final thoughts, I think the moral of this story is to always keep it simple. Start small, get that shipped and continue to add and improve.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting reads from the week 4/19 - 4/25</title>
        <link>https://www.daydreamsinruby.com/blog/2014-04-25-interesting-reads-from-week-419-425/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-04-25-interesting-reads-from-week-419-425/</guid>
        <pubDate>Fri, 25 Apr 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Just three short interesting reads for this week... I imagine/hope there will be more next week with some good blog posts coming out of Railsconf so enjoy these and look forward to some more next week.<br /><br /><br /><a href="http://www.everyonedeservesgreatdesign.com/">Design for good</a> and interesting thoughts<br /><br /><a href="http://stevenjackson.github.io/2014/01/26/tdd-is-a-path/">Interesting read</a> on TDD <br /><br />    In response to this <a href="http://hoff2.com/2014/01/24/tdd_is_a_path.html">initial post</a> <br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Errors in Ember</title>
        <link>https://www.daydreamsinruby.com/blog/2014-04-24-errors-in-ember/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-04-24-errors-in-ember/</guid>
        <pubDate>Thu, 24 Apr 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Most recently, I had to add a back button to a 404 page. I know, sounds simple, and it should be simple, but it was actually a little more complex than I thought which led me to learning about errors in Ember.<br /><br />When originally looking in the codebase for where this change would need to happen, I found the ember template which simply said <code> {{status}} {{statusText}}</code> and a ember routes files that didn’t have anything in it except the standard code. I couldn’t figure out where the info being passed into the 404 was coming from and what made most sense for changing it.<br /><br />When it comes down to it, the answer is actually pretty simple. Ember data has an automatic error route. In this case, we were looking in the user route. In this route, there is a model hook sets up a promise.  <code> this.store.find</code> always returns a promise.<br /><br />If the promise is returned from the model hook or in other words filled with user data, then the path completes and you arrives at the correct node in the user path. However, if the promise isn’t returned or is rejected, then you get thrown into the error route. Ember always waits for a promise to be fulfilled and if it isn’t, you are led to an entire default error state.<br /><br />The ember guide gives a pretty good explanation and walk through of what happens to get to these error substates here: <a href="http://emberjs.com/guides/routing/loading-and-error-substates/">http://emberjs.com/guides/routing/loading-and-error-substates/</a></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 4/12 - 4/18</title>
        <link>https://www.daydreamsinruby.com/blog/2014-04-19-interesting-reads-412-418/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-04-19-interesting-reads-412-418/</guid>
        <pubDate>Sat, 19 Apr 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />This week, we've got some ember, some soft skills, some git practice, and more. <br /><br />Enjoy!<br /><br />One of my goals is to understand and get better at git. <a href="https://github.com/dotsara/wreck-it">This looks like a good resource</a>... now I've just gotta make time for it! <br /><br />To do, three things: <a href="http://blog.codinghorror.com/three-things/">http://blog.codinghorror.com/three-things/</a><br /><br />A <a href="http://blogs.hbr.org/2014/04/clumsy-feedback-is-a-poorly-wrapped-gift/">great article</a> on thinking through giving feedback. <br /><br /><a href="http://www.fastcolabs.com/3029274/whats-the-real-value-of-learning-more-than-one-programming-language">Interesting read</a>, not sure I agree with all the parts… what are your thoughts? <br /><br />Since Ember is my first javascript framework, i'm always looking for good articles that explain the similarities and differences between what's out there. <a href="http://www.keltdockins.com/2/post/2014/04/which-javascript-framework-to-use-angular-vs-ember-vs-marionette.html">This</a> was a good comparison. <br /><br />This is the sort of beginner's guide I've been waiting for in Ember! If you're curious about getting started, check out <a href="https://github.com/radar/guides/blob/master/ember.md">this link</a> to walk through building a simple app. <br /><br /><a href="http://www.confreaks.com/videos/3225-mwjs-using-tdd-to-tame-the-big-ball-o-mud">Video</a> on code architecture and making things better <br /><br /><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 3/22-4/4</title>
        <link>https://www.daydreamsinruby.com/blog/2014-04-05-interesting-reads-322-44/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-04-05-interesting-reads-322-44/</guid>
        <pubDate>Sat, 05 Apr 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />You'd think with two weeks of reading I'd have more interesting things, but not so much that past two weeks. The reads below are really good but I've been a little more heads down recently and haven't had the chance to read as much. Anyway, there are some good, interesting posts below, so check them out and enjoy!<br /><br />Doing Your Best Work: <a href="http://www.naildrivin5.com/blog/2014/03/16/doing-your-best-work.html">http://www.naildrivin5.com/blog/2014/03/16/doing-your-best-work.html</a><br /><br />The Last Developer was Terrible: <a href="https://medium.com/p/506a06ae35ea">https://medium.com/p/506a06ae35ea</a><br /><br />Old but still interesting: <a href="http://rachelnabors.com/2012/04/of-github-and-pull-requests-and-comics/">http://rachelnabors.com/2012/04/of-github-and-pull-requests-and-comics/</a><br /><br />A good first day: <a href="http://guillecarlos.com/developers-first-day-at-work.html">http://guillecarlos.com/developers-first-day-at-work.html</a></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 4/5 - 4/11</title>
        <link>https://www.daydreamsinruby.com/blog/2014-04-11-interesting-reads-45-411/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-04-11-interesting-reads-45-411/</guid>
        <pubDate>Fri, 11 Apr 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Some really good reads this week on a variety of different topics. <br /><br />Enjoy!<br /><br /><a href="http://scottchacon.com/2011/08/31/github-flow.html">Read on effective flows</a><br /><br /><a href="http://www.sarahmei.com/blog/2014/04/07/what-your-conference-proposal-is-missing/">Conference proposals</a> and a good step-through process to create your proposal<br /><br />Really in depth thoughts on <a href="http://blog.testdouble.com/posts/2014-04-04-crafting-a-conference-talk.html">crafting a talk</a><br /><br /><a href="https://blog.engineyard.com/2013/how-improvisational-theater-can-improve-team-collaboration">Improv and coding</a><br /><br /><a href="http://mozillascience.org/why-do-scientists-want-to-learn-about-code-review/">Scientists and Code reviews</a><br /><br /><a href="http://ejohn.org/blog/write-code-every-day/">Write Code Everyday</a>. I talk about this a lot in regards to learning to code. This post breaks things down really well. <br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Final Keynote</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-31-final-keynote/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-31-final-keynote/</guid>
        <pubDate>Mon, 31 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>And here we are… coming to a close at Emberconf.  The final keynote was given by <a href="https://twitter.com/littlecalculist">Dave Herman</a> about evolution. He started with a cool <a href="http://www.imdb.com/title/tt0499004/">little video</a> about putting the source code for the internet online. He used that to talk about evolutions versus revolutions. Revolutions are good but only when there is a need for one, otherwise evolution is great. He talked about some of the current Javascript issues of speed, jit compilation, etc. A revolution might be a new byte code language but an evolution is talking about the current and improving it. He spoke about formalizing patterns, closing the gaps to make things better, building a JS compiler, and studying it to optimize the code.<br /><br />There is a process to evolve Javascript. He then spoke a bit about echoschript and es6 modules. Adding features that were backwards compatible. All this can lead to 1JS. It leads to focus, consistency and adoption. Consistency meaning orthogonal, composable, etc. and adoption meaning that it is easy to adopt and comes with as few evolutionary issues as possible. <br /><br />He spoke a bit about “use strict” which fixes some compiler issues (although I’m not completely sure I grasp what and where “use strict” is used for). ES6 modules are strict by default which means a more smooth path. He talked about how features were better than forks and that to pave better paths for the future, we need features that can be adopted into existing code bases. Based on that idea, modules are a better programming model than modes.<br /><br />He then went a bit into the <a href="http://extensiblewebmanifesto.org/">extensible web manifesto</a> and how that is the process of how we can work together to evolve the platform. Basically, good design is motivated by use cases and work flows. Good design is built from small, orthogonal, and composable primitives. We need to think about the end-to-end system and how it all works and then build those in small pieces. His main point was that developers need to be a part of that process to help iterate, evaluate and create standards. So, in three steps, extensible web works like this:<br />1. Add missing primitives<br />2. Enable userland polyfills and compilers<br />3. Work together (browser vendors and developers)</p>
]]></description>
      </item>
    
      <item>
        <title>Other Great Things I Learned At EmberConf</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-31-other-great-things-i-learned-at/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-31-other-great-things-i-learned-at/</guid>
        <pubDate>Mon, 31 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As a newbie in development, I like to do a post on random things I learned during the conference. These often end up being CS terms, nerd culture related, or other interesting items that didn’t quite fit/make sense in a session post. Here are those from this conference.<br /><br /><br /><i>Primitives:</i> basic types in javascript like booleans and numbers.<br /><br /><i>Orthogonal: </i>not a computer term, it just means adjacent. <br /><br /><i>Grok:</i> means to really really understand something. It’s actually coined from a book about an alien and it’s understanding of humans. Check out the link to the book <a href="http://www.goodreads.com/book/show/350.Stranger_in_a_Strange_Land">here</a>.<br /><br /><i>D3</i> is a drawing library mostly used for graph’s or charts<br /><br /><i>Donut charts</i> are pie charts with a hole in the middle<br /><br /><i>Truthy/falsy:</i> this concept is more or less important based on the language. Basically, when stuff isn’t strictly true or false, javascript tries to help you out and guess which one it’ll be. A quick google search shows that there are lots of better explanations out there on what it is.  This one looks pretty comprehensive and interesting: <a href="https://gist.github.com/jfarmer/2647362">https://gist.github.com/jfarmer/2647362</a><br /><br /><i>CLI</i> is a command line interface and it is how you interact with the app on the command line. (A perfect example of things I’ve been doing but didn’t actually know the name for)<br /><br />This is a great background blog post that a few sessions referred to: <a href="http://emberjs.com/blog/2013/12/17/whats-coming-in-ember-in-2014.html">http://emberjs.com/blog/2013/12/17/whats-coming-in-ember-in-2014.html</a><br /><br /><br />Finally, for other great notes from the conference, check out these links:<br /><br /><a href="https://www.icloud.com/iw/#pages/BAKaAlrUjn9i0hXOyWyBDqAS2MEQFkyKTBaF/EmberConf_2014_Notes">https://www.icloud.com/iw/#pages/BAKaAlrUjn9i0hXOyWyBDqAS2MEQFkyKTBaF/EmberConf_2014_Notes</a><br /><br /><a href="https://github.com/zurt/notes/blob/master/EmberConf-2014.markdown">https://github.com/zurt/notes/blob/master/EmberConf-2014.markdown</a><br /><br /><a href="http://www.justinball.com/2014/03/27/ember-conf-2014-wrap-up/">http://www.justinball.com/2014/03/27/ember-conf-2014-wrap-up/</a><br /><br /><a href="http://pixelhandler.com/posts/we-are-emberconf-2014">http://pixelhandler.com/posts/we-are-emberconf-2014</a><br /><br /><a href="http://hermanradtke.com/2014/03/27/emberconf-2014.html">http://hermanradtke.com/2014/03/27/emberconf-2014.html</a><br /><br /><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Snappy Means Happy</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-31-snappy-means-happy/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-31-snappy-means-happy/</guid>
        <pubDate>Mon, 31 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br /><br /><a href="https://twitter.com/mixonic">Matthew Beale</a> gave us a lot to think about and showed me a bunch of tools I had no idea existed in <a href="http://madhatted.com/2014/3/28/via-emberconf-performance-in-ember-apps">this talk</a> about performance.  He started by giving us some good things to think about… mainly, what does fast mean to you? He showed different speeds and what that would mean in terms of actually viewing an app (ie- animations, etc.). You can use that “fastness” scale to then look at your code and see what piece is taking the longest. Is it the network? The javascript? Or the render? Thinking about each of these and looking at times for each part help you narrow down what tools to use and what part needs to be made snappier. <br /><br />When you’re ready to dive into performance and have pinpointed what part needs working on, then you can move on to the recommended methodology. This is 1) gather the facts and isolate the problem. 2) analyze and theorize about what’s going on. 3) change a single thing… if you change a bunch of stuff and performance is better then you don’t actually know what made the difference. And 4) confirm the theory. The example Matthew used was loading the ember.js website on your phone.<br /><br />So, first you need to reproduce the immobile latency reliability… in this case you can use slowyapp, Charles, or network line conditioner. You then create a clean browser (this was also a new concept to me) which means you have no extensions, a private window and therefore nothing interfering with the site you’re working on. Then you measure and analyze in the network inspector. In that inspector you can check out the timings tab which gives you a bunch of information.<br /><br />Part of that information shows us that if you look at the timeline, you can see the load order of things and how long each element is taking. Here, you end up being able to move a script tag which makes the page’s load time much faster. <br /><br />Next, we looked at “janky” animation. To solve this issue, you first need to understand browsers, then you measure with the timeline tool (another one of the inspector tabs). You can highlight a specific section to get more information about it. You can look at frames which show how long something takes to get to the screen. Green = paint, yellow = javascript, clear = upload to GPU, compositing. AND THEN, render console has a bunch of additional tools you can use to record and generate the data.<br /><br />If you’re a little lost on where all these tools are and how to access them, the slides show it all pretty clearly. <br /><br />Also, at this point in my notes I had written “OMG, so many tools!” which I thought was worth sharing here.<br /><br />In this case, the solution to the issue is a webkit transform that keeps it on the GPU and then uploads the whole thing to the graphics card. By adding a Z translation to the animation, it forces the GPU to say this is 3D and should be put on the graphics card.<br /><br />Finally, we talked about ember.js property change notifications. For this methodology, first you need to understand observers and then look at the profiler. Observers are synchronous and fire when a set thing occurs. There are two options <code>.setProperties</code> or <code>Ember.run.once</code>. Then you look at the profiler. The profiler has processing and memory. You run a profile and get back information in form of a flame chart. A flame chart allows you to see the stack that is being run. In the list view you can use the profiler to pinpoint the issue. Here, you refactor to create a buffer instead of pushing items into an array which fires 1 change notification instead of many.<br /><br />The important thing to remember here is to have a methodology to solve issues, to remember that web performance does not equal ember performance and that there are a heck of a lot of awesome tools you can use to help you out.</p>
]]></description>
      </item>
    
      <item>
        <title>Convergent/Divergent</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-convergentdivergent/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-convergentdivergent/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br /><a href="https://speakerdeck.com/cmeiklejohn/divergent">This talk</a> was crazy. It was really academically intense and while I was able to follow the basic ideas, there was a lot of important information and concepts that were ran through really quickly. Fortunately, it seemed like most of the conference participants also thought this talk was also presented really quickly, so I wasn’t alone on this.  Also, every time I went to write a note, I feel like I missed the next two points and came back into the conversation on the third, so hopefully those notes don’t seem really disjointed. I will say that <a href="http://www.twitter.com/cmeik">Chris</a> seems like a really smart, nice dude so it’s definitely worth connecting with him for more details on this if you want to dive into it more.<br /><br />There are distributed computing issues and you’re building a distributed system. Basically, if you’re pushing state to the client, it means you’re caching validations which can lead to consistent data issues and more. This is an issue regardless of the database you’re using and this fact means you’re building a distributed system.<br /><br />Some of the main issues are dropped messages, rendered messages, race conditions, partial failures, and custom merges.  There are <a href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2012/EECS-2012-40.html">TCP incast</a>, <a href="http://en.wikipedia.org/wiki/Slow-start">TCP slow-start</a>, and <a href="http://en.wikipedia.org/wiki/Nagle%27s_algorithm">Nagle’s algorithm</a>… these are cases of latency spikes… I think.<br /><br />Then he went a little into distributed systems theory and consistency. Consistency is a contract and if developers follow the contract then there will be predictability. There are three kinds of consistency. Strict linearizable which is the total order of all events in a system and for single servers. Then there’s eventual consistency which means you eventually see all the events. It is a weaker form of consistency. Finally, there’s causal consistency which is basically, I observe an update immediately but another person may see the change a little later. When dealing with consistency, it comes down to safety vs. liveness. <br /><br />You need consensus to deal with consistency. For consensus, you’re basically looking at termination, agreement, and validity. Termination means eventually the info will show. Agreement means it will all have the same value. Validity is that the value will be part of consensus. It comes down to a generals problem which are academic concepts. There’s <a href="http://en.wikipedia.org/wiki/Two_Generals%27_Problem">two generals</a> or the Byzantine generals. There are algorithms used to solve this. Some of those algorithms are <a href="http://en.wikipedia.org/wiki/Paxos_(computer_science)">paxos</a>, <a href="http://raftconsensus.github.io/">raft</a>, <a href="http://en.wikipedia.org/wiki/Two-phase_commit_protocol">2pc</a>, and <a href="http://en.wikipedia.org/wiki/Three-phase_commit_protocol">3pc</a>.<br /><br />I’m not sure how this lead into vector clocks but then we discussed vector clocks whick allow us to define all possible orderings in a system. There are also dotted version vectors which are things having to do with events and actors.<br /><br />We then went into CRDTs. CRDTs are conflict free replicated data types. These are data structures that store something. There are two types of CRDTs: state based and operations based. State based CRDTs have monotonicity which means functions where as inputs increase, outputs increase. We care about associativity (which is a binary operation… addition is associative), community (also a binary function, addition is also commutable), and idempotence (also a binary function). All three of those exist in programming.<br /><br />If that wasn’t quite enough for you, we then spoke about bounded join semilattices… which is another math term, but this one has a decent diagram in the slides so check that out.<br /><br />So, why is all of this important? Because consensus is hard. We want to avoid coordination so the system can progress and we want a weak consistency and higher availability. The conclusion is that you’re building a distributed system so you need to be thinking about this.</p>
]]></description>
      </item>
    
      <item>
        <title>Ember Cli</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-ember-cli/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-ember-cli/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />Next up was a talk on <a href="https://github.com/stefanpenner/ember-cli">Ember-Cli</a>. Cli means command line interface. From what I understand, Ember-Cli has also had a bit of a sorted past like Ember-data but lots of work is being done to make it much better. This was another talk that primarily talked about the highlights of what’s coming. <br /><br /><a href="https://twitter.com/stefanpenner">Stef Penner</a> presented a few problems and their solutions. The first problem was coupling. The solution here is inversion of control. You have a container (which abstracts coupling) and the resolver (which finds the code for the container to use). The second problem are globals which leads to coupling based on load order. The solution here is <a href="http://www.thomasboyt.com/2013/06/21/es6-module-transpiler">es6 modules</a>. Rather than writing this glue code, the app should build that code. This leads to thinking about tooling and shipping to the browser. A third problem mentioned was build stability and the solution is a build pipeline accomplished via new tools like broccoli.<br /><br />Ember-Cli tries to solve these problems by creating a tested <a href="http://designingsocialinterfaces.com/patterns/Pave_the_Cowpaths">cow path</a> that we’re all working on together. Two highlights are that in ember-cli, you can subscribe to different releases. For example, you can subscribe to beta releases and roll back if necessary. Secondly, cli adds a yeoman-type analytics data as an option. I’m sure there’s much more coming but those are the highlights.</p>
]]></description>
      </item>
    
      <item>
        <title>Ember Components</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-ember-components/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-ember-components/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />The next session was actually entitled “<a href="https://speakerdeck.com/machty/emberconf-2014-mr-router-embraces-the-controller-alex-matchneer">Ember Components</a>” (and wow, writing up these notes, I really am realizing how much components were spoken about but this talk like totally blew my mind). <a href="https://twitter.com/machty">Alex Matchneer</a> started by talking about embracing the controller. The questions he posed to us were what belongs in the router versus the controller? And what’s up with query params?<br /><br />For those who don’t know, query params is the hash of info and it looks like this <code>/?query=params</code>. So, should query params be in the router or the controller? Putting them in the router makes sense, but it leads to a bunch of issues (outlined in the slides). It was decided that query params would go into the controller, so let’s look at a controller center API. Here, sortby is a property in the controller. <code>queryParams: [‘sortBy’]</code>. Doing this means that there’s no need for custom observation, query params are bound to controller properties, and there are additional add-ins that make it easier and nicer.<br /><br />But why is this in the controller and not in the router? Well, the controller manages app state and also wraps the model with additional information for the templates. The router is in charge of navigation and is the link between URLs and controller/templates. The router serialized hierarchy into the path and the controllers serialize the app data into the query (this is practically verbatim from the slide).<br /><br />When looking at router paths, transitionTo (one used often right now) is great but only for complex hierarchical things. <br /><br />So, will a property be remembered or not? In router-driven controllers, property will live forever, but in an item/other controller, there are shorter lifecycles.<br /><br />The primitive that is missing is the model dependent state. This is a state, accessible to controllers, tied to a specific model. The store/restore controller properties are scoped to the controller’s model. This can be used for QPs, caching, indexed DBs, local storage. For example, a global cache object gets injected in a controller. The controller decides what bucket that state lives in. And then inside the cache there is a bucket for each bucket key and you are in control over bucket allocation. Ie- it could be in local storage proxy, could be a POJO (<a href="http://en.wikipedia.org/wiki/Plain_Old_Java_Object">Plain old Java object</a>), etc.<br /><br />Phew. That was a lot to explain. The slides are really excellent for this talk so definitely check them out.</p>
]]></description>
      </item>
    
      <item>
        <title>Ember for Children</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-ember-for-children/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-ember-for-children/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I thought it was nice that this session was included in the first ever Emberconf. With so much information to cover and so many interesting components of the technology, it was nice that the organizers made sure there was a talk that focused on the community and what we can be doing together for underserved communities in technology. Highlighting an achievement like this, really shows that even though we’re cranking out amazing technology, building the community is important and giving back is core to that idea.<br /><br /><a href="https://twitter.com/devarispbrown">DeVaris Brown</a> (who also does <a href="http://emberhotseat.com/">ember hot seat</a>) talked about a new initiative he’s launched which takes at risk youth and teaches them about programming and code. He started by talking about the bootcamp idea (something I have mixed feelings about and have written on before) and wanted to provide a bootcamp-type opportunity to high school students that wouldn’t be able to afford something like that. He walked us through the curriculum he used to teach these students, the time he put in, and where the students were today. He worked with <a href="http://www.blackgirlscode.com/">Black Girls Code</a> and other organizations to find students. He also spoke honestly about the challenges he faced like reasons students couldn't come to class or the basic typing skills necessary (for which he recommended <a href="http://typing.io/">typing.io</a>).<br /><br />DeVaris received a standing ovation and got a lot of questions from people on how they can help and get involved. I think it’s great that the community is so interested in providing these opportunities and focusing on these sorts of initiatives. I hope that they can work together and some of the already established organizations to make more things like this happen instead of trying to reinvent a new initiative.</p>
]]></description>
      </item>
    
      <item>
        <title>HTMLBars</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-htmlbars/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-htmlbars/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>And we’ve finally arrived at the last session of the day. As my brain power waned, I was excited to hear about the new things coming in <a href="http://talks.erikbryn.com/htmlbars/#/">HTMLbars</a> that will make apps faster and better. This session talked about the exciting things to come with <a href="https://twitter.com/ebryn">Erik Bryn</a> and <a href="https://twitter.com/krisselden">Kris Selden</a>.<br /><br /><a href="https://github.com/tildeio/htmlbars">HTMLbars</a> is a templating library on top of handlebars. It understands markup. In htmlbars there is no need for {{bind-attr}}. It will build DOM fragments instead of strings which means no more script tags! These changes will dramatically improve the performance of large lists because htmlbars can rapidly clone DOM fragments.<br /><br />Binding update order… instead of changing all observers, it’ll update based on the parent. The presenters then showed a flame chart that shows a stack of currently executing code. They also talked about the re-render which is an anti-pattern. Instead of new re-rendering, the content will update itself instead of the entire re-render. It will have smart caching and cloning of the DOM which will enable the re-render to be much faster.<br /><br />Looking at just the DOM, there will be more of an ability to use willInsertElement because you’ll have the element that you ant to insert. And you’ll have more animation ability. For example, you’ll be able to set an animation off the screen because it’s coming up (you want to use the animation soon) and you can move it onto the screen in css transitions. There is custom rendering which then interacts with the DOM and will be secure by default. <br /><br />It’ll also be easier to step through the render path to show more of the template to the DOM path which will clear up some of the “magic” that ember usually does automatically. I’m not exactly sure what this means IRL but I’m looking forward to finding out. HTMLbars will also bake in support for server-side rendering and looking at this, they’ve focused on the SEO use case.<br /><br />Last but not least, they’re predicting a 2-3x performance improvement based on these changes.<br /><br />There isn’t a lot out there right now about HTMLbars but it looks like it’s coming soon and once it arrives, I’m sure there will be lots written about it.</p>
]]></description>
      </item>
    
      <item>
        <title>Modeling the app store and more</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-modeling-app-store-and-more/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-modeling-app-store-and-more/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />This session was a really cool session that showcased what ember can do and something that was build with ember as opposed to diving into a specific tool or component of the framework. Presented by <a href="https://twitter.com/mutewinter">Jeremy Mack</a>, the talk was about how he used tapas with ember and built a search engine without a server. Jeremy looked at the app store and was annoyed with the silly popup links and the lack of good functionality in the app store.<br /><br />The first issue he discussed was that there are lots of different data types in the app store. The core model is the iTunes item and an iTunes item has data like price, artwork, name, etc. Everything else inherits from iTunes item.<br /><br />Jeremy then talked about mixins, which let you encapsulate functionality and reuse them. Mixins are kind of like components (I think) but components focus on the template and what you see whereas mixins focus on properties that can be added to other classes.  The app mixin that was created are comprised of things that ALL apps have. These are aspects like screenshots, version, developer, and more. Then there is a genre mixin, and other mixin types. The app uses different mixins depending on if the iTunes item is a song, app, movie, or other option.<br /><br />Then there is an adapter. The adapter is code that talks to a specific endpoint. In addition, there are then serializers. The serializers turn the adapter stuff into the format that you want it in.<br /><br />Going back to talking about the iTunes item… it has classifies, polymorphism and sideloading. Classifiers are different properties that we know about. There’s a top charts serializer which uses the ID to transform the top charts data into the correct format. Then there are also relationships which map the parent-child relationships using ember data. It also maps the other data (ie- bringing into the app view information from youtube, rotten tomatoes, etc.). There is a fetcher which is defined in the controller. It takes care of pagination (custom built in this app), uses the identity map to de-duplicate, looks at required params, max results, etc.<br /><br />Finally, in the templates for the app, there were lots of partials utilized, which is interesting. And as a sidenote, he uses fastclick to optimize the touch response.<br /><br />Finally, here’s the app! It’s amazing so check it ou: <a href="http://fnd.io/">fnd.io</a></p>
]]></description>
      </item>
    
      <item>
        <title>The Unofficial, official Ember Testing Guide</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-the-unofficial-official-ember-testing/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-the-unofficial-official-ember-testing/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />This was one of the sessions I was anxiously awaiting and it did not disappoint. First, a big hand of applause for <a href="https://twitter.com/coderberry">Eric Berry</a> for giving an excellent talk (his first one!). <a href="https://speakerdeck.com/coderberry/the-unofficial-official-ember-testing-guide">The slides</a> were excellent and I can’t wait to continue looking into the new <a href="https://github.com/rpflorence/ember-qunit">ember-qunit</a>. <br /><br />Testing looks at assertions. Assertions test the state of your code and QUnit is the default assertion library. In ember tests, there are always two parts, the setup and the teardown (those are callbacks). Now, there are assertions that are already provided (see the slide for those). One thing that Eric noted was that <a href="http://visionmedia.github.io/mocha/">mocha</a> and <a href="http://jasmine.github.io/">jasmine</a> are not excluded in ember… you can use either of those for testing as well, but <a href="https://qunitjs.com/">qunit</a> is the happy path (a phrase I’ve come to know and love since working with ember).<br /><br />Helpers help us guide our app to the state we want to test in our assertions. Looking at the callbacks, the <code>setupForTesting</code> sets up the router, etc. then you call <code>injectTestHelpers </code> which sets up the helpers so then, in your actual test, you write your helpers and then your assertions. Ember.test runs the helpers and qunit runs the assertions. Additionally, there are a bunch of different types of helpers starting with asynchronous helpers, synchronous helpers, and wait helpers. Asynchronous helpers wait for the proceeding helps to finish before they run. These are <code> visit(), fillIn(), click(), </code>and <code>keyEvent()</code>. Synchronous helpers run instantly. An example is <code>find()</code> and finally wait helpers wait for asynchronous helpers to complete before running. An example is <code>andThen()</code>.<br /><br />Then there are custom helpers.  Use <code>registerHelper()</code> to create an asynchronous helper. Use <code>registerAsyncHelper()</code> to create a new async helper. A final reminder at the end of this part was that you still have to call <code>injectTestHelpers</code> to make sure you run the helpers regardless of whether they’re custom or not.<br /><br />So now, the new things that will be in Ember 1.5. There will be new integration helpers. For example, <code>triggerEvent()</code> which takes three arguments: selector, event, and anything additional you need to add. Others are <code>currentRouteName(), currentPath(), </code>and<code> currentURL()</code>.<br /><br />At this point, there was an awesome example of testing search, so if you’ve got search in your app, check it out.<br /><br />The next part looked at how to test in isolation. So instead of having to test all the pieces all the time, you want to test specific aspects. This is where ember-qunit was introduced. Ember-qunit is a library that lets you perform unit tests without loading the whole container. Ember-qunit was inspired by rspec. You start by setting up the globals is <code>emq.globalize()</code> and then you need to set up the resolver (described as the thing that can find anything… ie- mom). It also provides module helpers. These are <code>moduleFor(), moduleForComponent(), </code>and <code>moduleForModel() </code>.  For the example <code>moduleFor(“route:index”)</code>, it’s basically saying “hey resolver, I need you to pull this (the route:index in this case) from the container. <code>moduleForModel()</code> is specifically for testing Ember-data. There are super descriptive, awesome slides for each of these module helpers. <br /><br />The last piece I noted was in controllers. In those tests, you’ll notice a “needs” field. Needs is used to bring in the dependency that the test need to bring in, in order to run… in the case on the slide, the controller for application.<br /><br />To get going with ember-qunit, you just need to do bower install ember-qunit. It’s in ember-appkit and ember-cli already.<br /><br />Finally, the last big announcement was that the team is redoing the testing guide on the ember.js site.<br /><br />Happy Testing!!</p>
]]></description>
      </item>
    
      <item>
        <title>{{x-foo}}</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-x-foo/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-x-foo/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Day two started with a bang with <a href="https://twitter.com/ryanflorence">Ryan Florence</a> talking about <a href="https://github.com/rpflorence/talk-emberconf-2014" target="_blank">{{x-foo}}</a>. Speaking more about components, Ryan explained components as tags with a unique style and behavior. They are custom elements with an optional template, with an isolated ember view and the view is the context.<br /><br />The most important part of this conference was obviously when Ryan pulled out the drone!!!! What’s a good conference without a drone demonstration?! So, in this case, Ryan flew the drone showing these ember components and using Ember. For example, the x-wing was a components and you can checkout the components which outlines all the actions.<br /><br />Then we moved on to getting the components to talk to the outside world. Two ways were discussed: data binding and actions. Data binding are attributes that components will 2-way bind to. Actions are the actions that the component will outline. For data binding, he used the example of <a href="https://github.com/instructure/ic-tabs#usage">ic-tabs</a>. The use case is to persist to query params. Basically, the controller sets the context of the template so that you can bind to those properties. You can see an example here: <a href="http://instructure.github.io/ic-tabs/">http://instructure.github.io/ic-tabs/</a>. Then you can find the query param attribute on the tags. For actions, he discussed ic-menu. These components allows for a solution to the popover edge cases. It outlines <code>on-select=“remove” </code> and same for save and copy. And then those are saved in the controller. You can see an example here: <a href="http://instructure.github.io/ic-menu/">http://instructure.github.io/ic-menu/</a>.<br /><br />Static tabs and dynamic tabs can both happen via parent and child components. Child components can handle their own state.<br /><br />Sub-components are identified by events or if you need to manage a more specific class or attribute.<br /><br />One interesting this that Ryan mentioned was that he is biased towards not having a template connected to a component and in his opinion, if you have a template, then you missed an opportunity for a possible abstraction in your component code.</p>
]]></description>
      </item>
    
      <item>
        <title>Animations and Transitions</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-animations-and-transitions/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-animations-and-transitions/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Can you believe that at this point we were only like half way through the first day?! I’m amazed at how much was covered so quickly.<br /><br />The next talk was about animations and transitions. I have to admit, after the last couple of talks where I hadn’t yet had much hands-on experience with those tools, I was really excited for this one. The project I’ve been working on has had some animation and transition difficulties so I was interested in hearing why these transitions were potentially so complex and get some good ideas for moving forward.<br /><br />The <a href="http://ef4.github.io/ember-animation-demo/#/title-slide">talk</a> was give by <a href="https://twitter.com/eaf4">Edward Faulkner</a>. The talk “slides” are basically an awesome demo that you can continue to use as you experiment with different transition and animation types.<br /><br />Ember animations fall into 2 categories of simple and complex.  Simple animations are those that occur in the same route. <br /><br />Sample: <code> {{animate-changes of=how }}</code>: this separates how I’m animating versus what I’m animating and then the actual animation happens in the css.<br /><br />There are also components that have a toggle animated class which can have current and next specified.<br /><br />&lt;div&gt;<br />  &lt;div class=&quot;next&quot;&gt;{{next value}}&lt;/div&gt;<br />  &lt;div class=&quot;current&quot;&gt;{{current value}}&lt;/div&gt;<br />&lt;/div&gt;<br /><br /><br />In an ember component, you can also have a bound property. You can use bound properties to show what is happening (in the case of the demo- the font size is a bound property). You can track the state and bind it.<br /><br />You can also have an animated if helper. Here, you can have a computed property in the controller that is related to the animated helper and in the template, you can dictate how to represent these situations.<br /><br />The more complex animations are those that go between routes. These are much more difficult and there is no drop-in library that solves this. You need to figure out how to coordinate the transition and animation between the views, templates, controllers and routes. Referring to the slid e showing the parent to child transition, we're looking at a nested route. The parent route stays rendered and the parent controller has a computed property looking for the details controller, which can flip the class and trigger the css transition. This is a mouthful but it makes sense. Going back is a much more complicated story. One way to solve this is to enact <a href="http://emberjs.com/guides/routing/preventing-and-retrying-transitions/">willTransition</a>. The example for this is in the presentation slides. I highly recommend checking it out because I don’t have notes from this part which means I was too fascinated by what was going on to write down the steps.<br /><br />The last part of the talk discussed modals. A modal has a state and URL that is not tied to the route. But modals can be used with query params to bypass the router and go directly to the controller meaning that rendering the modal has its own css rules. BUT be careful because you need to animate the modal away as well which is more difficult. Just clicking on “back” or “ok” doesn’t animate it away, it just takes it away. At the end, a few mobile specific concerns were mentioned as well.</p>
]]></description>
      </item>
    
      <item>
        <title>Broccoli</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-broccoli/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-broccoli/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Moving right along, the <a href="http://www.slideshare.net/jo_liss/broccoli-32911567" target="_blank">next talk</a> was from <a href="https://twitter.com/jo_liss">Jo Liss</a> about <a href="http://www.solitr.com/blog/2014/02/broccoli-first-release/">Broccoli</a>. Broccoli is a js build tool. The goal of broccoli is to have an architecture that allows faster build reloads. The session was broken up into three parts. First, how to write a broccoli build definition. Second, sketch out the broccoli api. Third, how broccoli integrates.<br /><br />Broccoli definitions are in the brocfile.js. the broccoli plugin has support for lots of other things as well including coffeescript. When you run the build in broccoli, it outputs a new tree and then to export you just call merge trees which pulls the css and js files into one tree.<br /><br />The broccoli api is a simple one. Broccoli only knows trees which can be represented by a string in the directory or an object. This object has two functions, the read function and the cleanup function. The read function returns a directory (or a tree). The tree will be called and read repeatedly to build and then at the end, cleanup will be called. The api is tiny and the goal is to keep it small and more over things into helper packages. One example of a helper package is broccoli-transform. Another is broccoli- filter which works with a 1:1 relationships. This package implements the 1:1 relationship of input to output files. It also has cache so you don’t have to recompile everything all the time.<br /><br />Finally, there was a discussion on integration. Broccoli is a small library and there is a need for broccoli to provide a good api so that it can be integrated into more tools. Broccoli does integrate with the back end as well.<br /><br />I’ve got a lot to read about broccoli in order to fully understand it but I felt like this session gave me a good overview and some interesting places to dive in a little further. Since, I’ve got a better understanding that broccoli is like a rake task in ruby or the asset pipeline in rails. Broccoli is important because as your application grows, the amount of time it takes to reload a build grows. If you want to easily edit files and then reload the browser, you don’t want to have to rebuild everything in order to see the changes. I haven’t used grunt (a task-runner tool) before but there seems to be a lot of information about how when editing files, there are lots of complications and dependencies that can quickly build up and make just reloading the files you’ve changed a poor solution. But with broccoli, it tracks the files you are changing and these dependencies and rebuilds only the ones that need rebuilding so your build time is faster. I think sections 4 and 5 of <a href="http://www.solitr.com/blog/2014/02/broccoli-first-release/">this link</a> do an excellent job providing a little more background and detail on this.<br /><br />Next step for me, I think, is to dive into this post a little further: <a href="http://ampersate.com/getting-started-with-broccoli-and-emberjs">http://ampersate.com/getting-started-with-broccoli-and-emberjs</a><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Contributing to Ember</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-contributing-to-ember/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-contributing-to-ember/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The next session was on <a href="https://speakerdeck.com/rwjblue/contributing-to-ember">Contributing to Ember</a>. This is going to be a pretty short write up because a lot of the talk just went of the technical structure of how to contribute.  <br /><br />The three types of contributions are primarily fixing/cleaning up the docs, reporting and/or fixing bus, and submitting new features.<br /><br />First step is to pick the right repo. If you’re looking at the docs, there is a guides repo and a main repo. For each of the types of contributions, there is a naming convention that goes along with the commit and you want to make sure to use the right prefix for what you’re committing. Because I’m mostly interesting in looking at the docs, I took the most notes around there. There are three kinds of commit prefixes [DOC], [DOC beta], and [DOC release]. For bug fixes, when submitting something you want to make sure to add a test that shows regression. If you can show a test, then you definitely need to show instructions and do a <a href="http://jsbin.com/welcome/1/edit">jsbin</a> with specific information. The main point emphasized here was to make it as easy as possible for others to see the bug you are talking about… especially if you are submitting a bug report but not necessarily fixing the bug.<br /><br />Another important emphasis was on security. Mainly, DO NOT report security issues on github. For those, email the security team privately.<br /><br />For submitting features, all features are behind feature flags. In features, you want to look at the JSON to see if the feature is enabled or not. There are specific feature commit message instructions with specific message types and you want to make sure to hide changed behind flags.<br /><br />Finally, they talked about the release cycle, which was interesting. There are basically three channels and six-week cycles. The three channels are beta, canary, and release. Beta is branched from canary and includes bug fixes, doc updates, and goes on a weekly release cycle. Canary is everything, new features, bug fixes, etc. Release is also branched from beta and it’s doc updates, major regressions, and security fixes.<br /><br />I have to admit, I was a little intimidated at the end of this talk. I really want to contribute to open source, especially to something like the ember docs where I feel I could maybe help pinpoint confusing points or rephrase to make things more understandable, but walking through this process made me pretty nervous about screwing up the prefix or process.</p>
]]></description>
      </item>
    
      <item>
        <title>Ember Components transclude my directives</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-ember-components-transclude-my/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-ember-components-transclude-my/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br><a href="http://johnkpaul.github.io/presentations/emberconf/components-transclude-directives/#/">This talk</a> was given by <a href="http://www.twitter.com/johnkpaul">John K. Paul</a> and I have to say, I learned A LOT during it. As I mentioned, components were mentioned a lot during this conference but this session gave me some interesting understanding of additional terms and a little bit of Angular.<br><br>In Angular, directives make custom widgets. They decorate existing HTML with additional functionality… essentially a piece of HTML and a piece of javascript. In directives, you can also restrict based on specific parts. For example, restrict E means restrict based on an element, restrict C means restrict based on a class.<br><br>Transclusion is the inclusion of one thing into something else. Directives are used for making a DSL in your HTML but in order to do that, there are lots of knobs and levers and you need to understand lots of stuff to make that happen. For example, you put transclude: true in a directive definition which takes whatever is inside the element and moves it into the html where “ng-transclude” is written.<br><br>Ember’s got something similar to directives and those are components… except that components are much cooler and much easier to understand and create. An ember component is a custom component that you can use in many different places.  The more general form of this are web components which are discussed in the <a href="http://extensiblewebmanifesto.org/">extensible web manifesto</a> (more on that in a later post) but it is basically rolling your own reusable widget. Ember components let us do something like this now and allows us to encapsulate HTML, CSS, and JS. It lets us package together a structure and behavior. <br><br>An example John K. Paul used was ember tabs, which are also ember components. They’re reusable. More examples are x-tabs and x-pane. The best thing about components is that you can take this functionality that is encapsulated in this component and just copy and paste it into your code, change very few things and have it good to go in the app you’re working on. The last slide talked about ember component lists that Eric Berry (<a href="http://coderberry.me/">http://coderberry.me/</a>) and John K. Paul (<a href="https://gist.github.com/johnkpaul/6796944">https://gist.github.com/johnkpaul/6796944</a>) have been putting together and urged other people to add to it as they create components. I, for one, think a collective list like this would be amazing and I’m very excited to use components more and experiment with how to use them to make us more productive and make our app better!</p>
]]></description>
      </item>
    
      <item>
        <title>Ember Data</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-ember-data/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-ember-data/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Moving right along was a session on <a href="https://github.com/emberjs/data">ember data</a> with <a href="https://twitter.com/terzicigor">Igor Terzic</a>. This session was a little tough for me to follow so I’ll do the best I can on the write up notes. Ember data is also something that is discussed a lot and that I understand but haven’t really had a chance to dive into as much as I’d like to so far. I think this affected my ability to follow the talk because the talk was partially on what’s new in ember data, partially on what’s coming soon, and partially on where it’s been in the past. I know it’s been an arduous journey for ember data to get to where it is today so I think if I knew a bit more about the ember data history, the talk would have been even better for me.<br /><br />The speaker was super entertaining and his slides were interesting but the talk definitely jumped around a bit making comprehensible notes and distilling themes and key ideas a little challenging. So here goes…<br /><br />Ember data is a framework to solve problems. It is a data persistence framework. All problems can be categorized into a quadrant. The axis are unique vs. common and easy vs. hard. Easier problems can be easily fixed which means they’re locked down less. The core principle of Ember Data here is that changes to the data api should not affect the app code.<br /><br />All adapter and serializer code was rewritten in the past few months. And in the future, the idea is to continue to tighten up the api.<br /><br />The speaker went through a few different core problems and whether they were easy, medium, or hard. First up was data transformation. Data transformation is an easy problem. It is easy but unique. The second problem is asynchronicity which is related to promised which have gotten better. Asynchronicity is a medium problem because it is hard but common. Now in ember, there is a complete asynchronous promise-based solution and in the future, there will be an even more tight api related to promises. Relationships can be synchronous or asynchronous. Additionally, in the future there will be an easy way to implement lazy arrays and all relationships will be promisified in the future. Ember data returns <a href="http://emberjs.com/api/classes/Ember.PromiseProxyMixin.html">promise proxy mixin</a>.<br /><br />Next, we come to the caching problem. Caching is a hard and common problem. In this case, Igor discussed an identity map as a way to access records based on a type ID. The main improvement in ember data around this is a standardized data retrieval process which will lead to greater productivity.<br /><br />Finally, locality is discussed. Locality is a hard and unique problem. This is basically explained as data coming in all the time from lots of different places. Basically, locality = craziness. Locality depends on your api data transfers, how the data is coming you're your application, etc. Adding relationships of things makes this issues even more complex.  Ember data tries to change the relationship syncing problem. Now there is also more focus on the problems at hand.<br /><br />More information here: <a href="http://emberjs.com/blog/2014/03/18/the-road-to-ember-data-1-0.html">http://emberjs.com/blog/2014/03/18/the-road-to-ember-data-1-0.html</a><br /></p>
]]></description>
      </item>
    
      <item>
        <title>EmberConf 2014 - Setting the Scene</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-emberconf-2014-setting-scene/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-emberconf-2014-setting-scene/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Last week, I went to <a href="http://emberconf.com/schedule.html">EmberConf 2014</a>. This conference was the first official Ember conference and it was fantastic. For those of you who don’t know what <a href="http://emberjs.com/">ember</a> is, it is a JavaScript framework that I’ve been working with for the past two months.  The conference was in Portland and it was a single-track, 2-day long, wonderful experience. Because I took copious notes, I figured I would do that same thing I did for <a href="http://rubyconf.org/">RubyConf</a> this past year and write up a <a href="http://allisonsherenmcmillan.blogspot.com/search/label/rubyconf%202013">post for each session</a>. Some of these will be longer, some will be shorter, and if you know Ember, PLEASE, feel free to add comments and additional thoughts. I also want to get these up pretty quickly, so there will likely be a few posted at a time.<br /><br />I’ll be honest, I was nervous going to this conference. I’ve only been to a few tech conferences so far and at most of them DC Rug and Arlington Ruby are represented pretty heavily so I generally never feel like I’m stepping into the unknown without a solid group of people to fall back on if I’m feeling lost. I’m also used to going into a conference as a “known newbie” either because it’s a smaller local conference and most people know my level of experience or, like at RubyConf, because I was an opportunity scholar. Emberconf was different. I knew a couple of people going in but they were much looser connections and again, there were few of them AND I was just one of the crowd. <br /><br />My fears and nervousness were quickly quelled at the conference though. The general atmosphere was kind and excited and everyone wanted to meet one another. I also had some great people like <a href="http://www.twitter.com/gustin">Gustin</a>, <a href="http://www.twitter.com/crsexton">Chris</a>, and <a href="http://www.twitter.com/tundal45">Ashish</a> offer some awesome twitter introductions which really helped as well! There were a total of 430 people there, which is a pretty manageable number. This was also the first single track conference that I had been to and I really enjoyed it. I did wish there was an opportunity to switch up the table you were sitting at during the day but for the most part, it was great. You sat at a table, really got to know everyone there. There were a good number of breaks and because everyone was hearing the same sessions, there was a lot to talk about.<br /><br />The sessions were 30 minutes long, which I felt was a pretty good length for most of them, although didn’t always allow for enough Q&amp;A time. Again, though, the benefit of a small, single track conference is that the speakers are all accessible to ask more questions to during the breaks. So, the scene is set… now onto the sessions.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Opening Keynote</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-opening-keynote/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-opening-keynote/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The <a href="https://speakerdeck.com/tomdale/emberconf-2014-keynote" target="_blank">opening keynote</a> was done by <a href="https://twitter.com/tomdale">Tom Dale</a> and <a href="https://twitter.com/wycats">Yehudah Katz</a>. It started with some thoughts on inclusivity which was really nice to see. I also think the way they frame inclusivity both for the conference and for the Ember community at large was really impressive. It wasn’t just a standard read of the code of conduct and it wasn’t presented in a lecture format. It was presented in a way that the emotion of exclusivity and inclusivity were really felt by the participants on a deeper level.<br /><br />This idea of inclusivity continued throughout the talk. Tom and Yehudah spoke about the Ember core team and encouraged people to get involved. They made a point to stress that the core team is not just about being a developer, there is also space on the core team for event planners, community builders, and others who will be core to building ember in different capacities. They talked about contributing to the docs and, as a newbie, was encouraged by the fact that they stressed a need for newer developers to be contributing as well to ensure that the docs and pieces of ember were accessible and understandable to everyone.<br /><br />They also spoke about productivity. A core reason for people using ember is to be more productive every day. They showed this through the idea of outlining flows. When you think about a flow on an app, even simple features can have a complex flow and many screens. They then highlighted different ember apps that showed ember from different flow ideas and representations, making the point that one of Ember’s strengths lies in it’s ability to allow developers to create and link new screens very easily. Some of the apps highlighted were <a href="https://vine.co/">Vine</a>, <a href="http://www.bustle.com/">Bustle</a>, and <a href="http://travis-ci.com/">Travis</a>.<br /><br />It was an excellent opening session that really set a good tone for the rest of the conference.</p>
]]></description>
      </item>
    
      <item>
        <title>Using Ember to Make the Seemingly Impossible Easy</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-29-using-ember-to-make-seemingly/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-29-using-ember-to-make-seemingly/</guid>
        <pubDate>Sat, 29 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This session was titled “<a href="https://speakerdeck.com/simplereach/using-ember-to-make-the-seemingly-impossible-easy" target="_blank">Using Ember to Make the Seemingly Impossible Easy</a>&quot; with <a href="https://twitter.com/ramcio">Andre Malan</a> and <a href="https://twitter.com/Ember_Princess">Heyjin Kim</a>. The talk touched on four different pieces of ember. <br /><br />The first was migrations. Migrations can be a really difficult issues especially when trying to transfer data from a SQL database to a new database.  The speakers told a story about having this problem and trying to solve it. Ultimately, they were able to solve it using <a href="https://github.com/emberjs/data">ember data</a>. Basically, they did an entire migration based on ember data provided data in both apps which provided them with the mechanism to pull the data out and push it into a different place.<br /><br />The second aspect they spoke about were visualizations. This is basically helping people understand the story behind the data. In order to do this effectively, they used an <a href="http://emberjs.com/api/classes/Ember.Component.html">ember component</a> (something that was frequently discussed throughout the conference). Basically, in an ember component, they encapsulated <a href="http://d3js.org/">D3</a> code. They did this by defining a components, adding the D3 code into it which allowed them to draw a <a href="http://bl.ocks.org/mbostock/3887193">donut chart</a>. I’d never heard of D3 code before but the main point was that by wrapping this code into an ember component, a developer can change/utilize the ember component to make the changes they need to instead of having to dive into the D3 code.<br /><br />The third thing they spoke of was infinite scrolling. This was an interesting issue because it involves loading these items into the browser so that they’re essentially ready to go when someone continues scrolling. The speakers specifically spoke about a scrolling list of video events and that for the view to happen, the post view has to go through the vine controller to make the switch to video. Instead, you can swap the DOM from heavy weight to light weight objects and that by constantly clearing out the DOM and repopulating it with new information.<br /><br />The final thought was on two apps in one. The problem Andre and Heyjin encountered was that they had an app that was entirely behind an authentication wall, but there was one page that they wanted to make a public URL but couldn't because you had to log in to see  anything on the site. The solution ended up being a non-authenticated rails app with a new router. Basically, they spun up a new app with a small sprinkle of ember in the controller. If you do this and think about quickly developing different applications then you can send different types of people (ie- consumers, managers, administrators, etc.) to completely different applications leading to different JS structures and views based on what kind of a user the person is.</p>
]]></description>
      </item>
    
      <item>
        <title>Controlling Route Traversals with Flow</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-30-controlling-route-traversals-with-flow/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-30-controlling-route-traversals-with-flow/</guid>
        <pubDate>Sun, 30 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br /><a href="https://www.dropbox.com/s/02peoxevqwjz1bu/Controlling%20Route%20Traversal.pdf">This talk</a> was all about routes. <a href="https://twitter.com/nathanhammond">Nathan Hammond</a> started by talking about URLs in three different categories… resources, actions, and flows. Resources don’t change the state of an app and are available all the time. We want them to be in our history stack. Finally, they are plural or singular nouns depending on the controller. Actions are things like post or put paths like <code>/login </code>or <code>/recover-password</code>. It receives all the users input at once. It results in the user being presented with flash or a new resource. Finally, it should always contain a verb (see the examples from a few sentences ago). Finally, there are flows. Slows are series of actions across routes. Flows lead to a completed application state.<br /><br />A state machine allows you to jump into the flow. BUT designing a flow is really hard. You need to make sure you cover every components of the flow. There is a four step process to do this.<br />Step 1: inventory our routes in the routers<br />Step 2: list linear paths (ie- login flow traversal path)<br />Step 3: convert to node graphs<br />Step 4: identify state change to traverse each path<br />        Then you do a complete enumeration of the state or if you’re passing in a wait<br />Step 5: Identify backwards traversals (ie- where does the back button lead to each time you press it).<br /><br />The CS term for doing this is a directed graph. <br /><br />The result is a state machine that describes exactly how a user moves through and app. It is the picture that shows ALL of the steps we just outlined.<br /><br />Looking at this demo, <a href="http://alexdiliberto.com/emberconf-2014-demo/#/login">http://alexdiliberto.com/emberconf-2014-demo/#/login</a>, gives us a sense of flows. To “code the flow”, the general strategy is that you start by loading the session state. The you reset the controller (if needed). After, you delegate identification of where you’ll go next. Then you traverse the longest route so you know you visited every node. AND you can use <code>replaceWith</code> instead of <code>transitionTo</code> which Nathan thinks is awesome.<br /><br />A better strategy is to start with one place that defines flow and load the flow and flow state (explained as where the user is and what state they’re in). Then, you delegate the id of where to go to in the flow. After, you call back into the flow to progress. You start with a definition file with an edge list that dictates a from and a to path with conditions. The conditions are what needs to be checked, like ‘isAuthenticated’. Then you inject the flow logic. <code>beforeModel</code> looks up the current flow and identifies where the user should be and then you set the action. The action will include var Flow. Which sets state on the flow inside your routes so there’s no processing of that information in the route. Or further reading, check out ember-flows which is almost ready: <a href="https://github.com/nathanhammond/ember-flows">https://github.com/nathanhammond/ember-flows</a>.</p>
]]></description>
      </item>
    
      <item>
        <title>Being a Healthy Programmer</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-26-being-healthy-programmer/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-26-being-healthy-programmer/</guid>
        <pubDate>Wed, 26 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Health issues. Something we all face as developers but is not really talked about. Being a developer comes with some very specific health concerns that are different than what I’ve experienced in other fields. As I’ve learned to code over the past year, I’ve gotten a lot of advice and learned a lot of best practices. None of this advice, however, has included anything related to health! All of a sudden, I was coding full time and experiencing all these new issues and I had no idea why. We all experience similar physical pains of transitioning into a new industry but it's one of the things I think isn't discussed adequately enough to prevent it from happening. Additionally, a lot of the solutions cost money, which may be something you don't have a lot of if you are going through a career transition, coming out of a bootcamp, or just in the beginning of your job. In speaking to others, I found that most of the stuff I was experiencing are really common among developers. I sent out a request to understand what people experience and what some solutions are and here’s what I got.<br /><br /><br />Eyes. Obviously looking at a screen that is two feet away from your face all day has got to have some serious long term effect. Additionally, if you don’t have the right prescription then you’re also probably dealing with some sort of eye strain.<br /><br />Back. Posture and sitting up straight is really important. Long term affects can include needing physical therapy, surgery or just constant pain.<br /><br />Headaches. I know a few people (including myself) that have been experiencing afternoons headaches. There are LOTS of things that can affect headaches including hydration, food, eye strain, muscle aches, and more. <br /><br />Hydration. Turns out we all forget to stay hydrated during the day. Between coffee intake (which actually dehydrates you) and getting so focused on work that we forget to make sure we’re drinking, this is a major issue (that can, of course, relate to other things on this list like general draining, back pain, and headaches).<br /><br />Food. What?! You forgot to eat again? Me too! I can’t even count the number of times I’ve looked up from my computer and realized it’s 2pm and I haven’t had breakfast or lunch yet. Obviously, not a healthy practice.<br /><br />Sleep. “Just 5 more minute and I’ll be able to solve this issue and close my computer.” I’ve said this to a friend or my husband so many times. We tend to try to power through problems, drink coffee or energy drinks to push that last bit of code to production, or just accomplish a little more by working through the night which is solid, uninterrupted time. This is also related to something someone called “sleep creep” (which I love). Instead of working through the evening, some developers will get up at 4:30am, have some solid morning work time and then have to check out for a bit in the afternoon for a nap or to recharge. <br /><br />Weight Gain. We sit. A lot. Like all day. There are lots of ways exercising can affect other things on this list, but weight gain and circulation from sitting all day can definitely be harmful and a tough pattern to break out of.<br /><br />General draining. What we do involves a lot of brain power and a lot of thinking. It is easy to get exhausted and it’s easy to finish the day and just want to get the easiest thing for food and sit on the couch to unwind. <a href="http://seriouspony.com/blog/2013/7/24/your-app-makes-me-fat">This</a> isn’t so much a solution, but a good article that goes into this issue further.<br /><br />Hands. There’s lots of concern about repetitive strain and carpal tunnel syndrome. This is definitely an issue that, as a newbie I don’t think about much but as someone getting started in a longterm development career, I probably should.<br /><br />(Thanks to <a href="http://twitter.com/vicfriedman">@vicfriedman</a>, <a href="http://twitter.com/pamtaro">@pamtaro</a>, <a href="http://twitter.com/embryoconcepts">@embryoconcepts</a>, <a href="http://twitter.com/robyurkowski">@robyurkowski</a>, <a href="http://twitter.com/tundal45">@tundal45</a>, <a href="http://twitter.com/stevenhaddox">@stevenhaddox</a>, <a href="http://twitter.com/_ZPH">@_ZPH</a>, and <a href="http://twitter.com/peterbroderick">@peterbroderick</a> for your help and mentioning issues you’ve faced or are concerned about)<br /><br />So, how do we improve out situation? It’s great to offer solutions like a standing desk, complex raised screen setup, and other such tools but these tools are expensive! Here are some cheap ways we can solve these issues.<br /><br />“Pretend” standing desk. My first standing desk was literally 3 boxes stacked on top of one another to give me computer a little bit of height.<br /><br /><a href="http://pomodorotechnique.com/">Pomodoroing</a>. Following the pomorodo work style basically means that you do focused work for a specific amount of time (usually 25 minutes) and then you take a mandatory break for 5 minutes. There are lots of benefits to doing this but I find that it makes me more aware of myself. When I have a forced break, I make myself drink water, use the restroom during the break. I also find that when I break every 25 minutes, I’m way more aware of my posture and actively correcting my slouchiness. <br /><br /><a href="http://justgetflux.com/">F.lux</a>. This app helps alter your computer screen lighting based on the time of day. I wasn’t so much a believer until I started using it but the gradual deletion of blue light from your screen helps you mind get ready for sleep even if you’re still using your computer.<br /><br />Posture exercises. <a href="http://kettlebellsworkouts.com/kettlebell-clean-squat-and-press/">This</a> is one a friend passed along to me. I also recently saw an app that focuses on alerting you when you aren’t holding good posture.<br /><br />Exercise in general. I’m lumping standing versus sitting into this category as well. Exercise is always tricky to make time for but it is definitely an important part of being a developer (I reluctantly type as someone who really hates going to the gym). Put GYM in your calendar.<br /><br />And finally, there’s the <a href="http://healthyprog.com/">Healthy Programmer </a>book which I haven’t read at all, but I’d bet it’s pretty informative.<br /><br />I’ll be honest, I’m not the best at following all of these. I haven’t found good boxes to make a standing desk, I only successfully pomodoro’ed once in the past 3 weeks, but being more aware of these issues motivates me to make sure I’m establishing best practices for my health. And of course I’m hoping in the near future to be able to purchase the things I need to make my home office and work situation even better (ie- the chair I use is like the worst chair for programming EVER).<br /><br />Got more issues, suggestions, and cheap alternatives? Leave them in comments below.</p>
]]></description>
      </item>
    
      <item>
        <title>Ember- An Intro</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-23-ember-intro/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-23-ember-intro/</guid>
        <pubDate>Sun, 23 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I’ve recently started learning Ember. The process of learning ember has been really interesting so far, but one issue I’ve found is a lack of newbie-centric articles since the language is so new. Ember is also my first JavaScript language which is a whole other thing. I have found learning Ember, however, not as difficult as I imagined. Maybe because it feels so rails-esque? As a warning… I hope all of this information is correct, but, as I’m still very new to this, I’m not completely sure. <br /><br />Ember has similar conventions to rails like the idea of MVC and way to DRY out your code. I’ve found certain things difficult and other things just make sense which is nice. Ember has models and controllers. It has views as well but these views are known as templates.  So far, I really like the template piece as compared to views. I find them easy to follow and easy to create. Templates are created using <a href="http://handlebarsjs.com/">handlebars</a> which as also compatible with <a href="http://mustache.github.io/">mustache</a>. <br /><br />Here are some components of <a href="http://emberjs.com/">Ember</a>. Ember is comprised of es6 modules. The modules are a way of DRYing out code. Basically, these es6 modules can be used in other parts of the application so instead of having to just copy and paste code, you can just pull in the es6 module. There are also actions- Actions are events that trigger associated methods in the controller. They are always stored in an actions hash. Computed properties - A computed property mimics the behavior of a property and treats the templates variables as a value but it correlates to a function in your es6 controller. A function – a function can return an array so you can define a property to connect to a specific point in the array which makes it a nice way of filtering an array. For the property: Property (code that connects) to what the function depends on in the controller… which is defined at the top of the page (ie- Ember.ArrayController)<br /><br />Models: The model is still used as the ORM for the database. The es6 module defines the attributes of the model and what type they are.<br /><br />There are also routes, which are different from routes.rb.  Each of the model pieces also have a routes part. The routes allow us to set different states. Different actions are available to the user based on what state the application is in. Defining those states, also allows us to determine what actions are available to us in the state and then make those actions happen. Separate from this, there is a router which defines the routes (paths) for the app and a routes.rb which define the rails paths.<br /><br />One issue I’m currently having is determining what is pure ember versus what is a piece of the specific structure I’m using, which is <a href="https://github.com/dockyard/ember-appkit-rails">Ember-appkit-rails</a>. The most confusing piece of this are the controllers, models, and other components that are all held in the same directory. So, for example, when I’m working on creating a controller, I have to determine if it’s an es6 controller or a .rb controller… same thing with models.<br /><br />Controllers. There are two types of controllers… an object controller or an array controller. Object controllers deal with a single object, array controllers deal with multiple objects in a collection.<br /><br />Templates are the views in Ember. In a template, {{outlet }} tells the template where to render the code.<br /><br />Finally, getting a little into additional ember pieces (this is the part I feel I still need to learn the most about), <a href="https://github.com/emberjs/data">Ember-data</a> is a library that lets you retrieve records from the server and hold them in the store, update them in the browser and then save them back to the server.<br /><br />Here are a bunch more links for learning:<br /><a href="http://emberwatch.com/">EmberWatch</a><br /><a href="http://www.youtube.com/watch?v=PdqbG71Dr84">Awesome intro talk on Ember for Rails devs</a><br /><a href="http://frontside.io/blog/2014/02/24/ember-and-the-future-of-the-web.html">Great article on Ember</a><br /><a href="http://emberjs.com/guides/">Ember docs</a><br /><a href="http://iamstef.net/ember-app-kit/">Ember appkit</a><br /><br />More Ember posts to come!<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 3/15 - 3/21</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-22-interesting-reads-315-321/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-22-interesting-reads-315-321/</guid>
        <pubDate>Sat, 22 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A fairly diverse set of reads this week from agile development, to being a better programmer, to some cooking related things. Lots of good info in these, mostly short, posts and articles.<br /><br />Enjoy!<br /><br /><a href="http://mikehadlow.blogspot.co.uk/2014/03/coconut-headphones-why-agile-has-failed.html">Why Agile is failing</a><br /><br /><a href="http://www.drdobbs.com/architecture-and-design/the-agile-holocracy/240166629">A great read on holocracy</a>. One of the highlights for me, &quot;Dysfunction happens any time somebody can't do something because they need permission, or won't do something because they're afraid of some repercussion.&quot;<br /><br /><a href="http://www.drdobbs.com/architecture-and-design/the-corruption-of-agile/240166698">The corruption of agile</a><br /><br /><a href="http://www.nicholascloud.com/2014/03/how-to-be-a-sane-programmer/">&quot;Don't burn yourself out to be a better programmer&quot;</a><br /><br /><a href="http://www.fastcocreate.com/3027589/cataloging-creativity-ferran-adria-showcases-7-years-of-culinary-art-science?partner=newsletter">7 years of culinary science</a><br /><br /><a href="http://jangosteve.com/post/380926251/no-one-knows-what-theyre-doing">No one knows what they're doing.</a> Favorite quote: &quot;The good news is that this makes you very not dangerous. The bad news is that it also makes you feel dumb and helpless a lot of the time.&quot;<br /><br /><a href="https://speakerdeck.com/sarahmei/unpacking-technical-decisions-mountain-west-ruby-conf-2014">Making technical decisions</a>. Really interesting talk by Sarah Mei.<br /><br /><a href="https://speakerdeck.com/skmetz/all-the-little-things-rubyonales">Sandi Metz's most recent talk slides</a>. Can't wait to see the video!<br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>So Many Random Learnings</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-18-so-many-random-learnings/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-18-so-many-random-learnings/</guid>
        <pubDate>Tue, 18 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I love learning and in the past few weeks, I've learned so much!! In lieu of a more organized post on this stuff, here’s a random smattering of what I’ve learned the last few weeks.<br /><br /><code>Ls –lM</code> lists everything in list form<br /><code>Git rebase –i sha</code> is what you use in order to squash commits<br /><br /><code>Git rebase master</code>… I’m still learning the process and exactly how to troubleshoot this but it seems standard in worksflows that require pull requests and it’s pretty interesting to solve merge conflicts.<br /><br />Debugging (with capybara): insert a <code>save_and_open_page</code> to see what page/path opens<br /><br />Alfred workflows are amazing. I’m trying to train myself to use my mouse less. My wonderful mentor suggested that instead of going cold turkey on the mouse, I should start by getting good at just a few things. So, I’m starting with Alfred workflows and trying to get better at not using my mouse within my text editor (sublime).<br /><br />Alfred workflows that I have set up include spotify, dash, and being able to search for any file or folder on my computer. I’ve got the git workflow partially set up.<br /><br />In Sublime text, one of the most useful things I’ve learned recently is <code>CMD + . </code>will switch back and forth between the test file and file being tested. CMD T allows you to type to open a file. Just to name a few.<br />Option and highlight lets you highlight the first letter of each line<br /><br /><br /><code>Git commit</code> (without –m, etc.) will open your text editor so you can do the commit message there, save it, close it and it’ll bring you back to the command line and finish the commit<br /><code>Git checkout – </code>brings you back to the last branch you were on<br /><code>Git rebase –i HEAD ~1</code> rolls back 1 commit (~2 rolls back 2 commits)<br /><br />From the command line putting <code>touch </code>and then the path with the filename at the end will create that file<br /><br />When squashing commits (which means making multiple commits into one commit), you always ‘s’ (squash) the second one<br /><br /><a href="https://github.com/preston/railroady">Gem railroady</a> produces a UML diagram of your code structure<br /><br />Kill process… somehow I created a connection with a server and then I created a second connection with a server and then couldn’t get one of those connections to close! <br /><code>ps aux | grep &lt;thing you’re looking for, in this case thin&gt; </code>finds the process so you can see if it’s running (I’ve since used this <code>ps aux | grep ruby</code> and <code> ps aux | grep puma</code>)<br />Then <code>kill -9 prodID</code> (number all the way to the left) kills it. Alternatively, you can also kill it by doing <code>killall -9 thin</code> (or whatever you’re trying to kill)<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 3/8 - 3/14</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-16-interesting-reads-38-314/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-16-interesting-reads-38-314/</guid>
        <pubDate>Sun, 16 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>First I have to read all the things I bookmarked for the week, then I can make the post of which of those things were interesting. Here's the list for this past week. Not too much actually, but what's here are some pretty short posts that are quite interesting.<br /><br />Enjoy!<br /><br /><br />This week, I've been getting up close and personal with pivotal, learning it's tricks and how to better write user stories for the current build. <a href="http://thunderboltlabs.com/blog/2013/03/11/conventions-are-a-silver-thread/">Here's a great piece</a> from a little while ago about some good guiding principles.<br /><br /><a href="http://www.pivotaltracker.com/community/tracker-blog/bugs-chores-estimate-estimate">Using Pivotal</a> for setting time estimates on chores and bugs... or not<br /><br />Some <a href="http://engineering.coachup.com/visualizing-rails-schemas-railroady-gem/?utm_source=rubyweekly&amp;utm_medium=email">interesting info</a> on RailRoady, a cool visualization gem<br /><br />I've been trying to learn more about all the words mentioned in <a href="http://brandonhilkert.com/blog/why-i-wrote-the-sucker-punch-gem/?utm_source=rubyweekly&amp;utm_medium=email">this article</a> (background jobs, multi-threaded, etc.). Chris mentioned Sucker Punch to me a few weeks ago. I haven't used it yet, but this post gives way more info about it which is nice.</p>
]]></description>
      </item>
    
      <item>
        <title>Learning to Code is NOT Easy</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-11-learning-to-code-is-not-easy/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-11-learning-to-code-is-not-easy/</guid>
        <pubDate>Tue, 11 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In the past few months, the necessity to learn to code has been everywhere. It seems as though everywhere you look, someone is telling you to learn to code and there are very few dissenting opinions. With this push to learn to code has come a proliferation of bootcamps and other “accessible” opportunities to become a developer without necessarily needing a background in computer science.<br /><br />But the idea of shoehorning people into a career and encouraging them by saying that learning is easy is a dangerous notion that hurts both individuals and the industry as a whole.<br /><br />Learning to code is not easy, it is however, achievable and there is a big difference between those two words. You can learn the basics and know how to code, but to actually be a good developer takes years of practice and dedication. It is a craft that you need to constantly work on and improve upon. You can see this through the numbers of books and podcasts and meetups and mentorship and tutorials available to those in the field at all levels. Good programmers know that there is always more to learn and always ways to grow. They put in time during work and after work to continue to work to master their craft… and they love it.<br /><br />Just like anything else, it takes hard work and dedication. You can learn to code in a short period of time, but it definitely doesn’t just happen. Oftentimes, people ask me how I learned so quickly (more often the question goes “Is it really that easy that you just started teaching yourself and were quickly coding and looking for a job?”) My answer is that no, it isn’t easy, but it is doable and in order to achieve what I did, I made as much time as possible. I go to meetups most nights of the week, code every day, and sacrificed other things so that I could make that time for myself. And to be honest, the thing I love most about coding is that it is constantly challenging and that there is always more to learn. For me, it’s not just the cool thing to do right now, and it’s not an easy path to making the big bucks. If you’re not passionate and you don’t do it for fun, you’re going to hate coding as a career.<br /><br />There is a fine line between false advertising and being afraid you’ll discourage people from joining the industry, but we, collectively, are doing the industry a disservice by advertising that learning to code and becoming a developer is easy.<br /><br />Here are some great articles I found along the way:<br /><a href="https://www.codefellows.org/blogs/this-is-why-learning-rails-is-hard">https://www.codefellows.org/blogs/this-is-why-learning-rails-is-hard</a><br /><a href="http://happybearsoftware.com/how-to-survive-your-first-year-as-a-programmer.html">http://happybearsoftware.com/how-to-survive-your-first-year-as-a-programmer.html</a><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Final Gem Post- The Action Class</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-09-final-gem-post-action-class/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-09-final-gem-post-action-class/</guid>
        <pubDate>Sun, 09 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This is a little out of order since it's been a while since my last post on the gem I helped build, but I wanted to get it out there. Feel free to refresh your memory by re-reading these posts <a href="http://allisonsherenmcmillan.blogspot.com/2014/01/contributing-to-oss.html" target="_blank">1</a>, <a href="http://allisonsherenmcmillan.blogspot.com/2014/01/storing-cookies.html" target="_blank">2</a>, and <a href="http://allisonsherenmcmillan.blogspot.com/2014/02/getting-information.html" target="_blank">3</a>. The action class is a small, fairly simple class that is mostly used to just outline all of the attributes in an action item and then also distinguished a few method for specific attributes which are more common or may be requested more often.<br /><br />The whole class looks like this:<br /><pre>class Action<br /><br />  attr_reader :attributes<br /><br />  def initialize(params) <br />    @attributes = params<br />  end<br /><br />  def title<br />    @title = attributes['title']<br />  end<br /><br />  def description<br />    @description = attributes['description']<br />  end<br /><br />  def reference_name<br />    @reference_name = attributes['reference_name']<br />  end<br /><br />  def action_key<br />    @action_key = attributes['action_key']<br />  end<br />end<br /></pre><br />The initialize method sets up the class by just creating a hash that is the attributes hash and then the rest of the methods are just pulling out specific pieces from that hash. I’m not sure if by the end of this project, this class will be separate, but to me, it felt like it was doing different stuff than the ActionFetch class so I chose to separate it out.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 3/1 - 3/7</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-08-interesting-reads-31-37/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-08-interesting-reads-31-37/</guid>
        <pubDate>Sat, 08 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A day late is better than a week late. Here are the interesting reads (and watches) from this past week.<br /><br />Currently, I've been working on a bunch of analytics-related queries and tools. I came across <a href="http://www.youtube.com/watch?v=czes-oa0yik">this video</a> about measuring which was really useful. <br /><br />ember, ember, ember!!: <a href="http://www.confreaks.com/videos/2597-lonestarruby2013-ember-on-rails-realtalk">http://www.confreaks.com/videos/2597-lonestarruby2013-ember-on-rails-realtalk</a> <br /><br />I rewatched this amazing Ben Orenstein talk this past week, <a href="http://www.youtube.com/watch?v=DC-pQPq0acs">refactoring from good to great</a>. I had watched it a few months ago and a lot of the concepts went over my head so it's fun to see how much I've been learning! <br /><br />Related to the questions I have as a professional programmer, some days are good and some days are bad. <a href="http://happybearsoftware.com/how-to-survive-your-first-year-as-a-programmer.html">This was a great article</a> that helped me realize everyone goes through the same roller coaster. <br /><br /><a href="http://www.lauradhamilton.com/anthropomorphizing-programming-languages">For Fun</a>. <br /><br /><a href="http://www.daveperrett.com/articles/2010/12/07/comp-sci-101-big-o-notation/?utm_content=buffer0c471&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer">Beefing up those Comp Sci chops</a> <br /><br /><a href="http://threeifbywhiskey.github.io/2014/03/05/non-alphanumeric-ruby-for-fun-and-not-much-else/?utm_source=rubyweekly&utm_medium=email">For anyone who's been asked to FizzBuzz</a> <br /><br /><a href="http://www.paulgraham.com/makersschedule.html">The Maker's Schedule</a>. An old article but still relevant.</p>
]]></description>
      </item>
    
      <item>
        <title>New Questions as a Professional Programmer</title>
        <link>https://www.daydreamsinruby.com/blog/2014-03-04-new-questions-as-professional-programmer/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-03-04-new-questions-as-professional-programmer/</guid>
        <pubDate>Tue, 04 Mar 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>There are a few steps, I think, in my early days of learning to code progression, where I feel as if leaps were taken. The first is when you start coding. There’s a lot to learn just about the basics at the beginning. The second is when you start tutorials… going though each of the steps, really processing everything and beginning to figure out what to do when you encounter errors and issues. The third happens when you move from tutorials to building your own thing. You’re no longer following directions. You are in charge of scoping out features, thinking about architecture, and solving errors and issues that others may not have encountered exactly. The last (so far) is when you start coding professionally (and getting paid for it). This involves learning new workflows and processes, integrating into a culture, and learning new languages and technologies to name just a few. Through each of these stages, I’ve developed a new set of questions and new things to worry/stress about. I think these questions also change depending on what phase you’re in. Over the last few weeks of coding professionally on a small development team, here are some interesting things I’m <strike>thinking</strike> worrying about on a regular basis.<br /><br />1. Learning on the job is tough. The specific project I am working on is mostly written in Ember. It’s been a fascinating language to learn (especially since I previously didn’t have much of a background in javascript at all) and I’m definitely learning much faster since I’m building components and working in the language while learning it. But it is tough to learn amidst deadlines and due dates. How much do you need to know? Am I building things correctly in this new language?<br /><br />2. How much time should I spend on something? This is a tough question. I want to learn and make sure I’m implementing the best solution but at the same time, how long do I take on something before I either move on, ask for help, or just put the best solution I know in place?<br /><br />3. What is the normal “getting stuck” level? I feel like I get stuck at least once a day. Whether it’s something confusing on git, or a test that is failing, or some functionality I’m putting in place, every day I spent at least an hour trying to figure out how to move forward. Is this normal? Is it not? How much time do I spend “stuck” before I ping someone?<br /><br />4. This is related to the question above but… when am I learning and when am I spinning my wheels? There’s nothing I hate more than pinging someone for help only to learn that the solution is super small and silly. I know this happens to everyone, but it makes me feel like I SHOULD have seen the solution and not bothered someone else. But then, there are times where I am reading EVERYTHING out there and googling and researching and breaking a problem into pieces and I wonder, am I spending too much time on this?<br /><br />5. How much of the process should you follow? There are lots of process “things” in the programming world. Whether it’s test first, write code in the red, green, refactor order, spend time refactoring in general, pair, do code reviews, etc. I love all of these things, but I find myself weighing what process I should follow and how strict I should be with the process, knowing that there are deadlines and things that need to get done. I know it makes sense to do something the long way and then refactor, especially since as a newer developer I’ll learn more that way, but is it always worth taking that time? Sometimes worth it? How long should I spend on writing code vs. refactoring it?<br /><br />This first position is really fantastic. I feel lucky because in most initial programming positions, developers find themselves doing one type of job or spending months on the ramp up. I was thrown into the deep end a bit from the getgo (which I almost prefer) and I get to do different things every day… rails, ruby, database stuff, javascript, etc. It’s great… wonderful and challenging but also stressful. I look back at the last four weeks and think of the crazy amount of information I have learned. It’s so different than self-teaching and working on projects that I created or things from scratch. And yet, it raises a whole new set of questions in my mind. I imagine that other developers feel the same way… especially in their first position.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads Double-Wammy edition</title>
        <link>https://www.daydreamsinruby.com/blog/2014-02-28-interesting-reads-double-wammy-edition/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-02-28-interesting-reads-double-wammy-edition/</guid>
        <pubDate>Fri, 28 Feb 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I know, last week you were so disappointed when you didn't see the weekly interesting reads posted. Truth is, I had a list of them, but hadn't had a chance to read any of them yet. Hopefully this week's double-wammy list makes up for it.<br /><br />Enjoy!<br /><br /><a href="http://rubyrogues.com/144-rr-passion/">RR last week</a> was on passion and I think had some very interesting points.<br /><br />As I've mentioned a few times, I'm doing A LOT of Ember now. It's actually really interesting and pretty enjoyable. <a href="http://frontside.io/blog/2014/02/24/ember-and-the-future-of-the-web.html">This is a great post</a> about ember that explains reasons for using it clearly and goes into the technical components as well.<br /><br />Reading articles <a href="http://spin.atomicobject.com/2014/02/24/dumb-development-mistake-checklist/">like this</a> makes me feel better when I make these same mistakes.<br /><br />There are lots of articles about saying no, but I think <a href="https://medium.com/1000-stories/4f100a9d8099">this one</a> is actually worth a read.<br /><br />Software development <a href="http://randycoulman.com//blog/2014/02/18/software-development-reading-list/?utm_source=dlvr.it&utm_medium=twitter">reading list</a>.<br /><br />Finally, <a href="http://liz.svbtle.com/so-you-think-you-want-to-be-a-web-developer">So you want to be a software dev, but do you?</a><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 2/7 - 2/14</title>
        <link>https://www.daydreamsinruby.com/blog/2014-02-15-interesting-reads-27-214/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-02-15-interesting-reads-27-214/</guid>
        <pubDate>Sat, 15 Feb 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Yes yes yes, I owe the world a more interesting blog post than just interesting reads, and I've got a bunch in the works! In the future, you can look forward to the last post on the gem, a post on ember, a random learnings post, probably a post about my first few weeks as a professional programmer (which have been crazy and amazing and exciting and scary and pretty much all the emotions) but for now, I have to just give you the interesting reads for the week. Hopefully you find them interesting as well.<br /><br />Enjoy!<br /><br /><br /><a href="http://learn.adafruit.com/neopixel-tiara">Yes! This! Tech and Tiaras</a> <br /><br />Software Developers <a href="http://tommorris.org/posts/8786">Changing Lightbulbs</a><br /><br />Thoughts on <a href="https://netguru.co/blog/posts/gone-but-not-forgotten-delivering-your-best-when-working-remotely">Working Remotely</a> <br /><br />I don't agree with all of this but there are some really interesting points made about how <a href="https://medium.com/tech-talk/1982aab8aa8e">everyone shouldn't learn to code</a>.<br /><br /><a href="http://codemanship.co.uk/parlezuml/blog/?postid=1208">A Year of Code</a>. Similar to the piece above.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 2/1 - 2/7</title>
        <link>https://www.daydreamsinruby.com/blog/2014-02-07-interesting-reads-21-27/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-02-07-interesting-reads-21-27/</guid>
        <pubDate>Fri, 07 Feb 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Well, it certainly has been a busy week for me. Fortunately, I've also come across some really interesting articles and things to read/watch. AND I've actually read all of the articles this week (except for the last one... it's a video I haven't had a chance to fully check out yet). There's a variety of stuff in here this week so ...<br /><br />Enjoy!<br /><br /><a href="http://www.dailyworth.com/posts/2427-don-t-ever-say-you-ll-work-for-shoes-again" target="_blank">Will NOT Work for shoes!</a> I love shoes, but this is a great article about women and their workplace value.<br /><br />If you've had a rough week or are a newer developer, <a href="https://the-pastry-box-project.net/dave-rupert/2014-February-3" target="_blank">this short post</a> is a great pick-me-up.<br /><br />Personally, I'm not very good at celebrating small wins. That, coupled with the fact that I'm getting used to a &quot;dev&quot; to do list, as opposed to a non-dev to do list, makes it hard sometimes to feel like I'm accomplishing greatness. <a href="https://the-pastry-box-project.net/abi-jones/2014-january-30" target="_blank">This post</a> talks about that and some great ways to reflect regularly on your work.<br /><br />Okay, I lied!! I haven't had a chance to read <a href="http://www.raymondcamden.com/index.cfm/2014/2/2/Examples-of-the-Marvel-API" target="_blank">this article</a> about the amazing new Marvel API, but I've gotta find time soon!<br /><br />On a slightly dryer note... <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input" target="_blank">here's</a> some great HTML5 documentation.<br /><br />In my new position, I'm learning Javascript... lots of Javascript, but Ember.js in particular. Since I'm new to it, I thought <a href="http://readwrite.com/2014/02/06/angular-backbone-ember-best-javascript-framework-for-you#awesm=~ov9ji6OKKpZrA5" target="_blank">this article</a> gave some interesting, basic pointers about the differences between some of the more popular JS languages.<br /><br /><a href="http://aaronkromer.com/blog/2014-02-06-open-classes-and-monkey-patching-at-retroruby.html" target="_blank">A great post</a> from Aaron based on a question asked at RetroRuby's Newbie track last week!<br /><br />And to close out this week, <a href="http://vimeo.com/61044807" target="_blank">here's a video</a> I haven't watched yet about Postgres and things you haven't found.</p>
]]></description>
      </item>
    
      <item>
        <title>Getting the Information</title>
        <link>https://www.daydreamsinruby.com/blog/2014-02-03-getting-information/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-02-03-getting-information/</guid>
        <pubDate>Mon, 03 Feb 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>In order to actually get the information on the action campaigns that I needed, I needed to use nokogiri to parse the information, create new actions and clients, and then map that information. I started with this code:<br /><pre># def self.fetch<br />   #Nokogiri::XML(SalsaLabs::Client.new.request_data('/api/getObjects.sjs', object: 'Action')).css('item').map do |attributes|<br />   #SalsaLabs::Action.new({title: atributes.css('Title').text)})<br />   #end<br />#end<br /></pre>And then used that code to break it into smaller, more transparent methods. I broke the code into five separate methods. First, I created a new class for it called ActionFetch. Then I initialized (or set up) that class setting an instance variable for <code> api_client</code><br /><pre>def initialize(api_client)<br />  @api_client = api_client<br />end<br /></pre>Then, starting from the meat of the class, I created this method:<br /><pre>def data_request<br />  return @data if @data <br />  body = @api_client.fetch('/api/getObjects.sjs', object: 'Action') <br />  doc = Nokogiri::XML(body) <br />  @data = doc.css('item') <br />  @data<br />end<br /></pre>The data request method starts by saying if there is anything already in the @data instance variable, then just return, if not, then go through the rest of the method’s steps. This is also called Memoizing which basically means storing a value for future use so that you don’t have to run the call over again which saves you time.<br /><br />The next line says that take the api client (which is the actual http request, set up with faraday, using credentials, etc., set up in a different api client class) and get the stuff that is located at that api endpoint with the params of the object which is named Action. Then, use nokogiri to parse the information that is in the body string (set above). Finally, look at the doc (which is the result of the nokogiri parsing and is now an xml doc) and use the css selector to find all the items. Finally, return the value.<br /><br />Then, I took those results and fed them into the <code>get_results</code> method.<br /><pre>def get_results<br />  data_request.map do |attribute_set| <br />    new_action(extract_attributes(attribute_set)) <br />  end<br />end<br /></pre>This method takes the results from data_request and for each one (each attribute set), it extracts them into a hash and then makes each of them a new action (it wraps each of the attributes sets in an action class). It does this by using the <code>extract_attributes</code> method which looks like this:<br /><pre>def extract_attributes(action_data)<br />  action_data.children.inject({}) do |memo, node|<br />    memo[node.name.downcase] = node.text <br />    memo<br />  end<br />end<br /></pre>and takes each of the item nodes (action_data is the Nokogiri item tag) and makes them into a hash. And finally, wrapping it in an action class is done by using the <code>new_action</code> method which looks like this:<br /><pre>def new_action(params)<br />  SalsaLabs::Action.new(params)<br />end<br /></pre>It just stick each of the params into an object called action which gives the attributes pretty names. <br />Phew!<br /><br />Okay, so then, what do I mean by pretty names? Well, in order to see that, I look at the Action class which I’ll cover in the next post.</p>
]]></description>
      </item>
    
      <item>
        <title>RetroRuby4 What&#39;s Next? Presentation</title>
        <link>https://www.daydreamsinruby.com/blog/2014-02-02-retroruby4-whats-next-presentation/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-02-02-retroruby4-whats-next-presentation/</guid>
        <pubDate>Sun, 02 Feb 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Here are my slides from retro yesterday! Enjoy!!<br /><br /><script async="" class="speakerdeck-embed" data-id="29567c506e49013137b56ac310dcfa1f" data-ratio="1.2994923857868" src="//speakerdeck.com/assets/embed.js"></script></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 1/25-2/31</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-31-interesting-reads-125-231/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-31-interesting-reads-125-231/</guid>
        <pubDate>Fri, 31 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Another busy week but I've got some good stuff today. For better or worse, the reads this week are mostly NOT code related, but they are fun.<br /><br />Enjoy!<br /><br /><a href="http://www.thisismarvelous.com/i/52-National-Flags-Made-From-Each-Countrys-Traditional-Foods" target="_blank">Delicious Flags</a><br /><br /><a href="http://regexcrossword.com/" target="_blank">Regex Crossword</a>!! I haven't done this yet, but I totally want to!<br /><br /><a href="http://www.tabletmag.com/jewish-life-and-religion/159313/love-my-jewish-hair" target="_blank">Jewish Hair</a> - Learning to love it<br /><br /><a href="http://www.youtube.com/watch?v=DYu_bGbZiiQ#t=213" target="_blank">Conference calls in real life video</a></p>
]]></description>
      </item>
    
      <item>
        <title>Storing Cookies</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-29-storing-cookies/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-29-storing-cookies/</guid>
        <pubDate>Wed, 29 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Once we established the connection with the website and authenticated, we then needed to take the cookie that we got back and save it so that we could call it in the future. I did a bunch of research and looked at a bunch of different options. Quickly, I narrowed it down to a few possibilities. I was considering HTTParty which I had heard good things about and seemed to have good reviews from people about being easy to use and implement. The other option was Faraday which also seems to be pretty popular and was super easy to set up and get running, at least to establish the connection. I also researched an option that included using curl commands in order to save and then reaccess the cookie. There were a few faraday middleware gems that I experimented with but in the end didn’t need to use them. I ended up with this:<br /><br /><code>@authentication_cookie = response.env[:response_headers][&quot;set-cookie&quot;] </code><br /><br />This line finds the header “set-cookie” in the response and sets it to the instance variable.<br />Then, I wrote this<br /><pre>response = conn.get do |req|<br />  req.headers['cookie'] = authentication_cookie<br />  req.url endpoint, params <br />end <br /><br />return response.body<br /></pre><br /><br />This code makes another request from the same connection established earlier and sets the header cookies to authentication cookie. It then tells the connection to use a specific endpoint (using the API, based on what information you would like) and adds some parameters. This sets the response to whatever is returned from the api and then <code>response.body</code> takes that response and prints out the content of the response but without the headers or other junk we don’t really want to see.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 1/18 - 1/24</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-25-interesting-reads-118-124/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-25-interesting-reads-118-124/</guid>
        <pubDate>Sat, 25 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This week I started working with <a href="http://www.purpose.com/" target="_blank">Purpose</a>! Working with them this past week has been really interesting and really wonderful... BUT it means that I've currently got close to 80 tabs open covering things from &quot;new stuff to learn&quot; to &quot;things to read&quot; to &quot;things to watch&quot;. So... I have definitely not had a chance to read everything on this list yet, but they all seem like excellent pieces for the week.<div><br /></div><div>Enjoy!</div><div><br /></div><div><a href="http://www.youtube.com/watch?v=l9JXH7JPjR4" target="_blank">Tips on giving good conference talks</a></div><div><br /></div><div><a href="http://37signals.com/svn/posts/3706-everyone-does-everything" target="_blank">Everyone does everything</a></div><div><br /></div><div><a href="http://chadfowler.com/blog/2014/01/19/empathy/" target="_blank">Your most important skill - Empathy</a></div><div><br /></div><div><a href="http://www.infoq.com/presentations/software-development-everyone" target="_blank">Software development for everyone</a></div><div><br /></div><div><a href="https://thunderboltlabs.com/blog/2013/11/19/efficiency-with-sublime-text-and-ruby/" target="_blank">Efficiency with Sublime Text and Ruby</a></div><div><br /></div><div><a href="http://rubyconferences.org/" target="_blank">Ruby Conferences!</a> (not an article but a new awesome site)</div><div><br /></div><div><a href="http://www.gigamonkeys.com/code-reading/" target="_blank">Code is not literature</a></div></p>
]]></description>
      </item>
    
      <item>
        <title>Contributing to OSS</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-20-contributing-to-oss/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-20-contributing-to-oss/</guid>
        <pubDate>Mon, 20 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>So, if I haven’t said it enough, getting involved in the community is so important. I’ve recently been looking for a job. The process has actually been more difficult than I anticipated. A lot of people will tell you it’s incredibly easy to get a job in this field. I’d say that while there are positions available in the field, it is still challenging to convince a company, especially as a newer developer, that you are worth it and that you’ll totally blow them away… if they just give you the chance. Additionally, I want to make sure that where I end up is the right fit. I feel fortunate to have years of professional experience that have allowed me to really know myself as a professional and give me a better ability to determine if a company is a good fit for me or not.<br /><br />While looking for a permanent position, i’ve been looking for great, challenging projects that continue to expand my skillset and make sure I’m learning as much as possible while I have the time. A few weeks ago, I was approached by a friend at a meetup who had a little too much on his plate and felt he had some work that would provide me with some good experience. Because he’s a friend, he knows my level and therefore I’m very comfortable asking questions. He also thought this project would be a good one because he could provide support, the gem needed to be built but isn’t super so complex, and he felt it could provide me with a good opportunity to contribute to OSS… something that is on my goals for this time period and definitely something I’ve been looking to do. Conversely, as a solo freelancer, he hasn’t had the opportunity to often pair or to take part in code reviews, a skill he wants to develop. We saw this as a win-win situation and there I was... working on a ruby gem. The gem posts are a little post-dated because I wrote them as I was working on the gem but didn't have a chance to post everything!!! So, I'll try to get these posts up quickly.<br /><br />The gem has some simple functionality. It is essentially a way to work with a company’s API and download additional information about email blast campaigns beyond what they currently provide. The gem involves writing tests, utilizing an http client, and working with the API. <br /><br />I have to admit that a large portion of me is/was terrified. I’m building something new. I’m actually getting paid to do it. AND it’s then going on the interwebs… as a gem… and a part of OSS… for other people to use!!! But fortunately, I’m not terrified enough to shy away from the opportunity. <br /><br />Geoff had gotten me started by giving me access to a private repo, creating the gem structure, and providing a few details and resources he had thought through in regards to the gem. I started by creating the spec file and thinking through what this gem would do in order to write some tests that could be used essentially as an outline. I put all these tests as pending, but I was able to scope out the major functionalities by thinking about what the output would be and what we would need to make sure is working.<br /><br />I then started on the actual code. I started by taking the tests and looking at what classes those would create. Classes should each have a single responsibility so I looked at each action that needed to happen and thought about a class structure based on that. My intention is to write the code all in the same file and then do some refactoring to break it up. The next step was looking at the http clients. There is an authentication component to this gem and once the authentication happens, a cookie is received and that cookie needs to be stored in order for it to be used in future actions.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 1/11-1/17</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-17-interesting-reads-111-117/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-17-interesting-reads-111-117/</guid>
        <pubDate>Fri, 17 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Unlike last week, there was a bunch of good stuff to read this week! I've been thinking about conference RFPs and potentially trying to speak more so a lot of the links below feature aspects of speaking.<br /><br /><br /><a href="http://www.buzzfeed.com/drewphilp/why-i-bought-a-house-in-detroit-for-500?bffb&amp;utm_content=bufferc84bb&amp;utm_medium=social&amp;utm_source=twitter.com&amp;utm_campaign=buffer">A lengthy but good read about houses in Detroit</a>, totally unrelated to tech and coding but important things to think about. <br /><br /><a href="http://www.hanselman.com/blog/ACoderAProgrammerAHackerADeveloperAndAComputerScientistWalkIntoAVennDiagram.aspx">A great Venn Diagram about being a developer, coder, hacker, etc. and the differences between them all</a> <br /><br /><a href="http://zachholman.com/posts/github-speaking-culture/">The Github Speaking Culture</a> <br /><br /><a href="http://readwrite.com/2014/01/13/github-women-passion-projects#awesm=~osS7HBjvyEgrh8">Encouraging more female speakers</a> through Passion Projects (an initiative I think sounds really cool).<br /><br /><a href="http://speaking.io/">A better resource for individuals who want to speak</a>. <br /><br /><a href="http://www.infoq.com/interviews/neal-ford-technical-presentations">Advice on doing technical presentations</a> <br /><br /><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Bot Refactoring</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-13-bot-refactoring/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-13-bot-refactoring/</guid>
        <pubDate>Mon, 13 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>When something is built, it’s never fully done. A application without bugs doesn’t exists and once you release something into the world, there are always issues that come up and ways to make the code better. Releasing the bot into the irc channel brought to the surface a few issues that I’m working on. For example, the bot awards points not just to nicknames but to any word that comes after a number with a + or – symbol in front of it. I’ve also had to change a few regular expressions to make them more specific.<br /><br />One of the main things I started working on once the initial bot was out was refactoring. Refactoring is important. It’s a way of going back into your code, cleaning it up, making it easier to understand and more transparent. Refactoring also helps to DRY out code, meaning that you look at your code to see when and how you repeat yourself and take out that repetition. <br /><br />In the bot, there are two main places to refactor based on methods that are called often. For a majority of the functions, I provided an array of responses or gifs as a variable. I then called <code>m.reply variable.sample</code>. So instead of continuing to write this over and over again, I turned these actions into a method.<br /><br />The method looks like this:<br /><pre>def reply_random(m, list)<br />  m.reply list.sample<br />end <br /></pre>This is pretty easy to read but basically, the list is the array and so the method is to give a random reply based on the list given and replying with a random response from that list.<br /><br />This is what a corresponding function now looks like:<br /><pre>  on :message, /.<em>(coffee).</em>/i do |m|<br />    reply_random m, [<br />      &quot;http://wac.9ebf.edgecastcdn.net/809EBF/ec-origin.chicago.barstoolsports.com/files/2012/12/badcoffee.gif&quot;,<br />      &quot;http://thoughtcatalog.files.wordpress.com/2013/08/tumblr_ln3pef2aly1qaq98ro1_400.gif&quot;,<br />     &quot;http://25.media.tumblr.com/57acd60ebc217bc00169fd73b52be5a6/tumblr_mi5u4eeJZv1qcwyxho1_500.gif&quot;,<br />      &quot;https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSP8TfZHYrpS1Hz2jM_vdwOToNN949vYDPFZ74G3vw41r4rNH6k&quot;,<br />      &quot;COOOFFFEEEEE!&quot;,<br />    ]<br />  end<br /></pre><br />The second method I created to DRY out the code was the second most common functionality. This is where there is an array of response that are either replies or actions and instead of writing out the whole process (as explained in this post about <a href="http://allisonsherenmcmillan.blogspot.com/2013/12/look-what-my-bot-can-do-bot.html">bot functionality</a>) I created an action or reply response method, which operates similarly to the <code>reply_random</code> method above.<br /><br /><pre>def action_or_reply_response(m, list) <br />  list = list.sample    <br />    if list.first == :action     <br />      m.channel.action list.last <br />    else<br />      m.reply list.last  <br />    end <br />end<br /></pre><br />and again, with this change, this is what the code looks like:<br /><pre>  on :message, /.<em>morning.</em>/ do |m|<br />     action_or_reply_response m, [<br />      [:reply, &quot;Good morning to you too!&quot;],<br />      [:reply, &quot;it's a brand new day!&quot;],<br />      [:reply, &quot;I'm sleepy today&quot;],<br />      [:reply, &quot;http://gifrific.com/wp-content/uploads/2012/04/bunny-sleep-work.gif&quot;],<br />      [:action, &quot;yawns&quot;],<br />      [:action, &quot;makes coffee&quot;],<br />      [:action, &quot;<em>throws open all the windows</em> it's a glorious day today&quot;]<br />    ]<br />  end<br /></pre></p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads 1/4 - 1/10</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-10-interesting-reads-14-110/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-10-interesting-reads-14-110/</guid>
        <pubDate>Fri, 10 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Well, I have to be honest, there wasn't much out there this week. Maybe it's because everyone was focusing in their first full week back at work in a while but there just wasn't much that caught my eye. I do have two link though... not as much good reads as good resources.<br /><br />Enjoy!<br /><br /><a href="http://rwilcox.tumblr.com/post/72620660832/full-stack-rails-developer-resources">Full Stack Rails Developer Resources.</a> Lots of good resources that really helps you think about what &quot;full stack&quot; really means.<br /><br /><a href="http://www.emoji-cheat-sheet.com/">This is an emoji cheat sheet</a> because who doesn't need one of those handy.</p>
]]></description>
      </item>
    
      <item>
        <title>Cooking and Coding</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-06-cooking-and-coding/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-06-cooking-and-coding/</guid>
        <pubDate>Mon, 06 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br>I’ve been playing around with this post in my mind for a while. See, one of the things I’m truly passionate about is cooking. I love to cook and I love to bake… each requiring a slightly different mentality. For those who do either, you understand the differences.<br><br>Cooking is oftentimes about getting into the kitchen, opening up the fridge and throwing some things together. There is tweaking that goes on along the way. You might add some more salt, or usually in my case a dash of cumin. You might substitute one ingredient for another. Sometimes the concoction is great. Other times, you watch it sit in the fridge because it didn’t turn out quite right.<br><br>Baking is a little different. There is a preciseness to baking. You need to measure and create the product according to the instructions. In baking, there are very few places where you can or should deviate from the given recipe. For example, my high school chemistry paper was on the chemistry of cooking. Even simply adding ingredients in a different order will give your product a completely different texture or volume.<br><br>For me, baking is my calm, happy place. It’s what I do when my brain is in overdrive and I just need to pound some dough, get my hands dirty with flour or batter, or just focus on bringing each of the pieces together.<br><br>The more I code, the more I think of how my journey mirrors that of me learning how to cook and bake, and how different parts of the coding process are exactly like cooking versus baking.<br><br>When I began learning how to code, it was hard. It was difficult to motivate myself to do something I wasn’t comfortable with. It was difficult to wrap my brain around all the pieces. I always wanted to see a picture of the final product and know what the final result was supposed to be before getting started. Furthermore, I only followed recipes. I had no ideas what spices went together or when I could substitute one ingredient for another. I followed the recipe to a T and if I didn’t have a spice or an ingredient… I gave up on the recipe and searched for something else to cook. Cooking also took me longer to get through because I wasn’t familiar with the process. The first time I deboned a chicken piece or roasted a squash, I needed to read the instructions a few times because I felt lost at the initial direction.<br><br>Once I started to become confident about my cooking, I was able to get better much faster. I cooked a few times a week and I didn't dread it. Cooking more often made my knife skills better and my prep time shorter. Additionally, it made me more adventurous. I was no longer afraid about something not turning out exactly like it should. I substituted ingredients based on what was in the fridge and created meals from my mind and not necessarily straight from the cookbook.<br><br>I’m still not a master chef. I never will be. I hope to continue to flex my culinary creativity muscle as I cook more and learn more. Each time I add a new ingredient or a new recipe into my repertoire, it teaches me about flavor profiles that belong together and how I can mimic that with other ingredients. Just like with coding, I am still honing my ability to figure out when something is just right… the right balance of flavors and textures.<br><br>Every code involves some cooking, some sense of does it taste right? Does it look right? Does the texture look good? Is it pretty? And what do others have to say about how I could improve the recipe in the future?<br><br>Now for baking. As I mentioned before, baking is precise. You need to have a gut feeling about baking. Do you add a little more flour? What happens if you throw a pinch of nutmeg into the mix? Does this dough feel right? And if it doesn’t, what alteration should I make? It has taken me a while to develop my baking gut feelings. When you screw up baking, it’s often a bigger disaster than with cooking. It’s easier to cover up mistakes with spices and other ingredients when you cook but when you bake, sometimes you don’t know something went very wrong until you pull it out of the oven. Other times, you know something doesn’t feel right but you’re not sure what the best way to make it feel better is. And sometimes, the best thing to do is to just punch and knead it for a little while.<br><br>I imagine I’ll develop my baker’s sense for coding as the years progress and in writing this, it makes me feel like testing and practice test driven development relate more to the baking side of coding than the cooking side, highlighting it’s importance.<br><br>Regardless of whether you’re baking or cooking or coding, all get better with time and practice. All give you raw ingredients that you intelligently mix together to make something better. And all provide you with challenges, problems, and hopefully, wonderful solutions.<br><br />Now, go grab a snack and get back to coding.</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads From The Week 12/28 - 1/3</title>
        <link>https://www.daydreamsinruby.com/blog/2014-01-03-interesting-reads-from-week-1228-13/</link>
        <guid>https://www.daydreamsinruby.com/blog/2014-01-03-interesting-reads-from-week-1228-13/</guid>
        <pubDate>Fri, 03 Jan 2014 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Here are the reads from this week... I tried to actually note who I picked them up from and this week, they're not solely tech focused.<br /><br />Enjoy!<br /><br /><a href="http://www.ultrasaurus.com/2013/12/code-computer-science/">Code != Computer Science</a><br /><a href="http://jvns.ca/blog/2013/12/28/coding-strategies/">Coding Strategies</a> posted by <a href="https://twitter.com/avdi">Avdi</a> on Twitter<br /><a href="http://tribecafilm.com/features/10-films-that-passed-the-bechdel-test-2013">10 Films that Passed the Bechdel Test in 2013</a><br /><a href="http://blog.ninlabs.com/2013/01/programmer-interrupted/">Programmer Interrupted</a> posted by <a href="https://twitter.com/jwieringa">Jwieringa</a> on Twitter<br /><a href="http://www.npr.org/blogs/thesalt/2013/12/19/251628151/geeky-gamers-feast-upon-settlers-of-catan-cookbook">The Catan Cookbook</a></p>
]]></description>
      </item>
    
      <item>
        <title>Learning: More Tools To Keep You Moving Forward</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-30-learning-more-tools-to-keep-you-moving/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-30-learning-more-tools-to-keep-you-moving/</guid>
        <pubDate>Mon, 30 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>So, you’ve been working really hard. You are able to check everything below off the list…<br /><br /><br /><ul><li>Involved in the community</li><li>Setting goals</li><li>Doing something every day</li><li>Try ruby</li><li>Ruby in 100 minutes</li><li>Read Why’s poignant guide to Ruby</li><li>Learn Ruby the Hard Way</li><li>Ruby monk</li><li>Ruby Rogues (listened to at least a few)</li><li>Learn to program by Chris Pines</li></ul><br /><br />First off, if you were able to cross all those things off the list then seriously, great job!! You’re doing a lot, you’re working your booty off, and hopefully you’re feeling good about it. At this point, you should take a few minutes to take a look back at what you’ve accomplished. Think of everything you’ve learned and everything you didn’t know a few weeks ago. Smile about it, do a mini celebration, and get excited for the rest of your journey.<br /><br />Here’s the next step… read <a href="http://www.poodr.com/" target="_blank">Practical Object Oriented Programming in Ruby (POODR)</a> by <a href="https://twitter.com/sandimetz" target="_blank">Sandi Metz</a>. It’s amazing and you’ll want to reread it and keep it to refer to in the future. And start watching talks for past conferences. <a href="http://www.confreaks.com/" target="_blank">Confreaks</a> is a great site that has talks from all sort of past Ruby conferences. It’s a great way to learn about new things that you might want to look into in the future (or now!). That’s all for now. Read that book carefully to really absorb everything, watch the talks to get inspired, and the next post on learning will be moving on to incorporating Rails!!!</p>
]]></description>
      </item>
    
      <item>
        <title>Interesting Reads from the Week</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-27-interesting-reads-from-week/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-27-interesting-reads-from-week/</guid>
        <pubDate>Fri, 27 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I'm trying something new. I'm going to try to post interesting articles I've read (or meant to read) during the week every Friday. These articles/talks/blog posts/etc. may not have been published this past week, but it means I read or watched them this week. I'll try to also post who I heard about them from, but I didn't note that this week, so it'll be just the things I read for now.<br /><br />Enjoy!<br /><br /><a href="http://www.aaronstannard.com/post/2013/12/19/The-Taxonomy-of-Terrible-Programmers.aspx" target="_blank">The Taxonomy of Terrible Programmers</a><br /><br /><a href="http://phinze.github.io/2013/12/08/pairing-vs-code-review.html" target="_blank">Pairing vs. Code Review</a><br /><br /><a href="http://blog.generalassemb.ly/sublime-text-3-tips-tricks-shortcuts/" target="_blank">Sublime Text Tips and Shortcuts</a><br /><br /><a href="http://blog.bignerdranch.com/2379-the-unreasonable-effectiveness-of-tdd/" target="_blank">The Unreasonable Effectiveness of TDD</a><br /><br /><a href="http://www.daedtech.com/how-developers-stop-learning-rise-of-the-expert-beginner" target="_blank">How Developers Stop Learning: Rise of the Expert Beginner</a></p>
]]></description>
      </item>
    
      <item>
        <title>More Bot Bits</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-26-more-bot-bits/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-26-more-bot-bits/</guid>
        <pubDate>Thu, 26 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The final component of bot functionality was setting up the database. This was really the thing that I wanted to gain some experience with and by setting up a database not in a rails application, I was able to understand some of the components a bit better. For my purposes, this database would be used to keep track of points. Often times, people will award other people points based on funny or interesting things they post. They’ll also subtract points for things but in the past, we’ve had no way to keep track of this. This bot added the following functionality: adding and subtracting points, telling a user what their score is when they ask, and printing out the leaderboard when asked.<br /><br />First, Chris and I chose a database. We decided to go with <a href="https://github.com/jeremyevans/sequel">Sequel</a> because it looked pretty interesting and simple to set up. I set up the connection first that created the database but then moved that into a separate file. This way I have the option to run the create table script only when I want to create a new database table. Then I set the database connection as a global constant like this <code>DB = Sequel.connect('sqlite://bot.rb')</code> to get things going and set out to write the related methods.<br /><br />The first method looks to see if a nickname is already in the database or if we need to add it and acts on that. <br /><br /><pre>def nick_id(nick) <br />  set = score.where(:nick =&gt; nick) </pre><pre>  if set.empty?<br />    nil <br />  else<br />    set.first[:id] <br />  end<br />end<br /></pre><br />So, we set the variable set which find the list of every score that has the nickname nick (nick being whatever the person’s nickname is). Then, if it doesn’t find anything, then it will return nil. Otherwise, the methods grabs the id of the first matching nick it finds with that name and returns it.<br /><br />The second method inserts or updates the score. <br /><br /><pre>def insert_or_update_score(nick, points)<br />  nick.downcase!<br />  if nick_id(nick)<br />    row = score.where(:id =&gt; nick_id(nick)).first<br />    updated_points = row[:points] + points      </pre><pre>    score.where(:id =&gt; nick_id(nick)).update(:points =&gt; updated_points)<br />  else<br />    score.insert(:nick =&gt; nick, :points =&gt; points) <br />  end<br />end<br /></pre><br />So, first I need to make sure all the nicks are being evaluated in the same way. I discovered this when testing and found that two different nicks would be saved in the database based on if they were capitalized or not. Then, this method needs to fetch a record, then increment the number and then save it back. If there is no nick, then it creates the new nick in the database and gives it points.<br /><br />Finally, I wanted to be able to lookup the score and if someone has no points then the method throws an exception. <br /><br /><pre>def lookup_score(nick)<br />  score.filter(:nick =&gt; nick).first[:points] <br />rescue <br />  nil<br />end<br /></pre><br />I added a rescue so if there are any exceptions, the rescue catches the exception and returns nil. Chris warned me that when looking at future projects, the rescue option can be dangerous because it can hide serious errors but for our purposes, using rescue is perfectly acceptable. <br /><br />THEN WE REFACTORED!<br />Setting the database connection as a global constant is not a good idea and having all of these methods in the main file just make it messy and unorganized. First, I changed the database connection to an instance variable by putting it into a singleton class and initializing it.<br /><br /><pre>require 'singleton'<br /><br />class DB<br />  include Singleton<br />  <br />  def initialize(file = 'sqlite://bot.db')<br />    @db = Sequel.connect(file)  #setup the DB connection<br />  end<br /></pre><br />This meant that I also had to change all of the <code>DB[:score]</code> instances in the code because it was now <code>@db</code>. Then, instead of just putting @db in each place, I extracted it into a method that does it for us.<br /><br /><pre>def score<br />  @db[:score]<br />end<br /></pre><br />And that is how I set up the bot’s database.</p>
]]></description>
      </item>
    
      <item>
        <title>IRC 101</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-19-irc-101/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-19-irc-101/</guid>
        <pubDate>Thu, 19 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>IRC, internet relay chat, is one of the ways developers communicate… and something that can seem a little confusing when you first start, so here’s some IRC 101 so the next time everyone's talking about it, you'll know what's going on.<br /><br />First, what is IRC? It’s basically internet chat rooms. A lot of people probably want to yell at me for that simplified explanation, but that's pretty much what it is. There are lots of different rooms based on lots of different topics. You pick a nickname when you join and then you can join different rooms and chat with people. You can also run your IRC configuration on a server which enables you to stay connected when you close your computer and read back when you are back at your computer with some time.<br /><br />I personally don’t hang out in too many rooms. I’ve found that it’s also helpful to ask someone “in the know” about these channels. Some channels are super friendly. Others are really good about answering questions on specific topics or functionality (like the <a href="http://irc.netsplit.de/channels/details.php?room=%23pry&net=freenode">Pry channel</a>). More are based around open-source projects (like the <a href="http://webchat.freenode.net/?channels=#spree">Spree channel</a>). Finally, some channels are really unfriendly and people are kinda mean. I avoid those channels for obvious reasons. <br /><br />Next, there are a few different ways to access the IRC servers. Some are more complicated and some are less. I, personally, use <a href="http://www.irssi.org/">irssi</a>, which accesses IRC via the terminal but can be a little complex to set up. I enjoy using irssi, however when people post gifs, they don’t show up inline, which means you have to click on them to see them, which can be a little annoying sometimes. Other options include <a href="http://www.codeux.com/textual/">Textual</a>, <a href="http://limechat.net/mac/">Limechat</a>, and <a href="https://itunes.apple.com/app/colloquy-irc-client/id302000478?mt=8">Colloquy</a>. There are various free trials and free versions, but a few are paid for. Here are some set up options from <a href="http://www.codeography.com/2012/09/23/howto-irc-server.html">Chris</a> and <a href="http://poignantcode.com/blog/2013/08/28/my-irssi-setup/">Sean </a>. For irssi in particular, in addition to Sean's set up there are lots of additional <a href="http://scripts.irssi.org/">scripts</a> you can run to make lots of stuff happen including styling of the window, colors, replies, links, and much much more. <a href="http://quadpoint.org/articles/irssi/">Here's</a> a pretty good guide to using irssi and <a href="http://spreecommerce.com/blog/irc-101">here's</a> an additional article abut IRC in general written by Spree Commerce. The Spree article gives even more options for accessing IRC.<br /><br />Now for some basic functionality tips and tricks. When you want to join a channel, you just type <code>/join</code> followed by a space and the channel name. To direct a message to a specific person, just start the message with their nick name. You can even start by typing the beginning of the nickname and pressing tab to complete the name. To put yourself into a reply (like *allie_p goes to make coffee) just type <code>/me</code> in front of what you want to post in the chat. Finally, to send a message to someone just type <code>/msg</code> followed by a space and the nickname of the person you to message followed by the message you want to send. The message to that person will show up in a new window. With IRSSI, you can have multiple windows open (which means be in multiple rooms or conversations) and you can switch back and forth between them by pressing CTRL P or <code>/win 3 (or whatever window you are trying to get to)</code>. To scroll up or down in a conversation, you use FN and then up or down arrows.<br /><br />Final tips and tricks… check out <a href="http://textfac.es">http://textfac.es</a> to learn about the weird faces you may see in the channels (I still don’t really understand half of them) and <a href="http://www.reactiongifs.com/">reacting gifs</a> for great gifs to post in response to things. <br /><br />If you’ve got more tips and tricks, feel free to add them in the comments!<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Look what my Bot can do!</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-16-look-what-my-bot-can-do-bot/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-16-look-what-my-bot-can-do-bot/</guid>
        <pubDate>Mon, 16 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>It’s amazing what a little chatbot can accomplish. It can make your day much brighter and more fun!! So, let’s talk about what Rosie can do, because it’s a lot.<br /><br />So, first, Rosie can do some of the standard things like reply with gifs about coffee, District Taco, and lol’s. She also responds when you say good morning so that everyone every morning gets a fun response. She reacts to you when you say you love or hate coding, and she’s all about refactoring.<br /><br />Those commands are accomplished via regular expressions. Regular expressions are a concise, flexible way to pick out specific words, phrases, characters, etc. Regular expressions look really terrifying when you first encounter then, but are actually really handy and not so scary once you get a handle on them. Based on <a href="https://twitter.com/nellshamrell">Nell</a>’s <a href="http://www.slideshare.net/NellShamrell/beneath-the-surface-rubyconf-2013">talk</a>/suggestion at RubyConf, I made a permalink for each regex and put it as a comment in my code so I can always go back to it later. I used <a href="http://rubular.com/">rubular</a> when crafting the regex’s which made them a breeze. (Okay, not a breeze at first, but made it much easier to learn and figure out what each character did and how it altered what I was trying to do).<br /><br />The next set up functions are random things that Rosie will say periodically. <br /><pre>on :message do |m|<br />  if rand(500) == 0<br />    m.reply &quot;SQUIRREL!&quot;<br />  end<br />end<br /></pre>This basically say that for each message sent, the script will see if that number matches 0 and if it does, then the bot will reply with “SQUIRREL!”. There’s another one of these built in there as well, but people will have to wait to see what that is.<br /><br />Finally, there are some responses where rosie can choose to respond as a reply or as an action.<br />These options look like this:<br /><pre>on :message, /#{config.nick}?/i do |m| <br />  response = [<br />    [:reply, &quot;Did someone ask for me?&quot;],<br />    [:reply,    &quot;http://31.media.tumblr.com/fe021d747a605a8a7cba5767011251e1/tumblr_mjpo4q44aj1rjatglo1_500.gif&quot;],<br />    [:reply, &quot;what do you want now?&quot;],<br />    [:reply, &quot;#{m.user.nick}, why are you bothering me?&quot;],<br />    [:reply, &quot;it wasn't me.&quot;],<br />    [:reply, &quot;yyyyeessss?&quot;],<br />    [:action, &quot;hides&quot;],<br />  ]<br />  msg = response.sample    <br />  if msg.first == :action   <br />    m.channel.action msg.last <br />  else<br />    m.reply msg.last  <br />  end<br />end<br /></pre>So, each line…<br />The first line says that on the message whatever the configured nickname of the bot is (meaning that I can change Rosie’s name and the regex will still work) followed by the “?” then (next line) Rosie will reply with one of the options in the array. The next few lines show the options that Rosie can reply with and whether they are a reply or an action. A reply would look like this:<br />Rosie: It wasn’t me<br />While an action would look like this:<br />*Rosie hides<br />Then, <code>msg = response.sample</code> says picks a random value from the message array. (Next line) if the first element in that array is an action (:action), then (next line) add <code>/me</code> to it when it replies in the channel. Otherwise, reply like normal.<br /><br />The next post will talk about functionality that incorporates some more complicated methods and a database!</p>
]]></description>
      </item>
    
      <item>
        <title>Because it&#39;s been a little while... Here&#39;s another Euler!</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-13-because-its-been-little-while-heres/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-13-because-its-been-little-while-heres/</guid>
        <pubDate>Fri, 13 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Project Eulers 7 and 8<br /><br />Just a few more Euler’s left and I realized the other day how long it had been since I’d posted some answers! I’m also posting both 7 and 8 because really, problem 7 uses the prime library again, so the answer is really short and sweet.<br /><br />So, first, here is the problem:<br /><code> By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13,  we can see that the 6th prime is 13.<br /><br />What is the 10 001st prime number?</code><br /><br />First, here are the tests:<br /><br /><pre>require 'problem7/problem7'<br /><br />describe 'Prime number positions' do <br />  <br />  it &quot;is the 6th prime number&quot; do <br />    expect(Problem7.prime_place(6)).to eq 13<br />  end<br /><br />  it &quot;is the 10001st prime number&quot; do<br />    expect(Problem7.prime_place(10001)).to eq 104743<br />  end<br /><br />end<br /></pre><br />The tests and the code are pretty simple. You’re just using the resources in the prime library and then use the library to list (take) the numbers up until a certain position (ie- the 10,001st position) and then put the last number which is the answer to the question. So, here’s the code:<br /><pre>require 'prime'<br /><br />module Problem7<br /><br />        def self.prime_place(position)<br />          prime_place = Prime.take(position).last<br />        end<br /><br />  puts Prime.take(10001).last<br /><br />end<br /></pre><br /><br />And now for Euler 8. This problem was actually really tough for me for two reasons… first, it seemed different than most of the others I had done up until now and second, how the heck do you test this thing?!<br /><br />Here’s the problem:<br /><pre> Find the greatest product of five consecutive digits in the 1000-digit number.<br /><br /> 73167176531330624919225119674426574742355349194934<br /> 96983520312774506326239578318016984801869478851843<br /> 85861560789112949495459501737958331952853208805511<br /> 12540698747158523863050715693290963295227443043557<br /> 66896648950445244523161731856403098711121722383113<br /> 62229893423380308135336276614282806444486645238749<br /> 30358907296290491560440772390713810515859307960866<br /> 70172427121883998797908792274921901699720888093776<br /> 65727333001053367881220235421809751254540594752243<br /> 52584907711670556013604839586446706324415722155397<br /> 53697817977846174064955149290862569321978468622482<br /> 83972241375657056057490261407972968652414535100474<br /> 82166370484403199890008895243450658541227588666881<br /> 16427171479924442928230863465674813919123162824586<br /> 17866458359124566529476545682848912883142607690042<br /> 24219022671055626321111109370544217506941658960408<br /> 07198403850962455444362981230987879927244284909188<br /> 84580156166097919133875499200524063689912560717606<br /> 05886116467109405077541002256983155200055935729725 <br /> 71636269561882670428252483600823257530420752963450<br /></pre><br />So, first for the test. After asking around a bit, the best suggestion I got for testing was to break down the string and take 10 or 15 characters and figure out the largest product from that string and then do the same with the larger number.<br /><br />Here are the tests:<br /><pre>require 'problem8/problem8'<br /><br />describe 'largest products of consecutive numbers' do <br />  it &quot;is the largest product of 5 consective numbers&quot; do <br />    expect(Problem8.product(7316717653)).to eq 1764<br />  end<br /><br />  it &quot;is the largest product of 5 consecutive numbers&quot; do <br />    expect(Problem8.product(7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450)).to eq 40824<br />  end<br />end<br /></pre><br />And so, here’s the solution. First, I created an empty array. Then I wanted to use <code>.each_cons</code> which takes every set of consecutive numbers based on the number of characters you ask for (in this case, it would be 5 because I’m looking for the largest product of 5 consecutive numbers) but <code>.each_cons</code> wouldn’t work because you can’t call <code>.each_cons</code> on a string. So, first, I had to separate the string into individual characters by using <code>each_char</code>. Once the string was separated into <code>each_char</code> (each character) I used the map method to make each of the string characters into an array of integers. Then, I used <code>each_cons(5)</code> which separated the array of integers into arrays of every five characters. The I took the product of each of those integers and pushed it into an array. Finally, the max is called on that array which gives the largest number needed for the answer.<br /><pre>module Problem8<br />  <br />  def self.product<br />    arr = []<br /><br />    &quot;731671765313306249192251196744265747423553491949349698352&quot;&lt;br /&gt;    &quot;0312774506326239578318016984801869478851843858615607891129&quot;&lt;br /&gt;    &quot;4949545950173795833195285320880551112540698747158523863050&quot;&lt;br /&gt;    &quot;7156932909632952274430435576689664895044524452316173185640&quot;&lt;br /&gt;    &quot;3098711121722383113622298934233803081353362766142828064444&quot;&lt;br /&gt;    &quot;8664523874930358907296290491560440772390713810515859307960&quot;&lt;br /&gt;    &quot;8667017242712188399879790879227492190169972088809377665727&quot;&lt;br /&gt;    &quot;3330010533678812202354218097512545405947522435258490771167&quot;&lt;br /&gt;    &quot;0556013604839586446706324415722155397536978179778461740649&quot;&lt;br /&gt;    &quot;5514929086256932197846862248283972241375657056057490261407&quot;&lt;br /&gt;    &quot;9729686524145351004748216637048440319989000889524345065854&quot;&lt;br /&gt;    &quot;1227588666881164271714799244429282308634656748139191231628&quot;&lt;br /&gt;    &quot;2458617866458359124566529476545682848912883142607690042242&quot;&lt;br /&gt;    &quot;1902267105562632111110937054421750694165896040807198403850&quot;&lt;br /&gt;    &quot;9624554443629812309878799272442849091888458015616609791913&quot;&lt;br /&gt;    &quot;3875499200524063689912560717606058861164671094050775410022&quot;&lt;br /&gt;    &quot;5698315520005593572972571636269561882670428252483600823257&quot;&lt;br /&gt;    &quot;530420752963450&quot;.each_char.map(&amp;:to_i).each_cons(5) { |a| p arr &lt;&lt; a.reduce(:*) }     <br />    puts arr.max <br />  end<br />end<br /></pre><br />Phew! Look forward to the last two Eulers, 9 and 10, which I’ll hopefully get to post soon.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Building a Bot</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-09-building-bot/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-09-building-bot/</guid>
        <pubDate>Mon, 09 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I recently mentioned in my mentorship goals that one of the things I wanted to quickly dive into were databases. There are a variety of database types and ways to work with them. I was able to get an introductory handle by looking over <a href="http://sql.learncodethehardway.org/book/">Learn SQL the Hard Way</a> and doing some additional research but databases are difficult to understand until you really start doing work with them.<br /><br />At the same time, the bot in an <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> channel I often use was acting up. Basically, the bot was/is pretty much broken and needs to be restarted but no one knows who is actually able to restart the bot. <a href="http://www.twitter.com/crsexton">Chris</a> and I decided that a great first project for us to work on via the mentorship program would be to build a bot and to add a database component to it.<br /><br />So first, what is a bot? A bot is a program that you can connect into a chat room (in this case an IRC channel) which will then respond to different conversations or things happening in the chat room. Most workplaces I’ve spoke to that utilize hipchat, campfire, or other internal chat communication tools have some sort of bot that hangs out in the room as well and makes it more entertaining. It’ll pop up funny gifs or respond to things people say. It can also be useful by providing information about testing or alert the room when someone deploys code.<br /><br />My bot’s name is Rosie. She’s awesome. I’ll write up a few posts in the future that describe more about what she does but for now, I just want to go over the setup. First, I used <a href="https://github.com/cinchrb/cinch">cinch</a>. Cinch is a great, easy way to set up a bot and gives pretty straightforward instructions that get you moving quickly.<br /><br />This is what the setup code looks like.<br /><br /><pre>bot = Cinch::Bot.new do <br />  configure do |c| <br />    c.server = 'irc.freenode.net' <br />    c.realname = 'Rosie' <br />    <br />      c.channels = ['#rosie'] <br />      c.user = 'rosie_' <br />      c.nick = c.user <br />  end<br /></pre><br />Now, to walk through each line.<br />The first line <code> bot = Cinch::Bot.new do </code> creates a new bot using cinch. This new method takes a block.<br />In the next line <code>  configure do |c| </code>, we are in the block configuring the method. This method also takes a block and passes in the cinch configuration for the bot which means it passes in a reference to itself that you can configure.<br />The third line <code> c.server = 'irc.freenode.net'</code> shows the server we are connecting to.<br />Then <code>c.realname = 'Rosie'</code> is the real name that will show up when someone asks who is in the IRC channel.<br />Next, <code> c.channels = ['#rosie']</code> is the channel that the bot connects to. Right now I’m just testing her out, so I have her connecting to an independent channel that no one is using.<br />Coming to the end, the 2nd to last line <code>c.user = 'rosie_'</code> gives the nick name of the bot that will show up in the channel.<br />And finally, <code>c.nick = c.user</code> sets the nickname to the same thing as the username.<br /><br />So, there’s the initial setup. I’ll do future posts on both functionality and integration of a database, as well as one on what is IRC in general for those not familiar with it.</p>
]]></description>
      </item>
    
      <item>
        <title>Mentorship Goals</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-03-mentorship-goals/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-03-mentorship-goals/</guid>
        <pubDate>Tue, 03 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As many of you know from past posts, I was recently awarded <a href="http://www.twitter.com/crsexton">Chris Sexton</a> from the <a href="http://www.arlingtonruby.org">Arlington Ruby</a> group as my mentor. I say awarded because it’s been going really great and I think he’s awesome. I’m so glad Chris is my mentor and we’ve been meeting regularly to make sure I’m learning what I want to. This brings me to my next point, as many of you also know, I think it is very important to set goals. In addition to setting goals for myself so that I can achieve them, goal setting is a vital part of a mentor/mentee relationship. Part of being an effective mentee (I’m going to do a full post about this in the near future) is making it easy for someone to mentor you by being proactive and knowing what you want to learn and accomplish. <br /><br />One of the first things I did, before chris and I even had a chance to sit down for our first meeting, was let him know what my goals were during this time period. These goals have already changed once or twice and I can always continue to add new goals as we go along, but providing Chris with my goals sets us up for success. I know I’m going to learn a lot and he knows exactly what I want to focus on to learn. <br /><br />Here are the goals I sent him:<br />- Pair program at least once per month<br />- Determine projects to work on (building off of what I have already done and building new things)<br />- Feel more comfortable with defining my abilities<br />- Feel comfortable with looking at/thinking about projects that are in progress (not just building rails apps from scratch)<br />- Learn more about databases and become more comfortable working with them<br />- Determine how to set good programming goals (there's so much to learn, how do you determine what gets you to the next level and how to get there)<br />- Commit to OSS<br /><br />I’ve already started my first project with him of building a bot! The bot is going to be awesome and we’re going to incorporate some information that needs to go into a database in order for me to really get a better sense of working with databases, how they work, and what problems might arise when using them. I’ll definitely be doing some posts soon on the process of building a bot.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Learning… The next few tutorials and tools</title>
        <link>https://www.daydreamsinruby.com/blog/2013-12-01-learning-next-few-tutorials-and-tools/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-12-01-learning-next-few-tutorials-and-tools/</guid>
        <pubDate>Sun, 01 Dec 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>My apologies for not posting for a few weeks on this topic! I imagine that those of you who followed the last post on <a href="http://allisonsherenmcmillan.blogspot.com/2013/10/getting-started-tools-to-begin-with.html">tools to get started with</a> have completed those three resources and are very ready to move on. <br /><br />Next on the list is <a href="http://ruby.learncodethehardway.org/">learn ruby the hard way</a>. This tutorial is great and you can get it free, online. I recommend working through it. This will take you a while and probably, at some point in the middle, you will lose steam and not want to do the rest of the lessons. BUT continue and push through it. Take notes. Do ALL the extra credit. Keep all your exercises in a folder. It gives you a really solid step by step guide to ruby that is a little more advanced than the last group of links I provided. It also provided me with a lot of good questions to ask more seasoned developers to get more information on how certain things worked or what certain things were.<br /><br />If you’d like to simultaneously be reading a book while doing this, I recommend Chris Pines <a href="http://pine.fm/LearnToProgram/">&quot;Learn to program&quot;</a>. To be honest, I didn’t read this book but have since skimmed through most of it. This will give you a good foundational background in programming. Now, this is the stuff that may get tedious and may seem boring (I know I had a really difficult time keeping motivated and focused through this part.) It is so annoying when you just want to build cool things but you just don’t know enough yet to build awesomeness. Don’t worry, the awesomeness is coming!!! But you’ve gotta make it through this first.<br /><br />Next, do <a href="http://rubymonk.com/">Ruby Monk</a>. I did Ruby Monk way too late, but once I did it, it clarified a lot of definitions and parts of Ruby for me once I did it. <br /><br />Additionally, start listening to podcasts and figuring out which resources you like. I really enjoy <a href="http://rubyrogues.com/">Ruby Rogues</a>, especially their picks at the end but there are a lot of different podcasts, both free and for a low-cost.<br /><br />Finally, I wanted to toss out two additional resources that aren’t necessarily tutorials. This is an awesome resource: <a href="http://iwanttolearnruby.com">http://iwanttolearnruby.com</a>.  It lists a lot of different tutorials and resources, notes the level and cost (if any). It’s a good place to find a lot of the resources I’ve mentioned and more. And last, this article came out this week and I thought it was a really great read with some good messages and thoughts to keep in mind about what she wishes people had told her when she started learning to code. <a href="https://medium.com/learning-to-code/565fc9dcb329">https://medium.com/learning-to-code/565fc9dcb329</a><br /><br />Keep going!!<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Are you good code or bad code? - Day 3, Session 4</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-26-are-you-good-code-or-bad-code-day-3/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-26-are-you-good-code-or-bad-code-day-3/</guid>
        <pubDate>Tue, 26 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This was the last session of the conference but fortunately, also one of the most fun sessions! The session was moderated by <a href="https://twitter.com/mattetti">Matt Aimonetti</a> and featured a panel discussed <a href="http://rubyconf.org/program#matt-aimonetti-bryan-helmkamp-bryan-liles">if bad ruby code exists</a>. The panel was comprise of <a href="https://twitter.com/tenderlove">Aaron Patterson</a>, <a href="https://twitter.com/bryanl">Bryan Liles</a>, and <a href="https://twitter.com/brynary">Bryan Helmkamp</a>. If you have a chance, WATCH THIS TALK! As opposed to being a presentation, it was actually a really interesting discussion. I have a few notes  from this session that I'll write below but a lot of the conversation was mostly about questions to ask yourself as a developer when you're writing code. Additionally, the panel members talked about their perspectives on good code, bad code, get it done code, etc. Overall, they were all really good points for me to continue to keep in mind as I work on different projects and in the future, work on more complicated projects.<br /><br />First, there was a discussion about what is good code. The consensus seemed to be that good code was more testable, more maintainable, and more extendable. Most people seemed to settle on the fact that there is no bad code, but there definitely is code and better code. To this point, Bryan from <a href="https://codeclimate.com/">Code Climate</a> talked about the static analysis of code which helps people make more informed decisions. He hopes that the code climate process is helping to make better coders and also help determine what is better code.<br /><br />Second, there was some discussion of “the rules”. I found this really interesting since I'm still learning the rules and the rules are important. When you're first learning, it's important to know the best practices and what the rules are. The goal is to get to a point where you can decide in an educated way if you want to break that rule or group of rules and why.<br /><br />A question came up about refactoring and when you should take the time to look over your code, refactor and make those changes. The panel discussed always asking themselves the question of “how long would it take me to take this code and make it easier/better?” (easier/better meaning easier to work with or in). When the answer is around a week or longer, you've probably gone too far without pausing to refactor. <br /><br />One suggestion based on this is when you're working in a class, decompose the things into composed methods. In other words, factor out methods into smaller methods.<br /><br />But seriously, watch this talk. It was entertaining, humorous, interesting and I feel like made me a better developer in a very different way than most of the other sessions.<br /><br /><b>The most important things I took from this talk:</b><br />1. Good development is knowing why versus how<br />2. A good developer knows the rules and also knows when to break them<br />3. Write the best code you can in the time you have <br />4. Focus on moving forward. Be a better developer today than you were yesterday, be better this year than you were last year, and so on.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Program on my iPad?! - Day 3, Session 3</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-26-program-on-my-ipad-day-3-session-3/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-26-program-on-my-ipad-day-3-session-3/</guid>
        <pubDate>Tue, 26 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><b>TL;DR:</b> have you ever programmed on your phone or iPad? I haven't but now I totally want to.<br /><br />I thought <a href="http://rubyconf.org/program#charles-wood">this session</a> was plus/minus (sorry <a href="https://twitter.com/cmaxw">Charles Wood</a>! I still love <a href="http://rubyrogues.com/">Ruby Rogues</a>!). My main issue with the talk is that he showed this awesome demo of actually being able to pull up the command line on your phone or iPad in order to actually program but didn't really go into how one would accomplish this. <br /><br />Charles talked about the toolbox he uses to get his development machine in the cloud. Primarily, he uses <a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a>, <a href="https://www.digitalocean.com/">Digital Ocean</a>, <a href="http://tmux.sourceforge.net/">tmux</a>, <a href="http://www.gnu.org/software/emacs/">emacs</a>, <a href="http://www.github.com">Github</a>, and <a href="http://www.opscode.com/chef/">Chef</a>. First, the SSH is configured and public/private keys are created. You can create one key for each machine or a single key for all your machines. He discussed Digital Ocean as the server he uses.<br /><br />Second, he prefers to use TMux. I've heard a lot about tmux for pairing and how it's a great tool when you want to pair with someone (I've yet to use it). For this case, however, he also liked it because you can pick up where you left off instead of having to restart something or get back to where you left off. Additionally, you can do multiple or split screens which is useful.<br /><br />I didn't write down any notes about emacs, github or chef since I have a bit of a background on those (if you ever want a great presentation on chef, hit up <a href="https://twitter.com/nathenharvey">Nathen Harvey</a>… he did a 10 minute “what is devops and what is chef” talk for Rails Girls a few months ago that was so amazing).<br /><br />I jotted down a few notes about security, since that seems like an important issue when you're using a phone or ipad to log into your development environment. These security suggestions included turning off the root ssh, using public/private only, having a firewall, using something like <a href="http://proxpn.com/">proXPN</a> (a tunneling service) and using sudo.<br /><br />The main question I had after this session was “ok, but now how do I actually get this working?!” He did a good job explaining the tools, some of which I was familiar with, others not as much and while all the tools at the end sound great. I'm still not quite so sure how they all get pulled together to let me program on my iPad. After the session, I spoke with Conrad a little bit about this and he pulled things up on his phone (which again, was really cool) and I think I understand overall how I would go about doing this. It mainly has to do with setting up the SSH and a server and I think everything else stems mostly from that.  The basic steps are to 1. set up or have access to a server. 2. Install with a package manager onto the server. 3. Ssh into the server. 4. Then you have an ssh client for iPhone, like <a href="https://itunes.apple.com/us/app/prompt/id421507115">prompt</a>, which is a terminal emulator for ssh. (I'm a little unclear on that last part, so if you do want to get into this, I'd suggest taking the basic tools listed above and then doing some additional research on the actual setup).<br /></p>
]]></description>
      </item>
    
      <item>
        <title>RubyConf Randomness: Other things I learned that weekend</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-26-rubyconf-randomness-other-things-i/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-26-rubyconf-randomness-other-things-i/</guid>
        <pubDate>Tue, 26 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This post if all about the other random things I learned at RubyConf. Just as a note to begin, some of these items are talk-related, others are just literally random things I learned. In order to learn, I needed to ask. Don’t shy away from asking about a joke or tv character. It’s not embarrassing to even ask the small questions...I’m new to tech and therefore I don’t understand all of the star trek references or ruby jokes. Ask them!! Then you’ll be able to laugh at them in the future! It’s the little things that make a big difference. <br /><br />1. Koybayashi. There’s more than one. I have a confession… I love <a href="http://www.ifoce.com/index.php">eating contests</a> and the sport of competitive eating. Yup, you read that correctly, eating contests. The best part of every year for me is the <a href="http://www.nathansfamous.com/index.php/hot-dog-eating-contest">Nathan’s hotdog eating contest</a> every July 4th. I love the commentators and the competitors, I know all of them and their stories and their past records. One of the most famous major league eaters is <a href="http://en.wikipedia.org/wiki/Takeru_Kobayashi">Kobayashi</a>. He held the world record for number of hotdogs eaten for a long time until <a href="http://en.wikipedia.org/wiki/Joey_Chestnut">Joey &quot;the jaws&quot; Chestnut</a> came onto the scene. Now, during <a href="http://www.twitter.com/elight">Evan’s</a> talk about <a href="http://allisonsherenmcmillan.blogspot.com/2013/11/rubyconf-session-3-recommendation.html">Redis and Recommendation Engines</a>, he had a slide about Kobayashi. This slide had no hotdogs and I was very confused. Turns out, there’s more than one famous Kobayashi. The Kobayashi he was referring to was <a href="http://en.wikipedia.org/wiki/Kobayashi_Maru">Kobayashi Maru</a>, (Straight from Evan!) a fictional test administered to Starfleet cadets in Star Trek. Cadets are evaluated on how they handle failure. Now that slide makes much more sense both in slide content and in placement within the presentation.<br /><br />2. Talks I wish I had gone to. There are two talks that I really can’t wait to watch. These are <a href="https://twitter.com/pat_shaughnessy">Pat Shaughnessy’s</a> <a href="http://rubyconf.org/program#pat-shaughnessy">Garbage Collection talk</a> and <a href="https://twitter.com/davetron5000">Dave Copeland’s</a> talk on <a href="http://rubyconf.org/program#-david-copeland">branching, nil, and attributes</a>. I saw lots of cool notes about these two sessions on twitter and heard great things from people who were at those sessions. Another note on talks, I thought the lightning talk by <a href="https://twitter.com/mootpointer">Andrew Harvey</a> was really good. If he posts his slides, you should definitely check them out.<br /><br />3. I didn’t do a full write up on notes from Day 3, session 3 about <a href="http://rubyconf.org/program#nathaniel-talbott">being an open source maintainer</a>. I didn’t have many notes but hopefully this topic will be more relevant to me in the future. I wanted to put some little notes about it here though. Some key points I noted were the idea of rewriting the history, triaging a pile of issues when you first become a maintainer, and taking responsibility. <br /><br />4. I learned about like 15 new languages while there. Seriously, who knew there were so many programming languages?! Some languages I heard of included <a href="http://brador.org/">poison</a>, <a href="http://opendylan.org/">Dylan</a>, and <a href="http://en.wikipedia.org/wiki/Whitespace_(programming_language)">whitespace</a>. I intend to fully ignore these until I’m a little more comfortable with ruby but I can’t wait to be at the point in my developer education where I can play around with these weird random languages and easily understand what’s happening.<br /><br />5. The last session was a fireside chat with Matz. At some point someone asked a question about someone called Nobu and everyone laughed. For those of you who also didn’t get it, here’s what everyone was laughing at. There is a guy named nobu who has the most contributions to ruby and the running joke is whether or not he’s a bot or a real person. Apparently he’s a real person. Next time, I’ll be able to laugh too <br /><br />6. I arrived late to board game night and therefore didn’t really jump into anything, but there were some really cool games being played! If you were there and remember any of the names, please leave them in comments! I’m always looking for new interesting games.<br /><br />On a final note, I just want to say thank you to everyone that I met and had conversations with while at RubyConf! It was really fantastic to meet so many people doing so much cool stuff. And thank you to the organizers who put together the scholarship program! I wouldn’t have been able to go if it hadn’t been for that opportunity.<br /><br />Hopefully I’ll see everyone in San Diego next year!!!</p>
]]></description>
      </item>
    
      <item>
        <title>Encouraging new Software Developers- Day 3, Session 1</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-25-encouraging-new-software-developers-day/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-25-encouraging-new-software-developers-day/</guid>
        <pubDate>Mon, 25 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>For this session, I went to <a href="https://twitter.com/KinseyAnnDurham">Kinsey’s</a> session on <a href="http://rubyconf.org/program#kinsey-ann-durham">becoming a software engineer</a>. Kinsey is a newer developer and did a great job on her talk!! The talk was closely related to my lightning talk and discusses apprentice programs and what has really helped her become a software engineer along the way. Among other things, she talked about how <a href="http://www.apprentice.io/">Thoughtbot’s apprentice program</a> really helped her learn and grow and discussed ways other companies can think about apprentice programs.<br /><br /><b>TL;DR:</b> More interesting thoughts on mentorship and qualities of an effective mentor and my personal opinion on the proliferation of bootcamps.<br /><br />Kinsey spoke of outreach and how the <a href="http://railsbridge.org/">RailsBridge</a> program truly changed her life. For me, my first introduction to coding was through <a href="http://railsgirls.com/">Rails Girls</a> so I agree that outreach and new programs coming into existence are important in order to expose people to what they can achieve. She also spoke about mentorship and the importance of that (which I obviously believe in). She noted some important aspects of an effective mentor are someone who can explain complex concepts simply, someone with an awareness of both themselves and the mentee, and finally, someone who has patience.<br /><br />Finally, she spoke about her progression and the tools she and <a href="http://thoughtbot.com/">Thoughtbot</a> used to help her grow. These included weekly retrospectives, pairing, and empathy. This talk was a great talk. I think the room was mostly filled with people who do want to mentor and want to help support newer developers which was great and the room was pretty filled, showing the level of dedication in the ruby community to support each other and help newer people just getting into the industry.<br /><br />One side note that I’m compelled to mention related to new apprentice and bootcamp programs opening is the recognition that not everyone can do one of these programs. I think these programs are fantastic and I’ve met great people who have been a part of these programs. One challenge I’ve seen, however, is the expectation that if you haven’t done a bootcamp or apprentice program then you’re a riskier candidate for a job. Recently, when I talk about learning to code on my own, everyone asks me about participating in a bootcamp program, especially given how many are opening these days. These programs, while increasing some of the diversity concerns in the technology community, are still out of reach for many. A bootcamp’s tuition and living expense, as well as the requirement to move someplace for a few months can be out of reach for many. Oftentimes being part of an apprentice program requires those same sacrifices especially since often you are expected to stay in the same area after a bootcamp or apprentice program. There are merits to learning in a bootcamp-style environment however I hope those of us who have taken a different path but put in the same amount of time and dedication will still be considered as strong candidates for the same companies recruiting new hires out of these institutions.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Keynote: Code StoryTelling</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-25-keynote-code-storytelling/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-25-keynote-code-storytelling/</guid>
        <pubDate>Mon, 25 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The third day’s <a href="http://rubyconf.org/program#ernie-miller">keynote</a> was pretty interesting. <a href="https://twitter.com/erniemiller">Ernie Miller</a> was talking about writing code and particularly writing ruby. The main premise of the talk was that your code should tell a story. In order to tell that story, things should be clean and clear. I learned lots of new terms and extensions of terms I already knew. A good way to tell the complexity of code is through branching. Branching shows how complex code is by showing how many branches it has. Branches are determined by places in which code could go more than one way. For example, an if statement counts as a branch because it shows code choosing one path or another. <br /><br />Earlier in the talk, he spoke about rules of class macros. Classes should be easy to understand, order independent, free of branches, show what and not how, and idempotent. He also talked about callbacks. I didn’t previously know that there were so many different types of callbacks. There are reverse callbacks, around callbacks, and skip callbacks.<br /><br />The final term I learned was prepend. Prepend relates to include and extend, but different. Prepend is related to include but in include, methods on the class are a higher priority than methods included from modules but prepend changes that! When you use prepend, the priority order changes so you can say prepend A for example and then A would be a higher priority than the other methods in the class.<br /><br />Obviously this talk had a better flow than the notes presented here. He went over a lot of different ways to write ruby and styles. I just took notes on the terms I didn’t know previously and wanted to look into after the talk. Fortunately for everyone, the slides are up! <a href="https://speakerdeck.com/erniemiller/thats-not-very-ruby-of-you">https://speakerdeck.com/erniemiller/thats-not-very-ruby-of-you</a><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Day 2 begins at RubyConf</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-24-day-2-begins-at-rubyconf/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-24-day-2-begins-at-rubyconf/</guid>
        <pubDate>Sun, 24 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>So there’s this thing and it’s called <a href="http://jruby.org/">JRuby</a> and it’s like Ruby but it’s not Ruby. The <a href="http://rubyconf.org/program#tomenebo-charles-nutter">talk</a> was given by <a href="https://twitter.com/headius">Charles Nutter</a> and Thomas Enebo. This session was really interesting, at least the first part. I’ve never used JRuby before and didn’t really have a sense of what it was. The second part of the talk went into some more specific features and functions that will be added for the new release – that part was less interesting to me because I had never used JRuby before and therefore what I should be looking forward to in future releases didn’t really matter to me, but the first part of the talk was all an introduction to JRuby, what it is, what it does, and how it works. This, combined with some additional time and explanation with <a href="http://www.twitter.com/conradirwin">Conrad</a>, really opened my eyes to the variety of different things going on in the Ruby world that are related to Ruby but not exactly Ruby. <br /><br /><b>TL;DR:</b> JRuby does a lot of interesting things and I learned terms like JVM, jit, bytecode, and concurrency.<br /><br />So, what is JRuby? JRuby is Ruby on the JVM (Java Virtual Machine). It is ruby implementation written partially in Java. It isn’t yet compatible with Ruby 2 but will be soon. JRuby is a different version of ruby entirely so you can use RVM to toggle between versions. Having Ruby on the JVM means that everything in the JVM is available to you. Essentially, this is really useful and cool because having the JVM available means that you can utilize Java libraries in your ruby code. <br /><br />They then talked about garbage collection (more on that later) and jit runtime. Jit is a compilation called just in time compilation. In jit, when you run the compiler, you get an intermediate file (called bytecode) but the file isn’t optimized. So when you run Java, it takes the machine code and turns the parts you need into optimized code. Normal Ruby doesn't compile into machine code so JRuby runs like regular ruby but behind the scenes, it does a bunch of more complicated stuff. Traditional compilation happens when you run the compiler and get a binary file, not bytecode. This bytecode helps reduce overhead and they are currently working on improving the optimization even further in newer version of JRuby. The need for optimization comes from the longer setup time. Once the JVM is set up and running, it can be really fast (because it only optimizes pieces of the code as you need them) but it takes some time to get up and running.<br /><br />They also talked about concurrency and parallelism. Concurrency means that is you have 100 users, then you need 100 way concurrency which is directly related to the amount of spacing (memory) you need at a given time. When you use threading (available in JRuby), it saves the amount of memory you need to use and therefore the amount of money you need to spend. This is also related to parallelism. Threading is not very commonly used in Ruby but to go into a little more explanation threading means instead of running 10 copies of the ruby code, you can run 1 copy of the code with 10 threads of the code. Related this, they talked about the thread-safe gem, hamster gem, and atomic gem. They also talked about shoes which I did some additional research into because it looks cool. <a href="http://shoesrb.com/">Shoes</a> is built using JRuby. It’s basically a gui (graphical user interface) environment which means it’s a way of writing graphical applications in ruby so that you have a user interface and you can so applications and not just web apps. <br /><br />Now, back to garbage collection for a moment. JRuby has the best garbage collector. So what does that mean and what is garbage collection? Garbage collection runs code in your code. Ruby automatically throws objects away when you’re not using them in order to help with memory. Ruby marks items being used and tosses those that aren’t used… this is called mark and sweep. The JVM has a good garbage collector because of the way it optimizes the code (I think). For more on garbage collection, check out Pat Shaughnessy’s talk once it’s up on Confreaks (I missed it too, but it’s one that I definitely intend to listen to once it’s posted. I heard it was really good).<br /><br />Finally, this talk about JRuby made me curious about the other stuff I had heard about… like <a href="http://en.wikipedia.org/wiki/Ruby_MRI">CRuby</a>, <a href="https://github.com/mruby/mruby">MRuby</a>,  <a href="http://rubini.us/">Rubinius</a> and what use cases were. A frequent use case for JRuby is when it is used to write a JRuby wrapper around Java code. CRuby is another name for MRI which stands for Matz Ruby Interpreter or the main documentation for the Ruby beginners are most familiar with. MRuby is a new version of a ruby-like language. Finally, Rubinious is like <a href="http://pypy.org/">PyPy</a> which lets you write python in python. Rubinious lets you write Ruby in Ruby which uses less resources and runs the ruby code faster. <br /></p>
]]></description>
      </item>
    
      <item>
        <title>UML: not just random letters - Day 2 Session 3</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-24-uml-not-just-random-letters-day-2/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-24-uml-not-just-random-letters-day-2/</guid>
        <pubDate>Sun, 24 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>On day 2, I didn’t got to the second session because I was busy having an excellent lunch with the other ladies at the conference thanks to <a href="http://www.devchix.com/">DevChix</a> for organizing and sponsored by <a href="http://thoughtbot.com/">Thoughtbot</a>! When I got back, it was time for session three. I wasn’t sure what to attend for session three (day 2 in fact was much higher level, I thought than day one so I was often choosing between sessions where I didn’t really understand any of them so it was a little bit flip of a coin, but the sessions ended up being really interesting). I ended up at <a href="http://rubyconf.org/program#jim-weirich">The Big Picture</a> with <a href="https://twitter.com/jimweirich">Jim Weirich</a>.<br /><br /><b>TL;DR:</b> UML can help diagram code which helps programmers see it and organize it with more clarity.<br /><br />The Big Picture was all about UML which stands for unified modeling language. An initial warning, UML is a visual representation so I’m writing about some of the information but in order to really get the full picture and idea of what Jim discussed, I think it will be necessary to see the diagrams and models alongside the explanatory information. <br /><br />Moving into the talk, there are three primary ways that you can use UML. You can use it to sketch a process. You can use it as a blueprint and finally you can use it as a programming language. Jim talks about using it primarily as a sketch. The first example he discussed in terms of explaining usefulness was showing dependencies. When you diagram something, you really think through the code and know what your code depends on. This is shown visually via the direction of the arrows. The direction of the arrow is the direction of the dependency. You can also use this diagram to break up certain sections of the code so, at one point, on the example, the controllers were outside of the box (in red) and the application was in the green box (see, this is where seeing the diagram is obviously useful).<br /><br />One of the primary examples discusses was a sketch of Rake. Rake has few classes, but the classes that do exist contain lots of methods. There is no rules class in rake. There are also no domain specific locations in rake. The application is rake. Within that application, namespaces exist and the scope is constantly changing as you define a task. The file tasks ignore scope. I had never thought about the rake task in this way and broken it apart with this methodology so it was interesting to see the task essentially pulled apart into the different commands and components that comprise it.<br /><br />There was a brief discussion of object diagrams and how it is important to keep in mind that an object diagram captures how an object looks at that exact time.<br /><br />He then talked about another use of diagramming when talking about creation. It related to creating a process, but more importantly he used an AR Drone to demonstrate it so pretty much all my focus went to that leaving me with little/no notes on what creating a process actually means and why this methodology is useful for it. <br /><br />Next we covered dynamic engagement which is a state diagram. In this diagram, you have a start state (represented by a black dot). Then the arrows represent transitions which happen with a trigger that make an action happen which finally switches the state.<br /><br />Finally, we discussed interactions which are sequence diagrams. My notes for this part are a little shady but sequence diagrams are like object diagrams but with more lines and different lines. The diagrams show sequencing calls and are timing related.<br /><br />Summarily, I can see where diagraming out code is interesting and useful. After this talk, I also heard others discussing how UML is a waste of time, which I can understand as well. I think in certain scenarios diagramming and utilizing UML could be very helpful and useful but in others, I can understand how it wouldn’t make as much sense.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Session 5: Regular Expressions</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-22-session-5-regular-expressions/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-22-session-5-regular-expressions/</guid>
        <pubDate>Fri, 22 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>For those of you who don’t follow me closely on <a href="http://www.twitter.com/allie_p">twitter</a>, you may have missed that I recently wrote my first regular expression!! Now, it was a very simple one but I think regular expressions can be some of the most intimidating code. You look at this blob of symbols and weirdness and there is no chance in hell you’ll be able to interpret it until you actually do some research. The first time I saw a regular expression I literally thought, what the hell is that? And is that actually I’m supposed to be able to understand one day? And then I actually wrote one, which was awesome. BUT more awesome than writing my first regular expression was going to <a href="https://twitter.com/nellshamrell">Nell’s</a> talk on <a href="http://www.slideshare.net/NellShamrell/beneath-the-surface-rubyconf-2013">Regex’s</a>. It was mind-blowing. I think the best thing about Nell’s talk was that it was high level enough that more experienced developers in the room were really interested in what she was saying and n00bs like me understood everything she said because she stepped through regex’s slowly, clearly, and explained it amazingly well. I know that this will be a talk that I continue to look back on as I write more regex’s and gain more experience with them.<br /><br /><b>TL;DR:</b> Regular expressions explained in a comprehensible, clear way are not so scary and can be really powerful.<br /><br />First, Nell spoke about the onigmo library, which I had never even heard of before. Basically, it is onigmo that reads a regular expression and parses it into abstract syntax tree and then it compiles that into instructions. The expressions relate to a finite state machine. Breaking this down the machine is the subject, the state is the state of that machine, and finite are what the possible states are.<br /><br />When making a regex, in order to call the regex in code you set it up this way:<br /><code><br />Re = ‘/force/’<br />String = “Use the force”<br />re.match(string)<br /></code><br /><br />She then went into exactly what happens. Basically, the regex starts at the beginning of the string and it works through the string until it finds the beginning of what could be a match… in the case ‘f’ of ‘force’. Once it finds that first letter, it will work through the remaining letters to determine if there is a match and if there is one, then it’ll return that match. <br /><br />From here, the talk went into different ways you can create regex’s. For example, if there is a pipe in the phrase then a match can be one part OR the other part of a string. The example used was<code> /Y(olk|oda)/ </code>so a match would be either Yolk or Yoda. Another variation is a plus quantifier. The + at the end of a string means that you can have infinite repetitions of the last letter of the string. The example she used was <code>/No+/</code> which means a match could be “Noo”, “Nooo”, or “Noooooooooooo”. There are also lazy quantifiers, star quantifiers, possessive quantifiers which she shows using a bunch of cool examples.<br /><br />Then, and this part was just really fascinating, she brought it together using an example of a challenge sent out by Avdi a little while ago. The challenge was to make a snake_case into a CamelCase using a regex. Now, beyond just showing us that, she TDD’ed it!!! I had absolutely no idea how you’d TDD a regex (or that you even could) so that was great to walk through. She started by mapping out what needed to be done and then going to it. To give an example of picking apart a regex she did this:<br /><code><br />Def upcase_chars(string)<br />Re = /\A_?[a-z] /<br />String.gsub(re){|char| char.upcase}<br /></code><br /><br />Which means: \A anchors the expression to the beginning of the string<br />_ is the underscore<br />? means that the underscore is optional (it will match the string with or without the underscore)<br />[a-z] matches any letters and not the underscore<br />and then the next line says for the string, substitute the characters for uppercase characters.<br /><br />This regex continued to get more complex for the next few minutes including a look back, figuring out some additional complications based on the underscore, and then combining the methods to create the solution.<br /><br />You can check out the final code and final specs <a href="https://github.com/nellshamrell/snake_to_camel_case">here</a> (which I highly recommend doing).<br /><br />At the end she made some final recommendations for building regular expressions. First, develop regex’s in small pieces and the combine them. Second, use <a href="http://rubular.com/">Rubular</a> and make a permalink of it. This way you can put the permalink into the code as a comment! Last, don’t be afraid of regular expressions.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>The Pry talk!</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-20-the-pry-talk/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-20-the-pry-talk/</guid>
        <pubDate>Wed, 20 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I was really excited for <a href="http://rubyconf.org/program#conrad-irwin">this talk</a>. In my local user group, <a href="http://www.arlingtonruby.org">Arlington Ruby</a>, someone discovered <a href="http://pryrepl.org/">Pry</a> a little while ago and so now we all use it and are a little obsessed with what it can do. My guide, <a href="http://www.twitter.com/conradirwin">Conrad</a>, gave the talk and is one of the main men working on Pry so I was super excited to see what it could do. Right now, I use binding.pry a bunch and kinda understand what it does but this talk really helped and also showed me a ton of other stuff that can be done with Pry.<br /><br />TL;DR: Pry is really cool and is very powerful with a ton of built in shortcuts for effective debugging and working with your code.<br /><br />So, let’s start with what is Pry? Pry catches exceptions. It is a REPL which means read, evaluate, print, loop. It is more robust, fun and easy to use, and adds introspection to the REPL. Introspection basically means that you are able to look around and see what your code is doing. This is what I’ve used pry for in the past. You can put binding.pry into your code and run it in your terminal and your terminal will automatically open pry instead of IRB and will allow you to both step through your code or look at each step in your code individually allowing you to see what’s going on and help determine and solve problems more effectively.<br /><br />Conrad talked about recommending REPL driven development. So, instead of working out the code and testing it, he suggests you work out the code you’re going to use in a REPL first and then write the tests and the code it.<br /><br />Now, for the cool tips and tricks he mentioned (note: I haven’t had a chance to try these all out since I’ve been back)…<br /><code>?$mongo</code> shows the documentation for a method<br /><code>$$mongo</code> shows the source code<br /><code>ls Moped::Query</code> shows the methods available<br /><br />For more fun stuff, you can install the pry-plus gem and then require <code>‘pry-rescue/rspec’</code><br />Typing <code> play-l6</code> will prompt line 6 to play that 1 line<br /><code>Edit –m</code> edits the current method (so if you want to fix an issue)<br />And then <code>try-again</code> will rerun that 1 test so that you don’t have to deal with rerunning the entire test suite just to see if you fixed that one test.<br /><br />You can also use pry to vertically in a method by using the up and down keys. You can use the <code>cd</code> command to move through the code horizontally.<br /><br />Typing an underscore will refer to the last line and typing __ or two underscores will give you two lines back.<br /><code><em>ex</em></code> raises the most recent exception<br /><code>wtf?</code> Gives you the first five lines of the stack trace so that you don’t have to scroll through a bunch of unnecessary stuff.<br />Finally<code> whereami</code> will show you where you are in the code!<br /><br />This talk was really cool and super useful (as in, I can start using these shortcuts and tips immediately). It was a lot of fun to hear all about pry and all the things it can do. <br /></p>
]]></description>
      </item>
    
      <item>
        <title>RubyConf Session 3 - Recommendation Engines</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-19-rubyconf-session-3-recommendation/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-19-rubyconf-session-3-recommendation/</guid>
        <pubDate>Tue, 19 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I’m going to be honest here… my notes from session 3 are a little light for two reasons. First, I know Evan and he’s amazing and I know that if I had additional questions, I could always ask him after the conference and second because when you’re new, concentrating on so many high level talks in a day can be a little tiring. But still, I learned some great stuff! The nice thing about the presentation, as well, was that I had actually had a fair amount of exposure to the concepts he was speaking about through both projects I’ve built and through my shadowing opportunities.<br /><br /><a href="https://twitter.com/elight">Evan</a> was talking about <a href="http://rubyconf.org/program#evan-light">recommendation engines</a>. His example was that he was building a social network for soccer. The client he was working with wanted to have a “feed” function a la facebook where people could see what was going on. Specifically, they wanted the users to see what was popular and relevant in real time using tags. Each post has polymorphic tags associations. When looked at a recommendation engine, he mentioned that the engines are based on approximation and are based in statistical methods. The trick was to quantify posts based on popularity and relevancy.<br /><br />He then spoke about <a href="http://redis.io/">Redis</a> and how Redis stores a key/value pair in memory essentially making it a glorified hash in the data process. One interesting thing about this is that the value doesn’t have to be a string. It can be a data structure (like a hash, list, set, or sorted set) which is pretty interesting and means you can have more flexibility with the data. Finally in Redis there are few persistence options but the ones that exist are adequate.<br /><br />He then talked about using ActiveRecord::observers which pushed events to <a href="https://github.com/resque/resque">resque</a>. Finally, in order to actually determine importance weight, he used different calculators. One was trendingness. A second was user interest. And the third was the post score calculator. The methods themselves were really interesting to look at, think about, and dissect how they interacted with one another, but we’ll need to wait for the slides to be posted to really pick through those. Finally, I think in order to limit the amount of data being processed, he set a small TTL. TTL means time to live. Basically, if you set a record to a specific time, it means you can read that record for x amount of time and after that it gets deleted and you can’t read that record anymore.<br /><br />Evan’s talk also taught me that there are two famous Kobayashis… the major league eater and one related to Star Trek (more on this in the “random things I learned at RubyConf” post).<br /></p>
]]></description>
      </item>
    
      <item>
        <title>On Grit and Learning</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-18-on-grit-and-learning/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-18-on-grit-and-learning/</guid>
        <pubDate>Mon, 18 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><br />This weekend, I was listening to the <a href="http://rubyrogues.com/131-rr-how-to-learn/">Ruby Rogues podcast</a> from this week about how to learn. I’ve thought a lot over the past few years about how I learn, the importance of learning, and to be honest, how my upbringing and self-confidence has been affected by my learning. I am the middle child of three. I grew up in a single parent household but with a fairly traditional slant. I also grew up with a very very smart older brother. He was reading independently by the time he was three and often put himself to sleep by reading the dictionary...yes, the dictionary. He was the “smart one”. He was also the lazy one. Because he never had to work in school, he never did. He almost never turned in homework assignments but aced tests without ever opening a book. I was very different. For a long time, I was the “ditzy one”. I asked a lot of questions which were sometimes answered, sometimes laughed at, or sometimes explained by my brother using vocabulary I didn’t understand. I often had to think about concepts or reread things to understand and I had to study and work hard at school. As the most social of the three of us, I ended up being the outgoing, smart-ish enough child who was always expected to have a middle of the road career in something not super easy but also not too difficult.<br /><br />Until I went to college, I believed that I was not so smart and would always have to work much harder than everyone else in order to learn something. When I encountered something challenging (especially math and science related things), my initial reaction would be that it is probably too difficult for me to understand as opposed to knowing I could understand it with a little bit of effort. A few months into school, I started raising my hand, answering questions and getting them right! Something that stumped my classmates, I would understand and when I couldn’t figure something out, I thought it through or discussed it with others to clarify. Turns out, I was smart, I just grew up convinced I wasn’t. Additionally, I realized that my ability to work hard was not due to the fact that I didn't understand something, it was because I strove to reach higher goals and wanted to understand something more fully than just “getting it”. This newfound “smartness” also came with self-confidence. Once I realized I had valid questions to ask and legitimate comments to make, I had no trouble speaking up.<br /><br />This is where the Ruby Rogues podcast comes in… the first thing they spoke about was <a href="http://en.wikipedia.org/wiki/Grit_(personality_trait)">Grit</a> and the importance of Grit. Grit is basically perseverance. It says that successfulness is not defined by innate talent or smartness but about GRIT and someone’s ability to stick with something and continue to push themselves to learn more. <a href="http://www.twitter.com/sandimetz">Sandi Metz</a> did a phenomenal talk about this to the <a href="http://www.railsgirlsdc.com/">DC Rails Girls</a> workshop in June as well which was the first time I had heard the GRIT theory. Other things discussed also resonated with me. I found myself alone, in my living room, often nodding at the conversation. For example, they discussed NOPS, which is a really interesting concept of recognizing when you are uncomfortable and going with it. I realized I did this when starting to learn. At the beginning, I was embarrassed to ask questions and they made me uncomfortable. One day I decided to just go with it and say I’m going to ask every question that comes to mind today. It was great. Everyone answered my questions and I learned so much more once I stripped myself of the feeling of embarrassment about needing to ask.<br /><br />There were a few other good tips that relate to the <a href="http://allisonsherenmcmillan.blogspot.com/2013/11/mentorship-from-n00bs-perspective.html">lightning talk</a> I gave at RubyConf (speaker notes coming soon! I promise). Things like knowing that everything is a rabbit hole and you need to give yourself license to not care about some things as you learn or explaining things as you learn them. This is actually mostly why I started this blog. I find that when I solve a problem I have and I want to blog about it, I understand the problem and solution much better because I want to explain it to other people and feel a responsibility to be able to explain it effectively and in a way others will understand (and now I understand pictures of rubber ducks I’ve seen related to debugging!! It’s called <a href="http://en.wikipedia.org/wiki/Rubber_duck_debugging">rubber ducking</a> or teddy bear programming (same principle as rubber ducking but with a teddy bear) when you explain a solution or issue or definition to a stuffed animal or rubber duck in order to ensure you understand it). And a final great tip about constantly stopping to evaluate yourself, asking what did I do well this time and what wasn’t so good?<br /><br />I know that at this point in my coding journey, someone is going to need to take a chance on me. In a recent interview, someone told me that no one would ever take a chance on me because I don't have a CS background or professional coding experience. I know enough but am still learning a lot and I just hope someone sees my perseverance, grit and passion for learning enough to know I’m a good bet as an employee. I also want to say to anyone who is currently learning, keep pushing yourself. Every day you know a little more, even if you don't always feel like you do.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Onto Session 2!</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-17-onto-session-2/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-17-onto-session-2/</guid>
        <pubDate>Sun, 17 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<div class="MsoNormal">I fear I won’t be able to process everything and get it in a post before I start forgetting what my notes mean! Expect rapid postings in the near future.<o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal">Onto Session 2! <o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal"><b>TL;DR:</b> databases. <br /><br /><br /></div><div class="MsoNormal">This session was about the<a href="http://rubyconf.org/program#casey-rosenthal" target="_blank"> Zombie apocolyse </a>and data structures with <a href="https://twitter.com/caseyrosenthal" target="_blank">Casey Rosenthal</a>. I knew walking into this one that it would be a little over my head but after a post session debrief with <a href="https://twitter.com/conradirwin" target="_blank">Conrad </a>(my guide) that helped frame database structures in general, everything clicked! I’m also just now starting to really get into database structures and understand more about how they work, how to work with them, and what are the ways you can structure different data types within databases so this ended up being a great session for me to be in. Also, it was about a zombie apocalypse so it had to be good. Let’s start from the basics. There are two types of databases, <a href="http://en.wikipedia.org/wiki/SQL" target="_blank">SQL</a> databases and <a href="http://en.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> databases. NoSQL databases are essentially anything that isn’t a SQL database. NoSQL databases can also be known as distributed key value databases. Examples of these databases include <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> and<a href="http://basho.com/riak/" target="_blank"> Riak</a>. SQL databases include <a href="http://www.mysql.com/" target="_blank">MySQL</a>, <a href="http://www.sqlite.org/" target="_blank">SQLite</a>, etc. There are a handful of differences but the main difference is that SQL databases are based in table modeling. SQL databases can be a bit more flexible if you have similar types of information coming in all the time, but they can also be harder to scale. SQL databases are also good as long as everything is on one machine because they are safe, have lots of features and have many other good aspects but features these same features are hard to implement once you are running on many machines. Why do you need to move to many machines instead of having just one machine? Because you can’t read the information quickly enough when there is a lot of it (essentially, the queries start taking too long and you need to split the information onto more than one machine). Finally, SQL databases enforce the structure. If you use a SQL database, all of the tables in the database require the same information. In a NoSQL database, this isn’t the case. NoSQL databases are designed to they can start as one thing but easily scale to become larger and hold different types of information. And because there isn’t the same table structure, it can be easier to store lots of different types of information. So, when using a NoSQL database, you don’t have to use commands like rake db:migrate because there are no data migrations (yeah, that kinda blew my mind and it was also where the whole rest of the talk suddenly clicked into place for me). AND there’s no schema file! A NoSQL database has tables but they aren’t specific so they’re called connections instead of tables. The downside, however, is that you can’t tell exactly what’s in the database unless you pull all the records<o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal">So, back to the actual talk…when thinking about what type of database to use, it’s important to think about how the information will need to be presented in the end. This was an idea that continued to surface throughout the talk.<o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal">Some important terms I learned when thinking about NoSQL databases (and databases in general) were high availability, strong consistency, and partition tolerance. High availability means you can connect to any part of the system and you can both read and write all the data. So, for example, if you have 3 different silos that each keep information, the databases are kept in sync with one another so that you can access all the same data from any of those silos. In other words, if a server crashes, the database still works (Casey has a great slide that shows this, so I definitely recommend looking up the talk on <a href="http://www.confreaks.com/" target="_blank">Confreaks</a> when it’s up). Strong consistency means that parts of the database will remain in sync with one another. Finally, partition tolerance means that if the cable comes out of the wall, the database will remain running.<o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal">When you have a distributed system, there are a few data modeling options. You can do a document based inverted index or a term based inverted index. The document based inverted index means that you can write the information efficiently but that you’ll have an inefficient read process. The term based inverted index is the opposite. You have an efficient read but inefficient write system. So again, it comes down to really thinking about the data you have and what will be more important to your business processes. <span style="mso-spacerun: yes;">&nbsp;</span>Will you be reading a lot of data or writing a lot of data? The<o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal">He also talked about Highly Available systems (HA) of geohashes and one other type of HA system that I can’t remember. Lastly, I learned about some interesting components that are Riak-specific. Riak creates data siblings, which is also not possible in SQL but is possible in key value databases. Basically, when information is written into the system to the same key (so to the same data entry) from two different places (so two people are updating the same person’s file at the same time) the system will save both entries and connect them. In other systems, they just take the most recent timestamp as the most recent data but here, siblings are created and the two entries are both saved, become siblings and then the user is notified the next time that file is accessed being told “hey, you’ve got two entries here. Which one is correct?”<o:p></o:p></div><div class="MsoNormal"><br /></div><div class="MsoNormal">The rest of the talk went into some more detail on this information, how to locate zombies via zip code and other interesting components of the database but, for me, this is what I gleaned from the talk. For more examples, information, and the source code, you can check out <a href="http://zombies.samples.basho.com/">zombies.samples.basho.com</a>. <o:p></o:p></div><!--[if gte mso 9]><xml>  <o:OfficeDocumentSettings>   <o:AllowPNG/>  </o:OfficeDocumentSettings> </xml><![endif]-->  <!--[if gte mso 9]><xml>  <w:WordDocument>   <w:View>Normal</w:View>   <w:Zoom>0</w:Zoom>   <w:TrackMoves/>   <w:TrackFormatting/>   <w:PunctuationKerning/>   <w:ValidateAgainstSchemas/>   <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>   <w:IgnoreMixedContent>false</w:IgnoreMixedContent>   <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>   <w:DoNotPromoteQF/>   <w:LidThemeOther>EN-US</w:LidThemeOther>   <w:LidThemeAsian>JA</w:LidThemeAsian>   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>   <w:Compatibility>    <w:BreakWrappedTables/>    <w:SnapToGridInCell/>    <w:WrapTextWithPunct/>    <w:UseAsianBreakRules/>    <w:DontGrowAutofit/>    <w:SplitPgBreakAndParaMark/>    <w:EnableOpenTypeKerning/>    <w:DontFlipMirrorIndents/>    <w:OverrideTableStyleHps/>    <w:UseFELayout/>   </w:Compatibility>   <m:mathPr>    <m:mathFont m:val="Cambria Math"/>    <m:brkBin m:val="before"/>    <m:brkBinSub m:val="&#45;-"/>    <m:smallFrac m:val="off"/>    <m:dispDef/>    <m:lMargin m:val="0"/>    <m:rMargin m:val="0"/>    <m:defJc m:val="centerGroup"/>    <m:wrapIndent m:val="1440"/>    <m:intLim m:val="subSup"/>    <m:naryLim m:val="undOvr"/>   </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml>  <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="276">   <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal"/>   <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>   <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>   <w:LsdException Locked="false" Priority="39" Name="toc 1"/>   <w:LsdException Locked="false" Priority="39" Name="toc 2"/>   <w:LsdException Locked="false" Priority="39" Name="toc 3"/>   <w:LsdException Locked="false" Priority="39" Name="toc 4"/>   <w:LsdException Locked="false" Priority="39" Name="toc 5"/>   <w:LsdException Locked="false" Priority="39" Name="toc 6"/>   <w:LsdException Locked="false" Priority="39" Name="toc 7"/>   <w:LsdException Locked="false" Priority="39" Name="toc 8"/>   <w:LsdException Locked="false" Priority="39" Name="toc 9"/>   <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>   <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title"/>   <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>   <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>   <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong"/>   <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>   <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid"/>   <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>   <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>   <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>   <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>   <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote"/>   <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>   <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6"/>   <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6"/>   <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6"/>   <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>   <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>   <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>   <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>   <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>   <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>   <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>   <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6"/>   <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>   <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6"/>   <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>   <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>   <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>   <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>   <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>   <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>   <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>   <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>  </w:LatentStyles> </xml><![endif]-->  <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin:0in;  mso-para-margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:10.0pt;  font-family:"Times New Roman";  mso-fareast-language:JA;} </style> <![endif]-->    <!--StartFragment-->                                      <!--EndFragment--><br /><div class="MsoNormal"><br /></div>
]]></description>
      </item>
    
      <item>
        <title>RubyConf: First session</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-11-rubyconf-first-session/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-11-rubyconf-first-session/</guid>
        <pubDate>Mon, 11 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>My initial intention was to write up a post on what I learned at <a href="http://www.rubyconf.org/">Ruby Conf</a> this year and put everything in 1 big post, however, I've just finished writing up the first session and I'm already over a page, so I think it makes more sense to post as I complete write ups. Here's my first one about basically the first two hours of Ruby Conf 2013!<br /><br />This past weekend I had the opportunity to attend Ruby Conf in Miami! It was fantastic. I learned a ton. Met a bunch of new people and really dove into some Ruby amazingness. I was also really excited because, while I have been to a few ruby conferences before, this one was the first where I really understood what was going on and could sit through sessions without being completely overwhelmed and feeling like I didn’t understand a majority of the session.<br /><br />I was also a recipient of a <a href="http://rubyconf.org/scholarship">RubyConf Opportunity Scholarship</a>. This program paid for the conference registration and also connected me with a guide for the weekend. My amazing guide was <a href="https://twitter.com/conradirwin">Conrad Irwin</a> who was able to answer any lingering questions I had from sessions I attended. Conrad was very helpful and really advanced the amount of learning I was able to do and amount of information I was able to process.<br /><br />So, let’s begin… the day started with a keynote from <a href="https://twitter.com/matz_translated">Matz</a> (Yukihiro Matsumoto). For some reason, I didn’t think Matz would actually be there but he was and it was great. His talk was more to set the tone of the conference than go into technical details but a few points he made were great. First, appreciate your garbage collectors. Garbage collection was actually talked about a handful of times over the weekend but this was the first. Second, appreciate and respect are key. I think this is one of the reasons why I love the Ruby community so much… because these ideals are held paramount and discussed throughout the conference, but especially at the beginning to set the tone. Finally, an interesting note about open source was made, that OSS is like a shark, it needs to keep moving or it will die. All great points to set the tone for the rest of the weekend.<br /><br /><b>Onto the track sessions.</b><br /><br />The first session I attended was on <a href="http://rubyconf.org/program#loren-segal">“A Peek inside the Ruby Toolbox” with Loren Segal</a> (who, by the way, is interested in mentoring a new developer who's learning to code. If you’re interested, you should tweet at him <a href="https://twitter.com/lsegal">@lsegal</a>). Loren spoke about the really good tools the Ruby community has like deployment/ops, documentation, and testing, but mostly focused on where we could improve. The talk started with Visualization. There are lots of great visualization tools out there but none for ruby. Some example given were <a href="http://www.microsoft.com/visualstudio/eng/visual-studio-2013">visual studio</a>, which is a diagnostic hub which shows CPUs, load times, etc. It also has a built in debugger. <a href="https://developer.apple.com/xcode/">XCode</a> was noted as a good visualization system. <a href="http://visualvm.java.net/">VisualVM</a> which is JVM code. All of these tools really help with discoverability which was interesting to think about. Discoverability is basically being able to have a visual representation of what’s going on. The other tool mentioned was <a href="http://getfirebug.com/">firebug</a> which is considered a really awesome visualization tool and it is the inspect element function in FireFox. Right now, Ruby Mine is available for Ruby but it’s not awesome and fairly expensive. He also spoke about profilers like perf tools which results in a graphic diagram that runs through code and new languages like JRuby which have a JVM.<br /><br />Next, he spoke about Linting… which is not picking lint out of your belly button or using a lint brush to make your clothing un-fuzzy. <a href="http://en.wikipedia.org/wiki/Lint_(software)">Linting</a> tools are basic “check up” tools that help determine if your code is good or bad. Linting tools detect code smells and should find common errors. In Javascript, there is <a href="http://www.jshint.com/">JShint</a>. Currently in Ruby, a few tools exist… <a href="https://github.com/troessner/reek">Reek</a>, <a href="https://github.com/seattlerb/flog">Flog</a>, and <a href="https://github.com/seattlerb/flay">Flay</a>. The issue, however, is that these tools test the prettiness of code, not if it is good code (more on good code versus bad code in a later talk). These are some of the tools <a href="https://codeclimate.com/">Code Climate</a> uses to rate code there. There’s a new tool called <a href="https://github.com/YorickPeterse/ruby-lint">Ruby-Lint</a> but again, it’s new, and so Loren wasn’t sure how good it is. I’m excited to look into it more!<br /><br />Next, he talked about Static Analysis. Static Analysis is bug checking/ defect finding. Here, I learned about <a href="http://en.wikipedia.org/wiki/Fuzz_testing">Fuzz Testing</a> (almost as cool of a name as linting but not quite). Fuzz testing is when you throw a bunch of crap into you application to see what breaks it. (I later learned the SQL is well known for its fuzz testing). It seems like there are lots of interesting things to look into further about fuzz testing but what currently exists are <a href="https://github.com/seattlerb/heckle">heckle</a>, which fiddles with if statements to see If the tests fail and <a href="https://github.com/mbj/mutant">mutant</a>. Finally, he also spoke about <a href="http://en.wikipedia.org/wiki/Symbolic_execution">symbolic execution</a> which runs code with no immediate values. I wasn’t able to really wrap my head around this… it’s something that has to do with math, testing values, and automatic test case generation. Right now there’s nothing in Ruby for symbolic execution.<br /><br />In the category of random knowledge learned, In this talk, I also learned about what an IDE is! I hear people say it all the time, but never fully comprehended what it was exactly. Anyway, an IDE (integrated development environment) is having all the tools you need in one window so XCode is an IDE and so having an IDE would mean that instead of having a text editor, console, etc. all open, you’d have it all in one place.<br /><br />Great session and lots of new stuff to look up. It will also be interesting to see what new tools are built based on these weaknesses in our toolbox.</p>
]]></description>
      </item>
    
      <item>
        <title>Mentorship from a n00b&#39;s perspective</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-10-mentorship-from-n00bs-perspective/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-10-mentorship-from-n00bs-perspective/</guid>
        <pubDate>Sun, 10 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Here are the slides and notes from my lightening talk at RubyConf 2013 in Miami.<br /><br /><script async="" class="speakerdeck-embed" data-id="43ffe4202c480131f29a6a06e9254d57" data-ratio="1.2994923857868" src="//speakerdeck.com/assets/embed.js"></script><br /><br />While at RubyConf, I did my first lightning talk!!! I have to give a shoutout thanks to <a href="http://www.twitter.com/saturnflyer">Jim</a> for suggesting it in the first place and a bunch of the other <a href="http://www.arlingtonruby.org/">Arlington Ruby</a> folks for helping to encourage me and make sure I went through with it. I literally felt more and more nauseous as I wrote each letter of my name to give the talk. I walked up on stage and the room was packed! I took pictures of the empty room and posted them below to get a sense of the space and when I walked up on stage the only thing I was thinking was “What was I thinking?! Oh well, I’m here now so let’s do this!)<br /><br />Here’s some more info on the talk that expands on the slides a bit.<br /><br />I chose to talk about mentoring from a n00b’s perspective. I’ve been learning how to code for a little over a year now. Since I started, there have been a lot of people who have been really incredibly helpful. They constantly gave up their time to help answer questions, provide guidance, and give encouragement… and I’m grateful for each of these people but some were easier to learn from than others and that’s ok. Mentoring is hard. It’s difficult for the mentee and it’s difficult for the mentor. Here are some of my tips to being a more effective mentor.<br /><br />1. Understand that at the beginning, I don’t know what to ask and everything sounds like a foreign language. <br />When I first started learning and people would say “what questions do you have?” or “how can I help?” I would just tell them I was fine because I didn’t know what to ask. I just went through the tutorials and kinda understood what was going on. And then, when I sometimes did ask a question, the answer often included words or acronyms that I didn’t understand. And so I really appreciated when people encouraged me to be unabashedly curious and to ask any and all questions that popped into my mind and even interrupt them if I didn’t understand a word they used. <br /><br />2. Don’t go down the rabbit hole<br />In groups of beginners, I often see someone ask a question and the person explaining wants to give a full explanation. Therefore, they will answer the question, explain how it relates to all of these other things, and give additional articles and books to read if they want to know more. This seems really helpful in terms of laying out the complete picture but at some point the person who asked the question is completely lost and generally feel like they’re never going to be able to understand all this coding stuff. So make sure you’re checking in, not going too far unless the person asks additional questions, and let them know that they’ll get to the point where they’ll be able to answer these questions for others.<br /><br />3. Understand if you’re not understood.<br />This one is really challenging. There are times when I ask a question and someone tries to explain the answer to me. They could try explaining it in 15 different ways using all sorts of examples and I just won’t understand but then another person will walk up, give an explanation, and it will just click! Don’t take this personally. It’s okay to ask others how they would explain a concept if you see the person just isn’t understanding you and it’s important to recognize that people learn in different ways and understand different teachers.<br /><br />4. The answer to the dreaded “what should I read?” question<br />In forums, groups and on IRC, I see this all the time. Someone asks “what should I read to learn more?” and they get a flood of responses… books, authors, titles, blogs, everything… but no direction. They leave with a long list of things to look up but without any guidance on why to read certain books or when. So, give direction. Suggest a title but also provide information on why they should read the book, where they should be in their learning process when they read it and what sorts of information they should be hoping to glean from that book.<br /><br />5. Don’t put your fingers on my keyboard<br />This one may be the most challenging for experienced developers. I know that it is painful when you have to say each letter, symbol, and space that a person needs to enter into the terminal. It’s easy to say, “let me just type in a few commands to move us through this piece” or when you encounter an error to want to just grab the computer to quickly research what the solution might be but if you have the patience to tell the person learning what to type or what to search, they’ll learn a lot more.<br /><br />6. Help celebrate the small stuff and motivate to do the big stuff<br />When I first started learning (and even still), everything that I did was so exciting!! But I assumed that my little celebrations would be silly and miniscule accomplishments compared to the more experienced developers. It was both exciting and eye-opening when they helped me celebrate the small things making sure I realized that those small things weren’t so small. I mean, how many times have you celebrated when you got different error message? If no one tells you that is worth celebration, a n00b would never think it’s worth celebrating. And then motivate to do larger things. My local group helped push and encourage me to do a talk at a local meetup and to do this lightning talk. I would have never even considered either thing if they hadn’t suggested it to me.<br /><br />This is a talk that I intend to expand upon and present in the future again to the local Ruby groups here in DC. I’m not sure when exactly that will be, but I’ll be sure to post on the blog when it happens. Thanks <a href="https://twitter.com/search?src=typd&amp;q=%23rubyconf">#rubyconf</a> for all the support when I was up there on stage!</p>
]]></description>
      </item>
    
      <item>
        <title>6, I have 6 Eulers</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-06-6-i-have-6-eulers/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-06-6-i-have-6-eulers/</guid>
        <pubDate>Wed, 06 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Euler 6! This is getting a bit more difficult to post about the Euler problems because I've actually completed all 10 a few weeks ago now. When I go to post, I find that I'm trying to remember what I did, where I was at, and what my thought process was. So, a word of advice, if you're looking to blog about a bug or something you're working on, do it right after you finish figuring it out.<br /><br />Now, onto the problem!<br /><br /><pre>The sum of the squares of the first ten natural numbers is,<br /> 12 + 22 + ... + 102 = 385<br /><br /> The square of the sum of the first ten natural numbers is,<br /> (1 + 2 + ... + 10)2 = 552 = 3025<br /><br /> Hence the difference between the sum of the squares of the first ten <br /> natural numbers and the square of the sum is 3025 − 385 = 2640.<br /><br /> Find the difference between the sum of the squares of the first one <br /> hundred natural numbers and the square of the sum.<br /></pre><br />This one was a good one to roadmap out before I got started. Once I broke it down into a few pieces, it was also not super complicated to solve. So I know I had to find the sum of the squares. And then, the square of the sums. And finally, the difference between the two. Breaking it up into the three pieces also lent itself nicely to writing tests because I wrote tests for each of those three pieces and then a test set for the numbers up to 10 and a test set for the numbers up to 100. Here are the tests:<br /><br /><pre>require 'problem6/problem6'<br /><br />describe 'up to 10' do <br />  it &quot;finds the sum of the square of the first ten numbers&quot; do     <br />    expect(Problem6.sum(1..10)).to eq 385<br />  end<br /><br />  it &quot;finds the square of the sum of the first ten numbers&quot; do<br />    expect(Problem6.square(1..10)).to eq 3025<br />  end <br /><br />  it &quot;finds the difference between the sum of the square and the square of the sums&quot; do <br />    expect(Problem6.difference(1..10)).to eq 2640<br />  end<br />end<br /><br />describe 'up to 100' do <br /><br />  it &quot;finds the sum of the square of the first one hundred numbers&quot; do <br />    expect(Problem6.sum(1..100)).to eq 338350 <br />  end<br /><br />  it &quot;finds the square of the sum of the first one hundred numbers&quot; do <br />    expect(Problem6.square(1..100)).to eq 25502500<br />  end <br /><br />  it &quot;finds the difference between the sum of the square and the square of the sums&quot; do <br />    expect(Problem6.difference(1..100)).to eq 25164150 <br />  end <br />end<br /></pre><br />And here's the code. You'll see each of the three pieces and how they work together. And you actually don't even need the three pieces. (Looking at it again now as I post, I'm seeing that the question only asks for the different so you don't even need to define the sum and the square separately.) For me, when I originally did this, it was easiest for me to define each to visualize it better but now I see that was unnecessary and the final piece is really the only thing I need.<br /><br /><pre>module Problem6<br /><br />def self.sum(number_set)<br />  sum = (number_set).map { |i| i<em>i }.reduce(:+)<br />    #put here the sum of squares of the numbers<br />  return sum<br />end<br /><br />def self.square(number_set)<br />  square = (number_set).reduce(:+)**2<br />    # put the square of the sum of the numbers<br />  return square<br />end<br /><br />def self.difference(number_set)<br />  difference = (number_set).reduce(:+)**2 - (number_set).map { |i| i</em>i }.reduce(:+)<br />  return difference<br />end<br /><br />puts Problem6.difference(1..100)<br /><br />end<br /></pre><br />If you wanted to keep each of the three parts, this is what the code would look like:<br /><pre><br />module Problem6<br /><br />def self.sum(number_set)<br />  sum = (number_set).map { |i| i*i }.reduce(:+)<br />    #put here the sum of squares of the numbers<br />  return sum<br />end<br /><br />def self.square(number_set)<br />  square = (number_set).reduce(:+)**2<br />    # put the square of the sum of the numbers<br />  return square<br />end<br /><br />def self.difference(number_set)<br />  difference = square(number_set)-sum(number_set)<br />  return difference<br />end<br /><br />puts Problem6.difference(1..100)<br /><br />end<br /></pre><br />The primary difference is that, instead of taking the information for the difference and repeated all that code, you are taking the result of the sum method and the result of the square method to find the difference.</p>
]]></description>
      </item>
    
      <item>
        <title>The One Where I Get a Mentor</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-04-the-one-where-i-get-mentor/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-04-the-one-where-i-get-mentor/</guid>
        <pubDate>Mon, 04 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I am excited to announce that I’ve been selected as one of the first mentees for the new <a href="http://arlingtonruby.org/#mentorship" target="_blank">Arlington Ruby mentorship program</a>! There is a lot of informal mentoring that goes on in Ruby communities which is really amazing, but sometimes it’s really difficult to get a mentor. Sure, there are lots of people you can ask questions to but having a more formal mentor is different. Knowing that time and dedication are required also makes it more difficult to ask someone to commit to you in that way. It involves both the mentor and mentee developing goals for what they want to learn and both people are invested in the relationship and progress.<br /><br />Arlington Ruby has recently formalized their mentorship program. The goal of the program is not just to connect new programmers with experienced ones and it is not to just benefit the two people involved. The program involves peer mentoring and a lot of thought into how the mentors and mentees will additionally contribute to the rest of the community. <a href="http://arlingtonruby.org/#mentorship" target="_blank">You can check out the official guidelines here.</a> In the meantime, I’m super excited to have <a href="https://twitter.com/crsexton" target="_blank">Chris Sexton</a> as my mentor!! For the next six months, I’ll ask him hundreds and hundreds of questions (he may not know what he’s gotten himself into) and I’m looking forward to developing some goals and posting about my progress and what we work on here.<br /><br />Thanks <a href="http://www.meetup.com/Arlington-Ruby/" target="_blank">Arlington Ruby</a> for putting some serious thought into how to continue to make the Ruby community even better. Hopefully other Ruby groups will copy this format and it’ll become a way to build stronger local communities for all of us.<br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>A Day in the Life of LivingSocial</title>
        <link>https://www.daydreamsinruby.com/blog/2013-11-01-a-day-in-life-of-livingsocial/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-11-01-a-day-in-life-of-livingsocial/</guid>
        <pubDate>Fri, 01 Nov 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>On Wednesday, I had the opportunity to shadow at <a href="https://twitter.com/LivingSocial" target="_blank">LivingSocial </a>with <a href="https://twitter.com/tpitale" target="_blank">Tony Pitale</a>. Tony is awesome. He was a coach at the first <a href="http://www.railsgirlsdc.com/" target="_blank">RailsGirls</a> workshop and really enjoys teaching (which is good for me because I enjoy asking a gazillion questions). <a href="https://www.livingsocial.com/" target="_blank">LivingSocial</a> is, by far, the largest company I have shadowed at so far. A lot of the initial part of our day just focused on looking at different tools that LivingSocial uses and how the company is structured.<br /><br />There are over 100 developers that work for LivingSocial, which to me is interesting to think about in terms of culture. I’ve met with some smaller teams so far, teams that almost all work from one office, teams that work entirely remotely, and the in between but none with the sheer mass of developers that LivingSocial has. It was really informative for me, especially as I look at different company cultures as a job applicant, to learn about how tasks are determined, how teams communicate with one another, how standups work, and what sorts of professional development and peer learning opportunities exist at their size.<br /><br />LivingSocial has a lot of different engineering teams. Each team is responsible for one to a few apps. That team is responsible for knowing all the logic of that application’s purpose and also helps different teams work on different code without stepping on toes, interfering with others, etc. There are a ton of different applications. In order for the applications to communicate with one another, a lot of synchronous API calls are utilized. This means, basically, that when an event happens, the event needs information from a different application in order to continue and make the process happen. There are also asynchronous API calls for other types of events and application communication.<br /><br />Finally, LivingSocial uses a ton of different tools to measure and provide information about what’s happening. To just name a few we looked at were graphite, rearview, new relic, hive, and kibana. Each has it’s own purpose and tracks something different. The really cool thing about looking at all of these different tools was figuring out how they are used to see what’s happening. For example, when an alert, error, or bug report comes up, you can go into these tracking tools to get more information on what is happening and also to make improvements like site or transaction speed.<br /><br /><b>Other smaller things I learned:</b><br />*If you drag the icon of your sublime text file into the terminal, it’ll put the file path and you can run the file!<br />*Serializers. What interesting pieces of applications. Serializers say when you take a record out of a database, these are the attributes that we want back in JSON. They’re good to use when you’re building an API. You use something like serializers so that you don’t have to make a class with a method as_json which defines what would get returned as JSON. (Serializers relate to an interesting conversation I had with <a href="https://twitter.com/saturnflyer" target="_blank">Jim Gay</a> about presenters and what presenters are used for. As I learn more about rails, it’s also been really interesting to see how you can continue to break out these pieces of information to make cleaner, more organized code.<br />*when TDDing something, you can also use it to think as a design helper. If your test for a specific item is getting to large or crazy, it’s probably time to break it into different pieces and look at the code design a bit.<br />*A good way to organize TDD tests are by thinking through the logical order. So the test order should be setup, execution (thing you want to run), assertion (event did happen), teardown. <br /><br /><br />Overall, a really interesting day at a really interesting company with a really interesting setup and a really interesting teacher!!</p>
]]></description>
      </item>
    
      <item>
        <title>On Accomplishing Goals</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-30-on-accomplishing-goals/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-30-on-accomplishing-goals/</guid>
        <pubDate>Wed, 30 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I've always been a listmaker. I use <a href="http://evernote.com/" target="_blank">evernote</a> to take ideas and things down. I make lists for everything and I keep a running weekly to do list for what needs to be done. I have it listed as Monday, Tuesday, Wednesday, etc. through weekend with an &quot;other&quot; underneath for things that should be scheduled in future weeks. On Sunday every week, I look at my upcoming week, my meetings, and my projects and try to balance my days. I've done this with every job and every project I've ever done. <div><br /></div><div>To do lists for coding and development are way more difficult. I LOVE crossing things off of my to do list, and when your to do list involves coding projects, you are just less likely to cross stuff off your list, let alone be able to cross a bunch of things off your list. So, to help with this, I've also been making 6-8-week goal chunks. For example, at the beginning of August, my first set of goals included finishing a few specific tutorials, &quot;building something&quot;, and making a decision about if, after the 6 week, I would continue working on my former startup or continue doing just development and stop working on that site (the &quot;former&quot; suggests what I decided to do).</div><div><br /></div><div>I was super excited this time around because I accomplished almost all of my 8 week goals in just 5 weeks! These goals included establish a blog, post on the blog often (at a minimum twice per week), build something that teaches me some javascript and jQuery, shadow at a few companies, learn how to and then build a technical resume, and speak at a ruby meetup. The only goal currently not accomplished is get a job... so, I'm still working on that one. But, it looks like it's time to set some new goals and maybe think bigger for the next set.</div></p>
]]></description>
      </item>
    
      <item>
        <title>Getting started with jQuery and JavaScript</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-29-getting-started-with-jquery-and/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-29-getting-started-with-jquery-and/</guid>
        <pubDate>Tue, 29 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This week I started learning some jQuery and JavaScript. They're good skills to have and ones I can continue to expand upon once I know the basics. For me, the best way to learn is by doing. I decided I would design a memory game with cards that flipped over, related to the university of Michigan that we could potentially use to engage alumni at game-watchings. When you're new to something, I believe there is doing and doing. As I've mentioned before I'm still in my tutorial rage stage so I really didn't want to do another tutorial to build something in JavaScript.<br /><br />I naively thought I could just build this memory game as I went. Well, I mapped out the game, figured out all the pieces and the different logic that needed to take place. Looking at all the parts, I realized that I had no idea where or how to start. So, I came up with a new plan. I started by watching some <a href="http://teamtreehouse.com/home">Treehouse</a> videos. I actually kinda dislike watching tutorial videos but I’ve found that if I take notes at the same time, then I am able to absorb some of the information. So I watched a bunch of the Javascript series and a little bit of the jQuery series. I then searched for getting started with Javascript and same with getting started with jQuery and did some more reading. I also did some searching and reading on jQuery and Rails since I was building my game into a Rails application.<br /><br />Once I felt like I understood some of the basics, I googled and searched in github for memory games using Javascript and jQuery. I did this when I started doing the Project Euler problems as well. For the first few, I really had no idea how to structure things or where to begin, so I would search the problems, find 4 or 5 different solutions, walk through each one to understand how different people solved it and take one of their approaches to move forward. I did the same thing with the memory game. Since it seem sot be a popular starter project for people learning Javascript, I looked over how 5 or 6 people put the game together, how many js files they built and how they structured the information. I walked through each thoroughly and then chose one to build my memory game off of and now I’m starting to customize it based on the foundation that I borrowed from someone else. If you’re curious about the foundation I used, <a href="http://cmar.github.io/octomemory/">check out this awesome memory game</a>.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Ruby versus Rails</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-27-ruby-versus-rails/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-27-ruby-versus-rails/</guid>
        <pubDate>Sun, 27 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This last week, I did my first tech presentation! I presented to the Arlington ruby group on the difference between ruby and rails so I figured I'd do a post on it as well. <br /><br />When I first started learning ruby on rails, I had no idea they were two separate things. I went to a workshop, built something cool, and continued looking at tutorials from there. I guess I knew some things were ruby tutorials and some were ruby on rails buck didn't fully comprehend the difference. It wasn't until one day, when someone asked me about my learning path, the I realized I had some research to do.<br /><br />So I went home, and looked and everything I found talked about ruby on rails or just ruby. It was pretty difficult to figure out what was pure ruby versus what rails brought to the table. During the presentation, I compared ruby and rails to the <a href="http://www.catan.com/">Settlers of Catan</a> game and expansion packs available (which is what you'll see in the slides which are attached). For those of you who are fans of the real housewives of new jersey, you can also think of it like the original cast/season versus newer seasons. <br /><br /><br /><br /><br />So, what's what....<br /><br />Well, to start, ruby is the base. It is a programming language like python or php. And you can use different stuff on top of ruby. You can use rails, but you can also build an apication with ruby and node or ruby and backbone, etc. <br /><br />Rails is built on ruby. It is an open source web application framework. Rails are like the other seasons of housewives... Where new characters are introduced and original character are enhanced by the new characters. Take Teresa and melissa for example. Teresa has been there from the beginning but when melissa joined the cast, it allowed for more flexibility, more storylines and a whole new set of drama. If you don't watch housewives, but play catan, Rails is like an expansion pack. Just like in all of these versions of settlers, most of them use all or some of the pieces of the original settlers to build new versions that are more flexible, give you more game options, etc.<br /><br />So here are some of the basics... in settlers, the original, you’ve got some basics like the resource map, the resource cards, dice, houses, roads, settlements, etc. Housewives is the same way... Think of the original cast with Teresa, Caroline, and Jacqueline set in Jersey. In ruby, you have the base of an object-oriented programming language. It also uses gems and something called IRB.<br /><br />To go a little more into each of those things, IRB is interative riby. It’s a way to try things out using the command line. you can get to irb by typing irb into your command line. The command line will change a bit. To see how this works try typing <code> 2+2 </code> and press <code>enter</code>. You'll see IRB does the math for you. Now do <code>Teresa=3</code> and <code> enter </code> and then <code>Teresa*3</code> then<code> enter</code> and you'll get nine. You just set the variable Teresa to the number three and then used it to do some math. There are lots of different things you can do and test in IRB. I’m still getting the hang of how to use it really effectively while coding.<br /><br />The other thing I mentioned were gems. Gems are a packaged library or application. They are code grouped together to allow easy integration of certain functionality. There are lots of gems. And rails is a gem. Some gems I've used include Ransack which is an easy way to integrate search into a site and bootstrap which is a design gem that adds css and some prettiness.<br /><br />Okay, so then what does rails add… Rails is like the pieces that come in the expansion pack or in new housewives seasons. So, for example, in seafarers, you get additional water pieces, ships, etc. that allow you to have different boards and built off of the original settlers. In housewives, we got the addition of joe, melissa, and kathy. <br /><br />Rails follows the rules of MVC and DRY. It uses the Rails console, can query a database, and has commands like rails generate or scaffold which give you out of the box builds.<br /><br />Okay, so there’s a lot there. To start, MVC is model, view, controller. This is a rails pattern.The model handles the logic. The controller handles the actions of requests and responses, clicking to navigate, form submissions, etc. and the v is the view or what you actually see. In ruby there’s no MVC pattern. This is a little confusing but Models and controller are just classes that make up the state and behavior but with the addition of view, it creates a pattern that rails follows.<br /><br />DRY stands for don’t repeat yourself. Basically, that means if an element is being used over and over again, rails lets you group the code into something (like a module or helper) and continue to use it by including that item instead of rebuilding the element each time.<br /><br />The other main thing is scaffolding. Scaffolding is a way to have an out of the box solution. Think of it like a house. Ruby is the housing materials and rails is the blueprint for the house. You can fill the house with different furniture, paint it different colors, etc. but if you want to build another house, you can use the same blueprint and go from there.<br /><br />Finally, in thinking about the view part of rails, rails combines ruby with HTML, CSS, and javascript to create a web application. I think the best way to show this is with an example, so this is an example of form_for code. Put in the form code. form_for is basically a method that is view code to build a simple form on a website. This form is just asking for name, email, and password. It is view code which exists in rails, but doesn’t exist in ruby.<br /><br />So, that’s a bunch of information on whats in rails and whats in ruby. I’m still learning about the differences, I know there are a lot of additional methods available with the addition of rails that aren’t available in just ruby. So, what to learn first? Personally, I think it is best to learn ruby first and then add rails. I think doing that makes it more clear what is ruby and then what is rails. However, the tutorials available for ruby on rails, I think, are much better because they are more interesting and you’re actually seeing something be built as you go through a tutorial. The ruby tutorials I’ve found cover lots of good basics, but I found them a little difficult to get through. And don't forget... if you get frustrated, just flip the table and you'll feel a little better.<br /><br /><br /><br /><b>You can find the slides here:</b> <a href="http://www.slideshare.net/asheren/ruby-versus-rails">http://www.slideshare.net/asheren/ruby-versus-rails</a><br /></p>
]]></description>
      </item>
    
      <item>
        <title>Getting started... Tools to begin with</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-23-getting-started-tools-to-begin-with/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-23-getting-started-tools-to-begin-with/</guid>
        <pubDate>Wed, 23 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>The first tutorial is always the most difficult. As you're getting involved in the community, one of the most frustrating places to be is when you are so basic that you don't know anything and that you don't even really know how everything connects. But, that being said, these are the basics, and some of the more mind-numbing stuff at the beginning builds the foundations moving forward.<br /><br />My recommendation is to learn the ruby basics before adding in rails. I didn't do it this way… I did ruby on rails tutorials and then went back and did some more ruby stuff. Doing it this way, I think, helps solidify the basics. <br /><br />Start with <a href="http://www.tryruby.org">tryruby.org</a>. Try ruby probably won't take you very long but try to take your time on it. When I started learning, I was so anxious about knowing stuff, that I rushed through the early stage things like try ruby when I should have been taking notes, really comprehending everything, and doing some additional googling on each term. If you finish try ruby quickly, I'd move on to reading <a href="http://www.rubyinside.com/media/poignant-guide.pdf">why's (poignant) guide to ruby</a>,  and then finally the <a href="http://tutorials.jumpstartlab.com/projects/ruby_in_100_minutes.html#ruby-in-100-minutes">Jumpstart Labs Ruby in 100 minutes</a>. <br /><br />If you've never used terminal, the command line, or a text editor (which I hadn't before I started learning), then before moving on to Ruby in 100 minutes, do a little googling on what is the command line and how to use it, what is the terminal, and what is a text editor. One last note, don't let those last things scare you! The first time I opened the terminal and typed something on the command line, I thought I was going to break my computer and erase my whole hard drive accidentally (I still think that sometimes, mostly when I'm doing stuff related to git). All I knew from the command line was that it was for people who actually knew computer stuff. This is not the case. You will not totally destroy anything. So do some research and jump in there without fear.<br /><br />Happy Learning!</p>
]]></description>
      </item>
    
      <item>
        <title>Halfway there. Euler 5.</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-22-halfway-there-euler-5/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-22-halfway-there-euler-5/</guid>
        <pubDate>Tue, 22 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Euler 5! Phew, so, this marked my halfway point through the 10 problems I decided to do in Project Euler.<br /><br />So, here is the problem:<br /><br /><pre>2520 is the smallest number that can be divided by each of the numbers <br /> from 1 to 10 without any remainder.<br /> What is the smallest positive number that is evenly divisible by <br /> all of the numbers from 1 to 20?<br /></pre><pre></pre>For this problem, I actually solved it in a really ugly, awful way and then went back to refactor . I can't remember exactly but I think the ugly way involved taking a range of numbers, multiplying all of them and then seeing which was the smallest that had a remainder of 0 for each of the numbers... whatever it was, it was super complicated. Anyway, so first, the tests:<br /><br /><pre>require 'problem5/problem5'<br />describe 'lowest common multiple' do <br />  it &quot;find the smallest number that can be divided by 1 through 10 with no remainder&quot; do <br />    expect(Problem5.divided_by(1...10)).to eq 2520<br />  end<br /><br />  it &quot;finds the smallest number that can be divided by 1 through 20 with no remainder&quot; do <br />    expect(Problem5.divided_by(1...20)).to eq 232792560<br />  end<br />end<br /></pre><br />At this point, if you've been reading the Euler series of this blog, you'll notice a pattern to all of the tests. This may not be the most sophisticated way to execute the tests since rspec can do a lot of cool things, but using the same format worked for and was a way I became comfortable with seeing tests formats, running the tests, etc.<br /><br />Now for the answer:<br /><pre>module Problem5<br /><br />def self.divided_by(number_range)<br />  list = (number_range).inject(:lcm)<br />  return list<br />end<br /><br />puts Problem5.divided_by(1..20)<br /><br />end<br /></pre><br />so, once I started reading the ruby docs, I noticed there was a greatest common denominator and a least common multiple method with an integer. Looking into those, the least common multiple method was a perfect, simple way to solve this problem. The inject plus LCM method on an integer basically takes a list and finds the lowest common multiple of that range of numbers.</p>
]]></description>
      </item>
    
      <item>
        <title>A Day in the Life of Spree</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-20-a-day-in-life-of-spree/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-20-a-day-in-life-of-spree/</guid>
        <pubDate>Sun, 20 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>A few weeks ago, I wrote about my awesome experience shadowing at Treater. This past week, I was able to shadow at <a href="https://twitter.com/spreecommerce">Spree</a>. Spree has a great space in Bethesda and does some really interesting things. Spree is an open source e-commerce platform. I was able to look over the shoulders of <a href="https://twitter.com/LBRapid">JD</a> and <a href="https://twitter.com/wesleyketchum">Wes</a> while there and ask LOTS of questions. Here are some highlights of what I learned…<br /><br />A lot of the work Spree does (or at least was working on that day) is related to APIs. Having never had the chance to work with APIs (but conceptually knowing a bit about them), they explained to me the different parts of an API, how they have used them to help coordinate purchases and logistics. I also learned about things like query limits and some interesting facts about testing APIs.<br /><br />A few other random tips I picked up included bundle console, which is an irb session with access to gems in a gemfile. This is most useful when you want to test something outside of a rails application, and therefore don’t have access to rails c. Also, a github tip, when you’re in github, if you press “t”, you can search the repo!<br /><br />Finally, I didn’t get much into this but one thing I saw was a little bit of work being done in backbone.js. I don’t know much about backbone, but it was interesting to see it “in action” a bit.<br /><br />Overall, my day at <a href="http://spreecommerce.com/">Spree</a> was really interesting. They’ve got a great team and it looks like they’re doing some really interesting work.</p>
]]></description>
      </item>
    
      <item>
        <title>Euler 4! Onwards and upwards!</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-17-euler-4-onwards-and-upwards/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-17-euler-4-onwards-and-upwards/</guid>
        <pubDate>Thu, 17 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>As I talk about doing these Project Euler problems, I increasingly realize how much they helped me crystalize certain concepts in the last few weeks. I knew they were helping me solidify some coding skills, but honestly, I wasn't sure if spending time on these was a waste of time and if I should have just continued to build things instead. One originally unseen benefit of having these problems done is being able to use them as a template to identify other things. For example, I solved my eulers by testing in rsepc and writing in ruby. The past few weeks, I've had more conversations about other testing languages including cucumber and minitest. I read about them first, but then I've searched for other people who have solved eulers and tested first using these different test suites. Because I'm familiar with the problem, I'm more easily able to identify with the example and look at how they wrote their tests.<br />Now, onto Problem 4.<br /><pre>A palindromic number reads the same both ways. The largest palindrome <br />made from the product of two 2-digit numbers is 9009 = 91 × 99.<br /><br />Find the largest palindrome made from the product of two 3-digit numbers.<br /></pre><br />First the tests:<br /><pre>require 'problem4/problem4'<br /><br /><br />describe &quot;largest palindrome&quot; do        <br /><br /> it &quot;finds the largest palindrome of 2 digit numbers&quot; do<br />   expect(Problem4.answer(10...100)).to eq 9009<br /> end<br /><br /> it &quot;finds the largest palendrome of 3 digit numbers&quot; do<br />   expect(Problem4.answer(100...1000)).to eq 906609<br /> end<br />end<br /></pre><br />Now for the solution code:<br /><pre>module Problem4<br /><br />def self.answer(largest_palindrome_range)<br />  max = 0<br />  (largest_palindrome_range).each do |a|<br />    (a...largest_palindrome_range.end).each do |b|<br />       product = a*b<br />    max = [max, product].max if product.to_s == product.to_s.reverse<br />    end<br />  end<br />  return max<br />end<br /><br />puts Problem4.answer(100...1000)<br />end<br /></pre><br />So, first, I thought about a palindrome. A palindrome is the reverse of itself. So, I took the range we were testing and took each number to get a and then did the same from a to the end of the range to get b. Then I multiplied all of the resulting 2 number possibilities. Finally, in order to find the maximum, you take the product, convert it to a string and then see if it equals the reverse of the string.<br /><br />This one was really tough for me. I knew about how to find the max and I knew how to check if it was a palindrome and reversing the string, but the middle section of finding the products via the range given was pretty challenging for me to wrap my head around.<br /></p>
]]></description>
      </item>
    
      <item>
        <title>Learning to Code: 3 Pieces of Advice</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-11-learning-to-code-3-pieces-of-advice/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-11-learning-to-code-3-pieces-of-advice/</guid>
        <pubDate>Fri, 11 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Getting started is tough. There are loads of resources out there to learn how to code but the most difficult part is figuring out what to do, when. I'll be periodically posting my advice on the best path... this isn't the path that I took necessarily, but the one I wish I had looking back on all the tutorials I accomplished, things I did, and meetups I went to. First, a few pieces of advice.<br><br>1. If you really want to learn to code, you need to do something almost every day.<br>I started to learn to code not because I thought I would want to do it as a career, but because I was founding a startup and knew I could make better business decisions if I had a basic understanding of the technology being used. As a founder, I had to weigh what I spent my time on and simply couldn't be coding every day. As a result, I set aside Rails Girls Tuesdays and Thursdays to code and make all tech-related decisions. My progress was very very slow during this time. I would lose momentum, forget where I was at in a tutorial, and it just took longer for things to sink in. For the last few months, I have been coding every day and every night. I've tripled my amount of knowledge in a very short period of time.<br><br>2. Set goals.<br>Setting goals is important in anything.... learning how to cook, changing careers, advancing in a current career, etc. Setting goals keeps you accountable and motivated because you are constantly checking in on if you're accomplishing what you set out to do. I'm a list-maker and a goal setter so I'm very comfortable with this. My advice is to set small goals. For example, if I was using Thursdays to code, I would sit down on Wednesday and say tomorrow, these are the things I want to accomplish. Now that I am coding full-time, I set new goals every 4 weeks and have them written in a place I look often so that I am always reminded about what I set for myself.<br><br>3. Get involved in the community.<br>No one can learn to code completely on their own. There are points when you'll get stuck. There will be times where you need someone to explain something in a way a book or tutorial can't quite get you to understand. If you're not careful, you'll go through the motions of a tutorial &quot;do this. Next do that.&quot; without fully understanding what is going on. When I first started attending meetups, I hardly understood anything. I was lucky if I wasn't lost after the first five minutes of whatever 45 minute presentation was going on. Sometimes I was fascinated, sometimes I was really bored, but I was there. I was listening to words and phrases. I wrote down phrases or names of things that seemed important to look up later, and I got to know people who would help me out a lot as I learned more. Going to meetups can be intimidating... people make jokes you pretend to understand, there are usually very few women in attendance, and most of the time is spent with you thinking silently &quot;geez, I really wish I knew what the heck they are talking about!&quot; but the best thing to do is to keep going because gradually, I started to understand more and more, was less shy about asking questions, and understood the jokes being made.<br><br>Now, for step 1. I LOVED the way I started... I started by attending a Rails Girls workshop in DC. If you can, start by attending  longer workshop (a day if possible). There are a lot of different opportunities and they are all great. Check out <a href="http://www.railsgirls.com/">Rails Girls</a>, <a href="http://workshops.railsbridge.org/">Rails Bridge</a>, and if one of those isn't happening in your area, try to find a women's tech meetup... they might know the resources available. There was a lot I didn't understand, but I think attending a workshop makes other steps a lot less scary.</p>
]]></description>
      </item>
    
      <item>
        <title>Eulers Continued: Problems 2 and 3</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-09-eulers-continued-problems-2-and-3/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-09-eulers-continued-problems-2-and-3/</guid>
        <pubDate>Wed, 09 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Continuing with the Project Euler problems, here's my solution for numbers 2 and 3.<br /><br /><b>Problem 2</b><br /><br /><pre>Each new term in the Fibonacci sequence is generated by adding <br />the previous two terms. <br />By starting with 1 and 2, the first 10 terms will be:<br />1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...<br />By considering the terms in the Fibonacci sequence whose <br />values do not exceed four million, find the sum of the even-valued terms.<br /><br /></pre><br />First, here are the tests that I wrote:<br /><pre> </pre><pre>require 'problem2/problem2'<br /><br />describe 'solution' do <br /><br />  it &quot;sums the first two terms to generate the third term&quot; do<br />   expect(Problem2.fib(2)).to eq 1<br />  end<br /><br />  it &quot;sums the even-valued terms up to the limit&quot; do<br />    expect(Problem2.fib(4000000)).to eq 4613732<br />  end<br />end</pre><br />Similar to the tests written for the first problem, we want to check the answer and put the actual numbers in the test and then write the code so that it doesn't need a number, it just needs the argument to be noted and the argument in the code pulls the fixed number arguments from the test in order to run and pass. The Problem2 is the module and fib is the method.<br /><br />So, onto the code:<br /><pre>module Problem2<br /><br />  def self.fib(limit)<br />    arr = [] <br />    a,b = 0,1 <br />  <br />   while a &lt; limit <br />      arr &lt;&lt; a <br />      a, b = b, a + b <br />    end<br /><br />    sum = arr.select { |i| i.even? }.reduce(:+) <br />   <br />  end<br /><br />  fib(4000000) #sets the limit<br />end</pre><pre> </pre>To solve this problem, first, I decided to create an empty array, then I needed to put stuff in the array (that's the second line). The question gives a certain number as the limit (4000000) so while the number is under the limit, we want to push the new number onto the end of the array (<code>arr &lt;&lt; a</code>). So that create the action of what will happen. Then we need to create the formula that will produce the number (the recursion formula). And that's that part of the problem. Next, once we have the Fibonacci sequence in the array, we need to solve the second part of the problem where we find the sum of the even-valued terms. In order to find the sum, we take the array and use the select method, passing the array through a block that looks for which numbers are even, selecting those numbers and then using the reduce :+ method to add those numbers together. Finally, <code>fib(4000000) </code>sets the limit of what we are looking for to put the result.  One note about solving these problems. I've started outlining each step at the top of the problem to give myself a short roadmap to work from and then once I have the problem clarified in my mind and a roadmap worked out, I can work through each part until I find the solution and get working code.  <b> </b><br /><br /><b>Problem 3</b><br /><br />I include both problems in this entry because my solution to problem 3 is a bit of a cheat. But before we go there, here's the problem:<br /><br /><pre>The prime factors of 13195 are 5, 7, 13 and 29.<br />What is the largest prime factor of the number 600851475143 ?</pre><br />Here are the tests I wrote:<br /><br /><pre>require 'problem3/problem3'<br /><br />describe 'answer' do <br /><br />  it 'will have the largest prime factor for 13195' do<br />    expect(Problem3.prime(13195)).to eq 29<br />  end<br /><br />  it 'will have a largest prime factor for 600851475143' do<br />    expect(Problem3.prime(600851475143)).to eq 6857<br />  end<br />end</pre><pre> </pre>And here's the code:<br /><br /><pre>require 'prime'<br /><br />module Problem3<br /><br />  def self.prime(num)<br />    primes = Prime.prime_division(num)<br />    primes.last[0]<br />  end<br />end<br /></pre><br />So, there's a Ruby library called Prime which makes doing anything with prime numbers really simple. First, I required that library. The I just defined primes and used prime_division which divides the number to determine which the prime numbers are. Finally, I took the last number in the list which would be the largest number. Really simple and straight forward.</p>
]]></description>
      </item>
    
      <item>
        <title>Project Euler all DAY</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-04-project-euler-all-day/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-04-project-euler-all-day/</guid>
        <pubDate>Fri, 04 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>This week I took a break from building things to go back to the basics a bit. I've been having trouble getting a good handle on the different parts of Ruby (ie- blocks, hashes, etc.) and also struggled at the code retreat last weekend when I had to write code for tests in order to make them pass. Recognizing this as we significant weakness, I decided to spend the week tackling Project Euler problems.<br /><br /><a href="http://projecteuler.net/problems" target="_blank">Project Euler</a> problems are math problems that you then solve using code. First, I found that they help me take an issue and think about different approaches. Second, they are great for practicing test-driven development. Third, they create additional challenges. For example, you can solve the problem and then go back and refactor to make your code even better OR I've had a few amazing friends/mentors this week look at my solutions and give me additional constraints or challenges to make my code even cleaner and better or explore a different method to solve the problem. There isn't one solution to these problems and if you google &quot;euler ruby&quot; you'll find dozens of responses.<br /><br />I'll walk through the setup and first problem.<br /><br />For me, the setup was actually pretty confusing, although really simply once I received some direction. It may seem basic, but I couldn't find these instructions anywhere so I'm writing them to hopefully help others get set up.<br /><br />I wanted one euler folder with each problem in it's folder. I originally put both the problem1.rb and problem1_spec.rb files in the same folder but then rspec wouldn't run! It turns out that rspec looks for a lib folder in order to run it. The simplest way around this was to create a lib folder and a spec folder in my euler folder. The lib folder contains all the problem files and the spec folder contains all the spec files. To run the tests, I typed into the command line: <code>$rspec spec/problem1_spec.rb</code> and to run the actual file I had to type <code>$ruby lib/problem1/problem1.rb</code>. Finally, in order to test my code, I have been running the answer through IRB. To get to IRB, you simply type <code>irb</code> into the terminal and then you can write each line of code to see if you get the correct answer. Finally, at the top of the spec, we need to require the problem so that the tests finds the code file.<br /><br />Euler Problem 1:<br /><br /><code>If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.</code><br /><br />First, I'll start with the tests that I wrote. I use rspec:<br /><br /><pre>require 'problem1/problem1'<br /><br />describe 'solution' do<br /><br />it &quot;sums the multiples of 3 and 5 under 10&quot; do<br />    expect(Problem1.multiples(10)).to eq 23<br />end<br /><br />it &quot;sums the multiples of 3 and 5 under 1000&quot; do<br />    expect(Problem1.multiples(1000)).to eq 233168<br />end<br /><br />end<br /></pre><br />This test format is pretty much what I have been using for all of the Euler problems and I have found it pretty useful. To start the test, you have to describe something and then describe it's characteristics. So, since we are given the answer, we are able to hard code (put in the actual numbers) the test. The test says that for the sum of the multiples of 3 and 5 under to, we should expect that problem1(module)'s multiples(method) of 10(parameters/argument) to equal 23 (because that's what the problem tells us. I did a similar format for the next test and plugged in the final number 233168 once I got the code working.<br /><br />Now for the code:<br /><br /><pre>module Problem1<br /><br />  def self.multiples(stop_counting)<br />    (1...stop_counting).find_all { |i| i%3 == 0 || i%5 == 0 }.reduce(:+)<br />  end<br /><br />end<br /></pre><br />So, first we defined what the module was. Then, we were trying to find the multiples of two numbers (3 and 5) up to a certain number. I put <code>self</code> on the method definition because we are calling the method on the module. I put <code>stop_counting</code> as the argument which helps the tests pass, because in the tests we put at what number I stop counting (10 in the first example and 1000 in the second example). By defining the argument as <code>stop_counting</code>, we have more flexibility on the tests to plug the numbers into the tests and not the code (I think of this like an excel document where you have you assumptions worksheet. When you have an assumptions worksheet, you can change the number there as your assumptions change and since the rest of the spreadsheet is built on those assumptions, the numbers used in the formulas on other worksheets will automatically change as opposed to having to go through each worksheet and redo all the math manually). So, the code says to look at all the numbers from 1 until <code>stop_counting</code> and then find all the numbers (I think you can also use <code>.select</code> here) that have a remainder of 0 when using the modulus <br />(or modulo) which is the operation used to find the remainder of dividing one number by another, in this case either 3 or 5. Then the reduce method takes all the remaining numbers and using the :+ operator, adds those numbers together to get the sum.<br /><br />Also, while going through this process, I paused in the middle to complete <a href="http://rubymonk.com/" target="_blank">Ruby Monk</a>. While initially I was like, &quot;OMG, I CANNOT do another tutorial&quot;, Ruby Monk was really helpful and I wish it had been recommended to me two months ago. As opposed to the traditional ruby tutorial that builds a site of some sort, Ruby Monk really explains the terms and parts that make up Ruby and I feel much more confident in the definitions and grammar of it all now that I've completed it.<br /><br />I'll be posting more problems in the next few days.</p>
]]></description>
      </item>
    
      <item>
        <title>That Home-y Feeling</title>
        <link>https://www.daydreamsinruby.com/blog/2013-10-01-that-home-y-feeling/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-10-01-that-home-y-feeling/</guid>
        <pubDate>Tue, 01 Oct 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p><style><!--  /* Font Definitions */ @font-face  {font-family:"ＭＳ 明朝";  mso-font-charset:78;  mso-generic-font-family:auto;  mso-font-pitch:variable;  mso-font-signature:-536870145 1791491579 18 0 131231 0;} @font-face  {font-family:"Cambria Math";  panose-1:2 4 5 3 5 4 6 3 2 4;  mso-font-charset:0;  mso-generic-font-family:auto;  mso-font-pitch:variable;  mso-font-signature:-536870145 1107305727 0 0 415 0;}  /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-parent:"";  margin:0in;  margin-bottom:.0001pt;  mso-pagination:widow-orphan;  font-size:12.0pt;  font-family:"Times New Roman";  mso-fareast-font-family:"ＭＳ 明朝";  mso-fareast-theme-font:minor-fareast;} .MsoChpDefault  {mso-style-type:export-only;  mso-default-props:yes;  font-size:10.0pt;  mso-ansi-font-size:10.0pt;  mso-bidi-font-size:10.0pt;  mso-fareast-font-family:"ＭＳ 明朝";  mso-fareast-theme-font:minor-fareast;  mso-fareast-language:JA;} @page WordSection1  {size:8.5in 11.0in;  margin:1.0in 1.25in 1.0in 1.25in;  mso-header-margin:.5in;  mso-footer-margin:.5in;  mso-paper-source:0;} div.WordSection1  {page:WordSection1;} --></style>      <br /><div class="MsoNormal">Growing up, I was a part of <a href="http://www.youngjudaea.org/" target="_blank">Young Judaea</a>, a Zionist youth movement that became an integral part of my life. My years in Young Judaea helped me develop leadership skills, community building skills and fostered an appreciation for well-run, interesting, interactive programs/conferences. In Young Judaea, we periodically had conventions (both regional and national), which were weekend-long retreats to bring people together, learn about Zionism and Israel and make governing decisions about the movement. This may sound a little nerdy because it was a little nerdy but it was also awesome! There is nothing like being in a remote-ish place with little cell reception and no internet that promotes togetherness, understanding, and community. I haven’t felt that good about a conference I’ve attended since high school (and I’ve been to a lot of conferences), until this weekend.</div><div class="MsoNormal"><br /></div><div class="MsoNormal">This past weekend, I had the opportunity to be a <a href="http://rubydcamp.org/" target="_blank">Ruby DCamp</a>participant. Ruby DCamp is an invitation-only weekend-long retreat for Ruby developers. The weekend is broken up into 2 parts. Part 1 is a code retreat and part 2 in an open space conference. Both parts were incredibly interesting. During the code retreat, we played <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life" target="_blank">Conway’s Game of Life</a>. The point of the exercise was to practice test-driven development and really take each piece of code step by step. Particiants pair programmed with a different person every 45 minutes and the afternoon sessions introduced additional constraints like no speaking or not being able to use certain code approaches. For me, this was the first time I had ever pair programmed and the first time I had worked on a problem like this. While a little overwhelming, it was also really amazing and fun. I recognized things I need to work on as a new developer but also realized that I can contribute to conversations and determining approaches to solving the problem. Going into this code retreat, I was completely terrified… of failing, of feeling stupid, of having my pair be annoyed that I didn’t know anything. What I discovered was that all my fears were unfounded and I can’t wait to do another code retreat in the future.</div><div class="MsoNormal"><br /></div><div class="MsoNormal">The second part of the weekend was an open space conference. Each morning the group brainstormed possible session topics with the strict requirement that these sessions be discussions and not lectures or talks. We then had about 10 minutes to write all ideas on paper and hang them on a wall and another ten minutes to vote via putting dots on the topic papers we wanted to have sessions on. Each person was allotted five dots. The topics were varied, everything from contributing to open source, to an intro to small talk, to technical interviews and what you look for when you hire (which was particularly helpful for me). There was a newbie session designed specifically to answer questions of the newer coders there. One of the more impactful topics was about imposter syndrome, how and when we feel it, what we do to try to keep it at bay, and ways in which we can help each other. I also loved the session on good code reviews that offered different people’s approaches to reviewing and commenting on other’s code both inside and outside of the workplace. All in all, every conversation was super interesting and there was a rare ability to be vulnerable and honest since the group of people there operated within this unspoken web of trust.</div><div class="MsoNormal"><br /></div><div class="MsoNormal">For me, the most important thing I got out of the weekend was a reassurance that my career path transition is a good choice. I love learning to code, but anytime you try to move to a completely different industry, there are always doubts. I knew my local community was supportive, but what about others? The larger community? Well, it turns out they’re amazing too. Encouraging and nice in every possible way, I feel like every ruby-related meetup or conference I have been to just continues to make me more and more excited about this transition. Thanks to everyone who made the weekend amazing and to <a href="https://twitter.com/elight" target="_blank">Evan Light</a> for organizing. Watch out world, I’m going to be a developer!</div></p>
]]></description>
      </item>
    
      <item>
        <title>A day in the life of Treater</title>
        <link>https://www.daydreamsinruby.com/blog/2013-09-27-a-day-in-life-of-treater/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-09-27-a-day-in-life-of-treater/</guid>
        <pubDate>Fri, 27 Sep 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>One of the challenging things about entering the world of development was that I felt like I came from a completely different universe. I got a degree in political science and near east studies, always thought I was destined for a job in a government agency and then almost accidentally fell into the Jewish nonprofit world and loved it. For years, my job was about created experiences, building community, taking people to coffee… very different than the day-to-day of development. I saw a little bit more of a developer's day-to-day in the startup world, but most of the people I work around are the only tech person on their team. One person responsible for all tech is different than how teams function and what a company culture looks like for startups that are just a tad bit larger. <br /><br />I had the opportunity this past Monday to shadow the dev team at <a href="https://treater.com/" target="_blank">Treater</a> for the day and it was great (Thanks <a href="http://www.twitter.com/JDpagano" target="_blank">JD</a> for giving me the opportunity!). Treater seems like a great place to work and I learned a TON in just the day I was there (including my first look at someone using vim to code instead of sublime text and finally seeing what hipchat is all about). One thing I wanted to highlight was the idea of a scrum meeting to do sprint planning.<br /><br />I had heard of scrum meetings and sprints/sprint planning before but had never had the opportunity to see first-hand what happens at these meetings, how development pieces are discussed and how the next few weeks are planned out. Additionally, I've run a lot of meetings in my life and have always been a part of a hierarchical structure but have always been curious about larger startups with flatter structures. <br /><br />The scrum meeting starts with the scrum master (all this, by the way makes me think of rugby which is really not anything like one of these meetings). This meeting had three parts: review the last sprint, retrospective, and go through the next sprint, all utilizing the company's Trello board. Each part is important and I was impressed by the fact that everything everyone said was acknowledged and considered. The review of the last sprint helped to set additional goals for the current sprint (sprints are two weeks long). After reviewing the last sprint, priorities, deployment dates, and phases were discussed. The retrospective was the most interesting I think. It gave each team member a chance to think about where they were at after the last sprint and address what they themselves or as a team could do better in the upcoming sprint. Finally, the next sprint was reviewed, discussed, and assigned to different people. It was really interesting during the future sprint discussion to see how each part of the team interacted (ie- front-end, back-end, testing, business, etc.). Being a part of the scrum meeting also gave me a really good understanding of what was going on so I could just jump into the code more effectively in the second half of the day.<br /><br />So, if you've never been to a scrum meeting or done sprint planning, that's what they're all about (or at least based on my sample size of 1 company). Hopefully I'll  be shadowing at more companies in the future (if your company is metro accessible and willing to let me shadow for the day, please let me know!).<br /><br />I just want to close by thanking the whole Treater team for being so welcoming and answering all of my questions. I really had a great time and learned a ton!</p>
]]></description>
      </item>
    
      <item>
        <title>Omniauth and environment variables</title>
        <link>https://www.daydreamsinruby.com/blog/2013-09-25-environment-variable-bash-and-omniauth/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-09-25-environment-variable-bash-and-omniauth/</guid>
        <pubDate>Wed, 25 Sep 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>I just started building a new application and decided that I'd like people to sign in via Facebook or Twitter which meant installing the <a href="http://rubygems.org/gems/omniauth-twitter" target="_blank">omniauth-twitter gem</a> (and the omniauth-facebook gem but I'm not quite there yet).<br /><br />My first challenge was to figure out how to keep my secret token a secret. Everyone says you never commit your secret stuff into Github, which makes sense but I didn't know how else to do it. In order to keep the tokens a secret, you need to store them as environment variables on your computer so that they can be called by the application when it is running. I stored my <code>twitter_key</code>; and <code>twitter_secret</code> as environment variable in ~ /.bashrc. Which led to an error of uninitialized omniauth and a timeout. I then learned that environment variables need to be uppercase so I re-saved them as <code>TWITTER_KEY</code> and <code>TWITTER_SECRET</code> (Thanks to <a href="http://twitter.com/betsythemuffin">Betsy</a> for help on this one). This is what it looks like: <br /><br /><pre>export TWITTER_KEY=your_key_goes_here<br />export TWITTER_SECRET=your_secret_goes_here<br /></pre><br />Then I got a different error. When I clicked, &quot;Sign in with Twitter&quot; the /auth/twitter path lead to a 401 oauth::unauthorized. Looking at the trace, the last errors had to do with requesting and receiving the tokens. I tried to see if the key showed up by calling <br /><br /><pre>$ echo $TWITTER_KEY <br /></pre><br />in the terminal and at first it did return, but when I ran the rails console and tried<br /><br /><pre>ENV['TWITTER_KEY'] <br /></pre><br /><br />which should have yielded the same result, I got nil. I also tried utilizing the pry gem to check if the variables were being sourced from my initializer like this:<br /><br /><pre>OmniAuth.config.logger = Rails.logger<br /><br />Rails.application.config.middleware.use OmniAuth::Builder do<br />puts &quot;key: #{ENV['TWITTER_KEY']}&quot;<br />puts &quot;secret: #{ENV['TWITTER_SECRET']}&quot;<br />binding.pry<br /><br />provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']<br />end<br /></pre><br />and also got nil, and finally, I went back into the original window where I called <code> $echo TWITTER_KEY</code> tried again, and it wasn't working. So the issue was definitely that the tokens were not being read in the application.<br /><br />The first solution (which was simple but turned out not to be the actual problem) was that I had been typing source ~/.bashrc into 1 terminal tab and then opening up my server in a different tab (talk about a hand-to-forehead moment but I didn't realize that the environments didn't copy over if you were in the same window but a different tab). When I did that, it worked. Clicking &quot;Sign in with Twitter&quot; lead to the appropriate /auth/twitter path where the user could approve the application. But again, that wasn't the route of the problem. The main issue was that I had to run the source code each time in order for the variable to be loaded into the system.<br /><br />I tried to put the same export lines (the environment variables) as above into ~/.profile instead of in ~/.bashrc. I also put an echo line into ~/.profile:<br /><br /><pre>echo &quot;leading env, yay&quot;<br /></pre><br />Putting an echo line will help see if things are set up correctly. If the shell is loading everything properly, when I open the shell or a new tab, I should see &quot;loading env, yay&quot; at the top.<br /><br />But when I tried ~/.profile, nothing showed up. Then, I put the same echo line into ~/.bash_profile (thanks <a href="http://www.twitter.com/crsexton" target="_blank">Chris</a> for this suggestion!) and that worked! So things were working and set up correctly. To understand it a little better, Chris found <a href="http://superuser.com/questions/320065/bashrc-not-sourced-in-iterm-mac-os-x/320068#320068" target="_blank">this link</a> from a great SuperUser answer. Basically, bash will only source ~/.bashrc or ~/.bash_profile. Bash looks, in order, for ~/.bash_profile, ~/.bash_login, or ~/.profile and sources whichever one it finds first. The solution is to alter the configuration. <br /><br />At the top of ~/.bash_profile put:<br /><code> Export BASH_CONF=”bash_profile” </code><br /><br />At the top of ~/.bashrc put:<br /><code> Export BASH_CONF=”bashrc” </code><br /><br />Then in your terminal window type: <code> $ echo $BASH_CONF </code> and the file that shows up is the one being sourced.<br /><br />And now my omniauth-twitter gem is working (well, at least the first part of the process is complete).<br /><br /><br /><br /></p>
]]></description>
      </item>
    
      <item>
        <title>The Beginning</title>
        <link>https://www.daydreamsinruby.com/blog/2013-09-22-the-beginning/</link>
        <guid>https://www.daydreamsinruby.com/blog/2013-09-22-the-beginning/</guid>
        <pubDate>Sun, 22 Sep 2013 00:00:00 GMT</pubDate>
        <description><![CDATA[<p>Hello inaugural blog post!<br /><br />Welcome to my new blog. Many people reading this may be familiar with <a href="http://en.wikipedia.org/wiki/Impostor_syndrome" target="_blank">imposter syndrome</a>... and that's what I've had for months, a huge amount of self-doubt. I've been &quot;learning&quot; Ruby on Rails for a year now. I put learning in quotes because I feel like I've only really started understanding in the past 8 weeks.<br /><br />My journey started last September at the first <a href="http://www.railsgirlsdc.com/" target="_blank">Rails Girls DC</a> workshop. Well, actually, that's not true. I guess my journey started the previous March at Day of <a href="http://www.fosterly.com/" target="_blank">Fosterly</a>. I had just recently started to get involved in startups in DC, determined to change industries from the Jewish non-profit world I had worked in since college. Day of Fosterly was my first big startup event. I knew very few people and spent most of the day trying to silently self-encourage myself to meet as many people as possible. I had heard a bit about coding and learning to code but since I hadn't taken a math class since high school, assumed I would be way out of my league. So, there I was in line for lunch and happened to meet three awesome individuals: <a href="https://twitter.com/saturnflyer" target="_blank">Jim Gay</a>, <a href="https://twitter.com/polishprince" target="_blank">Piotr Steinnger</a>, and <a href="https://twitter.com/liz315" target="_blank">Liz Steininger</a>. They were all developers/in tech. When I mentioned wanting to learn how to code I immediately got a huge amount of positive reinforcement. For the next 45 minutes, I learned about meetups, resources, and the Ruby community.<br /><br />I didn't make any moves until September when I attended the Rails Girls DC workshop (which Liz organized and Piotr was my mentor there). I had just gotten going with my own startup and decided to learn the basics so that I could converse intelligently with my awesome developers. From that September until this July, I learned in bits and pieces, mostly when I was scoping out a new feature or idea with my development team. It was in late July that I decided to spend less time focusing on my startup and more time learning how to code. So, for the last eight week or so I've spent every day, morning till night, coding, learning and getting to know the community.<br /><br />Throughout this time, I've been thinking of starting a blog but was pretty certain no one would care about anything that I had to say. After much encouragement though, here it is, the blog. I'll be writing a little about my journey and what I've done over the past eight weeks (and somewhat before that) to learn as well as posting issues I come across (and hopefully the way I solved them)!<br /><br /></p>
]]></description>
      </item>
    
  </channel>
</rss>