Almost went for the Nitro cold brew at 3 Bean. Made a more relaxed choice of tea at the Bun Shop.

HWC Baltimore 11/30 Wrap-Up

Baltimore's third Homebrew Website Club meet up happened at the Digital Harbor Foundation Tech Center on 11/30/2016. We had a nice quiet writing hour followed by some quick introductions, lots of progress on projects, and some new attendees!

Notes from the "broadcast" portion of the meetup:

Marty McGuire (co-organizer) - Been working on displaying reply contexts and manually POSSE-ing, sending webmentions. Also set up a self-hosted copy of Woodwind to keep following other IndieWeb sites. 2017 commitment to improve handling of images so posting to my site doesn't take forever and each page load doesn't include huge full sizes image by default.

Jonathan Prozzi (co-organizer) - finished setting up site on DigitalOcean, powered by Hugo. Has front page h-card working and logged in to IndieWeb wiki to RSVP to this event. Created a 2017 commitments post tonight.

Brian Young - Captured a ton of ideas for what to do next as Google Tasks. Started with IndieWeb Wordpress plugins and getting the feel for them at Using it as a test site for playing with indieweb features. Also started a new site, a humor site featuring a bad/fake/satirical advice column. Also has POSSE working on to Tumblr and Medium.

Adam Bouhmad - Started working on a site for collecting malware samples and other interesting code specimens for security research.

Derek (no site, yet) - Teaching front-end web development to folks recently released from prison. Is pretty new to web development himself, so picking up new skills to stay ahead. Been working on converting a video tutorial about HTML+CSS menu bars into a workshop for students. Digging into gridview for the next class topic.

Here's the customary HWC group selfie:

Left-to-right, front-to-back: Derek, Brian, Jonathan, Adam, Marty

We had a great discussion and were all grateful for the dedicated time to working on our sites.

We hope you'll join us for our next HWC Baltimore on 12/14!

Group photo for HWC Baltimore 2016-11-30

Replied to

My 2017-01-01 #IndieWeb commitment is to improve the way I handle files and images to speed up both posting and pageloads for my site.

This evening! Join us @DHFBaltimore at 6:30pm for quiet writing hour, 7:30pm for Homebrew Website Club meetup! Own what you publish online!

post from
Homebrew Website Club Baltimore Meetup 11/30/2016

Digital Harbor Foundation Tech Center Baltimore, MD

Configuring Woodwind with imageproxy

A couple of days ago I wrote up a set of instructions for setting up a self-hosted copy of Woodwind with nginx and upstart. Since then I noticed that many images were broken on the feeds I was looking at - a common problem when a site that is served with HTTPS is displaying images and other content from another site that is served with HTTP.

Broken images are so 90s. But, like, sad 90s.

I noticed that the main site was serving images through special URLs like:

Looking in the source code, I found that Woodwind has support for image proxies, which are neat little services that can help serve remote HTTP content over HTTPS, resize images on the fly, and more.

I'd been meaning to set up one of these services for my own site, so this seemed like a good time to jump in!

Since my server already has Go I chose Will Norris' imageproxy, which has a similar deployment setup to how I am already running Woodwind: Upstart manages a standalone process and nginx acts as a proxy to pass along requests.

Installation was fairly simple, once I had my GOPATH set up correctly:

go get

For running a persistent service, Will has an example Upstart configuration, which I modified a bit and placed in /etc/init/imageproxy.conf:

description "Image Proxy server"
start on (net-device-up)
stop on runlevel [!2345]

exec start-stop-daemon --start -c www-data --exec /home/imageproxy_user/go/bin/imageproxy -- \
    -addr localhost:4593 \
    -log_dir /var/log/imageproxy \
    -cache /var/cache/imageproxy \
    -signatureKey @/etc/imageproxy.key

Before starting up the service, there were a few extra steps:

Create /var/log/imageproxy and /var/cache/imageproxy and make sure they are owned by the www-data user.

Create the "signature key" in /etc/imageproxy.key. This is used to authorize each image request so that random folks can't proxy random stuff through your imageproxy. I used the command line openssl tool for this, with an extra pass through awk to remove the newline character that openssl spits out.

$ sudo openssl rand -base64 42 | awk 'BEGIN{ORS="";} {print} > /etc/imageproxy.key

I also made sure that /etc/imageproxy.key was owned and readable by www-data and no other user.

I could then start up the server with:

sudo start imageproxy

Next it was time to configure nginx to send proxied image requests along to imageproxy. I opened up the nginx woodwind.conf file that I had created and added a new location block:

location ~ ^/imageproxy/ {
# pattern match to capture the original URL to prevent URL
# canonicalization, which would strip double slashes
if ($request_uri ~ "/imageproxy/(.+)") {
set $path $1;
rewrite .* /$path break;
proxy_pass http://localhost:4593;

After restarting nginx, requests to would be forwarded to the imageproxy server.

Finally, it was time to configure Woodwind to use the proxy. I opened up woodwind.cfg and added two lines:

IMAGEPROXY_URL = '/imageproxy'
IMAGEPROXY_KEY = '...' # the contents of /etc/imageproxy.key

A quick restart of the Woodwind service, a browser refresh and I have images aplenty!

Thanks for reading! I hope this little HOWTO was useful. I look forward to more fun with imageproxy in my IndieWeb adventures. How might you be able to put imageproxy to use?

🔁 Reposted
post from
This #givingtuesday consider: ACLU: Planned Parenthood: SPLC:

Pile of index cards from running my first ever D&D campaign last night.

Thanks to our guest Maggie Phenicie for making thi-… Wait, Maggie is the host, right, of course. Thanks to our guest Marty McGuire for making this episode more informationally secure.

Wait, what?

post from
What's In Your Kitchen Cabinet? • Ep 34 - Alphonse Gauge
Replied to
post from
Sad realization: My browser has 50 tabs open, 38 of them were for #IndieWeb "itches" I want to work on...

This is me at least once per week.