# J

Published articles for J.

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

## Below the Waterline: Why AI's True Cost Is Measured Per Task, Not Per Token

DevFeed: [Below the Waterline: Why AI's True Cost Is Measured Per Task, Not Per Token](<https://devfeed.tech/articles/below-the-waterline-why-ai-s-true-cost-is-measured-per-task-not-per-token-113384.md>)

Original publisher: [Read original article](<https://sdtimes.com/ai/below-the-waterline-why-ais-true-cost-is-measured-per-task-not-per-token/>)

Author: David Lyman

Published: 2026-11-02T21:22:59Z

Content type: article

Language: en

Sources: [SD Times](<https://devfeed.tech/sources/sd-times.md>)

Topics: [Language models](<https://devfeed.tech/topics/language-models.md>), [cloud cost management](<https://devfeed.tech/topics/cloud-cost-management.md>), [LLM observability](<https://devfeed.tech/topics/llm-observability.md>), [Fine-tuning](<https://devfeed.tech/topics/fine-tuning.md>)

Tags: [admission](<https://devfeed.tech/tags/admission.md>), [ai](<https://devfeed.tech/tags/ai.md>), [but](<https://devfeed.tech/tags/but.md>), [cost](<https://devfeed.tech/tags/cost.md>), [economics](<https://devfeed.tech/tags/economics.md>), [enterprises](<https://devfeed.tech/tags/enterprises.md>), [executive](<https://devfeed.tech/tags/executive.md>), [first](<https://devfeed.tech/tags/first.md>), [foundation](<https://devfeed.tech/tags/foundation.md>), [getting](<https://devfeed.tech/tags/getting.md>), [ignore](<https://devfeed.tech/tags/ignore.md>), [it](<https://devfeed.tech/tags/it.md>), [it-budgets](<https://devfeed.tech/tags/it-budgets.md>), [j](<https://devfeed.tech/tags/j.md>), [latest-news](<https://devfeed.tech/tags/latest-news.md>), [leading](<https://devfeed.tech/tags/leading.md>), [live](<https://devfeed.tech/tags/live.md>), [name](<https://devfeed.tech/tags/name.md>), [r](<https://devfeed.tech/tags/r.md>), [sd](<https://devfeed.tech/tags/sd.md>), [times](<https://devfeed.tech/tags/times.md>), [token](<https://devfeed.tech/tags/token.md>), [tokenomics](<https://devfeed.tech/tags/tokenomics.md>), [tokens](<https://devfeed.tech/tags/tokens.md>)

### AI overview

The article argues that enterprises should measure AI by total cost and value per task, not by token or API bills alone. Total cost of AI includes compute, storage, networking, energy, software, and the engineering, operations, and legal labor needed to run systems; value may include revenue, savings, cleared backlogs, or avoided hires. It recommends tracking task inputs such as prompt and retrieval tokens, agent steps, cache misses, human intervention, rework, and runaway retries. The article also describes hybrid model use: reserve frontier models for demanding reasoning, and consider private or local models for tasks such as document retrieval, translation, log parsing, and PII filtering. Broadcom says its AI gateway can route requests between public and local models, and reports 40%-90% savings for suitable private-cloud workloads. The excerpt cautions that online token rates may omit production operations and cites a survey in which three in four enterprises could not confidently prove AI business value to their CFO.

### Source excerpt

Tokenomics, by the admission of the man leading the foundation named after it, is a terrible name. But the concept behind it is getting harder for enterprises to ignore. J.R. Storment, executive director of the Tokenomics Foundation, said during a recent SD Times Live! Supercast on the economics of AI that he first heard the... ... continue reading The post Below the Waterline: Why AI's True Cost Is Measured Per Task, Not Per Token appeared first on SD Times.

## Toolbox languages

DevFeed: [Toolbox languages](<https://devfeed.tech/articles/toolbox-languages-52987.md>)

Original publisher: [Read original article](<https://www.hillelwayne.com/post/toolbox-languages/>)

Published: 2024-07-15T00:00:00Z

Content type: opinion

Language: en

Sources: [Hillel Wayne](<https://devfeed.tech/sources/hillel-wayne.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Autohotkey](<https://devfeed.tech/topics/autohotkey.md>), [Script](<https://devfeed.tech/topics/script.md>), [GUI](<https://devfeed.tech/topics/gui.md>), [Windows](<https://devfeed.tech/topics/windows.md>), [Shell](<https://devfeed.tech/topics/shell.md>), [Python](<https://devfeed.tech/topics/python.md>), [win32](<https://devfeed.tech/topics/win32.md>)

Tags: [autohotkey](<https://devfeed.tech/tags/autohotkey.md>), [frink](<https://devfeed.tech/tags/frink.md>), [gui](<https://devfeed.tech/tags/gui.md>), [j](<https://devfeed.tech/tags/j.md>), [languages](<https://devfeed.tech/tags/languages.md>), [linux](<https://devfeed.tech/tags/linux.md>), [picat](<https://devfeed.tech/tags/picat.md>), [practices](<https://devfeed.tech/tags/practices.md>), [python](<https://devfeed.tech/tags/python.md>), [raku](<https://devfeed.tech/tags/raku.md>), [shell](<https://devfeed.tech/tags/shell.md>), [toolbox](<https://devfeed.tech/tags/toolbox.md>)

### AI overview

An exploration of "toolbox languages," programming languages that solve practical problems without requiring third-party packages. It discusses AutoHotkey for Windows GUI automation and J for concise array-based mathematical work, with examples and further reading.

### Source excerpt

A toolbox language is a programming language that's good at solving problems without requiring third party packages. My default toolbox languages are Python and shell scripts, which you probably already know about. Here are some of my more obscure ones. AutoHotKey Had to show up! Autohotkey is basically "shell scripting for GUIs". Just a fantastic tool to smooth over using unprogrammable applications. It's Windows-only but similar things exist for Mac and Linux. Useful features: You can configure shortcuts that are only active for certain programs, if a global flag is set, if certain text appears on screen, etc. Simple access to lots of basic win32 functionality. Opening the file selection dialog is just f := FileSelect(). The GUI framework is really, really good. Honestly the best of any language I've used, at least for small things. Example problems: Audacity doesn't let you configure mouse shortcuts, so I used AutoHotKey to map the middle-mouse to a keyboard shortcut anyway. #HotIf WinActive("ahk_exe audacity.exe") MButton::Send "^l" ; silence selection #HotIf I made typing `;iso` fill in the current date. :R:;iso:: { Send(FormatTime(,"yyyy-MM-dd")) } This is a tool I use to take timestamped notes. ; right-ctrl + d >^d:: { TimeString := FormatTime(,"MM/dd hh:mm tt") t_msg := InputBox(,TimeString,"w200 h100") if t_msg.Result = "OK" { timestampfile := A_WorkingDir . "\Config\timestamps.txt" FileAppend(TimeString . "`t" . t_msg.Value . "`r`n", timestampfile) } } Other uses: launch REPLs for toolbox languages. Input the 100-keypress sequence required to beat one videogame (if you know, you know). Further reading: Learn AutoHotKey by stealing my scripts Somehow AutoHotKey is Kinda Good Now In Praise of AutoHotKey J An array language, like APL. Really good at doing arithmetic on arrays, hair-pullingly frustrating at doing anything with strings or structured data. I used to use it a lot but I've mostly switched to other tools, like Excel and Raku. But it's still amazing

## NSTableView vim keys

DevFeed: [NSTableView vim keys](<https://devfeed.tech/articles/nstableview-vim-keys-25382.md>)

Original publisher: [Read original article](<https://smileykeith.com/2013/01/08/nstableview-vim-keys/>)

Author: Keith Smiley

Published: 2013-01-09T00:19:00Z

Content type: tutorial

Language: en

Sources: [Keith Smiley](<https://devfeed.tech/sources/keith-smiley.md>)

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

Tags: [apis](<https://devfeed.tech/tags/apis.md>), [application](<https://devfeed.tech/tags/application.md>), [arrow](<https://devfeed.tech/tags/arrow.md>), [behavior](<https://devfeed.tech/tags/behavior.md>), [core-data](<https://devfeed.tech/tags/core-data.md>), [data](<https://devfeed.tech/tags/data.md>), [event](<https://devfeed.tech/tags/event.md>), [found](<https://devfeed.tech/tags/found.md>), [functionality](<https://devfeed.tech/tags/functionality.md>), [gtd](<https://devfeed.tech/tags/gtd.md>), [implement](<https://devfeed.tech/tags/implement.md>), [indexes](<https://devfeed.tech/tags/indexes.md>), [j](<https://devfeed.tech/tags/j.md>), [keys](<https://devfeed.tech/tags/keys.md>), [os](<https://devfeed.tech/tags/os.md>), [subclass](<https://devfeed.tech/tags/subclass.md>), [table](<https://devfeed.tech/tags/table.md>), [testing](<https://devfeed.tech/tags/testing.md>), [vim](<https://devfeed.tech/tags/vim.md>), [with](<https://devfeed.tech/tags/with.md>)

### AI overview

The excerpt describes adding vim-style `j` and `k` navigation to an `NSTableView` subclass. Manually changing selected row indexes proved difficult because it did not reproduce the table view's pivot-based selection behavior when extending and reversing a selection. Emitting replacement arrow-key events through Quartz Event Services worked initially, but failed in the author's sandboxed setup. The author then found that `NSUpArrowFunctionKey` could supply the arrow key character needed to create an `NSEvent`; this approach reportedly worked in the subclass and under sandboxing. The excerpt omits the final code, so it does not provide enough detail to reproduce that implementation.

### Source excerpt

I'm currently working on a OS X application that uses a few different NSTableViews to display user data. I was testing them out a bit to make sure multiple deletions worked correctly from my database and I found myself pressing 'j' and 'k' to try and move down and up. I decided it would be pretty cool to implement those two vim shortcuts into my table view just in case anyone else thinks like me. This functionality already exists in The Hit List an awesome GTD app that has a lot of baggage with me, and I'm sure it exists in other applications as well. In my NSTableView subclass' keyDown: method I tried a few things. Attempt 1: First I tried to re implement the functionality myself. In retrospect this doesn't make any sense but at first it was pretty simple. It looked something like this. NSUInteger flags = [theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask; NSNumber *shiftPressed = (flags & NSShiftKeyMask); if ([theEvent keyCode] == 38) { // j NSUInteger index = [[self selectedRowIndexes] lastIndex] + 1; if ([shiftPressed boolValue]) { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:YES]; } else { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; } } else if ([theEvent keyCode] == 40) { // k NSUInteger index = [[self selectedRowIndexes] lastIndex] - 1; if ([shiftPressed boolValue]) { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:YES]; } else { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO]; } } The issue with this is the way NSTableView typically expands it's selection. I think of it as a pivot point where you start. Then you go up and down relative to that point. So if you start at index 2 and go down till index 4, you should have 2 rows selected. Then when you go back up you should deselect the rows and indexes 3 and 4 and select the rows and index 1 and 0. At this point I realized it was more difficult than I r