Blog
-
CDS source formatting and readability
Embracing a modern approach to source code formatting for human-centric modelling in CAP
-
Upcoming talks in autumn 2025
I'm writing this mostly to organise myself and get my preparations in order!
-
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.
-
Point free coding and function composition
In this post I explore and show examples of the concepts of point free coding, of chains of functions through which data flows, and of function composition.
-
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.
-
FP, function chains and CAP model loading
Understanding functional programming approaches, no matter how trivial, can help in other areas. Here I explain how being comfortable with function chains helped in working out why a required (but unused) service was being loaded into the overall CDS model in a CAP project.
-
Array.prototype.reduce and the optional initial value
Today I learned about the subtlety of the optional initialValue parameter for the Array prototype's reduce method in JavaScript.
-
Functional programming resources
I've created quite a bit of FP related content in the past but it's somewhat scattered across different platforms and in different formats and I can't remember what or where it all is. So this is a meta post in which I point to all the resources (that I can remember that) I've created on the topic.
-
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.
-
TASC Notes - Part 9
These are the notes summarising what was covered in The Art and Science of CAP part 9, one episode in a mini series with Daniel Hutzel to explore the philosophy, the background, the technology history and layers that support and inform the SAP Cloud Application Programming Model.
-
TASC Notes - Part 8
These are the notes summarising what was covered in The Art and Science of CAP part 8, one episode in a mini series with Daniel Hutzel to explore the philosophy, the background, the technology history and layers that support and inform the SAP Cloud Application Programming Model.
-
TASC Notes - Part 7
These are the notes summarising what was covered in The Art and Science of CAP part 7, one episode in a mini series with Daniel Hutzel to explore the philosophy, the background, the technology history and layers that support and inform the SAP Cloud Application Programming Model.
-
CAP Node.js plugins - part 3 - writing our own
This blog post accompanies part 3 of a three part series where we explore the CDS Plugin mechanism in CAP Node.js to find out how it works. In part 1 we looked at the plugin mechanism itself and how it worked. In part 2 we used the cds REPL to start our CAP service running and to introspect it. In this part we'll use what we learned and discovered in the first two parts to write our own plugin.
-
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 to find out how it works. In part 1 we looked at the plugin mechanism itself and how it worked. In this part we use the cds REPL to start our CAP service running and to explore it - to introspect it.
- CAP Node.js Plugins
- TASC Notes - Part 6
- Functions as first class citizens in SICP Lecture 1A
- TASC Notes - Part 5
- TASC Notes - Part 4
- The elements of programming with respect to CDL and SICP
- The Art and Science of CAP
- TASC Notes - Part 3
- TASC Notes - Part 2
- Creating the new Tech Aloud intro and outro music
- Flattening the hierarchy with mixins
- Five reasons to use CAP
- Separating concerns and focusing on the important stuff
- Restricting access via facets with masked elements
- Keeping things simple in domain modelling with CDS
- Immutable layers, file deletion and image size in Docker
- CAP Node.js plugins - part 1 - how things work
- TASC Notes - Part 1
- Setting up a cache server for apt packages
- New source for LXD images on Crostini
- Using lazydocker with SSH-based remote contexts
- Automatic validation in OData and REST calls with CAP
- reduce - the ur-function
- Highest value in JS - different ways
- Turning an OData expand into a cds.ql CQL query with a projection function in CAP
- Enabling document fragment links for headings in SAP Community blog posts
- Digging into CSN diffs for CDS models
- CodeTalk interview - living and working on a narrowboat
- Using ARG in a Dockerfile - beware the gotcha
- Defining a custom 'after' handler in CAP with 'each'
- Obtaining auth code grant type OAuth 2.0 tokens for Google APIs with a script
- Controlling automatic HTTP requests in CAP Node.js design time loops
- Simple script for previewing CDS models in CSN - cdsray
- Using @cap-js/sqlite in CF for your CAP services
- Running non-production CAP services in CF
- Easily add an explicit cds.requires.db to your CAP project's package.json
- Improve your CAP dev container shell prompt
- Avoid design time CAP server restarts when maintaining local data files
- CAP, CDS, CDL, CSN and jq - finding associations
- CAP, CORS and custom headers
- Test drive Joule's generative AI features in SAP Build Code now!
- Curating a collection of jq functions
- ISO content for common CAP types
- Quick conversion of multiple values using with_entries in jq
- Opening files from the terminal in BAS dev spaces
- Successful double CodeJam in Wroclaw and Warsaw
- Ghost cratch fitted
- Exploring codespaces as temporary dev containers
- Accuracy and precision in language
- Developing CAP in containers - three ways
- Battlestation 2024
- A simple jq REPL with tmux, bash, vim and entr
- Using the docker CLI in a container on macOS
- From Twitter to Mastodon
- Tmux plugin development with a local repo
- TIL - Two Tmux Plugin Manager features
- Solving the SAP TechEd Easter Egg on the Web
- Devtoberfest - the best developer prep for SAP TechEd
- Bash shell expansion inside double quotes
- OData query operations and URL encoding the system query options with curl
- Curing my stove aboard the narrowboat
- Mercia Marina to Shobnall Fields and Burton-on-Trent
- Resources for navigating the canal network
- Oil change and a visit to Mercia Marina
- SAP CodeJam report - service integration with CAP in Guetersloh, DE
- Selecting the related endpoints from a GitHub API response using jq's with_entries
- SAP CodeJam on Service Integration with CAP in Brescia
- Living on a narrowboat - layout details of the stern
- Improving my interactive jq workflow with ijq, bash and tmux
- More on the comma as generator, and streaming with select in jq
- Double SAP BTP goodness in Isernhagen
- Recognising patterns and embracing the stream
- Learning from community solutions on Exercism - part 3
- Living on a narrowboat - the stove as the heart of the home
- Learning from community solutions on Exercism - part 2
- Learning from community solutions on Exercism - part 1
- SAP community memories
- A deep dive into OData and CDS annotations
- SAP CodeJam on the btp CLI and APIs in Heilbronn
- SAP CodeJam on Service Integration with CAP in Utrecht
- Living on a narrowboat - embracing constraints
- Working from a narrowboat - Internet connectivity
- I'm moving onto a narrowboat
- Learning from exploring a question on jq
- Array push with autovivification in jq
- Managing resources on SAP BTP - what tool do I choose?
- Extracting blog post dates from URLs with jq
- Some notes on modular JSON Schema definitions
- More Untappd data explorations with jq - my top ranking beer types (part 3)
- More Untappd data explorations with jq - my top ranking beer types (part 2)
- Stop asking for slides in advance
- More Untappd data explorations with jq - my top ranking beer types (part 1)
- Untappd data with jq - my top brewery countries
- Understanding jq's SQL style operators JOIN and INDEX
- Summing and grouping values with jq
- Reshaping data values using jq's with_entries
- Multiple level filters in jq
- Products by supplier in OData and jq
- Exploring JSON with interactive jq
- JSON object values into CSV with jq
- Exploring GitHub repo name distribution with jq
- Converting strings to objects with jq
- Some thoughts on jq and statelessness
- Bash notes 3
- A classic example of yak shaving, and some stream editing
- Bash notes 2
- Bash notes
- Understanding jq's reduce function
- Setting up my own Cloud Foundry
- Exercism and jq
- SAP Tech Bytes: btp CLI - new home for configuration
- How I got involved in the SAP community
- Allowing my intangible core to catch up with the rest of me...
- Truncation and neat terminal output
- Controlling Chrome from the CLI
- Setting up hadolint - a Dockerfile linter
- Getting BTP resource GUIDs with the btp CLI – part 2 - JSON and jq
- Getting BTP resource GUIDs with the btp CLI - part 1
- UTFRW - Unofficial TechEd Fun Run / Walk / Roll - Share Your Pics!
- Exploring fff part 2 - get_ls_colors
- Embracing jq and JSON
- Sourcing vs executing in Bash
- SAP Tech Bytes: btp CLI - autocompletion
- Using functions more
- SAP Tech Bytes: btp CLI - managing configuration
- Improving shell fu with practice
- SAP Tech Bytes: btp CLI – logging in
- Exploring fff part 1 - main
- SAP Tech Bytes: btp CLI - installation
- Learning by rewriting - bash, jq and fzf details
- Today's TIL trio
- Session switching with the tmux menu
- tmux output formatting
- Reopening pull requests and GITHUB_ACTOR
- Unix tooling - join, don't extend
- Early thoughts on Warp
- The APC SMT750IC UPS works with the Synology NAS DS1621+
- Remote access to Docker on my Synology NAS
- Adding a drive to my Synology NAS
- Equality in tech
- Supporting developers with sponsorship
- Notes on Markdown linting - part 2
- Notes on Markdown linting - part 1
- Solving mysterious unrendered markdown headings
- Unpacking Bash shell tips from a GitHub Actions workflow
- GitHub Actions workflow browser
- Producing JSON with jq for appending issue titles
- SAP Tech Bytes: Exploring SAP-samples with gh and fzf
- Mainframes, SDSF and GitHub Actions
- New tmux panes and windows in the right directory
- Deeper connections to everyday tools
- Two-phase video uploads with YouTube API and curl
- La Pavoni maintenance successful
- Mass deletion of GitHub Actions workflow runs
- A new journal experiment - Thinking Aloud
- Aborting a script with parameter expansion
- SAP TechEd Developer Keynote - Info Central
- SAP Tech Bytes: Approuter User API Service
- fzf - the basics part 2 - search results
- Thoughts on video content
- fzf - the basics part 1 - layout
- Do less and do it better
- Columnar layout with AWK
- From Classics to Developer Advocate
- Updating your fork of the Developer Keynote repository
- Waiting for jobs, and the concept of the shell
- SAP TechEd 2020 Channel 1 at home
- Implicit values in Bash for loop construct
- UTFRW - Unofficial TechEd Fun Run / Walk
- SAP TechEd Developer Keynote DK100 - The Story
- My SAP TechEd 2020 - what I'm looking forward to
- An overview of SAP Developers video content
- The myriad meanings of pwd in Unix systems
- Computer Unit 1979
- The subtle art of quoting newline characters
- Case modification operators in parameter substitution
- MID$ and shell parameter expansion
- Understanding declare
- Desnowballification with set -o errexit
- Improving my shell scripting
- curl and multipart/form-data
- Checking a command is available before use
- Using exec to jump
- A new learning source for shell scripting
- Shell parameter expansion with :+ is useful
- Reducing writing friction
- Programmer's Day Mission 2020
- You can mask sensitive hostnames with wildcards and host aliases
- The open square bracket [ is an executable
- Why we have /bin/ and /usr/bin/
- String.prototype.replace() can take a function
- continue-on-error can prevent a job step failure causing an action failure
- git diff can emit different exit codes
- In an mta.yaml file you can use the service-name parameter to point to an existing resource
- SAP NPM packages now on npmjs.org
- Removing the knob on a La Pavoni steam valve
- SAP Community Coding Challenge 2 - Finalists
- SAP Community Coding Challenge 2 - Contestants
- Remote mount setup on the Raspberry Pi
- SAP Community Coding Challenge 2 - Update
- Terminal Tip: a CF remote monitor script
- SAP Community Coding Challenge Nr.2
- Terminal Tip: remotely monitor a CF deployment
- Terminal Tip: switching CF targets
- Terminal Tip: parsing CF app logs
- Terminal Tip: truncating CF output
- Initial Pi configuration via Ansible
- Code at Home episodes
- Let's learn to "Code at Home"
- Starting out with Raspberry Pi experiments
- Preparing the OS image
- Finding the Pis on the network
- Brambleweeny Cluster Experiments
- Mini adventures with MTAs and the Cloud Foundry CLI
- Scripting Cloud Foundry activities in trial
- My learning list for 2020
- Help us to help you - good questions beget good answers
- Mission 'Use CAP and SAP Cloud SDK to Extend S/4HANA' - an overview
- CAP is important because it's not important
- Shell power and simplicity
- Submit suggestions for Tech Aloud during SAP TechEd 2019
- Tech Aloud podcast - an introduction
- New podcast - Tech Aloud
- Happy Programmers Day!
- Hitch Hiker's style in Sea of Sorrows
- Computed field example in CAP
- We can do better than 'polynimbus'
- The Observer's Book of JS Style
- David Edward Adams
- Double SAP CodeJam Athens - a report
- Revisiting UI5 on CodeTalk
- First thoughts on the 2019 Stack Overflow Developer Survey results
- ES6, reduce and pipe
- Vim, Markdown and writing
- Housekeeping
- Monday morning thoughts: looking back and forwards
- Monday morning thoughts: digging deeper
- Monday morning thoughts: indirect influence
- Monday morning thoughts: learning media and mechanisms
- Monday morning thoughts: rethinking like the web
- Monday morning thoughts: longevity and loose coupling
- Monday morning thoughts: on starting blogging
- Monday morning thoughts: exploring reuse
- Monday morning thoughts: dynamic language
- Set up VS Code on Chrome OS for local Application Programming Model development
- Monday morning thoughts: big school and community
- SAP Cloud Application Programming Model (CAP) - start here
- Monday morning thoughts: more on ABAP in the cloud
- Monday morning thoughts: impostor syndrome
- Monday morning thoughts: growth is upwards
- Monday morning thoughts: Workflow Forms and the definition of a developer
- Monday morning thoughts: ABAP in the cloud
- My take on Wired's Google & URLs article
- Monday morning thoughts: considering GraphQL
- Monday morning thoughts: a good blog post
- Monday morning thoughts: OData
- Monday morning thoughts: the cloud is the computer
- Monday morning thoughts: mainframes and message documentation
- SAP CodeTalk sessions
- Monday morning thoughts: local http servers and containerisation
- Monday morning thoughts: what not how
- Monday morning thoughts: abstraction
- Monday morning thoughts: curiosity and understanding
- Monday morning thoughts: developers and advocacy
- Monday morning thoughts: programming models
- Interview with Rui Nogueira on the new Application Programming Model for SAP Cloud Platform
- Monday morning thoughts: community engagement
- Monday morning thoughts: Core Data Services
- Monday morning thoughts: the learning continuum
- Monday morning thoughts: programmers and identity
- Collaboration tools
- The Business Rules service - overview and getting started
- Monday morning thoughts: milestones
- Monday morning thoughts: functions - what functions?
- Balancing features with simplicity
- Monday morning thoughts: containers and silence
- Monday morning thoughts: editors and editing
- Monday morning thoughts: debugging approach and Greasemonkey revival
- Monday morning thoughts: upload / download in a cloud native world
- Monday morning thoughts: a cloud native smell
- Introduction to SAP Cloud Platform Workflow - Summary
- Monday morning thoughts: cloud native
- Becoming an SAP Mentor Alumnus
- Thoughts on what's next for the SAP Community
- Apps Script - Privacy Policy
- Coming Home
- Discovering SCP Workflow
- Consumption-based SCP Pricing - Initial Thoughts
- Things I do to make my work life better
- SCP Business Rules Roadmap - 5 Observations
- SAP Cloud Platform Pricing
- Fix Blink
- Functional programming - baby steps
- Meeting Request Details
- Google Cloud Functions + Sheets + Apps Script + Actions On Google = WIN
- YABP - Yet Another Blogging Platform
- Best practices for mobile reporting
- The beauty of recursion and list machinery
- Reaching out to the new new kingmakers
- Debugging SAP Fiori apps - the fifth "D"
- Excluding with vim's wildignore
- Better collaboration through chemistry
- F3C Parts 9 and 10 - Functors
- F3C Part 8 - Promises
- F3C Part 7 - Recursion
- F3C Part 6 - Currying
- F3C - A FunFunFunction Companion Series
- F3C Part 5 - Closures
- F3C Part 4 - Reduce advanced
- F3C Part 3 - Reduce basics
- F3C Part 2 - Map
- F3C Part 1 - Higher-order functions
- The Fiori revolution - disruption at its best
- Community and Collaboration at SAP Inside Track Manchester
- Understanding the SAP Fiori Cloud Edition
- Top 10 misconceptions about Fiori
- FOFP 2.1 A look at filter
- FOFP Fundamentals of functional programming
- FOFP 1.5 Creating functions
- FOFP 1.4 A different approach with map
- FOFP 1.3 Some basic list processing
- FOFP 1.2 Trying things out
- FOFP 1.1 Introduction
- Language minutiae and learning to SWIM
- Finding a wonderland number
- Enlightenment in action
- "fiux2" Week 7 - Build Your Own SAP Fiori App
- 4Clojure Puzzle 66
- "fiux2" Week 6 - Extend SAP Fiori Apps
- "fiux2" Week 5 - Enhance an SAP Fiori Master Detail App
- The SAP Fiori Launchpad as a dashboard for my running KPIs
- Quick HCP title hack with the Navigation Manager
- "fiux2" Week 4 - Create Your First SAP Fiori App
- "fiux2" Week 3 - Get Ready to Create Your First App
- The evolution of the SAP community
- "fiux2" Week 2 – Design Your First SAP Fiori App
- "fiux2" - The openSAP Fiori Course - 2016 Edition
- Building blocks of language, structure and thought
- The future of app building on the SAP HANA Cloud Platform
- Digital devolution in local authorities - putting people first
- Impromptu JS session at UKISUG15
- Speaking at SAP TechEd EMEA 2015
- Celebrating the engine of the Fiori revolution - the 30UI5 ebook
- My journey to Clojure
- Give me a browser, and I'll give you the world
- The advent of UI5 1.30 and what it means for us
- Cookies
- Building blocks for the future normal
- The origin of becoming a fundamental enabler for Fiori
- Revisiting the XML Model
- UI5 Version Info
- A non-techie PM's view of UI5
- UI5 - looking back and forward
- The experimental Client operation mode
- An introduction to sap.ui.define
- Taming the Resource Model Files
- Merging lists with UI5
- Spreading the UI5 Message
- Fragments and Minimum Viable Code
- A Short UI5 Debugging Journey
- MVC - Model View Controller, Minimum Viable Code
- UI5 and Fiori - The Story of Open and Free
- UI5 and Coding Standards
- The UI5 Support Tool - Help Yourself!
- Speeding up your UI5 app with a Component preload file
- Multi language support out of the box - UI5's pedigree
- Base Classes in UI5
- Handling Dates with the Date Picker
- Bootstrapping UI5 Locally and in the Cloud
- User Notifications with the Message Popover
- The App Descriptor
- OpenUI5 Walkthrough
- Creating Native Applications with UI5
- Semantic Pages
- Expression Binding
- Lightweight notifications with the Message Strip
- JavaScript Do's and Don'ts for UI5
- Welcome to 30 Days of UI5!
- Email Discipline
- JSON List Binding and maps
- openSAP Experiences
- This Week in Fiori (2015-16)
- This Week in Fiori (2015-15)
- This Week in Fiori (2015-14)
- This Week in Fiori (2015-13)
- This Week in Fiori (2015-12)
- Making Information More Useful
- The Maker's Schedule, Restraint and Flow
- This Week In Fiori (2015-11)
- Why I'm Staying Close to UI5
- Can I build a Fiori app? Yes you can!
- 10 tips to get you started on your Fiori development journey
- UI5 features for building responsive apps
- Speaking at Mastering SAP Technologies
- Fiori & UI5 Related Videos
- Morning Fiori Fix
- OpenUI5 at FOSDEM 2015
- Atom, Snippets, Tabs and CSON parsing
- Fiori App Data into a Spreadsheet? Challenge Accepted!
- Running: 2014 in review, and some Clojure
- DNA is still in our DNA
- The inaugural SAP architect and developer summit
- Creation & Reload of UI5 UIs in the Chrome Developer Console
- Addressing Emails
- This Week in Fiori (2014-43)
- This Week in Fiori (2014-42)
- Speaking at the SAP Architect & Developer Summit
- This Week in Fiori (2014-40)
- This Week in Fiori (2014-39)
- This Week in Fiori (2014-38)
- Scratching an itch - UI5 Icon Finder
- This Week in Fiori (2014-36)
- This Week in Fiori (2014-35)
- This Week in Fiori (2014-34)
- This Week in Fiori (2014-33)
- This Week in Fiori (2014-32)
- This Week in Fiori (2014-31)
- This Week in Fiori (2014-30)
- Keyed vs Non-Keyed Root JSON Elements & UI5 Binding
- OpenUI5 Tutorial at OSCON 2014
- This Week in Fiori (2014-29)
- This Week in Fiori (2014-28)
- Webinar and more - Understanding SAP Fiori
- This Week in Fiori (2014-27)
- Understanding SAP Fiori Webinar - The Director's Cut
- SAP Developer Advisory Board - Your Input!
- SAP Mentor Monday on UI5 - Links
- Paying IT Forward Links
- OpenUI5 CodeTalk Links
- Small steps - OpenUI5 toolkit now in jsbin.com
- Reaching Out
- Mocking up the Payroll Control Center Fiori App
- The essentials - SAPUI5, OpenUI5 and Fiori
- Public SAP Mentor Monday 24 Mar 2014 - UI5 with Andreas Kunz
- M is for 'responsive'
- Alt-K: Reading Notes
- XML Views and Resource Bundle Declarations
- UI5 XML Views - Another Example
- Help Us To Help You - Share Your Code
- Meta education - or teaching the teachers
- Quick hack: Calendar Inviter
- Mobile Dev Course W3U3 Rewrite - XML Views - An Analysis
- Custom Sorting and Grouping
- SAP UK & Ireland User Group Conference - Demo Jam!
- CodeTalk - SAPUI5 and SAP Fiori
- Mobile Dev Course W3U3 Rewrite - XML Views - An Intro
- Mobile Dev Course W3U3 Rewrite - ProductList, ProductDetail and SupplierDetail
- Mobile Dev Course W3U3 Rewrite - App and Login
- Mobile Dev Course W3U3 Rewrite - Index and Structure
- Mobile Dev Course W3U3 Rewrite - Intro
- Building SAP Fiori-like UIs with SAPUI5
- SheetAsJSON - Google Spreadsheet Data as JSON
- An Amazing 36 Hours at SAP Labs Israel
- Engaging the Next Generation
- #YRS2013 Hacks on Github
- Happy Birthday SCN, Old Friend
- Simple SAPUI5 Chrome icon for lazy developers like me
- CodeClub Thoughts
- Review of Dark Reserve Nr 3 from Lovibonds
- Functional Python - Itertools Exploration
- Our computational future
- 30 Day Challenge: No Beer!
- Public Github repo sapui5bin available
- Jump to Shell Workset Item from URL
- 30 Days Challenges
- Review of Fourth Dementia Old Ale from Kuhnhenn Brewing Company
- CodeClub and becoming a STEM Ambassador
- The Silent Club and Recharging Alone
- OData Everywhere
- Blog It Forward - DJ Adams
- Review of Norwegian Wood from Haandbryggeriet
- Recent Interests
- Serial interest in the Raspberry Pi
- SAPUI5 - the future direction of SAP UI development?
- Two tools for Gateway trial host nplhost
- On Enterprise Geeks Podcast
- Firebase and SAPUI5
- The Developer Connection: Connect Like Never Before
- SAPUI5 Powered SCN Forum Finder
- New Omniversity Course Video!
- Review of Red Rice Ale from Hitachino Nest
- SAPUI5 says "Hello OData" to NetWeaver Gateway
- Making OData from SAP accessible with the ICM's help
- SAP ICF course marketing: video!
- On the Information Diet
- The Developer Renaissance
- HTML5 @ SAP
- SAP Developer Center
- Movember - please donate!
- Web Programming with SAP's ICF: new course dates
- Moving on ... to Bluefin Solutions
- Review of Milk Stout from Left Handed Brewing Co
- Reading List Mark 2 - Part 5
- Reading List Mark 2 - Part 4
- Reading List Mark 2 - Part 3
- Reading List Mark 2 - Part 2
- Reading List Mark 2 - Part 1
- Automated email-to-task mechanism with Google Apps Script
- Ad-hoc Data Workflows with Google Apps Script
- Stand steady on the shoulders of giants
- Review of Torpedo from Sierra Nevada
- Beer review: Dark Star's Saison
- SOA scaffolding and development architects
- Review of Saison from Dark Star
- Danger! Graduate Conveyor-belt!
- JSON and Other Animals - talk at Manchester jQuery Meetup
- Gmail Contextual Gadgets - talk at Manchester GTUG
- My browser A-Z
- The past and future of SAP integration: guest Bluefin blog post
- Project Gateway. A call to arms. Or at least to data.
- Hacking the Delicious extension for Chrome
- Google Visualization API: Manchester GTUG Talk
- Not your father's SAP
- Getting started with Gmail Contextual Gadgets
- Scratching an itch - Magic The Gathering card info
- REpresentational State Transfer (REST) and SAP
- Tech Skills Chat with JonERP - A Follow-on Story
- REST orientation - Controlling access to resources
- A new REST handler / dispatcher for the ICF
- Mainframes and the cloud - everything old is new again
- SAP and Google Wave - Conversation Augmentation
- Book review - SAP Business ONE Implementation
- One way of dealing with blogtheft from SDN - through images
- Dealing with "#blogtheft" from SAP's Developer Network
- Command lines of the future, and simplicity of integration
- Coffeeshop screencast: HTTP conneg, resource representations and JSON
- 2nd coffeeshop REST/HTTP screencast
- Google Wave, XMPP and complexity
- Webhooks postbin example for Coffeeshop
- First coffeeshop demo screencast
- 'Coffeeshop' - lightweight HTTP-based pubsub
- Information vs Behaviour
- A return to the SDN community, and a touch of Javascript
- Tarpipe REST connector in 5 minutes
- Twitter's success
- Analysing CV searches with Delicious
- SAP everywhere!
- An HTTP connector for Tarpipe: 'tarbridge'
- tarpipe.com - Programming 2.0?
- Old feed URLs fixed with a bit of mod_rewrite voodoo
- Back from Real Life
- OssNoteFix script updated for Greasemonkey 0.6.4 and Firefox 1.5
- Java and Gosling's FUD - madness or desperation?
- SAP and Open Source: the debate continues
- Acorn Atom and my start in computing
- SAP and Open Source - an analysis and letter to SAP and Shai
- MoonOverFailsworth
-
Whither SAP?
I’ve been thinking a lot recently about where SAP is going and what SAP is doing today, especially in the light of where it went and what it did in the past. To be honest, the thinking has been triggered by frustration at the nuts and bolts of SAP technical matters, particularly in the area of service support and basis work.
-
SDN, Blogging, and Planet SAP
In May I was approached by a chap at SAP in Walldorf who wanted to ask me some questions on blogging (I have a blog over on the SAP Developer Network) for an article he was writing for an SAP-internal magazine.
-
The SAP developer community 10 years ago
On the early years of the SAP community online.
-
Turnkey MVS 3.8J on Hercules S/370 Screenshot
Big iron and retrocomputing.
- SAP: temporary loss of touch with reality?
-
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.
-
Europe, SAP, and two-way conferences
It’s the end of the week that saw the SDN Meets Labs down in Walldorf.
-
Flickr Pro from Robert
I’m going to have to think of ways to make use of the extra bandwidth and picture storage capabilities, aren’t I?
-
SDN Meets Labs
Rain. Lots of it. And I drove through it all this morning, all the way down the A61, to get to SAP University in Rot, near Walldorf.
-
SDN Meets Labs gets underway at SAP University
The SDN Meets Labs at Walldorf-Rot gets underway at Walldorf-Rot.
- Muscle cars
-
An overcorrection too far?
Norman Walsh gives up ‘wrestling his way through the arcana of WSDL’.
-
Postcode bookmarklet
We’ve been spending time recently looking at property in the North West.
-
Weblog happy in new home - note new URLs!
Cool URIs don't change ... much.
-
Ralphm on sjabber
Digging into sjabber's source.
-
Honest application requirements
An unusual "user story".
-
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.
-
A fresh start
The perils and joys of self-hosting at a colo.
- (Mini) Installfest in the SDN clubhouse at TechEd
-
Photos from SAP TechEd Munich
The third weblog in two days … what’s going on? Well, Mark is a hard taskmaster, obviously 🙂
-
The meaning of LIFETIME_RC
Last week, during some preparation for my talk at TechEd on Thursday this week, I’d been wondering about something in the ICF that hadn’t seemed quite right.
-
SAP TechEd first day - notes from Munich
Well, after a nightmare getting here (V-Bird, the airline I was booked with, went bust) I’m now in Munich at a decidedly disconnected TechEd 04 (more on the disconnected misery later).
-
SAP TechEd here I come ... with session slides!
SAP TechEd is looming large, and this year it's in Munich. (If you’re not in Europe, then SAP are holding TechEd events in Bangalore, Tokyo, and San Diego too).
-
The integration irony of SAP's technology directions
I’ve finally realised what it is that’s been bugging me about the new arena of SAP technology.
-
The Curious Incident Of The Dog In The Night-Time
I bought three books at Manchester airport yesterday.
- A little taste of SAP at EuroFoo
-
SDN Meetup in Walldorf - a summary
Well, 24 hours (almost to the minute) have passed since I got off the train at Wiesloch-Walldorf station yesterday.
-
TechEd talk winners - congrats
Congratulations to the three TechEd talk winners Luke, Jayakumar and Andreas.
-
Forget SOAP - build real web services with the ICF
I don’t like getting into a lather when it comes to data and function integration. Rather than using SOAP, I prefer real web services, built with HTTP.
-
Real Web Services with REST and ICF
This piece has become somewhat famous (or infamous) in SAP tech circles, for the approach it took and the claims it made. I'm happy to say that REST won out and that those that tried to denounce me ... failed :-)
-
NW4, OSS1 and logon group selection for OSS
Digging into logon group selection.
-
SAP at JAX 2004
A brief report on JAX 2004.
-
WAS 6.40 testdrive for Linux is here!
Phew. What a day yesterday at the world’s biggest IT fair.
-
Successful installation of EP plugin into testdrive WAS 6.10 system
I spent most of yesterday in the kitchen, my favourite place.
-
Tim O'Reilly and the three 'C's
Well, I made it to FOSDEM this morning with time to spare.
-
FOSDEM, and small OSS Notes Browser Hack
Tomorrow morning I'm off to Brussels for FOSDEM - the Free and Open Source Software Developers' Meeting.
-
FOSDEM and Brussels, here I come!
I’ve been umming and arring over conferences this year.
-
Hawo's Queen of Grain Mills
I've been baking bread now for quite a while now. The bread baking bug first got ahold of me when visiting friends. They had a bread making machine – something that you put all the basic ingredients into, hit a button, and presto. Naturally we bought one soon after, and I was, well, "hooked".
-
Hello, 2004
2004 is here. Neues Spiel, neues Glück.
-
SAP TechEd - Collaborative notes
I’m off to SAP TechEd this week in Basel.
-
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.
-
Plums and the antithesis of technology
I haven’t been online much recently.
-
Improving the OSS note experience
How can we make this key service less unpleasant to use?
-
SAP InfoTag on Web Application Server
SAP are running an Infotag on the Web Application Server in early September.
-
SAP talk at OSCON, and RSS
Reflecting on our talk at OSCON about extending SAP with open source tools and protocols.
-
Google Pocket Guide out now
My new book for O'Reilly is out.
-
Another great OSCON
Reflecting on another Open Source Convention.
-
Thanks, Randal
Relaxing in an 80's arcade at OSCON.
-
Dashboard, a compelling articulation for realtime contextual information
Miguel de Icaza and Nat Friedman were keynoting at OSCON this morning.
-
SAP and Open Source BOF at OSCON
Merging the enterprise and open source worlds over a beer.
-
Bittersweet
On each occasion I’ve travelled to the USA, either on business or for pleasure, I’ve entered the country with a rather bitter taste in my mouth.
-
Thinking vs doing
In the past, I’ve mentioned to friends some of the thinking I’ve had about the Semantic Web, RDF, and related stuff (FOAF, RSS, and so on).
-
Some ramblings on URIs and identity
Coming back from a short break from the tech world recently, I started to reacquaint myself with FOAF and RDF, amongst other things.
-
SAP stuff at OSCON
My partner-in-(code)-crime Piers Harding and I are speaking at this year’s OSCON (Open Source Convention).
-
The SAP/MySQL Partnership
I keep hearing reports that the recent announcement of cooperation between SAP AG and MySQL AB has been making the community unhappy.
-
Speaking at OSCON 2003
Always an honour and a privilege.
-
"A brilliant literary mash-up"...
The fusion of Hogwarts and Molesworth.
-
Weblogs and Wikis - Blurring the Boundaries
More on the crossover between blogging and wikis.
-
New Blosxom plugin 'submission'
A generic blogging mechanism for accepting content POSTed to it.
-
'Conneg' and the duality of weblogs
Philosophy triggered by the lowly but essential connection negotiation aspect of HTTP.
-
Tiki parser for MoinMoin
Embedding the Tiki language into the MoinMoin wiki.
-
Blosxom 2.0 Beta1
Looking at the latest release of the blogging software that I use.
-
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.
-
Your wishlist in 'consumable' XML
Introducing a new experimental Perl module.
-
Asleep in 2002
Amazon does seem to have XML based data available after all.
-
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?
-
Content-Type and Blosxom's RSS
The perils of unescaped content in feeds.
-
Wisdom, diplomacy, or serendipity?
On the architectural style(s) of allcosuming.net's API.
-
The universal canvas and RSS apps
Thoughts on the applicability and utility of the format.
-
The disruptive engineering spectrum, and "booktalk", an AllConsuming app
Creating an experimental service based on existing mechanisms.
-
Creating the "Entry index"
More on building out how my blog looks.
-
A new year and a new approach
Taking a fresh, less cluttered approach to the website and blog.
-
Startups and software patents
Dave W points to Strangeberry, a startup that are doing a Java rendition of Rendevous.
-
For REST, read 'Architectural Style'
In the swirling mass of memes surrounding web services it’s sometimes easy to forget that REST is an architectural style, an approach, rather than something that you install or debug.
-
"Assaults on the Internet's end-to-end-architecture"
What can and should we do about spam?
-
Ben's RSS book
A new book on RSS from Ben Hammersley.
-
RESTifying RT
Some notes on providing a RESTful API for Request Tracker.
-
'Practical RDF' book up for public review
Shelley Powers' new book.
-
Notes to self: What should the rdf:about point to?
If nothing else, RSS 1.0 is a great source of contemplation and wondering. This morning, I’ve been considering the thoughts surrounding the rdf:about attribute in the channel element.
-
A moment of clarity: The significance of RSS 1.0 as an RDF application
It's to do with the emphasis on RDF rather than XML, in RSS.
- The case of the missing rdf:Description
-
More thoughts to ponder
Here are two or three thoughtbites that I’ve come across over the past few days and that have stayed with me. I just thought I’d share them here as it’s the weekend and often a good time to think about things.
-
XML Scripting, data manipulation, and RDF
Can there be native support for XML as a data type?
-
Moving from description to content:encoded in my RSS 1.0 feed
Using the mod_content module of RSS 1.0.
-
From RSS 0.91 to 1.0
Incantations to progress to RSS 1.0.
-
The RDF in RSS
Digging into the real truth about the RDF in RSS.
-
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.
- REST, Google, and idempotency
-
Cacheing on XSLT service
More on the Mozilla sidebar experiments.
-
Sidebars, Mozilla, RSS: old and new
RSS, RDF, XUL, XSLT and more.
-
You know you're getting old ...
Looking back on this year's OSCON.
-
The OS tables are turning...
The origins of one of my favourite phrases "Does not work on Windows".
-
Just finished re-reading: The Player Of Games (Iain M Banks)
Some thoughts on The Culture.
-
The mist is clearing ...
On my continuing quest to grok REST.
-
From REST to URIs, the Semantic Web, RDF, and FOAF
Protocols and formats making up the semantic web.
-
The 80/20 of HTTP
Musing on how HTTP is used in the main.
-
Reflecting weblogs.com 'ping's with SOAP, Jabber, and Pubsub
More on building out the weblog-o-sphere infrastructure.
-
Programming Jabber review
A positive review of my O'Reilly book.
-
Accessibility and Blosxom
Extending my blogging engine for accessibility.
-
A change and a rest
Back recharged from holiday.
-
'Blosmail' - add and maintain your blog entries via email
Experimenting with Blosxom editing via a different medium.
-
Standing on the shoulders ... Exploring Weblog Neighbourhoods with Blogdex
Inspired by Mark and Dave, I’ve been doing a bit of neighbourhood exploration hacking of my own.
-
Small Blagg mod to enable custom formatting of 'blaggregated' items
An unofficial modification to Blagg.
-
Changed link tags
More work on RSS, metadata and discovery.
-
HTML link tag for Blogroll
Social network scripting and blog rolls.
-
Collapse/Expand feature for my Blaggregated display
Extending Blagg and related features.
-
Extreme Computing 2002
Going to the Festival of Inappropriate Technology.
-
RSS's underlying structure, and meta-RSS.
I’ve been pondering the nature of RSS, the lightweight syndication and feed format which is a heavy contender for the most talked-about XML format these days (uh, I suppose this post goes some way to help the cause too :-).
-
HTML LINK to RSS source
Continuing the build-out of weblog based mechanisms.
-
Top tip
On falling down the stairs.
-
ETag-enabled wget
Adding ETag awareness to the venerable wget utility.
-
More thoughts on HTTP, Email, and Jabber
On HTTP headers and queueing architectures.
-
"Web^H^H^HInternet Services"? Some Ramblings.
I’ve been pondering the term “Web Services”. While I completely understand and agree with all the reasonings behind the term (the ‘original’ services were accessible via web clients, HTTP is the underlying and ubiquitous transport, blah blah blah), I’m wondering whether “Web Services” is the best term to use.
-
The Panopticon
Extending the Panopticon experiment with XML messaging via Jabber.
-
Jabberconf Blaggplug version 0+1b
Updating the Jabber conference plugin for Blagg (the Blosxom RSS aggregator).
-
(Jabber-)Browsing the Panopticon data
More on extending the Panopticon experiment.
-
Amphetadesk Links
More on feeds, subscriptions and aggregations.
-
Subscription from Radio
Maintaining feed metadata.
- Mr 80-Percent
-
Blaggplug: jabberconf
Aggregation and publish/subscribe.
-
YARM: Yet Another Referers Mechanism
Referers, backlinks, and the Unix command line.
-
One small step ... one giant leap ...
Calling remote functions over Jabber.
-
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.
-
community(disagreement + debate) = inspiration
The debate between SOAP and REST.
-
"Blog Locally, Publish Globally"
On the enduring pattern of local control but global reach.
-
Other side of the coin: 5335 now resurrected
RSS, Radio Userland, and redirectors.
-
Original Peerkat-based weblog back up for reference
More on Peerkat, a data syndication aggregator.
-
Coffee Mugs and weblog interop
Experimenting with Peerkat, feeds and Blosxom.
-
Cross pollination and blossoming of scripts
On the growing Blosxom ecosphere.
-
My bookmarks
Scripting with bookmarks.
-
Off with the (relatively) old, on with the new
More on Blosxom, and a fix to our colocated server.
-
Interview on jabber.org
A transcript of my interview on jabber.org.
-
Hello Blosxom
A move to the Blosxom blogging software.
-
Bot window as command line of the future
Musing on doing more from within the chatbot prompt.
-
FOSDEM interview
This post is a transcript of an interview by Raphaël Bauduin for FOSDEM.
-
What is a Jabber client?
"A rose is a rose, by any other name." But is the same true for a Jabber client? I don't think so.