Interesting debate. Not new, but still interesting.
If Twitter does not comply with Turkish law, it is considered natural, since Twitter is based in the US of A and thus not governed by Turkish law. When BETonSPORTS did not comply with American law, their CEO, David Carruthers was arrested in 2006 when in transit to Costa Rica and the following year, founder Gary Kaplan was arrested in the Dominican Republic and extradited to USA — all this despite BETonSPORTS was based in the UK and thus not governed by American law.
20 TB is an awful lot of data for backing up over the net.
What I do is backing up over the net to my brother's NAS. (He lives in another country.) I use rsync and it works like a charm. It is a bit of a bother when I have been taking a lot of pictures but as it works in the background and is traffic shaped with low priority, it is manageable. I've got a fairly slow 1Mbps/6Mbps connection, so it takes some time. 20 TB would take the better part of a year, but since I do it incrementally as I get the data, it has been manageable so far. The Raspberry Pi server at my brother's replicates it to a friend's NAS as they both have 10/10 Mbps lines.
I keep a local copy on a Raspberry Pi with a couple of USB drives, just for the fun of it.
Worst case scenario that my house burns down or similar total catastrophe: My brother copies my data to an external disk and sends that by courier to me. Downtime around 24 hours.
And, obviously it is fairly easy to restore individual files over the net.
I know Linux is all about freedom, especially freedom of choice, but is The Linux Foundation doing anything actively to encourage consolidation instead of fragmentation to avoid the situation Randall Munroe describes in xkcd?
The current situation: Distributions galore, a profusion of system initialization versions from simple to incomprehensible, a plethora of desktop metaphors (probably stopping this year and next year from being The Year of the Linux Desktop),...
The best thing to do is communicate your doubts (with functional and technical arguments) and document every step.
Some years back I was hired as technical consultant for a public tender. I dealt with the head of the department that needed the solution and did my work independently of the CTO. After the usual pre-qualification round, we had about five or six companies lined up for the tender proper.
I wrote the Requirement Specification and sent it to the CTO for approval. It came back with exactly ten demands for changes and not one of them made sense, being purely technical requirements. I wrote a memo to the CTO countering each of the ten changes — with a copy to the department head. The CTO wanted a meeting to discuss the issues. The department head and I attended the meeting, which had seven people from the IT department attending (but strangely, not the CTO). I once again countered each change and the IT people seemed to come around in the end.
A couple of days later the department head called me in and said that I had to give the CTO something, at least concede on one point. After reminding the department head that all the changes demanded were for specific ways of solving the problem (i.e. purely technical) and that a Requirement Specification should be purely functional, I had to find the one that was least likely to cause actual harm.
In the end I chose to include one of the CTO's requirements, stating that "the solution should be based on a relational database", hoping that none of the companies would use other types of databases. I changed the wording, informed the CTO and the department head (in writing, naturally), still emphasizing that I thought it was not the best idea and that it potentially could stop one or more of the companies from bidding. The CTO now approved the Requirement Specification and it was duly sent off to the pre-qualified companies.
Shortly after, one of the companies told us they had to opt out as their database was not relational but rather object orientated. The department head sent me a furious note asking me why we had included that requirement. I calmly told him, with a copy of the previous correspondence, that it was the CTO's requirement and that I had warned him at the time.
It did, luckily, not have any influence on my future work for that department, but the CTO only lasted about six months in all before discreetly being replaced.
Having a setup with a number of Windows PCs (some family members cannot live without it due to DOCX files from school/work) as well as a number of Linux PCs and servers in three locations in two countries, I have set up a number of scripts to handle backups between the locations.
The PCs (i.e. laptop/desktop computers) have an icon for backing up to a remote server. This is done on demand via rsync started from scripts (bash or BAT files) to one of the three servers. The servers replicate internally to each other via cron jobs that start rsync (via a script) every hour. I could have set up automatic backups via cron on the PCs, but have chosen to do it on demand to save bandwidth.
This is the main backup of stored items such as multimedia.
For own-produced files like essays, stories, presentations, etc. I have set up a time-machine-like system using perl and the rsync --link-dest option to create a new directory structure if there are any changes since the previous version. The --link-dest option creates hard links to unchanged files, which means that it is essentially an incremental backup and yet preserves the structure of the source system for each new version. This setup has proven itself useful inasmuch that we can go back to previous versions of our files fairly easily, although that functionality has not yet been wrapped up in nice scripts or fancy graphics like Apple's product.
With a little tweaking, this setup can support encrypted storage in each location, making it possible to store private data without giving other family members access to the stored information.
Oh, and one last bit of information: The storage in each place is a NAS box with RAID.
I find many of these threads fascinating as a non-USA citizen and think the government of the USA with their information gathering agencies should consider the impact their activities have on the rest of the world — after all, the United States of America represent less than 4% of the world's population... but hey! who cares about a measly 96+% of the people of the world?
It seems to me that USA has a holier-than-thou attitude where anything in USA's interest is allowed and anything against USA's interests is illegal. If Snowden (USA) shares intelligence information with The Guardian (UK), it is illegal; if NSA (USA) shares intelligence information with GCHQ (UK) it is perfectly legal... er, what?!?
Lastly, more as an example of the attitude of the USA government than because it has anything directly to do with Snowden et al: If somebody creates a website that is perfectly legal in their home country (like creating a gambling site) but illegal in USA, that person cannot enter USA or any of its territories without the risk of arrest, whereas if somebody from USA creates a website that is perfectly legal in their home country (like a website advertising prescription drugs) but illegal in many other countries, that would not normally have any impact on their travel in those countries.
... Uhh, durr, how would you like it if your neighbor just built a tall treehouse in his yard and stared at your house all day! These treehouses have to be regulated!...
Not quite a proper analogy. There is a natural restriction on the number of neighbours you have, which reduces the risk of somebody watching you and makes it difficult for non-neighbours to peep into your garden. With drones you can do your peeping from a public road or maybe even from home. The laws in many (most?) countries make it illegal for people to look into your property and outlaws publication of pictures of your property and people there taken without your consent. If a neighbour invades your privacy and you see it, you know who to pursue, whereas a drone could be impossible to trace.
Think about the consequences if drones become ubiquitous, cheap and long range: Lindsay Lohan (replace name with any suitable celebrity) would not be able to get a tan in her back yard with the drones flitting around and covering the sun.
When I was working (in the EU) for a huge international company based in the US, I had a similar experience and when I realised that my normal contact person could do absolutely nothing, I slowly crawled up the corporate ladder by asking my contact for the details of his manager, whom I contacted. Nothing happened and I asked for the next higher level... no result. At the third level up, though, it started to happen and after several phone calls, E-mails and a couple of nicely phrased letters, I got my money... after three more months, making it almost nine months in all until payment.
I never got any of the late payment penalty invoices paid though - they never pay late payment fees as a corporate policy, I was told.
I think software development, apart from the most basic programming, is an inherent trait that cannot be learned -- much the same as playing an instrument. I played in a school orchestra and one of the other musicians played the French horn. He could get the basic tones out but had no sense of beat and could not play syncopes or counterpoint, no matter how much we helped him.
Programming is a mix of skills ranging from "language" skills, where the programmer needs to understand:
- The syntax of the programming language
- The semantics of the programming language
The programmer also needs to know how to "interface" and thus understand:
- The interaction with the OS
- The interaction with storage systems
- The interaction with networking systems
- The interaction with the presentation layer (this includes communicating with the user)
- The limitations of each subsystem
And lastly the programmer has to solve the problem and therefore needs to understand:
- The problem
- The solution
- The different ways of achieving the solution and select the best in the circumstances
- What can go wrong at every step and catch each possible error in a meaningful way that does not break the functionality
On top of this, any seasoned programmer knows a number of "tricks", methods and algorithms, and can select the best for the current job. The list is probably not even complete, but the best I could do at short notice.
Many of the above skills can be learned, but some are just beyond many, if not most, people like understanding the semantics of the programming language (Perl is notorious in this respect) and the intricacies of the interaction with the subsystems (like how a program can fail miserably when ported from *NIX-type systems where filenames are case sensitive to Windows where they are not), to name two. And coming up with a solution to even simple problems is impossible for many -- believe me, I have seen quite a few failing. What can go wrong and how to catch it is a challenge for even the most seasoned programmer -- it is near-impossible to learn this if you do not have the "gift".
I think everybody would agree that the data should be encrypted, but often the problem with encryption is access to the data. If the server-side application stores the encryption key, this key could potentially be found (maybe through a vulnerability) and thus give access to the entire database.
Best practice is to encrypt each record with a unique key. This key could be generated by some unique identifiers per user like Visible User ID (maybe E-mail address) and Password and Hidden User ID (different from the visible and generated independently from it) and Android ID.
To create the database entry:
1. Collect the information to store
2. Key = Hash(Visible User ID, Password, Hidden User ID, Android ID)
3. Send Visible User ID and Key to a receive-only system with as little an Internet Surface as possible (i.e. one that is next to impossible to hack into, if done correctly) -- This information is used retrieve the user data for analysis and such
4. Store the information in the more accessible database encrypted with the key
To retrieve the data from a user's application:
1. Collect Visible User ID, Password, Hidden User ID and Android ID
2. Key = Hash(Visible User ID, Password, Hidden User ID, Android ID)
3. Use the key to retrieve the necessary data
To retrieve the data from the inside:
1. Use the User ID to Key data to decrypt the data
... that eight hours work a day should be enough in normal circumstances to balance work/sleep/family/leisure/commute/health/...
That said, I worked for a short while as a consultant on a survey ship in connection with oil exploration. As you were confined to the ship for as long as you were on-board (obviously), they had made it twelve hour shifts, 8 to 8. That worked quite well as they had two weeks on-board and two weeks off. Two weeks at home with the family. So not only was the pay good, but the compensation for the family "deprivation" was sufficient to actually keep people interested.
I had an experience with really long working hours when another customer of mine had a problem: An employee had made a circuit board as an extension to their office computer and the company had a commitment to install this board before the end of the week, only it did not work! I worked for more than 40 hours straight to make the board work and presented the working board and updated software in the morning to a manager, who just said, "OK, drive out to the customer and install it." I politely declined, telling him that I was not driving anywhere in my condition. In the end the manager chauffeured me there and back, and the installation was a success.
There were times during the nights where I was doubting I would ever get through and it was not top productivity all the time, that is for sure -- but on the other hand, the company was generally extremely supportive and still on my top-five list of companies I have had as customers.
One of the fields where mathematics have definitely intersected with all types of serious programming is runtime analysis of algorithms and programs.
I know that computers today are magnitudes faster than the early days and that most western households have more computing power in their house than was available in the whole world some fifty years ago, but the problems we try to solve have grown even further and yet we expect the response times to be reasonable for everything we want to do.
One problem that just came to mind is navigation: That little box on the windscreen is actually searching through millions of roads to find the optimum route between two points and still we expect it to take less than a minute.
At university (much too many years ago), I did a program to perform symbolic math. It was written in Algol (should give you an idea of which millennium) and could optimise and present almost any formula in different ways, it could calculate the value of the formula given values for all variables and differentiate the given formulas, and even perform limited integration by applying a few strategies.
I am afraid that the boxes of punched cards have been lost some years back and I am working (very slowly) on a new version using a more recent programming language, Perl.
Can we please (pretty please!), once and for all stop using the term "pirate" instead of "copyright infringement" or maybe "illegal copying" (if you want to get a slightly harsher tone) — especially for headlines and story blurbs!?!?!
I know you know, but still: Pirates are people that get what they want on the high seas, normally using violence or threats of violence. Let us not play into RIAA/MPAA/FACT/...'s hands by using their propaganda language.
And you are right, "The Copyright Infringement Bay" has not got the same sound to it as "The Pirate Bay".
I have some years ago emigrated and live abroad, which has given me an opportunity to use servers in three different locations in two countries. At home, at my brother's and at a friend's.
My Linux servers back up automatically with a homebrew Time Machine-like functionality based on rsync. It consists of a script and a configuration file with information of what files and directories to backup/not backup. The structure is fairly simple and has worked well for a very long time now.
The mail servers back up any mail in the mail directories to each other, but overwrites/deletes as needed instead of the TM-type functionality.
The family Windows machine is backed up manually with an rsync-based BAT-file whenever I feel like it (which is rather often) to one of the local servers which propagates the backup through the TM script to one of the overseas servers, which again propagates it to the other overseas server.
All in all it seems to be sufficiently redundant (three copies of all relevant data in less than three hours) and sufficiently dispersed more than 600 miles between the farthest points and no sites closer than about 200 miles.
Obviously, I reciprocate the service for my brother and my friend.
I would be rather worried if my ADSL connection got past 50 ms for the first hop after the router/modem, but that said, the real clincher (at least to me) is Voice over IP like SIP phones and, well, Skype -- a latency beyond about 150 ms end-to-end makes it difficult to "duplex" properly (i.e. interrupt the other without too much frustration) and 300 ms is near the edge of tolerable.
For gaming (and real-time financial transactions;-), the answer is: Less is more!
What you fail to mention is that this only works if you have a benign dictator at the helm, like Linus Torvalds -- a person who can cut through all the requests for half-baked solutions and unmaintainable, untested code.
In many companies, the one at the helm is more a despot than a dictator -- and worse yet, the decision-maker is not at all technically minded. Shudder!
This assumption goes wrong in a number of places, of which some obvious are:
1. Parents have the time to school their children
2. Parents have the inclination to do it
3. Parents have the capability to do it. (How many know parents whose maths is non-existent or whose spelling is beyond comprehension?)
4. The parent/child relationship works towards learning and not against it. (Think obstinate teenager here.)
I am sure there would be many other problems too, like very few parents have learned the tips and tricks a teacher has.
I have not read all the comments, but it seems like most regards the scenario: Company A (somewhere in the high-salary parts of the world) employing a (different) company, B, (somewhere in the cheaper-salary parts of the world) to do something for them. This can be very difficult for all the reasons stated above, but there are actually alternatives that -- to a certain extent -- make sense.
I used to work for a very large, multinational consultancy and they did what other, large companies could do: They established a subsidiary in India and used that for a multitude of activities including software development and hosting.
They obviously established a management structure in India that reflected the company's goals and values, but they also did the very smart thing to second the Indian employees to other subsidiaries around the world like USA and Europe. This gave the Indian employees a practical insight into the culture and corporate culture of these places, and provided them with a much valued network of colleagues around the world. It was a learning experience for the American and European people too, experiencing these (often extremely) hard-working and frugal people.
I have no actual figures to back this up, but I got the impression that the initial turnover of people were fairly high as some of the Indian people could not readily adapt to the somewhat different work ethics in America and Europe.
From what I know, this scheme seems to work well. It is not as cheap as a pure outsourcing solution to one of the really low-priced providers, but on the other hand, it is substantially cheaper than using local people in America and Europe.
I used to work as a consultant for a very large, global computer manufacturer/consultancy as Solutions Architect. More than once I had to quickly find an available system to implement a customer's outsourcing solution as the normal lead time for a new system was 1 month+! (And before you start yelling "Virtual Servers", these customers required independent physical servers.)
Sometimes I had to go through a list of servers on a specific subnet, match that up with a list of servers from the routine network scans to see if all were accounted for, if not, I would try to find the server in the server room, get its ID from the chassis, go back to the inventory system, try to find the server there and hopefully an owner too.
Occasionally I could either not find the system in the inventory system or no owner was assigned. I would then have a private chat with the hardware people responsible for the area the servers were placed and suddenly the relevant servers would have an "unscheduled network outage", i.e. the operator would unplug the system and we would wait for somebody to start screaming. If that did not happen within a day or so, we would dump the system's data to the backup system and reassign the server. This time properly documented.
Lessee:
... Backup, Check ... Guns, Check ... Radio, Check ... Jacket, Check
Google drive
Wiki Weapon + 3D Printer
Pure Evoke
Superdry
Interesting debate. Not new, but still interesting.
If Twitter does not comply with Turkish law, it is considered natural, since Twitter is based in the US of A and thus not governed by Turkish law. When BETonSPORTS did not comply with American law, their CEO, David Carruthers was arrested in 2006 when in transit to Costa Rica and the following year, founder Gary Kaplan was arrested in the Dominican Republic and extradited to USA — all this despite BETonSPORTS was based in the UK and thus not governed by American law.
Tsch, tsch!
20 TB is an awful lot of data for backing up over the net.
What I do is backing up over the net to my brother's NAS. (He lives in another country.) I use rsync and it works like a charm. It is a bit of a bother when I have been taking a lot of pictures but as it works in the background and is traffic shaped with low priority, it is manageable. I've got a fairly slow 1Mbps/6Mbps connection, so it takes some time. 20 TB would take the better part of a year, but since I do it incrementally as I get the data, it has been manageable so far. The Raspberry Pi server at my brother's replicates it to a friend's NAS as they both have 10/10 Mbps lines.
I keep a local copy on a Raspberry Pi with a couple of USB drives, just for the fun of it.
Worst case scenario that my house burns down or similar total catastrophe: My brother copies my data to an external disk and sends that by courier to me. Downtime around 24 hours.
And, obviously it is fairly easy to restore individual files over the net.
I know Linux is all about freedom, especially freedom of choice, but is The Linux Foundation doing anything actively to encourage consolidation instead of fragmentation to avoid the situation Randall Munroe describes in xkcd?
...
The current situation: Distributions galore, a profusion of system initialization versions from simple to incomprehensible, a plethora of desktop metaphors (probably stopping this year and next year from being The Year of the Linux Desktop),
I know the NSA is behind this ... I mean, tracking phones down to centimeter precision.
The best thing to do is communicate your doubts (with functional and technical arguments) and document every step.
Some years back I was hired as technical consultant for a public tender. I dealt with the head of the department that needed the solution and did my work independently of the CTO. After the usual pre-qualification round, we had about five or six companies lined up for the tender proper.
I wrote the Requirement Specification and sent it to the CTO for approval. It came back with exactly ten demands for changes and not one of them made sense, being purely technical requirements. I wrote a memo to the CTO countering each of the ten changes — with a copy to the department head. The CTO wanted a meeting to discuss the issues. The department head and I attended the meeting, which had seven people from the IT department attending (but strangely, not the CTO). I once again countered each change and the IT people seemed to come around in the end.
A couple of days later the department head called me in and said that I had to give the CTO something, at least concede on one point. After reminding the department head that all the changes demanded were for specific ways of solving the problem (i.e. purely technical) and that a Requirement Specification should be purely functional, I had to find the one that was least likely to cause actual harm.
In the end I chose to include one of the CTO's requirements, stating that "the solution should be based on a relational database", hoping that none of the companies would use other types of databases. I changed the wording, informed the CTO and the department head (in writing, naturally), still emphasizing that I thought it was not the best idea and that it potentially could stop one or more of the companies from bidding. The CTO now approved the Requirement Specification and it was duly sent off to the pre-qualified companies.
Shortly after, one of the companies told us they had to opt out as their database was not relational but rather object orientated. The department head sent me a furious note asking me why we had included that requirement. I calmly told him, with a copy of the previous correspondence, that it was the CTO's requirement and that I had warned him at the time.
It did, luckily, not have any influence on my future work for that department, but the CTO only lasted about six months in all before discreetly being replaced.
Having a setup with a number of Windows PCs (some family members cannot live without it due to DOCX files from school/work) as well as a number of Linux PCs and servers in three locations in two countries, I have set up a number of scripts to handle backups between the locations.
The PCs (i.e. laptop/desktop computers) have an icon for backing up to a remote server. This is done on demand via rsync started from scripts (bash or BAT files) to one of the three servers. The servers replicate internally to each other via cron jobs that start rsync (via a script) every hour. I could have set up automatic backups via cron on the PCs, but have chosen to do it on demand to save bandwidth.
This is the main backup of stored items such as multimedia.
For own-produced files like essays, stories, presentations, etc. I have set up a time-machine-like system using perl and the rsync --link-dest option to create a new directory structure if there are any changes since the previous version. The --link-dest option creates hard links to unchanged files, which means that it is essentially an incremental backup and yet preserves the structure of the source system for each new version. This setup has proven itself useful inasmuch that we can go back to previous versions of our files fairly easily, although that functionality has not yet been wrapped up in nice scripts or fancy graphics like Apple's product.
With a little tweaking, this setup can support encrypted storage in each location, making it possible to store private data without giving other family members access to the stored information.
Oh, and one last bit of information: The storage in each place is a NAS box with RAID.
I find many of these threads fascinating as a non-USA citizen and think the government of the USA with their information gathering agencies should consider the impact their activities have on the rest of the world — after all, the United States of America represent less than 4% of the world's population ... but hey! who cares about a measly 96+% of the people of the world?
... er, what?!?
It seems to me that USA has a holier-than-thou attitude where anything in USA's interest is allowed and anything against USA's interests is illegal. If Snowden (USA) shares intelligence information with The Guardian (UK), it is illegal; if NSA (USA) shares intelligence information with GCHQ (UK) it is perfectly legal
Lastly, more as an example of the attitude of the USA government than because it has anything directly to do with Snowden et al: If somebody creates a website that is perfectly legal in their home country (like creating a gambling site) but illegal in USA, that person cannot enter USA or any of its territories without the risk of arrest, whereas if somebody from USA creates a website that is perfectly legal in their home country (like a website advertising prescription drugs) but illegal in many other countries, that would not normally have any impact on their travel in those countries.
... and Terry Gilliam's Brazil depicts a Utopia compared to today's standards.
... Uhh, durr, how would you like it if your neighbor just built a tall treehouse in his yard and stared at your house all day! These treehouses have to be regulated! ...
Not quite a proper analogy. There is a natural restriction on the number of neighbours you have, which reduces the risk of somebody watching you and makes it difficult for non-neighbours to peep into your garden. With drones you can do your peeping from a public road or maybe even from home. The laws in many (most?) countries make it illegal for people to look into your property and outlaws publication of pictures of your property and people there taken without your consent. If a neighbour invades your privacy and you see it, you know who to pursue, whereas a drone could be impossible to trace.
Think about the consequences if drones become ubiquitous, cheap and long range: Lindsay Lohan (replace name with any suitable celebrity) would not be able to get a tan in her back yard with the drones flitting around and covering the sun.
... or (maybe more up his creek) take a nice trip island-hopping in the Caribbean in a sailboat without satellite connection.
... Oh, DRM!
Either place may lack a proper, always-on Internet connection, but why should that stop the people from enjoying a game on their console?
Yes sir, I have done a full service on your car, changed the indicator fluid and greased your brake pads so they do not squeak anymore.
When I was working (in the EU) for a huge international company based in the US, I had a similar experience and when I realised that my normal contact person could do absolutely nothing, I slowly crawled up the corporate ladder by asking my contact for the details of his manager, whom I contacted. Nothing happened and I asked for the next higher level ... no result. At the third level up, though, it started to happen and after several phone calls, E-mails and a couple of nicely phrased letters, I got my money ... after three more months, making it almost nine months in all until payment.
I never got any of the late payment penalty invoices paid though - they never pay late payment fees as a corporate policy, I was told.
Thank you so much!
I think software development, apart from the most basic programming, is an inherent trait that cannot be learned -- much the same as playing an instrument. I played in a school orchestra and one of the other musicians played the French horn. He could get the basic tones out but had no sense of beat and could not play syncopes or counterpoint, no matter how much we helped him.
Programming is a mix of skills ranging from "language" skills, where the programmer needs to understand:
- The syntax of the programming language
- The semantics of the programming language
The programmer also needs to know how to "interface" and thus understand:
- The interaction with the OS
- The interaction with storage systems
- The interaction with networking systems
- The interaction with the presentation layer (this includes communicating with the user)
- The limitations of each subsystem
And lastly the programmer has to solve the problem and therefore needs to understand:
- The problem
- The solution
- The different ways of achieving the solution and select the best in the circumstances
- What can go wrong at every step and catch each possible error in a meaningful way that does not break the functionality
On top of this, any seasoned programmer knows a number of "tricks", methods and algorithms, and can select the best for the current job. The list is probably not even complete, but the best I could do at short notice.
Many of the above skills can be learned, but some are just beyond many, if not most, people like understanding the semantics of the programming language (Perl is notorious in this respect) and the intricacies of the interaction with the subsystems (like how a program can fail miserably when ported from *NIX-type systems where filenames are case sensitive to Windows where they are not), to name two. And coming up with a solution to even simple problems is impossible for many -- believe me, I have seen quite a few failing. What can go wrong and how to catch it is a challenge for even the most seasoned programmer -- it is near-impossible to learn this if you do not have the "gift".
I think everybody would agree that the data should be encrypted, but often the problem with encryption is access to the data. If the server-side application stores the encryption key, this key could potentially be found (maybe through a vulnerability) and thus give access to the entire database.
Best practice is to encrypt each record with a unique key. This key could be generated by some unique identifiers per user like Visible User ID (maybe E-mail address) and Password and Hidden User ID (different from the visible and generated independently from it) and Android ID.
To create the database entry:
1. Collect the information to store
2. Key = Hash(Visible User ID, Password, Hidden User ID, Android ID)
3. Send Visible User ID and Key to a receive-only system with as little an Internet Surface as possible (i.e. one that is next to impossible to hack into, if done correctly) -- This information is used retrieve the user data for analysis and such
4. Store the information in the more accessible database encrypted with the key
To retrieve the data from a user's application:
1. Collect Visible User ID, Password, Hidden User ID and Android ID
2. Key = Hash(Visible User ID, Password, Hidden User ID, Android ID)
3. Use the key to retrieve the necessary data
To retrieve the data from the inside:
1. Use the User ID to Key data to decrypt the data
... that eight hours work a day should be enough in normal circumstances to balance work/sleep/family/leisure/commute/health/...
That said, I worked for a short while as a consultant on a survey ship in connection with oil exploration. As you were confined to the ship for as long as you were on-board (obviously), they had made it twelve hour shifts, 8 to 8. That worked quite well as they had two weeks on-board and two weeks off. Two weeks at home with the family. So not only was the pay good, but the compensation for the family "deprivation" was sufficient to actually keep people interested.
I had an experience with really long working hours when another customer of mine had a problem: An employee had made a circuit board as an extension to their office computer and the company had a commitment to install this board before the end of the week, only it did not work! I worked for more than 40 hours straight to make the board work and presented the working board and updated software in the morning to a manager, who just said, "OK, drive out to the customer and install it." I politely declined, telling him that I was not driving anywhere in my condition. In the end the manager chauffeured me there and back, and the installation was a success.
There were times during the nights where I was doubting I would ever get through and it was not top productivity all the time, that is for sure -- but on the other hand, the company was generally extremely supportive and still on my top-five list of companies I have had as customers.
One of the fields where mathematics have definitely intersected with all types of serious programming is runtime analysis of algorithms and programs.
I know that computers today are magnitudes faster than the early days and that most western households have more computing power in their house than was available in the whole world some fifty years ago, but the problems we try to solve have grown even further and yet we expect the response times to be reasonable for everything we want to do.
One problem that just came to mind is navigation: That little box on the windscreen is actually searching through millions of roads to find the optimum route between two points and still we expect it to take less than a minute.
At university (much too many years ago), I did a program to perform symbolic math. It was written in Algol (should give you an idea of which millennium) and could optimise and present almost any formula in different ways, it could calculate the value of the formula given values for all variables and differentiate the given formulas, and even perform limited integration by applying a few strategies.
I am afraid that the boxes of punched cards have been lost some years back and I am working (very slowly) on a new version using a more recent programming language, Perl.
Can we please (pretty please!), once and for all stop using the term "pirate" instead of "copyright infringement" or maybe "illegal copying" (if you want to get a slightly harsher tone) — especially for headlines and story blurbs!?!?!
I know you know, but still: Pirates are people that get what they want on the high seas, normally using violence or threats of violence. Let us not play into RIAA/MPAA/FACT/...'s hands by using their propaganda language.
And you are right, "The Copyright Infringement Bay" has not got the same sound to it as "The Pirate Bay".
I have some years ago emigrated and live abroad, which has given me an opportunity to use servers in three different locations in two countries. At home, at my brother's and at a friend's.
My Linux servers back up automatically with a homebrew Time Machine-like functionality based on rsync. It consists of a script and a configuration file with information of what files and directories to backup/not backup. The structure is fairly simple and has worked well for a very long time now.
The mail servers back up any mail in the mail directories to each other, but overwrites/deletes as needed instead of the TM-type functionality.
The family Windows machine is backed up manually with an rsync-based BAT-file whenever I feel like it (which is rather often) to one of the local servers which propagates the backup through the TM script to one of the overseas servers, which again propagates it to the other overseas server.
All in all it seems to be sufficiently redundant (three copies of all relevant data in less than three hours) and sufficiently dispersed more than 600 miles between the farthest points and no sites closer than about 200 miles.
Obviously, I reciprocate the service for my brother and my friend.
I would be rather worried if my ADSL connection got past 50 ms for the first hop after the router/modem, but that said, the real clincher (at least to me) is Voice over IP like SIP phones and, well, Skype -- a latency beyond about 150 ms end-to-end makes it difficult to "duplex" properly (i.e. interrupt the other without too much frustration) and 300 ms is near the edge of tolerable.
;-), the answer is: Less is more!
For gaming (and real-time financial transactions
What you fail to mention is that this only works if you have a benign dictator at the helm, like Linus Torvalds -- a person who can cut through all the requests for half-baked solutions and unmaintainable, untested code.
In many companies, the one at the helm is more a despot than a dictator -- and worse yet, the decision-maker is not at all technically minded. Shudder!
This assumption goes wrong in a number of places, of which some obvious are:
1. Parents have the time to school their children
2. Parents have the inclination to do it
3. Parents have the capability to do it. (How many know parents whose maths is non-existent or whose spelling is beyond comprehension?)
4. The parent/child relationship works towards learning and not against it. (Think obstinate teenager here.)
I am sure there would be many other problems too, like very few parents have learned the tips and tricks a teacher has.
So in my humble opinion, it will not work!
I have not read all the comments, but it seems like most regards the scenario: Company A (somewhere in the high-salary parts of the world) employing a (different) company, B, (somewhere in the cheaper-salary parts of the world) to do something for them. This can be very difficult for all the reasons stated above, but there are actually alternatives that -- to a certain extent -- make sense.
I used to work for a very large, multinational consultancy and they did what other, large companies could do: They established a subsidiary in India and used that for a multitude of activities including software development and hosting.
They obviously established a management structure in India that reflected the company's goals and values, but they also did the very smart thing to second the Indian employees to other subsidiaries around the world like USA and Europe. This gave the Indian employees a practical insight into the culture and corporate culture of these places, and provided them with a much valued network of colleagues around the world. It was a learning experience for the American and European people too, experiencing these (often extremely) hard-working and frugal people.
I have no actual figures to back this up, but I got the impression that the initial turnover of people were fairly high as some of the Indian people could not readily adapt to the somewhat different work ethics in America and Europe.
From what I know, this scheme seems to work well. It is not as cheap as a pure outsourcing solution to one of the really low-priced providers, but on the other hand, it is substantially cheaper than using local people in America and Europe.
I used to work as a consultant for a very large, global computer manufacturer/consultancy as Solutions Architect. More than once I had to quickly find an available system to implement a customer's outsourcing solution as the normal lead time for a new system was 1 month+! (And before you start yelling "Virtual Servers", these customers required independent physical servers.)
Sometimes I had to go through a list of servers on a specific subnet, match that up with a list of servers from the routine network scans to see if all were accounted for, if not, I would try to find the server in the server room, get its ID from the chassis, go back to the inventory system, try to find the server there and hopefully an owner too.
Occasionally I could either not find the system in the inventory system or no owner was assigned. I would then have a private chat with the hardware people responsible for the area the servers were placed and suddenly the relevant servers would have an "unscheduled network outage", i.e. the operator would unplug the system and we would wait for somebody to start screaming. If that did not happen within a day or so, we would dump the system's data to the backup system and reassign the server. This time properly documented.