Posts from January 2017

January 2017
Sun
Mon
Tue
Wed
Thu
Fri
Sat
1
2
4
5
6
7
8
9
10 📝
11
12
13
14
15
17 📝
18 📝 📝
19 📝
20
21
22
23 📝
24 📝
25 📝 📝
28 📝
29
30
31 📝 📝

The Baltimore Improv Group podcast returns with a super fun interview with hilarious improviser Clare Lochary!

https://soundcloud.com/bigimprov/big-podcast-clare-lochary

Also featuring some wonderful scenes from BIG performers Ti Coleman, David Anthony, Clare Lochary, John Windmueller, Joel Murphy, Michael Harris, Marty McGuire, and Bridget Cavaiola.

Check the episode out, linked above! And subscribe via the Soundcloud app, I guess!

post from
Who Get Money? • Ep 39 - Stainless Jeans, Fried Chicken Coating, and Rising Star

Sonos services are fun case studies in user antipatterns. “Your music will be saved to the cloud to protect your purchases.” - which music?

CryptoParty Baltimore

Digital Harbor Foundation Tech Center 1045 Light St., BaltimoreMD, 21230

You lock your doors, so why not lock up your data? It’s 2017 but it’s time to party like it’s 1983! (todo: think of a third clever thing to say about crypto before posting this event)!

The first(?) CryptoParty Baltimore will take place at Digital Harbor Foundation (1045 Light St. Baltimore, MD) on February 4th, 2017 from 6pm to 9pm!

A CryptoParty is a meetup that is free and open to everyone, but especially folks without prior experience, who want to learn and share knowledge about ways to protect yourself in the digital space. Bring your laptop, smartphone, tablet, and/or USB sticks to try the tools and apps directly at the CryptoParty!

For more information and to RSVP, check out the Baltimore CryptoParty page at: https://www.cryptoparty.in/baltimore

Please spread the word! If you like, there’s a printable 8.5”x11” flyer available here: https://www.cryptoparty.in/_media/cryptoparty-baltimore-2017-02.pdf

Hostel at BIG's Friday Night Laughs!

Single Carrot Theatre 2600 N Howard St, BaltimoreMD, 21218

Join me and the warm and welcoming players of Hostel as we do make-em-ups for you onstage!

In the first half of the show, let Aftermath build a tower of improv to the sky!

You’ve got nothing to lose but an hour and $5!

Tickets available here: https://www.eventbrite.com/e/friday-night-laughs-tickets-30861890746

Homebrew Website Club Baltimore 2017-02-08

Digital Harbor Foundation Tech Center 1045 Light St., BaltimoreMD, 21230

Create or update your personal web site!

  • Finish that blog post you’ve been working on.
  • Demos of recent IndieWeb breakthroughs.
  • Share what you’ve gotten working.
  • Ask the experts questions.
  • Join a community with like-minded interests. Bring friends that want a personal site!

Any questions? Ask in chat: http://chat.indieweb.org/today#bottom

Optional quiet writing hour starts at 6:30pm. Meetup begins at 7:30pm.

More information: http://indieweb.org/events/2017-02-08-homebrew-website-club

Facebook event: https://www.facebook.com/events/1281314895296846/

“If you can order breakfast successfully in the morning, then you can be a great improviser.” – Terry Withers

http://www.baltimoremagazine.net/2017/1/26/big-changes-for-the-baltimore-improv-group

Pleasantly surprised to see my face (and towel) on a Baltimore Magazine article!

Spano - a minimum-viable Micropub Media Endpoint

Micropub is an open API standard to create posts on one's own domain using third-party clients  and currently a W3C Candidate Recommendation. One of the (semi-) recent additions is the idea of a Micropub Media Endpoint. The Media Endpoint provides a way for Micropub clients to upload media files to a Micropub service, receiving a URL that is sent along in place of the file contents when the post is published.

Some of the things I like about Micropub media endpoints include:

  • The spec allows the media endpoint to be on a completely separate domain from the "full" micropub endpoint.
  • The spec doesn't specify anything about how the files are stored or their final URLs or filenames.
  • They make it easy to separate the handling of (large) media files from the (presumably much smaller) content and metadata of a post.
  • They enable Micropub clients to upload multiple files without creating multiple posts. This makes it simpler to create posts that contain multiple images, like a gallery.

Personally, I wanted a Micropub media endpoint server with a few extra properties:

  • It should be able to run completely separately from, and therefore work in conjunction with, any other micropub server implementation.
  • It should not store duplicate files. If the same file is uploaded twice, the same URL should be returned both times.
  • It should not allow overwriting files. If two images of the same name are uploaded, both are kept and receive different URLs.

Enter HashFS

My extra features above essentially describe a content-addressable storage storage system. CAS is a way of storing and accessing data based on some property of the actual content, rather than (potentially arbitrary) files and folders.

HashFS is a Python implementation of a content-addressable file management system. You give it files, it will put them in a directory structure based on a cryptographic hash function of the contents of that file. In other words - HashFS can take any file and give back a unique path to that file which will never change (if you later upload a new version of the file, it gets a different path).

To add the the fun of HashFS, there is a Flask extension called Flask-HashFS which makes it easy to expose a HashFS file store on the web via the Python Flask framework.

Introducing Spano

Spano is a Micropub Media Endpoint server written in Python via the Flask framework which combines Flask-HashFS for file storage with Flask-IndieAuth (introduced earlier) to handle authentication and authorization.

Spano is a server-side web app that basically does one thing: it accepts HTTP POST requests with a valid IndieAuth token and a file named "file", stores that file, and returns a URL to that file. The task of serving uploaded files is left to a dedicated web server like nginx or Apache.

Using Spano

Once Spano has been set up and configured for your domain, uploading is a matter of getting a valid IndieAuth token. IndieAuth-enabled Micropub clients will do this automatically. For testing by hand I like to log in to Quill and copy the access token from the Quill settings page. With token in hand, uploads are as easy as:

curl -D - -F "file=@myfile.jpg" \
  -H"Authorization: Bearer xxxx..." \
  https://media.example.com/micropub/

Which should output a response like:

HTTP/1.1 100 Continue

HTTP/1.0 201 CREATED
Content-Type: text/html; charset=utf-8
Content-Length: 108
Location: https://media.example.com/cc/a5/97/7c/2004..2cb.jpg
Server: Werkzeug/0.11.4 Python/2.7.11
Date: Thu, 26 Jan 2017 02:40:05 GMT

File created: https://media.example.com/cc/a5/97/7c/2004..2cb.jpg

Integrating Spano with your Micropub Endpoint

If you want Micropub clients to use Spano as your Media Endpoint, you need to advertise it. This is handled by your "main" Micropub server using discovery. Essentially, a client will make a configuration request to your server like so:

https://example.com/micropub?q=config

And your server's response should be a JSON-formatted object specifying the "media-endpoint". A bare minimum example:

{
  "media-endpoint": "https://media.example.com/micropub/"
}

In addition to advertising the media-endpoint, your Micropub server must be able to handle lists of URLs in places where it would normally expect a file.

For example, when posting a photo from Quill without a media endpoint, your Micropub server will receive a multipart/form-data encoded file named "photo". When posting from Quill with a media endpoint, your Micropub server will instead receive a list of URLs represented as "photo[]=https://media.example.com/cc/...2cb.jpg". Presumably this pattern would hold for other media types such as video and audio, if you are using Micropub clients that support them.

This particular step has been an interesting challenge for my site, which is a static site generated by Jekyll. My previous Micropub file-handling implementation expected all uploaded assets to live on disk next to the post files, and updating my Jekyll theme and plugins to handle the change is a work in progress. I eventually plan to move all my uploads out of the source for my project in favor of storing them with Spano.

Feedback Welcome!

Spano is probably my second public Python project, so I'd love feedback! If you try it out and run into issues, please drop me a line on GitHub. Or you can find me in the #indieweb chat on freenode IRC.

I'd also like to thank Kyle Mahan for his Woodwind Flask server application, which inspired the structure of Spano.

Flask-IndieAuth - A Python Library for Micropub Servers

One of the things I like about the IndieWeb community is that while they are building tools for themselves, they also tend to release useful parts under Free Software licenses. This helps other developers join the community more quickly, but it also tends to help improve the quality and feature sets of these projects as others use and add to the source.

One of my favorite things to come from the IndieWeb folks is the Micropub API standard, which defines some simple protocols for clients to send post data (the kinds of things you'd share on a blog or social media: images, short plain text, long articles, tags, and more) to servers for posting. One upshot is that if your server accepts Micropub, you can use one of many clients to put content on your site. I'm using a dedicated editor from Aaron Parecki's Quill to write this post, but there are lots of alternatives that are aimed at special use cases. For example, Kyle Mahan's Woodwind is an IndieWeb reader app that happens to include functionality for posting replies, favorites, reposts, and even RSVPs directly to my site via Micropub.

Another favorite is the idea of IndieAuth for web sign-in. At a high level, the idea is that you create two-way links between your website and your user profile on some other silo. For example, on your homepage you add a link to your Twitter profile and on your Twitter profile you link back to your homepage. For a client that supports IndieAuth, I can log in using my homepage URL by verifying that I can log in to my Twitter account.

My own personal Micropub implementation is a little pile of spaghetti Python code making use of the Flask framework. I use IndieAuth to handle authentication (i.e. - proving that a post comes from an app that I've logged into) and authorization (i.e. - proving that I gave that app permission to post to my site). As I've started improving my Micropub implementation, I found it useful to extract that portion of my code into a library that can be used with other Flask applications.

Introducing Flask-IndieAuth

Flask-IndieAuth is a Flask extension that adds the ability to require a client to send a valid IndieAuth token when making requests to any route. For example:

from flask_indieauth import requires_indieauth

@app.route('/micropub', methods=['GET','POST'])
@requires_indieauth
def handle_micropub():
    # ... handle the request

The @requires_indieauth decorator runs before the code for the route. It currently looks for an IndieAuth token in one of three places, in order:

  • HTTP Header (e.g. "Authorization: Bearer xxxx...xx")
  • HTTP form data or query string (e.g. "?access_token=xxxx...xx")
  • The body of a JSON-encoded POST (e.g. {"access_token": "xxxx...xx"})

If a token is found, it will be verified against the configured Token Endpoint to confirm that it is a valid token issued for your server's configured homepage with a sufficient scope.

For more information on how to install, configure, and use Flask-IndieAuth, please check out the README on GitHub.

Next Steps

I'll be using this extension to build my Micropub media endpoint (coming up in a future post) and so far it is working just fine. That said, I know there is a lot of room for improvement. Some things on my list:

  • "scope" can have many values, but only "post" is supported for now. It should probably be passed as an argument to @requires_indieauth so different routes can have different requirements.
  • The configured homepage ("ME") is currently expected in the Flask app's config. I'm not sure if that's "standard".
  • "TOKEN_ENDPOINT" is currently expected in the Flask app's configuration, but since it is required to be specified in the HTTP headers for or as a <link> in the content for the homepage, this could be fetched by the server.
  • Error handling isn't great - all failure conditions currently return HTTP 400 (Bad Request) but should probably be diversified a bit.

Feedback Welcome!

This is my first published Flask extension (heck, it's my first public Python package on PyPI), and I'd really appreciate comments, questions, pull requests, etc. Feel free to reach out on GitHub, or you can find me in the #indieweb chat on freenode IRC.

From a few days ago. Part of the old Bethlehem, PA steel works, now a steelpunk art piece outside the venue for the wonderful Steelstacks Improv Comedy Festival.

What a blast performing with Remote Possibilities and having the chance to see a performance by and take a workshop from the Improvised Shakespeare Company!

This post has been deleted.

HWC Baltimore 1/25 Wrap-Up

Baltimore's first Homebrew Website Club of 2017 met at the Digital Harbor Foundation Tech Center on 2017-01-25.

Notes from the "broadcast" portion of the meetup:

martymcgui.re - mf2 for deleted posts. Packaged and released his first Python package, a Flask IndieAuth lib for micropub servers, has a proof of concept micropub media server built on Flask-HashFS.

brianey.com - lots of WordPress IndieWeb plugins setup on his site. Has IndieAuth working. Thinks micropub is working. Also integrating these into humor/fake-advice site imnotwrong.com, POSSE to Medium. Discovered that people still use StumbleUpon and got some good traffic from there.

jeancedre.com - wrote down list of things to do to refresh portfolio site. Chose new color scheme and brought it into Sketch to start designing. New website will mean new logo, layout, etc., and eventually business cards based on that. Not sure if wants to use WordPress "because it's overkill". Discussed how he wants to "use" the site, as the author, since WP provides a nice CMS that supports lots of workflows.

jonathanprozzi.net - did lots of refactoring of his Hugo theme into logical partials. Goal is to make a Hugo theme that supports IndieWeb via mf2 out of the box. Has also started making an ongoing list of all the changes he has been making, or wants to make, on his site.

We discussed the renewed IndieWeb interest in automatically archiving our posts and links to the Internet Archive, prompted by the content deletions and Twitter censoring of the new U.S. gov't administration. We also discussed the upcoming CryptoParty Baltimore happening in a little over a week on Feb 4th.

Left-to-right: brianey.com, jonathanprozzi.net, jeancedre.com, martymcgui.re

We hope you'll join us for the next HWC Baltimore meetups: Feb 8th and March 22nd!

Photo for tonight’s Homebrew Website Club Baltimore.

Thanks to our guest Nate Tyson for making this episode a real trip down memory lane!

https://wehavetoask.com/episodes/2017-01-24/

post from
What's A Boy Supposed To Do? • Ep 1995 - Nate Tyson
RSVP'd to an event https://martymcgui.re/2016/12/30/175607/
post from
Homebrew Website Club Baltimore Meetup 2017-01-25

Digital Harbor Foundation Tech Center Baltimore, MD

I am going to Homebrew Website Club Baltimore, Jan 25th!

Just two more days until the return of Homebrew Website Club Baltimore! Come on out to Digital Harbor Foundation and continue (or start!) working on your own website in a relaxed and supportive atmosphere.

🔁 Reposted https://twitter.com/CryptoPartyBalt/status/822128581979570176
post from You lock your doors so why not lock your data? The next B'more #CryptoParty is at @DHFBaltimore Feb 4, 6pm-9pm. https://www.cryptoparty.in/baltimore
Replied to https://martymcgui.re/2017/01/16/142356/
post from
BIG's FREE Open Mic!

Single Carrot Theatre Baltimore, MD

SOON.

Sign-ups start at 7pm! Come on down to Single Carrot Theatre and show us your stand-up, improv, or sketch team chops!

Thanks to our guest Matt Holmes for making this episode so technically accurate! Make sure to catch his show Matt And Improv!

https://wehavetoask.com/episodes/2017-01-17/

post from
How Do They Make That? • Ep 96 - Laughter with Sam Whitfield

Lawful & Orderly: Special Visions Unit - Episode 2

Location:

www.twitch.tv

Lawful & Orderly, a weekly live-streaming D&D series from The RPG Academy on Twitch which follows the magical case files of the High Guard Special Visions Unit.

The city of Lan Arcanym rests at a nexus of magical energy. That kind of power brings trouble… trouble that sometimes seems to spawn from thin air. The priests and seers of Lan Arcanym report their most disturbing visions to the fearless officers of LA:HG’s Special Visions Unit, who stop at nothing to see these cases through.

For more info, check out these previews:

https://youtu.be/61dHfYNKGQ4

Lawful & Orderly streams live Mondays from 8pm-10pm EST on The RPG Academy Twitch channel.

Can’t catch us live, or miss out on an episode? Past shows will be available on The RPG Academy’s Twitch, YouTube, and podcast channels.

👮#DnDSVU🔮

Remote Possibilities at Steel Stacks Improv Festival!

ArtsQuest Center at SteelStacks

In just a few days’ time the nation’s most popular staged improvised television show comes to the Steelstacks Improv Festival.

Tune in as I and the talented members of Remote Possibilities create for you the latest episode of a TV show that doesn’t exist!

Tickets available here!

This post has been deleted.

BIG's FREE Open Mic!

Single Carrot Theatre 2600 N Howard St, BaltimoreMD, 21218

Baltimore! It’s a new year and time to work on those (comedy) skills like you promised yourself you would!

Join me this Wednesday, January 18th at the Single Carrot Theatre as I host a night of comedy featuring… you! Baltimore Improv Group’s FREE Open Mic is a chance for stand-ups, improv troupes, sketch troupes, whatever-you’ve-got to strut your stuff on our stage!

Sign-ups start at 7pm, performances start at 7:30pm.

Performing is free, so come get some stage time!

Watching is free, so come get some free entertainment!

See you there!

📕 Finished reading Nemesis Games by James S.A. Corey. Still loving the Expanse series!

Thanks to our guest Sarah Maher for keeping us looking to the future in this week’s episode of We Have to Ask

https://wehavetoask.com/episodes/2017-01-10/

post from
What Do You Have To Look Forward To? • Ep 2016 A - Sandra the Executive Producer of 2016

Thanks to everyone who came out to the 2017: The Year of Peak Sloth - Live Podcasting Event! Special thanks to our guest Heather Moyer for dealing out the healing in this week’s episode!

https://wehavetoask.com/episodes/2017-01-03/

post from
Why Is This Happening To Me? • Ep 49 - Dr. Sheila Taylor
★ Favorited https://aaronparecki.com/2017/01/02/12/day13
post from
Day 13. Daft Punk vs The Office. I had fun with this one! This is the chords and melody from Daft Punk's Get Lucky, but instrumented and arranged the same as the theme from The Office. It's also my first time using a vocoder on my own voice!