Dave Thomas Profile Banner
Dave Thomas Profile
Dave Thomas

@pragdave

Followers
33,337
Following
98
Media
299
Statuses
5,955

Programmer turned publisher (but mostly programmer)

Dallas, Texas
Joined May 2007
Don't wanna be here? Send us removal request.
Explore trending content on Musk Viewer
@pragdave
Dave Thomas
2 years
Dear programming tool developers: JSON is a program-to-program data transfer mechanism. If you make users of your tool configure it using JSON files, it means you're placing your convenience over theirs.
70
199
2K
@pragdave
Dave Thomas
5 years
If you haven't seen it, here's the announcement: The Pragmatic Programmer, 20th Anniversary Edition, real soon now. A whole bunch of new content, a whole bunch of revised content, but no change to the common sense.
18
240
765
@pragdave
Dave Thomas
2 years
What's wrong with JSON for configuration? 1. no ability to comment things out 2. no trailing commas make maintaining lists more cumbersome 3. quotes around keys are just silly 4. no ability to inherit defaults
26
21
386
@pragdave
Dave Thomas
11 years
Time to recognize the inevitable. The work "agile" is now dead—let's move on. http://t.co/GWdtRtpaNO
48
618
315
@pragdave
Dave Thomas
4 years
Switched from using the fancy JavaScript build tools back to using a simple Makefile. Not only is it now reliable, but I can actually reason about what it is doing, and adding one new resource format doesn't incur a day's worth of dependency negotiation.
10
62
290
@pragdave
Dave Thomas
2 years
So, programmer pals. It seems like a lot of developers are great programmers, but at the same time are a bit shaky when it comes to some of fundamentals: stuff down at the machine and operating system level. If I did a course covering that stuff, would there be interest?
30
24
290
@pragdave
Dave Thomas
3 years
Some folks talk about ending the day with a clean checkin. I'm increasingly finding it better to end with a failing test; it helps we regain context the next morning.
22
47
273
@pragdave
Dave Thomas
6 years
Installing react, react-dom, and reason-scripts... + react-dom @16 .6.1 + react @16 .6.1 + reason-scripts @1 .0.0 added 1694 packages from 659 contributors and audited 32802 packages in 79.021s found 0 vulnerabilities *1694* packages. This Hello World test is *solid*
7
77
248
@pragdave
Dave Thomas
3 years
I've been wanting to write a little about how practices from 50 years ago are influencing developers today. As an experiment, I'm starting a series over on Medium: Please let me know what you think.
12
87
254
@pragdave
Dave Thomas
8 years
This, at every level of a system.
Tweet media one
2
155
222
@pragdave
Dave Thomas
6 years
I'm so glad we could do this. The ebook of Programming Elixir ≥ 1.6 (yes, the latest version) is now free to students and teachers.
15
102
221
@pragdave
Dave Thomas
8 years
Pragdave 2.0—turning the page.
35
90
210
@pragdave
Dave Thomas
1 year
I'm starting to explore Elixir's @AshFramework (). It's a seriously impressive piece of work and looks like a well-thought out way of both modeling and exposing your domain. I'm going to spend a few days trying to model a subset of the PragProg backend;
8
30
222
@pragdave
Dave Thomas
6 years
I've finally had the courage to release my Elixir "Component" library, designed to encourage the building of deliverables using decoupled, coherent, components. • • @elixirlang #myelixirstatus
2
46
192
@pragdave
Dave Thomas
7 years
If you got a previous edition of Programming Elixir from , watch your inbox later on today. Happy New Year...
Tweet media one
13
50
177
@pragdave
Dave Thomas
8 years
Reading patterns books is like watching drug ads on TV. By the end, you're convinced you have all the symptoms and need all the remedies.
4
137
178
@pragdave
Dave Thomas
6 years
My @empexco talk about rethinking the way we write Elixir is up. It's no more than a set of initial thoughts, but I really think there's something to them. I was just coming off a case of pneumonia, so sorry about the sniffs.
5
52
170
@pragdave
Dave Thomas
11 years
This is how you should write release notes. http://t.co/VPzjvxzxOy
Tweet media one
12
420
158
@pragdave
Dave Thomas
6 years
An Elixir JSON API server in 2 tweets (ignoring application.ex). Once it gets warmed up, it is insanely fast: 21:35:37.321 [info] GET /login/33 21:35:37.321 [info] Sent 200 in 28µs #myelixirstatus
5
44
164
@pragdave
Dave Thomas
1 year
After a seven year break, I'm back running the Pragmatic Bookshelf. I have a lot of cool things planned, but I could really do with your help. For the background, and for details on how to voice your opinions, see . I look forward to chatting with a whole
8
35
163
@pragdave
Dave Thomas
7 years
Not just Junior. All developers.
@petdance
Andy Lester
7 years
Jr. devs: Don't waste your time trying to guess upcoming tech trends to know what to learn. Learn what interests you.
5
35
67
4
89
135
@pragdave
Dave Thomas
6 years
If you want to comment a public function, but hide it from the documentation system, try the following. (The trick is the "!" operator.) #myelixirstatus
Tweet media one
1
37
144
@pragdave
Dave Thomas
5 years
Sometimes using Dialyzer is like talking to an ancient Buddhist monk. You get suggestions, but it takes a lifetime of exploring to work out what they mean, and in the end you knew the answer all along. #myelixirstatus
0
26
133
@pragdave
Dave Thomas
7 years
Programmer? Want to learn Elixir? My new course is available. 80% complete/30% discount for a week. Includes rants 😤
5
49
124
@pragdave
Dave Thomas
8 years
Teaching some git to my class today, and noticed this on a student's laptop.
Tweet media one
1
65
104
@pragdave
Dave Thomas
7 years
New post: decoupling Elixir apis, implementations, and servers.
4
54
127
@pragdave
Dave Thomas
6 years
After several aborted attempts over the last 18 months, I've finally moved my development environment off my Macs and back to Linux. Only real pain point is the horrible mish mash of control/super/alt between different apps. Small price to paygiven the hardware options available.
18
10
120
@pragdave
Dave Thomas
8 years
Emailing by students notes on their grades. Programming by pipeline. Transformative! #myelixirstatus
Tweet media one
2
45
119
@pragdave
Dave Thomas
5 years
til: (copy/paste into chrome web developer console) var msg = new SpeechSynthesisUtterance(); var voices = window.speechSynthesis.getVoices(); msg.voice = voices[50]; msg.voiceURI = 'native'; msg.text = 'Gosh! I do believe my browser can talk'; speechSynthesis.speak(msg);
8
22
109
@pragdave
Dave Thomas
6 years
First (and tentative) prerelease of Bunyan, a distributed and extendable logger for Elixir. I built it both because I needed it and because I wanted to try out my ideas on structuring Elixir apps on a real-world example. #myelixirstatus
Tweet media one
5
33
111
@pragdave
Dave Thomas
6 years
At first glance my arguments against project directory structure seem like bikeshedding. They are, to some extent. But I think the way we structure our project tree is a symptom of a real problem. I tried to describe it in an article: #myelixirstatus
8
24
109
@pragdave
Dave Thomas
5 years
Really, really cool announcement coming out tomorrow of something that's been cooking for a long time.
7
7
103
@pragdave
Dave Thomas
2 years
I'd cover things ranging from number representation to how page tables work to operating systems and I/O, compilers, linkers, loaders, networking, and other stuff that people request. It would all be backed by code and projects.
8
3
102
@pragdave
Dave Thomas
10 months
It's my birthday, and I feel like spreading the joy. Use code "cake" at checkout to get 50% off at . Good for 24 hours, or until the grownups find out and stop me...
Tweet media one
29
32
111
@pragdave
Dave Thomas
10 years
I've used OS X for years and never realized how useful 'say' is: rake build; say build done Means I can go do something else, and not poll
20
115
88
@pragdave
Dave Thomas
8 years
If dogs have an afterlife, I hope it’s full of slow squirrels and long grass. Have fun, Moose.
Tweet media one
8
7
89
@pragdave
Dave Thomas
1 year
The way @AshFramework handles migrations is spot on. No need to define separate schema and data models. Instead, just model your data, and when you need to reflect those changes in a database schema, just ask Ash to generate the migration and run it. It effectively does a
4
10
112
@pragdave
Dave Thomas
5 years
Picked up an old Dell R710 and installed Fedora. 24 cores, 32GB ram, and 2TB on a Raid controller. <$300.
Tweet media one
7
3
101
@pragdave
Dave Thomas
4 years
The challenge of functional programming is making the right data available where you need it. The challenge of object-oriented programming is that this isn't a challenge.
4
23
94
@pragdave
Dave Thomas
5 years
@FrancescoC @joeerl You never walked up to Joe if you had anything important to do in the next hour, because he always had projects, and they were always interesting, and he was just so damn enthusiastic talking about them. If some people are bright sparks, he was an arc light. (He fizzed, too :)
2
8
90
@pragdave
Dave Thomas
7 years
Elixir for Programmers comes out of β July 4. Now $40, then $60. Sorry to be commercial, but folks want to know.
4
38
89
@pragdave
Dave Thomas
6 years
Tweet media one
4
35
96
@pragdave
Dave Thomas
4 years
Having tried it for a few weeks, I've now switched to doing most of my vector stuff on Affinity Designer by @AffinitybySerif . Currently $25 single payment; Illustrator is $21/month. It's also nicer to use. Maybe I'll be able to stop paying the @adobe tax.
9
7
85
@pragdave
Dave Thomas
9 years
If you bought the Programming Elixir eBook from us, you now have a coupon in your account for a free 1.2 upgrade.
18
30
86
@pragdave
Dave Thomas
11 years
98% of my recent web traffic is about agility, so Google puts this ad on every page. Read it carefully and weep. http://t.co/Zb2tsBRmSZ
Tweet media one
32
206
82
@pragdave
Dave Thomas
6 years
Tweet media one
0
38
85
@pragdave
Dave Thomas
1 year
This post from @josevalim is both incredibly well written and very exciting Once again, he demonstrates how a project owner can respect the projects customers while still making significant and exciting changes.
2
25
92
@pragdave
Dave Thomas
9 years
TSA fails to detect 95% of threats. This isn't a reason to strengthen them. Instead it proves they aren't needed-nothing happened regardless
7
98
73
@pragdave
Dave Thomas
9 years
Updating "Programming Elixir" for Elixir 1.2. Ebook owners will get the new version for free (as it's the same edition of the book)
6
45
77
@pragdave
Dave Thomas
7 years
I wish I’d written Functional Web Development by @lance_halvorsen ()
1
16
78
@pragdave
Dave Thomas
2 years
The Unison language () has some really interesting ideas, from content-addressable immutable code to dependency-injection with abilities, a powerful yet simple alternative to monads. I've written a couple of articles: Enjoy
5
23
84
@pragdave
Dave Thomas
3 years
I'm a little upset about the state of programmer interviews...
7
16
78
@pragdave
Dave Thomas
6 years
Fish shell function to display module and function help from the cmd line: function re --description 'Get help on an Elixir module or function' iex -e "require IEx.Helpers; IEx.Helpers.h($argv); :erlang.halt" | cat end In use: $ re String $ re String.upcase #myelixirstatus
0
11
71
@pragdave
Dave Thomas
7 years
I’ve used Emacs for maybe 25–30 years—it has effectively become my window manager. For my next course, I’m thinking seriously about switching to Visual Studio Code plus tmux in the internal console. No particular reason apart from a desire to shake me out of a comfort zone.
15
5
70
@pragdave
Dave Thomas
5 years
I'm liking what I'm reading in @redrapids and @JEG2 's "Designing Elixir Systems". It's a pragmatic approach which (correctly) prioritizes what _you_ need to do over what the frameworks do.
2
19
70
@pragdave
Dave Thomas
8 years
Fira Code uses ligatures to convert coding digraphs to nice looking wide chars. In the image |> becomes ▷ and -> is →. I’ll give it a week.
Tweet media one
5
15
67
@pragdave
Dave Thomas
4 years
A suggestion on how to learn a new programming language
4
25
71
@pragdave
Dave Thomas
5 years
Today I wrote code in COBOL, Algol 60, and Pascal. #livinginthepast
13
3
64
@pragdave
Dave Thomas
9 years
Phoenix is so fast that when I switched in Foundation for Bootstrap and reloaded, I had to inspect the styles to make sure it had happened.
0
24
62
@pragdave
Dave Thomas
6 years
After 7 months using Linux, I finally had to power up my MacBook today: I couldn't find anything on Linux to match Keynote when it can to creating animated diagrams. Surprised how clunky OSX feels compared to Ubuntu.
10
12
64
@pragdave
Dave Thomas
8 years
Tweet media one
8
59
67
@pragdave
Dave Thomas
12 years
The Feynman lectures on the character of physical laws. I watched one a night and was spellbound. Highly recommended. http://t.co/p9ZNr4Ij
1
27
63
@pragdave
Dave Thomas
6 years
Just noticed that vscode-elixir-ls not suggests specs for public functions that don't currently have them, based on Diayzer's inferred success typing. This is very, very cool, and has already found a mistake I made. A massive tip o' the hat to @JakeBeckerCode . #myelixirstatus
2
10
63
@pragdave
Dave Thomas
5 years
" If you have three pet dogs, give them names. If you have 10,000 head of cattle, don't bother. Nowadays the idea of giving a name to every file on your computer is ridiculous." David Gelernter in 1999.
7
10
59
@pragdave
Dave Thomas
4 years
I assigned my students the task of implementing a state machine in the language of their choice. I'm currently grading an answer written in Prolog. Mission accomplished :)
3
4
64
@pragdave
Dave Thomas
9 years
Fantastic post from Chris McCord: Phoenix is not Rails
0
44
63
@pragdave
Dave Thomas
7 years
Simple proof-of-work in Elixir: def _count(value, counter, difficulty) do case value do << 0::size(difficulty), _::bitstring >> -> counter _ -> _count(:crypto.hash(:sha256, value), counter+1, difficulty) end end does 1.5MM iterations/s on my 2013 mac!
2
13
56
@pragdave
Dave Thomas
7 years
My anniversary card for #ruby25th Thank you @yukihiro_matz
0
26
61
@pragdave
Dave Thomas
7 years
If mix, Elixir, or Erlang gives you an error about SSL in OS X High Sierra, upgrade your Erlang. #myelixirstatus
0
39
54
@pragdave
Dave Thomas
7 years
Just started authoring the next course. Working title: More Advanced Elixir. It has a Russian Doll structure—an interesting challenge
4
6
52
@pragdave
Dave Thomas
8 years
One of the joys of owning a tractor is the whole new world of warning signs.
Tweet media one
4
28
53
@pragdave
Dave Thomas
7 years
certbot is an amazing tool. The first time I installed an SSL cert, it took 2 days. Now it took 5 minutes (including certificate generation)
1
15
57
@pragdave
Dave Thomas
2 years
I'm really, really enjoying the Unison language and environment. The append-only library system is fabulous, but takes getting used to. The language itself is sweet, but the icing on the cake is the fantastic _abilities_ feature (Abstract Algebraic Effects).
2
11
63
@pragdave
Dave Thomas
5 years
Finally, after all these years, I have a desk that looks like a programmer's desk on TV (except the fonts should all be 96pt)
Tweet media one
6
3
55
@pragdave
Dave Thomas
6 years
Just had some PRs accepted for @BoydMulterer 's wonderful project (I added the ability to specify scenes declaratively). This was easy to do as the @ScenicFramework code is wonderfully well organized and tested.
2
8
56
@pragdave
Dave Thomas
11 years
He loved life. He loved knowledge. He loved sharing both. Even if you didn't know Jim Weirich, you're worse off today.
0
81
55
@pragdave
Dave Thomas
9 years
I love the way the eliminating duplication provides incremental design insights.
2
58
46
@pragdave
Dave Thomas
5 years
My talk from Gig City Elixir is available. I quite like it...
5
9
56
@pragdave
Dave Thomas
5 years
my talk at the Lonestar Elixir conference (remember conferences? Those were the days) is out. Not an Elixir talk. More a "make your life deliberate" talk.
1
9
55
@pragdave
Dave Thomas
8 years
Tweet media one
3
37
48
@pragdave
Dave Thomas
4 years
Thanks for saying this, Ward. I have boycotted them from day one. The entire idea of an "organization to represent 'agile' (the noun)" is oxymoronic.
@WardCunningham
Ward Cunningham
4 years
I'm outraged that the Agile Alliance Board of Directors would claim to be the "keepers of the Agile Manifesto". As an industry association they serve only their members. Their recent mailing might have some good words about equity but they don't know their own history.
20
70
274
0
14
51
@pragdave
Dave Thomas
7 years
Emacs users: I’ve been looking for this for a while: (via )
0
12
52
@pragdave
Dave Thomas
10 years
1995: I was writing "",${$href}{$_},… 2015: I just wrote $(() => { $(".x").hide() }); We've come such a long way in such a short time
5
68
47
@pragdave
Dave Thomas
7 years
Plugged my cheap raspberry pi touchscreen into my MacBook. Not only did it just work; the touchscreen controls the cursor...
Tweet media one
2
3
51
@pragdave
Dave Thomas
6 years
This is how functions _should_ be written: Midnight takes your heart and your soul While your heart is higher than your soul Take your soul from your heart Give back your heart
0
14
48
@pragdave
Dave Thomas
8 years
Tonight's sunset looks like the earth now orbits Jupiter.
Tweet media one
4
11
44
@pragdave
Dave Thomas
8 years
I wanted to play with generators and streams, so I wrote a property-based testing library for Elixir.
3
22
51
@pragdave
Dave Thomas
9 years
In programing, when you're 90% complete, you still have 90% of the work ahead. In devops, when you're 90% complete you haven't even started.
2
55
41