<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: andyreadpnw</title>
    <description>The latest articles on DEV Community by andyreadpnw (@andyreadpnw).</description>
    <link>https://dev.to/andyreadpnw</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F247808%2Fe144839e-8165-4ab8-9253-7c37ed124082.jpeg</url>
      <title>DEV Community: andyreadpnw</title>
      <link>https://dev.to/andyreadpnw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andyreadpnw"/>
    <language>en</language>
    <item>
      <title>Using an After-Parameter</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Sun, 10 May 2020 01:15:54 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/using-an-after-parameter-1g1b</link>
      <guid>https://dev.to/andyreadpnw/using-an-after-parameter-1g1b</guid>
      <description>&lt;p&gt;One of my side projects involved a vanilla JavaScript implementation of a Reddit Comment Analyzer. The program was designed to take any Reddit user and analyze all the information they have ever posted to produce some interesting statistics. While the final product was really cool, I was pretty impressed with how the program was designed to scrape all the information so quickly. The trick to pull information that is located on many different pages was key to the design of the app. To do the dirty work and simulate multiple different fetches, it relied on an "after" parameter that was available via the network.&lt;/p&gt;

&lt;p&gt;So what is an after parameter? An after parameter is an alfa-numeric value code that is present in the network request of the pages reddit displays. When that code is posted to the network, it tells the server to present the next batch of user comments. By turning the page into JSON and then calling the after parameter, the fetches occur much faster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5pb9KqeD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b56g2vwn5lntkgtysh7l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5pb9KqeD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b56g2vwn5lntkgtysh7l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next step is to use ES7 keywords to fetch and await the completion of the multiple fetch requests. This is implemented like so and allows the entire user history to be pulled before analytics are performed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NKoUi391--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m5rdvxfa4oe3oopq50mf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NKoUi391--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/m5rdvxfa4oe3oopq50mf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The result is a really fast and interest end product. Demo it for yourself here:&lt;br&gt;
&lt;a href="https://andyreadpnw.github.io/redditanalyze/"&gt;https://andyreadpnw.github.io/redditanalyze/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What Separates Good E-Commerce Architecture?</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Sat, 02 May 2020 00:01:20 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/what-separates-good-e-commerce-implementations-5caf</link>
      <guid>https://dev.to/andyreadpnw/what-separates-good-e-commerce-implementations-5caf</guid>
      <description>&lt;p&gt;After my first role in Digital Product Management, I was doing an informational interview with an old colleague of mine over Zoom. I asked the exceptionally broad question "what is a commonality among the most successful ecommerce sites and to what degree is this a product of picking the right tools?". What he said really stuck with me: "The tools of the business alone are not the drivers of success, although they certainly can limit your success. Where I've noticed success is in brands that blend content and commerce and leverage data to help make decisions." This simple synthesized idea led me look on some technical system implementations(good and bad) and consider why they were successful. &lt;/p&gt;

&lt;p&gt;For example: A adept merchandiser will be able to better merchandise than an AI algorithm(at least in today's world). When we were running a legacy search and merchandising platform, our director asked the customer success manager of the tool if they could accurately ascribe the conversion boost their tool provided. How do we measure success? To this day this was the worst meeting I have ever been in. The manager explained our conversion rates back to us and attributed their platform to helping to get where we were. Of course, you can't attribute your customer's entire conversion rate to your product, because this doesn't identify the incremental lift in the conversion gained with the platform. After some tough questions, we decided to bake our current tool off with two other competitors in a multivariate test. We got the competitors to agree to test before we would consider switching and began our month long experiment. When the results came out the other side, we were somewhat surprised: Our current platform was performing better than both competitors! We realized the reason for this in the post-mortem: The tools we had implemented did not have adequate merchandiser optimization like our site-wide platform. Those who know our product best will obviously have a better idea over the AI(especially one that hasn't had the cumulative learning advantage it needed). The other data we did have however, suggested we did need to make a change. Customer feedback was exceeding positive in the call center and all the search results were more accurate and targeted(ie. less searches until purchase and less null search results) among othjer good results. We eventually decided that an improvement in our platform would need to strictly use the data available on the strength of individual pieces and assume they would be more successful after merchandisers actively took over the product. After we picked our winner and went live with it, this we saw significant improvement in key KPI's by making the switch.&lt;/p&gt;

&lt;p&gt;On another note, I also note that tools can hold an organization back, but too much change too quickly can hurt an organization more than it helps. I have been though numerous prioritization plans where too much was put in the pipeline at one time based on high-level strategic initiatives. When this happens, people get burnt out and eventually something breaks and no one know what went wrong or how to fix it. If too much is changing at one time, then the chances are higher that something critical will occur and also that the fix will take longer to identify.&lt;/p&gt;

&lt;p&gt;A good example of this is changing both your front-end as well as your back-end architecture at the same time. When we tried to change the look and feel of our frontend as well as speed up the site performance by changing the site to a popular JavaScript framework in addition to integrating a new order management system, we were working with too many moving parts. We ended up mitigating the issue by being more conservative in our sprint plans, but we ended up slowing some projects so we could complete our new JavaScript framework implementation first.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Migrating my Projects to NodeJS and away from Ruby on Rails</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Fri, 24 Apr 2020 21:07:25 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/migrating-my-projects-to-nodejs-and-away-from-ruby-on-rails-dki</link>
      <guid>https://dev.to/andyreadpnw/migrating-my-projects-to-nodejs-and-away-from-ruby-on-rails-dki</guid>
      <description>&lt;p&gt;I learned my first server-side language in Ruby as I graduated software engineering school in 2020. Using Ruby on Rails to spin up each back-end for the projects I created made me appreciate how powerful and easy it was to develop. However, after I started looking for a job as a developer, I began to realize the majority of jobs were in a NodeJS. Indeed, NodeJS is by far the more popular of the two frameworks currently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1VUtD04h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zitfv88jkufvgmhg16i7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1VUtD04h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zitfv88jkufvgmhg16i7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will not go through a point by point pro-con analysis of both frameworks(I think &lt;a href="https://medium.com/@TechMagic/nodejs-vs-ruby-on-rails-comparison-2017-which-is-the-best-for-web-development-9aae7a3f08bf"&gt;this post&lt;/a&gt; actually does a really good job on that account), but I will explain my experience with both and why I am adopting NodeJS's Express for my upcoming projects.&lt;/p&gt;

&lt;p&gt;Ruby on Rails always made me a little nervous when I finished a project, because it felt like there was too much "magic" going on. Building a project architecture using the MVC concepts is super easy and handles a lot of the work. Simply by writing &lt;em&gt;rails g controller modelName index show create edit&lt;/em&gt; you can tell the controller to access data from the model. The actual connections are all behind the scenes. As for me I prefer to know exactly how my systems connects to each part which seems to fit Node well by defining each action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rv_1Slsb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qfoihjlbplpx1rljmjvg.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rv_1Slsb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qfoihjlbplpx1rljmjvg.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Additionally, I really like that Node uses JavaScript as its language. When I build a project using JS in the front-end it is really easy to use the same language to build my back-end. Not to mention the community for JavaScript seems to be huge. I can usually readily find the answers I need for both Ruby and NodeJS, but it is helpful that I can talk to most of my personal contacts about a JS build in Node whereas a Ruby problem I would usually have to rely on my graduating class or a former instructor. Stack Overflow is awesome for solving problems, but I enjoy discussing a system structure in person to get their take on how they like my initial take. I should also note that Ruby does have a bit of stigma these days as a somewhat out-of-fashion language. Enterprises like that Node is more easily scale-able and fast.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9eG80j5x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lhiijlcvq3a8dz96rya4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9eG80j5x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lhiijlcvq3a8dz96rya4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There were a couple of instances where I was actually asked in interviews why Ruby on Rails is the framework I was taught and not a more marketable language. I explained we learned ruby because it is a programmer friendly language to interpret and I am currently learning Node which Ruby prepared me for. Ruby was instrumental in being a great playground for all of my first projects. &lt;/p&gt;

&lt;p&gt;In Ruby on Rail's favor, it does feel more polished sometimes. You can find libraries in Ruby for everything and they are usually really well ironed-out. In contrast, I am told NodeJS can sometimes be a dumpster fire as a number of packages are incomplete or break(&lt;em&gt;consulting stack overflow&lt;/em&gt;: "Yah that will happen sometimes").&lt;/p&gt;

&lt;p&gt;The great thing about learning a programming language is you have all the tools to dive into the next one. I have only deployed a few projects using Node on the server-side, but I am excited to continue learning and expand my knowledge!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Time Management: My Tips and Tricks</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Fri, 17 Apr 2020 18:11:11 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/time-management-my-tips-and-tricks-3bdl</link>
      <guid>https://dev.to/andyreadpnw/time-management-my-tips-and-tricks-3bdl</guid>
      <description>&lt;p&gt;I always considered myself someone who was really good at working from home. During my years in ecommerce, I was on-call at all hours of the day and would frequently get calls at 3am when errors would be found around 6am eastern time by customers or midnight when we pushed our code live. In a profession whose job can be entirely completed online, I only really valued the in-person setting of work because it allowed me to see my colleagues and discuss and plan our next steps. In a post-COVID world, I am definitely beginning to doubt these assumptions and realize that to compensate I have found I need to implement my own structure to be successful.&lt;/p&gt;

&lt;p&gt;One of the initial challenges I found with WFH has stemmed from time management. Full disclosure: I am on the job hunt as my primary task as I graduated from school in February right when the pandemic was taking off. Before the pandemic, I was commuting to a WeWork space daily and working with a few colleagues from my graduating class in software engineering. There was structure here and, importantly, there was variety in how I could pursue my work. I could dedicate an entire day working on a collaborative project or I could complete a grab bag of tasks related to my career search. Now that work is entirely remote however, if I focus on just one task during a day, I find myself seeing the day run together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gph.is/2jccsAD"&gt;https://gph.is/2jccsAD&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The options on what I can do each day are already limited and the best way to combat this in my humble opinion is to make a schedule. My favorite has been to schedule in 2-2.5 hour increments and generally looks like a variation of the following:&lt;/p&gt;

&lt;p&gt;-7:30-8:30 Its time to run with the dogs&lt;br&gt;
-8:30-11 I will code or refactor some of my side-projects&lt;br&gt;
-11-1 will be dedicated to look for jobs I fit and apply to them&lt;br&gt;
-1-1:30 Lunch&lt;br&gt;
-1:30-4 Complete algorithms on LeetCode&lt;br&gt;
-4-5 Watch instructional videos&lt;/p&gt;

&lt;p&gt;Another scheduling task that helps me be successful is actually scheduling my non-work goals. I hate feeling like I don't know what day of the week it is, so my wife and I put up a whiteboard in the kitchen with our daily work goals and non-work tasks. For instance, I have dedicated this week to  using the old bricks that came with our house and completing a pathway through our garden. Just having another physical project ever day after work helps me be more productive during the day.&lt;/p&gt;

&lt;p&gt;Finally, I make sure I have a hard scheduled stop. I end every day at 5 o'clock and make sure I don't put it work after this point and also do not pursue non-work tasks when it is the middle of the work day. I have a dedicated work room so I change my mindset when I get inside and I know that the only thing I can do in there is work.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ecommerce: The Cliff-Notes Version on How to Identify and Test your Road-map</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Sat, 11 Apr 2020 18:54:06 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/ecommerce-the-cliff-notes-version-on-how-to-identify-and-test-your-road-map-bjp</link>
      <guid>https://dev.to/andyreadpnw/ecommerce-the-cliff-notes-version-on-how-to-identify-and-test-your-road-map-bjp</guid>
      <description>&lt;p&gt;There are literally thousands of technologies and vendors you can consider to improve your ecommerce site experience and capabilities. It can appear overwhelming to try to identify which of these to research, let alone pursue, test, and implement. So how do you identify and implement something successful?&lt;/p&gt;

&lt;p&gt;First of all, there are no timelines or dates when it comes to the product road-map. You want to think of your road-map as a release plan that comes AFTER prioritizing and planning your strategy. In the beginning, you want to talk about your ideas excessively, even if the ideas would require too many resources to be feasible. At this point in your journey, the important part is ideation over practicality. You will eventually prioritize with the business and engineering team, so having a broad set of ideas that could match your objective will be incredibly helpful. &lt;/p&gt;

&lt;p&gt;Second, the product road-map is meant to communicate strategy - what you are doing, why you are doing it, and how it relates back to the product vision. While a vision defines the goals for a product, strategy describes a way to achieve them and sets main milestones. This must be a clear and practical plan for the teams that are developing the product. Product strategy will likely need to have a set of key indicators that the product will meet and the set of critical business objectives. Again, this is not a map of product execution, but simply the overarching themes and objectives you are going to achieve.&lt;/p&gt;

&lt;p&gt;Next, after completing your market research and maybe reaching out to other comrades in the same space to ask for recommendations, I like to get my hands dirty and begin a/b testing to see if the data backs up the technology. The goal is to define the minimum viable product(MVP) and put that into testing scenarios. Depending on the project I will likely be working with a UX specialist at this stage. Some will say that usability studies are also helpful here, but I don't put nearly as much faith behind this strategy as I do for multivariate testing. People who take your usability studies can help identify good ideas to test and help you define the product features later, but nothing is better to assess change then the pure statistical data. I am always surprised what the data tells me; sometimes I have implemented a new feature that was incredibly successful on other competitors sites, but they failed miserably on our platform. Remember that each site is different and has its unique set of challenges. That in part explains why you can't just implement what worked for a competitor and expect to emulate the success.&lt;/p&gt;

&lt;p&gt;After that you enter prioritization and actually build for market. In an agile framework you will probably see a good amount of change in your final product, but the key thing is you need to be shooting for the overarching themes from your product road-map. That is why a product road-map can be so important: it gives the broad guidelines and strategy plan for the product and builds your guard-rails that are critical for the success of your final product.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What are the Differences Between Product Management and Software Engineering?</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Wed, 01 Apr 2020 19:24:55 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/what-are-the-differences-between-product-management-and-software-engineering-2ok5</link>
      <guid>https://dev.to/andyreadpnw/what-are-the-differences-between-product-management-and-software-engineering-2ok5</guid>
      <description>&lt;p&gt;Many computer science graduates leave school expecting their job prospects to almost exclusively revolve around Software Engineering(SWE) positions. While it's true that this is the most common career track, there is a career track that blends the technical aspects of SWE with the business aspects of product operations and product development in a role known as Product Management. When considering between the two career paths, it is important to consider if product management might be a better option for your particular skill set.&lt;/p&gt;

&lt;p&gt;What exactly is a Product Manager(PM)? Wikipedia puts it nicely as "A PM is responsible for building, implementing, and managing software or digital products, taking into consideration their life-cycle considerations and audience". In more real terms, product management is all over the place and changes by company. PM work requires work with SWE/UX to define what needs to created in the stories, tracking customer usage, and deciding what should be created next. It also requires working with the business team to take in business requirements for a product and find a way to implement with the user experience, It prioritization, and timeline in mind. While PM work can sometimes feel like a babysitter for the IT backlog, at its best you define the product vision. This also usually comes with navigating office department politics and managing other business functions like vendor management and product operations.&lt;/p&gt;

&lt;p&gt;Software engineering by contrast is definitively more cut and dry as a narrow technical career. SWE work is individually focused and concrete. Work is completed in sprints and individual tasks are assigned and performance is rated on the promptness, efficiency, and functions of your assigned tasks. You spend a lot of time working alone to complete some technical task, the output of which can be easily measured. &lt;/p&gt;

&lt;p&gt;Individual personality and skill set do play a role as the positions are quite different in there day to day. However, if you enjoy interpersonal connection and meshing technical skills with it, product management may be a career path that fits you!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Stripe: Easy Payment Processing for Developers</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Sun, 29 Mar 2020 01:35:38 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/using-stripe-in-a-react-app-to-take-payments-53j2</link>
      <guid>https://dev.to/andyreadpnw/using-stripe-in-a-react-app-to-take-payments-53j2</guid>
      <description>&lt;p&gt;Stripe is a full payment processing platform targeted for developers. It allows you to make subscriptions, charge credit cards, use Apple Pay, and much more as a third-party payment gateway. Stripe shoulders the  PCI compliance, which is an expensive and stringent security certification for anything that requires the server to hold credit card data. So by using Stripe, we can bypass having to do all of that ourselves and can integrate it in our full-stack web apps without doing the hard stuff ourselves. &lt;/p&gt;

&lt;p&gt;Stripe has great and easy to use documentation on how to integrate payments with your app. The main components you will need to make it work are a token, a name, and a secret key. Here is a sample promise:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s4HkkJHj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3i95hyi93ox16anr38in.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s4HkkJHj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3i95hyi93ox16anr38in.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The token and the secret key will be static with your account and remember to keep the secret key hidden with git.ignore. The only remaining thing to implement is the form for name and CC details. This is my super basic implementation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i6cPFq87--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cyrg3g07vx7if8s7bmps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i6cPFq87--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cyrg3g07vx7if8s7bmps.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you submit the form the fetch will send that data to Stripe and send back a response. As you can see here we got a successful token and processed payment!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Q7h3T6E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dekse68m4zupj92xivpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Q7h3T6E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dekse68m4zupj92xivpm.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I look forward to building in more complex functionality, but Stripe is super easy to set up and begin playing with. I recommend anyone who wants to take the hassle out of payment processing to use Stripe!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Closing the Networking Gap Amid Covid-19</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Sat, 21 Mar 2020 02:06:15 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/closing-the-networking-gap-amid-covid-4975</link>
      <guid>https://dev.to/andyreadpnw/closing-the-networking-gap-amid-covid-4975</guid>
      <description>&lt;p&gt;In January 2020, when news of a novel new Coronavirus popped up in Wuhan, China, a small community formed of ~1000 members dedicated to discussing the enigmatic and obscure disease. Less than two months later, that message board had grown into a community of over 1.4 million members(most active subreddit) and is recognized as one of the leading information and discussion sources on the pandemic. Subreddit headlines like "Boy, 7, uses $600 of savings to make Coronavirus care packages for seniors, feed 90 students" or PSA's to "not flush disinfected wipes into the sewer" highlight how people want to be involved during this trying time. Especially as many of us are self-isolating indoors, we attempt to find digital outlets to connect with our greater community. &lt;/p&gt;

&lt;p&gt;The realization that individuals were looking for new ways to interact with people and businesses, dawned on me gradually. I committed to going back to school in August 2019, which had me graduating in early February 2020 at the beginning of the big outbreaks in the US. During that first month, I saw my number of technical interviews go from an average of 2 a week to 0 and in-person networking became out of the question. Similarly, as I followed another reddit community for computer science career questions, the mood quickly turned to panic as numerous posts about layoffs, rescinded offers, and cancelled internships added to the general sense that things were out of control.&lt;/p&gt;

&lt;p&gt;One day, before the restaurants were shut down, my wife and I were eating out and discussing how connecting with people has been impacted. My wife was explaining how remote work would impact peoples health as tasks related to a normal routine like hygiene and preparation would change while at home. Studies have shown a large boost in productivity comes directly from utilizing a daily routine that includes a shower, getting dressed, and general preparation tasks. She added, "there should be an app for people to check in with their wardrobe choices remotely during Coronavirus so we can continue to promote good habits." Of course, I loved the idea and by the end of the dinner my next side-project Quarantine-Fashion was born where users would use game-like daily check-ins and pictures to connect with their coworkers. Right then my attitude shifted: if there was going to be a pandemic, I was going to use my professional skills to work on something to combat its effects.&lt;/p&gt;

&lt;p&gt;Not long after I began working on that side-project, my wife's company shut down with a tentative re-launch more than a month in the future at earliest. Her company is focused on educational hands-on interactive experiences for children. Although I am just a junior developer, I decided I needed to see if there was anything I could do to help with my skill-set, so I reached out to her coworker who is a Store Manager. Surprisingly for me, she asked if I would mind scoping out a basic e-commerce store to continue retail operations for their educational kits. She explained they saw a large increase in their Youtube presence, so it was clear that customers continued to look for interactions. We were able to prepare a basic plan for the next month and it felt great to work on something productive that Coronavirus had directly affected.&lt;/p&gt;

&lt;p&gt;During the recent three weeks, responses to job applications and interviews have been hard to come-by. However, when you stop to consider how many of these industries are also hurting, it's perhaps more constructive to see this as a community problem. If the pandemic continues on its current trajectory, even more things are likely to change. I cope by trying to find the opportunities that could come with it and continuing to connect, because we can't let the virus win.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introduction to Hash Tables</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Sun, 15 Mar 2020 22:02:08 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/introduction-to-hash-tables-30j1</link>
      <guid>https://dev.to/andyreadpnw/introduction-to-hash-tables-30j1</guid>
      <description>&lt;p&gt;How do you compare two large and complex items efficiently? You could go through each data set iteratively and compare the two, but this is time consuming and computing expensive, because the data sets are large and complex. Comparing the two iteratively would mean an o(n) function for each set and this would be prohibitive for good searching.&lt;/p&gt;

&lt;p&gt;Hash functions at their core take in data of variable-length and produce outputs of fixed-data length. Hash tables should be able to store items in key-value pairs and should be able to lookup an item by their key. We can lookup an item by using the hash of that key as the index of the item itself which allows the user to search the item simple by computing its hash. One interesting problem with Hashes is under conditions where the key conflicts with other keys know as collisions. The data sets are large and complex by nature, so the hash of an index may land on the index of another key. To mitigate this issue, each item that generates the same hash can be thrown into a linked list called a "bucket". So we can create a function that updates the hash table and places a key into a bucket and a function that searches for the key with a hashing function to return the key value pair we want. This is the hashing function I came up with using prime numbers 17 and 13 to generate my unique hashing keys for a fairly simple solution:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cw5YglVQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8kgqa883564ovkhrvvmv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cw5YglVQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8kgqa883564ovkhrvvmv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Technical Interview in Java with 1 week to Prepare and No Experience</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Fri, 06 Mar 2020 22:50:18 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/technical-interview-in-a-java-with-1-week-to-prepare-and-no-experience-30f5</link>
      <guid>https://dev.to/andyreadpnw/technical-interview-in-a-java-with-1-week-to-prepare-and-no-experience-30f5</guid>
      <description>&lt;p&gt;Have you ever applied to a job that fit most of your skills only for the screening interview to reveal that the position operates solely in language unfamiliar to you? This happened to me last week. I applied to a Web Developer position only to find that the position they were trying to fill used almost entirely Java(and to a lesser degree JavaScript and React.js that I am comfortable with). Whats more is they wanted to schedule a technical interview with Java as the required language. After passing the screening interview when this was dropped on me, I could have withdrawn my interest as arguably I was not going to be a good fit. However, I remember a bit of wisdom from one of my instructors John at Flatiron School told me: "In the professional world, the expectation to pick up, and be able to functionally use, a new language is generally expected at about a week". Having this in mind, I figured I would give it my best. After all, the worst thing that can happen is I bomb the technical interview and receive a rejection.&lt;/p&gt;

&lt;p&gt;How similar are Java and Javascript? Car is to carpet and Java is to Javascript. They both fall under the umbrella of 'C-style' languages and share quite a bit of syntax, but from a technical standpoint are quite different.&lt;/p&gt;

&lt;p&gt;Java is my first introduction to a hard-typed language and there were certainly some hurdles in picking up the new concepts. For starters, even the tools to run Java are not consistent with the other languages I was familiar with. I could not use VS code, because the language needs a compiler to run so I downloaded IntelliJ and began diving into 12 hrs of youtube videos. I found very quickly that object oriented programming practices that I had been exposed to at Flatiron school would much more utilized in Java by necessity then they were for Javascript(much more flexible). The four big ones: abstraction, encapsulation, inheritance, and polymorphism are absolute necessities to writing good, readable Java code.   Also, the primitive and reference types operate in fundamentally different ways than JS and being used to the JS operation of variables took a while to get the hang of. These variables further have to be defined by their type to compile correctly, so the result is a very 'bullet-proof' runtime of your application. There are many other differences, but you get the idea.&lt;/p&gt;

&lt;p&gt;When it came time to take the technical interview, I had put at least 48 hours into studying the language and felt I could actually code something when I sat down to complete a Java algorithm. My technical interviewer gave his background and then put a problem in front of me. What luck! I had programmed in Java not 2 hours before in front of me: Build a hashMap to correctly store and retrieve the values presented. I was able to successfully complete the problem and pass the interview with an 85% and the algorithm worked at worst case on a complexity of O(n).&lt;/p&gt;

&lt;p&gt;I was eventually offered a position, but unfortunately the ability to relocate was required and I turned the offer down. In any case, I can take confidence away and believe this was useful experience in learning a new language will serve me well in the future. On to the next challenge!&lt;/p&gt;

</description>
      <category>java</category>
      <category>oop</category>
    </item>
    <item>
      <title>Technical Interviewing as a Bootcamp Grad</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Fri, 28 Feb 2020 23:47:14 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/technical-interviewing-as-a-bootcamp-grad-5155</link>
      <guid>https://dev.to/andyreadpnw/technical-interviewing-as-a-bootcamp-grad-5155</guid>
      <description>&lt;p&gt;Graduating from a 4 month Software Engineering immersion school does not, by itself, prepare you to ace technical interviews in the job market. It may not even adequately prepare students in a number data structures you are likely to encounter on these tests(like stacks, hashmap operations, binary search, ect.). What bootcamp-style engineering schools give students are the fundamentals in a few languages and the ability to learn how to learn programming concepts so that they are set-up to excel on the job. My personal experience is echoed by many other graduates I know so I wanted to frame my experience with algorithms and technical coding challenges and what I am personally doing to solve these challenges in the limited time period.&lt;/p&gt;

&lt;p&gt;My first technical interview was the week after graduation and was in a mock format to evaluate and prepare for the real-deal. A third-party company affiliated with Flatiron School(my bootcamp), was contracted to give an hour-long technical interview and provide feedback. My question was in regards to string-manipulation of a 200 line string that looked like it contained objects with key-value pairs. The interviewer informed me I would be required to change all the key values to camal-case; that is: transform a key-value from something like dog-walker: "Bernard" to dogWalker: "Bernard". I also had to account for a number of edge-cases where the key was dog-walker-address to dogWalkerAddress or city/state to cityState. &lt;/p&gt;

&lt;p&gt;As I talked though the problem before diving into coding, I felt confident. I was going to parse the single huge string into an array of objects with JSON.parse and then assign all the key-value pairs to variables with Object.assign. Then I would use regular expressions to find any separating characters like '-', '/', or '=', determine the position of that character, and operate to make the next character uppercase before continuing onto the next object. After confirming this was an acceptable solve for the interviewers requirements I dived into the coding. &lt;/p&gt;

&lt;p&gt;40 minutes had elapsed by the time I was able to get the objects into variables, had created an iterative approach to working with each key, and used the regular expression to find the positions I needed to operate on, and changed these to uppercase. Congratulations, I was able to solve the equation for the base cases! At this point the interviewer let me know we had reached the time-limit and although I only accounted for one edge-case I thought I had performed fairly well. The feedback I received a day-later was a bit of a shock:&lt;/p&gt;

&lt;p&gt;"Andy was a pleasure to have in an interview setting, and he definitely checked off all the boxes when it comes to soft skills. Based on the observations in the coding exercise, Andy sounds very confident and its clear that he has a sense of what he wants to accomplish and how he'd like to get there. The main feedback for Andy would be to remain confident and trust the output that he receives in the console. It was often the small mistakes that really held Andy back from moving through this problem efficiently. Little typos, not fully investigating the output of the console, as well as some of the methods he was using to solve the problem all contributed to the time it took to get to the result of the first part of the problem. Throughout the interview, Andy would express his concern for the run-time performance of the problem, which is good to bring up as an optimization, but he should focus on simply solving the problem, and only then consider optimizations. He might find the original approach is an optimal solution. 2/5" &lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/l3q2K5jinAlChoCLS/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/l3q2K5jinAlChoCLS/giphy.gif" alt="I thought I did the thing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2/5... Despite implementing a naive solution that admittedly did not solve the edge cases, I thought my solution was adequate enough to at least mean I would pass. The experience was instructional. When given a challenge, the bar is to at least solve a challenge to the full extent of the question, and then it is acceptable to refactor for performance and other tasks that give style points.&lt;/p&gt;

&lt;p&gt;Unfortunately for me, when it then came time for technical interviews in the next week for actual developer positions I applied for, I was similarly hit by the unexpected. I took one screening test in Javascript which required me to solve a number of array tasks. Again I was able to solve all the functionality required, but the testing site HackerRank wants all the outputs in a node function process.stdout format instead of simply being returned. At Flatiron school we were not introduced to Node.js as a server/backend as we exclusivley used Ruby on Rails. After failing to figure out how to output my correctly coded question, I ran up against the time limit and was unable to get any of the tests to pass. That night after researching I found that node handles the return similar to console.log in the following format and that was the only way to pass the tests:&lt;/p&gt;

&lt;p&gt;console.log = function (d) {&lt;br&gt;
  process.stdout.write(d + '\n');&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;Similarly, I took two code screening challenges that used data structures I was unfamiliar with and subsequently did not make the next interview round. One was on working with a stack to check if any word was a palindrome and the other was a hashmap operations challenge. I had seen neither of these data structures before and was forced to spend the whole challenge time period researching and not solving. &lt;/p&gt;

&lt;p&gt;My experiences with technical interviewing has confirmed that bootcamp graduates do have gaps in their knowledge that make these interviews potentially challenging. There is simply too much information to fully teach in a 4 month course to master or touch on all of the concepts. After graduation, I recommend you dive into Leetcode, Hackerrank, Geeks for Geeks, ect. and expand your ability solve coding challenges in a variety of different formats. Additionally, review all the data structures present in the languages you are interviewing for and make sure you have a firm understanding of all of these. Finally, the only thing holding bootcamp grads back is experience, so just keep plugging away and get better!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React.js CSV Importing Made Easy With PapaParse</title>
      <dc:creator>andyreadpnw</dc:creator>
      <pubDate>Mon, 17 Feb 2020 17:59:23 +0000</pubDate>
      <link>https://dev.to/andyreadpnw/react-js-csv-importing-made-easy-with-papaparse-4hm7</link>
      <guid>https://dev.to/andyreadpnw/react-js-csv-importing-made-easy-with-papaparse-4hm7</guid>
      <description>&lt;p&gt;A coding coach that I had at Flatiron school once recommended I develop a habit for posting content on dev.to as a way to continue to stay connected with the greater programming community. Well, its been about a month since my last post largely because I was dedicated to producing a few technical projects. What better way to get back into the habit than to show a simple and useful library for react that allows users to import data in a user-friendly medium: CSV parsing!&lt;/p&gt;

&lt;p&gt;The set-up is fairly simple. Start by bringing the package into your react app:&lt;/p&gt;

&lt;p&gt;npm install --save react-papaparse&lt;/p&gt;

&lt;p&gt;Then you import the library into the component you want to use the library for:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WPg1_MDw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/69i87izy0jjt0v0jsers.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WPg1_MDw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/69i87izy0jjt0v0jsers.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, we create an element with a couple key events and functions that are necessary in the react element:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--46a-wXam--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/21b6szsd08dlchzk30qj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--46a-wXam--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/21b6szsd08dlchzk30qj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me explain: we need call the inputRef function to tell the PapaParse library that we would like to input a file. This will automatically open up a file browser to select a local CSV file from your machine. Once the file is selected in will automatically convert the delimited data into JSON. Please note that the data will be streamed exactly based on the index in the CSV and will disregard anything resembling column headers. If headers are required for your app there is a way to do so passing the following in the elements JSX:&lt;/p&gt;

&lt;p&gt;'configOptions= header: true '&lt;/p&gt;

&lt;p&gt;The next important piece is the onLoaded event, which we can use to pass the data to a function and actually use the data for whatever we would like. For my purposed I take that data and use it to post to my backend to create products for display. Like so:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3PGQYydY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0qmiw468wu2qvlfyd11e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3PGQYydY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0qmiw468wu2qvlfyd11e.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I hope is clear from the above, as long as the data is structured, it is relatively simple to send the data exactly where you want it. Easy!&lt;/p&gt;

</description>
      <category>react</category>
      <category>csv</category>
      <category>library</category>
    </item>
  </channel>
</rss>
