Adding Open Graph to Pelican

I just added Open Graph support to this Pelican-generated site so pretty previews would show up when people shared my posts, and I figured I'd share the fairly tidy way I went about it in case other people were interested. I only added support for articles, my journal entries, and pages, the other headers on this site, because adding it for things like tags didn't make a lot of sense (why would anyone share those?).

The changes were pretty simple. First, I added the following to the <head> section of template.html, the part of my custom theme from which every webpage on my site inherits its style:

{% if article is defined %}
<meta property="og:type" content="article" />
<meta property="og:url" content="{{ SITEURL }}/{{ article.url }}" />
<meta property="og:title" content="{{ article.title | replace("\"", "&quot;") }}" />
<meta property="og:description" content="{{ article.content | striptags | replace("\"", "&quot;") | truncate(196, False, '...') }}" />
<meta property="og:image" content="{{ SITEURL }}/images/{% if article.opengraph_image is defined %}{{ article.opengraph_image }}{% else %}opengraph-default.jpg{% endif %}" />
{% endif %}

{% if page is defined %}
<meta property="og:type" content="website" />
<meta property="og:url" content="{{ SITEURL }}/{{ page.url }}" />
<meta property="og:title" content="{{ SITENAME }} - {{ page.title | replace("\"", "&quot;") }}" />
<meta property="og:description" content="{{ page.content | striptags | replace("\"", "&quot;") | truncate(196, False, '...') }}" />
<meta property="og:image" content="{{ SITEURL }}/images/{% if page.opengraph_image is defined %}{{ page.opengraph_image }}{% else %}opengraph-default.jpg{% endif %}" />
{% endif %}

It was obvious to treat what Pelican calls articles, my journal/blog entries, as articles, and I decided to treat my Pelican pages, basic information about me, as websites. My article titles stand well on their own, but my page titles are accompanied by Liz Denys, my SITENAME, because they don't make as much sense on their own.

Raw double quotes would be problematic in meta tags, so I make sure to replace them with the friendlier HTML entity &quot; in both the titles and descriptions with Jinja's replace function. I've found that double quotes in article titles mess other things up in Pelican, but still applied the replace to titles here just in case that changes.

The Open Graph description property, og:description, is generally a preview of the website's content, and since I don't use Pelican's summary attributes in my theme, I opted to grab a bit of the content directly with article.content or page.content. I couldn't find a definitive answer as to how much that should be - Open Graph says a description is "a one to two sentence description of your object", Facebook defines a description as "a clear description, at least two sentences long", and Twitter specifies that a description has a maximum of 200 characters. These seemed a bit conflicting, so I followed the clearest instruction, Twitter's, and limited my descriptions to 200 characters, including the possible trailing " ..." with Jinja's truncate function.

Some, but not all, of my articles and pages contain images, so I wanted a default og:image for the entire site that could get overridden on webpages where something specific made more sense. I briefly considered progamatically taking the first image to appear in a post for its preview, but when I looked through some older posts, I noticed this wasn't always the right choice both in terms of content and size - you need at least a 200px square for Facebook and probably want even larger. I uploaded a default og:image to "{{ SITEURL }}/images/opengraph-default.jpg". I named the file that instead of something that describes its content (currently an old photo of me in SIPB's machine room) so that I would only need to upload a new image to the same location to change it later. When I want to override this default for an article or page, I'd simply define opengraph_image in the meta information of its Markdown file like so:

Title: Inbox by Gmail's accidentally abusive algorithm
Slug: inboxs-accidentally-abusive-algorithm
Date: 2016-05-14 11:03
Tags: a little too helpful; content algorithms; email; gmail; Google; harassment; inbox; social; software engineering and computer science
opengraph_image: software/inboxs-accidentally-abusive-algorithm/inbox-speed-dial.jpg

The code in the template checks whether or not this meta information exists, so if I want to use the site default, I simply leave it out.

Once I added this to my site, I checked that my new Open Graph information rendered as I expected with Facebook's Sharing Debugger and Twitter's Card Validator. I also sent direct messages containing links to my posts on Slack to see how they rendered there with the new Open Graph information. Here's what one of my articles now looks like when someone posts it to Facebook:

Facebook share preview for Inbox by Gmail's speed dial with Open Graph information including an image, title, and description

That same article when it's shared on Twitter:

Twitter card preview for Inbox by Gmail's speed dial with Open Graph information including an image, title, and description

And finally, what it looks like when posted to Slack:

Slack preview for Inbox by Gmail's speed dial with Open Graph information including an image, title, and description

Impostor syndrome, an ancient arcane magic

Dealing with impostor syndrome isn't fun, but playing Dungeons & Dragons is! Here's a quick little spell combining the two:

Impostor syndrome

5th-level enchantment

Casting Time: 1 action
Range: 60 feet
Components: V, S
Duration: Concentration, up to 1 minute

You create an overwhelming sense of doubt in the mind of a creature[1] that you can see within range. The target must make a Wisdom saving throw. On a success, the spell ends. On a failed save, the target firmly believes it is less talented than it actually is, and its Intelligence score is reduced by 2 until this spell ends. Additionally, the target becomes very anxious, and any Constitution saving throws made to maintain concentration are made with disadvantage until this spell ends.

While a target is affected by this spell, the target rationalizes all previous accomplishments as luck and deeply fears its magic will fail and reveal it as a fraud.

On each of your turns for the duration, you can use your action to deal 4d8 psychic damage to the target. You do not need to be able to see the target or continue to be within range to deal this damage.

At the end of each of the affected target's turns, it can make a Wisdom saving throw. If you can no longer see the target, it has advantage on this saving throw. On a successful save, this spell ends.

At Higher Levels. When you cast this spell using a 6th-level spell slot, the target's Intelligence score is reduced by 3 on a failed save. When you use a spell slot of 7th level or higher, its Intelligence score is reduced by 4 on a failed save.

Available to classes: Bard, Sorcerer, Warlock, Wizard

[1] I framed the target as a "creature" and used the pronouns "it" and "its" because that's the standard way to define spell targets in 5E. It felt awkward to use this standard for something we all know is commonly cast on women, people of color, etc., all of whom are humans.

On the Fearless Girl, what constitutes art, authorial intent, and the patriarchy

A little over a month ago, Kristen Visbal's Fearless Girl statue was placed face to face with Charging Bull statue in Manhattan's Financial District:

Visbal's Fearless Girl stands strong with her hands on her hips
Moody Man's photo of Fearless Girl
Visbal's Fearless Girl stands firmly opposing Charing Bull
Anthony Quintano's photo of Fearless Girl facing Charging Bull

But she wasn't just the fearless young woman standing up to capitalism she seems to be. A plaque was placed next to her that read:

Know the power of women in leadership

SHE makes a difference.

State Street Global Advisors

The plaque said "State Street Global Advisors" and emphasized the word "SHE" because Fearless Girl was commissioned by State Street Global Advisors as an advertisement for their SHE index ETF. A lot of people, including the bull's artist, are upset because Fearless Girl's origins are partially related to an advertisement.

Interestingly, Fearless Girl and its plaque were rather ineffective as an ad. (The plaque has now been taken down.) It certainly looks weird to have something that says "State Street Global Advisors" on it by the statue, but it's not at all obvious that this is a reference to the SHE ticker. When I asked people who saw it in person, most of them told me they saw a strong young woman standing up against capitalism. When I myself moved closer and saw the plaque, I felt my eyes roll because it felt like a poor effort on behalf of a finance company to promote women[1]. I didn't recognize it as a publicity stunt for a ticker, and I work in finance. The average visitor is probably much less likely to realize "SHE" meant the ticker. I actually only know a few people who recognized the reference to State Street's ticker, and they all specifically pay attention to new financial products as part of their job. It took the internet to explain the ad to the masses, and it seemed to have gone viral in a way that didn't benefit State Street unless you really, truly believe that all press is good press.

Honestly, I don't love that this otherwise wonderful statue started as an ad; I'd love it a little bit more if it weren't one. However, public art is incredibly expensive to create - Arturo Di Modica spent $350,000 of his own money to create Charging Bull. Not everyone is independently wealthy enough to have a whopping 350 thousand dollars in 1989, which is roughly 700 thousand dollars today, around to drop on a statue that they don't even expect to see returns on. If we believe that "true" art is self-funded, we let art only be the domain of the rich and lose the viewpoints of everyone who doesn't have that kind of privilege. That isn't right.

Di Modica is upset not just because Fearless Girl was in part an advertisement: he is also upset that people are misinterpreting his Charging Bull. He says his statue is about "the strength and power of the American people" and does not like that people view it differently. Specifically, he does not like that some people interpret the bull as the strength and power of capitalism or men in the United States.[2] But once you release your art into the world, your intentions as the artist no longer comprise the only valid interpretation of your art. You cannot control how people react to your art, nor should you be allowed to.

Greg Fallis is one of those people who thinks Di Modica has a point about how authorial intent relates to both Di Modica's Charging Bull and Visbal's Fearless Girl. He writes:

Fearless Girl also changes the meaning of Charging Bull. Instead of being a symbol of "the strength and power of the American people" as Di Modica intended, it's now seen as an aggressive threat to women and girls — a symbol of patriarchal oppression.

Fallis notes that Fearless Girl highlighted the interpretation of Charging Bull as "a symbol of patriarchal oppression" as a valid interpretation. He shows that he understands that authorial intent isn't everything. He continues:

In effect, Fearless Girl has appropriated the strength and power of Charging Bull. Of course Di Modica is outraged by that. A global investment firm has used a global advertising firm to create a faux work of guerrilla art to subvert and change the meaning of his actual work of guerrilla art. That would piss off any artist.

See? It's not as simple as it seems on the surface. It's especially complicated for somebody (like me, for example) who appreciates the notion of appropriation in art. I've engaged in a wee bit of appropriation my ownself. Appropriation art is, almost by definition, subversive - and subversion is (also almost by definition) usually the province of marginalized populations attempting to undermine the social order maintained by tradition and the establishments of power. In the case of Fearless Girl, however, the subversion is being done by global corporatists as part of a marketing campaign. That makes it hard to cheer them on. There's some serious irony here.

Fallis's belief that subverting Charging Bull as "a symbol of patriarchal oppression" should solely be the "province of marginalized populations attempting to undermine the social order maintained by tradition and the establishments of power" leaves no room for works funded for corporate interests. Specifically, he states that the "global corporatists" who funded Fearless Girl as "part of a marketing campaign" invalidates it as subversive art. He implies that it only disrespects Di Modica's statue because it has, as Fallis later states, "hijacked the meaning of his work" under false pretenses.

What Fallis is really saying is that it's valid to see Charging Bull in lenses other than Di Modica's authorial intent, but Fearless Girl will always primarily be marred by its associations to State Street's SHE index ETF. Not only does this imply that some concept of authorial intent has to be the primary interpretation of Fearless Girl, but that the authorial intent of Fearless Girl is solely the province of State Street and is thus completely disconnected from its creator, Kristen Visbal.

While it's true that Kristen Visbal's Fearless Girl was funded by State Street, it is equally true that Visbal wove her own vision of the girl into the statue. Visbal put careful thought into the girl's expression:

"But I made sure to keep her features soft; she's not defiant, she's brave, proud and strong, not belligerent."

She made a deliberate choice as to who the girl should represent:

The sculptor based her work on two Delaware children - a friend's daughter she said had "great style and a great stance, and I told her to pretend she was facing a bull." The second was a "beautiful Latina girl, so everyone could relate to the Fearless Girl."

Removing Visbal's creativity from an examination of the authorial intent behind Fearless Girl just doesn't make sense. Whatever value authorial intent holds aside, her creative decisions undoubtedly influenced why I relate to a girl proud to face capitalism and take on Wall Street.

Later in his piece, Fallis focuses even more on State Street's intentions when trying to evaluate the merits of Fearless Girl:

And yet, there she is, the Fearless Girl. I love the little statue of the girl in the Peter Pan pose. And I resent that she's a marketing tool. I love that she actually IS inspiring to young women and girls. And I resent that she's a fraud. I love that she exists. And I resent the reasons she was created.

On its surface, this paragraph sounds like an understandable set of mixed feelings on the piece that I largely agree with, but Fallis hides something much, much more insidious - the idea that Fearless Girl is a "fraud" because State Street funded her creation.

Calling the girl a "fraud" has deeper underpinnings than only the unjust idea that getting funding invalidates art mentioned above. Women's ideas have been erased by men who restate their ideas, take get credit for them, and successfully erase women's involvement in them - much as Visbal's creative decisions are being erased because State Street funded her sculpture. Women's contributions have been consistently devalued because they have been supported by the money of others, usually men who collectively hold the keys to significantly more money than women do - much like how Di Modica's self-funded $350,000 work is considered true guerilla art while Visbal's has no such value because she didn't pay for it herself. Finally, as much as it pains me to say it, women's progress often depends on the approval of men and their willingness to take up their cause[3] - much as State Street chose to fund Visbal's work[4].

Do I think we should stop thinking critically about Fearless Girl? Absolutely not, but I definitely think we can't consider the context surrounding how the statues were funded and their authorial intents in a vacuum - they are fundamentally intertwined with the patriarchy.

[1] This doesn't seem inaccurate to me: State Street notes inclusion and diversity to be "strategic imperatives", but I could not find any specific numbers supporting this beyond a report from 2014. That report mentions some programs to support women more than a few times, but only one mention includes hard numbers: a leadership development and rotational program with 37 participants that was 57 percent women. That leadership program (which also had 46 percent individuals of color!) sounds like a positive force within their company, but a program with 37 people doesn't constitute a meaningful report on diversity on its own for a company with 33,000 employees. Further in the report, State Street mentions goals to increase diversity to be implemented by 2017, but they don't include numbers there. The same report from 2015 shows diversity goals for women employees and employees of color at various levels within the company on the page labeled 36. These goals may be better than the average financial company, but they aren't particularly satisfying. Furthermore, the report did not include anything about their 2015 breakdown of women employees and employees of color, nor can I find any follow-ups showing their diversity numbers as they implement these goals.
[2] But really, you picked a bull, a male cow, and gave him huge testicles, so can you really be surprised that people feel it might be related to the patriarchy? (The linked article also has a lot of other analysis of another article about Fearless Girl that I also dig into in the next paragraph.)
[3] Which sometimes only happens because it benefits them.
[4] And chose to instantiate any sort of program at all to increase diversity (see footnote 1) which is probably in no small part due to how it "creates better business results" as mentioned in that 2015 report (see footnote 3).

Switching to Pelican

Until today, my website was fragmented across a number of static pages and two WordPress instances. To simplify my life, I decided to unify them into one content management system instead of keeping that somewhat unwieldly mess around.

I had never really put a lot of thought into picking platforms before, hence the mess. For many years, my "homepage" was a single static page, which was easy enough since I've been writing HTML and CSS for about fifteen years. It later grew to five pages, but with some extremely simple scripting, it was just as easy to maintain my five static pages instead of just the one. My (modern) blog had always been a WordPress instance. I separated my food blog posts from my other posts for probably imprudent reasons a couple years ago, and I didn't think to do anything besides split it into two WordPress instances.

Eight years ago, I picked WordPress for a few reasons:

  • WordPress is a relatively simple system to operate.
  • Lots of people use WordPress, so you can usually find the answers to your questions with some quick internet searches. (Sadly, their own docs are, or at least were, kind of sad.)
  • The themes are highly customizable with HTML and CSS, and WordPress theme syntax isn't too hard to pick up.
  • I was hosting it on SIPB's and installing WordPress was a breeze and free. As a SIPB member, I knew the maintainers well, so I felt like I could safely host my site there with less machine maintenance.
  • I wanted some fancy plugins at the time, and WordPress had them. (I don't use them anymore.)

But WordPress has a lot of drawbacks, too:

  • It's written primarily in PHP. (No amount of homebrew server-side include scripting done in high school to make your first self-hosted blog can make writing PHP exciting.[1])
  • It requires a database.
  • You create the site through an online system. I hate web interfaces. I hate clicking to create things.
  • You need to constantly update WordPress itself (and its plugins) to keep up with security issues.
  • Dynamic websites don't load quickly. I barely used the dynamic features: an unnecessary Twitter module and comments I never really wanted aren't enough to justify that cost.

Since I wasn't really using any WordPress specific features or any dynamic features, I decided to move to a static website system instead. I could still have good control over my theming through HTML and CSS, eliminate a source of security vulnerabilities, improve loading speed, and stop using PHP and MySQL. There were a lot of additional upsides for me, too:

  • It's easy to keep my website under version control - both the files to generate the site and the generated site.
  • It's easy to move my website around different hosting options.
  • Comment integration is significantly more complicated, so the completely misguided temptation to allow comments is basically removed.

There are many static site generators around; I chose Pelican. Some specific reasons include:

  • It's in Python, and I like writing Python.
  • It's fairly well documented.
  • It has an active and growing community.
  • While I can continue to directly use HTML like I have for years, I could opt to learn and use the simpler Markdown later.
  • I can organize my raw content conveniently - files can be put in whatever folder or subfolder I want, and it can generate my website's hierarchy according to other rules.
  • People have already written some convenient plugins, specifically the neighbors plugin I use to add chronological navigation between articles.
  • My best friend already uses Pelican for his site. (This was probably about 80% of my reasoning.[2])

But I can't say that Pelican is without flaws; I encountered some pretty big ones in my switch:

  • The Pelican dev team made a big mistake in choosing the AGPL for the project's license. Themes by the dev team may also fall under Pelican's AGPL, and if that's the case, sites generated with those themes - and thus their content - may also be covered by the AGPL. I learned a bunch of Jinja because I had to create this theme without looking at any existing Pelican themes so that my site would avoid these licensing issues. I am working on a less personalized Pelican theme to release under the MIT license so that others can also have a simple theme to use without having to worry that the Pelican dev team might enforce the AGPL over their content.
  • Pelican doesn't believe in multiple categories. I converted all of my categories to tags, but it doesn't feel quite right. At some point, I'm going to break down and fork the project to add this functionality.
  • Putting double quotes in article titles doesn't work. Even if you use &quot; instead of ", Pelican will convert them to plain "s when inserted into link titles. This generates invalid HTML. I'll probably patch this when I get some time, but for now, I've just changed all the double quotes in my article titles to single quotes.
  • The WordPress importer didn't work so well for me. Maybe this had something to do with my having multiple categories for many of my posts? Honestly, I don't know because I wrote a hacky shell script instead of digging into it.

So yeah! My site's in Pelican now, so I'm just a line drawing away from knocking my website revamp off my list of 20 things for 2017. :)

[1] However, it was baby's first bash script and ushered in my decade long love of shell scripting. Still going strong. <3
[2] Thanks, Geoffrey, for letting me ping you with all the questions ever as I made this site.

20 things for 2017

I don't know how much I believe in New Year's resolutions, but I will happily use the buzz around them as inspiration to write down things I have started trying to do and things I recently decided I want to do. Given my philosophy that New Year's is a good excuse rather than motivation in and of itself, my list is likely to be updated throughout the year.

  1. Get up at 7 every day. I'm nearly there. (I'd really rather it be 6:30, but I've often found that goal bad for getting enough sleep since I have many friends who prefer to do social things into the night.)
  2. Matt and I just bought an elliptical. My basement is incredibly convenient, so I'd like to use that in my soon-to-be-reclaimed early mornings before work everyday.
  3. Become able to do the splits again. Maybe even oversplits like in middle school and high school.
  4. Sit down at the dining table for dinner when eating at home. Ideally I'd like to eat without being on my laptop. Fortunately, I think if I am on a laptop only occasionally, my brain will successfully form the habit around eating at the table without also forming one around eating while on my laptop.
  5. Drink more water. A year or so ago, I was on medication that caused me to be dehydrated more easily, and each day, I tallied how many pints of water I drank until I reached five pints. Coffee and tea could count towards only one pint. I hit that goal around the time I'd leave work and drank an amount of liquid without thinking after work that physically felt good. I also have suspicions that increased water consumption correlates to increased happiness for me.
  6. Don't buy coffee out unless it's for social or networking reasons. I don't do this a lot (haven't in a couple months, I think), but when I do, I always end up really unhappy with myself since I enjoy the process of making coffee and am lucky to not really need the caffeine to operate normally.
  7. Take photos of everything I buy that isn't a necessity. I'm not sure what exactly counts as a necessity yet! TBD, but so far, I think that there's no need to take photos of groceries and usual staple toiletries (helps that my routine conveniently isn't spendy), but photos will be required for things like takeout, meals out, and splurgy fancy soap. Replacing "bigger", longer-term-use household things like bath towels should be photographed, even if they're basically necessities, so that I can get a better feel for whether or not I'm properly balancing quality and price. I imagine what does and does not need to be photographed will make more sense as the year progresses. I don't think this will turn into a forever project, but I should stick to it for a whole year for the data mining.
  8. Do my various general finances maintenance more frequently. I basically have a good system, but I'd like to be doing the full set of things in that system once a month instead of when I happen to remember to.
  9. Try not to feel bad saying "no" to things. I don't know if I can hold myself accountable to this goal without spiraling downward if I spend lots of time reflecting on how well I'm doing. Maybe writing in a little (private) journal when I do say no and following up with notes about how it turned out okay would be reasonable?
  10. Put everything in the house away. Preferably this would have been done yesterday, but over all of 2017 is probably a goal that won't stress me out. Step one will be to figure out how to do this in increments that I can calendar well instead of freaking out that I will never have big enough blocks of time to make enough progress - and then punting because of that.
  11. Figure out a sustainable, meaningful way to engage with our government and do it. We are heading into dark times, and I am more privileged than most and need to leverage that to help those with less privilege. I already bother my representatives a bunch over the phone and email, but would like to spend more time crafting what I say to be concise and more effective. Living in New York City means my representatives generally agree with my views though, so probably some of the time I call to thank them can be better spent elsewhere. Unfortunately, protests, something I think I'd find rewarding as well as useful, are really risky for me. (A slight aside: Rebecca Solnit's Hope in the Dark is a comforting read right now.)
  12. Do the post-it goal planning Rachel Binx discussed in her XOXO talk.
  13. Practice singing at least three hours a week, preferably 30 minutes every day I don't have a lesson. Obviously this doesn't apply when I'm sick.
  14. Reformat the outline of that novel I want to write into a collection of shorter stories because this seems to be just as reasonable a way to say what I want to say. It's almost certainly more achievable to fit in with my unrelated full time job.
  15. Set up the LED lights for the digital piano already. The materials for this were birthday gifts all the way back in 2014.
  16. Tuesdays will be scheduled as project nights, for writing, drawing, composing, experimenting in the kitchen, or that LED piano situation I keep putting off. Routines are the sorts of things that give me the energy for optional things, which are often the things in my control that bring me the most joy. Don't schedule other things unless it's completely unavoidable, and definitely don't do that more than once a month. I've poked through my calendar for 2017, and I have only two things on Tuesdays! One is a book talk, and the other is traveling back from a wedding. This seems totally doable!
  17. Leave one weeknight a week unscheduled for friend emergencies. ("Emergencies" is definitely the wrong word, but I haven't been able to think of the right one today. Emergencies undoubtedly fall into the set of things I'd use this for, but probably I would drop other things, too.) Maybe can be used for friends who don't plan at least a week out like I do. Likely this will mostly be Mondays, but it doesn't need to be on the same day every week like scheduled project night. Maybe I will aim for Mondays because I have only two Mondays with things scheduled: D&D this Monday and a wedding in July. Downside is that if I want to use this for friends who don't plan in advance, Monday is a bad day because people I know don't seem to be geared up to do same day things then, which is even worse for the original goal of wanting to have time for friends in need. Hmm. Also, the failure mode of this is more time at home, which is always excellent.
  18. Finally finish the overhaul: switch the blogs to a static site generator that also contains the rest of my site. Draw that line drawing self-portrait for the front page.
  19. Blog at least twice a month, preferably every week. I have so many things I've written the first draft for, but haven't polished or haven't uploaded because they're not in a great format out of the box (like my zine about riding the subway with anxiety and PTSD). Maybe I'm being a bit hard on myself for not getting to that in the past couple months given my travel schedule and how much time I've spent sick, but twice a month should be a sustainable default.
  20. Hold myself accountable on these things. I think I'm going to start by making a chart to mark off some metric of progress for the bigger things, but instead of having a cell for every week, I'll have it be 52 cells wide and the top row will be for surviving that week. In theory, this will be enough to track progress, and choosing not to link specific milestones directly to specific weeks will allow me to look at it without getting immediately stressed out by getting "behind" for not doing something for every category each week. I also want to summarize my progress in (monthly?) blog posts. Unclear if those would always count towards the goal to blog twice a month, especially if it's just progress without introspection. The ideal accountability post probably would count because I'd like to focus in how a couple changes have affected me in these posts. Also, posting vague posts is something I've wanted to get more comfortable with for a while, and this type of vague posting even comes with the additional tangible benefits of being held accountable!

Thanks to the fabulous Jeanna Kadlec for starting the Facebook thread that inspired this post earlier today!