Git Flow

Git or "directed acyclic graph" branch-based development is the maintaining of source code version history not just by file alone, but by a cryptographically unique snapshot of every file in your currently selected "working branch" at a point in time (commit).

This style of team development allows for the development of features that are isolated for easy plug-in/roll-back and integration of snapshots (commits) via merging of branches.

Developers need to beware of stepping on each other's toes (or working on the same files) as this can lead to merge conflicts.


For small business, corporate enterprise and all manner of sprawling code bases, Git is the best tool currently (March 2018) available to help manage the continuous change going on within your application source code.

Statistical Variance and Standard Deviation

Variance and standard deviation are measures of how spread out a distribution of values is. In other words, they are measures of variability within a population (all possible values) or a within a sample (a subset of the population of sufficient size to warrant statistical analysis). Standard deviation and variance, in conjunction with other statistical methods (ANOVA, F-test, T-test, etc.), are used in data analysis models to determine whether, within a sample or population, certain values or correlation between one or more values are statistically significant.


The important distinction: a standard deviation is expressed in the same units as the mean is, whereas the variance is expressed in squared units



Reference: https://stats.stackexchange.com/questions/35123/whats-the-difference-between-variance-and-standard-deviation


Functional Programming

"pass functionality as an argument to another method, such as what action should be taken when someone clicks a button. Lambda expressions enable you to do this, to treat functionality as method argument, or code as data."




Loan Amortization

What is Amortization?

Webster's dictionary defines amortization as "the systematic repayment of a debt." There are two general uses to amortization: paying off a loan over time, or spreading the cost of an expensive and long-life item over many periods.



*Depreciation: the amortization of tangible assets

Where can we find the data?

There are myriad resources to get data from a variety of domains (insurance, population, health, geography, weather, sports, etc.). You can get the data in .csv form or through API calls.

Here are a few to jump-start your data-oriented application:

Financial: https://fred.stlouisfed.org/search?st=csv

Baseball: http://www.baseball-databank.org/

Soccer: https://www.soccer24.com/team/apia-tigers/84SKUunL/

Government: https://www.data.gov/

Public: https://github.com/awesomedata/awesome-public-datasets

GIS: https://gisgeography.com/best-free-gis-data-sources-raster-vector/

Google Maps API: https://developers.google.com/maps/documentation/directions/


Reference: https://www.quora.com/What-is-the-best-financial-data-source-in-CSV-file-format


Patterns Simpl: Facade

Simplified interface to the overall functionality of a complex subsystem.

For example, a mortgage application is the facade to the subsystem of more complex entities: credit, bank and loan. The .NET Framework is an interface to the more complicated subsystems that lie beneath System.IO, System.Data, etc.



Reference: http://www.dofactory.com/net/facade-design-pattern

Patterns Simpl: State Machine

State Machine is simply an object design that keeps track of the various states that an object can assume. For example:


Patterns Simpl: Template Method

This pattern simply descibes the design of an interface or base class (if implementation details common to all child objects). The base interface or abstract/virtual class is the "Template". 




Patterns Simpl: Abstract Factory

This pattern describes the creation of new objects through the assembly of various interchangeable parts defined by interfaces.





ANOVA

ANOVA, short for "Analysis of Variance", is a set of mathematical models that can be used to analyze the differences among group means (ie. dispersal, or "distribution" of averages within a group).

You can easily calculate ANOVA in R as follows (when file.choose()  prompts you, you should open up a .csv dataset, in this case I used a file of crime statistics on the C:\ drive):





data = read.csv(file.choose()) #select your .csv
attach(data) #attach so you don't need to explicitly reference
data.aov = aov(district~crimedescr) #choose your x and y variables and get ANOVA
summary(data.aov) //ANOVA Summary stats
plot(data.aov)


For an (important/deeper) understanding of the numbers and formulas used to calculate an ANOVA Summary, just walk through one or all of the ANOVA reference links below.

It is relatively simple math- all you need is (1) the Hypothesis or question and (2) the data. Then using tools like R, Minitab, Mathematica, etc.- you can analyze the test results and draw conclusions and infer meaning from the data.


References:

http://www.graziano-raulin.com/tutorials/stat_comp/man1way.htm

http://www.mathandstatistics.com/learn-stats/hypothesis-testing/one-way-anova-by-hand

https://www.statmethods.net/stats/anova.html

Symmetric Encryption

Symmetric encryption is used in electronic communication as a means to:

(1): Take visible-to-humans data

(2): Scramble the plaintext data with a mathematical byte-rearranging cipher algorithm (unlockable only via a secure cryptographic key) to make it unreadable/invisible-to-humans while it’s being stored on a disk or transmitted over a network

(3): Unscramble the encrypted data with the required cryptographic key when it’s needed, making it visible-to-humans, but only for the key-holding recipient(s).

Encryption's Purpose: it enhances security by limiting data loss even if access controls are bypassed. For example, if the database host computer has vulnerabilities and a hacker obtains sensitive data, that stolen information might be useless if it is encrypted.




Reference: https://stackoverflow.com/questions/10168240/encrypting-decrypting-a-string-in-c-sharp

Patterns Simpl: Proxy

Provide a surrogate or placeholder for another object to control access to it.



The above example illustrates how a paper check is proxy for a transaction on your bank account. Another example is thumbnail images of videos on Fb or Twitter which, when you click on them, open up the more resource-hungry actual video content.

Reference: https://sourcemaking.com/design_patterns/proxy

Patterns Simpl: Iterator

Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

The essence of this pattern is that when implemented correctly, you can easily iterate through a collection of complex objects in a uniform manner (ie. IEnumerator, IEnumerable in .NET) without having to know the details of the type of object in the collection.





Reference: https://www.google.com/searchq=iterator+pattern+defined&oq=iterator+pattern+defined