Skip to content

Commit

Permalink
fixing html proofer errors
Browse files Browse the repository at this point in the history
  • Loading branch information
kyleboon committed Dec 27, 2023
1 parent 2df9967 commit d45ca48
Show file tree
Hide file tree
Showing 24 changed files with 50 additions and 54 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ To run this Jekyll site locally, follow these steps:
4. Run Jekyll: `bundle exec jekyll serve`
5. Open your browser and visit `http://localhost:4000` to see the site.

To run html proofer:

1. `bundle exec htmlproofer ./_site`

## License

This project is licensed under the [MIT License](LICENSE).
2 changes: 1 addition & 1 deletion _includes/footer.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<footer> ©&nbsp;2023&nbsp;Kyle Boon &nbsp;|&nbsp; <a href="mailto:[email protected]">E-mail</a> &nbsp;|&nbsp; <a href="/atom.xml">RSS</a> </footer>
<footer> ©&nbsp;2023&nbsp;Kyle Boon &nbsp;|&nbsp; <a href="mailto:[email protected]">E-mail</a> &nbsp;|&nbsp; <a href="/feed.xml">RSS</a> </footer>
2 changes: 1 addition & 1 deletion _layouts/page.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
layout: base
---
<div class="maincontent">
<div id="maincontent">
{{ content }}
</div>
10 changes: 2 additions & 8 deletions _layouts/post.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
---
layout: base
---
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
<article role="main" class="blog-post">
{{ content }}
</article>
</div>
</div>
<div id="maincontent">
{{ content }}
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ comments: true
external-url:
categories: speaking events
---
On Saturday I hosted and facilitated Global Day of Code Retreat - Minneapolis. My employer <a href="http://www.gobloomhealth.com/">BloomHealth</a> sponsored the event at our office in downtown Minneapolis. We had 16 people come in on a Saturday in the snow during the Holidays for a day of deliberate practice at the craft of software development.  Worldwide there was over 150 cities in 22 timezones and 3,000 people participating.
On Saturday I hosted and facilitated Global Day of Code Retreat - Minneapolis. My employer <a href="https://www.gobloomhealth.com/">BloomHealth</a> sponsored the event at our office in downtown Minneapolis. We had 16 people come in on a Saturday in the snow during the Holidays for a day of deliberate practice at the craft of software development.  Worldwide there was over 150 cities in 22 timezones and 3,000 people participating.
# What is it Code Retreat?
The easiest answer is to direct you to <a href="http://coderetreat.org/">www.coderetreat.org</a> and let you read it there, but I'll try to explain it in short form. <a href="http://en.wikipedia.org/wiki/Malcolm_Gladwell">Maxim Gladwell</a> says it takes 10,000 hours of practice to become an expert in any field. This happens in sports all the time. College football players spend 20 hours a week practicing with the team plus uncounted hours watching film, lifting weights and practicing as individual. They spend 60 minutes 14 times a year actually playing a real game of football. An individual player probably spends less than half of that time on the field. They're still amateurs with a lot to learn when they get to the NFL. Coderetreat is about advocating the idea of deliberate practice to the craft of software development. What is the equivalent of a cone drill or 40 yard dash for a software engineer? Just like those drills help build muscle memory for football players, software developers need muscle memory when the pressure of deadlines comes during the workday.
The easiest answer is to direct you to <a href="https://coderetreat.org/">www.coderetreat.org</a> and let you read it there, but I'll try to explain it in short form. <a href="https://en.wikipedia.org/wiki/Malcolm_Gladwell">Maxim Gladwell</a> says it takes 10,000 hours of practice to become an expert in any field. This happens in sports all the time. College football players spend 20 hours a week practicing with the team plus uncounted hours watching film, lifting weights and practicing as individual. They spend 60 minutes 14 times a year actually playing a real game of football. An individual player probably spends less than half of that time on the field. They're still amateurs with a lot to learn when they get to the NFL. Coderetreat is about advocating the idea of deliberate practice to the craft of software development. What is the equivalent of a cone drill or 40 yard dash for a software engineer? Just like those drills help build muscle memory for football players, software developers need muscle memory when the pressure of deadlines comes during the workday.
# Our Drills
Everyone doing a code retreat practices on the common problem of building <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Conway's Game of Life.</a> I won't go into it in depth but Conway's game of Life is a simple set of rules that yields very complex results. Having a common problem lets  people all over the world speak about the experience with a common vocabulary.
Everyone doing a code retreat practices on the common problem of building <a href="https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">Conway's Game of Life.</a> I won't go into it in depth but Conway's game of Life is a simple set of rules that yields very complex results. Having a common problem lets  people all over the world speak about the experience with a common vocabulary.

The day is then broken down into 45 minute sessions. Each session has a different constraint applied that forces the participants to think about the problem in a different light. Our sessions were:
<ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ comments: true
title: "Submitted an abstract to talk at gr8conf2013"
categories: speaking
---
I submitted an abstract to speak at <a href="http://gr8conf.us/">gr8conf.us</a> this year in Minneapolis. This would my first time speaking at a conference.
I submitted an abstract to speak at <a href="https://gr8conf.us/">gr8conf.us</a> this year in Minneapolis. This would my first time speaking at a conference.
<blockquote>A trend in web development has been towards microservices - or small, independent RESTful APIs that back a larger web application. For example, github's api allows you to do nearly anything that can be done on their website. There are several good options for building these services in groovy. In this talk we'll cover several options including grails, dropwizard and ratpack (or restlets, not sure which would better yet). We'll build the same service in all 3 frameworks and then compare the development experience, speed and memory footprint of all 3.</blockquote>
At BloomHealth we've been using <a title="DropWizard" href="https://www.dropwizard.io/en/stable/">DropWizard</a> for the last few weeks as we start to change to portions of our application into micro services.
6 changes: 3 additions & 3 deletions _posts/2013-06-26-new-blog.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ categories: meta
I got bored of hosting on wordpress. I've moved over to an octopress
blog hosted as a static site on Amazon S3. I only pay for the bandwidth
used and no one reads this blog so it should be dirt cheap.
[Octopress](http://octopress.org/) is a framework for technical blogging
[Octopress](https://octopress.org/) is a framework for technical blogging
based on the Jeckyll static site generator. I can write blog posts in
markdown and then deploy to s3 with a
[rake task](http://www.jerome-bernard.com/blog/2011/08/20/quick-tip-for-easily-deploying-octopress-blog-on-amazon-s3/).
[rake task](https://www.jerome-bernard.com/blog/2011/08/20/quick-tip-for-easily-deploying-octopress-blog-on-amazon-s3/).
Amazon S3 can be easily configured to [serve static web
sites](http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html)
sites](https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html)
and I'm using Amazon Route 53 as the DNS server.
I wanted a blog up before gr8conf next month so that I can link to my
slides and example code. So far I'm happy with this set up, maybe it
Expand Down
4 changes: 2 additions & 2 deletions _posts/2013-09-15-optional-for-groovy.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ These features allow you to use Optional in a slightly groovier way. What do you

* [Java 8 Optional type](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)
* [Guava's discussion of null and when to avoid it](https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained)
* [Stack overflow discussion of Optional](http://stackoverflow.com/questions/9561295/whats-the-point-of-guavas-optional-class)
* [Optional pattern](http://en.wikipedia.org/wiki/Option_type)
* [Stack overflow discussion of Optional](https://stackoverflow.com/questions/9561295/whats-the-point-of-guavas-optional-class)
* [Optional pattern](https://en.wikipedia.org/wiki/Option_type)
2 changes: 1 addition & 1 deletion _posts/2013-09-23-newrelic-for-dropwizard.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ comments: true
categories: groovy dropwizard newrelic
---

We are using Yammer Metrics and Graphite but New Relic gives a lot of fantastic information with very little work. We've used it for several years with our Grails applications. In particular, the app server transaction traces gives data that we don't get by default from yammer metrics. Enabling new relic is easy with dropwizard by following [New Relic's directions](http://newrelic.com/java). This really just boils down to adding the new relic java agent when you start dropwizard.
We are using Yammer Metrics and Graphite but New Relic gives a lot of fantastic information with very little work. We've used it for several years with our Grails applications. In particular, the app server transaction traces gives data that we don't get by default from yammer metrics. Enabling new relic is easy with dropwizard by following [New Relic's directions](https://newrelic.com/java). This really just boils down to adding the new relic java agent when you start dropwizard.

```bash
java -javaagent:/path/to/newrelic.jar -jar path/to/dropwizard server start config.yml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ comments: true
categories: groovy dropwizard load-testing
---

At Bloomhealth we've been running five dropwizard in production for about 6 months. Until recently those services have mostly been for internal tools or low volume external tools. In preparation for heavier use, we started do more extensive load testing of both our grails and dropwizard applications. We've been using [gatling](http://wwww.gatling-tool.org/) which is a load/performance testing tool in scala. You can write tests using a simple DSL or use a browser based scenario recorder for more complicated workflows.
At Bloomhealth we've been running five dropwizard in production for about 6 months. Until recently those services have mostly been for internal tools or low volume external tools. In preparation for heavier use, we started do more extensive load testing of both our grails and dropwizard applications. We've been using [gatling](https://wwww.gatling-tool.org/) which is a load/performance testing tool in scala. You can write tests using a simple DSL or use a browser based scenario recorder for more complicated workflows.

I started to wonder if using Groovy 2's static compilation feature would impact the performance of our dropwizard web services in a significant way. I've seen several benchmarks (listed at the end) that demonstrate a dramatic performance benefit with groovy's static compilation but I haven't seen anyone show the same for a production web service.

Expand Down Expand Up @@ -57,7 +57,7 @@ Every statistic showed improvement on all 3 test runs, but the overall impact wa

## References
* [Static Complication Benchmarks](https://code.google.com/p/jlabgroovy/wiki/Benchmarks)
* [Stack Overflow Groovy Benchmarks](http://stackoverflow.com/questions/11344412/what-is-the-performance-of-groovy-2-0-with-static-compilation)
* [Java, Groovy, Kotlin performance comparisonn](http://objectscape.blogspot.de/2012/08/groovy-20-performance-compared-to-java.html)
* [Yet Another comparisonn](http://java.dzone.com/articles/java-7-vs-groovy-21)
* [Stack Overflow Groovy Benchmarks](https://stackoverflow.com/questions/11344412/what-is-the-performance-of-groovy-2-0-with-static-compilation)
* [Java, Groovy, Kotlin performance comparisonn](https://objectscape.blogspot.de/2012/08/groovy-20-performance-compared-to-java.html)
* [Yet Another comparisonn](https://java.dzone.com/articles/java-7-vs-groovy-21)

Original file line number Diff line number Diff line change
Expand Up @@ -133,5 +133,5 @@ Meta-annotations are a great way to reduce annotation duplication and make it a
## References

* [Groovy meta-annotation documentation](https://groovy-lang.org/metaprogramming.html#meta-annotations)
* [Groovy Goodness: Combining Annotations with AnnotationCollector](http://mrhaki.blogspot.com/2013/02/groovy-goodness-combining-annotations.html)
* [Groovy Goodness: Combining Annotations with AnnotationCollector](https://mrhaki.blogspot.com/2013/02/groovy-goodness-combining-annotations.html)
* [Compile Time Metaprogramming - AST Transformations](https://groovy-lang.org/metaprogramming.html#developing-ast-xforms)
2 changes: 1 addition & 1 deletion _posts/2014-04-17-code-coverage-with-groovy.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ categories: groovy coverage jacoco cobertura

Last year we finally decided to update from JDK6 to JDK7. This was mostly a painless process, however when we upgraded, we started getting very strange code coverage numbers. We were using cobertura 2.0.3 at the time. I also created [an issue](https://github.com/cobertura/cobertura/issues/101) at the time, and more recently a [second issue](https://github.com/cobertura/cobertura/issues/135) was added.

Recently we started looking in to getting our coverage statistics working again so I've done a bit more digging with [John Engleman](http://imperceptiblethoughts.com/). We've tried [jacoco](http://www.eclemma.org/jacoco/) 0.7.0.201403182114, [cobertura](http://cobertura.github.io/cobertura/) 2.0.3 and [clover](https://www.atlassian.com/software/clover/overview) 3.1.12.1.
Recently we started looking in to getting our coverage statistics working again so I've done a bit more digging with [John Engleman](https://imperceptiblethoughts.com/). We've tried [jacoco](https://www.eclemma.org/jacoco/) 0.7.0.201403182114, [cobertura](https://cobertura.github.io/cobertura/) 2.0.3 and [clover](https://www.atlassian.com/software/clover/overview) 3.1.12.1.

I wanted to do an apples to apples comparison of jacoco and cobertura for JDK6 and JDK7 on a [simple groovy project](https://github.com/kyleboon/groovy-code-coverage-examples).

Expand Down
4 changes: 2 additions & 2 deletions _posts/2014-04-18-two-factor-authentication.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ categories: grails spring-security

Two-Factor authentication is a form of authentication which requires the user to confirm their identity by more than just a username and password. There are three types authentication factors from which two must be used. The factors are knowledge (username/password), possession (sending a text message to a phone) and inheritance (fingerprint). This type of authentication has recently become more popular thanks to Google, Twitter and Facebook all adopting multi-factor authentication as an option. If you don't have this enabled for your accounts, please stop reading this and enable it before you do anything else.

I started writing this post before the Heartbleed SSL vulnerability announced last week. I'm hoping that will bring more awareness and attention to [multi-factor](http://en.wikipedia.org/wiki/Multi-factor_authentication) or [passwordless](https://medium.com/cyber-security/9ed56d483eb) authentication. Multi-factor authentication isn't just for Google, if you deal with personally identifiable information then you should be trying to make your user’s data as secure as possible. Luckily, creating a two-factor authentication process with grails and spring security isn't terribly difficult.
I started writing this post before the Heartbleed SSL vulnerability announced last week. I'm hoping that will bring more awareness and attention to [multi-factor](https://en.wikipedia.org/wiki/Multi-factor_authentication) or [passwordless](https://medium.com/cyber-security/9ed56d483eb) authentication. Multi-factor authentication isn't just for Google, if you deal with personally identifiable information then you should be trying to make your user’s data as secure as possible. Luckily, creating a two-factor authentication process with grails and spring security isn't terribly difficult.

This is going to be the first of a two part series. All of the code can be seen on [github](https://github.com/kyleboon/two-step-authentication-example) of course. I will tag each version as it gets updated for the next blog post. The code is currently tagged as 'step1'.

The first factor in this example is a knowledge factor requiring the user to know a username and password. The second factor, which will be in Part 2 of this series, will be a possession factor. It will use the [Twilio api](http://www.twilio.com/docs/api/rest) to send a text message with a one-time use token. The user will provide this token and then be fully authenticated.
The first factor in this example is a knowledge factor requiring the user to know a username and password. The second factor, which will be in Part 2 of this series, will be a possession factor. It will use the [Twilio api](https://www.twilio.com/docs/api/rest) to send a text message with a one-time use token. The user will provide this token and then be fully authenticated.

## Overview of solution

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ date: 2014-08-12 12:43
comments: true
categories: grails spring-security
---
At the end of [part 1](http://kyleboon.org/blog/2014/05/18/two-factor-authentication/), the first step of multi-factor authentication was finished. The second authentication step will verify a token sent via text message to the user. In order to accomplish this, there needs to be a Spring Security filter and authentication provider. The filter will be triggered when the security token is submitted by the user, it will delegate to the authentication provider which will fully authenticate the user and provide the full list of roles from the ```DaoUserDetailsProvider```.
At the end of [part 1](https://kyleboon.org/blog/2014/05/18/two-factor-authentication/), the first step of multi-factor authentication was finished. The second authentication step will verify a token sent via text message to the user. In order to accomplish this, there needs to be a Spring Security filter and authentication provider. The filter will be triggered when the security token is submitted by the user, it will delegate to the authentication provider which will fully authenticate the user and provide the full list of roles from the ```DaoUserDetailsProvider```.

### Implementing the 2nd Step of authentication

Expand Down
4 changes: 2 additions & 2 deletions _posts/2014-08-14-ratpack-plus-docker-plus-gradle.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ categories: ratpack docker gradle
---

This is just a quick example of having gradle build a docker container with
a ratpack application as part of the build process. You'll need to have docker installed in order for this to work. If you're using OSX then [boot2docker](http://boot2docker.io/) is the best way to go.
a ratpack application as part of the build process. You'll need to have docker installed in order for this to work. If you're using OSX then [boot2docker](https://boot2docker.io/) is the best way to go.

Eventually I want to have gradle publish the docker container after a successful build of the master branch. Then I can use elastic beanstalk deploy the container with very little effort.

Expand All @@ -17,7 +17,7 @@ First, add the shadow and docker plugins to your ratpack build.
buildscript {
repositories {
jcenter()
maven { url "http://oss.jfrog.org/repo" }
maven { url "https://oss.jfrog.org/repo" }
}
dependencies {
classpath "io.ratpack:ratpack-gradle:0.9.8-SNAPSHOT"
Expand Down
Loading

0 comments on commit d45ca48

Please sign in to comment.