Tyler Barker's Avatar

Tyler Barker

@tylerbarker.com.bsky.social

Dev in Aus πŸ‡¦πŸ‡Ί Building with #ElixirLang tylerbarker.com

303 Followers  |  339 Following  |  46 Posts  |  Joined: 19.11.2024  |  1.7972

Latest posts by tylerbarker.com on Bluesky

An office desk with two KRK studio monitors, a MacBook Pro and external display, a midi piano keyboard and split ergo keyboard, with Reason open for music making.

An office desk with two KRK studio monitors, a MacBook Pro and external display, a midi piano keyboard and split ergo keyboard, with Reason open for music making.

The real reason to get a split keyboard 🧠

19.07.2025 10:22 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Phoenix LiveView 1.1 is an exciting release in a lot of ways, but the highlight for me is the JS is getting types! Huge thanks to the maintainers πŸ’œ

github.com/phoenixframe...

15.07.2025 23:21 β€” πŸ‘ 18    πŸ” 4    πŸ’¬ 0    πŸ“Œ 0

Have you tried the agentic editing in @zed.dev? Pretty incredible.

22.06.2025 09:06 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Thanks Rodrigue! Really appreciate that :)

18.04.2025 12:01 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Indefinite Hiatus - Tyler Barker For anyone following my work, it will have become quite obvious in recent months that Prototape, and the Tape Echoes podcast/blog has received exactly zero updates. I’m not quite ready...

Indefinite Hiatus: tylerbarker.com/posts/indefi...

18.04.2025 02:31 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

So I've mentioned that I'm working on a new library for extremely pluggable/composable LLM workflows, especially agentic ones. I'm getting closer to opening that up. One thing that underpins this is the ability to use NimbleOptions for function calling and structured outputs via JSONSchema. 1/2

01.04.2025 15:05 β€” πŸ‘ 9    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Preview
GitHub - mixmark-io/turndown: πŸ› An HTML to Markdown converter written in JavaScript πŸ› An HTML to Markdown converter written in JavaScript - mixmark-io/turndown

I’ve found for cases like this it’s pretty effective to create a project a curate a knowledge base to fill the holes. Find the best docs, blog posts, etc and convert them to markdown: github.com/mixmark-io/t...

You’ll usually need to tidy up the resulting MD, but still.

24.03.2025 10:56 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I do not like the Notion API. I do not like it one bit.

18.03.2025 04:12 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

Vibrating with excitement expert-lsp.org #ElixirLang

09.03.2025 11:52 β€” πŸ‘ 53    πŸ” 11    πŸ’¬ 2    πŸ“Œ 1

I’ve seen Membrane! Looks really cool. Been meaning to integrate it into Prototape for a while just haven’t got around to it πŸ˜…

25.02.2025 09:08 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Plaintext formatted to read as a table, outlining the WAV file specification. It reads:
```
WAV File Format Structure
------------------------

Position  | Sample Value | Description
----------|-------------|-------------
1-4       | "RIFF"      | Marks the file as a riff file. Characters are each 1 byte long.
5-8       | File size   | Size of the overall file - 8 bytes, in bytes (32-bit integer).
          | (integer)   | Typically, you'd fill this in after creation.
9-12      | "WAVE"      | File Type Header. For our purposes, it always equals "WAVE".
13-16     | "fmt "      | Format chunk marker. Includes trailing null
17-20     | 16         | Length of format data as listed above
21-22     | 1          | Type of format (1 is PCM) - 2 byte integer
23-24     | 2          | Number of Channels - 2 byte integer
25-28     | 44100      | Sample Rate - 32 bit integer. Common values are 44100 (CD),
          |            | 48000 (DAT). Sample Rate = Number of Samples per second, or Hertz.
29-32     | 176400     | (Sample Rate * BitsPerSample * Channels) / 8
33-34     | 4          | (BitsPerSample * Channels) / 8
          |            | 1 - 8 bit mono
          |            | 2 - 8 bit stereo/16 bit mono
          |            | 4 - 16 bit stereo
35-36     | 16         | Bits per sample
37-40     | "data"     | "data" chunk header. Marks the beginning of the data section.
41-44     | File size  | Size of the data section.
          | (data)     |

Note: Sample values shown are for a 16-bit stereo source.
```

Plaintext formatted to read as a table, outlining the WAV file specification. It reads: ``` WAV File Format Structure ------------------------ Position | Sample Value | Description ----------|-------------|------------- 1-4 | "RIFF" | Marks the file as a riff file. Characters are each 1 byte long. 5-8 | File size | Size of the overall file - 8 bytes, in bytes (32-bit integer). | (integer) | Typically, you'd fill this in after creation. 9-12 | "WAVE" | File Type Header. For our purposes, it always equals "WAVE". 13-16 | "fmt " | Format chunk marker. Includes trailing null 17-20 | 16 | Length of format data as listed above 21-22 | 1 | Type of format (1 is PCM) - 2 byte integer 23-24 | 2 | Number of Channels - 2 byte integer 25-28 | 44100 | Sample Rate - 32 bit integer. Common values are 44100 (CD), | | 48000 (DAT). Sample Rate = Number of Samples per second, or Hertz. 29-32 | 176400 | (Sample Rate * BitsPerSample * Channels) / 8 33-34 | 4 | (BitsPerSample * Channels) / 8 | | 1 - 8 bit mono | | 2 - 8 bit stereo/16 bit mono | | 4 - 16 bit stereo 35-36 | 16 | Bits per sample 37-40 | "data" | "data" chunk header. Marks the beginning of the data section. 41-44 | File size | Size of the data section. | (data) | Note: Sample values shown are for a 16-bit stereo source. ```

An Elixir code sample that showcases the power of pattern matching binaries as bitstrings - in this case for a WAV audio file. The code reads:
```
<<"RIFF",
  chunk_size::little-size(32), 
  "WAVE", 
  "fmt ", 
  subchunk1_size::little-size(32),
  audio_format::little-size(16), 
  num_channels::little-size(16), 
  sample_rate::little-size(32),
  byte_rate::little-size(32), 
  block_align::little-size(16), 
  bits_per_sample::little-size(16), 
  data_chunk::binary>> = File.read!("./banger.wav")
```

An Elixir code sample that showcases the power of pattern matching binaries as bitstrings - in this case for a WAV audio file. The code reads: ``` <<"RIFF", chunk_size::little-size(32), "WAVE", "fmt ", subchunk1_size::little-size(32), audio_format::little-size(16), num_channels::little-size(16), sample_rate::little-size(32), byte_rate::little-size(32), block_align::little-size(16), bits_per_sample::little-size(16), data_chunk::binary>> = File.read!("./banger.wav") ```

Maybe the most amazing thing about Elixir to me pattern matching on binaries. Parsing a WAV file is almost as simple as writing down the file spec verbatim - look at this! #ElixirLang

18.02.2025 03:21 β€” πŸ‘ 47    πŸ” 8    πŸ’¬ 6    πŸ“Œ 0

The proposed syntax for type annotations: β€˜$ Schema.t() -> Schema.t()’ πŸ˜‰

08.02.2025 20:36 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Elixir Lang's logo superimposed over Jayson Tatum exclaiming "What they gonna say now?" after winning an NBA championship, referencing instead Elixir after getting a type system.

Elixir Lang's logo superimposed over Jayson Tatum exclaiming "What they gonna say now?" after winning an NBA championship, referencing instead Elixir after getting a type system.

Saving this for the dozens of us in the NBA <> Elixir Venn diagram when that day comes.

08.02.2025 10:08 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Once #ElixirLang gets the type system I'll be making it rain $$$ every day.

08.02.2025 09:55 β€” πŸ‘ 9    πŸ” 1    πŸ’¬ 2    πŸ“Œ 0
Preview
GitHub - plausible/analytics: Simple, open source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics. Simple, open source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics. - plausible/analytics

Not sure about its relevance to phx.gen.auth but it doesn’t get much more real-world and in production than Plausible Analytics: github.com/plausible/an...

03.02.2025 04:45 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Haskell got me interested in functional programming, Elixir got me functional programming. #ElixirLang

02.02.2025 06:59 β€” πŸ‘ 15    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Huge release! πŸ’Ž

16.01.2025 21:11 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
LiveView Is Not a Zero-JS Framework, It’s a Zero-Boring-JS Framework - Tyler Barker A recent Twitter discussion about the β€œceiling” of server-side rendered frameworks like Phoenix LiveViewΒ has caused quite a stir. Most of it was in good faith, and many devs have responded...

I don’t cover Solid but this article goes over a lot of the kinds of stuff I’m talking about: tylerbarker.com/posts/livevi...

15.01.2025 22:18 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Yep! It’s helpful to pass the hook object (this) into the component as a prop.

After you init signals in the component fn, setup your handleEvents with the hook obj to interact with LV, and fire any pushEvents to get initial data from LV before returning your HTML (Solid component fns run once).

15.01.2025 22:18 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Yep exactly. You just pass whatever HTMLElement you like, be it the hook.el or another you’ve queried for as the 2nd arg to render (the file needs to be JSX/TSX).

15.01.2025 20:58 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

- I've not tried using Solid with E2E reactivity because I treat each usage like an embedded micro-frontend with handleEvent + pushEvent.
- Multiple instances of a JS hook can share state if you return the hook object from a function and manage state in the closure.

15.01.2025 04:09 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

- IndexedDB is great for persisting state across connections, I use it for audio files.
- I often write hooks in a TSX file alongside Solid.js when I need it, it's very simple to render from mounted().

15.01.2025 04:09 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

I write a lot of front-end code for my LiveView app because it does client-side audio recording/playback/processing. A few takeaways:

- Phoenix esbuild is great, but I much prefer the control I get from ejecting from that to a build.js file.
- JS hooks can get you really, really far.

15.01.2025 04:09 β€” πŸ‘ 7    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Haha that’s aliased to β€œpix” for me. Got it from a mentor at my first Elixir gig in 2018 and it stuck.

14.01.2025 04:46 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

Ever wanted your LiveView components to sparkle? Use this hook: gist.github.com/tylerbarker/...

#ElixirLang #LiveView

14.01.2025 04:03 β€” πŸ‘ 11    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Apps that fall into the category of "Open at Login" have such a huge attention advantage, gotta follow those ideas.

11.01.2025 04:18 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Apologies tw_screen_size friends, I only just noticed I've been making you uninstall to get your LiveView 1.0 upgrade - just released v1.1.0 to fix! #ElixirLang

09.01.2025 07:20 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Didn't you hear? Bloke Youdontalkto joined Telegram!

09.01.2025 02:39 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
GitHub - tylerbarker/tanstack-bun-wasm-starter: An extremely shiny React app starter using Bun + Tanstack + TailwindCSS + Rust/WebAssembly + Docker. An extremely shiny React app starter using Bun + Tanstack + TailwindCSS + Rust/WebAssembly + Docker. - tylerbarker/tanstack-bun-wasm-starter

This was pretty well received, so I've made a template repo for anyone who'd like to give it a try: github.com/tylerbarker/...

Let me know if you run into any issues!

cc: @tanstack.com @ashtonlance.com @missionctrl.dev @junedomingo.bsky.social

23.12.2024 21:16 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0

Haha no stress at all.

24.12.2024 04:57 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

@tylerbarker.com is following 20 prominent accounts