It has been a long time since my last blog post here. To be more precise it has been 72 days without a blog post. That’s a huge gap considering that previously I published a blog post every day. Finally the Christmas time has come and I got time to reflect on the past two months and all the things that has happened.
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.
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
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.
Yesterday I wrote about differences between Alter Column commands in MySQL and PostgreSQL. To change even a single parameter of a column, MySQL requires the whole definition of column to be specified. I decided to write the definition building login in Scala not SQL.
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.
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?
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.
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.
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.
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.
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.
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.
Today I am not writing a blog post for my blog.
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.
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.
I will post a status update tomorrow evening when I am back from the trip.
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.
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.
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.
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.
I was feeling productive today, but all that energy was wasted on a single bug, that caused 1px text alignment misperfection in Firefox.
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”.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Few weeks ago we got accepted into Microsoft BizSpark. It is a program that gives away Microsoft 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.
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”.
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.
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.
- Debian 7.4 Released – my favorite Linux distro got an update.
- Total security in a PostgreSQL database – the challenges of protecting PostgreSQL database server.
- Drone – Continuous Integration platform built on Docker.
- How I hacked Github again – Egor Homakov gains access to private repositories on Github.
- Microsoft CEO – Satya Nadella becomes the third CEO of Microsoft.
- AWS Tips I Wish I’d Known Before I Started – Collection of random tips for Amazon Web Services.
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.
Random news, blog posts or Github projects from last week.
- How I Lost My $50,000 Twitter Username – last week’s most viral article. I don’t think it was possible to miss this one.
- How In-app Purchases Have Destroyed The Industry.
- Achievements for your team – Sasha wrote an article about one of the most interesting features of Hiburo – achievements.
- Lenovo to buy Google’s Motorola in China’s largest tech deal – Not so good news, because I really liked the new Motorola Moto series.
Schrödinger's cat applied to web development: If I don't look at it in Internet Explorer then there's a chance it looks fine.— Datazenit Sensei (@datazenit) January 30, 2014
Last week we designed new Datazenit t-shirts and they look pretty awesome if you ask me. Preview below.
Random news, blog posts or Github projects from last week.
- Instantga.me – collection of many simple flash games to quickly waste some time.
- Beer vs Coffee – infographic based on Coffee vs. Beer: Which drink makes you more creative?.
- Revolution in Kiev, Ukraine.
- Bill Gates loses in 9 moves to chess champion – world chess champion Magnus Carlsen took just nine moves to checkmate Bill Gates.
- Your best passive income? – interesting HackerNews discussion about sources of passive income.
- Hackathon Starter – A boilerplate for Node.js web applications.
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.
- Hiburo is ready – launch blog post.
- Windows 3.1 written in JS/HTML – sadly the main site is down now, but I have linked related topic on HackerNews.
- Strangest language feature – StackOverflow topic.
- Conway’s Game Of Life in APL – simply amazing.
- Go by Example – hands-on introduction to Go using annotated example programs.
- Grow to Greatness – Coursera course about private business growth challenges.
- Building an open source Nest – Hint: it’s not going to cost $3.2bn.
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:
- Light Table is open source;
- 4k is for programmers – controversial article about monitors;
- Python code to solve xkcd 1313;
- SSL/TLS analysis of the top 1,000,000 websites;
- SQLSoup – a database access tool for SQLAlchemy which provides a convenient way to access existing database tables without having to declare table classes;
- Django SQL Explorer – Django package to easily share data via SQL queries;
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!
- SnapchatDB – This database contains username and phone number pairs of a vast majority of the Snapchat users.
- Mezazzine 3 was released.
- GGPlot for Python + related blog post.
- The Micro Python project – Python 3.x on a microcontroller.
- Hilarious Microsoft support article – “If you move your mouse pointer continuously while the data is being returned to Microsoft Excel, the query may not fail. Do not stop moving the mouse until all the data has been returned to Microsoft Excel.”
- DigitalOcean leaks customer data between VMs.
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.
Random news, blog posts or Github projects from last week.
- Regex Golf – Check your Regex-fu.
- Jolla Shop – Jolla Phone finally available in Europe.
- Open Salaries at Buffer – Interesting approach to business transparency and employee salaries.
- Origami – Design prototyping with Quartz Composer.
News, blog posts or Github projects from last week that got my attention.
- Has NoSQL Come Full Circle?
- Moto G – Budget Android phone done right. Even ordered one for myself.
- BayesDB – Bayesian database.
- An Engineer’s guide to Stock Options.
- Websocketd – Turn any app into a WebSocket server.
- Craft – A simple Minecraft clone written in C.
Tweet of the day: Apparently Mac now supports Windows.
Introduction to the blog. This is not a blog post. #paradox