Check the episode out, linked above! And subscribe via the Soundcloud app, I guess!
Check the episode out, linked above! And subscribe via the Soundcloud app, I guess!
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
“If you can order breakfast successfully in the morning, then you can be a great improviser.” – Terry Withers
Pleasantly surprised to see my face (and towel) on a Baltimore Magazine article!
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:
Personally, I wanted a Micropub media endpoint server with a few extra properties:
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).
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.
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 "firstname.lastname@example.org" \ -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
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:
And your server's response should be a JSON-formatted object specifying the "media-endpoint". A bare minimum example:
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.
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.
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.
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:
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.
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:
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.
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.
We hope you'll join us for the next HWC Baltimore meetups: Feb 8th and March 22nd!
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-01-25-homebrew-website-club
Facebook event: https://www.facebook.com/events/1243035719067109/
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.
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!
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:
Lawful & Orderly streams live Mondays from 8pm-10pm EST on The RPG Academy Twitch channel.
Still loving the Expanse series!
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!