diff --git a/_config.yml b/_config.yml index 0dcd06bc62..11b8113084 100644 --- a/_config.yml +++ b/_config.yml @@ -1,4 +1,4 @@ -url: http://artsy.github.io +url: https://artsy.github.io title: Artsy Engineering subtitle: Discover fine engineering. google_custom_search: 010245880960712892902:tnjd4ryb3ci @@ -174,7 +174,7 @@ authors: artsy_engineering: name: The Artsy Engineering Team - site: http://artsy.github.io + site: https://artsy.github.io twitter: ArtsyOpenSource nik: diff --git a/_includes/_series_bio/javascriptures.md b/_includes/_series_bio/javascriptures.md index eb566d805f..bfe71a2d8f 100644 --- a/_includes/_series_bio/javascriptures.md +++ b/_includes/_series_bio/javascriptures.md @@ -9,7 +9,7 @@ frontend tech stack. We called this JavaScriptures, 6 workshop-style deep dives into the major parts of the [Artsy JavaScript omakase][omakase]. You can see the YouTube playlist of [them all here][yt]. -[omakase]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[omakase]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [yt]: https://www.youtube.com/playlist?list=PLKqXGUTH_9hrr5z97OnL31bmQDDnn2WlU
diff --git a/_includes/_series_bio/react-native-at-artsy.md b/_includes/_series_bio/react-native-at-artsy.md index fdd606d792..a68e450562 100644 --- a/_includes/_series_bio/react-native-at-artsy.md +++ b/_includes/_series_bio/react-native-at-artsy.md @@ -15,4 +15,4 @@ This series covers the reasons why we made that choice, our interactions with Re and shows how we've been handling some of the issues that come up as an early adopter. Sidenote: we ran a conference with Facebook in 2018 called -[Artsy x React Native](http://artsy.github.io/artsy-x-react-native.html). +[Artsy x React Native](https://artsy.github.io/artsy-x-react-native.html). diff --git a/_includes/head.html b/_includes/head.html index 05b94f4eed..9fa45ca679 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -16,7 +16,7 @@ - + {% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} diff --git a/_layouts/epic.html b/_layouts/epic.html index a8f7afbe58..fa8c9ff31f 100644 --- a/_layouts/epic.html +++ b/_layouts/epic.html @@ -17,7 +17,7 @@ @@ -74,7 +74,7 @@

Artsy OSS

@@ -82,8 +82,8 @@

Artsy OSS

Blog

diff --git a/_posts/2012-03-23-simplifying-model-level-json-versioning-with-mongoid-cached-json.markdown b/_posts/2012-03-23-simplifying-model-level-json-versioning-with-mongoid-cached-json.markdown index 5b7ae76e6e..d2767d3b6d 100644 --- a/_posts/2012-03-23-simplifying-model-level-json-versioning-with-mongoid-cached-json.markdown +++ b/_posts/2012-03-23-simplifying-model-level-json-versioning-with-mongoid-cached-json.markdown @@ -86,4 +86,4 @@ class Person end ``` -With the [mongoid-cached-json](http://github.com/dblock/mongoid-cached-json) gem you also get caching that respects JSON versioning, for free. Read about it [here](http://artsy.github.com/blog/2012/02/20/caching-model-json-with-mongoid-cached-json/). +With the [mongoid-cached-json](http://github.com/dblock/mongoid-cached-json) gem you also get caching that respects JSON versioning, for free. Read about it [here](https://artsy.github.com/blog/2012/02/20/caching-model-json-with-mongoid-cached-json/). diff --git a/_posts/2012-05-27-using-jenkins-for-ruby-and-ruby-on-rails-teams.markdown b/_posts/2012-05-27-using-jenkins-for-ruby-and-ruby-on-rails-teams.markdown index 5766760768..2953f84ced 100644 --- a/_posts/2012-05-27-using-jenkins-for-ruby-and-ruby-on-rails-teams.markdown +++ b/_posts/2012-05-27-using-jenkins-for-ruby-and-ruby-on-rails-teams.markdown @@ -44,7 +44,7 @@ bundle install bundle exec rake ``` -Our default Ruby project Rake task is `test:ci`. We run Jasmine and Capybara tests using a real browser, so we need to redirect all visible output to an X-Windows Virtual Frame Buffer ([XVFB](http://www.xfree86.org/4.0.1/Xvfb.1.html)). This can be done by setting an `ENV` variable inside a Rake task. Our test target also [organizes our tests in suites](http://artsy.github.com/blog/2012/05/15/how-to-organize-over-3000-rspec-specs-and-retry-test-failures/). +Our default Ruby project Rake task is `test:ci`. We run Jasmine and Capybara tests using a real browser, so we need to redirect all visible output to an X-Windows Virtual Frame Buffer ([XVFB](http://www.xfree86.org/4.0.1/Xvfb.1.html)). This can be done by setting an `ENV` variable inside a Rake task. Our test target also [organizes our tests in suites](https://artsy.github.com/blog/2012/05/15/how-to-organize-over-3000-rspec-specs-and-retry-test-failures/). ``` ruby namespace :test do diff --git a/_posts/2012-07-10-on-demand-jenkins-slaves-with-amazon-ec2.markdown b/_posts/2012-07-10-on-demand-jenkins-slaves-with-amazon-ec2.markdown index d1761d99fb..075857dcd2 100644 --- a/_posts/2012-07-10-on-demand-jenkins-slaves-with-amazon-ec2.markdown +++ b/_posts/2012-07-10-on-demand-jenkins-slaves-with-amazon-ec2.markdown @@ -7,7 +7,7 @@ categories: [Jenkins, Testing, Continuous Integration, EC2] author: [joey, frank] --- -The [Artsy](http://artsy.net) team faithfully uses [Jenkins](http://jenkins-ci.org) for continuous integration. [As we've described before](http://artsy.github.com/blog/2012/05/27/using-jenkins-for-ruby-and-ruby-on-rails-teams/), our Jenkins master and 8 slaves run on Linode. This arrangement has at least a few drawbacks: +The [Artsy](http://artsy.net) team faithfully uses [Jenkins](http://jenkins-ci.org) for continuous integration. [As we've described before](https://artsy.github.com/blog/2012/05/27/using-jenkins-for-ruby-and-ruby-on-rails-teams/), our Jenkins master and 8 slaves run on Linode. This arrangement has at least a few drawbacks: * Our Linode servers are manually configured. They require frequent maintenance, and inconsistencies lead to surprising build failures. * The fixed set of slaves don't match the pattern of our build jobs: jobs get backed up during the day, but servers are mostly unused overnight and on weekends. diff --git a/_posts/2012-10-10-artsy-technology-stack.markdown b/_posts/2012-10-10-artsy-technology-stack.markdown index a0046b515f..6adfedf0db 100644 --- a/_posts/2012-10-10-artsy-technology-stack.markdown +++ b/_posts/2012-10-10-artsy-technology-stack.markdown @@ -62,7 +62,7 @@ The Artsy CMS and the Admin system are two newer projects and serve the needs of Folio Partner App ----------------- -Artsy makes a free iOS application, called [Folio](http://artsy.github.com/blog/categories/ios/), which lets our partners display their inventory at art fairs. +Artsy makes a free iOS application, called [Folio](https://artsy.github.com/blog/categories/ios/), which lets our partners display their inventory at art fairs. Folio is a native iOS implementation. The interface is heavily skinned UIKit with CoreData for storage. Our network code was originally a thin layer on top of NSURLConnection, but for our forthcoming update, we’ve rewritten it to use [AFNetworking](https://github.com/AFNetworking/AFNetworking/). We manage external dependencies with [CocoaPods](https://github.com/CocoaPods/CocoaPods). diff --git a/_posts/2013-04-01-an-easter-egg-for-curl.markdown b/_posts/2013-04-01-an-easter-egg-for-curl.markdown index e6aed1e13f..e2b93dc9ea 100644 --- a/_posts/2013-04-01-an-easter-egg-for-curl.markdown +++ b/_posts/2013-04-01-an-easter-egg-for-curl.markdown @@ -30,7 +30,7 @@ curl https://api.artsy.net/api/v1/system/up?access_token=10013 -v < Content-Type: application/json < Content-Length: 76 -{ "error" : "Inspiration from the Engineering team at http://artsy.github.com" } +{ "error" : "Inspiration from the Engineering team at https://artsy.github.com" } ``` What?! **401 Broadway**? See, our office address is *401 Broadway, 10013, New York, NY*. We just tried to add a more developer-friendly way to find us in the New York grid. And here's the view from our 25th floor office - that's SOHO right below us and the Empire State Building a bit North. @@ -65,7 +65,7 @@ class ApiAuthMiddleware < Grape::Middleware::Base def before if access_token == "10013" throw :error, - message: 'Inspiration from the Engineering team at http://artsy.github.com', + message: 'Inspiration from the Engineering team at https://artsy.github.com', status: 2600 else ... diff --git a/_posts/2013-06-14-writing-headless-backbone-tests-with-node-dot-js.markdown b/_posts/2013-06-14-writing-headless-backbone-tests-with-node-dot-js.markdown index 8e393fe070..adea2eb856 100644 --- a/_posts/2013-06-14-writing-headless-backbone-tests-with-node-dot-js.markdown +++ b/_posts/2013-06-14-writing-headless-backbone-tests-with-node-dot-js.markdown @@ -13,7 +13,7 @@ Write fast, headless, tests for Backbone using Node.js. See this project as an e ## A Brief History -Artsy is mostly a thick client [Backbone](http://backbonejs.org/) app that sits on [Rails](http://rubyonrails.org/) and largely depends on [Capybara](http://jnicklas.github.io/capybara/) ([Selenium](http://docs.seleniumhq.org/) backed bot that clicks around Firefox) for testing it's javascript. This leads to some seriously brittle and slow integration tests. [Despite being able to wrangle Capybara](http://artsy.github.io/blog/2012/02/03/reliably-testing-asynchronous-ui-w-slash-rspec-and-capybara/) to do most of our client-side testing, we knew there must be a better way. +Artsy is mostly a thick client [Backbone](http://backbonejs.org/) app that sits on [Rails](http://rubyonrails.org/) and largely depends on [Capybara](http://jnicklas.github.io/capybara/) ([Selenium](http://docs.seleniumhq.org/) backed bot that clicks around Firefox) for testing it's javascript. This leads to some seriously brittle and slow integration tests. [Despite being able to wrangle Capybara](https://artsy.github.io/blog/2012/02/03/reliably-testing-asynchronous-ui-w-slash-rspec-and-capybara/) to do most of our client-side testing, we knew there must be a better way. When building a CMS app for our gallery partners to manage their Artsy inventory, we built a new Backbone app on top of [node.js](http://nodejs.org/). The result was a headless test suite that runs around 60 times faster. diff --git a/_posts/2013-08-27-introduction-to-aws-opsworks.markdown b/_posts/2013-08-27-introduction-to-aws-opsworks.markdown index 8279276af4..5e10d97434 100644 --- a/_posts/2013-08-27-introduction-to-aws-opsworks.markdown +++ b/_posts/2013-08-27-introduction-to-aws-opsworks.markdown @@ -30,7 +30,7 @@ Conversely, OpsWorks offers higher-level control than [CloudFormation](https://a {% include expanded_img.html url="/images/2013-08-27-introduction-to-aws-opsworks/aws_control.png" title="How OpsWorks fits in AWS offerings" %} -Historically, Artsy delegated dev-ops concerns to Heroku. They worried about infrastructure, freeing us to focus on our application's higher-level goals. Increasingly though, we were forced to work around limitations of the platform's performance, architecture, and customizability. (We even blogged about it [here](http://artsy.github.io/blog/2012/01/31/beyond-heroku-satellite-delayed-job-workers-on-ec2/), [here](http://artsy.github.io/blog/2012/11/15/how-to-monitor-503s-and-timeout-on-heroku/), [here](http://artsy.github.io/blog/2012/12/13/beat-heroku-60-seconds-application-boot-timeout-with-a-proxy/), [here](http://artsy.github.io/blog/2013/02/01/master-heroku-command-line-with-heroku-commander/), and [here](http://artsy.github.io/blog/2013/02/17/impact-of-heroku-routing-mesh-and-random-routing/).) Rather than continue to work against the platform, we turned to OpsWorks for greater flexibility while keeping administrative burden low. +Historically, Artsy delegated dev-ops concerns to Heroku. They worried about infrastructure, freeing us to focus on our application's higher-level goals. Increasingly though, we were forced to work around limitations of the platform's performance, architecture, and customizability. (We even blogged about it [here](https://artsy.github.io/blog/2012/01/31/beyond-heroku-satellite-delayed-job-workers-on-ec2/), [here](https://artsy.github.io/blog/2012/11/15/how-to-monitor-503s-and-timeout-on-heroku/), [here](https://artsy.github.io/blog/2012/12/13/beat-heroku-60-seconds-application-boot-timeout-with-a-proxy/), [here](https://artsy.github.io/blog/2013/02/01/master-heroku-command-line-with-heroku-commander/), and [here](https://artsy.github.io/blog/2013/02/17/impact-of-heroku-routing-mesh-and-random-routing/).) Rather than continue to work against the platform, we turned to OpsWorks for greater flexibility while keeping administrative burden low. ## OpsWorks Overview diff --git a/_posts/2014-01-30-isolating-spurious-and-nondeterministic-tests.markdown b/_posts/2014-01-30-isolating-spurious-and-nondeterministic-tests.markdown index 7729a0fbdd..b9f7faf25d 100644 --- a/_posts/2014-01-30-isolating-spurious-and-nondeterministic-tests.markdown +++ b/_posts/2014-01-30-isolating-spurious-and-nondeterministic-tests.markdown @@ -13,7 +13,7 @@ These failures might be due to slight timing differences or lack of proper isola ## The Quarantine -We've been [automatically retrying failed tests](http://artsy.github.io/blog/2012/05/15/how-to-organize-over-3000-rspec-specs-and-retry-test-failures/), with some success. However, these problems tend to get worse. (If you have 10 tests that each have a 1% chance of failing, roughly 1 in 10 builds will fail. If you have 50, 4 in 10 builds will fail.) +We've been [automatically retrying failed tests](https://artsy.github.io/blog/2012/05/15/how-to-organize-over-3000-rspec-specs-and-retry-test-failures/), with some success. However, these problems tend to get worse. (If you have 10 tests that each have a 1% chance of failing, roughly 1 in 10 builds will fail. If you have 50, 4 in 10 builds will fail.) Martin Fowler offers the most compelling thoughts on this topic in [Eradicating Non-Determinism in Tests](http://martinfowler.com/articles/nonDeterminism.html). (Read it, really.) He suggests quarantining problematic tests in a separate suite, so they don't block the build pipeline. diff --git a/_posts/2014-04-02-refactoring-infrastructure.markdown b/_posts/2014-04-02-refactoring-infrastructure.markdown index 3be5e03c92..c8dcdd0e22 100644 --- a/_posts/2014-04-02-refactoring-infrastructure.markdown +++ b/_posts/2014-04-02-refactoring-infrastructure.markdown @@ -41,7 +41,7 @@ Once the new app was feature-complete, we removed the proxying layer and updated New hosting environment --- -When we [switched hosting providers](http://artsy.github.io/blog/2013/08/27/introduction-to-aws-opsworks/) for our main application, it required changes to _many_ related tools and services (for logs, deploys, background queues, etc.). To mitigate risk, we set up a "double-deploy" to the legacy and new environments as soon as the basic elements were in place. The environments ran the same code and shared a data store. First, we targeted the new environment from only a few internal apps. As we surfaced and fixed bugs, we directed more client applications away from the old, eventually winding it down altogether. The process was spread over months, but since each individual change was small and low-risk, we were confident and could adjust course as necessary. +When we [switched hosting providers](https://artsy.github.io/blog/2013/08/27/introduction-to-aws-opsworks/) for our main application, it required changes to _many_ related tools and services (for logs, deploys, background queues, etc.). To mitigate risk, we set up a "double-deploy" to the legacy and new environments as soon as the basic elements were in place. The environments ran the same code and shared a data store. First, we targeted the new environment from only a few internal apps. As we surfaced and fixed bugs, we directed more client applications away from the old, eventually winding it down altogether. The process was spread over months, but since each individual change was small and low-risk, we were confident and could adjust course as necessary. Full application rewrite --- diff --git a/_posts/2014-04-24-generating-notifications-and-personalized-emails-efficiently.markdown b/_posts/2014-04-24-generating-notifications-and-personalized-emails-efficiently.markdown index ad83dd2fc2..4c54fe0d2b 100644 --- a/_posts/2014-04-24-generating-notifications-and-personalized-emails-efficiently.markdown +++ b/_posts/2014-04-24-generating-notifications-and-personalized-emails-efficiently.markdown @@ -7,7 +7,7 @@ categories: [Ruby, Email, CSS, HTML] author: matt --- -We recently launched a new personalized email here at [Artsy](https://artsy.net) that features content that a given user might find interesting. The goal of this post is to describe how we built a backend system that efficiently generates these e-mails for all our users. I'll talk about the first, naive implementation that had performance problems right away, and how the second implementation (currently in production) solved those issues, and whose behavior at scale is well-defined and understood. I won't go into the details of the design and layout of the mail itself and how we render the content - there are several earlier blog posts that deal with those: [Presenters and Memoization](http://artsy.github.io/blog/2014/03/18/presenters-and-memoization-moving-logic-out-of-templates/), [Pinterest-style Layouts](http://artsy.github.io/blog/2014/03/17/ruby-helper-to-group-artworks-into-a-pinterest-style-layout-for-email/) and [Email Layouts and Responsiveness](http://artsy.github.io/blog/2014/03/17/some-tips-for-email-layout-and-responsiveness/). +We recently launched a new personalized email here at [Artsy](https://artsy.net) that features content that a given user might find interesting. The goal of this post is to describe how we built a backend system that efficiently generates these e-mails for all our users. I'll talk about the first, naive implementation that had performance problems right away, and how the second implementation (currently in production) solved those issues, and whose behavior at scale is well-defined and understood. I won't go into the details of the design and layout of the mail itself and how we render the content - there are several earlier blog posts that deal with those: [Presenters and Memoization](https://artsy.github.io/blog/2014/03/18/presenters-and-memoization-moving-logic-out-of-templates/), [Pinterest-style Layouts](https://artsy.github.io/blog/2014/03/17/ruby-helper-to-group-artworks-into-a-pinterest-style-layout-for-email/) and [Email Layouts and Responsiveness](https://artsy.github.io/blog/2014/03/17/some-tips-for-email-layout-and-responsiveness/). ![Personalized Email Example](/images/2014-04-24-generating-notifications-and-personalized-emails-efficiently/percy_example.png) @@ -209,7 +209,7 @@ def notifiable? end ``` -And...that's basically it! Throughout the week as partners are uploading their shows/fair booths/artworks, these records are being opportunistically written to that day's notification collection, in a performant and scalable fashion. Then when we want to send you a personalized email, we pull all your appropriate notifications via the ```get``` routine in our ```NotificationService```, and primarily using the technique described in [Presenters and Memoization](http://artsy.github.io/blog/2014/03/18/presenters-and-memoization-moving-logic-out-of-templates/) we make sure we cache/memoize all such data. Using the tips in [Pinterest-style Layouts](http://artsy.github.io/blog/2014/03/17/ruby-helper-to-group-artworks-into-a-pinterest-style-layout-for-email/) and [Email Layouts and Responsiveness](http://artsy.github.io/blog/2014/03/17/some-tips-for-email-layout-and-responsiveness/) we can render this content and support various devices/email clients. We parallelize and batch the generation/sending of our e-mails as well. This whole system, from notification generation to actually emailing users, is running successfully and smoothly in production. +And...that's basically it! Throughout the week as partners are uploading their shows/fair booths/artworks, these records are being opportunistically written to that day's notification collection, in a performant and scalable fashion. Then when we want to send you a personalized email, we pull all your appropriate notifications via the ```get``` routine in our ```NotificationService```, and primarily using the technique described in [Presenters and Memoization](https://artsy.github.io/blog/2014/03/18/presenters-and-memoization-moving-logic-out-of-templates/) we make sure we cache/memoize all such data. Using the tips in [Pinterest-style Layouts](https://artsy.github.io/blog/2014/03/17/ruby-helper-to-group-artworks-into-a-pinterest-style-layout-for-email/) and [Email Layouts and Responsiveness](https://artsy.github.io/blog/2014/03/17/some-tips-for-email-layout-and-responsiveness/) we can render this content and support various devices/email clients. We parallelize and batch the generation/sending of our e-mails as well. This whole system, from notification generation to actually emailing users, is running successfully and smoothly in production. ### Next Steps diff --git a/_posts/2014-05-12-continuous-integration-for-service-oriented-architectures.markdown b/_posts/2014-05-12-continuous-integration-for-service-oriented-architectures.markdown index f3022e838b..567eeb53e6 100644 --- a/_posts/2014-05-12-continuous-integration-for-service-oriented-architectures.markdown +++ b/_posts/2014-05-12-continuous-integration-for-service-oriented-architectures.markdown @@ -276,8 +276,8 @@ This basic structure has accommodated dozens of test scenarios. We've extended i A caveat: with so many layers and dependencies involved, there are often spurious failures. We've picked up a few practices that help: -* [Automatic retries](http://artsy.github.io/blog/2012/05/15/how-to-organize-over-3000-rspec-specs-and-retry-test-failures/) -* [Quarantine for problematic tests](http://artsy.github.io/blog/2014/01/30/isolating-spurious-and-nondeterministic-tests/) +* [Automatic retries](https://artsy.github.io/blog/2012/05/15/how-to-organize-over-3000-rspec-specs-and-retry-test-failures/) +* [Quarantine for problematic tests](https://artsy.github.io/blog/2014/01/30/isolating-spurious-and-nondeterministic-tests/) * [Failure screenshots](https://github.com/mattheworiordan/capybara-screenshot) You can [grab the example code](https://github.com/joeyAghion/multiapp_example-tests). And make sure to let us know in the comments how _you_ approach testing across applications. diff --git a/_posts/2014-06-11-testing-core-data-migrations.markdown b/_posts/2014-06-11-testing-core-data-migrations.markdown index c31427587c..36a444e381 100644 --- a/_posts/2014-06-11-testing-core-data-migrations.markdown +++ b/_posts/2014-06-11-testing-core-data-migrations.markdown @@ -8,7 +8,7 @@ categories: [Testing, Objc, Cocoa, iOS] author: orta --- -The first time I released a patch release for [Artsy Folio](http://orta.github.io/#folio-header-unit) it crashed instantly, on every install. Turns out I didn't understand Core Data migrations, now a few years on I grok it better but I've still lived with the memories of that dark dark day. Because of this I've had an informal rule of testing migrations with all the old build of Folio [using chairs](http://artsy.github.io/blog/2013/03/29/musical-chairs/) the day before submitting to the app store. +The first time I released a patch release for [Artsy Folio](http://orta.github.io/#folio-header-unit) it crashed instantly, on every install. Turns out I didn't understand Core Data migrations, now a few years on I grok it better but I've still lived with the memories of that dark dark day. Because of this I've had an informal rule of testing migrations with all the old build of Folio [using chairs](https://artsy.github.io/blog/2013/03/29/musical-chairs/) the day before submitting to the app store. This time round, I've made vast changes to the Core Data models but skipped the manual work. Here's how: @@ -123,7 +123,7 @@ This meant it was very easy to quickly make tests that look like: ``` -This made it very cheap conceptually to make a new in-memory context and to be sure that the changes wouldn't affect the development data store. However, once I had this framework in place it became a pretty simple jump to taking the existing sqlite files that I already had around in my [chairs folder](http://artsy.github.io/blog/2013/03/29/musical-chairs/) and make to force a migration from that build to the latest managed object model. Here's the test suite in full: +This made it very cheap conceptually to make a new in-memory context and to be sure that the changes wouldn't affect the development data store. However, once I had this framework in place it became a pretty simple jump to taking the existing sqlite files that I already had around in my [chairs folder](https://artsy.github.io/blog/2013/03/29/musical-chairs/) and make to force a migration from that build to the latest managed object model. Here's the test suite in full: ```objc // diff --git a/_posts/2014-08-04-taking-a-snapshot-with-second-curtain.markdown b/_posts/2014-08-04-taking-a-snapshot-with-second-curtain.markdown index 3957fbdc6a..26edd261bb 100644 --- a/_posts/2014-08-04-taking-a-snapshot-with-second-curtain.markdown +++ b/_posts/2014-08-04-taking-a-snapshot-with-second-curtain.markdown @@ -53,7 +53,7 @@ Second Curtain relies on environment variables to get access to the S3 bucket where it stores the images. I planned on using Travis' system to [encrypt](http://docs.travis-ci.com/user/encryption-keys/) those credentials. It turns out, for very good reasons, encrypted environment variables are not available on pull requests created on forks of repositories. -This is a problem because of the way that [Artsy uses GitHub](http://artsy.github.io/blog/2012/01/29/how-art-dot-sy-uses-github-to-build-art-dot-sy/). +This is a problem because of the way that [Artsy uses GitHub](https://artsy.github.io/blog/2012/01/29/how-art-dot-sy-uses-github-to-build-art-dot-sy/). While it's not a problem for a closed-source repository to have (restrictive) access to an S3 bucket, it would be irresponsible to expose S3 credentials for an open-source project. I'm [working](https://github.com/AshFurrow/second_curtain/issues/5) diff --git a/_posts/2014-08-08-CocoaPods-Caching.markdown b/_posts/2014-08-08-CocoaPods-Caching.markdown index 3ecbc516af..12eb9702c1 100644 --- a/_posts/2014-08-08-CocoaPods-Caching.markdown +++ b/_posts/2014-08-08-CocoaPods-Caching.markdown @@ -7,7 +7,7 @@ categories: [iOS, Continuous Integration, Travis, Testing] author: orta --- -As [Ash said earlier](http://artsy.github.io/blog/2014/08/07/taking-a-snapshot-with-second-curtain/) we like using Continuous Integration. Today I spent a large amount of time migrating us to use the new CocoaPods caching system in Travis CI. To make up for my lost time I'm passing on what I've learned and also showing how we do CI at Artsy with Objective-C apps. If you're interested in how we do it in Swift, you can just check [Eidolon](https://github.com/artsy/eidolon). +As [Ash said earlier](https://artsy.github.io/blog/2014/08/07/taking-a-snapshot-with-second-curtain/) we like using Continuous Integration. Today I spent a large amount of time migrating us to use the new CocoaPods caching system in Travis CI. To make up for my lost time I'm passing on what I've learned and also showing how we do CI at Artsy with Objective-C apps. If you're interested in how we do it in Swift, you can just check [Eidolon](https://github.com/artsy/eidolon). @@ -179,6 +179,6 @@ This is nice and simple. It was built to use multiple travis build steps. This m Travis CI Failure -We use a gem with a binary in [second_curtain](https://github.com/AshFurrow/second_curtain/), and this came with bundler caching issues in Travis. The solution was to ignore bundler and run `gem install second_curtain` each time. To increase the speed we also ensured that documentation is not being generated. If you are interested in what's going on with the `.netrc`, read my blog post on [Artsy's first Closed Source Pod](http://artsy.github.io/blog/2014/06/20/artsys-first-closed-source-pod/). +We use a gem with a binary in [second_curtain](https://github.com/AshFurrow/second_curtain/), and this came with bundler caching issues in Travis. The solution was to ignore bundler and run `gem install second_curtain` each time. To increase the speed we also ensured that documentation is not being generated. If you are interested in what's going on with the `.netrc`, read my blog post on [Artsy's first Closed Source Pod](https://artsy.github.io/blog/2014/06/20/artsys-first-closed-source-pod/). We will continue pushing the state of the art in iOS deployment, in building our own tools and using everything available to increase developer happiness. If you're into this we're always looking to hire people with a good open source track record or street smarts. Here's [the jobs page](https://artsy.net/job/mobile-engineer). diff --git a/_posts/2014-09-05-we-open-sourced-our-isomorphic-javascript-website.markdown b/_posts/2014-09-05-we-open-sourced-our-isomorphic-javascript-website.markdown index 7bda6c7743..2a60b6b02c 100644 --- a/_posts/2014-09-05-we-open-sourced-our-isomorphic-javascript-website.markdown +++ b/_posts/2014-09-05-we-open-sourced-our-isomorphic-javascript-website.markdown @@ -17,7 +17,7 @@ Over the past few months, we've rewritten our web front-end to move off Rails an ## Isomorphic vs Monolithic -Our transition to an isomorphic Javascript stack has been very successful albeit with some speed bumps. If you're interested in the details we've written [a blog post](http://artsy.github.io/blog/2013/11/30/rendering-on-the-server-and-client-in-node-dot-js/), given a talk at [Node on the Road](https://www.joyent.com/developers/videos/node-js-on-the-road-nyc-craig-spaeth-brennan-moore) (slides [here](http://www.slideshare.net/craigspaeth/artsy-node-on-the-roady-slides)), and another more extensive talk at [this meetup](http://www.hakkalabs.co/articles/monolithic-to-distributed-how-artsy-transitioned-from-ruby-on-rails-to-node-js-and-isomorphic-javascript#). +Our transition to an isomorphic Javascript stack has been very successful albeit with some speed bumps. If you're interested in the details we've written [a blog post](https://artsy.github.io/blog/2013/11/30/rendering-on-the-server-and-client-in-node-dot-js/), given a talk at [Node on the Road](https://www.joyent.com/developers/videos/node-js-on-the-road-nyc-craig-spaeth-brennan-moore) (slides [here](http://www.slideshare.net/craigspaeth/artsy-node-on-the-roady-slides)), and another more extensive talk at [this meetup](http://www.hakkalabs.co/articles/monolithic-to-distributed-how-artsy-transitioned-from-ruby-on-rails-to-node-js-and-isomorphic-javascript#). The short story is that we moved from a monolithic rails app to a couple of Node servers on Heroku. This vastly improved the performance of our site and our own development speed. Using the patterns in Ezel, we are able to tailor assets packages to specific pages and render some of the page on the server. This cut our page-load in half (from 6.5 seconds to under 3 seconds) and our tests take about 5 minutes (down from around 5 hours!) with little reduction in coverage. Performance numbers aside, our real win was dramatically improved development speed due to some architecture decisions we made. diff --git a/_posts/2014-11-13-eidolon-retrospective.markdown b/_posts/2014-11-13-eidolon-retrospective.markdown index 0dc0096938..887aa15ca6 100644 --- a/_posts/2014-11-13-eidolon-retrospective.markdown +++ b/_posts/2014-11-13-eidolon-retrospective.markdown @@ -76,7 +76,7 @@ A component that I had not developed before was an admin panel that Orta made. T Speaking of production and staging, to prevent developers from accidentally placing bids on production and to prevent live users from inadvertently using the staging servers, Orta made a simple badge that would let you know if you were on staging. If you were running in the simulator, it would also alert you if you were running on production. This was great, but wouldn’t prevent someone from accidentally placing bids on the production server while testing on a device. [Our solution](https://github.com/artsy/eidolon/blob/9181be833459307bb749df2264b3d339b371ee59/Kiosk/Auction%20Listings/ListingsViewController.swift#L157-L169) was to check your current wifi network name. If it looks like you’re at the Artsy offices, then the production flag is shown, even on a device. -So we’ve got the scaffolding for a great app and it was time to really begin development. Using ReactiveCocoa, we were able to make our [XApp authentication transparent](http://artsy.github.io/blog/2014/09/22/transparent-prerequisite-network-requests/). Functional reactive programming had other great benefits, like [scheduling automated refreshes](https://github.com/artsy/eidolon/blob/9181be833459307bb749df2264b3d339b371ee59/Kiosk/Auction%20Listings/ListingsViewController.swift#L87-L137) of auction listings. We may have [gone overboard](https://github.com/artsy/eidolon/blob/9181be833459307bb749df2264b3d339b371ee59/Kiosk/Auction%20Listings/ListingsViewController.swift#L48-L68) in one instance (cleaning that up is on my todo list), but ReactiveCocoa has made modelling complex behaviour of Eidolon relatively easy. +So we’ve got the scaffolding for a great app and it was time to really begin development. Using ReactiveCocoa, we were able to make our [XApp authentication transparent](https://artsy.github.io/blog/2014/09/22/transparent-prerequisite-network-requests/). Functional reactive programming had other great benefits, like [scheduling automated refreshes](https://github.com/artsy/eidolon/blob/9181be833459307bb749df2264b3d339b371ee59/Kiosk/Auction%20Listings/ListingsViewController.swift#L87-L137) of auction listings. We may have [gone overboard](https://github.com/artsy/eidolon/blob/9181be833459307bb749df2264b3d339b371ee59/Kiosk/Auction%20Listings/ListingsViewController.swift#L48-L68) in one instance (cleaning that up is on my todo list), but ReactiveCocoa has made modelling complex behaviour of Eidolon relatively easy. Of course, learning how to ReactiveCocoa is no easy feat. At this point, Orta and Laura were both working on Eidolon. There were many conversations in our Slack chatroom about how to approach problem-solving the ReactiveCocoa way and, with some time, they both became proficient at creating and manipulating signals. Sweet. diff --git a/_posts/2014-11-18-debugging-our-hardware-problem.markdown b/_posts/2014-11-18-debugging-our-hardware-problem.markdown index 5b06a29271..eecb3bafe0 100644 --- a/_posts/2014-11-18-debugging-our-hardware-problem.markdown +++ b/_posts/2014-11-18-debugging-our-hardware-problem.markdown @@ -7,7 +7,7 @@ categories: [iOS, mobile] author: ash --- -For the past few months, Artsy’s mobile team has been working on [Eidolon](https://github.com/artsy/eidolon), a bidding kiosk for Artsy’s auctions platform. While we’ve written a [retrospective](http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/) on the process of making Eidolon from the software side of things, we didn’t really touch on how our software is being used. +For the past few months, Artsy’s mobile team has been working on [Eidolon](https://github.com/artsy/eidolon), a bidding kiosk for Artsy’s auctions platform. While we’ve written a [retrospective](https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/) on the process of making Eidolon from the software side of things, we didn’t really touch on how our software is being used. diff --git a/_posts/2015-01-04-cocoapods-and-frameworks.markdown b/_posts/2015-01-04-cocoapods-and-frameworks.markdown index bac02c5b27..4688def71a 100644 --- a/_posts/2015-01-04-cocoapods-and-frameworks.markdown +++ b/_posts/2015-01-04-cocoapods-and-frameworks.markdown @@ -21,7 +21,7 @@ The final step to update was getting our tests to pass. Up to this point, we had ![Level up.](/images/2015-01-04-cocoapods-and-frameworks/levelup.gif) -Eidolon is pretty distinct among iOS applications: from day one, it was developed completely in the open. Developing this kind of app in the open posed some new challenges, including limiting access to fonts for which we have licenses to use but not to distribute. Orta [solved this problem](http://artsy.github.io/blog/2014/06/20/artsys-first-closed-source-pod/) earlier this year by having two pods: one private, and one public, but with identical header files. When installing the dependencies, CocoaPods uses one pod or the other depending on a [complex heuristic](https://github.com/artsy/eidolon/blob/4ae52f166f2d1620f25a59f36e6a87915ba32705/Podfile#L31-L35). However, the names of the pods are used as names for the Swift modules generated from them. Since the pods have different names, the `import Artsy_UIFonts` statements won't make sense if someone only has access to the `Artsy_OSSUIFonts` module. Swift's lack of a preprocessor led to some [hacks](https://github.com/artsy/eidolon/commit/57aa66681727cfed11239f9b5a62bb59fee35f1a). However, CocoaPods now allows you to specify a module name for a pod, so we'll be fixing the issue [shortly](https://github.com/artsy/Artsy-OSSUIFonts/issues/1). +Eidolon is pretty distinct among iOS applications: from day one, it was developed completely in the open. Developing this kind of app in the open posed some new challenges, including limiting access to fonts for which we have licenses to use but not to distribute. Orta [solved this problem](https://artsy.github.io/blog/2014/06/20/artsys-first-closed-source-pod/) earlier this year by having two pods: one private, and one public, but with identical header files. When installing the dependencies, CocoaPods uses one pod or the other depending on a [complex heuristic](https://github.com/artsy/eidolon/blob/4ae52f166f2d1620f25a59f36e6a87915ba32705/Podfile#L31-L35). However, the names of the pods are used as names for the Swift modules generated from them. Since the pods have different names, the `import Artsy_UIFonts` statements won't make sense if someone only has access to the `Artsy_OSSUIFonts` module. Swift's lack of a preprocessor led to some [hacks](https://github.com/artsy/eidolon/commit/57aa66681727cfed11239f9b5a62bb59fee35f1a). However, CocoaPods now allows you to specify a module name for a pod, so we'll be fixing the issue [shortly](https://github.com/artsy/Artsy-OSSUIFonts/issues/1). Of course, Swift still has some rough edges, too. Namely, we can't compile our app with compiler optimizations enabled – the compiler will segfault. It turns out that one of our dependencies was causing the segfault – probably just a Swift compiler bug, but we needed a workaround until it's fixed. I got more familiar with post-install hooks when I dipped my toes into Ruby to [disable the optimization on specific pods](https://github.com/ashfurrow/cocoapods-chillax-swift). diff --git a/_posts/2015-03-31-the-culture-of-openness-artsy-mobile.markdown b/_posts/2015-03-31-the-culture-of-openness-artsy-mobile.markdown index 3e75bbe46b..8be33a3c7d 100644 --- a/_posts/2015-03-31-the-culture-of-openness-artsy-mobile.markdown +++ b/_posts/2015-03-31-the-culture-of-openness-artsy-mobile.markdown @@ -7,9 +7,24 @@ categories: [mobile, Open-Source] author: [sarahscott, laura] --- -Recently, the Artsy Mobile team had the pleasure of working together on [an article](http://www.objc.io/issue-22/artsy.html) for [objc.io](http://www.objc.io), an online publication dedicated to in-depth articles about iOS and OS X development. Each monthly issue consists of several articles centered around a theme—past issues include [Testing](http://www.objc.io/issue-15/), [Animations](http://www.objc.io/issue-12/) and [Swift](http://www.objc.io/issue-16/). objc.io’s latest issue, [iOS at Scale](http://www.objc.io/issue-22), features articles by a handful of developers about how they approach iOS development at their respective companies. Our contribution to the issue is a collaboratively-written article by and about Artsy’s Mobile team from the angle of Artsy's focus on the core value of openness that is foundational to how we (and the greater Artsy team) work. +Recently, the Artsy Mobile team had the pleasure of working together on +[an article](https://www.objc.io/issue-22/artsy.html) for [objc.io](https://www.objc.io), an online publication +dedicated to in-depth articles about iOS and OS X development. Each monthly issue consists of several articles +centered around a theme—past issues include [Testing](https://www.objc.io/issue-15/), +[Animations](https://www.objc.io/issue-12/) and [Swift](https://www.objc.io/issue-16/). objc.io’s latest issue, +[iOS at Scale](https://www.objc.io/issue-22), features articles by a handful of developers about how they approach +iOS development at their respective companies. Our contribution to the issue is a collaboratively-written article +by and about Artsy’s Mobile team from the angle of Artsy's focus on the core value of openness that is foundational +to how we (and the greater Artsy team) work. As our article puts it: -> Our team intrinsically believes in the ideas of open source. Though our individual motivations vary — from a conviction in the power of education to a determination to help others see from giants’ shoulders — we all maintain the value of open source. -iOS at Artsy is characterized by a culture of open source stewardship. Although our team is small, our contributions to the Cocoa developer community are significant. We hope our article sheds some light on our development and testing practices while also providing a high-level look into our team’s philosophy. If you’d like to learn more, feel free to reach out to us at or [@ArtsyOpenSource](https://twitter.com/artsyopensource). +> Our team intrinsically believes in the ideas of open source. Though our individual motivations vary — from a +> conviction in the power of education to a determination to help others see from giants’ shoulders — we all +> maintain the value of open source. + +iOS at Artsy is characterized by a culture of open source stewardship. Although our team is small, our +contributions to the Cocoa developer community are significant. We hope our article sheds some light on our +development and testing practices while also providing a high-level look into our team’s philosophy. If you’d like +to learn more, feel free to reach out to us at or +[@ArtsyOpenSource](https://twitter.com/artsyopensource). diff --git a/_posts/2015-08-06-open-sourcing-energy.markdown b/_posts/2015-08-06-open-sourcing-energy.markdown index 71e295a46b..c6bc674218 100644 --- a/_posts/2015-08-06-open-sourcing-energy.markdown +++ b/_posts/2015-08-06-open-sourcing-energy.markdown @@ -8,7 +8,7 @@ author: orta series: Open Sourcing Your App --- -The Artsy Mobile team is pretty aggressive in our stance on [Open Source by Default](http://code.dblock.org/2015/02/09/becoming-open-source-by-default.html). We've talked about it at [conferences](https://www.youtube.com/watch?v=2DvDeEZ0NDw&spfreload=10) [around](https://www.youtube.com/watch?v=SjjvnrqDjpM) [the](https://www.youtube.com/watch?v=zPbLYWmLPow) [world](https://speakerdeck.com/orta/ios-at-artsy), in [renowned magazines](http://www.objc.io/issues/22-scale/artsy) and on [our blog](http://artsy.github.io/blog/2015/04/28/how-we-open-sourced-eigen/). +The Artsy Mobile team is pretty aggressive in our stance on [Open Source by Default](http://code.dblock.org/2015/02/09/becoming-open-source-by-default.html). We've talked about it at [conferences](https://www.youtube.com/watch?v=2DvDeEZ0NDw&spfreload=10) [around](https://www.youtube.com/watch?v=SjjvnrqDjpM) [the](https://www.youtube.com/watch?v=zPbLYWmLPow) [world](https://speakerdeck.com/orta/ios-at-artsy), in [renowned magazines](http://www.objc.io/issues/22-scale/artsy) and on [our blog](https://artsy.github.io/blog/2015/04/28/how-we-open-sourced-eigen/). It's worth mentioning that we don't just talk externally about Open Source. Internally, the Mobile team runs talks about Open Source for the rest of the Artsy staff. As well, we discuss the tooling and business implications of having our work in public repos. Artsy strives for an open culture, in this case the development team, on the whole, is just further along in the process. diff --git a/_posts/2015-08-24-Cocoa-Architecture-Hybrid-Apps.markdown b/_posts/2015-08-24-Cocoa-Architecture-Hybrid-Apps.markdown index ded59502d1..a08b4c30cb 100644 --- a/_posts/2015-08-24-Cocoa-Architecture-Hybrid-Apps.markdown +++ b/_posts/2015-08-24-Cocoa-Architecture-Hybrid-Apps.markdown @@ -55,6 +55,6 @@ When you choose developer ease over user experience it's important to take into # Evolution One of the most interesting developments this year in the Cocoa world is Facebook's [react-native](https://cocoapods.org/pods/React), a bridge between web technology and native code that doesn't rely on using the [traditional DOM](http://www.quirksmode.org/dom/intro.html) - freeing it from a lot of the common problems found in highly web-based apps. -We're pretty optimistic about it on the mobile team. We're not quite willing to jump head-first into a [pre-1.0 technology](http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/) again, but it shows a lot of promise. +We're pretty optimistic about it on the mobile team. We're not quite willing to jump head-first into a [pre-1.0 technology](https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/) again, but it shows a lot of promise. The fact that we were able to ship an app at all was because we could build the parts that meant the most to us native, then rely on web technologies to cover the rest of the ground. By being pragmatic in our approach to using web tech, we have the chance to stand on the shoulders of giants. diff --git a/_posts/2015-09-01-Cocoa-Architecture-Dropped-Design-Patterns.markdown b/_posts/2015-09-01-Cocoa-Architecture-Dropped-Design-Patterns.markdown index f44bce24b7..bf28b84b37 100644 --- a/_posts/2015-09-01-Cocoa-Architecture-Dropped-Design-Patterns.markdown +++ b/_posts/2015-09-01-Cocoa-Architecture-Dropped-Design-Patterns.markdown @@ -92,7 +92,7 @@ We would instead build something [like this](https://github.com/artsy/eigen/blob [...] ``` -This gives us the ability to not sprinkle analytics code around the app in every file. It keeps the responsibilities of objects simpler and we've been happy with it in Eigen. We've not migrated it into Energy, its dependency on ReactiveCocoa brings too much additional weight. So far we've been applying analytics inline, Energy has much less need for individual analytics throughout the application. If you want to learn more about this pattern check out [Aspect-Oriented Programming and ARAnalytics](http://artsy.github.io/blog/2014/08/04/aspect-oriented-programming-and-aranalytics/). +This gives us the ability to not sprinkle analytics code around the app in every file. It keeps the responsibilities of objects simpler and we've been happy with it in Eigen. We've not migrated it into Energy, its dependency on ReactiveCocoa brings too much additional weight. So far we've been applying analytics inline, Energy has much less need for individual analytics throughout the application. If you want to learn more about this pattern check out [Aspect-Oriented Programming and ARAnalytics](https://artsy.github.io/blog/2014/08/04/aspect-oriented-programming-and-aranalytics/). ## Class Methods as the whole API diff --git a/_posts/2015-09-04-releasecop-tracks-stale-releases.markdown b/_posts/2015-09-04-releasecop-tracks-stale-releases.markdown index ece0b4826e..f649acdb56 100644 --- a/_posts/2015-09-04-releasecop-tracks-stale-releases.markdown +++ b/_posts/2015-09-04-releasecop-tracks-stale-releases.markdown @@ -7,7 +7,7 @@ author: joey categories: [Ruby, open source, OSS, testing, Continuous Integration, Continuous Deployment, devops, tools] --- -Artsy practices a sort of [continuous delivery](http://en.wikipedia.org/wiki/Continuous_delivery). We keep release cycles short and the process of reviewing, testing, and deploying our software as reliable, fast, and automated as possible. (This blog has touched on these practices [multiple](http://artsy.github.io/blog/categories/testing/) [times](http://artsy.github.io/blog/categories/continuous-integration).) +Artsy practices a sort of [continuous delivery](http://en.wikipedia.org/wiki/Continuous_delivery). We keep release cycles short and the process of reviewing, testing, and deploying our software as reliable, fast, and automated as possible. (This blog has touched on these practices [multiple](https://artsy.github.io/blog/categories/testing/) [times](https://artsy.github.io/blog/categories/continuous-integration).) Usually, commits that have been reviewed and merged are immediately built and tested. Successfully built versions of the codebase are often automatically deployed to a staging environment. On an automated or frequent-but-manual basis, that version is deployed to a production environment. Thus, commits form a pipeline: diff --git a/_posts/2015-09-24-mvvm-in-swift.markdown b/_posts/2015-09-24-mvvm-in-swift.markdown index ceaf0131e3..11d0c9f09c 100644 --- a/_posts/2015-09-24-mvvm-in-swift.markdown +++ b/_posts/2015-09-24-mvvm-in-swift.markdown @@ -10,7 +10,7 @@ series: Swift Patterns Model View ViewModel has become the default way I write apps on iOS – it makes writing iOS apps a joy. I've written [about it](https://www.objc.io/issues/13-architecture/mvvm/) [again](http://www.teehanlax.com/blog/model-view-viewmodel-for-ios/) and [again](https://speakerdeck.com/ashfurrow/reactivecocoa-at-mdevcon-2014) and [oh my](https://leanpub.com/iosfrp). -But last Autumn, as our team was all-hands-on-deck to wrap up the [auctions kiosk app](http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/), we chose not to use MVVM. Why not? +But last Autumn, as our team was all-hands-on-deck to wrap up the [auctions kiosk app](https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/), we chose not to use MVVM. Why not? We were building a _new app_ in a _new language_ using a _non-Swift framework_ for functional reactive programming. I was also teaching colleagues what they needed to know about ReactiveCocoa to help write the app. We used the MVC pattern because the relative cost of MVVM was too high. diff --git a/_posts/2015-12-08-reactive-cocoa-to-rxswift.markdown b/_posts/2015-12-08-reactive-cocoa-to-rxswift.markdown index b67b0b43a2..729ad96613 100644 --- a/_posts/2015-12-08-reactive-cocoa-to-rxswift.markdown +++ b/_posts/2015-12-08-reactive-cocoa-to-rxswift.markdown @@ -8,7 +8,7 @@ categories: [ios, mvvm, open source, swift, mobile] series: Swift Patterns --- -When we [built Eidolon last year](http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/), Swift was still pre-1.0 and we couldn't rely on the wide variety of available Swift libraries we enjoy today. I wanted to build it using functional reactive programming, because that's how I believe [everyone should write software](https://realm.io/news/altconf-ash-furrow-functional-reactive-swift/), but there were no Swift-based FRP libraries at the time. As a compromise, I used ReactiveCocoa's Objective-C API (the Swift API was months away from an alpha). +When we [built Eidolon last year](https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/), Swift was still pre-1.0 and we couldn't rely on the wide variety of available Swift libraries we enjoy today. I wanted to build it using functional reactive programming, because that's how I believe [everyone should write software](https://realm.io/news/altconf-ash-furrow-functional-reactive-swift/), but there were no Swift-based FRP libraries at the time. As a compromise, I used ReactiveCocoa's Objective-C API (the Swift API was months away from an alpha). diff --git a/_posts/2015-12-11-License-and-You.markdown b/_posts/2015-12-11-License-and-You.markdown index cddf0d2644..90e53d993d 100644 --- a/_posts/2015-12-11-License-and-You.markdown +++ b/_posts/2015-12-11-License-and-You.markdown @@ -10,7 +10,7 @@ series: Open Source by Default As a part of our internal Lunch and Learn series, I gave a talk to our developers with an overview of the different types of source code licenses available. -We always recommend MIT within Artsy, but understanding what the other ones are and [why we made](http://artsy.github.io/blog/2012/01/29/how-art-dot-sy-uses-github-to-build-art-dot-sy/) the choices we have done is valuable. +We always recommend MIT within Artsy, but understanding what the other ones are and [why we made](https://artsy.github.io/blog/2012/01/29/how-art-dot-sy-uses-github-to-build-art-dot-sy/) the choices we have done is valuable. Jump [to YouTube](https://www.youtube.com/watch?v=0r7JcN3Q_LY) for the video, or click more for a smaller inline preview, as well as all of the speakers notes. diff --git a/_posts/2015-12-15-Automating-Testflight-Deploys.markdown b/_posts/2015-12-15-Automating-Testflight-Deploys.markdown index d4804d760d..2873ff8ca4 100644 --- a/_posts/2015-12-15-Automating-Testflight-Deploys.markdown +++ b/_posts/2015-12-15-Automating-Testflight-Deploys.markdown @@ -7,7 +7,7 @@ categories: [ios, mobile, devops, ci] author: orta --- -I've been a really [strong supporter](http://artsy.github.io/blog/2015/09/18/Cocoa-Architecture-Dependencies/) of the [fastlane](https://fastlane.tools) toolset. I think it fixes a lot of common developer problems, in a space that Apple doesn't really touch. The command line. +I've been a really [strong supporter](https://artsy.github.io/blog/2015/09/18/Cocoa-Architecture-Dependencies/) of the [fastlane](https://fastlane.tools) toolset. I think it fixes a lot of common developer problems, in a space that Apple doesn't really touch. The command line. We've added hints of fastlane to our apps at different rates, [Eidolon](https://github.com/artsy/eidolon/) uses fastlane for everything but [Eigen](https://github.com/artsy/eigen/)/[Energy](https://github.com/artsy/energy)/[Emergence](https://github.com/artsy/emergence) have been pretty slow on the uptake, though they have more complicated setups, being App Store apps. diff --git a/_posts/2016-01-14-eidolon-code-review.markdown b/_posts/2016-01-14-eidolon-code-review.markdown index 6321ed4e92..8ebfcff617 100644 --- a/_posts/2016-01-14-eidolon-code-review.markdown +++ b/_posts/2016-01-14-eidolon-code-review.markdown @@ -8,7 +8,7 @@ author: ash series: iOS Code Review --- -[Eidolon](https://github.com/artsy/eidolon) is the third app from Artsy's mobile team, and it was the [first to be developed totally in the open](http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/). It's often used as a reference for what an app written in Swift, or written using FRP, should look like. Given how interested the community seems to be around the app, it's about time we did a walkthrough of the code. +[Eidolon](https://github.com/artsy/eidolon) is the third app from Artsy's mobile team, and it was the [first to be developed totally in the open](https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/). It's often used as a reference for what an app written in Swift, or written using FRP, should look like. Given how interested the community seems to be around the app, it's about time we did a walkthrough of the code. diff --git a/_posts/2016-01-30-iOS-Junior-Interviews.markdown b/_posts/2016-01-30-iOS-Junior-Interviews.markdown index 461847a21d..6303a78e77 100644 --- a/_posts/2016-01-30-iOS-Junior-Interviews.markdown +++ b/_posts/2016-01-30-iOS-Junior-Interviews.markdown @@ -576,21 +576,21 @@ something about, or want to - and try respond to a few. [61]: https://ma.tt/2016/02/getting-a-job-after-coding-bootcamp/ [62]: https://github.com/alloy/lowdown/pull/8 [63]: https://github.com/supermarin/ObjectiveSugar/pull/20 -[64]: http://artsy.github.io/blog/2016/01/28/being-a-good-open-source-citizen/ +[64]: https://artsy.github.io/blog/2016/01/28/being-a-good-open-source-citizen/ [65]: https://speakerdeck.com/orta/contributing-to-open-source-doesnt-require-changing-the-world [66]: http://geekfeminism.wikia.com/wiki/Male_Programmer_Privilege_Checklist [67]: http://blog.testdouble.com/posts/2014-12-02-the-social-coding-contract.html [68]: http://blog.testdouble.com/posts/2016-01-25-an-empathetic-guide-to-git-conflicts.html [69]: http://blog.testdouble.com/posts/2015-06-08-finding-joy-at-work.html -[70]: http://artsy.github.io/blog/2016/01/13/OSS-Expectations/ -[71]: http://artsy.github.io/blog/2016/01/28/being-a-good-open-source-citizen/ -[72]: http://artsy.github.io/blog/2016/01/14/eidolon-code-review/ -[73]: http://artsy.github.io/blog/2015/11/05/Emergence-Code-Review/ -[74]: http://artsy.github.io/blog/2015/09/01/Cocoa-Architecture-Dropped-Design-Patterns/ -[75]: http://artsy.github.io/blog/2015/07/06/how-to-write-unit-tests-like-a-brood-parasite/ -[76]: http://artsy.github.io/blog/2015/04/03/artsy-engineering-compensation-framework/ -[77]: http://artsy.github.io/blog/2015/03/31/the-culture-of-openness-artsy-mobile/ -[78]: http://artsy.github.io/blog/2014/06/17/building-the-xcode-plugin-snapshots/ +[70]: https://artsy.github.io/blog/2016/01/13/OSS-Expectations/ +[71]: https://artsy.github.io/blog/2016/01/28/being-a-good-open-source-citizen/ +[72]: https://artsy.github.io/blog/2016/01/14/eidolon-code-review/ +[73]: https://artsy.github.io/blog/2015/11/05/Emergence-Code-Review/ +[74]: https://artsy.github.io/blog/2015/09/01/Cocoa-Architecture-Dropped-Design-Patterns/ +[75]: https://artsy.github.io/blog/2015/07/06/how-to-write-unit-tests-like-a-brood-parasite/ +[76]: https://artsy.github.io/blog/2015/04/03/artsy-engineering-compensation-framework/ +[77]: https://artsy.github.io/blog/2015/03/31/the-culture-of-openness-artsy-mobile/ +[78]: https://artsy.github.io/blog/2014/06/17/building-the-xcode-plugin-snapshots/ [79]: https://artsy.github.io/blog/2015/09/24/mvvm-in-swift/ [80]: https://patrickbalestra.com/blog/2018/08/06/my-tech-interviews-experience.html -[81]: http://artsy.github.io/series/react-native-at-artsy/ +[81]: https://artsy.github.io/series/react-native-at-artsy/ diff --git a/_posts/2016-03-14-public-speaking-part2-where-to-start.markdown b/_posts/2016-03-14-public-speaking-part2-where-to-start.markdown index 849c67a66d..745b42ef61 100644 --- a/_posts/2016-03-14-public-speaking-part2-where-to-start.markdown +++ b/_posts/2016-03-14-public-speaking-part2-where-to-start.markdown @@ -59,7 +59,7 @@ They require a bit of planning as you [want to be concise][atc_shorter], but wil [Choosing to publicly speak][part1] and where is only half the battle. Deciding the content, formulating an abstract, talk title, and slides are not trivial. But fear not, Part 3 in this series will have you covered. Stay tuned! -[part1]: http://artsy.github.io/blog/2016/03/09/public-speaking-part1-is-it-for-me/ +[part1]: https://artsy.github.io/blog/2016/03/09/public-speaking-part1-is-it-for-me/ [atc_meditation]: https://www.artsy.net/article/natalia-maldonado-introduction-to-office-meditation-5-steps-to-peace-of-mind-at-work [atc_busfactor]: https://en.wikipedia.org/wiki/Bus_factor [pst_colourtheory]: https://speakerdeck.com/mennenia/colour-theory diff --git a/_posts/2016-03-28-artsy-engineering-organization-stack.markdown b/_posts/2016-03-28-artsy-engineering-organization-stack.markdown index 03cefd45d8..ef4da33143 100644 --- a/_posts/2016-03-28-artsy-engineering-organization-stack.markdown +++ b/_posts/2016-03-28-artsy-engineering-organization-stack.markdown @@ -51,7 +51,7 @@ To address this problem we've created a separate _Platform Engineering Team_ and The Platform Engineering Team is responsible for systems and shared infrastructure that help product teams work smarter, scale our operations, and much more. Our _Design_ team is similar in nature to Platform Engineering, creating a consistent visual language and user experience across all products. -Our _Practices_, specifically _Web_ and _Mobile_, are run by a handful of experienced Engineers working independently and floating between product teams to build features, while evangelizing best practices of making software or our [commitment to open-source](http://artsy.github.io/open-source) at the same time. Engineers on product teams may also belong to a practice - mobile engineers on the Auctions team are members of the Mobile practice, but don't report to the Director of Mobile. +Our _Practices_, specifically _Web_ and _Mobile_, are run by a handful of experienced Engineers working independently and floating between product teams to build features, while evangelizing best practices of making software or our [commitment to open-source](https://artsy.github.io/open-source) at the same time. Engineers on product teams may also belong to a practice - mobile engineers on the Auctions team are members of the Mobile practice, but don't report to the Director of Mobile. ## Reporting Structure diff --git a/_posts/2016-04-06-Testing-Schemes.markdown b/_posts/2016-04-06-Testing-Schemes.markdown index 9e80bc0cdb..23966d3809 100644 --- a/_posts/2016-04-06-Testing-Schemes.markdown +++ b/_posts/2016-04-06-Testing-Schemes.markdown @@ -10,7 +10,7 @@ categories: [mobile, xcode] On my fastest computer, we're just under a minute - `Executed 1105 tests, with 1 failure (0 unexpected) in 43.221 (48.201) seconds` for the whole suite. I think I could probably live with 20 seconds max. So I studied how [AppCode](https://www.jetbrains.com/objc/) handles running tests, and this will be an illustrated guide as to how you can easily run the subset of tests in Xcode based on their techniques. - I [have ideas](https://github.com/orta/life/issues/71) on how to improve time for testing in general, based on [Code Injection](http://artsy.github.io/blog/2016/03/05/iOS-Code-Injection/), but they aren't fully fleshed out and I expect it to be time-intensive to pull off. Time I haven't made yet. + I [have ideas](https://github.com/orta/life/issues/71) on how to improve time for testing in general, based on [Code Injection](https://artsy.github.io/blog/2016/03/05/iOS-Code-Injection/), but they aren't fully fleshed out and I expect it to be time-intensive to pull off. Time I haven't made yet. diff --git a/_posts/2016-06-19-graphql-for-mobile.markdown b/_posts/2016-06-19-graphql-for-mobile.markdown index 0000df6000..b73d62466f 100644 --- a/_posts/2016-06-19-graphql-for-mobile.markdown +++ b/_posts/2016-06-19-graphql-for-mobile.markdown @@ -65,7 +65,7 @@ GraphQL comes with a playground for the API! It's amazing! Clay called it the [" #### View Models -Our GraphQL server is owned by the [web-practice](http://artsy.github.io/blog/2016/03/28/artsy-engineering-organization-stack/) and the mobile practice also help out occasionally. This ownership distinction is important, an API like this would normally be handled by our platform team. +Our GraphQL server is owned by the [web-practice](https://artsy.github.io/blog/2016/03/28/artsy-engineering-organization-stack/) and the mobile practice also help out occasionally. This ownership distinction is important, an API like this would normally be handled by our platform team. Because of Metaphysics' ownership as a "front-end" product, it can contain additional information that is specific to front-end needs. For example, in our first example of a request to our GraphQL server we requested `id`, `additional_information`, `is_price_hidden` and `is_inquireable` - only two of these items come from the database. Both is `is_price_hidden` and `is_inquireable` are derived from the API results on the server. diff --git a/_posts/2016-06-27-dependency-injection-in-swift.markdown b/_posts/2016-06-27-dependency-injection-in-swift.markdown index 1b1f83b6b6..2a377d8234 100644 --- a/_posts/2016-06-27-dependency-injection-in-swift.markdown +++ b/_posts/2016-06-27-dependency-injection-in-swift.markdown @@ -88,7 +88,7 @@ Now you get the benefits of initializer injection, but the flexibility to only u Note: we should still test the `defaultNetworkCreator()` function to make sure it works, too. Having code behave differently specifically while being tested is not generally a good idea. -Applying the advice on using `typealias` from [my last post](http://artsy.github.io/blog/2016/06/24/typealias-for-great-good/), we can tidy our code up a little bit. +Applying the advice on using `typealias` from [my last post](https://artsy.github.io/blog/2016/06/24/typealias-for-great-good/), we can tidy our code up a little bit. ```swift class StateManager { diff --git a/_posts/2016-06-29-code-spelunking-injection.markdown b/_posts/2016-06-29-code-spelunking-injection.markdown index 7360bd418e..dd157c819c 100644 --- a/_posts/2016-06-29-code-spelunking-injection.markdown +++ b/_posts/2016-06-29-code-spelunking-injection.markdown @@ -6,7 +6,7 @@ author: orta categories: [mobile, swift, xcode, tooling] --- -It was only three months ago that I came to the conclusion of just how much time I had wasted [on code compilation cycles](http://artsy.github.io/blog/2016/03/05/iOS-Code-Injection/), once I started to play with [Injection for Xcode](https://github.com/johnno1962/injectionforxcode). I still feel guilt about the time I wasted. However, I'm trying to turn that into something constructive. In order to do that, I need to have a solid understanding of the fundamentals on how Injection For Xcode works. +It was only three months ago that I came to the conclusion of just how much time I had wasted [on code compilation cycles](https://artsy.github.io/blog/2016/03/05/iOS-Code-Injection/), once I started to play with [Injection for Xcode](https://github.com/johnno1962/injectionforxcode). I still feel guilt about the time I wasted. However, I'm trying to turn that into something constructive. In order to do that, I need to have a solid understanding of the fundamentals on how Injection For Xcode works. [Ash](https://ashfurrow.com/) says one of the best ways to [learn is to teach](https://ashfurrow.com/blog/teaching-learning/). So I'm going to try take you through a guided tour of the code-base. You need some pretty reasonable Objective-C chops to get this, but anyone with an app or two under their belt should be able to [grok](https://en.wikipedia.org/wiki/Grok) it. @@ -300,7 +300,7 @@ So we'll see in a few months. If you're interested in this kind of stuff, follow [@Johno1962][johnno1962] on Twitter, he's [@Injection4Xcode][Injection4Xcode] - Chris Lattner follows him, so you know it's good stuff. He's always got some project that is pushing a boundry or two. -[di]: http://artsy.github.io/blog/2016/06/27/dependency-injection-in-swift/ +[di]: https://artsy.github.io/blog/2016/06/27/dependency-injection-in-swift/ [bonjour]: https://en.wikipedia.org/wiki/Bonjour_%28software%29 [bbrowser]: http://tildesoft.com [bbrowser_running]: /images/2016-06-29-injection-overview/selected_bonjour.png diff --git a/_posts/2016-08-15-React-Native-at-Artsy.markdown b/_posts/2016-08-15-React-Native-at-Artsy.markdown index a4cedcd2f7..c28bac857e 100644 --- a/_posts/2016-08-15-React-Native-at-Artsy.markdown +++ b/_posts/2016-08-15-React-Native-at-Artsy.markdown @@ -25,7 +25,7 @@ Ideally, we wanted to find a solution to our architectural issues that would als experience. Notably we wanted more efficient networking, due to mobile device constraints. It would have been an easy leap to start using Swift and, as a matter of fact, we do use Swift in parts of -our flagship application and entirely in [2 other apps](http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/). +our flagship application and entirely in [2 other apps](https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/). However, while Swift is a great language, it’s also just that: _another_ language. It does not do much in terms of new paradigms that solved our architectural needs, it does not help in terms of cross-platform - as most of our code is @@ -110,7 +110,7 @@ these out of the way first, it will only get better afterwards. [the data it needs](https://github.com/artsy/emission/blob/a2e4dbdb/lib/components/artist/header.js#L143-L144). Neat. We do still have ‘view models’, however, those now pretty much all live in - [our GraphQL service](http://artsy.github.io/blog/2016/06/19/graphql-for-mobile/). The added benefit here is that we + [our GraphQL service](https://artsy.github.io/blog/2016/06/19/graphql-for-mobile/). The added benefit here is that we share that model logic with Artsy’s other (web) clients. * “Learn once, write anywhere.” is the neo-cross-platform slogan deployed by React, which is a play on the tried @@ -159,7 +159,7 @@ these out of the way first, it will only get better afterwards. * When we started out with React Native, I didn't want to have to re-write our application in order to take advantage of the technology. To address this I worked within our existing application structure. We consider the App to [be a browser](https://artsy.github.io/blog/2015/08/24/Cocoa-Architecture-Hybrid-Apps/) of native and web view controllers. So, - we added routes [to our SwitchBoard](http://artsy.github.io/blog/2015/08/19/Cocoa-Architecture-Switchboard-Pattern/) for + we added routes [to our SwitchBoard](https://artsy.github.io/blog/2015/08/19/Cocoa-Architecture-Switchboard-Pattern/) for view controllers which are created in React Native. To the rest of the app, there is no difference between a Swift view controller, or one with React Native inside. diff --git a/_posts/2016-08-15-swift-at-artsy-beginners-lesson-one.markdown b/_posts/2016-08-15-swift-at-artsy-beginners-lesson-one.markdown index 9bb45334e9..7bd0755348 100644 --- a/_posts/2016-08-15-swift-at-artsy-beginners-lesson-one.markdown +++ b/_posts/2016-08-15-swift-at-artsy-beginners-lesson-one.markdown @@ -18,6 +18,6 @@ Today was lesson one of the beginner group, and I have a [screen recording][yout {% youtube OLdSg0XpFqA %} -[course]: http://artsy.github.io/blog/2016/01/26/swift-at-artsy/ +[course]: https://artsy.github.io/blog/2016/01/26/swift-at-artsy/ [youtube]: https://youtu.be/OLdSg0XpFqA [github]: https://github.com/artsy/Swift-at-Artsy/tree/master/Beginners/Lesson%20One diff --git a/_posts/2016-08-23-swift-at-artsy-beginners-lesson-two.markdown b/_posts/2016-08-23-swift-at-artsy-beginners-lesson-two.markdown index a17a398a1e..bcc6877b9a 100644 --- a/_posts/2016-08-23-swift-at-artsy-beginners-lesson-two.markdown +++ b/_posts/2016-08-23-swift-at-artsy-beginners-lesson-two.markdown @@ -16,6 +16,6 @@ Yesterday was lesson two and I have a [screen recording][youtube] of my walkthro {% youtube EBtzqx1YRBg %} -[course]: http://artsy.github.io/blog/2016/01/26/swift-at-artsy/ +[course]: https://artsy.github.io/blog/2016/01/26/swift-at-artsy/ [youtube]: https://youtu.be/EBtzqx1YRBg [github]: https://github.com/artsy/Swift-at-Artsy/tree/master/Beginners/Lesson%20Two diff --git a/_posts/2016-08-24-On-Emission.markdown b/_posts/2016-08-24-On-Emission.markdown index 11d3084551..5542e85fe5 100644 --- a/_posts/2016-08-24-On-Emission.markdown +++ b/_posts/2016-08-24-On-Emission.markdown @@ -111,7 +111,7 @@ As ever, our work is open source, and we ensure that anyone can download and run [interstellar]: https://cocoapods.org/pods/Interstellar [eigen]: https://github.com/artsy/eigen/ [router_pattern]: https://artsy.github.io/blog/2015/08/15/Cocoa-Architecture-Router-Pattern/ -[hybrid_app]: http://artsy.github.io/blog/2015/08/24/Cocoa-Architecture-Hybrid-Apps/ +[hybrid_app]: https://artsy.github.io/blog/2015/08/24/Cocoa-Architecture-Hybrid-Apps/ [ar_emission]: https://github.com/artsy/emission/blob/master/Pod/Classes/Core/AREmission.m [example_emission]: https://github.com/artsy/emission/blob/eb9d0f6ca0edd3eb9f07dd9ff3b8499f095bc45b/Example/Emission/AppDelegate.m#L56 [eigen_emission]: https://github.com/artsy/eigen/blob/41b00f6fe497de9e902315104089370dea417017/Artsy/App/ARAppDelegate%2BEmission.m diff --git a/_posts/2016-08-30-swift-at-artsy-beginners-lesson-three.markdown b/_posts/2016-08-30-swift-at-artsy-beginners-lesson-three.markdown index e1b8fc96cb..2820116843 100644 --- a/_posts/2016-08-30-swift-at-artsy-beginners-lesson-three.markdown +++ b/_posts/2016-08-30-swift-at-artsy-beginners-lesson-three.markdown @@ -16,6 +16,6 @@ Yesterday was lesson three and I have a [screen recording][youtube] of my walkth {% youtube e2ErzD8ibG8 %} -[course]: http://artsy.github.io/blog/2016/01/26/swift-at-artsy/ +[course]: https://artsy.github.io/blog/2016/01/26/swift-at-artsy/ [youtube]: https://youtu.be/e2ErzD8ibG8 [github]: https://github.com/artsy/Swift-at-Artsy/tree/master/Beginners/Lesson%20Three diff --git a/_posts/2016-09-06-Milestone-on-OSS-by-Default.markdown b/_posts/2016-09-06-Milestone-on-OSS-by-Default.markdown index c1ef8c716d..8df0535a7f 100644 --- a/_posts/2016-09-06-Milestone-on-OSS-by-Default.markdown +++ b/_posts/2016-09-06-Milestone-on-OSS-by-Default.markdown @@ -105,8 +105,8 @@ We came up with a pattern to make it easier for people to migrate issues, we cre I love that I got to help make these changes, the web team started the process of opening our apps at Artsy, then the mobile team took the next big step. Now the teams are both in lock-step, and if you work on the front-end at Artsy - OSS by Default is the way we all work now. -[brennan]: http://artsy.github.io/author/brennan -[craig]: http://artsy.github.io/author/craig +[brennan]: https://artsy.github.io/author/brennan +[craig]: https://artsy.github.io/author/craig [cab]: http://charlesbroskoski.com/_/ [force_oss]: /blog/2014/09/05/we-open-sourced-our-isomorphic-javascript-website/ [eidolon_oss]: /blog/2014/11/13/eidolon-retrospective/ @@ -117,7 +117,7 @@ I love that I got to help make these changes, the web team started the process o [mg_gh]: https://github.com/artsy/microgravity [semaphore]: https://semaphoreci.com/ [eidolon_pr]: https://github.com/artsy/eidolon/pull/607 -[oss_expectations]: http://artsy.github.io/blog/2016/01/13/OSS-Expectations/ +[oss_expectations]: https://artsy.github.io/blog/2016/01/13/OSS-Expectations/ [force_deploy]: https://github.com/artsy/force/blob/40741bfbff48f6851749eb9c3e5014b0702c8402/Makefile#L79 [forks]: /blog/2012/01/29/how-art-dot-sy-uses-github-to-build-art-dot-sy/ [roop]: http://www.anandarooproy.com/portfolio diff --git a/_posts/2016-09-16-Dev-Interview-Maxim-Cramer.markdown b/_posts/2016-09-16-Dev-Interview-Maxim-Cramer.markdown index fc1ad5ba76..8cf31db2ba 100644 --- a/_posts/2016-09-16-Dev-Interview-Maxim-Cramer.markdown +++ b/_posts/2016-09-16-Dev-Interview-Maxim-Cramer.markdown @@ -7,7 +7,7 @@ categories: [culture, video, interview] series: Dev Interviews --- -I'm happy to introduce the next in the [Dev Interviews](http://artsy.github.io/series/dev-interviews/) series - [Maxim Cramer](http://www.mennenia.com/). +I'm happy to introduce the next in the [Dev Interviews](https://artsy.github.io/series/dev-interviews/) series - [Maxim Cramer](http://www.mennenia.com/). Maxim has been at Artsy for 6 month, working on our mobile app Eigen. Our interview covers how being a remote developer, advice for people at a HQ working with remotes, her work with React Native and what the future holds for the Artsy mobile team. diff --git a/_posts/2016-09-22-professional-development-at-artsy-engineering.markdown b/_posts/2016-09-22-professional-development-at-artsy-engineering.markdown index 2ac5385c13..60fb9a96ff 100644 --- a/_posts/2016-09-22-professional-development-at-artsy-engineering.markdown +++ b/_posts/2016-09-22-professional-development-at-artsy-engineering.markdown @@ -45,7 +45,7 @@ We’ve got an active #tech-learning Slack channel, which people use to share an Newer devs are paired with a mentor, who serves as the point person the newer dev can always talk to. Making this connection official means that it counts as a job responsibility for the mentor. For obvious reasons, mentoring benefits the mentee, but it's good to remember that it also helps mentors develop. After all, teaching someone is the best way to learn. -[1]: http://artsy.github.io/blog/2016/03/28/artsy-engineering-organization-stack/ +[1]: https://artsy.github.io/blog/2016/03/28/artsy-engineering-organization-stack/ [2]: http://orta.io/ diff --git a/_posts/2016-10-08-eidolon-deploy-process.markdown b/_posts/2016-10-08-eidolon-deploy-process.markdown index 6eaeacbb99..3cb006f802 100644 --- a/_posts/2016-10-08-eidolon-deploy-process.markdown +++ b/_posts/2016-10-08-eidolon-deploy-process.markdown @@ -6,7 +6,7 @@ author: ash categories: [mobile, eidolon] --- -Since we [originally built](http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/) Eidolon – an auction bidding kiosk app – the project has largely remained in maintenance mode. Eidolon was one of the first projects that we used automated deploys for, and the deploy process has remained largely unchanged. I believe this stability of the deploy process is a testament to how well the automated deploys have gone. +Since we [originally built](https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/) Eidolon – an auction bidding kiosk app – the project has largely remained in maintenance mode. Eidolon was one of the first projects that we used automated deploys for, and the deploy process has remained largely unchanged. I believe this stability of the deploy process is a testament to how well the automated deploys have gone. This post is going to detail the mechanics of automated deploys for an enterprise-distributed iOS application, discuss lessons we learned and applied to other projects' deploy processes, and describe some of the changes we'd like to make. Our project is entirely open source, so you can check out any part of the code on your own or [open an issue](https://github.com/artsy/eidolon/issues/new) with questions. diff --git a/_posts/2016-10-10-Help!-I'm-becoming-Post-Junior.md b/_posts/2016-10-10-Help!-I'm-becoming-Post-Junior.md index 4ae32f8bb2..a20f4770d9 100644 --- a/_posts/2016-10-10-Help!-I'm-becoming-Post-Junior.md +++ b/_posts/2016-10-10-Help!-I'm-becoming-Post-Junior.md @@ -162,11 +162,11 @@ At the end of the day you’ve got your foundations now, and its time to start t [9]: https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=pd_bxgy_14_img_3?ie=UTF8&psc=1&refRID=BX7MTECP16Z2VR3N3T25 [10]: https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612 [11]: https://www.amazon.co.uk/gp/product/B005OYHF0A/ -[12]: http://artsy.github.io/blog/2016/01/26/swift-at-artsy/ -[13]: http://artsy.github.io/blog/2016/08/31/Keyboard-Shortcuts-workshop/ -[14]: http://artsy.github.io/blog/2015/07/06/how-to-write-unit-tests-like-a-brood-parasite/ -[15]: http://artsy.github.io/blog/2015/06/04/an-eigenstate-of-mind/ -[16]: http://artsy.github.io/blog/2016/03/09/public-speaking-part1-is-it-for-me/ +[12]: https://artsy.github.io/blog/2016/01/26/swift-at-artsy/ +[13]: https://artsy.github.io/blog/2016/08/31/Keyboard-Shortcuts-workshop/ +[14]: https://artsy.github.io/blog/2015/07/06/how-to-write-unit-tests-like-a-brood-parasite/ +[15]: https://artsy.github.io/blog/2015/06/04/an-eigenstate-of-mind/ +[16]: https://artsy.github.io/blog/2016/03/09/public-speaking-part1-is-it-for-me/ [17]: /blog/2015/12/10/License-and-You/ [18]: https://en.wikipedia.org/wiki/Rubber_duck_debugging [19]: https://github.com/orta/you-can-do-it diff --git a/_posts/2016-11-02-improving-page-speed-with-graphql.markdown b/_posts/2016-11-02-improving-page-speed-with-graphql.markdown index 6190c17098..880ea98ea6 100644 --- a/_posts/2016-11-02-improving-page-speed-with-graphql.markdown +++ b/_posts/2016-11-02-improving-page-speed-with-graphql.markdown @@ -6,7 +6,7 @@ author: kana categories: [graphql, javascript, positron, joi] --- -This past year, our team started using a GraphQL orchestration layer that connects various APIs with multiple front-end apps including [iOS](http://artsy.github.io/blog/2016/06/19/graphql-for-mobile). It also handles caching and extracts some business logic out of our client apps. This helped us not only to be more consistent with the way we fetch data across apps, but also improved developer happiness and even bridged teams by having our web and iOS developers work with the same API layer. This got me thinking what other problems GraphQL could solve at Artsy. +This past year, our team started using a GraphQL orchestration layer that connects various APIs with multiple front-end apps including [iOS](https://artsy.github.io/blog/2016/06/19/graphql-for-mobile). It also handles caching and extracts some business logic out of our client apps. This helped us not only to be more consistent with the way we fetch data across apps, but also improved developer happiness and even bridged teams by having our web and iOS developers work with the same API layer. This got me thinking what other problems GraphQL could solve at Artsy. I work on the Publishing Team at Artsy, and we've recently been focused on page speed as a KPI. With so many ways of measuring speed, it's a daunting task but for this post, I'll focus on the way we handled things on the server-side and how integrating GraphQL on our API improved page speed. @@ -91,7 +91,7 @@ The two features of GraphQL that have been helpful for reducing page speed are: 1. Reduced payload because you only request the data you need 2. Multiple fetches can be coalesced into a single request -Not surprisingly, decreased payload and coalesced requests are the same two features [Orta](http://twitter.com/orta) describes in part of his post on the killer features of [GraphQL for Mobile](http://artsy.github.io/blog/2016/06/19/graphql-for-mobile). +Not surprisingly, decreased payload and coalesced requests are the same two features [Orta](http://twitter.com/orta) describes in part of his post on the killer features of [GraphQL for Mobile](https://artsy.github.io/blog/2016/06/19/graphql-for-mobile). ### Reduced Payload diff --git a/_posts/2016-11-14-JS-Glossary.md b/_posts/2016-11-14-JS-Glossary.md index f279907bb5..a7ce3857f4 100644 --- a/_posts/2016-11-14-JS-Glossary.md +++ b/_posts/2016-11-14-JS-Glossary.md @@ -589,7 +589,7 @@ $("a[name]").each(function(i, el){ [search-bar]: https://github.com/artsy/emission/blob/c558323e4276699925b4edb3d448812005ae6b5d/lib/components/home/search_bar.js -[our-implmentation]: http://artsy.github.io/blog/2016/08/24/On-Emission/ +[our-implmentation]: https://artsy.github.io/blog/2016/08/24/On-Emission/ [jsx-example]: https://github.com/artsy/emission/blob/c558323e4276699925b4edb3d448812005ae6b5d/lib/components/artist/header.js [react-guide]: https://github.com/uberVU/react-guide/blob/master/props-vs-state.md#props-vs-state [typings]: https://github.com/typings/typings diff --git a/_posts/2017-01-04-OSS-FAQ.md b/_posts/2017-01-04-OSS-FAQ.md index 6fe0e89353..2972ff4120 100644 --- a/_posts/2017-01-04-OSS-FAQ.md +++ b/_posts/2017-01-04-OSS-FAQ.md @@ -7,11 +7,11 @@ categories: [oss, culture] series: Open Source by Default --- -We have a lot of Open Source code. For engineers without considerable experience in the open source realm, understanding some of the copyright issues around code ownership can be tricky. I've been working with our CTO [dB.](http://artsy.github.io/author/db/), and our senior counsel [Yayoi Shionoiri](http://www.theartgorgeous.com/yayoi-shionoiri/) on creating an open-source FAQ for engineers. +We have a lot of Open Source code. For engineers without considerable experience in the open source realm, understanding some of the copyright issues around code ownership can be tricky. I've been working with our CTO [dB.](https://artsy.github.io/author/db/), and our senior counsel [Yayoi Shionoiri](http://www.theartgorgeous.com/yayoi-shionoiri/) on creating an open-source FAQ for engineers. ### What is Open Source? -Open Source code is code that can be freely examined, used, adapted, and shared by all through a license that sets forth these principles. The only potential limitation that an Open Source license is likely to impose is that future copies of the code (whether in adapted or un-adapted form) be themselves licensed in a manner consistent with the original license. At Artsy, we are committed to making our engineering work [Open Source by default](http://code.dblock.org/2015/02/09/becoming-open-source-by-default.html). A list of our Open Source projects can be [found here](http://artsy.github.io/open-source/). +Open Source code is code that can be freely examined, used, adapted, and shared by all through a license that sets forth these principles. The only potential limitation that an Open Source license is likely to impose is that future copies of the code (whether in adapted or un-adapted form) be themselves licensed in a manner consistent with the original license. At Artsy, we are committed to making our engineering work [Open Source by default](http://code.dblock.org/2015/02/09/becoming-open-source-by-default.html). A list of our Open Source projects can be [found here](https://artsy.github.io/open-source/). @@ -31,7 +31,7 @@ Very generally speaking, copyright is the body of law that governs how Artsy uph Inbound Open Source code refers to the use of third party code under an Open Source license for Artsy's products. Outbound Open Source code refers to the publication of Artsy code. -When we publish Outbound Open Source code, as mentioned before, Artsy has a right to do so because we have the copyright to this code. We give third parties the right to use the code usually through [this type](https://github.com/artsy/eigen/blob/master/LICENSE) of broad license ([MIT](https://tldrlegal.com/license/mit-license)). (For more on code licenses, see [Orta’s talk on code licenses](http://artsy.github.io/blog/2015/12/10/License-and-You/). +When we publish Outbound Open Source code, as mentioned before, Artsy has a right to do so because we have the copyright to this code. We give third parties the right to use the code usually through [this type](https://github.com/artsy/eigen/blob/master/LICENSE) of broad license ([MIT](https://tldrlegal.com/license/mit-license)). (For more on code licenses, see [Orta’s talk on code licenses](https://artsy.github.io/blog/2015/12/10/License-and-You/). ### What is the credit on Artsy's Open Source code? @@ -49,7 +49,7 @@ When creating a new project at Artsy, you must include a license. We use the [c ### How can I Open Source an existing project at Artsy? -When Open Sourcing existing projects, it's best practice to announce it to the development (and related product teams) and ensure that there is ample time for discussion before moving it. For example [see how we migrated the artsy.net](http://artsy.github.io/blog/2016/09/06/Milestone-on-OSS-by-Default/) website. +When Open Sourcing existing projects, it's best practice to announce it to the development (and related product teams) and ensure that there is ample time for discussion before moving it. For example [see how we migrated the artsy.net](https://artsy.github.io/blog/2016/09/06/Milestone-on-OSS-by-Default/) website. ### How does Artsy think about Artsy Projects versus Personal Projects? diff --git a/_posts/2017-01-13-xcode-8-fastlane-codesigning.markdown b/_posts/2017-01-13-xcode-8-fastlane-codesigning.markdown index f2194fb6b7..898f422951 100644 --- a/_posts/2017-01-13-xcode-8-fastlane-codesigning.markdown +++ b/_posts/2017-01-13-xcode-8-fastlane-codesigning.markdown @@ -10,7 +10,7 @@ New year, new deploy process! Late last year our mobile team completed the updat ![Automatic code signing settings](/images/2017-01-13-xcode-8-fastlane-codesigning/xcode-screenshot.png) -However, when I went to make our first [automated deploy](http://artsy.github.io/blog/2015/12/15/Automating-Testflight-Deploys/) today, things didn't work; I got a somewhat cryptic error about code signing. +However, when I went to make our first [automated deploy](https://artsy.github.io/blog/2015/12/15/Automating-Testflight-Deploys/) today, things didn't work; I got a somewhat cryptic error about code signing. diff --git a/_posts/2017-01-25-mashing-maps.markdown b/_posts/2017-01-25-mashing-maps.markdown index ea90a2ffa0..abf4740dd2 100644 --- a/_posts/2017-01-25-mashing-maps.markdown +++ b/_posts/2017-01-25-mashing-maps.markdown @@ -275,4 +275,4 @@ However, I think it's always worth throwing in an extra 2-3 hours at the end of [d3]: https://d3js.org [datamaps]: http://datamaps.github.io [eachoflimit]: http://caolan.github.io/async/docs.html#eachOfLimit -[emergence]: http://artsy.github.io/blog/2015/11/05/Emergence-Code-Review/ +[emergence]: https://artsy.github.io/blog/2015/11/05/Emergence-Code-Review/ diff --git a/_posts/2017-02-05-Retrospective-Swift-at-Artsy.md b/_posts/2017-02-05-Retrospective-Swift-at-Artsy.md index 3fdd98226b..9ddc656cf2 100644 --- a/_posts/2017-02-05-Retrospective-Swift-at-Artsy.md +++ b/_posts/2017-02-05-Retrospective-Swift-at-Artsy.md @@ -275,9 +275,9 @@ If you'd like to look into GraphQL + Relay, but don't want to start building a s [code]: /blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/#Visual.Studio.Code [extend-ts]:/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/#TypeScript-Extension -[eidolon-postmortem]: http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/ +[eidolon-postmortem]: https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/ [emergence]: https://github.com/artsy/emergence -[live-a]: http://artsy.github.io/blog/2016/08/09/the-tech-behind-live-auction-integration/ +[live-a]: https://artsy.github.io/blog/2016/08/09/the-tech-behind-live-auction-integration/ [artsy-rn]: /blog/2016/08/15/React-Native-at-Artsy/ [what-is-artsy-app]: /blog/2016/08/24/On-Emission/#Why.we.were.in.a.good.position.to.do.this [eigen]: https://github.com/artsy/eigen @@ -305,7 +305,7 @@ If you'd like to look into GraphQL + Relay, but don't want to start building a s [reactotron]: https://github.com/infinitered/reactotron [hrm]: https://github.com/gaearon/react-hot-loader [storybook]: https://github.com/storybooks/react-storybook -[mobile-graphql]: http://artsy.github.io/blog/2016/06/19/graphql-for-mobile/ +[mobile-graphql]: https://artsy.github.io/blog/2016/06/19/graphql-for-mobile/ [ssswift]: https://ashfurrow.com/blog/swift-on-linux/ [gql2ts]: https://github.com/alloy/relational-theory/pull/18 [vscode-relay]: https://github.com/alloy/vscode-relay diff --git a/_posts/2017-04-26-Relay-Mutations.md b/_posts/2017-04-26-Relay-Mutations.md index 7ecbb45319..2729c201c5 100644 --- a/_posts/2017-04-26-Relay-Mutations.md +++ b/_posts/2017-04-26-Relay-Mutations.md @@ -20,7 +20,7 @@ In this post, we are going to explore how Relay mutations work by looking at a R ![](http://i.imgur.com/S21GfEo.png) -> Note: We're going to assume a basic familiarity with GraphQL in this article. If you haven't heard of GraphQL before, the [documentation](www.graphql.org) and the [GraphQL for iOS Developers](http://artsy.github.io/blog/2016/06/19/graphql-for-mobile/) post are great places to start. If you're interested in learning more about Relay in general, head over to [Learn Relay](www.learnrelay.org) for a comprehensive tutorial. +> Note: We're going to assume a basic familiarity with GraphQL in this article. If you haven't heard of GraphQL before, the [documentation](www.graphql.org) and the [GraphQL for iOS Developers](https://artsy.github.io/blog/2016/06/19/graphql-for-mobile/) post are great places to start. If you're interested in learning more about Relay in general, head over to [Learn Relay](www.learnrelay.org) for a comprehensive tutorial. diff --git a/_posts/2017-06-30-danger-one-oh-again.md b/_posts/2017-06-30-danger-one-oh-again.md index 6c553084e6..a909b94451 100644 --- a/_posts/2017-06-30-danger-one-oh-again.md +++ b/_posts/2017-06-30-danger-one-oh-again.md @@ -202,7 +202,7 @@ This post uses the CC license image from [this tweet](https://twitter.com/Cloudy [junit]: https://github.com/orta/danger-junit [usechange]: http://keepachangelog.com/en/0.3.0/ [danger-changelog]: https://github.com/dblock/danger-changelog -[defense]: http://artsy.github.io/blog/2016/07/03/handling-big-projects/ +[defense]: https://artsy.github.io/blog/2016/07/03/handling-big-projects/ [peril-vision]: https://github.com/danger/peril/blob/master/VISION.md [peril]: https://github.com/danger/peril#peril [peril-reaction]: https://github.com/artsy/reaction-force/pull/184 diff --git a/_posts/2017-07-06-React-Native-for-iOS-devs.markdown b/_posts/2017-07-06-React-Native-for-iOS-devs.markdown index 4246a506c4..545f8dba96 100644 --- a/_posts/2017-07-06-React-Native-for-iOS-devs.markdown +++ b/_posts/2017-07-06-React-Native-for-iOS-devs.markdown @@ -647,7 +647,7 @@ If you're considering a new app, or a grand re-write, React Native should be con [sword of damocles]: https://en.wikipedia.org/wiki/Damocles -[retro-swift-sherlock]: http://artsy.github.io/blog/2017/02/05/Retrospective-Swift-at-Artsy/#Developer.Experience +[retro-swift-sherlock]: https://artsy.github.io/blog/2017/02/05/Retrospective-Swift-at-Artsy/#Developer.Experience [Airbnb]: https://medium.com/airbnb-engineering/tagged/mobile @@ -737,7 +737,7 @@ If you're considering a new app, or a grand re-write, React Native should be con [rails-fade]: https://github.com/artsy/emission/blob/e4bbde386d54bc8ca73565d667e2701ab0fad0f0/src/lib/Components/Home/ArtistRails/ArtistRail.tsx#L63-L73 [rails-expand]: https://github.com/artsy/emission/blob/e4bbde386d54bc8ca73565d667e2701ab0fad0f0/src/lib/Components/Home/ArtworkRails/ArtworkRail.tsx#L77-L80 [fb-brown]: https://www.youtube.com/watch?v=cSUxHv-kH7w&list=PLb0IAmt7-GS0kj3saZuh4vzfldxEdH5RH&index=2 -[eidolon]: http://artsy.github.io/blog/2014/11/13/eidolon-retrospective/ +[eidolon]: https://artsy.github.io/blog/2014/11/13/eidolon-retrospective/ [ash-feels]: https://ashfurrow.com/blog/swift-vs-react-native-feels/ [Relay]: https://facebook.github.io/relay/ [on-emission]: /blog/2016/08/24/On-Emission/ diff --git a/_posts/2017-07-31-fastlane-travis-weekly-deploys.md b/_posts/2017-07-31-fastlane-travis-weekly-deploys.md index 156e750a20..bd70138d81 100644 --- a/_posts/2017-07-31-fastlane-travis-weekly-deploys.md +++ b/_posts/2017-07-31-fastlane-travis-weekly-deploys.md @@ -166,7 +166,7 @@ By the end of the process, our `Fastfile` looked like: ```ruby # This is documented in the Artsy Blog: -# http://artsy.github.io/blog/2017/07/31/fastlane-travis-weekly-deploys/ +# https://artsy.github.io/blog/2017/07/31/fastlane-travis-weekly-deploys/ lane :setup do Dir.chdir('..') do sh 'rm -rf emission' if Dir.exist? 'Emission' diff --git a/_posts/2017-09-05-Modernizing-Force.markdown b/_posts/2017-09-05-Modernizing-Force.markdown index 44de5bf913..cfe8ff67eb 100644 --- a/_posts/2017-09-05-Modernizing-Force.markdown +++ b/_posts/2017-09-05-Modernizing-Force.markdown @@ -8,7 +8,7 @@ categories: [force, reaction, emission, javascript, typescript, react, babel, st author: chris --- -[Force](https://github.com/artsy/force) is Artsy's main website, [artsy.net](https://www.artsy.net). In the three years since it was [open-sourced](http://artsy.github.io/blog/2014/09/05/we-open-sourced-our-isomorphic-javascript-website/), it has provided a solid foundation to build features on top of without a lot of the costs associated with growth. It is an early example of Isomorphic ("universal") JavaScript, built on top of Express, Backbone, CoffeeScript, Stylus and Jade. It is also highly modular, adopting patterns laid down by its parent project, [Ezel](https://github.com/artsy/ezel). +[Force](https://github.com/artsy/force) is Artsy's main website, [artsy.net](https://www.artsy.net). In the three years since it was [open-sourced](https://artsy.github.io/blog/2014/09/05/we-open-sourced-our-isomorphic-javascript-website/), it has provided a solid foundation to build features on top of without a lot of the costs associated with growth. It is an early example of Isomorphic ("universal") JavaScript, built on top of Express, Backbone, CoffeeScript, Stylus and Jade. It is also highly modular, adopting patterns laid down by its parent project, [Ezel](https://github.com/artsy/ezel). When first developed these technologies made a lot of sense; CoffeeScript fixed many of the problems with JavaScript pre-ES6, and Jade / Stylus made working with HTML / CSS much more elegant. As time progressed and new technologies became a thing these solutions starting feeling more burdensome to continue building features with and many of our developers longed to start using next-generation tools like React. diff --git a/_posts/2017-09-11-DevSwap.markdown b/_posts/2017-09-11-DevSwap.markdown index b9459d05a2..a9e5d97643 100644 --- a/_posts/2017-09-11-DevSwap.markdown +++ b/_posts/2017-09-11-DevSwap.markdown @@ -102,7 +102,7 @@ Finally, what did people like most? Despite a few issues with onboarding and timing, it seems that most people found DevSwap to be valuable. This feedback gives us a lot to consider when planning the next one. We hope to bring it back soon! -[org]: http://artsy.github.io/blog/2016/03/28/artsy-engineering-organization-stack/ +[org]: https://artsy.github.io/blog/2016/03/28/artsy-engineering-organization-stack/ [modern]: https://github.com/artsy/positron/pull/1225 [docs1]: https://github.com/artsy/metaphysics/pull/702 [docs2]: https://github.com/artsy/positron/pull/1235 diff --git a/_posts/2018-01-24-kubernetes-and-hokusai.markdown b/_posts/2018-01-24-kubernetes-and-hokusai.markdown index 1a4de66282..69bd7cc8b2 100644 --- a/_posts/2018-01-24-kubernetes-and-hokusai.markdown +++ b/_posts/2018-01-24-kubernetes-and-hokusai.markdown @@ -125,7 +125,7 @@ I'm very encouraged by Kubernetes. It offers really slick, enterprise-level scal [Heroku]: https://www.heroku.com [Dynos]: https://www.heroku.com/dynos -[stack]: http://artsy.github.io/blog/2017/04/14/artsy-technology-stack-2017/ +[stack]: https://artsy.github.io/blog/2017/04/14/artsy-technology-stack-2017/ [Kubernetes]: https://kubernetes.io [Hokusai]: https://github.com/artsy/hokusai [commands]: https://github.com/artsy/hokusai/blob/master/docs/Command_Reference.md diff --git a/_posts/2018-03-18-ar.markdown b/_posts/2018-03-18-ar.markdown index fa1266ac4e..175840fca8 100644 --- a/_posts/2018-03-18-ar.markdown +++ b/_posts/2018-03-18-ar.markdown @@ -264,7 +264,7 @@ ol { [holo-lens]: http://fortune.com/2017/03/02/microsoft-hololens-art-show/ [lazerwalker]: http://www.lazerwalker.com -[rn]: http://artsy.github.io/series/react-native-at-artsy/ +[rn]: https://artsy.github.io/series/react-native-at-artsy/ [prototype1]: https://github.com/lazerwalker/art-on-walls-prototype [ar_pr_1]: https://github.com/artsy/eigen/pull/2501 [vir_ic]: https://github.com/artsy/eigen/blob/f897b3438bd07470bd88a790fc6d6a524f5756cb/Artsy/View_Controllers/ARVIR/AR/ARAugmentedVIRInteractionController.h @@ -282,5 +282,5 @@ ol { [ht]: https://developer.apple.com/documentation/arkit/arskview/2875733-hittest [ar_vir_eigen]: https://github.com/artsy/eigen/tree/f897b3438bd07470bd88a790fc6d6a524f5756cb/Artsy/View_Controllers/ARVIR [rn_ar]: https://github.com/react-native-ar/react-native-arkit -[rn_2]: http://artsy.github.io/blog/2018/03/17/two-years-of-react-native/ +[rn_2]: https://artsy.github.io/blog/2018/03/17/two-years-of-react-native/ [qwoa]: https://github.com/artsy/meta/blob/master/meta/what_is_artsy.md#quality-worthy-of-art diff --git a/_posts/2018-04-17-making-a-components-pod.markdown b/_posts/2018-04-17-making-a-components-pod.markdown index 1ba7137e70..c183ce2fcf 100644 --- a/_posts/2018-04-17-making-a-components-pod.markdown +++ b/_posts/2018-04-17-making-a-components-pod.markdown @@ -31,7 +31,7 @@ specifically to slow you down and make you think about each command. This isn't minutes, running though it properly should take about an hour. _You can also watch along with [this YouTube video](https://www.youtube.com/watch?v=ucQXL4vkP78) of me going through -the tutorial at [Artsy x React Native_](http://artsy.github.io/artsy-x-react-native.html). +the tutorial at [Artsy x React Native_](https://artsy.github.io/artsy-x-react-native.html).

diff --git a/_posts/2018-05-01-JavaScriptures-1-React.markdown b/_posts/2018-05-01-JavaScriptures-1-React.markdown index e3ef38ea57..d7f0e178d3 100644 --- a/_posts/2018-05-01-JavaScriptures-1-React.markdown +++ b/_posts/2018-05-01-JavaScriptures-1-React.markdown @@ -27,7 +27,7 @@ myself. Slides on Speakerdeck

-[omakase]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[omakase]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [luc]: https://twitter.com/lucsucces [recording]: https://youtu.be/k_f7Ff7bREc [slides]: https://speakerdeck.com/artsyopensource/javascriptures-1-react diff --git a/_posts/2018-05-02-JavaScriptures-2-TypeScript.markdown b/_posts/2018-05-02-JavaScriptures-2-TypeScript.markdown index f370819c54..1e328c54c8 100644 --- a/_posts/2018-05-02-JavaScriptures-2-TypeScript.markdown +++ b/_posts/2018-05-02-JavaScriptures-2-TypeScript.markdown @@ -24,7 +24,7 @@ inference, generics and how they all come together in your tools. Slides on Speakerdeck

-[omakase]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[omakase]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [luc]: https://twitter.com/lucsucces [recording]: https://youtu.be/KXPZvjCUlAA [slides]: https://speakerdeck.com/artsyopensource/javascriptures-2-typescript diff --git a/_posts/2018-05-04-JavaScriptures-3-Styled-Components.markdown b/_posts/2018-05-04-JavaScriptures-3-Styled-Components.markdown index d3370afe99..7b046bd0d0 100644 --- a/_posts/2018-05-04-JavaScriptures-3-Styled-Components.markdown +++ b/_posts/2018-05-04-JavaScriptures-3-Styled-Components.markdown @@ -21,7 +21,7 @@ have Anandaroop Roy and Jon Allured covering all the details. Slides on Speakerdeck

-[omakase]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[omakase]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [luc]: https://twitter.com/lucsucces [recording]: https://youtu.be/K7xafqfcC-4 [slides]: https://speakerdeck.com/artsyopensource/javascriptures-3-styled-components diff --git a/_posts/2018-06-02-Announcing-Artsy-x-React-Native.markdown b/_posts/2018-06-02-Announcing-Artsy-x-React-Native.markdown index a551a41324..26f2a81195 100644 --- a/_posts/2018-06-02-Announcing-Artsy-x-React-Native.markdown +++ b/_posts/2018-06-02-Announcing-Artsy-x-React-Native.markdown @@ -23,8 +23,8 @@ tooling up for success, and create solid animations. We want [Artsy x React-Native][axrn] to be about getting you up to speed with the framework, so you can make your own decisions going forward. -[documented]: http://artsy.github.io/search/?q=react+native -[our]: http://artsy.github.io/series/react-native-at-artsy/ -[journey]: http://artsy.github.io/blog/2016/08/15/React-Native-at-Artsy/ -[reasoning]: http://artsy.github.io/blog/2018/03/17/two-years-of-react-native/ +[documented]: https://artsy.github.io/search/?q=react+native +[our]: https://artsy.github.io/series/react-native-at-artsy/ +[journey]: https://artsy.github.io/blog/2016/08/15/React-Native-at-Artsy/ +[reasoning]: https://artsy.github.io/blog/2018/03/17/two-years-of-react-native/ [axrn]: https://www.artsy.net/x-react-native diff --git a/_posts/2018-06-13-JavaScriptures-4.1-Relay.markdown b/_posts/2018-06-13-JavaScriptures-4.1-Relay.markdown index de95df43a6..e0a81bd091 100644 --- a/_posts/2018-06-13-JavaScriptures-4.1-Relay.markdown +++ b/_posts/2018-06-13-JavaScriptures-4.1-Relay.markdown @@ -24,7 +24,7 @@ with all of the Artsy tooling. Slides on Speakerdeck

-[omakase]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[omakase]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [alloy]: https://twitter.com/alloy [recording]: https://youtu.be/-Ax46yDG7oc [slides]: https://speakerdeck.com/artsyopensource/javascriptures-4-dot-1-relay? diff --git a/_posts/2018-06-14-JavaScriptures-4.2-Local-State.markdown b/_posts/2018-06-14-JavaScriptures-4.2-Local-State.markdown index b218f4d84e..226d5798a4 100644 --- a/_posts/2018-06-14-JavaScriptures-4.2-Local-State.markdown +++ b/_posts/2018-06-14-JavaScriptures-4.2-Local-State.markdown @@ -24,7 +24,7 @@ interacting with local state in our different applications. Slides on Speakerdeck

-[omakase]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[omakase]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [chris]: https://github.com/damassi [recording]: https://youtu.be/uLeZnpvVpxA [slides]: https://speakerdeck.com/artsyopensource/javascriptures-4-dot-2-local-state?slide=1 diff --git a/_posts/2018-06-15-JavaScriptures-5-Babel-Webpack.markdown b/_posts/2018-06-15-JavaScriptures-5-Babel-Webpack.markdown index 3c3cdcbf7d..56fb38445f 100644 --- a/_posts/2018-06-15-JavaScriptures-5-Babel-Webpack.markdown +++ b/_posts/2018-06-15-JavaScriptures-5-Babel-Webpack.markdown @@ -21,7 +21,7 @@ and Babel in a fresh application. Slides on Speakerdeck

-[omakase]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[omakase]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [chris]: https://github.com/damassi [recording]: https://youtu.be/NhYot0NC6q8 [slides]: https://speakerdeck.com/artsyopensource/javascriptures-5-babel-and-webpack?slide=1 diff --git a/_posts/2018-08-10-On-Context-Switching.markdown b/_posts/2018-08-10-On-Context-Switching.markdown index fe0f2886c3..62a7ce9e97 100644 --- a/_posts/2018-08-10-On-Context-Switching.markdown +++ b/_posts/2018-08-10-On-Context-Switching.markdown @@ -213,12 +213,12 @@ Do you have any useful ideas for speeding up context switching? I'm open to impr [active]: https://gist.github.com/paulmillr/2657075 [flow]: https://en.wikipedia.org/wiki/Flow_(psychology) -[ossd]: http://artsy.github.io/series/open-source-by-default/ +[ossd]: https://artsy.github.io/series/open-source-by-default/ [hiring]: https://www.artsy.net/jobs#engineering [exp]: https://github.com/orta/cocoapods-fix-react-native#contributing-back [vision]: https://github.com/danger/danger-js/blob/master/VISION.md#danger-for-js [rdd]: https://tom.preston-werner.com/2010/08/23/readme-driven-development.html -[chris]: http://artsy.github.io/author/chris/ +[chris]: https://artsy.github.io/author/chris/ [consign]: https://github.com/artsy/emission/tree/master/src/lib/Components/Consignments [prettier]: https://prettier.io [danger]: https://danger.systems @@ -226,7 +226,7 @@ Do you have any useful ideas for speeding up context switching? I'm open to impr [lint-staged]: https://github.com/okonet/lint-staged [danger-local]: http://danger.systems/js/tutorials/fast-feedback.html [oma]: https://www.youtube.com/watch?v=1Z3loALSVQM -[sherlock]: http://artsy.github.io/blog/2017/02/05/Retrospective-Swift-at-Artsy/#Developer.Experience +[sherlock]: https://artsy.github.io/blog/2017/02/05/Retrospective-Swift-at-Artsy/#Developer.Experience [hig]: https://developer.apple.com/design/human-interface-guidelines/macos/overview/themes/ [gs]: https://github.com/kamranahmedse/git-standup [tweet]: https://twitter.com/orta/status/1028764128310185984 diff --git a/_posts/2018-08-22-engineering-guiding-principles.markdown b/_posts/2018-08-22-engineering-guiding-principles.markdown index baa4afe70d..93f51d1fee 100644 --- a/_posts/2018-08-22-engineering-guiding-principles.markdown +++ b/_posts/2018-08-22-engineering-guiding-principles.markdown @@ -82,7 +82,7 @@ Remember that earlier example of openness-vs-quality? That is answered explicitl [pr]: https://github.com/artsy/meta/pull/41 [company_values]: https://www.artsy.net/article/carter-cleveland-why-define-company-values [values]: https://github.com/artsy/README/blob/master/culture/what-is-artsy.md#artsy-values -[obd]: http://artsy.github.io/series/open-source-by-default/ +[obd]: https://artsy.github.io/series/open-source-by-default/ [objcio]: https://www.objc.io/issues/22-scale/artsy/ [principles]: https://github.com/artsy/README/blob/master/culture/engineering-principles.md [gh]: https://github.com/artsy diff --git a/_posts/2018-10-04-artsy-frontend-history.markdown b/_posts/2018-10-04-artsy-frontend-history.markdown index 6ade4e8693..09df496011 100644 --- a/_posts/2018-10-04-artsy-frontend-history.markdown +++ b/_posts/2018-10-04-artsy-frontend-history.markdown @@ -175,14 +175,14 @@ coming next, and I can't wait to share it with you. Have a great day! [node]: https://github.com/ruby-grape/grape [bem]: http://getbem.com/introduction/ [ezel]: https://github.com/artsy/ezel -[2013_review]: http://artsy.github.io/blog/2013/11/30/rendering-on-the-server-and-client-in-node-dot-js/ -[2017_review]: http://artsy.github.io/blog/2017/04/14/artsy-technology-stack-2017/ -[auctions]: http://artsy.github.io/blog/2016/08/09/the-tech-behind-live-auction-integration/ +[2013_review]: https://artsy.github.io/blog/2013/11/30/rendering-on-the-server-and-client-in-node-dot-js/ +[2017_review]: https://artsy.github.io/blog/2017/04/14/artsy-technology-stack-2017/ +[auctions]: https://artsy.github.io/blog/2016/08/09/the-tech-behind-live-auction-integration/ [stitch]: https://github.com/artsy/stitch -[force_modern]: http://artsy.github.io/blog/2017/09/05/Modernizing-Force/ +[force_modern]: https://artsy.github.io/blog/2017/09/05/Modernizing-Force/ [typescript]: http://www.typescriptlang.org [flow]: https://flow.org -[fe_js]: http://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ +[fe_js]: https://artsy.github.io/blog/2017/02/05/Front-end-JavaScript-at-Artsy-2017/ [rclt]: https://github.com/relay-tools/relay-compiler-language-typescript [reaction]: https://github.com/artsy/reaction [styled-components]: https://www.styled-components.com @@ -192,9 +192,9 @@ coming next, and I can't wait to share it with you. Have a great day! [graphql]: https://graphql.org [moya]: https://ashfurrow.com/blog/the-spirit-of-moya/ [metaphysics]: https://github.com/artsy/metaphysics/ -[relay_post]: http://artsy.github.io/blog/2018/07/25/Relay-Networking-Deep-Dive/ +[relay_post]: https://artsy.github.io/blog/2018/07/25/Relay-Networking-Deep-Dive/ [hokusai]: https://github.com/artsy/hokusai [ts_inc]: https://artsy.github.io/blog/2017/11/27/Babel-7-and-TypeScript/ -[helix]: http://artsy.github.io/blog/2015/04/08/creating-a-dynamic-single-page-app-for-our-genome-team-using-react/ +[helix]: https://artsy.github.io/blog/2015/04/08/creating-a-dynamic-single-page-app-for-our-genome-team-using-react/ [positron]: https://github.com/artsy/positron -[javascriptures]: http://artsy.github.io/series/javascriptures/ +[javascriptures]: https://artsy.github.io/series/javascriptures/ diff --git a/_posts/2018-11-28-artsy-auth.md b/_posts/2018-11-28-artsy-auth.md index 3e6bd2aecf..af4af10104 100644 --- a/_posts/2018-11-28-artsy-auth.md +++ b/_posts/2018-11-28-artsy-auth.md @@ -150,7 +150,7 @@ Again, to reiterate: a JWT is not encrypted. It's publicly readable. Do not put JWTs. If you'd like to learn more about how Artsy thinks about and uses JWTs you can read -[this blog post](http://artsy.github.io/blog/2016/10/26/jwt-artsy-journey/) +[this blog post](https://artsy.github.io/blog/2016/10/26/jwt-artsy-journey/) ### Generating Secret Keys diff --git a/_posts/2018-12-11-GraphQL-Stitching.markdown b/_posts/2018-12-11-GraphQL-Stitching.markdown index 9c5f0d5a39..d8544916cc 100644 --- a/_posts/2018-12-11-GraphQL-Stitching.markdown +++ b/_posts/2018-12-11-GraphQL-Stitching.markdown @@ -363,7 +363,7 @@ Future?][igtf] for a more philosophical take also.) [stitching_announcement]: https://dev-blog.apollodata.com/the-next-generation-of-schema-stitching-2716b3b259c0 [stitching_out]: https://dev-blog.apollodata.com/graphql-tools-2-0-with-schema-stitching-8944064904a5 -[monolith]: http://artsy.github.io/blog/2017/04/14/artsy-technology-stack-2017/#Artsy.Technology.Infrastructure.2017.-.Splitting.the.Monolith +[monolith]: https://artsy.github.io/blog/2017/04/14/artsy-technology-stack-2017/#Artsy.Technology.Infrastructure.2017.-.Splitting.the.Monolith [mp]: https://github.com/artsy/metaphysics/ [stitch_mp]: https://github.com/artsy/metaphysics/tree/1423ee39f8e348805710080a4857e6575d3ddade/src/lib/stitching [apollo-http-link]: https://www.apollographql.com/docs/link/links/http.html @@ -377,7 +377,7 @@ Future?][igtf] for a more philosophical take also.) [sdl]: https://blog.graph.cool/graphql-sdl-schema-definition-language-6755bcb9ce51 [init]: https://github.com/artsy/metaphysics/commit/50b23f1738b9fa9757ff83c2d1e0d265c70e4e90 [mn]: https://www.freiksenet.com -[igtf]: http://artsy.github.io/blog/2018/05/08/is-graphql-the-future/ +[igtf]: https://artsy.github.io/blog/2018/05/08/is-graphql-the-future/ [high]: https://github.com/artsy/README/blob/master/culture/highlights.md#highlights [ex]: https://github.com/artsy/metaphysics/pull/809 [rev]: https://github.com/artsy/README/blob/master/culture/engineering-principles.md#incremental-revolution diff --git a/_posts/2019-01-08-automation-encourages-more-automation.markdown b/_posts/2019-01-08-automation-encourages-more-automation.markdown index 6c3b8f807f..556bf03de0 100644 --- a/_posts/2019-01-08-automation-encourages-more-automation.markdown +++ b/_posts/2019-01-08-automation-encourages-more-automation.markdown @@ -91,13 +91,13 @@ it was very satisfying. I would say that's _definitely_ worth it. -[automate]: http://artsy.github.io/blog/2018/05/07/fully-automated-standups/ +[automate]: https://artsy.github.io/blog/2018/05/07/fully-automated-standups/ [spof]: https://en.wikipedia.org/wiki/Single_point_of_failure -[support]: http://artsy.github.io/blog/2018/05/25/support-process/ +[support]: https://artsy.github.io/blog/2018/05/25/support-process/ [docs]: https://github.com/artsy/README/blob/eb2f23c835983223877a6031475153db93e98e8c/events/open-standup.md [xkcd]: https://xkcd.com/1319/ [pr]: https://github.com/artsy/peril-settings/pull/87 -[peril]: http://artsy.github.io/blog/2017/09/04/Introducing-Peril/ +[peril]: https://artsy.github.io/blog/2017/09/04/Introducing-Peril/ [gsa]: https://cloud.google.com/iam/docs/understanding-service-accounts [slack]: https://github.com/slackapi/node-slack-sdk#features [peril_installation]: https://github.com/artsy/peril-settings diff --git a/_posts/2019-01-30-why-we-run-our-blog.md b/_posts/2019-01-30-why-we-run-our-blog.md index 5e9a5d043c..dab0dfa558 100644 --- a/_posts/2019-01-30-why-we-run-our-blog.md +++ b/_posts/2019-01-30-why-we-run-our-blog.md @@ -222,7 +222,7 @@ All three of these you can set up automatic hosting from GitHub in about 10-15m. [dev]: https://write.as/blog/ending-our-medium-integration [search]: https://github.com/artsy/artsy.github.io/pull/332 [peril]: https://github.com/artsy/README/blob/master/culture/peril.md -[int]: http://artsy.github.io/blog/2019/01/23/artsy-engineering-hiring/ +[int]: https://artsy.github.io/blog/2019/01/23/artsy-engineering-hiring/ [publishers]: http://www.niemanlab.org/2018/05/medium-abruptly-cancels-the-membership-programs-of-its-21-remaining-publisher-partners/ diff --git a/_posts/2019-03-01-custom-editorial-features.markdown b/_posts/2019-03-01-custom-editorial-features.markdown index f2118107c0..09064e4456 100644 --- a/_posts/2019-03-01-custom-editorial-features.markdown +++ b/_posts/2019-03-01-custom-editorial-features.markdown @@ -81,7 +81,7 @@ Published examples of custom articles that use curations are: - [Inside the Biennale](https://www.artsy.net/venice-biennale) - [The Year in Art 2016](https://www.artsy.net/2016-year-in-art) -_See [previous blog post](http://artsy.github.io/blog/2017/02/01/year-in-art/) on creating The Year in Art 2016._ +_See [previous blog post](https://artsy.github.io/blog/2017/02/01/year-in-art/) on creating The Year in Art 2016._ **SuperArticles:** diff --git a/_posts/2019-03-12-so-you-want-to-be-an-engineer.md b/_posts/2019-03-12-so-you-want-to-be-an-engineer.md index ef922a8c95..347ab2dac1 100644 --- a/_posts/2019-03-12-so-you-want-to-be-an-engineer.md +++ b/_posts/2019-03-12-so-you-want-to-be-an-engineer.md @@ -14,7 +14,7 @@ two years at that point, first as a marketing intern working on SEO and then as email) team. I'd consistently been working on small technical projects; first doing [some work](https://github.com/artsy/positron/commit/3176282a3ea94c626e9d851b7c0dd27a1bb0fcb4) on a tool for SEO optimization for our Editorial team, then building -[emails with MJML](http://artsy.github.io/blog/2018/11/19/mjml/), and a few other bits and bobs. But I didn't think +[emails with MJML](https://artsy.github.io/blog/2018/11/19/mjml/), and a few other bits and bobs. But I didn't think of it as a serious pursuit. Mostly, that was due to my experience programming in the past—I did about half a CS major in undergrad. At the @@ -159,7 +159,7 @@ transitioning from one team at Artsy to another (Marketing → Engineering), I b of Artsy's goals and needs, which helps with day-to-day prioritization. And when I'm in a sprint planning meeting or a product review and someone has a question about email or marketing, I can often answer—or at least I know who to talk to to get to the bottom of the issue quickly. Plus if at some point my team needs to code emails, my -[past experience](http://artsy.github.io/blog/2018/11/19/mjml/) will come in very handy. +[past experience](https://artsy.github.io/blog/2018/11/19/mjml/) will come in very handy. There are also life experiences that serve me well on the Engineering team. My work as a server and bartender made me good at clear communication with stakeholders. Cooking for big groups of friends has made me better at diff --git a/artsy-x-react-native.html b/artsy-x-react-native.html index 0ca3e63754..ae85d1c1fe 100644 --- a/artsy-x-react-native.html +++ b/artsy-x-react-native.html @@ -439,7 +439,7 @@

All focused on how you can make quality iOS apps

artsy.github.io/artsy-x-react-native-invite-2018
  • - artsy.github.io/series/react-native-at-artsy + artsy.github.io/series/react-native-at-artsy