text:
---
layout: post
title: "Signing of the stars: how much does recruiting matter in college football?"
author: "Ryan Berger"
date: "2018-08-08"
bigimg: /img/uga.JPG
output:
  html_document:
    theme: spacelab
    highlight: tango
    keep_md: true
preserve_yaml: true
---

With the start of a new college football season just a few weeks away, I've been thinking about a question I've heard for many years in one form or another: how much does recruiting matter? Like it or not, football recruiting has turned into a big business that public universities across the country are pouring millions of dollars into. Even casual fans have probably noticed that recently there's been a lot of attention paid to football recruiting on TV, websites, blogs, message boards, and social media but is it really important for on field success? Does grabbing the headlines on signing day in February lead to taking home the hardware in December and January?

The dominance of Nick Saban's Alabama teams on both the recruiting trail and the gridiron over the last decade suggests the answer to these questions is yes, but I want to go a step further and investigate the data for all 129 teams in division I to see its full effects. Using recruiting data and team records from the last ten years, let's take a look at how much recruiting matters in college football.

## The data
### Recruiting
When it comes to the best recruiting data for college football, there is no substitute for [247Sports](https://247sports.com/Season/2019-Football/CompositeTeamRankings/). Their rating system generates composite player ratings for roughly 4000 high school football players every year and creates class ratings for each team using a weighted Gaussian distribution formula of the individual player composites (Translation: 247Sports takes recruiting pretty seriously). Let's take a look at the distribution of every recruiting class rating over the last 10 seasons:

![center](https://rberger997.github.io/img/2018-07-30-cfb-project/rec_hist-1.png)

The recruiting class ratings look like a normal distribution (slightly right-skewed) with the center around 150. For the analysis, I've calculated the average class ratings for all division I teams for the last 10 years and will use these to quantify the amount of talent potential that each team has brought in.

### Wins
Since football is above all a win/loss business, it seemed like a natural choice to use wins per year as the metric for team success. This doesn't take into account strength of schedule differences between teams or Power 5 conferences vs. Group of 5 conferences but should be sufficient for a first look. I gathered the win/loss results for each team from 2008 to 2017 by [scraping](https://github.com/rberger997/rberger997.github.io/blob/master/posts-source-files/2018-07-30-cfb-project/web_scrape_sp_data.R) the data from [football outsiders](https://www.footballoutsiders.com/stats/ncaa). The distribution of annual win totals is as follows:

![center](https://rberger997.github.io/img/2018-07-30-cfb-project/Wins_histogram-1.png)

Putting these datasets together, let's look at the average recruiting class rating and wins per year for all 129 teams in division I football.

## Average recruiting by NCAA division I schools (2008-2017)

|Team                  | Avg.rec| Avg.rec_rank| Avg.W| Avg.L| playoff_apps| title_games| Nat_champ|
|:---------------------|-------:|------------:|-----:|-----:|------------:|-----------:|---------:|
|Alabama               |   303.7|          1.7|  12.5|   1.4|            4|           6|         5|
|Ohio State            |   282.0|          5.7|  11.2|   2.1|            2|           1|         1|
|USC                   |   281.9|          6.1|   9.4|   3.8|            0|           0|         0|
|Florida State         |   280.6|          5.6|  10.1|   3.3|            1|           1|         1|
|LSU                   |   277.3|          6.7|   9.5|   3.4|            0|           1|         0|
|Georgia               |   275.5|          7.3|   9.5|   3.9|            1|           1|         0|
|Florida               |   268.3|          9.3|   8.6|   4.3|            0|           1|         1|
|Texas                 |   267.1|          9.9|   7.8|   5.0|            0|           1|         0|
|Notre Dame            |   259.1|         11.3|   8.2|   4.6|            0|           1|         0|
|Auburn                |   259.1|         11.1|   8.2|   4.9|            0|           2|         1|
|Oklahoma              |   257.9|         11.4|  10.5|   2.8|            2|           1|         0|
|Michigan              |   252.3|         14.3|   7.4|   5.3|            0|           0|         0|
|Tennessee             |   247.7|         15.1|   6.2|   6.3|            0|           0|         0|
|Clemson               |   246.6|         16.2|  10.3|   3.3|            3|           2|         1|
|UCLA                  |   245.1|         16.9|   6.8|   6.1|            0|           0|         0|
|Texas A&M             |   244.6|         14.9|   7.7|   5.2|            0|           0|         0|
|Miami-FL              |   238.6|         18.0|   8.2|   4.8|            0|           0|         0|
|Oregon                |   231.3|         19.1|  10.0|   3.2|            1|           2|         0|
|Ole Miss              |   230.9|         21.3|   6.9|   5.6|            0|           0|         0|
|South Carolina        |   228.9|         21.3|   8.0|   4.9|            0|           0|         0|
|Stanford              |   224.6|         23.3|   9.8|   3.5|            0|           0|         0|
|Penn State            |   220.1|         25.1|   8.9|   4.0|            0|           0|         0|
|Arkansas              |   214.5|         26.4|   6.6|   6.0|            0|           0|         0|
|North Carolina        |   214.3|         27.4|   7.3|   5.5|            0|           0|         0|
|Nebraska              |   213.4|         27.5|   8.5|   4.7|            0|           0|         0|
|Washington            |   211.6|         28.7|   7.2|   5.8|            1|           0|         0|
|Virginia Tech         |   211.4|         27.6|   9.0|   4.4|            0|           0|         0|
|Mississippi State     |   209.5|         28.9|   7.3|   5.5|            0|           0|         0|
|Michigan State        |   208.5|         28.9|   9.3|   3.9|            1|           0|         0|
|Arizona State         |   202.6|         33.4|   6.7|   6.0|            0|           0|         0|
|Oklahoma State        |   200.8|         33.7|   9.6|   3.4|            0|           0|         0|
|California            |   200.2|         36.4|   5.5|   6.8|            0|           0|         0|
|Missouri              |   195.5|         37.0|   8.0|   5.0|            0|           0|         0|
|Pittsburgh            |   193.6|         38.2|   7.2|   5.6|            0|           0|         0|
|West Virginia         |   192.2|         38.3|   8.0|   4.9|            0|           0|         0|
|NC State              |   191.9|         41.5|   7.8|   5.2|            0|           0|         0|
|Maryland              |   191.6|         39.1|   5.2|   7.3|            0|           0|         0|
|Kentucky              |   191.1|         39.2|   5.3|   7.2|            0|           0|         0|
|Baylor                |   190.7|         38.9|   7.2|   5.4|            0|           0|         0|
|TCU                   |   190.5|         40.9|   9.8|   3.2|            0|           0|         0|
|Louisville            |   189.0|         40.6|   8.0|   4.8|            0|           0|         0|
|Virginia              |   186.7|         43.9|   4.3|   7.9|            0|           0|         0|
|Texas Tech            |   186.5|         42.7|   7.1|   5.6|            0|           0|         0|
|Wisconsin             |   186.4|         42.7|  10.0|   3.4|            0|           0|         0|
|Arizona               |   186.1|         42.9|   7.0|   5.9|            0|           0|         0|
|Rutgers               |   184.5|         44.4|   6.4|   6.2|            0|           0|         0|
|Utah                  |   182.9|         45.2|   8.6|   4.2|            0|           0|         0|
|Iowa                  |   179.1|         48.9|   8.2|   4.8|            0|           0|         0|
|Illinois              |   177.6|         50.3|   4.4|   7.9|            0|           0|         0|
|Oregon State          |   175.4|         51.2|   5.3|   7.1|            0|           0|         0|
|Georgia Tech          |   175.1|         51.0|   7.3|   5.4|            0|           0|         0|
|Colorado              |   173.4|         54.2|   4.1|   8.2|            0|           0|         0|
|Minnesota             |   173.2|         53.1|   6.1|   6.6|            0|           0|         0|
|Vanderbilt            |   170.6|         53.6|   5.1|   7.2|            0|           0|         0|
|South Florida         |   168.3|         57.6|   6.6|   5.8|            0|           0|         0|
|Northwestern          |   166.8|         56.7|   7.7|   5.1|            0|           0|         0|
|Washington State      |   166.7|         56.0|   4.7|   7.8|            0|           0|         0|
|BYU                   |   165.6|         57.7|   8.4|   4.6|            0|           0|         0|
|Kansas                |   165.3|         57.8|   2.8|   9.3|            0|           0|         0|
|Duke                  |   164.9|         58.3|   5.8|   6.7|            0|           0|         0|
|Indiana               |   164.8|         58.3|   4.3|   7.9|            0|           0|         0|
|Kansas State          |   161.1|         61.2|   7.9|   4.9|            0|           0|         0|
|Boston College        |   160.9|         61.5|   6.1|   6.7|            0|           0|         0|
|Iowa State            |   160.7|         61.4|   4.5|   7.9|            0|           0|         0|
|Syracuse              |   158.3|         63.6|   5.0|   7.3|            0|           0|         0|
|Cincinnati            |   158.2|         64.3|   7.9|   4.8|            0|           0|         0|
|Purdue                |   157.3|         64.3|   4.2|   8.1|            0|           0|         0|
|Wake Forest           |   156.6|         64.1|   4.8|   7.2|            0|           0|         0|
|Houston               |   154.7|         66.5|   8.6|   4.4|            0|           0|         0|
|Central Florida       |   154.5|         66.0|   7.8|   5.1|            0|           0|         0|
|Boise State           |   153.1|         68.3|  11.1|   2.2|            0|           0|         0|
|Marshall              |   148.4|         70.1|   7.1|   5.6|            0|           0|         0|
|SMU                   |   143.4|         72.9|   5.1|   7.5|            0|           0|         0|
|Memphis               |   141.3|         74.4|   5.5|   7.0|            0|           0|         0|
|San Diego State       |   138.4|         77.2|   8.0|   5.0|            0|           0|         0|
|Southern Miss         |   136.8|         74.7|   6.2|   6.7|            0|           0|         0|
|East Carolina         |   134.3|         80.9|   6.6|   6.2|            0|           0|         0|
|Georgia Southern      |   130.5|         88.8|   6.2|   6.0|            0|           0|         0|
|Toledo                |   130.2|         83.4|   8.0|   4.7|            0|           0|         0|
|Tulsa                 |   129.4|         84.1|   6.7|   5.9|            0|           0|         0|
|Temple                |   127.6|         84.2|   7.0|   5.6|            0|           0|         0|
|Connecticut           |   127.2|         86.7|   5.1|   7.3|            0|           0|         0|
|Western Michigan      |   125.9|         86.8|   6.7|   5.9|            0|           0|         0|
|Fresno State          |   122.5|         83.3|   6.6|   6.4|            0|           0|         0|
|Tulane                |   122.1|         90.1|   3.5|   8.7|            0|           0|         0|
|Colorado State        |   121.7|         89.6|   5.9|   6.8|            0|           0|         0|
|Old Dominion          |   121.6|        101.5|   6.5|   5.8|            0|           0|         0|
|Miami-OH              |   121.0|         97.2|   4.0|   8.2|            0|           0|         0|
|Florida International |   116.4|         90.8|   4.8|   7.5|            0|           0|         0|
|Massachusetts         |   116.2|        103.4|   2.6|   9.4|            0|           0|         0|
|Texas State           |   115.7|        100.5|   4.0|   8.0|            0|           0|         0|
|Troy                  |   115.5|         90.8|   7.1|   5.4|            0|           0|         0|
|Hawaii                |   115.4|         90.2|   4.9|   8.0|            0|           0|         0|
|Louisiana Tech        |   114.9|         91.0|   7.3|   5.5|            0|           0|         0|
|Appalachian State     |   114.8|        105.2|   9.2|   3.5|            0|           0|         0|
|Florida Atlantic      |   112.8|         89.8|   4.2|   8.0|            0|           0|         0|
|Middle Tennessee      |   111.7|         91.8|   6.8|   5.8|            0|           0|         0|
|Nevada                |   110.0|         96.0|   6.8|   6.0|            0|           0|         0|
|Western Kentucky      |   110.0|         98.4|   7.6|   5.2|            0|           0|         0|
|New Mexico            |   109.2|         96.1|   3.7|   8.6|            0|           0|         0|
|Arkansas State        |   108.7|         96.1|   7.1|   5.3|            0|           0|         0|
|South Alabama         |   108.2|        104.5|   4.8|   7.7|            0|           0|         0|
|Bowling Green         |   106.8|         98.4|   6.2|   6.6|            0|           0|         0|
|UTSA                  |   106.1|        106.2|   5.3|   6.3|            0|           0|         0|
|UNLV                  |   106.0|        100.3|   3.7|   8.7|            0|           0|         0|
|Central Michigan      |   105.3|        100.4|   6.7|   6.1|            0|           0|         0|
|UL-Lafayette          |   104.7|        101.7|   6.6|   5.9|            0|           0|         0|
|Georgia State         |   104.6|        111.8|   4.2|   8.0|            0|           0|         0|
|Rice                  |   103.9|        101.7|   5.4|   7.1|            0|           0|         0|
|UAB                   |   103.8|         98.2|   4.4|   7.8|            0|           0|         0|
|North Texas           |   103.4|        100.6|   4.3|   8.1|            0|           0|         0|
|Charlotte             |   102.5|        117.3|   2.3|   9.7|            0|           0|         0|
|Ball State            |   102.1|        102.6|   6.1|   6.3|            0|           0|         0|
|Northern Illinois     |   100.8|        101.9|   9.1|   4.4|            0|           0|         0|
|Utah State            |    99.7|        103.7|   6.3|   6.5|            0|           0|         0|
|Wyoming               |    98.9|        105.8|   5.3|   7.2|            0|           0|         0|
|Ohio                  |    98.5|        104.0|   7.7|   5.3|            0|           0|         0|
|Kent State            |    96.9|        105.7|   4.6|   7.6|            0|           0|         0|
|San Jose State        |    94.5|        100.6|   4.6|   7.8|            0|           0|         0|
|UL-Monroe             |    91.9|        108.9|   4.7|   7.5|            0|           0|         0|
|Eastern Michigan      |    91.1|        112.5|   3.1|   9.0|            0|           0|         0|
|Buffalo               |    88.2|        111.6|   4.8|   7.4|            0|           0|         0|
|New Mexico State      |    87.6|        113.8|   3.1|   9.2|            0|           0|         0|
|Air Force             |    87.6|        109.2|   7.3|   5.6|            0|           0|         0|
|Akron                 |    86.4|        113.3|   4.1|   8.1|            0|           0|         0|
|Idaho                 |    84.4|        114.6|   3.7|   8.5|            0|           0|         0|
|Navy                  |    82.0|        107.6|   8.4|   4.7|            0|           0|         0|
|UTEP                  |    82.0|        116.4|   3.7|   8.4|            0|           0|         0|
|Army                  |    76.2|        117.7|   4.5|   7.8|            0|           0|         0|

Looking at the table, it's pretty clear that the schools with higher recruiting class averages at the top of the table have a lot more success than those further down. Alabama is the clear leader in both recruiting and wins as they averaged 12.5(!) wins per year on an average recruiting rating of 303.7. This has led to a decade of dominance as the Crimson Tide have appeared in all four College Football Playoffs, six national championship games, and have taken home the trophy as national champs five times.

Additionally, 11 of the top 12 teams in recruiting average have played in at least one championship game during this time. The one exception, USC, has been in a coaching carousel for several years as a result of its failure to meet these expectations.

Looking more broadly, the average wins per year typically decreases as you move down the table. We can see this by looking at the average annual win totals for descending groups of 25 schools:

* 1-25: 8.72
* 26-50: 7.3
* 51-75: 6.26
* 76-100: 5.92
* 101-129: 5.24

This trend suggests there's a linear relationship between wins and recruiting. We can visualize this by plotting the two together and assess how strong the relationship is across all the data by adding a linear regression trendline.

![center](https://rberger997.github.io/img/2018-07-30-cfb-project/plot1-1.png)

From the plot we can clearly see the trend we observed in the table: there is a positive linear relationship that supports the idea that better recruiting leads to more wins (as we would expect). Additionally, by using a linear model we can quantify the effect that recruiting has on winning over the course of 10 seasons: the coefficient of determination (R2) is 0.38, meaning that recruiting accounts for 38% of the variance in win totals. When you consider the number of factors that determine the outcomes of 10 football seasons (coaching, strategy, injuries, etc.), 38% seems like a significant amount of influence. At the same time, it tells us that recruiting isn't everything; there is still a lot of work to be done off the recruiting trail to be successful.

It also appears from the plot that for schools with recruiting scores under 250, and especially those under 200, there is a lot of variability in win totals. In this range, there is a lot of scatter above and below the trendline and teams with very similar recruiting profiles have generated drastically different win totals. Take for example Wisconsin, Arizona, and Virginia. All three schools have averaged a 247Sports recruiting score of 186 with the Badgers averaging 10 wins per year, Arizona 7, and UVA 4.3. These differences illustrate how mid-level recruiting can lead to variable on field results and hints toward the importance of coaching and player development for teams that don't have top-end athletes.

## Elite teams are built from elite recruits
While the middle class of recruiting offers mixed results, there is one thing that is very clear from the data: the very best teams in college football are built on a foundation of elite recruting. Looking at the plot, schools that average recruiting classes above 250 on the 247Sports composite score are the ones that win national championships. This is the recruiting range where perennial powers Alabama, Ohio State, Florida State, and Oklahoma typically reside.

We can take this a step further and focus in on all the teams that have made it to the championship game but instead of looking at their 10 year averages, let's look at how well they recruited in the four years leading up to that championship game appearance. We can then use this data to build a recruiting profile of what championship caliber teams generally look like to assess current and future teams.

| Year|Champion      | Avg.rec| Avg.rank|Runner up  | Avg.rec.1| Avg.rank.1| Difference|
|----:|:-------------|-------:|--------:|:----------|---------:|----------:|----------:|
| 2008|Florida       |   274.2|      5.2|Oklahoma   |     258.6|        8.2|       15.6|
| 2009|Alabama       |   244.8|     10.8|Texas      |     260.6|        7.6|      -15.8|
| 2010|Auburn        |   235.7|     14.8|Oregon     |     206.7|       24.8|       29.0|
| 2011|Alabama       |   276.8|      4.8|LSU        |     272.6|        6.8|        4.2|
| 2012|Alabama       |   293.0|      2.4|Notre Dame |     256.2|       11.8|       36.8|
| 2013|Florida State |   278.5|      5.6|Auburn     |     259.7|       11.0|       18.8|
| 2014|Ohio State    |   278.5|      6.4|Oregon     |     241.6|       15.6|       36.9|
| 2015|Alabama       |   311.3|      1.0|Clemson    |     256.5|       13.2|       54.8|
| 2016|Clemson       |   257.0|     13.4|Alabama    |     311.9|        1.0|      -54.9|
| 2017|Alabama       |   314.4|      1.0|Georgia    |     279.0|        7.2|       35.4|

Focusing on the title game shows just how important recruiting is in bringing home a title; in the last ten championship games, the team with the higher recruiting average has won *8 of 10 times*. Additionally, only two teams won a championship with an average class rating under 250 -- 2009 Alabama and 2010 Auburn. For these two teams it's notable to point out that (1) both had the Heisman trophy winner on their team (Mark Ingram, Cam Newton) and (2) both got a bit lucky with regards to their title game opponent -- Texas QB and Heisman finalist Colt McCoy got injured on the first drive against Alabama and the 2010 Oregon team that faced Auburn took the field with by far the lowest recruiting class average (206.7) of any championship game participant over the last 10 years. The overall message is clear: to win a national championship you need elite recruiting classes or you *really* need some things to go your way.

## Looking ahead: championship contenders for 2018
So far we've been looking back at results from the last 10 years but what do these data tell us about the upcoming season? Specifically, which teams have the recruiting profile to make the championship game or win it? To adress these questions let's use the data from title game participants to define what a champion and runner-up typically looks like over the 4 years leading up to their title run:

* Champion:
    + Avg recruiting class score: **276.42**
    + Avg national class rank: **6.54**
* Runner-up:
    + Avg recruiting class score: **260.34**
    + Avg national class rank: **10.72**

Past results tell us that a team typically needs to have a four year recruiting average of 260 to make the championship game and 275 to win it. Looking ahead to the 2018 season, let's see which teams are national title contenders by these criteria.

|Team          | Avg.rec| Avg.rank|
|:-------------|-------:|--------:|
|Alabama       |   304.7|      2.2|
|Ohio State    |   298.7|      3.8|
|Georgia       |   296.1|      4.2|
|USC           |   291.9|      5.0|
|Florida State |   284.5|      5.5|
|LSU           |   279.0|      8.0|
|Auburn        |   268.2|      9.5|
|Clemson       |   267.7|     10.8|

Out of 129 division I teams, only 8 have the general recruiting profile of a champion for this year. Alabama once again leads the way with the highest recruiting average, but the margin is very close between the Tide, Ohio State, and Georgia in the top three.

This recruiting profile is by no means a predictive model but it still tends to agree with the general consensus on who the top contenders are for this season. As of this writing, the Vegas odds for these teams to win the championship are:

 * Alabama 2-1
 * Clemson 9-2
 * Ohio State 8-1
 * Georgia 10-1
 * Auburn 33-1
 * Florida State 50-1
 * USC 66-1
 * LSU 66-1

(Gamblers note: judging strictly from their odds and recruiting profiles, Auburn, Florida State, USC, and LSU look like good value bets for 2018.)

## Final Thoughts
The takeaway points from this analysis should be as follows:

* **In general, better recruiting leads to more wins.**
* **Mid-level recruiting leads to mixed results with regards to win totals.**
* **Elite recruiting is critical in competing for national championships.**
    + **To contend for championships, you generally need four years of top 10 recruiting classes.**
    + **To win championships, you generally need four years of top 6 recruiting classes.**

An important thing to keep in mind is that these results are based on a relatively small sample size (10 seasons) and ignore a lot of important factors that are involved in team success.

Also, while the recruting profiles give insight into what a champion contender typically looks like, I like to think of them as more of a tool to set expectations rather than make predictions. In this mindset, fans of all eight teams identified as championship contenders should *expect* to make a run at the title while fans of teams outside that list would be *very lucky* to see their team make the championship game. This idea of expectations based on recruiting is something I'll address further in a future post.

**This post was written in R. To see the full source, click [here](https://github.com/rberger997/rberger997.github.io/blob/master/posts-source-files/2018-07-30-cfb-project/2018-07-30-cfb-project.R)**


text:
---
title: Readings | Design Thinking | Week 2
date:<PHONE_NUMBER>453
createdAt:<PHONE_NUMBER>453
publishedAt:<PHONE_NUMBER>453
slug: readings-design-thinking
tags: ["process", "w02", "reading_response"]
---

As someone who spent the last few years as a software engineer at various product companies, there was a ton of relevance in Chapter 6 of [The Design Everyday Things](https://www.amazon.com/Design-Everyday-Things-Donald-Norman/dp/1452654123) by Donald Norman, titled "Design Thinking". Below are the highlights.

### Solve The Right Problem

The way he drew attention to "solving the correct problem" reminded my to think critically about the work of product design and not just take things at face value. This frames the challenge of what he calls "human-centered design" quite well by reminding the reader not to take business "problems" at face value and look at the bigger picture and focusing on the human element.

### The Right Number

In the section in which he discusses the advantages and disadvantages of A/B testing, he very aptly identifies some of the limitations of and benefits of the method. However, his key insight is that the "batch" sizes of test groups is perhaps the most important element. In his words about 5 being the "right" number:

> ... five people studied individuall. Then, study the results, refine them, and do another iteration, testing five different people.

There are benefits of this method, when scaled to larger groups but preserving the batch size of 5. He wisely later points out that:

> do one test of five, use the results to improve the system, and then keep iterating the test-design cycle until you have tested the desired number of people. This gives multiple iterations of improvement, rather than just one.

### Fail frequently, fail fast

In regards to the importance of iteration, he also wisely points out that rapid prototyping and testing should be the primary goal. Though quoting the now perhaps cliché "Fail frequently, fail fast" mantra, he then adds a great point, or almost a proof of the mantra:

> If everything works perfectly, little is learned. Learning occurs when there are difficulties.

This takes the old mantra, but really emphasizes why it works.

### Fundamental Levels Of Goals

Another key point is his identification of why he believes Apple succeeds at what it does: goal levels. While referencing Charles Carver, he identifies three fundamental levels that control activities:

1. Be-goals
2. do-goals
3. motor-goals

Without re-iterating the details of their respective definitions, he mentions how Appl's success with the iPod is a testament to its supporting "the entire activity involved in listening to music: discovering it, purchasing it, getting it inthe music player, developing playlists (that could be shared), and listening to the music". This in turn supports all three levels of goals for the user and thereby succeeds as a result.

license: MIT

repository: omardelarosa/website

branch_name: refs/heads/master

extension: md

gha_language: JavaScript

gha_license_id: MIT

license_type: permissive

repo_name: omardelarosa/website


text:
iPhone SMS Browser
===================

A project used to pull the sms records and contact information from the iPhone itunes backup to be used on a mac.
It serves the project files to the browser using Sinatra.
The motivation for this was that I was trying to share a particularly funny and long SMS conversation with a friend on facebook chat,
but I didn't want to type everything in. Also the iPhone doesn't display the exact time texts were sent/received for all texts,
and I'd prefer to have that when sharing the conversation.

How to use it
--------------
Backup your iPhone in itunes (do not check the box to use a password to encrypt your backup -- otherwise the app can't access your files).
execute the command `ruby server.rb` from the project directory to run the project.
The app will automatically use the newest backup created.

Browse to [localhost:4567](localhost:4567) to view your sms conversations

Click on a contact to view your message record with them.
Just like on the iPhone, sms messages are displayed in green speech bubbles, and iMessages are displayed in blue speech bubbles.

To view an easily printable or copy/pastable version of the conversation, click on the "Printer Friendly Version" link at the top of the conversation.
The printer friendly version is particularly useful if you are trying to copy/paste the conversation to a friend, because it will maintain correct formatting when
copied to your clipboard.

Internals
-----------
Within the project is an awesome set of Models using ActiveRecord to access the iPhone contacts, numbers, messages, etc and associate them.
Even though the naming scheme is not standard/preferred by ActiveRecord, the benefits of using ActiveRecord outweigh the slight configuration/fiddling around
needed to get the project to work.

By using ActiveRecord I have made the project easily extensible.  Or, if I'd like to find out the frequency with which I send
messages, to a few members of my family, that's also possible (with some additional supporting code). The point is,
 using ActiveRecord makes it easier for me to play around with cool features, and I'm happy with the result.

 Also, it was a cool way to learn more about ActiveRecord -- I ended up subclassing ActiveRecord::Base because the tables of
 interest were in two different databases: one for contacts, one for messages.

 Another interesting implementation detail- texts and iMessages for the same contact are not all stored under the same
 number/address value. What I mean by that is, say your friend's cell number is<PHONE_NUMBER> , then his contact information
 could store the number as<PHONE_NUMBER>, +13031234567, or a number of other ways. iMessages always use the standard
 +13031234567, but some texts may be stored as<PHONE_NUMBER>, some as +13031234567 and others as +1(303) 123-4567.
 It's all a bit messy, but eventually I got it to where all of my texts/iMessages were displaying correctly.

FAQ
-------------
*   Can I use this on a PC?
    The directory structure for itunes backups and itunes location is different on PCs.
    Eventually I may add support for that, but it's not high on my to-do list.

Future Improvements
-------------------
I'd like to turn it into something that I can deploy to the web for others to use to browse their text conversations online.
To that end, I'd like to add the following features:
*    Ajaxy search
*    Uploadable backups (so people can upload their sms logs and have them parsed/accessible).
*    anything else cool I feel like adding!

Credit
----------------
Original inspiration and the basic CSS -- not the css for the conversation bubbles (which was a pain to get right)-
was taken from https://github.com/joshuap/valentine
However at this point, there's no code that I reused from his original project aside from the base layout and css.

repository: eXcomm/iphone-sms

repo_name: eXcomm/iphone-sms


text:
---
title: "auditor:"
---

# auditor:

--8<-- "config_section.md"

| Valid in | |
|-----|:----:|
|[machine](instructions/machine_config.md) config files |**YES** :white_check_mark:|
|[mode](instructions/mode_config.md) config files|**NO** :no_entry_sign:|

The *auditor:* section of the machine configuration file lets you
control what events the MPF's auditor module includes in its audits.

Here's an example which is the settings we including in the default
*mpfconfig.yaml* file. (So these are the settings that are included by
default with every game you run.) Also, by default, the auditor saves
its audits to `/audits/audits.yaml` in the folder for each machine.
(Check out the documentation on the Auditor to see a sample audit log
file.)

``` mpf-config
auditor:
  save_events: ball_ended game_ended
  audit: shots switches events player
  events: ball_search_begin machine_init_phase_1 game_started game_ended machine_reset
  player: score
  num_player_top_records: 10
```

## Optional settings

The following sections are optional in the `auditor:` section of your
config. (If you don't include them, the default will be used).

### audit:

List of one (or more) values, each is a type: `string`. Defaults to
empty.

This is a list of the various types of things you want to include in
your audit file. There are currently four options:

* shots - tracks the number of times each shot has been made
* switches - tracks the number of times each switch has been hit.
* events - whether the auditor should audit certain events. (Add the
    events you want to track to the *events* section.)
* player - includes player variables (score, maybe shots or goals
    they've achieved, etc.) See the *player* section below for details.

### events:

List of one (or more) events. The device will add handlers for those
events. Defaults to empty.

A list of which events you want to audit. These are the names of any
events you want.

### num_player_top_records:

Single value, type: `integer`. Default: `1`

For player-specific variables, you have the option of track the "top"
number of each. So in the example above, since the only player item is
*score*, the auditor will track the top 10 highest scores, plus the
total count and the overall average.

### player:

List of one (or more) values, each is a type: `string`. Defaults to
empty.

A list of player variables you want to audit. The auditor will save a
certain number (configurable via the `num_player_top_records:` setting),
as well as the total number of entries and the current average.

### reset_audit_events:

List of one (or more) events. The device will add handlers for those
events. Default: `auditor_reset,factory_reset`

Events to reset audits in the machine. This is used by the service mode.

### save_events:

List of one (or more) device control events
([Instructions for entering device control events](instructions/device_control_events.md)). Default: `ball_ended`

Default: `ball_ended`

Events in this list, when posted, trigger the auditor to save its audits
to disk.

## Related How To guides

* [Auditor](../machine_management/auditor.md)

repository: missionpinball/mpf-docs

branch_name: refs/heads/main

gha_language: Python

repo_name: missionpinball/mpf-docs


text:
# Ansible Role: Hostname

#### Version: 1.0.3

[![](https://img.shields.io/badge/role-sparknsh.hostname-blue.svg)](https://galaxy.ansible.com/sparknsh/hostname)

Development of this project is managed in a private repository then pushed out to [GitLab](https://gitlab.com/sparknsh/ansible-role-hostname) and [GitHub](https://github.com/sparknsh/ansible-role-hostname) when we have a new version for you. If you have any issues please contact [sparknsh](https://www.sparknsh.com/contact?type=issue&name=ansible-role-hostname)

## Role Variables

```yaml
hostname__fqdn: "{{ inventory_fqdn }}"
hostname__hosts: []
```

#### Example

```yaml
hostname__fqdn: "{{ inventory_fqdn }}"
hostname__hosts:
  myhost.com: <IP_ADDRESS>
  yourhost.com: <IP_ADDRESS>
```

## Example Playbook

```yaml
- hosts: all
  vars_files:
    - vars/main.yml
  roles:
     - { role: sparknsh.hostname }
```

## License

MIT

## Author Information

This role was created in 2020 by [sparknsh](https://www.sparknsh.com) at [Rebel Media, Inc.](https://www.rebelmedia.io/)

repository: sparknsh/ansible-role-hostname

repo_name: sparknsh/ansible-role-hostname


text:
---
path: '/announcing-linuxdev-br-2020'
date: '2020-02-21'
title: 'Announcing linuxdev-br 2020! July 16-18 in São Paulo'
tags: ['2020', 'conference']
excerpt: '[en] Join us for share and learn about Open Source and Linux for 3 days.'
---

The [Linux Developer Conference Brazil](https://linuxdev-br.net/) is very happy to announce its 4th edition that will happen on July 16-18 in São Paulo, Brazil. The conference aims to be a meeting point for the worldwide community around technologies that form the basis of Linux systems. We invite Open Source developers, industry leaders, Linux enthusiasts, students and IT professionals for 3 days of technical content and social events. Come learn and share and if you are a beginner you have a chance to meet seasoned developers to get insight on how to start contributing.

On the 16th, the first day of the conference, we will have workshops at the University of São Paulo, then on the 17th and 18th we will be at the Rebouças Convention Center, a very central place in São Paulo, for 2 days of keynotes, talks and social events. The [registration](https://www.eventbrite.com.br/e/linuxdev-br-2020-registration-90329260249?aff=site) is already open with early bird prices until May 1st.

Also, the Call for Presentation will open soon and we invite talks proposals and workshops covering a wide range of topics related to the core of modern Linux systems.

The conference foster a diverse and inclusive environment for everyone and will promote a few initiatives in that area. Also, the [Code of Conduct](https://linuxdev-br.net/code-of-conduct/) of the event should be observed.

Follow us on [Twitter](https://twitter.com/linuxdevbr) and [Instagram](https://www.instagram.com/linuxdevbr).

repository: linuxdev-br/site

repo_name: linuxdev-br/site


text:
Builders
---

We explored some basic 3D shape types in the [primitives](primitives.md) section, but the real power of ShapeScript comes from the ability to define custom shapes.

In the [paths](paths.md) section we looked at how to define custom shapes using paths. ShapeScript has a variety of built-in commands for creating 3D shapes from paths, called *builders*:

## Fill

The most basic shape builder is the `fill` command, which creates a filled polygon from a path. Using the pentagon path we defined earlier, we can use `fill` to create a solid pentagon:

```
fill {
    path {
        for 0 to 5 {
            point 0 1
            rotate 2 / 5
        }
    }
}
```

![Filled Pentagon](images/filled-pentagon.png)

Unlike a path, a filled shape can have a color and texture, but it has zero thickness.

If a path contains multiple overlapping sub-paths, they will be filled using the [even-odd rule](https://en.wikipedia.org/wiki/Even–odd_rule). For example, the [overlapping circles](paths.md#nested-paths) example would be filled like this:

![Even-odd Fill](images/even-odd-fill.png)

## Lathe

The `lathe` command creates a 3D shape from a 2D path by revolving it around the Y axis.

To use `lathe`, you must first define a suitable path. For example, the following code defines the *profile* (one half of the outline) of a chess piece:

```swift
path {
    curve 0 0.78
    curve -0.15 0.7
    curve -0.15 0.5
    point -0.07 0.45
    curve -0.12 0.2
    point -0.25 0.1
    point -0.25 0
    point 0 0
}
```

![Pawn outline](images/pawn-profile.png)

When nested inside a `lathe` command, the path creates a solid 3D model:

```swift
lathe {
    path {
        curve 0 0.78
        curve -0.15 0.7
        curve -0.15 0.5
        point -0.07 0.45
        curve -0.12 0.2
        point -0.25 0.1
        point -0.25 0
        point 0 0
    }
}
```

![Pawn](images/pawn.png)

As with other curved shapes such as the `sphere` and `cone`, the smoothness of the lathed surface can be controlled using the `detail` command.

The path describing the profile of the lathed shape was in this case open-ended. Since the ends meet at the Y axis anyway, the resultant shape will still be closed. Open paths that do not touch the axis will produce a hollow shape with visible holes.

Lathed paths must lie flat on the XY plane, and  be positioned entirely to one side of the Y axis. Any points on the path with a non-zero Z coordinate will be flattened, and parts of the path that cross the Y axis will be clipped before lathing.

## Extrude

The `extrude` command extrudes a 2D path along the Z axis. The path therefore represents a cross-section of the final shape. The default extrusion distance is 1 unit, but it can be overridden using the `size` option or relative `scale` command (as described in [transforms](transforms.md)).

In the following example, `extrude` is used to create a triangular prism:

```swift
extrude {
    size 1 1 2 // increase extrusion distance to 2 units
    path {
        for 0 to 3 {
            point 0 1
            rotate 2 / 3
        }
    }
}
```

![Prism](images/prism.png)

You can also extrude a shape *along* another path using the `along` option. In the following example, a circle is extruded along a rounded rectangle:

```swift
extrude {
    circle
    along roundrect {
        size 5
    }
}
```

![Rounded rectangle with circle cross-section](images/roundrect-extrusion.png)

## Loft

The `loft` command is similar to `extrude`, but instead of taking a single cross-section path and extruding it by a fixed distance, `loft` accepts multiple cross-sections and then joins them together to form a solid shape.

For `loft` to work correctly, the specified paths must *not* all be located on the same plane, otherwise the resultant shape will be flat. You can either provide non-zero Z values for your path points, or use the `translate` command to space out your paths.

For example, the following code produces a prism equivalent to the extrusion example above:

```swift
loft {
    // triangle 1
    for 0 to 3 {
        point 0 1
        rotate 2 / 3
    }

    translate 0 0 2

    // triangle 2
    for 0 to 3 {
        point 0 1
        rotate 2 / 3
    }
}
```

You can also apply rotations and scaling between cross sections, to create bends or curves. For example, the following code creates a torus:

```swift
define steps 32
define radius 1 // radius of ring

loft {
    for 0 to steps {
        circle { scale 0.25 }
        rotate 0 0 -1/steps
        translate 0 0 (2 * pi * radius / steps)
        rotate 0 0 -1/steps
    }
}
```

![Torus](images/torus.png)

However, the real power of the `loft` command comes from the fact that you can use *different* cross-sections, and the resultant surface will be interpolated between them. For example, here is a shape whose cross-section is square at one end and hexagonal at the other:

```swift
loft {
    // hexagon
    path {
        point -0.5 1
        point -1 0
        point -0.5 -1
        point 0.5 -1
        point 1 0
        point 0.5 1
    }

    translate 0 0 2

    // square
    path {
        point -1 1
        point -1 0
        point -1 -1
        point 1 -1
        point 1 0
        point 1 1
    }
}
```

![Hexacube](images/hexacube.png)

You may notice that in the code above, the square face is defined using six points instead of four. In order to interpolate smoothly, it is important that all cross-sections have the same number of points. This may mean adding redundant points in some cases.

---
[Index](index.md) | Next: [Constructive Solid Geometry](csg.md)

repository: heckj/ShapeScript

repo_name: heckj/ShapeScript


text:
<!-- Copyright (c) 2020-2021 RTE (https://www.rte-france.com)                                                  -->
<!-- Copyright (c) 2020-2021 RTE international (https://www.rte-international.com)                             -->
<!-- See AUTHORS.txt                                                                                -->
<!-- This document is subject to the terms of the Creative Commons Attribution 4.0 International license. -->
<!-- If a copy of the license was not distributed with this                                               -->
<!-- file, You can obtain one at https://creativecommons.org/licenses/by/4.0/.                            -->
<!-- SPDX-License-Identifier: CC-BY-4.0                                                                   -->

# Let's Coordinate - Getting started
---
<br/>

## 1. Prerequisites
{: .orange-title}

To use Let's Coordinate, you need a linux OS with the following:

* Maven (v3.5.3)
* Java (v11.0.10)
* Docker (v18.09.9)
* Docker-compose (v1.22)
* NPM (v7.5.2)
* Node JS (v10.16.3)
* Angular CLI (v11.1.4)

**Please note**:
* It is highly recommended to use [sdkman](https://sdkman.io/) (v5.11.0 or grater) and [nvm](https://github.com/nvm-sh/nvm) (v14.11.0 or grater) to manage *Maven*, *Java*, *NPM* and *Node JS* tools versions (with sdkman and nvm, the previously mentioned tools will be automatically installed later).
* The required OperatorFabric version is **2.3.0.RELEASE** (configured by default to be used with the current version of Let's Coordinate 1.2.0.RELEASE)

## 2. Setup and run Let's Coordinate
{: .orange-title}

#### 2.1. Clone Let's Coordinate project
{: .orange-title-2}

To start Let's Coordinate, you first need to clone the *letscoordinate* git project:

```
git clone https://github.com/opfab/letscoordinate.git
```

#### 2.2. Create test branch
{: .orange-title-2}

Before starting Let's Coordinate, it's recommended to create a test branch from the latest stable release (1.2.0.RELEASE in our case).
To do this, you first need to make sure that you have the latest tag list from your remote repository:

```
git fetch --all --tags
```

Then, you can create the test branch:

```
git checkout tags/1.2.0.RELEASE -b test-letsco-1.2.0.RELEASE
```

#### 2.3. Run Let's Coordinate
{: .orange-title-2}

##### a. Prepare the environment

Before starting the *Let's Coordinate* getting started project, it is important to mention that we use the "*karate.jar*" dependency to initialize our database with required test data.

Download the latest karate jar file from [Karate github release page](https://github.com/intuit/karate/releases/) , put it in the "*opfab/prepare-opfab-env*" directory, rename it to "*karate.jar*" to use it easily.

Then, position your self in the "*bin*" directory and check that you have the right "*SERVER_IP*" value in the "*load_environment.sh*" file (this action is mandatory only if you are running *Let's Coordinate* in a remote server! If it is the case, please edit the file and replace "*localhost*" by your server IP address, else if you are testing locally, please skip this step):

```
sed -n '13,+6p' load_environment.sh
```

Finally, in the same "*bin*" directory, you should load the environment variables by executing the following command:

```
source ./load_environment.sh
```

##### b. Start the server

To start Let's Coordinate, position your self in the "*bin*" directory and execute the following commands:

```
./server.sh --first-init start
```

The *--first-init* (or -f) option (which is equivalent to the options *--build* and *--init* together) is required while testing the project for the first time.
It allows to:
* install the OperatorFabric required dependencies,
* build and deploy the Let's Coordinate docker images locally,
* send bundles and configurations to the OperatorFabric server,
* initialize the OperatorFabric database with required data (users, groups, perimeters, entities, ...)

**Please note**: With Ubuntu operation system, it is highly recommended to run the 2 scripts separately (the script ```./server.sh --build start``` and then ```./server.sh --init start```).

For next usage of the *server.sh* script, the *--first-init* option is not necessary.

To be sure that all the services are correctly started, you can try the following command:

```
./server.sh status
```

To see more about the server.sh commands and options, please try:
```
./server.sh --help
```

## 3. Use Let's Coordinate
{: .orange-title}

#### 3.1. Send a new card
{: .orange-title-2}

- Go to the following url (letsco-data-provider swagger-ui): [http://localhost:8082/swagger-ui.html](http://localhost:8082/swagger-ui.html)
- Click on *kafka-producer-controller*
- Click on *POST /letsco/data-provider/v1/kafka/json/raw-msg*
- Click on *Try it out*
- In the data body value, put the content of one of the files from the directory "*message_models/json/card_feed/*" (e.g: *ProcessSuccessful.json*, *MessageValidated_NEGATIVE_ACK.json*, ...)
- Click on *Execute*

If you open a browser and connect to application ([http://localhost/ui/](http://localhost/ui/)) with the username **user.test** and password **test**, you should see the new card in the Feed (if it is not the case, please change the timeline view or/and period to include the card's dates: timestamp or/and business period).

Feel free to test the other json samples from the directory "*message_models/json/card_feed/*"

#### 3.2. Generate a RSC KPI report
{: .orange-title-2}

- Go to the following url (letsco-api swagger-ui): [http://localhost:8088/swagger-ui.html](http://localhost:8088/swagger-ui.html)
- Click on *authentication-controller*
- Click on *GET /letsco/api/v1/auth/token*
- Click on *Try it out*
- Set **user.test** as username and **test** as password
- Click on *Execute*
- Copy the generated token (with the Bearer word)
- Click on *event-message-controller*
- Click on *POST /letsco/api/v1/upload/save*
- Click on *Try it out*
- Past the previous copied token in the *Authorization* field
- Click the "*Browse...*" button and choose the "*message_models/json/rsc_kpi_report/kpi_use_cases.json*" file.
- Click on *Execute*
- Connect to OpFab ([http://localhost/ui/](http://localhost/ui/)) with the username **user.test** and password **test**.
- Select the *"RSC KPI Report"* menu.
- Select the *RSC Service*, *Period*, *RSC* or *Region* and *Data type* and then click the *submit* button, you should see the generated RSC KPI Report.

## 4. Stop the application
{: .orange-title}

To stop the application, position yourself in the *bin* directory and run the following command:

```
./server.sh stop
```

To be sure that all the services are correctly stopped, you can try the following command:

```
./server.sh status
```

If you want to stop the application and definitely remove all docker containers, you can use the following command:
```
./server.sh down
```


text:
## GNPS Account

!!! question "I've forgotten my password, what should I do?"
    If you remember your username, please send an email to<EMAIL_ADDRESS>and state your username and request a password reset.

## Data Privacy

!!! question "Is the data I upload to analyze publicly visible?"
    Data you upload to analyze at GNPS will remain private unless you explicitly make it public. The two ways to make your data public are to create MassIVE datasets that make entire datasets public or add individual annotated MS/MS spectra to GNPS spectral libraries.

!!! question "Will MassIVE datasets that I create be public by default?"
    No, when creating a MassIVE dataset, it is not public by default. On the input form page, you are able to set a password to access the MassIVE dataset. There is a Make Public link to make your dataset open to the public and documentation can be found here here. Such a feature is very useful because users can create a MassIVE dataset prior to publication submission that is private and password protected. The MassIVE dataset link can be provided to reviewers along with the password so to provide better transparency and increase probability of manuscript acceptance.

!!! question "Will my GNPS Analysis Tasks be public?"
    No, by default, when you run an analysis at GNPS (e.g. Molecular Networking) that task will be private only to you. Each task is identified by this 32 task identifier (you can find it in the URL). If you share the URL with a collaborator, they will be able to visualize the results and explore the analysis. We recommend putting these URLs for task analyses in the methods section of your manuscripts.

## Data Organization

!!! question "How does the MassIVE data differ from the GNPS spectral libraries?"
    MassIVE datasets consist of raw data. GNPS spectral libraries consist of spectra that have been individually assigned an identification.

## Spectral Libraries

!!! question "How do I get access to the public spectral libraries?"
    They will be shared with you by default and selected automatically when performing an analysis that requires spectral libraries. This is all included in shared user speclibs. If it does not show up, then do the following.

    On the select input files popup, click on the shared files tab, and enter speclibs as an import share.

    ![Screenshot](img/faq/shared_libs.png)

!!! question "Can I create my own private spectral libraries?"
    Yes, but it is not recommended and we create these private libraries as a path to making them public. Please [contact](contact.md) administrators for further details.

## Analyzing Data

!!! question "Can I select more than one file at a time for each group in molecular networking?"
    Yes. Within each group you can select multiple files, even folders of spectra. Simply highlight the multiple files/folders you want to select and then add to the appropriate group.

!!! question "What are the advantages and disadvantages of FBMN vs Classical Molecular Networking"
    Feature Based Molecular Networking (FBMN) provides the following advantages: Area under the curve quantification, Isomer resolution, Filtration of MS/MS that come from chromatographic features, Potential inclusion of other types of edges (e.g. IIN)
    However, the downsides include: Requires feature finding pre-processing (e.g. MZMine2), Less sensitive to consider all MS/MS than classical, More parameters to set

!!! question "My Classical Molecular Networking Keeps Failing with the Error - Forcibly terminated by the computational backend"
    This is most likely the workflow uses too much memory and you have too many spectra in your analysis. Simply increase the minimum cluster size from the default 2, to either 3 or 4. This will be less sensitive but it'll make possible for you analyze your data as a first pass.

## Mass Spectrometry Types

!!! question "Does GNPS support data independent acquisition (DIA) data types such as MSe and SWATH?"
    GNPS natively does not support these types of data with large isolation windows. We recommend that these data be preprocessed so that individual molecule fragmentation can be deconvoluted with tool such as [DIA-Umpire](http://diaumpire.sourceforge.net/) or Progenesis QI (MSe) and you can find our documentation [here](featurebasedmolecularnetworking-with-progenesisQI.md).

## GNPS Account

!!! question "How can I reset my password"
    For now please go ahead and contact our admins via this [page](contact.md).

## GNPS Lexicon

!!! question "What is the definition of that word in the context of GNPS ?"
    Please refer to the [GNPS lexicon page](lexicon.md). To suggest additional definition, please open up an issue on [our GitHub](https://github.com/CCMS-UCSD/GNPSDocumentation/).

## Browser Support

!!! question "What Browsers Does GNPS Support"
    We officially test on the latest Chrome browser. Other browsers, e.g. Firefox, Internet Explorer, Opera, Edge, are not officially supported but likely will not have any issues with GNPS.

## Page Contributions

{{ git_page_authors }}

repository: CCMS-UCSD/GNPSDocumentation

gha_language: HTML

repo_name: CCMS-UCSD/GNPSDocumentation


text:
# gradebook.py
A Python-based gradebook where you can add students, teachers and manage various aspects of students.

I am currently learning Python, so this project is a way for me to expand on the language.

Down below goes into how I plan on setting up the project. This is likely to change as I learn Python more and want to implement/change various features of the application.

TO-DO | Database
I will need to store all data somewhere. I'm not sure what storage method I will use yet, but the to-do list down below is pretty ambiguous across storage methods.
- [ ] Implement a database/storage method
- [ ] Create CRUD methods for data storage

TO-DO | API
'This is a bit more in the future, but I could create a RESTful API with authentication. This way students and teachers alike can access various data from the database regarding a specific student, course or assignment.
- [ ] Implement a REST API
- [ ] Implement username and password for login
- [ ] Secure routes with proper authentication and limit what type of requests can be made to different routes

TO-DO | Classes
- [ ] Add User class
- [ ] Add Student class
- [ ] Add Teacher class
- [ ] Add Course class
- [ ] Add Assignment class

TO-DO | User Class (parent)
- [ ] Add properties
	- [ ] first_name
	- [ ] last_name
	- [ ] dob
	- [ ] id (student starts with `s_` and teacher starts with `t_`)
	- [ ] courses
- [ ] Add methods:
	- [ ] set_first_name
	- [ ] set_last_name
	- [ ] set_dob
	- [ ] set_id
	- [ ] add_course
	- [ ] remove_course

TO-DO | Student Class (inherits `User`)
- [ ] Add properties
	- [ ] assignments
- [ ] Add methods:
	- [ ] add_assignment
	- [ ] remove_assignment

TO-DO | Teacher Class (inherits `User`)
- [ ] Add properties:
	- [ ] certifications
- [ ] Add methods:
	- [ ] add_certification
	- [ ] remove_certification


text:
# Spectre Attack Implementation code on x86

Spectre attack is proposed by Paul Kocher et. al. in their research paper entitled, Spectre Attacks: Exploiting Speculative Execution at 40th IEEE Symposium on Security and Privacy (S\&P'19) in 2019. This attack exploits un-authorized access to program memery by exploiting branch prediction and using cache-based side channel attack (Flush+Reload) as covert channel. This implmenentation use same code as proposed by authors with some modifications as done by (https://github.com/crozone/SpectrePoC).

## Machine Specifications:

Intel Core i7_4770 CPU @ 3.40GHz
CPU: 8, L1d Cache: 32KB, L1i Cache : 32KB L2 Cache : 256KB, L3 Cache : 8192 KB
Ubuntu 16.04.3 LTS, Kernel: Linux 4.10.0-28-generic

## Attack

```
	make
	./spectre 180
```

Default threshold for Flush+Reload is 80 on this attack configurations, where on our machine, it is 180. You should use threshold according to your machine.

license: Unlicense

repository: Easyymaker/Cache-Side-Channel-Attacks

repo_name: Easyymaker/Cache-Side-Channel-Attacks


text:
# Yocto / OpenEmbedded Layer for Google Noto fonts.

This is a layer for installing fonts from Google's Noto fonts collections.
This layer aims to allow installing only specific font styles, since you may not want to install all available fonts due to disk space requirements.

For full documentation please see the official Google Noto fonts websites:
- https://www.google.com/get/noto/
- https://www.google.com/get/noto/help/cjk/
- https://www.google.com/get/noto/help/faq/

Note that Google seems to have more font variants than what is exposed in the website, so you might also want to look at the Git repositories as well:
- https://github.com/googlefonts/noto-fonts
- https://github.com/googlefonts/noto-cjk
- https://github.com/googlefonts/noto-emoji
- https://github.com/googlefonts/nototools

## Dependencies

OE-Core only. The recipes will simply install fonts into the filesystem. You may wish to install graphical applications that can make use of these fonts.

## Features
* Separate package for every font style for granularity and disk space savings
* Only downloads the files for the fonts you want, not the full >1GB font package
* Covers all CJK fonts

## Todos
* [ ] Add rest of the fonts
* [ ] Experiment with addung unhinted fonts that are unlisted in the main website, e.g. NotoSans-unhinted
* [ ] Set up packagegroups for commonly used groups
* [ ] Test against multiple yocto releases
* [ ] CI against Yocto / OE-Core

## Bugs, Fixes, etc

Please submit a pull request for any bugs or improvements.
I am especially looking for an example on how to implement CI for a layer (most CI stuff I find for Yocto is for testing end product, not a publicly-available layer).

repository: ssfivy/meta-noto

gha_language: BitBake

repo_name: ssfivy/meta-noto


text:
---
layout: post
title: simple_bits
date: 2012-12-10 11:42
categories: macos osx updated tips
---

This are little **bits** I frequently use and sometimes forgive.

### Enable Spotlight on encfs volumes

If you're using encfs or fuse volumes on OSX, depending on how you mount the volume, Spotlight might have problems to index on it.

Use the options **-oallow_other** and **-olocal** so that spotlight correctly indexes the mounts in Max OSX Lion and Mountain Lion.

	encfs ~/encrypted_dir ~/mount_point_dir -oallow_other -olocal

### Search in gmail:
This is how I sometimes search at gmail with multiple variables, assuming you use ***labels/folders*** at gmail.

This will search in current folder with before and after specific date, concrete email sender and subject containing the word *Alert*.

	before:2012/10/22 after:2012/09/30<EMAIL_ADDRESS>subject:ALERT

Ok, lets do it a bit more powerful, include search at anywhere in your gmail account, this means any folder. **anywhere** can be substituted by any of your mail folders.

	in:anywhere before:2012/10/01 after:2012/11/01<EMAIL_ADDRESS>subject:ALERT

And now we want the ones that are unread.

	in:anywhere before:2012/10/01 after:2012/11/01<EMAIL_ADDRESS>subject:ALERT label:unread

Find all unread mails that are not ***starred***.

	label:unread NOT label:starred

### Textedit

Change the default iCloud save preference from Textedit in OSX

	defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false

### Locate database in OSX

Been a *NIX user you might sometimes use ***locate*** when you want to find files in a system.
OSX has also this option but has to be enabled.

	locate Curls

	WARNING: The locate database (/var/db/locate.database) does not exist.

To create the database used by *locate*, run the following command:

	sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

This will take a while until database is created.

### Adding network routes in OSX

**route** version in OSX is a bit old, and does not work same as LINUX.
Adding a new route in your Mac is as follows:

	route -n add -net <IP_ADDRESS> <IP_ADDRESS> <IP_ADDRESS>
This adds network access to <IP_ADDRESS> network through gateway <IP_ADDRESS> with <IP_ADDRESS> netmask.

Now we just want to route to a certain IP address.

	route add -host <IP_ADDRESS> <IP_ADDRESS> <IP_ADDRESS>

This IP is not accessible through the default network gateway, so we add this ***route*** over another gateway to access it.

### Show Hiden Files in Finder

In the Terminal type:

	defaults write com.apple.finder AppleShowAllFiles TRUE/FALSE

depending if you want to enable or disable.
After that, remember to reload Finder

	killall Finder

From the Terminal, type

	ps aux | grep username

In the results, look for the process called **loginwindow** associated with the affected username.

Note the process ID (the first column of the output) of *loginwindow* -- for purposes of this example, assume it was 1234.  It's not elegant, but it works.


text:
## Kubernetes

In the previous labs, we learned how to run Docker containers locally. Running containers at scale is quite different and a special class of tools, known as **orchestrators**, are used for that task.

In this lab, we'll take a look at the most popular Open Source orchestration platform called [Kubernets](https://kubernetes.io/) and see how it implements Infrastructure as Code model.

## Intro

We used Docker Compose to consistently create container infrastructure on one machine (our local machine). However, our production environment may include tens or hundreds of VMs to have enough capacity to provide service to a large number of users. What do you do in that case?

Running Docker Compose on each VM from the cluster seems like a lot of work. Besides, if you want your containers running on different hosts to communicate with each other it requires creation of a special type of network called `overlay`, which you can't create using only Docker Compose.

Moreover, questions arise as to:
* how to load balance containerized applications?
* how to perform container health checks and ensure the required number of containers is running?

The world of containers is very different from the world of virtual machines and needs a special platform for management.

Kubernetes is the most widely used orchestration platform for running and managing containers at scale. It solves the common problems (some of which we've mentioned above) related to running containers on multiple hosts. And we'll see in this lab that it uses the Infrastructure as Code approach to managing container infrastructure.

Let's try to run our `raddit` application on a Kubernetes cluster.

## Install Kubectl

[Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) is command line tool that we will use to run commands against the Kubernetes cluster.

You can install `kubectl` onto your system as part of Google Cloud SDK by running the following command:

```bash
$ gcloud components install kubectl
```

Check the version of kubectl to make sure it is installed:

```bash
$ kubectl version
```

## Infrastructure as Code project

Create a new directory called `kubernetes` inside your `iac-tutorial` repo, which we'll use to save the work done in this lab.

## Describe Kubernetes cluster in Terraform

We'll use [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/) (GKE) service to deploy a Kubernetes cluster of 2 nodes.

We'll describe a Kubernetes cluster using Terraform so that we can manage it through code.

Create a directory named `terraform` inside `kubernetes` directory. Download a bundle of Terraform configuration files into the created `terraform` directory.

```bash
$ wget https://github.com/Artemmkin/gke-terraform/raw/master/gke-terraform.zip
$ unzip gke-terraform.zip -d kubernetes/terraform
$ rm gke-terraform.zip
```

We'll use this Terraform code to create a Kubernetes cluster.

## Create Kubernetes Cluster

`main.tf` which you downloaded holds all the information about the cluster that should be created. It's parameterized using Terraform [input variables](https://www.terraform.io/intro/getting-started/variables.html) which allow you to easily change configuration parameters.

Look into `terraform.tfvars` file which contains definitions of the input variables and change them if necessary. You'll most probably want to change `project_id` value.

```
// define provider configuration variables
project_id = "infrastructure-as-code"         # project in which to create a cluster
region = "europe-west1"                       # region in which to create a cluster

// define Kubernetes cluster variables
cluster_name = "iac-tutorial-cluster"        # cluster name
zone = "europe-west1-b"                      # zone in which to create a cluster nodes
```
After you've defined the variables, run Terraform inside `kubernetes/terraform` to create a Kubernetes cluster consisting of 2 nodes (VMs for running our application containers).

```bash
$ gcloud services enable container.googleapis.com # enable Kubernetes Engine API
$ terraform init
$ terraform apply
```

Wait until Terraform finishes creation of the cluster. It can take about 3-5 minutes.

Check that the cluster is running and `kubectl` is properly configured to communicate with it by fetching cluster information:

```bash
$ kubectl cluster-info

Kubernetes master is running at https://<IP_ADDRESS>
GLBCDefaultBackend is running at https://<IP_ADDRESS>/api/v1/namespaces/kube-system/services/default-http-backend/proxy
...
```

## Deployment manifest

Kubernetes implements Infrastructure as Code approach to managing container infrastructure. It uses special entities called **objects** to represent the `desired state` of your cluster. With objects you can describe

* What containerized applications are running (and on which nodes)
* The compute resources available to those applications
* The policies around how those applications behave, such as restart policies, upgrades, and fault-tolerance

By creating an object, you’re effectively telling the Kubernetes system what you want your cluster’s workload to look like; this is your cluster’s `desired state`. Kubernetes then makes sure that the cluster's actual state meets the desired state described in the object.

Most of the times, you describe the object in a `.yaml` file called `manifest` and then give it to `kubectl` which in turn is responsible for relaying that information to Kubernetes via its API.

**Deployment object** represents an application running on your cluster. We'll use it to run containers of our applications.

Create a directory called `manifests` inside `kubernetes` directory. Create a `deployments.yaml` file inside it with the following content:

```yaml
apiVersion: apps/v1beta1 # implies the use of kubernetes 1.7
                         # use apps/v1beta2 for kubernetes 1.8
kind: Deployment
metadata:
  name: raddit-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: raddit
  template:
    metadata:
      labels:
        app: raddit
    spec:
      containers:
      - name: raddit
        image: artemkin/raddit
        env:
        - name: DATABASE_HOST
          value: mongo-service
---
apiVersion: apps/v1beta1 # implies the use of kubernetes 1.7
                         # use apps/v1beta2 for kubernetes 1.8
kind: Deployment
metadata:
  name: mongo-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
      - name: mongo
        image: mongo:3.2
```

In this file we describe two `Deployment objects` which define what application containers and in what quantity should be run. The Deployment objects have the same structure so I'll briefly go over only one of them.

Each Kubernetes object has 4 required fields:
* `apiVersion` - Which version of the Kubernetes API you’re using to create this object. You'll need to change that if you're using Kubernetes API version different than 1.7 as in this example.
* `kind` - What kind of object you want to create. In this case we create a Deployment object.
* `metadata` - Data that helps uniquely identify the object. In this example, we give the deployment object a name according to the name of an application it's used to run.
* `spec` - describes the `desired state` for the object. `Spec` configuration will differ from object to object, because different objects are used for different purposes.

In the Deployment object's spec we specify, how many `replicas` (instances of the same application) we want to run and what those applications are (`selector`)

```yml
spec:
  replicas: 2
  selector:
    matchLabels:
      app: raddit
```

In our case, we specify that we want to be running 2 instances of applications that have a label `app=raddit`. **Labels** are used to give identifying attributes to Kubernetes objects and can be then used by **label selectors** for objects selection.

We also specify a `Pod template` in the spec configuration. **Pods** are lower level objects than Deployments and are used to run only `a single instance of application`. In most cases, Pod is equal to a container, although you can run multiple containers in a single Pod.

The `Pod template` which is a Pod object's definition nested inside the Deployment object. It has the required object fields such as `metadata` and `spec`, but it doesn't have `apiVersion` and `kind` fields as those would be redundant in this case. When we create a Deployment object, the Pod object(s) will be created as well. The number of Pods will be equal to the number of `replicas` specified. The Deployment object ensures that the right number of Pods (`replicas`) is always running.

In the Pod object definition (`Pod template`) we specify container information such as a container image name, a container name, which is used by Kubernetes to run the application. We also add labels to identify what application this Pod object is used to run, this label value is then used by the `selector` field in the Deployment object to select the right Pod object.

```yaml
  template:
    metadata:
      labels:
        app: raddit
    spec:
      containers:
      - name: raddit
        image: artemkin/raddit
        env:
        - name: DATABASE_HOST
          value: mongo-service
```

Notice how we also pass an environment variable to the container. `DATABASE_HOST` variable tells our application how to contact the database. We define `mongo-service` as its value to specify the name of the Kubernetes service to contact (more about the Services will be in the next section).

Container images will be downloaded from Docker Hub in this case.

## Create Deployment Objects

Run a kubectl command to create Deployment objects inside your Kubernetes cluster (make sure to provide the correct path to the manifest file):

```bash
$ kubectl apply -f manifests/deployments.yaml
```

Check the deployments and pods that have been created:

```bash
$ kubectl get deploy
$ kubectl get pods
```

## Service manifests

Running applications at scale means running _multiple containers spread across multiple VMs_.

This arises questions such as: How do we load balance between all of these application containers? How do we provide a single entry point for the application so that we could connect to it via that entry point instead of connecting to a particular container?

These questions are addressed by the **Service** object in Kubernetes. A Service is an abstraction which you can use to logically group containers (Pods) running in you cluster, that all provide the same functionality.

When a Service object is created, it is assigned a unique IP address called `clusterIP` (a single entry point for our application). Other Pods can then be configured to talk to the Service, and the Service will load balance the requests to containers (Pods) that are members of that Service.

We'll create a Service for each of our applications, i.e. `raddit` and `MondoDB`. Create a file called `services.yaml` inside `kubernetes/manifests` directory with the following content:

```yaml
apiVersion: v1
kind: Service
metadata:
  name: raddit-service
spec:
  type: NodePort
  selector:
    app: raddit
  ports:
  - protocol: TCP
    port: 9292
    targetPort: 9292
    nodePort: 30100
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-service
spec:
  type: ClusterIP
  selector:
    app: mongo
  ports:
  - protocol: TCP
    port: 27017
    targetPort: 27017
```

In this manifest, we describe 2 Service objects of different types. You should be already familiar with the general object structure, so I'll just go over the `spec` field which defines the desired state of the object.

The `raddit` Service has a NodePort type:

```yaml
spec:
  type: NodePort
```

This type of Service makes the Service accessible on each Node’s IP at a static port (NodePort). We use this type to be able to contact the `raddit` application later from outside the cluster.

`selector` field is used to identify a set of Pods to which to route packets that the Service receives. In this case, Pods that have a label `app=raddit` will become part of this Service.

```yaml
  selector:
    app: raddit
```

The `ports` section specifies the port mapping between a Service and Pods that are part of this Service and also contains definition of a node port number (`nodePort`) which we will use to reach the Service from outside the cluster.

```yaml
  ports:
  - protocol: TCP
    port: 9292
    targetPort: 9292
    nodePort: 30100
```

The requests that come to any of your cluster nodes' public IP addresses on the specified `nodePort` will be routed to the `raddit` Service cluster-internal IP address. The Service, which is listening on port 9292 (`port`) and is accessible within the cluster on this port, will then route the packets to the `targetPort` on one of the Pods which is part of this Service.

`mongo` Service is only different in its type. `ClusterIP` type of Service will make the Service accessible on the cluster-internal IP, so you won't be able to reach it from outside the cluster.

## Create Service Objects

Run a kubectl command to create Service objects inside your Kubernetes cluster (make sure to provide the correct path to the manifest file):

```bash
$ kubectl apply -f manifests/services.yaml
```

Check that the services have been created:

```bash
$ kubectl get svc
```

## Access Application

Because we used `NodePort` type of service for the `raddit` service, our application should accessible to us on the IP address of any of our cluster nodes.

Get a list of IP addresses of your cluster nodes:

```bash
$ gcloud --format="value(networkInterfaces[0].accessConfigs[0].natIP)" compute instances list --filter="tags.items=iac-kubernetes"
```

Use any of your nodes public IP addresses and the node port `30100` which we specified in the service object definition to reach the `raddit` application in your browser.

## Save and commit the work

Save and commit the `kubernetes` folder created in this lab into your `iac-tutorial` repo.

## Conclusion

In this lab, we learned about Kuberenetes - a popular orchestration platform which simplifies the process of running containers at scale. We saw how it implements the Infrastructure as Code approach in the form of `objects` and `manifests` which allow you to describe in code the desired state of your container infrastructure which spans a cluster of VMs.

gha_language: Shell


text:
# MockQueryable

[![Build status](https://github.com/romantitov/MockQueryable/workflows/.NET%20Core/badge.svg)](https://github.com/romantitov/MockQueryable/actions)
[![Build status](https://ci.appveyor.com/api/projects/status/ggdbipcyyfb4av9e?svg=true)](https://ci.appveyor.com/project/handybudget/mockqueryable)
[![Downloads](https://img.shields.io/nuget/dt/MockQueryable.Moq.svg)](https://www.nuget.org/packages/MockQueryable.Moq/)
[![Downloads](https://img.shields.io/nuget/dt/MockQueryable.NSubstitute.svg)](https://www.nuget.org/packages/MockQueryable.NSubstitute/)
[![Downloads](https://img.shields.io/nuget/dt/MockQueryable.FakeItEasy.svg)](https://www.nuget.org/packages/MockQueryable.FakeItEasy/)
[![License](https://img.shields.io/github/license/romantitov/MockQueryable.svg)](https://github.com/romantitov/MockQueryable/blob/master/LICENSE)

[![Build history](https://buildstats.info/appveyor/chart/handybudget/mockqueryable)](https://ci.appveyor.com/project/handybudget/mockqueryable/history)

Extensions for mocking [Entity Framework Core](https://github.com/aspnet/EntityFrameworkCore/) (EFCore) operations such ToListAsync, FirstOrDefaultAsync etc. by [Moq](https://github.com/moq/moq), [NSubstitute](http://nsubstitute.github.io/) or [FakeItEasy](https://fakeiteasy.github.io/)
When writing tests for your application it is often desirable to avoid hitting the database. The extensions allow you to achieve this by creating a context – with behavior defined by your tests – that makes use of in-memory data.

### When should I use it?

If you have something similar to the following code:
```csharp
var query = _userRepository.GetQueryable();

await query.AnyAsync(x =>...)
await query.FirstOrDefaultAsync(x =>...)
query.CountAsync(x => ...)
query.ToListAsync()
//etc.
```
and you want to cover it by unit tests

### How do I get started?

```csharp
//1 - create a List<T> with test items
var users = new List<UserEntity>()
{
  new UserEntity{LastName = "ExistLastName", DateOfBirth = DateTime.Parse("01/20/2012")},
  ...
};

//2 - build mock by extension
var mock = users.BuildMock();

//3 - setup the mock as Queryable for Moq
_userRepository.Setup(x => x.GetQueryable()).Returns(mock);

//3 - setup the mock as Queryable for NSubstitute
_userRepository.GetQueryable().Returns(mock);

//3 - setup the mock as Queryable for FakeItEasy
A.CallTo(() => userRepository.GetQueryable()).Returns(mock);
```

Do you prefer *DbSet*?

```csharp
//2 - build mock by extension
var mock = users.AsQueryable().BuildMockDbSet();

//3 - setup DbSet for Moq
var userRepository = new TestDbSetRepository(mock.Object);

//3 - setup DbSet for NSubstitute or FakeItEasy
var userRepository = new TestDbSetRepository(mock);

//3 - setup the mock as Queryable for FakeItEasy
A.CallTo(() => userRepository.GetQueryable()).Returns(mock);
```
### Can I extend the mock object created by MockQueryable with custom logic?
MockQueryable creates for your tests a mock object based on in-memory data, but you can also add some custome logic to it.

``` C#
var userId = Guid.NewGuid();
var users = new List<UserEntity>
{
    new UserEntity{Id = userId,LastName = "ExistLastName", DateOfBirth = DateTime.Parse("01/20/2012")},
   //etc.
};
var mock = users.AsQueryable().BuildMockDbSet();

//Aditional setup for FindAsync
mock.Setup(x => x.FindAsync(userId)).ReturnsAsync((object[] ids) =>
{
    var id = (Guid)ids[0];
    return users.FirstOrDefault(x => x.Id == id);
});
var userRepository = new TestDbSetRepository(mock.Object);

//Execution FindAsync
var user = await ((DbSet<UserEntity>) userRepository.GetQueryable()).FindAsync(userId);
```

Check out the [sample project](https://github.com/romantitov/MockQueryable/tree/master/src/MockQueryable/MockQueryable.Sample)

### Where can I get it?

First, [install NuGet](http://docs.nuget.org/docs/start-here/installing-nuget).

If you are using **Moq** - then, install [MockQueryable.Moq](https://www.nuget.org/packages/MockQueryable.Moq/) from the package manager console:

```
PM> Install-Package MockQueryable.Moq
```

If you are using **NSubstitute** - then, install [MockQueryable.NSubstitute](https://www.nuget.org/packages/MockQueryable.NSubstitute/) from the package manager console:

```
PM> Install-Package MockQueryable.NSubstitute
```

If you are using **FakeItEasy** - then, install [MockQueryable.FakeItEasy](https://www.nuget.org/packages/MockQueryable.FakeItEasy/) from the package manager console:

```
PM> Install-Package MockQueryable.FakeItEasy
```

### Can I use it with my favorite mock framework?

You can install [MockQueryable.EntityFrameworkCore](https://www.nuget.org/packages/MockQueryable.EntityFrameworkCore/) from the package manager console:

```
PM> Install-Package MockQueryable.EntityFrameworkCore
```
[![Downloads](https://img.shields.io/nuget/dt/MockQueryable.EntityFrameworkCore.svg)](https://www.nuget.org/packages/MockQueryable.EntityFrameworkCore/)

or even [MockQueryable.Core](https://www.nuget.org/packages/MockQueryable.Core/)
```
PM> Install-Package MockQueryable.Core
```
[![Downloads](https://img.shields.io/nuget/dt/MockQueryable.Core.svg)](https://www.nuget.org/packages/MockQueryable.Core/)

Then [make your own extension](https://github.com/romantitov/MockQueryable/blob/master/src/MockQueryable/MockQueryable.Moq/MoqExtensions.cs) for your favorite mock framework

repository: romantitov/MockQueryable

gha_language: C#

repo_name: romantitov/MockQueryable


text:
---
layout: msdnpost
title: Known Issue - DirectX SDK (June 2010) Setup and the S1023 error
date: 2011-12-09 12:48
author: Chuck Walbourn
comments: true
categories: [directx, dxsdk, visualc]
---
Note that the DirectX SDK is deprecated. See "Where is the DirectX SDK (2021 Edition)?" for details.

Over the past few month we've been getting reports of problems with the DirectX SDK (June 2010) setup failing for customers displaying an installation error when it gets to point of installing the "redistributable packages". This particular problem has been traced to an issue with the Visual C++ 2010 Redistributable Package version 10.0.30319 (RTM). When the 10.0.40219 (Service Pack 1) version is already present on the system, the 10.0.30319 (RTM) version returns a failure instead of a success as was expected.

The work-around for this issue is straight-forward:

(1) Remove the Visual C++ 2010 Redistributable Package version 10.0.40219 (Service Pack 1) from the system (both x86 and x64 if applicable). This can be easily done via a command-line with administrator rights:

```
MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}
```

(2) Install the DirectX SDK (June 2010)

(3) Reinstall the Visual C++ 2010 Redistributable Package version 10.0.40219 (Service Pack 1). On an x64 system, you should install both the x86 and x64 versions of the C++ REDIST. Be sure to install the most current version available, which at this point is the KB 2565063 with a security fix.

This issue is also covered by KB 2717426

Note: This issue does not affect earlier version of the DirectX SDK which deploy the VS 2005 / VS 2008 CRT REDIST and do not deploy the VS 2010 CRT REDIST. This issue does not affect the DirectX End-User Runtime web or stand-alone installer as those packages do not deploy any version of the VC++ CRT.

Windows SDK: The Windows SDK 7.1 has exactly the same issue as noted in KB 2717426.

Windows 7 Service Pack 1 / Windows 8 users: The Direct3D 10.x/Direct3D 11.x SDK Debug Layers installed by the DirectX SDK (June 2010) are not compatible with Windows 8 or Windows 7 SP1 + KB 2670838. See this post for details on installing the correct version.

Setup writers: If you are creating a deployment for your application and you are using VS 2010, it is recommended you use the Service Pack 1 version and not the RTM version to avoid this issue. You should also consider picking up the updated version of the DirectX End-User Runtime Package if you are deploying DirectX SDK components with your application, and of course fully understand the issues detailed in this earlier blog post.

SHA-512: This of course assumes you actually have an uncorrupted copy of the DirectX SDK setup package. The best way to validate this it to run:

```
certutil -hashfile DXSDK_Jun10.exe SHA512
```

The valid SHA-512 hash for the original SHA-1 signed exe is:

```
4869ac947a35cd0d6949fbda17547256ea806fef36f48474dda63651f751583e9902641087250b6e8ccabaab85e51effccd9235dc6cdf64e21ec2b298227fe19
```

The valid SHA-512 has for the SHA-256 signed exe is:

```
24e1e9bda319b780124b865f4640822cfc44e4d18fbdcc8456d48fe54081652ce4ddb63d3bd8596351057cbae50fc824b8297e99f0f7c97547153162562ba73f
```


text:
### New features

* [#29](https://github.com/rubocop-hq/rubocop-minitest/pull/29): Add new `Minitest/RefuteRespondTo` cop.  ([@herwinw][])
* [#31](https://github.com/rubocop-hq/rubocop-minitest/pull/31): Add new `Minitest/AssertEqual` cop. ([@herwinw][])
* [#34](https://github.com/rubocop-hq/rubocop-minitest/pull/34): Add new `Minitest/AssertInstanceOf` cop. ([@abhaynikam][])
* [#35](https://github.com/rubocop-hq/rubocop-minitest/pull/35): Add new `Minitest/RefuteInstanceOf` cop. ([@abhaynikam][])

### Bug fixes

* [#25](https://github.com/rubocop-hq/rubocop-minitest/issues/25): Add `Enabled: true` to `Minitest` department config to suppress `Warning: Minitest does not support Enabled parameter`. ([@koic][])

[@herwinw]: https://github.com/herwinw
[@abhaynikam]: https://github.com/abhaynikam
[@koic]: https://github.com/koic

repository: TSMMark/rubocop-minitest

repo_name: TSMMark/rubocop-minitest


text:
---
description: build
keywords: fig, composition, compose, docker, orchestration, cli,  build
menu:
  main:
    identifier: build.compose
    parent: smn_compose_cli
title: build
---

# build

```
Usage: build [options] [SERVICE...]

Options:
--force-rm  Always remove intermediate containers.
--no-cache  Do not use cache when building the image.
--pull      Always attempt to pull a newer version of the image.
```

Services are built once and then tagged as `project_service`, e.g.,
`composetest_db`. If you change a service's Dockerfile or the contents of its
build directory, run `docker-compose build` to rebuild it.


text:
# The Versioned-PROV namespace

The namespace name https://dew-uff.github.io/versioned-prov/ns# is intended for use with the PROV family of documents to represent Versioned-PROV extension.

## Attributes

### access

The attribute `version:access` in `prov:wasDerivedFrom` indicates whether the derivation was a read (`r`) or a write (`w`). The only valid values are `r` and `w`.

### checkpoint

The attribute `version:checkpoint` in `prov:wasDerivedFrom` indicates the moment a derivation occurred. It is required when the `prov:type` is `version:Reference`.

The attribute `version:checkpoint` in `prov:hadMember` indicates the moment a member were inserted or removed from the a collection.

The checkpoint can be any sortable data type (e.g., datetime, int), but it has to be consistent across all the document.

### key

The attribute `version:key` in `prov:hadMember` indicates which key/position a member represents in a collection.

The attribute `version:key` in `prov:wasDerivedFrom` indicates which key/position were accessed/changed from the collection represented by `version:collection`.

### collection

The attribute `version:collection` in `prov:wasDerivedFrom` indicates which entity was accesses/changed by the derivation.

## Types

### Add

The `version:Add` type of `prov:hadMember` indicates that a member was inserted into a list/set collection at a given checkpoint.
If `prov:hadMember` has a `version:key`, it shifts all keys that occur after the inserted `version:key`. Otherwise, it adds the element at the end of the collection.

### Del

The `version:Add` type of `prov:hadMember` indicates that a member was removed from a collection at a given checkpoint.
If a `version:key` is provided, it shifts all keys that occur after it.

### Put

The `version:Put` type of `prov:hadMember` indicates that a member was added or deleted from a collection in a given `version:key` at a given `version:checkpoint`. If the member is a placeholder or a VoidEntity, it means that the member at the specific `version:key` position was removed.

### Reference

The `version:Reference` type of `prov:wasDerivedFrom` indicates that an entity was derived from another through a binding of a reference. Thus, both entities share the same members.

### VoidEntity

The `version:VoidEntity` type of `prov:entity` represents an empty entity that can be used as member of `prov:hadMember` with type `version:Put` to remove elements from a collection.

repository: dew-uff/versioned-prov

gha_language: Jupyter Notebook

repo_name: dew-uff/versioned-prov


text:
---
layout: post
modal-id: 14
date: 2011-06-01
img-thumb: nyc-thumb.jpg
img-full: nyc.jpg
alt: Screenshot of New York website
project-date: July 2011
client: Kleeneze
category: Portfolio
tasks: Visual design, HTML, CSS, JS
excerpt: Website to support distributor incetive desination to New York
caption: Web Design
---

Website to support distributor incetive desination to New York in 2011.  I produced the visual design and front end coding for the site.

The purpose of this site was to encourage the companies' sales network to make X amount of sales in the sales period in order to get an all expenses paid trip to New York.

### What I did

Established the design concept, wrote the code and managed its deployment onto an Apache web server.

#### Update

The site is longer live as it was time based but can viewed here on the WayBack Machine internet archive.


text:
---
layout: post
navbar: Blog
title: "Meeting Agenda - March 10th, 2016"
date: 2016-03-10 12:00:00 -0400
comments: true
categories: Agenda
---

**6:00pm:**

Food and drinks served

### Introduction

A brief overview of the Ohio Information Security Forum.

### **More pfSense!**
_By: [Tom Webster](https://samurailink3.com)_

#### Abstract

Now that you've got a basic pfSense install up and running. I'll teach you how
to safely allow remote access and set up whole-home VPN.

#### Bio

Tom Webster is a Linux Sysadmin at Cincinnati Bell and part of the board for the
Ohio InfoSec Forum. He's constantly breaking, fixing, and researching things as
well as ranting over at [SamuraiLink3.com](http://www.samurailink3.com/), his
[Google Plus profile](https://plus.google.com/+TomWebster/about), and
[Twitter](https://twitter.com/samurailink3).

### **Group Discussion**
_By: Everyone_

Discuss current events in InfoSec! And by 'current events', I mean Apple.

gha_language: CSS


text:
# WordPress API Example

An example app that utilizes the WordPress API

Get the code [here](https://github.com/dhmgroup/dart-wp/blob/master/example/lib/main.dart)

repository: GreenKakadu/dart-wp

repo_name: GreenKakadu/dart-wp


text:
[![arduino-library-badge](https://www.ardu-badge.com/badge/BasicsLibrary.svg?)](https://www.ardu-badge.com/BasicsLibrary)

## Welcome to BasicsLibrary docs.
An easy to-use library for beginners with examples to start their adventure with arduino.
Please use version 1.0 for you projectss now. Version 1.1 is not developed at all.

### What is it & why you should use it.

BasicsLibrary is an open-source library for Arduino beginners. With easy to-use experience I made it. If you or your friend is having trouble with basics of arduino my library will problably help him. All you must know is how to use breadboard, connect wires and electronic componets to it. And thats all. Dont worry about source code again! With simple methods included you can just call one and focus on hardware.

### How to set up:

1. Download and install BasicsLibrary from Arduino library manager (CTRL + SHIFT + I).
2. Use the following code into your Arduino sketch:

```markdown
# #include <BasicsLibrary.h> //imports the library

# BasicsLibrary instance(4);
//Creates the BasicsLibrary instance. There must be pin number even
//if you dont must to.
```
3. And thats it! Then just use your breadboard and one of the following methods with the instance name.
ex. instanceName.blinking().

### All methods - usage and requirements.

```markdown
# btnSetup(button pin);
//Does the required setup of button.

# btn(button pin);
//Defines code of button. Must be used with the btnSetup() method.

# blinking();
//Led blinking. Uses pin from instance creation.

# unoBlinking();
//Blinks builit-in led on arduino uno.

# serial(String text);
//Starts and prints text to serial (9600 bauds.). Must be used with the string with text.

# rgbLed(int red, int green, int blue);
//RGB led blinking with all of its colors. You must define pin of all three diod pins.

# servoTurning(int dataPin);
//turns servo from 0 to 180 degrees. Must be included with OUT pin of servo. Not availibe for esp based  boards.

# displayWrite(int one, int wo, int three, int four, int five, int six, String text);
//Writes some text to display. Define connected pins (6) and text.

# wifiScan();
//Search for availibe Wifi networks around you. (ESP8266/32).

# wifiAccesPoint(String ssid, String password);
//Makes simple webserver. Define name f your network and password. (ESP8266/32).

# rtcClock();
Gets some data about real time. Works only on DS1307 rtc. Connect SCL to A5 and SDA to A4

# playCrazyFrog();
//Plays crazy frog melody on buzzer.

# playPirates();
//Play Pirates from Caribic on buzzer.

# playTitanic();
//Plays Titanic melody on buzzer.

# potenciometerPWM(int potenciometer);
//Regulates shine of led. Uses led pin from instance creation, must be defined pin of potenciometer.

# blinkNoDelay();
//Blinks led without delay method.
```

### Support or Contact

Still Having trouble with BasicsLibrary? Write me on email -<EMAIL_ADDRESS>and I can help you with that! Or visit me on my personal website - www.tomasroj.herokuapp.com. Thanks for support! PS: Dont worry to contribute!


text:
# PagerdutyEx

[![Hex.pm](https://img.shields.io/hexpm/v/pagerduty_ex.svg)](https://hex.pm/packages/pagerduty_ex)
[![Build Docs](https://img.shields.io/badge/hexdocs-release-blue.svg)](https://hexdocs.pm/pagerduty_ex/PagerDutyEx.html)
[![Build Status](https://travis-ci.org/acj/pagerduty_ex.svg?branch=master)](https://travis-ci.org/acj/pagerduty_ex)
[![Coverage Status](https://coveralls.io/repos/github/acj/pagerduty_ex/badge.svg?branch=master)](https://coveralls.io/github/acj/pagerduty_ex?branch=master)

A simple client library for PagerDuty API v2.

## Getting Started

Find the integration key for your PagerDuty account and add it to your app's `config.exs`:

```ex
# Using the literal key
config :pagerduty_ex,
  integration_key: abc123

# If you're using environment variables
config :pagerduty_ex,
  integration_key: {:system, "PAGERDUTY_INTEGRATION_KEY"}
```

The `PagerDutyEx` API has three exposed functions:

```ex
def trigger_event(%PagerDutyEx.Event{} = event) do ...
def acknowledge_event(%PagerDutyEx.Event{} = event) do ...
def resolve_event(%PagerDutyEx.Event{} = event) do ...
```

These do what you would expect, and they take an `Event` struct of the following form:

```ex
defmodule PagerDutyEx.Event do
  defstruct [
    routing_key: nil,  # Required: "Integration Key" listed on the Events API V2 integration's detail page
    event_action: nil, # Required: Supported values are "trigger", "acknowledge", and "resolve"
    dedup_key: nil,    # Deduplication key for correlating triggers and resolves
    payload: nil,      # The event details. See the Event.Payload struct below.
    images: [],        # List of images to include
    links: [],         # List of links to include
  ]
end

defmodule PagerDutyEx.Event.Payload do
  @enforce_keys [:summary, :source, :severity]
  defstruct [
    summary: nil,        # A brief text summary of the event
    source: nil,         # Hostname or FQDN
    severity: nil,       # Supported values: "critical", "error", "warning", or "info"
    timestamp: nil,      # The time at which the event was generated, e.g. 2015-07-17T08:42:58.315+0000
    component: nil,      # Component that is responsible for the event, e.g. "mysql" or "eth0"
    group: nil,          # Logical grouping of components of a service, e.g. "app-stack"
    class: nil,          # The class/type of the event, e.g. "ping failure" or "cpu load"
    custom_details: nil, # Additional details about the event
  ]
end
```

## Contributing

Contributions are welcome. If you're having trouble or have a feature request, please open an issue. If you have a bug fix or a feature to add, please fork this repository and open a pull request.

## License

MIT