Thursday, March 11, 2010

My poker book got delivered to a gynecologist:: or why ups should be spelled phonetically

I ordered "The Mathematics Of Poker" a little while ago and on Wednesday of last week it got delivered.... or at least on Friday when I checked the tracking data online to find out what had become of it I discovered it had been delivered and signed for... but not by me. At 3:00 on the dot Wednesday someone named "Kristie" had signed for my decidedly absent package.

I live in a house in which multiple rooms are rented out independently of each other. I wasn't certain if a Kristie had perhaps moved in recently and for some reason had decided to retain my package for safe keeping in her room instead of in the mantle in the front room. At least before I went about complaining I needed to find out if in fact I lived with a Kristie. After asking a number of my room mates and someone at the coffee shop that shares the plot of land on which this house is built I discovered that there was indeed a new female resident of the house but no one knew her name. Eventually the matter was solved by calling the land lord who informed me that the only woman living here went by the name of Angela (we shall ignore for the moment the fact that Yu-ling has been living here for longer than I have and she is definitely female).

Satisfied that there was no Kristie in the house the question became what address had my package really been delivered to? A little information could be gleaned from the tracking page.

SALT LAKE CITY, UT, US 03/03/2010 3:00 P.M. DELIVERY

03/03/2010 1:51 P.M. A CORRECT STREET NUMBER IS NEEDED FOR DELIVERY. UPS IS ATTEMPTING TO OBTAIN THIS INFORMATION
SALT LAKE CITY, UT, US 03/02/2010 9:16 P.M. DESTINATION SCAN

03/02/2010 2:51 P.M. A CORRECT STREET NUMBER IS NEEDED FOR DELIVERY. UPS IS ATTEMPTING TO OBTAIN THIS INFORMATION

03/02/2010 6:59 A.M. OUT FOR DELIVERY

03/02/2010 4:01 A.M. ARRIVAL SCAN
SPARKS, NV, US 03/01/2010 7:04 P.M. DEPARTURE SCAN

03/01/2010 12:59 P.M. ORIGIN SCAN
US 03/01/2010 2:19 A.M. BILLING INFORMATION RECEIVED

A correct street number is needed for delivery? What on earth did that mean? How did UPS manage to lose my address? I decided to go look and see what was on the adjacent streets at 1031 E and I found that in fact there was a house at 1031 one street over and in the other direction there was a hospital. There was no response when I knocked at the 1031 house and I assumed that delivery to the hospital was essentially impossible. Checking online showed that the address of the hospital was 1050 E giving it no commonality with my own.

As I was walking back from the 1031 abode however I saw the UPS carrier making his rounds and hurried to talk to him. I asked if any packages had perhaps given him some trouble on Wednesday and he responded that none had. I told him that I had been expecting a package and that it had been delivered and signed for by a Kristie but that I had no idea who that was. Very fortunately for me he knew who this Kristie was and told me that my package must have gotten delivered to a Doctor Hinson. Why this could possibly have happened neither he nor I had the slightest Idea though he assured me that the package was addressed 1050 E 100 S and to doctor Hinson.

I got online and found out that Doctor Hinson was an OB/GYN though I failed to find the location of her office. I let the matter sit until Monday. On monday my package arrived battered and bruised with a ups label that had apparently gone over the top of a label with my correct name and address partially ripped off. The box had been opened and retaped though the book inside was no worse for wear.

Checking the tracking page now there are two delivery lines one right after the other.





SALT LAKE CITY, UT, US 03/08/2010 3:42 P.M. DELIVERY
SALT LAKE CITY, UT, US 03/03/2010 3:00 P.M. DELIVERY

And then immediately after it dated 2 days after I had already received my book

SALT LAKE CITY, UT, US 03/10/20108:25 P.M.A CORRECT STREET NUMBER IS NEEDED FOR DELIVERY. UPS IS ATTEMPTING TO OBTAIN THIS INFORMATION / THE RECEIVER PICKED UP THE PACKAGE THAT WAS BEING HELD FOR THEM

I still have no idea what really happened in this whole mess but I thought the oddity was sufficient to merit sharing. This at the very least justifies me in a long time habit of half jokingly (now somewhat less than half jokingly) pronouncing ups as oops.

Sunday, March 7, 2010

Kissing Numbers

The kissing number in a certain number of dimensions is the greatest number of spheres that can be brought to touch (or "kiss") a central sphere if all the spheres are the same size. in one dimension the kissing number is 2. In two dimensions the problem is slightly less trivial but hardly difficult. It will probably not come as much of a surprise that the best arrangement in 2 dimensions is the familiar hexagonal arrangement.



A little thought will show that all the angular space around the central circle is taken up. Since the centers of 3 equally sized spheres mutually in contact with each other form an equilateral triangle.



So the minimum angle between the centers of any two circles touching the central circle is just Pi/3, the angle of an equilateral triangle. The sum of the angles between the centers of all of the circles touching the central circle must add up to a full 2*pi and each of these angles must be at least Pi/3. So the most circles we could possibly get to touch the central circle is 2*Pi/(Pi/3) = 6 circles. Since the hexagonal arrangement actually achieves this maximum we have our proof.

In three dimensions a good solution is found by taking the optimal 2 dimensional hexagonal arrangement of spheres around a central one in a plane but now it is possible to add spheres above and below the plane that touch the central sphere. Three spheres can be placed above and three spheres below the plane of the hexagonaly arranged spheres while still contacting the central sphere. The arrangement gives 6 + 3 + 3 = 12 as a lower bound for the kissing number in three dimensions. The centers of the spheres arrayed around the central one now form the vertices of one of the Archimedean solids, the Cuboctahedron.

Is this the optimal arrangement or is there possibly some more clever arrangement which could fit an extra sphere or two in? Generalizing our tactic for the two dimensional case we can ask what is the minimum angular space taken up by each sphere. A calculation of the solid angle taken up by a sphere touching the central sphere gives. Pi*(2-sqrt(3)) = 0.841 steradians. Dividing the total number of steradians by this value gives 4*pi/(Pi(2-sqrt(3)) = 14.92 So this gives us a definite upper limit of 14 spheres that we can fit around a central sphere.

But this bound ignores the fact that spheres do not fit flush with each other so we can't hope to fill all the angular space around the central sphere. Consider an arrangement of equal sized spheres placed at the vertices of a regular tetrahedron such that all the spheres touch each other. If all the spheres around the central sphere could be made to form such tetrahedral arrangements such that the lines between the centers of all touching exterior spheres form equilateral triangles clearly this arrangement would be optimal. I worked on a proof for a bit but already in three dimensions the problem is quite hard and I am not quite sure how to approach it. Nevertheless such tetrahedral arrangements are not possible in 3 dimensions or in any higher dimension either. The triangular packing of 2 dimensions is unique.

Wednesday, March 3, 2010

The Robots are gone

So the vast swarm of high school students is finally gone. It did end up turning out that my office was pretty much unusable between the hours of 2:30 and 9:00 and even during the day there came to usually be someone running around. Apparently there were roughly 150 students involved in the project in total though the number that I saw there usually averaged much closer to 30 people at a time.

I resisted posting over and over again about the inconvenience. I don't mind working in the library but there is a certain indignity in not being able to use my own office. Of course as everyone would tell me I was more than welcome to come and use my desk but when there are dozens of people coming and going and working together and discussing things and when those people are furthermore high school students... I think it will not be hard to convince you that the library was a much more conducive work/study area.

I really found it very irksome that the administration didn't deem this intrusion of my work space significant enough to merit a simple e-mail warning me of the swarm in advance. I first learned of the plan to share my office with these students when someone came by to install a box with the key to my office right next to my door. I wondered if perhaps my presence in this office had somehow gotten overlooked and on some official roster somewhere I was really supposed to be in one of the more populated grad student offices.

But after the last students had left and the copious amounts of garbage, and carpet, and plywood, and electronics, and dirty dishes, etc had been cleaned out of my office I got a letter from the department chair in my box.

Of course my first response was that this was some sort of official departmental action and therefore bad news. When I opened it I discovered it had a gift card in it. It actually turned out to be something of an apology.





Tim Anderton
Department of Physics and Astronomy
115 S 1400 E #201
University of Utah
Salt Lake City, Utah 84112

Dear Tim,

I would like to thank you for your accommodating the West High Robotics team during the past six weeks as they built and tested their robot in the James Fletcher Building. The group was very appreciative of the use of the grad student offices and the lab next door as this facilitated the construction and testing of the robot. Last year, the labs and office spaces for the robot build were located in Chemistry, but the mechanical construction took place in the Department of Physics and Astronomy machine shop.

I had not envisioned the amount of time the team would spend in the Department, and the number of people and/or computers that eventually were crowded into your small office. I know the imposition was rather severe at times. On behalf of the Physics Department and West High Robotics, I have enclosed a small gift card to the University of Utah bookstore. I sincerely appreciate your patience in the midst of all the chaos!

with Best Regards,
Dave Kieda
Chair, Department of Physics and Astronomy
Professor of Physics
University of Utah
Salt Lake City, Utah 84112




I am of somewhat mixed feelings about this. After the robotics team had gone I was happy to have shared my office with them. True it was quite a pain at times but at the same time I definitely approve of the project and think it is a good idea for them to have access to such a space in the department. The thing I most would have wanted is to have been asked permission or, failing that, at least been warned. On the other hand of course if I had been warned then I very probably would not have received this gift and apology. Especially since I would probably have ok'd the the use of the office anyway perhaps this is preferable. I can't help but wonder though if perhaps this is a manifestation of the fact that is often easier to ask forgiveness than permission. Ah, well C'est la vie.

P.S. On the off chance that Dave Kieda is reading this, Thanks for the letter and the card! I appreciate it despite my griping about my lowly status within the department.

ISS flyover

The International Space Station (ISS) will be visible over salt lake for about 7 minutes for the next few nights.

http://www.spaceweather.com/flybys/search_results_printable.php?zip=84112

its pretty fun to watch at least if you are inclined to be impressed by stuff like that, which I definitely am.

Wednesday, February 17, 2010

Recession a Speedo advertising ploy?


The red is the number of jobs created/lost during the last months of the Bush administration and the blue is the jobs created/lost during the first part of the Obama administration. Is it just a coincidence that the graph looks like a red and blue speedo with the crotch at the inauguration? I think not...

That being of course either because the stimulus plan worked or because speedo just ran the most expensive ad campaign in history.

the original graph can be found here

Thursday, February 11, 2010

Mouse activity: Surfing and chatting


I was surfing the net using stumble upon and I stumbled upon this little program which logs your mouse position. The lines are mouse paths and the blobs are places where the mouse sat for a while.

Thursday, February 4, 2010

a best k term approximation problem

Here is an interesting little question.

For all dictionaries of M vectors chosen from a N dimensional vector space what is the minimum value of the maximum relative error in the best k term approximation for any vector in the N dimensional space.

The term "dictionary" in this usage comes from signal processing (or at least that is where I got it from). A "dictionary" in this case is just any set of vectors which we can use to express other vectors in terms of. Generally in the case where the vectors are not linearly dependent on one another we call such a collection of vectors a "basis" a dictionary is the same except we remove the restriction that the vectors be linearly independent.

For a particular dictionary of vectors the best k term approximation of a vector X is the vector whose difference from X has the smallest value which can be constructed as a linear combination of k vectors chosen from our dictionary. For instance take the example of the plane and our dictionary is the usual basis {(0,1), (1,0)} then the best 1 term approximation to the vector X = (x, y) is (x, 0) if x > y and (0, y) otherwise. Obviously no other dictionary with only 2 vectors in it will do a better job making 1 term approximations. Also obviously the best 2(or more) term approximation of any vector is just that vector itself since our dictionary vectors span the space of all vectors in the plane.

In fact if you take a moment to reflect you will quickly see the answer to the general question if k >= N is 0. This is clear since if k >= N then M >= k >= N so we must be able to choose a basis of our N dimensional space in which case the best k term approximation of a vector X is just X itself. Slightly more interesting but with just as obvious a solution is the case where M < N. If we have fewer than N vectors to choose from then it doesn't matter which particular vectors we put in our dictionary just so long as they are all linearly independent of one another. Then we can build a M dimensional subspace of the N dimensional one and any M dimensional subspace is "as good" as any other one. Of course actually it is important to choose linearly independent vectors only if we also care about the average relative error of the best k term approximation as well as its maximum value. Since we can't even span the space with our M terms when we consider any vector orthogonal to our M dimensional subspace we get a relative error of 1. (relative error is the number |X-Y|/|X| where X is the vector to be approximated and Y is the approximating vector)

Lets return to the plane and examine the first interesting case N = 2 M = 3 k = 1. A first thought is to chose three vectors such that they form an equilateral triangle. With this choice no vector will ever be more than 30 degrees different than its best approximation by one of the 3 vectors. Since adding in -1 times the three vectors gives 6 equally distributed vectors yielding 360/6 = 60 degrees between vectors meaning we can be at most 30 degrees off from one of them. This gives a maximum relative error of sin(30)=1/2. The observation that we should equally distribute the vectors as much as possible solves the problem for odd M but obviously such solutions do not hold for even numbers since then half of our vectors would be just -1 times other vectors leaving us with a very obviously non-optimal dictionary.

A slight modification of our proceedure remedies this problem. We simply equidistribute the vectors not through the angles 0 to 2*Pi but from 0 to Pi treating the first vector as occupying both the positions at 0 and at Pi. This works for both odd and even numbers of vectors in M and it is not hard to see that this is in fact the optimal solution. Since if we consider the case k>=2 for n=2 we can obviously always exactly match any vector so this is a complete solution of the problem for 2 dimensions.

One might expect for there to be similar unique and hopefully even simple and structured solutions for higher dimensions. On this I cannot pretend to know what the solution to the problem is like but I am certain that the 3 dimensional and higher cases of the problem whatever the solution is it isn't simple. For the 2d case finding the most equidistributed set of M vectors was not hard. There is a unique(up to a rotation) such configuration for every M. But for 3 dimensions and higher this is no longer the case. Though if we have say 6 vectors a good bet for the optimal solution is to put them at the centers of half the faces of a dodecahedron. Very probably the platonic solids each correspond to a provably optimal and unique(again up to rotation) solution/s of the problem for specific numbers of vectors M.

Clearly though these solutions do not provide the general solution. Since the solution of the general case in exact terms would certainly be at best very difficult and at worst practically impossible here we move into the realm of heuristics for a bit. The most obvious first approximation to picking equidistributed vectors in some vector space is simply to choose vectors off the unit n-sphere with a completely uniform probability density.

If M>>N then this is probably a good enough approximation to work and a dictionary of random vectors picked from N dimensional space will give us close to the minimum possible value of the maximum error. Just how much larger than N M would have to be in order for this to be sufficiently good is certainly not clear.

What if we were to choose a first vector at random and then choose subsequent vectors by picking the vector which has the smallest maximum magnitude dot product with a vector already in our dictionary with ties being broken randomly. Clearly this would first result in the building of an orthogonal basis of the space. Once a complete orthogonal basis has resulted we would begin picking vectors from a complimentary basis and so on down the line. Such a construction is tempting until you realize that such a prescription doesn't give the right answer even for the simple 2D case.

On the other hand a probabilistic version of the same algorithm is perhaps worth considering. Consider the same algorithm but now modified so that every time we have chosen M vectors we randomly delete half of them and then again choose deterministically and again randomly remove vectors and continue this process for some large number of steps.

Wednesday, February 3, 2010

A man of 18 Letters (maybe 52)

I just got my bachelor's degree diplomas from the university in the mail. I do admit I now have the urge to go out and get some frames that will fit them and hang them up on my wall. Also that would help make it so that I don't lose them. (Note to self begin using better filing system than bedroom floor provides)

They are identical to one another except one has the word "Mathematics" in the middle and the other one has the word "Physics" in the middle. I guess now I'm a man of letters 18 to be exact 7 in physics and 11 in mathematics. Of course you could include the letters in "Bachelor of Science" which gives an extra 17 letters for each degree almost tripling my total count to 52.

Sunday, January 24, 2010

Pollard rho method of factorization: iterated functions and factorization

The Pollard rho method of factorization is a heuristic factorization method which is based on the idea of iterated functions. Say you take some particular function f(x) which maps the integers in the interval [0, n-1] to themselves. Then necessarily for any particular starting number you pick say x0 the sequence of numbers x0, f(x0), f(f(x0)), ... will necessarily start repeating itself before n+1 iterations of the function since there are only n possible values.

Of course not all numbers in the interval need belong to a cycle and if the function sometimes maps multiple numbers to a single number then there must exist numbers that do not belong to any cycle. Starting off our iterated function at one of these numbers will cause a string of numbers the first few of which will not be repeated followed by an infinite loop of numbers that form a cycle. This "shape" of the graph of such an iterated function is what gives the name to this method of factorization since the greek letter rho is likewise made up of a short tail which leads into a loop.

it is certainly not obvious how one could hope to use such an iterated function to factorize a number. The motivation lies with the birthday paradox namely that if we pick a random collection of say sqrt(n) numbers then the probability that 2 of them are congruent mod n is about 50%. So if we think about our iterated function as being a pseudo-random function then we would expect that after about sqrt(n) iterations we will have around a 50% chance of picking a value that we have picked before.

Finally the idea of how we can use iterated functions to factor numbers begins to form. The key idea is that if we consider a sequence of numbers then after about sqrt(p) iterations we can expect to have found 2 numbers which are congruent to each other mod p. We call this a collision mod p. Of course if n is the number that we are attempting to factor then n = p*q with p prime and while we do not have access to p we do have access to n. So instead of analyzing sequences mod p we look at sequences mod n. Since n is a multiple of p when we mod by n we do not change the value of the same integer sequence mod p. So although we can expect to find a cycle mod n in around sqrt(n) steps more importantly we can expect a collision(and therefore a cycle) mod p in sqrt(p) steps.

How to detect such a collision mod p takes a bit of thought since we do not have the value of p and therefore cannot simply check for such collisions directly. Say there has been a collision mod p in our sequence and let the terms which are equal mod p be f and f'. Since f = f' mod(p) then f - f' = 0 mod p and therefore f - f' = kp for some integer k. Let g(i) be the i'th iteration of the function f acting on x0. If we take the greatest common divisor of the differences g(i) - g(j) and n then in the case of a collision mod p we will recover a factor of n which if we are lucky will not be equal to n itself.

There is one last piece to the puzzle which needs to be put into place before this is of any use however. If we were simply to check the value of gcd( g(i)-g(j), n) for all values of i and j such that i < i =" kL"> T. When this happens then g(i) will be the kL-T element of the cycle and the element g(2i) will be the 2kL - T element in the cycle meaning they differ by L elements and therefore must correspond to the same element in the cycle.

At this point we have sufficiently analyzed the algorithm so that if we readily had access to "random" functions from the interval [0, n-1] to itself then we could expect to produce a factor of n = p*q with p being the least prime factor of n in O(sqrt(p)) operations. Since p <>0 after say 100*n^(1/4) steps and performing hundreds or thousand such restarts can push this probability as low as you like.

That said it should be obvious that we do not have access to such suitably random functions. Generating such a function in its completeness would of course take O(n) time which is much greater than the O(sqrt(n)) time required for trial division. Because of this in reality such an arbitrary random function is replaced with some arbitrary function which is assumed to behave sufficiently "randomly". An oft made and at least somewhat good function which is often chosen is f(x) = x^2 + 1 (mod n) This function is relatively easy to calculate and gives good mixing and in practice actually produces good results. Unfortunately there is no proof that x^2 + 1 actually does operate as advertised. With a particular choice of function the claims of operating time that I just made should be viewed with scrutiny. For instance if the function is f(x) = x + a (mod n) then the iteration of the function is very clearly not "sufficiently random" and in this case one would expect a collision after O(n) steps instead of O(sqrt(n)). With the function of f(x) = x^2 + 1 one expects much better behavior but still probably not quite as good as one would expect from a truly random function and the actual performance is not know rigorously. Thus this factorization method remains purely heuristic but ultimately that is of little importance in practice since a factorization is just as valuable if it is found by a heuristic method as if it is found by more rigorous means.

The real value of the pollard rho method however really is its simplicity and intrinsic interest and elegance. There are other factorization algorithms which have been rigorously analyzed and are known to be faster (for instance the number field sieve method which I am working up to). In practice one wonders how important it actually is that the iterated function really be "random" one could for instance use a higher order polynomial but there is no reason to believe that this would significantly improve the randomness and since higher order polynomials would take longer to compute very likely in practice the simple x^2 + a is best.

One could concievably dynamically generate an actually random function by choosing the value of a particular argument when the function is called with that argument for the first time and then saving the value of the function for that argument. Since this would require about O(sqrt(n)*ln(n)) bits of memory to carry out the memory requirements could easily become unrealistic. For a number of say 20 digits we would expect to require about 20*10^10 bits of memory on average before a factor was found. For perspective since 1 gigabyte of memory is about 10^10 bits. A number with just 30 digits (a factorization task easy enough for my graphing calculator to handle) would require an average of 30*10^15 bits of memory which is roughly 3,000,000 gigabytes. Clearly it is not realistic to randomly generate and store a function in this manner.

More interestingly one might consider picking a random function by picking random coefficients in some set of basis functions. Obviously any complete basis of an n dimensional vector space must have n vectors in it. So if we want to be able to specify any possible function taking values at n discrete points we are not going to be able to do better than a straight table of values. On the other hand if we are willing to settle for sparsely populating the function space with functions such that they are sprinkled uniformly over the function space then we are much more in luck.

For instance we could pick random Fourier coefficients in a Fourier basis and then interpret the function mod n. Based on how large of a difference between functions we are willing to tolerate we could choose an appropriate number of coefficients to be able to approximate the functions sufficiently well. With careful analysis a Fourier basis could actually be possibly helpful but since the basis functions are inherently periodic there is a very real danger of creating very structured behavior in the iteration of the function which would interfere with the motivation of having picked a "random" function in the first place.

It would be intriguing to attempt something like this with one or another class of orthogonal polynomials. For instance one could use the Lagrange polynomials and pick weights for the first few polynomials to generate a polynomial which could be used as the randomly chosen function. If the probability distribution of the size of these coefficients had an appropriately chosen decay rate then one could very effectively sprinkle functions uniformly over the function space. Of course uniformity of the distribution of the functions over the function space is no guarantee that the iteration of the function is in any sense "random". Also ultimately this suffers from the same problem that probably the increased randomness is not worth the added time it will take to calculate the function.

So if we are going to spend a significant amount of time generating and or calculating the function we use then we had better expect some speed up in the generation of collisions for doing it. For sufficiently large n the added randomness of higher order uniformly distributed polynomials would probably be worth the extra calculation but the best we can hope for from truly randomly distributed functions is O(n^(/1/4)) which while not too shabby perhaps we could improve upon it.

For instance in the case of Fermat numbers it is known that the prime factors of the k'th Fermat number are of the form 2^(k+2) + 1 With that in mind it seems reasonable to make sure that you look at the numbers of the form 1 mod 2^(k+2) which is easily accomplished by making your function f(x) = x^2^(n+2) + 1. Of course now your function is much more computationally intensive but the speed up is well worth it.

In general what is desirable is that when we view the iterated function sequence mod p it is desirable that we don't have to wait very long before there is a collision. This comes down to the desire that the average cycle length mod p is low for most primes. Of course such functions exist for instance the function which is f(x) = x+1 if 2 | x and x - 1 otherwise has a cycle length of 2 for all starting numbers but obviously the property of "sufficiently random" is not met. But while it is fairly easy to show that every iterated function over a finite set causes paths that consist of tails leading into cycles what is not at all easy to do is to figure out say how long the average cycle is going to be.

I started writing this blog post around 11:00 this morning and it is now 11:00 at night so I don't think I shall be figuring out any interesting new twists to this 35 year old algorithm before bed. Of course here you can cue the usual rampant speculation perhaps certain properties of the Fourier spectrum of the function would reveal properties of the iterated function, or better yet perhaps there is some function basis for which functions with small iteration cycle lengths are sparse etc etc etc.

Wednesday, January 20, 2010

Verdict is in, high school students are noisy

Although today was better than yesterday the high school students that I am having to share my office with are extremely noisy. Besides their intrinsic loudness there is also the fact that they have power tools to play with. Fortunately the power tool fun is mostly in the lab adjacent to my office but the walls are thin. Although I do feel slightly interested in what they are doing really that only serves to make them all the more annoying.

Sad to say it but I am afraid to do my real work for fear that they would see it and comprehend it. For some reason I feel the need to project a sense that whatever it is that I am doing must be complex and arcane. I don't want to actually do my physics homework since they might look over my shoulder and discover that my physics is mostly just algebra, integrals, curls, and divergences and the like (all definitely accessible at a high school level). For similar reasons I don't want to do anything else that might be sufficiently simple to be comprehended by those around me. But reading and understanding the complex stuff takes more concentration and work than I can easily muster in the midst of such mayhem. I only hope that the students won't stay so late that they will still be hanging around my office late at night. I walked to the library so that I could read my number theory books in peace but hopefully this next six weeks just translates to the loss of the use of my office only between the hours of 3 and 6 or so not from 3:00 on.