James Long Profile Banner
James Long Profile
James Long

@jlongster

26,181
Followers
1,016
Following
824
Media
21,486
Statuses

@stripe , prev maker of @actualbudget , @mozilla .

Richmond, VA
Joined May 2008
Don't wanna be here? Send us removal request.
@jlongster
James Long
3 years
One of the biggest cultural shifts in my experience from Mozilla to Stripe is code review speed. At Mozilla you'd often wait days and have to hunt down people to review PRs. At Stripe my PR is often reviewed within 10 minutes. That makes a _huge_ difference for shipping fast
72
236
3K
@jlongster
James Long
2 years
I'm open-sourcing Actual. I'm sad that I couldn't make it work as a sustainable company, but I've seen the magic of open-source before and I'm excited about what can happen here. Read more!
106
282
2K
@jlongster
James Long
3 years
🎉 It's finally ready! I've been hacking on something for the past couple months and it's absurdly great. It's time for more powerful web apps. Announcing "A future for SQL on the web":
62
507
2K
@jlongster
James Long
6 years
I've: * Never used TypeScript. Used Flow once. * Never used Parcel, or any other newer bundler (mainly CRA now) * Never used Elm, did a little bit of ClojureScript * Never done serverless * Never used Vue I don't feel behind. I chose my stack and I'm shipping with it.
48
303
2K
@jlongster
James Long
6 years
I'm tired of demos. It's time to see if this async version of React really works. I flipped it on in my (changed 5 lines of code) and this is the difference. It completely changes the user experience. There's a lot of little things left to do, but this is huge. Awesome work.
16
308
2K
@jlongster
James Long
5 years
Math is amazing, there’s no side effects or build tools
25
102
924
@jlongster
James Long
4 years
I've got some big news. I'm joining @stripe ! 🎉 You might be wondering what this means for @actualbudget . I wrote about it here:
68
24
926
@jlongster
James Long
3 years
I regret writing Actual’s backend in node
100
49
888
@jlongster
James Long
5 years
useReducer is awesome. Never using useState again.
Tweet media one
45
91
849
@jlongster
James Long
5 years
I've implemented full undo/redo in @actualbudget . Any action can be undone/redone, even across any screen. Totally changes how you use the app - no fear of mistakes. Will be released Monday.
20
47
741
@jlongster
James Long
3 years
I almost want to never write TypeScript again because of how condescending people are. I know what I’m doing. I’ve been in this field for over 15 years. There are other approaches, ya know? Some of you need to try other types of languages.
71
40
728
@jlongster
James Long
3 years
I like TypeScript, but I’m still not convinced it’s worth it when exploring architectures. I’ve ripped out and completely reshaped something 3 times. Would have completely wasted time trying to type it first.
130
58
724
@jlongster
James Long
5 years
Found this old DM from @dan_abramov haha
Tweet media one
8
40
629
@jlongster
James Long
8 years
Announcing Prettier! Blog post: "A Prettier JavaScript Formatter"
49
303
617
@jlongster
James Long
7 years
We just released 1.0 of prettier!
20
281
606
@jlongster
James Long
5 years
Pretty proud of this drag & drop functionality I built (in react native!)
23
33
602
@jlongster
James Long
4 years
It's ridiculous that we don't pay for open-source software. I find a good quality package that handles a lot of complex logic that I don't have to write myself, giving $20 is a no-brainer. Maybe $100. Maybe more.
26
58
539
@jlongster
James Long
7 years
Discovered an app was using redux, need to debug it, so I injected a console.log to log all actions :D
Tweet media one
Tweet media two
8
105
519
@jlongster
James Long
5 years
I wanted to take some notes on the airplane so I pulled up Notion but it wouldn’t load because of lack of internet. This stuff kills me, it’s not acceptable
32
8
515
@jlongster
James Long
2 months
I was forced to use vscode for something and while I'm typing THREE boxes popped up. How is this possibly useful to people?
Tweet media one
136
12
517
@jlongster
James Long
5 years
Fun fact: in 2011 I applied to work at MailChimp. I sent them this picture of me as a kid with my resume. I never heard back.
Tweet media one
8
20
506
@jlongster
James Long
8 years
Excited to announce that Facebook is sponsoring 2 weeks of my development on Prettier! Starting Monday.
18
54
499
@jlongster
James Long
4 years
Cool, got it working. This is _not_ using the server for syncing at all, this is the entire backend running in a background process with SharedWorker. All tabs connect to the same worker and share the same app. Makes for lightweight clients, all in sync, flexible workflows
12
41
493
@jlongster
James Long
3 years
How the heck is this better than str => str[0].toUpperCase() + str.slice(1) I feel bad for newbies
@SimonHoiberg
Simon Høiberg
3 years
JavaScript Tip 💡 Quick way to capitalize the first letter of a string. ...Without using 'splice' or other annoying methods no one remembers 😜
Tweet media one
34
81
552
56
35
488
@jlongster
James Long
1 year
I'm going to be learning AI from scratch. No hype. No grand vision. Just learning the fundamentals of how it works without any end goal in sight. It's clear we'll need to know this. Interested in following along? I might start a newsletter
40
7
479
@jlongster
James Long
5 years
Would you write JavaScript to make interesting reports about your finances?
Tweet media one
31
36
483
@jlongster
James Long
5 years
Installed VS Code, typed a few characters and got hit with about 10 different visual exclamations. how do you all live like this?
51
20
480
@jlongster
James Long
4 years
Lazy tweet: snapshot testing (for UIs) was a mistake
33
35
472
@jlongster
James Long
6 years
We had a baby! Charlotte Ruth Long. Everyone is doing well.
Tweet media one
44
0
473
@jlongster
James Long
3 years
Never tweet about TypeScript
45
18
468
@jlongster
James Long
5 years
The most critical skill you can develop as a maker is to learn how to take a product/feature/etc and cut it into 1/10 the size, and fearlessly ship it. Find the tiny bit that still makes it useful and only build that.
10
105
467
@jlongster
James Long
7 years
New post: "How I Became a Better Programmer"
23
206
436
@jlongster
James Long
4 years
I seriously need to sit down and blog about the architecture of Actual. It's so cool. * Local app, with a syncing layer that gives stuff like undo for free * It runs on the web too. The whole node backend is compiled and run in a worker * Uses sqlite, compiled to wasm on web
24
13
440
@jlongster
James Long
7 years
Fun fact: I created Prettier solely for @actualbudget . I was so tired of being bogged down with formatting. @Vjeux pushed me to open-source it and helped make it a standard tool. Solving your own problems is the best!
12
39
432
@jlongster
James Long
8 years
New Post: "Why I'm Frequently Absent from Open Source"
28
150
431
@jlongster
James Long
8 years
I have other things I should be working on.
14
63
383
@jlongster
James Long
6 years
I've spent the last couple months quietly building a mobile app for @actualbudget , and more importantly, rebuilt the database layer to be syncable. I'm so excited about how all this works, here's a quick demo of two desktop clients syncing in near real-time:
22
37
382
@jlongster
James Long
6 years
Don't ever laugh at JavaScript again
Tweet media one
14
100
370
@jlongster
James Long
8 years
Oh, just debugging my node app with Firefox's new debugger...
Tweet media one
8
136
358
@jlongster
James Long
8 months
My 5 year prediction: we'll realize it was a mistake to write all of our high-level tools in a language built around systems-level memory safety (Rust)
34
23
357
@jlongster
James Long
5 years
Would anyone be interested if I open-sourced Actual?
51
7
356
@jlongster
James Long
8 years
Excited to announce that I'll be joining my wife for lunch today!
9
12
340
@jlongster
James Long
6 years
Interesting thing about Electron is you can always dig into any app's source code. Here is all the code for Slack:
Tweet media one
19
67
328
@jlongster
James Long
6 years
You should *absolutely* study why something gets popular though. But you don't have to change anything unless it really provides enough value to you to be worth it. Who cares about hype.
9
48
319
@jlongster
James Long
7 years
Prettier hit 10,000 stars on github! 💫
8
47
323
@jlongster
James Long
4 years
🤔 What is this? Actual in a browser? Hey, it works! In Firefox, even! It's amazing that the UI only needed a few tweaks to work in other browsers. The backend is compiled with a virtual FS and runs in a web worker.
Tweet media one
9
15
305
@jlongster
James Long
7 years
Excited to announce Actual, a personal budgeting system I've been working on: Sign up you're interested in it!
34
49
305
@jlongster
James Long
2 years
Just started watching the React documentary. Here's my contribution to the early hate. I was at JSConf when they announced it.
Tweet media one
7
10
305
@jlongster
James Long
6 years
AWS is such a complex mix of having awful documentation and APIs and being such a fantastically reliable service
8
45
300
@jlongster
James Long
8 years
Long time coming, but the Firefox console will finally be sourcemapped! (Thanks intern Jaideep for pushing through!)
Tweet media one
10
156
290
@jlongster
James Long
5 years
Unpopular opinion: console logging is a more powerful form of debugging than stepping
@seaotta
Stephanie 🔮 Web Witch
5 years
Y'all, if console.log is your jam, that's fine. I've been talking to devs as I work on the DevTools and this aligns with things I've learned from devs and mostly why I shared this. You do you.
8
0
92
18
28
289
@jlongster
James Long
6 years
I think symmetry is more important than abstraction in code. It’s way easier to get right and serves a similar purpose. A large system is easy to understand if you see the same patterns everywhere.
12
78
284
@jlongster
James Long
5 years
Sometimes I think about the fact that every time webpack is run it uses 1000x more resources than was needed to crack enigma
7
65
282
@jlongster
James Long
4 years
🗒️ New post! "A case study of complex table design" Please share!
16
37
281
@jlongster
James Long
6 years
Creating things has this "interesting" property where by the time you're finished you hate it
16
24
278
@jlongster
James Long
5 years
My talk about CRDTs is up! Probably one of the most interesting talks I've given.
11
43
268
@jlongster
James Long
7 years
My wife accidentally lost allll of my browser tabs that I've been building up for 2 weeks. I'm a free man now
8
17
267
@jlongster
James Long
5 years
hot damn I love this kind of stuff
9
16
255
@jlongster
James Long
3 years
Hitting scaling issues with PostgreSQL. Yes! The best kind of problem! Now I need to figure out how to make a query on 11644420 rows take less then 3 seconds.
29
7
252
@jlongster
James Long
6 years
I enjoy my current setup (working from home, seeing kids a lot), but the worst part about working on something alone is there’s nobody to get beers with after a good launch
13
11
238
@jlongster
James Long
2 months
I owe all of my success to one simple thing in morning routine: Every single morning, in the shower, I let a little bit of shampoo slowly drip into my eye. The sting makes me feel alive and increases my productivity for the next few hours 5x
30
10
225
@jlongster
James Long
4 years
Somebody should fork Mozilla
10
21
214
@jlongster
James Long
5 years
This phenomenon is so fascinating: you build something, find extremely negative comments about it (from randos), reply and engage with them kindly and they become super interested in what you’re doing and almost apologetic. It’s crazy.
12
15
210
@jlongster
James Long
7 years
"Clean code" is often mis-interpreted as small, quick to understand, or worse aesthetically pleasing
6
77
208
@jlongster
James Long
9 years
Reason #2 I won't respond to your pull requests or issues:
Tweet media one
23
1
205
@jlongster
James Long
5 years
Native selects really are awesome. They can expand past the window (see the screenshots). Did you know they also autocomplete? If you typed "big p" below it would end up highlighting "Big Projects". Make sure you really need that custom autocomplete.
Tweet media one
13
37
206
@jlongster
James Long
5 years
🌟 Just launched a fresh new version of my personal website: And I wrote a new post about why. I'll be writing about everything I've learned building Actual and trying to bring it to profitability over the next year:
22
15
207
@jlongster
James Long
5 years
The responses to this are amazing. I still can't believe it's become such an ecosystem standard. Props to all of the Prettier maintainers who made it go mainstream.
11
7
201
@jlongster
James Long
4 years
Been thinking for a looong time that it’d be awesome to go to therapy. Why not debug yourself? How do you even start something like that?
33
9
200
@jlongster
James Long
7 years
Whoa Swift bringing out the shade today
Tweet media one
15
25
199
@jlongster
James Long
5 years
One takes timezone into account One has zero-based months One API to confuse them all and in the darkness bind them
Tweet media one
6
29
202
@jlongster
James Long
3 years
The only good thing that came out if that thread was someone linked to this great blog post:
7
13
201
@jlongster
James Long
8 years
. @Vjeux is crawling through the tc39 test cases and finding things we never knew were possible.
Tweet media one
4
75
200
@jlongster
James Long
2 years
Not one person commented on the animated header in my post that I spent a week building 😡 Not really angry but I care about weird things.
33
3
200
@jlongster
James Long
5 years
I've been wanting to give that talk for a long time, thanks @dotJS ! Just explained how to practically use clocks and CRDTs to implement local apps that sync. Slides coming soon. Here is the example app that includes all the code (~800 lines of JS!):
5
34
196
@jlongster
James Long
8 years
So tempted to write more about why I really left Mozilla. Do those kinds of posts do any good?
51
2
198
@jlongster
James Long
5 years
😂 Apple rejects your app if you mention android. These games are hilarious to me.
11
6
194
@jlongster
James Long
8 years
This is happening. Finally happening. gh-pages was such a kludge!
6
128
193
@jlongster
James Long
4 years
Did you know that if you use regexp capturing with `string.split` in JS you get the content back in the array? Very useful for certain use cases.
Tweet media one
5
33
194
@jlongster
James Long
5 years
Nothing shows the state of the JS ecosystem better than the fact that there are two packages, `node-uuid` which generates insecure uuids (dangerous!) and `uuid` which generates secure uuids (yay!). It's basically a coin flip.
10
29
192
@jlongster
James Long
1 year
Main thing that makes me sad about React is the lack of solutions for offscreen rendering, animations, child->parent communication, better events etc. All client-side stuff. Current focus feels very different from what a lot of people want
13
10
190
@jlongster
James Long
4 years
This is shaping up to be a great release, so I'm going to do something I should do more often: a thread of features and UI polish in the next release of @actualbudget : First, the coolest feature: the ability to float the sidebar (thanks @NotionHQ for great UX ideas)
6
11
190
@jlongster
James Long
6 years
Granted, I've studied all of these things, some of them deeply (ClojureScript, Flow). My point is it feels like the frontend space moves fast but it really doesn't have to feel that way. What I'm using worked the same 2 years ago. And it works really well.
4
18
185
@jlongster
James Long
5 years
A clear sign if your tests are good or bad: after refactoring something significant, what is the experience like getting the tests passing? Do you spend days/weeks frustrated doing grunt work w/out finding anything interesting? Or do you spend that time discovering new problems?
10
33
190
@jlongster
James Long
7 years
I should really just announce this so I can stop saying "personal reasons": my wife and I are expecting out 3rd baby in May! 🐣
@jlongster
James Long
7 years
I'm extremely excited to be a part of this! Check out all the exciting workshops already available: I would be giving more workshops soon but have personal stuff going on until August.
0
1
12
21
1
190
@jlongster
James Long
6 years
I finally tried Parcel and... wow
4
4
185
@jlongster
James Long
5 years
This is the kind of thing why I love Catalina. Denied. Why are y'all complaining about this?
Tweet media one
8
16
183
@jlongster
James Long
6 years
The gap between a weekend hack project and a product ready for production is so large. Larger than I thought. There are so many little things you need once you want to have real users.
7
22
184
@jlongster
James Long
3 years
Recently tweeted about creating a discord to manage my life. Well I did it. I made a bot that obeys my command and it's freaking amazing. I'm connecting all my stuff to it (github notifications, subscribe to rss, etc.) It can also write out: example, this channel writes to Roam
Tweet media one
Tweet media two
13
7
182
@jlongster
James Long
3 years
New year, new site! Not a blog. I'm killing my blog. let's focus more on a graph of ideas using Remix, this reads directly from my Roam graph and publishes that content. reading is slow, but a simple Cloudflare cache in front solves the issue completely
14
8
176
@jlongster
James Long
6 years
Want to inspect your production minified build to make sure the right optimizations are being applied? Just run prettier on it to make it readable!
Tweet media one
3
36
173
@jlongster
James Long
6 years
Tip: don't let callbacks with dynamic args get you down in React. You can still retain identity across renders to avoid rerenders by memoizing the curried form. In plain terms: the same function will always be passed in so you don't break pure checking.
Tweet media one
2
31
170
@jlongster
James Long
5 years
The modern version of the lonely "finding a forum post describing my exact problem with no replies": finding a github issue describing a real problem with many replies confirming it, only to end it an automated bot closing it due to inactivity.
3
22
170
@jlongster
James Long
9 years
React Motion + live reloading works like a breeze / @_chenglou http://t.co/OfEzTaxYL2
3
87
171
@jlongster
James Long
6 years
Get you a testing framework the way react-testing-library treats you. This is absolutely awesome.
Tweet media one
Tweet media two
Tweet media three
9
32
169