First impressions of Docker

Finally I got a chance to play with Docker and was pretty satisfied with the experience. There are some rough edges, but it didn’t lessen my excitement. Docker is stable for a few months, currently the latest version is 1.2.

I will try to use Docker to run different versions of MySQL and PostgreSQL for testing purposes at Datazenit. Docker was pretty easy to setup both on my development MacBook and on a Linux server. Docker offers a nice, official package for OSX that installs all dependencies, including, VirtualBox. An interactive tutorial can be found on Docker website, and it covers all core aspects of Docker.

I found out that there are pre-made repositories for MySQL and PostgreSQL images. I started with MySQL and got a working container within 10 minutes. Most of the time was spent to download the image, so I can say that the process was really simple. Sadly only the latest version worked flawlessly. I haven’t yet looked carefully enough, but each of the older versions had some random errors. Maybe it could be related to the fact that I run all containers on a single host, but that would be strange and it would also defeat the whole point of Docker containers.

Another unexpected thing was that you need to configure a separate volume container if you want a persistant and stable storage for your containers. Link to official docs regarding this – Managing Data in Containers. However one sentence from docs was confusing: “Volumes persist until no containers use them” So is the special volume container really persistent or not? If I reboot my host will the volume container lose all its data? But this is probably just a confusement caused by not RTFM. Will learn more and report back.

Up arrow in SBT

For quite some time I didn’t understand why the console in sbt, the scala built tool, is using up arrow for activating reverse-i-search (normally used in terminal with keyboard shortcut CTRL+R). This was one of those small bugs that are not annoying enough for you start searching for a solution straight away. After some time I got fed up and did some googling. Turns out it is not a bug within sbt, but a common side-effect caused by ~/.inputrc configuration.

Read more »

Map order in Scala

Scala offers several ways to deal with Maps and their order. There is the regular Map that doesn’t preserve order of items at all, LinkedHashMap that preserves the order, but is not immutable. Luckily ListMap tries to save the situation. It is an implemenation of immutable maps using a list-based data structure that preserves insertion order. Everything is good until you try to create an updated version of the ListMap.

Read more »

Building MySQL column definition with Scala

"Alter Column" differences between MySQL and PostgreSQL

SQL is a standard that would make our lives easier if it was implemented consistently across major database back-ends. Beyond simple queries it is rarely the case, and one example is table alteration. Today I was writing an abstraction over JDBC that will be used behind Datazenit Schema Builder, and I got reminded about those differences once again.

Read more »

Why web-based?

Nowadays we often see software being distributed as web-based applications, especially in the cloud (SaaS). Heck, even my own startup, Datazenit, is a web-based application, however not currently in the cloud. So what are the benefits of web-based applications over the good old traditional desktop software?

Read more »

Fix Disqus comments on GitHub pages

GitHub is a decent company that offers free blog hosting with the benefits of SSL. Everything is rainbows and sunshine, until you encounter a strange behaviour from Disqus, a popular commenting system that is often used together with GitHub pages, because they only support static sites. GitHub pages do not support automatic redirect to HTTPS (also known as HTTPS only website) and Disqus treats protocol as part of the website URL which is used to load comments. See where this is going? Basically you end up with different groups of comments - those who comment on HTTP and and those who comment on HTTPS. And you are almost stuck with this.

Read more »

Database drivers in a commercial product

I am building a software for database administration, and it’s important to be aware of database connector/driver licensing issues. For the initial releases I am aiming for MySQL and PostgreSQL support, later on SQL Server, Oracle Database and SQLite. I am using JDBC to connect to those database, because JDBC provides a stable API to access many relational databases. PostgreSQL is the most liberal of the mentioned databases, because PostgresQL connector for JDBC is licensed under BSD license that means I can do whatever I want. SQLite has several connectors and most of them are under BSD license too, however I haven’t done a full research about SQLite just yet. Also Oracle and SQL Server provide free JDBC drivers that you can distribute with your software. There are some limitations and you should read their licenses carefully, but as far I as I know the drivers of Oracle and SQL Server can be used in a commercial software if you do not change the source code of the connector.

Read more »

Jekyll related posts

Jekyll has related posts functionality built in, but it is flawed, especially when deployed on GitHub pages, because related posts are the same for each post. I wanted to be able to add related posts manually, and after little tweaking it turned out to be pretty easy.

Read more »

Switching to CodeMirror

From the beginning of time Datazenit was using Ace editor as raw query editor. Ace is really great and all that, especially because it has proved itself as a component in several cloud IDEs and large projects (projects using Ace). However it is a massive and complex tool, and for us it introduces too much overhead, because we are using just a small portion of its capabilities.

CodeMirror Screenshot

CodeMirror Screenshot

Read more »

Migrate Play framework from 2.2 to 2.3

I am using Scala and Play framework to build Datazenit, a web-based database administration tool. Today I decided to upgrade Play framework to the latest stable release. The 2.3 version was already available for some time now, but I wanted to wait a bit to see if there are any problems with it. The latest version of the 2.3 branch is 2.3.4 and it seems to be stable enough.

Read more »

Text generation with Markov chain

Markov chain is a stateless mathematical model describing a sequence of possible events. Text generation with Markov chains is as old as the model itself. I recently played around with it and it was pretty fun thing to do. I found a Python script that seemed a good start - shaney.py. It probably originates from a experiment called Mark V Shaney, a bot created by Bruce Ellis and Rob Pike. The bot was programmed to post random topics in Usenet newsgroups long time ago. The text was generated from previous topics using Markov chains, often creating quite believable content.

Andrey Markov

Read more »

No blog post today, take paradox instead

Weekend with fishes #2

First part. The weekend with fishes has ended and I am back home. Everything went as planned, except maybe for the fish count. I expected it to be somewhere above zero, but at least one of my companions catched three pikes, so I can’t blame the weather, river or something similar. We kept one of his pikes while others received an amnesty. It was a delicious, healthy and fully self-made dinner.

Read more »

Weekend with fishes

This weekend together with a few friends I am going to Sabile, a small Gypsy town in Courland, Latvia. This is going to be a fishing trip, so most of the time will be spent on a small river called Abava. We were there once, during the summer, and the place was quite enjoyable. Hopefully a few fishes will be our Saturday night special.

Abava River

An old postcard with Abava River near Sabile

I will post a status update tomorrow evening when I am back from the trip.

6 Weeks of Daily Blogging

I already wrote a summary once about my daily blogging experience after the first week. Now more time has passed and I wanted to write another summary. I have blogged every single day for the past 6 weeks and I plan to continue doing so till my 90 day challenge is over. After that I am probably reducing my blogging activity to a few posts a week.

Read more »

Sensei Grid Editors

Today a new editor TextareaEditor was bundled with Sensei Grid - this one features a textarea for large text editing. Currently Sensei Grid ships with three editors: BasicEditor, SelectEditor and TextareaEditor. Previously SelectEditor was implemented just as an example in the demo file, but I moved it together with other editors and it is now a part of Sensei Grid.

Read more »

Firefox table cell position bug

Firefox calculates table cell position differently from other browsers. Left and top positions are off by 1px when table has collapsed borders and zero border spacing, because Firefox does not count in the left and top border of each cell. Technically the left and top border are not part of the cell, when borders are collapsed.

Read more »

GetSSL.me Revenue

GetSSL.me is a side-project of mine that I started in early 2013, but I haven’t done any marketing or paid attention to sales for quite some time now, because I am working full-time on Datazenit. Today I crunched some numbers for September and got pleasantly surprised when I found out that this has been the top month in sales and revenue.

GetSSL.me SSL sales

Read more »

Buggy Monday

I was feeling productive today, but all that energy was wasted on a single bug, that caused 1px text alignment misperfection in Firefox.

Read more »

Bash Productivity Tips

I want to share a few tips for better Bash productivity. You will be surprised that not a single one of them is “Just install zsh”.

Read more »

Datazenit Store and Pricing

Today I made some small changes to the homepage of Datazenit. Most importantly pricing information is now available publicly, also store is fully operational. Keep in mind that Datazenit has not yet been released, and you won’t be able to download it right now. However you can place a pre-order in the store to receive Datazenit first on the release day. I can’t yet set any specific dates for release day, but I am aiming to launch the product before the end of this year. Beta test will start earlier, and I will notify beta users personally. If you are interested in participating in the beta testing, sign up to the Beta List.

Read more »

Sensei Grid row saving

Today a new feature was released for Sensei Grid, a simple data grid in JS/HTML. Previously I added an always present empty row at the end of table (configurable option), that was meant for adding new data to the grid. I have added a new callback for easier row saving in the backend, especially if you are storing data in a relational database.

Read more »

Grouped search results for Sensei Anywhere

Another small update was just released for Sensei Anywhere, lightweight navigation tool powered by fuzzy search. Results are now grouped by type, e.g., files, tasks, etc. Screenshot below.

Read more »

An ascetic theme for Jekyll: jekyll-lambda

Earlier I wrote that someday I will release the theme of this blog as a separate project for anyone to use. Well, that day is today.

Read more »

Sensei Anywhere

Developer productivity is very important for us at Datazenit. Database administration tools usually do not excel with great efficiency, but we are here to change that. I really enjoy quick navigation features in IDEs and code editors. For example, Sublime Text, IntelliJ IDEA and vim with ctrlp or command-t plugins provide an exceptionally quick way to navigate between files, classes and methods.

Read more »

Sensei Grid v0.1.4

This is the 5th release of Sensei Grid, a simple data grid in JS/HTML. The biggest addition in this release is new row support and handling. This is implemented as an empty row at the end of table. The empty row can be enabled/disabled via configuration setting: emptyRow: false. By default the functionality is enabled.

Read more »

Twitter Cards

Twitter Cards lets you add rich content to tweets when you share a link. I have added Twitter Cards to this blog which basically means I have added few meta tags to the head part of HTML. I was always sure that Twitter Cards are whitelisted and thus available to big brands and companies, but as it turns out the approval process is really simple and fast. It took around 10 minutes and my card was approved.

Read more »

The Technology Behind Datazenit: Part 1

Datazenit is a web-based database administration tool. It is a standalone app, that doesn’t require installation - just download and run it. You can then access Datazenit via any browser through specific address, e.g., http://localhost:9000/. It is somewhat similar to the model used by phpMyAdmin. Datazenit becomes most useful when deployed on a server, because from there all your team can access it, share connections, queries, datasets and charts. This is something other database tools lack.

Read more »

Duplicate Blog Friday

Morning started rather interesting. I was googling search terms related to my blog and was quite surprised when I found another blog with the same content and design as this one. The domain was a regular .com and it had a bit different style, but overall it was a complete copy of this one.

Read more »

Core testing finished [v0.1.3]

This is another status update for Sensei Grid, an open source project I am working on. As planned yesterday, today all tests were finished for the most important parts of Sensei Grid, and I published a new release - v0.1.3. Today went without any hiccups and I was able to finish testing earlier than expected. Because of that I already started working on functionality regarding new row support - there will be an empty row at the end of grid and it will also introduce row/cell states - saved/unsaved. It seems to be a fairly common and obvious practice.

Read more »

More testing [v0.1.2]

Today was mostly spent on further testing Sensei Grid. This wasn’t a great day for productivity, because a lot of time was wasted on event binding bugs in Jasmine testing environment (reason: curved_hands.dll). All problems were resolved and testing has been going forward pretty smoothly. I plan to finalize tests tomorrow and start working on new functionality on Friday. First thing in the list - implement functionality for adding new rows.

Read more »

Sensei Grid Testing

This is daily progress update for Sensei Grid. Today I spent some time to write test specifications for public data access API methods. New DOM tests were also added and test specs were dived in two files: apiSpec.js and domSpec.js. Jasmine is used a testing framework and tests are run together with JSHint to ensure code quality. Tests and JSHint are also run on Travis CI server.

Read more »

Sensei Grid Daily Progress

Today was a big day for Sensei Grid, an open source data grid in JavaScript/HTML I am currently working on. The project reached 2nd place in GitHub’s Trending repository list (1st between JavaScript repositories). GitHub sends out daily emails about new Trending repos and that resulted in even more traffic and followers to Sensei Grid. I was happy to see project’s community growing steadily.

Read more »

Sensei Grid got some traction

Today I was pleasantly surprised when Sensei Grid, an open source project I am currently working on, reached the top of Hacker News’ front page and stayed there for several hours. It resulted in an interesting discussion, huge load of traffic and new followers on Github. The Github repository if currently 3rd in the Trending repo list.

Read more »

A long hike

Today was one of those days off when you just do something random without much thinking. So I just went on a long hike with my girlfriend. We went from our home in Ādaži to the nearest beach (in Carnikava). The route was approx. 23km long and we spent around 5 hours just walking.

Read more »

Sensei Grid Daily Overview

I promised to post updates on Sensei Grid development and here goes a daily progress overview. For those who do not follow this blog – Sensei Grid is an open source grid editor in JavaScript/HTML. More info in a previous blog post.

Read more »

Sensei Grid Roadmap

First public release of Sensei Grid

In previous articles (#1, #2) I have mentioned and showcased a small demo of an open source library I am currently working on - Sensei Grid, a simple data grid in JavaScript. Today I cleaned and re-structurized the project, refactored some core classes and published it on GitHub. It is still under active development, but I have a clear plan and goals for the project because it is an essential part of my startup – Datazenit. Check out Sensei Grid at GitHub.

Read more »

My biggest challenges as a startup founder

I am currently co-founder at a fully bootstrapped startup – Datazenit. Datazenit is a web-based database administration tool, built on top of Scala, Play framework and Backbone.js. Previously I co-founded Hiburo, a simple team management app, but it was more like just a project for me. There was no market research and real business goals behind Hiburo, because we mainly built it for our own need and then later decided to open it up for other teams. Hiburo currently is not in active development, because all my focus is on building Datazenit.

Read more »

Git aliases

Git is the best version control system and one of my favorite development tools in general. It is small, fast and has some Linux-coolness to it. In this blog post I will share a few handy git commands that I have defined as aliases. Aliases can be defined in .gitconfig file located in your home directory. Aliases are basically shortcuts to frequently used or just long commands. The aliases listed in this post are in form <name of alias> = <git command>. The same format is used in the .gitconfig file. Just prefix the <git command> with “git” and you can use it without setting an alias.

Read more »

Responsive blog

Today I got notified that this blog is not responsive. True.

One small commit later, the design is now somewhat responsive. The blog is now readable at least on the devices I had around house. Also a favicon was added.

Responsive blog design

Free and useful apps for startups

I wanted to make a list of useful apps and services that I use or have used for any on my startups. This list will only feature apps that have a free plan.

Read more »

Work and open source #2: Sensei Grid

Previously I wrote about an issue I had regarding an open source library. A short summary – an update that was supposed to fix several blocker issues broke everything else and I was left with a dilemma to either fix the lib or to find a new one. Initially I tried to fix the library, but when enough time was wasted and new bugs started popping up randomly I decided it was time to ditch that dependency entirely. The package provided an Excel-like data grid, which is one of the core elements of Datazenit’s interface. I couldn’t wait for another update, because Datazenit needs to be moving forward.

Read more »

Typesafe's case study about Datazenit

Typesafe, the company behind the programming language Scala and the Reactive Platform, is occasionally publishing case studies about other companies using their technology stack. I was pleasantly surprised when they asked me to collaborate on a case study about Datazenit. Backend of Datazenit is developed in Scala and built on top of Play framework. I wrote about switching from Python to Scala a few months ago and the article gained some traction inside Scala community. Soon after that Typesafe reached out and wanted to learn more about how we use Scala. I was happy to share, and after several discussions and drafts a case study was born. The study covers the reasons why did we choose Scala, what were our expectations and the end result. You can read the full paper here and check out other interesting case studies at Typesafe’s website. It is an honor to be amongst other tech giants like Twitter, LinkedIn and Foursquare.

Read more »

Awesome Scala

Scala is awesome, there is even a proof for that – awesome-scala. 2 months ago I started a list of great Scala libraries, frameworks and tools. The list has significantly grown and improved, thanks to its many contributors. Yesterday awesome-scala reached a small milestone: 1000 stars on its GitHub repository. There are also more than 100 forks and 100 watchers, 153 commits, 38 contributors and 64 closed pull requests.

Read more »

Fishing records in Latvia

Fishing is one of my biggest hobbies and I try to get near freshwaters as often as I can. Latvia is full of amazing lakes and rivers that are scattered with anglers trying to get that big catch. I noticed that there is no information in English about fishing records in Latvia, so I made a small list. This list doesn’t feature all records, just those that seemed interesting to me.

Read more »

Work and open source

This blog post will be a small recap of the work day. After a few day break I resumed my work on Datazenit. I was occupied with other things and few conceptual projects for the past couple of days, but more on that later.

Read more »

Educational YouTube channels

What better way is there to entertain yourself for a short while than to watch educational, scientific or just plain interesting YouTube channels? I usually watch them while having a lunch by myself or when I am totally bored and don’t want to do anything else.

Read more »

Summary: The first week of my 90 day blogging challenge

A week ago I posted a challenge to write a blog post for the next 90 days. I wrote every day and didn’t break the challenge so at least that’s good. The first week has passed and here are couple of insights.

Read more »

Servers are fun: Ansible

Server administration is an interesting form of art in which I was kinda drawn into. I do not consider myself anything near a system administrator, but I like working with Linux and servers. Most of my favorite development tools are run from a terminal, and I like them because they are fast, predictable and scriptable.

Read more »

Scala in Vim

I am a long time Vim user, however in the last few years I have been using it less and less each day in favor of IntelliJ IDEA, a superb, fully featured IDE that really does it all. Vim felt right after I got past its steep learning curve and for quite some time I was a true Vim junkie. I used it for everything and had installed the Vimperator plugin for Firefox and Vimium for Chrome, configured my window manager xmonad to use Vim-like key bindings, enabled vi editing mode in bash and so on.

Read more »

Thought-provoking TED talks

I am really a fan of TED talks, I watch them for entertainment, to learn something new and when I am bored. Their slogan basically says it all “Ideas Worth Spreading”. There are over 1700 TED talks recorded, but I want to present a list of my all-time favorites.

Read more »

Moving away from the cloud

Yesterday I tweeted that the cloud-based version of Datazenit will be postponed in favor of a standalone app. The cloud version is not a separate thing, it is just the same standalone app, a little bit customized and hosted on our servers, made available to everyone. A question may arise - then why cancel the cloud app? There are several reasons for that.

Read more »

5 Productivity Tips for Developers

There are plenty of productivity tips online and some of them are good, some of them are not, but I wanted to create a list of things that actually help me get shit done. Tips that are easy to use and have an immediate effect, not a five year plan. These tips won’t be about what software to use or what color theme is the best, but general practices that significantly boost productivity. However keep in mind – what works for me, may not work for you. These tips may also be relevant to non-developers, but I can only speak from my experience as a developer.

Read more »

Today was a fine day

August 17, a fine Sunday here in Latvia. Not too hot and not too cold, just a perfect, sunny afternoon. Today was annual Riga City Festival, which attracts a variety of people. Together with my girlfriend we walked around the city centre and enjoyed the ambience of bright mooded people everywhere. There were a lot of activities for kinds and parents, like straw toy workshop, puppet theater and roller blading championship, but there were also several sport related events like a basketball tournament where teams are formed with people from specific crafts and occupations like artists, actors and politicians. Sadly we didn’t get out of the house early enough to check out all the activities, but on the other hand it was short enough so I didn’t get bored, which is probably good.

Later in the evening I went for small fishing trip outside of the city with few friends. We didn’t catch much this time, but it was meant to be a recreational event just for fun. Lakes and rivers have always relaxed me and I can’t pass on it. To properly finish the day, we grabbed some junk food from McDonalds and ate it with a great smile. It is really a liberal food, because who can turn it down?

This was also one of the rare days when I didn’t do anything work related. Didn’t even think about it that much. I will call it a progress.

A tiny rant: Jekyll vs. Octopress

Before switching to Jekyll, I tried out Octopress, a blogging framework built on top of Jekyll. I was really surprised to find out how much I disliked the experience with Octopress. I had an impression that it is a hacker friendly, simple and extensible blog platform, but it was the opposite of that. There are many layers of abstraction, themes are pretty complicated, it comes with many (19) pre-installed plugins out of the box, dozen depedencies (ruby gems), it uses Sass by default and so on. A fresh copy of Octopress blog consists of staggering 29 directories and 144 files. That’s wordpress-much.

Read more »

Blog like there's nobody reading

Just a few days ago I resurrected this blog from the ashes of recent server migration. Previously it was powered by a Python blog engine called Vellum, but now it is a fully open-source static site generated by Jekyll. All my posts and the site itself can be found in a GitHub repository: lauris/lauris.github.com.

Read more »

Microsoft BizSpark

Few weeks ago we got accepted into Microsoft BizSpark. It is a program that gives away Microsoft products to startups. Besides all the free software and startup community, they also provide us with €115/month credit for Azure services. For 3 years. The credit is enough to spin up several virtual server instances, SQL Server and a lot more. Check out the pricing calculator to get a general idea. So far I haven’t seen a catch, and if everything proves to be alright, we will move at least some of our cloud services to Azure. I have already set up an environment for testing and CI, and it seems to be working like a charm.

P.S. This post was initially a tweet, but I had a trouble to express myself in 140 chars.

The New Logo & Design

Once in a while I like to tear things apart and start fresh – this blog is no exception. Thanks again to Sasha for helping with the new logo. For me the Greek letter lambda “λ” creates associations with Lambda calculus, functional programming and of course Half-Life. The letter in logo also makes sense because my first name starts with “L”.

Lambda Logo

First year as an independent business owner

It has been a wild and fun trip. Year ago I established a company called Hedgehog Solutions. Soon after that I quit my day job and asked Sasha, a friend of mine, who also happens to be badass graphic designer, to join me. After 6 months he quit his day job too and we joined our forces together to build awesome software.

Read more »

Weekly round-up (#6/2014)

This week was full of surprises! Hiburo got interviewed by ArcticStartup. Unusually high amount of subscribers joined Datazenit Beta List. We also decided to offer a standalone version of Datazenit (in addition to cloud based version). It means that users will be able to use it locally or on their own servers – more on this in an upcoming blog article. Also all of Datazenit t-shirts ended – they went to early adopters and friends. If you missed a chance to get one, there will be a new batch of t-shirts at the end of beta period.

Interesting news, blog posts or Github projects from last week.

Fix for the new twitter design

I don’t like the new twitter design update, but the goods news are that it is very easy to fix. My biggest complaint is about the width of navigation bar – it is wider than the main content and it doesn’t make any sense. IMO the width should be the same for both navigation bar and content in this case.

Read more »

Weekly round-up (#5/2014)

Random news, blog posts or Github projects from last week.

Weekly round-up (#4/2014)

Last week we designed new Datazenit t-shirts and they look pretty awesome if you ask me. Preview below.

Datazenit T-Shirt Preview

Random news, blog posts or Github projects from last week.

Weekly round-up (#3/2014)

Last week was awesome, we finally launched Hiburo. The launch actually means that we are going to shift our focus to Datazenit. We will be working to extend customer base for Hiburo, but most of development time will be spent on Datazenit.

Weekly round-up (#2/2014)

This week we released first article about Datazenit – Visualization early preview. We have also decided about Hiburo launch date. If everything goes according to the plan, Hiburo will go into a stable version next Monday, January 13th. A full release will be published on Hiburo blog.

Below you can find weekly dose of interesting links:

Weekly round-up (#1/2014)

Holiday season is over, now I am back to work. January is going to be interesting – Janis, an old friend of mine, has joined our team as an intern. He will be working with us on Datazenit project for a whole month. Another important event is coming very soon - we are launching Hiburo this month. Excitement is building!

Introducing Sotokit: A Social Activity Kit

When Christmas celebration was over, I decided to spend an afternoon to code a little idea I had. There was a left over domain Sotokit.com from the times when we repeatedly changed the name of Datazenit, so luckily no time was wasted choosing the name - otherwise it would have been more than just an afternoon.

Read more »

Weekly round-up (#51)

JS WTFs

Today we are going to flog a dead horse. Over the time I have bookmarked several JS WTFs and would like to share some of the best ones. Javascript can never stop to amaze people.

Alerts “fail”. Read why this works. Another similar StackOverflow topic.

alert((![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]);

Obligatory link: WAT Talk.

Weekly round-up (#50)

Vim editor for Github

Today there was a topic on HN about Vim.js, a JavaScript port of Vim. Some people were asking about a way to integrate the Vim editor with Github.

Read more »

Intro post

Introduction to the blog. This is not a blog post. #paradox

Subscribe via RSS or browse source on GitHub.