Blog posts tagged "tools"
-
Balancing context size and callable tool metadata with CAP's MCP adapter
Some notes on both sides of the per_action_tool setting of CAP's MCP adapter plugin.
-
Genres, cuids and a bit of AWK
Using AWK to process the Genres data from the CAP bookshop sample.
-
Quiet cds test output - two ways
Reducing CAP server log output during tests, in two different ways, via a profile encapsulated set of log level configurations, or via the new cds test command.
-
CDS source formatting and readability
Embracing a modern approach to source code formatting for human-centric modelling in CAP
-
Auto formatting extensionless Bash scripts in Neovim
Here's what I did to make the combination of the Bash language server and shfmt work with Editorconfig settings for Bash script files that don't have extensions.
-
Neovim configuration for file and module navigation in CDS models
In this post I describe how I extended my Lua-based Neovim configuration for CDS filetypes to improve navigation to referenced files and modules.
-
Excluding specific diagnostics in Neovim
Here's what I did to be able to filter out certain diagnostic messages in Neovim.
-
A reCAP intro to the cds REPL
Here's a summary of my talk on the cds REPL at this year's reCAP event.
-
A modern and clean Neovim setup for CAP Node.js - configuration and diagnostics
In this post I describe my re-worked basic setup for working with CAP Node.js in Neovim, focusing on the configuration and digging into the LSP based diagnostic facilities.
-
Editing Markdown in a Neovim environment
Here are some notes I made when digging into my tools for editing Markdown source.
-
Adjusting the preview width in Telescope's horizontal picker
Here's how I adjusted the width of the preview window in Telescope's horizontal picker.
-
How I run executables in containers
Here's a quick post explaining how I might typically containerise an executable. This is in the context of my aim to not "pollute" my base OS (at the bare metal level) with any installs, as far as I can, as well as to remain platform independent and abstract.
-
Level up your CAP skills by learning how to use the cds REPL
These are notes I wrote for my talk at SAP Inside Track Madrid on 20 March 2025. I wrote them partly to think about what I wanted to say, and partly to share the info in written form too. Note that the idea is to introduce the concepts and show some basic examples for cds REPL "initiates". Nothing too exotic.
-
Migrating GitHub issue based URL bookmarks to wallabag
In this post I outline how I migrated my collection of reading list bookmarks, stored as issues in a GitHub repo, to wallabag which I'm now self-hosting.
-
CAP Node.js plugins - part 2 - using the REPL
This blog post accompanies part 2 of a three part video series where we explore the CDS Plugin mechanism in CAP Node.js. This post is about discovering and exploring service details with introspection.
-
Immutable layers, file deletion and image size in Docker
Digging into how the immutability of Docker image layers means you have to think carefully about creating and deleting content when building an image.
-
Setting up a cache server for apt packages
Setting up an apt-cacher-ng based cache server for Debian apt packages in my homeops context.
-
New source for LXD images on Crostini
Finding a new source for LXD images on ChromeOS Crostini after the default became unavailable.
-
Using lazydocker with SSH-based remote contexts
A quick hack to work around the current issue with lazydocker and SSH-based remote Docker context definitions.
-
Enabling document fragment links for headings in SAP Community blog posts
Creating a bookmarklet to enable document fragment links for headings in SAP Community blog posts.
-
Digging into CSN diffs for CDS models
Building a csndiff script to understand CSN changes as I build up CDS models incrementally.
-
Using ARG in a Dockerfile - beware the gotcha
Learning about the subtle gotcha with ARG and FROM instruction ordering in Dockerfile definitions.
-
Obtaining auth code grant type OAuth 2.0 tokens for Google APIs with a script
Writing a script to obtain OAuth 2.0 bearer tokens for Google API calls using the auth code grant type.
-
Controlling automatic HTTP requests in CAP Node.js design time loops
Controlling automatic HTTP requests during CAP Node.js design time development loops.
-
Simple script for previewing CDS models in CSN - cdsray
Building a simple cdsray script for previewing CDS models in their CSN representation.
-
Easily add an explicit cds.requires.db to your CAP project's package.json
Using jq to easily add an explicit cds.requires.db entry to a CAP project's package.json.
-
Improve your CAP dev container shell prompt
Improving the shell prompt in a CAP dev container for a better development experience.
-
Avoid design time CAP server restarts when maintaining local data files
Avoiding unnecessary CAP server restarts when maintaining local CSV data files during design time.
-
Curating a collection of jq functions
Curating a personal collection of jq functions and exploring how the jq module system works.
-
Opening files from the terminal in BAS dev spaces
Opening files from the terminal in SAP Business Application Studio dev spaces using the code command.
-
Exploring codespaces as temporary dev containers
Exploring GitHub Codespaces as ephemeral, temporary dev container environments.
-
Developing CAP in containers - three ways
Exploring three different ways of developing CAP applications in containers.
-
Battlestation 2024
Sharing a picture of my 2024 desk setup on the narrowboat.
-
A simple jq REPL with tmux, bash, vim and entr
Building a simple jq REPL with tmux, Bash, Vim and entr for exploring JSON datasets.
-
Using the docker CLI in a container on macOS
Explaining how to use the Docker client CLI from within a container on macOS.
-
Tmux plugin development with a local repo
Writing a simple Tmux plugin to learn how plugin development works with a local repo.
-
TIL - Two Tmux Plugin Manager features
Discovering two useful Tmux Plugin Manager features while revisiting my working environment setup.
-
Resources for navigating the canal network
Sharing resources and tools for navigating the UK canal network.
-
Improving my interactive jq workflow with ijq, bash and tmux
Improving my interactive jq workflow by capturing expressions from ijq for command line use.
-
Working from a narrowboat - Internet connectivity
Exploring the internet connectivity options for working from a narrowboat.
-
Managing resources on SAP BTP - what tool do I choose?
A way to think about the different tools available for managing resources on the SAP Business Technology Platform and when to use each one.
-
Extracting blog post dates from URLs with jq
Using jq to extract and sort blog post dates embedded in URLs from a JSON array of GitHub issues.
-
Some notes on modular JSON Schema definitions
Jotting down some notes on understanding how a modular JSON Schema definition might be constructed.
-
More Untappd data explorations with jq - my top ranking beer types (part 3)
Wrapping up my Untappd data exploration with the final ranking of my favourite beer types.
-
More Untappd data explorations with jq - my top ranking beer types (part 2)
Continuing my Untappd data exploration to determine my top ranking beer types.
-
More Untappd data explorations with jq - my top ranking beer types (part 1)
Exploring my Untappd data to discover my top ranking beer types, starting with the data preparation.
-
Untappd data with jq - my top brewery countries
Exploring my Untappd checkin data with jq to find my top brewery countries.
-
Exploring JSON with interactive jq
Using ijq, the interactive jq wrapper, to explore JSON data with immediate visual feedback.
-
Exploring GitHub repo name distribution with jq
Exploring the distribution of name prefixes for SAP-samples repositories on GitHub using jq.
-
A classic example of yak shaving, and some stream editing
Descending through multiple levels of classic yak shaving and ending up learning some stream editing.
-
Setting up my own Cloud Foundry
Describing my journey getting a local Cloud Foundry up and running on Kubernetes.
-
Exercism and jq
Exploring what a jq track might look like on the Exercism learning platform.
-
SAP Tech Bytes: btp CLI - new home for configuration
Noting the updates to where the btp CLI configuration is stored by default.
-
Truncation and neat terminal output
Exploring the psFormat Docker configuration option and striving for neat terminal output.
-
Controlling Chrome from the CLI
Using the chrome-cli tool to open URLs in different tabs from the command line.
-
Setting up hadolint - a Dockerfile linter
Setting up hadolint as a Dockerfile linter in my development environment.
-
Getting BTP resource GUIDs with the btp CLI - part 1
Learning how to use the btp CLI to determine resource GUIDs in a BTP global account.
-
Exploring fff part 2 - get_ls_colors
Continuing to read and learn from the fff file manager source code, focusing on the get_ls_colors function.
-
SAP Tech Bytes: btp CLI - autocompletion
Setting up command autocompletion for the btp CLI.
-
SAP Tech Bytes: btp CLI - managing configuration
Understanding and managing the btp CLI client configuration.
-
Improving shell fu with practice
Practising shell commands to improve my skills and expose myself to new knowledge.
-
SAP Tech Bytes: btp CLI – logging in
Logging in with the btp CLI and finding a subaccount for subsequent activities.
-
Exploring fff part 1 - main
What I learned from starting to read the source code of the fff file manager, focusing on the main function.
-
SAP Tech Bytes: btp CLI - installation
Installing the btp CLI to start exploring its features for BTP administration.
-
Learning by rewriting - bash, jq and fzf details
One of the ways I learn is by reading and sometimes rewriting other people's scripts. Here I learn more about jq by rewriting a friend's password CLI script.
-
Today's TIL trio
Three mini TILs from today on minimum JSON, using tee, and netstat options.
-
Session switching with the tmux menu
Here's a way to get a simple session switcher in tmux using a popup menu.
-
tmux output formatting
Here's what I learned today about FORMATS in tmux output.
-
Unix tooling - join, don't extend
Reading a 1984 paper by Pike and Kernighan helped crystallise an important axiom in Unix tool design about joining programs rather than extending them.
-
Early thoughts on Warp
Some very early thoughts on Warp, the pro terminal designed for everyday use.
-
The APC SMT750IC UPS works with the Synology NAS DS1621+
Successfully configuring the APC SMT750IC UPS with the Synology NAS DS1621+ via USB for automatic shutdown.
-
Remote access to Docker on my Synology NAS
Setting up remote command line access to the Docker install on my Synology NAS in the simplest way possible.
-
Adding a drive to my Synology NAS
A brief summary of how things went adding a drive to my Synology DS1621+ NAS.
-
Notes on Markdown linting - part 2
More on Markdown linting, this time in the context of GitHub Actions.
-
Notes on Markdown linting - part 1
What I found out when I started to look into linting Markdown content.
-
Solving mysterious unrendered markdown headings
Getting to the bottom of why some headings in my Markdown content were not being rendered properly.
-
Unpacking Bash shell tips from a GitHub Actions workflow
Unpacking Bash shell tips from a GitHub Actions workflow step, focusing on IFS and awk usage for pull request info.
-
GitHub Actions workflow browser
A simple workflow browser built with Bash, gh and fzf to help refer to previous workflow definitions while writing new ones.
-
Producing JSON with jq for appending issue titles
Learning how to use jq to produce JSON while writing a script to enhance Thinking Aloud journal entry titles.
-
SAP Tech Bytes: Exploring SAP-samples with gh and fzf
Discovering SAP-samples repositories by exploring them from the command line with gh and fzf.
-
New tmux panes and windows in the right directory
How to be in the right directory when creating a new window or pane in tmux.
-
Deeper connections to everyday tools
Wanting to learn more about the everyday tools I use, because with some things ignorance is not bliss.
-
Two-phase video uploads with YouTube API and curl
How to use the YouTube API to upload a video with curl using a two-phase approach.
-
Mass deletion of GitHub Actions workflow runs
A simple cleanup script for mass-deleting GitHub Actions workflow runs using gh, jq, fzf and the GitHub API.
-
A new journal experiment - Thinking Aloud
I'm trying out a new way of sharing thoughts in a GitHub issues based journal style blog called "Thinking Aloud".
-
fzf - the basics part 2 - search results
More on the fzf basics, this time focusing on controlling and understanding the search results.
-
fzf - the basics part 1 - layout
What I learned from reading the first part of the fzf README about controlling the layout and appearance.
-
Columnar layout with AWK
A breakdown of a simple AWK script to format values into neatly aligned columns.
-
The subtle art of quoting newline characters
How backslash continuation in the shell is more subtle and more beautifully shell-like than it might first appear.
-
Improving my shell scripting
I'm using a style guide along with the shellcheck and shfmt tools to help me improve the quality and consistency of my shell scripts.
-
curl and multipart/form-data
Discovering how curl handles multipart/form-data including reading from standard input.
-
A new learning source for shell scripting
Discovering Mr Rob's dotfiles and live streams as a new learning source for shell scripting.
-
Reducing writing friction
A simple script to reduce writing friction and make it easier to start and publish blog posts.
-
You can mask sensitive hostnames with wildcards and host aliases
The HOSTALIASES feature works well when combined with wildcard host definitions in SSH config to mask sensitive hostnames.
-
git diff can emit different exit codes
Combining git diff exit codes and the POSIX negation operator to control GitHub Actions job step execution based on git changes.
-
Terminal Tip: a CF remote monitor script
Building a script to find and remotely monitor an ongoing Cloud Foundry multi-target app deployment.
-
Terminal Tip: remotely monitor a CF deployment
Remotely monitoring an ongoing Cloud Foundry MTA deployment from the terminal.
-
Terminal Tip: switching CF targets
Switching between Cloud Foundry targets efficiently from the command line.
-
Terminal Tip: parsing CF app logs
Parsing Cloud Foundry application log output with shell tools for better readability.
-
Terminal Tip: truncating CF output
Truncating wide Cloud Foundry CLI output to make it more readable in the terminal.
-
Shell power and simplicity
Reflecting on the often overlooked power and simplicity of shell programming concepts.
-
Vim, Markdown and writing
Rebuilding my writing workflow around Vim and Markdown for a more focused experience.
-
Housekeeping
Tidying up my blogging infrastructure and moving to a new domain and platform.
-
Set up VS Code on Chrome OS for local Application Programming Model development
In this post I walk through the process I used to set up a development environment for CAP on my Chromebook.
-
Collaboration tools
Setting out my preferences for collaboration tools that support realtime multi-user editing.
-
Balancing features with simplicity
Considering the balance between features and simplicity, prompted by a ChromeOS forum thread.
-
Monday morning thoughts: editors and editing
I look at how the editor environments that we come across in our daily work are different, and, as those differences might grow and expand as we become cloud native, how we bridge the contrast in facilities with core obsessions such as correct indentation and whitespace.
-
Discovering SCP Workflow - Using Postman
Using Postman to explore and interact with the SCP Workflow API.
-
Fix Blink
Providing a bookmarklet to fix the distracting blinking text in the timesheet system.
-
YABP - Yet Another Blogging Platform
Reflecting on my history of blogging platforms and the latest move.
-
Excluding with vim's wildignore
Getting the wildignore setting to work properly in vim for excluding directories like node_modules from file searches.
-
Quick HCP title hack with the Navigation Manager
Hacking the HCP cockpit title with the Navigation Manager using the Chrome Developer Tools.
-
The UI5 Support Tool - Help Yourself!
30 Days of UI5 - day 15 by DJ Adams.
-
Making Information More Useful
Explaining my approach to making information more accessible and useful through links and references.
-
Atom, Snippets, Tabs and CSON parsing
Debugging a CSON parsing error in my UI5 snippets package for the Atom editor.
-
Running: 2014 in review, and some Clojure
Reviewing my 2014 running stats and doing some simple data analysis in Clojure.
-
Creation & Reload of UI5 UIs in the Chrome Developer Console
Demonstrating how to create and reload UI5 UIs directly in the Chrome Developer Console.
-
Scratching an itch - UI5 Icon Finder
Building a UI5 Icon Finder app to search the vast library of icons available in UI5.
-
This Week in Fiori (2014-34)
Covering week 34 of Fiori news including documentation, extensibility, prototyping tools and workflow.
-
Small steps - OpenUI5 toolkit now in jsbin.com
Celebrating the addition of the OpenUI5 toolkit to jsbin.com for easy code demos and snippets.
-
Quick hack: Calendar Inviter
Building a quick Google Apps Script hack to sync calendar events across multiple organisational calendars.
-
SheetAsJSON - Google Spreadsheet Data as JSON
Explaining how to expose Google spreadsheet data as JSON via HTTP using Google Apps Script.
-
Simple SAPUI5 Chrome icon for lazy developers like me
Creating a simple Chrome hosted app icon to quickly navigate to the SAPUI5 Developer Center on SCN.
-
Jump to Shell Workset Item from URL
Discovering how to jump to specific SAP Shell workset items from a URL.
-
Serial interest in the Raspberry Pi
Attending the Manchester Raspberry Jam and connecting a vintage Wyse terminal to a Raspberry Pi.
-
Two tools for Gateway trial host nplhost
Recommending two useful tools, multitail and screen, for working with the SAP NetWeaver Gateway trial system.
-
SAPUI5 Powered SCN Forum Finder
Building a SAPUI5-powered forum finder to help locate the old SDN forums on the new SCN platform.
-
Reading List Mark 2 - Part 5
Wrapping up the reading list app series by putting it all together and using the User Interface services.
-
Reading List Mark 2 - Part 4
Continuing the reading list app series, covering synchronisation between the spreadsheet and content sources.
-
Reading List Mark 2 - Part 3
Continuing the reading list app series, covering the UrlFetch Services for interacting with external APIs.
-
Reading List Mark 2 - Part 2
Continuing the reading list app series, covering the Tasks API for retrieving and inserting tasklists.
-
Reading List Mark 2 - Part 1
Introducing a reading list app built with Google Apps Script to demonstrate various API integrations.
-
Automated email-to-task mechanism with Google Apps Script
Looking at an example Google Apps Script that automates email-to-task conversion.
-
Ad-hoc Data Workflows with Google Apps Script
Presenting on building ad-hoc data workflows with Google Apps Script at the Manchester GTUG.
-
Gmail Contextual Gadgets - talk at Manchester GTUG
Giving a talk on Gmail Contextual Gadgets at the Manchester Google Technology User Group.
-
My browser A-Z
Listing my browser A-Z, the URLs that appear on a single letter press based on past browsing.
-
Hacking the Delicious extension for Chrome
Hacking the Delicious bookmarking extension for Chrome to fix some annoyances after switching from Firefox.
-
Google Visualization API: Manchester GTUG Talk
Presenting on the Google Visualization API at the Manchester Google Technology User Group meetup.
-
Getting started with Gmail Contextual Gadgets
Getting started with Gmail contextual gadgets and exploring their developer potential.
-
Scratching an itch - Magic The Gathering card info
Scratching an itch by building a quick tool to look up Magic The Gathering card information.
-
Tarpipe REST connector in 5 minutes
Demonstrating the new Tarpipe REST connector with a quick five-minute example.
-
Analysing CV searches with Delicious
Analysing search terms used to find my online CV using Perl and Delicious.
-
An HTTP connector for Tarpipe: 'tarbridge'
Building tarbridge, an HTTP connector for Tarpipe that enables POST requests to arbitrary URLs.
-
tarpipe.com - Programming 2.0?
Exploring whether tarpipe.com represents an early example of a Programming 2.0 concept.
-
Old feed URLs fixed with a bit of mod_rewrite voodoo
Fixing old feed URLs with some Apache mod_rewrite rules to redirect feed bots to the right place.
-
OssNoteFix script updated for Greasemonkey 0.6.4 and Firefox 1.5
Updating my OssNoteFix Greasemonkey script to work with newer versions of Greasemonkey and Firefox.
-
Turnkey MVS 3.8J on Hercules S/370 Screenshot
Big iron and retrocomputing.
-
Hacking the SAP service portal to make OSS notes better
Deploying Greasemonkey to fix a long standing issue with OSS Notes at SAP.
-
Ubuntu? Thanks. But no thanks.
Lots of people seem to be very impressed with Ubuntu, the slick new Linux distro based on Debian, running Gnome.
-
Postcode bookmarklet
We’ve been spending time recently looking at property in the North West.
-
Blosxom entries into MT
After setting up this blog, it was only natural to bring across my earlier blog posts that were previously served with Blosxom.
-
NW4, OSS1 and logon group selection for OSS
Digging into logon group selection.
-
FOSDEM, and small OSS Notes Browser Hack
Tomorrow morning I'm off to Brussels for FOSDEM - the Free and Open Source Software Developers' Meeting.
-
Dashboard as extension to R/3 and SAPGUI client
How do your users work with SAP data? Exclusively through SAPGUI or with other desktop apps too? If it’s the latter, read on.
-
Improving the OSS note experience
How can we make this key service less unpleasant to use?
-
Google Pocket Guide out now
My new book for O'Reilly is out.
-
Dashboard, a compelling articulation for realtime contextual information
Miguel de Icaza and Nat Friedman were keynoting at OSCON this morning.
-
New Blosxom plugin 'submission'
A generic blogging mechanism for accepting content POSTed to it.
-
Tiki parser for MoinMoin
Embedding the Tiki language into the MoinMoin wiki.
-
RSS aggregators and user-agent information for Blagg
Tool reuse a la Unix philosophy, and more on building out the future in tiny steps.
-
Tinkering with RSS and NNTP
The beauty of open standards is that they can be adopted, remixed and combined.
-
The fragility of retro-engineering
Having to modify my allconsuming scripts because of differences between amazon.co.uk and amazon.com data.
-
Transferring my Amazon wishlist to AllConsuming.net
Scripting to the rescue, as always.
-
Presentations, Wikis, and Site Navigation
Why build something when there's already a standard to embrace?
-
Creating the "Entry index"
More on building out how my blog looks.
-
RESTifying RT
Some notes on providing a RESTful API for Request Tracker.
-
XML Scripting, data manipulation, and RDF
Can there be native support for XML as a data type?
-
Moving between Mozilla tabs with the keyboard
An answer to my question on keyboard controllable Mozilal features.
-
Mozilla "Bookmark This Group of Tabs"
Improving the browsing experience one feature at a time.
-
Cacheing on XSLT service
More on the Mozilla sidebar experiments.
-
Sidebars, Mozilla, RSS: old and new
RSS, RDF, XUL, XSLT and more.
-
The OS tables are turning...
The origins of one of my favourite phrases "Does not work on Windows".
-
Small Blagg mod to enable custom formatting of 'blaggregated' items
An unofficial modification to Blagg.
-
Collapse/Expand feature for my Blaggregated display
Extending Blagg and related features.
-
Top tip
On falling down the stairs.
-
ETag-enabled wget
Adding ETag awareness to the venerable wget utility.
-
The Panopticon
Extending the Panopticon experiment with XML messaging via Jabber.
-
Amphetadesk Links
More on feeds, subscriptions and aggregations.
-
Mr 80-Percent
Reflecting on the 80-percent approach to work and why working fewer hours can mean getting more done.
-
YARM: Yet Another Referers Mechanism
Referers, backlinks, and the Unix command line.
-
Calendar code
The calendar script for my sidebar.
-
Bring on the SSI
Server Side Includes and Blosxom.
-
Blosxom vs the world
The choice and decision to use specific blogging software.
-
Blog software review
More on blogging software.
-
"Blog Locally, Publish Globally"
On the enduring pattern of local control but global reach.
-
My bookmarks
Scripting with bookmarks.
-
Off with the (relatively) old, on with the new
More on Blosxom, and a fix to our colocated server.
-
Hello Blosxom
A move to the Blosxom blogging software.
See all tags.