Profile cover photo
Profile photo
Tatsuhiro Tsujikawa
Car lover, free software developer.
Car lover, free software developer.

Tatsuhiro's posts

So looks like remaining Top Gear season 22 episode was on aired yesterday in UK.  I could not watch it, of course. I'm huge fan of Top Gear, so I feel sad this much successful show ended in this way, rather suddenly.  But sometimes things just go on like this, whatever you like or not.

Stream version black mesa gets quite tougher than free version honestly..  With normal level, and just 3 monsters yielding green plasma are quite deadly, if you have just low-fire rate pistol.  Perhaps, I should chose easy level.

Back to OSS story, I added SSL/TLS logging variables to nghttpx.  Now it can log SSL/TLS protocol, cipher name, session is reused or not, and session ID for that particular connection.

I didn't write g+ post, so the "write g+ post every day" challenge was over. The result is 32 consecutive days of posting, which is longer than I expected. Although the challenge was over, will write post time to time.

I am a big fan of half-life game. So, of course, I downloaded free version of black mess a while ago and quite enjoyed it. Yesterday, I purchased steam version of black mesa, since it is getting updates. The first impression of steam version is impressive, it looks even more detailed and gorgeous than free version. It also adjusted many parts of game elements, for example, fire rate of first weapon got quite slow. I hope that they also fixed super mario-ish level design in some places, but overall it is pretty amazing and fun to play.

This is 32nd post of my "write g+ post every day challenge."

Today I fixed 2 bugs in nghttp2 introduced after v1.0.2.  It looks like v1.0.2 is super stable in retrospect.  We have to work hard to make next v1.0.5 as stable as v1.0.2. Stay tuned.

Now things are going from SPDY to HTTP/2, but I got bug report from spdylay library user.  It points out the flaw in spdylay API, that is stream ID is no allocated before we make sure SYN_STREAM can be issued, thus no stream is created.  This makes application cannot access stream user data in, for example, on_ctrl_not_send_callback, and cannot do proper resource cleaning.  I noticed this, and fixed it in nghttp2, but not ported to spdylay, since it breaks API compatibility.
I fixed not to break API today.  To make it work, dreadful CREDENTIAL support must be removed.  So I also removed CREDENTIAL completely from spdylay.  I left interface for them, but now they are noop.  CREDENTIAL was introduced in SPDY/3, and deprecated in SPDY/3.1, and it was a catastrophic failure, and I'm sure no one use it today, or even has used it once.

This is 31st post of my "write g+ post every day challenge."

Yesterday, we shipped nghttp2 v1.0.3, but it turned out that it could emit assertion failure. It was a regression of priority tree performance optimization.  (yeah, I had bad feeling about this.. always while doing some "optimization" stuff..).  So today I released nghttp2 v1.0.4, just fixing this issue.

This is 30th post of my "write g+ post every day challenge."

Today I released nghttp2 v1.0.3. This is mainly bugfix release. The priority performance optimization is also included too.

Post has attachment
This is the 29th post of "write g+ every day challenge."

Today I talk about user-defined literals introduced since C++11.
Details are written in

The easily imaginable example is define some units as literal, and use it in source code to improve readability.  I saw a project defined constant int K = 1024, and use it like auto buffer_size = 16 * K.  Now user-defined literals, you can define user-defined literal _k, and you can write like so: auto buffer_size = 16_k, which returns 16384.  C++14 introduced these kind of use for time duration, so you can write 1h, 2min, 3s, 4ms, and so on.  For C++11, you have to define them, but user-define literal must start with _, so it looks like 1_h, and 2_min.

This is the 28th post of "write g+ every day challenge."

Today I released argparse4j 0.6.0, command-line parser for Java.
This release fixes the long standing bug.  Imagine that positional arguments for cp(1) command.  It takes one or more source locations, and one destination.  Previously, in argparse4j, we could specify this, but first argument (one or more source locations) eagerly consumed all given command-line parameters, and nothing was left to second argument (destination), and just showed error "too few arguments."
In this release, this bug was fixed, and simple algorithm is employed not to consume all parameters, but leave least amount of parameters for the rest of argument processing.

This is the 27th post of "write g+ every day challenge."

I rewrote HTTP/2 dependency priority handling routine nghttp2 today.  All existing tests have passed, but I'm still not confident yet.  After another review tomorrow, and then push to the public branch.
The reason of this rewrite is to improve performance.  First I implemented this functionality, I have no idea how to optimize this since we don't know the major use case.  Now the only browser and consumer of dependency priority is Firefox.  I decided to optimize our implementation against Firefox style dependency tree.  After optimization, we have no penalty when used with Firefox style (I used special build of h2load to mimic this).  The liner node case, which is worst case, is also improved dramatically.

Post has attachment
This is the 26th post of "write g+ every day challenge."

Today I got nghttp2 issue about URI containing IPv6 link local address. More specifically, we are talking about IPv6 address including zone ID (e.g., [fe80::a%eth0]).
The short answer was nghttp client did not handle them. 
We use http-parser's URI parser, and it rejects them as error.
Even if it were supported, we need extra handling of those address in URI in application code.  RFC 6874 says that "%" character must be encoded as "%25", which is usual percent-encoding. That means application must decode it.  Normally, hostname part does not include percent-encoding string.  RFC 3986 allows this, but they are usually i18n domain name, and we don't support it either.
I decided to fix this in nghttp client, and added special handling for these cases.  Also I made a patch for http-parser to accept zone ID while parsing URI, and then sent PR to http-parser project.
Wait while more posts are being loaded