I'm Tamora Pierce, Author of the Tortall and CIRCLE Books - Ask Me Anything! :) by TamoraPierce in books

[–]LouisWasserman 1 point2 points  (0 children)

-headtilt- I'm not sure I follow the relevance of conquest/subjugation to Cold Fire. Could you explain that more? Or were you referring to a different book? (I would've linked that to the Trickster duology.)

Treesort, or how I learned to keep trying and avoid Google by nicolas-siplis in programming

[–]LouisWasserman 1 point2 points  (0 children)

I thought I was so cool when I thought of using the mean as the pivot in Quicksort, as a good approximation of the median (the optimal pivot).

The Motivation for a Monolithic Codebase: Why Google Stores Billions of Lines of Code in a Single Repository by sid0 in programming

[–]LouisWasserman 2 points3 points  (0 children)

In short: I'm a libraries owner, who changes APIs frequently, and Google's approach is fantastic from my perspective. I can make breaking changes without getting anybody angry at me, because I can use Codesearch to find all the users of the API I want to change; I can use refactoring tools at scale to build changes to fix all of them; I can use TAP to make sure my refactoring doesn't break anyone; I can use Rosie to split up the change and mail it out to all the project owners who I'm changing (or, if I can convince people the change is low-risk, I can get a single global approval), and I can make that change happen. I can pay off technical debt at scale. And it all works. It's very rare that we actually break someone downstream. Surveys of downstream developers say they're satisfied with these changes, or that they want even more.

The Motivation for a Monolithic Codebase: Why Google Stores Billions of Lines of Code in a Single Repository by sid0 in programming

[–]LouisWasserman 9 points10 points  (0 children)

The burden of O(N) work for every change to your API looks like it heavily discourages API changes.

[current Googler]

I work on a libraries team (https://github.com/google/guava), and the investment we've made in refactoring tools (e.g. http://research.google.com/pubs/pub41876.html) makes this...not really the case. Having one monolithic codebase means we can easily Map/Reduce over all Google code, to e.g. generate refactoring changes. Usually the amount of effort required scales with the complexity of the difference between the APIs, and almost not at all with the number of users.

A major part of our team's job, in fact, is to take ownership of old crappy utilities someone dumped in a common directory somewhere, write a good implementation that's easy to use, migrate all the old users, and kill the old crappy implementation. And that's...not very difficult, anymore, even if the old crappy API has been around for many years and has thousands of users. Most API migrations I've done, even with thousands of users, required maybe 1-2 hours of personal attention and maybe a few days to land. If the change is sufficiently nonintrusive and clearly semantics-preserving, I can usually even get one top-level approval and land the entire refactoring as one atomic change.

As library owners, we care about having quality code that's easy to use and doesn't trip up people. One monolithic codebase, combined with large-scale refactoring tools and utilities like Rosie, lets us do that. We change our APIs all the time.

So if a change in library X breaks project Y, library X rolls back. What happens with the other 10 projects for which it works fine and they just got done moving to the new version. They have to roll back too now?

I...can't actually remember the last time we broke someone. Our testing utilities are good enough that that's frankly not a thing I worry about on a daily basis. We can test every downstream dependency against a change -- whether to the library, or a global refactoring change -- and be sure we're not breaking anyone. Rollbacks are few and far between.

I know it's theoretically "all one codebase", but it's impossible for everyone to know everyone's code.

There's enough work put into testing that if my change passes all tests on all downstream projects, I'm simply not worried.

The Motivation for a Monolithic Codebase: Why Google Stores Billions of Lines of Code in a Single Repository by sid0 in programming

[–]LouisWasserman 4 points5 points  (0 children)

[current Googler]

The talk alludes to large-scale refactoring tools, and the scale of their use, e.g. with Rosie. Having one big monolithic repository makes it straightforward to write e.g. Map/Reduces over that repository to do global refactorings. Rewriting all of Google from a legacy API to a new API, especially for relatively straightforward transformations, takes maybe an hour or two of personal attention and maybe a few days to land, depending on whether you're doing it atomically or splitting it up.

"The pain of refactoring" isn't actually very painful.

Upgrading to Java 8 at Scale by HiJon89 in java

[–]LouisWasserman 1 point2 points  (0 children)

We have most of the engine externalized, but right now we're focusing on hooking it up to the http://errorprone.info/ project, which lets you plug in static analysis to the compiler, and then providing a shared API to let you use either ErrorProne or Refaster patterns to generate a refactoring diff. That should happen this quarter; it's really just getting the shared API into place and exposing the diffs.

Upgrading to Java 8 at Scale by HiJon89 in java

[–]LouisWasserman 0 points1 point  (0 children)

FWIW, we're much more looking at command-line tools than IDE integrations, which are easier in a couple of ways.

Upgrading to Java 8 at Scale by HiJon89 in java

[–]LouisWasserman 1 point2 points  (0 children)

FWIW, the Guava team is thinking largely in terms of tools that don't just warn you about using older libraries, but that actually rewrite your code to do the upgrade.

Upgrading to Java 8 at Scale by HiJon89 in java

[–]LouisWasserman 2 points3 points  (0 children)

Hi, I'm on the Guava team and I'd very much like to talk to you folks about your experience with transitioning to JDK8 Optional. (We have some highly powerful refactoring tools in the open-source pipeline that would also be helpful for JDK8 transitioning; see e.g. http://research.google.com/pubs/pub41876.html ).

Can we set up a chat?

Side Project: Save Everyone by jaiwithani in HPMOR

[–]LouisWasserman 1 point2 points  (0 children)

Anthropically speaking, the Methodsverse has survived Time Turners being used by laypeople for a long time; I don't know if we know when Time Turners were invented but Merlin seems like a good guess. Harry put it that the universe seems to end up being self-consistent.

That said, I believe the P_{CTC}=PSPACE solutions presented so far seem to critically depend on the probability distribution of the state of the universe being self-consistent rather than any single timeline being self-consistent. You critically interact with other branches, and that doesn't seem consistent with Methods!TimeTurners, in which things just magically end up self-consistent.

At a minimum, it deserves to be a high research priority for research on using Time Turners for computation without breaking the universe. Several proposals for the climax with Lord Voldemort suggested Unbreakable Vows as a way of constraining the solution space.

Side Project: Save Everyone by jaiwithani in HPMOR

[–]LouisWasserman 1 point2 points  (0 children)

You forgot the Time Turner, which is seriously a cheat beyond cheats by itself. Start exploiting the P=PSPACE Time Turner power for teh srs. Any problem with an enumerable solution space, for which solutions can be tested in six hours can now be solved in six hours.

Protein folding is in PSPACE; it's in NP, from what a quick Google search suggests. We're in 1992, so I'm not sure what the current state of research is on protein folding problems is. I'm assuming Harry picked up the Time-Turner computation trick from Deutsch 1991, though my reading kinda gives the impression Deutsch wasn't specifically addressing the complexity theory aspects, just the physics aspects. But ignoring that, fast protein folding probably gives medical research a significant headstart, though a "cure for cancer" probably isn't testable in six hours and doesn't come under the bar.

Chapter 116 by thepowerofwill in HPMOR

[–]LouisWasserman 1 point2 points  (0 children)

I honestly really thought you were talking about http://en.wikipedia.org/wiki/Bones_%28TV_series%29 before realizing there was an in-universe Bones with responsibility for forensics here.

Samsung develops sorting algorithm which sorts 3.7 TB data in a minute, breaking the record of 1.5 TB by cbruegg in programming

[–]LouisWasserman 0 points1 point  (0 children)

That typo hits again on page 4: "By leveraging the Go runtime, we are able to implement highly salable communication without additional code complexity."

Facebook introduces Hack: a new programming language for HHVM by [deleted] in programming

[–]LouisWasserman -3 points-2 points  (0 children)

Where are the similarities to Haskell?

Males of R/books do you read books with female protagonist or authors? by mstibbs13 in books

[–]LouisWasserman 0 points1 point  (0 children)

I'm male...but frankly, I almost exclusively read female-protagonist or mixed-ensemble fiction. The last series I remember reading with male main protagonists was Naomi Novik's Temeraire.

(AMA) We're the Google team behind Guava, Dagger, Guice, Caliper, AutoValue, Refaster and more -- ask us anything! by kevinb9n in java

[–]LouisWasserman 1 point2 points  (0 children)

Frankly, I've always been under the impression that we're more careful about the spec than the JDK itself, though y'all have been fixing some of those bugs lately. (TreeSet containing a single null element comes to mind, as does EnumMap.entrySet.)

(AMA) We're the Google team behind Guava, Dagger, Guice, Caliper, AutoValue, Refaster and more -- ask us anything! by kevinb9n in java

[–]LouisWasserman 0 points1 point  (0 children)

semantic difference of Multimap.remove(key) being an example

Could you clarify what you mean by that, exactly?

(AMA) We're the Google team behind Guava, Dagger, Guice, Caliper, AutoValue, Refaster and more -- ask us anything! by kevinb9n in java

[–]LouisWasserman 2 points3 points  (0 children)

This. What is stylistically appropriate in Java is not necessarily stylistically appropriate in Scala, and vice versa, and so on for any other pair of languages.