Skip to content

Commit

Permalink
pc build post draft
Browse files Browse the repository at this point in the history
  • Loading branch information
jessecambon committed Oct 12, 2024
1 parent 04fb5fe commit d5b29e2
Show file tree
Hide file tree
Showing 5 changed files with 269 additions and 937 deletions.
54 changes: 50 additions & 4 deletions _drafts/2024-XX-XX-pc-build-part-1.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,59 @@
---
layout: post
title: "How to Create An R Package"
date: 2019-11-11
title: "Planning a PC Build"
date: 2024-10-12
tags: draft
---

Earlier this year I built a so called "Small Form Factor" (SFF) PC. As the name suggests, these PCs priorize a smaller footprint and portibility compared to the typical more bulky desktops most people are familiar with. Browsing the popular [r/sffpc](https://www.reddit.com/r/sffpc/) you can see people showing off their SFF builds.

My build is not nearly as flashy or involved as many of the posts you'll find on that subreddit, but it was a fun project and I've been happy with the results. I thought I would write up a blog post describing the process of planning this build. This isn't intended to be a comprehensive guide on PC building, but you can refer to the references at the bottom for more guidance.

<!-- insert picture of build -->

I have almost exclusively used laptops in recent years and was unaware that building a desktop into such a small package was even possible. Laptops are conveniant and portable, but tend to have less powerful components and offer less flexibility with component selection and upgrades. For instance, the life of a desktop can often be extended with upgrades to the CPU, memory, or video card - often not possible with laptops. SFF PCs offer a compelling alternative if you want some of the advantages of a desktop without the extra bulk.

The PC I built is designed so that I can easily move it from one room to another. I could potentially even put it in a case or backpack and travel with it, but I don't see myself doing that in the near future. I had four purposes in mind when building the PC:

1. Typical PC gaming (connected to a monitor and usually using mouse and keyboard)
1. "Console-style" gaming (connected to a TV and using a controller)
1. Machine Learning work (Pytorch, Transformers)
1. Photo editing

All four of these use cases benefit from GPU (graphics card) acceleration so the graphics card was a priority. I also from the beginning planned to exclusively use Linux on the PC, which caused me to priotize an AMD graphics card for their driver support. People do use Nvidia graphics cards on Linux, but the driver support for AMD cards has historically been better from what I could tell.

### Planning

The first step in building a PC is to decide what you want to use it for and what your priorities are. For instance, a PC that is built for high performance gaming will likely require quite different components to PC intended for photo editing. Prioritizing a powerful graphics card makes sense for machine learning or gaming, but it may offer little benefit if the applications you intend to use don't heavily utilize graphics cards.

- What types of applications are you going to use it for?
- What is your budget?
- Does it need to be small and portable?
- Is reducing fan noise a priority?

### Picking Components

[PCPartPicker Part List](https://pcpartpicker.com/list/NFjtdH)

Type|Item
:----|:----
**Case** | [S300 - Mini-ITX PC Gaming Case - Front I/O USB 3.0 Type - C Port - SFX Power Supply 100-130mm -Cable Management System - luminum Mini-ITX Motherboard Small Portable PC Case (PCIe 3.0 16X Rise](https://pcpartpicker.com/product/BtxRsY/placeholder)
**Power Supply** | [Corsair SF750 (2018) 750 W 80+ Platinum Certified Fully Modular SFX Power Supply](https://pcpartpicker.com/product/nJrmP6/corsair-sf750-2018-750-w-80-platinum-certified-fully-modular-sfx-power-supply-cp-9020186-na)
**Video Card** | [Sapphire PULSE Radeon RX 7700 XT 12 GB Video Card](https://pcpartpicker.com/product/TxTZxr/sapphire-pulse-radeon-rx-7700-xt-12-gb-video-card-11335-04-20g)
**CPU** | [AMD Ryzen 5 7600 3.8 GHz 6-Core Processor](https://pcpartpicker.com/product/yXmmP6/amd-ryzen-5-7600-38-ghz-6-core-processor-100-100001015box)
**CPU Cooler** | [ID-COOLING IS-55 Black 54.6 CFM CPU Cooler](https://pcpartpicker.com/product/7pjBD3/id-cooling-is-55-black-546-cfm-cpu-cooler-is-55-black)
**Motherboard** | [ASRock A620I LIGHTNING WIFI Mini ITX AM5 Motherboard](https://pcpartpicker.com/product/zQhv6h/asrock-a620i-lightning-wifi-mini-itx-am5-motherboard-a620i-lightning-wifi)
**Wifi Adapter** | [Intel AX210 IEEE 802.11ax Bluetooth 5.2 Tri Band Wi-Fi/Bluetooth Combo Adapter for Notebook](https://pcpartpicker.com/product/khhFf7/placeholder)
**Memory** | [G.Skill Flare X5 32 GB (2 x 16 GB) DDR5-6000 CL30 Memory](https://pcpartpicker.com/product/LBstt6/gskill-flare-x5-32-gb-2-x-16-gb-ddr5-6000-cl30-memory-f5-6000j3038f16gx2-fx5)
**Storage** | [SK Hynix Platinum P41 2 TB M.2-2280 PCIe 4.0 X4 NVME Solid State Drive](https://pcpartpicker.com/product/yGTp99/sk-hynix-platinum-p41-2-tb-m2-2280-pcie-40-x4-nvme-solid-state-drive-shpp41-2000gm-2)
**Case Fan** | [Noctua A12x15 PWM chromax.black.swap 55.44 CFM 120 mm Fan](https://pcpartpicker.com/product/FM3mP6/noctua-nf-a12x15-pwm-chromaxblackswap-5544-cfm-120-mm-fan-nf-a12x15-pwm-chromaxblackswap)
| Generated by [PCPartPicker](https://pcpartpicker.com) 2024-10-12 11:32 EDT-0400 |

- I selected the S300 case as it was a relatively inexpensive option (~$100) for a small (~8 Liter). Except for the front panel, the entire case is perforated metal so the airflow is quite good and helps keep components cooler than they otherwise would be in such a small case. I also considered the even smaller Velka 3 case, but this would have been more expensive, more of a process to build in, and greatly limited my options for graphics cards and CPU coolers. Two of the biggest considerations in an SFF build are the dimensions of CPU coolers and graphics cards that will fit in the case.
- The Ryzen 7600 CPU was selected for power efficiency.
- The 7700 XT GPU was a good value graphics card at the time of purchase. It outperforms the more expensive 4060 Ti from Nvidia.
- The ID-55 CPU cooler was the biggest cooler I could fit in this case. I also considered the AXP90-53 copper, but there were reports of difficulties mounting it on my motherboard of choice. I ended up swapping out the fan on the cooler for a quieter 12x120 mm Noctua fan, but this isn't necessary if you aren't too particular about fan noise.
- The Asrock A620i is one of the cheapest AM5 mini-itx motherboards around and it met all the requirements I needed.

### References

Expand All @@ -20,9 +68,7 @@ tags: draft
- [r/sffpc](https://www.reddit.com/r/sffpc/) - For small form factor (SFF) builds
- [r/pcmasterrace](https://www.reddit.com/r/pcmasterrace/)


Youtube build videos are a great resource. I used the following video as a guide for my build: [S300 build $880 Lunchbox Gaming PC (1080p Destroyer)](https://www.youtube.com/watch?v=3BguJvWsyaM).


- [Building a Mid Range Gaming ITX PC doesn't have to be difficult - Featuring S300 ITX case](https://www.youtube.com/watch?v=rVP9kyrK7zk)
- [Don't Tell Big Rig Bros: This All AMD Small Foot Print Mini PC SLAYS AAA Games!](https://www.youtube.com/watch?v=0ypr8DxLKAE)
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@
<meta property="og:title" content="How to Create An R Package" />
<meta name="author" content="Jesse Cambon" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="References" />
<meta property="og:description" content="References" />
<link rel="canonical" href="http://localhost:4000/2019/11/11/2019-11-creating-an-r-package.html" />
<meta property="og:url" content="http://localhost:4000/2019/11/11/2019-11-creating-an-r-package.html" />
<meta name="description" content="I recently created my first R package because I wanted to have a simple way to use geocoding services like the US Census in R. Creating an R package can seem like a daunting task. …." />
<meta property="og:description" content="I recently created my first R package because I wanted to have a simple way to use geocoding services like the US Census in R. Creating an R package can seem like a daunting task. …." />
<link rel="canonical" href="http://localhost:4000/2024/08/06/2019-11-creating-an-r-package.html" />
<meta property="og:url" content="http://localhost:4000/2024/08/06/2019-11-creating-an-r-package.html" />
<meta property="og:site_name" content="Jesse Cambon" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2019-11-11T00:00:00-05:00" />
<meta property="article:published_time" content="2024-08-06T22:20:10-04:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="How to Create An R Package" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Jesse Cambon"},"dateModified":"2019-11-11T00:00:00-05:00","datePublished":"2019-11-11T00:00:00-05:00","description":"References","headline":"How to Create An R Package","mainEntityOfPage":{"@type":"WebPage","@id":"http://localhost:4000/2019/11/11/2019-11-creating-an-r-package.html"},"url":"http://localhost:4000/2019/11/11/2019-11-creating-an-r-package.html"}</script>
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Jesse Cambon"},"dateModified":"2024-08-06T22:20:10-04:00","datePublished":"2024-08-06T22:20:10-04:00","description":"I recently created my first R package because I wanted to have a simple way to use geocoding services like the US Census in R. Creating an R package can seem like a daunting task. ….","headline":"How to Create An R Package","mainEntityOfPage":{"@type":"WebPage","@id":"http://localhost:4000/2024/08/06/2019-11-creating-an-r-package.html"},"url":"http://localhost:4000/2024/08/06/2019-11-creating-an-r-package.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="stylesheet" href="/assets/css/style.css"><link type="application/atom+xml" rel="alternate" href="http://localhost:4000/feed.xml" title="Jesse Cambon" /><!-- Leaflet JS
Based on https://dieghernan.github.io/201905_Leaflet_R_Jekyll/#step1 -->
Expand Down Expand Up @@ -66,8 +66,8 @@

<header class="post-header">
<h1 class="post-title p-name" itemprop="name headline">How to Create An R Package</h1>
<p class="post-meta"><time class="dt-published" datetime="2019-11-11T00:00:00-05:00" itemprop="datePublished">
Nov 11 2019
<p class="post-meta"><time class="dt-published" datetime="2024-08-06T22:20:10-04:00" itemprop="datePublished">
Aug 6 2024
</time></p>
<!-- JAC: Removed Author listing -->

Expand All @@ -87,13 +87,48 @@ <h1 class="post-title p-name" itemprop="name headline">How to Create An R Packag
</header>

<div class="post-content e-content" itemprop="articleBody">
<h3 id="references">References</h3>
<p>I recently created <a href="https://github.com/jessecambon/tidygeocoder">my first R package</a> because I wanted to have a simple way to use geocoding services like the US Census in R. Creating an R package can seem like a daunting task. ….</p>

<p>If you have written functions in R that would be useful others in the R community, a great way to share this work is with an R package. Thanks to some helpful developer tools, the process of creating and publishing an R package can be much easier than it might seem.</p>

<h3 id="getting-started">Getting Started</h3>
<ul>
<li><a href="https://rstudio.com/products/rstudio/">Install R-Studio</a></li>
<li>We will be generating our documentation with <a href="https://cran.rstudio.com/web/packages/roxygen2/index.html">roxygen2</a>. This will allow us to generate all of our <code class="language-plaintext highlighter-rouge">man</code> documentation from embedded coments in our <code class="language-plaintext highlighter-rouge">R</code> code files.</li>
</ul>

<h3 id="file-layout">File Layout</h3>

<h5 id="important-files">Important Files</h5>
<ul>
<li><code class="language-plaintext highlighter-rouge">DESCRIPTION</code>: Contains important infornation about your package such as dependencies, author info, and your license.</li>
<li><code class="language-plaintext highlighter-rouge">.Rbuildignore</code>: list files and folders you do not want to include in your R package. Include files and directories that aren’t part of the standard R package format such as <code class="language-plaintext highlighter-rouge">/data-raw</code> and <code class="language-plaintext highlighter-rouge">/README.md</code>.</li>
<li><code class="language-plaintext highlighter-rouge">projectname.Rproj</code> : RStudio project file. Don’t lose this.</li>
</ul>

<h5 id="main-folders">Main Folders</h5>
<ul>
<li><code class="language-plaintext highlighter-rouge">R</code>: store your R code here.</li>
<li><code class="language-plaintext highlighter-rouge">data</code>: datasets will be stored here. If you have scripts and data sources that you use to create this data, save them in a separate <code class="language-plaintext highlighter-rouge">data-raw</code> folder and then be sure to add this directory to your <code class="language-plaintext highlighter-rouge">.Rbuildignore</code> file.</li>
<li><code class="language-plaintext highlighter-rouge">man</code>: Documentation generated by <code class="language-plaintext highlighter-rouge">roxygen2</code> with embedded content in your <code class="language-plaintext highlighter-rouge">R</code> code files.</li>
<li><code class="language-plaintext highlighter-rouge">tests</code>: Use the <a href="https://testthat.r-lib.org/">testthat</a> library to create functional tests for your package. Some properly written and easy to run tests will help give you some peace of mind that your latest bugfix hasn’t broken some other part of the package.</li>
<li><code class="language-plaintext highlighter-rouge">vignettes</code>: vignettes are short examples that demonstrate the functionality of your package. Create a <code class="language-plaintext highlighter-rouge">.Rmd</code> in this directory to create one.</li>
</ul>

<h3 id="resources">Resources</h3>
<ul>
<li>General Instructions: http://r-pkgs.had.co.nz/</li>
<li>More general instructions: https://rstats-pkgs.readthedocs.io</li>
<li><a href="https://cran.r-project.org/web/packages/roxygen2/">roxygen2</a></li>
<li><a href="https://testthat.r-lib.org/">testthat</a></li>
<li><a href="https://www.rstudio.com/wp-content/uploads/2015/03/devtools-cheatsheet.pdf">Devtools cheat sheet</a>
*</li>
</ul>

<p>-</p>

</div>

<!-- comments section --><a class="u-url" href="/2019/11/11/2019-11-creating-an-r-package.html" hidden></a>
<!-- comments section --><a class="u-url" href="/2024/08/06/2019-11-creating-an-r-package.html" hidden></a>
</article>
</div>
</main><footer class="site-footer h-card">
Expand Down
Loading

0 comments on commit d5b29e2

Please sign in to comment.