<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Systems++</title><link>https://robertu94.github.io/</link><description>Recent content on Systems++</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 03 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://robertu94.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Learning to Learn: Travel</title><link>https://robertu94.github.io/learning/travel/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/learning/travel/</guid><description>&lt;p&gt;Travel can be an opportunity to see and explore new cultures. I&amp;rsquo;ve had the chance to do a lot of traveling with work. Here are some of the things I&amp;rsquo;ve learned along the way.&lt;/p&gt;</description></item><item><title>Using my iPad as a Second Monitor with KDE Plasma</title><link>https://robertu94.github.io/posts/2025-10-30-ipad-monitor/</link><pubDate>Thu, 30 Oct 2025 10:58:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2025-10-30-ipad-monitor/</guid><description>&lt;p&gt;When traveling it is sometimes helpful to have access to a second monitor.
An iPad does a passable job for this when your traveling and just need a little more screen real-estate.&lt;/p&gt;</description></item><item><title>About Me</title><link>https://robertu94.github.io/about/</link><pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/about/</guid><description>&lt;p&gt;I am an Assistant Computer Scientist at Argonne National Laboratory under Franck Cappello.
My particular &lt;strong&gt;research interests&lt;/strong&gt; are lossy compression, science data and evaluation for AI, distributed systems, and systems programming.&lt;/p&gt;</description></item><item><title>Spack on Perlmutter</title><link>https://robertu94.github.io/guides/spack/perlmutter/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/perlmutter/</guid><description>configure spack for NERSC Perlmutter</description></item><item><title>Install podman on Windows, MacOS, and Linux</title><link>https://robertu94.github.io/guides/podman/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/podman/</guid><description>how to install the podman container engine on various operating systems</description></item><item><title>Installing My Server Fully Remotely</title><link>https://robertu94.github.io/posts/2023-11-23-ipmi-install/</link><pubDate>Thu, 23 Nov 2023 12:17:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2023-11-23-ipmi-install/</guid><description>&lt;p&gt;I run a small tower server in my house to provide services that I use for
software development, recently CentOS-8-Stream reached end of life.
Since this server distribution doesn&amp;rsquo;t support in-place updates, updating
requires reinstalling with a new version of the CentOS-9-Stream. This post
documents the challenges that I hit along the way.&lt;/p&gt;</description></item><item><title>What to support if you are supporting</title><link>https://robertu94.github.io/guides/dependencies/</link><pubDate>Tue, 12 Sep 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/dependencies/</guid><description>&lt;p&gt;Dependencies matter a lot in terms of who can easily install and use your software.
However there are trade-offs in what features are provided by each version and the availability of these versions.
This presents an opinionated take on what these trade-offs are so one can know what can be widely supported.&lt;/p&gt;</description></item><item><title>Dethroning LaTeX: What Would It Take?</title><link>https://robertu94.github.io/posts/2023-07-02-dethrone-latex/</link><pubDate>Sun, 02 Jul 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2023-07-02-dethrone-latex/</guid><description>&lt;p&gt;As an academic, you write a lot of papers. If you contribute to the disciplines of Math, Computer Science, or some domains of physical sciences, you&amp;rsquo;ve probably used LaTeX &amp;ndash; a typesetting language &amp;ndash; through a tool like &lt;a href="https://overleaf.com/" target="_blank" rel="noreferrer"&gt;Overleaf&lt;/a&gt;. What&amp;rsquo;s nice about LaTeX is that it attempts to separate concerns: Authors with minimal effort can port the text and structure of a document from one style to another. It generally produces much more ascetically pleasing output by default than what most authors would do on their own. It handles formatting of three things that generally are extremely frustrating in other tools: citations/bibliography, cross-references, footnotes/endnotes, equations, and embedded code listings. When used with a source control like Git it provides one of the best change review and tracking mechanisms of any document platform.&lt;/p&gt;</description></item><item><title>Spack on Ubuntu 20.04</title><link>https://robertu94.github.io/guides/spack/ubuntu/</link><pubDate>Thu, 25 May 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/ubuntu/</guid><description>general guidance for using spack on Ubuntu 20.04</description></item><item><title>How I Work: Killer Libraries</title><link>https://robertu94.github.io/posts/2023-06-03-languages/</link><pubDate>Mon, 24 Apr 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2023-06-03-languages/</guid><description>&lt;p&gt;Most successful langauges have a &amp;ldquo;killer&amp;rdquo; features that motivates&lt;/p&gt;
&lt;p&gt;In my previous post, I commented on the tools that I use for software development, but I didn&amp;rsquo;t talk about either the process of choosing a language or the libraries within a language that I use most frequently. This post expands on how I work within a language and specific &amp;ldquo;killer&amp;rdquo; libraries that I use most and how they compare to facililties that I know from other languages.&lt;/p&gt;</description></item><item><title>Refactoring CI/CD for a Moderately Large C++ Code Base</title><link>https://robertu94.github.io/posts/2023-03-29-dagger/</link><pubDate>Mon, 24 Apr 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2023-03-29-dagger/</guid><description>&lt;p&gt;CI/CD is a critical, but difficult to get right part of software engineering.
You often want to test multiple distributions, multiple compilers on each commit, and you want that to be as fast as reasonably possible.
This gets more complicated when you have large dependency trees that you want to remain consistent.
Recently, I adapted the CI/CD system for a project that I maintain LibPressio to use Dagger &amp;ndash; a programmatic way to do CI/CD portable-ally across runner environments which made it easier to run our tests and verify correctness.&lt;/p&gt;</description></item><item><title>How I work: The Tools I Use</title><link>https://robertu94.github.io/posts/2023-03-14-how-i-work/</link><pubDate>Tue, 14 Mar 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2023-03-14-how-i-work/</guid><description>&lt;p&gt;From time to time I get a question of what tools I use for what jobs. Here the tools I use to get things done:&lt;/p&gt;</description></item><item><title>External Clang-Tidy Modules! C++ Refactoring for the Common Project</title><link>https://robertu94.github.io/posts/2023-03-10-clang-tidy/</link><pubDate>Fri, 10 Mar 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2023-03-10-clang-tidy/</guid><description>&lt;p&gt;Clang style refactoring has been something I&amp;rsquo;ve been admiring from afar for
quite a while now. However for a user to actually use it, it has previously
required forking llvm to be able to use it in a reasonable fashion because of
things like the hack in clang used to locate the resource directory or other
fragile hacks like &lt;code&gt;LD_PRELOAD&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Learning to Learn: Software Teams</title><link>https://robertu94.github.io/learning/software_for_teams/</link><pubDate>Thu, 09 Feb 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/learning/software_for_teams/</guid><description>&lt;p&gt;Outside of school very seldom in software development will you completely work alone on a project.
Leading and being an effective member of a software team will be critical to your success in this field.
However each team and project is different.
Some projects have a high iteration cost because testing could cause people to die (e.g. bugs in rocket guidance systems in manned space flight), testing could be lengthy (e.g. if you need to manufacture a physical thing), or expensive resources are consumed (e.g. issues that only manifest when using 1000 nodes) and have to be more planning focused.
Other line of business or research applications can afford to be more iterative.
Knowing which situation you are in is key to crafting your process to be more effective.
Regardless, there are some timeless principles of teams which are important to consider when working in or leading a team.
In this post, I will highlight what research says makes effective teams and highlight how one popular approach implements these principles.&lt;/p&gt;</description></item><item><title>Learning to Learn: Software Development on Linux</title><link>https://robertu94.github.io/learning/development/</link><pubDate>Sun, 22 Jan 2023 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/development/</guid><description>&lt;p&gt;What is software development?
At a most basic level, it is the activity of using a programming language to achieve some set of goals over time.
It includes everything from scripts that a graduate student might write to analyze some data to massive systems that control aircraft.
As our world continues to progress technically, software development will likely become even more commonplace than it is now.
In this post, I aim to provide a comprehensive overview of how one can develop software efficiently using free and open source tools on Linux.&lt;/p&gt;</description></item><item><title>Learning to Learn: Task Management, Time Tracking, and Journaling</title><link>https://robertu94.github.io/learning/time/</link><pubDate>Sun, 22 Jan 2023 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/time/</guid><description>&lt;p&gt;A few of the key things that you will need as you need as a professional are the ability to manage tasks,
understand how you spend your time, and improve your own processes. For me and many others, journaling,
task managers, and time trackers help you answer these important questions.&lt;/p&gt;</description></item><item><title>Learning to Learn: GDB</title><link>https://robertu94.github.io/learning/gdb/</link><pubDate>Sun, 22 Jan 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/learning/gdb/</guid><description>&lt;p&gt;GDB is a powerful tool that is underutilized by most programmers that I&amp;rsquo;ve met.
It can tell you the state of one or more running or crashed programs, and even manipulate the memory of a running process.
It is an invaluable tool for understanding what is going wrong with your programs.&lt;/p&gt;</description></item><item><title>Learning to Learn: MPI</title><link>https://robertu94.github.io/learning/mpi/</link><pubDate>Sun, 22 Jan 2023 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/learning/mpi/</guid><description>&lt;p&gt;MPI is the de-facto standard way to write distributed programs that run on super computers.
Many have tried to replace it, but so far none of them have succeeded.
Learning to use it successfully, will enable you to write powerful distributed programs.&lt;/p&gt;</description></item><item><title>Refactoring With Clang Query</title><link>https://robertu94.github.io/posts/2022-12-28-refactoring-with-clang-query/</link><pubDate>Wed, 28 Dec 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2022-12-28-refactoring-with-clang-query/</guid><description>&lt;p&gt;Have you ever wanted to identify a list of files that would need modifications to adopt a new API?
Clang-Query can make this much easier.
I recently wanted to introduce a set of helper functions to simplfy an aspect of compressor configuation in LibPressio.
But first, I needed to know what modules were effected.&lt;/p&gt;</description></item><item><title>Three Neat Things I Did With Julia</title><link>https://robertu94.github.io/posts/2022-12-15-three-neat-things-with-julia/</link><pubDate>Thu, 15 Dec 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2022-12-15-three-neat-things-with-julia/</guid><description>&lt;p&gt;In the past, I&amp;rsquo;ve &lt;a href="https://robertu94.github.io/posts/2019-03-21-julia-could-there-be-one/"&gt;written pretty glowingly about Julia&lt;/a&gt;. It&amp;rsquo;s been a few years
since I first used Julia in 2019, and it hasn&amp;rsquo;t completely replaced Python for
me. However, I wanted to share a few neat projects that I&amp;rsquo;ve done using it
which would have been much more painful without it, and share what I think now
about what I wrote in 2019.&lt;/p&gt;</description></item><item><title>Debugging Inconsistent Network Performance</title><link>https://robertu94.github.io/posts/2022-12-14-debugging-libfabric/</link><pubDate>Wed, 14 Dec 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/posts/2022-12-14-debugging-libfabric/</guid><description>&lt;p&gt;High-performance network interconnects, such as Infiniband, are common in high performance computing environments. Recently, my colleagues, and I ran a series of experiments on the Cooley system at the Argonne Leadership Computing Facility. For one set of experiments, the network performance was consistent and fast, but for the others we periodically had poor performance. Up until this point in my work, I had not directly used or configured network libraries below this layer. This post summarizes the steps we took to investigate the performance.&lt;/p&gt;</description></item><item><title>Learning to Learn: CMake</title><link>https://robertu94.github.io/learning/cmake/</link><pubDate>Tue, 15 Nov 2022 05:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/cmake/</guid><description>&lt;p&gt;CMake is the de-facto C++ build system used by an overwhelming number of C++ projects.
Even if you personally favor more modern alternatives such as Meson, Bazel, or Pants, if you
ever pull in a 3rd party dependency, there is a good chance that it uses CMake so
knowing enough about CMake to understand it is worth knowing.&lt;/p&gt;</description></item><item><title>Spack on Crusher</title><link>https://robertu94.github.io/guides/spack/crusher/</link><pubDate>Wed, 26 Oct 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/crusher/</guid><description>Configure spack for ORNL OLCF Crusher</description></item><item><title>Spack on Summit</title><link>https://robertu94.github.io/guides/spack/summit/</link><pubDate>Tue, 25 Oct 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/summit/</guid><description>configure spack on ORNL OLCF Summit</description></item><item><title>How to export a C API from a C++ code</title><link>https://robertu94.github.io/guides/cpp/exporting_c/</link><pubDate>Mon, 24 Oct 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/cpp/exporting_c/</guid><description>&lt;p&gt;C is the &lt;em&gt;lingua franca&lt;/em&gt; of platform APIs. Most if not all languages provide a mechanism to import APIs from
C because they need to do so in order to support the operating system. But given the expressiveness of C++,
its often nice to write this code in C++ instead; here&amp;rsquo;s how to do that sanely.&lt;/p&gt;</description></item><item><title>How to add a dependency in CMake</title><link>https://robertu94.github.io/guides/cpp/cmake_deps/</link><pubDate>Wed, 19 Oct 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/cpp/cmake_deps/</guid><description>A short verison of how to work with dependencies in CMake</description></item><item><title>Suggestions for the Design of Computational Experiments</title><link>https://robertu94.github.io/learning/experiments/</link><pubDate>Tue, 18 Oct 2022 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/experiments/</guid><description>&lt;p&gt;So you want to do empirical computer science? Doing good science is difficult. It requires discipline and attention to detail. However there are strategies that can help you focus on answering the questions you can attempt to answer. First you should ask, “is this a scientific question?” Not all questions are scientific questions. Questions about aesthetics, values, ethics are not science questions. “Is A better than B?” is not a scientific question, it’s a question of values. Questions of values require trade offs, and while important can’t be solved with the scientific method of stating assumptions, posing questions, designing experiments, collecting data, and interpreting results. “Can method A achieve more flops than method B in a given specific context?” Is more of a scientific question.&lt;/p&gt;</description></item><item><title>Updating LibPressio with Spack</title><link>https://robertu94.github.io/guides/spack/updating_libpressio_with_spack/</link><pubDate>Tue, 13 Sep 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/updating_libpressio_with_spack/</guid><description>how can you update your copy of libpressio via spack?</description></item><item><title>Thoughts on Dependencies for Scientific Software</title><link>https://robertu94.github.io/posts/2022-05-05-dependencies/</link><pubDate>Wed, 20 Jul 2022 00:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2022-05-05-dependencies/</guid><description>&lt;p&gt;Modern software does not exist in a vacuum, developers always rely on other developers or engineers to provide aspects of their systems.
Even if you write hello world in your programming language of your choice you likely still depend on the standard library from your language.
Even if you were to write hello world in the raw binary format of your assembly language, you still depend on the operating system.
Even if you wrote your own uni-kernel to produce hello world on the console, you likely rely on vendor provided firmware to initialize the program or memory.
And if you are one of the blessed few who can completely fabricate your own hardware and don&amp;rsquo;t need to rely on vendor provided firmware, you likely don&amp;rsquo;t have time or expertise to write efficient higher level systems and need others to provide software to run on your hardware.
Therefore the question is not will you use dependencies, but how will you use them responsibly.&lt;/p&gt;</description></item><item><title>Shortcut Guide for Configuring Spack for a New HPC System</title><link>https://robertu94.github.io/guides/spack/spack/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/spack/</guid><description>configure spack on a new system</description></item><item><title>Spack on Bebop</title><link>https://robertu94.github.io/guides/spack/bebop/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/bebop/</guid><description>configure spack for ANL LCRC bebop</description></item><item><title>Spack on Bebop</title><link>https://robertu94.github.io/guides/spack/improv/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/improv/</guid><description>configure spack for ANL LCRC Improv</description></item><item><title>Spack on Cooley</title><link>https://robertu94.github.io/guides/spack/cooley/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/cooley/</guid><description>configure spack for ANL ALCF cooley</description></item><item><title>Spack on Polaris</title><link>https://robertu94.github.io/guides/spack/polaris/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/polaris/</guid><description>configure spack for ANL ALCF Polaris</description></item><item><title>Spack on Theta</title><link>https://robertu94.github.io/guides/spack/theta/</link><pubDate>Tue, 19 Jul 2022 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/guides/spack/theta/</guid><description>configure spack for ANL ALCF Theta</description></item><item><title>LibPressio</title><link>https://robertu94.github.io/presentations/ecp2021-lossy/</link><pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/ecp2021-lossy/</guid><description>This talk was part of a larger session on Error Bounded Lossy Compression. It presents updates on LibPressio since the last annual meeting focusing on the automated configuration work completed as part of FRaZ and LibPressio-Opt as well as interface improvements.</description></item><item><title>Approachable Error Bounded Lossy Compression</title><link>https://robertu94.github.io/presentations/sc2020-doctoral/</link><pubDate>Sun, 01 Nov 2020 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/sc2020-doctoral/</guid><description>Compression is commonly used in HPC applications to move and store data. Traditional losslesscompression, however, does not provide adequate compression of floating point data often found inscientific codes. Recently, researchers and scientists have turned to lossy compression techniquesthat approximate the original data rather than reproduce it in order to achieve desired levels ofcompression. Typical lossy compressors do not bound the errors introduced into the data, leading to the development of error bounded lossy compressors (EBLC). These tools provide the desired levelsof compression as mathematical guarantees on the errors introduced. The current state of EBLCleaves much to be desired. The existing EBLC all have different interfaces requiring codes to bechanged to adopt new techniques; EBLC have many more configuration options than theirpredecessors, making them more difficult to use; and EBLC typically bound quantities like pointwise errors rather than higher level metrics such as spectra, p-values, or test statistics thatscientists typically use. My dissertation aims to provide a uniform interface to compression and todevelop tools to allow application scientists to understand and apply EBLC. This canvas presentsthree groups of work: LibPressio, a standard interface for compression and analysis;FRaZ/LibPressio-Opt frameworks for the automated configuration of compressors using LibPressio;and work on tools for analyzing errors in particular domains</description></item><item><title>Lossy Compression for AI</title><link>https://robertu94.github.io/presentations/jlesc2020-lossy/</link><pubDate>Tue, 01 Sep 2020 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/jlesc2020-lossy/</guid><description>As time progresses, the volume of data surrounding machine learning and AI methods continues to grow from training, testing, and validation datasets to the models themselves. As the volume grows, there are increasing challenges in transporting and storing the data. Lossy compression techniques present the opportunity to drastically reduce the volume of data while maintaining or even improving upon the quality of the decisions made by AI. This talk presents a survey of novel research examining the effect of lossy compression on AI decision making in a variety of domains including medical data science and physics. We examine the effects of data ordering, error bounds, compression methodologies to make general recommendations from these and other areas regarding how to effectively leverage lossy compression in AI using the common LibPressio interface.</description></item><item><title>Spack: a Truly Useful Package Manager</title><link>https://robertu94.github.io/posts/2020-08-27-spack/</link><pubDate>Thu, 27 Aug 2020 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2020-08-27-spack/</guid><description>&lt;p&gt;So you are developing software, and you need the software to build for multiple difference machines, with different version of a library, or with just different compile time options.
You can probably manage this by hand, but it very quickly gets out of hand.
Spack is a package manager designed for high performance computing, but I would argue is more broadly useful for five reasons:&lt;/p&gt;</description></item><item><title>FRaZ: A Generic High-Fidelity Fixed-Ratio Lossy Compression Framework for Floating Point Scientific Data</title><link>https://robertu94.github.io/presentations/ipdps2020-fraz/</link><pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/ipdps2020-fraz/</guid><description>With ever-increasing volumes of scientific floating-point data being produced by high-performance computingapplications, significantly reducing scientific floating-point datasize is critical, and error-controlled lossy compressors have beendeveloped for years. None of the existing scientific floating-pointlossy data compressors, however, support effective fixed-ratiolossy compression. Yet fixed-ratio lossy compression for scientificfloating-point data not only compresses to the requested ratio butalso respects a user-specified error bound with higher fidelity. Inthis paper, we present FRaZ: a generic fixed-ratio lossy com-pression framework respecting user-specified error constraints.The contribution is twofold. (1) We develop an efficient iterativeapproach to accurately determine the appropriate error settingsfor different lossy compressors based on target compressionratios. (2) We perform a thorough performance and accuracyevaluation for our proposed fixed-ratio compression frameworkwith multiple state-of-the-art error-controlled lossy compressors,using several real-world scientific floating-point datasets fromdifferent domains. Experiments show that FRaZ effectively iden-tifies the optimum error setting in the entire error setting space ofany given lossy compressor. While fixed-ratio lossy compressionis slower than fixed-error compression, it provides an importantnew lossy compression technique for users of very large scientificfloating-point datasets.</description></item><item><title>LibPressio Tutorial</title><link>https://robertu94.github.io/presentations/libpressio2020-tutorial/</link><pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/libpressio2020-tutorial/</guid><description>This video provides a basic tutorial of how to install and use LibPressio &amp;ndash; a generic abstraction for lossless and lossy compression for dense tensors. You can find LibPressio on &lt;a href="https://github.com/codarcode/libpressio" target="_blank" rel="noreferrer"&gt;github&lt;/a&gt;</description></item><item><title>Approachable Error Bounded Lossy Compression</title><link>https://robertu94.github.io/presentations/argonne2019-aproachable/</link><pubDate>Sun, 01 Dec 2019 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/argonne2019-aproachable/</guid><description>Error Bounded Lossy Compression is a powerful technique that combines the power of lossy compression with the strong guarantees for the preservation of the original data. However, using error bounded lossy compression can be challenging. There is a proliferation of interfaces, different semantics, and difficult to understand relationships to user error bounds. This talk presents two tools — LibPressio and FRaZ — that help address these issues. LibPressio provides a usable abstraction across SZ, ZFP, MGARD, as well as traditional image compressors (JPEG, WEBP, PNG, TIFF, etc) and lossless compressors via BLOSC. FRaZ is a tool that uses LibPresssio to compress datasets according to a Fixed Compression Ratio with progress towards supporting arbitrary user error bounds. I present our recent work submitted to IPDPS and current work in progress.</description></item><item><title>Strong or Robust?</title><link>https://robertu94.github.io/posts/2019-11-17-strong-or-robust/</link><pubDate>Sun, 17 Nov 2019 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2019-11-17-strong-or-robust/</guid><description>&lt;p&gt;Should a software design be strong or robust?
This is a debate that seems to have been developing in recent years with the recent proponents so-called &amp;ldquo;strong-typing&amp;rdquo; advocating new API designs.
In this post, I go a little into the debate and discuss its consequences.&lt;/p&gt;</description></item><item><title>Learning to Learn: High Performance Computing</title><link>https://robertu94.github.io/learning/hpc/</link><pubDate>Sun, 25 Aug 2019 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/hpc/</guid><description>&lt;p&gt;There&amp;rsquo;s at least for me an inherent coolness to be able to say that I can run code on a super computer.
However, there is often a gap between the kind of programming that you learned in your introductory classes, and what kind of code runs well on a computing cluster.
In this post, I try to provide an introduction to high performance computing, and some of the differences between it and personal computing.&lt;/p&gt;</description></item><item><title>Learning to Learn: Linux</title><link>https://robertu94.github.io/learning/linux/</link><pubDate>Sun, 25 Aug 2019 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/linux/</guid><description>&lt;p&gt;So you want to or have to try this thing called &amp;ldquo;Linux.&amp;rdquo;
Just like curry powder isn&amp;rsquo;t just one thing, but a distinct mix of spices that come together into a tasty mixture, Linux is much the same.
Also like curry, Linux isn&amp;rsquo;t for everyone.
In this post I describe the process of choosing the &amp;ldquo;flavor&amp;rdquo; of Linux that will work best for you, introduce a powerful tool that will help you to make the most of Linux, and describe some first steps to take when things go wrong.&lt;/p&gt;</description></item><item><title>Learning to Learn: Writing</title><link>https://robertu94.github.io/learning/writing/</link><pubDate>Mon, 01 Jul 2019 06:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/writing/</guid><description>&lt;p&gt;Communication is essential to the enterprise of knowledge.
Without communication, we would never be able to build upon the works of others or have them build upon our own.
One of the most important &amp;ndash; and challenging &amp;ndash; arts within communication is writing.
Writing is unique among commutative forms in its durability and portability.
Once written, the words of the author can transcend even their death and travel places they never dreamed to tread.
However writings portability and durability are the same feature that present its central challenge: With the author long gone, how can the he still communicate his or her intent?
In this post, I ponder how I face these challenges and encourage others to do the same.&lt;/p&gt;</description></item><item><title>Learning to Learn: Studying New Topics</title><link>https://robertu94.github.io/learning/litrature-review/</link><pubDate>Fri, 12 Apr 2019 11:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/litrature-review/</guid><description>&lt;p&gt;Efficient study of a topic is a powerful skill for a wide variety of domains.
However &amp;ndash; despite having several classes on writing and research in High School and Undergraduate Studies &amp;ndash; it wasn&amp;rsquo;t something that I truly appreciated and learned how to do well until Graduate School.
I think this really boils down to lacking the kind of personal application that makes these efforts meaningful.
However now that I have come to appreciate it, I want to highlight how I think how I study new topics, and how this applies to many topics outside of academic research.&lt;/p&gt;</description></item><item><title>Julia: Could There be One Language?</title><link>https://robertu94.github.io/posts/2019-03-21-julia-could-there-be-one/</link><pubDate>Thu, 04 Apr 2019 09:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2019-03-21-julia-could-there-be-one/</guid><description>&lt;p&gt;There is a constant problem with programming language design: fast, generic, easy to write; pick two.
The principle is that programming languages cannot be all three at once.
Code that is Fast and Generic like C++ isn&amp;rsquo;t exactly easy to write.
Code that is Generic and easy to write like Python isn&amp;rsquo;t always fast in the sense that C/C++ programmers mean it.
Code that is Fast and Easy to Write isn&amp;rsquo;t always Generic in the sense that Python is.
There is a new language on the block &amp;ndash; Julia &amp;ndash; which strives to challenge these assumptions.
In the remainder of this post, I highlight what I like about it and describe my experience using it over the last semester.&lt;/p&gt;</description></item><item><title>Learning to Learn: Python</title><link>https://robertu94.github.io/learning/python/</link><pubDate>Wed, 23 Jan 2019 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/python/</guid><description>&lt;p&gt;Python is a relatively simple language compared to others such as C++. Despite its simplicity, Python really shines because of its robust standard library, extensive 3rd party library ecosystem (especially for statistics and data analysis), and intuitiveness. This post tracks my process of learning how to program well in Python.&lt;/p&gt;</description></item><item><title>Predicting Optimal Error-Bounded-Lossy-Compression Configuration</title><link>https://robertu94.github.io/presentations/sc2018-predicting/</link><pubDate>Thu, 01 Nov 2018 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/sc2018-predicting/</guid><description>Techniques for predicting error bounded lossy compression ratios from data distribution and compressor settings.</description></item><item><title>Learning to Learn: Reading</title><link>https://robertu94.github.io/learning/reading/</link><pubDate>Wed, 08 Aug 2018 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/learning/reading/</guid><description>&lt;p&gt;From time to time, I get questions about how I read and retain as much information as I do. While it is never easy &amp;ndash; especially with dry technical documents &amp;ndash; there are a few strategies that I have learned along the what that I find helpful. In this post I provide some general suggestions along with some that are more useful in computer systems research.&lt;/p&gt;</description></item><item><title>Configuration Management: Common Pitfalls</title><link>https://robertu94.github.io/posts/2018-07-31-configuration-management-pitfalls/</link><pubDate>Tue, 31 Jul 2018 10:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2018-07-31-configuration-management-pitfalls/</guid><description>&lt;p&gt;So you know you need a configuration management system and you have an idea of which one will work for you.
So what should I think about about before deploying one of this systems?
In this third and final post in this series, I present some suggestions about using these systems in a way that is flexible and scalable to larger numbers of systems.&lt;/p&gt;</description></item><item><title>Configuration Management: the Battle Royal</title><link>https://robertu94.github.io/posts/2018-07-31-configuration-management-comparison/</link><pubDate>Tue, 31 Jul 2018 09:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2018-07-31-configuration-management-comparison/</guid><description>&lt;p&gt;So, you need a Configuration Management System, so which one do you choose?
This post is the second in a three part series on configuration management.
In this post, I&amp;rsquo;ll highlight the strengths of these systems and their respective weaknesses.&lt;/p&gt;</description></item><item><title>Configuration Management: the Related Systems</title><link>https://robertu94.github.io/posts/2018-07-31-configuration-management-related-systems/</link><pubDate>Tue, 31 Jul 2018 08:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2018-07-31-configuration-management-related-systems/</guid><description>&lt;p&gt;Configuration Management Systems like Ansible, Chef, Puppet, and SaltStack are in my opinion are nearly essential if you find yourself managing more than 5 machines.
But what exactly are they, which is better for my circumstances, do I still need them if I use a container based infrastructure, how do I get started?
This post is the first in a series of posts that will attempt to answer these questions.&lt;/p&gt;</description></item><item><title>Generic Cuda</title><link>https://robertu94.github.io/posts/2018-05-12-generic-cuda/</link><pubDate>Sat, 12 May 2018 08:00:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2018-05-12-generic-cuda/</guid><description>&lt;p&gt;GPU programming has the potential to make embarrassingly parallel tasks very quick.
But what if you want to perform the same task on a variety of different types?
In this post, I walk through a generic testing code that preforms a vector add on GPU and CPU to verify the correctness.&lt;/p&gt;</description></item><item><title>Learning to Learn: C++</title><link>https://robertu94.github.io/learning/cpp/</link><pubDate>Fri, 12 Jan 2018 19:00:14 -0500</pubDate><guid>https://robertu94.github.io/learning/cpp/</guid><description>&lt;p&gt;C++ is a huge language. It has tools form imperative, functional, object-oriented, and generic paradigms. And that leaves out the extremely fine control over things like memory allocation strategies in the standard library not generally available elsewhere. In this post, I present my learning path through C++ and offer some suggestions for learning this multi-faceted language.&lt;/p&gt;</description></item><item><title>Learning to Learn: Software Patterns</title><link>https://robertu94.github.io/learning/patterns/</link><pubDate>Fri, 12 Jan 2018 19:00:14 -0500</pubDate><guid>https://robertu94.github.io/learning/patterns/</guid><description>&lt;h1 id="foundation-parallel-operations" class="relative group"&gt;Foundation Parallel Operations &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#foundation-parallel-operations" aria-label="Anchor"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;Fundamental to developing high-performance software is having an understanding of the basics of parallel architecture.&lt;/p&gt;</description></item><item><title>Learning to Learn: Intake</title><link>https://robertu94.github.io/learning/intake/</link><pubDate>Mon, 01 Jan 2018 08:00:14 -0500</pubDate><guid>https://robertu94.github.io/learning/intake/</guid><description>&lt;p&gt;From time to time I get questions about how I stay apprised on all of the topics that I know something about. The short answer is a lot of reading and listening.&lt;/p&gt;</description></item><item><title>Life with Libtooling</title><link>https://robertu94.github.io/posts/2017-12-10-life-with-libtooling/</link><pubDate>Sun, 10 Dec 2017 11:21:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-12-10-life-with-libtooling/</guid><description>&lt;p&gt;Over the last two months, I spent a significant amount of time using Clang&amp;rsquo;s libtooling.
Libtooling is a great way to quickly develop tools to analyze and modify large quantizes of C++.
In this article, I share some lessons learned working with libtooling.&lt;/p&gt;</description></item><item><title>Design of A Matrix loading Library</title><link>https://robertu94.github.io/posts/2017-09-23-matrixloading-library/</link><pubDate>Sat, 23 Sep 2017 07:00:00 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-09-23-matrixloading-library/</guid><description>&lt;p&gt;Ever notice that every matrix and graph library seems to have a different interface for constructing matrices?
Also notice that each only only supports some subset of common matrix formats?
With a little help from the Adapter and Builder design patterns we can actually solve this problem.&lt;/p&gt;</description></item><item><title>C++ Templates: Starring into the Abyss</title><link>https://robertu94.github.io/presentations/templates/</link><pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/templates/</guid><description>C++ templates are one of the most powerful, and probably least understood aspects of C++ programming. Trying to understand error messages from templates code can feel like staring into the abyss. In this talk, I introduce many of the various features and dive into applications of C++ templates that are used in the wild. I will cover several of the common pitfalls and design patterns that result from this feature of C++. I will also stare right into the heart of the abyss and explain why the error messages can be cryptic, why its a good thing, and how to begin to decipher those error messages.</description></item><item><title>Qt is for more than just GUIs</title><link>https://robertu94.github.io/posts/2017-05-23-qt-as-library/</link><pubDate>Tue, 23 May 2017 10:58:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-05-23-qt-as-library/</guid><description>&lt;p&gt;When most people think of Qt, I imagine that they think about the Graphical User Interface components.
But Qt has a variety of other components beyond just being a GUI framework.
In this post, I highlight some of what I find to be the more interesting features.&lt;/p&gt;</description></item><item><title>Pluggable Authentication With PAM</title><link>https://robertu94.github.io/posts/2017-05-14-pluggable-authentication/</link><pubDate>Sun, 14 May 2017 10:58:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-05-14-pluggable-authentication/</guid><description>&lt;p&gt;Authentication and authorization is one of foundational aspects of any security system.
However writing an authentication and authorization system can be anything but:
There are complex, ever-changing requirements, not to mention differences for differing interfaces it can quickly become daunting.
However, there already exists a system on Linux and Unix that allows for dynamic and complex authentication: PAM.&lt;/p&gt;</description></item><item><title>Resource Acquisition is Initialization and SDL</title><link>https://robertu94.github.io/posts/2017-05-08-sdl-raii/</link><pubDate>Mon, 08 May 2017 05:30:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-05-08-sdl-raii/</guid><description>&lt;p&gt;Recently, I was working on a project for &lt;a href="brianmalloy.com"&gt;2D Game Development&lt;/a&gt; where I had to use SDL 2.0.
SDL 2.0 is a family of media libraries designed for writing cross platform games in C.
However it can be difficult to remember where various resources are allocated and deallocated.
Resource Acquisition is Initialization (RAII) is a common pattern in C++ programming that solves this problem.
So I wrote a series of wrappers for SDL 2.0 that use RAII and various other improvements.&lt;/p&gt;</description></item><item><title>Smart Pool</title><link>https://robertu94.github.io/posts/2017-04-29-smart-pool/</link><pubDate>Sun, 30 Apr 2017 09:58:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-04-29-smart-pool/</guid><description>&lt;p&gt;Object Pools are a commonly used pattern used in operating systems, game, and high performance computing development.
However just as it can be easy to forget to return a pointer to memory, it can be easy to forget to return the memory to the pool.
In this article, I layout a class that I recently used to automatically manage memory from a pool.&lt;/p&gt;</description></item><item><title>Surprisingly Functional</title><link>https://robertu94.github.io/posts/2017-02-17-suprisingly-funtional/</link><pubDate>Thu, 23 Feb 2017 08:38:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-02-17-suprisingly-funtional/</guid><description>&lt;p&gt;Functional programming is a surprisingly useful programming paradigm.
The best aspects of functional programming have this odd habit of showing in places you would never expect.&lt;/p&gt;</description></item><item><title>Dockerize All the Things!</title><link>https://robertu94.github.io/presentations/docker/</link><pubDate>Wed, 01 Feb 2017 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/docker/</guid><description>This talk introduces Docker and why you should care about it. It highlights differences between Docker and VMs while clarifying common misconceptions. I talk about how to create docker containers and containerize applications.</description></item><item><title>Faster than light</title><link>https://robertu94.github.io/posts/2017-01-29-faster-than-light/</link><pubDate>Sun, 29 Jan 2017 10:06:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-01-29-faster-than-light/</guid><description>&lt;p&gt;&lt;a href="https://docs.ansible.com" target="_blank" rel="noreferrer"&gt;Ansible&lt;/a&gt; is probably my favorite provisioning and configuration management tool.
Its syntax is concise, expressive, and elegant.
Unlike other tools in its category, it has &lt;a href="https://docs.ansible.com/ansible/playbooks_best_practices.html" target="_blank" rel="noreferrer"&gt;excellent documentation&lt;/a&gt; with working examples and intuitive naming.
Learning it use it effectively can help you be a more productive developer.&lt;/p&gt;</description></item><item><title>LLVM Tooling for C++</title><link>https://robertu94.github.io/posts/2017-01-22-llvm-tooling/</link><pubDate>Sun, 22 Jan 2017 18:58:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-01-22-llvm-tooling/</guid><description>&lt;p&gt;C++ is a both a fantastic language and a mess.
It supports at least 4 programming paradigms (procedural, functional, object-oriented, template meta-programming).
In some senses, many languages give you one great way to do things: C++ gives you every way and trusts you to use them well.
With this flexibility comes problems that C++ seems to have beyond what other languages experience.
Therefore, having effective tooling to develop and use C++ is essential.&lt;/p&gt;</description></item><item><title>Interpreters Made Easy</title><link>https://robertu94.github.io/posts/2017-01-15-interpretors-made-easy/</link><pubDate>Sun, 15 Jan 2017 10:14:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-01-15-interpretors-made-easy/</guid><description>&lt;p&gt;The Interpreter pattern from the &lt;a href="https://en.wikipedia.org/wiki/Design_Patterns" target="_blank" rel="noreferrer"&gt;&amp;ldquo;Design Patterns: Elements of Reusable Object Oriented Software&amp;rdquo;&lt;/a&gt; can potentially be a very powerful pattern.
It allows you to use a domain specific language to represent a complex computational situation.
However, writing interpreters in practice can be tricky and time consuming.
It really helps to know something about some fundamental parsing algorithms and techniques.&lt;/p&gt;</description></item><item><title>Poor Man's Parallelism</title><link>https://robertu94.github.io/posts/2017-01-08-poor-mans-parallelism/</link><pubDate>Sun, 08 Jan 2017 10:58:14 -0500</pubDate><guid>https://robertu94.github.io/posts/2017-01-08-poor-mans-parallelism/</guid><description>&lt;p&gt;I really like orchestration tools such as &lt;a href="https://docs.ansible.com" target="_blank" rel="noreferrer"&gt;Ansible&lt;/a&gt; or &lt;a href="https://docs.saltstack.com" target="_blank" rel="noreferrer"&gt;SaltStack&lt;/a&gt;.
They can make running tasks on a group of machines a breeze.
But sometimes you can&amp;rsquo;t or don&amp;rsquo;t want to install these tools on a machine.
In cases like these, it is helpful to know how to parallelize some tasks in the shell.&lt;/p&gt;</description></item><item><title>Provisioning at the Speed of Thought</title><link>https://robertu94.github.io/presentations/provisioning/</link><pubDate>Sat, 01 Oct 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/provisioning/</guid><description>Ever sit down to setup a set of computers and wonder, “why on earth do I have to do this manually on each and every node?” Writing scripts can solve the problem, but handling error is annoying and time consuming. It does not have to be that way. Configuration management tools such as Ansible, SaltStack, and Puppet take the pain out of managing small to large groups of computers. By the end of the presentation, You’ll learn some of the strengths and weaknesses of each so that you can decide which tool will fit your needs.</description></item><item><title>Exploitable 3: Reverse Engineering</title><link>https://robertu94.github.io/presentations/exploitable_3/</link><pubDate>Thu, 01 Sep 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/exploitable_3/</guid><description>This seminar provides and overview of reverse engineering and how you might use it as a developer. I overview a variety of tools ranging from binary analysis, ptrace, kernel tracing tools, and kernel hacking and when to use each.</description></item><item><title>Writing Semantic Code: Using Refactoring Patterns for Better Code</title><link>https://robertu94.github.io/presentations/semantic/</link><pubDate>Mon, 01 Aug 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/semantic/</guid><description>Spaghetti code is a nightmare. It is hard to read, harder to understand, and harder still to debug and change. In this talk, I introduce the discipline of refactoring which transforms code in a way that maintains its external behavior while improving it&amp;rsquo;s internal structure. I will present several examples of poor design often seen in imperative code, and describe some techniques to refactor this code to easier to understand semantic code from Martin Fowler&amp;rsquo;s book &amp;ldquo;Refactoring: Improving the Design of Existing Software&amp;rdquo;.</description></item><item><title>Automation in the Classroom</title><link>https://robertu94.github.io/presentations/autograding/</link><pubDate>Fri, 01 Apr 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/autograding/</guid><description>The purpose of this talk is to introduce how instructors could approach the topic of using automation in the classroom. We will make a case for automation both from a student&amp;rsquo;s and instructor&amp;rsquo;s perspective by showing that automation can save time, encourage test driven development, and improve testing for knowledge. We will also address concerns regarding grading automation including accuracy, confidentiality, and security. Then we will get into detail about techniques and tools that can be used for classroom automation. Finally we will examine case studies of how automation has and can be implemented. We will examine how this has been done technically as well as part of the classroom environment by faculty members at the School of Computing.</description></item><item><title>Exploitable 2</title><link>https://robertu94.github.io/presentations/exploitable_2/</link><pubDate>Fri, 01 Apr 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/exploitable_2/</guid><description>This talk introduces Docker and why you should care about it. It highlights differences between Docker and VMs while clarifying common misconceptions. I talk about how to create docker containers and containerize applications.</description></item><item><title>Python: A Parser Tongue Primer</title><link>https://robertu94.github.io/presentations/python/</link><pubDate>Fri, 01 Apr 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/python/</guid><description>An introduction to idiomatic python programming for new computer science students.</description></item><item><title>Linux is Scary</title><link>https://robertu94.github.io/presentations/linux/</link><pubDate>Mon, 01 Feb 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/linux/</guid><description>Introduction to Linux for new computer science students. Presented multiples times,</description></item><item><title>Think Different</title><link>https://robertu94.github.io/presentations/projects/</link><pubDate>Mon, 01 Feb 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/projects/</guid><description>A talk that provides an overview of how to approach computer science projects with less stress and effort. This talk was given multiple times at various Clemson ACM venues. Also titled, &amp;ldquo;Perfecting Your Projects&amp;rdquo;.</description></item><item><title>Thou Shall Not Pass! Introduction to Open Source Firewalls</title><link>https://robertu94.github.io/presentations/firewall/</link><pubDate>Mon, 01 Feb 2016 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/firewall/</guid><description>This talks talks about what firewalls are, why you need one, and how to setup a basic firewall using iptables, firewalld, and pf.</description></item><item><title>Exploitable: An Introduction to Ethical Hacking</title><link>https://robertu94.github.io/presentations/exploitable/</link><pubDate>Thu, 01 Oct 2015 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/exploitable/</guid><description>This seminar talks about what is ethical hacking, how to learn how to do it, and how to set up a ethical hacking lab using Docker.</description></item><item><title>NMAP</title><link>https://robertu94.github.io/presentations/nmap/</link><pubDate>Thu, 01 Oct 2015 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/nmap/</guid><description>This talk overviews NMAP a network mapping tool that is useful for understanding and monitoring your network.</description></item><item><title>Git Well Soon</title><link>https://robertu94.github.io/presentations/git/</link><pubDate>Tue, 01 Sep 2015 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/git/</guid><description>This talks overviews the git distributed version control system, what problems it solves, and how to use it. This talk was presented multiple times also under the title &amp;ldquo;Git Thee to a Version Control System&amp;rdquo;</description></item><item><title>N Unix Tools in O(N ) Minutes</title><link>https://robertu94.github.io/presentations/tools/</link><pubDate>Sun, 01 Mar 2015 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/tools/</guid><description>Overview of command line tools for POSIX platforms. This talk covers some of the most useful POSIX scripting tools including awk, sed, gdb, find, and more.</description></item><item><title>Intermediate Vim</title><link>https://robertu94.github.io/presentations/vim/</link><pubDate>Sun, 01 Feb 2015 00:00:00 +0000</pubDate><guid>https://robertu94.github.io/presentations/vim/</guid><description>An intermediate level talk that aims to showcase neat features of vim above and beyond what is covered in vimtutor.</description></item></channel></rss>