DJ Adams

Blog

  1. Knowledge and netiquette in today's AI era

    What I took from a couple of great podcast episodes I listened to this morning.

  2. Timeless principles, agnostic design and the power of CAP's abstractions

    The timeless principle of agnostic design, aka minimal assumptions, is strongly present in CAP. In this post I explain what this principle represents, based on the corresponding section of Daniel Hutzel's keynote at reCAP 2026.

  3. reCAP 2026 talk resources

    Resources related to our talk at reCAP 2026.

  4. Computing memories

    Some brief thoughts on history and how we used to have to make things work, sometimes in painstaking detail.

  5. Blogging in en-GB

    I've changed the language declaration on my website to en-GB. Here's why.

  6. CAP service authentication at design time and in production

    In this short post I explain how the "failsafe" production auth mechanism is designed for resources served in a CAP context.

  7. Book Overflow and two architectural patterns in CAP

    In this short post I note a couple of software architecture patterns that were mentioned in a recent Book Overflow episode, patterns that are clear and present in CAP.

  8. Local-first dev with CAP Node.js - mocking messaging

    In this post I provider a taster of what's possible regarding mock messaging in CAP Node.js local-first development.

  9. Local-first dev with CAP Node.js - mocking remote services

    In this post I provider a taster of what's possible regarding mock remote services in CAP Node.js local-first development.

  10. Local-first dev with CAP Node.js - mocking auth

    In this post I provider a taster of what's possible regarding mock auth in CAP Node.js local-first development.

  11. Local-first dev with CAP Node.js

    Here's an overview of a set of related posts on mocking, in the context of local-first development with CAP Node.js.

  12. Local-first dev with CAP Node.js - mocking data

    In this post I provider a taster of what's possible regarding mock data in CAP Node.js local-first development.

  13. CDS expressions in CAP - notes on Part 6

    Notes to accompany Part 6 of the mini-series on the core expression language in CDS.

  14. CDS expressions in CAP - notes on Part 5

    Notes to accompany Part 5 of the mini-series on the core expression language in CDS.

  15. CDS expressions in CAP - notes on Part 4

    Notes to accompany Part 4 of the mini-series on the core expression language in CDS.

  16. CDS expressions in CAP - notes on Part 3

    Notes to accompany Part 3 of the mini-series on the core expression language in CDS.

  17. CDS expressions in CAP - notes on Part 2

    Notes to accompany Part 2 of the mini-series on the core expression language in CDS.

  18. CDS expressions in CAP - notes on Part 1

    Notes to accompany Part 1 of the mini-series on the core expression language in CDS.

  19. Genres, cuids and a bit of AWK

    Using AWK to process the Genres data from the CAP bookshop sample.

  20. Improving the SAP Community together, one comment at a time

    A suggestion on how we can work together to make the SAP Community better.

  21. Shift left with CAP

    In this post I posit that shifting left in our CAP based solutions is something that we should be striving to do.

  22. Series of "Did You Know" videos

    Here's a collection of pointers to short "Did You Know" videos from the Developer Advocates, highlighting small but interesting and useful aspects of various SAP tech tools, frameworks and products.

  23. Modifying queries, replacing the WHERE clause

    Here's a quick post to explain how to modify existing query objects in CAP, specifically using the CAP Node.js cds.ql API.

  24. Path expressions, nested projections, aggregations and expressions in queries with CQL and CXL in CAP

    A brief exploration of some of the features of CAP's powerful query and expression languages, inspired by our journey into CXL in the current Hands-on SAP Dev series.

  25. OData Deep Dive rewrite in the open

    I'm refreshing the content of the OData Deep Dive series of tutorials, in the open.

  26. Modules, modularity & reuse in CDS models - part 5 - digging into @capire/common

    In this post I look at various mechanisms that @capire/common has that makes it "active" as a reuse package.

  27. Constraints, expressions and axioms in action

    In this blog post I meditate on how declarative constraints are realised in CAP, using the power of the underlying database.

  28. Modules, modularity & reuse in CDS models - part 4 - from passive to active with @capire/common

    Starting with a simple use of the published @qmacro/common reuse module, I then turn to @capire/common for a first look at what I call an "active" reuse module.

  29. Modules, modularity & reuse in CDS models - part 3 - publishing the simple reuse package

    Taking the simple passive reuse package created in part 2, I now publish it to the NPM registry which is part of GitHub Packages.

  30. Modules, modularity & reuse in CDS models - part 2 - creating a simple reuse package

    Following on from part 1 in this series, I take a step back and look at the fundamentals of creating and working with a module, locally in this part, using the NPM workspace concept.

  31. Why I use services.cds in simple CDS model examples

    The services.cds filename is special, which is why I make use of it.

  32. Modules, modularity & reuse in CDS models

    An overview of the blog posts in the series "Modules, modularity & reuse in CDS models".

  33. Modules, modularity & reuse in CDS models - part 1 - an introduction

    In this first post of a new series I look at the using directive in CDS modelling, and how NPM modules can be fundamental building blocks in modularity and reuse.

  34. A new Hands-on SAP Dev mini-series on the core expression language in CDS

    Hands-on SAP Dev is back soon, kicking off in January with a new mini-series on CAP, specifically on CXL, the core expression language in the CDS family.

  35. A simple exploration of status transition flows in CAP

    In this post I explore the new Status-Transition Flows in CAP with a simple example.

  36. Some ramblings on simple CDS modelling with CDL

    A brief note-to-self after digging in to some simple constructs in CDS modelling.

  37. Hands-on domain modelling with CAP's CDS at UKISUG Connect

    A quick overview of the hands-on workshop I'll be running at UKISUG Connect this year.

  38. 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.

  39. Modelling contained-in relationships with compositions in CDS

    A short study of the features of CDS for modelling classic contained-in relationships, with a focus on the details, and a lean towards anonymous aspects.

  40. Using @capire modules from GitHub Packages

    Here's how to access and use the @capire namespaced modules that reside in the NPM registry which is part of GitHub Packages.

  41. CDS source formatting and readability

    Embracing a modern approach to source code formatting for human-centric modelling in CAP

  42. Upcoming talks in autumn 2025

    I'm writing this mostly to organise myself and get my preparations in order!

  43. 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.

  44. 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.

  45. Excluding specific diagnostics in Neovim

    Here's what I did to be able to filter out certain diagnostic messages in Neovim.

  46. A reCAP intro to the cds REPL

    Here's a summary of my talk on the cds REPL at this year's reCAP event.

  47. 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.

  48. Editing Markdown in a Neovim environment

    Here are some notes I made when digging into my tools for editing Markdown source.

  49. 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.

  50. 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.

  51. 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.

  52. 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.

  53. 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.

  54. 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.

  55. 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.

  56. 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.

  57. 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.

  58. 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.

  59. 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.

  60. 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. This post is about using the knowledge we've gained to write our own plugin.

  61. 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.

  62. CAP Node.js Plugins

    Here's a summary of the resources relating to the CAP Node.js Plugins series.

  63. TASC Notes - Part 6

  64. Functions as first class citizens in SICP Lecture 1A

  65. TASC Notes - Part 5

  66. TASC Notes - Part 4

  67. The elements of programming with respect to CDL and SICP

  68. The Art and Science of CAP

  69. TASC Notes - Part 3

  70. TASC Notes - Part 2

  71. Creating the new Tech Aloud intro and outro music

  72. Flattening the hierarchy with mixins

  73. Five reasons to use CAP

  74. Separating concerns and focusing on the important stuff

  75. Restricting access via facets with masked elements

  76. Keeping things simple in domain modelling with CDS

  77. Immutable layers, file deletion and image size in Docker

  78. CAP Node.js plugins - part 1 - how things work

    In this first of a three part series of blog posts accompanying a corresponding video series, we explore the CDS plugin mechanism in CAP. This post is about understanding how the plugin mechanism works.

  79. TASC Notes - Part 1

  80. Setting up a cache server for apt packages

  81. New source for LXD images on Crostini

  82. Using lazydocker with SSH-based remote contexts

  83. Automatic validation in OData and REST calls with CAP

  84. reduce - the ur-function

  85. Highest value in JS - different ways

  86. Turning an OData expand into a cds.ql CQL query with a projection function in CAP

  87. Enabling document fragment links for headings in SAP Community blog posts

  88. Digging into CSN diffs for CDS models

  89. CodeTalk interview - living and working on a narrowboat

  90. Using ARG in a Dockerfile - beware the gotcha

  91. Defining a custom 'after' handler in CAP with 'each'

  92. Obtaining auth code grant type OAuth 2.0 tokens for Google APIs with a script

  93. Controlling automatic HTTP requests in CAP Node.js design time loops

  94. Simple script for previewing CDS models in CSN - cdsray

  95. Using @cap-js/sqlite in CF for your CAP services

  96. Running non-production CAP services in CF

  97. Easily add an explicit cds.requires.db to your CAP project's package.json

  98. Improve your CAP dev container shell prompt

  99. Avoid design time CAP server restarts when maintaining local data files

  100. CAP, CDS, CDL, CSN and jq - finding associations

  101. CAP, CORS and custom headers

  102. Test drive Joule's generative AI features in SAP Build Code now!

  103. Curating a collection of jq functions

  104. ISO content for common CAP types

  105. Quick conversion of multiple values using with_entries in jq

  106. Opening files from the terminal in BAS dev spaces

  107. Successful double CodeJam in Wroclaw and Warsaw

  108. Ghost cratch fitted

  109. Exploring codespaces as temporary dev containers

  110. Accuracy and precision in language

  111. Developing CAP in containers - three ways

  112. Battlestation 2024

  113. A simple jq REPL with tmux, bash, vim and entr

  114. Using the docker CLI in a container on macOS

  115. From Twitter to Mastodon

  116. Tmux plugin development with a local repo

  117. TIL - Two Tmux Plugin Manager features

  118. Solving the SAP TechEd Easter Egg on the Web

  119. Devtoberfest - the best developer prep for SAP TechEd

  120. Bash shell expansion inside double quotes

  121. OData query operations and URL encoding the system query options with curl

  122. Curing my stove aboard the narrowboat

  123. Mercia Marina to Shobnall Fields and Burton-on-Trent

  124. Resources for navigating the canal network

  125. Oil change and a visit to Mercia Marina

  126. SAP CodeJam report - service integration with CAP in Guetersloh, DE

  127. Selecting the related endpoints from a GitHub API response using jq's with_entries

  128. SAP CodeJam on Service Integration with CAP in Brescia

  129. Living on a narrowboat - layout details of the stern

  130. Improving my interactive jq workflow with ijq, bash and tmux

  131. More on the comma as generator, and streaming with select in jq

  132. Double SAP BTP goodness in Isernhagen

  133. Recognising patterns and embracing the stream

  134. Learning from community solutions on Exercism - part 3

  135. Living on a narrowboat - the stove as the heart of the home

  136. Learning from community solutions on Exercism - part 2

  137. Learning from community solutions on Exercism - part 1

  138. SAP community memories

  139. A deep dive into OData and CDS annotations

  140. SAP CodeJam on the btp CLI and APIs in Heilbronn

  141. SAP CodeJam on Service Integration with CAP in Utrecht

  142. Living on a narrowboat - embracing constraints

  143. Working from a narrowboat - Internet connectivity

  144. I'm moving onto a narrowboat

  145. Learning from exploring a question on jq

  146. Array push with autovivification in jq

  147. Managing resources on SAP BTP - what tool do I choose?

  148. Extracting blog post dates from URLs with jq

  149. Some notes on modular JSON Schema definitions

  150. More Untappd data explorations with jq - my top ranking beer types (part 3)

  151. More Untappd data explorations with jq - my top ranking beer types (part 2)

  152. Stop asking for slides in advance

    I'm giving a talk next month and was asked by the organiser to send my slides to them no later than two weeks before the event. Hmm.

  153. More Untappd data explorations with jq - my top ranking beer types (part 1)

  154. Untappd data with jq - my top brewery countries

  155. Understanding jq's SQL style operators JOIN and INDEX

  156. Summing and grouping values with jq

    Here's yet another note-to-self on using jq, this time to transform a flat list of order totals and dates into a summary of total order values by year.

  157. Reshaping data values using jq's with_entries

  158. Multiple level filters in jq

  159. Products by supplier in OData and jq

  160. Exploring JSON with interactive jq

  161. JSON object values into CSV with jq

    I wanted to grab a CSV version of a JSON representation of an entityset in the Northwind OData service. Here's how I converted the JSON structure into CSV with jq, and along the way, I talk about arrays, objects, iterators, object indices, variables, identity, array construction and format strings.

  162. Exploring GitHub repo name distribution with jq

  163. Converting strings to objects with jq

  164. Some thoughts on jq and statelessness

  165. Bash notes 3

  166. A classic example of yak shaving, and some stream editing

  167. Bash notes 2

  168. Bash notes

  169. Understanding jq's reduce function

  170. Setting up my own Cloud Foundry

  171. Exercism and jq

  172. SAP Tech Bytes: btp CLI - new home for configuration

  173. How I got involved in the SAP community

  174. Allowing my intangible core to catch up with the rest of me...

  175. Truncation and neat terminal output

  176. Controlling Chrome from the CLI

  177. Setting up hadolint - a Dockerfile linter

  178. Getting BTP resource GUIDs with the btp CLI – part 2 - JSON and jq

  179. Getting BTP resource GUIDs with the btp CLI - part 1

  180. UTFRW - Unofficial TechEd Fun Run / Walk / Roll - Share Your Pics!

  181. Exploring fff part 2 - get_ls_colors

  182. Embracing jq and JSON

  183. Sourcing vs executing in Bash

  184. SAP Tech Bytes: btp CLI - autocompletion

  185. Using functions more

  186. SAP Tech Bytes: btp CLI - managing configuration

  187. Improving shell fu with practice

  188. SAP Tech Bytes: btp CLI – logging in

  189. Exploring fff part 1 - main

  190. SAP Tech Bytes: btp CLI - installation

  191. Learning by rewriting - bash, jq and fzf details

  192. Today's TIL trio

  193. Session switching with the tmux menu

    Here's a way to get a simple session switcher in tmux using a popup menu.

  194. tmux output formatting

    Here's what I learned today about FORMATS in tmux output.

  195. Reopening pull requests and GITHUB_ACTOR

  196. Unix tooling - join, don't extend

  197. Early thoughts on Warp

  198. The APC SMT750IC UPS works with the Synology NAS DS1621+

  199. Remote access to Docker on my Synology NAS

  200. Adding a drive to my Synology NAS

  201. Equality in tech

  202. Supporting developers with sponsorship

  203. Notes on Markdown linting - part 2

  204. Notes on Markdown linting - part 1

  205. Solving mysterious unrendered markdown headings

  206. Unpacking Bash shell tips from a GitHub Actions workflow

  207. GitHub Actions workflow browser

  208. Producing JSON with jq for appending issue titles

  209. SAP Tech Bytes: Exploring SAP-samples with gh and fzf

  210. Mainframes, SDSF and GitHub Actions

  211. New tmux panes and windows in the right directory

  212. Deeper connections to everyday tools

  213. Two-phase video uploads with YouTube API and curl

  214. La Pavoni maintenance successful

  215. Mass deletion of GitHub Actions workflow runs

  216. 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".

  217. Aborting a script with parameter expansion

  218. SAP TechEd Developer Keynote - Info Central

  219. SAP Tech Bytes: Approuter User API Service

  220. fzf - the basics part 2 - search results

  221. Thoughts on video content

  222. fzf - the basics part 1 - layout

  223. Do less and do it better

  224. Columnar layout with AWK

  225. From Classics to Developer Advocate

  226. Updating your fork of the Developer Keynote repository

  227. Waiting for jobs, and the concept of the shell

  228. SAP TechEd 2020 Channel 1 at home

  229. Implicit values in Bash for loop construct

  230. UTFRW - Unofficial TechEd Fun Run / Walk

  231. SAP TechEd Developer Keynote DK100 - The Story

  232. My SAP TechEd 2020 - what I'm looking forward to

  233. An overview of SAP Developers video content

  234. The myriad meanings of pwd in Unix systems

  235. Computer Unit 1979

  236. The subtle art of quoting newline characters

  237. Case modification operators in parameter substitution

  238. MID$ and shell parameter expansion

  239. Understanding declare

  240. Desnowballification with set -o errexit

  241. 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.

  242. curl and multipart/form-data

  243. Checking a command is available before use

  244. Using exec to jump

  245. A new learning source for shell scripting

  246. Shell parameter expansion with :+ is useful

  247. Reducing writing friction

  248. Programmer's Day Mission 2020

  249. You can mask sensitive hostnames with wildcards and host aliases

  250. The open square bracket [ is an executable

  251. Why we have /bin/ and /usr/bin/

  252. String.prototype.replace() can take a function

  253. continue-on-error can prevent a job step failure causing an action failure

  254. git diff can emit different exit codes

  255. In an mta.yaml file you can use the service-name parameter to point to an existing resource

  256. SAP NPM packages now on npmjs.org

  257. Removing the knob on a La Pavoni steam valve

  258. SAP Community Coding Challenge 2 - Finalists

  259. SAP Community Coding Challenge 2 - Contestants

  260. Remote mount setup on the Raspberry Pi

  261. SAP Community Coding Challenge 2 - Update

  262. Terminal Tip: a CF remote monitor script

  263. SAP Community Coding Challenge Nr.2

  264. Terminal Tip: remotely monitor a CF deployment

  265. Terminal Tip: switching CF targets

  266. Terminal Tip: parsing CF app logs

  267. Terminal Tip: truncating CF output

  268. Initial Pi configuration via Ansible

  269. Code at Home episodes

  270. Let's learn to "Code at Home"

  271. Starting out with Raspberry Pi experiments

  272. Preparing the OS image

  273. Finding the Pis on the network

  274. Brambleweeny Cluster Experiments

  275. Mini adventures with MTAs and the Cloud Foundry CLI

  276. Scripting Cloud Foundry activities in trial

  277. My learning list for 2020

  278. Help us to help you - good questions beget good answers

  279. Mission 'Use CAP and SAP Cloud SDK to Extend S/4HANA' - an overview

  280. CAP is important because it's not important

  281. Shell power and simplicity

  282. Submit suggestions for Tech Aloud during SAP TechEd 2019

  283. Tech Aloud podcast - an introduction

  284. New podcast - Tech Aloud

  285. Happy Programmers Day!

  286. Hitch Hiker's style in Sea of Sorrows

  287. Computed field example in CAP

  288. We can do better than 'polynimbus'

  289. The Observer's Book of JS Style

  290. David Edward Adams

  291. Double SAP CodeJam Athens - a report

  292. Revisiting UI5 on CodeTalk

  293. First thoughts on the 2019 Stack Overflow Developer Survey results

  294. ES6, reduce and pipe

    In learning about functional programming, one thing that's worked for me is to take my time, and not rush over fundamental concepts. In fact, like a good beer or whisky, a fundamental concept is something to savour, to enjoy at a leisurely pace.

  295. Vim, Markdown and writing

  296. Housekeeping

  297. Monday morning thoughts: looking back and forwards

    I look back on the posts in this series, reflect upon the journey we've made, and think about what 2019 might hold for us.

  298. Monday morning thoughts: digging deeper

    I think about the tools we use in our day-to-day activities, the feeling I have that I'm just scratching the surface with regards to their capabilities, and what I plan to do about it in 2019.

  299. Monday morning thoughts: indirect influence

    On how our work can directly and even indirectly influence those that come after us, and about what this means for how we should act.

  300. Monday morning thoughts: learning media and mechanisms

    I think about the different ways I learn, and wonder how that translates to how we learn in the SAP developer ecosphere.

  301. Monday morning thoughts: rethinking like the web

    I revisit some principles that help us "think like the web" and think about them in the context of today's SAP technology landscape and community.

  302. Monday morning thoughts: longevity and loose coupling

    I think about the importance of core technologies, and how the arrival of functions-as-a-service might be merely the next incarnation of an idea that's existed for a while.

  303. Monday morning thoughts: on starting blogging

    On what made me start blogging, and on the reasons to start blogging that might resonate with you, if you've not yet made that step.

  304. Monday morning thoughts: exploring reuse

    I think about reuse and extension, in the context of the Application Programming Model for SAP Cloud Platform, and mindful of Björn Goerke's SAP TechEd 2018 keynote message in Barcelona - "keep the core clean".

  305. Monday morning thoughts: dynamic language

    Musings on a particular function definition in JavaScript, and how it represents beauty and practicality in equal measure.

  306. Set up VS Code on Chrome OS for local Application Programming Model development

  307. Monday morning thoughts: big school and community

    On my experience going from primary school to secondary school - "big school", how that parallels our collective move from on-prem to the cloud, and how the community is more important than ever in this transition.

  308. SAP Cloud Application Programming Model (CAP) - start here

  309. Monday morning thoughts: more on ABAP in the cloud

    Following a previous post on the subject, I think a bit more about the SAP Cloud Platform ABAP Environment, inspired by the conversations around the subject at SAP TechEd in Las Vegas last week.

  310. Monday morning thoughts: impostor syndrome

    On the impostor syndrome, how it relates to me, and one of the possible causes.

  311. Monday morning thoughts: growth is upwards

    In this post, I think about how we grow, how we improve ourselves by adding to our knowledge and experience, and consider that our growth is sometimes uphill but almost always rewarding.

  312. Monday morning thoughts: Workflow Forms and the definition of a developer

    I think briefly about the definition of a developer, and in that context look at the advent of Workflow Forms, a major new addition to the functionality of the Workflow service on SAP Cloud Platform.

  313. Monday morning thoughts: ABAP in the cloud

    I think about the new SAP Cloud Platform ABAP Environment, what it is, what it isn't, and why I think it's a great move.

  314. My take on Wired's Google & URLs article

  315. Monday morning thoughts: considering GraphQL

    On GraphQL, and its relationship with existing ideas for managing data and structured exposure to that data over a wire protocol.

  316. Monday morning thoughts: a good blog post

    What makes a good blog post, and also what writing such a post does for the author, too.

  317. Monday morning thoughts: OData

    I think about OData, in particular where it came from and why it looks and acts like it does. I also consider why I think it was a good protocol for an organisation like SAP to embrace.

  318. Monday morning thoughts: the cloud is the computer

    I think about what the future of programming in an enterprise environment might look like, and realise that it makes sense to consider that the cloud itself is the new computer.

  319. Monday morning thoughts: mainframes and message documentation

    I think about mainframes and a message documentation aspect from the mainframe world that, while originally proprietary, is a big plus for operators and developers alike and something I'd love to see return.

  320. SAP CodeTalk sessions

  321. Monday morning thoughts: local http servers and containerisation

    I look back on an idea surfaced by a hero of mine, and think about how that idea laid the path for today's containerisation initiatives.

  322. Monday morning thoughts: what not how

    In this post, I think about how we program, about the way we describe what it is that we want the computer to do for us, and look at what has become for me the canonical example of the difference between 'what' and 'how'.

  323. Monday morning thoughts: abstraction

    I think about abstraction, the power and facility it affords, and consider CDS as one example of a modern abstraction language.

  324. Monday morning thoughts: curiosity and understanding

    I think about how curiosity can lead to a better understanding of things, and give a specific example concerning CDS and the new Application Programming Model for SAP Cloud Platform.

  325. Monday morning thoughts: developers and advocacy

    I think about what it means to me to be a part of the Developer Relations team, and talk a bit about evangelism, outreach and advocacy.

  326. Monday morning thoughts: programming models

    I think about the idea of the programming model and consider the occurrence of such over the recent years in the SAP development ecosphere.

  327. Interview with Rui Nogueira on the new Application Programming Model for SAP Cloud Platform

  328. Monday morning thoughts: community engagement

    I think about some of the basic ingredients of a good online community, and describe what I'm going to try to do to engage more with the SAP Community.

  329. Monday morning thoughts: Core Data Services

    What Core Data Services (CDS) is, what it does, and why we should make it a priority to learn more about.

  330. Monday morning thoughts: the learning continuum

    I contemplate the idea of the learning continuum, and think about the fact that we're all learning together, which is a good thing.

  331. Monday morning thoughts: programmers and identity

    On how some programmers identify strongly with a particular language, consider the meanings of 'programmer', 'coder' and 'developer', and what it means for us as the SAP enterprise programming landscape changes.

  332. Collaboration tools

  333. The Business Rules service - overview and getting started

  334. Monday morning thoughts: milestones

    I look back at changes and developments that I consider milestones in SAP's technology history, and muse on some of the developments today that we'll consider milestones in the future.

  335. Monday morning thoughts: functions - what functions?

    Musings on the concept of functions-as-a-service, what it means, and what it's good for.

  336. Balancing features with simplicity

  337. Monday morning thoughts: containers and silence

    On the silence of workstations and what that represents to me, and the new ability to look at maintaining software and services in a completely different way - via containers.

  338. 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.

  339. Monday morning thoughts: debugging approach and Greasemonkey revival

  340. Monday morning thoughts: upload / download in a cloud native world

    On how our modus operandi is often at odds with the true nature of cloud computing.

  341. Monday morning thoughts: a cloud native smell

    On the importance and design of URLs, and the opacity of cattle vs the individuality of pets.

  342. Introduction to SAP Cloud Platform Workflow - Summary

  343. Monday morning thoughts: cloud native

    What does it mean to be "cloud native"?

  344. Becoming an SAP Mentor Alumnus

  345. Thoughts on what's next for the SAP Community

  346. Apps Script - Privacy Policy

  347. Coming Home

  348. Discovering SCP Workflow

  349. Consumption-based SCP Pricing - Initial Thoughts

  350. Things I do to make my work life better

    Notes on how I try to approach practical aspects of my working life.

  351. SCP Business Rules Roadmap - 5 Observations

  352. SAP Cloud Platform Pricing

  353. Fix Blink

  354. Functional programming - baby steps

  355. Meeting Request Details

    More on courtesy and respect at work.

  356. Google Cloud Functions + Sheets + Apps Script + Actions On Google = WIN

  357. YABP - Yet Another Blogging Platform

  358. Best practices for mobile reporting

    To put together a mobile reporting solution, there's a lot to consider. In this post, we show you how to start off and remain on the right track to deliver a solution that really works for your users.

  359. The beauty of recursion and list machinery

  360. Reaching out to the new new kingmakers

  361. Debugging SAP Fiori apps - the fifth "D"

    It's all very well designing and building a delightful Fiori app. But what about the long tail - supporting that app through its lifetime, with fixes and changes that come along? There's a fifth "D" to the SAP Fiori development mantra, and that "D" is for "Debugging".

  362. Excluding with vim's wildignore

  363. Better collaboration through chemistry

  364. F3C Parts 9 and 10 - Functors

  365. F3C Part 8 - Promises

  366. F3C Part 7 - Recursion

  367. F3C Part 6 - Currying

  368. F3C - A FunFunFunction Companion Series

  369. F3C Part 5 - Closures

  370. F3C Part 4 - Reduce advanced

  371. F3C Part 3 - Reduce basics

  372. F3C Part 2 - Map

  373. F3C Part 1 - Higher-order functions

  374. The Fiori revolution - disruption at its best

  375. Community and Collaboration at SAP Inside Track Manchester

  376. Understanding the SAP Fiori Cloud Edition

  377. Top 10 misconceptions about Fiori

  378. FOFP 2.1 A look at filter

  379. FOFP Fundamentals of functional programming

  380. FOFP 1.5 Creating functions

  381. FOFP 1.4 A different approach with map

  382. FOFP 1.3 Some basic list processing

  383. FOFP 1.2 Trying things out

  384. FOFP 1.1 Introduction

  385. Language minutiae and learning to SWIM

  386. Finding a wonderland number

  387. Enlightenment in action

    On my journey to learn Clojure by solving 4Clojure challenges.

  388. "fiux2" Week 7 - Build Your Own SAP Fiori App

  389. 4Clojure Puzzle 66

  390. "fiux2" Week 6 - Extend SAP Fiori Apps

  391. "fiux2" Week 5 - Enhance an SAP Fiori Master Detail App

  392. The SAP Fiori Launchpad as a dashboard for my running KPIs

  393. Quick HCP title hack with the Navigation Manager

  394. "fiux2" Week 4 - Create Your First SAP Fiori App

  395. "fiux2" Week 3 - Get Ready to Create Your First App

  396. The evolution of the SAP community

  397. "fiux2" Week 2 - Design Your First SAP Fiori App

  398. "fiux2" Week 1 - Get to know Fiori UX

  399. "fiux2" - The openSAP Fiori Course - 2016 Edition

    An overview of the blog posts in the series about the 2016 openSAP course on Fiori.

  400. Building blocks of language, structure and thought

    As I travel on my path to perhaps what I deem as some sort of enlightenment, back in time via Clojure to one of the great ancestors of language, structure and computational thought (Lisp), I continue to come across a simple theme.

  401. The future of app building on the SAP HANA Cloud Platform

  402. Digital devolution in local authorities - putting people first

    In a couple of weeks' time, Bluefin Solutions is running a one day event on delivering digital devolution in local authorities. If you look closely there's a clear user-centric pattern that is emerging.

  403. Impromptu JS session at UKISUG15

  404. Coffee-time JavaScript recreation

    In preparing for co-presenting a hands-on session at SAP TechEd EMEA this coming week in Barcelona, I came across a chunk of JavaScript. In this post I try to improve it with robustness and immutability in mind.

  405. Speaking at SAP TechEd EMEA 2015

  406. Celebrating the engine of the Fiori revolution - the 30UI5 ebook

  407. Breathing through the reduction meditation

    In this post I look even more closely at a simple Clojure implementation of a reduce function.

  408. My journey to Clojure

    I'm learning Clojure. Slowly, but hopefully surely.

  409. A meditation on reduction

    Looking at a version of the reduce function written in Clojure, from Do Things: a Clojure Crash Course.

  410. Give me a browser, and I'll give you the world

  411. The advent of UI5 1.30 and what it means for us

  412. Cookies

  413. Building blocks for the future normal

  414. The origin of becoming a fundamental enabler for Fiori

    30 Days of UI5 - day 30 by Sam Yen.

  415. Revisiting the XML Model

    30 Days of UI5 - day 29 by DJ Adams.

  416. UI5 Version Info

    30 Days of UI5 - day 28 by DJ Adams.

  417. A non-techie PM's view of UI5

    30 Days of UI5 - day 27 by Jon Gregory.

  418. UI5 - looking back and forward

    30 Days of UI5 - day 26 by DJ Adams.

  419. The experimental Client operation mode

    30 Days of UI5 - day 25 by DJ Adams.

  420. An introduction to sap.ui.define

    30 Days of UI5 - day 24 by DJ Adams.

  421. Taming the Resource Model Files

    30 Days of UI5 - day 23 by Nathan Adams.

  422. Merging lists with UI5

    30 Days of UI5 - day 22 by Chris Choy.

  423. Spreading the UI5 Message

    30 Days of UI5 - day 21 by DJ Adams.

  424. Fragments and Minimum Viable Code

    30 Days of UI5 - day 20 by DJ Adams.

  425. A Short UI5 Debugging Journey

    30 Days of UI5 - day 19 by DJ Adams.

  426. MVC - Model View Controller, Minimum Viable Code

    30 Days of UI5 - day 18 by DJ Adams.

  427. UI5 and Fiori - The Story of Open and Free

    30 Days of UI5 - day 17 by John Appleby.

  428. UI5 and Coding Standards

    30 Days of UI5 - day 16 by DJ Adams.

  429. The UI5 Support Tool - Help Yourself!

    30 Days of UI5 - day 15 by DJ Adams.

  430. Speeding up your UI5 app with a Component preload file

    30 Days of UI5 - day 14 by John Murray.

  431. Multi language support out of the box - UI5's pedigree

    30 Days of UI5 - day 13 by DJ Adams.

  432. Base Classes in UI5

    30 Days of UI5 - day 12 by Thilo Seidel.

  433. Handling Dates with the Date Picker

    30 Days of UI5 - day 10 by James Hale.

  434. Bootstrapping UI5 Locally and in the Cloud

    30 Days of UI5 - day 9 by DJ Adams.

  435. User Notifications with the Message Popover

    30 Days of UI5 - day 8 by Sean Campbell.

  436. The App Descriptor

    30 Days of UI5 - day 6 by Thilo Seidel.

  437. OpenUI5 Walkthrough

    30 Days of UI5 - day 5 by DJ Adams.

  438. Creating Native Applications with UI5

    30 Days of UI5 - day 4 by John Murray.

  439. Semantic Pages

    30 Days of UI5 - day 3 by DJ Adams.

  440. Expression Binding

    30 Days of UI5 - day 2 by DJ Adams.

  441. Welcome to 30 Days of UI5!

    30 Days of UI5 - overview and day 1 by DJ Adams.

  442. Lightweight notifications with the Message Strip

    30 Days of UI5 - day 11 by DJ Adams.

  443. JavaScript Do's and Don'ts for UI5

    30 Days of UI5 - day 7 by DJ Adams.

  444. Email discipline

    Email is asynchronous, and that's a good thing.

  445. JSON List Binding and maps

  446. openSAP Experiences

  447. This Week in Fiori (2015-16)

  448. This Week in Fiori (2015-15)

  449. This Week in Fiori (2015-14)

  450. This Week in Fiori (2015-13)

  451. This Week in Fiori (2015-12)

  452. Making Information More Useful

  453. The maker's schedule, restraint and flow

    My thoughts on schedules and saying 'no'.

  454. This Week In Fiori (2015-11)

  455. Why I'm Staying Close to UI5

  456. Can I build a Fiori app? Yes you can!

  457. 10 tips to get you started on your Fiori development journey

  458. UI5 features for building responsive apps

  459. Speaking at Mastering SAP Technologies

    I'm travelling to South Africa to give a keynote, a technical session and a hands-on workshop, on Fiori and UI5 topics.

  460. Fiori & UI5 Related Videos

  461. Morning Fiori Fix

  462. OpenUI5 at FOSDEM 2015

  463. Atom, Snippets, Tabs and CSON parsing

  464. Fiori App Data into a Spreadsheet? Challenge Accepted!

  465. Running: 2014 in review, and some Clojure

  466. DNA is still in our DNA

  467. The inaugural SAP architect and developer summit

  468. Creation & Reload of UI5 UIs in the Chrome Developer Console

  469. Addressing emails

    Showing respect and courtesy by appropriate use of TO and CC.

  470. This Week in Fiori (2014-43)

  471. This Week in Fiori (2014-42)

  472. Speaking at the SAP Architect & Developer Summit

  473. This Week in Fiori (2014-40)

  474. This Week in Fiori (2014-39)

  475. This Week in Fiori (2014-38)

  476. Scratching an itch - UI5 Icon Finder

  477. This Week in Fiori (2014-36)

  478. This Week in Fiori (2014-35)

  479. This Week in Fiori (2014-34)

  480. This Week in Fiori (2014-33)

  481. This Week in Fiori (2014-32)

  482. This Week in Fiori (2014-31)

  483. This Week in Fiori (2014-30)

  484. Keyed vs Non-Keyed Root JSON Elements & UI5 Binding

  485. OpenUI5 Tutorial at OSCON 2014

  486. This Week in Fiori (2014-29)

  487. This Week in Fiori (2014-28)

  488. Webinar and more - Understanding SAP Fiori

  489. This Week in Fiori (2014-27)

  490. Understanding SAP Fiori Webinar - The Director's Cut

  491. SAP Developer Advisory Board - Your Input!

  492. SAP Mentor Monday on UI5 - Links

  493. Paying IT Forward Links

  494. OpenUI5 CodeTalk Links

  495. Small steps - OpenUI5 toolkit now in jsbin.com

  496. Reaching Out

  497. Mocking up the Payroll Control Center Fiori App

  498. The essentials - SAPUI5, OpenUI5 and Fiori

  499. Public SAP Mentor Monday 24 Mar 2014 - UI5 with Andreas Kunz

  500. M is for 'responsive'

  501. Alt-K: Reading Notes

  502. XML Views and Resource Bundle Declarations

  503. UI5 XML Views - Another Example

  504. Help us to help you - share your code

  505. Meta education - or teaching the teachers

  506. Quick hack: Calendar Inviter

  507. Mobile Dev Course W3U3 Rewrite - XML Views - An Analysis

  508. Custom Sorting and Grouping

  509. SAP UK & Ireland User Group Conference - Demo Jam!

  510. CodeTalk - SAPUI5 and SAP Fiori

  511. Mobile Dev Course W3U3 Rewrite - XML Views - An Intro

  512. Mobile Dev Course W3U3 Rewrite - ProductList, ProductDetail and SupplierDetail

  513. Mobile Dev Course W3U3 Rewrite - App and Login

  514. Mobile Dev Course W3U3 Rewrite - Index and Structure

  515. Mobile Dev Course W3U3 Rewrite - Intro

  516. Building SAP Fiori-like UIs with SAPUI5

  517. SheetAsJSON - Google Spreadsheet Data as JSON

  518. An Amazing 36 Hours at SAP Labs Israel

  519. Engaging the Next Generation

  520. #YRS2013 Hacks on Github

  521. Happy Birthday SCN, Old Friend

  522. Simple SAPUI5 Chrome icon for lazy developers like me

  523. CodeClub Thoughts

  524. Review of Dark Reserve Nr 3 from Lovibonds

  525. Functional Python - Itertools Exploration

  526. Our computational future

  527. 30 Day Challenge: No Beer!

  528. Public Github repo sapui5bin available

  529. Jump to Shell Workset Item from URL

  530. 30 Days Challenges

  531. Review of Fourth Dementia Old Ale from Kuhnhenn Brewing Company

  532. CodeClub and becoming a STEM Ambassador

  533. The Silent Club and Recharging Alone

  534. OData Everywhere

    Musings on the Open Data Protocol, SAP NetWeaver Gateway, and the importance of both.

  535. Blog It Forward - DJ Adams

  536. Review of Norwegian Wood from Haandbryggeriet

  537. Recent Interests

  538. Serial interest in the Raspberry Pi

  539. SAPUI5 - the future direction of SAP UI development?

  540. Two tools for Gateway trial host nplhost

  541. On Enterprise Geeks Podcast

  542. Firebase and SAPUI5

  543. The Developer Connection: Connect Like Never Before

  544. SAPUI5 Powered SCN Forum Finder

  545. New Omniversity Course Video!

  546. Review of Red Rice Ale from Hitachino Nest

  547. SAPUI5 says "Hello OData" to NetWeaver Gateway

  548. Making OData from SAP accessible with the ICM's help

  549. SAP ICF course marketing: video!

  550. On the Information Diet

  551. The Developer Renaissance

  552. HTML5 @ SAP

  553. SAP Developer Center

  554. Movember - please donate!

  555. Web Programming with SAP's ICF: new course dates

  556. Moving on ... to Bluefin Solutions

  557. Review of Milk Stout from Left Handed Brewing Co

  558. Reading List Mark 2 - Part 5

  559. Reading List Mark 2 - Part 4

  560. Reading List Mark 2 - Part 3

  561. Reading List Mark 2 - Part 2

  562. Reading List Mark 2 - Part 1

  563. Automated email-to-task mechanism with Google Apps Script

  564. Ad-hoc Data Workflows with Google Apps Script

  565. Stand steady on the shoulders of giants

  566. Review of Torpedo from Sierra Nevada

  567. Beer review: Dark Star's Saison

  568. SOA scaffolding and development architects

  569. Review of Saison from Dark Star

  570. Danger! Graduate Conveyor-belt!

  571. JSON and Other Animals - talk at Manchester jQuery Meetup

  572. Gmail Contextual Gadgets - talk at Manchester GTUG

  573. My browser A-Z

  574. The past and future of SAP integration: guest Bluefin blog post

    I wrote a guest blog post on the Bluefin Solutions website, about the Project Gateway.

  575. Project Gateway. A call to arms. Or at least to data.

    This was a guest blog post on Bluefin Solutions website which I wrote to herald a major turning point in SAP software's integration trajectory.

  576. Hacking the Delicious extension for Chrome

  577. Google Visualization API: Manchester GTUG Talk

  578. Not your father's SAP

    Some thoughts following the Innovation Weekend 2010 at SAP.

  579. Getting started with Gmail Contextual Gadgets

  580. Scratching an itch - Magic The Gathering card info

  581. REpresentational State Transfer (REST) and SAP

  582. Tech skills chat with JonERP - a follow-on story

    How I was inspired to read and learn more.

  583. REST orientation - Controlling access to resources

    Auth with respect to the alternative dispatcher layer in ABAP.

  584. A new REST handler / dispatcher for the ICF

    One of the best underlying mechanisms to be introduced into the Basis / NetWeaver stack in the past few years is the Internet Communication Framework (ICF), which is a collection of configuration, interfaces, classes and a core set of processes that allow us to build HTTP applications directly inside SAP.

  585. Mainframes and the cloud - everything old is new again

  586. SAP and Google Wave - Conversation Augmentation

  587. Book review - SAP Business ONE Implementation

  588. One way of dealing with blogtheft from SDN - through images

  589. Dealing with "#blogtheft" from SAP's Developer Network

  590. Command lines of the future, and simplicity of integration

  591. Coffeeshop screencast: HTTP conneg, resource representations and JSON

  592. 2nd coffeeshop REST/HTTP screencast

  593. Google Wave, XMPP and complexity

  594. Webhooks postbin example for Coffeeshop

  595. First coffeeshop demo screencast

  596. 'Coffeeshop' - lightweight HTTP-based pubsub

    About a lightweight, REST-orientated HTTP-based publish/subscribe implementation that I’ve been working on for the last few days.

  597. Information vs Behaviour

    Architectures, axioms and ROA vs SOA.

  598. A return to the SDN community, and a touch of Javascript

  599. Tarpipe REST connector in 5 minutes

  600. Twitter's success

    Thoughts on messaging, microblogging, and Twitter's success.

  601. Analysing CV searches with Delicious

  602. SAP everywhere!

  603. An HTTP connector for Tarpipe: 'tarbridge'

  604. tarpipe.com - Programming 2.0?

  605. Old feed URLs fixed with a bit of mod_rewrite voodoo

  606. Back from Real Life

    I’m back online, after an eXtended Away in Real Life.

  607. OssNoteFix script updated for Greasemonkey 0.6.4 and Firefox 1.5

  608. Java and Gosling's FUD - madness or desperation?

  609. SAP and Open Source: the debate continues

  610. Acorn Atom and my start in computing

  611. SAP and Open Source - an analysis and letter to SAP and Shai

  612. MoonOverFailsworth

  613. 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.

  614. 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.

  615. The SAP developer community 10 years ago

    On the early years of the SAP community online.

  616. Turnkey MVS 3.8J on Hercules S/370 Screenshot

    Big iron and retrocomputing.

  617. SAP: temporary loss of touch with reality?

  618. Hacking the SAP service portal to make OSS notes better

    Deploying Greasemonkey to fix a long standing issue with OSS Notes at SAP.

  619. 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.

  620. Europe, SAP, and two-way conferences

    It’s the end of the week that saw the SDN Meets Labs down in Walldorf.

  621. 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?

  622. 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.

  623. SDN Meets Labs gets underway at SAP University

    The SDN Meets Labs at Walldorf-Rot gets underway at Walldorf-Rot.

  624. Muscle cars

  625. An overcorrection too far?

    Norman Walsh gives up ‘wrestling his way through the arcana of WSDL’.

  626. Postcode bookmarklet

    We’ve been spending time recently looking at property in the North West.

  627. Weblog happy in new home - note new URLs!

    Cool URIs don't change ... much.

  628. Ralphm on sjabber

    Digging into sjabber's source.

  629. Honest application requirements

    An unusual "user story".

  630. 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.

  631. A fresh start

    The perils and joys of self-hosting at a colo.

  632. (Mini) Installfest in the SDN clubhouse at TechEd

  633. Photos from SAP TechEd Munich

    The third weblog in two days … what’s going on? Well, Mark is a hard taskmaster, obviously 🙂

  634. 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.

  635. 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).

  636. 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).

  637. 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.

  638. The Curious Incident Of The Dog In The Night-Time

    I bought three books at Manchester airport yesterday.

  639. A little taste of SAP at EuroFoo

  640. 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.

  641. TechEd talk winners - congrats

    Congratulations to the three TechEd talk winners Luke, Jayakumar and Andreas.

  642. 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.

  643. 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 :-)

  644. NW4, OSS1 and logon group selection for OSS

    Digging into logon group selection.

  645. SAP at JAX 2004

    A brief report on JAX 2004.

  646. WAS 6.40 testdrive for Linux is here!

    Phew. What a day yesterday at the world’s biggest IT fair.

  647. Successful installation of EP plugin into testdrive WAS 6.10 system

    I spent most of yesterday in the kitchen, my favourite place.

  648. Tim O'Reilly and the three 'C's

    Well, I made it to FOSDEM this morning with time to spare.

  649. FOSDEM, and small OSS Notes Browser Hack

    Tomorrow morning I'm off to Brussels for FOSDEM - the Free and Open Source Software Developers' Meeting.

  650. FOSDEM and Brussels, here I come!

    I’ve been umming and arring over conferences this year.

  651. 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".

  652. Hello, 2004

    2004 is here. Neues Spiel, neues Glück.

  653. SAP TechEd - Collaborative notes

    I’m off to SAP TechEd this week in Basel.

  654. 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.

  655. Plums and the antithesis of technology

    I haven’t been online much recently.

  656. Improving the OSS note experience

    How can we make this key service less unpleasant to use?

  657. SAP InfoTag on Web Application Server

    SAP are running an Infotag on the Web Application Server in early September.

  658. SAP talk at OSCON, and RSS

    Reflecting on our talk at OSCON about extending SAP with open source tools and protocols.

  659. Google Pocket Guide out now

    My new book for O'Reilly is out.

  660. Another great OSCON

    Reflecting on another Open Source Convention.

  661. Thanks, Randal

    Relaxing in an 80's arcade at OSCON.

  662. Dashboard, a compelling articulation for realtime contextual information

    Miguel de Icaza and Nat Friedman were keynoting at OSCON this morning.

  663. SAP and Open Source BOF at OSCON

    Merging the enterprise and open source worlds over a beer.

  664. 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.

  665. 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).

  666. 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.

  667. SAP stuff at OSCON

    My partner-in-(code)-crime Piers Harding and I are speaking at this year’s OSCON (Open Source Convention).

  668. 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.

  669. Speaking at OSCON 2003

    Always an honour and a privilege.

  670. "A brilliant literary mash-up"...

    The fusion of Hogwarts and Molesworth.

  671. Weblogs and Wikis - Blurring the Boundaries

    More on the crossover between blogging and wikis.

  672. New Blosxom plugin 'submission'

    A generic blogging mechanism for accepting content POSTed to it.

  673. 'Conneg' and the duality of weblogs

    Philosophy triggered by the lowly but essential connection negotiation aspect of HTTP.

  674. Tiki parser for MoinMoin

    Embedding the Tiki language into the MoinMoin wiki.

  675. Blosxom 2.0 Beta1

    Looking at the latest release of the blogging software that I use.

  676. RSS aggregators and user-agent information for Blagg

    Tool reuse a la Unix philosophy, and more on building out the future in tiny steps.

  677. Tinkering with RSS and NNTP

    The beauty of open standards is that they can be adopted, remixed and combined.

  678. Your wishlist in 'consumable' XML

    Introducing a new experimental Perl module.

  679. Asleep in 2002

    Amazon does seem to have XML based data available after all.

  680. The fragility of retro-engineering

    Having to modify my allconsuming scripts because of differences between amazon.co.uk and amazon.com data.

  681. Transferring my Amazon wishlist to AllConsuming.net

    Scripting to the rescue, as always.

  682. Presentations, Wikis, and Site Navigation

    Why build something when there's already a standard to embrace?

  683. Content-Type and Blosxom's RSS

    The perils of unescaped content in feeds.

  684. Wisdom, diplomacy, or serendipity?

    On the architectural style(s) of allcosuming.net's API.

  685. The universal canvas and RSS apps

    Thoughts on the applicability and utility of the format.

  686. The disruptive engineering spectrum, and "booktalk", an AllConsuming app

    Creating an experimental service based on existing mechanisms.

  687. Creating the "Entry index"

    More on building out how my blog looks.

  688. A new year and a new approach

    Taking a fresh, less cluttered approach to the website and blog.

  689. Startups and software patents

    Dave W points to Strangeberry, a startup that are doing a Java rendition of Rendevous.

  690. 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.

  691. "Assaults on the Internet's end-to-end-architecture"

    What can and should we do about spam?

  692. Ben's RSS book

    A new book on RSS from Ben Hammersley.

  693. RESTifying RT

    Some notes on providing a RESTful API for Request Tracker.

  694. 'Practical RDF' book up for public review

    Shelley Powers' new book.

  695. 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.

  696. 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.

  697. The case of the missing rdf:Description

  698. 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.

  699. XML Scripting, data manipulation, and RDF

    Can there be native support for XML as a data type?

  700. Moving from description to content:encoded in my RSS 1.0 feed

    Using the mod_content module of RSS 1.0.

  701. From RSS 0.91 to 1.0

    Incantations to progress to RSS 1.0.

  702. The RDF in RSS

    Digging into the real truth about the RDF in RSS.

  703. Moving between Mozilla tabs with the keyboard

    An answer to my question on keyboard controllable Mozilal features.

  704. Mozilla "Bookmark This Group of Tabs"

    Improving the browsing experience one feature at a time.

  705. REST, Google, and idempotency

  706. Cacheing on XSLT service

    More on the Mozilla sidebar experiments.

  707. Sidebars, Mozilla, RSS: old and new

    RSS, RDF, XUL, XSLT and more.

  708. You know you're getting old ...

    Looking back on this year's OSCON.

  709. The OS tables are turning...

    The origins of one of my favourite phrases "Does not work on Windows".

  710. Just finished re-reading: The Player Of Games (Iain M Banks)

    Some thoughts on The Culture.

  711. The mist is clearing ...

    On my continuing quest to grok REST.

  712. From REST to URIs, the Semantic Web, RDF, and FOAF

    Protocols and formats making up the semantic web.

  713. The 80/20 of HTTP

    Musing on how HTTP is used in the main.

  714. Reflecting weblogs.com 'ping's with SOAP, Jabber, and Pubsub

    More on building out the weblog-o-sphere infrastructure.

  715. Programming Jabber review

    A positive review of my O'Reilly book.

  716. Accessibility and Blosxom

    Extending my blogging engine for accessibility.

  717. A change and a rest

    Back recharged from holiday.

  718. 'Blosmail' - add and maintain your blog entries via email

    Experimenting with Blosxom editing via a different medium.

  719. 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.

  720. Small Blagg mod to enable custom formatting of 'blaggregated' items

    An unofficial modification to Blagg.

  721. Changed link tags

    More work on RSS, metadata and discovery.

  722. HTML link tag for Blogroll

    Social network scripting and blog rolls.

  723. Collapse/Expand feature for my Blaggregated display

    Extending Blagg and related features.

  724. Extreme Computing 2002

    Going to the Festival of Inappropriate Technology.

  725. 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 :-).

  726. HTML LINK to RSS source

    Continuing the build-out of weblog based mechanisms.

  727. Top tip

    On falling down the stairs.

  728. ETag-enabled wget

    Adding ETag awareness to the venerable wget utility.

  729. More thoughts on HTTP, Email, and Jabber

    On HTTP headers and queueing architectures.

  730. "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.

  731. The Panopticon

    Extending the Panopticon experiment with XML messaging via Jabber.

  732. Jabberconf Blaggplug version 0+1b

    Updating the Jabber conference plugin for Blagg (the Blosxom RSS aggregator).

  733. (Jabber-)Browsing the Panopticon data

    More on extending the Panopticon experiment.

  734. Amphetadesk Links

    More on feeds, subscriptions and aggregations.

  735. Subscription from Radio

    Maintaining feed metadata.

  736. Mr 80-Percent

  737. Blaggplug: jabberconf

    Aggregation and publish/subscribe.

  738. YARM: Yet Another Referers Mechanism

    Referers, backlinks, and the Unix command line.

  739. One small step ... one giant leap ...

    Calling remote functions over Jabber.

  740. Calendar code

    The calendar script for my sidebar.

  741. Bring on the SSI

    Server Side Includes and Blosxom.

  742. Blosxom vs the world

    The choice and decision to use specific blogging software.

  743. Blog software review

    More on blogging software.

  744. community(disagreement + debate) = inspiration

    The debate between SOAP and REST.

  745. "Blog Locally, Publish Globally"

    On the enduring pattern of local control but global reach.

  746. Other side of the coin: 5335 now resurrected

    RSS, Radio Userland, and redirectors.

  747. Original Peerkat-based weblog back up for reference

    More on Peerkat, a data syndication aggregator.

  748. Coffee Mugs and weblog interop

    Experimenting with Peerkat, feeds and Blosxom.

  749. Cross pollination and blossoming of scripts

    On the growing Blosxom ecosphere.

  750. My bookmarks

    Scripting with bookmarks.

  751. Off with the (relatively) old, on with the new

    More on Blosxom, and a fix to our colocated server.

  752. Interview on jabber.org

    A transcript of my interview on jabber.org.

  753. Hello Blosxom

    A move to the Blosxom blogging software.

  754. Bot window as command line of the future

    Musing on doing more from within the chatbot prompt.

  755. FOSDEM interview

    This post is a transcript of an interview by Raphaël Bauduin for FOSDEM.

  756. 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.