It is not clear that you have to deceive anyone. Some research shows the placebo effect (reduced but existing) even when people know it's a placebo. IMHO, that's ethical.
Not just the lock icon. Users have long been trained to look for "https:" as a sign of security too.
Personally my eyes lock onto "https:" and don't notice the lock icon, probably because in older browsers the lock icon was present for uncrypted connections too - just unlocked which is visually nearly the same. Things have improved in Firefox, but the training persists and is quite automatic now. 10 years of web use will do that, I cannot be the only one.
If "https" is presented without the lock icon for unauthenticated sites, that creates a false sense of security too.
Humans can admit mistakes, computers are only capable of following rules written by humans. So, when an error is found that results in an inconsistency, humans will follow the chain to find the error. Computers on the other hand aren't capable of doing this. It's called lack of creativity. Computers just don't have it.
I think you have a narrow view of how computers are able to function. Not all computers work by following instructions.
Take an analogue neural net, as just one of many examples: it can function in ways that the designers do not understand, and it doesn't have instructions at all. GAs too. The source of creativity can be information from the environment which is impossible to trace but manifests through the processes of the machine, and anomalies baked into its physical structure which you can never reproduce exactly.
Also, what rules out programming an instruction-based computer to apply peer review with other computers and be programmed to admit mistakes and follow chains to find errors?
I agree with your premise, btw, but I'm asking how do you justify that premise beyond saying "they lack creativity and self checking", as at least some forms of both those things can be realistically expected to arrive in computers at some point.
Taking (23), we proceed by partial fractions which results in:...
How exactly is that supposed to be easily translate/automated?
That's quite possibly a natural language problem, not a mathematics problem. Nobody said it was easy.
But, who will notice if no-one is checking the checker?
[...] I mean, come on. Most of us work with/fix computers daily. Can we at least be honest and admit that trusting a program to do such a complicated creative thing is a bad idea? I mean, just look at the quality of software out there...
Oh, I agree with you completely on that:-)
I'm just wondering why you trust humans?
In my experience, most humans are quite poor at mathematics and reasoning. They are also quite poor at admitting mistakes, or even understanding their mistakes sometimes.
I would trust really good mathemticians to do mathematics, but they are a tiny minority. Conceivably if there were 6 billion different computer mathematics programs out there (there aren't), then I might trust a small number of those too, once they have demonstrated their effectiveness and reliability as far superior to others.
This did actually to a friend. She were using a decent, respected free web-based email provider for years. That was ecosse.net. You've never heard of it, but it was liked by its users for a long time and appeared to be stable.
Not so different from Gmail/Googlemail really.
Then bang, one day it's a page saying they've stopped offering the free service, and she could only access her stored emails by subscribing to their ADSL or dialup service, or paying a yearly fee of about £20 (US $35).
Now she's on a domain hosted by Gmail. I'm not very comfortable with that, but I don't see what she could use which is better. Even commercial low-cost services go away from time to time, and she certainly cannot afford 'proper' email hosting fees.
I could offer her an account on my server, but that's no more reliable in the long run, if I have personal difficulties supporting it.
Do you think humans are more reliable? What makes you think that? And what makes you think the same principles that allow you to trust humans more cannot be replicated in machine form?
Can't speak for a "MythTV box" where the owner takes care of it, and visitors and kids etc. know it's a computer.
But the reason you need journalling on a "consumer PVR box" is precisely because it's often switched off by pulling the power - most people don't treat it as a computer.
And they won't appreciate you telling them that losing 1 show in the middle of their favourite series is "hardly vital" and thus fair game to trash it through poor filesystem choice.
I would nearly agree, except I have a need to shrink a filesystem on my laptop right now.
Ubuntu takes 5GB, but it's full. My/home takes 70GB and it's got a few GB free. They are separate partitions. To upgrade Ubuntu, I need to shrink/home and enlarge/.
Sure, I _can_ copy the 70GB to another disk - the same applies to enlarging or any other disk reformatting. But shrinking would be useful; if possible, it would be nice to use it.
Last week I had to kill my Firefox 3.0.1 on Ubuntu Hardy "the stable one" because it was eating 2GB of resident set. I have 2.5GB, it was starting to swap, just because of Firefox.
Funnily enough restarting it with the same session and it was back to about 300MB. Over time (days/weeks) it trickles up.
I have about 60 tabs open in about 20 windows. That's a lot, I know. It doesn't justify the memory requirement creeping up over days though, and needing to be reset from time to time with a "kill firefox; firefox".
Imagine you are a transcendent, god-like intelligence looking at a "universe simulator", a very fine computer program it is, and you're stuck in the far, far past when initial conditions are being set up just before the big bang... Before the deterministic universe begins, so to speak.
Because the universe will be deterministic, you can use the simulator to predict, exactly, how different initial conditions will unfold on August 18th, 2008. Using that feedback, you can make ever so fine tweaks to the initial conditions and see the changes, and therefore work out what initial conditions make something you want unfold on this date.
When you're satisfied that you like the initial conditions you have chosen, than you start the real universe using them...
The real universe is fully deterministic. You, from your god-like vantage point, have made a choice that affects a particular date in time, and has minor affects on other times and places.
Is that free will? Not if you think you are inside the deterministic universe... But you could be wrong about that.
Now do this all again, but ask yourself - as it's a deterministic universe, no time is special. The equations run backwards and forwards, there are no branches or joins, all times are equivalent when reasoning about "initial" conditions. So you don't have to be god-like at the beginning particularly. It's exactly the same to tweak the conditions from the vantage point of any time and place, letting all the parameters resolve deterministically around you in all directions, backwards and forwards in time, in simulation before you run the real deal so to speak.
The point of this is to remind us that while some say "your mind is an illusion, the experience of free will is an illusion, you are just an observer watching it unfold" and collapse the idea of free will.... you can legitimately take it the other way: "your perception of self in this local time is an illusion... you are just an observer watching it unfold and you have free will because your real self is not acting in this local time as you-the-illusion imagines"
Besides, all these arguments that determinism implies no free will are dependent on linear, directed time. Any argument with "future state" in it is. Time may well not be linear, and Will may well not act at the same time as it observes and decides. Imagine looking at a projected video of your past life, and choosing to change things which have already occurred, then immersing yourself fully in the new alternative experience... Is it free will if you decide from a future perspective to change your past then forget you changed it? Of a sort... but it doesn't fit the simple definitions neatly...
Neurons act by pumping finite numbers of predictably charged molecules through membranes to build up or reduce potential differences across those membranes. Other chemical reactions vary the balance of proportions of molecules in different areas of the neuron, making this action harder or easier. The number of such molecules available to each neuron is large but finite. Therefore the number of possible states of a neuron is finite.
Illogical. The number of molecules is finite therefore the amount of information carried by their positions, motions and dynamic state is finite?
Nope. Try again.
There are a finite number of points where the various chemicals involved in neural activity can cross the walls, and again each of these molecules represent a finite and quantifiable change to the behaviour of the nueron. The number of possible variations is extraordinarily high, but not infinite.
Information is not just how many molecules of each type are present on each side of those "finite points".
Information, i.e. the state of each neuron, also includes when they transition relative to each other. Gradient dynamics, that sort of thing. Time is not necessarily discrete, and is clearly an important part of the local information process in a brain.
It probably is finite, but not for the reason given in that argument.
And that's not even considering the quantum brain theories, like e.g. Penrose advocates.
JITs shouldn't be disabling NX, except on old CPUs which don't have the real NX feature.
They should only enable execution of pages containing generated code - exactly the same VirtualProtect() calls which are used for loading normal DLLs. (= mprotect() on unix).
Address randomisation is more likely to be used with JITs than normally-compiled code: it simply requires that newly allocated memory have unpredictable addreses. That's much easier than making standard executables position independent and modifying the loader.
You can recycle some of the heat, but you cannot recycle all of it. There are theoretical limits, depending on the substances, temperatures, rates of change, chemical changes, quality of thermal insulation, etc.
Ideal manufacturing processes will recycle as much as possible - but of course there are many reasons why a process deviates from physical ideals.
If you're interested, look up thermodynamics and heat cycles.
You were doing well until the last two sentences. Unless you understand well the thinking of people in those 4,200 recognised religions, you cannot possibly know if they are all irrational.
I do agree with you, that someone striving to be an effective leader has to treat all their team well, and somehow handle the difficulties including wanting peers at their own level.
And that we all have to program something by ourselves occasionally.
And that "sparring with ourselves" is useful.
But I think the GP is right too, it is really useful to have at least one peer who is about equally skilled and has complementary knowledge.
I think that becomes more important with complex projects that will take a long time to develop, and also when pressures are high.
There is something about having two minds see a problem from their different perspectives, but similar skill level so they can communicate and refine their perspectives together, which is just different somehow from one mind.
Well put. I have to agree with you: I've been in a similar situation for the last few years, as the only really experienced programmer, contracted to a company that needs a lot of IT development but doesn't have programmers to do it.
It's been very enjoyable to be free to explore the design space as I like - I appreciate that. Some really interesting stuff has come out of it, that will do me well for years in other situations I'm sure. Lately I've come to realise that what I'm doing is at the forefront of modern development in some ways, that's nice.
But it's been frustrating to have nobody to peer with at my skill/experience level within the company. Especially someone to direct and refine ideas, and call out the bad ones, and propose better ones, or even just help make useful executive decisions and get a perspective. I do "spar with myself" but it is a lot less effective than doing it with others.
That looks like changing: the company is recently in the process of merging with another, which does have an experienced development team, and I'm being slowly reeled into their management processes, and presumably my work will increasingly involve their team.
I'm rather looking forward to that, and will do my utmost to work well with the new processes and new team, it will do me a lot of good to stop working like a lone designer.
Even so, in the long run I do relish that freedom to design new things in my own novel ways.:-)
It includes section references, if you want to look at the standard. (It simply says "ISO" which I would guess refers to C89.)
Statics (including functional-local statics) and globals are initialised to zero, including structure members, in the absence of an explicit initialiser. This means integer types have the value zero, floating point types have the value 0.0 (even if that representation is not all zero bits), and pointer types have the value NULL (even if that representation is not all zero bits).
You are right that some systems don't initialise all those variables to zero (I've used such systems, long ago). There are also systems which initialise them to all-zero-bits, which is not the same as 0.0 floating point or NULL, on some systems.
To the best of my knowledge, neither of those are conformant C89, C99, or even K&R. I'll freely admit I may be wrong (I never read the whole of either standard), but I'm inclined to trust the comp.lang.c FAQ, which gives references to sections of the ISO standard.
In the interview, they criticised some code of mine saying that all variables needing to be zero at the start of the program must be explicitly initialised ("= 0").
I said standard C/C++ - *any* standard - guarantees that uninitialised integer globals are zero at the start of the program, and furthermore, explicit initialisation takes more space in most executable formats.
Turns out they work with embedded systems where they turn off zero-initialisation, for a slight improvement to boot time, so they aren't using standard C/C++. They didn't know that.
I understand why they do that, but it does seem counterproductive nowadays. It means you can't use any 3rd party library code, without changing it first. It will compile but break. And if you need the boot time speedup, there are other ways to get it, such as marking variables which don't need to be zero-initialised with an annotation.
In other words, C89 is *not* guaranteed to work everywhere even nowadays. (These were TV set top boxes, btw).
Btw, I didn't get the job. Something tells me I would have been too argumentative:-) Overall I found them to be good interviewers, even though we disagreed on quite a few best practice issues.
I haven't noticed any lack of resolution. My printer dialogue says 4800dpi, and the page looks good. Perhaps that's because I extracted the PPD (Postscript Printer Description) file from the Windows driver, for CUPS to use:-)
I really should submit it to the CUPS PPD database.
There are three reasons why nVidia claims they can't open source their drivers:
This isn't what they are being asked for. They are being asked for specifications, there are people perfectly prepared to write drivers
Sure, but the same reasoning explains why they won't provide specifications. They don't want people writing open source drivers - they will lose their competitive edge if those drivers catch up in features with the proprietary drivers, but run on other vendors cards too.
It is not clear that you have to deceive anyone. Some research shows the placebo effect (reduced but existing) even when people know it's a placebo. IMHO, that's ethical.
Ironically I just visited https://sni.velox.ch/, and all I got was Firefox warning me that I might not want to trust this site :-)
Not just the lock icon. Users have long been trained to look for "https:" as a sign of security too.
Personally my eyes lock onto "https:" and don't notice the lock icon, probably because in older browsers the lock icon was present for uncrypted connections too - just unlocked which is visually nearly the same. Things have improved in Firefox, but the training persists and is quite automatic now. 10 years of web use will do that, I cannot be the only one.
If "https" is presented without the lock icon for unauthenticated sites, that creates a false sense of security too.
You can't test some theories without using n-body simulations. QCD comes to mind: quarks like to come in threes.
I think you have a narrow view of how computers are able to function. Not all computers work by following instructions.
Take an analogue neural net, as just one of many examples: it can function in ways that the designers do not understand, and it doesn't have instructions at all. GAs too. The source of creativity can be information from the environment which is impossible to trace but manifests through the processes of the machine, and anomalies baked into its physical structure which you can never reproduce exactly.
Also, what rules out programming an instruction-based computer to apply peer review with other computers and be programmed to admit mistakes and follow chains to find errors?
I agree with your premise, btw, but I'm asking how do you justify that premise beyond saying "they lack creativity and self checking", as at least some forms of both those things can be realistically expected to arrive in computers at some point.
That's quite possibly a natural language problem, not a mathematics problem. Nobody said it was easy.
Oh, I agree with you completely on that :-)
I'm just wondering why you trust humans?
In my experience, most humans are quite poor at mathematics and reasoning. They are also quite poor at admitting mistakes, or even understanding their mistakes sometimes.
I would trust really good mathemticians to do mathematics, but they are a tiny minority. Conceivably if there were 6 billion different computer mathematics programs out there (there aren't), then I might trust a small number of those too, once they have demonstrated their effectiveness and reliability as far superior to others.
This did actually to a friend. She were using a decent, respected free web-based email provider for years. That was ecosse.net. You've never heard of it, but it was liked by its users for a long time and appeared to be stable.
Not so different from Gmail/Googlemail really.
Then bang, one day it's a page saying they've stopped offering the free service, and she could only access her stored emails by subscribing to their ADSL or dialup service, or paying a yearly fee of about £20 (US $35).
Now she's on a domain hosted by Gmail. I'm not very comfortable with that, but I don't see what she could use which is better. Even commercial low-cost services go away from time to time, and she certainly cannot afford 'proper' email hosting fees.
I could offer her an account on my server, but that's no more reliable in the long run, if I have personal difficulties supporting it.
Do you think humans are more reliable? What makes you think that? And what makes you think the same principles that allow you to trust humans more cannot be replicated in machine form?
Can't speak for a "MythTV box" where the owner takes care of it, and visitors and kids etc. know it's a computer.
But the reason you need journalling on a "consumer PVR box" is precisely because it's often switched off by pulling the power - most people don't treat it as a computer.
And they won't appreciate you telling them that losing 1 show in the middle of their favourite series is "hardly vital" and thus fair game to trash it through poor filesystem choice.
I would nearly agree, except I have a need to shrink a filesystem on my laptop right now.
Ubuntu takes 5GB, but it's full. My /home takes 70GB and it's got a few GB free. They are separate partitions. To upgrade Ubuntu, I need to shrink /home and enlarge /.
Sure, I _can_ copy the 70GB to another disk - the same applies to enlarging or any other disk reformatting. But shrinking would be useful; if possible, it would be nice to use it.
Some SATA is hot-pluggable, some SATA isn't.
Good for you.
Last week I had to kill my Firefox 3.0.1 on Ubuntu Hardy "the stable one" because it was eating 2GB of resident set. I have 2.5GB, it was starting to swap, just because of Firefox.
Funnily enough restarting it with the same session and it was back to about 300MB. Over time (days/weeks) it trickles up.
I have about 60 tabs open in about 20 windows. That's a lot, I know. It doesn't justify the memory requirement creeping up over days though, and needing to be reset from time to time with a "kill firefox; firefox".
Imagine you are a transcendent, god-like intelligence looking at a "universe simulator", a very fine computer program it is, and you're stuck in the far, far past when initial conditions are being set up just before the big bang... Before the deterministic universe begins, so to speak.
Because the universe will be deterministic, you can use the simulator to predict, exactly, how different initial conditions will unfold on August 18th, 2008. Using that feedback, you can make ever so fine tweaks to the initial conditions and see the changes, and therefore work out what initial conditions make something you want unfold on this date.
When you're satisfied that you like the initial conditions you have chosen, than you start the real universe using them...
The real universe is fully deterministic. You, from your god-like vantage point, have made a choice that affects a particular date in time, and has minor affects on other times and places.
Is that free will? Not if you think you are inside the deterministic universe... But you could be wrong about that.
Now do this all again, but ask yourself - as it's a deterministic universe, no time is special. The equations run backwards and forwards, there are no branches or joins, all times are equivalent when reasoning about "initial" conditions. So you don't have to be god-like at the beginning particularly. It's exactly the same to tweak the conditions from the vantage point of any time and place, letting all the parameters resolve deterministically around you in all directions, backwards and forwards in time, in simulation before you run the real deal so to speak.
The point of this is to remind us that while some say "your mind is an illusion, the experience of free will is an illusion, you are just an observer watching it unfold" and collapse the idea of free will.... you can legitimately take it the other way: "your perception of self in this local time is an illusion... you are just an observer watching it unfold and you have free will because your real self is not acting in this local time as you-the-illusion imagines"
Besides, all these arguments that determinism implies no free will are dependent on linear, directed time. Any argument with "future state" in it is. Time may well not be linear, and Will may well not act at the same time as it observes and decides. Imagine looking at a projected video of your past life, and choosing to change things which have already occurred, then immersing yourself fully in the new alternative experience... Is it free will if you decide from a future perspective to change your past then forget you changed it? Of a sort... but it doesn't fit the simple definitions neatly...
Neurons act by pumping finite numbers of predictably charged molecules through membranes to build up or reduce potential differences across those membranes. Other chemical reactions vary the balance of proportions of molecules in different areas of the neuron, making this action harder or easier. The number of such molecules available to each neuron is large but finite. Therefore the number of possible states of a neuron is finite.
Illogical. The number of molecules is finite therefore the amount of information carried by their positions, motions and dynamic state is finite?
Nope. Try again.
There are a finite number of points where the various chemicals involved in neural activity can cross the walls, and again each of these molecules represent a finite and quantifiable change to the behaviour of the nueron. The number of possible variations is extraordinarily high, but not infinite.
Information is not just how many molecules of each type are present on each side of those "finite points".
Information, i.e. the state of each neuron, also includes when they transition relative to each other. Gradient dynamics, that sort of thing. Time is not necessarily discrete, and is clearly an important part of the local information process in a brain.
It probably is finite, but not for the reason given in that argument.
And that's not even considering the quantum brain theories, like e.g. Penrose advocates.
JITs shouldn't be disabling NX, except on old CPUs which don't have the real NX feature.
They should only enable execution of pages containing generated code - exactly the same VirtualProtect() calls which are used for loading normal DLLs. (= mprotect() on unix).
Address randomisation is more likely to be used with JITs than normally-compiled code: it simply requires that newly allocated memory have unpredictable addreses. That's much easier than making standard executables position independent and modifying the loader.
You can recycle some of the heat, but you cannot recycle all of it. There are theoretical limits, depending on the substances, temperatures, rates of change, chemical changes, quality of thermal insulation, etc.
Ideal manufacturing processes will recycle as much as possible - but of course there are many reasons why a process deviates from physical ideals.
If you're interested, look up thermodynamics and heat cycles.
I just installed 2.5GB on my Ubuntu Linux laptop - because 1GB wasn't enough to run Firefox for long.
(Firefox 3 is using 988MB as I write this...)
Everything has felt *much* nicer on my Linux desktop since going up to 2.5GB.
You were doing well until the last two sentences. Unless you understand well the thinking of people in those 4,200 recognised religions, you cannot possibly know if they are all irrational.
Hi RexDevious,
I do agree with you, that someone striving to be an effective leader has to treat all their team well, and somehow handle the difficulties including wanting peers at their own level.
And that we all have to program something by ourselves occasionally.
And that "sparring with ourselves" is useful.
But I think the GP is right too, it is really useful to have at least one peer who is about equally skilled and has complementary knowledge.
I think that becomes more important with complex projects that will take a long time to develop, and also when pressures are high.
There is something about having two minds see a problem from their different perspectives, but similar skill level so they can communicate and refine their perspectives together, which is just different somehow from one mind.
Well put. I have to agree with you: I've been in a similar situation for the last few years, as the only really experienced programmer, contracted to a company that needs a lot of IT development but doesn't have programmers to do it.
It's been very enjoyable to be free to explore the design space as I like - I appreciate that. Some really interesting stuff has come out of it, that will do me well for years in other situations I'm sure. Lately I've come to realise that what I'm doing is at the forefront of modern development in some ways, that's nice.
But it's been frustrating to have nobody to peer with at my skill/experience level within the company. Especially someone to direct and refine ideas, and call out the bad ones, and propose better ones, or even just help make useful executive decisions and get a perspective. I do "spar with myself" but it is a lot less effective than doing it with others.
That looks like changing: the company is recently in the process of merging with another, which does have an experienced development team, and I'm being slowly reeled into their management processes, and presumably my work will increasingly involve their team.
I'm rather looking forward to that, and will do my utmost to work well with the new processes and new team, it will do me a lot of good to stop working like a lone designer.
Even so, in the long run I do relish that freedom to design new things in my own novel ways. :-)
See the FAQ: http://www.c-faq.com/decl/initval.html
It includes section references, if you want to look at the standard. (It simply says "ISO" which I would guess refers to C89.)
Statics (including functional-local statics) and globals are initialised to zero, including structure members, in the absence of an explicit initialiser. This means integer types have the value zero, floating point types have the value 0.0 (even if that representation is not all zero bits), and pointer types have the value NULL (even if that representation is not all zero bits).
You are right that some systems don't initialise all those variables to zero (I've used such systems, long ago). There are also systems which initialise them to all-zero-bits, which is not the same as 0.0 floating point or NULL, on some systems.
To the best of my knowledge, neither of those are conformant C89, C99, or even K&R. I'll freely admit I may be wrong (I never read the whole of either standard), but I'm inclined to trust the comp.lang.c FAQ, which gives references to sections of the ISO standard.
In the interview, they criticised some code of mine saying that all variables needing to be zero at the start of the program must be explicitly initialised ("= 0").
I said standard C/C++ - *any* standard - guarantees that uninitialised integer globals are zero at the start of the program, and furthermore, explicit initialisation takes more space in most executable formats.
Turns out they work with embedded systems where they turn off zero-initialisation, for a slight improvement to boot time, so they aren't using standard C/C++. They didn't know that.
I understand why they do that, but it does seem counterproductive nowadays. It means you can't use any 3rd party library code, without changing it first. It will compile but break. And if you need the boot time speedup, there are other ways to get it, such as marking variables which don't need to be zero-initialised with an annotation.
In other words, C89 is *not* guaranteed to work everywhere even nowadays. (These were TV set top boxes, btw).
Btw, I didn't get the job. Something tells me I would have been too argumentative :-) Overall I found them to be good interviewers, even though we disagreed on quite a few best practice issues.
Linux threads stopped using the LDT on x86 in 2002. This change went mainstream over subsequent years, and is nowadays always used on x86.
There was once a limit on the number of processes, too, due to each process having an entry in the GDT. That has long been removed too.
I haven't noticed any lack of resolution. My printer dialogue says 4800dpi, and the page looks good. Perhaps that's because I extracted the PPD (Postscript Printer Description) file from the Windows driver, for CUPS to use :-)
I really should submit it to the CUPS PPD database.
Sure, but the same reasoning explains why they won't provide specifications. They don't want people writing open source drivers - they will lose their competitive edge if those drivers catch up in features with the proprietary drivers, but run on other vendors cards too.