HN user

greendragon

131 karma
Posts0
Comments79
View on HN
No posts found.

It's more about status than utility. As long as Go and Chess can maintain some sort of high status (as games or as historical points of interest) among the intelligent or ruling classes, they'll be remembered. Diseases seem to get status a different way. Humanity will probably remember the Plague for a long time still. Or if a biologically engineered supervirus was unleashed that killed a significant fraction of humanity over a short period of time, that too would be remembered. Quick mass death is the status currency of disease. If we ever get around to ending aging, probably one of the lowest-status problems on the to-do list, death by aging will be forgotten too.

Tyranny of the majority is a major concern for democratic systems, hence the many protections against it. A system based on pure population majority is no less manipulable, you would end up seeing candidates campaign hard in the ~25 most dense cities and ignore the rest of the country.

Zuck 3 (paraphrasing): "We're building tools to help states censor things they don't like, independent of the truth of those things."

Consistent with 1, not really with 2. Agree that 2's not a huge deal in the grand scheme of issues with Facebook but yeah, best not to assume good faith lightly.

There's probably no reason for you to go around disabling hardware etc. You're aware enough of the implications and risks, it's possible you'll get pwned but not too likely. (Honestly I'm more personally worried about the inconvenience of Google nuking my gmail for no reason than anything the NSA might be up to.) Some of my coworkers cover up their work laptop webcams by default. I don't, the realistic threat model is IT or some other company representative spying on me, and I don't really care about that. If I find out I'll quit and I'm sure there will be lawsuits anyway.

All that said, I never liked the "well one day the government will accuse you of a crime somehow or otherwise severely limit your speech" argument. To me the better counter-argument is: "Fine, you don't care at all, you don't have to care. Similarly some people are super paranoid and live in a faraday cage etc., they can do that all they want. But a lot of people care to some degree in between, and a lot of other people are uneducated or unaware of the actual risks so aren't even aware of the problem that they could decide to care/not care about. If you don't care at all, again that's fine, just get out of our way as we try to protect people by default. Mass education of every issue is infeasible."

How is anyone supposed to distinguish the first 10 BTC from the last 10 BTC when the underlying satoshis might not even be the same? e.g. I might transfer those 10 BTC to an online store (web wallet, other trading, whatever) but then transfer them back, except I'll likely get a different 10 BTC. Seems like all you can determine is that you once bought $x and once sold $y. Since you can also exchange btc for goods, or mine it (which I believe even the IRS has different rules for), you can't say with certainty whether it must be $y <= $x or $y >= $x. So when you sell 5 BTC, it's either mining income (or other income) or a capital gain, but it seems like there's nothing stopping someone from always taking the least expensive taxes first.

The cardboard and marbles aren't self-aware, they just encode a configuration that sees itself as self-aware when left alone to execute. Just like the atoms of your body. Self-awareness isn't a static property, since it's hard to call someone under anesthetic self-aware, but just another thing an agent in motion perceives.

You ought to read Permutation City.

Seconded. Some of it feels a bit dated, and it doesn't cover tools you can use like PowerMock if your codebase is Java and you really just need to get a piece of hairy code under coverage as quick as you can without having to refactor it all to be testable the 'normal' or 'clean' way. Nor does it cover refactoring for a functional and immutable approach (its approach is much more OO). Still a great resource to have on hand and be inspired by.

The most important thing is to follow its advice and just start doing it little by little, even small refactors of other people's code. A friend's company had a Book Club and some testing book got on the list at one point, and as they were discussing it they kept having arguments over how effective various things were, so they resolved the arguments by starting a Testing Club where every week everyone would put in at least an hour into getting some part of the system under test, or trying out a testing technique, and discussing it. Over time they got most of the product under test and fixed a lot of previously unknown bugs.

Firefox 50.0 10 years ago

After almost a decade of building Firefox from source I finally bit the bullet to switch to a precompiled binary last month. It's fixed all the issues that have started to crop up but leaves a bad taste in the mouth.

Firefox 50.0 10 years ago

I think the third party situation is unlikely, unless they're shipping a fork like IceWeasel or stripping out all branding information. At the end of the compilation process in Gentoo it helpfully tells you (if you enabled the Firefox Branding) that you cannot legally redistribute a branded version of Firefox.

I interpret a lot of AGPL projects I see as "we're willing to negotiate a secondary license to your private business". If you're the best in class (or just the only available public option) it can make sense as a way to try and make money. If there's a more liberally licensed substitution, however, it's probably best read as a "don't use me for your business" flag...

I like to tell this to people when they start gushing about Japan because of their cleanliness or law and order or whatever, but they didn't make private possession illegal until a couple years ago. Before then it was just production or possession with commercial intent that was illegal. And the new law still doesn't apply to manga/anime. Is Japan a hell-hole? Are Japan's children all psychologically ruined or at a much higher threat of abuse because of the prevalence of anime/manga porn? (Some quick googling on opened investigations suggests a mere 0.0075% of Japan's children are affected per year.) To me Japan seems fine. (Another odd behavior is that daughters bathe with their fathers, sometimes (like 6-10%) all the way up to high school age.)

Seven years of Go 10 years ago

I see nothing false in rewording your statement to "a long-maintained large codebase requires continuous vigilance". Typing doesn't seem to matter with this. At least to the extent that we believe typing doesn't have a meaningful impact on the expected size, lifetime, and complexity of a codebase to solve an arbitrary problem. (With better type systems around it is neat to see statically typed languages quite significantly narrow the gaps in expressiveness though, and in some cases beat out 'trivially dynamic' languages.)

I know I've wasted time tracking down simple issues a static type system would have caught (or just due diligence by the coder -- and some of these issues I've caused myself! Though I really can't remember any insidious to find but quick to fix typo or type fail I caused, but I'm willing to admit to a possible selective memory bias), I've also wasted time tracking down simple issues a type system wouldn't catch -- even ones like Rust's, Haskell's, and dare I say maybe even Shen's? I also spend/waste a lot of time, probably the most time in total, tracking down complex issues that got past the type system and existing tests and code reviews and personal or team diligence, and these days most often in either Java or JavaScript, neither of which are particularly great poster children for their respective type systems. (I don't want to get into the strong/weak axis.)

Issues from NPEs or divide-by-zeros or undefined function calls, or stuff that goes through the type system's mechanisms to escape the type guarantees like reflection, casts to Object, void * , unsafe, serializing class names instead of values, etc., are annoying, a sudden power outage is also annoying. Some of that can be caught and prevented by more powerful languages, but still the time to fix those is nothing compared to more complex issues resulting in all sorts of incorrect behavior. There are so many more causes than type mismatches. It seems in your career the trivial bugs from typos are rare for you too. I'm not convinced the possibility of slight inconvenience those rare issues can create is worth the certain tradeoff in losing expressive power (especially if I can't use the most expressive static languages for whatever non-tech reasons) and possibly more, nor am I convinced a static approach is even the best one when you have languages like Lisp which support types well enough to error out when you call COMPILE on a bad form but still have huge flexibility.

I wonder if all this sounds like I'm a diehard C++ fan and don't need no stinking safe memory management tools because I never get segfaults or security problems. If it does I don't think it should, but it's really hard to explain why my perceived utility of static type systems is low without just appealing to preference, firsthand, or wise authority's experiences. The argument has been going on for decades by smarter people than me on both sides. In the end maybe it's just preference as arbitrary as a favorite color but rationalized to kingdom come. I at least don't draw my preference line so narrowly at static vs dynamic, there are plenty of static languages I'd use over JavaScript, and plenty of dynamic languages I'd use over C++.

I will ask about your experience though: how does it square with people like the author of Clojure? Is he just a god-tier outlier? I don't think one could argue he hasn't done his homework, or doesn't have enough real-world experience. It reminds me of a quip graphic I saw once, it was something like a venn diagram showing an empty intersection of "dynamic typing enthusiasts" and "people who have read Pierce's Types/Advanced Types books".

Seven years of Go 10 years ago

It was pretty bad that easy_install came out with no easy_uninstall. Plus some packages are in your system's package manager (which I think is great because I'm sick of every language having its own package manager when my system's (Gentoo) is better) and some aren't, or the latest versions aren't. Plus there's the virtualenv stuff, or the general problem of your dev environment not matching the deploy environment. Needing to have both Python2 and Python3 on your system in some cases. Some packages have C/C++ code so you need a compiler, and all the dependencies that implies. On Windows I think Python development is a joke, last time I did anything extensive there I think I ended up installing Enthought's distribution and picked off from http://www.lfd.uci.edu/~gohlke/pythonlibs/ as needed. I don't see how the Go situation on Windows could be worse than that.

I'm not a huge stickler for non-local consistency -- one of the things I like about Nim is its apathy about naming conventions (foobar is the same symbol as foo_bar or fooBar, func(arg) is the same as arg.func()...) -- so that's probably why I don't find the consistency factor a huge issue. When a language and its ecosystem has it, it's nice, but when it doesn't, it's not really a thing that annoys me.

Seven years of Go 10 years ago

As a Python user and fan I hear this complaint a lot. I understand but I can't really agree since things like typos and type fails pretty much never happen to me, at least in production. My secret? I use the REPL, heavily. (And not even in the grand Lisp fashion, because Python's REPL isn't very advanced, mostly I use it just off to the side and maybe or maybe not running an instance of the full program, or parts of it.) Using the REPL catches most of those things just as quickly as a compiler, plus it can catch things compilers don't, such as null pointer exceptions.

Two lesser secrets are using a linter, which catches all sorts of issues too, and second actually getting the full program locally to a state where I can have it execute (most of) the new code I just wrote that I didn't verify in the REPL, or using data sources I didn't just define temporarily in the REPL, so I can make sure it seems to do what I intended. A lot of devs don't seem to do the second bit... Checked in code for Java compiles and passes existing tests and went through a basic code review but inevitably bugs get filed because it doesn't actually do everything the story said, it's like they didn't even try out their own code, it just looked correct and the compiler/tests agreed.

I think when you're working with the REPL interactively instead of relying on the common "edit -> save -> compile -> ship it|start over" cycle you don't miss those details as much, because you're constantly trying out your own code. Maybe my experience is because I don't typically use dynamic languages as scripting languages, at least in the sense of quickly hacking up a script, saving, getting to skip the compile step (look how much faster it is to develop in dynamic languages!!!), and running it until it works. I have done that, but even then, I'm usually writing the bulk of the script in the REPL -- or rather in my editor that can send text to the REPL. It's quite different from what seems to be the thing that made these languages popular to begin with, which is not having to explicitly type everything and getting to skip a (potentially long) compile step (which also encourages more source sharing).

Seven years of Go 10 years ago

Seems a lot of the Go fans I read are former Python users burned by dynamic typing, so I agree they'll end up happy (or at least happier than Rust) with Go. Though one more option you might want to consider is Nim: http://nim-lang.org/ (It's pretty easy to get up to speed in it, especially for a Python user so long as they're not expecting to use fancy OO features.)

Seven years of Go 10 years ago

Curious what they weren't so happy about with Python? Was it purely performance? If so, did they consider PyPy, or at least profile what the slowest bits are so they can evaluate whether to throw everything out or just rewrite the slow bits? Was it the language itself? Not everyone likes dynamic languages, though it's odd they started with it. Did you consider Node at all?

This thing has better hardware specs than the 3DS and the Wii. It'd be nice if this sold well and they then offered a SNES controller + games, then N64, and so on, so the only games it can't run are on the Wii U or Switch. (Edit: beaten to it.. ah well.)

OP said "a lot" of the haves, so I get the impression they think it's actually a lot and justifiable to start imposing corrections to the problem on the lot of haves. My real issue is just the idea that more than a tiny fraction of the "haves" are in that group by genetic determinism, either from the lottery of being born to one's parents (and inheriting their genes, and their money, which they got somehow) or the other lottery of being born to a particular (and perhaps in today's economy, privileged) race. We all have to play the hand we're dealt, but the world and the brain are dynamic enough that there are lots of ways to play even when you have poor initial conditions. Having a problem with seemingly some large amount of people not having to play as hard is odd, especially when it's likely a much smaller set of people than imagined.

Mindfuck of the day achieved, back to work...

If genetics determines all, then we should sort people to tasks best suited for their genetics. Ashkenazi Jew? Work on advancing gene therapy and retroviruses so humans now and in the future can be freed from genetic determinism. European? Build civilization. African? Physical labor/sports. East Asian? Also build civilization. To each is given the minimum necessary to do their genetically determined purpose, ignoring any abstract "human" needs for all. Surplus is captured by the State and hoarded, some used to incentivize the Jews to have more children since their problem is the most important. Eventually the Jews will succeed and no one will have any excuses anymore.

That's not a world I'd like to live in. But it would solve you having a problem with inequality. Or maybe you just need a different perspective to not put so much into genetic determinism in the first place.

It's really technology that is always getting better. It has been so successful that it's hard to see the decline in so many other things. Factor out technological advances when answering these questions. Are our universities really better than they were 100 years ago? Even just 50? Are our political systems any better than 100 years ago? 2000 years ago? Are our stories any better? Are our People any better? Is our art better? Are humanity's cultures better? I can find points of these where I can argue some aspect is better now than before (but that's usually due to technology -- e.g. the whole genre of sci fi first demands, well, science), and some I could argue for overall being about equal, but for any of those being overall better, I find it a hard claim to make.

Were there any hints you noticed in retrospect that the insufficient experience or a bad hiring test results were probable? If I could somehow predict those experiences up front I think it would save myself and them time and anxiety by stopping short. The best I have on the experience bit is just being very honest up front with how familiar with that Brand I am rather than trying to skate by and stretch the truth e.g. "I can do C with classes so I know C++!"

The Seattle area seems to have equivalent or better salaries locally or when the remote company is in SF. Might just be my limited view though. I know a guy in my company who relocated to France and took a lower pay, but I suspect if he had stayed in the US it wouldn't have gone down much if at all. There are a few others who transition into a mostly-work-from-home person, then full-time-work-from-home except occasional sync ups for planning or whatever, and then leave the city entirely for a cheap cabin with fiber somewhere nice (still the occasional meetups though). Not sure if their pay gets cut.

Yeah, I tend to agree that location is BS to use as a way to try and save a buck. Everyone's cost of living is different, and even in a local area can diverge dramatically.

If you've filtered for basic competency where you can be sure you're not being BSed about their basic capabilities, I think I as a hiring manager would predict a slight correlation between better negotiating skills and better programming (and other) skills that I actually need them for. Often better negotiating is just asking for a higher-than-average price up front because you know you're worth it, because you know you're probably more skilled than the other person, and you know that in all likelihood you'll be contributing beyond the official bullet-points of your role -- i.e. your "given position" on paper is the same as the other person but you're doing a lot more.

Of course many places just need average skilled programmers, and if you can fill your roles with good enough people at a cheap price that's good business. But the general assumption that everyone implements the same Cog interface so they should get paid the same, while fair, is incorrect -- just like everyone has a different cost of living, I've never come across two identical devs nor two identical (except maybe on a short piece of paper leaving out a lot of details) dev positions. I think cutting out the possibility for negotiating better than others will also cut out the skilled-and-know-it batch from joining you unless they're super passionate about the product for some reason.