The Internet, ISPs, And Net Neutrality

On 26 February 2015, the FCC adopted new rules on regulating the Internet:

Today, the Commission—once and for all—enacts strong, sustainable rules, grounded in multiple sources of legal authority, to ensure that Americans reap the economic, social, and civic benefits of an Open Internet today and into the future. These new rules are guided by three principles: America’s broadband networks must be fast, fair and open—principles shared by the overwhelming majority of the nearly 4 million commenters who participated in the FCC’s Open Internet proceeding.

Except, that’s not quite right. The rules don’t regulate the Internet itself; they regulate Internet Service Providers, or ISPs. But before we can understand why, we must first understand what the Internet is.

The Internet

The Internet is a global system of interconnected computer networks that use the standard Internet protocol suite (TCP/IP) to link several billion devices worldwide. It is a network of networks that consists of millions of private, public, academic, business, and government networks of local to global scope, linked by a broad array of electronic, wireless, and optical networking technologies. (ref)

You may not realize it, but you probably already have such a network in your own home. If you have as little as two devices (e.g. a computer, tablet, or phone) that can communicate with each other to share files, then you have a network. That network is probably connected to a larger network — your ISP. Thus, in turn, your personal in-home network is a part of the Internet.

This is how the Internet is built. Hundrends, and thousands, and millions of these networks joining together form what we recognize as the Internet. But the real definition is a bit simpler. The Internet has a backbone:

The Internet backbone may be defined by the principal data routes between large, strategically interconnected computer networks and core routers on the Internet. These data routes are hosted by commercial, government, academic and other high-capacity network centers, the Internet exchange points and network access points, that interchange Internet traffic between the countries, continents and across the oceans. Internet service providers, often Tier 1 networks, participate in Internet backbone exchange traffic by privately negotiated interconnection agreements, primarily governed by the principle of settlement-free peering.

“But wait,” you may be saying, “if the backbone is comprised of ISPs, then that means the new FCC regulations govern the Internet!”

Maybe, to an extent. But the ISPs that make up the backbone aren’t the same sort of ISP that you or I interact with on a daily basis — the guys that are really being regulated.

Internet Service Providers

An Internet service provider (ISP) is an organization that provides services for accessing, using, or participating in the Internet. Internet service providers may be organized in various forms, such as commercial, community-owned, non-profit, or otherwise privately owned. (ref)

There are multiple “tiers” of ISPs. The ISPs you and I deal with are known as Tier 2, and sometimes Tier 3, providers. The Tier 1 networks form the true core of the Internet. Tier 1 is not targeted by the new regulation.

Tier 2 and 3 are referred to as “broadband providers” in the FCC press release. These are the ISPs that offer consumer level Internet connections at “broadband” speeds. True, the relative broadband term could be applied to the connections between Tier 1 networks, but no one does. Indeed, the press release spells this out on page 3 in plain English:

First, the Order reclassifies “broadband Internet access service”—that’s the retail broadband service Americans buy from cable, phone, and wireless providers—as a telecommunications service under Title II. This decision is fundamentally a factual one. It recognizes that today broadband Internet access service is understood by the public as a transmission platform through which consumers can access third-party content, applications, and services of their choosing.

In other words, the ISPs we regular Joe Schmoe consumers do business with are common carriers. The ISP doesn’t provide the content, they simply provide access to the content. They “carry” your request for a resource to the resource provider and then “carry” the resource back to you.

Net Neutrality

Net neutrality is the name given to the concept that the Internet is a realm of free speech and open innovation, and that these freedoms should be protected from those who stand to lose a lot of money due to them. That is, speech and innovation are content that comprise the Internet.

What happens when an ISP also has a major content business? They prioritize their own content and make it difficult to acquire the content that isn’t theirs. This isn’t conjecture. We have real data that proves this happens:

Netflix and Comcast graph

So, the ISP who is supposed to be providing you agnostic access to the Internet per your agreement with them is doing anything but that.

For several years those who care about the free speech and open innovation that got us to where we are today with the Internet have been trying to get Congress to “fix” the problem. Such efforts have been one of the many casualties of the contentious Congresses in recent years.

The Regulation

Thus we arrive at the regulation adopted by the FCC on 26 February 2015. After failing to enact meaningful rules in 2010, the FCC has used its independent agency power to re-classify broadband ISPs as common carriers. But do they really have that power? According to the laws created by Congress they do:

The Federal Communications Commission (FCC) is an independent agency of the United States government, created by Congressional statute (see 47 U.S.C. § 151 and 47 U.S.C. § 154) to regulate interstate communications by radio, television, wire, satellite, and cable in all 50 states, the District of Columbia and U.S. territories.

It has been recognized since at least 1999 that the Internet’s jurisdiction crosses all physical borders: county, state, national, and international. If the FCC’s mandate is to regulate communications across interstate borders, and the Internet is the greatest form of communication in human history, then the FCC has jurisdiction over it (within the U.S.).

But what did the FCC do? They did the bare minimum necessary to keep broadband ISPs from stifling the Internet:

  • Classify broadband ISPs as common carriers under Title II of the 1935 Communications Act
  • Banned blocking of, or degrading, content
  • Banned instituting bandwidth caps for the sole purpose of revenue generation
  • And established an allowance for network management to prevent overall network degredation

“But Title II is what makes telephone companies collect extra taxes!” That may be, but not in this regulation:

Some Title II opponents tried to convince the FCC that Title II would bring $15 billion in new user fees per year, causing millions of households to stop subscribing to Internet service.

That’s simply not true, the FCC said. “The Order will not impose, suggest or authorize any new taxes or fees,” the commission said. The moratorium on Internet taxation will continue, as required by Congress. Today’s order does not require broadband providers to contribute to the Universal Service Fund (USF), which subsidizes telecommunications projects in underserved areas.

Summary

There are plenty of people opining that this regulation will lead to content control. That just doesn’t follow from anything I’ve outlined in this post. The net neutrality regulation adopted on 26 February 2015 merely establishes the authority of the FCC to regulate “broadband Internet access service” in such a manner as to keep access to all content open, regardless of the provider.

Guild Wars 2 And Magic Find

Luck1

Account-wide magic find is increased by consuming Essence of Luck. Essence can be acquired by salvaging fine or masterwork items. Magic Find is also increased through achievement rewards.

Magic Find2

Magic Find is both an account bonus and a character attribute that increases the chance to receive higher-quality loot from slain foes.

The above descriptions are for game mechanics in Guild Wars 2. Basically, as Luck increases so so does Magic Find (MF). But MF is confusingly reported in-game as a percentage, e.g. 22% or 130% (all the way up to 300%).

If you’re like most people, you’d assume that at 100% MF every piece of loot you find would have magic properties. That notion is as incorrect as the representation. A character’s MF percentage is a weight, similar to a weighted average, that affects which loot table will be used to determine the loot “found” by that character.

So, to better understand this weird “100% Magic Find doesn’t mean every found piece of loot is magical” situation, let’s go through a plausible scenario for how it works.

Assume you have a GW2 character with 100% MF and you’ve just induced a loot decision that involves the following tables:

  1. Junk
  2. Common
  3. Rare
  4. Exotic

Tables 1 & 2 contain zero items with magic properties, table 3 contains only items with “average” magic properties, and table 4 contains items with very desirable magic properties (i.e. you really want to draw from table 4). Each table contains ten total items. Once a table is chosen, a random item will be picked from that table as the loot item. We’ll now theorize a possible mechanism by which MF could work in GW2 under this scenario.

We want to draw from a single loot table so we need to eliminate three of our choices. A simple way to do that is to merely use a PRNG to pick a number between 1 and 4. But let’s try to be a little more “fair.” We have 4 choose 2 possible combinations of tables, for 6 combinations in total:

A. 1 & 2
B. 1 & 3
C. 1 & 4
D. 2 & 3
E. 2 & 4
F. 3 & 4

Now let’s assign a weight to each of these groups based on our assumed 100% MF:

A. 10%
B. 15%
C. 20%
D. 20%
E. 20%
F. 15%

Now we can use some PRNG to pick one of our groups, but also factor in the given chance that group will be chosen (e.g. 10% for group A). Whatever scheme we devise, it is clear that there is still a significant chance the group we choose will include a loot table with zero magical items in it. Regardless, once we have picked a group we will then eliminate one of the two tables and choose from the remaining table.

Let’s assume that our algorithm landed on group B. Factoring in our MF again, we could assign a weight of 30% to table 1 and 70% to table 3. Now we would use our PRNG again to pick the table to use, again factoring the weights (.3 and .7). And then, finally, we would use a simple, non-weighted, PRNG to pick an item from the chosen table.

It should be clear that there is still a very significant chance that we will pick from a table that has zero magical items. Thus our assumed 100% MF does not guarantee that the loot item will be magical.

Personally, I think “Magic Find” should be labeled “Luck” in the game. It would make a little more sense than 100% MF resulting in non-magical loot drops.

Java 8’s Lambda Expressions

Java 8 has introduced serveral good things. Perhaps my favorite of the
list are the lambda expressions. They go a long way toward catching Java up
to JavaScript (oh the irony), but I ran into an issue when attempting to use
them; an issue that frustrated me enough to write this. I’d like to note up-front
that this irritation came about because I was using Java’s lambdas without
first fully understanding them. Regardless…

The first opportunity I had to really use a Java lambda came about when writing
a couple toString() methods. Let’s look at the first one, the one that had me
thanking the Java 8 gods:

public class Foobar {
  private final Map<String, String> values = new HashMap<>();

  // Implementation
  // ...
  // ...
  // ...

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();

    this.values.forEach(
      (k, v) -> sb.append(
        String.format("[%s : %s]\n", k, v)
      )
    );

    return sb.toString();
  }
}

It may not seem like much, but the lambda got rid of a boring for loop:

for (String k : this.values.keySet()) {
  sb.append(
    String.format("[%s : %s]\n", k, this.values.get(k))
  );
}

So, yay, it made generating a string from a HashMap a little easier and
quicker to type. Now let’s look at another toString() method. This one will
render the fields of the class individually instead of a single map of values:

public class Foobar {
  private final String foo = "bar";
  private final String bar = "baz";
  // more fields
  // ...
  // ...

  // Implementation
  // ...
  // ...
  // ...

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();

    Formatter format = (a, b) -> {
      sb.append(String.format("%15-s: %s", a, b));
      return null;
    };

    format("foo", this.foo);
    format("bar", this.bar);

    return sb.toString();
  }

  private interface Formatter {
    Function format(String a, String b);
  }
}

I find that to be rather silly. It’d be shorter to simply add a new private
method to the class that will accept the two parameters and return a formatted
string. But that doesn’t make any sense because the format function is only
relevant to the toString() method.

Unlike other languages where lambdas are pure first-class
functions[ref], the lambdas in Java 8 are a bit clunky. They’re still great,
but I find this limitation to be very annoying.

In summary, Java 8 has lambda expressions (yay!) but they could be better (boo!).

Inversion Of Control & Dependency Injection With Node.js

A Google+ discussion has led me to write this post. In the discussion the question of whether traditional Node.js modules are better than using an Inversion of Control (IoC) container and the Dependency Injection (DI) pattern.

If you’ve written, or reviewed, any sizable project in Node.js then you’ve surely seen code like the following:

var foo = require('../some/parent/dir/foo');
// ... 
// ...

If you’re project is small, say two or three files, this works well. Refactoring isn’t a problem since the changes will be few. But any larger than that, and refactoring becomes a chore. Okay, so maybe refactoring isn’t that big of an issue. What if you’re a proponent of test driven development? Chances are you want to test individual components separate from their dependencies. With the above method of importing dependencies that sort of separation is very difficult if not impossible during testing.

“Well duh, you should be separating those things out into modules” you say. Sure, that works for stuff like a random picker module, a wrapper for a third party service, or your own templating mechanism. But the core domain of your application is specific to the application. It doesn’t make sense to break it out into separate modules. The same is true of the controllers, services, and so on.

That’s where IoC and DI shine. And Node.js has a very easy to use IoC and DI library in Electrolyte. Electrolyte allows you to decouple your dependencies from the file system (at least much better, anyway) while still utilizing the traditional Node.js require function and module pattern.

An example of using Electrolyte to solve this problem is too involved for this post. So I wrote a sample project. The project shows the two ways in which Electrolyte can be used:

  1. As a simple hash of component locations and a component loader
  2. As an automatic dependency injector

Give the project a read. I think you’ll find that DI actually cleans up the code, makes it much more robust, and easier to maintain.

Veterans Day

Veterans Day. It’s become another one of those days where all the social medias light up with easy to post messages and reshares. It’s sort of like the birthday wishes people send you on that thing. They didn’t know it was your birthday, but the website told them it is so they post a quick “happy birthday” on your page and forget about it. Of course, this doesn’t apply to every one and every post; but it does for the majority. It’s why I actually call people on their birthday, or send them a more direct, personal, message, and why I don’t join in the “hey it’s X day!” crowd.

But someone I play video games with decided to write why he is not fond of today, and what it really means to him. I think it shows why people should really think about their actions on days like today (or even every other day). So I got his permission to repost it here.

I am leaving his name off of this quote. If he wants to identifiy himself, he can do so in the comments before they close (30 days from posting).

Quote (no alterations made):

How I ended up in and what I thought of Desert Storm

I joined the military like many even now… not out of some misguided sense of patriotism, but because I was extremely poor. If I was going to get money for college I needed help.

So I went to the recruiters and researched everything about the branches that had college money. I settled on the Army. Mainly because the Army was well not the Navy. Pissing my father off to no end as he was a Navy Seal when they were still called frogmen. Laos, Cambodia, etc.

I took the ASVAB Armed Services Vocational Aptitude Battery. Like a SAT, ACT, or MCATs but slightly simpler. a 6 hour test that tested your ability to do math, spacial reasoning, understand words and phrases, and a coding section. I am a member of MENSA, on some scales I have a 155 others a 165 I.Q. So this test was almost a laugh. I spent 3 of the 6 hours doodling in the margins of my paper. When caught the drill sargent took my papers and graded them finding only one wrong answer in the whole test. And I even proved the question was wrong not my answer. He pulled me out of the testing area and sent me back to the recruiter for assignment in a MOS Military Occupational Specialty.

There were only three mos’s that received the combined military and Army college funding if you enlisted. Infantry, Artillery, and Armor. I had already decided that I wanted the most metal between myself and what ever enemy I could think of. So I chose Armor. 19K Armor Crew member of a M1A1 Abrams tank.

But before my recruiter would let me sign the contract designating my wish, he had a surprise. A man named Lynch in a suit wanted to talk to me. Apparently noone had ever aced the ASVAB.

Here in the US it used to be that the NSA, CIA, and FBI had to answer a direct question of who they were working for IF phrased properly. When Mr. Lynch wouldn’t or couldn’t answer my query I declined his insistant invitation to work for his organization.

So having signed my paperwork signing a contract to do my duty. I shipped off to Fort Knox, KY. Home of the gold depository. Home to the Armor Training school. Instead of doing Basic training, then being trained as a “tanker”. They put me through One Station Unit Training (OSUT) I learned to be a soldier and a tanker at the same time.

Just 3 days before graduation from my training, my orders already made out for a stint in Germany. Everything changed… Saddam Hussain, yet another man my own government had lead into power. Decided to invade Kuwait, having failed to invade Iran for over a decade. Anyone remember the Iran/Contra Scandle?

My parents and Grandparents came to the graduation, because of the nature of what was about to happen. I had stepped into a moral quagmire of serealism. I had my graduation ceremony, visited with my family for a hour then boarded a C-130 Cargo plane to fly to Ft. Stewart, GA.
But you say that’s not Iraq…

Ft. Stewart is home to the Rapid Deployment force. Four brigades of heavy mobile infantry and armor. Each brigade has 6 battalions, each battalion has 8 companies. I arrived and processed in and drew my gear in one fell swoop. I saw Georgia for 2 hours before flying direct to Saudi Arabia. We ran off the plane with our weapons loaded not knowing if our plane would be attacked. Less than 24 hours from graduation I was at war.

The build up had began and the only troops that were there before me were the Seals and one battalion of Marines. Aug. 1990.. I turned 21 that mid Sept.

A high estimate shows the Iraqi Army capable of fielding one million men and 850,000 reservists, 5,500 tanks, 3,000 artillery pieces, 700 combat aircraft and helicopters; and held 53 divisions, 20 special-forces brigades, and several regional militias, and had a strong air defense. They were veterans, having waged war with Iran for the last decade or more. This was not a insurgent war. This was real men trained hard. But with a weak heart. Ours is a volunteer force. Theirs was predominately transcripts, All men in Iraq at the time were expected to serve a term in the military. So doctors, lawyers, and other ordinary men who didn’t want to be there but out of fear of a homicidal tyrant were forced to serve or die or have their families suffer, or both.

on Feb. 14th I was sitting on the front of my tank leaned against the turret eating and listening to a BBC news report when I saw glimmers of reflected light from high in the sky.

There above me were b-52’s escort by f-16’s, f-14’s, f-15’s, f-18’s you friggin name it it was in the air. I was in the diamond shaped neutral zone some 500 miles inland, technically already in Iraq. 2 mins later I heard a hours worth of thunder. Not sporadic like boom boom boom. I mean one steady hour long explosion. We had already started ditching our civilian gear. If it wasn’t (G.I.)General Issue it was gone. I was doing the start-up for the thermal viewer and checking my bore sights. But I didn’t need it for another month. The air war had started, but not the ground war.

Mar. 1990 Just after the air war started my Sargent the gunner for the tank came down with appendicitis. And because it was the brigade XO’s (Executive Officer: 2nd in command, Lt. Colonel)
They held an all out, every man, gunnery to see who would be his new gunner. You guessed it, me.

First thing you will learn about me and one of the reasons I have suffered from moral issues about this time in my life… When I give my word, I give you my honor. I may have battled in my head the reasons we were there. But, while I was there, I was the best at it I could be.
We spent the next month doing the same drills we had been doing for the last 8+. Only now I was in the gunner’s seat.

Ground war…

We were so prepared, you could shave with how sharp we were. Just as the sun was starting to think about rizing we crossed in mass. The dim light hiding the dust clouds of our fast approach.

An M1A1ip (improved: 10 more tons of depleted uranium and chobum armor, a beefed up 1500hp jet turbine engine.) Will do 55 mph across rough terrain and still be able to hit anything between it and the horizon. Thermal sights set to a 1 degree of tempature difference means a enemy tank glows like a star. You can even read the painted numbers on a enemy tank. T-72m’s their turrets fly through the air like a frying pan when a 120mm Sabot round APFSDS (Armor Piercing Fin Stabilized Discarding Sabot)

A depleted Uranium dart about the diameter of a quarter flying at 5 miles a sec.

This is what a shot sounds like.

TC Tank Commander: “Gunner sabot tank 2 o’clock”
Me, Gunner: “Loader Sabot three round repeat”
Loader “Sabot Three rounds”
Gunner: “Tank acquired 2 o’clock”
Loader: “Clear” meaning the 1st round was loaded and he was clear of the breach.
TC: “Fire”
Everyone: “Fire”

Squeeze the trigger and the front three road wheels come off the ground and a heart stopping thunderous boom resounds.

Hit the point where the turret meets the body of the tank… And flip flip thud 4 men dead, next tank…

55 tanks in 5 days, I don’t remember how many APC’s, or trucks. I don’t even want to do the math anymore.

I killed men who didn’t want to fight. I killed for oil. And I was good at it. I still hate myself for this. Don’t get me wrong I understand your thanks, it just feels wrong to me in more ways than I can express with words. I feel a dichotomy I am proud of my service, I am proud of those who do serve. I am sickened that anyone has to serve at all. No one comes out the same. If they do they weren’t there.

I am not dominated by my veteran status. I will always have PTSD, but I have dealt with my moral issues and may regret the lessons learned. But I would never give up the person I am now to take them back. I just wish more could be enlightened without the experience.
After I returned to the states, I had plenty of time to think about what I did and saw.

The thing about Garrison is you don’t do the same thing as you do in combat at least not all the time. I had my MOS changed twice after D.S. First I changed to a PLL clerk (Parts and Load List) Thats’s the order and return clerk for a company level motorpool. The guy responsible for making sure things get tracked, ordered, returned For the entire company’s vehicles. We had early 286 PC’s with 5 1/4 in floppy drives, and for the time a whooping 10 gig harddrive. The internet was available but mostly as a email service between computers. I was convinced there was a better way to integrate the forms I filled out ad finium could be put onto the computer and sent to everyone that needed it and would only have to be filled out once. I submitted my idea to the DARPA (Defense Advanced Research Projects Agency) That’s how I got involved in Database languages. You might think I requested this move. But I hadn’t I made a decision while under fire back in Desert Storm that kinda ended my military career before it really began. My Tank Commander on the first day of fighting went catatonic he was one minute giving orders and doing his job the next just open mouthed and unresponsive. So I 100mph taped (duct tape) him so he couldn’t touch anything when he woke up I didn’t want him to start shooting us or other tanks should he be delusional.

Well I was a Private First Class (PFC) he was a Lt. Colonel, We got through the day he was removed from the tank sent back to Saudi and was “decided to resign his commission” A heroic act to some and a dangerous thought to all my future commanders. No matter what I did after that there was always blockades in my way because they thought I was a rebel. Which I was I was a free thinking evolved human. With a sense of honor and duty that didn’t completely conform.

(if your looking for my unit on the map we were the green leaf on a red background)

24th Infantry Division
operation_desert_storm

Next time you want to say to someone “thank you for your service,” or whatever else, take a moment to consider how that person might feel about what you say. Yes, you mean well, but they could very well have had to do some tragic things during that “service” that do not sit well with them. And your kind words may not have the effect you wanted them to. So maybe talk to that person first. Get an idea of how they feel before you just blurt out the in vogue patriotism of the day. If you determine they’d be receptive to it, go for it. Otherwise, just offer your understanding (or lack thereof as the case may be).