Tuesday, January 24, 2017

Agile Austin "Prepare Your Software Development for 2020" by Israel Gat

Israel Gat (@agile_exec) presented to sixty people at Agile Austin at Kasasa about the future of software development.

Israel Gat

"I love software."

Big ideal:  Automated Insight Generation through Analytics processes is starting to trump the Software Development process in terms of value generation.

Instead of Hierarchical Value Generation/Value Flow, we need to do horizontal flow.

People are starting to get rid of middle person between human knowledge and data scientist and replace with Insightful Applications/Machine Learning.

A computer that used machine learning reached Israeli Master level in chess in 3 days.

Two Primary Drivers of Contemporary Software
1. Internet of Things
2. Machine Learning

The only way to cope with vast amounts of data from IoT is machine learning.

Four Messages:
1.  Foundation of software is value generation
2. Current software methodologies and frameworks will need to change in 2020
3. End State (2025? 2030?) is to have machine learning do 70% of value generation process.
4.  By 2018 will face a shortage of people with deep analytical skills to extract insights from collected data.  We will need 1.5 million managers who have the quantitative skills to make decisions based on analytical data.

What to do when data quality is bad?
How to manage poor software quality in data analytics?
What will happen to all the people replaced by analytics?

What is Insight Generation?
Insight generation is the identification of novel, interesting, plausible, and understandable relations among element of a data set that
a) need to formulate action plan
b) it results in an improvement as measured by KPIs.

Case for Automated Insight Generation:
1. The amount of data is so huge, humans can't process it
2. We don't know how to really analyze and utilize Big Data
3. Time to decision is decreasing while data velocity is increasing - we don't have time to process anymore

What to do?
Don't let today's method/process/framework debates absorb all you attention cycles
Start in-house training programs in IoT and Machine Learning
Young kids want bleeding-edge projects

Monday, January 09, 2017

Austin .Net User's Group: Distributed Systems 101 by Colin Pear

Colin Pear from ClearMeasure (@colinpear) presented to this month's Austin .Net User's Group on Distributed Systems.  Here's a few pics:

My random notes:

Eric Brewer Cap Theory
Michael Perry Video)

Distributed Processing 
Pick any two:
1. Available
2. Consistent
3. Partition Tolerant

8 Fallacies of Distributed Computing by Peter Deutsch
The Network is reliable
Latency is zero
Bandwidth is infinite
The network is secure
The topology doesn't change
There is only one Administrator
Transport cost is zero
The network is homogeneous

Free book:  http://go.particular.net/2017ADN

Distributed systems are complex
It's a paradign shift
Communication is the key

Smart endpoints, dumb pipes, distributed routing

Types of Coupling:
Spatial - physical links
Platform - Can a Java app talk to .Net? 
Temporal - time based

Going distributed solves problems, but it's more complex and requires different thinking.

NServiceBus does heavy lifting.  It's not free, but Colin thinks it's well worth it.  $25 or $30 bucks per machine per month.

NServiceBus can use AzureServiceBus, RabbitMQ, MSQueue, or SqlServer.

course by Udi Dahan:  http://go.particular.net/ADT0109

Thursday, January 05, 2017

Front-end Web Development Things I've Been Learning Lately

How to tell the server what type of data you want back from an http request using the "q" syntax. The "Accept" header, of course, sets the types you want returned. The "q" variable tells your preference for each type. "q" is the quality, with 1.0 meaning you want this type above all, a lower value means you don't want this type as much. So in this example we want both json and xml, but we want json more.

Accept: application/json;q=0.8,text/xml;q=0.7

And remember, "Content-Type" tells the server the format of the POST data you are uploading.

Content-Type: application/json
How to tell if a variable is exactly 5 numbers?  Use a regular expression in JavaScript:

 function isVariableFiveDigits(zipCode) {
    return /^(\d{5})$/.test(zipCode);;

Why can't Firefox read my "event.srcElement"?
"srcElement" was an IE thing.  Use the standard, "event.target", instead.

function myFunc(event) {
   var target = event.target || event.srcElement;
   var myData= $(target).data('my-data'); 

 How to make an anchor tag look disabled when it is "disabled":

.myAnchorClass[disabled] {
    opacity: .5;
    cursor: not-allowed;

How to get the "data" attribute value from an element example:

   <input type="text" data-target-color="red" onkeyup="myFunc(event)" ... />

function myFunc(event) {
   var targetColor = $(event.srcElement).data('target-color');

What's the difference between a "rem" and an "em" in css?
Both set the font-size based on ancestors, but "rem" always looks at the top root element, while "em" starts looking upward through its parents to find the first one with a font-size defined.

When removing an "href" in an anchor tag (and using the 'click' attribute instead) how to make the cursor look like it's over a link:

a.myClass { cursor: pointer; }

How to stop iOS from making input elements have rounded corners that look like a button:

#MyInputId {
    border-radius: 0;

How to pass arguments to a jQuery click function:
 In a Razor page I assign event data from our ViewBag to variables to be passed to "myFunction":
  $('#myButton').click({ size: "@ViewBag.size", colour: "@ViewBag.colour" }, myFunction);

In the receiving function the variables are in the event's data object:
 function myFunction(event) {
    var size= event.data.size;
    var colour= event.data.colour;

How to trigger a form submit from JavaScript in .Net MVC:


How to make a banner stay at the bottom of the screen:

.myClass {
    position: fixed;
    bottom: 10px;
    z-index: 100;
    min-height: 100px;

How to use media queries for responsive design:

in variables.less:
@screen-sm-min:              768px;

in regular less file:
 .close-button, .close {
opacity: 1.0;
margin-top: 27px;
margin-right: 40px;

To force Visual Studio to warn you about Razor page errors during compilation, have it pre-compile those pages:
1.  Right-click on the Project and select "Unload Project".
2.  Right-click and select "Edit *.csproj"
3.  In the csproj file set MvcBuildViews to true:
4.  Right-click and select "Reload Project".

To search all files with names matching "*.shtml" and replace "http://www.fincher.org" with "https://www.fincher.org"
 find -type f -name "*.shtml" -exec sed -i "s/http:\/\/www.fincher.org/https:\/\/www.fincher.org/g" {} \;

How to get rid of some network calls in the Chrome debugger?
In the Chrome debugger, under "Network" you can exclude calls with a particular string by prefacing it with a "-".  For example, to get rid of all calls with "transport", do this: