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
post from
Day 9. I don't really know what I was going for here. I had this tune in my head on the bike ride home from downtown this evening. This one only took an hour or so to jot down, since I wasn't going for any particular sound. The animation kind of sums it up. #100daysofmusic #100daysproject #the100dayproject

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!

It’s a Christmas Miracle™!

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

post from
What Jingles Your Bells? • Ep 12 - Santa Pat
Jonathan and Marty chat with a very special mall Santa.
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. I want to get back into writing music, since I've only done a tiny bit over the last couple years, and it helps to have a more concrete goal. The only w...

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 the best by far, despite being way more expensive.

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
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

RSVP'd to an event http://www.bigimprov.org/show/big-mainstage-performance-2/

Single Carrot Theatre BaltimoreMD

I am goingto BIG’s Friday Dec. 16th Show!

Come see Hostel strut our stuff with the help of special guest Charles Graham from Philadelphia, PA!

★ 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
2017: The Year of Peak Sloth - Live Podcasting Event

Single Carrot Theatre Baltimore, MD

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
RSVP'd to an event https://martymcgui.re/2016/12/06/212756/
post from
Homebrew Website Club Baltimore Meetup 12/14

Digital Harbor Foundation Tech Center Baltimore, MD

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/

post from
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.