Talking about Qt vs HTML5 whitepaper

It was in the middle of midnight when I stumbled upon a white-paper comparing Qt QML app development with web app development. I like the idea to compare these two wonderful technology, however more I read the white-paper more I dislike it. I think it’s just another misleading marketing stun. Let’s dive down a bit on this white-paper titled Qt QML vs HTML5 – A Practical Comparison.

So in this whitepaper an Austrian company tasked a developer to build an Embedded Application using QT and HTML5, the developer had 160 Hours to build the QT version then another 160 Hours for the HTML5 version. The developer was experienced in HTML5 and C++ but had little experience on building QT/QML apps.

From this point please read the whitepaper before continuing this post, for complete context.

The result

I think there is one main misconception which leads to inappropriate comparison in this whitepaper.

The definition of Embedded Application; I would say embedded application would come in packaged and controlled target machine, like for webapp we can pick whichever browser our app work best. And for QT apps would mean which operating system and hardware platform the apps is targeted, so we can limit the build number to release. On both software stack or in embedded application generally, limiting target environment means less testing and less extra variable to take into account.

Continue reading

TCP Socket Implementation On Golang

Golang is surely my first to go language to write web application, it hides many details but still gives a lot of flexibility. Recently I did strace to an http service app, actually did it without a reason but I found something interesting.

Here’s what strace -c gave me :

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 91.24    0.397615         336      1185        29 futex
  4.13    0.018009           3      7115           clock_gettime
  2.92    0.012735          19       654           epoll_wait
  1.31    0.005701           6       911           write
  0.20    0.000878           3       335           epoll_ctl
  0.12    0.000525           1       915       457 read
  0.02    0.000106           2        59           select
  0.01    0.000059           0       170           close
  0.01    0.000053           0       791           setsockopt
  0.01    0.000035           0       158           getpeername
  0.01    0.000034           0       170           socket
  0.01    0.000029           0       160           getsockname
  0.01    0.000026           0       159           getsockopt
  0.00    0.000000           0         7           sched_yield
  0.00    0.000000           0       166       166 connect
  0.00    0.000000           0         3         1 accept4
------ ----------- ----------- --------- --------- ----------------
100.00    0.435805                 12958       653 total

There are a lot of interesting things in that profiling result, but the highlight of this article are the error number of read and the number of futex call

At the first sight I didn’t think about futex call, which most of them are a wake call. I thought that this app serve hundreds req per second, it should has many go routine; At the other hand it also leverage channel, it should has many under the hood blocking mechanism. So a lot of futex call should be normal, later I found out that this number was also from other things -will back to it later-. Continue reading

Optimizing Index time on elasticsearch

No replica when full indexing

By disabling replica I found the indexing time could be cut more then half the total time. Replica could be added back after full indexing completes.

Make refresh time a bit longer

Refreshing index time using default value (1 second) put quite pressure to io, especially if you indexing quite big data and querying the cluster at the same time. Making the refresh time longer could relief that io bottleneck.

Thought on Visual Studio Code for C++

I was thrilled when Microsoft announced their own open source code editor based on web technology, first thing I had on my mind was intellisense on my Linux box. Now after using it for a while, I have mixed feeling about it but mostly positive.
I have to explain my background, so you can understand my personal bias. I use visual studio for my day to day job handling thousands lines of c++ code, you can count me as happy user of it. Also for my scripting needs (lua, python, batch) I use Notepad++. For years QtCreator is my first to go C++ IDE in my linux, and I hoped Visual Studio Code could replace it.
Visual Studio Code comes with all things you can expect from modern text editor, quick command, keyboard navigation, git integration, code completion, extension repository, etc. It has broad language support with typescript and C# as first class citizen, C++ only gets sintax coloring and bracket matching. Continue reading