yoy.be "Why-o-Why"

This one day at work

2017-09-07 11:00  fromthetrenches  computers weblog werk  [permalink]

Here's another nice story 'from the trenches'. Packaging stations use a barcode scanner to scan the barcode on the items that need packaging. We were able to buy a batch of really good barcode scanners, second hand, but newer and better than those that we had. A notice came in from an operator: "with this new scanner, we get the wrong packaging material proposal." The software we wrote for the packaging stations, would check the database for the item which is the best suitable packaging material to package it in. It's a fairly complicated bit of logic that used the order and product details, linked to the warehouse stockkeeping and knows about the several exceptions required by postal services of the different destination countries.

So I checked the configuration of this station first. Always try to reproduce first: the problem could go away by itself, or exist 'between the user and the keyboard', or worse only happen intermittent depending on something yet unknown... Sure enough, product '30cm wide' would get a packaging proposal of the '40cm box' which is incorrect since it fits the '30cm box'. Strange. The station had the 'require operator packaging material choice confirmation' flag set to 1, so I checked with 0 and sure enough, it proposed the '30cm box' (with on-screen display, without operator confirm, just as the flag says)...

So into the code. Hauling the order-data and product-data from the live DB into the dev DB (I still thank the day I thought of this tool to reliably transport a single order between DB's). Opening the source-code for the packaging software, starting the debugger while processing the order, and... nothing. Nicely proposing the '30cm box' every time, with any permutation of the different flags (and there are a few, so a lot of combinations...)

Strange. Very strange. Going over things again and again, checking with other orders and other products, nothing. I declared the issue 'non-reproducable' an flagged it 'need more feedback', not really knowing of any would come from anywhere.

A short while later, a new notice from the same station: "since your last intervention, scanned codes concatenate". What, huh? I probably forgot to switch the 'require operator packaging material choice confirmation' back to 1, but how could that cause codes to concatenate? I went to have a look, and indeed, when a barcode is scanned (the device emulates keyboard signals for the digits and a press of 'Enter') the input-box would select-all, so the number is displayed, and would get overwritten by the next input. This station didn't. The caret was behind the numbers, and the next scan would indeed concatenate the next code into the input field.

Strange. Very strange. Into to the code first: there's a SelectAll call, but what could be wrong with that? And how to reproduce? What I did was write a small tool that displayed the exact incoming data from the keyboard, since it's apparently all about this scanner. Sure enough, the input was: a series of digits (those from the barcode), an 'Enter', and 'Arrow Down'. A-ha! These were second hand scanners, remember? God knows what these scanners were used for before, but if having the scanner send an extra 'arrow down' after each code, is the kludge it takes to solve some mystery problem in software out of your control, than that is what a fellow support engineer has to do... Got to have some sympathy for that. And the '40cm box' was indeed just below the '30cm box' in the list, so the arrow down would land in the packaging material selection dialog, causing the initial issue.

Download the manual for the scanners, scan the 'reset all suffixes to "CR"' configuration code, done.

(Update: got some nice comments on reddit)

HTML: label, no more "for" for me!

2017-04-13 22:44  htmllabelfor  coding internet werk  [permalink]

If only I had known sooner! I forgot where I picked this up, but apparently if you put <label> around an <input>, typically of type checkbox or radio, browsers automatically know the label is for that control. Before, I would write my <input id="x"> first, then a <label for="x"> after. To keep code neat, I would put it on a separate line, but the EOL inbetween would not be clickable to actuate the control. This is a really minor issue, but still. Now that I know you can just write this:

<label><input type="checkbox" name="Toggle1" value="1" checked="1" /> Toggle1: clicking text after a checkbox should toggle the checkbox!</label>

Because, there are two kinds of people: those that click the box to switch a checkbox, and those that click the text right of the checbox. You might not even know that you do, but you do don't you. If you're of the latter type, it's just one of those minor frustrations, that a click on the text-label sometimes doesn't do what you expect, and you have to:

  1. first pick up that's this that's going on, possible because you've selected a bit of the text
  2. align your eyes to the checkbox
  3. align the mouse-cursor over the checkbox
  4. click the checkbox, confirming the previous one or more click are actually wasted

But there you have it. Heaven has great UX. Here we need to make do with what we get. (And need to make sure it's the way we like it for those bits that we have control over.)


2017-03-24 21:57  boxer  delphi werk freeware  [permalink]

Drats. I thought I'll try something like Clover does, start with SetParent on any top-level window you could find with GetAncestor(GetForegroundWindow,GA_ROOT) and see what it gives. There's this old default MDI child mechanic that starts working, so I thought this might just work. But it looks like over at Microsoft the Windows 10 team decided to cut some corners. The theming doesn't do it's modern stuff and reverts to Vista-style borders, and the newfangled calulator, for example, won't even take the SetParent nicely any more. Oh well. For the time I'm still on Windows 7 at work, I guess it'll come in handy there for the time being. Probably in about a week I'll know if this could work where other desktop-management tools failed or were too cumbersome or too invasive...

How does it work? Boxer starts with an empty window, and will show an icon over the top-right corner of other windows. Click that to 'box' the window. The top bar shows a tab for each boxed window. Right-click to open a menu with options to unbox or close, and drag to reorder. Multiple instances play nice with each-other and show 'boxing handles'  next to eachother, the second instance labeled "A", the third "B", etc. To disable the boxing handles, right-click on the top bar to the right of all tabs.

Anyway, if you feel like having a try if you can do better, have a look at the code here. Download a binary here: Boxer.zip (209KB)

A story about two task-keeping-applications.

2017-03-18 17:22  s2tka  coding delphi werk freeware  [permalink]

Let me tell you a story of two task-keeping-applications. Once there was a team that was struggling to keep track of the work it was doing, had done, and still had to do. It was frustrating to work on the team, hard to schedule things, almost impossible to estimate when things where going to get done. And since clients are what they are, changing requirements and additional requests would cause much more disruption than expected of a team that calmly and firmly is determined to deliver the best of market solution.

An internal brainstorming-session about what to do about it, ended in two opposing visions about what decent issue-tracking should be about, and how a system that (co-!)operates with the team members should be structured internally, should behave, and which duties it should perform either by itself, or by effect of using its rules and restrictions correctly as designed.

In an attempt to get to the best solution, two teams were formed to develop each a project based on one of the two views. An evaluation would follow determining a winner, or if would it be possible to synergize the best parts of both into a single system.

A side note: from a managerial point of view this is a very tough decision. Allocating a lot of resources to work on internal structure, takes resources away of the work that brings in revenue, and such undertakings typically risk getting frivolous or spinning out of control. But I guess it's normal that all stop rowing to help keep the boat from sinking. So, apart from being intrinsically aware of the exceptionality of this opportunity, coordinators were given instructions to keep to a strict schedule in these projects and a determined focus on delivering a workable proof-of-concept quick. Sounds like a good work-ethic to apply generally, if you ask me.

A few weeks later progress was made, and the prototypes were already being used to keep track of the issues of these new task-keeping-applications and other projects. The main difference between design visions became apparent soon enough.

One application centered around the list of work items. Care was taken the entry form was extensive enough to have fields for all of the details about a work item, its categorization, its relation to the project, an outline of the projected outcome. An overview would show the current list, possibly filtered for those items assigned to you.

The other application was centered around getting information out of the system, especially structure and relation between items. Users would enter small specific reports, and add them to the best suitable node in a tree-structure, optionally marking relations with other items over branches. The overview showed an expandable structure starting at the root items. It also could have a filter applied, but would potentially show you an entirely different structure of the same data, when using a different relation type.

Having two working prototypes, attention gradually reverted back to the serious work and some of the frustrations of before were abated. After a few months an evaluation was undertaken.

One application had rendered itself useless. The first weeks of usage, a lot of entry happened, but without consensus about categorization, the list was enormous without a clear way of grouping relevant items. Duplicate entries and ambiguous task-descriptions were unresolved, causing confusion.

The other application was doing better. It needed work, but offered a good view of what had to get done.

Enough about the story. Reality, of course, is much more bleak. As no sane manager would make such a shift in resources of a troubled organization, the 'two teams' actually stand for the existing team using an off-the-shelf something badly administered on one side, and on the other side, well, just me, toiling on something potentially better, in my off-time.

I started — like many — with a plain text-file, then a spreadsheet. Then I took the step to design a database for it, but wanted something to do entry and retrieval with roughly the same ease-of-use that a spreadsheet would offer. Working with tree-structures for some other projects, I wanted a single structure to serve as the basis to store data in. Specifically with projects and tasks — as projects tend to have sub-projects, and tasks split into sub-tasks — using branches of a tree would enable to keep this distinction conveniently vague. If you add representation for entities like users and clients into this tree-structure, and relation between nodes over branches, you've got a richness to model much more of the world, and keep track of its changes, past and future.

From there it grew slowly, over years, into what it is now: tx. First versions suffered a notoriously bad interface, but I hope that has improved. For long I was its only user, but some cooperation features have been added since. What's left for me is to keep improving tx where possible, and demonstrating it to people what it's about.

Though entry and structure is important, where a task-keeping-system can really shine is helping to keep an overview. A cleverly designed filter can limit your view to exactly these items that are relevant to you, but in tx you get the additional option of having these items display with exactly those sections of the tree-structure they have in common. Also, I personally feel the most important items on any list, as long as it may be, should be on top. So when tx displays a list of items, they get ordered using their weight, determined by a combination of factors such as task-type and current status. As a task progresses from an active state to a final state, it may move down the list or even fade from view into an archival state.

And there's much, much more I could talk about, but it's all created out of necessity and designed adhering closely to a central vision of what a task-keeping-system should be and what it should be doing for you in order to be able to depend on it.

In conclusion, and for those people that — like me — skip long stories to the last paragraph, it's so very important that information systems succeed at keeping an up-to-date model of reality, and offer you the freedom and easy to update it's view of the world. Especially so with task-keeping software you depend on to keep track of the progress you make with projects, and to help stay on top of what's important. All of that served as the basis for developing tx.

Consider Advice (restored)

2016-12-16 21:15  i1459bis  coding dagboek werk  [permalink]

Consider Advice

I just noticed these went missing since I converted this website to a 'static blog' kind of thing. So I delved up the old backups and fetched these back from the old mdb, and put them up here.

The order is an order is an order.

2016-09-02 15:19  anorder  dagboek werk  [permalink]

Then there was the day I decided to redesign. I had a hard time explaining. Not only why I thought a redesign was needed, but what is was exactly that I would do differently in this new design.

There would be a small distance between the data of the orders and the rest. The design would center around the idea that an order is exactly just and only that, an order. A request from a customer to have us do something. The distince between order-data and the rest wouldn't be large, it would more be something like a conceptual demarkation. In practice the order-data would be insert-only. A new order is registered, and after that read-only. This is easily explained to you, but caused shockwaves over the entrenched toilers of the company.

So to get closer to the common root of a great number of small problems, I started a design with just this, drawing up a model of reality where this is the first fact to note: the fact that an order comes in. When, by whom and for what. Not that the order is accepted. Not if it is payed for or not. Not if it's covered by customer credit or not. Not that it's cancelled or completed. Register different facts in different tables. Back to the books. Back to the 16th century penwright toiling in candlelit accounting books.

I sometimes joked that serious companies would require a stamp and signature to transfer this or that between departments. And silently I hope some still do. And even if none are left, it's up to us to see the romance in it. It's man-made structure to guide a man-made process, but it's structure and process none the less. Things break down swiftly when those go.

Types of Information

2015-11-24 11:04  typesofinformation  coding computers werk  [permalink]


Not just information

Life would be good if all we had was information. If only we could get all the information. We can't handle that much information, so we build systems to handle the information for us. Strange things happen when information comes in. Good systems are designed to handle these well. In designing information processing systems, you have to cater for the following.



Some input signals contain no information. They are either damaged in transport, incomplete, or not of a correct form for the system to handle. Either report them to find out if repair is possible, or keep count of them to be able to report about the health of the system.


Some input signals come in twice, and contain the same information. Or do they? If possible try to have the last step in the chain report if an event did take place twice, or if it's an echo on the line. Sometimes a clerk does drop a pack of cards and enters them again just to be sure. Be ready to take only the new cards.


Some information is wrong. Us humans do make mistakes. The system sometimes doesn't know. It processes a signal, of the correct form, holding valid information. Then again, the fact that some information already in the system may be incorrect is also information.

But there's more

Don't expect to get all information. There is always more.

uu uk
ku U R

Known Unknown

More input is coming in. Sometimes we know how much input is still waiting to come in. We'll roughly know how much information there'll be added. In most cases it follows a measurable trend. In some cases it follows the business.

Unknown Known

Information processing is one thing, but does it deliver the required new information? Is there more to mine out of the amassment? Sometimes the numbers can show what you need to know, but do you know where to look?

Unknown Unknown

It's hard to design for things we don't know we don't know (yet). But it serves to be prepared. New things have a knack for looking a lot like something we have already. Sometimes they deserve a new module, sometime just a new category, but don't forget to put the existing items in a category also.

See also


GMail: make the labels menu larger

2015-10-22 09:36  GMailLargerLabelsMenu  coding internet werk  [permalink]

When you don't like it: adapt it.

At work we've been switched to Google Mail for some time now, and to make sense of the mayhem that is the incoming torrent of e-mail, I've been using an extensive set of labels and sub-labels with nice colours and stuff.*

But the list of labels on the pop-up-menu if the 'move' and 'label' buttons is so small, only showing the first few labels, and I had to scroll most of the time.

Is there way to adapt this? It turns out there is. At first I read about user stylesheets, but these got removed from Google Chrome, but there's an extension that does the same:  Stylish 

Install this, and for URL's that start with "https://mail.google.com/mail/", add this:

.aX1 {
max-height: 780px;
top: 92px !important;
.aX2 {
max-height: 780px;
top: 92px !important;
.aX1 .aXjCH {
max-height: 600px;
.aX2 .aXjCH {
max-height: 600px;

*: Extra tip: I was searching for something nice to prefix the label-names with that would cause them to get storted (alphabetically) at the end. In theory you could use "zzz " as prefix, but that's ugly. And assumes you'll never have an account named "zzz".
After a bit of searching around the unicode spec, I stumbled upon Bopomofo, so now i use ㄍ and ㄑ which apparently sort past 'z' and look pretty nice.

The ongoing search for the best suitable font.

2014-10-03 18:50  i3078  weblog coding werk  [permalink]

There is something mesmerizingly strange about the font “PT Sans” (and “PT Sans Serif” and “PT Mono” for that matter, but in this specific case it’s about “PT Sans”).

For something at work I was looking for a font to use throughout a set of applications and a web-site to tie them together and set them apart from all of the other day-to-day work that people at work do. Therefore this font has a lot of requirements to conform to:

I have tested a large number of fonts for all of these. Some are too wide, some too narrow, some too ugly, some too frivolous. Some are bad at the default screen size. Some are too much just another Helvetica clone. A few were only missing a bold or italic version. I know what I’m asking for is a lot, but fonts that get close are generally of a certain age, further along than version ‘1.0’. It takes a lot of work to make a font, and a lot more of work to make a good font. It shows when the font has gotten a lot of care and attention.

From time to time I search the web for other fonts and go through a procedure to test them: make the website use the font, watch a number of pages with lists and common operations to see what they look like. If I like that, put the font up in an application and see if that looks good. Then run the application on the oldest workstation to see what it looks like.

I like to read about the story behind a font. Who made it, why was it made, what was it originally used for. (How come it’s made free for use?) There is so much there.

For now “PT Sans” is about the only font that fits all of my wishes the best. This is the strange thing about it. It appears to be made specifically for Cyrillic script, but the Latin are really good as well. It’s well balanced, does digits well, renders on screen resolution good. So by that logic there must have been a very large amount of work put into it. Based on a very rich set of knowledge on the subject. But I don’t find any record of that, or don’t know where to look for it.

But that’s it. The last few searches have not resulted in a better fit to my needs than “PT Sans”. The project is in development still, but is using “PT Sans” throughout. It’s looking great. Helping its little bit to make a splendid first impression to everyone I’ve demoed to up till now.

And look at that capital Q. Look at it.

How to turn on automatic logon in Windows XP

2010-02-18 08:28  i2872  werk computers  [permalink]

Als ik deze nodig heb kan ik die natuurlijk nooit onthouden! Tijd om die hier toe te voegen dus:
Start+R (run) en dan: "control userpasswords2"


The Toyota Way

2009-11-26 00:10  i2788  werk  [permalink]

Er staat eigenlijk nog een hele hoop over TPS op wikipedia!
(ik lees trouwens verontrustende dingen over wikipedia...)


2009-08-26 13:13  i1791  werk  [permalink]


Alles heeft een wetenschappelijke naam, en blijkbaar ook voor 'omhooggevallen dikkenekken'...
Doet me denken aan het Peter Principle

(via http://tech.slashdot.org/story/09/08/25/1245221/Habitual-Multitaskers-Do-It-Badly)

Programmeer-annectodes over sex...

2009-06-09 11:23  i1746  coding werk  [permalink]

Teju, als ze mijn proxy log greppen op "sex" dan hang ik er aan natuurlijk:

One amusing example: [...] For a long time "xx" was used as a code for "unknown" but the actual code-book declared "xx" to be the code for sex. So a lot of stories would go out under our sex topic that had absolutely nothing to do with it until we built heuristics to tell if the reporter really meant sex with their xx code. (The sex newsgroup was, for some reason, one of the most popular.)

(via http://www.templetons.com/brad/clarinet-history.html)

Large attachments? Share your files with this website! Hype Hype!

2009-03-24 22:13  i1696  internet werk  [permalink]


Ik vind dit een uiterst gevaarlijke evolutie. Ik word er ongemakkelijk van. Het zijn zo van die dingen waar je eigenlijk wel van snapt dat mensen er in lopen. Misschien een beetje zoals pyramidespelen en van die mails van verre familie van omvergeworpen Afrikaanse dictators.

Bij officiële dingen kan je nog de kleine lettertjes lezen, maar bij deze dingen is een soort 'technisch gezond verstand' nodig om je te waarschuwen dat er iets niet deugd. En jammer genoeg zijn de argumenten-voor alleen te ontkrachten met technische details waar gemiddelde mensen niet (meer) van wakker liggen.

Om ver uit de buurt te blijven van het plakkerige net van argumenten-voor, hier zijn mijn argumenten-tegen:

De bedoeling van attachments zijn dat er dingen -bij- de mail zitten. Als de mail aankomt, zitten er documenten bij. Als ik dus een mail krijg, wil ik niet nog dingen moeten downloaden van een of andere website. Niet alleen heb ik liever dat ik het net, samen met de mail, heb gedownload, ik heb het ook graag dat ze samen met mijn mail in mijn archief belanden en geindexeerd worden door eventuele zoek-oplossingen. Als ik bestanden op een site staan, heb ik er geen controle over. Als ze dan nog eens beperkt zijn in tijd, dan ben ik ze kwijt in de toekomst. Ik kan ze apart bewaren, maar dan is de koppeling met die e-mail weg. Jammer. Lastig.

Stel je krijgt binnen het bedrijf een mail met een URL waar je de bestanden kan downloaden. Ergens in America. Het downloaden gaat traag, en loopt misschien zelfs vast de eerste keer, wat wel eens gebeurt met grote files. Niet alleen ben ik er een hoop tijd en moeite mee kwijt (je vraagt je al af hoeveel langer het heeft moeten uploaden want kleinere upstream), de grootte van de file is twee keer aan bandbreedte verloren gegaan (op kosten van het bedrijf). Want het had ook op de file-server in de kast kunnen staan (op kosten van het bedrijf).

En natuurlijk, het argument waarmee je iedere niet-techneut verliest: security! Hier speelt het zelfs ook juridisch een rol. Wat moet je bedrijfs-gevoelige data bij een externe organisatie? Privacy Shmivacy! Het had het bedrijfsnetwerk niet mogen verlaten. Meer nog, de data staat op een server ergens (weet je waar?), betaald door iemand (weet je wie?), misschien wel kant en klaar om te misbruiken (weet je hoe?).

De wereld is toe aan een nieuwe e-mail. Jammer dat dat gezever van Sender-ID of zo er bij moet komen, want spam vind ik eigenlijk geen zo'n groot probleem.


2008-10-23 16:15  i1556  werk  [permalink]

Wat is het toch goed dat er iets bestaat als Google! Hoelang zou je niet moeten zoeken hebben vroeger naar iets zoals dit?
Vroeger moest je waarschijnlijk schrijven naar de firma voor een nieuw boekske.

Consider Advice

2008-07-03 21:19  advice  coding dagboek werk  [permalink]

Ever since learning about the existence of the Oblique Strategies, I have feelings of recognition with some of the things that dwell my mind from time to time. I'll have a go at collecting them here.

(Some related links:
Simon Tatham: How to report bugs effectively
Jacob Nielsen: Are developers people?
The Pragmatic Bookshelf: List of Tips


2008-04-11 09:07  i1393  werk  [permalink]


Group Policy Update Tool

2007-05-24 21:33  i1215  werk  [permalink]

Microsoft Windows XP - Gpupdate

aha! Ik dacht nog dat er zoiets bestond! Jaja, "je gaat wel nog eens moeten afmelden of heropstarten" Dus dan wacht ik wel tot ik nog eens minder open heb dan een achttal projecten in een viertal verschillende programmeerongevingen... maar nu ne meer!

Marketing-IT-hybrid: design the user experience!

2007-05-17 19:02  i1211  werk  [permalink]

Moehaha! Nu valt mijn euro. Neemt marketing een IT-er onder de vleugels om de communicatie te stroomlijnen met IT, dan heeft die mens niet alleen een onmogelijke taak, naast zijn frustratie te bedwingen valt er niet veel nuttig werk te doen naast marketees in techies te vertalen en terug.

Dus, het selecte groepje mensen die in dit soort werk wel is geslaagd uit te blinken eigent zich een naam toe die de lading dekt: user experience design! Zie www.ddux.org

"We're counting on a viral effect from you guys."

2007-05-09 21:39  i1206  werk  [permalink]

Ah, zo. Ah, ok dan, voor wie geinterreseerd is: http://jobs.extrafilm.com/

Helpdesk older than you may think

2007-04-17 23:19  i1197  werk  [permalink]

moehaha, but so very true

Windows XP Professional Photography: Microsoft Icons of Imaging

2007-04-05 09:40  i1188  werk  [permalink]

Windows XP Professional Photography: Microsoft Icons of Imaging

goh, ze hebben nog een paar vakjes vrij!


2007-03-08 21:33  r807  werk  [permalink]


PC World - JPEG Photo Format on Its Way Out?

Ha! Oud nieuws. Aan JPEG2000 te zien zal het wel nog een tijdje duren voor deze er door komt. Hoewel ik ze dan wel weer meer kans geef, al was het omdat ze toch nog een money-making-machine zijn. En dus andere money-making-machines weten naar hun hand te zetten om zoiets er door te krijgen.

PDF's with blank pages? Install the Asian font pack

2007-02-08 08:20  i1094  werk  [permalink]

Adobe - Reader: Asian and Central European font packs for Adobe Reader

Giving a presentation: tips & tricks

2007-02-02 09:35  i1089  werk  [permalink]

A few tips when giving a presentation

Rember page numbers
Number the slides or pages. Also think about adding the total number of slides also. Then try to roughly remember what is at which page. This will come in real handy when you need to skip a bit due to time constrains, or when browsing back through the presentation when answering a question.
Use the top half of the screen
In halls with lower ceilings, the people in the back are looking over the people in front of them and may not see all of your screen. Think about this in designing your slides or demoing an application. Also, when using an overhead projector, some people might not see past the overhead mirror or yourself.
In designing the layout of the slides, think about contrast. The color representation of presentation equipement might not always be similar to what you get on your screen. Just think what the sun does when beaming into a room with inadequate shutters. Choose foreground and background colors accordingly, and opposite colors or shapes in diagrams.
Please don't use tahoma
Choose the font you use for your slides well. A good reason to choose Verdana over Tahoma is because it is less condensed. A sans-serif font may be better readable than a serif font. Serif fonts are ok for titles, though.
Switch off background processes
On a multi-user environment, consider creating a local user profile for a "presentation user" with only the really neccessary items in the environment: a clean desktop, tuned display settings, no community background apps that may fire reminders and things, no background journallers or indexers, etc.
Please use Alt-Tab
When demonstrating an application, alongside with progressing in a slide-show, please consider using Alt-Tab. Watching someone minimize a presentation, finding the task-bar somewhere, switching to the application just to show something, then minimizing again to return to the slide-show breaks focus on a topic. Alt-Tab switches between applications fast without showing the desktop or taskbar.
Q&A: repeat the question
When answering questions from the audience, repeat the question first before you answer it. The person asking a question is addressing you and the people behind him/her might not have heard the question. Trying to find out what the question was when you answer might be disturbing to understand the answer. Also it is an extra check to see if you understood the question correctly (over background noises e.g. with a large audience)


Archive... Search...