<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Development on Rietta Cybersecurity</title>
    <link>https://rietta.com/categories/development/</link>
    <description>Recent content in Development on Rietta Cybersecurity</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>1999-2026 Rietta Inc. All Rights Reserved.</copyright>
    <atom:link href="https://rietta.com/categories/development/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Beware the Sunset Trap: Why Your Legacy Software is a Ticking Time Bomb (and AI is Lighting the Fuse)</title>
      <link>https://rietta.com/blog/sunset-trap/</link>
      <pubDate>Mon, 26 Jan 2026 10:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/sunset-trap/</guid>
      <description>Imagine you have a successful ongoing business or administer a public agency. Your day is spent carrying out your mission critical work. You care for people. Your computer systems are mature and have been running for a decade or more. Your original developers have long since moved on and your updates are sporadic and driven by security scanner reports that focus on CVEs and deprecated OS versions. Organizations often treat this software as a capital expenditure with up front development rather than an ongoing maintenance expense.</description>
    </item>
    <item>
      <title>Use AI to Describe Images as a Background Job in Ruby on Rails</title>
      <link>https://rietta.com/blog/llm-ai-as-background-job/</link>
      <pubDate>Fri, 23 Jan 2026 06:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/llm-ai-as-background-job/</guid>
      <description>Recently I wrote about how I run a Local AI Setup with Ollama and Nvidia GPU on Ubuntu Linux, but today I want to touch a bit more about how one can fit Artificial Intelligence (AI) into your Ruby on Rails application.&#xA;At the risk of oversimplication, let&amp;rsquo;s start with an example: you allow users to upload an image to your Ruby on Rails application and provide a place for them to enter alternative text (the ALT HTML attribute) for each image that describes the content.</description>
    </item>
    <item>
      <title>Local AI Setup with Ollama and Nvidia GPU on Ubuntu Linux</title>
      <link>https://rietta.com/blog/ollama-with-nvidia-gpu-in-docker-compose/</link>
      <pubDate>Wed, 17 Dec 2025 08:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/ollama-with-nvidia-gpu-in-docker-compose/</guid>
      <description>Over the last few years, the usefulness of Large Language Models as a type of Artificial Intelligence is impossible to miss. As a computer scientist, I&amp;rsquo;ve seen many tech hype waves over my career and tend to maintain a naturally skeptical view. I&amp;rsquo;m well convinced that LLM technology has its uses, has improved greatly, and also has a great many shortcomings.&#xA;Among the biggest structural short comings are security and privacy concerns, including legally mandated ones such as the reporting that a Court orders OpenAI to preserve all ChatGPT logs, including deleted, temporary chats and API requests.</description>
    </item>
    <item>
      <title>Writing Rock, Paper, Scissors in Plain JavaScript to Expose my Daughter to Development</title>
      <link>https://rietta.com/blog/rock-paper-scissors-in-plain-javascript/</link>
      <pubDate>Sat, 15 Mar 2025 08:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/rock-paper-scissors-in-plain-javascript/</guid>
      <description>I recently endeavored on an educational software development experiment with my then 4 year old daughter Evelyn. I started this effort with a few goals in mind: Write a simple game that ran fully in the web browser using JavaScript without any frameworks or dependencies Teach my young daughter Evelyn a bit about software development and empower her with the ability to provide creative input for a real program! Make the game so simple it could be played in a blog post In my company&#39;s daily work we run into quite a bit of hard to maintain JavaScript with lots of dependencies.</description>
    </item>
    <item>
      <title>How to win the race with hackers when new vulnerabilities are publicly disclosed!</title>
      <link>https://rietta.com/blog/win-cve-race-with-hackers-on-public-vuln-disclosure/</link>
      <pubDate>Tue, 04 Apr 2023 10:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/win-cve-race-with-hackers-on-public-vuln-disclosure/</guid>
      <description>My article written for security executives explaining the critical role of automated testing for long term application security is published! Those who have known and work with me know this topic has been close to my heart for while now. Most organizations are not mature enough to be able to patch within hours. However, we can do a lot better as a industry on proactive security in web app software.</description>
    </item>
    <item>
      <title>Top 5 Tips and Tricks on Developing with Docker</title>
      <link>https://rietta.com/blog/dockerized-development-tips/</link>
      <pubDate>Wed, 21 Sep 2022 11:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/dockerized-development-tips/</guid>
      <description>We are going into the third year of fully Dockerized development for our web application work. This is especially beneficial as a team who maintains many web apps developed over a decade ago in different languages by other developers who have long since left our clients&amp;rsquo; companies.&#xA;We have Ruby on Rails, Python, NodeJS, and many different versions of third party native dependencies. Getting up to speed on all these at once was always painful.</description>
    </item>
    <item>
      <title>The Ripples From SolarWinds</title>
      <link>https://rietta.com/blog/the-ripples-from-solar-winds/</link>
      <pubDate>Tue, 31 Aug 2021 08:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/the-ripples-from-solar-winds/</guid>
      <description>In the final month of one of the most unprecedented years on record, a breach was discovered in the Solar Winds supply chain that rocked the cybersecurity community deeply. The potential access points were in multiple companies and government agencies, most disturbingly the Department of Energy, which handles nuclear power plants.&#xA;To be clear, there has been no announcement that the breach in any way affected the power grid or the power plants of any sort.</description>
    </item>
    <item>
      <title>Streamlining Workflows With Docker</title>
      <link>https://rietta.com/blog/streamlining-workflows-with-docker/</link>
      <pubDate>Tue, 09 Feb 2021 11:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/streamlining-workflows-with-docker/</guid>
      <description>Every week, our team puts most of our hours towards helping our long term, stable client applications stay up to date. From dependency upgrades to changes in the code base, we make sure these older rails apps are kept secure and functioning. Some of our clients choose to hire us because the amount of time spent securely maintaining their app does not justify the cost of hiring a full-time developer, while others are looking for a trustworthy assistance after losing a key developer.</description>
    </item>
    <item>
      <title>Disable Low Quality Webcam Microphone in Ubuntu Linux 20.04</title>
      <link>https://rietta.com/blog/block-webcam-audio-ubuntu-linux/</link>
      <pubDate>Thu, 14 Jan 2021 11:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/block-webcam-audio-ubuntu-linux/</guid>
      <description>As a developer and consultant, I attend a lot of Google Meet, Zoom, Microsoft Teams, and other video conference meetings. To this end, I have a really high quality professional Sennheiser e835 microphone and outboard preamp. I actually run this preamp directly into the line in audio port on my desktop&amp;rsquo;s sound card. The sound quality is top notch and exactly what I want for my video calls. But for some unknown reason my computer will randomly decide that it should switch to the low quality, undesirable sound from the Logitech Webcam.</description>
    </item>
    <item>
      <title>How to Set Up and Encrypt an External SSD and Run Docker Images Externally</title>
      <link>https://rietta.com/blog/encrypted-drive-and-docker/</link>
      <pubDate>Tue, 12 Jan 2021 11:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/encrypted-drive-and-docker/</guid>
      <description>Docker is a powerful tool for developing, shipping, and running applications. It allows us to encapsulate our applications into containers, which then gives us the ability to run entire applications without the hassle of setting up our local machines with custom libraries and dependencies for each application. We use Docker &amp;lsquo;images&amp;rsquo; to define the code, config files, environment variables, libraries, and run time that will execute in each container. This gives us the confidence that all of our development environments (as well as production, staging, etc.</description>
    </item>
    <item>
      <title>Learning Object-Oriented Programming in Ruby vs C/C&#43;&#43;</title>
      <link>https://rietta.com/blog/learning-oop-ruby-vs-c/</link>
      <pubDate>Tue, 15 Dec 2020 10:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/learning-oop-ruby-vs-c/</guid>
      <description>As a newcomer to Ruby, the ease of using the language was a welcomed surprise.&#xA;In the comp sci program at UC Davis, many of the core lower division courses, including those that introduce students to object-oriented programming (OOP), are taught in C/C++. Simultaneously learning the fundamentals for memory management and OOP, along with the unique C/C++ syntax, can quickly become a headache for those of us just starting out in computer science.</description>
    </item>
    <item>
      <title>Remote Team Culture - Code Review and Style Guides</title>
      <link>https://rietta.com/blog/code-styles-in-small-remote-teams/</link>
      <pubDate>Sat, 12 Dec 2020 02:30:00 -0600</pubDate>
      <guid>https://rietta.com/blog/code-styles-in-small-remote-teams/</guid>
      <description>Code Review at Rietta When joining a new team, a developer can be nervous when making their first pull request or contribution to a codebase.&#xA;The thought of your team going through your code and ripping it to shreds is both reasonable and scary. So how does a team eliminate this fear and instead, encourage newer developers to greet code reviews as a opportunity to not only improve their code, but to encourage a healthier environment to actually collaborate?</description>
    </item>
    <item>
      <title>Implementing Proper Application Maintenance Practices</title>
      <link>https://rietta.com/blog/implementing-application-maintenance/</link>
      <pubDate>Mon, 04 May 2020 11:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/implementing-application-maintenance/</guid>
      <description>In the software landscape, creating a high quality application for your business is only the beginning of the journey. As technology changes and improves, the functionality of your application will often become obsolete and vulnerable to security threats. This is why consistent and proper maintenance is essential. Managing dependencies, ensuring uptime, patching security vulnerabilities, and fixing business critical bugs are all key elements of a well implemented application maintenance schedule.</description>
    </item>
    <item>
      <title>What is Web Accessibility?</title>
      <link>https://rietta.com/blog/what-is-web-accessibility/</link>
      <pubDate>Tue, 22 Oct 2019 13:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/what-is-web-accessibility/</guid>
      <description>You may have heard on the news that the Supreme Court has recently denied Dominos Pizza&amp;rsquo;s petition to be appealed by the Court of Appeals on October 7, 2019. This opens the door to the plaintiff, Guillermo Robles to sue Domino&amp;rsquo;s for not meeting the necessary accessability requirements to provide service to those with functional disabilities. In this case, Mr. Robles has vision impairment which would require the assistance of a screen reader application to operate the Domino&amp;rsquo;s Pizza website.</description>
    </item>
    <item>
      <title>Acknowledge Open-Source Contributors with Git Authorship</title>
      <link>https://rietta.com/blog/acknowledge-open-source-contributors-with-git-authorship/</link>
      <pubDate>Mon, 07 Oct 2019 10:00:00 -0600</pubDate>
      <guid>https://rietta.com/blog/acknowledge-open-source-contributors-with-git-authorship/</guid>
      <description>Even though Git has been around since 2005 and has definitely taken over as the primary VCS, some developers do not utilize git to the fullest of its ability. Some developers even intentionally execute commands to remove functionality, such as replacing commit authors with their own. Additionally, it&amp;rsquo;s shocking that some of these mishaps occur in popular repositories, such as vim, but often maintainers express no intention of changing. In modern times, Github has fortunately made the process of keeping git authors intact trivial.</description>
    </item>
    <item>
      <title>The Clean-up Refactor Deleting &#34;.arel_tables&#34;</title>
      <link>https://rietta.com/blog/arel_table-refactor/</link>
      <pubDate>Wed, 02 Oct 2019 11:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/arel_table-refactor/</guid>
      <description>Sometimes, when composing queries that utilize arel, the queries can start to include a multitude of columns across a couple of tables. This can lead to longer lines due to the repetitive use of .arel_tables[]&#xA;Product .joins(:sales) .where(Sale.arel_table[:ends_on].gt(Time.current).or(Sale.arel_table[:ends_on].eq(nil))) .order(Sale.arel_table[:discount_percent]) We can create something that is a little more elegant and makes .arel_table[] feel as if it were a part of the ActiveRecord interface a little more directly. This can be done by creating a class method, #[], on our ApplicationRecord class like so:</description>
    </item>
    <item>
      <title>Why do Rietta Developers Git Fork?</title>
      <link>https://rietta.com/blog/why-git-fork/</link>
      <pubDate>Wed, 25 Sep 2019 13:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/why-git-fork/</guid>
      <description>Why Fork a repository? Forking a open source project is the standard way for collaborators such as ourselves to fix bugs, experiment, and add features to existing open source projects without affecting the main repository. We can use the Fork feature on Github to create a repo on Github in which is a clone of the original repo we forked.&#xA;Github has a great article https://help.github.com/en/articles/fork-a-repo that explains how we can fork off from a repository on Github.</description>
    </item>
    <item>
      <title>What&#39;s the Difference Between the 3 Github Merge Methods?</title>
      <link>https://rietta.com/blog/github-merge-types/</link>
      <pubDate>Fri, 07 Jun 2019 13:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/github-merge-types/</guid>
      <description>Keeping a clean git history can save a lot of time when trying to track down commits related to a bug or issue that is disrupting dev efforts. GitHub provides three options when merging in commits, these three options being:&#xA;Create a Merge Commit Squash and Merge Rebase and Merge Merging with a merge commit, squash merging, and &amp;ldquo;Rebase &amp;amp; Merge&amp;rdquo; should be pretty familiar as these are commands that are already commonly used when working on dev branches to keep commits on PRs tidy.</description>
    </item>
    <item>
      <title>Manually Editing Git Hunks: The Easy Way</title>
      <link>https://rietta.com/blog/git-patch-manual-split/</link>
      <pubDate>Thu, 23 May 2019 12:10:00 -0400</pubDate>
      <guid>https://rietta.com/blog/git-patch-manual-split/</guid>
      <description>If you&amp;rsquo;ve been following our Git related posts, you probably notice we use git add --p with many of the examples used. This a great way for developers to split up code changes on one file to their own commit message. Not only will this make your pull requests cleaner, but will allow the code reviewer to get valuable context when diving into code changes on said file.&#xA;Git add patch gives us many options: Stage this hunk [y,n,q,a,d,e,?</description>
    </item>
    <item>
      <title>How to hide .gitignored Files from fzf.vim</title>
      <link>https://rietta.com/blog/hide-gitignored-files-fzf-vim/</link>
      <pubDate>Tue, 21 May 2019 10:30:00 -0400</pubDate>
      <guid>https://rietta.com/blog/hide-gitignored-files-fzf-vim/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://rietta.com/assets/blog/hide-gitignored-files-fzf-vim/phoenix_hello_world_fzf_deps.png&#34; alt=&#34;Messy Phoenix Fuzzy Finder&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Fuzzy finders find files that almost no developer would intentionally find via a fuzzy finder from paths&#xA;such as &lt;code&gt;node_modules/&lt;/code&gt;, &lt;code&gt;deps/&lt;/code&gt;, and &lt;code&gt;dist/&lt;/code&gt;. These tend to get in the way of the true power of fuzzy file&#xA;searching and ignoring these individually can be a pain. There are also files like &lt;code&gt;.circleci/config.yml&lt;/code&gt;,&#xA;&lt;code&gt;.gitignore&lt;/code&gt;, and &lt;code&gt;.rubocop.yml&lt;/code&gt; that are opened often enough to be included in the result set.&lt;/p&gt;&#xA;&lt;p&gt;Luckily when working in a git repository, developers typically only care about the files they commit.&#xA;When using &lt;a href=&#34;https://github.com/junegunn/fzf.vim&#34;&gt;fzf.vim&lt;/a&gt;, this technique returns&#xA;files based on the git tree leaving out irrelevant files, including the hidden files that were&#xA;shown before.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Herding Cats: The Todo List</title>
      <link>https://rietta.com/blog/hearding-cats-agency-todo-list/</link>
      <pubDate>Wed, 15 May 2019 10:45:00 -0400</pubDate>
      <guid>https://rietta.com/blog/hearding-cats-agency-todo-list/</guid>
      <description>&lt;p&gt;Managing many Clients with several projects where multiple team members are working them, across an Agency that has a&#xA;different product offerings can be a challenge. Finding tools and processes to sort it out and ensure everything&#xA;gets done, is on time, and on budget can be really hard, especially for a small Agency whose trying to keep costs down.&#xA;The productivity tool market is flooded with options, and finding a good one is tough - but when you do, you want to&#xA;share. Here&amp;rsquo;s a quick story on what we&amp;rsquo;re currently trying to tame the todo list. I hope you find it useful!&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Use Slack To Maintain A Team Reading List</title>
      <link>https://rietta.com/blog/how-to-use-slack-to-maintain-a-team-reading-list/</link>
      <pubDate>Tue, 14 May 2019 11:30:00 -0400</pubDate>
      <guid>https://rietta.com/blog/how-to-use-slack-to-maintain-a-team-reading-list/</guid>
      <description>At Rietta, we understand the importance of continuing our education outside of the classroom. We use a reading channel in our company Slack to keep a pulse on industry and keep each other informed on the latest vulnerabilities. It&amp;rsquo;s been working great. Here&amp;rsquo;s how we do it.&#xA;The reading channel has a few strict rules to ensure there is no clutter. Here is an excerpt from our internal company handbook (that we call the vault):</description>
    </item>
    <item>
      <title>Fixup your Code Reviews with git rebase --autosquash</title>
      <link>https://rietta.com/blog/git-rebase-autosquash-code-reviews/</link>
      <pubDate>Tue, 07 May 2019 11:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/git-rebase-autosquash-code-reviews/</guid>
      <description>Here at Rietta, we like to do in-depth code reviews that are sometimes accompanied with feedback that may require changes to be made to the pull request. When making additional commits with changes based on the feedback, we can get into a messy workflow that can lead to complex branch wrangling.&#xA;In this article, I will go over a few Git commands to help ease our post code-review revisions:&#xA;git commit --fixup commit-SHA git rebase -i --autosquash source-branch Our team utilizes Github&amp;rsquo;s Squash and merge when merging into master, with semantic git commits that are specific to their respective code changes.</description>
    </item>
    <item>
      <title>How to Use git reset</title>
      <link>https://rietta.com/blog/git-reset/</link>
      <pubDate>Mon, 22 Apr 2019 16:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/git-reset/</guid>
      <description>The command git reset is a powerful tool that Rietta staff use on a daily basis. However powerful, git reset has 2 distinct features:&#xA;Hard resets, in which will modify the working tree Soft resets, in which will modify the index Often you&amp;rsquo;ll hear that the reset command is basically the opposite of the add command. While this is true for the default reset, there are other options to reset the index without unstaging the files as well.</description>
    </item>
    <item>
      <title>Storing currency in PostgreSQL</title>
      <link>https://rietta.com/blog/postgresql-currency-types/</link>
      <pubDate>Mon, 28 Jan 2019 21:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/postgresql-currency-types/</guid>
      <description>&lt;p&gt;There are different ways we can store currency in PostgreSQL, this blog post will cover the money and numeric types.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prevent an Outdated and Broken bin/setup with This Simple Trick</title>
      <link>https://rietta.com/blog/prevent-an-outdated-and-broken-bin-setup-with-this-simple-trick/</link>
      <pubDate>Tue, 27 Nov 2018 18:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/prevent-an-outdated-and-broken-bin-setup-with-this-simple-trick/</guid>
      <description>&lt;p&gt;Having a good &lt;a href=&#34;https://rietta.com/blog/writing-a-good-bin-setup/&#34;&gt;bin/setup&lt;/a&gt; is very essential to having a quick onboarding time as well as getting your environment back up and going in case of emergency.&lt;/p&gt;&#xA;&lt;p&gt;But how often do you run this &lt;code&gt;bin/setup&lt;/code&gt; if it&amp;rsquo;s only ran when you setup your repo? Most developers setup their environment only every once in awhile. What happens when changes to the codebase happen and the bin/setup isn&amp;rsquo;t modified as well?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing a good bin/setup</title>
      <link>https://rietta.com/blog/writing-a-good-bin-setup/</link>
      <pubDate>Thu, 06 Sep 2018 13:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/writing-a-good-bin-setup/</guid>
      <description>&lt;p&gt;Nothing is better than cloning a code repository, running the &lt;code&gt;bin/setup&lt;/code&gt;, and everything about the project &lt;em&gt;just works&lt;/em&gt;. It’s the developer equivalent of waking up before your alarm goes off and realizing you can sleep for another two hours.&lt;/p&gt;&#xA;&lt;p&gt;A good &lt;code&gt;bin/setup&lt;/code&gt; can mean the difference between a frustrating on-boarding process and a fantastic one.&lt;/p&gt;&#xA;&lt;p&gt;When you have a completed &lt;code&gt;bin/setup&lt;/code&gt;, you have an easy way to get new and existing developers up and running quickly, stress-free. It can also streamline continuous integration setup and maintenance. A good &lt;code&gt;bin/setup&lt;/code&gt; gives you peace of mind when setting up a new machine and offloads the mental work of project setup to a verifiable tool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatically Migrate from Factory Girl to Factory Bot</title>
      <link>https://rietta.com/blog/automatically-migrate-from-factory-girl-to-factory-bot/</link>
      <pubDate>Tue, 21 Aug 2018 18:30:00 -0500</pubDate>
      <guid>https://rietta.com/blog/automatically-migrate-from-factory-girl-to-factory-bot/</guid>
      <description>&lt;p&gt;Gem updates are tedious. Gem name changes are even more tedious. This quick script converts Factory Girl references to Factory Bot references.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deep Work and Remote Work</title>
      <link>https://rietta.com/blog/deep-work-and-remote-work/</link>
      <pubDate>Tue, 07 Aug 2018 18:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/deep-work-and-remote-work/</guid>
      <description>&lt;p&gt;The ability to deeply concentrate and sink your teeth into a task is more valuable than ever, and yet, our attention has never been more scattered at work. Slack, email, and social media beg for our attention, and a lot of the time, it’s the path of least resistance to give in to the urge to check Reddit. There is a better way to work. The antidote to the scattering of our attention and lack of using our mind’s full potential is deep work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automate Scheduled Security Scans With CircleCI</title>
      <link>https://rietta.com/blog/automate-scheduled-security-scans-with-circleci/</link>
      <pubDate>Wed, 18 Jul 2018 14:00:00 -0600</pubDate>
      <guid>https://rietta.com/blog/automate-scheduled-security-scans-with-circleci/</guid>
      <description>Continuous integration is a now common way of having constant feedback for teams. Being able to verify new code on whether it is working is important, but what about CVEs? CVEs are reported and patched constantly by open source communities and unless your team is scouring the web for dependency vulnerabilities daily, it can quickly become difficult to keep up. Not only time consuming, but if they are not dealt with swiftly, they will pose as a risk to the well-being of your business and user base.</description>
    </item>
    <item>
      <title>How to Ask Great Questions Online</title>
      <link>https://rietta.com/blog/how-to-ask-questions-online/</link>
      <pubDate>Tue, 10 Jul 2018 10:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/how-to-ask-questions-online/</guid>
      <description>&lt;p&gt;The majority of software development includes asking a lot of questions. Administrating the &lt;a href=&#34;https://www.rubyonrails.link/&#34;&gt;Ruby On Rails Link Slack&lt;/a&gt;, I&amp;rsquo;ve seen some of the best and worst questions asked.&lt;/p&gt;&#xA;&lt;p&gt;Good questions save time and effort for both the asker and answerer, follow these tips to become a superstar question asker and super power your development cycle with and without community assistance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>3 Developer Onboarding Tips From My Recent Experiences</title>
      <link>https://rietta.com/blog/3-developer-onboarding-tips-from-my-recent-experiences/</link>
      <pubDate>Mon, 25 Jun 2018 10:00:00 -0500</pubDate>
      <guid>https://rietta.com/blog/3-developer-onboarding-tips-from-my-recent-experiences/</guid>
      <description>&lt;p&gt;Starting out in a new job can bring about feelings of excitement and eagerness. Those emotions can also be accompanied with doubts about being useful, anxiety, and imposter-syndrome. Having experienced everything listed above, I&amp;rsquo;ve learned some strategies to help overcome the negatives and be proactive.&lt;/p&gt;&#xA;&lt;p&gt;Working with the Rietta team has been an amazing experience with comradery and mentorship. This article briefly explores my experiences at Rietta to help equip new developers with a plan to synergize and grow with a new team.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rails: Set Max Length on Fields</title>
      <link>https://rietta.com/blog/rails-set-max-length-on-fields/</link>
      <pubDate>Sat, 22 Oct 2016 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/rails-set-max-length-on-fields/</guid>
      <description>I originally started drafting this post on January 14, 2012, but it sat unpublished since then. Its fun to look back at ones journey, 1743 days ago. In 2012, I was relatively new to the Ruby on Rails platform after having worked in PHP and SQL for years, as well as a little .NET. The platform has been a good choice that I enjoy working with still to this day. I was working in Rails 3 at the time and had completed at least three client websites in Rails in 2011.</description>
    </item>
    <item>
      <title>What is an Abuser Story (Software)</title>
      <link>https://rietta.com/blog/what-is-an-abuser-story-software/</link>
      <pubDate>Sun, 11 Oct 2015 22:35:36 -0400</pubDate>
      <guid>https://rietta.com/blog/what-is-an-abuser-story-software/</guid>
      <description>&lt;p&gt;I publicly speaking about how development teams and those who employ them should go about using user stories with security constraints and abuser stories as a security documentation tool. At this time there is not an entry on Wikipedia about it, so I am going to take a stab at writing it up for you here.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-an-abuser-story-in-software-development&#34;&gt;What is an Abuser Story in Software Development?&lt;/h2&gt;&#xA;&lt;p&gt;In software development and product management, an abuser story is a user story from the point of view of a &lt;a href=&#34;https://en.wikipedia.org/wiki/Adversary_(cryptography)&#34;&gt;malicious adversary&lt;/a&gt;. Abuser stories are used with agile software development methodologies as the basis for defining the activities that should be actively blocked or mitigated by the software and proven by automated regression testing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recommended content for agile startups and entrepreneurs - March 2015 edition</title>
      <link>https://rietta.com/blog/recomended-content-agile-startups-entrepreneurs/</link>
      <pubDate>Mon, 23 Mar 2015 13:34:52 -0500</pubDate>
      <guid>https://rietta.com/blog/recomended-content-agile-startups-entrepreneurs/</guid>
      <description>We&#39;d like to post helpful content more often and find ourselves frequently lacking the available time to compose well-written posts of our own, but we are constantly reading the best material we can find on the web for a variety of topics of interest to us, our business, and our clients, so today I&#39;d like to begin sharing some hand-picked &#34;best-of&#34; selections from what we&#39;ve been learning from lately, and hopefully we can begin to post more regularly by including high-quality content recommendations like this on a regular schedule.</description>
    </item>
    <item>
      <title>How to use Story Points to Estimate a Web Application Minimum Viable Product</title>
      <link>https://rietta.com/blog/story-points-estimate-web-app/</link>
      <pubDate>Tue, 17 Mar 2015 14:12:49 -0400</pubDate>
      <guid>https://rietta.com/blog/story-points-estimate-web-app/</guid>
      <description>A user story is a concise written description that describes an item of functionality that is valuable to a user or a purchaser of a web application, preferably from the point of view of that person&amp;rsquo;s individual desires. They typically consist of three components:&#xA;a written description of the story used for planning conversations about the story that serve to flesh out the details of the story tests that convey and document the desired outcome and can be used to determine when a story is complete The best user stories are sufficiently small to be accurately estimable by developers and arranged in a prioritized list where a member of the development team can always confidently pick the next most important task to work on at all times during his or her work week.</description>
    </item>
    <item>
      <title>Project Roadmaps can Manage Uncertainty in Startups&#39; Web Applications</title>
      <link>https://rietta.com/blog/project-roadmaps-manage-uncertainty/</link>
      <pubDate>Tue, 17 Mar 2015 12:00:00 -0400</pubDate>
      <guid>https://rietta.com/blog/project-roadmaps-manage-uncertainty/</guid>
      <description>&lt;p&gt;Project communication breaks down quickly due to &lt;strong&gt;miscommunication&lt;/strong&gt; about&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Estimates&lt;/li&gt;&#xA;&lt;li&gt;Targets&lt;/li&gt;&#xA;&lt;li&gt;Commitments&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These concepts are not clearly understood by everyone involved in a typical project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Get the Current Year in the Ruby programming language</title>
      <link>https://rietta.com/blog/ruby-current-year/</link>
      <pubDate>Fri, 13 Mar 2015 10:09:55 -0400</pubDate>
      <guid>https://rietta.com/blog/ruby-current-year/</guid>
      <description>&lt;p&gt;When learning Ruby on Rails, sometimes you just need to get the current year as a number. I posted one example on why this is a useful way on a real-life website in the 2011 post on how to &lt;a href=&#34;https://rietta.com/blog/how-to-automate-copyright-notice/&#34;&gt;automatically update copyright notices&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this article, I will show you some methods for getting the current year, such as the number &lt;code&gt;2015&lt;/code&gt;. I will then show you how to benchmark the methods to determine which is the fastest method for you, given your machine and Ruby version.&lt;/p&gt;&#xA;&lt;h2 id=&#34;okay-just-how-do-i-get-the-current-year-in-ruby&#34;&gt;Okay, just how do I get the Current Year in Ruby?&lt;/h2&gt;&#xA;&lt;p&gt;It&amp;rsquo;s easy. Just use any of the Date/Time objects and call the &lt;code&gt;year&lt;/code&gt; method, like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;# Using the Time class&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;current_year&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;year&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# or Time.now.year&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;# Using the Date class&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;current_year&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;year&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;# Using the DateTime class&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;current_year&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;DateTime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;year&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Two new videos! How a Ruby on Rails developer can help prevent a Data Breach</title>
      <link>https://rietta.com/blog/two-new-videos-how-a-ruby-on-rails-developer-can-help-prevent-a-data-breach/</link>
      <pubDate>Fri, 09 Jan 2015 11:12:44 -0500</pubDate>
      <guid>https://rietta.com/blog/two-new-videos-how-a-ruby-on-rails-developer-can-help-prevent-a-data-breach/</guid>
      <description>&lt;p&gt;Two new videos of the data breach talk and class that I lead in August and December are now up on YouTube! I hope that it helps you level up on your security knowledge because good software security needs to be a moral stance.&lt;/p&gt;&#xA;&lt;h2 id=&#34;next-public-talk&#34;&gt;Next public talk&lt;/h2&gt;&#xA;&lt;p&gt;I am scheduled to give a presentation to this topic for the &lt;a href=&#34;http://www.meetup.com/nashrb/events/217795882/&#34;&gt;Nash.rb Users&amp;rsquo; Group on Thursday, February 5, 2015&lt;/a&gt; at the &lt;a href=&#34;https://twitter.com/emmaemail&#34;&gt;Emma office&lt;/a&gt; in Nashville, TN. If you are in town and can make it out, I would love to meet you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learn how Upworthy scaled a Ruby on Rails application to serve massive traffic</title>
      <link>https://rietta.com/blog/learn-how-upworthy-scaled-a-ruby-on-rails-application-to-serve-massive-traffic/</link>
      <pubDate>Fri, 19 Sep 2014 12:23:12 -0400</pubDate>
      <guid>https://rietta.com/blog/learn-how-upworthy-scaled-a-ruby-on-rails-application-to-serve-massive-traffic/</guid>
      <description>&lt;p&gt;Luigi Montanez is the founding engineer of the viral content website &lt;a href=&#34;http://upworthy.com&#34;&gt;http://upworthy.com&lt;/a&gt; and in this ATLRUG talk from July 9, 2014, he gives a fascinating insight into one approach to managing the growth of a startup’s web app in the face of very high traffic. Their backend is built upon Ruby on Rails with an effective use of the Fastly &lt;acronym title=&#34;Content Delivery Network&#34;&gt;CDN&lt;/acronym&gt; to deliver very high performance at scale.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avoid thrashing to release your project on time and budget</title>
      <link>https://rietta.com/blog/avoid-thrashing-to-release-your-project-on-time/</link>
      <pubDate>Thu, 29 May 2014 11:21:09 -0400</pubDate>
      <guid>https://rietta.com/blog/avoid-thrashing-to-release-your-project-on-time/</guid>
      <description>As my team and I work towards a major deadline this week, I am reminded at how easily last minute thrashing sneaks into a project that has many stakeholders involved. This is a challenge that a properly run Agile project should be able to minimize, but it seems to always be there.&#xA;Chris Getman (@chrisgetman) published a great post on his blog, referencing the same Seth Godin video that I recently watched, entitled Thrashing: Why Your Project Slipped.</description>
    </item>
    <item>
      <title>Joe Moore has Pair Programmed for 27,000 Hours</title>
      <link>https://rietta.com/blog/joe-moore-has-pair-programmed-for-27000-hours/</link>
      <pubDate>Tue, 20 May 2014 19:57:11 -0400</pubDate>
      <guid>https://rietta.com/blog/joe-moore-has-pair-programmed-for-27000-hours/</guid>
      <description>In Outliers, Malcolm Gladwell posited that 10,000 hours of practice are what it takes to achieve mastery in a field.&#xA;Well, Joe Moore (@joem on Twitter), the owner of remotepairprogramming.com, has blown past that mark on the subject of pair programming practices and the impact those practices have on real software projects.&#xA;He has pair programmed for 27,000 hours and the audience at RailsConf 2014 asked him anything!&#xA;At Rietta, we do pair programming as a fundamental part of our development process.</description>
    </item>
    <item>
      <title>My new tenkeyless Code Keyboard!</title>
      <link>https://rietta.com/blog/my-new-tenkeyless-code-keyboard/</link>
      <pubDate>Fri, 16 May 2014 22:06:02 -0400</pubDate>
      <guid>https://rietta.com/blog/my-new-tenkeyless-code-keyboard/</guid>
      <description>My new Code Keyboard Tenkeyless (87-key without a Number Pad) arrived this week from WASD Keyboards!&#xA;It should make a good keyboard for professional programmer who is typing 40 or more hours per week, 50 weeks per year. The Cherry Green keys have a 80 gram actuation force, that makes for clean, crisp keystrokes at full typing pace. The heavier resistance helps avoid bottoming out the keys, which is one source of typing injury.</description>
    </item>
    <item>
      <title>John Saddington and Obie Fernandez at the Atlanta Ruby Users&#39; Group</title>
      <link>https://rietta.com/blog/john-saddington-and-obie-fernandez-at-the-atlrug/</link>
      <pubDate>Wed, 14 May 2014 22:59:14 -0400</pubDate>
      <guid>https://rietta.com/blog/john-saddington-and-obie-fernandez-at-the-atlrug/</guid>
      <description>&lt;p&gt;Tonight, at the &lt;a href=&#34;http://atlrug.com&#34;&gt;Atlanta Ruby Users&amp;rsquo; Group&lt;/a&gt; (&lt;a href=&#34;https://twitter.com/atlrug&#34;&gt;@atlrug&lt;/a&gt;) meeting, &lt;a href=&#34;http://john.do/about/&#34;&gt;John Saddington&lt;/a&gt; (&lt;a href=&#34;https://twitter.com/saddington&#34;&gt;@saddington&lt;/a&gt;) gave the main presentation on how to &lt;strong&gt;Win The Internet&lt;/strong&gt;.  The talk focused on the importance of building and cultivating a personal brand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Get and compare the current Git branch in BASH</title>
      <link>https://rietta.com/blog/get-and-compare-the-current-git-branch-in-bash/</link>
      <pubDate>Sun, 16 Feb 2014 18:33:06 -0500</pubDate>
      <guid>https://rietta.com/blog/get-and-compare-the-current-git-branch-in-bash/</guid>
      <description>&lt;p&gt;My favorite revision control system is &lt;a href=&#34;http://git-scm.com/&#34;&gt;Git&lt;/a&gt;. I use it to maintain all of my Ruby on Rails projects, my Linux system configuration, and even this blog!&lt;/p&gt;&#xA;&lt;p&gt;In my web development work, I like to automate as much as possible with BASH shell and Ruby scripts. This makes my work easier by replacing repetitive tasks with simple commands and reduces the instances of certain classes of mistakes in my daily workflow. One of those mistakes that I would like to avoid is accidentally publishing a draft post to the live website.&lt;/p&gt;&#xA;&lt;p&gt;**Here is how I use the value of the current Git branch to keep from accidentally publishing a post to the real website before it is ready!&#xA;**&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Touch Typing Journey Continues</title>
      <link>https://rietta.com/blog/my-touch-typing-journey-continues/</link>
      <pubDate>Fri, 14 Feb 2014 12:25:00 -0500</pubDate>
      <guid>https://rietta.com/blog/my-touch-typing-journey-continues/</guid>
      <description>&lt;p&gt;For years, I lived with a secret that I did not want to share. &lt;strong&gt;I never learned how to type properly!&lt;/strong&gt; As a professional software developer with a couple of computer science degrees from Georgia Tech, that&amp;rsquo;s difficult to admit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why &amp; How We Remote Pair Program (2013)</title>
      <link>https://rietta.com/blog/why-and-how-we-remote-pair-program-2013/</link>
      <pubDate>Tue, 07 Jan 2014 16:38:00 +0000</pubDate>
      <guid>https://rietta.com/blog/why-and-how-we-remote-pair-program-2013/</guid>
      <description>Brandon Dees and I gave a this talk about how and why we do remote pair programming when he lives in Nashville, TN, and I live in Johns Creek, GA (a 416 mile round trip) on Wednesday, October 9, 2013 at the Atlanta Ruby Users&amp;rsquo; Group (ATLRUG).&#xA;The Video The excellent Q&amp;amp;A starts at 31 minutes into the talk!&#xA;The Slides The slides are available directly Why &amp;amp; How We Remote Pair Program at Speakerdeck and here is the link to video directly on YouTube.</description>
    </item>
    <item>
      <title>Voice-driven Applications on the Brain</title>
      <link>https://rietta.com/blog/voice-driven-applications-on-the-brain/</link>
      <pubDate>Fri, 06 Dec 2013 09:51:00 +0000</pubDate>
      <guid>https://rietta.com/blog/voice-driven-applications-on-the-brain/</guid>
      <description>I took the last two days off to attend the AdhersionConf 2013], that was hosted by Ben Klang and the crew at MojoLingo. Adhersion is a Ruby framework for building telephony applications. With it, you can write a server application in Ruby that is accessed my customers over a phone call for instance and more.&#xA;My purpose for attending is that voice-based use cases that involve Automatic Speech Recognition and good Speech Synthesis are becoming increasingly exciting as the technology has reached a point where it is available on most mobile devices and services are now available for web developers working with very modest budgets!</description>
    </item>
    <item>
      <title>Grep to Extract E-Mail Addresses from a Text File</title>
      <link>https://rietta.com/blog/grep-extract-e-mail-addresses-from-a-text-file/</link>
      <pubDate>Fri, 11 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/grep-extract-e-mail-addresses-from-a-text-file/</guid>
      <description>Sometimes you just need a list of e-mail addresses from text files on your computer. I have personally needed this while managing an e-mail server.&#xA;Here is the scenario, given a text file that has e-mail addresses intermixed with other text, extract a sorted list of e-mail addresses.&#xA;While there are commercial applications to do this, if you have a Unix-based system then you have all of the tools that you need available at the command line.</description>
    </item>
    <item>
      <title>Upcoming Remote Pair Programming Talk at the Atlanta Ruby Users&#39; Group</title>
      <link>https://rietta.com/blog/upcoming-remote-pair-programming-talk/</link>
      <pubDate>Sat, 05 Oct 2013 14:57:00 +0000</pubDate>
      <guid>https://rietta.com/blog/upcoming-remote-pair-programming-talk/</guid>
      <description>Update: This presentation to the Atlanta Ruby Users&#39; Group turned out great with excellent audience participation. For the slides and the 48 minute video, including 17 minutes of Q&amp;amp;A, see Why &amp;amp; How We Remote Pair Program (2013). --- Brandon and I are giving a talk about how and why we do remote pair programming when he lives in Nashville, TN, and I live in Johns Creek, GA (a 416 mile round trip) on Wednesday, October 9, 2013 at the Atlanta Ruby Users&amp;rsquo; Group (ATLRUG).</description>
    </item>
    <item>
      <title>Want to Learn Ruby on Rails in Atlanta?</title>
      <link>https://rietta.com/blog/want-to-learn-ruby-on-rails-in-atlanta/</link>
      <pubDate>Sat, 28 Sep 2013 11:33:00 +0000</pubDate>
      <guid>https://rietta.com/blog/want-to-learn-ruby-on-rails-in-atlanta/</guid>
      <description>The Emerald City Programming Group has started back up for the fall, starting today, Saturday, September 28, 2013.&#xA;The first class had an excellent turnout with twenty two local budding Rubyists in attendance. The environment is extremely friendly. The volunteer instructors this year are Anjan Das and Carlos Gonzalez.&#xA;This free class is open to the public and will cover everything you need to go from zero to deploy, including:</description>
    </item>
    <item>
      <title>What is Object-Oriented Programming (OOP) really talk by Bob Martin</title>
      <link>https://rietta.com/blog/what-is-object-oriented-programming-oop/</link>
      <pubDate>Thu, 25 Jul 2013 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/what-is-object-oriented-programming-oop/</guid>
      <description>Early this morning, Brandon Dees sent an e-mail to the team&amp;rsquo;s internal mailing list to a video of a talk by &amp;lsquo;Uncle Bob&amp;rsquo; Martin of 8th Light (link to their Twitter).&#xA;I watched it first thing and must agree, this is an inspiring talk. It&amp;rsquo;s a great presentation on the history of object-oriented programming (OOP) and what it really means from a values point of view.&#xA;Robert &#39;Uncle Bob&#39; Martin - What is OO really?</description>
    </item>
    <item>
      <title>OpenSSL: Encrypt Data with an RSA Key with PHP</title>
      <link>https://rietta.com/blog/openssl-encrypt-data-with-rsa-key-with/</link>
      <pubDate>Thu, 13 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/openssl-encrypt-data-with-rsa-key-with/</guid>
      <description>Web application security is built upon a series of interconnected building blocks.&#xA;This post is part of Rietta&amp;rsquo;s ongoing coverage of encryption. Browse the Encryption tag for the rest of the series.&#xA;Last year, I wrote about how Generating an RSA Key from the Command Line in OpenSSL could support encrypting or validating data in an unattended manner (where the password is not required to encrypt). A few weeks before that, I posted about how to Encrypt a File with a Password from the Command Line using OpenSSL.</description>
    </item>
    <item>
      <title>Enhance Early Adoption with Mobile Friendly Themes</title>
      <link>https://rietta.com/blog/enhance-early-adoption-with-mobile/</link>
      <pubDate>Thu, 06 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/enhance-early-adoption-with-mobile/</guid>
      <description>At Rietta, we&amp;rsquo;ve worked on many web application projects. We&amp;rsquo;re backend programmers and work with different design teams chosen by our clients. These projects tend to be rolled out in phases. Often the first phase is the desktop website with the intention to do a mobile application of some sort later.&#xA;But, when the new business&amp;rsquo; website is announced on Facebook and via an e-mail to the pre-launch mailing list, the majority of the first clicks are from iPhone and Android device users!</description>
    </item>
    <item>
      <title>Default HTML Values with a Rails View Helper</title>
      <link>https://rietta.com/blog/default-html-values-with-rails-view/</link>
      <pubDate>Tue, 15 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/default-html-values-with-rails-view/</guid>
      <description>Suppose you have the same image tag included frequently in a Rails application. One way to clean up the code a bit and to set defaults is to create a super simple view helper method that can receive a hash parameter and merge it with the defaults.&#xA;Code Example In app/helpers/pages_helper.rb:&#xA;def gui_tiny_icon(name, opts = {}) image_tag &amp;#34;gui/theme/icons/#{name}&amp;#34;, {:class =&amp;gt; &amp;#34;vm&amp;#34;, width: 15, height: 15}.merge(opts) endThen in the usual place of the HTML.</description>
    </item>
    <item>
      <title>New GIT Time Extractor Gem</title>
      <link>https://rietta.com/blog/new-git-time-extractor-gem/</link>
      <pubDate>Sun, 06 May 2012 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/new-git-time-extractor-gem/</guid>
      <description>I am happy to announce that the git_time_extractor project, released publicly on github.com in February, is now officially available as a RubyGem!&#xA;git_time_extractor is a small command-line tool that produces a CSV time log for each developer/contributor to a project tracked in GIT. It uses the commit timestamps and three basic reasonable assumptions, approved by the developer&amp;rsquo;s accountant.&#xA;It other words, computes the estimated time spent by developers working on code within a GIT repository.</description>
    </item>
    <item>
      <title>mod_deflate: Dramatic website speed increase with Apache compression on Ubuntu Linux</title>
      <link>https://rietta.com/blog/moddeflate-dramatic-website-speed/</link>
      <pubDate>Wed, 18 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/moddeflate-dramatic-website-speed/</guid>
      <description>It&amp;rsquo;s easy to dramatically improve the loading speed of your website by enabling compression support in your Apache web server. This works without needing to make any changes to your backend or database code no matter what programming platform your development team uses.&#xA;I recently added this change to a Ruby on Rails-based web application running on a Ubuntu Linux dedicated virtual server. That particular page observed a 72% decrease in bandwidth required to deliver the homepage.</description>
    </item>
    <item>
      <title>[Rails] Good Random Positive Integer</title>
      <link>https://rietta.com/blog/rails-good-random-positive-integer/</link>
      <pubDate>Fri, 03 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/rails-good-random-positive-integer/</guid>
      <description>Tonight I needed a quick way to generate a good pseudo random number. The following statement in Ruby will generate a positive integer between 0 and the maximum integer supported on the system.&#xA;SecureRandom.random_number((2**(0.size * 8-2)-1))Running that 10 times as a test on my system returned:&#xA;479960941838047707 4598189742420362323 4319555246297899788 79907720343840910 1019099276589074756 1753578159791031009 51485412595337811 3333462064391733874 2622897372121370782 4287564549349999056 That&amp;rsquo;s all for tonight.&#xA;Sources Secure random number generator interface Ruby max integer </description>
    </item>
    <item>
      <title>Rails: Point DNS to 127.0.0.1 to Test Wildcard Subdomains on WEBrick</title>
      <link>https://rietta.com/blog/rails-point-dns-to-127001-to-test/</link>
      <pubDate>Tue, 24 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/rails-point-dns-to-127001-to-test/</guid>
      <description>Want quick method for testing domain/subdomain-based routing logic in your Rails applications? Point a subdomain and wildcard subdomain of your company&amp;rsquo;s DNS to 127.0.0.1, your localhost IP address.&#xA;Then you can use that domain to access your local test web server on your local machine.&#xA;For example, I added DNS &amp;ldquo;A&amp;rdquo; records for:&#xA;test.rietta.com → 127.0.0.1 *.test.rietta.com → 127.0.0.1 Now Rietta&amp;rsquo;s developers can each access his local WEBrick server with:</description>
    </item>
    <item>
      <title>Rails: Gmail Reply-To on Contact Form Email</title>
      <link>https://rietta.com/blog/rails-gmail-reply-to-on-contact-form/</link>
      <pubDate>Wed, 18 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/rails-gmail-reply-to-on-contact-form/</guid>
      <description>Most websites have a contact form for visitors to fill out a message that is then e-mailed to the owner or support contact for the website.&#xA;When working with a Rails app that will be hosted in a cloud environment that does not supply outbound email delivery it can be convenient to use a Gmail (or Google Apps) account at first for outbound delivery.&#xA;The trouble is that Google&amp;rsquo;s SMTP server will rewrite the email address set in the email message to match the address of the account.</description>
    </item>
    <item>
      <title>Rails: TypeError: nil can&#39;t be coerced into Float</title>
      <link>https://rietta.com/blog/rails-typeerror-nil-cant-be-coerced/</link>
      <pubDate>Sat, 14 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/rails-typeerror-nil-cant-be-coerced/</guid>
      <description>When working on Ruby on Rails website some of the common errors that you need to check for is nil objects when something else was expected. For instance, suppose one of your ActiveRecord models has a price field. Further suppose that the user left this field blank instead of entering 0.0 as the price.&#xA;This computation will fail: quantity = 3 # ... amount_to_charge = price_field * quantityIt fails with a &amp;ldquo;TypeError: nil can&amp;rsquo;t be coerced into Float&amp;rdquo; exception.</description>
    </item>
    <item>
      <title>Integrate Blog Content with your Rails 3 Website with Pure Ruby Code and RSS</title>
      <link>https://rietta.com/blog/integrate-blog-content-with-your-rails/</link>
      <pubDate>Mon, 02 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/integrate-blog-content-with-your-rails/</guid>
      <description>The full sample code used for this post is available as a Ruby on Rails 3.1 project at https://github.com/rietta/SimpleBlogFeed.&#xA;Suppose you have built an amazing new website using Ruby on Rails 3. It has tons of features and some great content. However, one thing it is lacking is a solid blog section. You would like to avoid writing your own blog code in Rails since there are already tons of solid blog applications to choose from - Wordpress, Moveable Type, Typepad, Blogger.</description>
    </item>
    <item>
      <title>How to automate copyright notice updates in Ruby on Rails</title>
      <link>https://rietta.com/blog/how-to-automate-copyright-notice/</link>
      <pubDate>Mon, 26 Dec 2011 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/how-to-automate-copyright-notice/</guid>
      <description>I sure hope everyone had a wonderful Christmas with their families. I am personally enjoying taking a few days off work and doing some reading. On Christmas morning, I bought a copy of Rework (Kindle edition) by Jason Fried and David Heinemeier Hansson. The &amp;ldquo;Go&amp;rdquo; Chapter alone is worth the price of admission!&#xA;One day I may share more about this book. However, today it seems like a great time to share another Ruby on Rails coding trick with you.</description>
    </item>
    <item>
      <title>Conditionally Including Resources on SSL or non-SSL to Avoid Mixed Content Security Warnings in Ruby on Rails</title>
      <link>https://rietta.com/blog/conditionally-including-resources-on/</link>
      <pubDate>Wed, 21 Dec 2011 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/conditionally-including-resources-on/</guid>
      <description>&lt;p&gt;When building content that can be delivered on an encrypted HTTPS connection it is necessary to reference all of the embedded resources, 3rd party badge images, embedded YouTube videos, etc, from an HTTPS url.  Otherwise a mixed content error will imply to your users that the website is not safe, ouch!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The SIC-2007 Call for Papers is Hot off the Press</title>
      <link>https://rietta.com/blog/sic-2007-call-for-papers-is-hot-off/</link>
      <pubDate>Sun, 21 Jan 2007 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/sic-2007-call-for-papers-is-hot-off/</guid>
      <description>The SIAF Board released their call for papers and presentations for SIC 2007, in Denver Colorado. The annual Shareware Industry Conference is a lot of fun for software developers and marketers. I had a blast last year when I presented Business Intelligence for the Micro-ISV.</description>
    </item>
    <item>
      <title>Upcoming Beta Release: SQL Converter 2 for Excel</title>
      <link>https://rietta.com/blog/upcoming-beta-release-sql-converter-2/</link>
      <pubDate>Mon, 25 Jul 2005 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/upcoming-beta-release-sql-converter-2/</guid>
      <description>There is nothing quite like the exhilaration from lack of sleep and high levels of caffeine present during a marathon coding week. Fortunately, I am able to take my time this week preparing SQL Converter 2.0 for Excel for beta release. The core program is functioning well and I have spent the last day wrestling with Windows Installer issues.&#xA;From a developer perspective, building object oriented software in VBA for Excel is a pain.</description>
    </item>
    <item>
      <title>A Little Huffman Coding with Java Tricks</title>
      <link>https://rietta.com/blog/little-huffman-coding-with-java-tricks/</link>
      <pubDate>Mon, 16 May 2005 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/little-huffman-coding-with-java-tricks/</guid>
      <description>A Huffman code is a way to utilize a binary tree to construct a minimal-length encoding for messages where certain characters or groups of characters have known frequencies. The tree used for such an operation called a Huffman tree. Huffman codes are the most efficient compression method for random data and are often found as steps in other compression algorithms such as JPEG and Deflate (ZIP). Building such trees is a very common exercise for Computer Science and Math classes so I can skip the details.</description>
    </item>
    <item>
      <title>SWT and Swing in the News, Again.</title>
      <link>https://rietta.com/blog/swt-and-swing-in-news-again/</link>
      <pubDate>Sat, 30 Apr 2005 00:00:00 +0000</pubDate>
      <guid>https://rietta.com/blog/swt-and-swing-in-news-again/</guid>
      <description>It seems that the SWT vs. Swing is back in the news. Maybe it has never gone away but I have simply not noticed it as most of my work in the last year has either been doing packet inspection with C or simple scripting - aka no significant Java work.&#xA;On the Thought: Gosling on SWT, &amp;ldquo;&amp;hellip;Gosling says AWT == SWT. That&amp;rsquo;s sort of true but less true than more.</description>
    </item>
  </channel>
</rss>
