fix: myriad typos and issues
This commit is contained in:
parent
21a158602a
commit
be92f3bdf0
64 changed files with 107 additions and 104 deletions
.eleventyignorereferrals.md
.husky
.idea/inspectionProfiles
config
src
_data
posts
2013
blitzen-trapper-ever-loved-once.mdbombino-and-hanni-el-khatib-at-the-santa-monica-pier.mdhow-the-head-and-the-heart-made-organic-music.mdlisten-okkervil-river-the-silver-gymnasium.mdnew-arcade-fire-album-is-epic-james-murphy-says.mdpublishing-to-kirby-using-drafts-workflows.mdthe-silver-gymnasium.mdturns-out-your-kids-really-did-love-that-music-you-played.mdwhy-millennials-are-ditching-cars-and-redefining-ownership.md
2014
external-links-and-redirects-in-statamic-navigation.mdfastmail-in-fluid-app.mdfastmail-sorting-using-aliases-plus-addressing.mdfront-on-email.mdleaving-google-apps-for-fastmail.mdstreaming-music-has-left-me-adrift.md
2015
backdoor-password-in-junipers-firewall-code.mdcadillac-for-your-thoughts.mdexploring-osx-mail-clients.mdmoving-to-bitbucket.mdsyncing-osx-app-preferences-dot-files.md
2016
2017
castro-v23-released.mdclearing-mod-pagespeed-cache.mdcomment-on-the-fccs-proposal-to-kill-net-neutrality.mddata-toxic-asset.mdinstalling-http2-ubuntu-16.04.mdiphone-spam-call-blockers.mdlawmakers-blast-fcc-net-neutrality-rollback.mdlawsuit-seeks-records-fcc-net-neutrality-discussions.mdsecuring-your-personal-devices-and-accounts.mdsenate-chooses-isps-over-customer-privacy.mdsenator-attacks-argument-for-net-neutrality-repeal.mdspotify-begins-to-gain-leverage-in-its-relationship-with-labels.mdthree-days-left-comment-fcc-net-neutrality-repeal.mdupdating-to-latest-git-ubuntu.md
2018
blocking-similar-number-spam-calls.mdca-net-neutrality-bill-back-on-track.mdfcc-strategically-delays-finalizing-net-neutrality-repeal.mdpanoply-announces-ad-targeting-for-podcasts.md
2021
2022
2023
a-safari-specific-guide-to-making-the-modern-web-suck-less.mdadding-client-side-rendered-webmentions-to-my-blog.mdautomate-syndicate-content-mastodon-eleventy.mdautomating-and-overengineering-my-now-page.mdautomating-rss-syndication-with-nextjs-github.mdbuilding-a-now-page-using-nextjs-and-social-apis.mdbuilding-my-now-page-using-eleventy.mdfastmail-handling-inbound-email-with-regex-filters-now-with-chatgpt.mdi-dont-want-streaming-music.mdlazy-select-based-pagination-eleventy.md
|
@ -1 +0,0 @@
|
|||
tina
|
|
@ -2,4 +2,4 @@
|
|||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
npx lint-staged
|
||||
npx --no -- commitlint --edit ${1}
|
||||
npx --no -- commitlint --edit "${1}"
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="CssUnknownProperty" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="myCustomPropertiesEnabled" value="false" />
|
||||
<option name="myIgnoreVendorSpecificProperties" value="true" />
|
||||
<option name="myCustomPropertiesList">
|
||||
<value>
|
||||
<list size="0" />
|
||||
</value>
|
||||
</option>
|
||||
</inspection_tool>
|
||||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
|
@ -4,9 +4,8 @@ module.exports = {
|
|||
artist: (media) =>
|
||||
`https://cdn.coryd.dev/artists/${media.replace(/\s+/g, '-').toLowerCase()}.jpg`,
|
||||
album: (media) => {
|
||||
const img = !ALBUM_DENYLIST.includes(media.name.replace(/\s+/g, '-').toLowerCase())
|
||||
return !ALBUM_DENYLIST.includes(media.name.replace(/\s+/g, '-').toLowerCase())
|
||||
? media.image[media.image.length - 1]['#text']
|
||||
: `https://cdn.coryd.dev/artists/${media.name.replace(/\s+/g, '-').toLowerCase()}.jpg`
|
||||
return img
|
||||
},
|
||||
}
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
const { DateTime } = require('luxon')
|
||||
|
||||
module.exports = (collection) => {
|
||||
if (!collection || !collection.length) return ''
|
||||
return collection[0].publishedAt
|
||||
|
|
|
@ -2,7 +2,7 @@ const EleventyFetch = require('@11ty/eleventy-fetch')
|
|||
|
||||
module.exports = async function () {
|
||||
const MUSIC_KEY = process.env.API_KEY_LASTFM
|
||||
const url = `http://ws.audioscrobbler.com/2.0/?method=user.gettopalbums&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const url = `https://ws.audioscrobbler.com/2.0/?method=user.gettopalbums&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const res = EleventyFetch(url, {
|
||||
duration: '1h',
|
||||
type: 'json',
|
||||
|
|
|
@ -10,6 +10,5 @@ module.exports = async function () {
|
|||
fetchOptions: { headers },
|
||||
}).catch()
|
||||
const feed = await res
|
||||
const articles = feed.feed.splice(0, 5)
|
||||
return articles
|
||||
return feed.feed.splice(0, 5)
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ const EleventyFetch = require('@11ty/eleventy-fetch')
|
|||
|
||||
module.exports = async function () {
|
||||
const MUSIC_KEY = process.env.API_KEY_LASTFM
|
||||
const url = `http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const url = `https://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const res = EleventyFetch(url, {
|
||||
duration: '1h',
|
||||
type: 'json',
|
||||
|
|
|
@ -5,6 +5,6 @@ title: Blitzen Trapper - 'Ever Loved Once'
|
|||
tags: ['music']
|
||||
---
|
||||
|
||||
[I'm not quite sure what to make of this new track.](http://www.rollingstone.com/music/news/blitzen-trapper-visit-old-memories-in-ever-loved-once-song-premiere-20130730) It's a mellow, well-written song that's consistent with Blitzen Trapper's past material but it doesn't quite make the connection that their previous hits did.<!-- excerpt -->
|
||||
[I'm not quite sure what to make of this new track.](http://www.rollingstone.com/music/news/blitzen-trapper-visit-old-memories-in-ever-loved-once-song-premiere-20130730) It's a mellow, well-written song that's consistent with Blitzen Trapper's past material, but it doesn't quite make the connection that their previous hits did.<!-- excerpt -->
|
||||
|
||||
The production feels a bit light and monotonous but I don't think that's what feels off here. I'm curious to hear what the rest of the album sounds like but I'm not quite sure where to set my expectations for it.
|
||||
The production feels a bit light and monotonous, but I don't think that's what feels off here. I'm curious to hear what the rest of the album sounds like, but I'm not quite sure where to set my expectations for it.
|
||||
|
|
|
@ -5,7 +5,7 @@ title: Bombino and Hanni El Khatib at the Santa Monica Pier
|
|||
tags: ['music']
|
||||
---
|
||||
|
||||
The most recent entry in to the Santa Monica Pier's Twilight Concert series featured Bombino and Hanni El Khatib performing to a packed crowd on the pier that spilled out on to the beach.<!-- excerpt --> The weather and setting was picturesque, though Bombino's opening set was lackluster. I wasn't familiar with their music but it consisted of a jangly guitar melody, bouncy drum beat and slightly varied tempos.
|
||||
The most recent entry in to the Santa Monica Pier's Twilight Concert series featured Bombino and Hanni El Khatib performing to a packed crowd on the pier that spilled out on to the beach.<!-- excerpt --> The weather and setting was picturesque, though Bombino's opening set was lackluster. I wasn't familiar with their music, but it consisted of a jangly guitar melody, bouncy drum beat and slightly varied tempos.
|
||||
|
||||
Hanni El Khatib put on a strong, energetic performance (though the supporting guitarist/bassist were a bit dull). The sound was muddy but not overly hampered as the band ran through covers and tracks from both of his full length albums.
|
||||
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['music']
|
|||
|
||||
> Though the album itself won't see the light of day for weeks, the Seattle alt-folk, rock sextet has been testing out the new stuff on rapt audiences over the course of the past few months, letting the clap-happy "Shake" and the earnest build of "Another Story" sweep over curious audiences eager to hear what the band's been mulling over since "Lost In My Mind" became a playlist classic in 2011.
|
||||
|
||||
I cannot wait to get my hands on _Let's Be Still_ and finally see The Head and The Heart live.<!-- excerpt --> I've listened to their debut countless times since first discovering the band and, if "Shake" is any indication of the direction the band took on the new album, I will be doing doing the same as soon as _Let's Be Still_ is released.
|
||||
I cannot wait to get my hands on _Let's Be Still_ and finally see The Head and The Heart live.<!-- excerpt --> I've listened to their debut countless times since first discovering the band and, if "Shake" is any indication of the direction the band took on the new album, I will be doing the same as soon as _Let's Be Still_ is released.
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['music']
|
|||
|
||||
> "It all adds up to a project in which nostalgia isn't the end result, but rather an engine that drives artistic ambition to a degree that's almost overwhelming." — Stephen Thompson, NPR
|
||||
|
||||
"Okkervil River's _The Silver Gymnasium_ sounds every bit as good as I had hoped it would.<!-- excerpt --> It's a diverse, well developed and thoughtful musical journey through Will Sheff's childhood in the 80s. I can't wait to hear this on vinyl."
|
||||
"Okkervil River's _The Silver Gymnasium_ sounds every bit as good as I had hoped it would.<!-- excerpt --> It's a diverse, well-developed and thoughtful musical journey through Will Sheff's childhood in the 80s. I can't wait to hear this on vinyl."
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['music']
|
|||
|
||||
> It sounds like Arcade Fire in the way that only Arcade Fire sound like Arcade Fire, you know? It's really fucking epic. Seriously.
|
||||
|
||||
It took me longer than it should have to get in to Arcade Fire but I have been absolutely hooked of late.<!-- excerpt --> This album should be genuinely incredible (especially given the band's track record and Murphy's involvement).
|
||||
It took me longer than it should have to get in to Arcade Fire, but I have been absolutely hooked of late.<!-- excerpt --> This album should be genuinely incredible (especially given the band's track record and Murphy's involvement).
|
||||
|
|
|
@ -46,7 +46,7 @@ Title: Lorem ipsum dolor sit amet
|
|||
----
|
||||
Date: 08.20.2013
|
||||
----
|
||||
Link: http://google.com
|
||||
Link: https://google.com
|
||||
----
|
||||
Text: Consectetur adipiscing elit. Suspendisse imperdiet ullamcorper accumsan. Duis et rhoncus odio. Vestibulum rhoncus nisl diam, non malesuada odio condimentum in. Morbi ut nisi nec erat viverra blandit at dapibus nibh.
|
||||
```
|
||||
|
|
|
@ -5,7 +5,7 @@ title: The Silver Gymnasium
|
|||
tags: ['video', 'music']
|
||||
---
|
||||
|
||||
This is an extremely creative and well-executed move by Okkervil River to promote their new album, _The Silver Gymnasium_.<!-- excerpt --> The game is well developed and evokes immediate nostalgia if you've ever played any older, 8-bit video games.
|
||||
This is an extremely creative and well-executed move by Okkervil River to promote their new album, _The Silver Gymnasium_.<!-- excerpt --> The game is well-developed and evokes immediate nostalgia if you've ever played any older, 8-bit video games.
|
||||
|
||||
I can't wait to get my hands on the new album and see the band at The Wiltern in October.
|
||||
|
||||
|
|
|
@ -7,6 +7,6 @@ tags: ['music']
|
|||
|
||||
**[NPR:](http://www.npr.org/blogs/health/2013/09/05/219278386/turns-out-your-kids-really-did-love-that-music-you-played)**
|
||||
|
||||
> "The connection to parents' music isn't entirely surprising. Music plays a central role in child rearing, both in the songs children are taught at home and in school and in those heard more informally as part of the home environment. The songs parents choose to listen to reflect their taste, their values, their era."
|
||||
> "The connection to parents' music isn't entirely surprising. Music plays a central role in child-rearing, both in the songs children are taught at home and in school and in those heard more informally as part of the home environment. The songs parents choose to listen to reflect their taste, their values, their era."
|
||||
|
||||
Great read via NPR.<!-- excerpt --> Music means a great deal to me personally and, the older I get, the more I keep going back to the music I listened to with my parents as a kid. There's nothing quite like re-exploring old songs and albums that helped shape and guide my taste in music to where it is now.
|
||||
|
|
|
@ -5,7 +5,7 @@ title: Why Millennials are Ditching Cars and Redefining Ownership
|
|||
tags: ['culture']
|
||||
---
|
||||
|
||||
I wish ditching a car in Los Angeles were a workable option for me personally but, at the moment, I have an sixteen mile round trip, daily commute that isn't workable with public transit.<!-- excerpt -->
|
||||
I wish ditching a car in Los Angeles were a workable option for me personally but, at the moment, I have a sixteen-mile round trip, daily commute that isn't workable with public transit.<!-- excerpt -->
|
||||
|
||||
**[Via NPR](http://www.npr.org/2013/08/21/209579037/why-millennials-are-ditching-cars-and-redefining-ownership):**
|
||||
|
||||
|
|
|
@ -7,27 +7,26 @@ tags: ['development', 'Statamic']
|
|||
|
||||
I put together a fieldset and template that allows external links to be added to the navigation of Statamic sites alongside internal links.<!-- excerpt --> To implement this in your site, the fieldset should look like the following:
|
||||
|
||||
```
|
||||
```yaml
|
||||
title: Nav link
|
||||
fields:
|
||||
link:
|
||||
display: Link
|
||||
required: true
|
||||
default:
|
||||
type: text
|
||||
content:
|
||||
type: hidden
|
||||
fields:
|
||||
link:
|
||||
display: Link
|
||||
required: true
|
||||
default:
|
||||
type: text
|
||||
content:
|
||||
```
|
||||
|
||||
This fieldset should be accompanied by a template named link.html which will need to be added to your site's theme. The contents of the template are simply Statamic's [redirect example](http://www.statamic.com/learn/documentation/tags/redirect).
|
||||
|
||||
Now you should be able to create link pages in your Statamic admin panel that can then be added to your site's navigation. The pages created in the panel should create page files that look like the following:
|
||||
|
||||
```
|
||||
```yaml
|
||||
title: Example link page
|
||||
fieldset: link
|
||||
template: link
|
||||
link: http://example.com
|
||||
link: https://example.com
|
||||
```
|
||||
|
||||
Is there an easier or more effective way to do this? [Let me know.](mailto:hi@coryd.dev)
|
||||
|
|
|
@ -37,8 +37,8 @@ Configuring the dock counter for the Fluid instance is also fairly straightforwa
|
|||
|
||||
Are you currently using Fastmail in a Fluid instance? Or do you have a particular web client you prefer? I'm currently pretty happy with this setup and already have a few other ideas for URL handlers and scripts I plan on trying out.
|
||||
|
||||
If you don't use Fastmail, I would highly recommend it and you can [sign up for it here](http://www.fastmail.com/?STKI=11917049).
|
||||
If you don't use Fastmail, I would highly recommend it, and you can [sign up for it here](http://www.fastmail.com/?STKI=11917049).
|
||||
|
||||
**Edit (10.29.2014):** Updated the script to reflect Fastmail's new TLD (.com as opposed to .fm that they previously used; thanks to [Keith Bradnam for the heads up](http://keithbradnam.com).
|
||||
**Edit (10.29.2014):** Updated the script to reflect Fastmail's new TLD (.com as opposed to .fm that they previously used; thanks to [Keith Bradnam for the heads-up](http://keithbradnam.com).
|
||||
|
||||
**Edit (1.29.2017):** Updated the compose URL to reflect Fastmail's new compose routing. Thanks [Fred Barker](http://fredbarker.com)!
|
||||
**Edit (1.29.2017):** Updated the compose URL to reflect Fastmail's new compose routing. Thanks, [Fred Barker](http://fredbarker.com)!
|
||||
|
|
|
@ -7,7 +7,7 @@ tags: ['Email', 'Fastmail']
|
|||
|
||||
I subscribe to a number of mailing lists and, up until recently, had been using individual server-side rules to sort all incoming messages from those lists in to a specific folder. However, as the number of lists I was subscribed to grew, adding and maintaining individual rules became increasingly tedious.<!-- excerpt -->
|
||||
|
||||
To make managing messages from mailing lists easier, I've switched all of the mailing lists I subscribe to to an alias that is targeted at the specific folder I want them sorted in to. To set this up you need to create a new alias and target that alias at a specific folder using [plus addressing](https://www.fastmail.com/help/receive/addressing.html) as follows:
|
||||
To make managing messages from mailing lists easier, I've switched all the mailing lists I subscribe to an alias that is targeted at the specific folder I want them sorted in to. To set this up you need to create a new alias and target that alias at a specific folder using [plus addressing](https://www.fastmail.com/help/receive/addressing.html) as follows:
|
||||
|
||||
`fastmailusername+targetfolder@fastmail.com`
|
||||
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['Email']
|
|||
|
||||
> I can't help but agree. There are a number of great messaging solutions out right now but none are as ubiquitous, reliable or open as email. The chat / messaging space suffers from a lack of all of these attributes — chat is becoming increasingly fragmented as companies battle for dominance and revenue.<!-- excerpt -->
|
||||
|
||||
I would gladly trade Hangouts, GroupMe, WhatsApp, Line et al for a unified, open chat / messaging standard.
|
||||
I would gladly trade Hangouts, GroupMe, WhatsApp, Line et al. for a unified, open chat / messaging standard.
|
||||
|
|
|
@ -5,7 +5,7 @@ draft: false
|
|||
tags: ['Email', 'Fastmail', 'Google']
|
||||
---
|
||||
|
||||
I recently began a process of re-evaluating the web services I use, the companies that provide them and an evaluation of where I store important data. I had used Google services extensively with Gmail handling my email, my contacts synced through Google contacts, calendars in Google calendar and documents in a Google Drive (I had used Google Reader extensively but switched to a [Fever](http://feedafever.com/ 'Fever Red hot. Well read.') installation following Reader's demise).<!-- excerpt --> While Google's services are world class, it became increasingly clear to me that if was not in my interest to store significant amounts of personal data with a company that has a financial interest in profiting from that information.
|
||||
I recently began a process of re-evaluating the web services I use, the companies that provide them and an evaluation of where I store important data. I had used Google services extensively with Gmail handling my email, my contacts synced through Google contacts, calendars in Google calendar and documents in a Google Drive (I had used Google Reader extensively but switched to a [Fever](http://feedafever.com/ 'Fever Red hot. Well read.') installation following Reader's demise).<!-- excerpt --> While Google's services are world-class, it became increasingly clear to me that if was not in my interest to store significant amounts of personal data with a company that has a financial interest in profiting from that information.
|
||||
|
||||
I wanted to replace the free services I was using with comparable services from companies whose interests we're aligned with their users (whose users were their customers -- not advertisers) and who had a clear business model (they provide a service their users pay for).[^1]
|
||||
|
||||
|
@ -49,11 +49,11 @@ Finally, you will also need to set up DKIM signing for your outgoing email. Fast
|
|||
|
||||
While Fastmail provides an outstanding email experience, they do not currently support CardDav syncing for contacts ([CalDav support is currently in beta](https://www.fastmail.com/help/quick_tours_setting_up_domain.html 'Quick Tours - How to Use Your Own Domain') ). It is worth noting that Fastmail has a [CardDav](https://www.fastmail.help/hc/en-us/articles/1500000278342-Server-names-and-ports#contacts 'Address Book - LDAP Access') server that allows you to store contacts associated with your mail account (with an option to add people you correspond with automatically), but the server is read-only.
|
||||
|
||||
For now I'm using iCloud to sync my calendars and contacts and will weigh Fastmail's options for each when full support arrives. I'm currently leaning towards sticking with iCloud rather than adopting Fastmail's solutions.[^3] I didn't, admittedly, explore a host of options for calendar and contact syncing outside of iCloud. I use iCloud for a handful of other things and adopting sync services from yet another party seemed clunky.
|
||||
For now, I'm using iCloud to sync my calendars and contacts and will weigh Fastmail's options for each when full support arrives. I'm currently leaning towards sticking with iCloud rather than adopting Fastmail's solutions.[^3] I didn't, admittedly, explore a host of options for calendar and contact syncing outside of iCloud. I use iCloud for a handful of other things and adopting sync services from yet another party seemed clunky.
|
||||
|
||||
**Fastmail so far**
|
||||
|
||||
I've been using Fastmail since the end of November and couldn't be happier with it. The service has been extremely reliable (I haven't noticed a single instance of downtime). It's also been nice to use a traditional IMAP implementation after having used Google's quirky implementation for so long. Fastmail doesn't have the host of services Google provides, but it is a bullet proof email provider that I feel I can trust with my data which was exactly what I was looking to in switching[^4]
|
||||
I've been using Fastmail since the end of November and couldn't be happier with it. The service has been extremely reliable (I haven't noticed a single instance of downtime). It's also been nice to use a traditional IMAP implementation after having used Google's quirky implementation for so long. Fastmail doesn't have the host of services Google provides, but it is a bulletproof email provider that I feel I can trust with my data which was exactly what I was looking to in switching[^4]
|
||||
|
||||
**Notes**
|
||||
|
||||
|
@ -67,5 +67,5 @@ Have you moved to Fastmail? Are you thinking of doing so? [Let me know your thou
|
|||
|
||||
[^1]: My interest in this idea, specifically was sparked by this blog post by Marco Arment: [Let us pay for this service so it won’t go down](http://www.marco.org/2011/04/05/let-us-pay-for-this-service-so-it-wont-go-down 'Let us pay for this service so it won’t go down – Marco.org')
|
||||
[^2]: I had previously consolidated all of my old email accounts in to my Google Apps account via forwarding and by checking them via IMAP through Gmail.
|
||||
[^3]: I currently use the first-party mail clients on both iOS and OSX so not having contacts and calendars synced with Fastmail is really only an issue when I the Fastmail web interface (which isn't all that frequently). For now I've been manually uploading vCard files to Fastmail which is clunky, but not all that annoying. I _do_ miss being able to create events by clicking on parsed text (which Google Apps supported), but not all that much.
|
||||
[^3]: I currently use the first-party mail clients on both iOS and OSX so not having contacts and calendars synced with Fastmail is really only an issue when in the Fastmail web interface (which isn't all that frequently). For now, I've been manually uploading vCard files to Fastmail which is clunky, but not all that annoying. I _do_ miss being able to create events by clicking on parsed text (which Google Apps supported), but not all that much.
|
||||
[^4]: If you do get tripped up switching from another provider, Fastmail does have extensive documentation. [You can also feel free to get in touch](mailto:hi@coryd.dev).
|
||||
|
|
|
@ -9,7 +9,7 @@ tags: ['music']
|
|||
|
||||
> When getting into a band became as easy as typing its name into a search box, particular musical tastes lost their function as signifiers of commitment. What you listened to ceased to be a measure of how much you cared and became a mere list of what you liked.
|
||||
|
||||
I used to be (and suppose I still am — to some extent) a fan of heavy metal. Almost all of the bands I listened to released records through small labels or independently with small print runs for each release being the norm. At the time, half the fun was not only finding new bands but actually _finding_ their releases so you could even listen to them. No band is all that great if everyone can listen to them and all that — exclusivity is king and all that (there was a sense of ownership or being in the know that came along with finding a new band and being able to refer fans of similar music to them).
|
||||
I used to be (and suppose I still am — to some extent) a fan of heavy metal. Almost all the bands I listened to released records through small labels or independently with small print runs for each release being the norm. At the time, half the fun was not only finding new bands but actually _finding_ their releases, so you could even listen to them. No band is all that great if everyone can listen to them and all that — exclusivity is king and all that (there was a sense of ownership or being in the know that came along with finding a new band and being able to refer fans of similar music to them).
|
||||
|
||||
Streaming services have eroded a lot of the excitement inherent in the old process of discovering new music. Now you can follow playlists or immediately stream just about anything anyone recommends to you (there are some notable exceptions — one of my favorite bands, Canadian punk act [NoMeansNo](http://www.nomeanswhatever.com), only has a greatest hits compilation distributed digitally). As silly as it is, I get less excited about finding new bands now and I tend to over-listen to releases I'm excited about, burn out on them and move on. As fans, we're less invested in what we're listening to because we didn't make the effort to discover it and the financial investment in a physical release or digital download to really attach us to it. Sure, we _are_ paying for music inasmuch as paying a [Spotify](http://spotify.com) or Beats is paying for access to music ... but we're not directly supporting artists by buying those releases, by seeing the artwork, by having to go through the tea ceremony of pulling out a vinyl record and putting it on a turntable.
|
||||
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['politics', 'security']
|
|||
|
||||
> On December 17, Juniper Networks issued an urgent security advisory about "unauthorized code" found within the operating system used by some of the company's NetScreen firewalls and Secure Service Gateway (SSG) appliances. The vulnerability, which may have been in place in some firewalls as far back as 2012 and which shipped with systems to customers until late 2013, allows an attacker to gain remote administrative access to systems with telnet or ssh access enabled.<!-- excerpt -->
|
||||
|
||||
This is exactly why creating back doors in to encryption is a really bad thing. We don't need [a 'Manhattan-like project'](http://arstechnica.com/tech-policy/2015/12/hillary-clinton-wants-manhattan-like-project-to-break-encryption/) to create more security holes like this one — if you create backdoors, even for legitimate purposes, you'll simply be increasing the likelihood that incidents like this will continue to happen.
|
||||
This is exactly why creating back doors in to encryption is an awful thing. We don't need [a 'Manhattan-like project'](http://arstechnica.com/tech-policy/2015/12/hillary-clinton-wants-manhattan-like-project-to-break-encryption/) to create more security holes like this one — if you create backdoors, even for legitimate purposes, you'll simply be increasing the likelihood that incidents like this will continue to happen.
|
||||
|
|
|
@ -5,9 +5,9 @@ title: A Cadillac for Your Thoughts (2015 in music)
|
|||
tags: ['music']
|
||||
---
|
||||
|
||||
2015 has been a genuinely fantastic year for music (both live and recorded). That's very much a personal assessment of the year but music is an inherently personal thing. There's been a number of albums released or that I've discovered that I see myself listening to for a long time to come and I've attended a number of shows that left a lasting impression on me (for good reasons and bad).<!-- excerpt -->
|
||||
2015 has been a genuinely fantastic year for music (both live and recorded). That's very much a personal assessment of the year but music is an inherently personal thing. There's been a number of albums released or that I've discovered that I see myself listening to for a long time to come, and I've attended a number of shows that left a lasting impression on me (for good reasons and bad).<!-- excerpt -->
|
||||
|
||||
My wife and I saw EL VY play a beautifully rehearsed set at The Independent in front of what was, easily, the most obnoxious crowd we've been in (leave it to the other audience members from LA to earn that distinction). We saw our shared favorite band, The National, play a significant undersell for charity at The Troubadour in West Hollywood and we saw Sufjan Stevens perform a devastating rendition of _[Carrie and Lowell](https://geo.itunes.apple.com/us/album/carrie-lowell/id955572616?uo=4&app=itunes&at=11lvuD)_ in downtown.
|
||||
My wife and I saw EL VY play a beautifully rehearsed set at The Independent in front of what was, easily, the most obnoxious crowd we've been in (leave it to the other audience members from LA to earn that distinction). We saw our shared favorite band, The National, play a significant undersell for charity at The Troubadour in West Hollywood, and we saw Sufjan Stevens perform a devastating rendition of _[Carrie and Lowell](https://geo.itunes.apple.com/us/album/carrie-lowell/id955572616?uo=4&app=itunes&at=11lvuD)_ in downtown.
|
||||
|
||||
I spent the year taking deep dives in to EL VY's _[Return to the Moon](https://geo.itunes.apple.com/us/album/return-to-the-moon/id1020818018?uo=4&app=itunes&at=11lvuD)_, Turnover's _[Peripheral Vision](https://geo.itunes.apple.com/us/album/peripheral-vision/id980825405?uo=4&app=itunes&at=11lvuD)_, The Hotelier's _[Home, Like No Place Is There](https://geo.itunes.apple.com/us/album/home-like-noplace-is-there/id818552465?uo=4&app=itunes&at=11lvuD)_ and, strangely, Brand New's _[Deja Entendu](https://geo.itunes.apple.com/us/album/deja-entendu/id325226569?uo=4&app=itunes&at=11lvuD)_ (this was spurred by their stellar performance at Coachella more than anything). Seinabo Sey and Courtney Barnett both released exceptional albums as well (they're also both outstanding live performers).
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ tags: ['Fastmail', 'Email']
|
|||
|
||||
I've been using [Fastmail](https://www.fastmail.com/?STKI=11917049) for over a year now and have been exploring email clients the entire time I've been a subscriber. Until recently, the best client I've been able to find has been Fastmail's web app itself (whether that's in the browser or [in a Fluid instance](http://coryd.me/notes/fastmail-in-fluid-app).<!-- excerpt -->
|
||||
|
||||
I've tried [Airmail](http://airmailapp.com/), which is fine but isn't as flexible as I'd like (despite having a really extensive preferences pane) or as lightweight as I had hoped[^1]. I suffered through using OS X's Mail app and, though the [Gmailinator](https://github.com/nompute/GMailinator) plugin made it somewhat bearable, it frequently exhibited odd behavior that had me wondering just what the app was doing at times. I tried using [Mailmate](http://freron.com) on several occasions but would get hung up on the minimal nature of the app's designed and overwhelmed by it's flexibility and featureset.
|
||||
I've tried [Airmail](http://airmailapp.com/), which is fine but isn't as flexible as I'd like (despite having a really extensive preferences pane) or as lightweight as I had hoped[^1]. I suffered through using OS X's Mail app and, though the [Gmailinator](https://github.com/nompute/GMailinator) plugin made it somewhat bearable, it frequently exhibited odd behavior that had me wondering just what the app was doing at times. I tried using [Mailmate](http://freron.com) on several occasions but would get hung up on the minimal nature of the app's designed and overwhelmed by its flexibility and featureset.
|
||||
|
||||
I circled back to the Fastmail web app, but didn't love the idea of using a different web app for each of my email accounts (I have secondary Gmail accounts and would prefer a unified interface for all of my accounts). Frustration with using multiple web apps led me to give Mailmate another chance[^2].
|
||||
|
||||
|
@ -19,7 +19,7 @@ I created several other helpful folders:
|
|||
- A folder that collects development meetup messages in Los Angeles so that I can decide which, if any, I'd like to attend.
|
||||
- Individual folders for my Fastmail accounts so that I can filter through my inbox based on which alias a message was sent to.
|
||||
|
||||
Once I had folders set up in Mailmate, adjusted to the UI and began to memorize keyboard shortcuts, I was sold. The app is extremely lightweight and responsive, it's endlessly configurable and the app's bundles feature is extremely useful. I also really enjoy it's composer view and Markdown support (being able to email fenced code blocks is extremely useful). I think I'm finally done looking for a new email app. Finally.
|
||||
Once I had folders set up in Mailmate, adjusted to the UI and began to memorize keyboard shortcuts, I was sold. The app is extremely lightweight and responsive, it's endlessly configurable and the app's bundles feature is extremely useful. I also really enjoy its composer view and Markdown support (being able to email fenced code blocks is extremely useful). I think I'm finally done looking for a new email app. Finally.
|
||||
|
||||
[^1]: In fairness, this is a subjective judgement, but the app doesn't feel quite as smooth or as responsive as I had hoped it would.
|
||||
[^2]: This decision was, in part, prompted by [Gabe Weatherhead's](http://www.macdrifter.com/tag/mailmate.html) and Brett Terpstra's posts about the app. I assumed there must be slmething I was missing.
|
||||
|
|
|
@ -5,7 +5,7 @@ title: Moving to Bitbucket
|
|||
tags: ['Git', 'GitHub', 'Bitbucket']
|
||||
---
|
||||
|
||||
I recently moved all of the repositories for my personal and client development projects to [Bitbucket](http://bitbucket.org).<!-- excerpt --> I had been paying for Github's micro plan to manage a few projects that I didn't want public, but made the decision to switch after exploring a bit more and seeing that, well, Bitbucket provides the functionality I was paying Github for for free.
|
||||
I recently moved all the repositories for my personal and client development projects to [Bitbucket](http://bitbucket.org).<!-- excerpt --> I had been paying for Github's micro plan to manage a few projects that I didn't want public, but made the decision to switch after exploring a bit more and seeing that, well, Bitbucket provides the functionality I was paying Github for free.
|
||||
|
||||
Making the switch itself was painless. I added a key to my Bitbucket account, switched the remotes out on my repos and pushed each repo to its new home on Bitbucket. Switching remotes out is as simple as:
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ brew install mackup
|
|||
mackup backup
|
||||
```
|
||||
|
||||
By default mackup will back up your files to a file named mackup in the root of your Dropbox folder. You can also choose to back your files up to Google Drive or anywhere else on your local drive by creating .mackup.cfg in your user root and setting [options the tool provides](https://github.com/lra/mackup/tree/master/doc).
|
||||
By default, mackup will back up your files to a file named mackup in the root of your Dropbox folder. You can also choose to back your files up to Google Drive or anywhere else on your local drive by creating .mackup.cfg in your user root and setting [options the tool provides](https://github.com/lra/mackup/tree/master/doc).
|
||||
|
||||
Now, when you move to a new machine, you simply install the tool and run:
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ title: Scriptable Backups with Arq
|
|||
tags: ['Arq', 'backups']
|
||||
---
|
||||
|
||||
I've been using Arq for my backups for several months now and have regular backups being pushed to both [Amazon Cloud Drive](https://www.amazon.com/clouddrive) and [AWS](https://aws.amazon.com). A big part of Arq's appeal is it's flexibility, configurability and the wide array of backup destinations it supports. In short, it allows you to own and control your backups.<!-- excerpt -->
|
||||
I've been using Arq for my backups for several months now and have regular backups being pushed to both [Amazon Cloud Drive](https://www.amazon.com/clouddrive) and [AWS](https://aws.amazon.com). A big part of Arq's appeal is its flexibility, configurability and the wide array of backup destinations it supports. In short, it allows you to own and control your backups.<!-- excerpt -->
|
||||
|
||||
In addition to being a wonderfully designed app, Arq ships with a handy command line utility that lets you pause, resume and otherwise control your backups using simple commands named for the app. In order to use these commands, however, you need to include the executable in your shell's path variable.
|
||||
|
||||
|
|
|
@ -7,6 +7,6 @@ tags: ['iOS']
|
|||
|
||||
> The most exciting part is that Castro now uses custom notifications to allow episode triage without opening the app.
|
||||
|
||||
Castro is easily one of the best podcast apps on iOS and it just keeps getting better.<!-- excerpt -->
|
||||
Castro is easily one of the best podcast apps on iOS, and it just keeps getting better.<!-- excerpt -->
|
||||
|
||||
_[Buy Castro on the App Store](https://geo.itunes.apple.com/us/app/castro-podcast-player/id1080840241)_
|
||||
|
|
|
@ -5,7 +5,7 @@ title: Clearing mod_pagespeed cache
|
|||
tags: ['Apache', 'development']
|
||||
---
|
||||
|
||||
I use [mod_pagespeed](https://github.com/pagespeed/mod_pagespeed) on this server to help speed up asset delivery and force optimization best practices across all of the sites I host.<!-- excerpt --> Occasionally, during deployments, it's helpful to clear the module cache. Doing so is as simple as the following:
|
||||
I use [mod_pagespeed](https://github.com/pagespeed/mod_pagespeed) on this server to help speed up asset delivery and force optimization best practices across all the sites I host.<!-- excerpt --> Occasionally, during deployments, it's helpful to clear the module cache. Doing so is as simple as the following:
|
||||
|
||||
```bash
|
||||
touch /var/cache/mod_pagespeed/cache.flush
|
||||
|
|
|
@ -5,4 +5,4 @@ title: How to comment on the FCC's proposal to kill net neutrality
|
|||
tags: ['politics', 'net neutrality']
|
||||
---
|
||||
|
||||
[The Verge has a handy write up on how to comment on the FCC's proposal to kill net neutrality](https://www.theverge.com/2017/5/23/15681434/net-neutrality-how-to-comment-fcc-proposal-released).<!-- excerpt --> If you're invested in preserving an open internet (and you should be), take the time to comment and voice your concern.
|
||||
[The Verge has a handy write-up on how to comment on the FCC's proposal to kill net neutrality](https://www.theverge.com/2017/5/23/15681434/net-neutrality-how-to-comment-fcc-proposal-released).<!-- excerpt --> If you're invested in preserving an open internet (and you should be), take the time to comment and voice your concern.
|
||||
|
|
|
@ -13,6 +13,6 @@ tags: ['security']
|
|||
|
||||
This piece by Bruce Schneier is worth revisiting in light of [yesterday's Equifax breach](https://www.theverge.com/2017/9/7/16270808/equifax-data-breach-us-identity-theft). We're in the middle of a fresh wave of outrage over it but, as that fades, we should remember that we can do better than this. Companies and organizations that hold and collect our personal information can do better than this[^1].
|
||||
|
||||
There will be more breaches and we'll have to deal with the fallout, but we shouldn't be apathetic about it. Any company that collects that much data about the public should be held to higher standards when storing it (or, better yet, shouldn't store it at all). An insincere apology and a free year of some service provided by the company that failed to protect our data in the first place isn't good enough.
|
||||
There will be more breaches, and we'll have to deal with the fallout, but we shouldn't be apathetic about it. Any company that collects that much data about the public should be held to higher standards when storing it (or, better yet, shouldn't store it at all). An insincere apology and a free year of some service provided by the company that failed to protect our data in the first place isn't good enough.
|
||||
|
||||
[^1]: They might consider starting by patching [nine year old vulnerabilities before they're exploited](https://qz.com/1073221/the-hackers-who-broke-into-equifax-exploited-a-nine-year-old-security-flaw/).
|
||||
|
|
|
@ -5,7 +5,7 @@ title: Installing HTTP/2 on Ubuntu 16.04 with virtual hosts
|
|||
tags: ['Apache', 'development']
|
||||
---
|
||||
|
||||
Now that HTTP/2 is fairly stable and widely available, I decided to try and install and run it on this server. I'm currently running the [Ubuntu 16.04.2](http://releases.ubuntu.com/16.04/) LTS with virtual hosts configured so I can serve a number of sites beyond this one. All of the sites this server hosts are also served securely using certificates from [LetsEncrypt](https://letsencrypt.org/).<!-- excerpt -->
|
||||
Now that HTTP/2 is fairly stable and widely available, I decided to try and install and run it on this server. I'm currently running the [Ubuntu 16.04.2](http://releases.ubuntu.com/16.04/) LTS with virtual hosts configured, so I can serve a number of sites beyond this one. All the sites this server hosts are also served securely using certificates from [LetsEncrypt](https://letsencrypt.org/).<!-- excerpt -->
|
||||
|
||||
To install HTTP/2 I SSH'd in to the server and ran the following commands:
|
||||
|
||||
|
|
|
@ -5,6 +5,6 @@ title: iPhone spam call blockers
|
|||
tags: ['privacy']
|
||||
---
|
||||
|
||||
I've tried all of the apps Marco calls out in this post and I agree with his assessment of all of them. I liked [Nomorobo](https://www.nomorobo.com) a lot and it worked reliably, but I've settled on a different app that wasn't called out in this post. I've been using [Callblock](https://callblockapp.com) for the past week and like that its database extends beyond the robocallers covered by Nomorobo. It's already blocked a few calls and nothing that shouldn't get through has gotten through.
|
||||
I've tried all the apps Marco calls out in this post and I agree with his assessment of all of them. I liked [Nomorobo](https://www.nomorobo.com) a lot, and it worked reliably, but I've settled on a different app that wasn't called out in this post. I've been using [Callblock](https://callblockapp.com) for the past week and like that its database extends beyond the robocallers covered by Nomorobo. It's already blocked a few calls and nothing that shouldn't get through has gotten through.
|
||||
|
||||
_[Via Marco Arment](https://marco.org/2017/01/08/call-blockers)._<!-- excerpt -->
|
||||
|
|
|
@ -13,7 +13,7 @@ tags: ['politics', 'net neutrality']
|
|||
|
||||
The current incarnation of the FCC is entirely pro-industry and anti-consumer in its approach to regulating the market it oversees.
|
||||
|
||||
Chairman Pai's argument is misleading at best, particularly given the admission of ISPs that the current net neutrality rules have not harmed investment. Should the current rules be repealed, ISPs likely won't materially increase their infrastructure investments. Instead they'll use the lack of oversight and regulations to line their pockets at the expense of competitors that require access to their networks and consumers that have no other choice but to pay for their service when selecting an internet service provider.
|
||||
Chairman Pai's argument is misleading at best, particularly given the admission of ISPs that the current net neutrality rules have not harmed investment. Should the current rules be repealed, ISPs likely won't materially increase their infrastructure investments. Instead, they'll use the lack of oversight and regulations to line their pockets at the expense of competitors that require access to their networks and consumers that have no other choice but to pay for their service when selecting an internet service provider.
|
||||
|
||||
**[Via Ars Technica](https://arstechnica.com/?p=1138213):**
|
||||
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['politics', 'net neutrality']
|
|||
|
||||
> "The FCC has made it clear that they're ignoring feedback from the general public, so we're going to court to find out who they're actually listening to about net neutrality," American Oversight Executive Director Austin Evers said in the group's announcement of its lawsuit.
|
||||
|
||||
They're listening to ISPs and their lobbyists — they could care less about the public.<!-- excerpt -->
|
||||
They're listening to ISPs and their lobbyists — they couldn't care less about the public.<!-- excerpt -->
|
||||
|
|
|
@ -5,6 +5,6 @@ title: Securing your personal devices and accounts
|
|||
tags: ['privacy', 'security']
|
||||
---
|
||||
|
||||
Jonathan Zdziarski has a detailed write up on personal, technical security that you should read and consider implementing (particularly given [recent events](http://www.theverge.com/2017/2/12/14583124/nasa-sidd-bikkannavar-detained-cbp-phone-search-trump-travel-ban)).<!-- excerpt -->
|
||||
Jonathan Zdziarski has a detailed write-up on personal, technical security that you should read and consider implementing (particularly given [recent events](http://www.theverge.com/2017/2/12/14583124/nasa-sidd-bikkannavar-detained-cbp-phone-search-trump-travel-ban)).<!-- excerpt -->
|
||||
|
||||
> With the current US administration pondering the possibility of forcing foreign travelers to give up their social media passwords at the border, a lot of recent and justifiable concern has been raised about data privacy. The first mistake you could make is presuming that such a policy won't affect US citizens.
|
||||
|
|
|
@ -11,4 +11,4 @@ tags: ['politics', 'net neutrality']
|
|||
|
||||
I truly wish I could be shocked or surprised by a move like this coming out of the senate but, lately, congress appears to be dedicated to making decisions that actively harm their constituencies in order to benefit entrenched business interests.
|
||||
|
||||
This action needs to fail in the house. ISPs occupy a privileged position that gives them detailed access to customer data and they should not be able to freely exploit that data for financial gain.
|
||||
This action needs to fail in the house. ISPs occupy a privileged position that gives them detailed access to customer data, and they should not be able to freely exploit that data for financial gain.
|
||||
|
|
|
@ -9,8 +9,8 @@ tags: ['politics', 'net neutrality']
|
|||
|
||||
> ISPs are quick to tell the FCC and the public that Title II is harming network investment, but they have presented a much rosier view when talking to investors.<!-- excerpt -->
|
||||
|
||||
ISPs are _already_ investing in infrastructure with existing regulations in place. They want net neutrality restrictions repealed so that they can more freely continue their existing abusing and anti-competitive behavior[^1].
|
||||
ISPs are _already_ investing in infrastructure with existing regulations in place. They want net neutrality restrictions repealed so that they can more freely continue their existing abusing and anticompetitive behavior[^1].
|
||||
|
||||
A better fix for this problem would be to encourage more competition in the market, rather than shred regulations covering existing companies with near-monopoly positions and an extensive track record of anti-competitive and customer-hostile behavior.
|
||||
A better fix for this problem would be to encourage more competition in the market, rather than shred regulations covering existing companies with near-monopoly positions and an extensive track record of anticompetitive and customer-hostile behavior.
|
||||
|
||||
[^1]: If ISPs are threatened by Netflix, they should try competing by creating a service that doesn't suck.
|
||||
|
|
|
@ -11,4 +11,4 @@ tags: ['Spotify']
|
|||
|
||||
Spotify has done a lot to make music more accessible and available since it first launched. It's spent a lot of time since its launch beholden to labels and content providers so anything it can do, at this point, to gain leverage over those providers is only going to benefit it, and its users, in the long term.
|
||||
|
||||
I stopped buying digital music quite a while ago and, while I occasionally spend money on a vinyl release, I spend essentially all of my time listening to music on Spotify's streaming platform. Everyone I know listens to music primarily via one streaming platform or another and Spotify is chief among those — gaining leverage and diversifying the content it offers is going to continue to be key to Spotify's longterm viability as a platform. If that all happens at the expense of labels, I can't help but think we'll all be better for it.
|
||||
I stopped buying digital music quite a while ago and, while I occasionally spend money on a vinyl release, I spend essentially all of my time listening to music on Spotify's streaming platform. Everyone I know listens to music primarily via one streaming platform or another and Spotify is chief among those — gaining leverage and diversifying the content it offers is going to continue to be key to Spotify's long-term viability as a platform. If that all happens at the expense of labels, I can't help but think we'll all be better for it.
|
||||
|
|
|
@ -5,4 +5,4 @@ title: Three days left to comment on the FCC plan to kill net neutrality
|
|||
tags: ['politics', 'net neutrality']
|
||||
---
|
||||
|
||||
[The Verge has a helpful write up on how to comment on the FCC's plan to roll back net neutrality protections](https://www.theverge.com/2017/8/28/16211848/net-neutrality-comment-period-closing-soon-fcc), along with details about the decision. If you care about a free and open internet, you should take the time to make your voice heard (provided the FCC actually listens).<!-- excerpt -->
|
||||
[The Verge has a helpful write-up on how to comment on the FCC's plan to roll back net neutrality protections](https://www.theverge.com/2017/8/28/16211848/net-neutrality-comment-period-closing-soon-fcc), along with details about the decision. If you care about a free and open internet, you should take the time to make your voice heard (provided the FCC actually listens).<!-- excerpt -->
|
||||
|
|
|
@ -5,7 +5,7 @@ title: Updating to the latest version of git on Ubuntu
|
|||
tags: ['development', 'Git', 'Linux', 'Ubuntu']
|
||||
---
|
||||
|
||||
If you're using git on Ubuntu, the version distributed via apt may not be the newest version of git (I use git to deploy changes on all of the sites I manage).<!-- excerpt --> You can install the latest stable version of git provided by the maintainers as follows:
|
||||
If you're using git on Ubuntu, the version distributed via apt may not be the newest version of git (I use git to deploy changes on all the sites I manage).<!-- excerpt --> You can install the latest stable version of git provided by the maintainers as follows:
|
||||
|
||||
```bash
|
||||
sudo add-apt-repository ppa:git-core/ppa
|
||||
|
|
|
@ -7,4 +7,4 @@ tags: ['security']
|
|||
|
||||
I've been seeing more incoming spam calls from numbers similar to mine recently. They're annoying in large part because traditional iOS call blockers like [Hiya](https://itunes.apple.com/us/app/hiya-caller-id-and-block/id986999874?mt=8), [Nomorobo](https://itunes.apple.com/us/app/nomorobo-robocall-blocking/id1134727588?mt=8) and so forth don't screen them out (these apps apparently due this to err on the side of caution and avoid blocking what they see as legitimate local calls).<!-- excerpt -->
|
||||
|
||||
To mitigate this I've started using a simple app called [Wideprotect](https://itunes.apple.com/us/app/wideprotect-block-call-sms-mms/id1171024059) that lets you block numbers by providing a set of digits for it to match against (e.g. your area code or your area code plus the first three numbers of the phone number). If you haven't tried the app yet and you're seeing the same issue, I'd _highly_ recommend giving it a try.
|
||||
To mitigate this I've started using a simple app called [Wideprotect](https://itunes.apple.com/us/app/wideprotect-block-call-sms-mms/id1171024059) that lets you block numbers by providing a set of digits for it to match against (e.g. your area code or your area code plus the first three numbers of the phone number). If you haven't tried the app yet, and you're seeing the same issue, I'd _highly_ recommend giving it a try.
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['politics', 'net neutrality']
|
|||
|
||||
> The bill enshrines not only the fundamentals of net neutrality, such as prohibiting ISPs from throttling or blocking sites, but also prohibits other telecom trickery, such as zero rating—a practice where companies provide access to certain parts of the internet for "free" and charge for others.<!-- excerpt -->
|
||||
|
||||
This is really heartening news, particularly the fact that it addresses anti-competitive practices like zero rating. I appreciate that the state government is taking up the challenge of addressing abuses by ISPs where the federal government has let things slide.
|
||||
This is really heartening news, particularly the fact that it addresses anticompetitive practices like zero rating. I appreciate that the state government is taking up the challenge of addressing abuses by ISPs where the federal government has let things slide.
|
||||
|
|
|
@ -11,6 +11,6 @@ tags: ['politics', 'net neutrality']
|
|||
|
||||
> If the rules were eliminated this week and ISPs began violating net neutrality while Congress is negotiating a permanent net neutrality law, it would be harder for Republicans to force Democrats to compromise, Feld said. "This has all been about trying to push Democrats to compromise and adopt weak legislation."
|
||||
|
||||
This all reads like a textbook case of regulatory capture. Of course ISPs will abuse their market positions when this is repealed and they should have absolutely no input on net neutrality legislation.
|
||||
This all reads like a textbook case of regulatory capture. Of course ISPs will abuse their market positions when this is repealed, and they should have absolutely no input on net neutrality legislation.
|
||||
|
||||
Fortunately, [states like California are leading the way with their own net neutrality laws](http://www.latimes.com/business/hiltzik/la-fi-hiltzik-net-neutrality-california-20180420-story.html), but that's only if said laws manage to hold up to inevitable legal challenges of their own.
|
||||
|
|
|
@ -9,4 +9,4 @@ tags: ['privacy']
|
|||
|
||||
> For the first time in podcasting, target your audience by demographic, interests, purchase behavior and more..<!-- excerpt -->
|
||||
|
||||
The last thing we need is the ad industry co-opting podcasts to enable more invasive tracking. No thanks.
|
||||
The last thing we need is the ad industry co-opting podcasts to enable more invasive tracking. No, thanks.
|
||||
|
|
|
@ -7,7 +7,7 @@ tags: ['Git', 'development']
|
|||
|
||||
As a developer, a version control system is a critical part of your toolkit, no matter the size of the project or team you may find yourself working on.<!-- excerpt -->
|
||||
|
||||
I first started learning to use git by applying it to my own projects and maintaining local repositories to track those projects. From there I moved on to hosting and storing my git repositories at [Bitbucket](https://bitbucket.org) while still working independently. My first experience with working alongside other developers in git came at my first full time development job on a small team (think _really_ small — two developers, myself included). I picked up the basics of branching, handling merges, developing different features in parallel and, ultimately, dealing with QA and production deployments that were sourced from various branches in our project repository.
|
||||
I first started learning to use git by applying it to my own projects and maintaining local repositories to track those projects. From there I moved on to hosting and storing my git repositories at [Bitbucket](https://bitbucket.org) while still working independently. My first experience with working alongside other developers in git came at my first full time development job on a small team (think _tiny_ — two developers, myself included). I picked up the basics of branching, handling merges, developing different features in parallel and, ultimately, dealing with QA and production deployments that were sourced from various branches in our project repository.
|
||||
|
||||
I've expanded on my knowledge git in the jobs I've held since that first position and have used [svn](https://subversion.apache.org) pretty heavily as well (I don't mind it, but I don't love it — I'd argue git is the better choice for a number of reasons, its decentralized nature and flexibility being chief among them).
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ Last week my Apple Music collection, in as far as I can tell, become corrupted o
|
|||
|
||||
I'm the kind of music nerd that likes to meticulously manage genre tags, trim extraneous strings out of track and album names and update album artwork[^1]. Apple Music is the only streaming service that supports importing your own music to supplement their catalog while also editing their metadata to match. I've been doing this for a few years now and all was well and good as my music collection grew.
|
||||
|
||||
A few weeks ago I read through a [Brooklyn Vegan](https://brooklynvegan.com) on the best hardcore releases of 2021, added a few to my collection, tagged them and queued them. No problem. I don't end up liking all of them[^2]. I go back and notice the tags are all back to Apple's defaults (no big deal, this happens occasionally) and proceed to delete the albums I don't like. Fast forward to the next day — I sit down, scroll through Recently Added to queue up something new and everything is right back to where it was. I try deleting the same albums from the iOS app and it works briefly before they reappeared. Great.
|
||||
A few weeks ago I read through a [Brooklyn Vegan](https://brooklynvegan.com) on the best hardcore releases of 2021, added a few to my collection, tagged them and queued them. No problem. I don't end up liking all of them[^2]. I go back and notice the tags are all back to Apple's defaults (no big deal, this happens occasionally) and proceed to delete the albums I don't like. Fast-forward to the next day — I sit down, scroll through Recently Added to queue up something new and everything is right back to where it was. I try deleting the same albums from the iOS app, and it works briefly before they reappeared. Great.
|
||||
|
||||
My next steps were pretty standard, escalating, troubleshooting:
|
||||
|
||||
|
@ -33,6 +33,6 @@ I likely should have been listening to and managing music this way all along and
|
|||
|
||||
[^1]: I'm looking at you Audiotree Live.
|
||||
[^2]: I've seen folks raving about the new Turnstile record and that's rad, but I don't get it. I'm so sorry.
|
||||
[^3]: There's a button to do this in the Mac App store app and it doesn't work. I throws a generic exception telling you to try later — use the one in the Music app.
|
||||
[^3]: There's a button to do this in the Mac App store app, and it doesn't work. It throws a generic exception telling you to try later — use the one in the Music app.
|
||||
[^4]: Cool — an opportunity to get introspective and pare back what I actually care to listen to.
|
||||
[^5]: This prompted me to move the last of my import data, my photos, off of Apple's services — my music library is one thing, having the same happen to my photos would be devastating. They're now sitting in Google Photos, getting mirrored to Dropbox and perhaps off to BackBlaze. Is this an overreaction? Maybe — but I've also had a tab Safari claims is open on my Mac Mini for 3-4 months now. Syncing is hard and the evidence leads me to believe the service implementation may not be that reliable.
|
||||
|
|
|
@ -14,10 +14,10 @@ This is a helpful, albeit basic, guide to online privacy tools.<!-- excerpt -->
|
|||
**Private email providers**
|
||||
|
||||
- [Fastmail](https://fastmail.com)
|
||||
- [mailbox.org](mailbox.org)
|
||||
- [mailbox.org](https://mailbox.org)
|
||||
- [Proton Mail](http://protonmail.com)
|
||||
|
||||
Ubiquitous free email providers profit by mining user data (whether humans are involved or not). Your inbox acts as a key to your digital life and you should avoid using any provider that monetizes its contents.
|
||||
Ubiquitous free email providers profit by mining user data (whether humans are involved or not). Your inbox acts as a key to your digital life, and you should avoid using any provider that monetizes its contents.
|
||||
|
||||
**Adblockers**
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@ A rundown of privacy tools that work well with Apple's technology ecosystem.<!--
|
|||
|
||||
## Email providers
|
||||
|
||||
Ubiquitous free email providers profit by mining user data (whether humans are involved or not). Your inbox acts as a key to your digital life and you should avoid using any provider that monetizes its contents.
|
||||
Ubiquitous free email providers profit by mining user data (whether humans are involved or not). Your inbox acts as a key to your digital life, and you should avoid using any provider that monetizes its contents.
|
||||
|
||||
- [Fastmail](https://ref.fm/u28939392)[^2]: based in Melbourne, Australia Fastmail offers a range of affordably priced plans with a focus on support for open standards (including active development support for [JMAP](https://jmap.io) and the [Cyrus IMAP email server](https://fastmail.blog/open-technologies/why-we-contribute/)). They also [articulate a clear commitment to protecting and respecting your privacy](https://www.fastmail.com/values/) and offer an extensive [rundown of the privacy and security measures they employ on their site](https://www.fastmail.com/privacy-and-security/).
|
||||
- I would also recommend exploring their [masked email implementation](https://www.fastmail.help/hc/en-us/articles/4406536368911-Masked-Email), which integrates seamlessly with [1Password](https://1password.com) (though using 1Password isn't required).
|
||||
- [mailbox.org](https://mailbox.org): based in Germany, [mailbox.org](http://mailbox.org) also has [a long history](https://mailbox.org/en/company#our-history) and [commitment to privacy](https://mailbox.org/en/company#our-mission). Their service is reliable, straightforward and fully featured (it's based off of a customized implementation [Open-Xchange](https://www.open-xchange.com)) and supports features like incoming address blocking, PGP support and so forth.
|
||||
- [Proton Mail](http://protonmail.com): Proton offers a host of encrypted tools, ranging from mail to drive, calendaring and VPN services. They're also the only option in this list that includes end to end encryption. The service is extremely polished and reliable but, it's worth noting, doesn't support access to your email via open standards like IMAP/SMTP without the use of a cumbersome, desktop-only, bridge application.
|
||||
- [Proton Mail](http://protonmail.com): Proton offers a host of encrypted tools, ranging from mail to drive, calendaring and VPN services. They're also the only option in this list that includes end-to-end encryption. The service is extremely polished and reliable but, it's worth noting, doesn't support access to your email via open standards like IMAP/SMTP without the use of a cumbersome, desktop-only, bridge application.
|
||||
- [iCloud+](https://support.apple.com/guide/icloud/icloud-overview-mmfc854d9604/icloud): if you're paying for an Apple iCloud subscription you'll get access to the option to add a custom email domain to your account to use with Apple's iCloud Mail service. This is private inasmuch as the data isn't mined for monetization against personalized ads, but is also bare-bones in terms of functionality. It supports IMAP and push notifications on Apple's devices but features like rules, aliases and so forth are extremely limited compared to the previously mentioned providers. This is better than most free providers, but hardly the best option.
|
||||
- iCloud+ _does_ also offer a [Hide My Email](https://support.apple.com/guide/icloud/what-you-can-do-with-icloud-and-hide-my-email-mme38e1602db/1.0/icloud/1.0) feature to conceal your true email address, much like Fastmail.
|
||||
|
||||
|
@ -23,7 +23,7 @@ Ubiquitous free email providers profit by mining user data (whether humans are i
|
|||
|
||||
- [Apple Mail](https://support.apple.com/mail): Apple's Mail app is simple but also fully featured and reliable to the point of being a bit boring. It also has enhanced privacy features as of iOS 15 and macOS 12 in the form of [Mail Privacy Protection](https://support.apple.com/guide/iphone/use-mail-privacy-protection-iphf084865c7/ios).
|
||||
- [Canary Mail](https://canarymail.io/): a third-party email with a reasonable price tag and a heavy focus on privacy and security, Canary offers a number of enhancements like read receipts, templates, snoozing, PGP support and calendar/contact integration. The design hews tightly to iOS and macOS platform norms but, naturally, is not quite as tightly integrated as Apple's first-party mail app.
|
||||
- [Mailmate](https://freron.com/): a long running, highly configurable mail app with a strict focus on IMAP support, Mailmate is an excellent option on macOS and also offers strong support for authoring messages in markdown.
|
||||
- [Mailmate](https://freron.com/): a long-running, highly configurable mail app with a strict focus on IMAP support, Mailmate is an excellent option on macOS and also offers strong support for authoring messages in markdown.
|
||||
|
||||
## Safari extensions
|
||||
|
||||
|
@ -48,9 +48,9 @@ Ubiquitous free email providers profit by mining user data (whether humans are i
|
|||
- [Mullvad](https://mullvad.net/en/): an open source, commercial VPN based in Sweden, Mullvad offers both WireGuard and OpenVPN support.
|
||||
- [Mozilla](https://www.mozilla.org/en-US/products/vpn/): offered by the non-profit Mozilla Foundation, this is another compelling offering from an organization with a track record of fighting for the open web and preserving user privacy.
|
||||
|
||||
For now I've scoped this post to platforms and tools that are central to maintaining your online privacy. But, with that said, each app you use should be examined to determine if and how it fits with your approach towards privacy.
|
||||
For now, I've scoped this post to platforms and tools that are central to maintaining your online privacy. But, with that said, each app you use should be examined to determine if and how it fits with your approach towards privacy.
|
||||
|
||||
Everything you use is going to glean data from your interactions with it and it's worth considering that tool's stance on privacy, tracking and monetization before investing your time and data into using it.
|
||||
Everything you use is going to glean data from your interactions with it, and it's worth considering that tool's stance on privacy, tracking and monetization before investing your time and data into using it.
|
||||
|
||||
**Other resources**
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ tags: ['Gmail', 'automation']
|
|||
|
||||
Lately I've been leaning into automating the cleanup of email I receive in Gmail using a combination of Inbox-era categories that the application still exposes via search and [Google Apps Script](https://www.google.com/script/start/).<!-- excerpt -->
|
||||
|
||||
I wasn't using Gmail when Inbox was available (I'm sure I missed out) and know not all of the most beloved features have been migrated over to Gmail proper. That said, there _are_ some handy filters that didn't ascend to Gmail's tabbed inbox interface but are still available to create rules against[^1].
|
||||
I wasn't using Gmail when Inbox was available (I'm sure I missed out) and know not all the most beloved features have been migrated over to Gmail proper. That said, there _are_ some handy filters that didn't ascend to Gmail's tabbed inbox interface but are still available to create rules against[^1].
|
||||
|
||||
I've created filter rules leveraging all of these legacy filters to automatically categorize messages the same way the current tabs do. These rules look like the following:
|
||||
|
||||
|
@ -88,7 +88,7 @@ The rules for deliveries and alerts operate in very much the same way, but with
|
|||
'label:alerts -label:inbox'
|
||||
```
|
||||
|
||||
Unrelated to cleanup, I also mark any unread emails in my archive as read, with this script running every minute using the `Time-driven` event source, `Minute timer` and is executed every minute (heavy-handed perhaps, but the error-rate for this has only been 0.02%):
|
||||
Unrelated to clean up, I also mark any unread emails in my archive as read, with this script running every minute using the `Time-driven` event source, `Minute timer` and is executed every minute (heavy-handed perhaps, but the error-rate for this has only been 0.02%):
|
||||
|
||||
```javascript
|
||||
function markArchivedAsRead() {
|
||||
|
@ -105,5 +105,5 @@ function markArchivedAsRead() {
|
|||
I have given some thought to refactoring my cleanup scripts such that the batch delete consumes an array of the individual search queries, iterating over them much like it does the threads it's operating on but, at that point, I'd be looking at a loop over the argument and then over the threads in a child loop when separate script functions can run without that being a concern.
|
||||
|
||||
[^1]: I am puzzled that Forums made the cut as a featured option.
|
||||
[^2]: Don't email me via Feedbin. I'll miss it or it'll just be annoying.
|
||||
[^2]: Don't email me via Feedbin. I'll miss it, or it'll just be annoying.
|
||||
[^3]: I care when something ships, I don't care to reference the tracking info months later.
|
||||
|
|
|
@ -49,7 +49,7 @@ If you still need access to calendars from your own provider, Fastmail can [sync
|
|||
|
||||
### Syncing with your devices
|
||||
|
||||
First, set up [two-step verification](https://www.fastmail.help/hc/en-us/articles/360058752374-Using-two-step-verification-2FA-) — this should be done with a an authenticator app[^5]. Next, [create a password](https://www.fastmail.help/hc/en-us/articles/360058752854-App-passwords) for each app you'll access the service with — you can provision the permissions for the password to be fairly broad but, in the interest of security, I'd suggest scoping them to each app and the service they need to access (e.g. IMAP/SMTP for your Mail app on each device, CalDAV only for your calendar app on each device etc.). Fastmail has server names and ports required to access each service [outlined here](https://www.fastmail.help/hc/en-us/articles/1500000278342-Server-names-and-ports).
|
||||
First, set up [two-step verification](https://www.fastmail.help/hc/en-us/articles/360058752374-Using-two-step-verification-2FA-) — this should be done with an authenticator app[^5]. Next, [create a password](https://www.fastmail.help/hc/en-us/articles/360058752854-App-passwords) for each app you'll access the service with — you can provision the permissions for the password to be fairly broad but, in the interest of security, I'd suggest scoping them to each app and the service they need to access (e.g. IMAP/SMTP for your Mail app on each device, CalDAV only for your calendar app on each device etc.). Fastmail has server names and ports required to access each service [outlined here](https://www.fastmail.help/hc/en-us/articles/1500000278342-Server-names-and-ports).
|
||||
|
||||
### Next steps
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ Here's a quick rundown of extensions and tools, specific to Safari, to make that
|
|||
- [1Blocker](https://1blocker.com): block ads, trackers and myriad other annoyances. My go to adblocker for Safari and it even ships with a handy, dandy local firewall to futz with analytics and trackers embedded in apps.
|
||||
- [Baking Soda](https://apps.apple.com/us/app/baking-soda-tube-cleaner/id1601151613) and [Vinegar](https://apps.apple.com/us/app/vinegar-tube-cleaner/id1591303229): load videos on YouTube and elsewhere in the native video player.
|
||||
- [Banish](https://apps.apple.com/us/app/banish-block-open-in-app/id1632848430): block all those annoying open in app banners.[^2]
|
||||
- [Stop the Madness](https://underpassapp.com/StopTheMadness/): a Swiss Army knife of an extension aimed at curtailing modern annoyances. It'll route around AMP pages, strip tracking parameters, stops clickjacking, stops url shorteners and myriad other fixes for popular user-hostile patterns. *Essential*.atterns. *Essential*.
|
||||
- [Stop the Madness](https://underpassapp.com/StopTheMadness/): a Swiss Army knife of an extension aimed at curtailing modern annoyances. It'll route around AMP pages, strip tracking parameters, stops clickjacking, stops url shorteners and myriad other fixes for popular user-hostile patterns. *Essential*.
|
||||
- [Super Agent](https://www.super-agent.com/): automatically set your cookie preferences to the minimum allowed set.[^3]
|
||||
- [User Scripts](https://github.com/quoid/userscripts): an open source user scripts extension for Safari. I'll leave this one to your imagination (exercise caution and abandon in equal measure since you'll be running community provided scripts and styles on the sites you visit).
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ tags: ['webmentions', 'development', 'JavaScript']
|
|||
|
||||
My blog is currently hosted on weblog.lol which allows for a simple and configurable weblog managed in git with posts formatted in markdown. I wanted to add webmentions to my blog which, as of now, doesn't include a build step. To accomplish this, I've added an intermediary api endpoint to the same Next.js app that powers my [/now](https://coryd.dev/now) page.<!-- excerpt -->
|
||||
|
||||
Robb has [a handy write up on adding webmentions to your website](https://rknight.me/adding-webmentions-to-your-site/), which I followed — first adding the appropriate Mastodon link to my blog template, registering for webmentions.up and Bridgy, then adding the appropriate tags to my template document's `<head>` to record mentions.
|
||||
Robb has [a handy write-up on adding webmentions to your website](https://rknight.me/adding-webmentions-to-your-site/), which I followed — first adding the appropriate Mastodon link to my blog template, registering for webmentions.io and Bridgy, then adding the appropriate tags to my template document's `<head>` to record mentions.
|
||||
|
||||
Next it was simply a question of rendering the output from the webmentions endpoint.
|
||||
|
||||
|
@ -137,4 +137,4 @@ The webmentions HTML shell is as follows:
|
|||
</div>
|
||||
```
|
||||
|
||||
And there you have it — webmentions loaded client side and updated as they occur. There's an example visible on my post [Automating (and probably overengineering) my /now page](https://blog.coryd.dev/2023/02/automatingandprobablyoverengineeringmy-nowpage#webmentions).
|
||||
And there you have it — webmentions loaded client side and updated as they occur. There's an example visible on my post [Automating (and probably over-engineering) my /now page](https://blog.coryd.dev/2023/02/automatingandprobablyoverengineeringmy-nowpage#webmentions).
|
||||
|
|
|
@ -5,7 +5,7 @@ draft: false
|
|||
tags: ['automation', 'Mastodon', 'Eleventy']
|
||||
---
|
||||
|
||||
I've discussed [building a now page using Eleventy](/posts/2023/building-my-now-page-using-eleventy/) but I also syndicate a subset of that content out to Mastodon using [`@11ty/eleventy-activity-feed`](https://www.npmjs.com/package/@11ty/eleventy-activity-feed) and [Make](https://make.com/en/).<!-- excerpt --> The [`@11ty/eleventy-activity-feed`](https://www.npmjs.com/package/@11ty/eleventy-activity-feed) allows you to aggregate various web feeds into a single feed, inserting entries from the feeds sequentially as they're published. My `follow-feed.11ty.js` looks like this:
|
||||
I've discussed [building a now page using Eleventy,](/posts/2023/building-my-now-page-using-eleventy/) but I also syndicate a subset of that content out to Mastodon using [`@11ty/eleventy-activity-feed`](https://www.npmjs.com/package/@11ty/eleventy-activity-feed) and [Make](https://make.com/en/).<!-- excerpt --> The [`@11ty/eleventy-activity-feed`](https://www.npmjs.com/package/@11ty/eleventy-activity-feed) allows you to aggregate various web feeds into a single feed, inserting entries from the feeds sequentially as they're published. My `follow-feed.11ty.js` looks like this:
|
||||
|
||||
```javascript
|
||||
module.exports = class {
|
||||
|
|
|
@ -29,7 +29,7 @@ export default async function handler(req: any, res: any) {
|
|||
}
|
||||
const METHOD = METHODS[req.query.type] || METHODS['default']
|
||||
const data = await fetch(
|
||||
`http://ws.audioscrobbler.com/2.0/?method=${METHOD}&user=cdme_&api_key=${KEY}&limit=${
|
||||
`https://ws.audioscrobbler.com/2.0/?method=${METHOD}&user=cdme_&api_key=${KEY}&limit=${
|
||||
req.query.limit || 20
|
||||
}&format=${req.query.format || 'json'}&period=${req.query.period || 'overall'}`
|
||||
).then((response) => response.json())
|
||||
|
|
|
@ -111,7 +111,7 @@ export default async function syndicate(init?: string) {
|
|||
}
|
||||
```
|
||||
|
||||
We start off with an optional `init` parameter that can be passed into our `syndicate` function to hydrate our syndication cache — the structure of this cache is essentially `SERIVCE_KEY: string[]` where `string[]` contains RSS post IDs. Now, given that Vercel is intended as front end hosting, I needed a reasonably simple and reliable solution for hosting a simple JSON object. I explored and didn't want to involve a full-fledged database or storage solution and wasn't terribly interested in dealing with S3 or B2 for this purpose so I, instead, went with a "secret" GitHub gist[^1] and leveraged the GitHub API for storage. At each step of the [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) process in this script we make a call to the GitHub API using a token for authentication, deal with the returned JSON and go on our merry way.
|
||||
We start off with an optional `init` parameter that can be passed into our `syndicate` function to hydrate our syndication cache — the structure of this cache is essentially `SERIVCE_KEY: string[]` where `string[]` contains RSS post IDs. Now, given that Vercel is intended as front end hosting, I needed a reasonably simple and reliable solution for hosting a simple JSON object. I explored and didn't want to involve a full-fledged database or storage solution and wasn't terribly interested in dealing with S3 or B2 for this purpose, so I, instead, went with a "secret" GitHub gist[^1] and leveraged the GitHub API for storage. At each step of the [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) process in this script we make a call to the GitHub API using a token for authentication, deal with the returned JSON and go on our merry way.
|
||||
|
||||
Once the cache is hydrated the script will check the feeds available in `lib/syndicate/config.ts` and post the most recent item if it does not exist in the cache and then add it to said cache. The configured services are simply:
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ export default async function loadNowData(endpoints?: string) {
|
|||
|
||||
// artists
|
||||
if ((endpoints && selectedEndpoints.includes('artists')) || !endpoints) {
|
||||
const artistsUrl = `http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const artistsUrl = `https://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
artistsJson = await fetch(artistsUrl)
|
||||
.then((response) => response.json())
|
||||
.catch((error) => {
|
||||
|
@ -186,7 +186,7 @@ export default async function loadNowData(endpoints?: string) {
|
|||
|
||||
// albums
|
||||
if ((endpoints && selectedEndpoints.includes('albums')) || !endpoints) {
|
||||
const albumsUrl = `http://ws.audioscrobbler.com/2.0/?method=user.gettopalbums&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const albumsUrl = `https://ws.audioscrobbler.com/2.0/?method=user.gettopalbums&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
albumsJson = await fetch(albumsUrl)
|
||||
.then((response) => response.json())
|
||||
.catch((error) => {
|
||||
|
@ -226,7 +226,7 @@ export default async function loadNowData(endpoints?: string) {
|
|||
|
||||
// current track
|
||||
if ((endpoints && selectedEndpoints.includes('currentTrack')) || !endpoints) {
|
||||
const currentTrackUrl = `http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=cdme_&api_key=${MUSIC_KEY}&limit=1&format=json&period=7day`
|
||||
const currentTrackUrl = `https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=cdme_&api_key=${MUSIC_KEY}&limit=1&format=json&period=7day`
|
||||
currentTrackJson = await fetch(currentTrackUrl)
|
||||
.then((response) => response.json())
|
||||
.catch((error) => {
|
||||
|
@ -338,7 +338,7 @@ const Cover = (props: { media: Media; type: 'artist' | 'album' }) => {
|
|||
export default Cover
|
||||
```
|
||||
|
||||
All of the components for this page [can be viewed on GitHub](https://github.com/cdransf/coryd.dev/tree/main/components/media). Each one consumes an object from the `loadNowData` object and renders it to the page. The page is also periodically revalidated via an api route that simply calls this same method:
|
||||
All the components for this page [can be viewed on GitHub](https://github.com/cdransf/coryd.dev/tree/main/components/media). Each one consumes an object from the `loadNowData` object and renders it to the page. The page is also periodically revalidated via an api route that simply calls this same method:
|
||||
|
||||
```ts
|
||||
import loadNowData from '@/lib/now'
|
||||
|
|
|
@ -30,7 +30,7 @@ const EleventyFetch = require('@11ty/eleventy-fetch')
|
|||
|
||||
module.exports = async function () {
|
||||
const MUSIC_KEY = process.env.API_KEY_LASTFM
|
||||
const url = `http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const url = `https://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=cdme_&api_key=${MUSIC_KEY}&limit=8&format=json&period=7day`
|
||||
const res = EleventyFetch(url, {
|
||||
duration: '1h',
|
||||
type: 'json',
|
||||
|
@ -159,7 +159,7 @@ module.exports = async function () {
|
|||
}
|
||||
```
|
||||
|
||||
Rather than dealing with a an API that returns JSON, I'm transforming the RSS feed that Oku exposes for my currently reading collection, using [@extractis/feed-extractor](https://www.npmjs.com/package/@extractus/feed-extractor) to transform the XML into JSON and leveraging Eleventy's [@11ty/eleventy-fetch](https://www.npmjs.com/package/@11ty/eleventy-fetch) package for caching. Because I'm simply rendering a list of what I'm reading, the liquid templating is a bit simpler:
|
||||
Rather than dealing with an API that returns JSON, I'm transforming the RSS feed that Oku exposes for my currently reading collection, using [@extractis/feed-extractor](https://www.npmjs.com/package/@extractus/feed-extractor) to transform the XML into JSON and leveraging Eleventy's [@11ty/eleventy-fetch](https://www.npmjs.com/package/@11ty/eleventy-fetch) package for caching. Because I'm simply rendering a list of what I'm reading, the liquid templating is a bit simpler:
|
||||
|
||||
{% raw %}
|
||||
|
||||
|
@ -188,7 +188,7 @@ Rather than dealing with a an API that returns JSON, I'm transforming the RSS fe
|
|||
|
||||
For **Watching: movies** and **Watching: tv** we're following a nearly identical pattern (outside of object name semantics that are specific to the media type for each). Both Trakt and Letterboxd expose RSS feeds for watched media activity and both are passed through, fetched and cached using the same dependencies.
|
||||
|
||||
[You can view the tv.js data file here](https://github.com/cdransf/coryd.dev/blob/e886857387661ceeba4f2b368989ec32f0c3f121/src/_data/tv.js) and [movies here](https://github.com/cdransf/coryd.dev/blob/e886857387661ceeba4f2b368989ec32f0c3f121/src/_data/movies.js), while [the full `now.liquid` combines all of the discussed snippets](https://github.com/cdransf/coryd.dev/blob/e886857387661ceeba4f2b368989ec32f0c3f121/src/_includes/now.liquid).
|
||||
[You can view the tv.js data file here](https://github.com/cdransf/coryd.dev/blob/e886857387661ceeba4f2b368989ec32f0c3f121/src/_data/tv.js) and [movies here](https://github.com/cdransf/coryd.dev/blob/e886857387661ceeba4f2b368989ec32f0c3f121/src/_data/movies.js), while [the full `now.liquid` combines all the discussed snippets](https://github.com/cdransf/coryd.dev/blob/e886857387661ceeba4f2b368989ec32f0c3f121/src/_includes/now.liquid).
|
||||
|
||||
Currently, this page is refreshed on an hourly basis using scheduled builds on Vercel triggered by GitHub actions, [which you can read about here](/posts/2023/scheduled-eleventy-builds-cron-github-actions/).
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ These work by checking that the `To/CC/BCC` matches the appropriate alias before
|
|||
|
||||
In the event I've failed to tune a regular expression properly or an actual person triggers a match I have a rule that is executed after the aforementioned alias-specific rules that stops all rule evaluations for _any_ address in my contacts.
|
||||
|
||||
**Update:** I've run every regular expression and glob pattern I apply to my messages through ChatGPT to see if it could simplify, combine and otherwise improve them (namely reducing false positives). This has worked quite well (outside of the time required to coax ChatGPT to the best possible answer). Further, my deliveries rule that forwards to Parcel now also requires both a subject and body match before forwarding.
|
||||
**Update:** I've run every regular expression and glob pattern I apply to my messages through ChatGPT to see if it could simplify, combine and otherwise improve them (namely reducing false positives). This has worked quite well (outside the time required to coax ChatGPT to the best possible answer). Further, my deliveries rule that forwards to Parcel now also requires both a subject and body match before forwarding.
|
||||
|
||||
[I also have a rule containing regular expressions that also skips evaluations for login pin codes, meeting/appointment reminders and common security notices](https://pastes.coryd.dev/mail-regexes-alerts/markup).
|
||||
|
||||
|
@ -92,7 +92,7 @@ In the event I've failed to tune a regular expression properly or an actual pers
|
|||
|
||||
## Mapping categories as folders
|
||||
|
||||
I've tailored these rules to align with folders on a per topic basis. I have a broad `Financial` folder for things like receipts, bank statements and bills. That folder contains a few granular subfolders like `Deliveries`, `Media`, `Medical`, `Promotions` and so forth. All multi-step rules are set to filter messages when `any` of the tabled criteria matches.
|
||||
I've tailored these rules to align with folders on a per-topic basis. I have a broad `Financial` folder for things like receipts, bank statements and bills. That folder contains a few granular subfolders like `Deliveries`, `Media`, `Medical`, `Promotions` and so forth. All multistep rules are set to filter messages when `any` of the tabled criteria matches.
|
||||
|
||||
The top level `Financial` rule [looks like this](https://pastes.coryd.dev/mail-regexes-financial/markup).
|
||||
|
||||
|
@ -138,7 +138,7 @@ The top level `Financial` rule [looks like this](https://pastes.coryd.dev/mail-r
|
|||
|
||||
`Deliveries` follow a similar pattern with rule sets intended to capture messages with package tracking information or other details. I kickstarted this rule by, naturally, referencing [this answer from StackOverflow](https://stackoverflow.com/a/5024011).
|
||||
|
||||
All of the regular expressions contained in this answer are matched against the `Body` of inbound messages before being forwarded to [Parcel Email](https://parcelapp.net/help/parcel-email.html)[^3]. These rules are supplemented by a few edge case rules targeted at the `Subject` field:
|
||||
All the regular expressions contained in this answer are matched against the `Body` of inbound messages before being forwarded to [Parcel Email](https://parcelapp.net/help/parcel-email.html)[^3]. These rules are supplemented by a few edge case rules targeted at the `Subject` field:
|
||||
|
||||
```json
|
||||
"conditions": [
|
||||
|
@ -275,7 +275,7 @@ These are designed to capture confirmations sent by Southwest and are sent off t
|
|||
```
|
||||
|
||||
**Social networking messages**
|
||||
These I've left as a simple list wherein `any` included top level domain is filed away as I don't belong to many social networks and they change fairly infrequently.
|
||||
These I've left as a simple list wherein `any` included top level domain is filed away as I don't belong to many social networks, and they change fairly infrequently.
|
||||
|
||||
**DMARC notifications (depending on how you have your policy record configured)**
|
||||
|
||||
|
|
|
@ -21,9 +21,9 @@ This leaves me in a place where I've ruled out the popular streaming music provi
|
|||
- **[Astiga:](https://asti.ga)** nicely designed, supports the [Subsonic music API](http://www.subsonic.org/pages/api.jsp) and lets you source music from cloud storage. **Awesome.** Not awesome: I don't particularly like any of the available iOS apps and scrobbling from iOS to Last.fm is inconsistent. Not perfect — absolutely worth keeping an eye on as it develops.
|
||||
- **[Roon:](https://roonlabs.com)** a very promising service, but one geared more towards the audiophile audience and with hardware requirements I'm not interested in investing in at this point.
|
||||
|
||||
Pretty limited, right? My solution and the one I'm really enjoying is [Plexamp](https://plexamp.com/). I knew Plex supported music playback — I didn't realize they had an excellent, bespoke app to support it.[^5] Plex scrobbles to Last.fm from the server, auto-populates artist metadata, does a stellar job matching similar artists and building playlists from *your own collection*. That's it, that's what I wanted. I don't want the collection to drift, I'll add to it when I find music that I want to listen to more than once and *sometimes*, I want to throw on a station or playlist constrained to that set of artists.
|
||||
Pretty limited, right? My solution and the one I'm really enjoying is [Plexamp](https://plexamp.com/). I knew Plex supported music playback — I didn't realize they had an excellent, bespoke app to support it.[^5] Plex scrobbles to Last.fm from the server, autopopulates artist metadata, does a stellar job matching similar artists and building playlists from *your own collection*. That's it, that's what I wanted. I don't want the collection to drift, I'll add to it when I find music that I want to listen to more than once and *sometimes*, I want to throw on a station or playlist constrained to that set of artists.
|
||||
|
||||
So here we are: I have a cloud-based Plex instance, it's used solely for music playback, the artist images match up with Last.fm and [my now page](/now). The metadata is defined the way I've elected to define it and it's available via an [rclone](https://rclone.org) mount to Google Drive. This is all more complicated than listening to music should be, but I can hit play and listen to what I want to (and get decent recommendations too). Apparently that's too much to ask for from most services, or maybe I'm just out of touch.[^6]
|
||||
So here we are: I have a cloud-based Plex instance, it's used solely for music playback, the artist images match up with Last.fm and [my now page](/now). The metadata is defined the way I've elected to define it, and it's available via a [rclone](https://rclone.org) mount to Google Drive. This is all more complicated than listening to music should be, but I can hit play and listen to what I want to (and get decent recommendations too). Apparently that's too much to ask for from most services, or maybe I'm just out of touch.[^6]
|
||||
|
||||
[^1]: When I last leveraged Apple Music's catalogue I kept a smart playlist that highlighted releases that fell out of their streaming catalogue.
|
||||
[^2]: One of those apps that does exactly what it sets out to in a robust and reliable manner — plus it's native to macOS. Go buy it.
|
||||
|
|
|
@ -5,11 +5,11 @@ draft: false
|
|||
tags: ['Eleventy', 'JavaScript', 'development']
|
||||
---
|
||||
|
||||
I've relaunched, rebuilt and rewritten my personal blog more times than I can count and I've had a trail of posts I've never fully migrated at each turn. This weekend, while relaxing and watching movies I ported them into Eleventy and, in doing so, found that the pagination implementation I was using didn't scale well with the number of pages I added.<!-- excerpt -->
|
||||
I've relaunched, rebuilt and rewritten my personal blog more times than I can count, and I've had a trail of posts I've never fully migrated at each turn. This weekend, while relaxing and watching movies I ported them into Eleventy and, in doing so, found that the pagination implementation I was using didn't scale well with the number of pages I added.<!-- excerpt -->
|
||||
|
||||
I quickly explored having the current page act as a floating index of sorts wherein I would cap the number of pages shown at, say, `5` and then show the previous and next two pages on either side. Limiting the rendered count in [liquid.js](https://liquidjs.com/) was as simple as using the `limit` filter, but tracking the floating index and numbers on either side was more difficult than I would have liked.
|
||||
|
||||
Given that I was already iterating through all pages in my posts collection, my next thought (and the choice I ran with) was to fold all of the enumerated values into a `<select>` and use that to give users more control when paging. That select lives in [`paginator.liquid#17-28`](https://github.com/cdransf/coryd.dev/blob/78f6cfa93b6caaf6d82e9085939df9d2a14fc389/src/_includes/paginator.liquid#L17-L28) and looks like this:
|
||||
Given that I was already iterating through all pages in my posts collection, my next thought (and the choice I ran with) was to fold all the enumerated values into a `<select>` and use that to give users more control when paging. That select lives in [`paginator.liquid#17-28`](https://github.com/cdransf/coryd.dev/blob/78f6cfa93b6caaf6d82e9085939df9d2a14fc389/src/_includes/paginator.liquid#L17-L28) and looks like this:
|
||||
|
||||
```html
|
||||
<div class="flex flex-row items-center">
|
||||
|
|
|
@ -9,7 +9,7 @@ title: Referrals
|
|||
{{ title }}
|
||||
</h2>
|
||||
|
||||
Referral links for services I use. I save some money and you do as well if you choose to use them.
|
||||
Referral links for services I use. I save some money, and you do as well if you choose to use them.
|
||||
|
||||
- <a href="https://pr.tn/ref/X775YX40Z50G" onclick="va('event',{name:'Proton referral',data:{location:'Referrals'}})">Proton</a>
|
||||
- <a href="https://nextdns.io/?from=m56mt3z6" onclick="va('event',{name:'NextDNS referral',data:{location:'Referrals'}})">NextDNS</a>
|
||||
|
|
Reference in a new issue