Posts from December 2016

December 2016
Sun
Mon
Tue
Wed
Thu
Fri
Sat
1 📝
2
3
4
5 📝
7 📝
8
9
10
11
12 📝
15
16 📝
17 📝 📝
18 📝 📝
19 📝
20 📝
21 📝
22
23 📝 📝
24
25 📝
26
27
28
29 📝
31

BIG Mainstage Performance Dec 30

Single Carrot Theatre 2600 N Howard St, BaltimoreMD, 21218

Remote Possibilities makes their debut at the Single Carrot Theater tonight at 8pm.

It will be a special show because we will have some SPECIAL GUESTS!

The only way to find out who is to pay $5 and come to the show.

Tickets available here: http://www.eventbrite.com/event/29649451307

Homebrew Website Club Baltimore Meetup 2017-01-25

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-01-25-homebrew-website-club

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

Replied to https://aaronparecki.com/2016/12/29/21/day-9

Nice! This reminds me a lot of the Look Around You series that parodied British science television.

After today, there are only two more days in 2016.

Coincidentally, that’s two final opportunities to see me do some improv comedy!

Friday, Dec 30th, at 8pm, come see Remote Possibilities make up a TV show for you at the Single Carrot Theatre!

Finally, on New Years Eve, from 6-8pm, also at the Single Carrot Theatre, have a few drinks and laughs with us at the Peak Sloth Podcast Network’s live podcasting event! We’ll have live shows from The Digression Sessions Podcast, HoboTrashcan.com’s Hobo Radio, and We Have to Ask featuring special guest Heather Moyer! But that’s not all! We’ll also have some improv thanks to some wonderful players from the Baltimore Improv Group!

So come on out and laugh as 2016 finally drains away!

Replied to https://aaronparecki.com/2016/12/23/12/
post from
Day 3. Today's theme is "breaking news intro song", and also "Aaron attempts to spend less than 5 hours on this today unlike yesterday". I think I accomplished both! #100daysofmusic #100daysproject #the100dayproject

Loving these so far! BTW - what license (if any) are you making your #100daysofmusic posts available under?

★ Favorited https://aaronparecki.com/2016/12/23/12/
post from
Day 3. Today's theme is "breaking news intro song", and also "Aaron attempts to spend less than 5 hours on this today unlike yesterday". I think I accomplished both! #100daysofmusic #100daysproject #the100dayproject
Replied to https://aaronparecki.com/2016/12/21/7/100days
post from
Currently debating between #100DaysOfMusic or #100DaysOfIndieWeb for my #100Days project. #100DaysOfMusic - The goal would be to write a short 10-20 second song every day. The goal would be to write something that's "finished" enough to be able to use it as a podcast or video intro song, so it doesn't have to be long, but has to sound decent....

This sounds like a really great challenge either way! I am rooting for #100DaysOfIndieWeb because I learn so much about #IndieWeb from your stuff.

Thanks to our guest Terry Withers for makin’ it hot this week!

https://wehavetoask.com/episodes/2016-12-20/

post from Do You Sweat The Small Stuff? • Ep 29 - Terry Withers
Jonathan and Marty sit down with scientist Terry Withers to discuss his research into human sweat. The team answers audience advice questions.
Replied to https://aaronparecki.com/2016/12/18/18/folding-bike
post from
Bikey friends: talk me out of getting this used Brompton folding bike to replace my stolen bike. It's a 2016 M6L from the Clever Cycles rental stock, on sale for $1349 down from the normal price of $1812. It has the Dynamo hub already built in. It seems like a really good deal, and from everything I've heard, Bromptons are...

I love my Brompton. They fold so small that I typically carry it in wherever I ride it. It’s amazing for multi-modal travel; I’ve taken it on buses, trains, taxis, and ferries.

Great write-up by Aaron Parecki about web reviews, the dangers of letting individual companies control standards.

https://aaronparecki.com/2016/12/17/8/owning-my-reviews

post from Why Microformats? Owning My Reviews
Back in October, I wrote a bunch of short mini-reviews on products and services that I use regularly. I published them all on a single page called "Favorite Things". In the past, I've written a couple of reviews on Amazon and then copied them to my website as a blog post.I decided it was time to be able to publish...
📕 Finished reading Resilient Web Design by Jeremy Keith
Replied to https://twitter.com/evernote/status/808771784367542272
post from
Hi, Joe. We get that not everyone feels the same about machine learning. If you'd prefer, you may opt out. http://bit.ly/2hs7NEX

It’s overdue, but the new TOS pushed me to act. Tonight I liberated my Evernote content. Likely will import into laverna.cc.

HWC Baltimore 12/14 Wrap-Up

Baltimore's final Homebrew Website Club meet up of 2016 happened at the Digital Harbor Foundation Tech Center on 12/14/2016. We had a nice quiet writing hour followed by discussion and demos!

Notes from the "broadcast" portion of the meetup:

Jonathan Prozzi (co-organizer) - Completed 2017-01-01 commitments of h-feed and h-entry markup. Working on webmentions setup. Also figuring out separate post types (e.g. status vs articles). Also settled on a permalink and taxonomy structure. Documenting process of making an indieweb-compatible Hugo theme. Added self to /hugo.

Jean-Carlos Cedré - Has an older website. Wants to revisit it and get portfolio pieces on there. Might want to move off of Wordpress.

Marty McGuire (co-organizer) - Completed image-related 2017-01-01 commitments. Needs to write up some new ones. Working on owning his own events. Event posts with photos now get a nice Facebook-inspired poster look to them. Added upcoming events section to home page. Wants to add RSVPs to that list. Also working on a new micropub client for creating and RSVPing to events. Discussion led to the name suggestion "Slater".

Adam Bouhmad - been focusing on classwork, Docker, GitHub issues. In 2017 wants to get back to working on a malware collection site, starting with a UI design.

Here's the customary HWC group selfie:

Left-to-right: Jean Carlos, Jonathan, Adam, Marty

We also took the time to tune in with the Virtual HWC meetup. Sorry to all the folks in quiet time that had to listen to us have our social time. :}

We are excited about the turnout and the discussions at HWC Baltimore so far! We hope you'll join us for the first HWC Baltimore of 2017 on 1/25!

BIG's Friday Show 12/16

Single Carrot Theatre 2600 N Howard St, BaltimoreMD, 21218

Marvel at the improv stylings and comedic flourishes of BIG’s best performers.

Tonight’s show featuring: Hostel, Heather w/Strangers, Dad Joke, GUS

Tickets available here: http://www.eventbrite.com/event/29649233656

🔁 Reposted https://adactio.com/journal/11608
post from Introducing Resilient Web Design
I wrote a thing. The thing is a book. But the book is not published on paper. This book is on the web. It’s a web book. Or “wook” if you prefer …please don’t prefer. Here it is: Resilient Web Design. It’s yours for free. Much of the subject matter will be familiar if you’ve seen my conference talks from...
★ Favorited https://adactio.com/notes/11609
post from
I wrote a web book. It’s called Resilient Web Design. It’s yours for free. I hope you like it. https://resilientwebdesign.com/

Hey! You’re already planning on coming to the Peak Sloth Podcast Network’s New Years Eve live podcasting event at the Single Carrot Theatre from 6-8pm on 12/31, right??

Sure, I know you’re excited about the chance to see live shows from The Digression Sessions Podcast and Hobo Radio, plus improv from the Baltimore Improv Group along with snacks and booze.

Let me add fuel to that fire because Jonathan and I will be putting on a live, improvised episode of We Have to Ask with EXTREME SPECIAL GUEST HEATHER MOYER!!

Did I mention that admission is free??

https://martymcgui.re/2016/12/06/221648/

post from

Single Carrot Theatre 2600 N Howard St, BaltimoreMD, 21218

2017: The Year of Peak Sloth - Live Podcasting Event
Join us for a night of live podcast recordings from We Have to Ask, The Digression Sessions and Hobo Radio and improv brought to you by the Baltimore Improv Group. 2016 has been a rough year filled with tragic celebrity deaths and awful headlines. It’s time to say so long so we can look to the future. It’s time to...

Thanks to our guest Jon Ulrich for putting the old in old school for this episode!

https://wehavetoask.com/episodes/2016-12-13/

post from How Do You Kick It Old School? • Ep 256 - William Winkle
Jonathan and Marty go even more old school than usual with guest William Winkle, whose memories extend back to WW I.

Great post from @aaronpk about his #IndieWeb setup. I should make one of these!

https://aaronparecki.com/2016/12/12/9/my-website

post from A Brief Intro to My Website Architecture
This is a description of all the pieces and tools that I use to post to my website and handle comments and responses. Many of the pieces are open source and/or based on open protocols that you can implement yourself.WritingI write posts using an app called Quill. It's an open source application that I wrote. I run a hosted version...
RSVP'd to an event https://martymcgui.re/2016/12/06/212756/
post from

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

Homebrew Website Club Baltimore Meetup 12/14
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...

I am goingto Homebrew Website Club Baltimore on 12/14!

Join us to work on your own website and take control over what you post online!

Can’t make it out physically? Homebrew Website Club also has a virtual meetup this time around!

Great writeup by http://jonathanprozzi.net/ about the positive effects of setting aside even an hour a month to learn and work on new things.

http://jonathanprozzi.net/2016/12/homebrew-website-club-reflections/

2017: The Year of Peak Sloth - Live Podcasting Event

Single Carrot Theatre 2600 N Howard St, BaltimoreMD, 21218

Join us for a night of live podcast recordings from We Have to Ask, The Digression Sessions and Hobo Radio and improv brought to you by the Baltimore Improv Group.

2016 has been a rough year filled with tragic celebrity deaths and awful headlines. It’s time to say so long so we can look to the future. It’s time to look to 2017: The Year of Peak Sloth.

So before you head out to drink and party 2016 away, join the Peak Sloth Podcast Network for a live podcast event at the Single Carrot Theatre!

Admission is free! Beverages may be available! Live music may be part of the show! Celebrity guests may be interviewed! The only way to find out is to be there!

Homebrew Website Club Baltimore Meetup 12/14

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/2016-12-14-homebrew-website-club

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

Replied to https://twitter.com/mkphenicie/status/806314368464015360
post from
Kristen is a great podcast guest and real-life gem!

@mkphenicie It’s so true! I can’t believe she’s in our improv troupe!

Thanks to our guest this week Kristin L. McKenzie for teaching us that there are always more ways to share.

https://wehavetoask.com/episodes/2016-12-06/

post from Do You Care Enough To Share? • Ep 72- LeeAnn of P.E.T.I.
Jonathan and Marty chat with LeeAnn of PETI about her mission to make humans more tolerant of our friends with more than 4 legs. A question from listener Alex B leads to sharing disappointing ride-share stories.

Rescuing my tiny videos from Vine

Ah, Vine. I loved the idea of a platform for sharing tiny video moments. It was truly a platform for some really amazing things.

Personally, I didn't make very many posts. Most that I did centered around my involvement with the BlinkyTape Kickstarter that we ran at the height of my awareness of Vine. So, while I had not thought about Vine for quite some time, I was disappointed to hear that it was shutting down the ability to upload.

Announcement like these tend to trigger my site-deaths reflex, so although they have announced plans for some kind of easy export mechanism, I thought: why wait?

This post documents the haphazard, poke-it-with-a-stick-and-see-what-happens method by which I rescued my Vines and their metadata to post them on my own site.

Getting all my Vine URLs

First up, I needed a way to get all of the permalinks to my Vines. The first stumbling block here was that Vine uses an "infinite scroll" technique that shows only the latest vines until you scroll down the page, triggering it to load more for display. Checking out the source of the page, I realized that I could simply scroll to the bottom of my List view to get all the Vine metadata loaded into the page, and I could then open up the Developer Console for Chrome, and drop in a short one-liner to print out all the URLs for my permalinks:

> console.log($('li.permalink a').map((i,el) => el.href));
["https://vine.co/v/hUt0rDdrlK6", "https://vine.co/v/hDIMuqQgtU0", ...

After copying this to a text file and editing out all the quotes and commas, I had a simple text file with the permalink for one of my Vines on each line.

Fetching the HTML

Next up, I grabbed the HTML for each Vine's permalink with a simple script:

#!/usr/bin/env bash
# Usage: ./fetch_htmls.sh < some_file_full_of_vine_urls.txt
while read url
do # each vine has a unique id after the last '/' character
id=`echo "${url}" | cut -d'/' -f 5`
html_file="htmls/${id}"
if [ ! -f "${html_file}" ]; then
wget -O "${html_file}" "${url}"
sleep 5
fi
done

Extracting the Useful Data

It's often "enough" to have all the HTML on a page - you can write a script to parse the HTML, select out various attributes and text values from the elements on the page, and grab whatever data you need. In the case of Vine, they make it a little easier. Each HTML page has an embedded <script> element in JSON-LD format:

After playing with the data in there a bit, I wrote a quick script using the pup command line tool to do parse the HTML and extract the (valid parts of the) JSON-LD chunks from each HTML page.

#!/usr/bin/env bash
# Usage: ./extract_ld_json.sh htmls/*
# Extract <script type="application/ld+json"> content from Vine
# page, filtering out attributes that are not valid JSON.
#
# - description - invalid quoting and redundant with author and name values
# - duration - invalid non-value
for html_file in "$@"
do
id=`basename "${html_file}"`
jsonld_file="json_lds/${id}"
if [ ! -f "${jsonld_file}" ]; then
pup 'script[type="application/ld+json"] text{}' < "${html_file}" \
| grep -v '"description":' \
| grep -v '"duration" :' \
> "${jsonld_file}"
fi
done

These JSON-LD chunks gave me all the metadata I cared about, including URLs to the media that I wanted to save: the videos, their thumbnail images, and the avatar image that accompanied each post. So, it was time to write tools to extract those, too. One of my recent favorite command line tools is jq aka "sed for JSON", so I used that to extract the URLs I needed to fetch all the media.

The videos:

#!/usr/bin/env bash
# Usage: ./fetch_videos.sh json_lds/*
for jsonld_file in "$@"
do
id=`basename "${jsonld_file}"`
video_file="videos/${id}.mp4"
if [ ! -f "${video_file}" ]; then
video_url=`jq -r '.contentUrl' < "${jsonld_file}"`
wget -O "${video_file}" "${video_url}"
sleep 6
fi
done

The thumbnails:

#!/usr/bin/env bash
# Usage: ./fetch_thumbs.sh json_lds/*
for jsonld_file in "$@"
do
id=`basename "${jsonld_file}"`
thumb_file="thumbs/${id}.jpg"
if [ ! -f "${thumb_file}" ]; then
thumb_url=`jq -r '.thumbnailUrl' < "${jsonld_file}"`
wget -O "${thumb_file}" "${thumb_url}"
sleep 6
fi
done

And finally, the avatars. I really could have just manually saved my one avatar image, but that is not my way. Instead, this script finds every avatar URL, hashes that URL to get a filename-safe name, and fetches it (once):

#!/usr/bin/env bash
# Usage: ./fetch_avatars.sh json_lds/*
for jsonld_file in "$@"
do
avatar_url=`jq -r '.author .image' < "${jsonld_file}"`
id=`echo "${avatar_url}" | shasum - | awk '{ print $1; }'`
avatar_file="avatars/${id}.jpg"
if [ ! -f "${avatar_file}" ]; then
wget -O "${avatar_file}" "${avatar_url}"
sleep 6
fi
done

Finally, it was time to synthesize all of this info to put these Vines on my own site. I currently use Jekyll to generate my website, so I wrote a pair of scripts to convert the JSON-LD data into Jekyll posts. First, a Python script that converts a single Vine into a Jekyll post with YAML metadata:

#!/usr/bin/env python
import json
import sys
import yaml
import os
with open(sys.argv[], 'r') as f:
jsonld = json.load(f, )
vineid = os.path.basename(jsonld['url'])
post_meta = {
'date': jsonld['datePublished'],
'files': [ vineid + ".mp4" ],
'filemeta': {
(vineid + ".mp4"): {
'poster': (vineid + ".jpg")
}
},
'h': 'entry',
'syndication': [ jsonld['url'] ],
'vine_metadata': jsonld,
'updated': jsonld['datePublished']
}
content = jsonld['name']
print "---"
print yaml.safe_dump(post_meta)
print "---"
print ""
print content

And finally a shell script to run the Python converter over each JSON-LD file, save the resulting Jekyll post output in the appropriate place, and copy over the related media assets:

#!/usr/bin/env bash
# Usage ./vines_to_jekyll.sh json_lds/*
BASEDIR=~/me/martymcgui.re
for vine in "$@"
do
vineid=`basename "${vine}"`
vinedate=`jq -r '.datePublished' < "${vine}"`
filename="${BASEDIR}"/_posts/`date -j -f "%FT%H:%M:%S" "${vinedate}" +"%F-%H%M%S"`.md
asset_dir="${BASEDIR}"/_assets/posts/`date -j -f "%FT%H:%M:%S" "${vinedate}" +"%Y/%m/%d/%H%M%S"`
echo "${vine}"
mkdir -p "${asset_dir}"
cp videos/"${vineid}.mp4" "${asset_dir}"
cp thumbs/"${vineid}.jpg" "${asset_dir}"
python vine_to_jekyll.py "${vine}" > "${filename}"
done

At last, I created a Jekyll include to render the Vines out as HTML5 video elements, with the thumbnail as the poster image, visible play controls, and the obligatory feature of looping forever once started. My Jekyll theme is a bit out of scope for this post, but it pretty much looks like this:

{% capture poster %}
  {% if include.filemeta and include.filemeta.poster %}
    poster="{{ page | asset_path | append: include.filemeta.poster }}"
  {% endif %}
{% endcapture %}
<video loop controls style="width: 100%">
<source class="u-video" type="video/mp4" src="" />
</video>

What is the end result? How about some example posts?

While I am not particularly happy that Vine is seemingly closing down, I do enjoy data liberation projects like these. I learned a bit about how Vine was built, got to play with some neat tools, and I now own my Vines, having brought them into my own site. While I'm not in control of whether Vine works in the future, I do have control over the future of the videos that I posted there.

Was this useful to you? Let me know! I don't have my #indieweb comments system in place, yet, but you can hit me up on Twitter or Facebook and I'd love to read your thoughts!

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