Dashboard

A while ago, I wanted to build a data aggregation service that’d allow its users to fetch data from a set of data sources defined by them. I wanted to allow the users to configure the data fetch interval for each source. This led to the birth of the Dashboard project.

Dashboard is a data aggregating web application that provides a way to customize and display the aggregated data. It’s an open source project. The code is hosted on GitHub.

Dashboard UI

Features

  • Webhook support to receive data
  • Fetch data from various sources at different intervals
  • Plugin support to enable extensibility

Use Cases

Dashboard can be used to display any arbitrary updates from various sources. Some specific use cases of Dashboard can be –

  • Keeping track of health of endpoints
  • Display data received from Git hooks
  • Monitor blogs for updates

The possibilities are endless.

Stack

The application backend is written in Go. For this use case, Go fits perfectly well and I really like Go. The current implementation of frontend is in vanilla JS (I feel primitive just saying that 😜). However, I do plan on using Vue or Preact.

For details regarding the future of the project and more, please check out the README file of the project.

Focus

Before I started working on this project, I made sure I focused on 3 things:

  1. Simplicity
  2. Extensibility
  3. Data parsing/display

Every time I took a decision around a particular feature implementation, I went through this list to ensure none of these aspects were sacrificed.

Simplicity: I wanted to make the app very simple to setup, configure, and use. I put in a lot of emphasis on the simplicity of the application. There is no database. The installation is pretty straight forward. Just download the binary file and run it. Thank you, Go!

Extensibility: I made sure to allow users to write their own plugins. These plugins are shareable. Users can display data from whichever source they want to via these plugins.

Data parsing/display: Once we fetch the data from a source, we need to have control over which parts of it we want to display in the UI. The user should be able to display only the data that matters. Right now, this is static. But, I’m working on a solution to allow users to map data.

Development

The project is under development and is still in Alpha stage. I plan on working on it in my free time. Any contribution to the project is welcome.

License

As always, I’ve open sourced the project under the standard MIT license. GitHub: https://github.com/mohnish/dashboard.

Hope you like my project. Feel free to contribute to the project. Cheers! 🍺

Learning Go

Golang logo
Golang logo

I first learned Go in 2014. I didn’t do anything with it after I learned the basics. After all the years, I even forgot the syntax and the basic concepts. This time, however, I wanted to make sure I properly learned Go and implemented something useful in Go.

I’ve now been programming in Golang since a few weeks and I’m absolutely in love with the language. I enjoy writing code in Go, especially, as someone who has been programming in Ruby for a while now. The language has an amazing design with some really cool features. It’s amazing how simple it is to use Goroutines with Channels. Go removes the apprehension from dealing with concurrent programming.

It’s been a while since I’ve dabbled around a new programming language. A few years ago, I learned Swift and I liked the expressiveness of the language. I had previously written code in Objective-C, the syntax of which (IMHO) is absolute garbage and made me not want to code in it…ever. Anyway, I’m not going to get into how much I dislike Objective-C. To sum it up, I liked learning and coding in Swift. I haven’t really built anything substantial in Swift yet.

So far, programming in Go seems really fresh. I’m super pumped about Goroutines, Channels and the ability to achieve concurrency in Go. It is simple and the concepts are straight forward.

Features I like

  • Use of structs and how one can define methods on these structs
  • Goroutines and channels are fucking amazing. Dealing with concurrency is usually a pain in the ass in other programming languages. Go takes away that pain and makes it simple. It almost seems pretty basic writing goroutines in Go
  • Error handling. I know most people are going to disagree with me on this one, but, I think the approach to error handling in Go is fresh and nice.

Getting Started

Go has fantastic documentation online. The community is great too. But, before attempting to learn the language, I strongly recommend reading this: https://blog.golang.org/gos-declaration-syntax. The blog post sets the tone of the language. This changes the way you think in terms of Go and makes it easy to pick up the language and get better at it.

Next step is to refer to Golang’s Getting Started guide. It’s pretty good. The Go tour is a great place to practice programming in Go.

Resources

If you’re the kind of person that likes to learn a new programming language by watching video tutorials, check out Go Essential Training on Lynda.com.

Here’re some of the videos that I found interesting on YouTube:

There’re tons of other YouTube videos that help you understand Golang better. I’m not going to link them all here. You should be able to find them fairly easily as needed.