HNHacker News
TopNewBestAskShowJobs

throwawayjava

2,805 karma · joined May 1, 2017

submissionscomments
throwawayjava··on Fewer Than Half of Google Searches Now Result in a Click
It does help your clients.

I mean, maybe not yours specifically. But snippets are great for users in the typical case.

throwawayjava··on Ask HN: Configuration Management for Personal Computer?
Put your dot files in a git repo and then stop.

Automating this sort of thing doesn't make any sense unless you're switching laptops on a much more regular basis than every other year. You're going to spend more time vetting the ideas in these comments than you'd spend configuring your new laptops for the next 4 years.

See also: https://xkcd.com/1205/

throwawayjava··on The Problem at Yale Is Not Free Speech
I mean that 18 year olds at Yale are... 18 year olds.

Protests have been a regular fixture on college campuses (including non-elite campuses) for at least 50 years. Including times when the elite/the country had "purpose". Kent, Ohio isn't exactly New Haven or Cambridge...

Youthful rebellion is as old as time, and arguably isn't even unique to humans. Therefore, grounding a sweeping societal critique in any particular mode of youthful rebellion (be it political protest or inane partying) seems a bit... silly.

throwawayjava··on The Problem at Yale Is Not Free Speech
"Rebellious teenagers always want to establish independence from their parents"

The rebelliousness of college students seems so obvious to me. Everyone here using youthful behavior (almost all in their teens and early twenties) to bash their favorite bogeyman group (usually composed of much older people) is missing the completely obvious.

throwawayjava··on Facebook has been granted patent on shadow banning
> So back in 1997, the technology was actually transformational at that time

I was there. No it wasn't.

E.g., here's a slashdot article from 1999 with a bunch of comments complaining about it: https://slashdot.org/story/99/10/12/1826242/amazoncom-receiv.... And Japan rejected the patent as obvious in 2001.

US Software patents are pathological because the only novel part of most interesting software is the mathematics. So the only things that are patentable are dumb and obvious systems built on top of the actual contribution. Crypto is the epitome of this pattern because all of the Turing-award-level mathematics was not patentable but "that meth but with blockchain" or "that math but with more bytes" is patentable. It's dumb and the opposite of innovation.

Dijkstra's algorithm is another good example of the main innovation never being patented but a bunch of obvious stuff built on top of it receiving patent protection.

throwawayjava··on Facebook has been granted patent on shadow banning
We did something similar for a browser-based RPG game 15ish years ago.

Shadow banning is way more effective. IP bans don't work because even tech illiterate users can figure out what's going on and get a proxy working.

We ended up going with normal account-level banning after experimenting with IP-based shadow banning. The game was popular with kids, who would tell their siblings/school friends about it. So lots of IPs were associated, and at the time teasing apart different traffic streams from the same IP was sci-fi level stuff.

But, we did learn that normal banning was way less effective. If it weren't for the collateral damage, we would've kept shadow banning with IP account association.

throwawayjava··on NY State alleges ExxonMobil knew risks of climate change and defrauded investors
Liars who make money on their lies are fraudsters, and fraud needs to have criminal repercussions

Yes, LOTS of people lie to make money. Yes, all those people are doing something wrong. And yes, that wrong thing is bad enough for society that we should punish it.

"Everything" is not fraud. Telling lies to make money is the definition of fraud. If you think that describes "everything" that happens in the economy... Well, stop telling lies.

And yes, lots of fraud is impossible to prove because the actors know the law. Patent trolling comes to mind.

And yes, lots of powerful people commit fraud throughout their career in impunity. Fraud is normal.

However, the normalcy of fraud and of getting away with deviancy does not make fraud acceptable.

I'm routinely astounded by how surprised people are to learn that telling lies to make money is illegal.

Tech in particular needs to do something about the fact fraud has reached meme status in our industry ('fake it till you make it').

throwawayjava··on 8chan goes dark after hardware provider discontinues service
No.

Not even close.

20 ish percent believe abortion should be legal under all circumstances.

IDK what the approval rate is for shooting up WalMarts, but probably a lot closer to 0 than 20...

throwawayjava··on 8chan goes dark after hardware provider discontinues service
Most pro-choice people do believe that education is important to women's (bodily) autonomy.

And abortions are not "universally understood to be reprehensible".

Only a minority of the country believes that abortion is universally reprehensible, and the rest draw various lines between "universally" and "never".

The country is very divided on the morality of abortion.

The country is not very divided on the morality of shooting up a WalMart.

throwawayjava··on 8chan goes dark after hardware provider discontinues service
The United States at the time of the drafting of the Constitution restricted the vote to white male property owners. Even after the constitution, some states restricted voting to white male property owners (about 6% of the population). Even in colonial times, enfranchised citizens were typically at least literate and often well-educated.

> Even as recently as 1945, the median American only had a 10th grade education.

Again, high school diplomas were more common among the enfranchised population.

> But there's no reasonable definition of the term, whereby you can honestly make a case that the America of 1789 was somehow more educated than the the America of 2019.

I would be completely unsurprised if voters in 1789 -- white male property owners -- were far more likely to have studied the enlightenment philosophers.

throwawayjava··on Darpa wants help cracking the election security problem
Imagine a very large mostly volunteer-run event that only runs once a year or so and where some fraction of the volunteers are running the event for the first time.

At the end of the day all the important equipment gets packed up, shipped somewhere, and unpacked.

But sometimes -- rarely, but sometimes -- some really important piece of equipment gets left behind at the event site or unpacked incorrectly at its new location.

I just described marathons, carnivals, and... voting.

throwawayjava··on 8chan goes dark after hardware provider discontinues service
> there either should be clear violation of ToS

I'm not aware of any consumer-accessible supplier who provides ToS that require abuse. In particular, CS doesn't:

"we may at our sole discretion terminate your user account or suspend or terminate your access to the Service at any time, with or without notice for any reason or no reason at all. We also reserve the right to modify or discontinue the Service at any time (including, without limitation, by limiting or discontinuing certain features of the Service) without notice to you. We will have no liability whatsoever on account of any change to the Service or any suspension or termination of your access to or use of the Service. You may terminate your account at any time through the Service’s account dashboard."

And there was certainly meeting of the minds on this term. CF has booted sites in the past due to political backlash. Those boots were high-profile and well-covered in the news. And even without those high-profile boots, any reasonable person will expect someone using CF and running a site like 8chan to know what CF's terms say about terms for continuing service with any/no reason.

If you want your site to stay up even in the event of one of your customers committing a mass murder while your other customers cheer him on, then don't use CF.

It's true that finding another provider might be hard unless you have $$$ because the market for that product is really small -- not even 8chan's original founder is in that target market.

Oh well. I want $0.001 diapers for my kid and a lower grocery bill. The market doesn't provide those either. But if universal access to cheap diapers and high-quality food aren't fundamental human rights, I don't see why cheap anything-goes top-of-the-line DDoS protection services should be.

throwawayjava··on 8chan goes dark after hardware provider discontinues service
> If we think of CF/Voxility as of a "neutral infrastructure"

"Property rights for me but not for you"

throwawayjava··on Information Theory for Intelligent People (2018) [pdf]
I think it's meant in a humble way rather than a self-important way.

"Here's a treatment that will be useful for any smart-enough person [even if they aren't a phd in math/theoretical CS]".

Perhaps a better title could be "for Any Intelligent Person".

throwawayjava··on Regex for Noobs – An Illustrated Guide
I much prefer the Perl way for writing short disposable stuff and much the Python way if any other person (including me in more than 1-2 weeks) is going to use/modify/read the code.

The gap between perl and python seems cleaner than the gap between python and anything-statically-typed, at least.

throwawayjava··on Regex for Noobs – An Illustrated Guide
Python has another somewhat reasonable solution. Either of those solutions can be combined with good programming to constitute a reasonable solution.

> Personally I prefer though the terseness of regular expressions.

I think there are legitimate use-cases for both.

If you're quickly hacking out a small good-enough parser for something regular or "almost regular", terseness can be great.

However, if you're parsing a large regular language, terseness isn't really a benefit. Perl is on its bed for a reason, and overly terse regular expressions should die for a similar reason. Overly-clever write-only coding culture sucks.

But the terseness of regular expressions is basically terrible beyond maybe a few hundred characters. E.g., the following has no place in production code -- you might as well just include a binary:

    (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
 )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
 \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
 ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
 \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
 31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
 ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
 (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
 (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
 |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
 ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
 r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
 ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
 )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
 )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
 )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
 *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
 |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
 \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
 \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
 ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
 ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
 ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
 :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
 :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
 :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
 [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
 \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
 \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
 @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
 (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
 )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
 ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
 :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
 \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
 \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
 ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
 :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
 ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
 .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
 ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
 [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
 r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
 \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
 |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
 00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
 .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
 ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
 :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
 (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
 \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
 ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
 ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
 ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
 ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
 ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
 \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
 ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
 ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
 :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
 \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
 [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
 ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
 ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
 ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
 ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
 @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
 ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
 )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
 ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
 (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
 \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
 \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
 "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
 *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
 +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
 .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
 |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
 ?:\r\n)?[ \t])*))*)?;\s*)
throwawayjava··on In Pentagon Contract Fight, Amazon Has Foes in High Places
I guess I don't understand the need for this contract in the first place.

Is it normal in the private sector for companies to spend $1B/yr on cloud services? I feel like at that price point you're better off building out your own infra for most stuff, and using the cloud only for the remaining $10M - $100M fraction where you really do need dynamic scaling.

throwawayjava··on Regex for Noobs – An Illustrated Guide
> It may have to do with how regexes of any complexity look like machine code to me.

Regexes get a bad rap because programmers who write otherwise maintainable code throw code hygiene out the window when writing long regexes. Your host language is much more complicated than the regex language, but writing shitty unreadable regex is, for whatever reason, acceptable. Some unfortunate and unnecessary limitations of typical regex libraries make the problem worse.

1. Regexes are typically written as one-line strings instead of as structu/red code. When writing C/Java, programmers understand that they should put each element of a sequence on a separate line and use indentation to visually signal branching and loops. But for some reason when writing character-processing programs that also have sequences, branching (|), and loops, programmers almost always golf it and put the whole complex program all on one line.

If you're writing a regex longer than 5 or 10 atoms, place each sequence on a separate line and use newlines+indentation to visually offset disjunctive choices (|) and loops (star).

Rule of thumb: you should be able to roughly sketch the rough shape of the finite automata by crossing your eyes and eyeballing the shape of the regex, just like you should be able to roughly sketch the control flow of a program by crossing your eyes and eyeballing the shape of the code.

2. Character group names are too terse (e.g., \s instead of "\whitespace" and \d instead of \digit), probably because of #1. Also, very few people give names for long subexpressions (e.g., factoring code out into functions with well-chosen names).

3. Gotos/try...catch (i.e., backtracking) are not used judiciously and aren't well-documented/tested. I often see backtracking or confusing mixes of lazy and greedy matching instead of just writing out a slightly longer disjunction.

4. Regexes are often used for languages that aren't even almost regular. A bit of backtracking is OK (gotos are sometimes OK), but if there's a lot of backtracking then you need to use a different class of languages/machines.

5. There's no way to embed non-regular matchers into a regex.

Due to the combination of 1-5, matching an email address with an optional recipient name (so something like "asdf@asdf.com" or something like "John Smith <asdf@asdf.com>") you need an insane regex that many people implement with lots of backtracking and so on all stuffed into a single line.

But something like this would work just fine and is much more readable:

    \emailAddress := ...
    # todo: need to support dashes in names.
    \name := (
        [a-zA-Z]*
        \whitespace?
        [a-zA-Z]*
    )
    # matches asdf@asdf.com or John Smith <asdf@asdf.com>
    (
        \emailAddress
    )
    OR
    (
        \name
        \whitespace? 
        <
        \emailAddress
        >
    )
where e.g., the implementation of \emailAddress could be written as a stand-alone parser in the host language. But even without digging into email address you can already see how this is way more readable than:

    \emailAddress|[a-zA-Z]*\s?[a-zA-Z]*\s?<\emailAddress>
Writing readable regular expressions shouldn't be difficult -- just treat the regex like any other piece of code and allow inter-op with the host language. But few people/libraries put in the effort, and for whatever reason golfing regexes in production code is considered acceptable even in orgs where you'd be fired for code golfing in the host programming language.
throwawayjava··on Lambda School fined $75k by CA for operating without state approval [pdf]
> What is the purpose of having a law requiring approval for post-secondary education?

There are many.

Perhaps the most compelling is a long history of scams. California's regulations might be arduous, but they didn't come out of nowhere.

Another reason is that the customers almost by definition doesn't know how to asses quality.

> It just seems like most of our laws are passed in secret.

This law wasn't passed in secret.

throwawayjava··on Teaching Tech Together
I've always felt US mathematics education is a case study in what happens when "lies for children" goes terribly wrong because the teachers never actually encounter a version of the field that isn't a lie.

My experience volunteering in an AP CS class makes me wonder if something similar is happening in K12 CS at the moment. The students knew by heart the JavaDoc for String.format but struggled with loops. The teacher also struggled with simple nested for loops. Kind of made me want to throw away the damn laptops and just spend some time solving problems on pencil and paper...

throwawayjava··on A simulation of the insurance industry: The problem of risk model homogeneity
The basic question is whether the reinsurance companies are properly capitalized given the homogeneity of risk taken on by the insurance companies they cover.

There can be a lot of modeling homogeneity without lots of unanticipated risk (e.g., natural disasters in disparate geographic regions).

throwawayjava··on I work in an Amazon warehouse in West Sacramento
Seriously?

That's the first/only question I ask about vacation policy because it's usually the only detail that isn't included in the first draft of the offer letter. Of course, I also ask before signing the contract.

PTO is a significant part of your total compensation. Not clarifying how accrual works is just irresponsible.

I honestly don't see how this is any different from asking about other time-based things, such as:

- whether your salary is paid every other week or at the end of the month.

- when your signing bonus is paid and how long you have to stay to keep it.

- when your stock units are granted and how long you have to stay to keep it.

- when the company's 401(k) contribution will hit your account.

All of which you should definitely be asking... and preferably before accepting the position.

throwawayjava··on I work in an Amazon warehouse in West Sacramento
Anecdotal, but I have a pretty good before/after view on a community that got an Amazon fulfillment center.

As far as I can tell, there hasn't been much impact on wages in either direction in that particular local labor market. Without strong unions, the labor market keeps warehouse wages at "just high enough that you can have a slightly better life than what you could get working in the service industry". There's always excess supply because warehouse work -- although physically demanding -- is relatively accessible.

throwawayjava··on What every computer science major should know (2011)
Students at good programs will check all the technical boxes just by attending required classes. Those schools tend to also have enough project based courses and career prep coaching that the portfolio box is also checked.

The intersection of that and communication skills is rarer, but it happens often enough, especially for people who pick up a second major in the humanities or did a lot of public speaking prior to/during college. Again, not the average case, but not terribly uncommon.

throwawayjava··on The CUE Data Constraint Language
Really? They seem equally readable to me.

I can't tell why a sane person would care much one way or the other, other than the way sane people care about vim vs emacs or tabs vs spaces or Kirk vs Picard...

throwawayjava··on Senate passes bill to decrease grid digitization, move toward manual control
It is possible to write safe and secure software. It's expensive, but it's possible.

Digitizing the grid has enormous upside, to the tune of billions in savings and improved resiliency/response to weather related outages. It we could do it safely and securely it'd be a no-brainer.

We're just trading a devil we know for a (preventable) devil we don't.

BTW: digitized grids aren't even necessarily more vulnerable. In a complex system, the increased latency and miscommunication opportunities introduced by human operators are also a potential attack vector...

throwawayjava··on Differences between the word2vec paper and its implementation
...and university/company sometimes makes you wipe out the git commit log, so you can't always just use "HEAD at time of submission".

Pro tip: at paper submission time, md5sum your code and also git tag it in your private repo. When you release the code, if you have to / want to release with a clean history, make submission-time your initial commit and then make the current state of the repo your second commit. I've never encountered an institution that won't allow that level of history in the code release, even places that are pretty hard core about wiping pre-release history.

throwawayjava··on Differences between the word2vec paper and its implementation
Man, I hate when I get dragged into these sorts of intense emotional downs by silly internet conversations with strangers.

FWIW I undowned your posts; internet karma is about communication/moderation, and sometimes has the opposite of the intended effect. I've been there.

Anyways, find some time to pet a dog/cat or fly a kite today.

throwawayjava··on Differences between the word2vec paper and its implementation
Some pretty good computer science got done before devops was gifted to the world.

And some pretty good science got done before computer scientists were gifted to the world.

I'm genuinely skeptical that modern software engineering practices are a good way of thinking about reproduction in science. Even in computer science. There's a lot that scientists can learn from software engineering (and in fact I've helped run workshops in the past on exactly this topic), but science is not engineering.

throwawayjava··on Differences between the word2vec paper and its implementation
> if you tried to implement the ideas described in the paper yourself, and I mean really tried, and contacted the authors for help, and still failed to achieve the claimed results.

This is the actually important definition of "reproducible".

"has an install.sh" is really nice, but it's far more important that an informed reader can recreate the artifact for themselves from the written description.

The "must be able to apt install or it's not real science" is a particularly dangerous path to go down. It's how you end up with e.g. shit loads of well-engineered LISP or FORTRAN code with no actual scientific insights or knowledge transfer. Which has actually happened in the past. A lot.

← PreviousPage 8 of 34Next →