# value

Published articles for value.

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

## 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

## QNAP TS-262A and TS-462A NAS Released - New x62A Series Replaces the Older TS-262/TS-462

DevFeed: [QNAP TS-262A and TS-462A NAS Released - New x62A Series Replaces the Older TS-262/TS-462](<https://devfeed.tech/articles/qnap-ts-262a-and-ts-462a-nas-released-new-x62a-series-replaces-the-older-ts-262-ts-462-17359.md>)

Original publisher: [Read original article](<https://nascompares.com/2026/08/12/qnap-ts-262a-and-ts-462a-nas-released-new-x62a-series-replaces-the-older-ts-262-ts-462/>)

Author: Rob Andrews

Published: 2026-08-12T16:00:09Z

Content type: news

Language: en

Sources: [NAS Compares](<https://devfeed.tech/sources/nas-compares.md>)

Topics: [QNAP](<https://devfeed.tech/topics/qnap.md>), [TS-462A](<https://devfeed.tech/topics/ts-462a.md>), [Intel Celeron N5095](<https://devfeed.tech/topics/intel-celeron-n5095.md>), [TS-462](<https://devfeed.tech/topics/ts-462.md>), [intel](<https://devfeed.tech/topics/intel.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [2-5gbe](<https://devfeed.tech/tags/2-5gbe.md>), [2-bay-nas](<https://devfeed.tech/tags/2-bay-nas.md>), [4-bay-nas](<https://devfeed.tech/tags/4-bay-nas.md>), [home-nas](<https://devfeed.tech/tags/home-nas.md>), [intel](<https://devfeed.tech/tags/intel.md>), [intel-celeron-n5095](<https://devfeed.tech/tags/intel-celeron-n5095.md>), [nas](<https://devfeed.tech/tags/nas.md>), [network-attached-storage-nas](<https://devfeed.tech/tags/network-attached-storage-nas.md>), [news](<https://devfeed.tech/tags/news.md>), [news-2026](<https://devfeed.tech/tags/news-2026.md>), [nvme](<https://devfeed.tech/tags/nvme.md>), [plex-nas](<https://devfeed.tech/tags/plex-nas.md>), [qnap](<https://devfeed.tech/tags/qnap.md>), [qnap-nas](<https://devfeed.tech/tags/qnap-nas.md>), [qnap-ts-262a](<https://devfeed.tech/tags/qnap-ts-262a.md>), [qnap-ts-462a](<https://devfeed.tech/tags/qnap-ts-462a.md>), [qts](<https://devfeed.tech/tags/qts.md>), [systems](<https://devfeed.tech/tags/systems.md>), [ts-262](<https://devfeed.tech/tags/ts-262.md>), [ts-262a](<https://devfeed.tech/tags/ts-262a.md>), [ts-462](<https://devfeed.tech/tags/ts-462.md>), [ts-462a](<https://devfeed.tech/tags/ts-462a.md>), [uncategorised](<https://devfeed.tech/tags/uncategorised.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

QNAP has listed the TS-262A and TS-462A, new desktop NAS systems that appear to replace the older TS-262 and TS-462. The main reported change is a move from the dual-core Intel Celeron N4505 to the quad-core Intel Celeron N5095.

### Source excerpt

QNAP has now listed the TS-262A and TS-462A, two new Intel-powered desktop NAS systems that appear to replace the older TS-262 and TS-462 in the value-focused x62 family. The headline change is the move from the older dual-core Intel Celeron N4505 platform to a quad-core Intel Celeron N5095, while keeping the same core idea: affordable [...]

## TBM 430: Incubate, Compound, Refinance, Liquidate

DevFeed: [TBM 430: Incubate, Compound, Refinance, Liquidate](<https://devfeed.tech/articles/tbm-430-incubate-compound-refinance-liquidate-40056.md>)

Original publisher: [Read original article](<https://cutlefish.substack.com/p/tbm-430-incubate-compound-refinance>)

Author: John Cutler

Published: 2026-07-12T20:57:05Z

Content type: opinion

Language: en

Sources: [The Beautiful Mess](<https://devfeed.tech/sources/the-beautiful-mess.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Software](<https://devfeed.tech/topics/software.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [cost](<https://devfeed.tech/tags/cost.md>), [coupling](<https://devfeed.tech/tags/coupling.md>), [product](<https://devfeed.tech/tags/product.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

This opinion article combines software portfolio economics with AI, arguing that AI does not remove complexity, coupling, coordination, uncertainty, or decay. Instead, it can change the cost, speed, and feasibility of responding to them. The article uses a value-versus-carrying-cost model to describe software assets as incubate, compound, refinance, or liquidate cases.

### Source excerpt

tl;dr: AI does not eliminate complexity, coupling, coordination, uncertainty, or decay.

## LLM 训练与推理的基本理解

DevFeed: [LLM 训练与推理的基本理解](<https://devfeed.tech/articles/llm-40974.md>)

Original publisher: [Read original article](<https://blog.joway.io/posts/deep-into-llm/>)

Author: Joway

Published: 2026-05-17T00:00:00Z

Content type: tutorial

Language: zh

Sources: [Random Thoughts](<https://devfeed.tech/sources/random-thoughts.md>)

Topics: [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Language models](<https://devfeed.tech/topics/language-models.md>), [Transformer](<https://devfeed.tech/topics/transformer.md>)

Tags: [embedding](<https://devfeed.tech/tags/embedding.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [language](<https://devfeed.tech/tags/language.md>), [large-language-model](<https://devfeed.tech/tags/large-language-model.md>), [llm](<https://devfeed.tech/tags/llm.md>), [model](<https://devfeed.tech/tags/model.md>), [query](<https://devfeed.tech/tags/query.md>), [tech](<https://devfeed.tech/tags/tech.md>), [token](<https://devfeed.tech/tags/token.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

This Chinese tutorial explains foundational LLM training and inference concepts, including vector operations, linear layers, Softmax, LayerNorm, tokenization, token IDs, BPE, token and positional embeddings, and the initial steps of self-attention using Q, K, and V vectors.

### Source excerpt

学习一个技术最好的方式就是能够写一片文章把这个技术的原理解释清楚，本文记录了我在阅读 《Build a Large Language Model (From Scratch)》一书以及和 Claude Code 对话过程中的笔记，仅供参考。 术语解释 向量点积 定义：向量点积为标量 a = (a1, a2, a3) b = (b1, b2, b3) a - b = a1*b1 + a2*b2 + a3*b3 几何意义： a - b = |a| |b| cos(theta) 其中 theta 是两个向量的夹角。

## Using Viability and Feasibility to Guide Ambiguous Design Projects

DevFeed: [Using Viability and Feasibility to Guide Ambiguous Design Projects](<https://devfeed.tech/articles/turning-ambiguity-into-opportunity-how-8th-light-designers-innovate-from-the-unknown-33273.md>)

Original publisher: [Read original article](<https://8thlight.com/insights/human-centered-design-clarity>)

Author: Agustin Sanchez

Published: 2025-07-25T05:00:00Z

Content type: article

Language: en

Sources: [8th Light Insights](<https://devfeed.tech/sources/8th-light-insights.md>)

Topics: [iteration](<https://devfeed.tech/topics/iteration.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Users](<https://devfeed.tech/topics/users.md>)

Tags: [experiential-design](<https://devfeed.tech/tags/experiential-design.md>), [experiment](<https://devfeed.tech/tags/experiment.md>), [human-centered-design](<https://devfeed.tech/tags/human-centered-design.md>), [iteration](<https://devfeed.tech/tags/iteration.md>), [onboarding](<https://devfeed.tech/tags/onboarding.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

This article presents human-centered design as a way to navigate ambiguous projects. It explains how defining business objectives and measurable outcomes establishes viability, while testing ideas early and iterating helps assess feasibility and reduce risk.

### Source excerpt

Updated 7/25/2025. Originally published 12/10/2024 Ambiguity in design isn't a roadblock -- it's an opportunity. Design ingenuity thrives in the gray area where rules haven't been written, and solutions are waiting to be discovered. So how do you turn "I have no idea where to start" into breakthrough ideas that actually work? At 8th Light, our approach is anchored in the three pillars of human-centered design: viability, feasibility, and desirability. These are the tools that transform chaos into clarity and make ambiguity your ally, not your enemy. Viability: Define Your Destination Before Picking the Route The truth is, you don't need to know the "how" right away. However, you absolutely need to know the "why." Viability ensures your team stays aligned with business objectives, reducing costly detours and keeping your efforts focused on delivering measurable value. Picture this: You're tasked with fixing an outdated customer onboarding process. The details are vague, but the goal is crystal clear -- reduce the time it takes for new users to find value. Once you've mastered the "why," the rest becomes an experiment. Early setbacks are simply data points, guiding you toward smarter decisions. Viability keeps you aligned with business objectives, ensuring that every test and rapid iteration thereafter, serves a purpose. Pro tip: Start every ambiguous project with these two questions: What are we trying to achieve? Why does this matter? -> Takeaway: Before starting a project, define clear business objectives and measurable outcomes. Use these as your north star to guide every decision. Feasibility: Stop Guessing, Start Testing With your goals in place, it's time to embrace the unknown and start experimenting. Feasibility minimizes risk by validating ideas early, reducing the chance of expensive missteps, and accelerating your path to market-ready solutions, encouraging you to iterate effectively to reach the solution. It answers the question: Can we actually build this?

## Make regular expressions easier to read

DevFeed: [Make regular expressions easier to read](<https://devfeed.tech/articles/make-regular-expressions-easier-to-read-37309.md>)

Original publisher: [Read original article](<https://muffinman.io/blog/make-regular-expressions-easier-to-read/>)

Author: Stanko

Published: 2025-03-31T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stanko Tadić](<https://devfeed.tech/sources/stanko-tadic.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [formatting](<https://devfeed.tech/topics/formatting.md>), [Maintainability](<https://devfeed.tech/topics/maintainability.md>)

Tags: [example](<https://devfeed.tech/tags/example.md>), [extra](<https://devfeed.tech/tags/extra.md>), [join](<https://devfeed.tech/tags/join.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [readability](<https://devfeed.tech/tags/readability.md>), [regular-expressions](<https://devfeed.tech/tags/regular-expressions.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

The article presents a formatting technique for making complex regular expressions easier to read: split the expression into multiple string components, join them, and construct the final regex. The approach adds code and requires escaping backslashes, but enables scanning and comments that can improve readability and maintainability.

### Source excerpt

This is a simple formatting trick I use to make regular expressions more readable. The secret? Break them into multiple lines. To achieve this, format the regex as an array of strings and then concatenate the array into a single regex string. Example # Compare this example, written in a single line: const FILTER_REGEXP = /(?<name>blur|brightness|contrast|grayscale|hue-rotate|invert|opacity|saturate|sepia)\((?<value>-?\d*(?:\.\d*)?)(?<unit>\w*?)\)/g; with the multi-line version: const SUPPORTED_FILTERS = [ 'blur', 'brightness', 'contrast', 'grayscale', 'hue-rotate', 'invert', 'opacity', 'saturate', 'sepia', ].join('|'); const FILTER_REGEXP = new RegExp( [ `(?<name>${SUPPORTED_FILTERS})`, // filter name `\\(`, `(?<value>\-?\\d*(?:\\.\\d*)?)`, // value `(?<unit>\\w*?)`, // unit if any `\\)`, ].join(''), 'g' ); The multi-line version has a bit more code, but it's easier to scan and read. It also allows us to write comments for each section, clarifying the purpose of each part of the regex. I've found that complex expressions are much easier to write this way. I believe it greatly reduces the cognitive load for both the writer and the reader. Caveats # You'll need to escape the backslashes in regex strings. While this is a minor inconvenience, the readability benefits easily outweigh it. Conclusion # It boils down to personal preference, but I believe the extra code is worth it, as it improves readability and maintainability. This is especially true when dealing with notoriously difficult-to-parse complex regular expressions.

## Engineers Should Take Responsibility for Bugs in AI-Generated Code

DevFeed: [Engineers Should Take Responsibility for Bugs in AI-Generated Code](<https://devfeed.tech/articles/ai-didn-t-write-that-bug-33438.md>)

Original publisher: [Read original article](<https://timkellogg.me/blog/2024/09/24/ownership>)

Published: 2024-09-24T00:00:00Z

Content type: opinion

Language: en

Sources: [Tim Kellogg](<https://devfeed.tech/sources/tim-kellogg.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [bug](<https://devfeed.tech/topics/bug.md>), [Git](<https://devfeed.tech/topics/git.md>), [coding](<https://devfeed.tech/topics/coding.md>), [trust](<https://devfeed.tech/topics/trust.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [autonomous](<https://devfeed.tech/tags/autonomous.md>), [bug](<https://devfeed.tech/tags/bug.md>), [code](<https://devfeed.tech/tags/code.md>), [coding](<https://devfeed.tech/tags/coding.md>), [commit](<https://devfeed.tech/tags/commit.md>), [git](<https://devfeed.tech/tags/git.md>), [junior](<https://devfeed.tech/tags/junior.md>), [management](<https://devfeed.tech/tags/management.md>), [manager](<https://devfeed.tech/tags/manager.md>), [solve](<https://devfeed.tech/tags/solve.md>), [support](<https://devfeed.tech/tags/support.md>), [team](<https://devfeed.tech/tags/team.md>), [testing](<https://devfeed.tech/tags/testing.md>), [trust](<https://devfeed.tech/tags/trust.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

This opinion article argues that engineers remain accountable for bugs in code generated with AI. It says attributing defects to AI reduces an engineer's perceived value, and that responsible use requires testing, judgment, and ownership.

### Source excerpt

AI didn't write that bug. If you're name is on the commit in Git, you wrote the bug.

## July 2024 - Bookmarks

DevFeed: [July 2024 - Bookmarks](<https://devfeed.tech/articles/july-2024-bookmarks-32286.md>)

Original publisher: [Read original article](<https://domenicoluciani.com/2024/07/01/bookmarks.html>)

Published: 2024-06-30T22:00:00Z

Content type: article

Language: en

Sources: [Domenico Luciani](<https://devfeed.tech/sources/domenico-luciani.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Domain-driven design (DDD)](<https://devfeed.tech/topics/domain-driven-design.md>)

Tags: [complexity](<https://devfeed.tech/tags/complexity.md>), [development](<https://devfeed.tech/tags/development.md>), [domain](<https://devfeed.tech/tags/domain.md>), [domain-driven-design](<https://devfeed.tech/tags/domain-driven-design.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

A July 2024 bookmark list linking to four articles about engineering thinking, organizational knowledge, complexity at scale, domain-driven design, and value engineering.

### Source excerpt

Bookmarks for July 2024: 4 links - Reintroducing engineering thinking in the...; Process doesn't scale. Knowledge does. - b..., and more.

## SharedFlow vs StateFlow

DevFeed: [SharedFlow vs StateFlow](<https://devfeed.tech/articles/sharedflow-vs-stateflow-39374.md>)

Original publisher: [Read original article](<https://kt.academy/article/sharedflow_vs_stateflow>)

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

Content type: tutorial

Language: en

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

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [WebSocket](<https://devfeed.tech/topics/websocket.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [backend](<https://devfeed.tech/tags/backend.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [messages](<https://devfeed.tech/tags/messages.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [progress](<https://devfeed.tech/tags/progress.md>), [service](<https://devfeed.tech/tags/service.md>), [sharedflow](<https://devfeed.tech/tags/sharedflow.md>), [state](<https://devfeed.tech/tags/state.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>), [users](<https://devfeed.tech/tags/users.md>), [value](<https://devfeed.tech/tags/value.md>), [websocket](<https://devfeed.tech/tags/websocket.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains the distinction between Kotlin's StateFlow and SharedFlow. StateFlow represents observable application state, while SharedFlow broadcasts events to observers. It discusses replay, required initial values, distinct updates, conflation, and examples for Android and backend services.

### Source excerpt

When to use SharedFlow and when to use StateFlow.

## Tabletop Games Based on Math Problems

DevFeed: [Tabletop Games Based on Math Problems](<https://devfeed.tech/articles/tabletop-games-based-on-math-problems-40482.md>)

Original publisher: [Read original article](<https://www.jeremykun.com/2024/03/08/tabletop-games-based-on-math-problems/>)

Published: 2024-03-09T04:06:19Z

Content type: article

Language: en

Sources: [Jeremy Kun](<https://devfeed.tech/sources/jeremy-kun.md>)

Topics: [math](<https://devfeed.tech/topics/math.md>), [Mathematics](<https://devfeed.tech/topics/mathematics.md>), [Math and Logic](<https://devfeed.tech/topics/math-and-logic.md>), [Hugo](<https://devfeed.tech/topics/hugo.md>), [LaTeX](<https://devfeed.tech/topics/latex.md>), [WordPress](<https://devfeed.tech/topics/wordpress.md>)

Tags: [card-games](<https://devfeed.tech/tags/card-games.md>), [color](<https://devfeed.tech/tags/color.md>), [games](<https://devfeed.tech/tags/games.md>), [math](<https://devfeed.tech/tags/math.md>), [mathematics](<https://devfeed.tech/tags/mathematics.md>), [problems](<https://devfeed.tech/tags/problems.md>), [projective-plane](<https://devfeed.tech/tags/projective-plane.md>), [set](<https://devfeed.tech/tags/set.md>), [tabletop-games](<https://devfeed.tech/tags/tabletop-games.md>), [unique](<https://devfeed.tech/tags/unique.md>), [value](<https://devfeed.tech/tags/value.md>), [vector](<https://devfeed.tech/tags/vector.md>)

### AI overview

A short list of tabletop games whose mechanics are directly based on nontrivial mathematical structures or problems. It discusses games including SET and Spot It!, along with related questions in finite geometry, vector spaces, and combinatorics.

### Source excerpt

There's a family of tabletop games that are based directly on a nontrivial mathematics problem. As a casual and fun way to inaugurate my new blog (migrated from Wordpress to Hugo, after my work on getting better LaTeX mathmode support in Hugo), I thought I'd write a short listicle about them, so that I have a place to add more as I find them, as well as give the shortest canonical description of the associated math problem.

## Making Twig Macros Work Like Functions

DevFeed: [Making Twig Macros Work Like Functions](<https://devfeed.tech/articles/making-twig-macros-work-like-functions-31280.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/making-twig-macros-work-like-functions>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2023-07-14T18:38:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Development](<https://devfeed.tech/topics/development.md>), [reusable code](<https://devfeed.tech/topics/reusable-code.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [functions](<https://devfeed.tech/tags/functions.md>), [insights](<https://devfeed.tech/tags/insights.md>), [just](<https://devfeed.tech/tags/just.md>), [languages](<https://devfeed.tech/tags/languages.md>), [learn](<https://devfeed.tech/tags/learn.md>), [like](<https://devfeed.tech/tags/like.md>), [macros](<https://devfeed.tech/tags/macros.md>), [make](<https://devfeed.tech/tags/make.md>), [manipulate](<https://devfeed.tech/tags/manipulate.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>), [return](<https://devfeed.tech/tags/return.md>), [returning](<https://devfeed.tech/tags/returning.md>), [reusable-code](<https://devfeed.tech/tags/reusable-code.md>), [twig](<https://devfeed.tech/tags/twig.md>), [value](<https://devfeed.tech/tags/value.md>), [values](<https://devfeed.tech/tags/values.md>)

### AI overview

A tutorial on making Twig macros return values that can be manipulated like function results. It demonstrates a sales-calculation macro, whitespace control, and returning a value for further computations such as sales tax.

### Source excerpt

Learn how to make Twig macros return values you can manipulate, just like functions in other programming languages

## Scrollbar width custom event

DevFeed: [Scrollbar width custom event](<https://devfeed.tech/articles/scrollbar-width-custom-event-37346.md>)

Original publisher: [Read original article](<https://muffinman.io/blog/scrollbar-size-observer/>)

Author: Stanko

Published: 2023-06-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stanko Tadić](<https://devfeed.tech/sources/stanko-tadic.md>)

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

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [code](<https://devfeed.tech/tags/code.md>), [css](<https://devfeed.tech/tags/css.md>), [demo](<https://devfeed.tech/tags/demo.md>), [developers](<https://devfeed.tech/tags/developers.md>), [example](<https://devfeed.tech/tags/example.md>), [examples](<https://devfeed.tech/tags/examples.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [layout](<https://devfeed.tech/tags/layout.md>), [live](<https://devfeed.tech/tags/live.md>), [load](<https://devfeed.tech/tags/load.md>), [prevent](<https://devfeed.tech/tags/prevent.md>), [stack-overflow](<https://devfeed.tech/tags/stack-overflow.md>), [value](<https://devfeed.tech/tags/value.md>), [variable](<https://devfeed.tech/tags/variable.md>)

### AI overview

This tutorial explains scrollbar-related layout issues and shows how to create a custom JavaScript event that detects changes in scrollbar width using ResizeObserver. It also covers initializing a CSS variable early to reduce layout shift and briefly mentions a CSS alternative.

### Source excerpt

Some operating systems and browsers are not showing scrollbars by default. That often results in developers forgetting about these pesky gray bars and the issues they can cause. I'll give you two quick examples: When setting overflow: hidden on the body element, if there was a scrollbar visible, content will jump a little as it now has more space. If you ever implemented scroll locking for modals, you've probably encountered this issue. Another thing is that width: 100vw and width: 100% on the body element don't match if there is a scrollbar visible: 100vw is the width of the viewport including the scrollbar. 100% is the width of the viewport excluding the scrollbar. This becomes obvious if you have a fixed element like a header. It will be a little bit wider than the rest of the content when scrollbar is visible. I'm sure there are more issues, but these are the two I remembered on top of my head. Anyhow, let's see how to solve this. JavaScript solution # Ideally we would like to have a scrollbar-width event. It doesn't exist, so we'll have to create a custom event ourselves, and trigger it when scrollbar width changes. To catch the width changing, we can't use the resize event because viewport size don't change when scrollbar is toggled. However, if we set the ResizeObserver on the html element, it will trigger when the scrollbar is toggled. Code # After setting the observer we need to fire our custom event when width has changed. Code looks something like this: const initScrollbarWidthEvent = () => { // Custom event const scrollbarEvent = new Event("scrollbar-width"); // Initial state let currentWidth = window.innerWidth - document.documentElement.clientWidth; const observer = new ResizeObserver(() => { const newWidth = window.innerWidth - document.documentElement.clientWidth; // Check if the scrollbar width has changed and trigger the custom event if (newWidth !== currentWidth) { // Update event data // We are passing both previous and current width, // because

## Introducing the Fermyon Cloud Key Value Store

DevFeed: [Introducing the Fermyon Cloud Key Value Store](<https://devfeed.tech/articles/introducing-the-fermyon-cloud-key-value-store-15266.md>)

Original publisher: [Read original article](<https://www.fermyon.com/blog/introducing-fermyon-cloud-key-value-store>)

Author: The Fermyon Team

Published: 2023-04-18T07:00:00Z

Content type: release

Language: en

Sources: [Fermyon - Experience the next wave of cloud computing.](<https://devfeed.tech/sources/fermyon-experience-the-next-wave-of-cloud-computing.md>)

Topics: [Cloud](<https://devfeed.tech/topics/cloud.md>), [Serverless](<https://devfeed.tech/topics/serverless.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [application](<https://devfeed.tech/tags/application.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [data](<https://devfeed.tech/tags/data.md>), [key-value-store](<https://devfeed.tech/tags/key-value-store.md>), [serverless](<https://devfeed.tech/tags/serverless.md>), [store](<https://devfeed.tech/tags/store.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

Fermyon introduces a Cloud Key Value Store for persisting non-relational data in a key/value store for serverless applications. The store is described as always available within milliseconds and having no cold starts.

### Source excerpt

With the introduction of the Fermyon Cloud Key Value Store, you can now persist non-relational data in a key/value store that is always available for your serverless application within milliseconds, with no cold starts.

## SharedFlow and StateFlow

DevFeed: [SharedFlow and StateFlow](<https://devfeed.tech/articles/sharedflow-and-stateflow-39238.md>)

Original publisher: [Read original article](<https://kt.academy/article/cc-sharedflow-stateflow>)

Published: 2022-02-21T00:00:00Z

Content type: tutorial

Language: en

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

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [RxJava](<https://devfeed.tech/topics/rxjava.md>)

Tags: [channel](<https://devfeed.tech/tags/channel.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [flow](<https://devfeed.tech/tags/flow.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [livedata](<https://devfeed.tech/tags/livedata.md>), [rxjava](<https://devfeed.tech/tags/rxjava.md>), [scope](<https://devfeed.tech/tags/scope.md>), [sharedflow](<https://devfeed.tech/tags/sharedflow.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>), [value](<https://devfeed.tech/tags/value.md>), [values](<https://devfeed.tech/tags/values.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

A tutorial explaining Kotlin's SharedFlow and StateFlow for broadcasting and observing values among multiple coroutines. It covers replayed values, cancellation, interfaces for collecting and emitting, and converting a Flow with shareIn.

### Source excerpt

Known as a replacement for Subject, LiveData, and many more. SharedFlow and StateFlow are powerful coroutines classes, every Kotlin developer should know.

## Effective Kotlin Item 52: Consider using inline value classes

DevFeed: [Effective Kotlin Item 52: Consider using inline value classes](<https://devfeed.tech/articles/effective-kotlin-item-52-consider-using-inline-value-classes-39295.md>)

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

Published: 2021-09-06T00:00:00Z

Content type: tutorial

Language: en

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

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

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

### AI overview

This tutorial explains Kotlin inline value classes, including how they can wrap a single value with little or no performance overhead. It covers using them to represent units of measure, prevent value misuse through types, and optimize memory usage.

### Source excerpt

What value classes are, how to use and inline them.

## EOF is not a character

DevFeed: [EOF is not a character](<https://devfeed.tech/articles/eof-is-not-a-character-33311.md>)

Original publisher: [Read original article](<https://ruslanspivak.com/eofnotchar/>)

Author: Ruslan Spivak

Published: 2020-03-01T16:53:00Z

Content type: tutorial

Language: en

Sources: [Ruslan Spivak](<https://devfeed.tech/sources/ruslan-spivak.md>)

Topics: [C](<https://devfeed.tech/topics/c.md>), [IO](<https://devfeed.tech/topics/io.md>), [Unix](<https://devfeed.tech/topics/unix.md>), [ASCII](<https://devfeed.tech/topics/ascii.md>), [Streams](<https://devfeed.tech/topics/streams.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ascii](<https://devfeed.tech/tags/ascii.md>), [blog](<https://devfeed.tech/tags/blog.md>), [c](<https://devfeed.tech/tags/c.md>), [code](<https://devfeed.tech/tags/code.md>), [computer](<https://devfeed.tech/tags/computer.md>), [example](<https://devfeed.tech/tags/example.md>), [file](<https://devfeed.tech/tags/file.md>), [function](<https://devfeed.tech/tags/function.md>), [library](<https://devfeed.tech/tags/library.md>), [linux](<https://devfeed.tech/tags/linux.md>), [mac-os](<https://devfeed.tech/tags/mac-os.md>), [python](<https://devfeed.tech/tags/python.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>), [stream](<https://devfeed.tech/tags/stream.md>), [systems](<https://devfeed.tech/tags/systems.md>), [text](<https://devfeed.tech/tags/text.md>), [unix](<https://devfeed.tech/tags/unix.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

This tutorial explains that EOF in C is not a character and is not stored at the end of a file. It examines EOF in Unix I/O, its usual value of -1, and why that value cannot represent a character.

### Source excerpt

I was reading Computer Systems: A Programmer's Perspective the other day and in the chapter on Unix I/O the authors mention that there is no explicit "EOF character" at the end of a file.

## Value-Based Pricing and TDD

DevFeed: [Value-Based Pricing and TDD](<https://devfeed.tech/articles/value-based-pricing-and-tdd-32239.md>)

Original publisher: [Read original article](<https://bruceeckel.com/blog/2020-02-09-value-based-pricing-and-tdd/>)

Author: Bruce Eckel

Published: 2020-02-09T00:00:00Z

Content type: opinion

Language: en

Sources: [Bruce Eckel - Computing Thoughts](<https://devfeed.tech/sources/bruce-eckel-computing-thoughts.md>)

Topics: [Test-driven development](<https://devfeed.tech/topics/tdd.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [pricing](<https://devfeed.tech/tags/pricing.md>), [tdd](<https://devfeed.tech/tags/tdd.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

The article examines value-based pricing and its relationship to Test-Driven Development. It argues that financial incentives can encourage clever thinking, while also emphasizing non-financial motivations such as reducing tedium, improving quality, and quality of life.

### Source excerpt

I first heard about value-based pricing from an accountant who was creating a startup based on the idea. He tells a story about consulting for a family who inherited an estate. Because of the accountant's extensive knowledge, he was able to give advice that saved the family a million or more. However, he only charged for his time, a couple of hours. To save that amount, the story goes, the family would have been happy to pay more, an amount based on the value of the work rather than the time it took.

## localStorage and sessionStorage in Safari's private mode

DevFeed: [localStorage and sessionStorage in Safari's private mode](<https://devfeed.tech/articles/localstorage-and-sessionstorage-in-safari-s-private-mode-37306.md>)

Original publisher: [Read original article](<https://muffinman.io/blog/localstorage-and-sessionstorage-in-safaris-private-mode/>)

Author: Stanko

Published: 2017-08-09T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stanko Tadić](<https://devfeed.tech/sources/stanko-tadic.md>)

Topics: [LocalStorage](<https://devfeed.tech/topics/localstorage.md>), [Code](<https://devfeed.tech/topics/code.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [error](<https://devfeed.tech/tags/error.md>), [export](<https://devfeed.tech/tags/export.md>), [ls](<https://devfeed.tech/tags/ls.md>), [null](<https://devfeed.tech/tags/null.md>), [object](<https://devfeed.tech/tags/object.md>), [qa](<https://devfeed.tech/tags/qa.md>), [quota](<https://devfeed.tech/tags/quota.md>), [return](<https://devfeed.tech/tags/return.md>), [safari](<https://devfeed.tech/tags/safari.md>), [storage](<https://devfeed.tech/tags/storage.md>), [test](<https://devfeed.tech/tags/test.md>), [value](<https://devfeed.tech/tags/value.md>), [version](<https://devfeed.tech/tags/version.md>)

### AI overview

This article explains that Safari private mode sets localStorage and sessionStorage limits to zero, preventing writes. It presents a localStorage facade that silently ignores storage operations when storage is unavailable, avoiding application errors.

### Source excerpt

If you didn't know, in Safari's private mode both localStorage and sessionStorage are not working. To be exact, Safari sets storage's limit to 0, so you can't write anything to it. I keep forgetting this, until QA people report it at some point. So I quickly wrote a small facade for it, which fails silently in this case. That means it still doesn't work but it won't throw an error and break your application. This is the version for localStorage, just replace it with sessionStorage if you need it. const LS_TEST_KEY = 'ls-test'; let isLocalStorageSupported = typeof localStorage === 'object'; // Try to try { localStorage.setItem(LS_TEST_KEY, 'test'); localStorage.removeItem(LS_TEST_KEY); } catch (e) { isLocalStorageSupported = false; // If we get error that we exceeded storage's quota // but storage is still empty we are in private mode if (e.code === DOMException.QUOTA_EXCEEDED_ERR && localStorage.length === 0) { // Private mode } else { throw e; } } const LocalStorage = { getItem: (key) => { if (isLocalStorageSupported) { return localStorage.getItem(key); } return null; }, setItem: (key, value) => { if (isLocalStorageSupported) { localStorage.setItem(key, value); } }, removeItem: (key) => { if (isLocalStorageSupported) { localStorage.removeItem(key); } }, }; export default LocalStorage;

## Preventing Google from Indexing Staging Sites

DevFeed: [Preventing Google from Indexing Staging Sites](<https://devfeed.tech/articles/preventing-google-from-indexing-staging-sites-31289.md>)

Original publisher: [Read original article](<https://nystudio107.com/blog/prevent-google-from-indexing-staging-sites>)

Author: andrew@nystudio107.com (Andrew Welch)

Published: 2017-02-02T09:00:00Z

Content type: tutorial

Language: en

Sources: [nystudio107 | Articles on modern web development.](<https://devfeed.tech/sources/nystudio107-articles-on-modern-web-development.md>)

Topics: [Search engine optimization (SEO)](<https://devfeed.tech/topics/seo.md>), [Crawler](<https://devfeed.tech/topics/crawler.md>), [Content Management System](<https://devfeed.tech/topics/cms.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [config](<https://devfeed.tech/tags/config.md>), [diluting](<https://devfeed.tech/tags/diluting.md>), [environments](<https://devfeed.tech/tags/environments.md>), [google](<https://devfeed.tech/tags/google.md>), [indexing](<https://devfeed.tech/tags/indexing.md>), [insights](<https://devfeed.tech/tags/insights.md>), [multi-environment](<https://devfeed.tech/tags/multi-environment.md>), [prevent](<https://devfeed.tech/tags/prevent.md>), [robots-txt](<https://devfeed.tech/tags/robots-txt.md>), [seo](<https://devfeed.tech/tags/seo.md>), [seomatic](<https://devfeed.tech/tags/seomatic.md>), [sites](<https://devfeed.tech/tags/sites.md>), [staging](<https://devfeed.tech/tags/staging.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

This tutorial explains how to prevent Google and other search engines from indexing staging sites. It presents robots.txt and SEOmatic as an alternative to password protection, allowing external performance and SEO testing while avoiding duplicate-content concerns.

### Source excerpt

SEOmatic and a multi-environment config can prevent Google from indexing your staging sites, and diluting your SEO value

## WinJS Two-Way Bindings

DevFeed: [WinJS Two-Way Bindings](<https://devfeed.tech/articles/winjs-two-way-bindings-41552.md>)

Original publisher: [Read original article](<http://www.adamtuliper.com/2013/06/winjs-two-way-bindings.html>)

Author: Adam Tuliper (noreply@blogger.com)

Published: 2013-06-03T04:24:00Z

Content type: tutorial

Language: en

Sources: [Adam Tuliper](<https://devfeed.tech/sources/adam-tuliper.md>)

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

Tags: [data](<https://devfeed.tech/tags/data.md>), [event](<https://devfeed.tech/tags/event.md>), [function](<https://devfeed.tech/tags/function.md>), [input](<https://devfeed.tech/tags/input.md>), [model](<https://devfeed.tech/tags/model.md>), [source](<https://devfeed.tech/tags/source.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

A tutorial explains how to implement two-way data binding in WinJS by combining one-way binding from source data to a destination with onchange event wiring from an input control back to the source model.

### Source excerpt

I learned a really cool trick from one of my team members Jeremy Foster over at codefoster.com to do two-way binding in WinJS. To do binding, the procedure is two steps. Since WinJS doesn't support two way bindings we need to define each one way binding. The first from source data to the destination and is done via WinJS.Binding.defaultBind. The second from the binding target back to the source data (in this case actually just from the input text box to the source model is done from an onchange event wiring. WinJS.Namespace.define("Binding.Mode", { twoway: WinJS.Binding.initializer(function (source, sourceProps, dest, destProps) { WinJS.Binding.defaultBind(source, sourceProps, dest, destProps); dest.onchange = function () { var d = dest[destProps[0]]; var s = source[sourceProps[0]]; if (s !== d) source[sourceProps[0]] = d; } }) }); <input type="text" data-win-bind="value: name Binding.Mode.twoway" /< That's it - super easy.

## How the Linux Kernel's container\_of() Macro Works

DevFeed: [How the Linux Kernel's container\_of() Macro Works](<https://devfeed.tech/articles/the-magical-container-of-macro-40712.md>)

Original publisher: [Read original article](<https://radek.io/posts/magical-container_of-macro/>)

Published: 2012-11-10T00:00:00Z

Content type: article

Language: en

Sources: [Radek Pazdera](<https://devfeed.tech/sources/radek-pazdera.md>)

Topics: [C](<https://devfeed.tech/topics/c.md>), [Linux Kernel](<https://devfeed.tech/topics/linux-kernel.md>), [container](<https://devfeed.tech/topics/container.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [standard](<https://devfeed.tech/topics/standard.md>)

Tags: [c](<https://devfeed.tech/tags/c.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [container](<https://devfeed.tech/tags/container.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [library](<https://devfeed.tech/tags/library.md>), [linux-kernel](<https://devfeed.tech/tags/linux-kernel.md>), [standard](<https://devfeed.tech/tags/standard.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

This tutorial explains how the Linux Kernel's container_of() macro derives a pointer to a containing structure from a pointer to one of its members. It describes GNU C extensions, including braced groups within expressions and typeof(), and explains the zero-pointer dereference and member-offset techniques used in the implementation.

### Source excerpt

Probably the most confusing piece of C code I've encountered

## Changing the Linux Shell Prompt

DevFeed: [Changing the Linux Shell Prompt](<https://devfeed.tech/articles/changing-the-linux-shell-prompt-40663.md>)

Original publisher: [Read original article](<https://radek.io/posts/changing-the-linux-shell-prompt/>)

Published: 2011-06-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Radek Pazdera](<https://devfeed.tech/sources/radek-pazdera.md>)

Topics: [Bash](<https://devfeed.tech/topics/bash.md>), [Shell](<https://devfeed.tech/topics/shell.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Variable](<https://devfeed.tech/topics/variable.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [change](<https://devfeed.tech/tags/change.md>), [command](<https://devfeed.tech/tags/command.md>), [environment](<https://devfeed.tech/tags/environment.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [linux](<https://devfeed.tech/tags/linux.md>), [prompt](<https://devfeed.tech/tags/prompt.md>), [shell](<https://devfeed.tech/tags/shell.md>), [value](<https://devfeed.tech/tags/value.md>), [variable](<https://devfeed.tech/tags/variable.md>)

### AI overview

A tutorial on customizing the Bash shell prompt on Linux by changing the prompt string environment variable. It explains prompt escape sequences, colors, temporary changes, and how to make the configuration permanent.

### Source excerpt

How to modify your shell prompt on Linux

## Forget Doing Something Better, Do Something Different

DevFeed: [Forget Doing Something Better, Do Something Different](<https://devfeed.tech/articles/forget-doing-something-better-do-something-different-41078.md>)

Original publisher: [Read original article](<https://www.craigkerstiens.com/2010/01/21/Forget-Doing-Something-Better-Do-Something-Different/>)

Author: Map

Published: 2010-01-21T22:49:33Z

Content type: opinion

Language: en

Sources: [Craig Kerstiens](<https://devfeed.tech/sources/craig-kerstiens.md>)

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

Tags: [customer](<https://devfeed.tech/tags/customer.md>), [execution](<https://devfeed.tech/tags/execution.md>), [ideas](<https://devfeed.tech/tags/ideas.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

The author argues that solving unsolved problems can create more value than making marginal improvements to existing products. They emphasize that execution matters more than the idea and that differentiation can make market entry easier.

### Source excerpt

I have a tendency of really latching onto very simple ideas. Typically these ideas don't require complex engineering to make them happen. This is not to say the engineering is not important, but more so that it is some variation of engineering feats that have been done before. The reason I tend to like these over more complex engineering that really makes something better is that making something better is typically a marginal improvement. When it's a marginal improvement it's a lot harder to sell. With marginal improvements you have to: In contrast if I address a problem that hasn't been solved my life instantly becomes a lot easier. I no longer have an argument of something not being good enough today, it becomes a question of value and how much its worth to solve the problem. Haggling over price is a conversation I'd rather have than trying to justify value and convince a customer they've been wrong in their choice for so many years. Over the coming days I'm going to be posting a few of these examples/ideas and why I like them. Many of them are still being thought through, and while as I sort them out, I'm generally happy to publish high points about them. The even bigger key here is that success is typically in the execution and less so in the idea, though even then I'd prefer to execute on something that has less battles than something that from the onset has more. By doing something that is being done today you get no advantages of penetrating the market.

## The benefit of leverage

DevFeed: [The benefit of leverage](<https://devfeed.tech/articles/the-benefit-of-leverage-41064.md>)

Original publisher: [Read original article](<https://www.craigkerstiens.com/2009/05/23/The-benefit-of-leverage/>)

Author: Map

Published: 2009-05-24T03:13:53Z

Content type: opinion

Language: en

Sources: [Craig Kerstiens](<https://devfeed.tech/sources/craig-kerstiens.md>)

Topics: [Job](<https://devfeed.tech/topics/job.md>), [X (Twitter)](<https://devfeed.tech/topics/twitter.md>)

Tags: [benefit](<https://devfeed.tech/tags/benefit.md>), [business](<https://devfeed.tech/tags/business.md>), [hiring](<https://devfeed.tech/tags/hiring.md>), [job](<https://devfeed.tech/tags/job.md>), [leverage](<https://devfeed.tech/tags/leverage.md>), [offer](<https://devfeed.tech/tags/offer.md>), [value](<https://devfeed.tech/tags/value.md>)

### AI overview

The article argues that employees often need leverage to negotiate fair compensation or treatment, especially when they can demonstrate valuable revenue potential, specialized internal knowledge, or credible outside opportunities. It also notes that relying on leverage undermines the fairness of the employment relationship.

### Source excerpt

Due to many recent events, which I'm sure I'll disclose later, I've been in an interesting situation of a good bit of leverage. While leverage can of course be taken advantage of and misused, it also plays a very fair role in business. When hiring a new college graduate in most cases you take the offer you are given, some are able to negotiate for a higher salary, but most are quite unsuccessful. This is because they don't have any leverage. If you ended up walking away from the job offer they would simply hire another college graduate. While yes you may have a lot of potential, it's only that potential and not proven. Additionally within a corporation, the company will often do just enough to keep an employee there. If a company does a great job, an employee gets a pat on the back. If an employee is indispensable (though no company will ever admit to this), they may get a noticeable reward, but it still doesn't usually cover the value the individual is actually providing. This responsibility to get what you are truly worth usually lies with the employee. The hard part of this, is knowing when and how to use your leverage. First you must actually have leverage, this commonly in potential revenue you would bring in, or internal knowledge that you may have. Though I'm sure others have varying experiences, mine have been to make your dissatisfaction with a situation known, but in a light manner. Meanwhile make it visible that you're open to other opportunities as they may come along, this can be via twitter, blog post, or water cooler talk. The final thing, and hopefully this is an easier one, is make it clear that you have the leverage, the sale should be a big one, or the internal knowledge should be costly should they lose it. The most unfortunate part of all of this is that, in my experiences the leverage is typically needed to get a fair deal. And the single point of requiring leverage no longer makes it fair, but at least knowing this ensures you're not left out

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