Tim’s Weblog Tim's Weblog
Tim Strehle’s links and thoughts on Web apps, managing software development and Digital Asset Management, since 2002.
2019-06-10

First steps: A Symfony 4 PHP app in Docker

I’m currently learning Docker, and finding out how to develop a (new) Symfony 4 (PHP 7) application locally on my Mac and run it within a Docker container, instead of hosting it in a Linux VM in VMware Fusion as I used to do. Docker Desktop and the PhpStorm IDE are already installed.

Docker setup

I want to use official, current Docker images from the Docker Hub. A colleague convinced me (better scalability?) to use Nginx instead of my trusty old Apache Web server. So I need the nginx:latest and php:fpm images.

While I can use the Nginx image as-is, I need to create my own image on top of the PHP standard one since I will want to add PHP extensions as needed, and to run Composer in the container. I ended up with this Dockerfile:

Read the full article…

Mon, 10 Jun 2019 19:09:00 +0000
2019-03-19

The story of my favorite bug

In the fifteenth year of my software developer career, I encountered a remarkable bug that would “entertain” me for weeks.

“Garbage in, garbage out”?

It started off rather innocuously: At a recently-installed customer site, I noticed that a few XML files sent from the editorial system weren’t imported correctly into our DAM system. The files were imported, but parts of the data looked bad.

My first assumption was that the editorial system had generated faulty files – “garbage in, garbage out.” But they seemed no different from successfully-imported files, and when I reimported the files that originally failed, the problem was gone.

I had no idea where to look and decided to live with the problem for a while. Each day, I checked for failed imports and manually triggered a reimport. But sooner or later I would have to find and fix the cause.

Read the full article…

Tue, 19 Mar 2019 21:45:00 +0000
2019-03-06

Using XML to copy data from PostgreSQL to MySQL

Today, I needed to copy a few tables from a PostgreSQL database into a MySQL database. I wanted to use XML files to exchange the data so I could inspect and validate it easily.

I expected this to be a lot of work (including XSLT magic), but it was surprisingly easy: It turns out that PostgreSQL’s default XML output format is supported by MySQL out of the box!

Read the full article…

Wed, 06 Mar 2019 21:56:00 +0000
2019-02-17

Clean Data is more important than Clean Code

In my experience, many software developers don’t care much about data modeling. They seem to prioritize clean code, a good technology stack and a good user interface over getting the data model right.

All of these are important, but the data model is the foundation:

You can refactor source code anytime, going from unclean to clean and back. You can even throw your UI and all of your code away, and replace your entire technology stack.

The only thing that will live on is the data you migrate into the new system – and most faults in your data model are impossible or impractical to fix. (Believe me; I made many wrong choices as a developer, and my data modeling mistakes had much more long-term impact than my bad coding.)

Data is forever:

Data you did not capture because there was no place for it in your data model will be lost forever.

Data with different semantics (like a photo’s “date taken” vs “date imported”) that you had to squeeze into the same column because your data model did not let you differentiate will be indistinguishable forever.

Data with different data types (is it plain text or HTML?) or encoding (UTF-8 or not?) that went into your database without any hint because there was no attribute for it in your data model (and no normalization step) will be messed up (and potentially insecure) forever.

First, get your data model right.

Sun, 17 Feb 2019 20:18:00 +0000
2018-09-01

Playing with the Camunda workflow engine (and PHP)

A generic workflow engine, configured via a graphical diagram editor on top of an XML syntax – that’s what I tried and failed to develop more than 15 years ago. I did help build three generations of a simple “workflow” component integrated in our DAM product to drive asset ingestion and export, kept reading (see The State of Workflow and Decoupling Application Logic) and writing (Workflow awareness of DAM systems) about workflows – and hoping that one day, a powerful and beautiful workflow management system would make my work easier.

That’s why I was thrilled to discover Camunda, a workflow engine with an open source, free community edition. It is standards-based, written in Java, and comes with a Web UI, REST API and graphical process diagram modeler. Here’s a screenshot of Camunda Modeler:

Read the full article…

Sat, 01 Sep 2018 22:55:00 +0000
2018-06-14

What to put on a DAM Admin dashboard

Imagine you introduce a shiny new Digital Asset Management (DAM) system in your company which can feed all kinds of metrics into the brightly-colored Grafana dashboard hanging on your wall.

What would you track on that dashboard to help you manage, grow and troubleshoot your DAM system? Off of the top of my head, these metrics could be important:

Read the full article…

Thu, 14 Jun 2018 13:34:00 +0000
2018-05-31

The “X” in JSON stands for Extensibility

While I do use JSON, I still think XML is superior for some important use cases (long-lived data that may be exchanged with other systems). So here’s a quick “rant” – prompted by Dan Brickley’s response to Bob DuCharme’s Reification is a red herring – aimed at those (younger?) folks “dissing” XML :)

Over time, requirements and technology inevitably change. Extensibility (the “X” in XML) is the property that helps us adapt and keep pace, letting us evolve technology from simple to advanced without having to throw away and reimplement existing functionality. Here’s two reasons why XML is better at it than JSON:

From one to many

Cardinality (whether data has one or multiple values) is a common problem in data modeling: In a relational database, you need to change the schema (creating an additional table) to turn a single-valued into a multi-valued field. Programming languages distinguish between scalar values and arrays or collections.

Not so in XML; I can move effortlessly (on the producer side, at least) from single…

Read the full article…

Thu, 31 May 2018 12:22:00 +0000
2018-04-11

Digital Asset Management Reading List Feb./Mar. 2018

This time, I cover two months at once: Here’s the Digital Asset Management (DAM) articles from February and March 2018 which I recommend reading. I picked them from the constant stream of blog posts you can see float by on Planet DAM. For more curated DAM links, see the weekly Digital Asset Management.com Links and Tracy Wolfe’s 10 things on the 10th.

I’m happy to see people write and talk about my pet topic, DAM interoperability. On DAM News, Ralph Windsor publishes The Politics Of Implementing Digital Asset Supply Chains: Parking The Enterprise Service Bus. Emily Kolvitz and Brian Kavanaugh present DAM Integrations 101 (video, 30 minutes). Matthew Patulski announces the “Advancing Findability” DAM NY conference session hosted by the W3C DAM schema.org community group.

More thoughts on the future of DAM come from Ramon Forster – Dropbox Is More Than a DAM – and from Dave Jones: What is a Content Services Platform? Jarrod Gingras hosts a webinar on the 8 DAM trends to watch in 2018.

Read the full article…

Wed, 11 Apr 2018 20:34:00 +0000
2018-03-05

For better software, keep talking

In my experience, things diverge quickly in software development when people stop talking to each other. It’s costly if we notice too late that priorities or needs have changed, schedules slipped, or features evolved in the wrong direction.

Developers, users, managers (product, project, or people managers): Keep talking – all of the time – to each other about priorities, requirements, possible solutions, schedules. (Yes, I’m convinced that every developer needs to talk to users directly.)

Even after you’re “done”, keep talking about whether the software is actually helpful (“delivers value”) and what to improve next.

Developers, keep talking to your colleagues in “ops” and customer support to learn how the software is behaving in real life.

Keep talking to other developers and your boss – share what you’re working on, what you’ve learned, whether you’re stuck, ask for their feedback and ideas.

This was one of the main points of the agile movement: In “waterfall development”, there’s no communication between developers and users about changing requirements or intermediate results. It’s why the Agile Manifesto talks about “interactions”, “collaboration” and “face-to-face conversation”, and states that “business people and developers must work together daily throughout the project.” To keep talking is the purpose of Scrum ceremonies (daily scrum, review, retrospective).

If your (agile) process gets people talking, great. Whatever stops people from communicating – “that’s the product owner’s job, not mine”, “this doesn’t belong in the 'daily'”, “just look it up in Jira” – might be a sign that things could be better.

We’re in this together – it’s called a “company”, after all. Nobody has all of the information, and every perspective matters, so we need to work things out together. Again and again. Keep talking!

Mon, 05 Mar 2018 19:33:00 +0000
2018-02-06

Digital Asset Management Reading List Jan. 2018

Here’s the Digital Asset Management (DAM) articles from January 2018 which I recommend reading. I picked them from the constant stream of blog posts you can see float by on Planet DAM. For more curated DAM links, see the weekly Digital Asset Management.com Links and Tracy Wolfe’s 10 things on the 10th.

The big news in January was Mark Davey and company launching The Codified DAM Consultant™. He introduces it in an interview led by Nora Gehin, and positions it against vendor selection on the golf course or via G2 Crowd. I like the focus on the Ten Core Characteristics of a DAM system.

Congratulations to Ralph Windsor for becoming the new DAM Guru Program director! Ramon Forster introduces him in an open letter.

Read the full article…

Tue, 06 Feb 2018 21:05:00 +0000