-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
226 lines (222 loc) · 27.1 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><style data-href="/styles.d82bea9fb325cd6d4780.css" data-identity="gatsby-global-css">p,pre,ul{margin-top:0}code,pre{background-color:#f9f9f9}img,pre{display:block}*{box-sizing:border-box}body,html{margin:0;overflow-x:hidden;padding:0}html{font-size:16px;line-height:1.5}@media (min-width:38em){html{font-size:20px}}body{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;background-color:#fff;color:#515151}a{color:#268bd2}a:focus,a:hover{text-decoration:underline}h1,h2,h3{text-rendering:optimizeLegibility;line-height:1.25;margin-bottom:.5rem}.highlight,p,pre,ul{margin-bottom:1rem}h1{font-size:2rem}h2{font-size:1.5rem;margin-top:1rem}h3{font-size:1.25rem;margin-top:1.5rem}code,pre{font-family:Menlo,Monaco,Courier New,monospace}code{border-radius:3px;color:#bf616a;font-size:85%;padding:.25em .5em}pre{word-wrap:break-word;font-size:.8rem;line-height:1.4;padding:1rem;white-space:pre;white-space:pre-wrap;word-break:break-all}pre code{background-color:transparent;color:inherit;font-size:100%;padding:0}.highlight{border-radius:4px}.highlight pre,blockquote p:last-child{margin-bottom:0}blockquote{border-left:.25rem solid #e5e5e5;color:#7a7a7a;margin:.8rem 0;padding:.5rem 1rem}@media (min-width:30em){blockquote{padding-left:1.25rem;padding-right:5rem}}img{border-radius:5px;margin:0 0 1rem;max-width:100%}.container{margin-left:auto;margin-right:auto;max-width:28rem;padding-left:1rem;padding-right:1rem}.highlight .k{color:#069}.highlight .o{color:#555}.highlight .c1{color:#999}.highlight .kd{color:#069}.highlight .na{color:#4f9fcf}.highlight .nt{color:#2f6f9f}.highlight .w{color:#bbb}.highlight .s1,.highlight .s2{color:#c30}html{font-family:"PT Serif",Georgia,Times New Roman,serif}.pagination,.sidebar,h1,h2,h3{font-family:PT Sans,Helvetica,Arial,sans-serif}h1,h2,h3{color:#313131;font-weight:400;letter-spacing:-.025rem}.wrap{position:relative;width:100%}@media (min-width:38em){.container{max-width:32rem}}@media (min-width:56em){.container{max-width:38rem}}.masthead{border-bottom:1px solid #eee;margin-bottom:3rem;padding-bottom:1rem;padding-top:1rem}.masthead-title,.sidebar-item p:last-child{margin-bottom:0}.masthead-title{color:#505050;margin-top:0}.masthead-title a{color:#505050}.masthead-title small{color:silver;font-size:75%;font-weight:400;letter-spacing:0}@media (max-width:48em){.masthead-title{text-align:center}.masthead-title small{display:none}}.sidebar{background-color:#202020;bottom:0;color:rgba(255,255,255,.6);font-size:.875rem;left:-14rem;overflow-y:auto;position:fixed;top:0;transition:all .3s ease-in-out;visibility:hidden;width:14rem}.sidebar a{color:#fff;font-weight:400}.sidebar-item{padding:1rem}.sidebar-nav{border-bottom:1px solid rgba(255,255,255,.1)}.sidebar-nav-item{border-top:1px solid rgba(255,255,255,.1);display:block;padding:.5rem 1rem}a.sidebar-nav-item:focus,a.sidebar-nav-item:hover{background-color:rgba(255,255,255,.1);border-color:transparent;text-decoration:none}@media (min-width:48em){.sidebar-item{padding:1.5rem}.sidebar-nav-item{padding-left:1.5rem;padding-right:1.5rem}}.sidebar-checkbox{opacity:0;position:absolute;-webkit-user-select:none;-ms-user-select:none;user-select:none}.sidebar-toggle{background-color:#fff;border-radius:.25rem;color:#505050;cursor:pointer;display:block;left:1rem;padding:.25rem .75rem;position:absolute;top:.8rem}.sidebar-toggle:before{background-image:linear-gradient(180deg,#555,#555 20%,#fff 0,#fff 40%,#555 0,#555 60%,#fff 0,#fff 80%,#555 0,#555);content:"";display:inline-block;height:.75rem;width:1rem}#sidebar-checkbox:checked~.sidebar-toggle,#sidebar-checkbox:focus~.sidebar-toggle,.sidebar-toggle:active{background-color:#555;color:#fff}#sidebar-checkbox:checked~.sidebar-toggle:before,#sidebar-checkbox:focus~.sidebar-toggle:before,.sidebar-toggle:active:before{background-image:linear-gradient(180deg,#fff,#fff 20%,#555 0,#555 40%,#fff 0,#fff 60%,#555 0,#555 80%,#fff 0,#fff)}@media (min-width:30.1em){.sidebar-toggle{position:fixed}}@media print{.sidebar-toggle{display:none}}.sidebar,.sidebar-toggle,.wrap{-webkit-backface-visibility:hidden;backface-visibility:hidden}.sidebar-toggle,.wrap{transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}#sidebar-checkbox:checked+.sidebar{visibility:visible;z-index:10}#sidebar-checkbox:checked~.sidebar,#sidebar-checkbox:checked~.sidebar-toggle,#sidebar-checkbox:checked~.wrap{-webkit-transform:translateX(14rem);transform:translateX(14rem)}.post{margin-bottom:4em}.post-title,.post-title a{color:#303030}.post-title{margin-top:0}.post-meta{color:#9a9a9a;display:block;margin-bottom:1rem;margin-top:-.5rem}.pagination{color:#ccc;margin-left:-1rem;margin-right:-1rem;overflow:hidden;text-align:center}.pagination-item{border:1px solid #eee;display:block;padding:1rem}.pagination-item:first-child{margin-bottom:-1px}a.pagination-item:hover{background-color:#f5f5f5}@media (min-width:30em){.sidebar{font-size:.75rem}.pagination{margin:3rem 0}.pagination-item{float:left;width:50%}.pagination-item:first-child{border-bottom-left-radius:4px;border-top-left-radius:4px;margin-bottom:0}.pagination-item:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px;margin-left:-1px}}@font-face{font-family:PT Sans;font-style:normal;font-weight:400;src:local("PT Sans"),local("PTSans-Regular"),url(https://fonts.gstatic.com/s/ptsans/v8/FUDHvzEKSJww3kCxuiAo2A.ttf) format("truetype")}@font-face{font-family:"PT Serif";font-style:normal;font-weight:400;src:local("PT Serif"),local("PTSerif-Regular"),url(https://fonts.gstatic.com/s/ptserif/v8/EgBlzoNBIHxNPCMwXaAhYPesZW2xOQ-xsNqO47m55DA.ttf) format("truetype")}@font-face{font-family:"PT Serif";font-style:normal;font-weight:700;src:local("PT Serif Bold"),local("PTSerif-Bold"),url(https://fonts.gstatic.com/s/ptserif/v8/QABk9IxT-LFTJ_dQzv7xpJ0EAVxt0G0biEntp43Qt6E.ttf) format("truetype")}@font-face{font-family:"PT Serif";font-style:italic;font-weight:400;src:local("PT Serif Italic"),local("PTSerif-Italic"),url(https://fonts.gstatic.com/s/ptserif/v8/03aPdn7fFF3H6ngCgAlQzC3USBnSvpkopQaUR-2r7iU.ttf) format("truetype")}body{background:#fff;font:16px Open Sans,Helvetica,Arial,sans-serif;line-height:1.4;margin:0 0 100px}em{color:#999}p{font-size:90%;line-height:1.6}a{color:#2c85b1;font-weight:400;text-decoration:none}ul{margin-bottom:0}section{margin:1em 0 2em}blockquote{margin:0 0 1em}.resume-module--resumeStyle--1CoY1{margin:2em 2em 2em 2.5em;max-width:760px}.resume-module--heading--2FRdI header h1{font-size:180%;font-weight:600;margin:.5em 0}.resume-module--heading--2FRdI header h2{font-size:140%;font-weight:400;margin:0}.resume-module--contact_detail--1eZqg{margin:0 1em 0 0}.resume-module--profile--EPFGz,.resume-module--profile--EPFGz span,.resume-module--profile--EPFGz strong{display:inline-block;margin:0 1em 0 0}section h2{color:#bc1b39;font-size:140%;font-weight:400;margin:0 0 1em;text-transform:uppercase}.resume-module--item--1jFCJ{border-bottom:1px solid #f2ebec;margin:0 0 1em;padding:0 0 1em}.resume-module--item--1jFCJ:last-child{border-bottom:none}.resume-module--item--1jFCJ header h3{display:inline-block;font-weight:600;margin:.2em 1em .2em 0}.resume-module--item--1jFCJ header a{display:inline-block}.resume-module--item_position--3bvRl{font-size:100%;font-weight:600;margin:.2em 1em .2em 0}.resume-module--item_dates--bsASf{color:#6b6b6b}.resume-module--item_highlights--3pYgh{font-size:90%;list-style:square}.resume-module--skills_item--iBZjq{font-size:90%;margin:.5em 0;padding:0 0 .5em}.resume-module--skills_item_name--BRPMR{display:inline-block;font-weight:600;margin:0 1em 0 0;text-transform:uppercase;vertical-align:top;width:23%}.resume-module--skills_item_keywords--2Le1r{display:inline-block;vertical-align:top;width:70%}#resume-module--education--2hmQ2 .resume-module--item--1jFCJ{border-bottom:0;display:inline-block;vertical-align:top;width:49.5%}</style><meta name="generator" content="Gatsby 3.9.1"/><link as="script" rel="preload" href="/webpack-runtime-252066672f8c7e61a796.js"/><link as="script" rel="preload" href="/framework-ef6b9b91ed0b2fec9a9f.js"/><link as="script" rel="preload" href="/app-3bab03752071a27f3420.js"/><link as="script" rel="preload" href="/component---src-pages-index-js-eb8bba1ffae8dbd85449.js"/><link as="fetch" rel="preload" href="/page-data/index/page-data.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/page-data/app-data.json" crossorigin="anonymous"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div class="mainContainer"><input type="checkbox" class="sidebar-checkbox" id="sidebar-checkbox"/><div class="sidebar"><nav class="sidebar-nav"><div class="sidebar-item"><p>Software development for Everyone else</p></div><a class="sidebar-nav-item" href="/resume">Resume</a><a class="sidebar-nav-item" href="/projects">Projects</a><a class="sidebar-nav-item" href="/blog">Blog</a><span class="sidebar-nav-item">Outer Links</span><a href="https://github.com/tomcentrate" class="sidebar-nav-item">Github</a><a href="https://www.linkedin.com/in/tommy-lee-a23ba935/" class="sidebar-nav-item">LinkedIn</a></nav></div><div class="wrap"><div class="masthead"><div class="container"><h3 class="masthead-title"><a aria-current="page" title="Home" class="" href="/">Tommy Lee</a><small>Software development for everyone else</small></h3></div></div><div class="container content"><article class="post"><h2 class="post-title">Steps to Automation</h2><span class="post-meta"><span class="post-date">15 July, 2019</span></span><div><h2>Identify Steps that can be automated</h2>
<p>Automation can be designed by breaking up a complex task into many, simple tasks. We can take a few tasks that can be seen as a manual process.</p>
<p>One of the following issues that I have is doing deployment for software. I also need to notify my monitoring service when a new software release occurred.</p>
<p>Problem: I need to deploy working software to my server.</p>
<h2>Step 1. Generalize The Process</h2>
<p>We can identify the basic steps required to update and change the current server software. In the simple deployment case, I see it work like this.</p>
<ol>
<li>Build Software</li>
<li>Test Software</li>
<li>Push New Build of Software to Server</li>
<li>Run installations and changes on Server.</li>
<li>Restart Service</li>
<li>Notify Monitoring Service</li>
</ol>
<p>So the flowchart looks like this:</p>
<p><img src="/images/automation/deployment-flowchart.png" alt="Flowchart of the Steps listed above" title="Flowchart of the Step listed above"></p>
<h2>Step 2. Breakdown Process into multiple Smaller Steps</h2>
<p>So each of these steps have mini steps put together.</p>
<h3>Build Software</h3>
<ol>
<li>I take changes from my git repository and update to the newest version.</li>
<li>I optimize any assets that need optimization. This includes images, or final CSS output.</li>
</ol>
<h3>Test Software</h3>
<ol start="3">
<li>I run any Integration tests to make sure there are no regressions.</li>
<li>I run any Unit tests to make sure there are no regressions.</li>
</ol>
<h3>Push New Build of Software to Server</h3>
<ol start="4">
<li>I produce a package that I upload to one of my servers</li>
<li>I unzip the package to the correct directory.</li>
</ol>
<h3>Run Installation and changes on Server</h3>
<ol start="6">
<li>I install any updated packages</li>
<li>I Apply any schema migrations</li>
</ol>
<h3>Restart Services</h3>
<ol start="8">
<li>I restart the web and app services.</li>
</ol>
<h3>Notify Monitoring Services</h3>
<ol start="9">
<li>I Notify NewRelic that a new build has been launched.</li>
</ol>
<p><img src="/images/automation/deployment-flowchart-part-2.png" alt="Additional Steps as from above, with breaking down of each step"></p>
<h2>Step 3. Identify How to Trigger this Process</h2>
<p>We have different ways to determine how automation should trigger. Currently we have these two types of events.</p>
<h3>Time Based Processes</h3>
<p>These are things that are meant to run on a schedule. They are triggered based on what time it is.</p>
<p>Examples:</p>
<ul>
<li>Every week, rotate the log files.</li>
<li>Every 5 minutes, check if the service is online</li>
<li>On the first of every month, generate a report of user time and usage.</li>
</ul>
<h3>Event Based Processes</h3>
<p>These are events that are triggered based on criteria.</p>
<p>Examples:</p>
<ul>
<li>When I get an email, copy the subject line to a new file</li>
<li>When a User submits a form, write information to a database.</li>
<li>When code is submitted, run automated tests.</li>
</ul>
<p>In our case, we</p>
<h2>Step 4. Build steps using a Clean Room Approach</h2></div></article><article class="post"><h2 class="post-title">Strange Bug: Safari Parsing</h2><span class="post-meta"><span class="post-date">26 March, 2019</span></span><div><p>So I spent half a day fixing the following errors. The layout on Rental Cars Search results have been broken on Safari. We suspected that this had to do with Safari's sppecific handling of divs and invalid HTML.</p>
<h2>The General Setup</h2>
<p>So the affected code in question looks like this. We have a homebrew JS template that looks and acts roughly like this.</p>
<pre><code><script type="text/template" id="rental-car-details">
<div>
...
</div>
</script>
... Somewhere in a JS file...
var details = $('#rental-car-details').clone();
...
details.replace("{{pricing}}", priceDetails);
...
resultsBody.append(details);
</code></pre>
<p>We have a template, and we build a DOM element, that gets injected after results come back from an AJAX request.</p>
<h2>Check the Commit Logs</h2>
<p>We confirmed with QA that this was a new bug. Checking the logs, we see only one major commit from the last valid section.</p>
<h1>Test By Bisection</h1>
<p>I reduced a lot of the code down to make sure that no other divs were affecting it. To make sure that the layout was stable even before this chunk of template exists.</p>
<p>Since this template is loaded via a template tag in Javascript. I started commenting out code and anything irrelevant, to find the part of the load that breaks the code.</p>
<h2>The Cause</h2>
<p>I started commenting out different parts of the template, and was able to identify the exact line of HTML that causes the problem.</p>
<p>This was that line</p>
<pre><code>{{strike}}
<span class="actual-price">
<span class="dollar">$</span>{{period_price}}
</span>
<span class="perday">/{{period.abbr}}</span>
</code></pre>
<p>So we kept pairing it down. to eventually get to:</p>
<pre><code><span class="dollar">$</span>
</code></pre>
<p>Yes, so while this is okay in most of the browsers, for some reason, in Safari. When this is injected, this breaks the layout.</p>
<h3>Test cases for solutions.</h3>
<p>So we did some small tests, seeing if it had something to do with the characters, or the signs. And what we came up was this:</p>
<pre><code><!-- This *somehow* fixes it -->
<span class="dollar"> $ </span>
<!-- This is still broken -->
<span class="dollar"> $</span>
<!-- This is still broken -->
<span class="dollar">$ </span>
</code></pre>
<p>So we found that Javascript Engine in Safari parses the <code>>$<</code> character incorrectly. It required atleast 3 characters within between the span.</p>
<h1>Solution:</h1>
<p>So to make the least breaking changes possible, I eneded up with the following.</p>
<pre><code><!-- Safari fix: single dollar sign ($) breaks layout. -->
<span class="dollar">&#36;</span>{{period_price}}
</code></pre>
<p>I would love to know why this breaks in Safari. But we'll have to investigate the root cause another day.</p></div></article><article class="post"><h2 class="post-title">Cook and Code 3: Rabbit Season</h2><span class="post-meta"><span class="post-date">19 February, 2018</span></span><div><p>This meetup was graciously hosted by Dmytro Malikov. He put on his own Cook and Code at his home, with a few of his coworkers here, Eric and Matt.</p>
<p>We tried to implement the single chef / sous chef during this cook and code.</p>
<h2>Recipe</h2>
<p>Dmytro suggested that we get adventurous, bringing Rabbit from this local latin market.</p>
<p>We ended up doing this recipe:</p>
<p><a href="">https://cooking.nytimes.com/recipes/12254-italian-style-braised-rabbit-with-rosemary-and-mushrooms</a></p>
<h2>Snacks</h2>
<p>Matt brought Chips and I prepared some Rosemary red potatoes. Really helped keep the motivation up while we tried to figure out the rabbit.</p>
<h2>Struggles are real</h2>
<p>So we had some issues following this recipe. This was my first time cooking rabbit, and I wasn't prepare to be a butcher. I forgot to carry my Dad's Heavy cleaver, and tried sawing away at the bones and spine. Since it was Dmytro's knife, I feared the back of the rabbit would snap the thin blade.</p>
<p>I had to call over Dmytro to handle the Rabbit. Snap, went the shoulders, the mid back and the hind legs. In my 10 minutes of fiddling, he tore through the bones in 45 grunt filled seconds.</p>
<h2>Team Troubleshooting</h2>
<p>Dmytro had a little CSS problem. We were able to cast it up on his projector and team debug it.</p>
<h2>Results</h2>
<p>I didn't think the Rabbit came out too well. Overcooked it. Even though it was my first rabbit. Jimmy made some backup ribs, and it went over well.</p></div></article><article class="post"><h2 class="post-title">Cook and Code 2: Cooking Ribs</h2><span class="post-meta"><span class="post-date">13 January, 2018</span></span><div><p><img src="/images/cook_and_code_2/group_selfie.jpg" alt="Cook and Code 2"></p>
<p>As we make this a monthly tradition, we expndeda to having another member. This time around, we had DmytNro Malikov from Accenture come along.</p>
<h2>Dish of the day: Apple flavored Baby Back Ribs</h2>
<p>Part of Cook and Code is developing dishes that cook on their own while we spend our time on projects. Jimmy and Charlene brought a rack of baby back ribs, and plan to cook it in a pressure cooker pot.</p>
<h2>Recipe</h2>
<p><a href="">https://recipes.instantpot.com/recipe/easy-bbq-instant-pot-ribs/</a></p>
<p>We used a modification of the recipe above, but replaced water with apple juice and apple cider.</p>
<p>We did our best to keep everyone involved. Accompanying the ribs, Dmytro and I prepped some vegetable side dishes.</p>
<p>I love that cooking is an activity that everyone can participate. No matter what their skill level, we all have some experience in different areas of cooking.</p>
<p>Jimmy and Charlene had some minor difficulties in cleaning the ribs, pulling away the membrane on the underside. Dmytro, our resident expert in butchery, stripped the membrane cleanly and quickly with his knife skills.</p>
<p><img src="/images/cook_and_code_2/ribs_in_pot.jpg" alt="Ribs in Pot"></p>
<h2>So Tender</h2>
<p>The ribs came out very tender. Fell apart the bone. 10/10 would 1000% recommend.</p>
<p>For vegetables. I cooked up some sweet potato fries in the oven, as well as a slaw from Costco.</p>
<p><img src="/images/cook_and_code_2/ribs_on_plate.jpg" alt="Ribs in Pot"></p>
<h2>Meetup Lessons Learned</h2>
<p>As our second meetup, we picked up a few lessons to work on in future meetups.</p>
<ul>
<li>Too many cooks</li>
<li>Too Complicated to make food</li>
<li>Bring Snacks</li>
<li>Time to Talk vs Time to Code</li>
</ul>
<h3>Issue: Too Many Cooks</h3>
<p>We wanted to bring more focus on the working on the coding and the side projects. We had issues with people butting heads together and not having everything available for cooking available.</p>
<p>We're seeing this could lead to scalability issues.</p>
<h3>Solution: Less Chefs</h3>
<p>So instead of having everyone participate in the cook, we're going to try in the next Cook and Code having a dedicated chef.</p>
<p>We're calling this having a Lead Chef, Senior Chef as well as having an assistant chef or two.</p>
<h3>Issue: Complex prep recipes</h3>
<p>I'm used to spending a lot of time prepping and cooking, but this doesn't work well while we're trying to optimize for time. So from now on, we're trying to use a more simpler recipe to cook.</p>
<h3>Solution: Simplified recipes</h3>
<p>Simple enough. Make easier stuff, simpler items.</p>
<h3>Issue: Time to Talk vs Time to Code</h3>
<p>So there are some awkward moments where people weren't sure when it is a good time to talk, or focus on work. This occurred mostly during the early period of coding, or during cooking.</p>
<h3>Solution: Dedicated Scheduling</h3>
<p>So this was brought up by Jimmy. We probably need to have dedicated time slots so people know when to do what.</p>
<p>We built a template of the schedule, and try to adhere to it.</p>
<ul>
<li>Social Periods: Intro and Eating. Talk as much as you'd like</li>
<li>Work Periods: Keep chit chat to relevant projects. Or take chats to IMs messaging instead. Follow the headset rules.</li>
</ul>
<p><img src="/images/cook_and_code_2/group_photo.jpg" alt="Selfie including Tommy"></p></div></article><article class="post"><h2 class="post-title">Cook and Code 1: Cooking and Coding Together</h2><span class="post-meta"><span class="post-date">13 October, 2017</span></span><div><p><img src="/images/cookout_and_code_1/cookout_and_code.jpg" alt="Cook and Code 1"></p>
<p>So Jimmy Vo and I have a time management problem. We try our best to balance what time we have to:</p>
<ul>
<li>Expand and maintain our social circle</li>
<li>Learn new tech stuff or work on side projects</li>
<li>Cook and learn more recipes</li>
</ul>
<p>So he came up with this brilliant idea: A meetup dedicated to cook and code.</p>
<h2>Introducing Orlando's Cook and Code Together</h2>
<p>The concept is simple. Developers meet up. We prep some food together, then code. While the food is either marinating or cooking, we work on some personal development, with fellow developers nearby to bounce ideas or get assistance.</p>
<h2>Meeting #1: Beef Burgundy</h2>
<p>We chose a simple recipe, that takes a while to cook. I grew up eating my dad's beef burgundy. Sweet, rich, meaty stew that takes an entire day to cook.</p>
<p>We found a recipe that can be cooked within 3 hours. You can find it here:</p>
<p><a href="http://allrecipes.com/recipe/23342/beef-burgundy-i/">Beef burgundy recipe</a></p>
<p><img src="/images/cookout_and_code_1/raw_ingredients.jpg" alt="Cook and Code Raw Ingredients"></p>
<p>We divided the labor so that everyone can get to cook asap. I chopped up the vegetables, while Jimmy browned the steak chunks. Browning the meat is important in stews, since it adds additional flavor, and preserves some of the texture.</p>
<p><img src="/images/cookout_and_code_1/sizzle_pan.jpg" alt="Cook and Code Raw Ingredients"></p>
<p>So we threw in all the vegetables, with the water and bottle of wine into a large pot, and left it to cook. I made sure that it didn't boil over and stirred it around occasionally.</p>
<p><img src="/images/cookout_and_code_1/cooking_1.jpg" alt="Cook and Code Raw Ingredients"></p>
<h2>Coding Goals</h2>
<p>For our coding session, we made goals that can be achieved by the end of the session. I try to use [S.M.A.R.T] goals as a framework of choosing what to complete.</p>
<p>For Jimmy, he's playing with Azure and working on hosting his website.</p>
<p>For me, I'm playing with React to create a form page for one of my side projects.</p>
<p>As with any learning experience, we ran into some issues. I ran into some issues with the ES6 Syntax and how CommonJS module loading works. Jimmy's azure account was having issues, and couldn't get access to the right areas for deployment.</p>
<p>Around the hour mark, I check on the stew.</p>
<p><img src="/images/cookout_and_code_1/cooking_2.jpg" alt="Cook and Code Raw Ingredients"></p>
<p>We decided to work on figuring out how to get Jimmy's project deployed. I remembered that .NET Core could be deployed on Ubuntu, so we went ahead and worked on some basic deployment on Ubuntu.</p>
<p>It was a great learning experience for Jimmy, since he's from a Windows shop. It was some configurations of nginx, and installing .NET Core CLI to the server.</p>
<p><img src="/images/cookout_and_code_1/downloading_stuff.jpg" alt="Cook and Code Raw Ingredients"></p>
<p>We pick up a lot of small, unwritten things when we work with others. We learn habits from our friends and family, lessons from our mistakes. I passed down some of my experience doing sysadmin stuff, and deploying stuff on Linux. We learned from repeated errors trying to get the site to run.</p>
<p>In cooking, I made a great mistake with the initial prep for the stew. Instead of seeing the meat slowly get softer, but remain in one piece, the meat started breaking apart. The sweet, winey liquid I expected was non-existent.</p>
<p>I forgot to coat the meat in flour.</p>
<p>So we had braised beef instead.</p>
<p><img src="/images/cookout_and_code_1/cooking_3.jpg" alt="Cook and Code Raw Ingredients"></p>
<h2>Lessons Learned for a Successful Cook and Code</h2>
<p>So with a completed work, and a full stomach, we call the inaugural Cook and Code Together a success! We learned some new recipes to serve and food prep, and expanded what we knew and had something to work towards in the future.</p>
<p>Some recommendations we have for others:</p>
<ul>
<li>Choose a recipe you haven't tried yet</li>
<li>Divide the labor</li>
<li>Set measurable goals</li>
</ul>
<h2>Cook and Code Schedule Template</h2>
<p>We follow the following time-line for most cook and codes.</p>
<ul>
<li>11:00 AM - Event Start and meal prep and cook. Social time and people get together.</li>
<li>11:30 AM - Start coding. Waiting until the food is ready.</li>
<li>02:00 PM - Food is served.</li>
<li>03:00 PM - Clean up.</li>
</ul>
<p>We have another cook and code coming up soon. We usually keep it small so that the group can work together well. While we can divide up the cooking for just one person, working together on the recipe lets everyone share in the experience.</p></div></article></div></div><label for="sidebar-checkbox" class="sidebar-toggle"></label></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/";/*]]>*/</script><script id="gatsby-chunk-mapping">/*<![CDATA[*/window.___chunkMapping={"polyfill":["/polyfill-2e886965057c6c493c57.js"],"app":["/app-3bab03752071a27f3420.js"],"component---src-pages-about-js":["/component---src-pages-about-js-dea8bc1234c1a0c7f81c.js"],"component---src-pages-blog-js":["/component---src-pages-blog-js-ab1ed7afae1ea3d1ea0a.js"],"component---src-pages-index-js":["/component---src-pages-index-js-eb8bba1ffae8dbd85449.js"],"component---src-pages-resume-js":["/component---src-pages-resume-js-863511f2a9e84e7545b9.js"],"component---src-templates-blog-page-js":["/component---src-templates-blog-page-js-f50b6c64133b0f8a57d3.js"]};/*]]>*/</script><script src="/polyfill-2e886965057c6c493c57.js" nomodule=""></script><script src="/component---src-pages-index-js-eb8bba1ffae8dbd85449.js" async=""></script><script src="/app-3bab03752071a27f3420.js" async=""></script><script src="/framework-ef6b9b91ed0b2fec9a9f.js" async=""></script><script src="/webpack-runtime-252066672f8c7e61a796.js" async=""></script></body></html>