Year Thirteen with Rails

These last twelve months have been the first without a major or minor Rails release, though there have been multiple bug-fix patches to 7.0. Ruby 3.2 included production ready YJIT and better ReDoS protection. InfoWorld published ‘Whatever happened to Ruby?’ However, the biggest buzz has been figuring out how to use ChatGPT productively: a much easier task with greenfield projects I think.

At my employer the focus has been on Google Ads, fraud detection and logistics improvements.
Nonetheless ‘maintenance mode’ still includes an unending flow of diverse fixes and refinements such as unearthing race conditions and fixing transaction boundaries. 3DS v1 was sunset, AWS abandoned Data Pipeline, and we explored Terraform. Apollo GraphQL has been retired as REST based alternatives are holding up good enough.

New gems used this year included `validates_email_format_of` and integrations with Braintree and AfterShip.

On StackOverflow I drifted into the ‘activeadmin’ tag top 15

For better or worse my only open source contributions have been to my own evolving fork of ActiveAdmin: using a different rendering strategy for Arbre, embracing Rails layouts, slashing controller meta-programming, and reducing dependency on the resource DSL.

Year Twelve with Rails

This last year has seen the release of Ruby 3.1 and Rails 7.0 with its exclusive use of Zeitwerk and shift away from Node and Webpacker to Hotwire. React, Webpacker, Yarn and Jest are still used widely with Rails but Stimulus adoption has been significant.

At my employer European PSD2 has continued to require significant attention with a rewrite of Redsys payment integration using REST and the addition of Cardinal Cruise. We have also refined shipping method selection and handling of stock-outs.

New gems used this year included Gala for ApplePay. Open source contributions included replacing the Resque web-runner by merging the abandoned Vegas gem.

Year Eleven with Rails

Five years after our adoption of React on Rails this year has seen the release of Stimulus-Reflex and the refinement and extension of Turbolinks and Stimulus into Hotwire, a welcome, mostly server side alternative.  So far we have only explored Frames for faster TTFB but we’re optimistic about wider applications.  Also notable this year Rails 6.1 shipped with built in support for ViewComponents, though we are yet to complete our upgrade or move from Ruby 2.7 to 3.0.
At my employer our modular monolith architecture remains unchanged. Interestingly Shopify published a nuanced engineering article concluding “all large architecture changes end up in an incomplete state”.  Apart from European PSD2 mandates, a new billing strategy and greater Facebook marketing API integration, our focus has been on improved change logging and auditing, and tidying and extending test data factories, VCR cassettes, interactor, job, request and feature  specs.  Along the way we refactored offer management, logistics exports, PayPal Express Checkout and fraud detection.  For the first time this year no new gem dependencies were introduced, though we forked PayPal’s REST SDK, abandoned by PayPal.
After years answering 160+ ActiveAdmin questions on StackOverflow I reached the top 20 contributor list and earned StackOverflow’s ‘activeadmin’ badge… time to retire, I think.

Year Ten With Rails

This year marks for me one decade working with Ruby (and Rails), barely surpassing my time with Java, and still not matching my many years with C/C++. I’ve worked with a dozen languages and ecosystems, including Python and JavaScript, but Ruby remains my preference for customized business solutions, though alas it may never displace Spring or even ASP.NET as I once hoped.
At my employer we’ve completed our third major Rails upgrade, to 6.0.  As before this has involved upgrading dozens of dependencies: Ruby 2.6, Node 10, Webpacker 4.2 and Babel 7.9 for JavaScript (now a default, though we adopted it a while ago), SassC (Ruby version discontinued), Sprockets 4, Haml 5, GraphQL 1.9, RSpec-Rails 4 and Capybara 3.  Rails 6 introduced Zeitwerk (mostly positive), Parallel Test (Minitest only) and multi-database support (for scaling production). ActiveRecord included various changes and deprecations and we’ve overhauled all our validation syntax and switched to foreign keys required by default.
Beyond the upgrade our system’s architecture has remained stable as we slowly add more integrations: new gems (to me) used this year included ferrum (for testing PayPal) and facebookbusiness. I also published paypal-sdk-subscriptions (with contributions) and activemerchant-flexpay.  iContact reimplemented their API following a divestiture to j2 resulting in various small revisions to pocus. I’ve made no new contributions to ActiveAdmin apart from some StackOverflow answers, but I did finish the merge of Polyamorous and provide a stop-gap fix to Ransack with Rails 6.0.1. Formtastic became another ActiveAdmin dependency transitioned from the original author after falling into neglect.

PayPal Subscription Management Ruby SDK

PayPal’s APIs are… a work in progress. First came Direct Payments, aka. PayPal Payments, aka. payments v1 accompanied by a REST SDK that provides API client code in various languages. After the Braintree acquisition came PayPal Checkout with a new payments API (v2) and completely new Checkout SDK. The Direct Payments API has continued to evolve, however, (despite being “in the process of being deprecated”) with a new Product Catalog and Subscriptions implementation replacing the original Billing Agreement. Unfortunately as of writing these API changes were not being reflected in the REST SDK, though there is now a separate subscriptions developer reference home page that explains how to customize the JS SDK and documents the server side API (for the most part, but Plan Create and Subscription Create are missing(!), for that see the REST API reference). PayPal’s documentation catalog links to the REST SDK for subscriptions management despite the implementation being absent.

For better or worse Braintree has taken a very different approach with the Checkout SDK compared to the REST SDK: there is no longer any effort to provide mapping of the schema to data objects with marshalling or unmarshalling. The open source gem code is machine generated using a tool and the underlying schema representation is not obviously available, making collaboration on any improvements problematic if not impossible.

To be fair the REST SDK is dated and has it’s own issues: no client side validation or defaults, unintuitive connection management and limited control of logging, but at least these things can be fixed. Unfortunately it appears unlikely.

For further discussion see PayPal-Ruby-SDK#378

Nine Years A Rubyist

This last year has seen continuing maturation of Ruby on Rails with Ruby 2.6 and Rails 6.0. Ruby 2.6 included an initial release of JIT compilation for YARV, and Rails 6.0 adopts Webpacker as the default JavaScript asset manager instead of Sprockets. Ruby, however, continues increasingly overshadowed by JavaScript and Python, and Rails is challenged by the popularity of microservices and Node. Neither Matz’s mruby 2.0 nor Crystal have gained widespread attention, but at least AWS Lambda Ruby support and FaastRuby are now available.

At a practical level, for our mature in-house codebase a switch to microservices is not necessary or cost effective. This year, however, has seen Stephan Hagemann’s ‘Component Based Rails Applications’ ebook published (endorsed) as a softback by Addison Wesley and a very similar approach embraced by Shopify. Our own internal codebase remains ~60% gemified from 2017 in a simple layered architecture while we have focused on consistently packaging business logic using interactors (service objects) for both foreground and background processes.

New gems (to us) used this year included roxml, and replacing the unmaintained god process monitor with eye. On the open source side I stepped back from contributing to ActiveAdmin and published instead a couple of API clients for AmEx and PayPal.

Eight Years A Rubyist

Year 8 with Rails for me has been an unglamorous affair of maintenance upgrades (Ruby 2.3, Rails 5.x), refactors and bug fixes.

It has been discouraging to see StackOverflow characterize Ruby as shrinking and unpopular and compare Ruby on Rails with Nate Berkopec’s findings that vanilla Rails apps are perfectly capable of 1,000 requests/minute is cold comfort in the face of shrinking developer mindshare: this decline has real consequences in terms of open source contributions and Ruby gem maintenance.

On the other hand Ruby remains #4 on Github and developers are still very much in demand. JavaScript continues ascendant but Derek Prior of Thoughtbot has mentioned cooling enthusiasm for Elixir, and Go too has slid in popularity, at least according to TIOBE. Crystal 1.0 remains delayed. An experimental JIT has now shipped for YARV foreshadowing further performance improvements in Ruby 2.6.

On the Rails front end Basecamp continued their contrarian tradition by offering Stimulus.js as a more limited and pragmatic alternative to React’s dominant framework. The Majestic Monolith remains relevant for smaller businesses and early stage startups despite ambitious engineers everywhere (myself included) wanting to use the same tech stack as the largest, most successful companies from Apple, Salesforce and Netflix to… Twitter. At Railsconf GitHub, now owned my Microsoft, recommitted to easier scalability enhancements for Rails 6.

On the infrastructure side the Docker ecosystem has continued to mature with the embrace of Kubenetes at Dockercon EU in Oct ’17. It has also been good to see a more enlightened approach to open source by AWS with EKS and ApacheMQ.

At my employer we continue to support a somewhat modular monolith with a 50 kloc monorepo, 40 ActiveAdmin resources, 60 background jobs, 70 direct and 240 total gem dependencies. We have fully caught up with Rails 5.2 and edged forward with Ruby 2.3 for Bootsnap support and React-Apollo 1.x. Procedural code has continued to migrate to standardized Interactors. New gems used included Bootsnap, Combustion, Dalli (memcached) and AWS SDK v3 SQS, S3, SES & SNS.

What has Rails 5.x brought us? More secure controller parameters, still scarily subvertible by less experienced developers, but at least awareness has been raised. More restricted autoloading, for the best. Better callback management, though we try to avoid them as much as possible. Bootsnap with a significant improvement in startup times, yay!

Open source contributions this year have included a couple of minor ActiveAdmin releases including Rails 5.2 support and various PRs for the AuthorizeNet Ruby SDK.

AWS features I have been working more with this year have included ClassicLink, private subnets, piculet, Data Pipeline and managed SSL certs. Concerns over production container management have been mitigated with a mass of metrics collection with CloudWatch, Librato and Skylight.

What will the next year bring? A pragmatically managed evolution towards ‘mini-services’, Rails 6 with polished multi-database support, Ruby 2.6 with improving JIT support, Webpack as the default JavaScript handler and increasing adoption of Kubernetes.

Railsconf 2018 – Pittsburgh

Tuesday 17 April. Snow. DHH poking fun at Twitter and raising alarms about Facebook. Nick Quaranto with a GraphQL intro: best for new APIs as a mobile backend. Sean Griffin trying to encourage Rails contributions by labeling it a legacy app. Fastly presenting their not yet released alternative to docker-compose for developers. Olivier Lacan talking about the life and imminent death of Taylor Jones with an introductory overview of Webpacker. Akira Matsuda teasing with his unfinished performance hack gems. Mark Imbriaco with a stellar career from AOL to Decisiv, 37signals, Heroku, Living Social (with Chad Fowler), GitHub, Digital Ocean and Pivotal.

Wednesday. Eileen Uchitelle keynote on upcoming Rails 6 features for scalability: baked in parallel tests (minitest) and polished multi-database support. Initially skeptical but ultimately inspired by her appeal for more companies to upstream their work. Justin Searles and Ted Kaufman talking about growing their agency. Chris Hoffman reviewing Optoro’s experiences adopting services: start with new business services, not an extraction, do something large enough to be noticed but as simple as possible, establish infrastructure standards and have developers support their services. Exhibition hall with booths by BTCOTC, Procore, GitHub, Heroku, Engine Yard, Cloud 66, Shopify, Scribd and LendingHome amongst others. After lunch James Adam recounting his struggle to popularize Rails engines and the forces shaping the framework’s evolution. Leanardo Targon of Plataformatic with an introduction to Warden. Admin frameworks BOF discussing modular monoliths, TrailBlazer and CBRA. Lightening talks including Clearwater and jsonapi-suite

Thursday. Snow again and chill winds. Sarah Mei filling in a keynote for Bari Williams: application development is interior decorating, not architecture. Sam Phippen with another well presented RSpec talk with the latest fixes to support system tests. Graham Conzett reminding how much can still be done with UJS alone. After lunch Ariel Caplan introduction to Swagger (OpenAPI) and (unmaintained?) apivore, Michael Crismali giving a quick review of JavaScript strategies, followed by Ross Kaffenberger giving actionable advice on dealing with Webpack. Finally Aaron Patterson proposing to upstream easier performance tuning into Rails.

Attendance looked up (2,000+), and more diverse.  No more ‘Rails is dying’ and React/Elixir FOMO. Webpack/services/JSONAPI for sure, but not too much beyond that.  Standards of the technical talks were good, especially Akira and Eileen. I missed the talks by Vladimir Dementyev and Justin Weiss and I look forward to the inspiring videos of Ernie Miller and Nicolas Means.

TIOBE Index for March 2018: Ruby in the TIOBE index top 10

TIOBE replaces their index content each month, so I quote:

“Ruby is back in the TIOBE index top 10 and now it seems to be for a longer time. If we take a look at the chart of Ruby it follows a very common pattern for programming languages. Ruby was invented a very long time ago and it remained in obscurity till 2006. That was when the Ruby on Rails framework was released. This framework made it easy to create web applications and because Ruby was the underlying language it skyrocketed in the TIOBE index at that time from position 40 to a top 10 position. It also was awarded the TIOBE programming language of the year in 2006. All new language gurus were in ecstasy about Ruby. The language peaked in 2008, but then all hipsters moved to a new language and Ruby dropped to one third of its popularity. It remained there for a long time but is now catching up very slowly. The fact that it is getting more popular so gradually is a good sign. This means that its increase in popularity is structurally instead of being pushed by hypes. Some other interesting moves this month are that both Julia and Kotlin entered the top 40, whereas Rust and Groovy lost their positions in the top 50.”

Active Admin monthly downloads nearly doubled last year

According to this blog post Active Admin monthly downloads nearly doubled last year to almost 3,000 times a day.  Part of that can probably be attributed to increasing use of continuous integration, but more interesting is that Active Admin has outpaced the competition. Possible contributing factors include three releases, including a 1.0 release that coincided with RailsConf and was featured by Ruby Weekly, a GoRails episode by Chris Oliver at the end of 2016, and the blog post by Charlie Gleason on using Active Admin as a back end to a React application, that has been discovered and tweeted by new fans repeatedly. I’ld love to think that timely responses to GitHub issues and pull requests and StackOverflow answers have helped also, along with the curated wiki and continuing contributions by plugin authors. Also there have been Japanese blog posts and activity so more adoption there. At this point Active Admin has 7,800 GitHub stars and 2.9M downloads, it will interesting to see how things are another year from now.

Posts navigation

1 2 3 4 5 6
Scroll to top