The 40-year gap, or What has academic computer science ever done for us programmers

Has academic computer science been useful for practicing software engineers? I will show that it has, but with about 40 years of delay.

Declarative arithmetic expressions, such as SQRT(2.0*X)/Y, were first realized in Fortran, invented in 1953…  … So, we may conclude that in roughly 40 years, the concept has become widely adopted.

The “map/reduce” concept was pioneered in the LISP language around 1960… … Google famously used map/reduce at scale in early 2000s.

The paradigm of object-oriented programming began with the Simula language in 1967… … By mid-2000s, C++, Java and OOP became established industry practices.

Communicating sequential processes was an obscure theory developed in 1978 by Tony Hoare… …The first industry-strength implementation of this theory had to wait until 2009 when Google created the Go language. The adoption of Go outside Google started gaining momentum around 2013-2015.

Lambda-functions (or “anonymous functions“) were first clearly described in the 1967 lectures by Christopher Strachey and later implemented in a number of experimental programming languages… …In 2009, lambda-functions were added to Delphi and PHP, in 2011 to C++, in 2012 to Ada, and in 2014 to Java.


Compiling fluxbox under Ubuntu

sudo apt-get install build-essential texinfo libacl1-dev autoconf automake xorg-dev libx11-dev libimlib2-dev libxinerama-dev libxrender-dev libxft-dev libxpm-dev

./configure --prefix=/usr --enable-nls --enable-imlib2 --enable-xinerama

Use you’re start up file. Type nano ~/.fluxbox/startup (if it does not exist, create it) and put this in there exec /usr/bin/fluxbox

Continue reading “Compiling fluxbox under Ubuntu”

Neglected big problems

Relearn Every Generation – We must each relearn many basic life lessons during our individual lifetimes, lessons that millions or billions of others already learned in their previous lifetimes, or that millions or billions of others are currently learning in parallel with us. There seem huge potential gains from finding better ways to learn from our ancestors and colleagues.

Changing World – Early in life we read the world around us and choose life plans and paths matched to that world. During our life the world around us changes, and we make some adaptations to that, but they seem insufficient. For example, we often seek to achieve in ways that were awarded with high status when we were young, to find that our achievements are much less valued by the new world.

Poor Matching – We match people as friends, lovers, spouses, and workers. Our distant ancestors only had a few available options for matches, and we inherited many intuitive mechanisms appropriate for that situation. But we now have a vast world with far more matches possible, and it seems like we don’t use that larger scope very well. We still rely heavily on inherited informal mechanisms. I see so many lonely and otherwise mismatched people.

Varied Commitment – We must each choose how much to commit to our careers, friends, lovers, neighborhoods, brands, etc. We do commit somewhat, but we also switch on occasion. But it isn’t remotely clear that we do this well. We must each match our commitment to the commitment choices of folks around us, and we often lack ways to commit to avoid temptations.

What does directory permission ‘S’ mean?

‘S’ = The directory’s setgid bit is set, but the execute bit isn’t set.

‘s’ = The directory’s setgid bit is set, and the execute bit is set.

SetGID = When another user creates a file or directory under such a setgid directory, the new file or directory will have its group set as the group of the directory’s owner, instead of the group of the user who creates it.

To remove the setGID bit:

chmod g-s eclipse/

Taken from man chmod:

You can set or clear the bits with symbolic modes like u+s and g-s, and you can set (but not clear) the bits with a numeric mode.

Delayed Expansion

You found the bbb (batch beginner bug), but not the variable is empty, it’s the expansion that doesn’t work as expected.

Percent expansion is done when a line or a complete parenthesis block is parsed, before the code will be executed.
But to solve this you can use the delayed expansion, this doesn’t expand at parse time, it expands just at execution time.

setlocal EnableDelayedExpansion

if exist "%_REALPATH%\tomcat-%TOMCAT_VER2%" (
echo "!TOMCAT_VER!"
) else if exist "%TOMCAT_VER2%" (
echo "!TOMCAT_VER!"

Please help me to understand these tun0 addresses

Hardware network links can be either point to point or point to multipoint. ppp links are point to point, ethernet is point to multipoint. tun can act as either, in your case it is acting as a point to point link. a point to multipoint interface has four addresses associated with it, specifically ip address (the address of the interface), network address, broadcast address, and netmask. A point to point link has two addresses associated with it, specifically ip address (the near address) and the point to point peer address (the far address). Since the point to point link will only work with the two addresses, the broadcast, and network addresses and the netmask do not have useful data or have flag values.

A final point tun interfaces can have mac addresses, they just don’t have default mac addresses.


Yep, that’s right. The 64 bit extensions to the x86 architecture were invented and first implemented by AMD. Intel were laggards to the 64 bit party because they were hoping to transition away from x86 architecture and move us towards IA64. IA64 already existed in the form of the Itanium and Intel was hoping to transition towards that. Despite being a far better and more efficient architecture, lacking the inherent design flaws of x86, it suffered through lack of compatibility and it never took off except in the commercial space. AMD effectively forced Intel’s hand by introducing the Sledgehammer, which was effectively a 64bit chip based on the x86 architecture. Hence the name AMD64.

Synchronize and Mirror difference

With Synchronize files mode, the newer files in source directory are transferred to the opposite directory.

With Mirror files mode, the different (both newer and older) files in source directory are transferred to the opposite directory.