<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[More Than Code]]></title><description><![CDATA[Blog by @knownasilya about life and web development.]]></description><link>https://ilyaradchenko.com</link><generator>RSS for Node</generator><lastBuildDate>Mon, 18 May 2026 03:21:34 GMT</lastBuildDate><atom:link href="https://ilyaradchenko.com" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate><item><title><![CDATA[Tumbled]]></title><description><![CDATA[Plain brown, blowing on the ground  
Yellow fleeting, a life worth remembering  
A green desire, underneath the pile  
Order created, shouldn't be forsaken 
Decay beneath, darkness for new life  
Nourishment provided, rest easy for a while]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cmdetngjk0003ux3pf1bpnb5k</link><guid isPermaLink="false">users/knownasilya/notes/cmdetngjk0003ux3pf1bpnb5k</guid><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate></item><item><title><![CDATA[Blade Bound]]></title><description><![CDATA[Spent two weeks working with 3 of my coworkers on a game jam. We build a small game with Game Maker Studio, the game is inspired by Zelda.
You can give it a spin here: [Blade Bound](https://ectocoolerguy.itch.io/blade-bound). If you can get through it (with the bugs) maybe find me on X and let me know how you liked it.

> Note: there are a couple annoying bugs that we didn't catch before the submission deadline. Hitting left and then right, basically a 180 crashes the game. Also sometimes it's easy to get out side the bounds of the room and then you are stuck there. Can't fix these till the 14th, since that's when judging is supposed to end.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm6n43hpv0009k5f836gnetyn</link><guid isPermaLink="false">users/knownasilya/notes/cm6n43hpv0009k5f836gnetyn</guid><pubDate>Sun, 02 Feb 2025 00:00:00 GMT</pubDate></item><item><title><![CDATA[Weeds]]></title><description><![CDATA[Like weeds in a garden, so weeds in my life require no work on my part, just neglect.

The technical term is entropy, basically anything you don't maintain will degrade. This is how the world works after the fall, and it's good to keep in mind.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm51fkdnf0001k5f8leg3r7qv</link><guid isPermaLink="false">users/knownasilya/notes/cm51fkdnf0001k5f8leg3r7qv</guid><pubDate>Mon, 23 Dec 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Trees]]></title><description><![CDATA[He created them, knowing one day he'd hang on one  
Blood runs down like sap, between the grooves of bark  
Forgive them, He cries out, they know not what they do  
Still as the tree, yet the husk will birth a tree, in days three  
Glorious fractals, growing into a mountain, surely it is]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm3l44wsk000h6a9huylamjij</link><guid isPermaLink="false">users/knownasilya/notes/cm3l44wsk000h6a9huylamjij</guid><pubDate>Sun, 17 Nov 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Build on the URL]]></title><description><![CDATA[Feels like I keep coming back to the URL quite often as a topic that I write on, and there's a reason for that. Over the last 13 years of my professional software engineering career I've learned to lean on the URL when working with the web, and every time I've implemented a feature while leaning on it, I've been commended because of the unexpected "side effect features" that came out as a result. Here's a few reasons why you should build on the URL.

## Shareable

It's a little more work to build on the URL, but you'll be "using the platform" if you do. This allows users of your app to share snapshots of your app with other users. Features like this are used by all, but few apps actually provide good support for sharing. If you can go beyond the basics, and lean on the URL throughout your app it'll be a blessing to someone out there.

While usually we think of sharing as something done with other people, that isn't always the case, a user might want to share a URL with their future selves, via a bookmark. This allows for custom use-cases that you as the developer might not have thought of, but a bookmark solves a problem for a user because you provided access to changing that state externally.

## Debuggable

Ding! You glance at your phone, a new email has just arrived. Randy loves your MapMakers app, but today he ran into an issue. His email says that the map marker is not showing up in the right place for the latest listing he created. You ask him for more information, but you don't ask for the URL, because you know it isn't helpful.

Now what if you had a useful URL? You might be able to get into the same or very similar state that your user encountered the bug. It gives you more of a starting point to look from, and if your data loads based on the URL you have your next place you can look to confirm the correct data has loaded. Already you've eliminated a few possibilities, or maybe even found the bug. Now combine this with something like Sentry or DataDog, and you have a URL for all of the errors your users encounter but didn't send you an email.

## Scaffolding 

When you start thinking about a feature, start with the URLs you'll need, it'll help you flesh out the designs. You can even write tests for those URLs before you have the pages (doing some TDD) built, giving you a progress indicator of sorts. The URL is the smallest primitive you can use to think about a feature you're building, and it'll help you not miss critical pieces. 

Go out there, and build your first URL driven feature!
]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm37ckj6d0001lfpd8hwxwnq2</link><guid isPermaLink="false">users/knownasilya/notes/cm37ckj6d0001lfpd8hwxwnq2</guid><pubDate>Wed, 13 Nov 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Plodding]]></title><description><![CDATA[Along the way I plod  
Not fast, but steady and sincere  
One foot in front of another  
Passing those who've given up their sprint  
Investing in my blood, onward  ]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm3fbyne800016a9hz9m8vcot</link><guid isPermaLink="false">users/knownasilya/notes/cm3fbyne800016a9hz9m8vcot</guid><pubDate>Tue, 12 Nov 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[In The Valley]]></title><description><![CDATA[The last couple weeks have been pretty difficult around here. We were in the process of closing on our house and a fitting on the toilet water hose burst and flooded the house we were about to close on the next day. At the moment we are in limbo, because we sent our things to South Carolina, which we then had to receive. So now we're renting the house we were going to purchase in SC, and dealing with the restoration efforts and insurance in MI. Not how we planned it, but we know that God uses the difficulties to refine and forge us into his people. So we lean on him as much as we can, and repent when we don't.

> The steadfast love of the LORD never ceases;
his mercies never come to an end;
they are new every morning;
great is your faithfulness.

Lamentations 3:22–23]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm2xnks4k000c1257aoqif6lj</link><guid isPermaLink="false">users/knownasilya/notes/cm2xnks4k000c1257aoqif6lj</guid><pubDate>Thu, 31 Oct 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Innovation thoughts]]></title><description><![CDATA[One of the biggest flaws in the current idea of progress is that it ignores progress from all of human history. What I mean is that there is hardly any thought to why we would do something a certain way or wondering how we did things in the past and why we did them that way. This is most evident in new fields like software engineering, where every problem seems to need a technical solution. But ignoring previous solutions we tend to only partially solve the problem, and worse we might introduce new problems because of our ignorance.

---

Recently heard the term "The Great Conversation" and I think it applies to how we think about progress/innovation. Why are we even innovating and what is the purpose, goals, and results of those innovations, we should be thinking about these things before we pursue anything.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clvbdripv0009f534w6pqhs64</link><guid isPermaLink="false">users/knownasilya/notes/clvbdripv0009f534w6pqhs64</guid><pubDate>Mon, 16 Sep 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Scapegoat]]></title><description><![CDATA[Recently learned about [Rene Girard](https://iep.utm.edu/girard/) from the Choc Knox Unplugged podcast. Really interesting thoughts on mimetic desire and the idea of a scapegoat. In Judaism, the scapegoat would be cast out into the desert taking the sins of the people with it. Jesus was that scapegoat, cast out of the city, killed on the cross, taking the sins of the world. Since Jesus rose from the dead and is physically with the father, that means he was the ultimate scapegoat and no scapegoat is needed any longer. It's the reason that I can forgive my brother, without taking vengence or staying bitter. Truly a fascinating topic!]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm0t0agn20001bf72navd8t5d</link><guid isPermaLink="false">users/knownasilya/notes/cm0t0agn20001bf72navd8t5d</guid><pubDate>Sun, 08 Sep 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Bed time rituals]]></title><description><![CDATA[Was reading Chuck's [latest post](https://cagrimmett.com/2024/08/13/indieweb-carnival-rituals/) and whole heartedly agree that kids love routine. I have to keep reminding myself of this, while my wife Anna is great that remembering this and helps me remember too. When the kids do something different, like watch a movie late, or just play late and we don't do a consistent routine, I notice they usually get grumpy and externally are selfish in their actions. 

I need to be more consistent with bed time. Generally I read them a book, and we pray. Sometimes I've been doing memory bible verses, but have not been consistent in that. This is a reminder to myself to try to be more consistent in the time, and the activities before bed.

P.S. Looking forward to more post from Chuck, even if not as regular as before.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm0rab0bp0007e7p2ushz6ujl</link><guid isPermaLink="false">users/knownasilya/notes/cm0rab0bp0007e7p2ushz6ujl</guid><pubDate>Fri, 06 Sep 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Lessons from the garden]]></title><description><![CDATA[Always put a fence around a bed that isn't raised (not waist high) when planting things that deer will eat. Learned that deer love to eat corn after it has mostly grown and there are little baby corn showing up (when you're most invested). They just trample the stalks and eat the corn. They also love wheat...]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cm0o81npj0003e7p2h4chezhs</link><guid isPermaLink="false">users/knownasilya/notes/cm0o81npj0003e7p2h4chezhs</guid><pubDate>Wed, 04 Sep 2024 00:00:00 GMT</pubDate></item><item><title><![CDATA[Roman Catholicism]]></title><description><![CDATA[This is not a light hearted post, because I have family, coworkers, and twitter acquaintances that are Catholic. I want to address my concerns that the Catholic faith is not worshiping the God of the bible. This doesn't mean there aren't Christians that are Catholics (God is merciful). I've noticed more trends of Protestants moving to Catholicism, as well as more visibility in "venerating" Mary, which heightened my sense of concern.

My hope is that we worship the same God together, that we worship Jesus alone. Catholicism has many things to admire, but the reformation happened because of the drift from biblical worship (works based salvation), and the ultimate goal of the reformation is to bring the Catholicism back to Christ, not to divide. It's good to have cathedrals, it's good to have tradition, it's good to honor our fathers (godly men of the past), the catholic land movement is cool, and yes the evangelical church has done all of those very poorly (among other things). What's more important though? The core of the faith or the periphery? If we have the core correct, I think the periphery will improve.

I recently listened to a podcast episode about this very topic, and the author Dale Partridge speaks much clearer then I could about the concerns, I hope you listen to it. 

👉 [Podcast episode here](https://open.spotify.com/episode/4uXiZOsUV2JHoacpWcJNtx?si=NmLrVn1YStyxKXvyKhy_9Q)
]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clxulh8uh0001xxv2pm07lnep</link><guid isPermaLink="false">users/knownasilya/notes/clxulh8uh0001xxv2pm07lnep</guid><pubDate>Tue, 25 Jun 2024 16:02:04 GMT</pubDate></item><item><title><![CDATA[Gardening 2024]]></title><description><![CDATA[This year I've planted a few things from seed, directly in the ground since I don't have grow lights or anything yet, and things are coming up. It's exciting to see that. Along with the seeds, we've purchased a couple blueberry plants, and a haskap. Those we planted close to the red pine trees since the PH is better there. I'm also growing an apple tree from seed, it's still indoors since it's really small (happy accident, we found the seed already sprouting).

New this year, is using a tiller, which I got from my MIL. First time tilling anything in my life. I did a section for growing wheat, which Isaiah (my 7yo) really wanted to grow. 

I still have more seeds to plant!

---

Beginning of June, and most of the wheat didn't come up (I forgot you should plant more then one seed). The fruiting bushes are doing well so far, and the garden is feeling more full. Recently I planted sunflower seeds, but the chipmunks dug up all the seeds in one area (the other place near the compost is still intact thankfully). Lots of growth everywhere, pictures incoming!]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clvwj015c0003b4w5ohoevf6e</link><guid isPermaLink="false">users/knownasilya/notes/clvwj015c0003b4w5ohoevf6e</guid><pubDate>Tue, 07 May 2024 15:08:50 GMT</pubDate></item><item><title><![CDATA[Ten commandments define what love looks like]]></title><description><![CDATA[The ten commandments define what it means to love God and people. That's why Jesus sums up the greatest command like that. Also saying later that if you love him, you will keep his commandments.

Some [good verses](https://www.esv.org/Matthew+22:34%E2%80%9340;Mark+12:28%E2%80%9334;Luke+10:25%E2%80%9328;John+14:15;John+15:10/) on the topic.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clv7jwm0a0001p4uuxv49oa08</link><guid isPermaLink="false">users/knownasilya/notes/clv7jwm0a0001p4uuxv49oa08</guid><pubDate>Sat, 20 Apr 2024 03:39:55 GMT</pubDate></item><item><title><![CDATA[Archegos waitlist is live ]]></title><description><![CDATA[This site uses Archegos, which is a digital garden/blog, and OI'll be offering it as a self install product you pay for once (and get updates and bug fixes for one year).

I plan to release a discounted private alpha for users on the waitlist, sign up [here](https://knownasilya.podia.com/archegos)]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clv4hc1ym0009gpdtdv4u8g60</link><guid isPermaLink="false">users/knownasilya/notes/clv4hc1ym0009gpdtdv4u8g60</guid><pubDate>Thu, 18 Apr 2024 00:04:39 GMT</pubDate></item><item><title><![CDATA[Duties and Quests]]></title><description><![CDATA[Recently Simon Sarris posted this tweet:

![tweet](https://ilyaradchenko.com/resources/note-images/cluycmw190002az4x3n4x7mta "screenshot of tweet")

There is lots of truth in this statement, and as a culture we've forgotten most of it. In the west, duties have mostly disappeared. Duty to God, duty to family, duty to church, duty to your community, duty to country; most of these are not just neglected but actively discouraged. God has been removed from every area of life, even in the church we minimize his holiness and law. It only goes down hill from there, as you'd expect, if you had read the Bible.

It makes sense why suicides are up, drug addiction is up, screen addiction is up, pornography addiction is up, fathers are neglecting their families, we have no God so we have no purpose. In Genesis, God gave a command:

> The LORD God took the man and put him in the garden of Eden to work it and keep it. --- Genesis 2:15 (ESV)

And then after the flood, God makes a covenant with Noah, and says something similar:

> And you, be fruitful and multiply, increase greatly on the earth and multiply in it.” --- Genesis 9:7 (ESV)

After Jesus is resurrected from the dead, he says the following before he goes to the Father:

> Now the eleven disciples went to Galilee, to the mountain to which Jesus had directed them. And when they saw him they worshiped him, but some doubted. And Jesus came and said to them, “All authority in heaven and on earth has been given to me. Go therefore and make disciples of all nations, baptizing them in the name of the Father and of the Son and of the Holy Spirit, teaching them to observe all that I have commanded you. And behold, I am with you always, to the end of the age.” --- Matthew 28:16-20

The bible gives general commands in these areas, dominion and evangelism, and both are quests in a general sense. What gifts and talents do you have? How specifically can you multiple, work and keep (build up and maintain), and spread the gospel? Every moment is a gift, and there is no time to waste. Be ambitious, think generationally, and go tell people about Jesus (you need to build relationships to do that). Multiply the gifts you are given, be a faithful servant and son. See you out there!]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cluycmw190001az4xi6ej2env</link><guid isPermaLink="false">users/knownasilya/notes/cluycmw190001az4xi6ej2env</guid><pubDate>Sat, 13 Apr 2024 17:06:29 GMT</pubDate></item><item><title><![CDATA[Reading Now]]></title><description><![CDATA[### The Confessional County: Realizing the Kingdom through Local Christendom
Author: Ray Simmons. 

See details about the book [here](https://www.abebooks.com/9781513684758/Confessional-County-Realizing-Kingdom-Local-1513684752/plp).

[Currently reading, 30% of the way, 4/4/2024]

#### Thoughts so far

Lots of good nuggets to glean from this book. One of the biggest impacts for me has been remembering that God works in blessings/curses, which is obvious when you read the Bible, but somehow along the way I forgot that, or maybe it has to do with me not taking the old testament as seriously as I should have.

> “Do not think that I have come to abolish the Law or the Prophets; I have not come to abolish them but to fulfill them. For truly, I say to you, until heaven and earth pass away, not an iota, not a dot, will pass from the Law until all is accomplished.  Therefore whoever relaxes one of the least of these commandments and teaches others to do the same will be called least in the kingdom of heaven, but whoever does them and teaches them will be called great in the kingdom of heaven. For I tell you, unless your righteousness exceeds that of the scribes and Pharisees, you will never enter the kingdom of heaven. -- Matthew 5:17-20 (ESV)

---

Can buy a [downloadable MP3](https://gatherandgrow.us/product/the-confessional-county-ray-simmons/) (unaffiliated) if you do better with audio books.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cluld4s8c0001owosdz6vf6ap</link><guid isPermaLink="false">users/knownasilya/notes/cluld4s8c0001owosdz6vf6ap</guid><pubDate>Thu, 04 Apr 2024 14:59:24 GMT</pubDate></item><item><title><![CDATA[Why write?]]></title><description><![CDATA[I enjoy writing (doesn't mean I'm good at it), but I have yet to build a habit out of it. I plan on changing that, because I can see the usefulness of writing. When you write you are forced to organize your thoughts so others can understand what you are trying to communicate. Writing will help with verbal communication, thinking, and convincing others of your ideas. It'll also help with any relationships you have, when you can communicate clearly. Don't fall into the trap of using AI to write for you; do your own thinking, grow, push yourself, and do hard things, because you wont regret it.


This is on of the reasons I'm working on writing tools like [Archegos](https://knownasilya.podia.com/archegos) and Typelog.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clucy2hob0001n3bapwp98epv</link><guid isPermaLink="false">users/knownasilya/notes/clucy2hob0001n3bapwp98epv</guid><pubDate>Fri, 29 Mar 2024 17:35:33 GMT</pubDate></item><item><title><![CDATA[Focus on right government first]]></title><description><![CDATA[Christianity has been called the "Upside-down Kingdom", and for good reason.

> Therefore I will give him a portion among the great,
> and he will divide the spoils with the strong,
> because he poured out his life unto death,
>
> and was numbered with the transgressors.
> For he bore the sin of many,
> and made intercession for the transgressors.
>
> Isaiah 53:12

Along with many other references to using the weak to shame the strong, the meek inheriting the earth, the least are the greatest, last being first, and the kingdom conquering without violence but by changing hearts.

That last one is interesting, because it's different from culture which wants to enforce rules from the top and make people obey them by force, coercion, or manipulation. Christ changes the heart of man, and the changes there spread out to the rest of his life.

The bible is very political, it wants all of your life to be placed under the rule of Christ. It defines every sphere of government, and how that sphere should operate, we've just chosen to ignore those passages. Thinking that we were in a neutral world, we deceived ourselves, because nothing is neutral. Culture is always trying to influence you to it's values. Are we tired of the manipulation, overreach and totalitarianism of our government? We can't rush in and try to change things, it won't stick.

We must start in our own hearts, and repent of our unbelief and wrong worship. Self-rule is where it starts, once we can rule ourselves like Christ has shown in the word, we can start to lead our families (don't wait for perfection, you can do both simultaneously, but you must do both). We must think generationally and covenantally, it's a long game. Build our families, pass on the word and build traditions that worship God. We must pass not only our inheritance, but our faith and our work to our children, they shouldn't start from scratch (just learning about covenant succession).

Only then will our work be blessed and not cursed, we must be faithful to the covenants we entered. The symptom will be a healthy civil sphere.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltp3wggw0015n3bbnie16wzc</link><guid isPermaLink="false">users/knownasilya/notes/cltp3wggw0015n3bbnie16wzc</guid><pubDate>Wed, 13 Mar 2024 01:12:21 GMT</pubDate></item><item><title><![CDATA[Bad Habits and FOMO]]></title><description><![CDATA[I have to be honest, I've only picked up on this term about a year ago (maybe
longer) and at that time I didn't have any connection with the idea. A couple of
months ago, I inadvertently stumbled on it again while reading [Atomic Habits by
James Clear](https://jamesclear.com/atomic-habits), and what an impact it had.

One of the ideas in that book talks about cues and cravings, in regard to making
good or bad habits. An example that James makes is in regard to checking your
phone, it goes like this:

Cue: A phone buzzes with a new text message.
Craving: You want to learn the contents of the message.
Response: You grab the phone and read the text.
Reward: You satisfy your craving to read the message. Grabbing your phone
becomes associated with your phone buzzing.
– James Clear (Atomic Habits, page 51)This example stirred something within me
because at that time I was dealing with checking Twitter way too much. I knew
about my bad habit, of picking up the phone and opening Twitter any time there
was a free moment or a time of silence. What I didn't know, was the reasoning
behind why I was checking it so often. Mainly because I had not taken the time
to analyze my habits.

The process of behavior change always starts with awareness. You need to be
aware of your habits before you can change them.
– James Clear (Atomic Habits, page 66)This is where FOMO, or the fear of missing out,  comes into play. I analyzed
this bad habit (did I mention that this was a bad habit?) and realized that I
was doing it because I was afraid to miss something happening in the tech
community, and specifically the [Ember](http://emberjs.com) community. I kept
analyzing and realized that I had the same bad habit with Github, which usually
occurred after Twitter had no content. So what now?

The first step is not what  or how, but who. You need to know who you want to
be. Otherwise, your quest for change is like a boat without a rudder.
– James Clear (Atomic Habits, page 40)This section really resonated for me and
told me what I already knew. And it's this: I won't change my habits if I don't
remember (or know) who I am. Notice how I said "who I am" instead of "who I want
to be". The reason this is important to me is because I have a solid identity
that is defined by my relationship with God. I need to remember who I am (a
child of God) so that I can focus on being who I am already. This sounds a bit
strange, but in Christianity, there is an idea, "already but not yet", which
illustrates that there is an ultimate reality already, but the time-based
version of that reality is still catching up. God already sees me as His son,
even though presently I have bad habits and sin because Jesus the perfect Son of
God has paid for my sins (past, present, and future) and called me his co-heir.

I really needed to remember that my identity and worth are not in how current I
am in the Ember scene or how much I know. It's not in my job or my own vision of
my future, but my identity and worth are in my relationship with God.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltlvdsap000xn3bbcaqgcg84</link><guid isPermaLink="false">users/knownasilya/notes/cltlvdsap000xn3bbcaqgcg84</guid><pubDate>Sun, 10 Mar 2024 18:50:34 GMT</pubDate></item><item><title><![CDATA[When Components Aren't Enough]]></title><description><![CDATA[Sometimes components are too high-level, and you need to get at a specific DOM element, either for `scrollTo` or `focus`, in these situations Ember provides a lower-level primitive called an element-modifier. To get started with element modifiers you can check out existing modifiers at [EmberObserver](https://emberobserver.com/categories/modifiers) or create your own using the `ember-modifier` [library](https://github.com/ember-modifier/ember-modifier).

## Some Examples

```handlebars
<form {{autofocus}}>
  <input />
</form>
```

Which will focus the first non-disabled input that it finds (from [ember-autofocus-modifier](https://github.com/qonto/ember-autofocus-modifier)).

```handlebars
<div {{scroll-to}}>
  Some content here
</div>
```

Which will scroll to the element once it's in the DOM, and is super easy to implement:

```js
// /app/modifiers/scroll-to.js
import { modifier } from "ember-modifier";

export default modifier((element) => {
  element.scrollIntoView({
    behavior: "smooth",
  });
});
```

There is also the `ref` modifier from [ember-ref-modifier](https://www.npmjs.com/package/ember-ref-modifier) which gives you access to the element:

```handlebars
<button {{ref this "button"}} data-name="foo">
  Click me baby, one more time!
</button>

{{this.button.dataset.name}} >> "foo"
```

Along with `{{on-click-outside}}` from [ember-click-outside](https://github.com/zeppelin/ember-click-outside).

```handlebars
<div {{on-click-outside @close}}>
  Your HTML...
</div>
```

## Why Are Element Modifiers Useful?

Mainly because you can do things like:

```handlebars
{{#if this.isEditorVisible}}
  <div
    class="wysiwig-editor"
    {{did-insert this.setupEditor}}
    {{will-destroy this.teardownEditor}}
  >
  </div>
{{/if}}
```

Which handles the setup and teardown of the element, so if `isEditorVisible` turns `false` the editor initialized on our element will be properly cleaned up. This is important because the new Glimmer Components allow multiple top-level elements without any kind of fragment syntax.

> Note: I'm using [ember-render-modifiers](https://github.com/emberjs/ember-render-modifiers) in the above example. But you could create a modifier to encapsulate both the setup and teardown so reusability is easier.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltlv6sq2000vn3bbdhe2ygms</link><guid isPermaLink="false">users/knownasilya/notes/cltlv6sq2000vn3bbdhe2ygms</guid><pubDate>Sun, 10 Mar 2024 18:45:08 GMT</pubDate></item><item><title><![CDATA[Ember's Nested Routes and URLs Explored]]></title><description><![CDATA[Ember's router is powerful and a bit unique, in that it has a nested structure for the routes which build up the URL a user would see in the browser.
Given it's power, it is easy to be unsure about how to structure your routes, especially in scenarios where you have parent-child UI patterns or CRUD like
resources.

One of the patterns that I've learned is not using extra nesting when want to build out a multi-part URL structure, like `/users/1234`, which seems like it should be nested, but generally
a single level is enough. I'd structure it like this:

```js
this.route('user', { path: '/users/:userId' });
```

This puts your user "view" route at the `app/pods/user` directory (my examples will use PODS, since they are sane for routes).
The following is generally not the way I'd write my router map, even though it creates the same URL pattern.

```js
this.route('users', function () {
this.route('user', { path: ':userId' });
});
```

Unless you are showing the list of users at the same time as the selected user, which I think is a rare pattern, this is probably not the way your route should work.
The reason I wouldn't do this is because it adds unnecessary mental overhead between the list and a selected item from the list.
With my preferred pattern, if I wanted a list route, it would be a sibling to the resources.

```js
this.route('users');
this.route('user', { path: '/users/:userId' });
```

And the folder structure is sane as well:

```
app
pods
  users
  user
```

Since the two usually don't share any common UI, the common UI will probably be one route up or at the `application` route.
Well that's it! Let me know if this is how you do it or if you completely disagree.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltlv5lep000tn3bbgg3zo0v9</link><guid isPermaLink="false">users/knownasilya/notes/cltlv5lep000tn3bbgg3zo0v9</guid><pubDate>Sun, 10 Mar 2024 18:44:12 GMT</pubDate></item><item><title><![CDATA[Sharing A Parent Model Across Route Boundaries]]></title><description><![CDATA[Just last week [Alex LaFroscia](https://mobile.twitter.com/alexlafroscia) released a new addon called [Ember Context](https://github.com/alexlafroscia/ember-context) and I wanted to share some patterns that I've used in the past that this addon changes. 

## The Problem

Sometimes you have a UI where at a certain level you have multiple nested routes and they deal with one parent item. For example if you had a
blog management system that supported multiple blogs, you could have a route like `dashboard.blog.post.edit` and the `Blog` model is found at the `dashboard.blog` route. So at this point you want to use that same blog model in the other routes. Historically there has never been a great way to do this, you might think put it on a service, but then you have to register and cleanup that service since services are global. Along with that inconvenience it's also not clear where the service gets its data, it seems a bit magic.

## The Past

In the past I've tackled this problem with the `modelFor` route method, something like:

```javascript
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default class PostEditRoute extends Route {
  @service store;

  async model({ postId }) {
    let blog = this.modelFor('dashboard.blog');
    let post = await this.store.findRecord('post', postId)
    return {
      blog,
      post
    };
  }
}
```

Now I can access the blog in my template via `{{@model.blog}}`, and it all works. The issue here is that `modelFor` will return whatever data you returned in the `model` hook of the `dashboard.blog` route, and that could change to an object of items, like `{ config, blog }` and now you need to visit every `modelFor` and change the assumption there. In cases where a route doesn't have any other model data you need to fetch, you still have to add a route file and do this whole dance.

## The Present

With the new `ember-context` addon, we get to change this to something with less boilerplate, and a bit clearer about where the data is coming from.
With this addon we'd define the following in our `dashboard.blog` template:

```handlebars
<ContextProvider @key='blog' @value={{@model}}>
  {{outlet}}
</ContextProvider>
```

Now in our `dashboard.blog.post.edit` template we can use this blog model by using a helper: `{{consume-context 'blog'}}`:

```handlebars
{{#let (consume-context 'blog') as |blog|}}
  {{! work with blog here }}
{{/let}}
```

And if we wanted to access it in a controller or a component, it would be as simple as injecting the value:

```javascript
import Component from '@glimmer/component';
import { inject as context } from '@alexlafroscia/ember-context';

export default class PostEditor extends Component {
  @context('blog') blog;
}
```]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltlv39bn000nn3bb7stzbanm</link><guid isPermaLink="false">users/knownasilya/notes/cltlv39bn000nn3bb7stzbanm</guid><pubDate>Sun, 10 Mar 2024 18:42:23 GMT</pubDate></item><item><title><![CDATA[Beaker Browser The Filesystem Is The Network]]></title><description><![CDATA[I've been following a project called [Beaker Browser](https://beakerbrowser.com/), which is a browser build on top of decentralized tech called [dat](https://dat.foundation/) (yeah, a confusing name), and just wanted to write a quick post about why I think it's a really cool project. This post was inspired by a [Twitter thread](https://twitter.com/pfrazee/status/1217049494363295744) that [Paul Frazee](https://twitter.com/pfrazee) (one of the creators of Beaker) posted earlier this week.

The Beaker project is moving in a direction that is very interesting to see. The idea of a browser that gives you a "filesystem as the network" is exciting and spurs on all sorts of imaginings about what that will do for the web. There are challenges of course, like will it ever get widespread adoption, but the good it can do for people creating for the web is huge. I think that Beaker has the right mindset about what the web should be, that it should be easy to get started, easy to grow, and to promote and share content. The whole idea behind a decentralized web comes out of the current age of big monopolies and everyone using giant services that are not without privacy concerns. If you are not paying for a product, then you are most likely the product, and we are products of so many companies. The vision I think is to be able to build interconnected communities without relying on big corporations like Google, Facebook, Microsoft or Twitter.

Imagine finding a store online that sells goods, and you want to sell something as well, you duplicate their store, add your own goods, and publish it with a click of a button. It's live, no need to buy a domain or pay for a server. Sure you can buy a domain, and pay for a service to re-share your store, but you started without any barriers or need of so much knowledge to get something out there. Combine this with the plethora of nocode tools and we have a web that empowers so much creation. The problem with todays web is that it's more about consuming than creating, because it's so complex to get started building out an idea you have. I think a decentralized browser like Beaker is a step in the right direction, and we can only hope that others will follow in its footsteps.
]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltlv27p6000hn3bbau5q45sh</link><guid isPermaLink="false">users/knownasilya/notes/cltlv27p6000hn3bbau5q45sh</guid><pubDate>Sun, 10 Mar 2024 18:41:34 GMT</pubDate></item><item><title><![CDATA[Data Down, Actions Up]]></title><description><![CDATA[I hear many people asking how they can compose components, and since the Ember
Guides [http://guides.emberjs.com/] don't help us in that respect, I wrote my
own guide as a PR [https://github.com/emberjs/guides/pull/66] to the guides. I
figured that I might as well get this out to the public while I wait on it
getting merged. This will allow us to improve the guide, so feel free to leave
comments/suggestions in the PR (inline, etc).

---

Components really shine when you use them to their full potential, which is when
you compose them.
Take for example the <ul> element, and the fact that only <li> elements are
appropriate as children.
If we want the same type of behavior, then we have to compose our components.

Just like we compose regular HTML elements, we can do the same with components.

```handlebars
{{#user-list users=model sortBy='name' as |user|}}
  {{user-card user=user}}
{{/user-list}}
```

Component Blocks
Components can be used in two forms, just like regular HTML elements.

Inline Form

```handlebars
{{user-list users=model}}
```

Block Form

```handlebars
{{#user-list users=model}}
  {{!-- custom template here --}}
{{/user-list}}
```

To compose components, we must use the block form, but we must also
be able to distinguish from within our component which form the user
is implementing. This can be done with the template property.

```handlebars
{{#if template}}
  {{yield}}
{{else}}
  <p>No Template Specified</p>
{{/if}}
```

We can check if template is truthy, and if it is that means that the user
specified a custom template.
Well, once we have a template, we probably want to use that in our component,
and that's exactly what {{yield}} does.

This helper can be used once, or many times. You can make your component into a
type of <ul> element,
that is a list that will repeat n times. Like the following example, where we
can output a custom summary.

```handlebars
{{#each posts as |post|}}
  <h3>{{post.title}}</h3>
  <p>{{yield}}</p>
{{/each}}
```

Which can be used like so:

```handlebars
{{#post-list posts=model}}
  Greatest post ever!
{{/post-list}}
```

And will result in the following HTML:

```html
<div id="ember123" class="ember-view">
  <h3>Tomster goes to town</h3>
  <p>Greatest post ever!</p>
  <h3>Tomster on vacation</h3>
  <p>Greatest post ever!</p>
</div>
```

But what use is it to just output the same thing over and over? Don't we want to
customize our posts,
and display the right content? Sure we do. Lets explore the {{yield}} helper a
bit.

Data Down
To accomplish composability beyond just simple templates, we need to pass
context to those templates. This can be done with the `{{yield}}` helper.

The `{{yield}}` defines where the template we defined inside our component block
will yield in the component's layout, as we saw in the previous section. Apart
from that, the yield helper also allows us to send data down, providing a
context for the templates.

```handlebars
{{yield}}
{{yield "hello"}}
{{yield item}}
{{yield this "bye"}}
```

By default yield does not send any context, but you can provide an arbitrary
number of arguments.
Once you are sending data down, the child components need to consume that data.
We can do this with the as operator. Let's take {{yield user "My Item"}} as an
example:

```handlebars
{{#user-list users=model as |user title|}}
  <h3>{{title}}</h3>
  {{user-card user=user}}
{{/user-list}}
```

Now `{{user-card}}` has access to the current user, which would change if
`{{user-list}}` placed it's yield helper inside an each block.
This opens up the possibility to use the `{{component}}` helper for different
templates, for example:

```handlebars
<h3>Profile</h3>
{{yield "user-avatar" user}}
{{yield "user-contact" user}}


{{#user-profile user=model as |section user|}}
  {{component section user=user}}
{{/user-profile}}
```

With the `{{component}}` helper, we can bind our context to names of components
dynamically, which in this case means that we can customize
the user profile with custom components bound to the relevant data. This means
we can have multiple extension points in our components, making them much more
versatile.

Actions Up
Now that we can send data down, we probably want to manipulate that data via
some user interaction,
like changing a user's avatar, or whatever it is you're doing. We can accomplish
this by using actions.

Actions are great, but for actions to work in the right context, we must use the
targetObject property to specify
where we want the action to go. Before we can specify the targetObject property
on our "acting" component, we need
to expose that target as the context.

```handlebars
{{yield this}}
```

The targetObject is the component that you want to handle the action, in this
case it's the parent component.

```handlebars
{{#user-profile user=model as |profile|}}
  {{user-avatar change="updateAvatar" targetObject=profile}}
{{/user-profile}}
```

Since profile is the instance of the {{user-profile}} component, that means it
can accept the "updateAvatar" action request.
The action must be defined on the user profile component instance.

Here's a mash-up of the possible scenarios with actions:

```handlebars
{{#full-post post=model as |fullPost|}}
  {{post-like like="like" targetObject=fullPost}}
  {{post-subscribe subscribe="subscribe" targetObject=fullPost}}
  {{comment-box submit="addComment" targetObject=post viewName="commentBox"}}

  <button type="button" {{action "fullScreen" target=commentBox}}>Zen Mode</button>
{{/full-post}}
```

Note: When using `{{action}}` helpers, instead of a component, you need to
specify target instead of targetObject.
Also, when working with actions and sibling components, use viewName to
"export" the sibling component instance as a possible target.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltluzcna000dn3bbsbk7cyvv</link><guid isPermaLink="false">users/knownasilya/notes/cltluzcna000dn3bbsbk7cyvv</guid><pubDate>Sun, 10 Mar 2024 18:39:21 GMT</pubDate></item><item><title><![CDATA[Boniface And The Thunder Oak]]></title><description><![CDATA[Recently learned about Boniface and Thunder Oak (you can read about it [here](https://ztevetevans.wordpress.com/2022/12/12/the-legend-of-saint-boniface-and-the-thunder-oak-and-the-origin-of-the-christmas-tree/)) and it makes me think about how protestants have mostly stopped telling stories of the past and teaching christian history. We could learn a thing or two from catholics in this regard.

I can't say that I know my christian history, and this is a failure not only on my part, but also on the part of the western church. We should be teaching these to our children, there are many lessons to be learned, like what to do and what not to do. None of the stories will be perfect just like none of the people those stories are about are perfect.

P.S. Our culture likes Thor, who was a god pleased by human (child mostly) sacrifice. It's no wonder abortion is such a hit today in our pagan culture, which says it's not religious. Don't be fooled, our government and culture is very religious, and wants to indoctrinate you at every step.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clthteeb40005n3bbkxnlcfwj</link><guid isPermaLink="false">users/knownasilya/notes/clthteeb40005n3bbkxnlcfwj</guid><pubDate>Thu, 07 Mar 2024 22:43:59 GMT</pubDate></item><item><title><![CDATA[Archegos Topics]]></title><description><![CDATA[Been working on adding topics to Archegos. Kind of like tags or categories, not sure how they will play out in the long run, but I'm planning on driving search and "related notes" by topics. A way to discover new notes that might not have been published near each other but are on similar topics.

![think about it](https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExbWszczhtNXNubDhod2h5ZXlmNnZrMmUyaHJneTgxMzZ1em9yZjE4ayZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/d3mlE7uhX8KFgEmY/giphy.gif)

---

I can now tag a note with specific topics, and create topics. There is also a new page `/topics` that shows all the topics and you can see all notes for that topic. Each note shows it's topics and you can click these to see other notes with said topic.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/cltdvlnuk0001n3bbh3vcsi9z</link><guid isPermaLink="false">users/knownasilya/notes/cltdvlnuk0001n3bbh3vcsi9z</guid><pubDate>Tue, 05 Mar 2024 04:34:32 GMT</pubDate></item><item><title><![CDATA[What is Sin]]></title><description><![CDATA[Sin is anything that is outside of God's design. Evil like murder is outside of God's design, as well as lying. God didn't make mankind with those purposes in mind. Anything outside of his design for human flourishing is sin. This includes omission as well as commission, which is not doing the right thing as well as doing the wrong thing. An example of omission would be not worshiping God as he ought to be worshipped. 

The thing about sin, if you are a christian, is that it's forgiven by Jesus. Just because it is forgiven, doesn't mean you can just keep sinning. See the Lord's prayer where it mentions ["..And forgive us our debts, as we also have forgiven our debtors..."](https://www.bible.com/bible/111/MAT.6.9-13.NIV), meaning that our hearts will be changed and we can now forgive others, not that we earn our forgiveness by forgiving others.

Along with being forgiven, it is also not contagious. See how Jesus interacted with sinners in the gospels. This means you can be free to love sinners and share the gospel with your words and life. Remember that you were a sinner (defined by sin) and still sin, so separating yourself is probably not the right answer and most likely fueled by sinful motives.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clt22cc3c0001n3bbjnydhapt</link><guid isPermaLink="false">users/knownasilya/notes/clt22cc3c0001n3bbjnydhapt</guid><pubDate>Sun, 25 Feb 2024 22:10:00 GMT</pubDate></item><item><title><![CDATA[Optimistic Eschatology]]></title><description><![CDATA[Eschatology is the belief (or the belief and study) of what will happen at the end, when Jesus comes back. I believe that no matter which view you take, the most important thing you should adhere to is the optimistic part. Optimistic eschatology is the idea that the gospel and the church are successful in the mission Jesus gave before he ascended to the Father, which is to:

> Go therefore and make disciples of all nations, baptizing them in the name of the Father and of the Son and of the Holy Spirit, and teaching them to obey everything that I have commanded you. And remember, I am with you always, to the end of the age. (Matthew 28:19-20).

If we don't believe that (and there are many reasons that the bible gives us to believe that), it's almost a hopeless faith. While we are asking for Jesus to work in this world and in the same breath we are asking to be taken out of it. This doesn't feel like the ethos of Jesus or the bible. Are you optimistic?

Give [Paradise Restored by David Chilton (free pdf download)](https://www.garynorth.com/freebooks/docs/pdf/paradise_restored.pdf) a read, it really opens up a lot on how to read Revelation.

Also this [interview (spotify)](https://open.spotify.com/episode/6Re2qwYE1OWUgFWxZmUxAQ?si=UNPeu-WwQr6QfBFzNkjiDw) of David Shannon about Optimistic Eschatology is very good.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clsqon8jy0003n3bbrb0s09pl</link><guid isPermaLink="false">users/knownasilya/notes/clsqon8jy0003n3bbrb0s09pl</guid><pubDate>Sat, 17 Feb 2024 23:01:06 GMT</pubDate></item><item><title><![CDATA[Ash]]></title><description><![CDATA[Yesterday was Ash Wednesday, and for the first time I think I was able to understand what the day is for (beyond starting lent). If Christ didn't come, live a perfect life, show use what the kingdom could be like, die a death he didn't deserve, take our sin on himself and get separated from the father to rise on the third day, ascend to the Father and send the Holy Spirit, to rule from his throne, all we would have is ash.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clso4qvrq0001n3bbltk9q3vq</link><guid isPermaLink="false">users/knownasilya/notes/clso4qvrq0001n3bbltk9q3vq</guid><pubDate>Fri, 16 Feb 2024 04:08:32 GMT</pubDate></item><item><title><![CDATA[Started gardening, and loving it!]]></title><description><![CDATA[This year I've started doing some gardening, mainly a couple raised beds, so small scale. I know absolutely nothing about it but learning along the way. For example, we had a pile of leaves, sticks and stuff which I knew wasn't good compost. But I still tried to salvage the most earth like bits to add to the beds, which had pretty terrible soil.

Went down a rabbit hole on YouTube about compost, and learned that you want a mixture of browns and greens in it. Basically the browns are what create the hummus like substance (carbon/dirt) and the greens add the nutrients (nitrogen). The greens help break down the browns faster. Also learned that you need to keep the compost moist. Giving myself some grace with the current pile, but learning and trying to improve here. Also it needs to be turned about once a week so the insides go on the outside.

Looking forward to our first official harvest this year.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clrxycj6q0001n3bb9luz8mgy</link><guid isPermaLink="false">users/knownasilya/notes/clrxycj6q0001n3bb9luz8mgy</guid><pubDate>Sun, 28 Jan 2024 20:27:24 GMT</pubDate></item><item><title><![CDATA[Writing From A Barrel]]></title><description><![CDATA[With so much time at home, and the littles needing all this attention it's hard to break out of routine. Sometimes you just need to break it up and do something different. I'm one that is generally ok with just being at home, but the every day can sometimes catch up and you don't notice.

Today we got some waffles at our favorite coffee shop, Mundos (like Monday, not world 🌎) which our friends own and operate, we ate them in the car with our two kids. I'm ready to be able to eat at a coffee shop again… From there we did a scenic drive down the bay and visited a lighthouse. It was snowing and we walked on the beach and then did some trails. It was the little guys nap time, so that didn't last too long.

Once we arrived home 🏡, we noticed a little trailer with a barrel like building on top. The rental sauna had arrived. I had to bounce Judah because he did a mini nap but got woken by his brother, so it was later before I could go in. We only have it for one day, but so far it has been a nice break from normal "do nothing" weekends. I'm sitting in the sauna with the temperature around 190° F and writing this. I hope you do something different to take a break, whatever that may be.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clrxxzjsr0003n3bbiv0hi31z</link><guid isPermaLink="false">users/knownasilya/notes/clrxxzjsr0003n3bbiv0hi31z</guid><pubDate>Sun, 28 Jan 2024 20:17:18 GMT</pubDate></item><item><title><![CDATA[State Associated With Data Using Tracked Map]]></title><description><![CDATA[Historically I've used Ember Data which gives you a model instance which you can set arbitrary values on using the `set` method. That as I've been working with more POJO data (via ember-apollo-client) I started using a pattern which fits nicer with the new Octane paradigm.

## tracked-built-ins

[Chris Garret](https://github.com/pzuraq) has an awesome little library that implements tracked versions of JavaScript's built-in classes called [tracked-built-ins](https://github.com/pzuraq/tracked-built-ins). For this pattern I'm going to use `TrackedMap` which has the same API as `Map`, but is tracked (read reactive) in the context of Ember Octane.

```js
import Component from '@glimmer/component';
import { TrackedMap } from 'tracked-built-ins';

export default class Tasks extends Component {
  stateMap = new TrackedMap();
}
```

We have the tracked state set up, but how do we associate the data now?

## Setup

With Ember Octane you get access to the `args` (values passed to the component) on component instantiation, so we can setup our `stateMap` in the constructor.

```js
import Component from '@glimmer/component';
import { TrackedMap } from 'tracked-built-ins';

export default class Tasks extends Component {
  stateMap = new TrackedMap();

  constructor(owner, args) {
    super(owner, args);
    this.setupState();
  }

  setupState() {
    this.args.data.forEach(item => this.stateMap.set(item, { selected: false }));
  }
}
```

The above code takes the data, which might look something like `[{ name: 'Item 1', description: 'Something here' }, { ... }]` and associates each item to a state object, in this case it's `{ selected: false }`, which is the initial state.

## Show Me The State

Normally you iterate over your state using the built-in `each` template helper, but since we are iterating over a map, we use the `each-in` helper instead:

```handlebars
{{#each-in this.stateMap as |item state|}}
    <li class={{unless state.selected 'bg-gray-100'}}>
        <input
          type='checkbox'
          checked={{state.selected}}
          {{on 'change' (fn this.toggleSelected item)}}
        />
  </li>
{{/each-in}}
```

You'll notice that `each-in` yields the key and the value from our map, and in this case the key is our data and the value our state, so we label it by what it is.
To set the value we send the `item` to our action called `toggleSelected` which we'll declare next.

## Changing State

We cannot use the `mut` or the `set` (awesome little helper provided by https://github.com/pzuraq/ember-simple-set-helper, did I mention that Chris has so many great addons?) because the state itself is not reactive, but we can set a new state value for our key (POJO state).

```js
@action
toggleSelected(item) {
  let { selected } = this.stateMap.get(item);

  this.stateMap.set(item, { selected: !selected });
}
```

We get the original value, which we could have passed to our action but I decided to show the process for the sake of this post, and we set a new state value for our key.
This will cause an update to our state and the new value will update in the template.

## Closing

I've found this pattern to be nice because it keeps the two things separated. It reminds me of the https://github.com/stefanpenner/ember-state-services addon, which has some nice helpers for accessing one item but isn't great when managing a collection. The method using `TrackedMap` is following new Octane paradigms for state, and I've been enjoying using it because it's less magic. I think it could be improved by a custom `set-map` helper (or some other name) so you don't have to define an action to toggle a property. What other new state patterns have you started using in your Octane apps?]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clqtwop0r0001n3bbjkuuv1mw</link><guid isPermaLink="false">users/knownasilya/notes/clqtwop0r0001n3bbjkuuv1mw</guid><pubDate>Sun, 31 Dec 2023 19:50:05 GMT</pubDate></item><item><title><![CDATA[Hello]]></title><description><![CDATA[This is the first post, and hopefully not the last ;) I'm Ilya Radchenko, usually go by 'knownasilya', and this is my blog where I write about life and web development.

I'm a 'full stack' developer and usually work with Emberjs and Nodejs, but also dabble in Dart. This blog will not be purely technical, since I don't believe in separating who I am from what I do, since they are connected. This means that you'll also hear about my faith, since I'm a Christian. You'll get to find out what that means and how that affects my profession.

Hopefully you stick around, since I'm not the best writer in the world, nor am I that interesting, but I'll try my best to post here when I can. Hope to hear from you in the comments along this journey, and to grow together in many facets.

P.S. I'll be customizing this site/blog as the time goes on.]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/f67ca40b</link><guid isPermaLink="false">users/knownasilya/notes/f67ca40b</guid><pubDate>Sun, 31 Dec 2023 02:00:07 GMT</pubDate></item><item><title><![CDATA[Tailwind CSS Lets Me Move Fast]]></title><description><![CDATA[I heard that one of the main benefits of Tailwind is that it limits your choices, and I can't agree more, but a less noted feature is the fact that it removes
another barrier. That is the extra steps it takes to style something and to move freely and confidently.

I've been noticing that when I'm working on a project, I have this extra step of "where do I even start" when it comes to styling a feature. I notice this pattern in projects that have CSS disconnected from the components that they style and in projects where the CSS lives right next to the component. I haven't tried CSS-in-JS yet, so can't comment on that yet. I think there are a few blockers for me when I'm trying to get into the styling mindset, and the fact that there is even that mental shift at all says something.

First of all I need to decide where the CSS has to go, then I have to decide what to call the class. Next I need to see if there is other CSS that already covers this component and should I reuse another class or add the new class as part of the existing structure or should it be stand-alone? Now did I write maintainable CSS that others will be able to understand and extend or delete if needed? I'm sure there are more steps, not to mention the whole idea of having to do a context switch to begin with. If we look at Tailwind, it's a different story.

With Tailwind the styles are in the same place as the markup so you don't decide on where to put them or if it's with existing CSS. You might have to create a component to reuse classes that you write repeatedly, but you are already doing the work of abstracting markup and creating components, tailwind just helps you as another metric for when to start a component. There is also no need to think about naming your classes since you use utility functions like `flex`, `rounded`, and `my-2`. Also you can still special CSS for those use-cases (usually the 10%) where you need something special like `height: calc(100vh - 60px)`. Now if I move some markup, the styles don't break. If I delete some markup, I don't have to worry that I have unused CSS or that the CSS I just deleted was used elsewhere.

At the end of the day, it helps me move faster without the extra blockers, and helps me abstract when the time is right, which usually isn't until later in the project once you see patterns. Give Tailwind a try, and remember that you can mix it with your other workflow. I like to use CSS Modules for the 10% and Tailwind for the 90%. Tailwind is probably not the ultimate solution, and yes you still need to understand CSS, but it's a step closer to something that helps you create within good limits.
    
    ]]></description><link>https://ilyaradchenko.com/users/knownasilya/notes/clvbdfx7s0003f534b831yboa</link><guid isPermaLink="false">users/knownasilya/notes/clvbdfx7s0003f534b831yboa</guid><pubDate>Thu, 25 Jun 2020 00:00:00 GMT</pubDate></item></channel></rss>