58°F

Aaron Parecki

  • Articles
  • Notes
  • Photos

Articles

2017-01-09 Day 20: Instagram Support for XRay #100DaysOfIndieWeb
2017-01-08 Day 19: Automatically fetching reposted content #100DaysOfIndieWeb
2017-01-08 Ruby Magic, or why `params` is empty even when I don't set it
2017-01-07 Day 18: Showing Full Repost Content in p3k #100DaysOfIndieWeb
2017-01-06 Week in Review #100DaysOfIndieWeb
2017-01-06 Day 17: Documentation for Quill #100DaysOfIndieWeb
2017-01-05 Day 16: Improved Comments Display for p3k #100DaysOfIndieWeb
2017-01-04 Day 15: Tags, Slug and Post Status for Quill #100DaysOfIndieWeb
2017-01-03 Day 14: Posting to my Website from Alexa #100DaysOfIndieWeb
2017-01-02 Day 13: Curved Lines for Atlas Static Maps #100DaysOfIndieWeb
2017-01-01 Day 12: Whitelist and Blacklist for OwnYourGram import #100DaysOfIndieWeb
2016-12-31 Day 11: Simpler fonts #100DaysOfIndieWeb
2016-12-30 Week in Review #100DaysOfIndieWeb
2016-12-30 Day 10: HTML status pages for webmention.io #100DaysOfIndieWeb
2016-12-29 Day 9: Webmention form #100DaysOfIndieWeb
2016-12-28 Day 8: Pinned Posts #100DaysOfIndieWeb
2016-12-27 Day 7: Nicer sparklines for tag pages
2016-12-26 Day 6: Polling tiers for OwnYourGram #100DaysOfIndieWeb
2016-12-25 Day 5: Posting old photos from OwnYourGram #100DaysOfIndieWeb
2016-12-24 Day 4: Quill note UI improvements #100DaysOfIndieWeb
← older
  • Day 20: Instagram Support for XRay #100DaysOfIndieWeb

    XRay is my service that parses web pages and extracts information from them. Right now I mostly use it to parse comments, but now that I've been adding support for reposts, it's used there as well.Today I added support for XRay to extract data from Instagram URLs!This means anything that uses XRay will now return structured data when given an Instagram URL, just like how it parses h-entry and other Microformats. Unfortunately, Instagram does not provide timezone data for the published date, only a Unix timestamp. So if the photo is tagged at a location, then XRay will look up the appropriate timezone for that location and adjust the timezone of the published date accordingly!Here's what the parsed JSON looks like for this photo. Note that the timezone is set to East Coast because this photo was taken at MIT.{ "data":{ "type":"entry", "url":"https://www.instagram.com/p/BM4rGs-lApG/", "author":{ "type":"card", "name":"Aaron Parecki", "url":"http://aaronparecki.com/", "photo":"https://scontent.cdninstagram.com/t51.2885-19/s320x320/14240576_268350536897085_1129715662_a.jpg" }, "content":{ "text":"Here again" }, "photo":[ "https://scontent.cdninstagram.com/t51.2885-15/e35/14269001_1162908790471145_6084871298582839296_n.jpg?ig_cache_key=MTM4NTA0NjQ2MjAyNzc5NTAxNA%3D%3D.2" ], "location":[ "https://www.instagram.com/explore/locations/206258876/" ], "published":"2016-11-16T16:07:06-05:00" }, "refs":{ "https://www.instagram.com/explore/locations/206258876/":{ "type":"card", "name":"Massachusetts Institute of Technology (MIT)", "url":"https://www.instagram.com/explore/locations/206258876/", "latitude":42.360011410484, "longitude":-71.091869836761 } }}In addition to my website using this for reposts and comments, when I paste that URL into IRC, Loqi uses XRay to expand it and provide a little text preview.
    continue reading...
    1 like 1 reply 4 mentions
    Mon, Jan 9, 2017 9:25am -08:00 #100daysofindieweb #100daysofcode #indieweb #xray #instagram
  • Day 19: Automatically fetching reposted content #100DaysOfIndieWeb

    Yesterday, I updated my website to show the full contents of reposts. Today, I took that to the next step, and I now automatically fetch the contents of reposts when they are made. I also expanded the repost display to include showing the photo if I reposted a photo!
    continue reading...
    5 mentions
    Sun, Jan 8, 2017 3:29pm -08:00 #100daysofindieweb #p3k #indieweb
  • Ruby Magic, or why `params` is empty even when I don't set it

    I learned a very subtle Ruby trick today.The Ruby parser will create local variables for every variable that might be set in your code before any of it is run.irb(main):001:0> if false; x = 1; end
    continue reading...
    1 like 1 repost
    Sun, Jan 8, 2017 2:47pm -08:00 #ruby #sinatra
  • Day 18: Showing Full Repost Content in p3k #100DaysOfIndieWeb

    At the beginning of last year when I was working on rebuilding p3k, I made the decision to drop showing the full contents of my reposts in favor of launching the new site sooner. It's been bugging me for a long time, since it means that my reposts aren't really reposts at all, they're just a list of links.Today I took the first step in showing the full contents of my reposts. Since my posts are all based on mf2 property storage, I updated my templates to display the post like one of my posts if the "repost-of" property is an object rather than just a string.Now my reposts look like this!
    continue reading...
    1 like 6 mentions
    Sat, Jan 7, 2017 1:37pm -08:00 #indieweb #repost #p3k #100daysofindieweb
  • Week in Review #100DaysOfIndieWeb

    aaronparecki.comDay 11: I dropped the web font in favor of a handful of system fonts for various platforms.Day 13: I added support for drawing curved maps lines to Atlas, which I use to generate the maps on my site. Now my travel plans show a nice line for each flight leg.Day 16: I improved the display of comments on my posts, including displaying some basic HTML formatting from comments, autolinking comment text, and showing images.
    continue reading...
    Fri, Jan 6, 2017 11:39am -08:00 #100daysofindieweb #indieweb #quill #p3k #ownyourgram #alexa #teacup
  • Day 17: Documentation for Quill #100DaysOfIndieWeb

    Quill started out as a sample Micropub client with a lot of useful debugging information. As it's grown, I've been slowly adding more posting interfaces to Quill, and tweaking them to look less like a debugging tool and more like a real app. Instead, micropub.rocks has taken over as a more detailed debugging utility for building a Micropub endpoint, so I can now optimize Quill for being more user-friendly and less developer-focused. At IndieWebCamp Germany in 2015, I added a rich editor to Quill, inspired by the clean Medium interface. You can even use the Quill rich editor without being logged in! It will save the post to your browser's localstorage as a draft, and let you post it after you log in. I wanted to make an interface that anybody would feel comfortable writing in, and be able to show it to people without them first logging in, as an introduction to what it might look like to have nice writing applications that aren't tied to a specific backend like Medium.In order to help people get started with Quill, today I wrote some more documentation for it!When you're logged out and click the "publish" button, it prompts you to log in and links out to the documentation home page.
    continue reading...
    3 likes 1 repost 1 reply 3 mentions
    Fri, Jan 6, 2017 11:24am -08:00 #100daysofindieweb #quill #indieweb #100daysofcode
  • Day 16: Improved Comments Display for p3k #100DaysOfIndieWeb

    Today I started autolinking the text in comments on my website, and made a couple other minor improvements to how they look.Previously, links, @-names and hashtags were rendered as plaintext, so comments weren't clickable.
    continue reading...
    2 replies 3 mentions
    Thu, Jan 5, 2017 12:57pm -08:00 #p3k #indieweb #100daysofindieweb #100daysofcode
  • Day 15: Tags, Slug and Post Status for Quill #100DaysOfIndieWeb

    I've been using Quill to write all these #100DaysOfIndieWeb posts, which is a great way to find the pain points in the interface. After having written 14 articles in the last 14 days, the main thing I want to be able to do is start an article here in the Quill editor, save it as a draft to my website, then open up the raw HTML to make fine-grained edits, and only after I'm done, actually publish it.
    continue reading...
    1 like 1 repost 3 mentions
    Wed, Jan 4, 2017 3:52pm -08:00 #100daysofindieweb #100daysofcode #micropub #indieweb #quill
  • Day 14: Posting to my Website from Alexa #100DaysOfIndieWeb

    If you know me, you probably know that I log everything I eat and drink and post it to my website. A couple years ago, I wrote a small Pebble app that allowed me to quickly post common food and drink from my watch! Coincidentally around the time Pebble announced that FitBit had acquired their assets, my Pebble stopped working completely. This meant I no longer had a quick way to log food, and have to pull out my phone again to make log entries.This afternoon, Tantek suggested that I use my Amazon Alexa to post food and drink to my website instead! Of course this will only work when I'm at home, but it turns out that I'm home a lot of the time I'm eating and drinking. I also eat tacos every day, so it'd be great not to have to get out my phone during breakfast.So today, I launched Alexa integration for Teacup, the app I use to track my food.This was quite a challenging project given all the moving parts involved. I started by defining the voice interface I wanted to use. Interaction ModelVoice interactions for Alexa apps have to follow a pretty strict structure. Alexa doesn't support interpreting fully unstructured text, so app developers have to define patterns that Alexa can match on. Invoking any Alexa app involves first speaking the trigger word, followed by a keyword such as "ask" or "tell" followed by the app name, and then the pattern of text the app wants to match. So for Teacup, this results in speaking sentences such as:"Alexa, tell Teacup I drank coffee""Alexa, tell Teacup I ate tacos"This gets turned into what Amazon calls the "Interaction Model", and is a list of "slots" along with corresponding keywords for each slot, as well as writing out some sample sentences.LIST_OF_ACTIONS = ate | drankLIST_OF_FOOD = Coffee | Cocktail | Beer | Tacos | Mac and Cheese | ...Sample utterances:"I {Action} {Food}""I {Action} a {Food}"It isn't clear to me whether the list of keywords I provided is the complete set, because while I was testing, it managed to post the word "on" for the food, which is not in my list.AuthenticationThe next challenge was linking user accounts between Amazon users and Teacup users. Amazon provides great documentation on this, and thankfully it's all based on OAuth 2.0 rather than having made up some other model themselves. Essentially, the Amazon Alexa app on your phone acts as an OAuth 2.0 client, and you have to build an OAuth 2.0 server into your app that it works against. This is a pretty clever solution actually. Luckily, I'm pretty familiar with OAuth 2.0, so I was able to build this out pretty quickly.One thing struck me about Amazon's recommendations about building OAuth support in your app. They say that they'll launch your authorization URL from inside the iOS app, which is a known antipattern for apps in general. In Amazon's docs, it says "The user logs in using their normal credentials for your site." This is a really bad idea. You never want to train your users to enter their passwords into random apps. This is the whole reason we have OAuth in the first place!
    continue reading...
    5 likes 2 reposts 1 bookmark 1 reply 4 mentions
    Tue, Jan 3, 2017 5:23pm -08:00 #100daysofindieweb #indieweb #teacup #alexa #100daysofcode
  • Day 13: Curved Lines for Atlas Static Maps #100DaysOfIndieWeb

    Yesterday, Amy was asking if there was a library for drawing curved lines between two points on a map. She wants to use this for her travel posts, which say for example "Tokyo to Boston". We noticed that Facebook draws curved lines when they show a planned trip. Martijn was able to figure out how to reproduce this on Facebook consistently. You have to start by creating a "checkin" post, then add a "traveling to" activity to it. Notice that the line from Portland to Seattle is curved rather than straight, although it doesn't strictly follow a Great Circle line either.
    continue reading...
    3 likes 2 reposts 2 replies 2 mentions
    Mon, Jan 2, 2017 2:35pm -08:00 #indieweb #atlas #maps #100daysofindieweb #100daysofcode
  • Day 12: Whitelist and Blacklist for OwnYourGram import #100DaysOfIndieWeb

    Today I added some additional settings to OwnYourGram. You can now configure a whitelist and/or blacklist of keywords to control which of your Instagram posts are imported to your website.
    continue reading...
    3 mentions
    Sun, Jan 1, 2017 9:28am -08:00 #ownyourgram #indieweb #100daysofindieweb
  • Day 11: Simpler fonts #100DaysOfIndieWeb

    The other day I read a pretty funny blog post called "10 things I learned making the fastest site in the world". It's a little tongue in cheek, but overall has some good tips. One that caught my attention was the section on using web fonts.
    continue reading...
    2 mentions
    Sat, Dec 31, 2016 1:58pm -08:00 #indieweb #p3k #100daysofindieweb #design
  • Week in Review #100DaysOfIndieWeb

    Webmention.ioDay 3: The avatars for comments/likes/etc that Webmention.io processes will now always be 256 pixels maximum. This avoids showing potentially large images shrunk down when displaying comments.Day 10: HTML status pages for webmention.io 
    continue reading...
    1 like 2 reposts 2 replies 1 mention
    Fri, Dec 30, 2016 2:18pm -08:00 #100daysofindieweb #indieweb #webmention #quill #p3k
  • Day 10: HTML status pages for webmention.io #100DaysOfIndieWeb

    Yesterday I added a Webmention form at the bottom of my posts. If you used this form, it would show you a "check status" link after accepting the Webmention request. My Webmentions are all handled by webmention.io, and its status URLs return a JSON response. This isn't particularly friendly when someone views one of these URLs in a browser, since they just see a raw JSON blob.Today I updated webmention.io to return all responses in HTML if they're made from a browser. It checks to see if there is text/html in the Accept header, and returns HTML if so, otherwise returns JSON as normal. Now when you view one of these status links, you'll see something like this.
    continue reading...
    3 mentions
    Fri, Dec 30, 2016 1:21pm -08:00 #100daysofindieweb #indieweb #webmention
  • Day 9: Webmention form #100DaysOfIndieWeb

    I finally brought back the Webmention form on my website! At the bottom of my posts, you'll see a Webmention form now!
    continue reading...
    1 like 1 reply 4 mentions
    Thu, Dec 29, 2016 9:27am -08:00 #100daysofindieweb #indieweb #webmention
  • Day 8: Pinned Posts #100DaysOfIndieWeb

    I've never really been a fan of using pinned posts on my Twitter profile, so I didn't expect this would be something I wanted on my own website. On my own home page I can just write whatever I want above my posts, so I don't really need "pinned posts" there either. However I just found a use for pinned posts, but not on my home page!I've been sharing the link to my 100 days tags with people as a way to share the content quickly. I wanted to be able to have a little intro post above the list of posts, and I realized that "pinned posts" matched the pattern of what I wanted pretty nicely! So now, on tag and channel pages on my site, I can mark a post as "pinned" and it will always show up on top! The first post I've pinned is on my #100DaysOfIndieWeb tag page.
    continue reading...
    4 mentions
    Wed, Dec 28, 2016 9:06am -08:00 #pinned #100daysofindieweb #p3k #indieweb
  • Day 7: Nicer sparklines for tag pages

    A while ago, inspired by @adactio, I had added sparklines to my home page and tag pages. After having them for a while, I realized that my tag pages would look better as sparkline bar charts instead of as a plain line.The lines looked fine for tags that had a lot of data, but didn't look good when there were only a few data points.
    continue reading...
    5 mentions
    Tue, Dec 27, 2016 2:37pm -08:00 #indieweb #100daysofindieweb
  • Day 6: Polling tiers for OwnYourGram #100DaysOfIndieWeb

    Previously, OwnYourGram would check all users' Instagram feeds once an hour. I changed it to have four polling tiers, and the interval for the top tier is every 15 minutes now. This means people who post lots of photos will now see their photos on their site sooner, and because of the tiered approach, I won't be wasting resources on feeds that post infrequently.The four tiers are:Every 15 minutes (on the 0, 15, 30 and 45 minute mark) - 11 usersEvery hour (5 minutes after the hour) - 12 usersEvery 6 hours (at 00:10, 06:10, 12:10, 18:10 UTC) - 11 usersOnce a day (at 01:10 UTC) - 38 usersUsers are sorted into tiers based on the number of photos posted in the last 14 days. The more you post, the more often OwnYourGram checks your feed! If your Micropub endpoint returns an error, then you're bumped down a tier. If you're at the lowest tier and there's an error, then polling will be disabled completely until you log back in.Thanks to snarfed for suggesting the tiered approach!
    continue reading...
    2 mentions
    Mon, Dec 26, 2016 10:36am -08:00 #ownyourgram #100daysofindieweb #indieweb
  • Day 5: Posting old photos from OwnYourGram #100DaysOfIndieWeb

    I finished two updates to OwnYourGram today.There is a new page when you log in where you can see a list of your 20 most recent photos on Instagram, check whether they've been posted to your website already, and re-post any if you need to!
    continue reading...
    2 mentions
    Sun, Dec 25, 2016 10:24am -08:00 #100daysofindieweb #indieweb #ownyourgram
  • Day 4: Quill note UI improvements #100DaysOfIndieWeb

    Knocked out a couple of minor UI improvements to Quill this morning. Previously, the reply context field would show the whole note, so super long notes or blog posts would take over the whole screen. (Issue 62)
    continue reading...
    1 like 3 mentions
    Sat, Dec 24, 2016 9:52am -08:00 #100daysofindieweb #indieweb #quill
older

Hi, I'm Aaron Parecki, Director of Identity Standards at Okta, and co-founder of IndieWebCamp. I maintain oauth.net, write and consult about OAuth, and participate in the OAuth Working Group at the IETF. I also help people learn about video production and livestreaming. (detailed bio)

I've been tracking my location since 2008 and I wrote 100 songs in 100 days. I've spoken at conferences around the world about owning your data, OAuth, quantified self, and explained why R is a vowel. Read more.

  • Director of Identity Standards at Okta
  • IndieWebCamp Founder
  • OAuth WG Editor
  • OpenID Board Member

  • 🎥 YouTube Tutorials and Reviews
  • 🏠 We're building a triplex!
  • ⭐️ Life Stack
  • ⚙️ Home Automation
  • All
  • Articles
  • Bookmarks
  • Notes
  • Photos
  • Replies
  • Reviews
  • Trips
  • Videos
  • Contact
© 1999-2025 by Aaron Parecki. Powered by p3k. This site supports Webmention.
Except where otherwise noted, text content on this site is licensed under a Creative Commons Attribution 3.0 License.
IndieWebCamp Microformats Webmention W3C HTML5 Creative Commons
WeChat ID
aaronpk_tv