<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="https://brewcore.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://brewcore.com/" rel="alternate" type="text/html" /><updated>2025-11-02T15:32:28-05:00</updated><id>https://brewcore.com/feed.xml</id><title type="html">Brewcore’s Site</title><author><name>Brewcore</name></author><entry><title type="html">Random Thought: Standard Labor Rates to Support Software Development Automation</title><link href="https://brewcore.com/2020/08/08/random-thought-standard-labor-rate-software-dev.html" rel="alternate" type="text/html" title="Random Thought: Standard Labor Rates to Support Software Development Automation" /><published>2020-08-08T00:00:00-04:00</published><updated>2020-08-08T00:00:00-04:00</updated><id>https://brewcore.com/2020/08/08/random-thought-standard-labor-rate-software-dev</id><content type="html" xml:base="https://brewcore.com/2020/08/08/random-thought-standard-labor-rate-software-dev.html"><![CDATA[<p>Ok, here’s my scenario: I’m a software developer that does a good bit of consulting. This means I often end up performing similar tasks and building similar programs for multiple customers. As an engineer of course I want to automate these tasks to save myself time and reduce the risk of human error, but this automation is in conflict with the business model of consulting.</p>

<p>Allow me to explain using the analogy of a mechanic as an example (any mechanics reading this - if I’m getting it wrong please reach out and let me know).</p>

<p>When you take your car to a garage for most general maintenance work - getting oil changed, brake pads replaced, etc. - many garages charge a ‘standard rate’ for this work. A standard rate is a generally agreed-upon amount of labor that a job should take. This standard benefits both the mechanic and the customer - customers are not overly penalized if a job takes longer due to a mechanic being unfamiliar with their vehicle, and mechanics that are experienced can get more jobs done in a given timeperiod, allowing them to earn more.</p>

<p>As a consulting software engineer I feel this is currently a one-sided arrangement. Customers want the benefit of ‘standard rates’ - costs that are kept low due to the engineer (mechanic) being experienced and having the right tools - but customers don’t allow the engineer any benefits - with an hourly billing model the faster the engineer can do the work the less money they can earn.</p>

<p>Automation is particularly problematic as a consulting software engineer - most customers will not pay for automation to be built, but all customers want the benefit of it. As a consultant if I want to automate a process I must invest non-billable time to create and maintain the automation, and the result is that I can get more done and bill less time.</p>

<p>I propose the following as a compromise that has upsides for both, much like standard labor rates for mechanics: consulting software engineers should determine standard labor rates for tasks they come across consistently enought to automate. Rates should be determined by an average after completing the task manually in varying scenarios. Once a standard rate is established and a task automated, customers should continue to pay the “standard rate”. The automation will give the customer a better experience by giving them a fast turnaround time and predictable results less prone to human error, and the engineer will benefit by earning enough to justify maintaining the automation.</p>

<p>I believe this model could also be adopted when using open source. As an engineer I often leverage open source projects to benefit the projects and customers I work with, but again this results in earning less money, making it difficult for me to find time to contribute to the open source software I use. If I could determine a standard rate for the open source software I use for customers, not only could I potentially earn enough to contribute to those projects but that money could even be passed on directly to the maintainers.</p>

<p>This is something I want to explore further. There are definitely some challenges to it, such as the subtle nature of every software system being just a bit different, making true standardization rather challenging.</p>]]></content><author><name>Brewcore</name></author><summary type="html"><![CDATA[What if we made use of standard labor rates as consulting software engineers?]]></summary></entry><entry><title type="html">Reducing My Google Usage: Search</title><link href="https://brewcore.com/2020/08/08/reducing-my-google-usage-search.html" rel="alternate" type="text/html" title="Reducing My Google Usage: Search" /><published>2020-08-08T00:00:00-04:00</published><updated>2020-08-08T00:00:00-04:00</updated><id>https://brewcore.com/2020/08/08/reducing-my-google-usage-search</id><content type="html" xml:base="https://brewcore.com/2020/08/08/reducing-my-google-usage-search.html"><![CDATA[<p>This is the second post in an ongoing series on reducing my use of Google’s services / products. <a href="/tags/reducing-google-usage/">Click here to view all posts in the series.</a></p>

<h1 id="search">Search</h1>

<p>For most people search has become the default way they navigate the internet. This gives search engines such as Google tremendous power to control our acccess to information and track our behaviours.</p>

<p>To protect your privacy and support a free and open internet you should use a search engine that does not monetize your behavior and information. Two great examples of free, privacy-focused search engines are <a href="https://duckduckgo.com/spread">DuckDuckGo</a> and <a href="https://www.startpage.com">StartPage</a>.</p>]]></content><author><name>Brewcore</name></author><summary type="html"><![CDATA[Second in a series about reducing my Google use. TLDR: Use Startpage or DuckDuckGo for search.]]></summary></entry><entry><title type="html">Reducing My Google Usage: Email</title><link href="https://brewcore.com/2020/06/07/reducing-my-google-usage-email.html" rel="alternate" type="text/html" title="Reducing My Google Usage: Email" /><published>2020-06-07T00:00:00-04:00</published><updated>2020-06-07T00:00:00-04:00</updated><id>https://brewcore.com/2020/06/07/reducing-my-google-usage-email</id><content type="html" xml:base="https://brewcore.com/2020/06/07/reducing-my-google-usage-email.html"><![CDATA[<p>This is the first post in an ongoing series on reducing my use of Google’s services / products. <a href="/tags/reducing-google-usage/">Click here to view all posts in the series.</a></p>

<h1 id="email">Email</h1>

<p>We place an enormous amount of trust in our email providers - for any other online account you might have chances are it is connected to your email address in some way. This makes an email account an extremely powerful way to learn an enormous amount of information about a person. For this reason I chose Gmail as one of the first services I wanted to stop using.</p>

<p>I’ve moved the bulk of my email usage to <a href="https://protonmail.com/">ProtonMail</a> and I’ve been extremely happy with it. I am looking forward to their additional calendar service which looks to be a promising replacement for Google’s calendar.</p>]]></content><author><name>Brewcore</name></author><summary type="html"><![CDATA[First in a series about reducing my Google use. TLDR: Switch to ProtonMail.]]></summary></entry><entry><title type="html">What I’m Reading: Spring 2020</title><link href="https://brewcore.com/2020/06/04/books-spring-2020.html" rel="alternate" type="text/html" title="What I’m Reading: Spring 2020" /><published>2020-06-04T00:00:00-04:00</published><updated>2020-06-04T00:00:00-04:00</updated><id>https://brewcore.com/2020/06/04/books-spring-2020</id><content type="html" xml:base="https://brewcore.com/2020/06/04/books-spring-2020.html"><![CDATA[<p>Books I am reading or have read in the spring of 2020 that I’d recommend for others:</p>

<ul>
  <li><a href="https://www.oreilly.com/library/view/clean-architecture-a/9780134494272/">Clean Architecture</a></li>
  <li><a href="https://www.penguinrandomhouse.com/books/565026/habeas-data-by-cyrus-farivar/">Habeas Data</a></li>
  <li><a href="https://nostarch.com/gtfo">PoC || GTFO</a></li>
  <li><a href="https://www.oreilly.com/library/view/site-reliability-engineering/9781491929117/">Site Reliability Engineering</a></li>
</ul>]]></content><author><name>Brewcore</name></author><category term="books" /><summary type="html"><![CDATA[Reading recommendations - books I've enjoyed in spring 2020.]]></summary></entry><entry><title type="html">Interesting Tech Podcasts: September - December 2019</title><link href="https://brewcore.com/2020/01/07/interesting-tech-podcasts.html" rel="alternate" type="text/html" title="Interesting Tech Podcasts: September - December 2019" /><published>2020-01-07T00:00:00-05:00</published><updated>2020-01-07T00:00:00-05:00</updated><id>https://brewcore.com/2020/01/07/interesting-tech-podcasts</id><content type="html" xml:base="https://brewcore.com/2020/01/07/interesting-tech-podcasts.html"><![CDATA[<p>As I’ve been traveling a bit more recently I’ve found some time to listen to a few tech podcasts. Here 
are a few episodes I found worthwhile - release dates range from September to December 2019:</p>

<ul>
  <li>
    <p><a href="https://www.se-radio.net/2019/11/episode-389-ryan-singer-on-basecamps-software-development-process/">Software Engineering Radio 389: Ryan Singer on Basecamp’s Software Development Process</a> - I found the discussion of their development process interesting, although I don’t fully agree with their assesment of agile/scrum.</p>
  </li>
  <li>
    <p><a href="https://mission.org/podcast/living-on-the-edge-with-vapor-io-ceo-cole-crawford/">Mission IT Visionaries: Living on the Edge with Vapor IO CEO Cole Crawford</a> - A great discussion of how infrastructure and applications are evolving to support greater connectivity.</p>
  </li>
  <li>
    <p><a href="https://mission.org/podcast/pryon-ceo-igor-jablokov-on-why-the-future-of-work-is-all-about-augmented-intelligence/">Mission IT Visionaries: Pryon CEO Igor Jablokov on Why The Future of Work Is All About Augmented Intelligence</a></p>
  </li>
  <li>
    <p><a href="https://mission.org/podcast/committing-to-a-growth-mindset-with-jay-fulcher-ceo-and-chairman-of-zenefits/">Mission Daily: Committing to a Growth Mindset; Jay Fulcher CEO of Zenefits</a></p>
  </li>
  <li>
    <p><a href="https://mission.org/podcast/from-coder-to-chief-technology-officer-with-armon-dadgar-cto-of-hashicorp/">Mission Daily: From Coder to Chief Technology Officer with Armon Dadgar, CTO of Hashicorp</a></p>
  </li>
  <li>
    <p><a href="http://www.fullstackradio.com/125">Full Stack Radio 125: Rob Walling - Choosing the Right Product Idea</a> - Tons of great advice if you’re thinking about building a software product.</p>
  </li>
  <li>
    <p><a href="http://www.fullstackradio.com/124">Full Stack Radio 124: Leslie Cohn-Wein &amp; Rafael Conde - Designing the User Interface at Netlify</a></p>
  </li>
  <li>
    <p><a href="https://irlpodcast.org/season5/episode7/">Mozilla IRL: Privacy or Profit - Why Not Both?</a> - Great to hear about companies that are successful while respecting their users’ privacy, and some novel ideas around allowing users to sell their data directly and share in the profit.</p>
  </li>
  <li>
    <p><a href="https://irlpodcast.org/season5/episode5/">Mozilla IRL: The 5G Privilege</a></p>
  </li>
</ul>]]></content><author><name>Brewcore</name></author><category term="podcasts" /><summary type="html"><![CDATA[As I've been traveling a bit more recently I've found some time to listen to a few tech podcasts. Here are a few episodes I found worthwhile - release dates range from September to December 2019.]]></summary></entry><entry><title type="html">Review of OSX Catalina for Web Developers</title><link href="https://brewcore.com/2019/11/21/osx-catalina-review.html" rel="alternate" type="text/html" title="Review of OSX Catalina for Web Developers" /><published>2019-11-21T00:00:00-05:00</published><updated>2019-11-21T00:00:00-05:00</updated><id>https://brewcore.com/2019/11/21/osx-catalina-review</id><content type="html" xml:base="https://brewcore.com/2019/11/21/osx-catalina-review.html"><![CDATA[<p>I upgraded my 15” 2015 Macbook Pro to OSX Catalina (10.15) not long after it became publicly available, 
and now that I’ve been using it for awhile I wanted to share my experiences so others can decide if they’re
ready to upgrade.</p>

<h2 id="my-usage">My Usage</h2>

<p>First, though, you should understand a bit about my typical usage; that way you can identify things you’d 
use that I may not have tested. My primary day-to-day focus is web application development and Elasticsearch 
integrations, mostly working in NodeJS. Here’s a short list of dev tools and software I’ve used regularly on Catalina:</p>

<ul>
  <li>Docker</li>
  <li>Elasticsearch / Kibana</li>
  <li>Git / <a href="https://git-fork.com/">Fork</a></li>
  <li>Homebrew</li>
  <li>Mozilla Firefox</li>
  <li>Node.js / nvm / npm / yarn</li>
  <li>ProtonVPN</li>
  <li>Slack</li>
  <li>Tresorit</li>
  <li>Virtualbox / vagrant</li>
  <li>VS Code</li>
</ul>

<p>When it comes to development I like to keep everything self-contained, repeatable, and specific to the current
project I’m working on. This means I prefer using containers and VMs over installing software directly on my
laptop, and this seems to play really well with the new security model in Catalina.</p>

<p>Here are some things that I have NOT tested:</p>

<ul>
  <li>Using / modifying built-in Apache webserver</li>
  <li>Using built-in php</li>
  <li>Installing / running a database server outside of a VM (MySQL / PostgreSQL / etc)</li>
</ul>

<h2 id="my-upgrade-method">My Upgrade Method</h2>

<p>I prefer clean installs to eliminate potential quirks from an upgrade, so this is the process I followed:</p>

<ol>
  <li>Backed up all my files / configs (I use Tresorit for file sync/storage).</li>
  <li>Deleted most of my files - I noticed upgrades can be slow when you have a lot of data.</li>
  <li>Ran OSX Catalina upgrade.</li>
  <li>After upgrade, rebooted into recovery.</li>
  <li>Wiped hard drive, reinstalled Catalina cleanly.</li>
  <li>After install, restored my files and reinstalled needed software.</li>
</ol>

<p>I use Homebrew for package management and <a href="https://github.com/thoughtbot/rcm">rcm</a> for dotfiles so restoring my
environment doesn’t take long with a good internet connection.</p>

<h2 id="what-works-what-doesnt-and-whats-annoying">What Works, What Doesn’t, and What’s Annoying</h2>

<p>After a month of using Catalina I haven’t run in to any serious roadblocks, just some mild annoyances.</p>

<p>The biggest issue occurred the first time I tried to run software that hadn’t been notarized by Apple. At first
it seemed like the program simply couldn’t be run - Catalina’s warning message simply said that the software 
could not be run because it could not be checked for malicious software (meaning it hadn’t been notarized). The
only options presented were to confirm that the software wouldn’t run or move it to the Trash. This was misleading
though as I soon found out any software can be run using one of these methods.</p>

<p>To open an unnotorized application on OSX Catalina:</p>

<ul>
  <li>Right click on the application and select ‘open’. In some cases the dialog box will now add an option to ‘open anyway’.</li>
</ul>

<p>OR</p>

<ul>
  <li>Immediately after getting the notification that the application can’t be run, go to ‘System Preferences’ &gt; 
‘Security &amp; Privacy’ &gt; ‘General’. Under the ‘Allow apps downloaded from’ section, there should be a notice about the
application you just tried to open and an option to allow it to run.</li>
</ul>

<p>Another common issue I’ve run in to is granting permissions to applications the first time I use them - giving permissions
for certain things sometimes requires restarting the application. This is most annoying in screensharing / call applications
like Join.me and Slack where giving screen recording and accessibilty permissions requires a restart of the application,
which you often don’t find out until you’re mid-call trying to use the feature. Luckily this is a one-time problem, once 
permission is given you are not prompted again.</p>

<p>All in all Catalina is stable and usable for my needs, your mileage may vary.</p>]]></content><author><name>Brewcore</name></author><category term="software-review" /><category term="osx" /><summary type="html"><![CDATA[I upgraded my 15” 2015 Macbook Pro to OSX Catalina (10.15) not long after it became publicly available, and now that I’ve been using it for awhile I wanted to share my experiences so others can decide if they’re ready to upgrade.]]></summary></entry><entry><title type="html">From My Bookmarks: QisKit</title><link href="https://brewcore.com/links/quantum-computing/qiskit/" rel="alternate" type="text/html" title="From My Bookmarks: QisKit" /><published>2019-09-19T00:00:00-04:00</published><updated>2019-09-19T00:00:00-04:00</updated><id>https://brewcore.com/links/quantum-computing/qiskit</id><content type="html" xml:base="https://brewcore.com/links/quantum-computing/qiskit/"><![CDATA[<p>Ever wanted to try out quantum computing? Check out QisKit - the platform lets you experiment with quantum computing in Python, complete with a simulator. https://developer.ibm.com/open/projects/qiskit/</p>]]></content><author><name>Brewcore</name></author><category term="quantum-computing" /><summary type="html"><![CDATA[Ever wanted to try out quantum computing? Check out QisKit - the platform lets you experiment with quantum computing in Python, complete with a simulator. https://developer.ibm.com/open/projects/qiskit/]]></summary></entry><entry><title type="html">From My Bookmarks: Uniforms</title><link href="https://brewcore.com/links/react/uniforms/" rel="alternate" type="text/html" title="From My Bookmarks: Uniforms" /><published>2019-09-05T00:00:00-04:00</published><updated>2019-09-05T00:00:00-04:00</updated><id>https://brewcore.com/links/react/uniforms</id><content type="html" xml:base="https://brewcore.com/links/react/uniforms/"><![CDATA[<p>Uniforms looks like an interesting tool to save time building out React forms. https://uniforms.tools/</p>

<p>What I’d really like to find is a tool that scaffolds React components that can then be modified, rather than dynamically generating things at run time.</p>]]></content><author><name>Brewcore</name></author><category term="react" /><category term="web-tech" /><summary type="html"><![CDATA[Uniforms looks like an interesting tool to save time building out React forms. https://uniforms.tools/]]></summary></entry><entry><title type="html">Software Review: Firefly III</title><link href="https://brewcore.com/2019/09/04/review-firefly-iii.html" rel="alternate" type="text/html" title="Software Review: Firefly III" /><published>2019-09-04T00:00:00-04:00</published><updated>2019-09-04T00:00:00-04:00</updated><id>https://brewcore.com/2019/09/04/review-firefly-iii</id><content type="html" xml:base="https://brewcore.com/2019/09/04/review-firefly-iii.html"><![CDATA[<p><img src="/img/firefly-iii.jpg" alt="Firefly III" /></p>

<p>I’ve been hunting for the right financial / budgeting software for my personal finances for YEARS. At various points over the last 10 years I’ve tried Quicken, Mint, YNAB, and an assortment of open-source solutions, and I’ve finally found one that stuck with <a href="https://firefly-iii.org/">Firefly III</a>.</p>

<p>Here are the reasons I really enjoy it:</p>

<ul>
  <li>It’s NOT a cloud platform. It’s a web app that you can host and run yourself, and I use the provided <code class="language-plaintext highlighter-rouge">docker-compose</code> config to run it with minimal effort. My finances stay private, but I could share them with my wife with a little effort in set-up.</li>
  <li>I can import any transactions I can get in CSV format with minimal effort.</li>
  <li>It has a good UI. <a href="https://docs.firefly-iii.org/en/latest/about/introduction.html">Screenshots</a></li>
  <li>Under the hood it’s a double-entry accounting system, but it keeps the UI simple and doesn’t make extra work for me.</li>
  <li>You can schedule transactions and use a rules system to automate a lot.</li>
  <li>Budgets are an envelope-based system, but they don’t use the YNAB methodology that requires you to allocate every dollar before you spend it. You can easily see per-day budget breakdowns to know if you’re on track.</li>
</ul>]]></content><author><name>Brewcore</name></author><category term="software-review" /><category term="finance" /><summary type="html"><![CDATA[I've been hunting for the right financial / budgeting software for my personal finances for YEARS. At various points over the last 10 years I've tried Quicken, Mint, YNAB, and an assortment of open-source solutions, and I've finally found one that stuck with Firefly III.]]></summary></entry><entry><title type="html">From My Bookmarks: Firefox Monitor</title><link href="https://brewcore.com/links/security/firefox-monitor/" rel="alternate" type="text/html" title="From My Bookmarks: Firefox Monitor" /><published>2019-09-01T00:00:00-04:00</published><updated>2019-09-01T00:00:00-04:00</updated><id>https://brewcore.com/links/security/firefox-monitor</id><content type="html" xml:base="https://brewcore.com/links/security/firefox-monitor/"><![CDATA[<p>Firefox Monitor is an easy tool you can use to check if your email address is included in known data breaches. https://monitor.firefox.com/</p>]]></content><author><name>Brewcore</name></author><category term="security" /><summary type="html"><![CDATA[Firefox Monitor is an easy tool you can use to check if your email address is included in known data breaches. https://monitor.firefox.com/]]></summary></entry></feed>