# properties

Published articles for properties.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Object-Oriented Design Lessons from Trello, Notion, Tinder, and Amazon

DevFeed: [Object-Oriented Design Lessons from Trello, Notion, Tinder, and Amazon](<https://devfeed.tech/articles/copy-these-3-industry-leading-apps-and-turn-object-oriented-design-into-your-secret-career-advantage-31383.md>)

Original publisher: [Read original article](<https://ixdf.org/literature/article/copy-these-3-industry-leading-apps-and-turn-object-oriented-design-into-your-secret-career-advantage>)

Author: William Hudson

Published: 2026-09-16T08:30:06Z

Content type: tutorial

Language: en

Sources: [UX Daily - User Experience Daily](<https://devfeed.tech/sources/ux-daily-user-experience-daily.md>)

Topics: [ui](<https://devfeed.tech/topics/ui.md>), [User Experience](<https://devfeed.tech/topics/user-experience.md>), [Design system](<https://devfeed.tech/topics/design-system.md>), [Notion](<https://devfeed.tech/topics/notion.md>)

Tags: [design](<https://devfeed.tech/tags/design.md>), [interface](<https://devfeed.tech/tags/interface.md>), [object](<https://devfeed.tech/tags/object.md>), [properties](<https://devfeed.tech/tags/properties.md>), [structure](<https://devfeed.tech/tags/structure.md>), [ui-components](<https://devfeed.tech/tags/ui-components.md>), [user-experience](<https://devfeed.tech/tags/user-experience.md>)

### AI overview

This tutorial explains object-oriented design through examples from Trello, Notion, Tinder, and Amazon. It argues that organizing interfaces around meaningful, stable objects and their operations can improve clarity and support scalable product structures.

### Source excerpt

Which apps do you use throughout your day? Maybe you manage your projects on Trello, use Notion as an internal docs site, and maybe, just maybe, you do some swiping on Tinder during your lunch break. Despite looking nothing alike, these three highly successful apps are organized around the same idea: Give users a small number of meaningful objects, let them act on those objects directly, and the interface will feel intuitive without explanation.Cards. Blocks. Profiles: These UI components are the central concepts around which Trello, Notion, and Tinder organize everything else. We can call them objects. Users recognize them immediately, know what they can do with them, and build their entire...

## What's New in PHP 8.6

DevFeed: [What's New in PHP 8.6](<https://devfeed.tech/articles/what-s-new-in-php-8-6-26631.md>)

Original publisher: [Read original article](<https://laravel-news.com/php-8-6>)

Author: Paul Redmond

Published: 2026-09-15T03:00:09Z

Content type: release

Language: en

Sources: [Laravel](<https://devfeed.tech/sources/laravel.md>)

Topics: [PHP](<https://devfeed.tech/topics/php.md>), [DateTime](<https://devfeed.tech/topics/datetime.md>), [ISO 8601](<https://devfeed.tech/topics/iso-8601.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [closure](<https://devfeed.tech/tags/closure.md>), [feature](<https://devfeed.tech/tags/feature.md>), [function](<https://devfeed.tech/tags/function.md>), [interface](<https://devfeed.tech/tags/interface.md>), [iso](<https://devfeed.tech/tags/iso.md>), [news](<https://devfeed.tech/tags/news.md>), [php](<https://devfeed.tech/tags/php.md>), [php-8-6](<https://devfeed.tech/tags/php-8-6.md>), [precision](<https://devfeed.tech/tags/precision.md>), [properties](<https://devfeed.tech/tags/properties.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

An overview of PHP 8.6, scheduled for release on November 19, 2026. The article covers partial function application, the clamp() function, a nanosecond-precision Duration class, readonly property defaults, and parameter DocComments, along with the release timeline and related changes.

### Source excerpt

PHP 8.6 arrives November 19, 2026 with partial function application, a clamp() function, a Duration class, readonly property defaults, and new deprecations. The post What's New in PHP 8.6 appeared first on Laravel News. Join the Laravel Newsletter to get Laravel articles like this directly in your inbox.

## Mixpanel Is Easy to Install. Trusting the Data Takes Work.

DevFeed: [Mixpanel Is Easy to Install. Trusting the Data Takes Work.](<https://devfeed.tech/articles/mixpanel-is-easy-to-install-trusting-the-data-takes-work-32187.md>)

Original publisher: [Read original article](<https://spin.atomicobject.com/mixpanel-trusting-data/>)

Author: Jared Currie

Published: 2026-09-11T12:00:56Z

Content type: tutorial

Language: en

Sources: [Atomic Object](<https://devfeed.tech/sources/atomic-object.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>)

Tags: [dashboards](<https://devfeed.tech/tags/dashboards.md>), [data](<https://devfeed.tech/tags/data.md>), [developer-tools](<https://devfeed.tech/tags/developer-tools.md>), [metric](<https://devfeed.tech/tags/metric.md>), [metrics](<https://devfeed.tech/tags/metrics.md>), [properties](<https://devfeed.tech/tags/properties.md>), [retention](<https://devfeed.tech/tags/retention.md>), [tracking](<https://devfeed.tech/tags/tracking.md>)

### AI overview

This tutorial explains how to improve trust in Mixpanel analytics by defining business questions and metric terms, filtering noise such as employees, automated tests, scrapers, and duplicate events, and documenting each metric's scope and limitations.

### Source excerpt

Mixpanel makes it easy to start collecting events and building dashboards. The harder part is knowing whether those dashboards represent real product usage. A report can look polished while counting employees, automated browser tests, web scrapers, duplicate events, or actions that users attempted but never completed. It can also be technically correct while answering a [...] The post Mixpanel Is Easy to Install. Trusting the Data Takes Work. appeared first on Atomic Spin.

## Implicit Assertions Are More Readable

DevFeed: [Implicit Assertions Are More Readable](<https://devfeed.tech/articles/implicit-assertions-are-more-readable-28890.md>)

Original publisher: [Read original article](<https://glebbahmutov.com/blog/implicit-assertions-are-more-readable/>)

Author: Gleb Bahmutov

Published: 2026-09-01T04:00:00Z

Content type: tutorial

Language: en

Sources: [Gleb Bahmutov](<https://devfeed.tech/sources/gleb-bahmutov.md>)

Topics: [Cypress](<https://devfeed.tech/topics/cypress.md>), [test](<https://devfeed.tech/topics/test.md>), [API](<https://devfeed.tech/topics/api.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [cypress](<https://devfeed.tech/tags/cypress.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [products](<https://devfeed.tech/tags/products.md>), [properties](<https://devfeed.tech/tags/properties.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

A tutorial on making Cypress API tests more readable by using descriptive assertions, precise value ranges, implicit assertions, and cy-spok for validating nested response objects.

### Source excerpt

Recently I saw a Linkedin post that shows "b

## Immutability in PHP Beyond readonly

DevFeed: [Immutability in PHP Beyond readonly](<https://devfeed.tech/articles/immutability-in-php-beyond-readonly-33295.md>)

Original publisher: [Read original article](<https://freek.dev/3181-immutability-in-php-beyond-readonly>)

Author: Freek Van der Herten (freek@spatie.be)

Published: 2026-08-17T12:12:30Z

Content type: article

Language: en

Sources: [freek.dev - all blogposts](<https://devfeed.tech/sources/freek-dev-all-blogposts.md>)

Topics: [PHP](<https://devfeed.tech/topics/php.md>)

Tags: [best-practices](<https://devfeed.tech/tags/best-practices.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [design-patterns](<https://devfeed.tech/tags/design-patterns.md>), [immutability](<https://devfeed.tech/tags/immutability.md>), [php](<https://devfeed.tech/tags/php.md>), [properties](<https://devfeed.tech/tags/properties.md>), [value](<https://devfeed.tech/tags/value.md>), [value-objects](<https://devfeed.tech/tags/value-objects.md>)

### AI overview

A deep dive into immutability in PHP, covering readonly properties, interior mutability, immutable value objects and collections, dates, cloning, boundaries, and testing.

### Source excerpt

A deep dive into immutability in PHP, from readonly properties and interior mutability to immutable value objects, collections, dates, cloning, boundaries, and testing. Read more

## Enterprise Architecture Quietly Depended on Humans in Far More Places Than We Realised

DevFeed: [Enterprise Architecture Quietly Depended on Humans in Far More Places Than We Realised](<https://devfeed.tech/articles/enterprise-architecture-quietly-depended-on-humans-in-far-more-places-than-we-realised-34130.md>)

Original publisher: [Read original article](<https://flashdba.com/2026/06/08/enterprise-architecture-quietly-depended-on-humans-in-far-more-places-than-we-realised/>)

Author: flashdba

Published: 2026-06-08T14:19:07Z

Content type: opinion

Language: en

Sources: [flashdba](<https://devfeed.tech/sources/flashdba.md>)

Topics: [Enterprise Architecture](<https://devfeed.tech/topics/enterprise-architecture.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Actor](<https://devfeed.tech/topics/actor.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [actor](<https://devfeed.tech/tags/actor.md>), [agentic](<https://devfeed.tech/tags/agentic.md>), [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [ai](<https://devfeed.tech/tags/ai.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [databases](<https://devfeed.tech/tags/databases.md>), [databases-and-agentic-ai](<https://devfeed.tech/tags/databases-and-agentic-ai.md>), [enterprise-architecture](<https://devfeed.tech/tags/enterprise-architecture.md>), [inferencing](<https://devfeed.tech/tags/inferencing.md>), [performance](<https://devfeed.tech/tags/performance.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

This article argues that enterprise architecture depended on implicit properties supplied by human participants, including predictable workload, intent, accountability, feedback, and limited capacity. It concludes that agentic AI exposes pressure across multiple technical and organisational domains by removing those assumptions simultaneously.

### Source excerpt

Enterprise architecture was built around a human actor whose presence provided properties nobody designed and nobody priced. Agentic AI is the first technology to remove those properties simultaneously - and the absence is now visible across every domain.

## Beyond Positions: Kotlin's New Name-Based Destructuring

DevFeed: [Beyond Positions: Kotlin's New Name-Based Destructuring](<https://devfeed.tech/articles/beyond-positions-kotlin-s-new-name-based-destructuring-25979.md>)

Original publisher: [Read original article](<https://proandroiddev.com/beyond-positions-kotlins-new-name-based-destructuring-eee347d1bb5c?source=rss-711ab22c5c77------2>)

Author: Nav Singh

Published: 2026-03-18T01:24:50Z

Content type: tutorial

Language: en

Sources: [Stories by Nav Singh 🇨🇦 on Medium](<https://devfeed.tech/sources/stories-by-nav-singh-on-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-2](<https://devfeed.tech/tags/kotlin-2.md>), [kotlin-native](<https://devfeed.tech/tags/kotlin-native.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

This tutorial explains Kotlin 2.3.20's experimental name-based destructuring declarations, which match variables to properties instead of relying on componentN() position. It also covers the compiler option and supported modes.

### Source excerpt

Image generated using Perplexity Name-based destructuring declarations were introduced in Kotlin 2.3.20 and match variables to properties rather than relying on position-based componentN(). Previously, destructive declarations used position-based destruction: data class User(var firstName: String, var lastName: String) val user = User("Alice", "Husseini") // componentN() val(firstName,lastName) = user println(firstName) println(lastName)Drawback of the componentN() based approach Destructuring relies on the order of componentN() functions, lastName receives the value of firstName, and firstName receives the value of lastName 👇 data class User(var firstName: String, var lastName: String) val user = User("Alice", "Husseini") // componentN() val(lastName,firstName) = user println(firstName) -> Husseini println(lastName) -> AliceName-based destructuring ✨ It's an Experimental feature. We can control how the compiler interprets destructuring declarations with the -Xname-based-destructuring compiler option. kotlin { // .. compilerOptions { freeCompilerArgs.add("-Xname-based-destructuring=only-syntax") } }Each variable refers to a property by name.val user = User("Alice", "Husseini") // Name-based destructuring (val firstName = firstName, val lastName = lastName) = userModeshttps://kotlinlang.org/docs/whatsnew2320.html#languageMode -- Name-Mismatch⚠ Warning ⚠Name-Mismatch warningMode -- Complete Position-based destructuring using square brackets []: data class User(var firstName: String, var lastName: String) val user = User("Alice", "Husseini") // componentN() val [firstName,lastName] = userReferences What's new in Kotlin 2.3.20 | Kotlin Stay in touch https://www.linkedin.com/in/navczydev/ JavaScript is not available. navczydev - Overview navczydev.bsky.social Beyond Positions: Kotlin's New Name-Based Destructuring was originally published in ProAndroidDev on Medium, where people are continuing the conversation by highlighting and responding to this story.

## The Liskov Substitution Principle: Subtyping Contracts, Invariants, and History Properties

DevFeed: [The Liskov Substitution Principle: Subtyping Contracts, Invariants, and History Properties](<https://devfeed.tech/articles/the-liskov-substitution-principle-does-more-than-you-think-25507.md>)

Original publisher: [Read original article](<https://buttondown.com/hillelwayne/archive/the-liskov-substitution-principle-does-more-than/>)

Author: Hillel Wayne

Published: 2026-01-06T16:51:26Z

Content type: article

Language: en

Sources: [Newsletter feed for Hillel Wayne's Newsletter](<https://devfeed.tech/sources/newsletter-feed-for-hillel-wayne-s-newsletter.md>)

Topics: [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>), [Polymorphism](<https://devfeed.tech/topics/polymorphism.md>)

Tags: [inheritance](<https://devfeed.tech/tags/inheritance.md>), [oop](<https://devfeed.tech/tags/oop.md>), [properties](<https://devfeed.tech/tags/properties.md>), [solid-principles](<https://devfeed.tech/tags/solid-principles.md>), [subtype](<https://devfeed.tech/tags/subtype.md>)

### AI overview

The article explains that the Liskov Substitution Principle is broader than simply treating it as subtyping. It presents requirements involving method preconditions and postconditions, supertype state invariants, and history properties.

### Source excerpt

Happy New Year! I'm done with the newsletter hiatus and am going to try updating weekly again. To ease into things a bit, I'll try to keep posts a little more off the cuff and casual for a while, at least until Logic for Programmers is done. Speaking of which, v0.13 should be out by the end of this month. So for this newsletter I want to talk about the Liskov Substitution Principle (LSP). Last week I read A SOLID Load of Bull by cryptographer Loupe Vaillant, where he argues the SOLID principles of OOP are not worth following. He makes an exception for LSP, but also claims that it's "just subtyping" and further: If I were trying really hard to be negative about the Liskov substitution principle, I would stress that it only applies when inheritance is involved, and inheritance is strongly discouraged anyway. LSP is more interesting than that! In the original paper, A Behavioral Notion of Subtyping, Barbara Liskov and Jeannette Wing start by defining a "correct" subtyping as follows: Subtype Requirement: Let ϕ(x) be a property provable about objects x of type T. Then ϕ(y) should be true for objects y of type S where S is a subtype of T. From then on, the paper determine what guarantees that a subtype is correct.1 They identify three conditions: Each of the subtype's methods has the same or weaker preconditions and the same or stronger postconditions as the corresponding supertype method.2 The subtype satisfies all state invariants of the supertype. The subtype satisfies all "history properties" of the supertype. 3 e.g. if a supertype has an immutable field, the subtype cannot make it mutable. (Later, Elisa Baniassad and Alexander Summers would realize these are equivalent to "the subtype passes all black-box tests designed for the supertype", which I wrote a little bit more about here.) I want to focus on the first rule about preconditions and postconditions. This refers to the method's contract. For a function f, f.Pre is what must be true going into the function, and

## Changing Immutable Collections

DevFeed: [Changing Immutable Collections](<https://devfeed.tech/articles/changing-immutable-collections-30704.md>)

Original publisher: [Read original article](<https://codeblog.jonskeet.uk/2025/12/31/changing-immutable-collections/>)

Author: jonskeet

Published: 2025-12-31T10:32:45Z

Content type: article

Language: en

Sources: [Jon Skeet](<https://devfeed.tech/sources/jon-skeet.md>)

Topics: [C#](<https://devfeed.tech/topics/csharp.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [arrays](<https://devfeed.tech/tags/arrays.md>), [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [collection](<https://devfeed.tech/tags/collection.md>), [election-2029](<https://devfeed.tech/tags/election-2029.md>), [immutability](<https://devfeed.tech/tags/immutability.md>), [linq](<https://devfeed.tech/tags/linq.md>), [migration](<https://devfeed.tech/tags/migration.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

The article explains a migration from ImmutableList<T> and ImmutableDictionary<TKey, TValue> to immutable collection types better suited to code that creates collections and then leaves them unchanged. It describes the migration steps and related helper-method and property-type changes.

### Source excerpt

As I've written before, I'm leaning heavily into immutability in the election site code. Until September 2025 (it's taken a long time to get round to writing this blog post) that meant a combination of records, ImmutableList<T> and ImmutableDictionary<TKey, TValue>. In an ECMA C# standards meeting, however, Joseph Musser passed on some really valuable feedback ... Continue reading Changing Immutable Collections ->

## Range Syntax for Style Queries

DevFeed: [Range Syntax for Style Queries](<https://devfeed.tech/articles/range-syntax-for-style-queries-28832.md>)

Original publisher: [Read original article](<https://una.im/range-style-queries/>)

Published: 2025-11-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [Una Kravets](<https://devfeed.tech/sources/una-kravets.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [demo](<https://devfeed.tech/tags/demo.md>), [example](<https://devfeed.tech/tags/example.md>), [function](<https://devfeed.tech/tags/function.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [learn](<https://devfeed.tech/tags/learn.md>), [properties](<https://devfeed.tech/tags/properties.md>), [range](<https://devfeed.tech/tags/range.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

A tutorial on using range syntax in CSS style queries and the if() function. It explains comparisons involving custom properties, literal values, and function results, with examples for responsive components, weather cards, grid placement, and styling effects.

### Source excerpt

Learn how to use the new range syntax for CSS style queries and the if() function.

## New Shadow API for Jetpack Compose

DevFeed: [New Shadow API for Jetpack Compose](<https://devfeed.tech/articles/new-shadow-api-for-jetpack-compose-25794.md>)

Original publisher: [Read original article](<https://www.sinasamaki.com/new-shadow-api-for-jetpack-compose/>)

Author: sinasamaki

Published: 2025-08-27T18:15:18Z

Content type: tutorial

Language: en

Sources: [sinasamaki](<https://devfeed.tech/sources/sinasamaki.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [article](<https://devfeed.tech/tags/article.md>), [compose](<https://devfeed.tech/tags/compose.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [modifiers](<https://devfeed.tech/tags/modifiers.md>), [properties](<https://devfeed.tech/tags/properties.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains the new shadow API introduced in Jetpack Compose 1.9.0. It covers the available modifiers, modifier ordering, shadow properties such as radius, spread, offset, alpha, color, brush, and blendMode, and includes an interactive demo.

### Source excerpt

How to build realistic UI with the latest shadow API

## 5 Useful CSS functions using the new @function rule

DevFeed: [5 Useful CSS functions using the new @function rule](<https://devfeed.tech/articles/5-useful-css-functions-using-the-new-function-rule-28767.md>)

Original publisher: [Read original article](<https://una.im/5-css-functions/>)

Published: 2025-08-13T00:00:00Z

Content type: tutorial

Language: en

Sources: [Una Kravets](<https://devfeed.tech/sources/una-kravets.md>)

Topics: [CSS functions](<https://devfeed.tech/topics/css-functions.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Design system](<https://devfeed.tech/topics/design-system.md>), [Font](<https://devfeed.tech/topics/font.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [css](<https://devfeed.tech/tags/css.md>), [css-functions](<https://devfeed.tech/tags/css-functions.md>), [design](<https://devfeed.tech/tags/design.md>), [examples](<https://devfeed.tech/tags/examples.md>), [fonts](<https://devfeed.tech/tags/fonts.md>), [properties](<https://devfeed.tech/tags/properties.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [tricks](<https://devfeed.tech/tags/tricks.md>), [typography](<https://devfeed.tech/tags/typography.md>)

### AI overview

A tutorial demonstrating five practical uses for CSS custom functions introduced with the new @function rule. The examples cover negating values, creating opacity variants, fluid typography, and conditionally rounded borders, with emphasis on clearer and more organized CSS.

### Source excerpt

CSS custom functions are a gamechanger. Here are 5 really useful examples.

## Unexpected inconsistency in records

DevFeed: [Unexpected inconsistency in records](<https://devfeed.tech/articles/unexpected-inconsistency-in-records-30702.md>)

Original publisher: [Read original article](<https://codeblog.jonskeet.uk/2025/07/19/unexpected-inconsistency-in-records/>)

Author: jonskeet

Published: 2025-07-19T13:04:48Z

Content type: tutorial

Language: en

Sources: [Jon Skeet](<https://devfeed.tech/sources/jon-skeet.md>)

Topics: [C#](<https://devfeed.tech/topics/csharp.md>), [Code](<https://devfeed.tech/topics/code.md>), [bug](<https://devfeed.tech/topics/bug.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [code](<https://devfeed.tech/tags/code.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

The article explains an inconsistency in C# records when nondestructive mutation is combined with derived data initialized from constructor parameters. The with-style operation uses a generated copy constructor, copying existing fields rather than recalculating derived values, which can leave the copied record internally inconsistent.

### Source excerpt

Unexpected inconsistency in records The other day, I was trying to figure out a bug in my code, and it turned out to be a misunderstanding on my part as to how C# records work. It's entirely possible that I'm the only one who expected them to work in the way that I did, but ... Continue reading Unexpected inconsistency in records ->

## Structured Output with LangChain and Llamafile

DevFeed: [Structured Output with LangChain and Llamafile](<https://devfeed.tech/articles/structured-output-with-langchain-and-llamafile-25139.md>)

Original publisher: [Read original article](<https://blog.brakmic.com/structured-output-with-langchain-and-llamafile/>)

Author: brakmic

Published: 2025-06-22T16:50:12Z

Content type: tutorial

Language: en

Sources: [Harris Brakmic - Coding](<https://devfeed.tech/sources/harris-brakmic-coding.md>)

Topics: [LangChain](<https://devfeed.tech/topics/langchain.md>), [llamafile](<https://devfeed.tech/topics/llamafile.md>), [JSON](<https://devfeed.tech/topics/json.md>), [llama.cpp](<https://devfeed.tech/topics/llama-cpp.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [Pydantic](<https://devfeed.tech/topics/pydantic.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [code](<https://devfeed.tech/tags/code.md>), [coding](<https://devfeed.tech/tags/coding.md>), [cpp](<https://devfeed.tech/tags/cpp.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [import](<https://devfeed.tech/tags/import.md>), [json](<https://devfeed.tech/tags/json.md>), [langchain](<https://devfeed.tech/tags/langchain.md>), [llama-cpp](<https://devfeed.tech/tags/llama-cpp.md>), [llamafile](<https://devfeed.tech/tags/llamafile.md>), [llm](<https://devfeed.tech/tags/llm.md>), [local](<https://devfeed.tech/tags/local.md>), [local-llm](<https://devfeed.tech/tags/local-llm.md>), [models](<https://devfeed.tech/tags/models.md>), [properties](<https://devfeed.tech/tags/properties.md>), [python](<https://devfeed.tech/tags/python.md>), [structured-output](<https://devfeed.tech/tags/structured-output.md>)

### AI overview

A tutorial on using LangChain with Llamafile to produce structured JSON output from a local large language model. It uses JsonOutputParser, PromptTemplate, and a Pydantic model because Llamafile does not provide a with_structured_output method.

### Source excerpt

Learn how to extend Llamafile with LangChain's JsonParser to produce clean, structured JSON output

## JSON - The Fine Print: Part 2 - Emitting JSON

DevFeed: [JSON - The Fine Print: Part 2 - Emitting JSON](<https://devfeed.tech/articles/json-the-fine-print-part-2-emitting-json-22267.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2024/10/json-the-fine-print-part-2.html>)

Published: 2025-02-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [JSON](<https://devfeed.tech/topics/json.md>), [API](<https://devfeed.tech/topics/api.md>), [Code](<https://devfeed.tech/topics/code.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [api-layers](<https://devfeed.tech/tags/api-layers.md>), [code](<https://devfeed.tech/tags/code.md>), [common-serialization-errors](<https://devfeed.tech/tags/common-serialization-errors.md>), [data](<https://devfeed.tech/tags/data.md>), [data-serialization](<https://devfeed.tech/tags/data-serialization.md>), [data-structure-separation](<https://devfeed.tech/tags/data-structure-separation.md>), [data-transmission](<https://devfeed.tech/tags/data-transmission.md>), [data-validation](<https://devfeed.tech/tags/data-validation.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [encoding-json](<https://devfeed.tech/tags/encoding-json.md>), [function](<https://devfeed.tech/tags/function.md>), [go-json-types](<https://devfeed.tech/tags/go-json-types.md>), [go-language-serialization](<https://devfeed.tech/tags/go-language-serialization.md>), [go-language-validation](<https://devfeed.tech/tags/go-language-validation.md>), [go-type-mapping](<https://devfeed.tech/tags/go-type-mapping.md>), [http](<https://devfeed.tech/tags/http.md>), [io](<https://devfeed.tech/tags/io.md>), [io-writer](<https://devfeed.tech/tags/io-writer.md>), [json](<https://devfeed.tech/tags/json.md>), [json-best-practices](<https://devfeed.tech/tags/json-best-practices.md>), [json-go-mapping](<https://devfeed.tech/tags/json-go-mapping.md>), [json-marshaling](<https://devfeed.tech/tags/json-marshaling.md>), [json-unmarshaling](<https://devfeed.tech/tags/json-unmarshaling.md>), [json-validation](<https://devfeed.tech/tags/json-validation.md>), [map](<https://devfeed.tech/tags/map.md>), [passing-serialized-data](<https://devfeed.tech/tags/passing-serialized-data.md>), [properties](<https://devfeed.tech/tags/properties.md>), [rest-apis](<https://devfeed.tech/tags/rest-apis.md>), [schema](<https://devfeed.tech/tags/schema.md>), [schema-less-data-format](<https://devfeed.tech/tags/schema-less-data-format.md>), [serialization](<https://devfeed.tech/tags/serialization.md>), [serialization-mistakes](<https://devfeed.tech/tags/serialization-mistakes.md>), [serialization-protocols](<https://devfeed.tech/tags/serialization-protocols.md>), [standard](<https://devfeed.tech/tags/standard.md>), [structure](<https://devfeed.tech/tags/structure.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

This tutorial explains how to emit JSON in Go using the encoding/json package. It compares json.Marshal, which returns bytes, with json.Encoder, which writes to an io.Writer, and discusses error handling in HTTP handlers. It also demonstrates marshaling maps and structs and using field tags to control JSON property names.

### Source excerpt

Introduction In part 1 we took a high-level view on serialization and JSON. In this part, we'll roll our sleeves and start working with JSON, focused on emitting JSON. You might think this is a basic topic, but there is much more to it than just calling json.Marshal. json.Marshal vs json.Encoder The encoding/json package has two main APIs: Marshal and NewEncoder. The Marshal function returns a []byte while the NewEncoder function will write to an io.Writer. The question is: When should you use one API over the other?

## How to Audit and Organize CSS z-index Values and Stacking Contexts

DevFeed: [How to Audit and Organize CSS z-index Values and Stacking Contexts](<https://devfeed.tech/articles/spring-cleaning-for-z-indexes-20100.md>)

Original publisher: [Read original article](<https://medium.com/jobteaser-dev-team/spring-cleaning-for-z-indexes-42beba8e526a?source=rss----bd77d16a0035---4>)

Author: Jean-Jacques Royneau

Published: 2024-11-05T10:06:48Z

Content type: tutorial

Language: en

Sources: [JobTeaser](<https://devfeed.tech/sources/jobteaser.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>)

Tags: [audit](<https://devfeed.tech/tags/audit.md>), [bugs](<https://devfeed.tech/tags/bugs.md>), [cleanup](<https://devfeed.tech/tags/cleanup.md>), [css](<https://devfeed.tech/tags/css.md>), [display](<https://devfeed.tech/tags/display.md>), [properties](<https://devfeed.tech/tags/properties.md>), [stacking-context](<https://devfeed.tech/tags/stacking-context.md>), [z-index](<https://devfeed.tech/tags/z-index.md>)

### AI overview

This article describes auditing z-index declarations, centralizing values with CSS custom properties, and reducing unnecessary z-indexes by accounting for stacking contexts and natural DOM order.

### Source excerpt

Managing z-index is a classic challenge for front-end developers. As a project grows, display conflicts and bugs related to z-index can quickly turn into serious headaches. I recently took some time to clean up the z-indexes in one of our projects. In this article, I'll share the approach I used for this cleanup (while also laying the foundation for keeping things manageable in the long run). 1. Analyzing the existing z-indexes The first step was to perform a thorough audit of all the z-index declarations in the project. This gave me an overview of how many z-indexes we had and what values were being used. Here's what I found: - August 2023: 57 declarations with 8 distinct values. - February 2024: 87 declarations with 19 distinct values. This evolution showed me that the use of z-indexes had increased significantly. And there was no reason to believe it would stop. With that in mind, my goal became to centralize and standardize these values. 2. Centralizing z-indexes with CSS Custom Properties I centralized all the z-index values in a single file using CSS custom properties. This allowed me to have an overview of the different layers of elements on the page, helping me get a (slightly) clearer picture of the task ahead. If you'd like to get an idea (or maybe scare yourself a bit), here's what that first file looked like: :root { - z-index-second-basement: -2; - z-index-basement: -1; - z-index-ground: 0; - z-index-floor: 1; - z-index-second-floor: 2; - z-index-third-floor: 3; - z-index-job-ads-secondary-filters--selects: 10; - z-index-job-ads-results-sort: 10; - z-index-job-ads-primary-filters: 20; - z-index-fo-header: 30; - z-index-above-fo-header: 31; - z-index-fo-header--dropdowns: 100; - z-index-career-center--login-modal--autocomplete-list: 99; - z-index-bo-drawer-backdrop: 999; - z-index-bo-drawer: 1000; - z-index-feature-env-switcher: 9999; - z-index-notifications-panel: 10000; - z-index-msw-tools-panel--open-button: 99999; - z-index-msw-tools-panel: 999999; }

## Gradle Footguns: Don't add potentially-empty providers to collection properties

DevFeed: [Gradle Footguns: Don't add potentially-empty providers to collection properties](<https://devfeed.tech/articles/gradle-footguns-don-t-add-potentially-empty-providers-to-collection-properties-39034.md>)

Original publisher: [Read original article](<https://www.zacsweers.dev/gradle-footgun-adding-empty-providers-to-collection-properties/>)

Author: Zac Sweers

Published: 2024-09-11T17:33:13Z

Content type: tutorial

Language: en

Sources: [Zac Sweers](<https://devfeed.tech/sources/zac-sweers.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [bug](<https://devfeed.tech/topics/bug.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

The article explains a Gradle bug involving potentially empty providers added to collection properties. An absent provider can clear the property value rather than only its elements, causing exceptions or leaving the property unusable.

### Source excerpt

After pairing with Tony Robalik on a recent weird behavior I was seeing in Gradle, we encountered a deliciously evil bug in Gradle. It's documented a little in Gradle 8.7's release notes (see Better API for updating collection properties), but the basic premise is

## Gradle Properties - Tadeas Kriz

DevFeed: [Gradle Properties - Tadeas Kriz](<https://devfeed.tech/articles/gradle-properties-tadeas-kriz-38214.md>)

Original publisher: [Read original article](<https://touchlab.co/gradle-properties>)

Published: 2024-06-17T19:34:40Z

Content type: tutorial

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [properties](<https://devfeed.tech/topics/properties.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [debugging](<https://devfeed.tech/topics/debugging.md>)

Tags: [configuration](<https://devfeed.tech/tags/configuration.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [priority](<https://devfeed.tech/tags/priority.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

This post explains where Gradle properties come from, how different property types are passed into and used by build scripts, and how their priorities affect configuration. It highlights behaviors that may differ from Gradle documentation, including system properties loaded from multiple locations and project properties created from system properties.

### Source excerpt

Understanding how Gradle properties work can save you a lot of time debugging. This post explains how to set properties and what their priorities are.

## Item 29: Minimize elements' visibility

DevFeed: [Item 29: Minimize elements' visibility](<https://devfeed.tech/articles/item-29-minimize-elements-visibility-39277.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-element-visibility>)

Published: 2024-05-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [interface](<https://devfeed.tech/topics/interface.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [class](<https://devfeed.tech/topics/class.md>), [properties](<https://devfeed.tech/topics/properties.md>), [maintenance](<https://devfeed.tech/topics/maintenance.md>)

Tags: [class](<https://devfeed.tech/tags/class.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [interface](<https://devfeed.tech/tags/interface.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [properties](<https://devfeed.tech/tags/properties.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

The article explains why APIs should minimize visible elements: smaller interfaces are easier to learn, maintain, test, and change. It also shows how restricting visibility in Kotlin helps protect class invariants by encapsulating internal state, including making property setters private.

### Source excerpt

Why we should minimize elements' visibility and how to do it.

## Computed Properties for Haskell Records

DevFeed: [Computed Properties for Haskell Records](<https://devfeed.tech/articles/computed-properties-for-haskell-records-27914.md>)

Original publisher: [Read original article](<http://alt-romes.github.io/posts/2023-11-30-computed-properties-for-haskell-records.html>)

Published: 2023-11-30T00:00:00Z

Content type: article

Language: en

Sources: [Romes' Musings](<https://devfeed.tech/sources/romes-musings.md>)

Topics: [Haskell](<https://devfeed.tech/topics/haskell.md>), [properties](<https://devfeed.tech/topics/properties.md>), [data type](<https://devfeed.tech/topics/data-type.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [C](<https://devfeed.tech/topics/c.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [data-type](<https://devfeed.tech/tags/data-type.md>), [extension](<https://devfeed.tech/tags/extension.md>), [haskell](<https://devfeed.tech/tags/haskell.md>), [properties](<https://devfeed.tech/tags/properties.md>), [rust](<https://devfeed.tech/tags/rust.md>), [swift](<https://devfeed.tech/tags/swift.md>)

### AI overview

This article explains Haskell record types and related syntax extensions, including OverloadedRecordDot and NamedFieldPuns. It then introduces computed properties by comparing Haskell records with properties in Swift, C#, and Java.

### Source excerpt

Contents 1 Records in Haskell 1.1 Overloaded Record Dot 1.2 Named Field Puns 2 Computed Properties 3 Conclusion 1 Records in Haskell Haskell has so-called record types, which are also commonly known as structs, for instance, in C, Swift, and Rust. To define a square, one would write: data Point = Point { x :: Int , y :: Int } data Square = Square { topLeft :: Point , bottomRight :: Point } mySquare = Square{ topLeft = Point{x = 0, y = 0} , bottomRight = Point{x = 2, y = 2} } mySquareWidth = x (bottomRight mySquare) - x (topLeft mySquare) In Haskell record types are just syntactic sugar for ordinary product types paired with functions that get and set these fields. In essence, the above is not fundamentally different from having the following standard product types and functions: data Point = Point Int Int data Square = Square Point Point x, y :: Point -> Int x (Point px _) = px y (Point _ py) = py topLeft, bottomRight :: Square -> Point topLeft (Square tl _) = tl bottomRight (Square _ br) = br -- And setters... 1.1 Overloaded Record Dot However, by turning on the OverloadedRecordDot syntax extension, you can use more syntactic sugar to project the fields of a record instead of using the field name as a standard function: {-# LANGUAGE OverloadedRecordDot #-} mySquareWidth = mySquare.bottomRight.x - mySquare.topLeft.x which is neat! I like OverloadedRecordDot. It looks clean and feels more like using proper property of the record data type. It is also less ambiguous for an LSP to suggest the record properties of a data type by typing after the ., than it is to suggest functions to apply to the record type argument. 1.2 Named Field Puns Since I'm already writing about records, I'll mention another extension I quite enjoy: NamedFieldPuns. Traditionally, when matching on a record, you can list the field names and bind variables to the value associated with that field. Continuing the above example: area :: Square -> Int area Square{topLeft = tl, bottomRight = br} = (br.x

## Data Classes and Destructuring

DevFeed: [Data Classes and Destructuring](<https://devfeed.tech/articles/data-classes-and-destructuring-25052.md>)

Original publisher: [Read original article](<https://typealias.com/start/kotlin-data-classes-and-destructuring/>)

Author: author@typealias.com (Dave Leeds)

Published: 2023-10-09T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dave Leeds on Kotlin - typealias.com](<https://devfeed.tech/sources/dave-leeds-on-kotlin-typealias-com.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [class](<https://devfeed.tech/tags/class.md>), [classes](<https://devfeed.tech/tags/classes.md>), [copy](<https://devfeed.tech/tags/copy.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [destructuring](<https://devfeed.tech/tags/destructuring.md>), [destructuring-assignment](<https://devfeed.tech/tags/destructuring-assignment.md>), [equals](<https://devfeed.tech/tags/equals.md>), [hashcode](<https://devfeed.tech/tags/hashcode.md>), [introduction](<https://devfeed.tech/tags/introduction.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [learn-to-program](<https://devfeed.tech/tags/learn-to-program.md>), [object](<https://devfeed.tech/tags/object.md>), [open](<https://devfeed.tech/tags/open.md>), [operator](<https://devfeed.tech/tags/operator.md>), [override](<https://devfeed.tech/tags/override.md>), [programming](<https://devfeed.tech/tags/programming.md>), [properties](<https://devfeed.tech/tags/properties.md>), [tostring](<https://devfeed.tech/tags/tostring.md>)

### AI overview

A Kotlin tutorial introducing data classes and destructuring. It explains how data classes relate to equals(), hashCode(), and toString(), beginning with reference equality and overriding inherited functions.

### Source excerpt

At the end of the last chapter, we saw how all objects in Kotlin inherit three functions from an open class called Any. Those functions are equals(), hashCode(), and toString(). In this chapter, we're going to learn about data classes, which are super-powered classes that are especially helpful when we've got an immutable class that mainly just holds properties. To better understand data classes, let's first explore each of the three functions above, and see what's involved when we override them!

## More Accessible Graphs with Jetpack Compose Part 3: Differentiating without Color

DevFeed: [More Accessible Graphs with Jetpack Compose Part 3: Differentiating without Color](<https://devfeed.tech/articles/more-accessible-graphs-with-jetpack-compose-part-3-differentiating-without-color-38462.md>)

Original publisher: [Read original article](<https://eevis.codes/blog/2023-08-16/more-accessible-graphs-with-jetpack-compose-part-3-differentiating-without/>)

Author: Eevis Panula

Published: 2025-06-11T04:27:29.325000Z

Content type: tutorial

Language: en

Sources: [Eevis Blog](<https://devfeed.tech/sources/eevis-blog.md>)

Topics: [Graphs](<https://devfeed.tech/topics/graphs.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [color](<https://devfeed.tech/topics/color.md>), [Code](<https://devfeed.tech/topics/code.md>), [function](<https://devfeed.tech/topics/function.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [accessible](<https://devfeed.tech/tags/accessible.md>), [code](<https://devfeed.tech/tags/code.md>), [color](<https://devfeed.tech/tags/color.md>), [function](<https://devfeed.tech/tags/function.md>), [graphs](<https://devfeed.tech/tags/graphs.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

The third article in a series on accessible graphs with Jetpack Compose explains why data should not be differentiated by color alone. It demonstrates using different point shapes and line patterns to improve distinguishability for people with color-vision differences and across screens with varying color reproduction.

### Source excerpt

This blog post is the third one in my series on more accessible graphs with Jetpack Compose. You can find the previous two from the following links: More Accessible Graphs with Jetpack Compose Part 1: Adding Content Description More Accessible Graphs with Jetpack Compose Part 2: Adding Keyboard Interaction The third topic we will cover is differentiating data by other means than color. Color is a convenient way to distinguish data, but what if you can't see color? Or what if you see colors differently? For example, the example project we've been developing during the blog post series would look like this for someone who can't see color at all: And someone with red-green color blindness: Another aspect of why not use color alone is that phone screens display color differently. A noticeable difference on a high-end external screen for a designer might be almost the same shades for a lower-end phone, making usage impossible. There are better ideas than just using color to differentiate data. In the next section, let's explore some of these other ways. Options for Color When talking about graphs, there are generally two ways to improve the distinguishability of data: Shapes and patterns. For example, if a bar chart is initially differentiated by color, adding patterns for different colors could differentiate those bars. For a line chart, both these options are valid. Let's explore both and differentiate the data by adding different shapes for points and some patterns for the line. This solution is not the most beautiful because I'm mixing these two options, but it's there to demonstrate, not to be a final design. The Code In the situation we're starting with, the function we're using to draw the data points looks like this: drawPoints( points = pixelPoints.map { Offset(it.x + 20f, it.y) }, pointMode = PointMode.Points, color = color, strokeWidth = 8.dp.toPx(), cap = StrokeCap.Round, ) It takes the points and point mode from the parameters, and other than that, everythin

## Kotlin and Java interoperability: Properties and annotations

DevFeed: [Kotlin and Java interoperability: Properties and annotations](<https://devfeed.tech/articles/kotlin-and-java-interoperability-properties-and-annotations-39202.md>)

Original publisher: [Read original article](<https://kt.academy/article/ak-java-interop-2>)

Published: 2023-08-07T00:15:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [interoperability](<https://devfeed.tech/topics/interoperability.md>), [Java](<https://devfeed.tech/topics/java.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [annotation](<https://devfeed.tech/tags/annotation.md>), [interoperability](<https://devfeed.tech/tags/interoperability.md>), [java](<https://devfeed.tech/tags/java.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [properties](<https://devfeed.tech/tags/properties.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains how Kotlin properties map to Java getters, setters, fields, delegates, and constructor parameters. It shows how use-site annotation targets select specific generated JVM elements and discusses Kotlin object declarations, companion objects, and compiler-generated static methods for Java interoperability.

### Source excerpt

Kotlin property is Java getter, setter, field and possibly more. So what to do, when you need to annotate or use a specific JVM element?

## Observable and Vetoable delegates

DevFeed: [Observable and Vetoable delegates](<https://devfeed.tech/articles/observable-and-vetoable-delegates-39212.md>)

Original publisher: [Read original article](<https://kt.academy/article/ak-observable-vetoable>)

Published: 2023-05-02T00:15:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [properties](<https://devfeed.tech/topics/properties.md>), [function](<https://devfeed.tech/topics/function.md>)

Tags: [kotlin](<https://devfeed.tech/tags/kotlin.md>), [logs](<https://devfeed.tech/tags/logs.md>), [properties](<https://devfeed.tech/tags/properties.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

A tutorial on Kotlin observable and vetoable delegates, explaining how property changes can trigger actions, update views, log changes, and influence application state.

### Source excerpt

What are observable and vetoable delegates, and what are their real-life use cases.

[Next page](<https://devfeed.tech/tags/properties.md?cursor=WyIyMDIzLTA1LTAyVDAwOjE1OjAwKzAwOjAwIiwgIjlkOTMyOTkyLTBkZDEtNGJkMC1hNWY3LWM0YjVjY2NiNzY3OCJd>)