This commit is contained in:
Danny Berger
2013-01-06 13:59:25 -07:00
commit 296aa0332e
14 changed files with 600 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
_site

1
CNAME Normal file
View File

@@ -0,0 +1 @@
dpb587.me

4
_config.yml Normal file
View File

@@ -0,0 +1,4 @@
safe: true
auto: true
server: true
pygments: true

8
_includes/footer.html Normal file
View File

@@ -0,0 +1,8 @@
</article>
<footer>
Thanks for visiting! This is a personal blog &ndash; it reflects my own opinions and not those of my employers, past or present.<br />
This site is <a href="https://github.com/dpb587/dpb587.github.com">open-source</a>.
Unless noted, code samples are licensed under <a href="http://opensource.org/licenses/mit-license.php">MIT License</a> and all other content under <a href="http://creativecommons.org/licenses/by/3.0/">CC-BY</a>.
</header>
</body>
</html>

36
_includes/header.html Normal file
View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{% if page.title != "Home" %}{{ page.title }} &ndash; {% endif %}Danny Berger</title>
<link rel="icon" type="image/png" href="http://www.gravatar.com/avatar/5544fe6a05400da5a8957ff29dd6718c.png?s=128" />
<link href="http://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css" />
<link href="/include/site/screen.css" rel="stylesheet" type="text/css" />
<link href="/include/site/pygments.css" rel="stylesheet" type="text/css" />
<link href="/blog/atom.xml" type="application/atom+xml" rel="alternate" title="Danny Berger (blog)">
</head>
<body>
<header>
<div class="timeline">
<a href="/"><img alt="DPB" src="http://www.gravatar.com/avatar/5544fe6a05400da5a8957ff29dd6718c.png?s=128" /></a>
</div>
<ul>
<li><a href="/projects.html">projects</a></li>
<li><a href="/about.html">about</a></li>
</ul>
<h1>
<strong><a href="/">Danny Berger</a></strong>
</h1>
<div class="meta">
<a href="http://dpb587.me/" style="color:inherit;">dpb587</a>
&middot;
<a href="https://github.com/dpb587">github</a>
&middot;
<a href="http://www.linkedin.com/in/dpb587">linkedin</a>
&middot;
<a href="mailto:dpb587@gmail.com">email</a>
</div>
</header>
<article>

3
_layouts/default.html Normal file
View File

@@ -0,0 +1,3 @@
{% include header.html %}
{{ content }}
{% include footer.html %}

19
_layouts/post.html Normal file
View File

@@ -0,0 +1,19 @@
{% include header.html %}
<section>
<header>
<div class="timeline">
<time datetime="{{ page.date|date_to_xmlschema }}"><strong>{{ page.date|date:"%b %d"|upcase }}</strong><br />{{ page.date|date:"%Y" }}</time>
{% if page.location %}
<a href="https://maps.google.com/maps?hl=en&ll={{ page.location.latitude }},{{ page.location.longitude }}&t=w&z=12"><img height="49" src="https://maps.googleapis.com/maps/api/staticmap?center={{ page.location.latitude }},{{ page.location.longitude }}&zoom=9&size=98x98&sensor=false" title="{{ page.location.title }}" width="49" /></a>
{% endif %}
</div>
<h2>{{ page.title }}</h2>
</header>
<section>
{{ content }}
</section>
{% if page.tags|size %}
<div class="meta">{% for tag in page.tags %}{% if forloop.index0 > 0 %} &middot; {% endif %}<a href="/tags/{{ tag|slugize }}">{{ tag }}</a>{% endfor %}</div>
{% endif %}
</section>
{% include footer.html %}

73
about.html Executable file
View File

@@ -0,0 +1,73 @@
---
title: About
layout: default
---
<section>
<h2>About</h2>
<p>
I am a <em>software engineer</em> who enjoys pushing the limits of <em>web technology</em> and applying them to <em>business processes</em>.
Ideally, my job provides me with technical challenges that require <em>practical solutions</em>. I have a
solid understanding about industry best practices, but I am more interested in <em>continuously learning</em> about how and
why those practices can be <em>challenged and improved</em>.
</p>
<h3>Skills</h3>
<p>
I am especially familiar with 'cloud' concepts, e-commerce, server administration, and web applications. When
working on a project, my preferred technologies are Unix, PHP (symfony2 lately) and JavaScript (node.js
especially). I enjoy experimenting, but I have recent production experience with the following:
</p>
<ul>
<li>languages &ndash; applescript, css, html, javascript, less, php5, sql, xml</li>
<li>frameworks &ndash; doctrine2, git, mootools, phpunit, require.js, rpm, svn, symfony2, twig</li>
<li>software &ndash; apache, gearman, jenkins, memcache, mysql, nginx, openvpn, oracle, puppet, solr</li>
<li>systems &ndash; centos, linux, osx</li>
<li>apis &ndash; aws-ec2, aws-r53, aws-s3, facebook, paypal, twilio</li>
</ul>
<h3>Experience</h3>
<p>
<strong>Software Developer</strong> (July '09 &ndash; October '12) &mdash; <a href="http://www.sentryds.com/">Sentry Data Systems</a><br />
Developing internal applications to support business operations including a custom ticket and project management system;
defining development practices and guidelines; and implementing open source libraries for reducing internal code costs.
</p>
<p>
<strong>Software Systems Engineer</strong> (June '06 &ndash; present) &mdash; <a href="https://theloopyewe.com/">The Loopy Ewe</a><br />
Developing and maintaining in-house e-commerce frontend and backoffice tools; management of systems, servers, and
service providers. Primarily using PHP, MySQL, CentOS, and third-party APIs for secure payment processing with PayPal
and shipment processing with USPS and Endicia.
</p>
<p>
<strong>Student System Administrator</strong> (Spring '06 &ndash; Fall '08) &mdash; <a href="http://www.taylor.edu/">Taylor University</a><br />
Maintaining and providing support for the Computer Science department's lab computers and servers, both Linux and
Windows. Created web-based applications to aid in department processes for faculty and students. Contributing editor for
the department's public website.
</p>
<p>
<strong>Student Advanced Sound Technician</strong> (Fall '05 &mdash; Spring '08) &mdash; <a href="http://www.taylor.edu/">Taylor University</a><br />
In charge of event sound and lights, setup/teardown, and other group coordination activities. Events ranged from 10 to
1600 attendees, lectures to full bands, indoor to outdoor.
</p>
<p>
<strong>Network Administrator</strong> (Spring '03 &ndash; Summer '07) &mdash; <a href="http://www.cpcstl.org/">The Covenant Presbyterian Church</a><br />
Managed the Microsoft Windows and Exchange servers, internal ministry application, and other productivity software.
Responsible for technical support (onsite, phone, and email). Created, maintained, and hosted their website CMS during
and several years after employment.
</p>
<h3>Education</h3>
<ul>
<li><a href="http://www.taylor.edu/">Taylor University</a> &ndash; Bachelor of Science (2005 - 2009) &ndash; Computer Science, Systems (Business Information Systems)</li>
<li><a href="http://www.wcastl.org/">Westminster Christian Academy</a> &ndash; high school (2001 - 2005)</li>
</ul>
</section>

View File

@@ -0,0 +1,85 @@
---
title: Secure Git Repositories
layout: post
tags: git security
---
I use private repositories on [GitHub][1], but I still don't feel quite comfortable pushing sensitive data like
passwords, keys, and account information. Typically that information ends up just sitting on my local machine or in my
head ready for me to pull up as needed. It would be much better if that information was a bit more fault tolerant and,
even better, if I could follow similar workflows as the rest of my application code.
After some research I discovered [gist 873637][2] which discusses using `git`'s clean and smudge [filters][4] to pass
files through `openssl` for decryption and encryption. Soon I found the much more useful [`shadowhand/git-encrypt`][3]
tool.
### Initial Setup
First, I installed `gitcrypt` on my machine:
{% highlight console %}
$ git clone git://github.com/shadowhand/git-encrypt.git /usr/local/git-encrypt
$ chmod +x /usr/local/git-encrypt/gitcrypt
$ ln -s /usr/local/git-encrypt/gitcrypt /usr/local/bin/gitcrypt
{% endhighlight %}
Next, I created a new repo and used `gitcrypt init` with the auto-generated defaults:
{% highlight console %}
$ mkdir fort-knox ; cd !$
$ git init
$ gitcrypt init
Generate a random salt? [Y/n] Y
Generate a random password? [Y/n]Y
What encryption cipher do you want to use? [aes-256-ecb]
This configuration will be stored:
salt: 7d9f6cc1512aa2b5
pass: EAC8405A-DD64-43A3-A17F-EB28195B4B1E
cipher: aes-256-ecb
Does this look right? [Y/n]
Do you want to use .git/info/attributes? [Y/n]
What files do you want encrypted? [*]
{% endhighlight %}
Now I just have to be sure to securely keep the salt and pass elsewhere for the next time I setup this repo. Other than
that, it's ready for me to use like any other `git` repository.
### A Practical Bit
Since I won't frequently be setting up this repository, it'd probably be best if I could keep a reminder about what I'll
need to do. So I add a `.gitattributes` file which excludes itself and README from encryption:
{% highlight vim %}
* filter=encrypt diff=encrypt
README -filter -diff
.gitattributes -filter -diff
[merge]
renormalize=true
{% endhighlight %}
And include the necessary commands and reference in the README:
{% highlight console %}
$ git clone git@github.com:dpb587/fort-knox.git fort-knox ; cd !$
$ gitcrypt init # https://github.com/shadowhand/git-encrypt
$ git reset --hard HEAD
{% endhighlight %}
### Summary
With `gitcrypt` I can work with my repository and enjoy extra security on top of the redundancy and version control that
`git` provides. The only difference from my regular repos is I can't really view my files from [github.com][1] (with the
convenient exception of the README).
[1]: https://github.com/
[2]: https://gist.github.com/873637
[3]: https://github.com/shadowhand/git-encrypt
[4]: http://git-scm.com/book/ch7-2.html#Keyword-Expansion

24
blog/atom.xml Normal file
View File

@@ -0,0 +1,24 @@
---
layout: nil
---
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>http://dpb587.me/</id>
<title>Danny Berger</title>
<link href="http://dpb587.me/atom.xml" rel="self"/>
<link href="http://dpb587.me/"/>
<updated>{{ site.time | date_to_xmlschema }}</updated>
<author>
<name>Danny Berger</name>
<email>dpb587@gmail.com</email>
</author>
{% for post in site.posts %}
<entry>
<id>http://dpb587.me{{ post.id }}</id>
<title>{{ post.title }}</title>
<link href="http://dpb587.me{{ post.url }}"/>
<updated>{{ post.date | date_to_xmlschema }}</updated>
<content type="html">{{ post.content | xml_escape }}</content>
</entry>
{% endfor %}
</feed>

60
include/site/pygments.css Normal file
View File

@@ -0,0 +1,60 @@
/* https://github.com/mojombo/mojombo.github.com/blob/master/css/syntax.css */
.highlight .c { color: #999988; font-style: italic } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { font-weight: bold } /* Keyword */
.highlight .o { font-weight: bold } /* Operator */
.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #999999 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #aaaaaa } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { font-weight: bold } /* Keyword.Constant */
.highlight .kd { font-weight: bold } /* Keyword.Declaration */
.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #009999 } /* Literal.Number */
.highlight .s { color: #d14 } /* Literal.String */
.highlight .na { color: #008080 } /* Name.Attribute */
.highlight .nb { color: #0086B3 } /* Name.Builtin */
.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
.highlight .no { color: #008080 } /* Name.Constant */
.highlight .ni { color: #800080 } /* Name.Entity */
.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
.highlight .nn { color: #555555 } /* Name.Namespace */
.highlight .nt { color: #000080 } /* Name.Tag */
.highlight .nv { color: #008080 } /* Name.Variable */
.highlight .ow { font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #009999 } /* Literal.Number.Float */
.highlight .mh { color: #009999 } /* Literal.Number.Hex */
.highlight .mi { color: #009999 } /* Literal.Number.Integer */
.highlight .mo { color: #009999 } /* Literal.Number.Oct */
.highlight .sb { color: #d14 } /* Literal.String.Backtick */
.highlight .sc { color: #d14 } /* Literal.String.Char */
.highlight .sd { color: #d14 } /* Literal.String.Doc */
.highlight .s2 { color: #d14 } /* Literal.String.Double */
.highlight .se { color: #d14 } /* Literal.String.Escape */
.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
.highlight .si { color: #d14 } /* Literal.String.Interpol */
.highlight .sx { color: #d14 } /* Literal.String.Other */
.highlight .sr { color: #009926 } /* Literal.String.Regex */
.highlight .s1 { color: #d14 } /* Literal.String.Single */
.highlight .ss { color: #990073 } /* Literal.String.Symbol */
.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #008080 } /* Name.Variable.Class */
.highlight .vg { color: #008080 } /* Name.Variable.Global */
.highlight .vi { color: #008080 } /* Name.Variable.Instance */
.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */

216
include/site/screen.css Normal file
View File

@@ -0,0 +1,216 @@
body {
color: #333333;
font-family: Lato, sans-serif;
font-size: 16px;
margin: 2px 10px 10px 44px;
}
body > header, article > section {
border-bottom: #F0F0F0 solid 1px;
border-left: #E9E9E9 solid 1px;
margin-bottom: 2px;
padding: 24px 34px 18px 34px;
position: relative;
width: 640px;
}
body > footer {
color: #999999;
font-size: 11px;
font-weight: 400;
padding: 36px 6px 28px 36px;
position: relative;
width: 668px;
}
body > footer a {
color: #999999;
}
body > footer:hover {
color: #666666;
}
body > footer:hover a {
color: #666666;
}
body > header {
padding-right: 20px;
width: 654px;
}
body > header .meta {
margin-bottom: 0;
margin-top: 0;
}
header ul {
float: right;
list-style: none;
margin: 7px 0 0;
}
header ul li {
display: inline-block;
}
header ul li a {
border-radius: 2px;
color: #CF5406;
display: block;
margin-left: 6px;
padding: 1px 5px 2px 5px;
text-decoration: none;
}
header ul li a:hover {
background-color: #CF5406;
color: #FFFFFF;
}
.meta {
color: #333333;
font-size: 12px;
font-weight: 300;
padding-left: 1px;
margin-bottom: 12px;
margin-top: 24px;
}
.meta a {
text-decoration: none;
}
.meta a:hover {
text-decoration: underline;
}
a {
color: #CF5406;
}
small {
color: #666666;
}
h1 {
font-size: 20px;
font-weight: 400;
margin: 4px 0 0;
}
h1 strong {
font-weight: 700;
}
h1 strong a {
color: inherit;
text-decoration: none;
}
h1 small {
color: #999999;
}
h2 {
color: #333333;
font-size: 18px;
font-weight: 700;
margin: 0;
padding: 1px 0;
}
h3 {
border-bottom: #DEDEDE solid 1px;
color: #393939;
font-size: 17px;
margin: 28px -4px 10px;
padding: 0 4px 2px;
}
h4 {
border-bottom: #DEDEDE dotted 1px;
font-size: 14px;
margin: 22px -4px 10px;
padding: 0 4px;
}
hr {
margin: 0 -2px;
}
article > section .timeline {
margin-top: 4px;
}
section .timeline > * {
opacity: 0.6;
}
section:hover .timeline > * {
opacity: 1;
}
.timeline {
background-color: #FFFFFF;
font-size: 11px;
line-height: 0;
padding: 2px 0;
position: absolute;
text-align: center;
left: -24px;
width: 49px;
}
.timeline img {
border-radius: 4px;
width: 49px;
}
.timeline time {
display: block;
line-height: 11px;
margin-bottom: 2px;
}
pre {
background-color: #F9F9F9;
border: #D8D8D8 solid 1px;
font-family: monaco;
font-size: 12px;
line-height: 17px;
margin: 14px -2px;
overflow: auto;
padding: 2px 4px;
}
pre > code {
font-size: inherit;
line-height: inherit;
}
code {
font-family: monaco;
font-size: 13px;
line-height: 0;
}
p, ul, ol, dl {
line-height: 24px;
margin: 12px 0;
}
dl dt {
clear: left;
color: #666666;
float: left;
padding-top: 2px;
text-align: right;
width: 140px;
}
dl dd {
margin-left: 0;
padding: 2px 0 0 146px;
}

26
index.html Normal file
View File

@@ -0,0 +1,26 @@
---
title: Home
layout: default
---
<section>
<p>
Technology intrigues me. Pretty much any sort, but I enjoy web-oriented tech the most. I like innovating, technical
challenges, and learning new concepts. This is a place to remember some of those experiences. Maybe you'll find
something interesting.
</p>
</section>
{% for post in site.posts %}
<section>
<header>
<div class="timeline">
<time datetime="{{ post.date|date_to_xmlschema }}"><strong>{{ post.date|date:"%b %d"|upcase }}</strong><br />{{ post.date|date:"%Y" }}</time>
</div>
<h2><a href="{{ post.url }}">{{ post.title }}</a></h2>
{% if post.tags|size %}
<div class="meta" style="margin-bottom:0;margin-top:0;">{% for tag in post.tags %}{% if forloop.index0 > 0 %} &middot; {% endif %}<a href="/tags/{{ tag|slugize }}">{{ tag }}</a>{% endfor %}</div>
{% endif %}
</header>
</section>
{% endfor %}

44
projects.html Executable file
View File

@@ -0,0 +1,44 @@
---
title: Projects
layout: default
---
<section>
<h2>Projects</h2>
<p>
I like tinkering with ideas and seeing where they end up. Some of my work ends up on
<a href="https://github.com/">GitHub</a>, but here are some of my noteworthy projects&hellip;
</p>
<h3>Personal</h3>
<p>
A few personal projects I've invested in&hellip;
</p>
<h4>CLI for OpenGrok</h4>
<p>
Command line interface for getting results from an OpenGrok server.
</p>
<dl>
<dt>github</dt>
<dd><a href="https://github.com/dpb587/opengrok-cli">dpb587/opengrok-cli</a></dd>
</dl>
<h3>Contributions</h3>
<p>
I would not and could not be the developer I am today without the time others have invested in producing
quality, open source software. For my modest part, I've been able to contribute to the following:
</p>
<ul>
<li><a href="https://github.com/composer/composer/commits?author=dpb587">composer/composer</a> &ndash; small enhancements and bug fixes</li>
<li><a href="https://github.com/symfony/symfony/commits?author=dpb587">symfony/symfony</a> &ndash; small enhancements and bug fixes</li>
<li><a href="https://github.com/doctrine/dbal/commits?author=dpb587">doctrine/dbal</a> &ndash; oracle bug fixes</li>
</ul>
</section>