There are many posts, votes and answers indicating using lock (this) is not a recommends pattern (not to mention a bad one).  Have a look at , for example.  As I'm trying to investigate this pattern a little bit, and wanted to ask whether anyone someone can think of a scenario in which using lock (this) is actually recommended, or even a must?
The  says that public class SomeObject {   public void SomeOperation()   {     lock(this)     {       //Access instance variables     }   } }  is &quot;a problem if the instance can be accessed publicly&quot;. I'm wondering why? Is it because the lock will be held longer than necessary? Or is there some more insidious reason?
Is there a difference between "==" and "is"? Question:  Is exception handling in Java actually slow?  Conventional wisdom, as well as a lot of Google results, says that exceptional logic shouldn't be used for normal program flow in Java.  Two reasons are usually given,   it is really slow - even an order of magnitude slower than regular code (the reasons given vary),     and    it is messy because people expect only errors to be handled in exceptional code.     This question is about #1.  As an example,  describes Java exception handling as "very slow" and relates the slowness to the creation of the exception message string - "this string is then used in creating the exception object that is thrown. This is not fast."  The article  says that "the reason for this is due to the object creation aspect of exception handling, which thereby makes throwing exceptions inherently slow".  Another reason out there is that the stack trace generation is what slows it down.  My testing (using Java 1.6.0_07, Java HotSpot 10.0, on 32 bit Linux), indicates that exception handling is no slower than regular code.  I tried running a method in a loop that executes some code.  At the end of the method, I use a boolean to indicate whether to return or throw.  This way the actual processing is the same. I tried running the methods in different orders and averaging my test times, thinking it may have been the JVM warming up.  In all my tests, the throw was at least as fast as the return, if not faster (up to 3.1% faster).  I am completely open to the possibility that my tests were wrong, but I haven't seen anything out there in the way of the code sample, test comparisons, or results in the last year or two that show exception handling in Java to actually be slow.  What leads me down this path was an API I needed to use that threw exceptions as part of normal control logic.  I wanted to correct them in their usage, but now I may not be able to.  Will I instead have to praise them on their forward thinking?  In the paper , the authors suggest that the presence of exception handlers alone, even if no exceptions are thrown, is enough to prevent the JIT compiler from optimizing the code properly, thus slowing it down.  I haven't tested this theory yet. BASH script to set environment variables not working I've written the following script to set some environment variables when needed.  #!/bin/sh export BASE=/home/develop/trees echo $BASE export PATH=$PATH:$BASE echo $PATH   Below the command and the results I can see on my terminal: the script runs, but the variables are not set at the end.  ~$: ./script.sh /home/develop/trees /bin:......:/home/develop/trees ~$: echo $BASE  ~$:    What's wrong? Thanks in advance. Mirko "Has been" vs "was" Would you please explain the difference between these two sentences?     Spain ceded (or gave) Puerto Rico to the United States. Since then, Puerto Rico has been a U.S. territory.      Spain ceded(or gave) Puerto Rico to the United States. Since then, Puerto Rico was a U.S. territory.   I am stuck between 'has been' and 'was' in the above sentences. I propose to let users vote on closing activities of moderators and other users with closevoting power.  Like this:       closed as exact duplicate by Michael Mrozek, waiwai933, Arjan, YOU, Yi Jiang 6 hours ago      This question covers exactly the same ground as earlier questions on this topic; its answers may be merged with another identical question.   Make it like this:     closed as exact duplicate by Michael Mrozek, waiwai933, Arjan, YOU, Yi Jiang 6 hours ago   fair/unfair close? [agree] [disagree]      This question covers exactly the same ground as earlier questions on this topic; its answers may be merged with another identical question.   Then the system will gather statistics and automatically grant more closing powers to those users who enjoy support of the community and revoke those powers from those mostly casting contradictory votes.  It would seem that granting the same powers to everybody has not resulted in balance but in public disorder. Perhaps it is reflective of American lifestyle (everybody has the right and means to shoot anybody), but it's not the best way to run a society by far.  What I'm trying to say is that while granting powers to everybody in advance is generous, the maturity to wheel these powers in a fair way must be proven. By introducing community feedback this assessment process can be automatized. How to register my unregistered account Possible Duplicate:          I've been using my SO account for couple of days, but I am not registered and I do not want to lose all my questions. How can I register and keep my questions from my unregistered account? Error in pip: unsupported operand type(s) for -=: 'Retry' and 'int' I'm trying install the requests, but I can't do that. I'm using Ubuntu 16.04  I tried to install using  $ sudo pip install requests   and I get the following error   Collecting requests Exception: Traceback (most recent call last):   File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main     status = self.run(options, args)   File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 317, in run     requirement_set.prepare_files(finder)   File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files     ignore_dependencies=self.ignore_dependencies))   File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 512, in _prepare_file     finder, self.upgrade, require_hashes)   File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 273, in populate_link     self.link = finder.find_requirement(self, upgrade)   File "/usr/lib/python2.7/dist-packages/pip/index.py", line 442, in find_requirement     all_candidates = self.find_all_candidates(req.name)   File "/usr/lib/python2.7/dist-packages/pip/index.py", line 400, in find_all_candidates     for page in self._get_pages(url_locations, project_name):   File "/usr/lib/python2.7/dist-packages/pip/index.py", line 545, in _get_pages     page = self._get_page(location)   File "/usr/lib/python2.7/dist-packages/pip/index.py", line 648, in _get_page     return HTMLPage.get_page(link, session=self.session)   File "/usr/lib/python2.7/dist-packages/pip/index.py", line 757, in get_page     "Cache-Control": "max-age=600",   File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 480, in get     return self.request('GET', url, **kwargs)   File "/usr/lib/python2.7/dist-packages/pip/download.py", line 378, in request     return super(PipSession, self).request(method, url, *args, **kwargs)   File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 468, in request     resp = self.send(prep, **send_kwargs)   File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 597, in send     history = [resp for resp in gen] if allow_redirects else []   File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 195, in resolve_redirects     **adapter_kwargs   File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 576, in send     r = adapter.send(request, **kwargs)   File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 46, in send     resp = super(CacheControlAdapter, self).send(request, **kw)   File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/adapters.py", line 376, in send     timeout=timeout   File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 610, in urlopen     _stacktrace=sys.exc_info()[2])   File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 228, in increment     total -= 1 TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'   My python version is the 2.7 and the pip is 8.1.1 If humans were able to catch all sun energy reaching the earth for their use, will the climate change? I guess that energy will be used up and, at the end, will contribute to heat the earth, so I see no big differences...  please explain your point of view. Provide a means to reward users and their answers (decoupled from bounties) Suppose a package provides whatever.service file so certain events (including whatever.socket) cause a daemon to start with a certain configuration.  I want to disable this completely. In particular, I want the old socket and any other unit files that might refer to this service by name to be unable to start the daemon.  Instead, I want to create my own unit files for this daemon with a different .socket unit and different environment variables. I also want my override to automatically take account of possible upstream updates to the original unit file (which my current solution of copying whatever.service as whatever-modified.service and editing it unfortunately does not provide).  If I create the following symlinks and files: /etc/systemd/system/whatever.service → /dev/null /etc/systemd/system/whatever-modified.service → /usr/lib/systemd/system/whatever.service /etc/systemd/system/whatever-modified.service.d/fix.conf  systemd considers the new service to be masked as well and refuses to start it. How to avoid this? Faster language/keyboard swapping I like making a habit to use the different languages I study, to keep that knowledge fresh. So I like typing in those languages when I get the chance. But swapping keyboards under OSX is just a little too cumbersome.  For example, I was just typing the name of one of my co-workers in its original 汉子 form instead of as an English transliteration. It's nice. It reminds me to pronounce her name properly, with tone, etc., which otherwise doesn't come naturally. The transliteration of her name is especially misleading. Everyone at the company is pronouncing it wrong.   But to swap into writing 汉子 I have to mouse up to the top menu bar, select a new keyboard, type, mouse back up to the top bar, and then select back into English. I know there's a keyboard shortcut, but with 5 different keyboards active in my menu, cycling through 5 to get to the one I want feels just as cumbersome.  Is there a way to attach a hotkey to a specific keyboard, or some other way to make swapping character sets lighter? Proof of Russian Peasant Multiplication I'm studying a combinatorics text () in preparation for taking discrete math this upcoming semester. I've taken a fair amount of math in college, through Calculus II, but this is my first 500+ level math course.    In chapter 2 of the  book, the author introduces an algorithm for multiplication called Russian Peasant Multiplication. I want to prove that this algorithm will always result in the product of two numbers.  I've been chewing on the proof for a while now, and just can't seem to get any traction. Thanks in advance for any help.  Description of Algorithm  I'll try to explain the algorithm clearly. The goal of the algorithm is to find the product of two numbers $m$ and $n$. The below table is filled out for $m$ and $n$:  $$\begin{array}{c} m&amp;&amp;n&amp;\\ \hline \bigl\lfloor \frac{m}{2} \bigr\rfloor&amp;&amp; 2n \\ \bigl\lfloor \frac{m}{4} \bigr\rfloor&amp;&amp; 4n \\ \bigl\lfloor \frac{m}{8} \bigr\rfloor&amp;&amp; 8n \\ \bigl\lfloor \frac{m}{16} \bigr\rfloor&amp;&amp; 16n \\ \bigl\lfloor \frac{m}{32} \bigr\rfloor&amp;&amp; 32n \\ \end{array}$$  The sequence of numbers in both columns is the sequence $a_n = 2a_{n-1}\text{ where }a_1=2$. The columns are extended down until the value in the left column is equal to the number one. After filling out the table, the product is found by adding the values of the right column where the left column is an odd number.  For example, to multiply 18 and 37 with the algorithm:  $$\begin{array}{c} m&amp;&amp;n&amp;\\ \hline 18 &amp;&amp; 37 \\ 9 &amp;&amp; 74 \\ 4 &amp;&amp; 148 \\ 2 &amp;&amp; 296 \\ 1 &amp;&amp; 592 \\ \end{array}$$  To find the product, cross out values of the left column where the value of the right column is even:  $$\begin{array}{c} m&amp;&amp;n&amp;\\ \hline \require{enclose} \enclose{horizontalstrike}{18} &amp;&amp; \enclose{horizontalstrike}{37} \\ 9 &amp;&amp; 74 \\ \enclose{horizontalstrike}{4} &amp;&amp; \enclose{horizontalstrike}{148} \\ \enclose{horizontalstrike}{2} &amp;&amp; \enclose{horizontalstrike}{296} \\ 1 &amp;&amp; 592 \\ \end{array}$$  And add the remaining numbers in the right column to get the result: $18\times37=74+592=666$  Alternate Description of Algorithm  As an aside, here is a shorter way to describe the algorithm, repeat the below steps until the left column == 1:  • Halve the last number in the first column • Write the result below (discard the remainder) • Double the last number in the first column. • Write the result below.   Now, for every even number in the first column, delete the adjacent number in the second column. Add the remaining numbers in the second column.  What I've done so Far  I haven't been able to get much of anywhere on the proof. One thing I did was create a bit of a different way of arriving at the same outcome:  $$\begin{array}{c} m&amp;&amp;n&amp;&amp;\text{index}&amp;&amp;\text{remainder}&amp;&amp;\text{if remainder == 1, }n\times2^{Index}&amp;\\ \hline 18 &amp;&amp; 37 &amp;&amp; 0 &amp;&amp; 0 \\ 9 &amp;&amp; 74 &amp;&amp; 1 &amp;&amp; 1 &amp;&amp; 74\\ 4 &amp;&amp; 148 &amp;&amp; 2 &amp;&amp; 0 \\ 2 &amp;&amp; 296 &amp;&amp; 3 &amp;&amp; 0 \\ 1 &amp;&amp; 592 &amp;&amp; 4 &amp;&amp; 1 &amp;&amp; 592\\ \end{array}$$  Which brings to light the relationship between this algorithm and binary numbers (the fourth column in the above table is the product in binary, read bottom to top).   I also wrote some Python functions to help me explore the problem, How can I network two Ubuntu computers, so that they can "see" each other at an IP address? Can you help me with my software licensing issue? This is a  about Licensing.    Questions on licensing are off-topic on Server Fault.  If your question has been closed as a duplicate of this question, then this is because we want to help you understand why licence questions are off topic rather than just telling you "it just is". In all likelihood, this question will not address your question directly, it was not meant to.    I have a question regarding software licensing. Can the Server Fault community please help with the following:   How many licenses do I need? Is this licensing configuration valid? What CALs do I need to be properly licensed? Can I run this product in a virtual environment? Can I downgrade this product to an earlier version? Am I entitled to feature X with license Y? How to reverse the direction of the y axes Are there any stats about the percentage of close reasons used to close questions   Successfully (preferably, based on the number of closed questions) Unsuccessfully (alternatively, the total percentags of close votes cast by users)   ?   Is there any way to get this from the query explorer? I have GM'd several RPGs before that are not D&amp;D (Fate, Deathwatch, Star Wars). We first tried to play D&amp;D using the 3.5 edition and it went horribly — too many books and too many options with no idea of where to start.  I have been told that 5E takes care of all that and is easier and more fun so I want to try that but I would like a definitive list of what I need.  I expect that the kinds of books we need divide up like this:   Rulebook for me as GM Rulebook for players Fluff for everyone Monster book for me as GM   Links to these would be helpful as we got very confused with the 3.5 books — who should use what books confused us.  What other things do we need to play a campaign? I expect things like:   Dice: what kinds and how many of each kind, roughly. Models and maps. Do we need these? Does 5E need models and a grid or can it be played without (which is preferred)?   Is there anything else that we need that I haven't anticipated? Why is Minecraft giving an OpenGL error? I recently got Minecraft but not from the website, I paid for a code and everything seemed ok. When I tried to play the game a thing came up saying it crashed and then a message popped up saying The game crashed whilst initializing game     Error: java.lang.IllegalStateException: GLFW error 65542: WGL: The driver does not appear to support OpenGL. Version: Ubuntu 16.04  I have used it some weeks, but now it gives me this message when I'm trying to install software and update or upgrade:  Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable) /var/lib/apt/lists/ locked   followed by this:    .  and another error:  ** (appstreamcli:4560): WARNING **: Exception: Unable to get write lock on /var/cache/app-info/xapian/default: already locked   What should I do? Missed the MyOpenID demise; account lost forever? Is there any way to get my old account + metadata back if I have lost an account ties to MyOpenID?