<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: joshprice</title><link>https://news.ycombinator.com/user?id=joshprice</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 13 Jul 2026 01:52:56 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=joshprice" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by joshprice in "Lua for Elixir"]]></title><description><![CDATA[
<p>Likewise! ElixirConfUS?</p>
]]></description><pubDate>Thu, 15 May 2025 17:44:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=43997454</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43997454</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43997454</guid></item><item><title><![CDATA[New comment by joshprice in "Lua for Elixir"]]></title><description><![CDATA[
<p>This is awesome! Can't wait to find some use cases to embed a sandboxed and safe mini Lua language in our apps.<p><a href="https://hexdocs.pm/lua/Lua.html" rel="nofollow">https://hexdocs.pm/lua/Lua.html</a></p>
]]></description><pubDate>Thu, 15 May 2025 14:04:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=43995221</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43995221</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43995221</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Glad to hear you got a new project started, but let's address the ick factor.<p>When you define a relationship like `has_many :representatives`, Ash does’t create `representative_id` on the destination resource, we only validate that it exists and meets some criteria.<p>No resource <i>ever</i> modifies another resource, so you have to define the id on the other side using `belongs_to` which modifies it's own resource only adding the `respresentative_id` attribute with this<p>`belongs_to :representative, Representative`<p>If you need custom field names, you can override them:<p>`has_many :representatives, MyApp.Representative, destination_attribute: :custom_reference_id`<p>The docs explain more:<p><a href="https://hexdocs.pm/ash/relationships.html#belongs-to" rel="nofollow">https://hexdocs.pm/ash/relationships.html#belongs-to</a><p><a href="https://hexdocs.pm/ash/relationships.html#has-many" rel="nofollow">https://hexdocs.pm/ash/relationships.html#has-many</a></p>
]]></description><pubDate>Thu, 15 May 2025 11:46:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=43994004</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43994004</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43994004</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Ash was definitely inspired by Rails but takes the seed of those ideas much further. So far that it starts feeling like a flexible and extensible domain modelling language and application configuration tool. It also happens to produce a working Elixir application using the best of the Elixir ecosystem.<p>It's funny that you say it sounds like low-code, because we've often said it's low-code tool but for software engineers. So when you inevitably hit the wall of a proprietary no-code/low-code platform, Ash can let you extend the framework or just solve the problem by writing functions as you like.<p>Once you appreciate the Ash way though, be warned! It's very hard to go back...<p>The gap it solves is having an opinionated, UI agnostic way of building your application layer. Phoenix has very limited opinions on how to write your application, and the team has stated that "Phoenix is NOT your application". Ash basically is your app, and Phoenix is the web frontend.<p><a href="https://elixirforum.com/t/what-do-they-actually-mean-when-they-say-phoenix-is-not-your-application/11743" rel="nofollow">https://elixirforum.com/t/what-do-they-actually-mean-when-th...</a></p>
]]></description><pubDate>Thu, 15 May 2025 00:00:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=43990465</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43990465</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43990465</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>There are some fun Easter Eggs in there for the truly curious :)<p>That's a great suggestion, the one-liner is cute but isn't quite as readable and explanatory as your multi-line version.<p>Not to mention, the one-liner doesn't show off the true power of igniter -- composability and additive AST patching codegen.<p>Thanks!</p>
]]></description><pubDate>Wed, 14 May 2025 23:51:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=43990401</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43990401</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43990401</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Good catch! The issue is that we list Phoenix and Phoenix LiveView but LiveView doesn’t have its own logo AFAIk</p>
]]></description><pubDate>Wed, 14 May 2025 20:06:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43988643</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43988643</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43988643</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>This is exactly why honest feedback is super valuable. If we don't know where new users get stuck or confused then we can't make it better for the next person.<p>We'll definitely be looking at how to make it even better, because the Igniter tasks are intended to make things easier and should help explain how to get started effectively and be productive as quickly as possible.<p>Have you got any thoughts on how we could improve this? Perhaps a suggestion of running the generate domain or resource mix task next once the install is done?</p>
]]></description><pubDate>Wed, 14 May 2025 14:42:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=43985142</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43985142</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43985142</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>This is one of the earliest projects we did with Ash. It's a really big app and the customer architect was convinced that if we didn't use Ash then they'd ultimately end up building some custom version of what Ash provides.<p><a href="https://alembic.com.au/case-studies/from-paper-to-precision-workflows" rel="nofollow">https://alembic.com.au/case-studies/from-paper-to-precision-...</a></p>
]]></description><pubDate>Wed, 14 May 2025 14:16:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=43984829</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43984829</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43984829</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>I'm honestly really sad to hear you've had a bad time. My apologies.<p>Quite a few users have commented that the free support in Discord is incredibly fast and comprehensive. Zach responds unreasonably quickly and often you've run into a bug or unclear documentation that is fixed virtually instantly.<p>Like Zach mentioned, please help us understand where your challenges are and we'll do our best to help out. We can only improve things for everyone if we know where to focus our attention.<p>At the risk of being called a shill, if you need more reliable paid support then please reach out, we have a service for this which teams find really valuable. <a href="https://ash.alembic.com.au/ash-premium-support" rel="nofollow">https://ash.alembic.com.au/ash-premium-support</a></p>
]]></description><pubDate>Wed, 14 May 2025 14:09:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=43984754</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43984754</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43984754</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Understand the hesitation, but this is just a convenience script to make installation a shell one-liner and totally optional.<p>Just click on the hard to spot "Already have an app?" link and it will show you the individual mix tasks you can run yourself.<p>I would argue that this is the preferred way to see what's happening and avoid running a remote shell script for the security conscious. ;)<p>Also the generated project name is completely random and intended to be humourous.</p>
]]></description><pubDate>Wed, 14 May 2025 13:46:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=43984487</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43984487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43984487</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>It's definitely worth taking another look.<p>The Ash DSLs get full autocomplete from your LSP and so make sure this is setup. The new Elixir LSP called Expert - <a href="https://expert-lsp.org/" rel="nofollow">https://expert-lsp.org/</a> is coming soon and aims to make this a much smoother process.<p>The documentation has been overhauled multiple times and is constantly being improved. If you encounter issues please raise an issue or a PR, knowing where users get confused is important for improving the docs for everyone.<p>One issue that new users often run into is that Ash is spread over multiple packages for different extensions and Hex didn't support multiple package search, which is being currently improved. So double check you're searching in the right package. Dash can help with this offline if you have it.<p>Tidewave (<a href="https://tidewave.ai/" rel="nofollow">https://tidewave.ai/</a>) MCP can help with doc search too if you are using a LLM/AI assisted editor like Cursor, Windsurf or Claude Code, etc. We also have some Ash specific announcements this week along these lines... ;)</p>
]]></description><pubDate>Wed, 14 May 2025 13:41:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=43984426</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43984426</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43984426</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>There is definitely room for the Phoenix Form helpers to do more. Iommi looks like a really interesting approach I hadn't seen before.<p>For example AshAdmin (<a href="https://github.com/ash-project/ash_admin">https://github.com/ash-project/ash_admin</a>) takes these ideas further and generates a full super admin interface for you. It's a bit clunky and you should ultimately write your own admin, but it lets you focus on the important parts first.<p>For anyone else who hasn't seen it Iommi's motivation and docs are here:<p>Motivation <a href="https://kodare.net/2024/09/11/why-we-wrote-a-new-form-library-for-django.html" rel="nofollow">https://kodare.net/2024/09/11/why-we-wrote-a-new-form-librar...</a><p>Iommi Forms <a href="https://docs.iommi.rocks/forms.html" rel="nofollow">https://docs.iommi.rocks/forms.html</a><p>Iommi Github repo <a href="https://github.com/iommirocks/iommi">https://github.com/iommirocks/iommi</a></p>
]]></description><pubDate>Wed, 14 May 2025 13:30:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=43984310</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43984310</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43984310</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Check out the docs for the Ash Igniter mix tasks, they will generate skeleton code for you:<p><a href="https://hexdocs.pm/ash/Mix.Tasks.Ash.Gen.Resource.html" rel="nofollow">https://hexdocs.pm/ash/Mix.Tasks.Ash.Gen.Resource.html</a> will generate a new resource for example (and the Domain if it doesn't already exist).<p>Check the side bar for other generator mix tasks.<p>Thanks for the feedback, we'll try and make this DX clearer!</p>
]]></description><pubDate>Wed, 14 May 2025 13:18:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=43984194</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43984194</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43984194</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>So Ruby off Rails??</p>
]]></description><pubDate>Wed, 14 May 2025 13:09:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=43984108</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43984108</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43984108</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Absolutely, if your customers want websites or ecommerce shops, then that's totally true.<p>The context here is that Alembic builds custom business applications where these problems have not typically been solved before. We want to spend most of our development time on the core business problem not rebuilding things like Content management systems or Ecommerce shopfronts.</p>
]]></description><pubDate>Wed, 14 May 2025 12:22:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=43983651</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43983651</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43983651</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>That's really helpful feedback and there are few comments mentioning exactly this and you're right, we can definitely explain more up front on the landing page so it's more obvious.<p>Thanks!</p>
]]></description><pubDate>Wed, 14 May 2025 12:17:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=43983616</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43983616</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43983616</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>AshGraphQL (<a href="https://github.com/ash-project/ash_graphql">https://github.com/ash-project/ash_graphql</a>) errors are relatively customisable<p><a href="https://hexdocs.pm/ash_graphql/handle-errors.html" rel="nofollow">https://hexdocs.pm/ash_graphql/handle-errors.html</a></p>
]]></description><pubDate>Wed, 14 May 2025 12:13:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=43983579</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43983579</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43983579</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Rails are definitely inspiration for the way Ash DSLs are used to model your business domain, but Ash takes this idea way further.<p>Ash models nouns and relationships like ActiveRecord does, but it also models Domains (think DDD bounded contexts) and Resources with the verbs or "actions" of your system.<p>It also lets you configure generated APIs and your data layer (eg Postgres) so it doesn't stop at just how an ORM may typically model your data.</p>
]]></description><pubDate>Wed, 14 May 2025 12:08:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=43983533</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43983533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43983533</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>Oh hey Scott! :)</p>
]]></description><pubDate>Wed, 14 May 2025 12:04:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=43983499</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43983499</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43983499</guid></item><item><title><![CDATA[New comment by joshprice in "Ash Framework – Model your domain, derive the rest"]]></title><description><![CDATA[
<p>"Magic" in software can be good or bad. I've tried to explain the apparent "dark magic" at the end of this article.<p><a href="https://alembic.com.au/blog/essence-of-ash-framework" rel="nofollow">https://alembic.com.au/blog/essence-of-ash-framework</a><p>Would love any feedback as to whether this helps allay your fear and dread!<p>Spark is the DSL library that takes a DSL definition as Elixir structs and builds the DSL for you which in turn takes the written DSL and converts to a standard and simple data structure. So there are fewer macros than you might expect. Ash extensions just introspect that generated data structure with ordinary Elixir code.<p>The main macro in Ash core itself is the `expr` macro which enables portable declarative predicates which can be used in data layers like AshPostgres for filtering in SQL queries. If your data layer is simple like ETS or a CSV then it runs as Elixir code.</p>
]]></description><pubDate>Wed, 14 May 2025 11:59:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=43983447</link><dc:creator>joshprice</dc:creator><comments>https://news.ycombinator.com/item?id=43983447</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43983447</guid></item></channel></rss>