Strajk.me
Resume
Notes

Meteor Impact 2020

ℹ️ These are just personal notes that supplement the talks. They may not make perfect sense without seeing the talks themselves.
Disclaimer: I'm new to Meteor, so mistakes are possible probable.
impact.meteor.com
Virtual event via pathable.com

assets/1.png
Phuc Nguyen – Pathable, github.com/npvn
Oli Oskarsson – Pathable, github.com/oskarszoon
assets/2.png
assets/3.png
assets/4.png
assets/5.png
assets/6.png
assets/7.png
assets/8.png
assets/9.png
assets/10.png
assets/11.png
assets/12.png
assets/13.png
assets/14.png
assets/15.png
assets/16.png
assets/17.png
assets/18.png
assets/19.png
assets/20.png
assets/21.png
assets/22.png
assets/23.png
assets/24.png
assets/25.png
Questions:
Open sourcing change streams? Coming soon
Hardest problem with scaling? Reactivity, solving by limiting the number of queries to Mongo, and by sharding (but that's hard to do with aggregations).

assets/26.png
assets/27.png
assets/28.png
assets/29.png
assets/30.png
assets/31.png
assets/32.png

assets/33.png
assets/34.png
3 places to update
assets/35.png
assets/36.png
assets/37.png

assets/38.png
assets/39.png
assets/40.png
ℹ️ Stopped watching at 10:00, not relevant to me

➡️ Newsletter
Goals
  • Provide support and updates to important packages in the community space to prevent their abandonment.
  • Support community cooperation and initiatives.
Loose organization, no formal meetings, distributed.
Q&A
Funding? Just on personal level, not as a group. Via GitHub Sponsors. Spread the world in your company.

Topics: Advanced level; Using Nginx + Phusion passenger; Self-hosted MongoDB; serve static files with Nginx; semi-automatic deployments from GitHub
Talk not relevant to me

Frontend framework poll (among just participants): 50% React, 30% Blaze, 15% Svelte
Data fetching: Majority still use DDP, GraphQL increasing, but slowly.
Redis Oplog is an indicator of large scale app. more info
Needs updates:
Tip: Meteor is easy to modify local versions of packages
assets/41.png
  • Does not scale – not true
  • Coupled, restrictive, rigid – this has also it's benefits
  • Out of date resources (docs, articles) – true
  • Meteor community bubble – own community, slack, forum, ...
    • Jan publishing articles to Dev.to
    • Lot of space for improvement
  • Long build times
  • Zombie project status
  • All–or–nothing approach – bit true, but depends on architecture
  • Only for prototyping / side-projects – Meteor shines the most here, but it's not limited to just these cases
  • Insecure – depends on used packages
  • Not integrated with npm – not true anymore
  • Too much magic / Fibers – yep in the beginnings. Fibers made sense when Meteor was born.
  • Not popular enough – hopes for Meteor v2
  • Unclear future
  • Lock-in
  • No big corps – Disney
  • Just for real time apps
  • Expensive hosting – Galaxy introduced cheaper tears, but possibility to host anywhere.
assets/42.png
Requests for LTS
Note: Jan is flaging deprecated packages.

Maciej Stasiełukgithub.com/MacRusher
CTO at Vazco – Wroclav 🇵🇱
Maciej started with Meteor 0.4. No security at all. Now using Meteor for all new projects. Contributing back to the community.
Uniforms – build forms from schemas, not meteor specific (more in the talk tomorrow). Radosław Miernik – github.com/radekmie
Products:
  • Aleno – restaurant reservation. 5y on prod, Meteor from day 1, public REST, and GraphQL APIs (build on top of WebAppunderlying connect server). Works and scales well.
  • Clozer – mobile app for sales people. Using Cordova. Enterprise heavy.
For simple cases, Blaze is good. But React eco system is the main benefit.
github.com/vazco/sparrowql – solves complex MongoDB aggregations ("we have aggregations with over 40 stages (including 10 and more $lookup stages"). Also, have GraphQL integration.
Q&A
Experience? Usually don't need all of the features of Meteor (e.g. realtime reactivity), end up not using them, and going lean. Like the new approach of dropping deps from core,
Routing? FlowRouter. Client-side react-router, reach-router (alt approach from same authors as react-router, merging both in next release)
SSR? Nope
Code Splitting - definitely, manually, using import()
Native? React Native, Cordova or Capacitor
Meteor v2? Like the approach

Abigail Watson – medical background (2 medical degrees!)
assets/43.png
assets/44.png
Fast Healthcare Interoperability Resources – standard to exchange data. Example for Patient. Over-the-wire alternative to the database schema. Similar to Swagger.
assets/45.png
Capabilities statement – sth like GraphQL schema, allows auto-discovery.
assets/46.png
assets/47.png
Messy data problem, "not ideal" format.
👀Demo of vast amount of various mapping examples.

Matt Hollingsworthtwitter.com/matthewwholling
Tiny Capital acquiered Meteor in 2019/10
Marketing Meteor 📣
  • Encourage momentum
  • Busting myths – caused mostly by inactivity
  • Promo benefits
  • Promo services – Galaxy
Current state
  • Strong core community
  • Lack of awareness of Meteor & Galaxy capabilities
Done ✅
  • Establish core team – Renan, Filipe, …
  • New Meteor website
  • New pricing + free trial
  • More transparency
Communication: Podcast, Newsletter, Announcements, Twitter, Slack, Forum
Case studies: Any.Run
Galaxy will be rebranded to Meteor Cloud, unified DX.

Micaiah Nissen, aka zodern
Hot Code Push
  • dev & production – had to be reliable
  • CSS, but limited
  • preserve some state with Reload package, but not all
ATM enabled in app code. Coming soon to Cordova, Legacy web and packages.
The current build is compared with the previous build → HMR Server sends changes → Client applies updates → Build finishes → Other changes applied with Hot Code Push
View layers integrations
  • React – React Fash Refresh
  • Svelte – zodern:melte
  • Blaze – not implemented (for now, technically possible)

Jan Küster
Meteor's Account System – one of the biggest selling point
meteor add accounts-«our custom service«
assets/48.png
assets/49.png
assets/50.png
assets/51.png
assets/52.png
assets/53.png
assets/54.png
assets/55.png
git clone https://github.com/jankapunkt/meteor-auth-server-example

cd authserver
meteor npm install
meteor npm run authserver

cd calendar
meteor npm install
meteor npm run calendar
user:johndoe@example.com
pass:password
Used packages:
Learn more:

Alim S. Gafar Principal & Data Scientist at DIRA Market Dynamics LLC
Peter Brown CTO at Pathable, Inc.
Adrian Lanning Founder, CTO at OnScene Technologies, Inc.
Filipe Névola Meteor Evangelist at Meteor Software

Filipe Névola
Today
Mature and business ready
Really information dense. Watch whole talk or slides.

Bart Sturm – TutorMudni – helping students to get into highly prestige universities
Juniors don't rely on experience, are aware of how much they don't know – maybe more curious.
Tip: Expose functions as Meteor methods for easy debugging by calling them via Meteor.call

Scott Tolinski scotttolinski.com
Level Up Tutorials leveluptutorials.com (build using Meteor)
assets/56.png
Why Meteor?
  • Fast to get started
  • Hot Code Push for immediate updates
  • Flexible – can be used purely as Node server
Productivity Driven Development vs Hype Driven Development – hype will not help get things done. Meteor wins at productivity.

Kevin Newman
assets/57.png
react-meteor-data – feels "unmeteory", not tighly integrated
assets/58.png
creating computation when component mounts, holds onto it for some time (1s) for retaining the computation.
assets/59.png
Kevin's solution: more small, task specific hooks github.com/meteor/react-packages/pull/298
assets/60.png
Beware: "Subscription" in React world is more similar to Meteor's Computation/Observer
Meteor-state – hooks into Meteor reload package to avoid loosing state of Hot Push.
assets/61.png
assets/62.png
assets/63.png
assets/64.png
Note mapping directly over cursor (no .fetch()) – experimental ATM
assets/65.png
useMethod is WIP (for methods, use useEffect for now)
assets/66.png
react-loadable for code splitting on server.
Study: Suspense for Data loading
assets/67.png
Suspense in a nutshell: "Throw promise up the component tree"
assets/68.png
assets/69.png
React.lazy with Suspense for code splitting is the future (right now, doesn't work for SSR mode)

assets/70.png
Framework on top of Meteor
Projects using Vulcan:
Very active Slack channel
assets/71.png
assets/72.png
assets/73.png
assets/74.png
assets/75.png
assets/76.png
Components can be composed.
assets/77.png
assets/78.png
Cool Getting started guide.
Limitations of Meteor
  • Barrier to entry – people may dismiss "non-standard" node
  • Dev Experience – small bits of friction, Storybook not working
  • Vulcan Weirdness
There will be Next.js Vulcan version
Tip: To make Storybook working with Meteor, you have to stub Meteor packages at the client with Webpack. (Ali)
Transition Vulcan from Meteor to Next.js
Honest answer: lack of scale, trust issues of future
Apollo is redundant with Meteor.
assets/79.png
assets/80.png
Vulcan brings Meteor philosophy to a broader JS ecosystem.
assets/81.png
Q&A
Integrate into existing app? Bad idea to integrate, start over.
DDP? Vulcan doesn't use DDP

assets/82.png
Future: package companion
source .envrc && setup
assets/83.png
Stack: MobX, React, Blueprint css,
Custom performant JSON viewer
MobX is awesome with TS, not good with pure JS
assets/84.png

🛠 Audio was cutting off a lot 😢

🛠 Weird technical issues

Radosław Miernik – StackOverflow
Motivation for Uniforms – there was no autoform for React
Whole company migrated to React.
Works with every schema (with "bridges" – simple-schema, graphql, json schema, ...) and with every theme (even custom ones)
2020/10: 50 contributors, 150 version, 420k downloads (of core)
Mature – 4y old.
assets/85.png
assets/86.png
assets/87.png
assets/88.png
Features
assets/89.png
assets/90.png
Why? Composability
assets/91.png
assets/92.png
assets/93.png
assets/94.png
Experience: JSONSchema is usually superior.
Tip: Extend AJV with custom keywords
Process: Why Vazco develops uniforms?
Uniform v3 coming soon! Migration guide issue
Questions:
Can TS interface be considered as schema? Same problem as GraphQL – no validation logic. Another problem – TS types are erased in runtime.
Comparison? For custom forms, it doesn't matter what you choose. It matters for automatically generated forms.
assets/95.png

Testing Blaze, Meteor Methods and Publications
assets/96.png
assets/97.png
assets/98.png
assets/99.png
assets/100.png
assets/101.png
assets/102.png
assets/103.png
Avoid temptation to make the tests too brittle.
assets/104.png

Harry Adel – github.com/harryadel
MeteorClub Security Checklist – good, but not enough ☠️dead
Secure Meteor book – inspiration for this talk
assets/105.png
Issue: can be triggered from client
assets/106.png
assets/107.png

assets/108.png
Issue: DDoSing server
assets/109.png
assets/110.png
assets/111.png

assets/112.png
Tip: You can also use npmjs.com/package/ddp-rate-limiter-mixin (for meteor validated methods)
assets/113.png
TODO: links to repos
Tip: Request package also becoming obsolete
assets/114.png

assets/115.png
assets/116.png
assets/117.png

Micaiah Nissen, zodern
assets/118.png
assets/119.png
assets/120.png
assets/121.png
assets/122.png
beware: debugging pauses the app, use logpoints
assets/123.png
assets/124.png
assets/125.png
assets/126.png
assets/127.png
assets/128.png
Continuous profiling
  • adhoc analysis
  • analyze incident afterwards
  • correlate with other metrics
  • check perf regression & compare
assets/129.png
assets/130.png
assets/131.png
assets/132.png
Contact zodern to join private beta.
Questions