switch around header levels

This commit is contained in:
Danny Berger
2014-03-15 14:58:16 +00:00
parent 7fbb9535ed
commit 8c2cd52002
24 changed files with 95 additions and 95 deletions

View File

@@ -56,9 +56,9 @@
<li>{{ page.print_blurb }}</li>
</ul>
{% endif %}
<h1>
<div class="site-title">
<strong><a href="/">Danny Berger</a></strong>
</h1>
</div>
<div class="meta screen-only">
<a class="subtle" href="http://dpb587.me/">dpb587</a>
&middot;

View File

@@ -13,10 +13,10 @@
<div class="social screen-only">
</div>
<h2>
<h1>
{{ page.title }}
<small class="print-only">{{ page.date|date:'%A, %B %d, %Y' }}</small>
</h2>
</h1>
</header>
<section class="post-content">
{{ content }}

View File

@@ -6,7 +6,7 @@ print_blurb: "r&#233;sum&#233;"
---
<section>
<h2 class="screen-only">About</h2>
<h1 class="screen-only">About</h1>
<p>
I am a <em>software engineer</em> who enjoys pushing the limits of <em>web technology</em> and applying them to
@@ -16,7 +16,7 @@ print_blurb: "r&#233;sum&#233;"
improved</em>.
</p>
<h3>Skill Set</h3>
<h2>Skill Set</h2>
<p>
I am especially familiar with 'cloud' concepts, e-commerce, server administration, and web applications. When
@@ -89,7 +89,7 @@ print_blurb: "r&#233;sum&#233;"
</dd>
</dl>
<h3>Experience</h3>
<h2>Experience</h2>
<p style="page-break-inside:avoid;">
<strong>Software Developer</strong> &nbsp;&middot;&nbsp; August '13 &ndash; present, contractor<br />
@@ -251,7 +251,7 @@ print_blurb: "r&#233;sum&#233;"
</p>
<h3>Open-Source Contributions</h3>
<h2>Open-Source Contributions</h2>
<ul>
<li><a href="https://github.com/logstash/logstash/commits?author=dpb587">logstash/logstash</a> &ndash; small enhancements</li>
@@ -262,7 +262,7 @@ print_blurb: "r&#233;sum&#233;"
</ul>
<h3>Education</h3>
<h2>Education</h2>
<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>

View File

@@ -15,7 +15,7 @@ files through `openssl` for decryption and encryption. The result is `git`'s ind
contents in base64. Soon I found [`shadowhand/git-encrypt`][3].
### Initial Setup
## Initial Setup
First, I did a one-time install of `shadowhand/git-encrypt` on my machine:
@@ -51,7 +51,7 @@ Now I just have to be sure to securely keep the salt and pass elsewhere for the
that, it's ready for me to use like any other `git` repository.
### A Practical Bit
## 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 update `.gitattributes` to exclude itself and `README` from encryption:
@@ -87,7 +87,7 @@ $ git commit -m 'initial commit'
{% endhighlight %}
### Under the Hood
## Under the Hood
Originally I was a bit curious and wanted to verify that it's doing what I thought. So I created a simple test file:
@@ -128,7 +128,7 @@ Mon Jan 7 15:11:22 MST 2013
{% endhighlight %}
### Summary
## Summary
With `gitcrypt` I can work with a 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

View File

@@ -25,7 +25,7 @@ developed solution. So, I took an afternoon to figure things out, with the worki
and some of the background below.
### Graceful Termination
## Graceful Termination
For the first part, it was simply a matter of handling a `SIGTERM` signal with PHP's [pcntl module][3] and setting a
termination flag. The main worker loop could then check the flag every time it finished a job and cleanly exit. The
@@ -65,7 +65,7 @@ $ kill -s TERM 25244
{% endraw %}{% endhighlight %}
### Remote Termination
## Remote Termination
Sometimes it's easier to remotely terminate workers when they need new code or configuration (and allowing a process
manager to restart them). Since Gearman doesn't support sending a job to every single worker, an alternative is to have
@@ -94,7 +94,7 @@ $ php queue.php _worker_test1 terminate
{% endraw %}{% endhighlight %}
### Batch Remote Termination
## Batch Remote Termination
So now I can remotely terminate workers as needed. However, during deploys it's much more common to ask all the workers
to restart. Using Gearman's [protocol][4] to find running workers I can distribute the termination job and then wait
@@ -134,7 +134,7 @@ $ php terminate.php
{% endraw %}{% endhighlight %}
### Summary
## Summary
The result is an extra bit of code, but it makes automating tasks, especially around deploys, much easier. This really
just demonstrates one method of creating an internal workers API - termination is just one possibility. Other more

View File

@@ -12,7 +12,7 @@ search results from the command line (particularly for automated tasks). Since I
command to load and parse results using [symfony/console][3] and [xpath][4].
### Usage
## Usage
It's straightforward to use, just provide the OpenGrok server, project to search, and the query. Mimicking grep, the
output format should look familiar:
@@ -39,7 +39,7 @@ $ vim $(opengrok-cli --list refs:PHP_MODE_PROCESS_STDIN)
{% endhighlight %}
### Open Source
## Open Source
I published the code to [dpb587/opengrok-cli][5]. Check the `README`, but it's easy to get started:

View File

@@ -11,7 +11,7 @@ it, but one annoyance had been to regularly open it up and add postage since it
happen to forget, it ends up blocking things until we notice. I finally got around to scripting that, too.
### Scripted
## Scripted
In real life, whenever the balance gets too low it throws up an alert and you need to click through a few menus, select
a purchase amount, and confirm the selection before the application will continue. Using [System Events][2], it can all
@@ -26,7 +26,7 @@ With that step automated, it can be tied in with the `endiciatool` output -- whe
automatically kick off the script to buy more postage.
### Summary
## Summary
So now that's one less manual step everybody has to worry about, saving some time and hassle. If you happen to be new to
[Endicia][3], you should check them out (and use the promotional code <code>599888</code>). Their software has been a

View File

@@ -10,7 +10,7 @@ on maintaining data integrity, security, and availability. One of my current met
secure storage and object versioning to ensure backup data can't undesirably be overwritten.
### Encryption Keys
## Encryption Keys
For encryption and decryption I'm using asymmetric keys via [`gpg`][1]. This way, any server can generate and encrypt
the data, but only administrators who have the private key could actually decrypt the data. Generating the
@@ -80,7 +80,7 @@ Command> quit
{% endraw %}{% endhighlight %}
### Amazon S3
## Amazon S3
In my case, I wanted to regularly send the encrypted backups offsite and [S3][2] seemed like a flexible, effective
storage place. This involved a couple steps:
@@ -131,7 +131,7 @@ policy via the [sample][3] policy builder for a particular backup type. My simpl
{% endhighlight %}
### All Together
## All Together
Putting everything together, a single command could be used to backup the database, compress, encrypt, and upload:
@@ -162,7 +162,7 @@ The only task remaining is creating a cleanup script using the S3 API to monitor
delete them as they expire.
### Summary
## Summary
While it has a bit of overhead to get things set up properly, using `gpg` makes secure backups trivial and S3 provides
the flexible storage strategy to ensure data is safe.

View File

@@ -9,7 +9,7 @@ After using [puppet][1] for a while I have become use to some of the facts that
working with [ant][3] build scripts, I started wishing I didn't have to generate similar facts myself through various
`exec` calls.
### One Fact
## One Fact
Instead of fragile lookups like...
@@ -29,7 +29,7 @@ I can simplify it with...
{% endhighlight %}
### In Bulk
## In Bulk
Or I can load all facts with...
@@ -51,7 +51,7 @@ And reference a fact in my task...
</exec>
{% endhighlight %}
### Summary
## Summary
So now it's much easier to reference environment information from property files (via interpolation), make targets more
conditional, and, of course, within actual tasks.

View File

@@ -14,7 +14,7 @@ some extensions don't yet support custom wrappers for file access. An alternativ
service-oriented approach to keep my application code independent from the storage configuration.
### Interface
## Interface
At the core of my design, is the asset storage interface which looks something like:
@@ -37,7 +37,7 @@ The storage engine is responsible for generating a reusable token that can be us
simply have it generate a UUID as the token, however tokens could have storage-specific meaning.
### Sample Storage Engines
## Sample Storage Engines
I've used several base implementations:
@@ -63,7 +63,7 @@ And since `CachedStorageEngine` is just another implementation of `StorageEngine
interchangeably within the application with performance being the only difference.
### Application Usage
## Application Usage
Using dependency injection, each of the storage backends becomes an independent service, configured depending on the
application requirements. The application then has no storage-specific calls like `copy`, `file_get_contents`, `fopen`,
@@ -95,7 +95,7 @@ Since `retrieve` will always return a [`SplFileInfo`][5] instance, it can be ref
(as demonstrated by the `open` call in the example.
### Complicating Things
## Complicating Things
The asset storage interface itself is fairly primitive, but it allows for some more complex configurations:
@@ -109,7 +109,7 @@ The asset storage interface itself is fairly primitive, but it allows for some m
upload time, write it locally and create a job to upload it in the background)
### Summary
## Summary
By abstracting storage logic outside of my application code, it makes my life much more easier as a developer and as a
systems administrator when trying to manage where files are located and any relocations, as necessary.

View File

@@ -22,7 +22,7 @@ more detailed review...
<img alt="symfony/console example" height="343" src="/blog-data/2013-03-07-comparing-php-application-definitions/console-diff.png" width="536" />
### Usage
## Usage
If I were upgrading my application with a [`symfony/Console`][1] dependency from `v2.0.22` to `v2.2.0`, I could generate
the diff of definitions with:
@@ -42,7 +42,7 @@ Take a look at several other reports using the default stylesheet:
* [`zendframework/zf2`][5] (`release-2.0.0` &rarr; `release-2.1.3`)
### Behind the Scenes
## Behind the Scenes
The logic behind the command looks like:
@@ -134,7 +134,7 @@ And after the initial and final commit are compared, the resulting structured di
{% endhighlight %}
### Going Further
## Going Further
Being able to parse files and have their differences stored in static, semi-agnostic format allows for some interesting
usages:
@@ -159,7 +159,7 @@ And unlike some of the other tools I ran into, the static representation is not
stylesheet to make it human-friendly. This makes the results potentially reusable for multiple different reports.
### Summary
## Summary
I've published this work-in-progress code to [dpb587/diff-defn.php][13] in case you want to try it out with your own PHP
repositories. It's certainly not a replacement of reading changelogs and understanding what upstream changes are being

View File

@@ -9,12 +9,12 @@ I've spent the past several months working on some website changes for [The Loop
push many of those frontend changes out. I thought I'd briefly discuss some of those changes here.
### Before and After
## Before and After
First off, it's fun to show before and after screenshots of many key areas...
#### Home Page
### Home Page
<img alt="Screenshot: before" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/old-homepage.jpg" width="308" />
<a href="http://theloopyewe.com/"><img alt="Screenshot: after" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-homepage.jpg" width="308" /></a>
@@ -35,7 +35,7 @@ Instead of a simple, almost-non-existant footer on the old site, I took advantag
information, social links, payment options, and numerous other credentials that customers can appreciate.
#### Contact Us
### Contact Us
<img alt="Screenshot: before" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/old-contactus.jpg" width="308" />
<a href="http://www.theloopyewe.com/contact/"><img alt="Screenshot: after" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-contactus.jpg" width="308" /></a>
@@ -44,7 +44,7 @@ Contact information is important for customers. In addition to the information n
cleaner page with a new interactive map to help people visually realize where exactly the shop is located.
#### Wonderful Customers
### Wonderful Customers
<img alt="Screenshot: before" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/old-testimonials.jpg" width="308" />
<a href="http://www.theloopyewe.com/about/wonderful-customers/"><img alt="Screenshot: after" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-testimonials.jpg" width="308" /></a>
@@ -53,7 +53,7 @@ It's always nice to be able to show feedback customers send in. The new site reo
readable way, and on separate pages. It's also much simpler to submit a testimonial through the on-screen form.
#### Shop
### Shop
<img alt="Screenshot: before" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/old-shop.jpg" width="308" />
<a href="http://www.theloopyewe.com/shop/"><img alt="Screenshot: after" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-shop.jpg" width="308" /></a>
@@ -99,7 +99,7 @@ properly indexed and searched via [elasticsearch][2]. I'm looking forward to add
the site in the future.
#### Help
### Help
<img alt="Screenshot: before" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/old-help.jpg" width="308" />
<a href="http://www.theloopyewe.com/help/"><img alt="Screenshot: after" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-help.jpg" width="308" /></a>
@@ -109,13 +109,13 @@ new site breaks things down into different topics and adds creative pictures to
a new inline form where customers can ask for help instead of bothering to open an email client and compose an email.
### New Stuff
## New Stuff
Although I disabled a number of things for later release and chatter, it's always fun to include some completely new
functionality...
#### Local
### Local
<a href="http://www.theloopyewe.com/local/classes.html"><img alt="Screenshot: web page" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-local.jpg" width="628" /></a>
@@ -124,7 +124,7 @@ publicize some of the local activities that Fort Collins people would be interes
customers see how we exist and work in real life to create more of a connection.
#### About
### About
<a href="http://www.theloopyewe.com/about/loopy-central/fort-collins.html"><img alt="Screenshot: web page" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-about.jpg" width="628" /></a>
@@ -132,7 +132,7 @@ Along with a local page, I also wanted a better page for showing our real world
connected and understand both who and where they're purchasing from.
#### Shop Attributes
### Shop Attributes
<a href="http://www.theloopyewe.com/shop/a/fiber-material/merino-wool/"><img alt="Screenshot: web page" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-shop-attribute.jpg" width="628" /></a>
@@ -141,7 +141,7 @@ way. If somebody is interested in "Fingering Weight" they can easily see all the
they need more complicated searches, there's an Advanced Search link at the bottom of each page.
#### Site Feedback
### Site Feedback
<a href="http://www.theloopyewe.com/contact/site-feedback.html?uri=%2Fshop%2Fg%2Fyarn%2Fthe-loopy-ewe%2Floopy-cakes%2F"><img alt="Screenshot: web page" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-sitefeedback.jpg" width="628" /></a>
@@ -150,7 +150,7 @@ feedback. Links at the footer of every page include information like what page t
authenticated username information, and whatever notes they want to add.
#### humans.txt
### humans.txt
<a href="http://www.theloopyewe.com/humans.txt"><img alt="Screenshot: web page" src="/blog-data/2013-04-27-new-website-for-the-loopy-ewe/new-humans.jpg" width="628" /></a>
@@ -158,7 +158,7 @@ Whenever possible, I like discussing and linking to technical resources that I h
created the `humans.txt` file to document many of the resources that have helped make the website possible.
### Conclusion
## Conclusion
So there's the basic overview about some of the less-technical changes. I'm looking forward to several additional
features to rollout over time and help keep things fresh over the next few months. Later blog posts can discuss some of

View File

@@ -21,7 +21,7 @@ the main results content is taking advantage of the request design I implemented
* any page should be capable of being a self-contained subrequest.
### Steps
## Steps
When a subrequest is self-contained, I call it a *subcontext*. These subcontext requests have an additional requirement
of being publicly accessible. In the product search, the [results][3] page is publicly routed and all the pagination and
@@ -102,7 +102,7 @@ With those simple customizations I no longer have to worry about knowing what pa
template subrequests. It also paves the way for some more fancy behavior...
### Adding Some Magic
## Adding Some Magic
Since the subcontext pages are publicly accessible, it should be easy to let Ajax reload individual subcontexts without
having to reload the whole page. To enable that, I went ahead and configured subcontext requests to always end up in a
@@ -139,7 +139,7 @@ Something easily processable with an Ajax request. And since the clicked anchor
the new window URL location by using the [HTML5 History API][6].
### Conclusion
## Conclusion
Once I implemented the code snippets for tying all the ideas together, it became much quicker and simpler for me to
embed other dynamic controllers within my requests. So far it has been working out quite well and I no longer have to

View File

@@ -11,7 +11,7 @@ standards and metadata so the content could be programmatically useful. I chose
due to its fairly comprehensive data types and broad adoption by search engines.
### Introduction
## Introduction
I think the importance of structured data is growing. Not only does it make things easier for search engines to
consistently interpret content, it can also help encourage properly designed website architecture. For example, if I
@@ -29,7 +29,7 @@ of how robots would interpret data. For example, I could view the [home page][1]
was a robot and browse it in a [formatted HTML][11] page where links are rewritten for followup.
### Basic Pages
## Basic Pages
Even basic pages can provide some useful structured data. For example, the page describing the [Loopy Groupies][12]
doesn't have complicated content, but it still uses the basic [`WebPage`][14] type to identify breadcrumbs, titles, main
@@ -57,7 +57,7 @@ Of course it's not limited to [`schema.org`][2] data types. The robot data also
[raw JSON][13] structure.
### Products
## Products
One of the most useful types in an e-commerce environment is [`SomeProducts`][3]. It lets robots see things like
pricing, inventory, availability, company, model, and various product attributes. For example, here's what our
@@ -139,7 +139,7 @@ relationships that specific page (marked as a product) has with other product co
graph.
### Product Listings
## Product Listings
For the main product types, pages also support listings that reference the individual products. The main
[Solid Series][17] listing has the following data:
@@ -197,7 +197,7 @@ For the main product types, pages also support listings that reference the indiv
{% endhighlight %}
### Rationale
## Rationale
Nearly all pages on the new [website][1] have at least some structured data present, if only the breadcrumb data. All
this markup isn't simply an academic exercise though. For example, [Ravelry][18] supports checking the pricing and

View File

@@ -17,7 +17,7 @@ ago when [David][9] from [CityIndex][10] expressed interest in the project. I've
in order to finish some of the features, update dependencies, and create a more stable project.
### Functionality
## Functionality
If you're familiar with the WebKit developer tools (also found in [Google Chrome][11]), the interface should look
extremely familiar. The core of `ti-debug` is written in [node.js][12] and when started up, it creates a simple web
@@ -54,7 +54,7 @@ communication can also use `ti-debug`. For example, Python scripts can currently
<a href="/blog-data/2013-05-16-ti-debug-for-debugging-server-code-in-the-browser/python.jpg"><img alt="Screenshot: breakpoint exploration" src="/blog-data/2013-05-16-ti-debug-for-debugging-server-code-in-the-browser/python.jpg" width="628" /></a>
### Workflow
## Workflow
One of the ways that `ti-debug` can be run is locally for a single developer, but in the case of DBGp, `ti-debug` can
also act as a proxy to support multiple developers, or a combination of developers wanting to use both the browser-based

View File

@@ -13,7 +13,7 @@ I wanted to try to create a simple search engine for our needs which took advant
existing open standards.
### Introduction
## Introduction
In my mind, there are four basic processes when creating a search engine:
@@ -32,13 +32,13 @@ The next two processes are more what I want to focus on here:
* **Maintenance** - keeping the documents updated when they are updated or removed.
### Indexing
## Indexing
We were already using [elasticsearch][8], so I was hoping to use it for full-text searching as well. I decided to
maintain two types in the search index.
#### Discovered Documents (`resource`)
### Discovered Documents (`resource`)
The `resource` type has all our indexed URLs and a cache of their contents. Since we're not going to be searching it
directly, it's more of a basic key-based storage based on the URL. The mapping looks something like:
@@ -95,7 +95,7 @@ By default, if an `Expires` response header isn't provided, I set the `date_expi
future. The field is used to find stale documents later on.
#### Parsed Documents (`result`)
### Parsed Documents (`result`)
The `result` type has all our indexed URLs which were parsed and found to be useful. The documents contain some
structured fields which are generated by the parsing step. The mapping looks like:
@@ -212,7 +212,7 @@ For example, this parsed [product model][17] looks like:
{% endhighlight %}
#### Searching
### Searching
Once some documents are indexed, I can create simple searches with the [`ruflin/Elastica`][11] library:
@@ -258,7 +258,7 @@ $query->setHighlight(
{% endhighlight %}
### Maintenance
## Maintenance
A search engine is no good if it's using outdated or no-longer-existant information. To help keep content up to date, I
take two approaches:
@@ -275,7 +275,7 @@ In either case, when a URL is discovered to be gone, the records from both `reso
URL.
#### Utilities
### Utilities
Sometimes there are deploys where specific pages are definitely changing, or when a whole new sitemap is getting
registered with new URLs. Instead of waiting for the time-based updates or cron jobs to run, I have these commands
@@ -287,7 +287,7 @@ available for scripting:
* `search:sitemap-generate` - regenerate all registered sitemaps
### Conclusion
## Conclusion
Starting with structured data and elasticsearch makes building a search engine significantly easier. Data and indexing
makes it faster to show smarter [search results][16]. Existing standards like [OpenSearch][12] make it easy to extend

View File

@@ -11,7 +11,7 @@ inventory scannable at the [shop][1], and I really wanted to do it in a more mea
support.
### Barcodes: 1D vs 2D
## Barcodes: 1D vs 2D
There are two different kinds of barcodes: 1 dimensional and 2 dimensional. The 1D allows for a purely linear scan of
simple, [UPC][2]-like barcodes. While 1D barcodes are extremely commonplace on many products, I dislike them because
@@ -37,7 +37,7 @@ many previously-used 2D scanners can be found on [eBay][6] for very reasonable p
some of the used ones would quickly turn unreliable after a period of time.
### Mapping URLs to retail "things"
## Mapping URLs to retail "things"
While inventory was the primary target of barcoding, I really wanted to barcode most things involved with retail
workflows (like order receipts). With that in mind I figured I needed to store three properties:
@@ -69,7 +69,7 @@ Further, the QR code can be used with a redirecting short domain for even simple
> [`http://tle.io/EyV3chYax`](http://www.theloopyewe.com/io/EyV3chYax)
### Adding More Context
## Adding More Context
One of the reasons I wanted to use QR codes was context. Aside from scans now landing on the shop's website, they can
be even more context-aware through security roles. For example, if a customer scans the QR code above, they'll end up
@@ -88,7 +88,7 @@ view showing which orders were cut on that specific bolt and how much yardage th
### Integrated Context
## Integrated Context
At this point, the barcodes were extremely accessible for one-off scans, but I also wanted to integrate the barcodes
into specific points of the system. For the computers we're using USB 2D barcode scanners which are capable of acting
@@ -162,7 +162,7 @@ following in a browser...
</blockquote>
### Conclusion
## Conclusion
I feel like the shop is able to better grow both technically and logistically by having used QR codes as opposed to a
classic barcode system. A few techy customers have tried the QR codes, but it's not really something we've been

View File

@@ -123,7 +123,7 @@ The next step of an idea is to prototype it, and that's where I am today. There
working on, but three general topics...
### Service Discovery
## Service Discovery
One of the most interesting concepts is service discovery. I wanted containers to be able to connect with each other
across multiple hosts and data centers. I've been using DNS for host discovery and, while it works great it doesn't seem
@@ -170,7 +170,7 @@ The disco protocol has a few more features (like using a single server for more
filtering services by arbitrary tags like availability zones to improve load balancing), but that's the general idea.
### Configuration Files
## Configuration Files
I'm using YAML files to describe images and containers. They get compiled to a static version, and then cached based on
the image configuration. For example, take a look at this example [scs-wordpress][16] image manifest. It describes the
@@ -180,7 +180,7 @@ enumerates all the configuration options which affect how the service will run.
will be connected to the world.
### Self-Provisioning
## Self-Provisioning
For each of the four dependency/connection types (volumes, service provider, service dependent, network), I'm trying to
make them suitable for local development and AWS EC2 deployment. For example:

View File

@@ -9,7 +9,7 @@ layout: default
<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>
<h1><a href="{{ post.url }}">{{ post.title }}</a></h1>
{% if post.description %}
<div class="meta" style="margin-bottom:0;margin-top:0;">{{ post.description }}</div>
{% endif %}

View File

@@ -23,7 +23,7 @@
<div style="border-bottom:#CCCCCC solid 1px;color:#333;font-family:Lato,sans-serif;font-size:12px;height:36px;position:relative;">
<div style="float:left;padding:0 5px 0 4px;"><img alt="DPB" src="http://www.gravatar.com/avatar/5544fe6a05400da5a8957ff29dd6718c.png?s=128" style="border-radius:3px;width:32px;" /></div>
<div style="float:right;list-style:none;margin:3px 3px 0;text-align:right;"><strong id="doctitle">{doctitle}</strong><br /><span id="paginate" style="color:#666666;display:inline-block;font-size:11px;font-weight:300;padding-right:1px;">page {page} of {topage}</span></div>
<h1 style="font-size:15px;margin:0;"><strong>Danny Berger</strong><br /><a href="http://dpb587.me/" style="color:#666666;font-size:11px;font-weight:300;text-decoration:none;">http://dpb587.me</a></h1>
<div class="site-title" style="font-size:15px;margin:0;"><strong>Danny Berger</strong><br /><a href="http://dpb587.me/" style="color:#666666;font-size:11px;font-weight:300;text-decoration:none;">http://dpb587.me</a></div>
</div>
</body>
</html>

View File

@@ -98,26 +98,26 @@ small {
color: #666666;
}
h1 {
div.site-title {
font-size: 20px;
font-weight: 400;
margin: 4px 0 0;
}
h1 strong {
div.site-title strong {
font-weight: 700;
}
h1 strong a {
div.site-title strong a {
color: inherit;
text-decoration: none;
}
h1 small {
div.site-title small {
color: #999999;
}
h2 {
h1 {
color: #333333;
font-size: 18px;
font-weight: 700;
@@ -125,13 +125,13 @@ h2 {
padding: 1px 0;
}
h2 small {
h1 small {
display: block;
font-size: 12px;
font-weight: normal;
}
h3 {
h2 {
border-bottom: #DEDEDE solid 1px;
color: #393939;
font-size: 17px;
@@ -139,7 +139,7 @@ h3 {
padding: 0 4px 2px;
}
h4 {
h3 {
border-bottom: #DEDEDE dotted 1px;
font-size: 14px;
margin: 22px -4px 10px;

View File

@@ -61,10 +61,10 @@ p, ul, ol, dl {
margin: 7px 0;
}
h1 {
div.site-title {
margin-top: 6px;
}
h3 {
h2 {
margin-top: 24px;
}

View File

@@ -18,7 +18,7 @@ tags: danny daniel berger dpb587 dbchip2000
<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>
<h1><a href="{{ post.url }}">{{ post.title }}</a></h1>
{% if post.description %}
<div class="meta" style="margin-bottom:0;margin-top:0;">{{ post.description }}</div>
{% endif %}
@@ -29,7 +29,7 @@ tags: danny daniel berger dpb587 dbchip2000
{% if paginator.next_page %}
<section>
<header>
<h2><a href="/blog/">more posts &rarr;</a></h2>
<h1><a href="/blog/">more posts &rarr;</a></h1>
<div class="meta" style="margin-bottom:0;margin-top:0;">See the full list of {{ site.posts.size }} posts.</div>
</header>
</section>

View File

@@ -5,14 +5,14 @@ description: I like tinkering with ideas and seeing where they end up. These are
---
<section>
<h2>Projects</h2>
<h1>Projects</h1>
<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> and these are a few of my personal favorites&hellip;
</p>
<h4>ti-debug</h4>
<h3>ti-debug</h3>
<p>
A browser client for debugging server-side code (like PHP) without an IDE.
@@ -26,7 +26,7 @@ description: I like tinkering with ideas and seeing where they end up. These are
<dd><a href="/blog/2013/05/16/ti-debug-a-browser-debugger-for-server-code.html">ti-debug: For Debugging Server Code in the Browser</a> (2013-05-16)</dd>
</dl>
<h4>PHP Diff Engine</h4>
<h3>PHP Diff Engine</h3>
<p>
A language-aware diff engine for changes in PHP classes/interfaces/functions over time.
@@ -40,7 +40,7 @@ description: I like tinkering with ideas and seeing where they end up. These are
<dd><a href="/blog/2013/03/07/comparing-php-application-definitions.html">Comparing PHP Application Definitions</a> (2013-03-07)</dd>
</dl>
<h4>CLI for OpenGrok</h4>
<h3>CLI for OpenGrok</h3>
<p>
Command line interface (&agrave; la <code>grep</code>) for getting results from an OpenGrok server.
@@ -55,7 +55,7 @@ description: I like tinkering with ideas and seeing where they end up. These are
</dl>
<h3>Contributions</h3>
<h1>Contributions</h1>
<p>
I would not and could not be the developer I am without the time others have invested in publishing open source