diff --git a/_plugins/link-checker-exclude-domains.txt b/_plugins/link-checker-exclude-domains.txt
index 242e1ef0..f43ba3c2 100644
--- a/_plugins/link-checker-exclude-domains.txt
+++ b/_plugins/link-checker-exclude-domains.txt
@@ -14,4 +14,6 @@ etherscan.io
www.nytimes.com
web.archive.org
www.skillshare.com
-bfy.tw
\ No newline at end of file
+bfy.tw
+www.reddit.com
+leetcode.com
diff --git a/_posts/2010/2010-05-20-single-sign-on-tomcat-negotiate-authenticator-kerberos-ntlm-w-waffle.markdown b/_posts/2010/2010-05-20-single-sign-on-tomcat-negotiate-authenticator-kerberos-ntlm-w-waffle.markdown
index aba880fd..ba3c4f52 100644
--- a/_posts/2010/2010-05-20-single-sign-on-tomcat-negotiate-authenticator-kerberos-ntlm-w-waffle.markdown
+++ b/_posts/2010/2010-05-20-single-sign-on-tomcat-negotiate-authenticator-kerberos-ntlm-w-waffle.markdown
@@ -133,5 +133,5 @@ My laptop is not a member of an Active Directory domain, but you would see domai
- [Tomcat SPNEGO by Dominique Guerrin](https://web.archive.org/web/20120114182927/https://tomcatspnego.codeplex.com/): this is a very good prototype of a filter. It uses JNI and not JNA, doesn’t support NTLM POST and the code is pretty thick.
- [SPNEGO Sourceforge](https://spnego.sourceforge.net/): it’s a nightmare to configure, doesn’t work without an Active Directory domain and requires an SPN
-- [JCIFS NTLM](https://jcifs.samba.org/src/docs/ntlmhttpauth.html): no longer supported and they recommend using Jespa
+- [JCIFS NTLM](https://web.archive.org/web/20130117024232/https://jcifs.samba.org/src/docs/ntlmhttpauth.html): no longer supported and they recommend using Jespa
- [Jespa](https://www.ioplex.com/jespa.html): a commercial implementation that claims to do the same thing as Waffle, but uses the Netlogon service instead of the native Windows API
diff --git a/_posts/2011/2011-03-27-a-rake-task-for-copying-mongodb-databases.markdown b/_posts/2011/2011-03-27-a-rake-task-for-copying-mongodb-databases.markdown
index 7e9f6ca2..5ba9bff2 100644
--- a/_posts/2011/2011-03-27-a-rake-task-for-copying-mongodb-databases.markdown
+++ b/_posts/2011/2011-03-27-a-rake-task-for-copying-mongodb-databases.markdown
@@ -82,7 +82,7 @@ end
#### No Admin for you on MongoHQ
-If your destination database is on [MongoHQ](http://mongohq.com) you will get the following error.
+If your destination database is on [MongoHQ](https://web.archive.org/web/20110202114207/https://mongohq.com/home) you will get the following error.
```
Database command 'copydbgetnonce' failed: {"assertion"=>"unauthorized db:admin lock type:1 client:ip",
diff --git a/_posts/2011/2011-03-30-a-rake-task-for-copying-data-between-amazon-s3-buckets.markdown b/_posts/2011/2011-03-30-a-rake-task-for-copying-data-between-amazon-s3-buckets.markdown
index fa219686..b1bde2f8 100644
--- a/_posts/2011/2011-03-30-a-rake-task-for-copying-data-between-amazon-s3-buckets.markdown
+++ b/_posts/2011/2011-03-30-a-rake-task-for-copying-data-between-amazon-s3-buckets.markdown
@@ -11,7 +11,7 @@ dblog_post_id: 191
Now that we have a Rake task to copy MongoDB databases, we are facing the next problem. We store images on Amazon S3 and each environment has its own S3 bucket. So copying data from production to staging also needs to synchronize the _production_ and the _staging_ S3 buckets, hopefully very quickly for a very large number of files.
-We’ll inspire ourselves from [this post](https://www.pedaldrivenprogramming.com/2011/02/copy-contents-of-one-s3-bucket-to-another//) and use [right_aws](https://github.com/rightscale/right_aws) to connect to S3 in Ruby. Our S3 keys are stored in the _heroku.yml_ file, your mileage may vary.
+We’ll inspire ourselves from [this post](https://web.archive.org/web/20130801073007/https://www.pedaldrivenprogramming.com/2011/02/copy-contents-of-one-s3-bucket-to-another/) and use [right_aws](https://github.com/rightscale/right_aws) to connect to S3 in Ruby. Our S3 keys are stored in the _heroku.yml_ file, your mileage may vary.
{% highlight ruby %}
def s3i
diff --git a/_posts/2011/2011-06-20-jna-is-now-a-githubber.markdown b/_posts/2011/2011-06-20-jna-is-now-a-githubber.markdown
index 2d9d123f..99f695d3 100644
--- a/_posts/2011/2011-06-20-jna-is-now-a-githubber.markdown
+++ b/_posts/2011/2011-06-20-jna-is-now-a-githubber.markdown
@@ -27,7 +27,7 @@ You can imagine a few sales execs in a room making a deal and celebrating with a
![]({{ site.url }}/images/posts/2011/2011-06-20-jna-is-now-a-githubber/image_18.jpg)
-The user experience of Java.net sends you back by a decade. It seems that the team never had a designer. There’re big navigation problems and some small ones. For example, you cannot get rid of the links about Java.net under the "Get Involved" section. If I am looking at JNA and I see "Get Involved", I want to get involved in JNA, duh. The same goes for "Get Informed". It leads to all kinds of places. Generally 80% of the layout has nothing to do with your project and replacing the whole thing with your own site (seems possible, Glassfish has [done it](https://glassfish.java.net/)) is a total overkill for smaller teams like JNA. I’d rather write some more code for the project itself than have to struggle with building a website on top of Kenai.
+The user experience of Java.net sends you back by a decade. It seems that the team never had a designer. There’re big navigation problems and some small ones. For example, you cannot get rid of the links about Java.net under the "Get Involved" section. If I am looking at JNA and I see "Get Involved", I want to get involved in JNA, duh. The same goes for "Get Informed". It leads to all kinds of places. Generally 80% of the layout has nothing to do with your project and replacing the whole thing with your own site (seems possible, Glassfish has [done it](https://web.archive.org/web/20110726064803/https://glassfish.java.net/)) is a total overkill for smaller teams like JNA. I’d rather write some more code for the project itself than have to struggle with building a website on top of Kenai.
![]({{ site.url }}/images/posts/2011/2011-06-20-jna-is-now-a-githubber/image_14.jpg)
diff --git a/_posts/2011/2011-06-29-moving-to-new-york-a-guide-for-software-engineers.markdown b/_posts/2011/2011-06-29-moving-to-new-york-a-guide-for-software-engineers.markdown
index 4e732d11..4438ec67 100644
--- a/_posts/2011/2011-06-29-moving-to-new-york-a-guide-for-software-engineers.markdown
+++ b/_posts/2011/2011-06-29-moving-to-new-york-a-guide-for-software-engineers.markdown
@@ -41,7 +41,7 @@ I am totally not kidding about number 4.
#### Craftsmanship
-I think what makes New York an incredible technology scene today is the surging number of technology startups with that include [bit.ly](https://bit.ly/), [10gen](https://www.mongodb.com/) or [Foursquare](https://foursquare.com/). The list is pretty long, check out [nytm.org/made](https://nytm.org/made).
+I think what makes New York an incredible technology scene today is the surging number of technology startups with that include [bit.ly](https://bit.ly/), [10gen](https://www.mongodb.com/) or [Foursquare](https://foursquare.com/). The list is pretty long, check out [nytm.org/made](https://web.archive.org/web/20170112034617/https://nytm.org/made).
![]({{ site.url }}/images/posts/2011/2011-06-29-moving-to-new-york-a-guide-for-software-engineers/image_4.jpg)
diff --git a/_posts/2011/2011-11-02-moving-to-new-york-all-you-need-is-the-tech-made-in-nyc-list.markdown b/_posts/2011/2011-11-02-moving-to-new-york-all-you-need-is-the-tech-made-in-nyc-list.markdown
index 891406cb..f600bfd2 100644
--- a/_posts/2011/2011-11-02-moving-to-new-york-all-you-need-is-the-tech-made-in-nyc-list.markdown
+++ b/_posts/2011/2011-11-02-moving-to-new-york-all-you-need-is-the-tech-made-in-nyc-list.markdown
@@ -13,11 +13,11 @@ In the past few months I’ve talked to dozens of engineering candidates and hir
For those that make the cut, but aren’t hired for headcount reasons, I will offer my help to find another startup in NYC. There’re hundreds! Here’s what I ask them to do.
-1. Go to [https://nytm.org/made/](https://nytm.org/made/) and make a list of five startups that you would love to work for. Email me the list.
+1. Go to [https://web.archive.org/web/20170112034617/https://nytm.org/made/](https://web.archive.org/web/20170112034617/https://nytm.org/made/) and make a list of five startups that you would love to work for. Email me the list.
2. I will do my best to make a direct introduction to someone in those companies.
I know a lot of people, but I don’t know folks in even half of the names in that list. I’ve been reaching out to friends and trying to use the opportunity of introducing a potential hire to make a connection for myself. It has been a winning deal and I know that a few people are now in late stages of interviewing with some of the most promising New York City startups. And I learned a ton about how other companies build software.
If you work for a company on that list and don’t know me, drop me an e-mail (dblock[at]dblock[dot]org) and come visit us at [GeneralAssemb.ly](https://generalassemb.ly). I want to hear about your technology and I’ll show you ours.
-If you’re considering moving to NYC or are here and looking for a job, don’t hesitate to drop me your resume, you never know. And check out the [Made in NYC list](https://nytm.org/made/). Pick five startups that you would want to work for and e-mail them cold, referencing this post.
+If you’re considering moving to NYC or are here and looking for a job, don’t hesitate to drop me your resume, you never know. And check out the [Made in NYC list](https://web.archive.org/web/20170112034617/https://nytm.org/made/). Pick five startups that you would want to work for and e-mail them cold, referencing this post.
diff --git a/_posts/2011/2011-12-20-blame-it-all-on-mongodb.markdown b/_posts/2011/2011-12-20-blame-it-all-on-mongodb.markdown
index 4e014ca1..80d4fee6 100644
--- a/_posts/2011/2011-12-20-blame-it-all-on-mongodb.markdown
+++ b/_posts/2011/2011-12-20-blame-it-all-on-mongodb.markdown
@@ -11,7 +11,7 @@ You may have read my [previous post](https://code.dblock.org/mongoid-202-mongo-b
We rolled back to 1.3.1 and were running fine in production for a long time. On Friday, we started seeing intermittent _deadlock: recursive locking_ errors from the driver and our site was struggling to stay up. Very quickly the error rate rendered it unusable. A Google search yielded Mongo Ruby driver bug [RUBY-274](https://jira.mongodb.org/browse/RUBY-274), describing the exact error, which pointed a Ruby 1.9.2 threading issue [#4266](https://bugs.ruby-lang.org/issues/4266), explained in [this blog post](https://web.archive.org/web/20120228164435/https://blog.stochasticbytes.com/2011/01/rubys-threaderror-deadlock-recursive-locking-bug/).
-We were confused why this suddenly started happening with no apparent reason, created a ticket with our MongoDB provider [MongoHQ](http://mongohq.com) and bounced the replica set members one-by-one as well as our app on Heroku. It did nothing.
+We were confused why this suddenly started happening with no apparent reason, created a ticket with our MongoDB provider [MongoHQ](https://web.archive.org/web/20110202114207/https://mongohq.com/home) and bounced the replica set members one-by-one as well as our app on Heroku. It did nothing.
Kyle, the maintainer of the Ruby driver at 10gen was replying to [RUBY-274](https://jira.mongodb.org/browse/RUBY-274) and told us to upgrade the driver to 1.5.2. We did. All tests passed (we have over 2000) and our staging site was operating normally. But after pushing it in production where we have a replica set, we were now seeing a different error: _stack level too deep_, with _/app/.bundle/gems/ruby/1.9.1/gems/mongo-1.5.2/lib/mongo/util/pool.rb:72_ on top of a cut-off stack trace. By then I haven’t gotten up from my chair for six hours straight and you bet I was thinking the Ruby driver was the worst piece of crap as I was angrily typing [RUBY-393](https://jira.mongodb.org/browse/RUBY-393), a knee-jerk reaction.
diff --git a/_posts/2012/2012-03-05-why-you-should-leave-microsoft-too.markdown b/_posts/2012/2012-03-05-why-you-should-leave-microsoft-too.markdown
index c89193bb..0ab15a2d 100644
--- a/_posts/2012/2012-03-05-why-you-should-leave-microsoft-too.markdown
+++ b/_posts/2012/2012-03-05-why-you-should-leave-microsoft-too.markdown
@@ -55,4 +55,4 @@ In my experience, few people return to their mother ship. But it’s there.
#### Want to Jump?
-None of this may be for you. But, as always, my offer to help you stands. If you want to work for any of the companies in the [NYTM.org list](https://nytm.org/made/) after reading this post, drop me a note. I’ll help you with direct introductions to the hiring managers.
+None of this may be for you. But, as always, my offer to help you stands. If you want to work for any of the companies in the [NYTM.org list](https://web.archive.org/web/20170112034617/https://nytm.org/made/) after reading this post, drop me a note. I’ll help you with direct introductions to the hiring managers.
diff --git a/_posts/2012/2012-10-13-the-tech-it-just-worked-thanks-aws.markdown b/_posts/2012/2012-10-13-the-tech-it-just-worked-thanks-aws.markdown
index 070dbd13..72257ae4 100644
--- a/_posts/2012/2012-10-13-the-tech-it-just-worked-thanks-aws.markdown
+++ b/_posts/2012/2012-10-13-the-tech-it-just-worked-thanks-aws.markdown
@@ -15,6 +15,6 @@ The public launch of [Art.sy](https://artsy.net) via the [New York Times](https:
I first saw an Art.sy prototype in January 2011. It was built in PHP, had a Java web-services back-end talking SOAP and running on a MySQL database. By March that year the tech was rebooted. We’ve iterated at a crazy pace steadily opening the beta for almost two years. And finally, we've served over 10x the highest known number of simultaneous users on a complex, content-rich and interactive system last week. The pounding of our service continues today, setting a new traffic baseline and plenty of future growth to look forward to.
-I’ve seen and contributed first hand to plenty of failing and succeeding technology. Aside of having an A-team of engineers, what makes a successful launch possible? It’s without any doubt, the Cloud. It finally enables web technology to "just work". We use a plethora of services, including [Heroku](https://heroku.com/) and [MongoHQ](http://mongohq.com/), all of which run on [AWS](https://aws.amazon.com/). We designed a very simple and horizontally scalable system and then just provisioned front-ends with the growing traffic needs. I realize that I now take this kind of infrastructure for granted, and am always surprised when I meet people that have their minds blown by it. If the concept of getting a booted server responding to web requests in under 60 seconds sounds like science-fiction to you, time to press that reset button and find a new job!
+I’ve seen and contributed first hand to plenty of failing and succeeding technology. Aside of having an A-team of engineers, what makes a successful launch possible? It’s without any doubt, the Cloud. It finally enables web technology to "just work". We use a plethora of services, including [Heroku](https://heroku.com/) and [MongoHQ](https://web.archive.org/web/20110202114207/https://mongohq.com/home/), all of which run on [AWS](https://aws.amazon.com/). We designed a very simple and horizontally scalable system and then just provisioned front-ends with the growing traffic needs. I realize that I now take this kind of infrastructure for granted, and am always surprised when I meet people that have their minds blown by it. If the concept of getting a booted server responding to web requests in under 60 seconds sounds like science-fiction to you, time to press that reset button and find a new job!
Want a list of new and old tech to check out? Read my blog post on [Art.sy’s Tech Stack](https://artsy.github.io/blog/2012/10/10/artsy-technology-stack/).
diff --git a/_posts/2012/2012-10-20-jna-350-released.markdown b/_posts/2012/2012-10-20-jna-350-released.markdown
index c75cef07..377dab27 100644
--- a/_posts/2012/2012-10-20-jna-350-released.markdown
+++ b/_posts/2012/2012-10-20-jna-350-released.markdown
@@ -9,7 +9,7 @@ dblog_post_id: 353
---
![]({{ site.url }}/images/posts/2012/2012-10-20-jna-350-released/image_7.jpg)
-JNA 3.5.0 has been quietly released last week. JNA stands for Java Native Access and probably powers tens of thousands of applications that need to access native library functions without the hassle of JNI. Check out the 3.5.0 [CHANGELOG](https://github.com/twall/jna/blob/master/CHANGES.md) and get it from [Github](https://github.com/twall/jna) or [Java.net Maven](https://maven.java.net/index.html#nexus-search;quick~jna).
+JNA 3.5.0 has been quietly released last week. JNA stands for Java Native Access and probably powers tens of thousands of applications that need to access native library functions without the hassle of JNI. Check out the 3.5.0 [CHANGELOG](https://github.com/twall/jna/blob/master/CHANGES.md) and get it from [Github](https://github.com/twall/jna).
> [https://github.com/twall/jna](https://github.com/twall/jna)
diff --git a/_posts/2013/2013-01-12-help-me-fix-tech-recruiting-become-a-recruiter.markdown b/_posts/2013/2013-01-12-help-me-fix-tech-recruiting-become-a-recruiter.markdown
index da500e14..8510b121 100644
--- a/_posts/2013/2013-01-12-help-me-fix-tech-recruiting-become-a-recruiter.markdown
+++ b/_posts/2013/2013-01-12-help-me-fix-tech-recruiting-become-a-recruiter.markdown
@@ -31,7 +31,7 @@ When I worked at Microsoft my manager used to talk about an "open door policy".
I’ve written several blog posts that have gone viral, including [Your Commute is Killing You, Move to New York](https://www.dblock.org/your-commute-is-killing-you-move-to-new-york), followed by [Moving to New York? A Guide for Software Engineers](/moving-to-new-york-a-guide-for-software-engineers) and even a more comical [Sitting is Killing You? Move to New York](/sitting-is-killing-you-move-to-new-york). (You get the idea – move to New York!) Since then I’ve received hundreds of emails and have invited countless engineers to visit me at work. A disproportionate amount of these are talented developers stuck in a cubicle working for the BORG or generally unhappy with their current situation. But more than a new job, they want a first, personal, connection to the New York startup scene. Someone helped me with this a long time ago – I owe it to them to return the favor.
-I’ve offered at least 3 personal connections to every one of these engineers visiting me. I’ve directed others to [NYTM](https://nytm.org/made-in-nyc) and offered more personal help if cold connections failed. I’ve hooked up people with startup CEOs running tiny teams at GeneralAssemb.ly where we used to have our office and that was my entry in the NYC startup scene, engineering managers that are actively hiring at other NYC startups or other technologists with similar technical interests at large.
+I’ve offered at least 3 personal connections to every one of these engineers visiting me. I’ve directed others to [NYTM](https://web.archive.org/web/20170101100428/https://web.archive.org/web/20170112034617/https://nytm.org/made) and offered more personal help if cold connections failed. I’ve hooked up people with startup CEOs running tiny teams at GeneralAssemb.ly where we used to have our office and that was my entry in the NYC startup scene, engineering managers that are actively hiring at other NYC startups or other technologists with similar technical interests at large.
I don’t want anything from these referrals except an opportunity to help them. I am very emotionally attached to New York and helping a single engineer helps the NYC tech scene rise.
diff --git a/_posts/2015/2015-08-03-what-does-a-cto-do-creating-thinking-time-while-walking-to-work.markdown b/_posts/2015/2015-08-03-what-does-a-cto-do-creating-thinking-time-while-walking-to-work.markdown
index f5d53550..324d8ebc 100644
--- a/_posts/2015/2015-08-03-what-does-a-cto-do-creating-thinking-time-while-walking-to-work.markdown
+++ b/_posts/2015/2015-08-03-what-does-a-cto-do-creating-thinking-time-while-walking-to-work.markdown
@@ -27,7 +27,7 @@ My mind is racing with the following thought.
### Choosing from Priorities
-First, I choose between _people_, _technology_ and _business_. I default to _business_, because this is my weakest domain or after reading something particularly inspirational (eg. [Breaking Smart: Season 1](https://breakingsmart.com/season-1)). I usually choose _people_ next and _technology_ last.
+First, I choose between _people_, _technology_ and _business_. I default to _business_, because this is my weakest domain or after reading something particularly inspirational (eg. [Breaking Smart: Season 1](https://web.archive.org/web/20160117124314/http://breakingsmart.com/season-1/)). I usually choose _people_ next and _technology_ last.
### Formulating the Question
diff --git a/_posts/2015/2015-11-25-zooming-out-to-give-away-your-legos.markdown b/_posts/2015/2015-11-25-zooming-out-to-give-away-your-legos.markdown
index 8613193d..b795549c 100644
--- a/_posts/2015/2015-11-25-zooming-out-to-give-away-your-legos.markdown
+++ b/_posts/2015/2015-11-25-zooming-out-to-give-away-your-legos.markdown
@@ -22,7 +22,7 @@ Let's step up a notch.
I spend a lot of time with managers digesting their problems with running a team and working through complex relationships between individuals. I generally focus on helping them identify what they do poorly and finding opportunities to improve. That helps them avoid making the same mistakes twice, but nobody ever walks out of such a conversation inspired to become truly great at anything.
-The most useful piece of advice I can ever give to someone who wants to become great at their job is to _work themselves out of it_, better explained in Molly Graham's [Give Away Your Legos](https://firstround.com/review/give-away-your-legos-and-other-commandments-for-scaling-startups).
+The most useful piece of advice I can ever give to someone who wants to become great at their job is to _work themselves out of it_, better explained in Molly Graham's [Give Away Your Legos](https://review.firstround.com/give-away-your-legos-and-other-commandments-for-scaling-startups).
> So, how do you inspire leads to give away their legos?
diff --git a/_posts/2016/2016-12-22-the-art-is-officially-online.markdown b/_posts/2016/2016-12-22-the-art-is-officially-online.markdown
index 0fdb6506..8ff47e82 100644
--- a/_posts/2016/2016-12-22-the-art-is-officially-online.markdown
+++ b/_posts/2016/2016-12-22-the-art-is-officially-online.markdown
@@ -17,7 +17,7 @@ Artsy did not participate in the online auctions panel, but our presence was str
-A lot of talk was about barriers (e.g. buyer protection), but very little about innovation. Artnet wants to build new tools atop of pricing data and making it easy to buy art at the "right" price. Christie's (Collectrium) is focusing on smarter client tools and better information management. Naturally these speak to those companies' strongest products, but what about the big picture? _Now that the art world has come online, what would we like it to be?_ I see the future where there are many more more galleries, not fewer (e.g. [China has 100 cities, many brand new, with population exceeding 1MM people compared to only 10 in the U.S.](https://www.weforum.org/agenda/2016/06/china-cities-growing-numbers-are-stunning/)). One with a lot more local attention and international opportunity enabled by the Internet. More small art fairs like INK and fewer lavish parties with people who don't care about art. I imagine new digital interfaces, ranging from augmented and virtual reality to voice ([ask your Amazon Echo (Alexa) to "enable Artsy" today](https://artsy.github.io/blog/2016/11/30/bringing-artsy-to-amazon-echo-alexa/)). I see growth on the very top of the market and a lot more density in the lower tiers, where people interested in art become first time buyers more frequently.
+A lot of talk was about barriers (e.g. buyer protection), but very little about innovation. Artnet wants to build new tools atop of pricing data and making it easy to buy art at the "right" price. Christie's (Collectrium) is focusing on smarter client tools and better information management. Naturally these speak to those companies' strongest products, but what about the big picture? _Now that the art world has come online, what would we like it to be?_ I see the future where there are many more more galleries, not fewer (e.g. [China has 100 cities, many brand new, with population exceeding 1MM people compared to only 10 in the U.S.](https://web.archive.org/web/20190122085912/https://www.weforum.org/agenda/2016/06/china-cities-growing-numbers-are-stunning/)). One with a lot more local attention and international opportunity enabled by the Internet. More small art fairs like INK and fewer lavish parties with people who don't care about art. I imagine new digital interfaces, ranging from augmented and virtual reality to voice ([ask your Amazon Echo (Alexa) to "enable Artsy" today](https://artsy.github.io/blog/2016/11/30/bringing-artsy-to-amazon-echo-alexa/)). I see growth on the very top of the market and a lot more density in the lower tiers, where people interested in art become first time buyers more frequently.
That latter sentiment was echoed by Magnus Resch at the artist management panel. I [very much dislike his disruptive message](https://code.dblock.org/2016/08/12/democratizing-the-art-world-without-pitchforks.html), I disagree when he calls artists to deliver artworks directly to auctions (ironically offering to do it himself for Hank Willis Thomas sitting next to him) and I disagree when he says MCH is the company reaping the biggest profits from art fairs and disagree when he calls for artists to organize their own art fairs. Yet, he highlighted one very important challenge during this panel - the filling of the gap between those _interested_ in art and those _buying_ art.
diff --git a/_posts/2017/2017-07-11-the-future-of-the-art-market-on-the-blockchain.markdown b/_posts/2017/2017-07-11-the-future-of-the-art-market-on-the-blockchain.markdown
index 3f6cfd04..52b8a36e 100644
--- a/_posts/2017/2017-07-11-the-future-of-the-art-market-on-the-blockchain.markdown
+++ b/_posts/2017/2017-07-11-the-future-of-the-art-market-on-the-blockchain.markdown
@@ -5,7 +5,7 @@ date: 2017-07-11
tags: [blockchain, art market]
comments: true
---
-I recently gave a talk at the "ETH Meets New York" Blockchain Symposium with a catchy title of "The Platform View of the Blockchain" ([video](https://www.video.ethz.ch/events/2017/eth-meets-ny/blockchain/26c6cde8-7239-439b-bfc3-9a96f84e49ca.html)). I have been thinking about Blockchain a lot at [Artsy](https://www.artsy.net), but I am not, by any means, a Blockchain expert (unlike the intimidating group of speakers that included [Meltem Demirors](https://www.linkedin.com/in/meltdem/) and [Joe Lubin](https://www.linkedin.com/in/joseph-lubin-48406489/)). I've also never owned any coins. Finally, I work for a platform, which should, a priori, dislike the idea of decentralized anything. I am, however, very excited about the possibilities that this new technology brings to the Art World and so I would like to clear the confusion that is perpetrated by a perplexed press, as highlighted by a [recent article in Art Market Monitor](https://www.artmarketmonitor.com/2017/07/10/the-continuing-confusion-around-art-coin-art-block-chain/), in the short lighting talk below and in this post.
+I recently gave a talk at the "ETH Meets New York" Blockchain Symposium with a catchy title of "The Platform View of the Blockchain" ([video](https://www.video.ethz.ch/events/2017/eth-meets-ny/blockchain/26c6cde8-7239-439b-bfc3-9a96f84e49ca.html)). I have been thinking about Blockchain a lot at [Artsy](https://www.artsy.net), but I am not, by any means, a Blockchain expert (unlike the intimidating group of speakers that included [Meltem Demirors](https://www.linkedin.com/in/meltdem/) and [Joe Lubin](https://www.linkedin.com/in/joseph-lubin-48406489/)). I've also never owned any coins. Finally, I work for a platform, which should, a priori, dislike the idea of decentralized anything. I am, however, very excited about the possibilities that this new technology brings to the Art World and so I would like to clear the confusion that is perpetrated by a perplexed press, as highlighted by a [recent article in Art Market Monitor](https://web.archive.org/web/20171001024326/https://www.artmarketmonitor.com/2017/07/10/the-continuing-confusion-around-art-coin-art-block-chain/), in the short lighting talk below and in this post.
diff --git a/_posts/2017/2017-08-21-introducing-sup-for-slack.markdown b/_posts/2017/2017-08-21-introducing-sup-for-slack.markdown
index e28a6f74..2425b895 100644
--- a/_posts/2017/2017-08-21-introducing-sup-for-slack.markdown
+++ b/_posts/2017/2017-08-21-introducing-sup-for-slack.markdown
@@ -8,7 +8,7 @@ comments: true
**Update**: I wrote a longer article, ["What “S’Up”? Using Triads to Develop Tribal Leadership"](https://medium.com/artsy-blog/what-sup-using-triads-to-develop-tribal-leadership-a01d4f207bf8) on the Artsy Medium blog about this.
> The most valuable relationships are not made of two people, they’re made of three. A third person will always stabilize and grow the relationship between the other two. It’s called a triad, and the more you create, the stronger your network.
-> - via [CultureSync, Tribal Leadership](https://www.culturesync.net/toolbox/intro-to-triads)
+> - via [CultureSync, Tribal Leadership](https://web.archive.org/web/20170914154315/https://www.culturesync.net/toolbox/intro-to-triads)
I was introduced to S'Up, short for "standup", between three randomly selected people at [Artsy](https://www.artsy.net). Every time I met 3 of my colleagues, especially those who didn't work on my team, I came out with incredible insights. We organized those meetings manually, then [Ilya Kavalerov](https://github.com/ilyakava) automated the process by creating [a web app](https://github.com/artsy/sup). Today I am launching [S'Up for Slack Teams](https://sup.playplay.io).
diff --git a/_posts/2017/2017-10-10-artsy-overview-for-coalition-for-queens-and-q-and-a.markdown b/_posts/2017/2017-10-10-artsy-overview-for-coalition-for-queens-and-q-and-a.markdown
index 285936b7..18dc60af 100644
--- a/_posts/2017/2017-10-10-artsy-overview-for-coalition-for-queens-and-q-and-a.markdown
+++ b/_posts/2017/2017-10-10-artsy-overview-for-coalition-for-queens-and-q-and-a.markdown
@@ -5,6 +5,6 @@ date: 2017-10-10
tags: [artsy]
comments: true
---
-I did an overview of [Artsy](https://www.artsy.net) for Coalition for Queens, [C4Q](http://queenstech.org), followed by a Q&A with Kana Abe (Publishing Dev Lead at Artsy), Christina Thompson (engineer and author of a viral blog post [What it Feels Like to Work in a Supportive Environment for Female Engineers](https://medium.com/artsy-blog/what-it-feels-like-to-work-in-a-supportive-environment-for-female-engineers-3c994a001007)), Orta Therox (Staff Engineer at Artsy, Design Dictator at CocoaPods) and Craig Spaeth (Director of Engineering at Artsy) ([youtube](https://www.youtube.com/watch?v=leiKlKXRvuk)).
+I did an overview of [Artsy](https://www.artsy.net) for Coalition for Queens, [C4Q](https://web.archive.org/web/20160304212604/http://www.c4q.nyc/), followed by a Q&A with Kana Abe (Publishing Dev Lead at Artsy), Christina Thompson (engineer and author of a viral blog post [What it Feels Like to Work in a Supportive Environment for Female Engineers](https://medium.com/artsy-blog/what-it-feels-like-to-work-in-a-supportive-environment-for-female-engineers-3c994a001007)), Orta Therox (Staff Engineer at Artsy, Design Dictator at CocoaPods) and Craig Spaeth (Director of Engineering at Artsy) ([youtube](https://www.youtube.com/watch?v=leiKlKXRvuk)).
diff --git a/_posts/2017/2017-10-23-building-and-consuming-a-graphql-api-in-ruby-on-rails.markdown b/_posts/2017/2017-10-23-building-and-consuming-a-graphql-api-in-ruby-on-rails.markdown
index 49d9b296..d01bf247 100644
--- a/_posts/2017/2017-10-23-building-and-consuming-a-graphql-api-in-ruby-on-rails.markdown
+++ b/_posts/2017/2017-10-23-building-and-consuming-a-graphql-api-in-ruby-on-rails.markdown
@@ -140,11 +140,11 @@ The best way to try our app out is to use a [GraphQL IDE](https://github.com/and
![]({{ site.url }}/images/posts/2017/2017-10-23-building-and-consuming-a-graphql-api-in-ruby-on-rails/ide.png)
-You can use various clients to consume the API from our applications, including [graphlient](https://github.com/ashkan18/graphlient) or [graphql-client](https://github.com/github/graphql-client).
+You can use various clients to consume the API from our applications, including [graphlient](https://github.com/ashkan18/graphlient) or [graphql-client](https://github.com/github-community-projects/graphql-client).
### Tests
-Add [graphlient](https://github.com/ashkan18/graphlient), which is a small library built on top of [graphql-client](https://github.com/github/graphql-client) and that's a bit easier to use.
+Add [graphlient](https://github.com/ashkan18/graphlient), which is a small library built on top of [graphql-client](https://github.com/github-community-projects/graphql-client) and that's a bit easier to use.
Define a shared client context in [spec/support/graphql/client.rb](https://github.com/dblock/graphql-invoices/blob/7649ba2bc46ce2003f2cab19826a5d032dd8a00c/spec/support/graphql/client.rb).
diff --git a/_posts/2017/2017-10-30-generating-and-handling-errors-in-graphql-in-ruby.markdown b/_posts/2017/2017-10-30-generating-and-handling-errors-in-graphql-in-ruby.markdown
index c8ea0f7d..86f8fa79 100644
--- a/_posts/2017/2017-10-30-generating-and-handling-errors-in-graphql-in-ruby.markdown
+++ b/_posts/2017/2017-10-30-generating-and-handling-errors-in-graphql-in-ruby.markdown
@@ -102,6 +102,6 @@ This is often a matter of preference or strong opinions.
I believe that any unexpected behavior outside of a happy path should raise an exception unless it can be explicitly avoided ahead of time. I also prefer to deal with two scenarios rather than three: _it worked_ and _it didn't work_ vs. _it worked_, _it didn't work in some predictable way_ and _it didn't work in some unpredictable way_. Practically, this means I want to see a `StandardError` when something failed, vs. having to check for an `.errors` field in my business logic.
-The Github [graphql-client](https://github.com/github/graphql-client) library does not raise exceptions except when otherwise for all types of errors and parses server-side errors in potentially problematic ways (see [graphql-client#132](https://github.com/github/graphql-client/pull/132)), leaving you having to both handle exceptions and check for `.data.errors` and `.errors`.
+The Github [graphql-client](https://github.com/github-community-projects/graphql-client) library does not raise exceptions except when otherwise for all types of errors and parses server-side errors in potentially problematic ways (see graphql-client#132), leaving you having to both handle exceptions and check for `.data.errors` and `.errors`.
The [graphlient](https://github.com/ashkan18/graphlient) library built on top of graphql-client attempts to make sense out of the many scenarios and always raises exceptions of `Graphlient::Errors::Error` variety for server-side problems. It's simpler to use and requires less `if` statements.
diff --git a/_posts/2018/2018-11-27-writing-a-new-strava-api-ruby-client.markdown b/_posts/2018/2018-11-27-writing-a-new-strava-api-ruby-client.markdown
index 57ac65c1..b430cd78 100644
--- a/_posts/2018/2018-11-27-writing-a-new-strava-api-ruby-client.markdown
+++ b/_posts/2018/2018-11-27-writing-a-new-strava-api-ruby-client.markdown
@@ -5,7 +5,7 @@ date: 2018-11-27
tags: [strava, api, ruby]
comments: true
---
-Despite an existing Swagger-compatible API, most of Strava interactions written in Ruby don't use any auto-generated code and prefer [strava-api-v3](https://github.com/jaredholdcroft/strava-api-v3), a thin client that covers the majority of the Strava API. This is a much cleaner than any swagger-generated mess, but only comes with bare minimum extras. For example, the client can retrieve an activity, but does not have any code to convert a distance from meters to miles or calculate an athlete's pace. It will also leave you having to refer to the Strava documentation on whether `distance` is in meters, yards or feet.
+Despite an existing Swagger-compatible API, most of Strava interactions written in Ruby don't use any auto-generated code and prefer [strava-api-v3](https://rubygems.org/gems/strava-api-v3) (update: this gem was yanked in 2024), a thin client that covers the majority of the Strava API. This is a much cleaner than any swagger-generated mess, but only comes with bare minimum extras. For example, the client can retrieve an activity, but does not have any code to convert a distance from meters to miles or calculate an athlete's pace. It will also leave you having to refer to the Strava documentation on whether `distance` is in meters, yards or feet.
That seems reasonable for a thin client, but I've already had to copy-paste a ton of code between [publishing my runs to github pages](/2018/02/17/auto-publishing-strava-runs-to-github-pages.html) and my [Strava Slack bot](https://code.dblock.org/2018/04/03/slava-slack-bot-for-strava.html). I considered adding that code to the strava-api-v3 client, but found its implementation gross enough to write a brand new one.
diff --git a/_posts/2022/2022-06-05-a-year-working-on-opensearch-2.0.markdown b/_posts/2022/2022-06-05-a-year-working-on-opensearch-2.0.markdown
index 1c61cdee..c040a464 100644
--- a/_posts/2022/2022-06-05-a-year-working-on-opensearch-2.0.markdown
+++ b/_posts/2022/2022-06-05-a-year-working-on-opensearch-2.0.markdown
@@ -11,7 +11,7 @@ Many things are going really well.
The first question anyone asks me is whether I am writing any code. I've had [484 pull requests merged](https://github.com/pulls?q=is:pr+author:dblock+archived:false+user:opensearch-project+is:closed+is:merged) into opensearch-project, out of [573 pull requests raised](https://github.com/pulls?q=is:pr+author:dblock+archived:false+user:opensearch-project+is:closed). (The fact that one out of five was not merged probably means that I don't know what I am doing about 20% of the time.) There are tons of tiny bookkeeping changes, such as version increments, but there are also several meaty ones, half in [opensearch-build](https://github.com/opensearch-project/opensearch-build/pulls?q=is:pr+author:dblock+is:closed+is:merged). Turns out, continuously releasing two products (OpenSearch and OpenSearch Dashboards) with dozens of plug-ins each, for a big platform matrix (e.g. Linux, RPM/DEB, x64 and arm64), while working on 3 different releases simultaneously (right now 3.0, 2.1 and 1.3.4), along with half a dozen language clients (e.g. Java, JavaScript, Ruby, Go, and Rust) and integration tools (eg. Logstash or Fluentd), is not easy! We ended up writing a manifest-driven build/test/release automation framework in Python to enable a release train. It worked well, and whereas OpenSearch 1.0 took weeks to ship, we were able to cut 3 versions of the product during the log4j 0-day over a little longer than a week-end.
-The confusion between Elasticsearch and OpenSearch [seems to have been cleared](https://venturebeat.com/2022/05/19/once-frenemies-elastic-and-aws-are-now-besties/), too. Occasionally, users will ask whether a new feature of Elasticsearch will be available in OpenSearch (you're welcome to contribute features without looking at any non Apache-licensed code). And while OpenSearch will keep improving a thousand small ways to be a delightful, secure experience for everyone, the future of the fork is decidedly cloud-native.
+The confusion between Elasticsearch and OpenSearch [seems to have been cleared](https://web.archive.org/web/20240511215834/https://venturebeat.com/enterprise-analytics/where-did-we-come-from-exploring-the-explosion-of-interest-in-data-and-data-tooling/), too. Occasionally, users will ask whether a new feature of Elasticsearch will be available in OpenSearch (you're welcome to contribute features without looking at any non Apache-licensed code). And while OpenSearch will keep improving a thousand small ways to be a delightful, secure experience for everyone, the future of the fork is decidedly cloud-native.
What's that all about? I work in the "Search Services" AWS organization, which builds and operates the [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/). The folks that wrote the control plane for that service are very strong cloud engineers, and the scale of the service is remarkable. For example, in 2020 Pinterest was [ingesting](https://aws.amazon.com/solutions/case-studies/pinterest-elasticsearch-case-study/) 1.7TB of data daily, growing to 3TB that year. Since then, data volumes haven't grown exponentially, they have exploded. Hundreds of terabytes *per day* is no longer some crazy number in 2022, and you can draw a curve from there into the future. The big question now is not whether OpenSearch can support a few TB of data per day, but what does OpenSearch need to look like to support many hundreds, and how soon. We can no longer scale this monolith horizontally by adding more nodes, thus the future of OpenSearch is decidedly cloud-native. This doesn't mean you must run it in the cloud, and much less on AWS. Simply put, cloud-native systems allow every aspect of the software to scale independently, the software is readily extensible, and easily multi-tenant. For example, scaling reads can happen independently of scaling writes, and search can be scaled independently from indexing. Plug-ins can run in isolation with clear, safe boundaries and interfaces, and don't require a cluster restart. Data access is secure.
diff --git a/_posts/2023/2023-08-08-changing-the-default-admin-password-in-opensearch.markdown b/_posts/2023/2023-08-08-changing-the-default-admin-password-in-opensearch.markdown
index 2a77a479..90e6ddff 100644
--- a/_posts/2023/2023-08-08-changing-the-default-admin-password-in-opensearch.markdown
+++ b/_posts/2023/2023-08-08-changing-the-default-admin-password-in-opensearch.markdown
@@ -86,7 +86,7 @@ I found [security#1576](https://github.com/opensearch-project/security/issues/15
### The Hard Way
-The source for the docker-compose file used for the distribution is [here](https://github.com/opensearch-project/opensearch-build/blob/main/docker/release/dockercomposefiles/docker-compose-2.x.yml). The first time this is run it [executes](https://github.com/opensearch-project/opensearch-build/blob/main/docker/release/config/opensearch/opensearch-docker-entrypoint.sh#L38) the [install_demo_configuration.sh](https://github.com/opensearch-project/security/blob/main/tools/install_demo_configuration.sh) script from the security plugin, which itself runs [securityadmin_demo.sh](https://github.com/opensearch-project/security/blob/main/tools/securityadmin.sh), which itself runs [`org.opensearch.security.tools.SecurityAdmin`](https://github.com/opensearch-project/security/blob/main/src/main/java/org/opensearch/security/tools/SecurityAdmin.java) that's written in Java. This installs a default security configuration. Let's see what it looks like.
+The source for the docker-compose file used for the distribution is [here](https://github.com/opensearch-project/opensearch-build/blob/main/docker/release/dockercomposefiles/docker-compose-2.x.yml). The first time this is run it [executes](https://github.com/opensearch-project/opensearch-build/blob/2.11.0/docker/release/config/opensearch/opensearch-docker-entrypoint.sh#L38) the [install_demo_configuration.sh](https://github.com/opensearch-project/security/blob/main/tools/install_demo_configuration.sh) script from the security plugin, which itself runs [securityadmin_demo.sh](https://github.com/opensearch-project/security/blob/main/tools/securityadmin.sh), which itself runs [`org.opensearch.security.tools.SecurityAdmin`](https://github.com/opensearch-project/security/blob/main/src/main/java/org/opensearch/security/tools/SecurityAdmin.java) that's written in Java. This installs a default security configuration. Let's see what it looks like.
Find the docker container ID. In my case it's `b09419b98216`.