Converting a hexstring to ObjectId for MongoDB in Javascript

How to convert a string value to ObjectID

Sometimes, the ObjectID of your MongoDB document is delivered as a 24 character hexstring. You can’t just compare this hexstring to an ObjectID, because the comparison will fail.

The solution is as follows:

var mongoose = require('mongoose' );
var hexstring = '58666c89d4bc6622ed5373dc';
// convert it to ObjectID
var ObjIDtype = mongoose.Types.ObjectId(hexstring);

The variable ObjIDtype now contains the value as type ObjectID and can be compared to MongoDB objectID’s.

How to fix SVN not able to update or clean working copy

Past week, it happened twice to me that SVN was not able to update. When updating or committing, the message “Previous operation has not finished; run ‘cleanup’ if it was interrupted” appears. But when I cleaned my working copy, that failed too.

For fixing this issue, install SQLite (download it here). Go to your SVN working directory, you’ll find a wc.db (the database where SVN keeps it’s date) in the .svn directory.

run the command

sqlite /pathto/wc.db "select * from work_queue"

You’ll probably see some records containing filenames you just touched. The records can be safely deleted. Run this:

sqlite /pathto/wc.db "delete from work_queue"

And you’re good to go! It’ll probably save you the trouble of deleting your working copy and checking it all out again.

My Whitebook about Node.js is published

My latest Whitebook is published on the Whitehorses knowledge site. It’s written in Dutch though.

If you’re looking for some in-depth articles in English, check out the Whitehorses blogposts about Node.js:

Node.js == serverside Javascript


Using MongoDB on a Raspberry Pi

Recently I hooked up my Raspberri Pi 3 as a small testing server for my MEAN stack (mainly Node.js and MongoDB in my case). That works great and I was surprised how fast this setup is on a relatively small pc.

But while utilising the more advanced features of MongoDB I found out they didn’t work as expected. The problem is, Raspbian Jessy has a 32bit kernel and MongoDB with versions higher than 3.0 only support 64bit. Hence, on Raspbian a 2.x version (32bit) is provided which of course lacks the newer features. So if you want to use the full potential of MongoDB, you’ll have to find another OS with 64bit support. I suggest an older laptop or desktop running Linux Mint! There is a tutorial for installing the right MongoDB version on Debian here.

Time Machine issue: not able to activate time machine

What if you always use OS X Time Machine for your backups and find out that restoring doesn’t work as you hoped? I found out recently that the “Activate Time Machine” option didn’t work anymore. It was accessible in the menu, but clicking it did not give a response.

I scoured the internet for a solution, went through all my log files and even did a complete restore (fortunately that still worked!). Still, not being able to restore specific files, I tried a desperate last option: removing the Time Machine backup disk from the selected backup disks in the options, and re-adding it. The good thing is that Time Machine will resume backing up in the same sparse bundle. The best thing is, though, that restoring files from Time Machine works as it should. This problem gave me a lot of head aches and frustration, so I’m very happy I found this solution.

Check these great Oracle JET blogposts

I just want to bring some nice blogposts on Oracle JET to your attention. Oracle JET is a new Javascript Extention Toolkit (yes, yes: JET) from Oracle for interacting with Oracle products and Oracle Cloud services.

They are written by my colleague Herman Brunnekreef. This are the topics:

 Visualizing data with Oracle JET,

Routing and responsive Layout with Oracle JET,

Integrating Oracle Map in Oracle JET

Go check them out. My guess is more blog posts about the subject are coming up 🙂

Running XCode simulator results in “LaunchServicesError error 0.”

So, one moment you’re app was running fine in the simulator and the next moment you get an error saying  “The operation could not be completed. (LaunchServicesError error 0.)”

Bummer! When you check your logs (see ~/Library/Logs/CoreSimulator/CoreSimulator.log or ~/Library/Logs/CoreSimulator/[Device UDID]/system.log) you’ll find errors like “/<app name>.app did not have a CFBundleIdentifier in its Info.plist}”. And when you check your Info.plist all is fine there.

Don’t despair. You probably created a folder “Resources” in your Project Navigator. And while that’s a perfectly reasonable name for a project folder, XCode does not like that. All you have to do is rename the folder and chances are your project will run again.

Javascript keyboard events: the difference between keypress and keydown

Some things you learn the hard way. I was trying to catch some keyboard events in order to replace comma’s with dots in html input items and validating the input against a regular expression along the way. The results I got were at best confusing, but never as expected.

I did some reading on sites like, and found out there is a fundamental difference between the keypress and keydown event. This shows especially when catching the “.” “,” or decimal point (yes, the decimal point on your numeric keypad is another character!)

The next output is consecutively a comma, a dot, and a decimal point on the numeric keypad. The keydown and keyup event present values that are unexpected, like the ¼ character. Only keypress shows comma and dot as expected.

keydown keyCode=188 which=188 charCode=0 char=¼
keypress keyCode=44 which=44 charCode=44 char=,
keyup keyCode=188 which=188 charCode=0 char=¼
keydown keyCode=190 which=190 charCode=0 char=¾
keypress keyCode=46 which=46 charCode=46 char=.
keyup keyCode=190 which=190 charCode=0 char=¾
keydown keyCode=110 which=110 charCode=0 char=n
keypress keyCode=46 which=46 charCode=46 char=.
keyup keyCode=110 which=110 charCode=0 char=n

Remember this when getting unexpected results when grabbing key-events in your web application.

By using this site you acknowledge the use of cookies (which are mostly harmless, btw) More information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below you are agreeing to these settings.