Should I socket my weapon with a Ruby or Emerald?

Question: Currently I have a slow attack speed weapon for my Barb in D3. It has a socket. Should I add a Ruby or Emerald?
Comment: I thought I had read somewhere that dps in your character screen includes crit. Not sure where though...
Comment: One way to find out would be to socket the ruby, and see how much it increases your damage stat. Then multiply the crit hit damage bonus of the emerald by your crit rate to calculate its average damage increase, and compare.
Comment: @bwarner and others:  Does anyone know what the "new behavior" of rubies in 1.0.7 actually is?  From what I can tell from [this thread](http://us.battle.net/d3/en/forum/topic/7810050948#1), it sounds like the developers changed the calculation from `50 to 90, + 20` to `70 to 110` and don't realize that these two are mathematically equivalent *(thus the formulas below would be unchanged.. though the new damage buffs would require a change to the charts)*.  There must be more to it than that??
Comment: If nothing else, there are some new levels of gem with significantly different values, so it would be worthwhile to make sure those behave similarly.  In addition the change to rubies is that the min and max damage are applied completely independent of each other, where previously min damage could end up boosting max damage as well.  Maybe you didn't account for that before, in which case it won't have an effect.
Comment: @bwarner:  It doesn't matter if I accounted for it or not; as long as the expected damage-per-attack added by a ruby *(**RubyDamage** below)* is correct, regardless of how it's calculated, the equations below will be correct.  So, the equations are still correct; all that needs to be changed are the charts, due to the more expensive gems being buffed.  I'll see if I can get to that this week.
Answer: Time for a bit of math.  Let's define the following:

RubyDamage: The damage-per-attack added by imbuing a ruby
EmeraldCritDamage: The percentage of damage-increase due to a critical hit added by imbuing an emerald
AttackSpeed: Your attacks-per-second
WeaponDamage: Your current damage-per-attack (including bonuses, like from your primary stat)
CritChance: Your current percentage (from 0 to 1) per hit of getting a critical-hit.
CritDamage: Percentage of damage-increase due to a critical hit

Using a ruby will add
RubyDamage * AttackSpeed * (1 + CritChance*CritDamage)

to your total expected DPS, while using an emerald will add
WeaponDamage * AttackSpeed * (CritChance)(EmeraldCritDamage)

to it.  You only want to use a Ruby if the first expression is larger than the second expression; that is,

(first expression) > (second expression)
RubyDamage*AttackSpeed*(1 + CritChance*CritDamage) > WeaponDamage*AttackSpeed*(CritChance)(EmeraldCritDamage)
RubyDamage*(1 + CritChance*CritDamage)/(CritChance*EmeraldCritDamage) > WeaponDamage

Thus you only want to imbue a ruby if the expression
RubyDamage*(1 + CritChance*CritDamage)/(CritChance*EmeraldCritDamage)

is greater than your weapon damage+bonuses.  Note that this damage will increase as your primary stat goes up, so in general the emerald is the better choice for the long-run.  Notice also this equation does not depend on your attack speed at all.

[Edit] To make this easier to make sense of, I've created a graph:

How to read this graph:
First, find your critical-hit damage% and critical-hit chance% (as shown on your detail tab in-game).  Find that value on the above chart, and get its approximate value.
Next, take your damage (as shown on your character sheet) and divide by your attacks per second (as shown in the "details" tab).
If your damage (divided by attack rate) is larger than the graph-number, use an Emerald.  But if the damage is smaller than the graph-number, use a Ruby.  If they are approximately the same, you could use either, but I would recommend an Emerald, since it will scale better as your damage goes up.
The above chart is for Flawless Square gems.  The other gems are largely similar:

Chipped
Flawed
Normal
Flawless
Perfect
Radiant
Square
Flawless Square
Perfect Square
Radiant Square
Star
Flawless Star
Perfect Star
Radiant Star

So, in general, if you have low damage and low crit-chance, use a ruby; if you have high damage or high crit-chance, use an emerald (though if you have high crit-chance but low damage, you might want to double-check here).
Comment: @BlueRaja-DannyPflughoeft This edit makes this one of the most researched posts I've ever seen in Arqade - nicely done!
Comment: **TL;DR** for those that don't want to do the math: Use a Ruby at low levels, switch to an Emerald sometime in late nightmare/hell. Even with no crit or crit damage gear, your Damage/Attacks will break 2k easily in the 40's or 50's with up to date gear, and an Emerald will only get marginally better from there.
Comment: Awesome, more math! I am just using ruby out of laziness, but will plug in the numbers now that I have a reference, thanks.
Comment: What about items that boost crit damage?
Comment: @Alok: I just realized my previous comment is wrong; it *does* depend on crit damage.  Please see edit for corrected formula.
Comment: I assume `EmeraldCritDamage` is the sum total of what is listed on the emerald and any other +critdmg boosts - common sense but just to point out to anyone who overlooks it.
Comment: @Alok: No, `EmeraldCritDamage` is only the small boost provided by the emerald.  Your total critical-hit damage *(regardless of where it comes from)* without that emerald is `CritDamage`.  Similarly, `RubyDamage` is only the small boost in damage provided by the ruby
Comment: Ah! Finally got it lol, you're comparing the additional damage only and neither formula includes base dmg of socketed weapon :)
Comment: Also, to relate my answer with [@LessPop's awesome answer](http://gaming.stackexchange.com/a/67844/2578) on how the damage-stat is calculated:  My `AttackSpeed` = his `R`, `WeaponDamage` = `S*A*M`, `(1 + CritChance*CritDamage)` = `C`.  So we want to know if `RubyDamage*C/(CritChance*EmeraldCritDamage) > S*A*M`.  If so, use Ruby; else, use Emerald.  All those stats can be found in-game.
Comment: Great answer, but where did you derive these formulae from?
Comment: What did you use for the graph? I've got a few answers that could use some better graphing.
Comment: @Kexlox: I just googled for contour-plot generating software, and found a demo of a program called "Origin."
Comment: @BlueRaja-DannyPflughoeft Has this formula changed a lot with the 1.0.7 update? The break-even point must have shifted to the left in favor of ruby, can you please add by how much?
Comment: One thing that I hadn't realized before is that +% damage now affects rubies, meaning that RubyDamage can get significantly higher than you might think.  http://diablo.incgamers.com/forums/showthread.php?846685-Tricky-Diablo-3-Weapon-Damage-with-Rubies-vs-Emeralds
Answer: If you have a high-attack speed weapon, you want a Ruby in your socket. If you have a slower attack speed weapon, or if you are going a crit-heavy build, you want an Emerald in your weapon. I found a pretty good blog post explaining the differences here and in their video:
Comment: The attack speed should affect both ruby and emeralds equally, so this answer cannot be correct.  See my answer.
Comment: @Raven: I think you're referring to [this answer](http://gaming.stackexchange.com/a/69265/2578).  It is currently being debated on that thread whether or not the effect actually exists.  However, even if it is true, since LessPop is claiming that Rubies become *less* effective for high-attack-speed weapons, that would make Cloud9's answer even *more* incorrect!
Comment: Good summary in the linked post/video!
Comment: @BlueRaja-DannyPflughoeft Attack speed has a bit of a non-standard effect on the ruby because the bonus provided by the ruby changes based on attack speed. LessPop has an answer somewhere around here that talks about that. (Though I suppose as long as you get RubyBonus correct, it's moot)
Answer: Update for 1.07
The folks over at Teamliquid did the number crunching already.
Basically, the ruby is better than an emerald only if it adds a significant % of your overall weapon damage.  The more significant it is, the better off you are with the ruby.  Also it takes into account of how much your crit/crit damage is.
Here is the relevant chart from that link, for a bigger version click on the above link:
Answer: A Ruby is a flat increase while Emerald is percentage based. Additionally, Emerald is dependent on gear or skills to boost crit chance to perform better. As the base weapon damage rises, at some point the %age based calculations should favor emeralds.
You need to post the weapons or atleast their approximate iLevels so the question is answerable imho. I generally put in a ruby because I haven't gone for a crit build on any of my characters, though at higher levels it might be that Emerald has better results even without a lot of crit bonus.
Comment: Faster attack speed & attributes should benefit crits as well so that should be a non-factor
Comment: ruby increases your weps damage, which is affected by attack speed and your primary attribute.  I know what your saying, but as you level your primary attribute tends to go with it, unless your going a specific build, like me with my monk, the benefit from the base damage of your wep, also increases.
Comment: yah, but I'm pretty sure he's not 60 yet.  Honestly their comes a point for every character where crit bonus damage, even if you have the base 5%, will out benefit flat damage, as a statistical dps.  From rough fast calculations, it seems that you need at least 20k, for this to be true.  Of course this assuming some things, roughly a value of 1300 for a base attribute stat, but even if you swing as fast as 2 attacks per second and have 5% chance to crit, you'll be getting a tiny bit more from the emerald.
Comment: No it's not. Imagine if you have a weapon with 50% damage but 200% attack speed. Then ruby will improve your DPS by about twice. Read my answer. Emerald will improve those weapon damage equally.
Answer: Depends if you're stacking crit chance.  If you have a decent chance to crit, of at least 15% (really hard to say since so many things affect your damage, but remember the emerald only does anything if and when you crit) it would probably be worth it, otherwise you won't be critting enough for it to pay off.
I watched the video above, and even still if your not going crit I'd throw in a ruby for 2 handers.  He's right in the video about the faster weapons gaining more of a benefit from the ruby, but it doesn't make it worthless for 2 handers.
In my opinion it all comes down to what your crit % is right now.  If you have over 10%, give it a shot it might pay off, but otherwise I'd stick to straight damage and let your damage modifiers do their job.
Answer: Look at your Damage.
General rule: Low Crit%/CritDmg% -> Ruby, otherwise Emerald.
You don't see lvl 60 Players with rubies in their weaponsockets for a reason :)
Comment: That reason is that the synergy between Crit Chance and Crit Damage blows away any slight amount of straight up damage that rubies provide.
Answer: There is no way I can compete with the #1 answer.
However, I'll provide some intuition.
Critical Damage improvement is obviously proportional to Critical Hit Chance.
Increase Weapon Damage is proportional to attack speed.
Critical damage is proportional to attack speed but that is already taken into account for DPS. If 2 weapon have the same DPS, and same critical chance, critical damage will improve the 2 weapons at the same rate. However, increase weapon damage will improve the faster weapons more.
So high attack speed low critical hit chance, ruby.
Low attack speed, high critical hit chance, emerald.
Intuitively this is as far as most readers will understand anyway. Ruby increase DPS by the square of attack speed. A weapon with 2 attack per second benefit from ruby twice than a weapon with 1 attack per second if DPS is the same.
Not so from Emerald. It simply add a percentage to your DPS and proportional with critical hit chance.
Comment: Critical damage is also proportional to attack speed, isn't it? If each attack has a chance to crit, then it doesn't matter whether you're attacking quickly or slowly; your average-crit-damage-per-hit is the same, and your DPS will scale up or down with the attack speed.
Comment: C'mon? Negative vote? I updated the answer again.
Comment: Critical damage is proportional to attack speed but that is already taken into account for DPS. If 2 weapon have the same DPS, and same critical chance, critical damage will improve the 2 weapons at the same rate. However, increase weapon damage will improve the faster weapons more.


On publishing infopath 2010 form loses control properties - dropdown control data binding setting

Question: I am try to created a cascade dropdown using infopath 2010 in sharepoint 2010 list. On publishing infopath form i lost data binding setting and it just resets to default "Enter choices manually". It works perfectly only if i dont publish it (preview mode). I even recreated infopath form many times but of no use. It works perfectly on some other site but not on where i want to.
[note: Dropdown are lookup columns]
Answer: Unless you are getting additional value from the Infopath form, consider using SPCascadeDropdowns from SPServices for your cascading. No fuss, no muss.


Physical interpretation of infinite total cross section

Question: What does it tell us about a process, say A+B->C+D, if the calculated total cross section is infinite?
Answer: It means that the particles A, B always influence one another: there is a "long-range force" (meaning "infinite range force") in between them. However, when the impact parameter is very high – the impact parameter is the distance between the straight lines given by extrapolating the initial motion of A, B - then the interaction between A, B is very weak.
The Coulomb interaction (repulsive or attractive electromagnetic force) is a typical example of a long-range force, one that leads to an infinite cross section. However, the typical angle by which the particles change their direction of motion goes like
$$ \theta \sim \frac{q_1 q_2}{r} $$
where $q_1,q_2$ are the charges and $r\equiv b$ is the impact parameter. Moreover, the Coulomb force also leads to the  production of an infinite number of very-low energy photons (because of the accelerating charges).
This behavior should be contrasted with a finite cross section due to "short-range forces". In classical physics, this is formally impossible for "total cross sections" as long as the force is nonzero for any separation. However, in quantum physics, the influence of one particle on another one is typically "finite", strictly separated from zero, but it has a low probability. So in quantum mechanics, many forces have a finite cross section which means that there is a high probability that the interaction between the particles makes exactly zero impact, even if the force is classically non-vanishing for arbitrarily high separations. When the decrease of the potential is faster than $1/r$, the probability that there is no interaction at all goes to 100% for large enough impact parameter.
Answer: You should use the definition of the cross section: it determines how many particles $N$ of the incident flux $j$ are scattered per second. So initially you have already an infinite number of particles crossing each second a plane perpendicular to their motion direction. If they all are deviated with the scattering potential, you have all of them scattered. To get such an infinite number from a finite value of the flux $j$, you should have an infinite coefficient sigma: $N_{scattered}=\sigma\cdot j$. For a finite-range force ($F(r>R)=0$ only a finite number of particles is scattered ($N=j\cdot \pi R^2 $).
The same is applicable in case of reactions. Just replace the word "scattering" or "deviation from the initial direction" with "reaction" (transformation of particles).
Answer: Actually, when I was studying quantum mechanics, I was surprised that some everywhere nonzero potentials produce only a finite total cross section.
It is intriguing because classically, for such potentials, any particle injected will be scattered, although might with a very small deflection angle.
I mean, it is not surprising to have an infinite total cross section, but a finite one.
The problem is on the Plank constant $\hbar$. Quantum mechanically, the total cross section involves $1/\hbar$ generally. In the limit of $\hbar \rightarrow 0$, the total cross section diverges.
For the coulomb case, $\hbar$ does not appear! The quantum mechanical results agree with the classical results.


Why do we write mock objects when writing unit test cases?

Question: We are currently writing unit test cases in our project . The implementations for database methods exist and is working fine . In this case why do we need to write mock objects ? Is there any specific reason ? Why can't I test the DAO implemntation directly?
Answer: It is perfectly ok to test businesslogic together with the database.
but these tests are called integration tests even if you use nunit or junit or phpunit to execute these.
Unittests are spezialized tests where testing in isolation (i.e. buisinesslogic without the database) is important. Mocks/fakes/stups are used to enforce this isolation.
Answer: You shouldn't mock calls to the database because that would defeat the purpose. What you SHOULD mock are, for example, calls to your DAO from, say, a service layer. Mocking allows you to test methods in isolation.
Say you have a restaurant simulation with an architecture like this:
Cook <=> Server <=> Customer
You want to test each layer independently. Here the Server is your service layer and the Cook can be thought of as a DAO. The Server is what you want to mock while testing Customer, and the Cook is what you want to mock while testing the Server. The Cook unit tests, however, should verify that the implementation is returning a hamburger when a hamburger was ordered and not a rubber tire.
Comment: I disagree with the statement *You shouldn't mock calls to the database because that would defeat the purpose.*  because it seems too generic.  As others say below, you need to unit test everything in isolation.  If the thing you're unit testing is the database access, sure, your comment is correct.  If the thing you are unit testing is not database access, then your first sentence is incorrect.  I agree with everything else you say. +0. :-)
Answer: Simply: to test actual DAO and not database content.
Suppose your DAO Person class has a method getByName(). You write a test and call Person.getByName("John Smith"). Suppose the test fails, because somebody removed John's record from database. Now, every CI software and your supervisors/reviewers can claim that your software is faulty, while in reality it is not. If you mock DB, you can prove that your DAO works if it's given correct row from correct table.
If you really want to test database itself, ie: if execution of certain DAO method puts data in a certain state, then it is also possible. What is more it is really helpfull with wacky data models (EAV, nested tree set) where you can't expect database to provide bullet-proof integrity. Have a look at DBUnit to make your life easier.
Answer: Another reason is to avoid the execution time of actually running the database commands.  It may not seem like much but the overhead of setting up and tearing down connections will eventually add up and most likely significantly increase the overall time to run the test suite compared with using mock objects.
Answer: To isolate the class you are testing. Or else if the test fails how do you know the problem is in the class you are testing or one of it's dependencies.
Comment: Do u directly call and test methods in DAO implentation ?


Unable to deploy contract that uses Oraclize using Remix

Question: I was trying to use Oraclize just for testing. I was facing problems deploying a sample contract from quick-start section of oraclize doc.
I tried to use both testrpc and private network for deployment of smart contract.
On connecting remix to testrpc and deploying contract, I was hit by an error stating:
creation of browser/ExampleContract.sol:ExampleContract errored: Error: sender doesn't have enough funds to send tx. The upfront cost is: 1000000000000000000000000000001934427 and the senders account only has: 99999999999990327865
at runCall (/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:69347:10)
at /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:11327:24
at replenish (/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8420:17)
at iterateeCallback (/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8405:17)
at /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:8380:16
at /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:11332:13
at /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:64434:16
at replenish (/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:64381:25)
at /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:64390:9
at eachLimit (/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:64314:36)
at /usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:65494:16
at VM.AsyncEventEmitter.emit (/usr/local/lib/node_modules/ethereumjs-testrpc/build/cli.node.js:64085:3)

So ideally saying the upfront cost of deploying this contract is 1000000000000000000 ethers.
Now when I tried connecting this to my private network and tried the same, I was git by an error stating:
creation of browser/ExampleContract.sol:ExampleContract errored: Gas required exceeds limit: 2002192.  An important gas estimation might also be the sign of a problem in the contract code. Please check loops and be sure you did not sent value to a non payable function (that's also the reason of strong gas estimation).

In both cases, the gas estimate too high preventing me from deploying contract.
I also tried to deploy the same contract using Ethereum-Wallet connected to my private network. But this time instead of importing oraclizeAPI.sol, I pasted it's code above my code (AFAIK, there is no way to import contracts files in ethereum-wallet yet).But here also I was hit by Intrinsic gas too low error.
PS: I have successfully deployed the same contract on Ropsten using MEW. Also I was able to deploy same contract using truffle and testrpc. So what's the problem with remix.
Answer: I was using the javascript VM and was not getting any error or message. But the
--callback

method was never getting called.
I found this answer Why isnt Oraclize working? which kind of indicatest hat JS VM with Oraclize may not work from the browser Remix. So you can use the Oraclize Remix IDE at https://dapps.oraclize.it/browser-solidity/ and get your code tested end to end. I am yet to try out that IDE, will update if I am able to run my code there.
Comment: Just an update which I forgot earlier. Yup Oraclize works perfectly from its own Remix IDE.


Could there be any effects from low powered infrared being used to track eye movements long term?

Question: Basically,  looking  into infrared LED's and a camera with an infrared bandpass filter for tracking eye movements; my concerns are whether there would be any potential negative long term effects from constantly illuminating the eye with low power infrared?
TIA
A
Comment: Most likely not. We are exposed to IR light every time we step out into the sunlight, so a very small amount from an electronic device designed to follow the eyes is not going to matter much at all.
Answer: I would have said that IR is safe, but some studies have suggested otherwise.
This is a vague study on rabbit eyes:
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3116568/
https://academic.oup.com/annweh/article-abstract/35/1/1/170395
So there may be a dosimetric exposure limit of some kind that you have to aim for. LED's are very controllable. I'm amazed that they talk about cataracts with a chemically soft, non -ionizing wavelength like IR, because we get IR all day from the sun. If you control the levels to be less than a sunny day, you may find that you can use equivalent of 1hr of sun exposure to run many hours of eye tracking. the figures are a matter of research.
Answer: Heat waves are probably infra-red waves. We have these all around us (with great intensity) all the time. A small intensity Infra-red from an LED shall not cause any problem at all even in long terms. Our eyes are evolved to withstand far greater(i.e. around temperature of 45°C)  intensities. So, no need to worry.
But since, water is lost from heat waves, do allow subject to blink his eyes frequently.
Comment: LEDs are near IR, while low temperature radiant heat is far IR. Near IR behaves much more like visible light. Like others have said near IR is significantly present in the solar spectrum, so to a degree effects are bounded by what we observe with sunlight exposure.
Comment: @Real sorry, what do you mean, i don't understand ? Is there any clarification you need?


Is there a category for statements that are never true?

Question: I studied logic and found no category for statements that are not impossible but never true (e.g. "The earth is flat.") to differ them from statements that could be true ("I'm wearing blue shoes.") or that were or are occassionally true ("I drink beer."). Why not? Wouldn't it be hepful to classify not only what is necessarily true and false but also what is or was always or never true or false? I don't think it's the same as a contradiction (e.g. "The small house is larger than the big house.") since a contradiction is false in relation to itself and per definition false whereas a statement that was never true is not impossible and could have been true of another world ("The stock market gained 500 % today").
Comment: Isn't it simply a false proposition?
Comment: Statements that are never true are generally called _official statements_. ;)
Answer: The way "The earth is flat" differs from "I'm wearing blue shoes" is that the latter sentence includes an indexical: "I." An indexical is a term that can change its reference based on the context in which it's uttered. "You" is another example, as are "this" and "nearby." Sentences containing indexical terms take on different truth-values in a more obvious way than sentences like "The earth is flat" do. But even a sentence like that can vary in truth-value. Suppose I like going to a bar called "the earth." Maybe for some reason I want to say that it's flat, not rectangular like some other bars. My point is that other than that one contains indexicals, there's no difference between the sentences in terms of the relationship between their structures and truth. That is unlike a logical contradiction, which has a structure that makes it false. A false proposition, on the other hand, as stevebot notes, is simply false, because we say that different utterances of sentences (or instances of them in different contexts) sometimes express different propositions, which are true, or false, or possibly something intermediate.
Answer: I think you got the notion of contradiction kind of wrong. "There exists a horse and there does not exist a horse" is a contradiction, but not in relation to itself and not per definition. They are never true.
Your example, "The earth is flat", is not never true. It is just not true here, but possibly true.
To clarify your question you should define the scope of "never". Either it means our world, then the simple actual true/false suffices. Or you understand it modally, then something that is necessary false is never true.
Answer: Tense Logic makes this distinction. In tense logic, there are all of the typical logic connectives plus 4 modal operators {P, F, H, and G} defined as follows:

Px = "x was true at some time"
Fx = "x will be true at some time"
Hx = "x has always been true"
Gx = "x will always be true"

To use the example you've given of "The earth is flat," we could express it like so:
<code>Lx = x is flat   and    e = Earth

  ~P(Le) ^ ~F(Le)   // It's not the case that the Earth was flat at some time,
                    // and it's not the case that the Earth will be flat at some time.
  or

  H(~Le) ^ G(~Le)   // It has always been the case that the Earth is not flat,
                    // and it will always be the case that the Earth is not flat.
</code>
You may also want to explore Modal Logic (from which Tense Logic is an extension). In Modal Logic there are Necessary Truths (things that must be true in all possible worlds), Possible Truths (things that may or may not be true in a given possible world), and Contingent Truths (things that happen to be true in our world but are not necessary). Your examples could all be considered false contingent truths.
Comment: How do you know ~F(Le) is true?
Answer: Adding to what @Lukas said, I think the only statement I can think of that never is true is "This statement is false", and that's known as the liar paradox.
Comment: What about: "There exists a squared circle", on my book its never true and necessarily false.
Answer: How about impossible? However...
Borges, the Argentinian writer in short story The Library of Babel, wrote that any proposition in some system of thought may be true. This is his library of thought, or of worlds.
In model theory which is the mathematical investigation of truth & proofs in formal systems there are what are called undecidable propositions - that is propositions which are true but cannot be formally proved so. One way to look at this is that in some worlds it can be proved true, and in other worlds it will be proved false; so generally, that is formally it isn't provable. This means, in this architecture of truth & proof, a provably false propositon is one that is false in all models - that is in no model can it be true.
False propositions, like the flat-earth theory can also have significant truth value when looked at the right way. For example, we can say that the Earth looks flat wherever you are on the Earth, and given the actual physical landscape this is actually an abstract thought of a kind. Notably, it is this definition which is used in the mathematical discipline of manifold theory whose most famous application is in Einsteins theory of Gravity. So, although, some people dismissively say that flat space was proved wrong by Einstein, a more subtle understanding is that it became a local segment of the theory.
In Hegelian discourse, thought is a process and not a proposition. A given proposition gives rises to its opposite and are then sublated in a synthesis. No proposition is wholly true, nor wholly false, but must seen in a context of every increasing sophistication. So Truth is not simply a binary affair of true & false, that is the very categories of thought - true & false are false - or properly partly true & partly false.
In Jain Logic, some propositions, are false and indescribable, or true and indescribable. One might suppose for example, Negative Theology, which describes God by what he is not, because by being an Infinite Being any description is naturally not wholly true; one might say He is true but indescribable. This is part of a system of Jain thought called Anekantavada which means objective knowledge can only be obtained by Kevalis who see objects in all aspects & all manifestations.
One might suppose a proposition that exhibited itself as a contradiction must be false. For example, '0 is 1', or 'grass is not grass'. But this can be argued against, simply by seeking some context where it is true; for example the first statement is true in what is called the trivial ring, and the second is not true of a painting of grass. One might argue then, one should include the context explicitly. But this then leads immediately, at least in thought, to an infinite regression. But of course this does not happen in practise - and one could argue that might be one way of understanding or arguing that consciousness is one.


Must one say a blessing before writing Torah thoughts?

Question: Suppose one wakes up in the morning, and comes up with a chiddush in some subject of Torah. Must he say the blessing for studying Torah before writing it down?
Answer: The Shulhan Arukh (OH 47:3) writes that one must make the blessing even upon writing. He does not specify that this be the writing of new ideas. In the Beit Yosef (3) to the Tur there, he quotes this from Abudirham.
This is also the implication of the Pri Megadim (MZ 2) and the conclusion of the Arokh HaShulhan (47:10).
However, the Mishna Berura there (4) states that one should be stringent and not recite the blessing on mere writing, but only on speech. Accordingly one should say some of the words he is writing, or other words of Torah after the blessing.
Regarding the question of whether typing is considered writing, see here.
Comment: What about electric typing? In the OPs case he could maybe type it into his phone and avoid the bracha
Comment: @DoubleAA sounds great, for Shabbos purposes, it isn't considered writing.(except the electric part which falls under a different question)
Comment: @doub it is an interesting avenue to pursue. While difficult to prove anything about this  conclusively, my inclination is that the idea in rishonim, that aharonim apply here, that blessing are generally instituted on actions not thoughts (perhaps because the former are more quantifiable) would allow for typing just as they explain it applies to writing.


How do you change the product key for SharePoint Server 2010 after install?

Question: How do you change the product key for SharePoint Server 2010 after install?
Answer: To convert a license type, you must be a member of the Farm Administrators SharePoint group on the computer that is running Central Administration.
On the Central Administration Web site, in the Upgrade and Migration section, click Convert farm license type.
On the Convert License Type page, in the Enter the Product Key box, type the new product key and then click OK.
Answer: Please try the below link. It solved my problem(just as your problem). After I converted the installation type to enterprise(as documented in the below site) I could able to install the Project Server 2010 successfully.
http://technet.microsoft.com/en-us/library/cc261946.aspx
Answer: The Section is Called "Central Administration" --> "Enable Enterprise Features" and there U can enable the features, there you will be asked for the Key you have to enter!!
Solved ;o)
Answer: Yes, I agree with Akil.
Make sure you go to your Sharepoint Central Admin to make the changes. It should not take too long for the "migration/status" changes
:-)
Answer: And what could be the reason for NOT having enabled the Product Key Box?
As far as I remember on install I introduced my key for "SharePoint Server 2010 For Internet Sites Enterprise", but when I try to install Project Server 2010 it keeps telling me that SharePoint Server is NOT installed. I tried to check that in fact the Enterprise version was activated... but not only I can't type the key but also in the section 'Current license' is empty.


Humidity Levels

Question: What is a healthy and safe humidity level that I should try to keep my house at?
Answer: In the winter it is 30 to 40 percent in cold climates.  During the summer, indoor humidity levels should be kept below about 65 percent to minimize the potential for mold growth and below about 50 percent to minimize dust mites.
See this article for some more great information on humidity levels: Keep Your Home Healthy
Comment: Cannot stress how important it is to be under the mold cut-off! (60-65%)
Comment: Aforementioned article in PDF: http://www.ag.ndsu.edu/homemoisture/documents/pdf/homehealthy-lesson.pdf

Humidity Levels


sharing between ubuntu 12.04 and windows8 with online user

Question: I've searched for solutions and tried numerous things but nothing so far has worked. I'm trying to access shares on an ubuntu 12.04 pc from my windows 8 pc. In my win8 machine I can see the shares, but when I try to access them I get the dreaded "You do not have permission to access..."
I have samba installed of course and I have edited the conf in numerous ways according to solutions. I also tried installing Samba Server Configuration to no avail.
Nothing has worked. Any clues?
Here's my smb.conf:
<code>#
# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#
# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options most of which
# are not shown in this example
#
# Some options that are often worth tuning have been included as
# commented-out examples in this file.
#  - When such options are commented with ";", the proposed setting
#    differs from the default Samba behaviour
#  - When commented with "#", the proposed setting is the default
#    behaviour of Samba but the option is considered important
#    enough to be mentioned here
#
# NOTE: Whenever you modify this file you should run the command
# "testparm" to check that you have not made any basic syntactic
# errors.
# A well-established practice is to name the original file
# "smb.conf.master" and create the "real" config file with
# testparm -s smb.conf.master >smb.conf
# This minimizes the size of the really used smb.conf file
# which, according to the Samba Team, impacts performance
# However, use this with caution if your smb.conf file contains nested
# "include" statements. See Debian bug #483187 for a case
# where using a master file is not a good idea.
#

#======================= Global Settings =======================

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of
    workgroup = WORKGROUP

# server string is the equivalent of the NT Description field
    server string = %h server (Samba, Ubuntu)

# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba to enable its WINS Server
#   wins support = yes

# WINS Server - Tells the NMBD components of Samba to be a WINS Client
# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
;   wins server = w.x.y.z

# This will prevent nmbd to search for NetBIOS names through DNS.
    dns proxy = no

# What naming service and in what order should we use to resolve host names
# to IP addresses
;   name resolve order = wins lmhosts host bcast

#### Networking ####

# The specific set of interfaces / networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
;   interfaces = 127.0.0.0/8 eth0

# Only bind to the named interfaces and/or networks; you must use the
# 'interfaces' option above to use this.
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself.  However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
;   bind interfaces only = yes

#### Debugging/Accounting ####

# This tells Samba to use a separate log file for each machine
# that connects
    log file = /var/log/samba/log.%m

# Cap the size of the individual log files (in KiB).
    max log size = 1000

# If you want Samba to only log through syslog then set the following
# parameter to 'yes'.
#   syslog only = no

# We want Samba to log a minimum amount of information to syslog. Everything
# should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
# through syslog you should set the following parameter to something higher.
    syslog = 0

# Do something sensible when Samba crashes: mail the admin a backtrace
    panic action = /usr/share/samba/panic-action %d

####### Authentication #######

# "security = user" is always a good idea. This will require a Unix account
# in this server for every user accessing the server. See
# /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html
# in the samba-doc package for details.
#   security = user

# You may wish to use password encryption.  See the section on
# 'encrypt passwords' in the smb.conf(5) manpage before enabling.
;   encrypt passwords = yes

# If you are using encrypted passwords, Samba will need to know what
# password database type you are using.
;   passdb backend = tdbsam

    obey pam restrictions = yes

# This boolean parameter controls whether Samba attempts to sync the Unix
# password with the SMB password when the encrypted SMB password in the
# passdb is changed.
    unix password sync = yes

# For Unix password sync to work on a Debian GNU/Linux system, the following
# parameters must be set (thanks to Ian Kahan <<email@example.com> for
# sending the correct chat script for the passwd program in Debian Sarge).
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# 'passwd program'. The default is 'no'.
    pam password change = yes

# This option controls how unsuccessful authentication attempts are mapped
# to anonymous connections
    map to guest = bad user

########## Domains ###########

# Is this machine able to authenticate users. Both PDC and BDC
# must have this setting enabled. If you are the BDC you must
# change the 'domain master' setting to no
#
;   domain logons = yes
#
# The following setting only takes effect if 'domain logons' is set
# It specifies the location of the user's profile directory
# from the client point of view)
# The following required a [profiles] share to be setup on the
# samba server (see below)
;   logon path = \\%N\profiles\%U
# Another common choice is storing the profile in the user's home directory
# (this is Samba's default)
#   logon path = \\%N\%U\profile

# The following setting only takes effect if 'domain logons' is set
# It specifies the location of a user's home directory (from the client
# point of view)
;   logon drive = H:
#   logon home = \\%N\%U

# The following setting only takes effect if 'domain logons' is set
# It specifies the script to run during logon. The script must be stored
# in the [netlogon] share
# NOTE: Must be store in 'DOS' file format convention
;   logon script = logon.cmd

# This allows Unix users to be created on the domain controller via the SAMR
# RPC pipe.  The example command creates a user account with a disabled Unix
# password; please adapt to your needs
; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u

# This allows machine accounts to be created on the domain controller via the
# SAMR RPC pipe.
# The following assumes a "machines" group exists on the system
; add machine script  = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u

# This allows Unix groups to be created on the domain controller via the SAMR
# RPC pipe.
; add group script = /usr/sbin/addgroup --force-badname %g

########## Printing ##########

# If you want to automatically load your printer list rather
# than setting them up individually then you'll need this
#   load printers = yes

# lpr(ng) printing. You may wish to override the location of the
# printcap file
;   printing = bsd
;   printcap name = /etc/printcap

# CUPS printing.  See also the cupsaddsmb(8) manpage in the
# cupsys-client package.
;   printing = cups
;   printcap name = cups

############ Misc ############

# Using the following line enables you to customise your configuration
# on a per machine basis. The %m gets replaced with the netbios name
# of the machine that is connecting
;   include = /home/samba/etc/smb.conf.%m

# Most people will find that this option gives better performance.
# See smb.conf(5) and /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/speed.html
# for details
# You may want to add the following on a Linux system:
#         SO_RCVBUF=8192 SO_SNDBUF=8192
#   socket options = TCP_NODELAY

# The following parameter is useful only if you have the linpopup package
# installed. The samba maintainer and the linpopup maintainer are
# working to ease installation and configuration of linpopup and samba.
;   message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &

# Domain Master specifies Samba to be the Domain Master Browser. If this
# machine will be configured as a BDC (a secondary logon server), you
# must set this to 'no'; otherwise, the default behavior is recommended.
#   domain master = auto

# Some defaults for winbind (make sure you're not using the ranges
# for something else.)
;   idmap uid = 10000-20000
;   idmap gid = 10000-20000
;   template shell = /bin/bash

# The following was the default behaviour in sarge,
# but samba upstream reverted the default because it might induce
# performance issues in large organizations.
# See Debian bug #368251 for some of the consequences of *not*
# having this setting and smb.conf(5) for details.
;   winbind enum groups = yes
;   winbind enum users = yes

# Setup usershare options to enable non-root users to share folders
# with the net usershare command.

# Maximum number of usershare. 0 (default) means that usershare is disabled.
;   usershare max shares = 100

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated ones
    usershare allow guests = yes
    username map = /etc/samba/smbusers
    security = user
;   guest ok = no
;   guest account = nobody

#======================= Share Definitions =======================

# Un-comment the following (and tweak the other settings below to suit)
# to enable the default home directory shares. This will share each
# user's home director as \\server\username
;[homes]
;   comment = Home Directories
;   browseable = no

# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
;   read only = yes

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
;   create mask = 0700

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permiss
</code>
Comment: possible duplicate of [Here's my smb.conf file. Whats wrong with it?](http://askubuntu.com/questions/424722/heres-my-smb-conf-file-whats-wrong-with-it)
Answer: Make sure that same user name and password exists in both host and guest computers.
And give permissions to access files and folders to that use from both end.


How can I use an USB-stick as an CD-disc?

Question: I'm currently using Ubuntu (11.04), and I'd like to use an USB-stick as a CD-disc to "burn" the JNode operating system on it. Is there an easy way to do this?
Answer: You can use Unetbootin to create bootable USB sticks for installing various Linux distros from (or to use live).
Comment: Indeed! Big thx
Comment: The tool does a lot of the work that I need, but doesn't work with JNode... However, for other Ubuntu Distro's, it works great!
Answer: Yumi is a great tool that allows you to make bootable usb sticks. It also has a built in list of Operating Systems (including all of the Ubuntu variants) and bootable tools that you can pick, download, and then add to the boot menu.  It is extremely simple to use and within a few clicks you can have a bootable usb stick with multiple OSes and tools to choose from on boot.
You can also choose your own isos that are not on the list.
Answer: HowtoGeek providing a complete tutorial on this that how can you install the Ubuntu through USB stick. Ubuntu Forum also provide the detail about this method. Hope you will find them useful.


13" Macbook Pro running Lion loses battery fast?

Question: I bought my 13" MacBook Pro last March 27, 2011. It's 5 months old now. coconutBattery shows that I've lost 12% of the original battery capacity in just 5 months with 238 load cycles. I read in some of the questions here that one MacBook user just lost 1% of his battery capacity in 2 years! How could I have lost such a large percentage of my battery capacity in just 5 months?
Answer: Battery life depends greatly on use. 238 charge cycles in 5 months by most standards is pretty high. More importantly if your following the guidelines Apple has published for their battery use are you getting usage times that are in line with their estimates? Coconut battery isn't always accurate, its best to trust the built-in tools for diagnostic information.
You can also check System Information (Lion) or System Profiler (10.6) under power to get an idea of the stats on the battery. Double check to see what your Full Charge Capacity and the Charge Cycles are.
Any Apple Store or Authorized Service Provider can run diagnostics on the battery as stated by Wheat Williams. If it is faulty it's covered by your one year limited warranty.
Also check for run away processes you can check Activity Monitor, these could be draining the battery faster and driving up charge cycles.
http://support.apple.com/kb/TS1473
Answer: Because it is under warranty, take it to an Apple Store or other authorized repair facility and have the Genius Bar guys test the battery. If it fails during the warranty period, they will replace it for free. And consider buying that AppleCare extendend warranty package so you can get telephone tech support from Apple and so you can extend your warranty coverage for two more years.
The guys at your service center can explain to you about proper SMC reset and the battery conditioning procedure.
The only way to get warranty care is to go in and ask for it.
Answer: All batteries have natural fluctuations in the voltage and charge capacity. Also, they all degrade over time based on three general things:

Temperature ages batteries in a non-linear manner - exceptionally hot temperatures above (95F / 35C) will age them much faster and permanently damage them.
Each full charge cycle takes a little of the ability of the cell to accept a subsequent charge.
Batteries that fail prematurely are the exception, but most get flagged as faulty - so your mac will tell you to check your battery.

Let's assume #3 isn't happening (and you can of course take it in for service any time you want a check up). It's more important to watch how fast your Full Charge Capacity is changing over time.
Do read all the tips at http://www.apple.com/batteries/notebooks.html and do make sure to discharge it fully once a month.
The new batteries with adaptive charging circuitry no longer require end user calibration, so just follow the tips, keep an eye and replace it if needed or it fails to meet the specifications (80% FCC at 5 years / 1000 cycles) you might be eligible for a warranty exchange (keeping in mind AppleCare is 3 years - limited warranty one year might end before the 5 years design period.)
Answer: This is some problem with spotlight indexing server.
Disabling Spotlight in Snow Leopard solves this. Launch the Terminal and type the following command:
sudo mdutil -a -i off
Via OS X Daily


What is System Code Total Bytes

Question: I am trying to use perfmon, and according to MSDN, the "System Code Total Bytes" counter ...

Shows the size, in bytes, of pageable operating system code currently in virtual memory. It is a measure of the amount of physical memory being used by the operating system that can be written to disk when not in use. This value is calculated by adding the bytes in Ntoskrnl.exe, Hal.dll, the boot drivers, and file systems loaded by Ntldr/osloader. This counter does not include code that must remain in physical memory and cannot be written to disk.

But isn't that a contradiction? It says it is the "size in virtual memory" and the very next sentence it says it's the "amount of physical memory being used". From my understanding, just because virtual memory exists does not mean there is any physical memory mapped to it because memory can be paged to the pagefile on disk when there isn't enough phsyical ram. so size of virtual memory and size of physical memory are distinctly different.
another thing which confuses me is that the "value is calculated by adding the bytes in Ntoskrnl.exe, Hal.dll, the boot drivers, and file systems loaded by Ntldr/osloader". So wouldn't that number be a constant irrespective of how much of those files are loaded into virtual/physical memory?
Can someone help me understand what this counter means?
Answer: It is probably a typo since the related counter, "System Code Resident Bytes", includes the description "Shows the size, in bytes, of operating system code currently in physical memory that can be written to disk when not in use." It is further explained that "This value is a component of Memory\ System Code Total Bytes, which also includes operating system code on disk."
Thus, "System Code Total Bytes" is the total bytes in virtual memory, which includes both resident (in physical memory) and non-resident (on disk).
Regarding the second question: The value for "System Code Total Bytes" may indeed be fairly constant, but "System Code Resident Bytes" may not be.  The total bytes is there to help calcluate percentages of resident/non-resident bytes.

What is System Code Total Bytes


Exporting / Saving Pattern Swatches in Illustrator

Question: I would like to keep the patterns I have created in Illustrator CS6 in a handy file. Currently, I just make an object, apply the pattern, and copy/paste the object to transfer the pattern to a different file, but would like to save all of the patterns so that I can just load them all at once. Is the Save Swatch Library as ASE the best way to do this? I want to be sure I can share these patterns with others.
Answer: You can't save pattern swatches in ase format:

The best way to to this is to have an Illustrator file that you can simply paste a new pattern-filled shape to then save.
You can then share that .ai file and load it as an "Other Library" to import all the pattern swatches.
Comment: Thank you @scott, I was afraid there was not an easy way!
Comment: It actually is pretty easy. Create a new file and delete all swatches from it (symbols and graphic styles too to keep size down). Then save the file. if you set up a shortcut to this (pattern) file. Simply open, paste, save. Then when you need the patterns, load the file as a Library, same as you would for .ase files.
Answer: The quickest/easiest way to do this in Mac OS X and Windows is simply;

Open the file with the original desired pattern you want to use
Be sure the "Brushes" palette window is displayed
Open a new/existing file you want to use said pattern
From the original file, click and drag the desired pattern, form the brushes palette, to the tab of the new file
Let the mouse hover for a moment and your pattern will appear in your new document


About abelian groups

Question: If the determinant of the presentation matrix for an abelian group is one, does it mean that the abelian group is simply the trivial group?
Comment: What is a presentation matrix?
Comment: I am referring to this:http://bookre.org/reader?file=1096064&pg=487
Answer: Yes.
Using the Smith normal form (which the book uses for the proof of the structure theorem), we can assume that the presentation matrix $P$ is of the form
$$ P = \begin{pmatrix} d_1 & 0 & \dotsc & 0 \\
                     0 & d_2 & \ddots & 0 \\
                     \vdots & \ddots & \ddots & 0 \\
                     0 & 0 & 0 & d_n \end{pmatrix} \in \mathbb Z^{n\times n}
$$
with integers $d_i$ such that $d_i\mid d_{i+1}$ for $i \leq 1 \leq n-1$. Then we know that $G$ is isomorphic to the product
$$ (\mathbb Z / d_1 \mathbb Z) \oplus \dotsb \oplus (\mathbb Z / d_n \mathbb Z) =
\bigoplus_{i=1}^n \mathbb Z/ d_i \mathbb Z.$$
If the determinant of $P$ is $1$, all $d_i$ have to be $1$. But this implies that all $\mathbb Z / d_i \mathbb Z$ are trivial. Thus $G$ is trivial.
If you are familiar with $\mathbb Z$-modules:
Assume your finitely generated abelian group $G$ gives rise to a surjective morphism $\mathbb Z^n \to G$ with kernel $K$. Thus $\mathbb Z^n/K \cong G$. So we only have to consider $\mathbb Z^n / K$. The base change matrix between a basis of $\mathbb Z ^n$ and $K$ is exactly a presentation matrix of $G$.
Now comes the real deal. Whenever you have finitely generated $\mathbb Z$-modules $N \subseteq M$ such that the quotient $M/N$ is finite, its order $\left|M/N\right|$ is given by $\left|\det(T)\right|$, where $T$ is the transformation matrix between a basis of $M$ and a basis of $N$. This can be shown using the Smith normal form, which you have hopefully encountered.
Hence $\left|G\right| = \left|\mathbb Z^n/K\right| = \left|\det(P)\right| = 1$, where $P$ denotes a presentation matrix of $G$.
Comment: the first part of your answer is exactly what i did when i said that the corresponding abelian group should be trivial. thanks
Comment: You are welcome. The second part is interesting (I think) if one knows more about the big picture (how abelian groups fit into the theory of modules). But it is not neccessary when dealing with abelian groups.

About abelian groups


Am I eligible for a Dutch passport through my biological father and paternal grandparents?

Question: My biological father as well as his parents were born in the Netherlands. My father lived in South Africa for 18 years and never took up the citizenship of South Africa. He has since returned to the Netherlands. His parents have always lived in the Netherlands. I was born in South Africa in 1996. My mother is South African. My mother and biological father were married at the time of my birth in 1996. Subsequently my parents divorced and my mother's new husband adopted me. Am I still eligible for a Dutch passport through either my biological father or my paternal grandparents?
Comment: Did your stepfather adopt you before or after your 18th birthday?
Comment: before my 18th birthday, i was adopted in 2002
Answer: Disclaimer
Dutch nationality law has changed several times over the last few decades, and the controlling law is that in force at the time of your birth and at the time of your adoption.  In particular, the exception mentioned below was added to the law at some point before 2003, so whether your adoption occurred before or after that point may be significant.  There is also a matter of interpretation with regard to the exception, and I am neither a lawyer nor familiar with principles of statutory interpretation in Dutch law.
Introduction
The answer largely depends on whether your stepfather adopted you before your 18th birthday.  If not, you are almost certainly Dutch; if so, it is not clear to me whether you are Dutch.
(The answer also depends on whether your adoptive father is South African, but I assume that he is.  I also assume that you have always resided in South Africa.)
Analysis
Your paternal grandparents are not particularly relevant to the analysis; the first important fact is that your father was Dutch at the time of your birth, which means that you were Dutch when you were born.  The next question is then whether you have lost your Dutch nationality.  This may have happened when your stepfather adopted you.
Adoption at 18 or older
If your stepfather adopted you after your 18th birthday, you did not lose your Dutch nationality.  In this case, you are Dutch and can get a Dutch passport, but you will lose your Dutch nationality on your 28th birthday unless you do one of the following:

renounce your South African nationality, or
live for an uninterrupted period of 1 year in the Kingdom of the Netherlands or the European Union, or
Receive a Dutch passport or identity card, or a declaration of Dutch nationality.

In the third case, a new 10-year period will begin when the document is issued; in the second case, a new 10-year period will begin if you move somewhere outside the Kingdom of the Netherlands or the European Union.  At the end of the ten-year period, you lose your Dutch nationality unless you again reset it by one of those actions.  (There are some other exceptions to the 10-year period that apply only in rare cases; it's not necessary to consider them if you always get a new passport with enough time before your old one expires.)
Adoption before 18 years
If your stepfather adopted you before your 18th birthday, it is not clear to me whether you are Dutch.  There are several relevant articles in the Rijkswet op het Nederlanderschap.
The first is Article 14 section 4, which basically says that a minor loses Dutch nationality through the dissolution of the legal family relationship on which the Dutch nationality is based.  An adoption normally breaks the family relationship between the child and the birth parent; if that happened with you then this paragraph would apply.
The second is Article 16, section 1(a), which says that a minor loses Dutch nationality when being adopted (among other things) by a non-Dutch parent, if the child gains the nationality of the non-Dutch parent or already has it.  Since you were already South African and were adopted (I assume) by a South African man, this paragraph may apply to you.
I say "may" because of the third relevant portion of the law, Article 16, section 2, which regulates exceptions to section 1.  Paragraph (e) provides an exception for a minor who was born in "the country of the acquired nationality." This would clearly apply to you if you had acquired South African nationality through the adoption, but since you already had it, you did not acquire it at that time, and it is not clear whether this exception applies.  It may apply because you acquired South African nationality at the time of your birth, or it may not apply because you did not acquire South African nationality at the time of your adoption.
Furthermore, as mentioned in the disclaimer above, it is also not clear whether this exception existed at the time of your adoption, because I do not know when it was added and you have not said when you were adopted.
Conclusion
If the adoption occurred when you were younger than 18 years, therefore, both of the following must be true for you to be Dutch:

Considering Art 14(4), the adoption did not sever the legal parent-child relationship between you and your birth father.
Considering Art 16(2), this text was added to the law before your adoption, and it also applies in cases where the child would lose Dutch nationality because of already having the same nationality as the adoptive parent.

Advice
Ask the consulate to make a determination.  You can start either at Applying for a Dutch nationality certificate or at Applying for a passport or identity card.
The certificate costs €30, while a passport costs €130.77.  I would therefore apply for the certificate first, unless the consulate will make the determination of your nationality before you submit a formal application, in which case I would just apply for the passport (I don't remember when I had to pay the fee when I did this about 15 years ago).
You may also want to talk to a Dutch lawyer who specializes in nationality law, immigration law, or family law.  You might be able to establish that somehow your adoption did not sever the legal relationship with your birth father.  Perhaps the adoption was not valid under Dutch law even though it was under South African law.  A lawyer in the right area of practice should also be able to clear up the question of whether the Art 16(2)(e) exception applies to a child who already has the nationality of the adoptive parent.
Don't wait.  If you reach your 28th birthday without taking care of this, you will certainly lose your Dutch nationality if you didn't lose it earlier.