├── .DS_Store ├── .github ├── FUNDING.yml └── workflows │ └── engineering_blogs.yml ├── .gitignore ├── .ruby-version ├── Gemfile ├── Gemfile.lock ├── README.md ├── contributing.md ├── engineering_blogs.opml └── generate_opml.rb /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kilimchoi/engineering-blogs/50eab27eb2833dbf910ed4c79651bc1213c8a743/.DS_Store -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [kilimchoi] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/workflows/engineering_blogs.yml: -------------------------------------------------------------------------------- 1 | # WorkFlow Name 2 | name: Generate engineering_blogs.opml file 3 | 4 | # Events upon which Github WorkFlow gets triggered 5 | on: [push, pull_request] 6 | 7 | # Create jobs 8 | jobs: 9 | generate: 10 | name: Generate engineering_blogs.opml 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Checkout Repo 14 | uses: actions/checkout@v2 15 | 16 | - name: Ruby Setup 17 | uses: ruby/setup-ruby@v1 18 | with: 19 | ruby-version: '2.7' 20 | 21 | - name: Install pkgs 22 | run: | 23 | bundle install --jobs 4 24 | 25 | - name: Generate opml file using ruby 26 | run: | 27 | ruby generate_opml.rb 28 | 29 | - name: Auto-Commit engineering_blogs file if updated 30 | uses: stefanzweifel/git-auto-commit-action@v4.1.5 31 | with: 32 | commit_message: Commit by Github WorkFlow 33 | file_pattern: engineering_blogs.opml 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .bundle/ 2 | -------------------------------------------------------------------------------- /.ruby-version: -------------------------------------------------------------------------------- 1 | 2.7.0 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'builder' 4 | gem 'nokogiri' 5 | gem 'feedbag' 6 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | builder (3.2.4) 5 | feedbag (0.10.1) 6 | nokogiri (~> 1.8, >= 1.8.2) 7 | open_uri_redirections (~> 0.2) 8 | mini_portile2 (2.8.0) 9 | nokogiri (1.13.8) 10 | mini_portile2 (~> 2.8.0) 11 | racc (~> 1.4) 12 | open_uri_redirections (0.2.1) 13 | racc (1.6.0) 14 | 15 | PLATFORMS 16 | ruby 17 | 18 | DEPENDENCIES 19 | builder 20 | feedbag 21 | nokogiri 22 | 23 | BUNDLED WITH 24 | 2.1.4 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Software Engineering Blogs [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) 2 | 3 | ### [Companies](#companies-1) 4 | | | | | | | | | | | 5 | |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: | 6 | | [#](#-companies) | [A](#a-companies) | [B](#b-companies) | [C](#c-companies) | [D](#d-companies) | [E](#e-companies) | [F](#f-companies) | [G](#g-companies) | [H](#h-companies) | 7 | | [I](#i-companies) | [J](#j-companies) | [K](#k-companies) | [L](#l-companies) | [M](#m-companies) | [N](#n-companies) | [O](#o-companies) | [P](#p-companies) | [Q](#q-companies) | 8 | | [R](#r-companies) | [S](#s-companies) | [T](#t-companies) | [U](#u-companies) | [V](#v-companies) | [W](#w-companies) | [X](#x-companies) | [Y](#y-companies) | [Z](#z-companies) | 9 | 10 | ### [Individuals/Group Contributors](#individualsgroup-contributors-1) 11 | | | | | | | | | | | 12 | |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: | 13 | | [#](#-individuals) | [A](#a-individuals) | [B](#b-individuals) | [C](#c-individuals) | [D](#d-individuals) | [E](#e-individuals) | [F](#f-individuals) | [G](#g-individuals) | [H](#h-individuals) | 14 | | [I](#i-individuals) | [J](#j-individuals) | [K](#k-individuals) | [L](#l-individuals) | [M](#m-individuals) | [N](#n-individuals) | [O](#o-individuals) | [P](#p-individuals) | [Q](#q-individuals) | 15 | | [R](#r-individuals) | [S](#s-individuals) | [T](#t-individuals) | [U](#u-individuals) | [V](#v-individuals) | [W](#w-individuals) | [X](#x-individuals) | [Y](#y-individuals) | [Z](#z-individuals) | 16 | 17 | ### [Products/Technologies](#productstechnologies-1) 18 | | | | | | | | | | | 19 | |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: |:-: | 20 | | [#](#-technologies) | [A](#a-technologies) | [B](#b-technologies) | [C](#c-technologies) | [D](#d-technologies) | [E](#e-technologies) | [F](#f-technologies) | [G](#g-technologies) | [H](#h-technologies) | 21 | | [I](#i-technologies) | [J](#j-technologies) | [K](#k-technologies) | [L](#l-technologies) | [M](#m-technologies) | [N](#n-technologies) | [O](#o-technologies) | [P](#p-technologies) | [Q](#q-technologies) | 22 | | [R](#r-technologies) | [S](#s-technologies) | [T](#t-technologies) | [U](#u-technologies) | [V](#v-technologies) | [W](#w-technologies) | [X](#x-technologies) | [Y](#y-technologies) | [Z](#z-technologies) | 23 | 24 | ### Companies 25 | 26 | #### \# companies 27 | * 8th Light https://8thlight.com/blog/ 28 | 29 | #### A companies 30 | * AdRoll http://tech.adroll.com/blog/ 31 | * Advanced Web Machinery https://advancedweb.hu/ 32 | * Airbnb https://medium.com/airbnb-engineering 33 | * Algolia https://blog.algolia.com/ 34 | * Appnexus https://techblog.appnexus.com/ 35 | * Arkency http://blog.arkency.com/ 36 | * Artsy http://artsy.github.io/ 37 | * Asana https://blog.asana.com/category/eng/ 38 | * Atlassian https://developer.atlassian.com/blog/ 39 | * Atomic Object https://spin.atomicobject.com/ 40 | * Auth0 https://auth0.com/blog/ 41 | * Avenue Code http://blog.avenuecode.com/ 42 | * AWS https://aws.amazon.com/blogs/aws/ 43 | 44 | #### B companies 45 | * Babbel https://bytes.babbel.com/en/ 46 | * Badoo https://techblog.badoo.com/ 47 | * Bandcamp https://bandcamptech.wordpress.com/ 48 | * Base Lab https://lab.getbase.com/category/engineering/ 49 | * Bazaarvoice https://blog.developer.bazaarvoice.com/ 50 | * BBC https://medium.com/bbc-design-engineering/ 51 | * Benchling https://benchling.engineering/ 52 | * Bigcommerce http://www.bigeng.io/ 53 | * Blender https://code.blender.org/ 54 | * Booking.com https://blog.booking.com/ 55 | * Brandwatch http://engineering.brandwatch.com/ 56 | 57 | #### C companies 58 | * Canva https://engineering.canva.com 59 | * Capgemini https://capgemini.github.io/ 60 | * Cerner http://engineering.cerner.com/ 61 | * Clever https://engineering.clever.com/ 62 | * Cloudera https://blog.cloudera.com/ 63 | * Cloudflare https://blog.cloudflare.com/ 64 | * Codelitt https://www.codelitt.com/blog/ 65 | * CodeName One http://www.codenameone.com/blog.html 66 | * Codeship https://blog.codeship.com/ 67 | * Commercetools https://techblog.commercetools.com/ 68 | * Confluent https://www.confluent.io/blog 69 | * Credit Karma https://engineering.creditkarma.com/ 70 | * Criteo https://medium.com/criteo-labs 71 | * Crowdfire https://crowdfire.engineering/ 72 | * CSC - IT Center For Science - Cloud Team https://cloud.blog.csc.fi/ 73 | * Curalate http://engineering.curalate.com/ 74 | 75 | #### D companies 76 | * Databricks https://databricks.com/blog 77 | * Deezer https://deezer.io/ 78 | * Deliveroo https://deliveroo.engineering/ 79 | * Discord https://blog.discordapp.com/ 80 | * Docker https://blog.docker.com/ 81 | * DoorDash https://doordash.engineering/blog/ 82 | * Drivy https://drivy.engineering/ 83 | * Dropbox https://blogs.dropbox.com/tech/ 84 | 85 | #### E companies 86 | * Ebay https://www.ebayinc.com/stories/blogs/tech/ 87 | * eFounders https://medium.com/unexpected-token 88 | * Engine Yard https://blog.engineyard.com/ 89 | * Entelo https://sourcecode.entelo.com/ 90 | * Envato https://webuild.envato.com/ 91 | * Envoy https://envoy.engineering/ 92 | * Erlang Solutions https://www.erlang-solutions.com/blog.html 93 | * Eventbrite https://www.eventbrite.com/engineering/ 94 | * Evil Martians https://evilmartians.com/chronicles/ 95 | * Expedia https://medium.com/expedia-group-tech 96 | 97 | #### F companies 98 | * Facebook https://code.facebook.com/posts/ 99 | * Facebook AI Research https://engineering.fb.com/category/ai-research/ 100 | * Feedzai https://medium.com/feedzaitech 101 | * Findmypast http://tech.findmypast.com/ 102 | * Finn.no http://tech.finn.no/ 103 | * Flickr http://code.flickr.net/ 104 | * Freeletics https://freeletics.engineering/ 105 | * Fynd http://gofynd.io/blog 106 | 107 | #### G companies 108 | * Galois https://galois.com/blog/ 109 | * GameChanger http://tech.gc.com/ 110 | * GIPHY https://engineering.giphy.com/ 111 | * GitHub https://githubengineering.com/ 112 | * GitHub Old https://github.com/blog/category/engineering 113 | * GoCardless https://gocardless.com/blog/tagged/engineering/ 114 | * GoDaddy https://godaddy.github.io/engineering/ 115 | * GoSquared https://engineering.gosquared.com/ 116 | * Grab http://engineering.grab.com/ 117 | * Graphcool https://blog.graph.cool/ 118 | * Grofers https://lambda.grofers.com/ 119 | * Groupon https://engineering.groupon.com/ 120 | * Guardian https://www.theguardian.com/info/developer-blog 121 | * Gusto http://engineering.gusto.com/ 122 | 123 | #### H companies 124 | * HackerEarth http://engineering.hackerearth.com/ 125 | * Haptik https://haptik.ai/tech/ 126 | * Harry's http://engineering.harrys.com/ 127 | * Hashnode https://engineering.hashnode.com/ 128 | * Hashrocket https://hashrocket.com/blog 129 | * Helpshift https://medium.com/helpshift-engineering/ 130 | * Heroku https://blog.heroku.com/engineering 131 | * HomeAway https://tech.homeaway.com/ 132 | * Honeybadger http://blog.honeybadger.io/ 133 | * Hootsuite http://code.hootsuite.com/ 134 | * Hostinger https://www.hostinger.com/blog/engineering/ 135 | * Housing.com https://medium.com/engineering-housing 136 | * HubSpot http://product.hubspot.com/blog/topic/engineering 137 | 138 | #### I companies 139 | * IBM developerWorks https://developer.ibm.com/dwblog/ 140 | * IMVU https://engineering.imvu.com/ 141 | * Imgur https://blog.imgur.com/category/eng/ 142 | * Indeed http://engineering.indeedblog.com/blog/ 143 | * Instacart https://tech.instacart.com/ 144 | * Instagram https://engineering.instagram.com/ 145 | 146 | #### J companies 147 | * Jane Street https://blogs.janestreet.com/category/ocaml/ 148 | * Jobandtalent https://jobandtalent.engineering/ 149 | * JobTeaser https://medium.com/jobteaser-dev-team/ 150 | * Just Eat https://tech.just-eat.com/ 151 | 152 | #### K companies 153 | * Khan Academy http://engineering.khanacademy.org 154 | * Kinvolk https://kinvolk.io/blog/ 155 | * Kogan.com https://devblog.kogan.com/ 156 | * Kolosek https://kolosek.com/blog/ 157 | 158 | #### L companies 159 | * LINE https://engineering.linecorp.com/en/blog 160 | * LinkedIn https://engineering.linkedin.com/blog 161 | * LiveRamp https://liveramp.com/engineering/ 162 | * Localytics http://eng.localytics.com/ 163 | * Lyft https://eng.lyft.com/ 164 | 165 | #### M companies 166 | * Made Tech https://www.madetech.com/blog 167 | * MapTiler https://www.maptiler.com/blog/ 168 | * Medallia http://engineering.medallia.com/blog/ 169 | * Medium https://medium.com/medium-eng 170 | * Mesosphere https://mesosphere.com/blog/ 171 | * Microsoft Python Engineering https://blogs.msdn.microsoft.com/pythonengineering/ 172 | * Moove-it https://blog.moove-it.com/ 173 | * Mozilla Automation Team https://planet.mozilla.org/ateam/ 174 | * Mozilla Hacks https://hacks.mozilla.org/ 175 | * Mozilla Release Engineering https://planet.mozilla.org/releng/ 176 | 177 | #### N companies 178 | * Netflix https://medium.com/netflix-techblog 179 | * New York Times https://open.blogs.nytimes.com 180 | * Nextdoor https://engblog.nextdoor.com/ 181 | * Nordic APIs https://nordicapis.com/blog/ 182 | * Novoda https://www.novoda.com/blog/ 183 | * NPR Apps http://blog.apps.npr.org/ 184 | * Nvidia https://blogs.nvidia.com/ 185 | 186 | #### O companies 187 | * OCTO Technology https://blog.octo.com/en/ 188 | * Okta https://developer.okta.com/blog/ 189 | * OLX https://tech.olx.com/ 190 | * OmniTI https://omniti.com/seeds/stop-collaborate-and-listen-notify 191 | * OpenDNS https://engineering.opendns.com/ 192 | * Oursky https://code.oursky.com/ 193 | 194 | #### P companies 195 | * Palantir https://blog.palantir.com/ 196 | * Panorama Education http://engineering.panoramaed.com/ 197 | * Paperless Post https://www.paperlesspost.com/blog/teams/tech/ 198 | * Paypal https://www.paypal-engineering.com/ 199 | * PicCollage https://tech.pic-collage.com/ 200 | * Pinterest https://medium.com/@Pinterest_Engineering 201 | * Pluralsight https://www.pluralsight.com/guides 202 | * Postman https://medium.com/better-practices 203 | * Postmark https://postmarkapp.com/blog 204 | * Prezi https://medium.com/prezi-engineering 205 | * Prolific Interactive http://blog.prolificinteractive.com/category/development/ 206 | * PubNub: https://www.pubnub.com/blog/ 207 | * PullReview http://blog.8thcolor.com/ 208 | 209 | #### Q companies 210 | * Quora https://engineering.quora.com/ 211 | 212 | #### R companies 213 | * REA Group https://www.rea-group.com/category/tech/ 214 | * Remind http://engineering.remind.com/ 215 | * RetailMeNot https://medium.com/retailmenot-engineering/ 216 | * Riot Games https://engineering.riotgames.com/ 217 | * RisingStack https://blog.risingstack.com/ 218 | * Robert Elder Software http://blog.robertelder.org/ 219 | * RoseHosting https://www.rosehosting.com/blog/ 220 | 221 | #### S companies 222 | * Schibsted Tech Polska http://www.schibsted.pl/blog/ 223 | * Segment https://segment.com/blog/categories/engineering/ 224 | * Sensible http://blog.sensible.io/ 225 | * Serverless https://serverless.com/blog/ 226 | * Sharethis https://www.sharethis.com/category/engineering/ 227 | * Shopify https://shopify.engineering/ 228 | * Simple https://www.simple.com/engineering 229 | * SitePoint https://sitepoint.com 230 | * Sky Betting & Gaming http://engineering.skybettingandgaming.com/ 231 | * Skyscanner http://codevoyagers.com/ 232 | * Slack https://slack.engineering/ 233 | * SlideShare https://engineering.linkedin.com/blog/topic/slideshare 234 | * Small Improvements https://tech.small-improvements.com/ 235 | * Soshace https://blog.soshace.com/en/ 236 | * Soundcloud https://developers.soundcloud.com/blog/ 237 | * SourceClear https://blog.sourceclear.com/ 238 | * Speedledger http://engineering.speedledger.com/ 239 | * Spotify https://labs.spotify.com/ 240 | * Sqreen https://blog.sqreen.io/ 241 | * Square https://corner.squareup.com/ 242 | * Squarespace https://engineering.squarespace.com/ 243 | * Stack Overflow https://stackoverflow.blog/engineering/ 244 | * Stackshare https://stackshare.io/feed 245 | * Stitch Fix http://multithreaded.stitchfix.com/blog/ 246 | * Strava https://medium.com/strava-engineering/ 247 | * Stripe https://stripe.com/blog 248 | * SurveyMonkey https://engineering.surveymonkey.com/ 249 | * Swiggy https://bytes.swiggy.com/ 250 | 251 | #### T companies 252 | * Takipi http://blog.takipi.com/ 253 | * Target https://target.github.io/ 254 | * Teamwork https://engineroom.teamwork.com/ 255 | * theScore http://techblog.thescore.com/ 256 | * Thoughtbot https://robots.thoughtbot.com/ 257 | * Thumbtack https://www.thumbtack.com/engineering/ 258 | * Timescale https://blog.timescale.com/ 259 | * Tinder https://tech.gotinder.com/ 260 | * Toptal https://www.toptal.com/blog/ 261 | * Transferwise http://tech.transferwise.com/ 262 | * Trivago http://tech.trivago.com/ 263 | * TrueCar https://www.drivenbycode.com/ 264 | * Tumblr https://engineering.tumblr.com/ 265 | * Twilio https://www.twilio.com/blog/ 266 | 267 | #### U companies 268 | * Universe https://engineering.universe.com 269 | * UpGrad https://engineering.upgrad.com 270 | 271 | #### V companies 272 | * Vena Solutions https://engineering.vena.io/ 273 | * VersionEye https://blog.versioneye.com/ 274 | * Viget https://www.viget.com/articles/category/code#articles 275 | * Vinted http://engineering.vinted.com/ 276 | * VNGRS http://blog.vngrs.com/ 277 | * VTS https://buildingvts.com/ 278 | 279 | #### W companies 280 | * Wayfair http://engineering.wayfair.com/ 281 | * Wealthfront http://eng.wealthfront.com/ 282 | * Wemake.services https://medium.com/wemake-services 283 | * Wingify http://engineering.wingify.com/ 284 | * WyeWorks https://wyeworks.com/blog/ 285 | 286 | #### X companies 287 | * XING https://tech.xing.com/ 288 | 289 | #### Y companies 290 | * Yahoo https://yahooeng.tumblr.com/ 291 | * Yammer https://medium.com/yammer-engineering 292 | 293 | #### Z companies 294 | * Zalando https://tech.zalando.com/blog/ 295 | * Zapier https://zapier.com/engineering/ 296 | * Zendesk https://medium.com/zendesk-engineering 297 | * Zendesk(old) https://developer.zendesk.com/blog 298 | 299 | ### Individuals/Group Contributors 300 | 301 | #### \# individuals 302 | * 0xADADA https://0xadada.pub/ 303 | 304 | #### A individuals 305 | * Aaron Patterson http://tenderlovemaking.com/ 306 | * Abu Ashraf Masnun http://masnun.com/ 307 | * Addy Osmani https://addyosmani.com/blog/ 308 | * Alan Storm http://alanstorm.com/ 309 | * Alex Russell https://infrequently.org/ 310 | * Amit Merchant https://www.amitmerchant.com/ 311 | * Anders Aarvik http://aarvik.dk/ 312 | * Andrew Bancroft http://www.andrewcbancroft.com/ 313 | * Antirez http://antirez.com/latest/0 314 | * Ariejan de Vroom https://ariejan.net/ 315 | * Ariya Hidayat https://ariya.io/ 316 | * Armin Ronacher http://lucumr.pocoo.org/ 317 | * Axel Rauschmayer http://www.2ality.com/ 318 | 319 | #### B individuals 320 | * Bad Concurrency http://bad-concurrency.blogspot.com/ 321 | * Bartlomiej Filipek http://www.bfilipek.com/ 322 | * Bill the Lizard http://www.billthelizard.com/ 323 | * Bjørn Johansen https://bjornjohansen.no/ 324 | * Blake Erickson https://blog.blakeerickson.com/ 325 | * Blundell's Android Tutorials http://blog.blundellapps.co.uk 326 | * Bohops https://bohops.com/ 327 | * Brendan Eich https://brendaneich.com/ 328 | * Brendan Gregg http://www.brendangregg.com/blog/ 329 | * Brujo Benavides https://medium.com/@elbrujohalcon 330 | * Bryan Cantrill http://dtrace.org/blogs/bmc/ 331 | 332 | #### C individuals 333 | * Carlos Becker https://carlosbecker.com 334 | * Chen Hui Jing https://www.chenhuijing.com/blog/ 335 | * Chien Tran http://thelazylog.com/ 336 | * Chris Wellons http://nullprogram.com/ 337 | * Code with style! https://codewithstyle.info/ 338 | * Codrops https://tympanus.net/codrops/ 339 | 340 | #### D individuals 341 | * Daily JS https://medium.com/dailyjs 342 | * Daily Tech Video http://dailytechvideo.com/ 343 | * Dan Luu https://danluu.com/ 344 | * Daniel Doubrovkine (dB.) http://code.dblock.org/ 345 | * Daniel Schmidt https://medium.com/@dschmidt1992 346 | * Dave Beazley http://www.dabeaz.com/blog.html 347 | * Dave Cheney https://dave.cheney.net/ 348 | * David Walsh https://davidwalsh.name/ 349 | * Dean Hume http://deanhume.com/ 350 | * Dennis Felsing https://hookrace.net/ 351 | * Dereuromark http://www.dereuromark.de/ 352 | * Domenico Luciani https://domenicoluciani.com 353 | * Dot Dev (.dev) https://dotdev.co 354 | * Dragan Djuric http://dragan.rocks 355 | * Dragan Gaic http://www.gajotres.net/ 356 | * Drew DeVault https://drewdevault.com/ 357 | 358 | #### E individuals 359 | * Edan Kwan http://blog.edankwan.com/ 360 | * Eddie Smith http://www.practicallyefficient.com/ 361 | * Edgar Aroutiounian https://hyegar.com/ 362 | * Edward Faulkner https://eaf4.com/ 363 | * Elegant Code http://elegantcode.com/ 364 | * Eli Bendersky http://eli.thegreenplace.net/ 365 | * Eric Elliot https://medium.com/javascript-scene/ 366 | * Eric Lippert https://ericlippert.com/ 367 | * Erik Runyon https://erikrunyon.com/ 368 | * Evan Hahn http://evanhahn.com/ 369 | * Evan Jones http://www.evanjones.ca/chronological.html 370 | * Evan Miller http://www.evanmiller.org/ 371 | 372 | #### F individuals 373 | * Federico Cargnelutti https://blog.fedecarg.com/ 374 | * Federico Tomassetti https://tomassetti.me/ 375 | * Filippo Valsorda https://blog.filippo.io/ 376 | * Freek Van der Herten https://murze.be/ 377 | 378 | #### G individuals 379 | * Gleb Bahmutov https://glebbahmutov.com/blog/ 380 | * Graham King https://www.darkcoding.net/ 381 | * Grzegorz Gajos http://ggajos.com/ 382 | * Guido van Rossum http://neopythonic.blogspot.com/ 383 | * Guilherme Rodrigues https://firstdoit.com/ 384 | 385 | #### H individuals 386 | * Hayden James https://haydenjames.io/ 387 | * Henrik Lau Eriksson https://conductofcode.io/ 388 | * Henrik Warne https://henrikwarne.com/ 389 | * High Scalability http://highscalability.com/ 390 | * Huon Wilson http://huonw.github.io/ 391 | * Hypriot http://blog.hypriot.com/ 392 | 393 | #### I individuals 394 | * Ian Hummel https://themodernlife.github.io/ 395 | * Idontgetoutmuch's Weblog https://idontgetoutmuch.wordpress.com/ 396 | * Ievgen Kuzminov http://stdout.in/ 397 | * Ilija Eftimov http://ieftimov.com/ 398 | * Ilya Grigorik https://www.igvita.com/ 399 | * Itamar Turner-Trauring https://codewithoutrules.com 400 | 401 | #### J individuals 402 | * Jacopo Tarantino https://jack.ofspades.com/ 403 | * Jake Trent https://jaketrent.com 404 | * Jake Wharton http://jakewharton.com/blog 405 | * Jake Yesbeck http://jakeyesbeck.com/ 406 | * James Hague http://prog21.dadgum.com/ 407 | * James Long http://jlongster.com/archive 408 | * Jamis Buck http://weblog.jamisbuck.org/ 409 | * Jan Lelis https://idiosyncratic-ruby.com/ 410 | * Jay Fields http://blog.jayfields.com 411 | * Jeff Atwood https://blog.codinghorror.com/ 412 | * Jeff Preshing http://preshing.com/ 413 | * Jeremy Kun https://jeremykun.com/ 414 | * Jerry Gamblin https://jerrygamblin.com/ 415 | * Jesal Gadhia https://jes.al/ 416 | * Jessie Frazelle https://blog.jessfraz.com/ 417 | * Joe Armstrong https://joearms.github.io/ 418 | * Joe Nelson https://begriffs.com/ 419 | * Joel Spolsky https://www.joelonsoftware.com/ 420 | * Johannes Brodwall http://johannesbrodwall.com/ 421 | * John Resig https://johnresig.com/category/blog/ 422 | * John Wittenauer http://www.johnwittenauer.net/ 423 | * Jon Skeet https://codeblog.jonskeet.uk/ 424 | * Jonathan Dekhtiar http://www.born2data.com/ 425 | * Jonathan Snook https://snook.ca/ 426 | * Josh Haberman http://blog.reverberate.org/ 427 | * Josh Sherman https://joshtronic.com/ 428 | * Juan Treminio https://jtreminio.com 429 | * Julia Evans https://jvns.ca/ 430 | * Junior Grossi https://blog.jgrossi.com/ 431 | * Justin Weiss https://www.justinweiss.com/articles/archives/ 432 | 433 | #### K individuals 434 | * K. Harrison https://useyourloaf.com/ 435 | * Kai Hendry https://hendry.iki.fi/ 436 | * Kevin Burke https://kev.inburke.com/ 437 | * Kirill Shevchenko https://medium.com/@kirill_shevch 438 | * Kyle Kingsbury https://aphyr.com/ 439 | 440 | #### L individuals 441 | * Lambda the Ultimate http://lambda-the-ultimate.org/ 442 | * Larry Land https://lg.io/ 443 | * Lazarus Lazaridis https://iridakos.com 444 | * Lea Verou http://lea.verou.me/ 445 | * Lerner Consulting Blog http://blog.lerner.co.il/ 446 | * Life Plus Linux http://lifepluslinux.blogspot.in/ 447 | * LiveOverflow https://liveoverflow.com/blog/index.html 448 | * Luciano Mammino https://loige.co/ 449 | 450 | #### M individuals 451 | * Marc Plano-Lesay https://enoent.fr 452 | * Marcelo Rinesi https://blog.rinesi.com/ 453 | * Marco Pivetta http://ocramius.github.io/ 454 | * Marek Majkowski https://idea.popcount.org/ 455 | * Mark Seaborn http://lackingrhoticity.blogspot.de/ 456 | * Martin Fowler https://martinfowler.com/ 457 | * Mary Rose Cook https://maryrosecook.com/blog/ 458 | * Matt Aimonetti https://matt.aimonetti.net/ 459 | * Matt Cutts https://www.mattcutts.com/blog/ 460 | * Matt Might http://matt.might.net/articles/ 461 | * Matt Warren http://mattwarren.org/ 462 | * Matthew Green https://blog.cryptographyengineering.com/ 463 | * Michael Crump https://michaelcrump.net/ 464 | * Michael Herman http://mherman.org/ 465 | * Miguel Quinones https://www.miqu.me/ 466 | * Mike Ash https://www.mikeash.com/pyblog/ 467 | * Mike Fogus http://blog.fogus.me/ 468 | * Miro Cupak https://mirocupak.com/ 469 | * Monica Dinculescu https://meowni.ca/ 470 | * Monstermuffin https://blog.monstermuffin.org/ 471 | * Mykhailo Kozik http://mishadoff.com/ 472 | 473 | #### N individuals 474 | * Nelson Elhage https://blog.nelhage.com/ 475 | * Nic Raboy https://www.thepolyglotdeveloper.com/blog/ 476 | * Nick Craver https://nickcraver.com/blog/ 477 | * Nick Desaulniers https://nickdesaulniers.github.io/ 478 | * Nicolas Liochon http://blog.thislongrun.com/ 479 | * Nicolai Parlog (CodeFX) http://codefx.org 480 | * Nikola Brežnjak http://www.nikola-breznjak.com/blog/ 481 | * NSHipster http://nshipster.com/ 482 | * Nate Berkopec http://www.nateberkopec.com/ 483 | 484 | #### O individuals 485 | * Ofer Zelig https://fullstack.info 486 | * Ole Begemann https://oleb.net/blog/ 487 | * Oona Räisänen http://www.windytan.com/ 488 | 489 | #### P individuals 490 | * Pamela Fox http://blog.pamelafox.org/ 491 | * Pat Shaughnessy http://patshaughnessy.net/ 492 | * Paul Irish https://www.paulirish.com/ 493 | * Paul Lewis https://aerotwist.com/blog/ 494 | * Paweł Chudzik https://blog.pchudzik.com/ 495 | * Peter Norvig http://norvig.com/ 496 | * Peter Steinberger http://petersteinberger.com/ 497 | * Peteris Krumins http://www.catonmat.net/blog/ 498 | * Petr Mitrichev http://petr-mitrichev.blogspot.com/ 499 | * Philip Walton https://philipwalton.com/ 500 | * Philipp Oppermann https://os.phil-opp.com/ 501 | * Pony Foo https://ponyfoo.com/ 502 | * Piotr Pasich http://piotrpasich.com/ 503 | 504 | #### R individuals 505 | * Rachel Kroll https://rachelbythebay.com/w/ 506 | * Radek Pazdera http://radek.io 507 | * Radim Řehůřek https://radimrehurek.com/blog/ 508 | * Ramon Fried https://nativeguru.wordpress.com/ 509 | * Ray Wenderlich https://www.raywenderlich.com/ 510 | * Raymond Chen https://blogs.msdn.microsoft.com/oldnewthing/ 511 | * Raymond Hettinger https://rhettinger.wordpress.com/ 512 | * ReactJS News https://reactjsnews.com 513 | * Real Python https://realpython.com/blog/ 514 | * Reginald Braithwaite http://raganwald.com/#essays 515 | * Regular Geek http://regulargeek.com/ 516 | * Rob Allen https://akrabat.com/ 517 | * Robert C. Martin http://blog.cleancoder.com/ 518 | * Robin Ward https://eviltrout.com/ 519 | * Robin Wilson http://blog.rtwilson.com/ 520 | * Ruslan Spivak https://ruslanspivak.com/ 521 | 522 | #### S individuals 523 | * Sam Saffron https://samsaffron.com/ 524 | * Schakko https://schakko.de 525 | * Scott Hanselman http://www.hanselman.com/blog/ 526 | * Scott Johnson http://www.fuzzyblog.io/blog/ 527 | * Srinivas Tamada https://www.9lessons.info/ 528 | * Stack Abuse http://www.stackabuse.com/ 529 | * Stanko Tadić https://muffinman.io 530 | * Stefan Parker http://codebeforethehorse.tumblr.com/ 531 | * Stephen Colebourne http://blog.joda.org/ 532 | * Steve Bellovin https://www.cs.columbia.edu/~smb/blog/control/ 533 | * Steve Yegge https://steve-yegge.blogspot.com/ 534 | * Swizec Teller https://swizec.com/blog/ 535 | 536 | #### T individuals 537 | * Tania Rascia https://tania.dev/ 538 | * The Coded Self http://www.thecodedself.com 539 | * The Daily WTF http://thedailywtf.com/ 540 | * Thomas Young http://upcoder.com 541 | * Tikhon Jelvis http://jelv.is/blog/ 542 | * T.J. Maher http://adventuresinautomation.blogspot.com/ 543 | 544 | #### U individuals 545 | * Una Kravets https://una.im/ 546 | * Undocumented Matlab http://undocumentedmatlab.com/ 547 | 548 | #### V individuals 549 | * Vanilla Java http://vanillajava.blogspot.com/ 550 | * Vlad Mihalcea https://vladmihalcea.com/ 551 | 552 | #### W individuals 553 | * Wilfred Hughes http://www.wilfred.me.uk/ 554 | * William Kennedy https://www.goinggo.net/ 555 | * Wojtek Gawroński http://www.afronski.pl/ 556 | 557 | #### Y individuals 558 | * Yegor Bugayenko http://www.yegor256.com/ 559 | * Yifan Lu http://yifan.lu/ 560 | 561 | #### Z individuals 562 | * Zach Holman https://zachholman.com/ 563 | * Zolmeister https://zolmeister.com/ 564 | 565 | ### Products/Technologies 566 | 567 | #### A technologies 568 | * Android https://android-developers.blogspot.com/ 569 | 570 | #### B technologies 571 | * Bootstrap.com https://blog.getbootstrap.com/ 572 | 573 | #### C technologies 574 | * Crystal https://crystal-lang.org/ 575 | 576 | #### G technologies 577 | * Go https://blog.golang.org/ 578 | 579 | #### I technologies 580 | * IPFS https://ipfs.io/blog/ 581 | 582 | #### J technologies 583 | * jOOQ https://blog.jooq.org/ 584 | 585 | #### K technologies 586 | * Kotlin https://blog.jetbrains.com/kotlin/ 587 | 588 | #### L technologies 589 | * Laravel https://laravel-news.com/blog/ 590 | 591 | #### M technologies 592 | * Microsoft Edge https://blogs.windows.com/msedgedev/ 593 | 594 | #### N technologies 595 | * .NET https://blogs.msdn.microsoft.com/dotnet/ 596 | 597 | #### R technologies 598 | * React Native http://facebook.github.io/react-native/blog/ 599 | * Red http://www.red-lang.org 600 | * RocksDB http://rocksdb.org/blog 601 | * Rust https://blog.rust-lang.org/ 602 | 603 | #### S technologies 604 | * Sketch https://blog.sketchapp.com/ 605 | * Swift https://developer.apple.com/swift/blog/ 606 | ---- 607 | 608 | # RSS feeds 609 | 610 | You can find an opml file to import rss feeds here: [engineering_blogs.opml](./engineering_blogs.opml) 611 | 612 | # Contributing 613 | 614 | Contributions welcome! Read the [contribution guidelines](contributing.md) first. 615 | 616 | # License 617 | 618 | Licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. 619 | -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | Please ensure your pull request adheres to the following guidelines: 4 | 5 | - One pull request per add. 6 | - The pull request and commit message should include what was added/removed. It should also include one sentence summary of why you think this blog deserves recognition. 7 | - Please squash related commits for each pull request you submit. 8 | - Use the following format: `Name link summary` e.g. Airbnb http://nerds.airbnb.com/ 9 | - For company blogs, make sure that 80% of content is technical (posts about interesting technical challenges, lessons they've learned, etc). No PR, self-promoting posts. 10 | - For individual blogs, as long as posts are mostly technical (80% technical as well), and has a decent number of followers, I'm happy to add them. 11 | - After making changes to the README, run `bundle install` to install the dependencies and then the opml generation script (`./generate_opml.rb`) to update the opml file. 12 | 13 | ## Running the OPML Generation Script with Docker 14 | If you do not have Ruby readily available the following steps can be used to run the OPML generation script with Docker: 15 | 16 | ``` 17 | docker run -it -e LANG=C.UTF-8 --name=blogs ruby:2.5 /bin/bash 18 | git clone https://github.com//engineering-blogs.git 19 | cd engineering-blogs 20 | gem install bundler 21 | bundle install 22 | ruby generate_opml.rb 23 | docker cp blogs:/engineering-blogs/engineering_blogs.opml . 24 | ``` 25 | -------------------------------------------------------------------------------- /engineering_blogs.opml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Engineering Blogs 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | -------------------------------------------------------------------------------- /generate_opml.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | require 'builder' 4 | require 'feedbag' 5 | require 'json' 6 | require 'nokogiri' 7 | 8 | OUTPUT_FILENAME = 'engineering_blogs.opml' 9 | TITLE = 'Engineering Blogs' 10 | 11 | # grab name/url pairings from README.md 12 | readme = File.open('README.md', 'r') 13 | contents = readme.read 14 | matches = contents.scan(/\* (.*) (http.*)/) 15 | 16 | # skip over blogs that aren't found 17 | unavailable = [] 18 | fast_forwards = [ 19 | 'Baidu Research', 20 | 'Booking.com', 21 | 'Fynd', 22 | 'Graphcool', 23 | 'LinkedIn', 24 | 'Medallia', 25 | 'OmniTI', 26 | 'Paperless Post', 27 | 'Pluralsight', 28 | 'Prolific Interactive', 29 | 'Quora', 30 | 'Robert Elder Software', 31 | 'Simple', 32 | 'SlideShare', 33 | 'SourceClear', 34 | 'Viget', 35 | 'Zalando', 36 | 'Zapier', 37 | 'Zynga', 38 | 'Dave Beazley', 39 | 'Edan Kwan', 40 | 'Grzegorz Gajos', 41 | 'Joe Armstrong', 42 | 'Kai Hendry', 43 | 'LiveOverflow' 44 | ] 45 | 46 | Struct.new('Blog', :name, :web_url, :rss_url) 47 | blogs = [] 48 | 49 | # for each blog URL, check if rss URL exists 50 | matches.each do |match| 51 | name = match[0] 52 | web_url = match[1] 53 | 54 | if fast_forwards.include?(name) 55 | puts "#{name}: TEMP IGNORE" 56 | unavailable.push(Struct::Blog.new(name, web_url, nil)) 57 | next 58 | end 59 | 60 | # if rss_url already in existing opml file, use that; otherwise, do a lookup 61 | rss_url = nil 62 | if File.exist?(OUTPUT_FILENAME) 63 | xml = Nokogiri::XML(File.open(OUTPUT_FILENAME)) 64 | existing_blog = xml.xpath("//outline[@htmlUrl='#{web_url}']").first 65 | if existing_blog 66 | rss_url = existing_blog.attr('xmlUrl') 67 | puts "#{name}: ALREADY HAVE" 68 | end 69 | end 70 | 71 | if rss_url.nil? 72 | puts "#{name}: GETTING" 73 | rss_check_url = "https://cloud.feedly.com/v3/search/feeds/?query=#{web_url}" 74 | next if !rss_check_url 75 | uri = URI.parse(rss_check_url) 76 | response = JSON.parse(Net::HTTP.get(uri)) 77 | rss_url = response['responseData']['url'] if response['responseData'] && response['responseData'].has_key?('url') 78 | 79 | # use Feedbag as a backup to Feedly Api 80 | if rss_url.nil? 81 | rss_url = Feedbag.find(web_url).first 82 | if rss_url.nil? 83 | suggested_paths = ['/rss', '/feed', '/feeds', '/atom.xml', '/feed.xml', '/rss.xml', '.atom', '/.rss'] 84 | suggested_paths.each do |suggested_path| 85 | rss_url = Feedbag.find("#{web_url.chomp('/')}#{suggested_path}").first 86 | break if rss_url 87 | end 88 | end 89 | end 90 | end 91 | 92 | if rss_url && rss_url.length > 0 93 | blogs.push(Struct::Blog.new(name, web_url, rss_url)) 94 | else 95 | unavailable.push(Struct::Blog.new(name, web_url, rss_url)) 96 | end 97 | end 98 | 99 | blogs.sort_by { |b| b.name.capitalize } 100 | unavailable.sort_by { |b| b.name.capitalize } 101 | 102 | # create and write to opml file 103 | xml = Builder::XmlMarkup.new(indent: 2) 104 | xml.instruct! :xml, version: '1.0', encoding: 'UTF-8' 105 | xml.tag!('opml', version: '1.0') do 106 | # head 107 | xml.tag!('head') do 108 | xml.title TITLE 109 | end 110 | 111 | # body 112 | xml.tag!('body') do 113 | xml.tag!('outline', text: TITLE, title: TITLE) do 114 | blogs.each do |blog| 115 | xml.tag!('outline', type: 'rss', text: blog.name, title: blog.name, 116 | xmlUrl: blog.rss_url, htmlUrl: blog.web_url) 117 | end 118 | end 119 | end 120 | end 121 | 122 | output = File.new(OUTPUT_FILENAME, 'wb') 123 | output.write(xml.target!) 124 | output.close 125 | 126 | puts "DONE: #{blogs.count} written to #{OUTPUT_FILENAME}" 127 | 128 | puts "\nUnable to find an RSS feed for the following blogs:" 129 | puts "===================================================" 130 | unavailable.each do |b| 131 | puts "#{b.name} | #{b.web_url}" 132 | end 133 | puts "===================================================" 134 | --------------------------------------------------------------------------------