Wednesday, July 18, 2018

Best practice is the enemy of common sense

I hear this "best practice" term so much that I can't resist to ask "says who?" LOL.

When we look at any great discovery of human kind, the common denominator was actually "common sense" and in fact the so considered "best practice" at the time was actually holding further discoveries from being achieved.

With "best practice" you are guaranteed to become one more, to integrate more. With "common sense" you are guaranteed to become a different one, to differentiate more. And it is precisely there, in differentiation, where you get a competitive edge.

"Common practice" leads to a a perfect competition, stagnant, rigid and dogmatic environment. But "common sense" leads us to constant adaptation and survival that are key to achieve competitive advantage (even though such advantage is really ephemeral, unless of course everybody looks at such advantage as a "common practice" ;-)

Decimus Iunius Iuvenalis (Juvenal) apparently wrote more than 2100 years ago that "Rarus enim ferme sensus communis", meaning "Common sense is generally rare". This is the bad news for business because it is only "common sense" to expect that in the modern world of instant gratification, thinking is a hard thing to do. It is easier to go after "best practices", unfortunately.

I would go forever but I think Albert Einstein puts it in short, beautifully with "common sense": "Don't stop questioning"

Tuesday, June 05, 2018

Calendar can’t save the attachment '' to the Exchange Server - OWA, MAC Calendar and Iphone Calendar could be failing

Delete the calendar entry and start from scratch.

This has happened to me twice and in both instances it was the prelude of a bigger issue, the Exchange/Domain password expires but the error is not shown because Microsoft products cache credentials in a way that some services might still work with old passwords (caching).

In fact I have seen that the Calendar stops working even from the Outlook Web Access (OWA): I was able to interact perfectly fine with emails but my Calendar was unable to show my events.

Unfortunately this time my OWA, iPhone and MAC calendars all failed to me for three days until I realized this. Even though it was the second time it happened to me, the first time I did not realize the root cause of the problem but now I recalled this was exactly the case.

Thursday, May 31, 2018

Monday, May 28, 2018

NodeJS static code security analysis

Use the ESLint security plugin to find out potential vulnerabilities in your nodejs code and the node security package (nsp) to find vulnerabilities in your dependencies. Here is a quickest way to get an idea where you are: Install eslint and the security plugin: Have a minimal eslint-sec.json file somewhere locally. Note that there is an issue I reported with one of the rules: Without messing with your project details use the plugin to get a report of where your code is in terms of common possible vulnerabilities:
eslint --no-eslintrc -c /path/to/eslint-sec.json /path/to/project/source/code/dir/
Here is a quick intro to nsp: Up to you to automate this and include it in your pipeline. No kidding, do it!

Saturday, May 19, 2018

Saturday, May 05, 2018

Run kubernetes on specific cluster or context

First list the context:
kubectl config get-contexts
Then either switch to a context:
kubectl config use-context $CONTEXT_NAME
Or simply run each command using the --context flag. For example to list the pods in a specific cluster run:
kubectl --context $CONTEXT_NAME get pods
To avoid verbosity, create functions in ~/.profile:
kubetest() {
    kubectl --context=$TEST_CONTEXT_NAME $@
}

kubeprod() {
    kubectl --context=$PROD_CONTEXT_NAME $@
}

Friday, April 06, 2018

Removing text blocks containing repetition with Unix or Linux Power Tools

Let us illustrate the issue with an example. In the Translation Industry a TMX file is an XML representation of a translation memory (TM). This format is useful to exchange TMs. It contains translation units (tu node) with properties (prop node) with translation unit variants (tuv node) and segments (seg node) that contain the source language and the target for translation language. Many times the same segment is added again and again by the Computer Aided Translation (CAT) Tool and while useful to get more precise translations it can become a burden if you try to process such a big TMX with an open source CAT Tool like OmegaT. Since OmegaT is client side only, processing big TMX would be problematic. In such case you might want to compromise on more precise translations versus being able to use the free tool. These repetitions are mostly related to the addition of context around the specific segment (x-context-post and x-context-post seg type attribute).

The question is then how to remove the whole "tu" node containing duplicated segments and leaving just one of them (again we are losing precision in the translation output but it might be worth it because of the savings when using a free CAT Tool).

The straightforward answer would be to export the TMX from the original tool using some options provided by such tool that would allow less data to be exported, specifically ignoring context specific translations. If that is not as possibility we are left with building a tool to clean it up.

First we can get an idea of which segments are duplicated and how many times each:
cat input.tmx | grep '<seg>' \
| sort | uniq -c | sort -nr \
| grep -v '^ *1 ' > tmx-repetitions.txt
Then we can replace them by a string like DUPLICATE_NODE_PLEASE_REMOVE
cat input.tmx \
| awk '{if($0 ~ /<eg>/ && !seen[$0]++ || $0 !~ /<seg>/) print $0; \
else print "DUPLICATE_NODE_PLEASE_REMOVE"}' > input-with-marked-duplicates.tmx
Finally we can try removing the whole translation unit (tu) node with perl:
cat input-with-marked-duplicates.tmx \
| perl -0pe 's#<tu(.*?)DUPLICATE(.*?)</tu>##gs'
But if the file is big enough this won't work as expected, probably because of how perl does multiline parsing in this particular commend (in memory). This is the reason why I built open sourced bash-multiline-replace project which contains a simple bash script (multilineReplace.sh) that will eliminate full blocks from start to end patterns if they contain an inner pattern.
cat input-with-marked-duplicates.tmx \
| ./multilineReplace.sh '<tu ' 'DUPLICATE' '</tu>' 

Followers