<?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: Erik Nelson</title>
    <description>The latest articles on DEV Community by Erik Nelson (@erikthered).</description>
    <link>https://dev.to/erikthered</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%2F6086%2F4a4cbb37-92a4-4c53-a641-da9b86d15534.jpeg</url>
      <title>DEV Community: Erik Nelson</title>
      <link>https://dev.to/erikthered</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erikthered"/>
    <language>en</language>
    <item>
      <title>JVM devs who prefer Maven over Gradle, what are your reasons?</title>
      <dc:creator>Erik Nelson</dc:creator>
      <pubDate>Mon, 11 Nov 2019 14:14:43 +0000</pubDate>
      <link>https://dev.to/erikthered/jvm-devs-who-prefer-maven-over-gradle-what-are-your-reasons-3bnd</link>
      <guid>https://dev.to/erikthered/jvm-devs-who-prefer-maven-over-gradle-what-are-your-reasons-3bnd</guid>
      <description>&lt;p&gt;I've personally always found Gradle more intuitive to use and of late they've been shipping a lot of tangible improvements. However, I still see a lot of people who prefer Maven and I'm curious as to what the reasons are that drive that preference.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>maven</category>
      <category>gradle</category>
      <category>java</category>
    </item>
    <item>
      <title>Outfitting a developer in 2019</title>
      <dc:creator>Erik Nelson</dc:creator>
      <pubDate>Mon, 29 Apr 2019 00:00:00 +0000</pubDate>
      <link>https://dev.to/erikthered/outfitting-a-developer-in-2019-8l2</link>
      <guid>https://dev.to/erikthered/outfitting-a-developer-in-2019-8l2</guid>
      <description>&lt;p&gt;At this point in my career I've changed jobs enough times that I'm starting to see certain patterns emerge. One of less good ones is how hardware (and sometimes software) is chosen for developers with little to no input from the devs themselves. Everybody works a little bit differently so it makes sense to provide some level of choice in what tools we use to do our work each day.&lt;/p&gt;

&lt;p&gt;Although things are certainly better than they were years ago, when you'd get the same anemic Windows laptop as your non-engineering co-workers, we've still got plenty of room to improve. My last few employers have been content to toss me a decently configured MacBook Pro and call it a day. While MacOS is certainly a nice operating system, my personal preference is Linux for software development. Obviously, OS choice is highly subjective and comes down to what you're comfortable with.&lt;/p&gt;

&lt;p&gt;Fortunately, where we're at now all three major OSes (Windows, MacOS, Linux) are perfectly serviceable for doing general development. Obviously, if you're working with a specialized stack or target you may have additional constraints to be considered. That said, give your devs as much choice as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core workstation
&lt;/h2&gt;

&lt;p&gt;Most workplaces now opt for a laptop by default, which makes sense as the portability gives you a lot more flexibility. If you need raw power a desktop is always going to be king, but laptops are more than capable for a large percentage of devs. So for the purpose of this article, let's only consider laptops.&lt;/p&gt;

&lt;p&gt;Here's the minimum spec I'd recommend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multicore, modern x86 processor: Intel i5/i7 or Ryzen 5/7&lt;/li&gt;
&lt;li&gt;16GB+ RAM (8 just isn't enough with things like Docker in the mix)&lt;/li&gt;
&lt;li&gt;512B+ SSD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These specs should cover you for most general development workloads, I would hope if you're in a more specialized environment you've already got equipment to match.&lt;/p&gt;

&lt;p&gt;A word on laptop screens: 1080P is probably the most common resolution and a solid choice. A few laptops offer 1440P or 4K, but these aren't all they're cracked up to be: you'll need to adjust scaling to compensate for the small physical screen size and driving higher resolutions comes at the cost of battery life. Steer clear of 1366x768 screens though, there's no reason these should ever be chosen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ultrabooks
&lt;/h3&gt;

&lt;p&gt;These are more portable (thinner and lighter) than "standard" laptops, which is achieved by soldering/glueing components. As a result you lose the ability to upgrade or service most components. Heat management can be an issue for some models. These typically max out at 16GB of RAM. 13"-14" screens are typical for this form factor. Prices range from $1000 up to $2500, with configurations fitting the above recommendations around $1600 - $2000.&lt;/p&gt;

&lt;h3&gt;
  
  
  Traditional Laptops
&lt;/h3&gt;

&lt;p&gt;These are heavier and larger than Ultrabooks, but are better at managing heat and usually allow for some upgrades down the road. Average screen size is a bit bigger around 14"-15" and RAM capacity tops out at 32GB. The price range is pretty wide on these, with some configurations even exceeding $3000. A reasonable configuration still hovers around $1600 - $1800.&lt;/p&gt;

&lt;h2&gt;
  
  
  Peripherals
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Monitors
&lt;/h3&gt;

&lt;p&gt;The bottom line here is to supply ample screen real estate, the exact configuration is more personal preference than anything. For a minimum I'd recommend a pair of 1080P screens around 24" or a single 1440P screen at 27-32". If you want 4K I'd only recommend 32" and above, due to pixel density. In general, opt for an IPS panel as this technology has better color accuracy and viewing angles. You're only looking at $300-$400 for the minimum recommendation here.&lt;/p&gt;

&lt;h3&gt;
  
  
  USB-C Hub/Dock
&lt;/h3&gt;

&lt;p&gt;As USB-C is starting to replace all other connectors on laptops, it's important to have enough ports to connect all of your peripherals. There are a lot of options in the space and compatibility becomes complicated once you've got video in the mix as well. I would recommend selecting a hub/dock that has Thunderbolt 3 support, as this is typically how video signals are carried. If you're using a laptop that charges via USB-C, some docks are able to provide power. Your best bet may be to check for the specific support for your laptop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extra charger
&lt;/h3&gt;

&lt;p&gt;Chargers aren't that expensive and it's extremely convenient to have two. One can be kept in your bag when you're on the go and the other can be left hooked up to your permanent workstation. In the case you're using a dock that provides power, you won't need two.&lt;/p&gt;

&lt;h3&gt;
  
  
  Headset or Headphones with integrated microphone
&lt;/h3&gt;

&lt;p&gt;Most laptops have a webcam built in which works fine, but the integrated microphone and speakers can be less than ideal. My recommendation would be to set a budget and let people choose what they want. There are several different kinds of headphones/headsets, so it's a very subjective choice. I know plenty of people who love in-ear headphones but I've not found a pair that stays comfortable after about an hour of use.&lt;/p&gt;

&lt;h3&gt;
  
  
  External keyboard and mouse
&lt;/h3&gt;

&lt;p&gt;It's good to have these if you use a laptop stand or dock. These items are also going to heavily depend on personal preference. Unless you're really averse to cables, I tend to prefer wired keyboards and mice to eliminate another potential point of trouble. Annoyingly, USB3 has a &lt;a href="https://www.intel.com/content/www/us/en/io/universal-serial-bus/usb3-frequency-interference-paper.html"&gt;known interference issue&lt;/a&gt; with 2.4GHz wireless devices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Setups
&lt;/h2&gt;

&lt;p&gt;In case you think this is a sales pitch, I want to assure you it's not. None of the links below are affiliate links and I have no relationship with either Dell or Lenovo. It just happens that these two companies make machines that tend to support both Linux and Windows well, while being accepted in larger enterprises. There's certainly other manufacturers out there that make great machines, so don't immediately rule them out just because I didn't include them here.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ultrabooks
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Dell Option:
&lt;/h4&gt;

&lt;p&gt;Dell is awesome, as they have several &lt;em&gt;Developer Edition&lt;/em&gt; laptops that can be purchased with Ubuntu pre-installed (such as the one linked). Obviously Windows is still available if you prefer that environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.dell.com/en-us/work/shop/dell-laptops-and-notebooks/xps-13-developer-edition/spd/xps-13-9380-laptop/cax13w10p1c603subuntu"&gt;Dell XPS 13 9380 - Developer Edition&lt;/a&gt; - $1,659.99

&lt;ul&gt;
&lt;li&gt;Intel Core i7-8565U&lt;/li&gt;
&lt;li&gt;16GB LPDDR3 2133MHz RAM (Upgrade)&lt;/li&gt;
&lt;li&gt;512GB M.2 PCIe NVMe Solid State Drive (Upgrade)&lt;/li&gt;
&lt;li&gt;13.3" FHD (1920x1080) Non-Touch InfinityEdge Display&lt;/li&gt;
&lt;li&gt;Intel UHD Graphics 620&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dell.com/en-us/work/shop/dell-ultrasharp-27-monitor-u2719d/apd/210-arcv/monitors-monitor-accessories"&gt;Dell UltraSharp 27 Monitor: U2719D 1440P&lt;/a&gt; - $379.99&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.dell.com/en-us/work/shop/dell-business-dock-wd15-with-130w-adapter-with-dib-mdp-to-dp-cable-27ft-08m/apd/452-bddv/pc-accessories?ref=p13n_snp_results_mv&amp;amp;c=us&amp;amp;cs=04&amp;amp;l=en&amp;amp;s=bsd"&gt;Dell Business Dock - WD15&lt;/a&gt; - $182.99&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estimated Total: $2,322.97 (before tax)&lt;/p&gt;

&lt;h4&gt;
  
  
  Lenovo Option:
&lt;/h4&gt;

&lt;p&gt;While there isn't any option to have Linux pre-installed on Lenovo laptops, there are a good number of models which are &lt;a href="https://certification.ubuntu.com/certification/make/Lenovo/?query=&amp;amp;category=Laptop&amp;amp;release=&amp;amp;level=Any"&gt;Ubuntu certified&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-x/ThinkPad-X1-Carbon-6th-Gen/p/20KH002KUS"&gt;ThinkPad X1 Carbon 6th Gen&lt;/a&gt; $1883.27&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intel Core i7-8650U&lt;/li&gt;
&lt;li&gt;16 GB RAM&lt;/li&gt;
&lt;li&gt;512 GB SSD PCIe&lt;/li&gt;
&lt;li&gt;14.0" WQHD (2560 x 1440) IPS Display&lt;/li&gt;
&lt;li&gt;Intel® UHD Graphics 620&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.lenovo.com/us/en/accessories-and-monitors/monitors/professional/P27h-10A16270QP127inch-Monitor-HDMI/p/61AFGAR1US"&gt;ThinkVision P27h-10 27 inch Wide QHD IPS Type-C Monitor&lt;/a&gt; - $268.99&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.lenovo.com/us/en/accessories-and-monitors/docking/universal-cable-docks-thunderbolt/Thunderbolt-Dock-US/p/40AC0135US"&gt;ThinkPad Thunderbolt Dock&lt;/a&gt; - $244.99&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estimated Total: $2,397.25 (before tax)&lt;/p&gt;

&lt;h3&gt;
  
  
  Traditional Laptops
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Dell Option:
&lt;/h4&gt;

&lt;p&gt;Similar to the XPS 13 above, this model allows you to have Ubuntu pre-installed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.dell.com/en-us/work/shop/workstations-isv-certified-dell/precision-5530/spd/precision-15-5530-laptop/xctop5530hwus3"&gt;Dell Precision 5530&lt;/a&gt; - $2,191.74&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intel Core i7-8850H (6 cores)&lt;/li&gt;
&lt;li&gt;16 GB DDR4-2666 RAM&lt;/li&gt;
&lt;li&gt;512GB M.2 NVMe PCIe Class 40 SSD&lt;/li&gt;
&lt;li&gt;15.6" UltraSharp FHD Display, 1920x1080&lt;/li&gt;
&lt;li&gt;Nvidia Quadro P1000 w/4GB GDDDR5&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.dell.com/en-us/work/shop/dell-ultrasharp-27-monitor-u2719d/apd/210-arcv/monitors-monitor-accessories"&gt;Dell UltraSharp 27 Monitor: U2719D 1440P&lt;/a&gt; - $379.99&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.dell.com/en-us/work/shop/dell-business-dock-wd15-with-130w-adapter-with-dib-mdp-to-dp-cable-27ft-08m/apd/452-bddv/pc-accessories?ref=p13n_snp_results_mv&amp;amp;c=us&amp;amp;cs=04&amp;amp;l=en&amp;amp;s=bsd"&gt;Dell Business Dock - WD15&lt;/a&gt; - $182.99&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estimated Total: $2,754.72 (before tax)&lt;/p&gt;

&lt;h4&gt;
  
  
  Lenovo Option:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.lenovo.com/us/en/laptops/thinkpad/thinkpad-x/ThinkPad-X1-Extreme/p/20MF000BUS"&gt;Lenovo ThinkPad X1 Extreme&lt;/a&gt; - $1,871.10&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intel Core i7-8750H (6 cores)&lt;/li&gt;
&lt;li&gt;16 GB DDR4 2666MHz&lt;/li&gt;
&lt;li&gt;512 GB Solid State Drive, PCIe-NVME OPAL2.0 M.2&lt;/li&gt;
&lt;li&gt;15.6" FHD (1920 x 1080) IPS Display&lt;/li&gt;
&lt;li&gt;NVIDIA GeForce GTX 1050Ti 4GB&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.lenovo.com/us/en/accessories-and-monitors/monitors/professional/P27h-10A16270QP127inch-Monitor-HDMI/p/61AFGAR1US"&gt;ThinkVision P27h-10 27 inch Wide QHD IPS Type-C Monitor&lt;/a&gt; - $268.99&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.lenovo.com/us/en/accessories-and-monitors/docking/universal-cable-docks-thunderbolt/Thunderbolt-Dock-US/p/40AC0135US"&gt;ThinkPad Thunderbolt Dock&lt;/a&gt; - $244.99&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estimated Total: $2,385.08 (before tax)&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;To repeat the refrain throughout the article: give developers choice. Computers in our profession are highly personal items which we spend a huge amount of time on. We should have a reasonable ability to choose what fits best with our personality and working style. I hope this is helpful to someone out there! Please feel free to leave comments and feedback.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tools</category>
      <category>hardware</category>
    </item>
    <item>
      <title>Splitting a commit with git rebase</title>
      <dc:creator>Erik Nelson</dc:creator>
      <pubDate>Thu, 21 Feb 2019 15:13:05 +0000</pubDate>
      <link>https://dev.to/erikthered/splitting-a-commit-with-git-rebase-2ihp</link>
      <guid>https://dev.to/erikthered/splitting-a-commit-with-git-rebase-2ihp</guid>
      <description>&lt;p&gt;I was recently working on migrating a project to GitLab, and had a branch with a some extraneous commits from trying to get CI setup correctly. While I was rebasing I noticed that I had a commit with two separate changes in it. After some digging I found out that I could also use interactive rebase split this commit into two distinct, atomic ones. I'll walk through how we can accomplish this goal.&lt;/p&gt;

&lt;p&gt;First, let's perform an interactive rebase so that the commit we want to split is included in the range. In this case we can rebase the entire branch to where it diverged from master, so simply run &lt;code&gt;git rebase -i master&lt;/code&gt;. Below we can see a snippet of the interactive rebase:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwkzh83m016ypjlcnad0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwkzh83m016ypjlcnad0x.png" alt="Screenshot of rebase"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The commit we want to split has the hash &lt;code&gt;bc38ac55&lt;/code&gt;, so let's change &lt;em&gt;pick&lt;/em&gt; to &lt;em&gt;edit&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fyn0gm08q2p0bnx7ua1a2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fyn0gm08q2p0bnx7ua1a2.png" alt="Screenshot of updated rebase with edit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can save and exit the editor, now we've gotten the message "Stopped at bc38ac55". Good right? Not quite. What we really want to do is edit &lt;code&gt;bc38ac55&lt;/code&gt;, so we need to run &lt;code&gt;git reset HEAD~&lt;/code&gt; to get to a state where the changes haven't been staged and committed yet. After running this command and doing a &lt;code&gt;git status&lt;/code&gt; we can see that the changes are present but not staged:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd2onnj4iu9onr1si6hbl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd2onnj4iu9onr1si6hbl.png" alt="Screenshot of git status"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can stage and commit as needed, creating 2 (or more commits). After we're done we can go ahead and run &lt;code&gt;git rebase --continue&lt;/code&gt; to finish the rebase. Now when we run &lt;code&gt;git log --oneline&lt;/code&gt; we can see our changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd1xuwr7etsjnkiov6mtj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd1xuwr7etsjnkiov6mtj.png" alt="Screenshot of git log after changes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can now see the two commits created from the process, and notice that the hash has also changed. Obviously this is something that is best done on a local branch or one that you've been working on solo and can safely force push over to the remote repo.&lt;/p&gt;

&lt;p&gt;Hopefully this will be as helpful for you as it was for me!&lt;/p&gt;

</description>
      <category>git</category>
    </item>
  </channel>
</rss>
