├── .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 [](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 |
--------------------------------------------------------------------------------