-
A few things Firefox does better
Recently, Microsoft has ditched EdgeHTML in favor of Chromium rendering engine in its Edge browser. It led to mourning and concern over the uncertain future of the open web, in which, a single big company may have much control over standards and features of the web. Mozilla rallied internet users to give Firefox another try. They have a point. The web has always been a messy place with changing standards with which browser vendors catching up at different speed. A nice looking application may look well on Firefox yet broken on Chrome and vice versa. Testing effort is duplicated to ensure consistent look across browsers. Yet, that messiness and duplication of effort creates a larger space for experiments, more opportunities of participation and better chance to make some thing good. Because, I think, innovation has always been done by allowing independent minds to find different approaches to the solve the same problem. And because, in technology, it is always about weighing trade-offs. The fastest implementation is not necessarily the most modular and embeddable one.
-
How dk.brics.automaton regex library works
This brics regex library is by far the fastest when comparing with openJDK
java.util.regex
andcom.google.re2j
. Let looks at what lie under the hood.dk.brics.automaton
is a Finite automata library with application in Regex. The idea is similar to google re2j, which is to construct a DFA from regex string and matching an input string means advancing from one state to another. (google re2j is surprisingly the slowest in my test case. Which is probably due to my particular regex input, or some bug with Java port. I have not examined it yet) -
Misconceptions when scale applications
Once in a while, engineering managers and software engineers would triumphantly tell me to use a particular piece of technology because it is scalable or good for concurrency. Unfortunately, scaling an application means trading off different factors affecting an app’s performance and no single technology comes as silver bullet to solve them all. Below are some of the misconceptions I often hear.
-
How regex is implemented
Recently at work, I need to take a deeper look at how optimization is done by different regex libraries and how they combine regex patterns. This document is examining 2 regex implementations:
java.util.regex
of OpenJDK andre2
of Google. -
How java load classes
For a while, I have delegated the task of managing java run command to IDE. Eclipse, Netbean and IntelliJ and all seem to do a decent job of masking away complexity of supplying java with JVM parameters, classpath, debugging options… Compared to other languages, the java run command can get horrendously long, not very suitable for handcrafting. Recently, when working on some sort of command generating at work and playing around with java command line arguments, I encountered some minor gotchas.
-
I no longer use dual monitor at work
When I first started out my career as a software engineer, professionals working with multiple displays seemed cool and power packed. Such desk arrangement creates an impression of a lots of things going on. People would quickly move their gazes between one montior and another as open files scattered across screen. Perhaps that helped multi-tasking as you can code on one monitor and refer to documents on another. I used to do that too. But now I’m more comfortable using a single monitor. It helps with the neck since I don’t have to turn around. And screen estate is small. That limitation forces me to close unnecessary stuff. Focus on one thing at a time.
-
Let people decide for themselves what is good
The road to hell is paved with good intentions
-
Reality is not what it seem by Carlo Rovelli
In Reality is not what it seem, Dalio weaves the beautiful thread of atomicism from when it was first conceived by philosophers of antiquity (Democritus), through banishment under Christain Roman Empire to Renaissense and modern time. The book was both historical and scientific.
-
Shortcomings of web technologies in building a robust desktop application.
As computation power and data are shifting to the edge, web applications are more and more like installed desktop applications with (limited) file system access, threading, offline storages… Frameworks such as Electron, which allow browser-based application to be packaged as standalone app, are gaining popularity. However, with great power comes great responsibility. Javascript, html, css have always been used to build webpages, which is a stateless and forgiving environment. A broken webpage can be remedied by hitting refresh button. The web is not used to be fast, users’ expectation for it is lower than for an installed application.
-
Java byte literal for value greater than 0x80
In porting a piece of code from C++ to Java, I encountered statement like this:
Subscribe via RSS