49°F

Aaron Parecki

  • Articles
  • Notes
  • Photos

Articles

2017-01-15 Day 26: Tag tokens and publish date for Quill #100DaysOfIndieWeb
2017-01-14 Week in Review #100DaysOfIndieWeb
2017-01-14 Day 25: Automatically Fetching Reply Contexts for p3k #100DaysOfIndieWeb
2017-01-13 Day 24: Displaying Reply Context in p3k #100DaysOfIndieWeb
2017-01-12 Day 23: Open Sourcing my Timezone Library #100DaysOfIndieWeb
2017-01-11 Day 22: XRay Ready for Deployment #100DaysOfIndieWeb
2017-01-10 Day 21: Twitter Support for XRay #100DaysOfIndieWeb
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
← older
  • Day 26: Tag tokens and publish date for Quill #100DaysOfIndieWeb

    Last week, Barry Frost released Micropublish, a Micropub client written in Ruby. It's a very slick interface for posting a few kinds of posts. I noticed that his "category" field looked really nice, and discovered that he was using a Bootstrap plugin called "Token Field". Today I added this plugin to Quill, so now everywhere that you previously had to enter tags as comma-separated values, it's now using this "token field" UI.
    continue reading...
    1 like 1 reply 3 mentions
    Sun, Jan 15, 2017 11:22am -08:00 #quill #indieweb #100daysofindieweb
  • Week in Review #100DaysOfIndieWeb

    aaronparecki.comDay 18: I updated my reposts to show the full contents of the post I reposted rather than just the URL.Day 19: I updated my website to automatically fetch the contents of my reposted URLs when I make new reposts.Day 24: I updated my reply posts to be able to show the full contents of the post I'm replying to.Day 25: I updated my website to automatically fetch the contents of the posts I reply to.XRayDay 20: I added Instagram support to XRay, so now XRay returns data when given Instagram URLs.Day 21: I added Twitter support to XRay, although you need to pass your own OAuth keys to XRay in order for it to fetch tweets.Day 22: I updated a few things in XRay to make it easier to deploy to shared hosting, and simplified its dependencies.LibrariesDay 23: I published my timezone lookup tools as a standalone library, and updated XRay and Quill to use the library instead of the duplicated class.
    continue reading...
    Sat, Jan 14, 2017 10:48am -08:00 #100daysofindieweb #indieweb #xray #p3k
  • Day 25: Automatically Fetching Reply Contexts for p3k #100DaysOfIndieWeb

    Today I worked on automatically expanding the contents of my reply contexts whenever a new post is created. I also have a utility to fetch the reply context for older posts. I ran it for the first page of replies on my replies feed, and I'm super excited that they are looking pretty good now!
    continue reading...
    3 mentions
    Sat, Jan 14, 2017 10:36am -08:00 #100daysofindieweb #indieweb #p3k
  • Day 24: Displaying Reply Context in p3k #100DaysOfIndieWeb

    Following last week's work on displaying full repost content, I modified those templates to be used to display reply context in my reply posts.
    continue reading...
    3 mentions
    Fri, Jan 13, 2017 6:51pm -08:00 #100daysofindieweb #indieweb #p3k
  • Day 23: Open Sourcing my Timezone Library #100DaysOfIndieWeb

    Today I published my code for finding the timezone of a specific location as a standalone library.
    continue reading...
    3 mentions
    Thu, Jan 12, 2017 10:32am -08:00 #100daysofindieweb #indieweb #atlas #timezone #p3k
  • Day 22: XRay Ready for Deployment #100DaysOfIndieWeb

    Today I made a few changes to XRay to make it easier to deploy in more kinds of environments. I also removed a bunch of CSS/JS dependencies and simplified the UI a bit.
    continue reading...
    3 mentions
    Wed, Jan 11, 2017 10:19am -08:00 #xray #p3k #indieweb #100daysofindieweb #100daysofcode
  • Day 21: Twitter Support for XRay #100DaysOfIndieWeb

    Continuing yesterday's work, today I added support for parsing Twitter URLs to XRay.There were a couple tricks to make this work. I wanted to make sure that Tweets are always expanded to include the most data possible, and also wanted to avoid needing to make a bunch of HTTP requests. Scraping from the twitter.com website wasn't an option, since some of the data isn't available or would require additional HTTP calls to fetch. (For example I would have to fetch every t.co URL to expand them.) So I set to work using the Twitter API to fetch the tweets.
    continue reading...
    1 like 1 reply 3 mentions
    Tue, Jan 10, 2017 3:36pm -08:00 #100daysofindieweb #100daysofcode #indieweb #xray #twitter
  • 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
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