03/03/2018 12:55 GMT

First off I don’t really hate Wordpress, I’m perfectly aware that it’s is a very popular blogging platform. I just don’t think the platform is for me, there are various reasons why?


Wordpress contains many features, most of them I probably won’t need for example the revision system, well I got Google Docs for that and therefore I didn’t implement that on my bespoken system, because I felt that the revision system would of added stress to the database, I like to keep the database nice, clean and easy to maintain, I just respect the database. I use postgres and mongodb, wordpress forces me to use MySQL which is not really my cup of tea.

I also didn’t implement the comment system by myself, as I thought that would of been too risky for me, I have used a third party comment system (disqus) as I felt that would provide me better protection against spambots.

Wordpress allows user to use HTML directly, I would not trust anyone to use HTML via a web interface, I wouldn’t even trust myself, I’m only human just like everybody else. My own system does not allow anyone to use HTML, it’s use markdown instead.

Is there a time, when you often get tired of writing the same if logic over and over again just to validate a simple string and you’re not a fan of using OO just for something dead simple. If so this little tutorial maybe for you, or not.

It’s going to be quite similar to Symfony’s raw value validation, the big different is that Symfony’s is OO, but my example is going to be a bit more functional with a little bit of OO, I’m using closures as I find that the more cleaner solution to the problem. To be fair Symfony’s is written in PHP and mine is written in Golang.

Okay, now I’m going to start off the tutorial, first off you need to create a error collector and a validation error type, this is very easy to do.

type ErrorCollector []error

func (e ErrorCollector) Error() string {
	str := []string{}
	for _, err := range e {
		str = append(str, fmt.Sprint(err))
	return strings.Join(str, "\n")

func (e ErrorCollector) FilterErrors() error {
	errorCollection := ErrorCollector{}
	for _, err := range e {
		if nil != err {
			errorCollection = append(errorCollection, err)

	if len(errorCollection) == 0 {
		return nil

	return errorCollection

type ValidationError string

func (e ValidationError) Error() string {
	return fmt.Sprint(string(e))

Both of those data type, implement the builtin error interface, so we can use those data type under the type hint of error easily.

Hello, after three years, I was able to to get this site up and running and why three year, long story short I was very busy with getting my future sorted out.

But hey it’s in a better state now than it’s was a few years ago.

What am I going to do with this blog?

Probably write a lot of technical rambling. I still got a few things to implement and they are

  • A third party comment system (probably with disqus, a free one will do me.)
  • Implement highlight.js (it’s one of those nice to have.)
  • Ability to upload images using mongodb gridfs, as I’m using docker container I can’t just use the normal file system method. I really have to think about this one. For now I stick with a third party image service.
  • A portfolio system.

I will eventually implement them when I get the time and space to do it.

| |