No traffic shaping is needed because uplink is several times faster than what any individual user has managed to use.
The network has been fine for 3 years now. If in the future somebody misbehaves we will simply limit his port to 100 Mbps.
Note that it is not misbehaving to run some simple torrents. Plenty of people do that here. Which also shows in the graphs, our upstream is larger than downstream. It is simply not that easy to pump out a gigabit of data, not even with free bittorrenting.
I suspect that if somebody started hosting porn he would be able to saturate the link. But nobody has tried anything like that yet.
The OP does not have a "midsize" apartment complex. I am afraid he is squarly in the "small" category which will limit his options. He wont be able to afford to simply buy a fiber with gigabit. If we scale linearly from our setup, he would have a 50 Mbps upstream that trivially gets overloaded by a single user. His first step should be to find other nearby buildings to combine into a larger unit.
Dedicated bandwidth really depends on what the HOA members want. A good oversubscription is 10:1 so if 80 units want 10mpbs, 80mbps dedicated should be sufficient. Have the companies provide some sort of SLA on the bandwidth of the main feed and individual units. It's hard to predict how many tenants watch Netflix back-to-back, until the network is in place.
The interesting thing to note is that we are not just maxing out the uplink. There is no traffic shaping, everyone can use whatever they want (bittorrent too!), everyone got gigabit and the uplink is gigabit too.
Exactly. Few sites are going to want to do that. They might try what the UK government does on the ICO site (check the bar at the top): http://ico.gov.uk/. However few users is going to click yes in that bar.
ICO are clearly morons. They write this about their use of Google Analytics:
"These cookies are used to collect information about how visitors use our site. We use the information to compile reports and to help us improve the site. The cookies collect information in an anonymous form, including the number of visitors to the site, where visitors have come to the site from and the pages they visited."
I am sure this is all correct. But what about _Google_?! What are THEY using the data for? This is also the responsibility of the site owner (ICO).
The fact that the government is breaking the law does not change the law.
The danish government is a bit more knowledgeable. The danish version of these rules are very clear and easy to understand and there is no implied consent bullshit. And I think the UK version does not have implied consent either in the actual law.
They are confused. It is not possible to tell the user and at the same time not tell the user. It is very clear what you have to tell the user BEFORE setting any cookies, implied or not. So you need a landing page either way.
The problem with Google Analytics is that Google is not telling what they are going to use the data for. You can not tell the user what you do not know yourself. So it is impossible to use Google Analytics until Google change their ways.
People need to actively accept that you are tracking them. Just showing such text somewhere is not enough. Few sites are going to want people to read terms and require people to click accept before giving access to the site. Also you need to provide a way for people to opt out again (required).
You need to be specific about each cookie and what you are going to use it for. If you ever add another cookie or change the use of the cookies, you need to ask permission again. Text such as "we use a few analytics scripts" is not enough. If you are using a third party tool like Google Analytics, you need to specify everything Google is going to use the data for. Since Google wont say at this point, you simply can not in any legal way use Google Analytics at this point.
Wind and solar peaks at different times. Combining them means you need less backup. Building a super grid across Europe also helps since there will always be wind somewhere. Also the north has most wind and the south the best conditions for solar. Thermal-based solar power can produce power at night too but is only feasible in southern Europe.
As to Norway - the number of people living there is not really relevant... It is the size of the mountains:-). The short answer is yes, they can backup much of Europe.
There are few natural forests in Europe. Cutting them down and replanting trees is what we have been doing for centuries. Of course the forests can only produce a limited amount of biomass which is why we need to supplement with wind, solar, geothermal and hydropower. Combing all of these it is possible to have a 100% renewable power system. It might not even be much more expensive than nuclear and coal - but it does require more from the planners and politicians.
So far Denmark has decided to have 50% of its electrical power generated by wind by 2020. It has been calculated that by getting that number to 70% the remaining 30% could be provided by biomass produced by national sources (burning domestic waste, agricultural waste, biogas produced from droppings from the 25 million pigs and wood from forests).
Germany is in a bit of confusion right now. They decided to kill the nuclear power plants but have not taking the necessary decisions to build renewable replacements. We can only hope they will do so soon instead of building more coal power plants.
What kind of storage system can work over seasonal timescales?
Hydropower from Norway. Wind energy from Denmark (there is more wind in the winter season). Biomass from agriculture waste and forests.
The "storage" is simply saving the water in the reservoir until times where power from other renewable sources is scarce. Same with biomass (or tree) burning: You burn tree only when wind and solar energy is down.
Germany is building a new power line to Norway for the exact purpose of "storing" energy. Note that they mostly do not do "pumped storage" but it is a possibility.
It can be tracked to the same level that using NAT to hide the identity of multiple computers. Which means trivially because device profiling or simply cookies is so easy nobody is going to bother doing anything else.
Can you HONESTLY say that if someone showed you a pile of IP V6 addresses and said "One of these has a problem in either the address or the subnet" you could just pick it out on the fly?
Yes. Learn about IPv6 addresses, you can pick up a ton of information just looking at the address. First subnets (called links now) are all the same size, to do something like you ask you only need to look at half of the address. My address block is 2001:1448:201::/48 - very easy to tell if an address starts with that or not! Compare that to IPv4 subnets that requires a calculator to find the first and the last address included in the subnet (192.168.102.252/21 - give me address range please, only the most hardcore can do that in their head). IPv6 subnetting are almost always done by the nibble boundary so there is no calculation.
Just because it is hex does not mean you have to treat it that way. It is very common to simply ignore it. I can name my computers 2001:1448:201::1,::2,..,::9,::10,::11 and so on. So I just skipped 6 hexdigits there, so what? There is plenty where that came from.
Fran - Windows uses a system called privacy extension which changes your address at regular intervals. This is done exactly to prevent tracking you by your address. You still have the option to use a static address but it is not the default.
it seemed to me the biggest danger was something severing the wire and having it fall back to earth
Yes it will be like dropping 100 tons of paper from orbit. Very dangerous. It will never reach the surface before burning up though... And if it did, it would drop like leaves, slow, harmless and spread over a huge area of sea.
People seem to forget the whole point of using this still non-existing super strong material for the wire, is to have the strength even when it is stretched mind boggling long. It will have a huge surface to weight ratio. More than anything man or nature ever made before.
Notice the benchmark where Go took 30x the time the C program did to finish the benchmark?
Apparently this is a case of the C program using a mature library to do the heavy lifting. The Go program uses a slower library. Neither the C program nor the Go program actually implement the algorithm so it is a poor test of the languages and compilers. Instead it is a test of the libraries.
A practical program depends alot on libraries so I am not trying to talk down the significancy of a slow library. I am just pointing out that as a language and as a compiler the Go team is appears to be doing fairly well on the shootout. They have a much younger compiler yet they generate code that is within 2x of C. And the code size of the program is smaller in all cases, sometimes significantly smaller.
This tells me that for the 1% of my program were speed matters, I will probably be able to optimize that part to be very close to C. If necessary by avoiding using any slow libraries. For the 99% of the program I can take advantage of smaller code size, safer coding (no pointer arithmetic) and fast development.
The data I see on airline operating cost put fuel and oil at 27%. For comparison maintenance is 15% and Flight crew is 12%
I'm gonna stick my neck out and guess that an interplanetary vessel will need more maintenance on a per-flight basis than a commercial aircraft.
The idea that re-usability makes all costs except for fuel go away is just plain stupid.
Now imagine building a new airplane for every flight.... This is how space is done today. The only exception, the Space Shuttle, somehow ended up being even more expensive.
I think that your comparing the weight of the capsule to the weight of the entire space shuttle (not just the orbiter). And the space shuttle (orbiter) could (unmanned) be sent to mars to assemble a space station, and then return to earth and be use for another mission, something that the dragon capsule could not do.
Why could the dragon capsule not do this? It was in fact designed with this purpose in mind! Read about it here: http://www.webcitation.org/63bnwPQHZ
I'm pretty sure that my method is the only way to actually FORCE the system to GC
On what basis do you think this is so? System.gc() will actually force a GC. What is not guaranteed is what said GC will do about being run. Some garbage collectors have multiple phases such as reclaim objects only from the recent allocated pool while ignoring the long life pool. For this reason running the GC is _not_ going to help you much if you expect all finalizers to run. And in fact there is no way to be sure all finalizers will run. The best advice is to ignore this particular ill-thought feature of the language.
The allocate objects until you run out of memory, then deallocate, is obviously not going to force the GC to do anything about the long life pool either.
Are other languages more deterministic? Riddle me this; when you free memory in C, does the resident size of your executable decrease?
Go back and read the documentation for System.gc(). That doesn't guarantee anything. That's also what most people answer. I don't hold it against them.
Ok, here is what the documentation says:
public static void gc() Runs the garbage collector. Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.
How in your world does an implementation avoid running the garbage collector, yet uphold the statement "has made a best effort to reclaim space..." ? The language of the documentation is due to the multitreaded nature of the JVM. Fact is that System.gc() runs the GC on any JVM ever made and thats what you asked. What would happen to a multithreaded program if you tried what you suggest? Why don't you just call System.exit() while you are at it?
I assume you are arguing that other languages are more deterministic. But even C programs might have malloc return valid memory, but the moment you try to use that memory your program get killed because the OS overcommits the memory (*). Some people knows this, some don't, but it is quite useless in an interview to determine their skills as a programmer!
(*) yes I know this can be turned off if you got root on the machine. Lets assume you do not.
In my list of interview questions for people who claim to be Java experts is "How do you guarantee a Garbage Collection in Java?" The answer is, you allocate objects until you get an OutOfMemoryException. Then you delete them all and allocate one more object. That's the only way.
Actually you just call System.gc(). Seems like your knowledge of Java is quite limited.
Before 1.6 it was also the only way to tell how much space you had left on a disk too (Allocate resources until it's full)
I would fire you on the spot if you tried any such thing.
Looking at your expression I do not think I "ran" it in my head. Rather i "understood" it the same way I look at an equation.
Generally I do not find myself simulating the running of code when I look at a program. I only do that when the code is overly complicated and hard to understand. Or if it is a clever algorithm that I do not already understand.
This is even more true for functional languages. Looking at some Haskell program it is not even always clear how the computer is going to "run" it. You look at it as a set of equations.
This isn't to say that you shouldn't use operator[]. I use it all the time, because I often already know the size of the array (I use iterators far more often than operator[] though). The fact that there is no check is one of the advantages of C++, as in Java, there is always a check that can't be disabled (thus effecting speed).
Modern languages have very little overhead for boundary checks. The compiler will move the check out of loops and thus effectively optimize it away.
Version that works as intended:
scala> val filterEmail = "^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+\\.)+([a-zA-Z0-9]{2,4})$".r
filterEmail: scala.util.matching.Regex = ^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})$
scala> filterEmail.findFirstIn("example@example.co.uk").isDefined
res2: Boolean = true
scala> filterEmail.findFirstIn("example@example.ticket").isDefined
res3: Boolean = false
scala> val filterEmail = "^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$".r
filterEmail: scala.util.matching.Regex = ^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$
scala> filterEmail.findFirstIn("example@example.co.uk").isDefined
res0: Boolean = true
Seems like he does...
But then he also accepts the .ticket domain:
scala> filterEmail.findFirstIn("example@example.ticket").isDefined
res1: Boolean = true
Lets fix his code so it does what he thinks it does:
(moved to next post becase slashcode does not like regex and prevents posting)
No traffic shaping is needed because uplink is several times faster than what any individual user has managed to use.
The network has been fine for 3 years now. If in the future somebody misbehaves we will simply limit his port to 100 Mbps.
Note that it is not misbehaving to run some simple torrents. Plenty of people do that here. Which also shows in the graphs, our upstream is larger than downstream. It is simply not that easy to pump out a gigabit of data, not even with free bittorrenting.
I suspect that if somebody started hosting porn he would be able to saturate the link. But nobody has tried anything like that yet.
The OP does not have a "midsize" apartment complex. I am afraid he is squarly in the "small" category which will limit his options. He wont be able to afford to simply buy a fiber with gigabit. If we scale linearly from our setup, he would have a 50 Mbps upstream that trivially gets overloaded by a single user. His first step should be to find other nearby buildings to combine into a larger unit.
Dedicated bandwidth really depends on what the HOA members want. A good oversubscription is 10:1 so if 80 units want 10mpbs, 80mbps dedicated should be sufficient. Have the companies provide some sort of SLA on the bandwidth of the main feed and individual units. It's hard to predict how many tenants watch Netflix back-to-back, until the network is in place.
Here is the MRTG for an apartment complex with 1600 apartments (approx 5000 people) and free to use internet for them all: http://bolignet.farummidtpunkt.dk/cgi-bin/mrtg-rrd.cgi/fiber.html
The interesting thing to note is that we are not just maxing out the uplink. There is no traffic shaping, everyone can use whatever they want (bittorrent too!), everyone got gigabit and the uplink is gigabit too.
Exactly. Few sites are going to want to do that. They might try what the UK government does on the ICO site (check the bar at the top): http://ico.gov.uk/. However few users is going to click yes in that bar.
ICO are clearly morons. They write this about their use of Google Analytics:
"These cookies are used to collect information about how visitors use our site. We use the information to compile reports and to help us improve the site. The cookies collect information in an anonymous form, including the number of visitors to the site, where visitors have come to the site from and the pages they visited."
I am sure this is all correct. But what about _Google_?! What are THEY using the data for? This is also the responsibility of the site owner (ICO).
The fact that the government is breaking the law does not change the law.
The danish government is a bit more knowledgeable. The danish version of these rules are very clear and easy to understand and there is no implied consent bullshit. And I think the UK version does not have implied consent either in the actual law.
They are confused. It is not possible to tell the user and at the same time not tell the user. It is very clear what you have to tell the user BEFORE setting any cookies, implied or not. So you need a landing page either way.
The problem with Google Analytics is that Google is not telling what they are going to use the data for. You can not tell the user what you do not know yourself. So it is impossible to use Google Analytics until Google change their ways.
People need to actively accept that you are tracking them. Just showing such text somewhere is not enough. Few sites are going to want people to read terms and require people to click accept before giving access to the site. Also you need to provide a way for people to opt out again (required).
You need to be specific about each cookie and what you are going to use it for. If you ever add another cookie or change the use of the cookies, you need to ask permission again. Text such as "we use a few analytics scripts" is not enough. If you are using a third party tool like Google Analytics, you need to specify everything Google is going to use the data for. Since Google wont say at this point, you simply can not in any legal way use Google Analytics at this point.
Why is killing ad-tracking "blowing it up"? Are you sure it is not you that is illiterate? Try reading up on the subject...
They did not ban cookies. They are banning tracking. Not the same thing.
Cookies are ok when necessary for the functionality of the website. Login cookies, webhops and so on are all ok.
Yes login cookies are ok. So are cookies for implementing an online webshop and so on.
It is Google and their ad-tracking that is getting run over by this. Good riddance.
Wind and solar peaks at different times. Combining them means you need less backup. Building a super grid across Europe also helps since there will always be wind somewhere. Also the north has most wind and the south the best conditions for solar. Thermal-based solar power can produce power at night too but is only feasible in southern Europe.
As to Norway - the number of people living there is not really relevant... It is the size of the mountains :-). The short answer is yes, they can backup much of Europe.
There are few natural forests in Europe. Cutting them down and replanting trees is what we have been doing for centuries. Of course the forests can only produce a limited amount of biomass which is why we need to supplement with wind, solar, geothermal and hydropower. Combing all of these it is possible to have a 100% renewable power system. It might not even be much more expensive than nuclear and coal - but it does require more from the planners and politicians.
So far Denmark has decided to have 50% of its electrical power generated by wind by 2020. It has been calculated that by getting that number to 70% the remaining 30% could be provided by biomass produced by national sources (burning domestic waste, agricultural waste, biogas produced from droppings from the 25 million pigs and wood from forests).
Germany is in a bit of confusion right now. They decided to kill the nuclear power plants but have not taking the necessary decisions to build renewable replacements. We can only hope they will do so soon instead of building more coal power plants.
What kind of storage system can work over seasonal timescales?
Hydropower from Norway. Wind energy from Denmark (there is more wind in the winter season). Biomass from agriculture waste and forests.
The "storage" is simply saving the water in the reservoir until times where power from other renewable sources is scarce. Same with biomass (or tree) burning: You burn tree only when wind and solar energy is down.
Germany is building a new power line to Norway for the exact purpose of "storing" energy. Note that they mostly do not do "pumped storage" but it is a possibility.
If it was it was a good one - you are wrong :-) That is a /21 meaning the last octet in the netmask is all cleared...
It can be tracked to the same level that using NAT to hide the identity of multiple computers. Which means trivially because device profiling or simply cookies is so easy nobody is going to bother doing anything else.
Can you HONESTLY say that if someone showed you a pile of IP V6 addresses and said "One of these has a problem in either the address or the subnet" you could just pick it out on the fly?
Yes. Learn about IPv6 addresses, you can pick up a ton of information just looking at the address. First subnets (called links now) are all the same size, to do something like you ask you only need to look at half of the address. My address block is 2001:1448:201::/48 - very easy to tell if an address starts with that or not! Compare that to IPv4 subnets that requires a calculator to find the first and the last address included in the subnet (192.168.102.252/21 - give me address range please, only the most hardcore can do that in their head). IPv6 subnetting are almost always done by the nibble boundary so there is no calculation.
Just because it is hex does not mean you have to treat it that way. It is very common to simply ignore it. I can name my computers 2001:1448:201::1, ::2, .., ::9, ::10, ::11 and so on. So I just skipped 6 hexdigits there, so what? There is plenty where that came from.
Fran - Windows uses a system called privacy extension which changes your address at regular intervals. This is done exactly to prevent tracking you by your address. You still have the option to use a static address but it is not the default.
it seemed to me the biggest danger was something severing the wire and having it fall back to earth
Yes it will be like dropping 100 tons of paper from orbit. Very dangerous. It will never reach the surface before burning up though... And if it did, it would drop like leaves, slow, harmless and spread over a huge area of sea.
People seem to forget the whole point of using this still non-existing super strong material for the wire, is to have the strength even when it is stretched mind boggling long. It will have a huge surface to weight ratio. More than anything man or nature ever made before.
Notice the benchmark where Go took 30x the time the C program did to finish the benchmark?
Apparently this is a case of the C program using a mature library to do the heavy lifting. The Go program uses a slower library. Neither the C program nor the Go program actually implement the algorithm so it is a poor test of the languages and compilers. Instead it is a test of the libraries.
A practical program depends alot on libraries so I am not trying to talk down the significancy of a slow library. I am just pointing out that as a language and as a compiler the Go team is appears to be doing fairly well on the shootout. They have a much younger compiler yet they generate code that is within 2x of C. And the code size of the program is smaller in all cases, sometimes significantly smaller.
This tells me that for the 1% of my program were speed matters, I will probably be able to optimize that part to be very close to C. If necessary by avoiding using any slow libraries. For the 99% of the program I can take advantage of smaller code size, safer coding (no pointer arithmetic) and fast development.
Disclaimer: I have never used the Go language.
The data I see on airline operating cost put fuel and oil at 27%. For comparison maintenance is 15% and Flight crew is 12%
I'm gonna stick my neck out and guess that an interplanetary vessel will need more maintenance on a per-flight basis than a commercial aircraft.
The idea that re-usability makes all costs except for fuel go away is just plain stupid.
Now imagine building a new airplane for every flight.... This is how space is done today. The only exception, the Space Shuttle, somehow ended up being even more expensive.
I think that your comparing the weight of the capsule to the weight of the entire space shuttle (not just the orbiter). And the space shuttle (orbiter) could (unmanned) be sent to mars to assemble a space station, and then return to earth and be use for another mission, something that the dragon capsule could not do.
Why could the dragon capsule not do this? It was in fact designed with this purpose in mind! Read about it here: http://www.webcitation.org/63bnwPQHZ
I'm pretty sure that my method is the only way to actually FORCE the system to GC
On what basis do you think this is so? System.gc() will actually force a GC. What is not guaranteed is what said GC will do about being run. Some garbage collectors have multiple phases such as reclaim objects only from the recent allocated pool while ignoring the long life pool. For this reason running the GC is _not_ going to help you much if you expect all finalizers to run. And in fact there is no way to be sure all finalizers will run. The best advice is to ignore this particular ill-thought feature of the language.
The allocate objects until you run out of memory, then deallocate, is obviously not going to force the GC to do anything about the long life pool either.
Are other languages more deterministic? Riddle me this; when you free memory in C, does the resident size of your executable decrease?
If you use brk(2) it will.
Go back and read the documentation for System.gc(). That doesn't guarantee anything. That's also what most people answer. I don't hold it against them.
Ok, here is what the documentation says:
public static void gc()
Runs the garbage collector.
Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects.
How in your world does an implementation avoid running the garbage collector, yet uphold the statement "has made a best effort to reclaim space..." ? The language of the documentation is due to the multitreaded nature of the JVM. Fact is that System.gc() runs the GC on any JVM ever made and thats what you asked. What would happen to a multithreaded program if you tried what you suggest? Why don't you just call System.exit() while you are at it?
And while we are nitpicking about subjects, that you clearly does not know too much about, your way does not guarantee anything either. During edge cases the JVM might give up and just quit. This happens if more than 98% of the CPU time is spent on garbage collection. Such as when some idiot allocates alot of small objects when close to out of memory... http://stackoverflow.com/questions/2863984/duration-of-excessive-gc-time-in-java-lang-outofmemoryerror-gc-overhead-limit
I assume you are arguing that other languages are more deterministic. But even C programs might have malloc return valid memory, but the moment you try to use that memory your program get killed because the OS overcommits the memory (*). Some people knows this, some don't, but it is quite useless in an interview to determine their skills as a programmer!
(*) yes I know this can be turned off if you got root on the machine. Lets assume you do not.
In my list of interview questions for people who claim to be Java experts is "How do you guarantee a Garbage Collection in Java?" The answer is, you allocate objects until you get an OutOfMemoryException. Then you delete them all and allocate one more object. That's the only way.
Actually you just call System.gc(). Seems like your knowledge of Java is quite limited.
Before 1.6 it was also the only way to tell how much space you had left on a disk too (Allocate resources until it's full)
I would fire you on the spot if you tried any such thing.
Looking at your expression I do not think I "ran" it in my head. Rather i "understood" it the same way I look at an equation.
Generally I do not find myself simulating the running of code when I look at a program. I only do that when the code is overly complicated and hard to understand. Or if it is a clever algorithm that I do not already understand.
This is even more true for functional languages. Looking at some Haskell program it is not even always clear how the computer is going to "run" it. You look at it as a set of equations.
This isn't to say that you shouldn't use operator[]. I use it all the time, because I often already know the size of the array (I use iterators far more often than operator[] though). The fact that there is no check is one of the advantages of C++, as in Java, there is always a check that can't be disabled (thus effecting speed).
Modern languages have very little overhead for boundary checks. The compiler will move the check out of loops and thus effectively optimize it away.