Show HN: Vy – a powerful but retro and minimalist IDE - <AUTHOR> https://github.com/vyapp/vy <comment><USER2> What I love about this project is that a lot of it is glue code.

It is an _integrated_ development environment because it takes existing tools and integrates them, not rewrites.

I also like that you can develop plugins in the core language (like elisp + elisp, unlike C + vimscript), this removes some of the "impedance mismatch" between "native" and "scripted" parts.

</comment><comment><USER3> You may be interested in the significance of the repo's "aggressive militarized snake smoking a pipe" avatar.

[https://en.wikipedia.org/wiki/Brazilian_Expeditionary_Force#...](https://en.wikipedia.org/wiki/Brazilian_Expeditionary_Force#Nickname)

(Avatar here: [https://github.com/vyapp](https://github.com/vyapp))

<comment><USER4> I don't understand what could that mean in this context. How do you read it?

<comment><USER3> I don't think it has a link to the repo, I guess they just liked the cool picture with a snake, and a Python is a type of snake.

I just wanted to draw attention to the fact that an aggressive snake smoking a pipe has a particular symbolism.

</comment></comment></comment><comment><USER5> One "truly retro" experience I had recently at the Computer History Museum was messing around with QBasic. The instant feedback of the documentation, in particular, was really powerful.

</comment><comment><USER6> This looks interesting. On editors in general - if I'm working with an interpreted language, what I need from a code editor is:

\- decent autocomplete and inline documentation

\- good REPL which can send a block of code to the interpreter and preserve state so I can work interactively

\- to have a variable inspector

\- to work with plain text files

RStudio has been by far the best IDE ticking all the boxes for me. Still haven't found anything that comes close for Python - RStudio's support for Python simply isn't reliable, VSCode's Python extension has a bad REPL, Jupyter doesn't use plain text, Spyder's REPL isn't great either, PyCharm's scientific mode isn't free, I gave up on setting up Emacs several times because of how frustrating the whole process was. Any suggestions?

<comment><USER7> Emacs + company-mode + lsp-mode + pipenv-mode (for virtualenv packages) work great for me. What was your setup and what kind of issues did you have with it?

<comment><USER6> Thanks, I'll have a look at these.

What I tried last time is following this - [https://realpython.com/emacs-the- best-python-editor/](https://realpython.com/emacs-the-best-python-editor/) and I ended up with a glitchy autocomplete which was filling a big part of the screen without showing any text.

<comment><USER7> I recommend using Emacs Prelude, which already auto-configures most of what I've described. You just need to enable a few modules for it and you're good to go.

</comment></comment></comment></comment><comment><USER8> I like the idea. The scrollbar jail bars are pretty jarring with regard to 'minimalist' sensibilities.

<comment><USER9> Engineers tend to misuse "minimalist" when they mean "brutalist" or "spartan".

Minimalist in the code doesn't reflect on minimalism on the interface, and when you apply an adjective to the description of your product you are characterizing the overall experience and visible surface (UI)… not the "backend" that makes it possible!

You can have very baroque UIs without writing that much code, and it would still be considered "minimal" on the code side.

</comment></comment><comment><USER10> I'm an emacs user, but barely know lisp, know python very well, and feel there are some limitations to emacs extensibility (namely wrapping external applications and debugging).

Convince me to switch

<comment><USER11> What? Why? It sounds like you convinced yourself to try it...

<comment><USER10> What features make it the editor or choice?

<comment><USER12> Why don't you just try it instead of asking someone to convince you that you should?

</comment></comment></comment></comment><comment><USER13> Why would you call it Vy? Doesn't that seem a little self defeating?

<comment><USER14> It's just a portmanteau of vim and py(thon). What's wrong with it?

<comment><USER15> Because `vi` pronounced as "vee eye" (/vi ai/) and I'm assuming `vy` pronounced as "vie" (/vai/) are extremely similar.

<comment><USER16> Funny, I've always pronounced "vi" like "vai"

</comment></comment></comment></comment><comment><USER17> lost me at 'python'. if this is still fast in another year I will be amazed.

<comment><USER18> I wonder if you could add a `python --fast` mode that disables certain rarely or uncommonly used dynamic features that enabled the python runtime to JIT or do something clever.

Alternatively, doesn't disable, just does unwinding like speculative execution on processors.

Alternatively, is basically just adding PyPy to CPython.

I guess no new ideas here.

<comment><USER19> Yep, it was tried. See: Unladen Swallow - an experimental CPython fork trying to speed up execution by removing some of the least used dynamism. It started 10 years ago and was abandoned 8 years ago. Retrospective at [http://qinsb.blogspot.com/2011/03/unladen-swallow- retrospect...](http://qinsb.blogspot.com/2011/03/unladen-swallow- retrospective.html)

</comment></comment></comment><comment><USER20> Does the world really need another retro "IDE" (especially one written in Python).

Just use VIM, NeoVIM, or Emacs.

<comment><USER21> Can you please read the Show HN guidelines and follow them in Show HN threads?

[https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)

Note this also from the site guidelines:

" _Please don 't post shallow dismissals, especially of other people's work. A good critical comment teaches us something._"

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)</comment></comment>


Amazon's First Employee Disses MacKenzie Bezos' Review - <AUTHOR> http://allthingsd.com/20131105/amazons-first-employee-disses-mackenzie-bezos-review-that-disses-new-book-about-amazon/?mod=atd_homepage_carousel <comment><USER2> Spectacular own goal by Mackenzie Bezos,Brad could not pay for publicity like this. Amazon is interesting as it is the best pure "business" of all the internet giants,nothing truly revolutionary but incredible scale and logistics.Im curious of the human cost accumulated on the way to this.

</comment><comment><USER3> _Amazon's first employee, Shel Kaphan, has published a four-star review of Brad Stone's "The Everything Store," in which he recommends the book and criticizes MacKenzie Bezos's take._

The PR wars begin! Grab you're popcorn.</comment>


Ask HN: Open-ended-questions.org — like StackExchange, but for open questions - <AUTHOR>

Dear Hacker News,
I'm thinking about building StackExchange.com for open-ended questions. Do you think it's a good idea? I have two questions:
But first:
1. There would be subdomains that corresponded to StackExchange subdomains, e.g.:  programmers.open-ended-questions.org  and writers.open-ended-questions.org.  So if you wanted to ask an open-ended question, or start a discussion, you could visit *.open-ended-questions.org instead.
2. I've mostly built a hopefully better discussion system already, as part of a failed one-person startup, see http://www.debiki.com/-84472
Now, the questions:
1. Do you think open-ended-questions.org is a good idea? Would you use it sometimes, or perhaps people would use ... Reddit? instead?
2. Would anyone like to help out in some manner somehow? :-) For example, helping promoting the site(s), or advising about how it should be promoted? And/or suggesting features and things to add and amend. <comment><USER2> I hate the circle-jerk of Askreddit. I think it is a great idea and will help as much as I can.

<comment><AUTHOR> Okay, I'm glad you're interested.

By the way I wonder if a reputation system necessarily contributes to a circle-jerk, I mean a culture that tends to make everyone think in the same way, so that they'll get more upvotes.</comment></comment>


How much Clojure do you know? - <AUTHOR> http://pepijndevos.nl/how-much-clojure-do-you-know <comment><USER2> Has there been any effort to put the multitudes of clojure.core functions into various sub-namespaces? It's seemed sloppy to me that there are just gobs of functions which are totally un-compartmentalized.

<comment><USER3> Why would compartmentalizing them be valuable? They form a rich vocabulary of fundamental building blocks. Wouldn't splitting them up make them less usable because then you'd have to remember which namespace they were in as well as their names?

<comment><USER4> If the namespace has a sensible name, it make it easier to look up the fns you don't know.

A possible solution would be to (use) all of the new namespaces by default so you don't have to go looking for them if you know the fn name, and you don't break (much) existing code that way as well.

<comment><USER3> Does this have an advantage over well organized documentation? How about just adding a tags field to the metadata?

<comment><USER4> Simply having :for and :similar tags would be helpful I guess.

nnext :similar #{next rest} :for #{seq} swap! :similar #{send compare-and- set!} :for #{atom}

(filter #(contains? (:for %) atom) (ns-publics 'clojure-core))</comment></comment></comment></comment></comment>


DEC Alpha: A History in Facts and Comments (2005) - <AUTHOR> http://alasir.com/articles/alpha_history/ <comment><USER2> > Olsen refused the offer saying that the VAX architecture hadn't reached its > end-of-life yet and EV4 was still a work in progress.

The rumor from multiple directions is that the Olsen and Sculley actually _had_ a deal for Alphas in Apples. And then Olsen found Sculley "in flagrante delicto" with a woman not Sculley's wife--which incensed Olsen enough that he torpedoed the whole deal.

</comment><comment><USER3> This is one of the most clear and also tragic demonstrations of a marketing to engineering ratio driven failure:

"A long time ago, Kenneth Olsen, who was a founder, president and CEO of DEC until almost the end, said that well engineered products would sell themselves. So, there is no real need in advertising campaigns or other instruments of market promotion."

</comment><comment><USER4> This article brings back so many memories.

My first job was as a sysadmin for a highly computational statistics department in 1993. The first alpha we had was a DEC 300/500X ("hot pink flamingo"). I remember adding 256MB of RAM to the box on one one of my very first days on the job. At the time, the price for the memory was well into the 5 figures, and I was thinking that I'd better be careful, because the memory was worth more than I was.

In a later job, I was one of 2 people to port FreeBSD to the DEC Alpha. We never supported the older turbochannel boxes, but I did a lot of the chipset support for most of the PCI alphas. Seeing the APECs diagram brought back memories of implementing the board support for them (and most of the PCI based alphas). I had an API UP1000 running FreeBSD as my desktop up until 2003 or so. That box was given to me to do the FreeBSD platform support.

Much later I was lucky enough to work with Dick Sites at Google. When I realized I was going to be in a meeting with him, I brought him my copy of the alpha architecture reference manual to autograph. I can't say enough good things about him. In addition to being a luminary in the field, he's a truly wonderful human being.

</comment><comment><USER5> In the mid-90s, I worked at what had to be one of the last serious DEC/VMS holdouts: TeleCheck.

That they had ended up on VMS was not evidence of a bad choice, but by 1995 it was pretty clear which way the market was going, and that they were about to be kinda out in the cold. They'd also managed to give themselves an ENORMOUS case of the MUMPS (1), brought on by an almost religious devotion to "not invented here" syndrome.

(Part of that was justified -- they couldn't get what they needed out of a commercial DB early on, so they wrote their own. And then KEPT writing their own well past the point when they should've been evaluating migration to COTS. But that's just a background detail.)

Anyway, at that point if you read any industry press, or went to any industry event, or were even vaguely aware of computing trends, you KNEW the future didn't include VMS, and that even the Alpha architecture -- which was cool and powerful! -- was doomed. But not at 5251 Westheimer; there, the Kool-aid was DEC-flavored, even to the extent of making bizarre counterfactual claims about COTS options, or other hardware, or whatever. "Sun" was a dirty word there; hatred of Unix was an article of faith.

It probably won't surprise anybody to hear that turnover there was INSANE. I stayed 25 months before moving on; that was about normal. Those that did stay became more valuable to the organization, but not so much that they ever got market raises or anything. And of course by staying, they let their skills get farther and farther out of sync with the rest of the industry, thus making it harder to leave.

1: [https://thedailywtf.com/articles/A_Case_of_the_MUMPS](https://thedailywtf.com/articles/A_Case_of_the_MUMPS)

<comment><USER6> What do you have against MUMPS (i.e. ANSI M)? It was a great technology of its time, and there are still many critical applications running with it today, and internationally recognized companies like Intersystems whose products still run ANSI M inside.

<comment><USER7> > It was a great technology of its time

It was. And then that time came and went and after that it became harder and harder to justify its continued existence and development of applications.

I've worked on a moderately complex mumps system for a bank and the amount of arcane trickery to work around the limitations of the core MUMPS system were mind-boggling. The whole thing had to interact with other systems via trick comms links and the fact that it worked at all was a small miracle.

There are some other systems that are still in use even today that should have probably never been built in FoxPRO, Filemaker and other pieces of software of a certain age.

<comment><USER6> Well, some MUMPS implementations had adverse limitations, but there were also others, and companies like Intersystems managed to gradually expand and continue using the technology successfully. What becaume know as "NoSQL" was already available in MUMPS 40 years earlier. MUMPS as a language has many disadvantages, but the concepts are still amazing today.

<comment><USER8> NoSQL databases came before SQL, irrespective of MUMPS. But back then they just called them databases.

</comment></comment></comment></comment></comment><comment><USER9> Still blows my mind how NT ran on so many other platforms yet no one was able to really capitalize on it. I spent one of my summer internships in Littleton MA doing QA on the NT networking stack for SMB and other lanman features. The machines kept my cube hot despite the building AC but seemed pretty performant versus my i386 home PC at the time.

</comment><comment><USER10> I truly loved the alpha but by '97 or '98 it was clear it was not a good platform for me. I remember being told to buy a basic alpha for $15K. Instead I bought an entire Linux cluster for that price, learned to manage it, and got all my scientific work done at larger scale than other people in my department.

<comment><USER7> At roughly that same time I did buy an Alpha but for one reason only: it could use more than 4G of RAM in Linux and files could be larger than 4G. It was the cheapest 64 bit platform at the time and I needed that to be able to use very large MySQL tables. Very nice hardware, super reliable and it ran for many years.

<comment><USER10> Yup. At the same time I bought my linux boxes, the department next door was purchasing ES40s, assembling them into TruClusters, and running modest MySQL tables. They ran on that until the hardware and software was EOL'd. Later I worked with an 8-node TruCluster composed of monster GS1280s. It had some nice properties- especially the high throughput IO (100MB/sec!)

The industrial version of the human genome was assembled on large-memory Alphas for the same reasons (lots of RAM, predictable disk IO).

</comment></comment></comment><comment><USER11> Sounds ridiculous, but I still remember the lack of synchronous reporting of divide-by-zero errors, and wasn't really sad to be rid of it.

</comment><comment><USER12> You know you're on to something when Microsoft ports Windows to your ISA.

At one time, NT supported Alpha, MIPS, and PowerPC.

<comment><USER13> The Alpha support was mainly because of a lawsuit, I suspect that was also why it lasted the longest of the non x86 ports of the 90s.

Reference: [https://www.itprotoday.com/compute-engines/windows-nt-and- vm...](https://www.itprotoday.com/compute-engines/windows-nt-and-vms-rest- story)

<comment><USER14> Perhaps it lasted longer because you could actually buy Alpha computers from DEC with Windows NT installed. Could you ever buy MIPS or PowerPC computers from a major vendor with Windows NT installed?

<comment><USER12> Not saying it was a raging success, but yes, you could buy MIPS machines with Windows NT installed: [http://www.sensi.org/~alec/mips/acer_pica.html](http://www.sensi.org/~alec/mips/acer_pica.html)

<comment><USER14> I had never heard of the PICA-61, thanks! I owned a DEC Multia back in the late 90s, when they were already obsolete and plentiful. It had SRM firmware, not ARC, but I didn't have any interest in running NT on it anyway. Ran Linux really well and used it as my personal server for years. Later I put NetBSD on it for a short time, but I don't remember why. I remember the it frequently printing messages about unaligned memory traps to the console, but it did the job.

I'm sure Microsoft was sincerely hedging their architecture with NT on MIPS/Alpha/PowerPC/i960/etc at the start, but by the time that hardware shipped with NT on it was pretty clear all the momentum wasn't leaving x86. On the 64-bit Alpha, I believe NT userspace was still 32-bit and so were all the applications. I don't remember any 64-bit Alpha NT applications ever shipping, but I admit I wasn't watching that scene very closely.

</comment></comment></comment></comment></comment><comment><USER15> The title of this submission doesn't do a good job conveying that it's about the DEC Alpha CPU architecture. It says so in the first sentence, but that doesn't matter if the headline doesn't grab you. This is one I wish mods would editorialize a little :)

[https://en.wikipedia.org/wiki/DEC_Alpha](https://en.wikipedia.org/wiki/DEC_Alpha)

<comment><USER15> Thank you, whoever made the change!</comment></comment>


Apple's iPod: is the end nigh? - <AUTHOR> http://www.bbc.co.uk/news/technology-25927366

<comment><USER2> I hope not! My iPod Classic is probably my favourite piece of consumer electronics. It has a function, and it does it incredibly well. I've had all sorts of MP3 players over the past decade, but none of them have been as great as the classic.

I always have a huge library, the battery lasts, the interface is great and it just keeps working. I drop it on a regular basis and it's scratched to shit.

On reflection I can see why the iPod business is slowing down. It's a mature industry.</comment>


Why robotics should include the Universal Declaration of Human Rights? - <AUTHOR> https://www.youtube.com/watch?v=FfwxQn3AmUQ&google_comment_id=z13qxr1rsnntwxa5404cgdbgiunhjfiplk40k Philosophy is important in every Human interactions. We think that robot must include some basics like the Universal Declaration of Human Rights At this time Artificial Intelligence did not truly understand the importance of life and Human Life. Sure A.I. will soon discovered that life is precious because it's rare in the known Universe. But robotics is an emerging technology with all of it's imperfections.<p>From :: http://www.hackers-lab.org/index.php?title=Philosophy <comment><AUTHOR> Philosophy is important in every Human interactions. We think that robot must include some basics like the Universal Declaration of Human Rights At this time Artificial Intelligence did not truly understand the importance of life and Human Life. Sure A.I. will soon discovered that life is precious because it's rare in the known Universe. But robotics is an emerging technology with all of it's imperfections.

From :: [http://www.hackers- lab.org/index.php?title=Philosophy](http://www.hackers- lab.org/index.php?title=Philosophy)</comment>


Glass Bead Network launches (finally) - <AUTHOR>

http://glassbead.net/
This is a social game played (for free) in a flash client. It's been 5+ years of nights-and-weekends bootstrapping (we did receive a few thousand dollars from one of our dads a couple of years ago, but that's all the funding we've got).
We (three founders) are mid-thirty-somethings with families. We feel pretty confident in the game itself--people who play it enjoy it and come back to play again.
What we're trying to figure out now is three-fold: a) how to get the "critical mass" of users we need so that something is always going on so when new users come to visit, there's someone for them to play, or at least a few games they can watch (and what is that number?). We've pretty much milked our family and friend connections at this point.
b) we'd love to have money so we could do it full time, market it, etc. but because we're so far along already (i.e., it's working) we're not sure whom to turn to (VCs, for example, aren't really interested because we don't need very much money). Do we just keep bootstrapping, or are there groups that fund people like us?
c) any feedback (we're looking for feedback mostly from anyone who's actually played it, but we'll consider anything really)?
We hope to be able to take subscriptions soon ("premium service" which would give you some minor advantages in the game, or at least a few more options, cash tournaments, blog, etc.) and we're considering having "sponsored" beads (beads are our playing pieces, which represent everything in the known universe--from Oreo cookies to apples to Darth Vader) as the primary revenue source someday.
We're holding a tournament tomorrow (Saturday, March 29) at 6p MDT if anyone wants to just come and watch (or play, of course). <comment><USER2> Some comments, written as I think them as I navigate your site:

1\. No explanation: A first-time visitor will have NO idea what the site is about. You have a bunch of "Register now" links, but without some idea of what the site is, there's no reason for anyone to register. This is a fairly serious deal breaker that will significantly limit your rate of adoption.

2\. Email confirmation sign up: Once again, this will limit the number of people who sign up. Requiring users to first give you their email, and only then register once they've received it, is slow and outdated. I'd remove the confirmation step entirely, but if you really feel you need it you should allow the user to first sign up and only then confirm.

3+ The concept vaguely intrigued me (what little of it I could glean from your confusing videos on the main page), but for this to be successful you need to seriously revamp your site. To be frank, it looks like something made in a previous era of web development.

Interfaces should be easy to use and clearly laid out. Yours does not provide enough information at the start, and presents too many irrelevant pieces upon login.

As in all startups, the ideas behind them could be great, unique, groundbreaking, etc. but if the implementation isn't up to snuff you'll go nowhere.

I realize this criticism may be harsh, but you did ask how to gain a more widespread user base. The best way to gain users is to make the concept easy to understand, and dead simple to begin using.

<comment><AUTHOR> We appreciate all the feedback; thanks!

</comment></comment><comment><USER3> I wonder if bootstrapping a game community can be accomplished with Amazon's mechanical turk?

You'd probably want a tiny game change to keep the turks from playing each other, and to only bring in a turk if there is not a suitable real player.

<comment><AUTHOR> I didn't even know such a thing existed...thanks for the tip!

<comment><USER4> If you get into Mechanical Turk and have questions about it, shoot me an email. I worked on it at Amazon, and I'm using it in my current project.

</comment></comment></comment><comment><USER5> "VCs, for example, aren't really interested because we don't need very much money"

Not quite. Actually VC's normally won't fund a company unless they do have something that is working. So assuming that your game is worth paying for or the site can be monetized, talking to VC's wouldn't be a bad idea.

One example of this is Google. VC's would not have talked to Google if all the founders had was, "Hey we've got this great idea, and this is how it will work, and this is why it's so cool." Instead they said, "Here, try it."

Even then, you'll have to talk to 100 VC's before you get funding. Are you ready for some hard core rejection?

<comment><AUTHOR> "Are you ready for some hard core rejection?"

lol. That and some hard core misinformation apparently (at least according to a few of the VCs we've talked to).

We'll keep at it; where does one shop for good VCs who would look at someone in our situation?

<comment><USER5> You know, I'm not really sure where to find VC's. I've done a lot of homework on Angel investors, and there are lots of good resources, like FundingUniverse.com as one example.

Sorry I couldn't be more helpful. Good luck!

</comment></comment></comment><comment><USER6> Addressing 'b': Since you won't need a lot of money, you should try approaching angel investors -- affluent individuals who invest small amounts in startups in return for some share of the company. I suggest looking in your local area for angel networks and see if you can gain audience with them. You'll usually need a full business plan and presentation for audience with them.

</comment><comment><USER7> I spent about 5 minutes on the site and couldn't figure out what it was for. I even registered, and still couldn't figure it out. I then watched the videos and still couldn't figure it out.

I may be dumb, but I may be your average user, as well. I would put up a tutorial or something.

</comment><comment><USER8> If you only had 30 seconds of attention, what's the best way to prove to the user that you're worth any more investigation?

Right now due to the current design deficiencies mentioned by AnotherUser, that user is heading elsewhere.

</comment><comment><USER9> your have to improve your website design.

when i go to <http://glassbead.net>, i must see the game board. also, you should not require the player to register before playing.

<comment><AUTHOR> You can see several sample games in the youtube videos on that page.

Because it's a social game (i.e., you can't play alone), registering is more of a quality control than anything, like news.ycombinator, for example. Registration is extremely minimal (email address only required).

<comment><USER4> Registration is _not_ extremely minimal, I just went through it. It took about 5 steps, two of which were email confirmation.

Once I did complete registration, I was not logged in - why not? Instead you showed me a "2. Player Information" screen where I had to read about clicking a "home page" link (not underlined, similar color to the rest of the text, tiny font), and then log in again.

Take a look at the Tumblr signup page.

I'm motivated because I've read the book, but most people wouldn't bother jumping through all the hoops.

</comment></comment></comment><comment><USER10> You should offer a few static screens for people who browse with flash and javascript disabled.

</comment><comment><USER11> Hesse is on my reading list.</comment>


Why does `True == False is False` evaluate to False in Python? (2013) - <AUTHOR> http://stackoverflow.com/questions/17202207/why-does-true-false-is-false-evaluate-to-false <comment><USER2> One of the comments lays out why I probably never use things like this: _And this is exactly why I tend to wrap compound logical comparisons in parens, I simply can 't remember the syntax across all the languages I use, and it's not worth the risk of leaving them off and having unexpected behavior_

Apart from unexpected behavior it is also about readability: with parentheses in place you can just read left-to-right and the parsing overhead is minimal. Without them though, you have to read almost everything first, parse what is there, figure out what comes first (and hope you remembred it correctly), then read again to get a mental image of what is actually going on.

<comment><USER3> On the other hand, Python is the only language I've used which has this special-case parsing. In all others, a < b < c would be parsed as ((a < b) < c) which may or may not be a type error, but it's consistent with the other binary operators.

<comment><USER2> That actually proves my point. I'm not really good in learning certain facts by heart so if I see a < b < c it is going to take multiple seconds, likely followed by an internet search so add a couple of minutes to that, before I can be 100% sure what it does. I mean, I know what precedence is and I'd probably _assume_ it would be (a < b) < c but that's not going to cut it.

<comment><USER4> Just program in assembler then.

Honestly, Python's way is the only sane way to parse this. This is how a human who never programmed before with some knowledge of math would understand it.

Everyone's else mind is just corrupted by broken legacy languages.

<comment><USER5> I sometimes teach programming to beginners who have some knowledge of math. A common mistake they make is to write compound conditionals like this:

        if a == 2 or 3:
            do stuff

because that's how they would write it in math. Does that mean Python is broken and should support that construct as well?

<comment><USER6> I believe COBOL supports this.

</comment></comment></comment></comment></comment></comment><comment><USER7> I like chained comparisons for the `10 < x <= 100`, since it makes intuitive sense and removes duplication.

But I can't think of any case with `==` type operators, or really _any_ other operators where it also makes sense.

So was that maybe an overgeneralized feature that should have been limited to the math operators?

<comment><USER8> I think in language design there's an expectation that if an expression or statement doesn't make any sense, then people won't write it that way.

I think that's a pretty reasonable expectation, too.

In JavaScript, {} + [] evaluates to integer 0. That doesn't make any sense, but it makes more sense after reading the ES spec for the addition operator.

There are many expressions you can write in dynamically typed languages that don't make any sense, probably most of them actually, but they have to be considered valid because it's a dynamically typed language. So they're valid, they will evaluate to something.

The language designers aren't so concerned with identifying every possible combination that makes no human-intuitive sense. The important part is that when it seems like types should be inferred and coerced in a particular way, then that's how it should work. It should match human intuition.

I don't have any intuition or opinion about how True == False is False should be evaluated, this kind of thing is going to receive superfluous parentheses from me every time for the benefit of the reader, and if someone else wrote it this way I'm always going to look it up or test it in a REPL...

10 < x <= 100 though, if that's considered a valid expression and it doesn't evaluate to true for numbers in the range (10,100], I'm going to stop using that language...

<comment><USER9> >In JavaScript, {} + [] evaluates to integer 0. That doesn't make any sense, but it makes more sense after reading the ES spec for the addition operator.

It's the consequence of ill-thought mechanics when it comes to type coercion. It's the original sin of many scripting languages: "let's just add a bunch of shortcuts everywhere so that it doesn't get in the way of the developer trying to make a quick script". Then you end up with a bunch of ad-hoc type coercion and the language guessing what the user means all over the place, and eventually these bespoke rules interact with each other in weird ways and you end up with "{} + [] = 0".

> I think in language design there's an expectation that if an expression or > statement doesn't make any sense, then people won't write it that way.

That's either very idealistic or very naive. In either case I'd argue that's a terrible way to approach language design. I'd argue that many well designed languages don't make any such assumptions.

>but they have to be considered valid because it's a dynamically typed language.

Nonsense. Try typing `{} + []` in a python REPL. You seem to be suffering from some sort of Javascript-induced Stockholm syndrome, or maybe simply lack of experience in other languages. JS does the thing it does because it was designed(?) that way, not because there's some fundamental rule that says that dynamically typed languages should just do "whatever lol" when evaluating an expression.

<comment><USER8> I don't write JavaScript or have a strong opinion about it.

The widespread prevalence of JS transpilers and everyone's apparent unwillingness to write pure JS makes me think it probably isn't such a great language. It probably never had a chance given its history with browsers.

Just using it to make the point that every language has valid expressions that make no sense. You can find similar examples in every language. All you have to do to find them is start writing code in a way that no person ever would or should write it.

Especially in the case of dynamically typed languages, throwing an exception sometimes but not always based on the "human intuitiveness" of any given type inference would make the language even more unpredictable. It's just instead of asking why expression a evaluates to x, we would all be asking why expression a evaluates to x but similar expression b throws an exception.

If you ask me, the latter is even more arbitrary.

These aren't useful criticisms. The only reason these kind of critiques even get so much attention is because people reading the headline think: "I wonder how the hell that would be evaluated?" And so they click.

The headline is only interesting to begin with because nobody ever writes that, and nobody should ever write that.

If nobody would ever write it or have any expectations about its evaluation, then how is it even significant that the language will interpret it one way vs another?

I think these criticisms are a good springboard to have the debate about static vs dynamic typing, but arguing over whether True == False is False should be evaluated one way vs another is kind of pointless. If the result of that argument is agreement, then we might end up with people actually writing this, which should be the last thing any of us want.

</comment></comment></comment></comment><comment><USER10> If anyone's looking for some more good WTFs in Python: [https://github.com/satwikkansal/wtfpython](https://github.com/satwikkansal/wtfpython)

<comment><USER11> I must be a crusty Python programmer, because none of the first few examples seemed like WTFs to me at all. I think a WTF is when you think you know a language and then see something that behaves completely unlike how you expect.

<comment><USER12> I was annoyed by the number of RTFMs they call WTFs. They even claim some WTFs where Python behaves exactly as a naive user would expect, e.g. if I put 5 and 5.0 in a dict they are treated as the same key.

I saw two valid ones: "Lossy zip of iterators" is because Python conflates iterables and iterators, "The disappearing variable from outer scope" where deleting the exception is contrary to how scope works everywhere else.

They also miss the classic newbie head-scratcher:

        x = []
        for i in range(10):
            x.append(lambda: i)
        x[0]()

</comment></comment></comment><comment><USER3> This seems to be another instance of the general situation where trying to "helpful" by introducing a special-case rule (comparison chaining) that is intended to make some uses more convenient, also introduces perplexing behaviour for other cases. I'm far more accustomed to the C-family languages, where parsing is usually quite uniform, so to me "these operators are binary and left-associative like all the others, except when more than one occur in an expression" seems like a trap. I wonder if the short-circuiting behaviour of the implicit && has also caused some surprises, even in the x < y < z() type of expressions that this feature was intended for.

<comment><USER13> Yes, I was going to comment much the same but with the addition that Joel Spolsky famously documented this phenomenon is his essay on The Law of Leaky Abstractions:

[https://www.joelonsoftware.com/2002/11/11/the-law-of- leaky-a...](https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky- abstractions/)

<comment><USER3> For an 18-year-old article, it sure is prescient --- the state of modern software seems to be all about gluing together numerous layers of abstraction and libraries without understanding them, with the result that whenever something goes wrong, as it inevitably will, it takes even longer to diagnose. The higher you are on the ladder of abstraction, the worse the fall.

<comment><USER14> But also, those high ladders of abstraction support some pretty cool software...

</comment></comment></comment></comment><comment><USER15> I can't help but read most of the moaning about Python's handling of chained comparisons in this thread as "I already know how Blubb handles comparisons, thank you very much, and if Python doesn't do it exactly the same way Blubb does, Python is obviously stupid and it's designers must be morons."

</comment><comment><USER16> I honestly don't think being able to write 'a < b < c' is worth making the language bigger and causing weirdness and gotchas like this. 'a < b && b < c' isn't that much longer and is instantly and unambiguously readable to programmers coming from hundreds of other languages.

<comment><USER17> I really agree with this. Maths <> programming, so while some notation sharing is good, don't (IMO) take it too far.

I don't like it either when languages get too helpful. I was recently doing some python and getting some very odd results. Turned out the index I was using to pull stuff from the list had gone negative (off by one error) so it was getting stuff from the end of the list rather than excepting as most languages would. That is

      y = [1,2,3]
      y[-1]  <-- unintentionally negative index

I'm not saying the ability to index with negatives like this is a bad thing in python, but I seriously question it's value vs the footgun thing.

A while ago I was doing some SQL and used an answer off stack overflow. It was a good answer but it tried to be too flipping helpful. IIRC it was doing nontrivial date difference calculations[0]. Rather 'helpfully' if "(date2 - date1) < 0" it would kindly assume you'd given it arguments in the wrong order and silently flip them for you (to "date1 - date2") to get you a positive number, always.

This 'helpful' behaviour hid the presence of bad data (date2 should _always_ have been chronologically later than date1 - date1 was interview, date2 was when job started).

Moral: keep programming language & library semantics simple.

[0] I remember now, it was the number of weekdays (that is, excl. sat/sun) between 2 dates.

<comment><USER18> Negative indexing (along with the related syntax for slicing) is one of the most usefull python features. Numpy and pandas thrive on it.

Just learn the language, python is already one of the easiest languages out there.

<comment><USER17> I know python. I have rarely found negative indices useful except to pick out the last item of a list, and I've done a decent amount of it, though no numpy/pandas yet. In what way is negative indices particularly useful for these latter two?

I have no problem with slicing. You can't get it accidentally wrong because the syntax is visible. Negative indexing vs positive indexing can't generally be distinguished just by looking at the indexing statement, which is where I tripped up.

</comment></comment></comment></comment><comment><USER19> I tried this in gpython ( [https://github.com/go- python/gpython](https://github.com/go-python/gpython) ) and it works.

That isn't surprising I suppose however what is surprising is that I wrote gpython and I had no idea why it worked until I read the explanation on stack overflow about 5 times.

I guess that is the power of having implementing the grammar.

I always like it when my creations (programs or children) exceed me :-)

</comment><comment><USER20> I find it cool to explore these edge cases, but putting anything like this in a real code base is a terrible idea BECAUSE there are so many different ways to interpret it. Sure a < b <= c has a clear mathematical meaning which works towards python's overall mission of being clear, but in general please good people only have one or two variables in your conditional statements!

</comment><comment><USER21> I find something like this totally plausible and yet it is completely wrong.

        >>> def check_parity(x, expect_odd):
        ...     odds = [ 1, 3, 5 ]
        ...     if x in odds == expect_odd :
        ...             print("ok")
        ...     else:
        ...             print("error")
        ...
        >>> check_parity(5, True)
        error

Crazy!

<comment><USER22> If I understand what you're getting at changing '==' to 'and' will make it work the way you're expecting. Both have to evaluate to 'True' in the if statement and passing 'False' to expect_odd will always print 'error'.

<comment><USER23> That wouldn't work for the even parity case.

"(x in odds) == expect_odd" gives the intended behaviour and I think is easier to read as well.

</comment></comment></comment><comment><USER24> This is neat. My first reaction was confusion and a bit of shock. But then it made sense. And it makes a lot of sense.

Part of the issue is that "==" and "is" are intermixed. That emphasizes the weirdness but detracts from understanding the underlying mechanism that is at work.

If you look at

True == False == False

It makes more a bit sense that it evaluates the way it does.

If you do

1 == 2 == 2

and it evaluates to False, then it is perfectly clear.

</comment><comment><USER25> There are many kinds of chained operators (in some languages even associative arithmetic operators are chained). Contrary to popular beliefs, this is nothing to do with chained operators but rather with operator precedences.

It is pretty common that arithmetic comparison operators are grouped to a single precedence level and that's not a problem. But in Python `is`, `is not`, `in` and `not in` are also in that level. In particular two operands of `in` and `not in` have different [1] types unlike others. Mixing them are, either with or without chained operators, almost surely incorrect.

This kind of precedence issue can be solved by introducing non-associative pairs of operators (or precedence levels), something that---unfortunately---I don't see much in common programming languages. Ideally Python's operator precedence table should look like this (compare with the current documentation [2]):

        Operator                                Description
        </comment><comment></comment><comment></comment><comment></comment><comment></comment><comment></comment><comment>--  </comment><comment></comment><comment></comment><comment></comment><comment>
        ...                                     ...

        `not x`                                 Boolean NOT
         _______________________________________________________________
        |
        | The following groups do not mix to each other.
        | Use parentheses to clarify what you mean.
        | ______________________________________________________________
        ||
        || `in`, `not in`                       Membership tests
        ||
        || `is`, `is not`                       Identity tests
        ||
        || `<`, `<=`, `>`, `>=`, `!=`, `==`     Comparisons
        ||______________________________________________________________
        |_______________________________________________________________

        `|`                                     Bitwise OR

        ...                                     ...

In fact, there is already one non-associative pair in Python: `not` and virtually every operator except boolean operators. It is understandable: the inability to parse `3 + not 4` is marginal but you don't want `3 is not 4` to be parsed as `3 is (not 4)`. My point is that, if we already have such a pair why can't we have more?

[1] With an exception of strings (`"a" in "abcdef"`). I hate that Python doesn't have a character type.

[2] [https://docs.python.org/3.8/reference/expressions.html#opera...](https://docs.python.org/3.8/reference/expressions.html#operator- precedence)

</comment><comment><USER26> It seems like only operators with a nice transitivity should be supported. x < y < z. x == y == z. x is y is z. That kind of thing. x != y != z doesn't work because in normal language, you'd say that to mean that they're all unique, while allowing it the python way, it doesn't imply x != z.

</comment><comment><USER27> I wrote up a post on this same kind of expression: [https://banna.tech/post/chained_conditional_expressions_in_p...](https://banna.tech/post/chained_conditional_expressions_in_python/)

</comment><comment><USER28> You're mixing comparison operators (`==` and `is`), which is a code smell.

It doesn't matter what the result is - you know it's going to bite you eventually. If you run a linter on this it would correctly yell at you.

<comment><USER14> Don't jump to conclusions too fast about a reduced example to demonstrate a problem.

I probably originally had 2 expressions that evaluated to booleans. I may have been using `is` to check that the type of one was actually a bool rather than just falsey.

</comment></comment><comment><USER29> Someone writing code like these, his life is sad.

<comment><USER14> IIRC, I originally had 2 expressions that evaluated to booleans that I was comparing. I don't remember if I had parens, but I do remember being deeply confused once there were no parens.

</comment></comment><comment><USER30> does ruby do anything like this? i'm new to ruby and could imagine something like this biting me ...

<comment><USER31> Yes. Check out the differences between `&&` vs. `and`, along with `or` vs. `||`, which can lead to similar surprises.

Though you can skip this lesson if you've worked with Perl (any others?) in the past.

<comment><USER32> I agree with the folks at Airbnb regarding the _and_ , _or_ , and _not_ keywords. "It's just not worth it." [1].

[1] [https://github.com/airbnb/ruby#no-and- or](https://github.com/airbnb/ruby#no-and-or)

</comment></comment></comment><comment><USER33>
      >>> True is (False is False)
      True
      >>> True == (False is False)
      True

</comment><comment><USER34> Explicit is better than implicit.

       >>> (True == False) is False
       True

</comment><comment><USER14> Oh, hi!

Yeah, that was a real head-scratcher.

</comment><comment><USER35> 170 comments here so far because of some syntactic sugar. If it causes this much discussion and confusion it's not worth it IMO. I'm glad none of the languages I use have this "feature".

</comment><comment><USER36> tl,dr: if you know why does the result of `1 < 2 < 3` is True,then,you know why `True == False is False` is False. Forget other language, first. In Python the chain compare means `1 < 2 < 3` means `1 < 2 and 2 < 3`, so `True == False is False` means `True == False and False is False` and equal to `False and True`. So, the result is False.

</comment><comment><USER37> This can be fixed by one of my favorite Python oddities,

True = False

This is right up there with default arg instances getting cached across calls, though it's perhaps better suited for an underhanded Python competition.

Have fun with it. Redefine it to be true 90% of the time.

<comment><USER38> You'll need to find another one, the above results in SyntaxError: cannot assign to True

<comment><USER37> I could have sworn that was still a thing in Python 3, but it looks like they've formally been keywords since 3.0.

I suppose it took awhile for the default Python shipped with systems to be 3.*, because I show people this anytime Gary Bernhardt's "wat" talk is brought up.

Edit :

Here's some of the fun from Python 2.X not treating True and False as keywords:

[https://stackoverflow.com/questions/13665989/in-python- how-t...](https://stackoverflow.com/questions/13665989/in-python-how-to- recover-from-joke-statements-like-true-false)

</comment></comment></comment><comment><USER39> It's just a operator precedence problem. Add parentheses and it goes away.

        Python 3.6.9 (default, Apr 18 2020, 01:56:04)
        >>> True == False is False
        False
        >>> (True == False) is False
        True

There are worse problems with Python's "is".

        >>> 1+1 is 2
        True
        >>> 1000+1000 is 2000
        False

This comes from a bad idea borrowed from LISP. Numbers are boxed, and the small integers have boxes built in for them. Larger numbers have boxes dynamically generated. In Python "is" means "in the same box". This corresponds to (eq a b) in LISP.[1] Exposing the implementation like that might have been a good idea when McCarthy came up with it in 1960.

[1] [http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node74.html](http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node74.html)

<comment><USER40> So all Python numbers are objects and the implementation automatically pre- allocates and reuses instances for small numbers? What a strange implementation. I thought it used tagged pointers like other dynamic languages. In Ruby, values can be pointers to objects but also 63 bit numbers when the least significant bit is set.

[https://en.wikipedia.org/wiki/Tagged_pointer](https://en.wikipedia.org/wiki/Tagged_pointer)

This issue of object identity and equality isn't unique to Lisp but I agree that applying it to numbers produces unexpected results.

<comment><USER41> > I thought it used tagged pointers like other dynamic languages.

No. IIRC tagged pointers were considered too complex to expose via Python's C API.

<comment><USER42> [https://mail.python.org/pipermail/python- dev/2004-July/04613...](https://mail.python.org/pipermail/python- dev/2004-July/046139.html)

-1000 from GvR

<comment><USER3> Here's his actual reply: [https://mail.python.org/pipermail/python- dev/2004-July/04614...](https://mail.python.org/pipermail/python- dev/2004-July/046147.html)</comment></comment></comment></comment></comment>


Blockchain and sex - <AUTHOR> http://quillette.com/2018/02/27/blockchain-and-sex/ <comment><USER2> Is there a reason that a consumer would prefer an application-specific currency (intimate, DentaCoin, whatever) rather than a generic currency (BTC, BCH, ETH, LTC, whatever)?

From my point of view, it seems like an unnecessary friction to be moving value between different currencies depending on what I want to buy - and the fact that I'm buying the currency at all may reveal more than I want it to.

(* I understand why it's attractive to be in on the beginning of a new digital currency, and collect the proceeds of an ICO, or hold a lot of cheap or pre- mined coins; I'm specifically interested in why it's good for a consumer, not the promoters.)

<comment><AUTHOR> I agree with that sentiment. There's something semi-nonsensical about application specific currencies, when the application does not involve some sort of distributed computing.</comment></comment>


MySQL founder tries a new software licensing model - <AUTHOR> https://techcrunch.com/2016/08/19/mysql-founder-tries-a-new-software-licensing-model/ <comment><USER3> Applying BSL to the MaxScale proxy is proving to be, so far, an unpopular decision among a large segment of the MySQL community.

The TechCrunch article didn't address this specifically, but the license for MaxScale requires a MariaDB Enterprise Subscription if you use MaxScale with just 3 or more database servers at your company.

Since MaxScale is a proxy, it isn't particularly useful for companies that only have 1 or 2 database servers, except as a very limited trial. So this move effectively makes MaxScale commercial software for most production use. This is a strange business decision, considering there are other third-party proxies available, such as ProxySQL, that have same (or better) functionality and no requirement for purchasing a commercial license.

I also wonder how MariaDB Enterprise Subscription pricing works for companies that just want to use MaxScale to connect to stock Oracle MySQL or Percona Server MySQL? Seems strange to tie the licensing to MariaDB Enterprise even for companies that just want to use MaxScale alone. Although a good proxy takes a lot of development work, it's still tiny compared to building a relational database. I wouldn't expect the two to be priced the same.

<comment><USER4> Most usage of MaxScale is one of the following: \- One Master with one Slave (for backup and high availability) \- Galera with 2 masters and the Galera Arbitrator This covers possible 90% or more of the common usage cases.

MaxScale is usually included in the MariaDB enterprise subscriptions and one can also get standalone licenses for MaxScale.

</comment></comment><comment><USER5> Its easier to procure paid for software than open source in many large enterprises.

There was a culture of fear for open source promulgated by proprietary vendors and major consultancies in the early 00's - the "know the facts" campaign by Gartner and Microsoft springs to mind.

Although this idea is generally dead now, the scars live on in the purchasing and licencing approval flows at many large enterprises.

I am familiar with several organisations where a paid for software licence can be acquired with nothing more than trivial approval for the spend. Yet adoption of an open source product requires multi layer approval of the licence and recording of licence risk against the project.

There is a valid case for that due diligence but its not a particularly strong case and if it were the reason for this situation, then proprietary software licences would be subject to the same scrutiny.

<comment><USER6> Paid for software usually comes in two flavours: turnkey or with consultants. In both cases the promise is that the software will in the end run, and those who need to will actually be able to use it. Also, that the software does something that should be useful to you.

Open source software comes "AS IS", WITHOUT WARRANTY OF ANY KIND. So, who is promising that the software will run, that people will be able to use it and that it does something actually useful to the large enterprise?

If the enterprise has never used that software, long time employees have usually no professional experience with it, so it is risky have them install and run it.

In my limited experience, adoption of open source software by large enterprises comes most of the times through consultants, hired not to install the software but to solve a business problem. The consultants promise to solve the problem with the software, and that the software will run etc.

<comment><USER7> > Open source software comes "AS IS", WITHOUT WARRANTY OF ANY KIND.

As far as I'm aware, most proprietary licenses have the same disclaimer. Have you ever seen Oracle getting sued when their database segfaults and loses data (in a similar way that a contractor would get sued for building a bridge that crashes)? You usually pay for support contracts with big enterprises, which have external guarantees and experts on call. Luckily, free software companies provide the same services without taking the freedom from the users of that software.

<comment><USER6> I'm not talking of the proprietary license, but of the exchange between buyer and seller. I've never talked to an Oracle salesperson, but I doubt that they'd say that the software isn't guaranteed to run and/or be useful.

The same goes for FOSS when a consulting company is involved: they say that the software will work; my point is that that's the most likely way in which a large enterprise can run FOSS.

There are other ways, of course: the decision can come from a high enough manager (or even from the CEO or CTO) who's willing to take the risk, but, indeed, they are taking a risk.

</comment></comment></comment></comment><comment><USER8> I don't say this lightly, but wasn't the open source license of MySQL the main source of its success? As I recall, it didn't really get huge until they loosened up the licensing terms. And wasn't that one of the main reasons it made $1 billion? Not criticizing – his business is his business. Just curious.

<comment><USER9> Would PHP have become popular if MySQL had maintained a strict license? I wasn't a web developer at the time and am genuinely curious what the database landscape was like back then.

<comment><USER10> Postgre would probably been used instead. The demand for an easy to use Web scripting language existed, php fit the bill that's what pushed mysql to become popular.

<comment><USER11> I kind of doubt it. The Windows port of PostgreSQL was kind of lacking for a long time (8.0, released in 2010, brought the first native Windows server version) and a large group of PHP developers were Windows developers.

<comment><USER12> I don't remember Postgres having much traction around 2000 or before.

Since there was "always" MySQL available, Postgres wasn't in need of development, for most people MySQL was sufficient. If MySQL had been less open, Postgres might have gotten momentum years earlier to fill that gap on the low web-end.

I can imagine Postgres popularity in recent years is because people are replacing Oracle databases with Postgres, they are looking for a way out of that. Or even more, newer companies don't even look at starting with Oracle, but start on Postgres right away.

</comment></comment></comment></comment></comment><comment><USER13> I think it is a great idea, you can charge when people use it in production and it reverts to oss on a specific date.

I worked at a startup and companies would want us to put a version of the software into escrow and were wary of us going under, giving them something like this would have been perfect.

<comment><USER14> As was pointed out elsewhere, it becomes GPL, which is not normally unencumbered enough for escrow, where you get unrestricted rights. You also want them immediately on failure, not after the timeout. So it doesnt work well for this use case.

<comment><USER15> GPL works perfectly with dual licensing.

If you want unencumbered, you pay for commercial license.

<comment><USER16> But that's the point, top parent was suggesting this as a replacement for commercial escrow. Most people wanting commercial escrow would not be satisfied with this.

<comment><USER4> I have been in several business discussions regarding source code in escrow and in all of them they have agreed that having the code released as BSL or eventually Open Source would be ok with them.

After all, companies using your software wants just to be sure that they can continue to use it as before if you stop supporting it. For this purpose BSL works perfectly as a default. If they need more, then you make an explicit contract just for them where you give them more rights to the software.

</comment></comment></comment></comment></comment><comment><USER17> This is great from the perspective of contributing intellectual property back to the ecosystem. They are trying to balance the revenue aspect with growing an open community which benefits the product as a whole.

My one concern is that the thrifty users will ride the expiration line, installing versions that don't cost money but which are outdated. I can see where that would be an acceptable tradeoff in many situations where the latest-and-greatest is not required. But from a security aspect I wonder if that also means that vulnerability fixes would only be available to the paying users. They are definitely worth paying for, no doubt; but would that then foster an ecosystem of not-really-patched installations out there?

(Then again, that might not be that different from the current situation.)

<comment><USER4> The old versions of MaxScale will of course get security and critical bug fixes. The MariaDB corporation will also accept patches to the GPL and BSL versions of the code.

</comment></comment><comment><USER18> It's surprisingly hard to find the actual text of the Business Source License. Where is it?

The link in the article points to a FAQ, which also does not appear link to the text of the license:

[https://mariadb.com/bsl-faq-adopting](https://mariadb.com/bsl-faq-adopting)

A Google search did not turn up the text of the license itself.

<comment><USER19> [https://mariadb.com/bsl](https://mariadb.com/bsl)

</comment></comment><comment><USER20> This interesting given I brought up a similar model talking to people here. I agree with the founder that licensing trumps support agreements in terms of supporting development of the product. He didn't even mention amassing patent portfolios or defending patent suits. These are relevant given big tech uses them to stop competition. Development, sales to increase amount of it, and legal investments all take _much money_. Licensing from paid users is best way to get that.

So, how to balance that versus wants of OSS community that might test, contribute code, and so on? One thing I posted was that the license would come with source, allow fixes, allow local extensions, and simply block redistribution unless its to paying customers. Covers most OSS benefits. To address lockin, I suggested provisions to cap what they can charge for given software and (relevant here) make it go GPL if it's abandoned.

Only got two reviews on this so far. I'm interested in getting some more. I think I've gotten pretty close to getting almost all benefits of OSS software while ensuring it stays paid for. Btw, one can also give out free or supported-at-cost copies to those help out in docs, debugging, whatever. One could also do free, AS-IS licenses for small businesses or startups so long as their revenue is below certain point.

The only thing I didn't try to do is restrict by number of CPU's, servers, whatever. It seems natural in mainframes, clouds, enterprise, whatever. I'm just concerned about its effects on how product is used in terms of innovation or robustness. One example is desktop virtualization at level of individual apps for security or failure isolation purposes. Your user experience at OS level is still about the same given you're using same OS to run same apps. The deficiency of OS in isolation means you had to add a virtualization solution. So, should people be charged an extra $100+ an instance to make up for that deficiency? Or same thing in high-availability setup where extra nodes don't contribute to throughput? So, I'm undecided on usage licensing.

<comment><USER21> > _Covers most OSS benefits_

No it doesn't, it's not even close. Other companies tried to bring this same argument but failed. Some people think that the primary benefit of Open Source is having some level of access to the source code and fortunately this didn't fly, in spite of the effort of companies, such as Microsoft with their "shared source" initiatives. Open source [1] brings with it two major benefits:

1\. the ability to use the software for any purpose, any field of endeavor, with no discrimination, for any business model. By your own admission, your license would be incompatible with such a contract.

2\. open source can be forked, just like Monty here forked MySQL and (arguably) kept it from dying. The importance of this cannot be overstated.

But more to the point, you say you'd allow "fixes" and "local extensions", yet restrict redistribution to paying customers, but well, you clearly have boundaries in mind for derivate works, as you clearly only want to allow small improvements. Can those improvements be redistributed as source code, for the benefit of others? And if not, then clients could find themselves in a gray area. For example what happens if these clients hire contractors to provide those improvements? That's always possible with open source, just like how it is (still) possible to take your car to any repair shop. You can quickly see how this can go out of hand.

And the restriction for paying customers sounds awful - first of all, what's a "paying customer"? Do money need to exchange hands? Are trial versions permitted? What if you want an alternative business model, ads-based or whatever. Etc.

But the biggest benefit of Open Source is the right to fork. First of all, this implies that ownership over such software is achieved by anybody that wants it. And it's an important right, especially if things go wrong.

You say that you could maybe have a clause somewhere, or a promise, to make the software GPL should it become abandoned. Oh well, what is abandonment? Plus, abandonment is not the only bad thing that could happen. You could also steer the project in a direction that people don't want, you could intentionally cripple it, you could raise prices so much as to make it unfordable and when you get bored of it, you could simply sell it to another company. Notice how neither of these conditions do not classify as abandonment.

Now don't get me wrong. I have nothing against proprietary software, heck, I would be a hypocrite if I wouldn't admit to developing and making a living off of proprietary software myself.

But I see _marketing_ attempts to redefine what Open Source means, only because Open Source is _marketable_ , being extremely attractive at least to developers and for good reasons. And look, I get it, we need to make a living, but it's dishonest. Your product can survive and flourish as proprietary, but stop with the bullshit and call a spade a spade.

[1] [https://opensource.org/osd-annotated](https://opensource.org/osd- annotated)

<comment><USER22> 3\. open source software projects (and distributions, e.g. Debian) usually don't want to be dependent on non-open source software. And they are usually very strict with licenses, so "almost open source" won't cut it. So I think BSL licensed software would get less adoption and less of the "free marketing" that open source software normally gets.

</comment></comment></comment><comment><USER23> This is a little off topic and maybe controversial because it is against the spirit of open source but in all earnestness if you make a software that you want to make available to all open source projects but then you want to charge a recurring monthly fees if the software is being used to make money - <USER2> there a standard license for that?

I've seen sites do this like readme.io but can you do that for a software library?

<comment><USER24> It's called a dual license. And yes, you can do it for anything. Copyright is automatic, and it grants you control over the right to copy your creation. You just need to make sure you're the one that created it.

Found this to be a good overview:

[http://oss-watch.ac.uk/resources/duallicence2](http://oss- watch.ac.uk/resources/duallicence2)

</comment></comment><comment><USER25> Is he trying to sell mariaDB now too?

I mean, it's genius from the business side. Unless i got the story wrong, he sold MySQL after people helped him create it. Forked it, and now it's turning the fork into MySQL/Oracle profit cow.

Either somebody correct me, or I'm going to assume "for as long as there's are sheep..."

<comment><USER26> WHile I despise this new licensing, your redition of history is not correct

Monty sold MySQL to Sun, he believed Sun would be good steward of the project, provide it the resources it needed, and allow it to flourish remaining Open Source

When Oracle bought Sun, Monty and most of the MySQL devs where very very very very very concerned that Orcale would be detrimental to MySQL going forward so they forked it and founded MariaDB to replace Oracle's mySQL

Some of their fears never came to be, but Oracle has closed the development of mysql is many ways, it is not as bad as it was orginally feared, but it no where near as open as it was under Sun.

<comment><USER27> The fork already happend during the time with Sun.

<comment><USER26> The fork happened while the sale was happening.

</comment></comment></comment></comment><comment><USER28> This licence is the basis for a business model - and should not be considered along side gpl, mit etc..

It's not particularly relevant to the discussion.

This is a business and commercial issue, not a 'details of the license' issue. The text could take on so many forms, and it's not particularly useful unless you're a very startup and can't afford a lawyer.

Example:

What is the price? What are the terms of payment? What about discounts? What is a 'CPU' when you're using virtualized hardware? How do the terms hold up against IP rights in the rest of the world? (Europe has very different laws for Software).

It's great that there's some text that a company can grab, but any company that is going to be licensing software should eventually consult a lawyer about this.

</comment><comment><USER29> Very interesting. It's a bit like the fair source license model [https://fair.io](https://fair.io) but more open in event the project looses traction is abandoned etc...

Sold. I will be moving my project searchcode server over to this within a week.

</comment><comment><USER30> Going to be interesting seeing how they will figure out where to draw the line (in legal terms) between testing and production. Would health checks be considered as testing the system or production type work?

<comment><AUTHOR> A simple test of "Can the intended end users access the system" would work.

Would also be a great motivation for developers to not test things in production, as it's cheaper to test them in the development/testing environment.

<comment><USER31> How can you accurately measure that via software though? What differentiates a developer from a user or a customer? IMO these are hard problems to solve and problems which are not worth the engineering effort to attempt solving.

<comment><AUTHOR> It's not a software issue, the licensee has access to the source code and can modify it in anyway they want, including removing any software-enforced licencing restrictions.

It's the responsibility of the licensee to make sure they are in compliance with the licensing terms (buy enough licenses to cover the number of CPU cores they are running in production), otherwise the copyright holder will sue them.

This idea of licencee self-compliance is not an innovative concept, it's how most licensing in large enterprise companies already works (and that's where this license is targeted), the company checks how many copies of the software they are running and pay that much.

It's not quite an honer system. Companies conduct regular audits (done by an external company) to prove they have everything licensed correctly.

</comment></comment></comment></comment><comment><USER32> When I see the abbreviation "BSL", I can't help but think it stands for "bullshit license"....

However, it actually sounds like a great idea to me, and a great way for companies to make money licensing software to commercial users while still keeping it free and open source for individuals, while providing a safety mechanism in case the company goes belly-up.

<comment><USER27> There is nothing the individuals can do with the open source version. It's old and has bugs and maybe security issues. In theory they could look at the source of the "commercial" version, but then have to be careful - they can't change it and if they ever write code they have to be careful about not doing plagiarism.

<comment><USER32> Sounds good to me; I don't see the problem.

If you want to redistribute, then you need to use the old buggy version. I don't really see a problem here.

If you want to use the latest-and-greatest in a non-commercial capacity, you can do just that. And it's open-source, so you can modify it all you want and use it. You just can't distribute it.

What's the problem?

No, it's not as Free as GPLed software, nor is it meant to be. It's meant to allow a company to make a profit on software licensed to other businesses or for commercial use, while still allowing it to be open-source, and allowing private individuals to use it without paying a license fee. (At least, that's how I read it from the article.) It sounds like a great way to balance the competing interests of a commercial software company, the users (both non- commercial and commercial), and the community at large. It would be a terrible license for basic infrastructure software like OpenSSH or PostgreSQL, but for business-oriented application software, it sounds absolutely perfect.

(Note, again, what I've written above about the way the BSL works is what I've gleaned from reading the article; if I'm incorrect, someone please feel free to correct me.)

</comment></comment></comment><comment><USER33> This might create some complicated situations when the older versions become free and somebody decides to fork it to fix bugs that are present in the old (free) version, but fixed in later (not-free) releases. I believe then you end up with the question was this fix back ported from new version or did the developer come up with it independently.

<comment><USER34> Percona is already maintaining a fork, as they do with MySQL itself.

At this point I don't understand why anyone needing a MySQL solution wouldn't use Percona's packages.

Edit: yes, Percona not persona.

<comment><USER35> Persona -> Percona

</comment></comment></comment><comment><USER36> Giving up revenue from customers that don't want to change and are happy to pay is a huge loss. AOL still makes 600m/yr from dial up.

The open source freemium is cool, though. Those are two powerful forces.

</comment><comment><USER37> Interesting concept, like how code will turn into GPL after a few years. Glad though that MariaDB is and could not be BSL.

</comment><comment><USER38> They are switching to a BS License?

Are we supposed to take this seriously?

<comment><USER39> And most retail shops use a POS system for their checkouts, what is your point?

<comment><USER38> [https://twitter.com/VadimTk/status/766333511514992640](https://twitter.com/VadimTk/status/766333511514992640)</comment></comment></comment>


Atea: a free minimalistic status bar time tracker for MacOS in Clojure - <AUTHOR> https://github.com/pkamenarsky/atea

<comment><USER2> Possible cool feature: add an integration with emacs org-mode (it's just a text file, after all).

<comment><USER3> +1

</comment></comment><comment><USER4> I love it: forked it and added state to the menubar icon. The icon is now grayed-out when time-tracking is off and bold when time-tracking is on.

Sent a pull request.

<comment><AUTHOR> Merged :)

<comment><USER4> Thanks for fixing the NPE in my patch. I'm afraid I don't know any Clojure at all; had to pick my way through a quick reference to do this.

</comment></comment></comment><comment><USER5> Great lightweight task manager. Will use this instead of sticky notes now! Possible add ons: * have an option in the dropdown that will open the current config file in case it's not open. * built in keyboard shortcut to open the menu

<comment><AUTHOR> Great ideas, opened up two new issues.

</comment></comment><comment><USER6> And if you use Notational Velocity to do your notes you can easily integrate Atea to your setup

Atea -> [Notational Velocity file].txt -> Dropbox

Notational Velocity w/ Dropbox <https://github.com/scrod/nv/wiki/synchronizing-with-dropbox>

</comment><comment><USER7> For those of you who have never heard of this new-fangled "lein" build command, it's for Clojure projects.

Installation instructions: <https://github.com/technomancy/leiningen>

After installing, be sure to run `lein self-install`

<comment><USER8> Actually, it can be (and is) used as a general-purpose build tool. I'm using it in some otherwise Java-only projects, and — who knows — it might even start getting some love from Scala hackers:

<https://github.com/technomancy/lein-scalac>

Once jark (a persistent Clojure/JVM backend @ <http://icylisper.in/jark/>) is made to work well with Leiningen, then the combination might be a reasonable replacement for sbt.

<comment><USER9> What does jark have over swank?

</comment></comment></comment><comment><USER10> Set it to read my todo.txt file in dropbox and now I have awesome, easy, simple, 'just works' cross app synchronization! (Though, they use + for project notifiers, and @ for locations. hmm... )

<comment><USER11> Ditto. Given how simple the todo.sh system is to use on top of the file, it might be nice to see to see some integration. Particularly since there's a nice app for mobile devices that reads/writes that file format as well out of your dropbox.

<comment><AUTHOR> Yes, mobile support is definitely a big incentive to support the todo.txt file format - I just opened up an issue.

</comment></comment></comment><comment><USER12> Is there any chance you could build something similar for the Windows Aero Taskbar?

</comment><comment><USER13> anyone seen an automatic time tracking app that actually works?

I used to use rescue time, but it seems their grouping via keywords is gone now :(

<comment><USER14> I use Desktop Task Timer (OS X). It was very inexpensive on the app store, and reduces the overhead of tracking time for my customers every day. I also use org mode a lot in Emacs for managing tasking.

</comment></comment><comment><USER15> Anyone know of something similar for Ubuntu(Gnome)?

<comment><USER16> This appears to use JDIC, which is cross-platform - anyone know if this runs on other systems?

<comment><AUTHOR> Unfortunately I've heavily hacked JDIC since it doesn't have 64bit binaries and uses JPopupMenus, which look and behave terribly in the MacOS status bar, thus making it MacOS only.

However, porting the project to using Java6's cross-platform tray support should be trivial.

</comment></comment></comment><comment><USER17> yeahhh, well done mate!

</comment><comment><USER18> I use it all the time and the code behind it (almost) fits on a napkin.</comment>


Tell HN: How to stop Firefox tool tips from disappearing automatically - <AUTHOR>

This has been bugging me forever (namely on xkcd), and I finally decided to do something about it.  You can get it here: http://xkcdtips.appspot.com/ <comment><USER2> For the record, you don't have to log in to install an extension in the 'experimental' section these days - but of course you still have to log in to leave a review, which is the only way an extension can make it into the public area.

Also, rather than stopping tooltips from disappearing automatically, why not just have some JS that copies the contents of the title attribute into a paragraph just below the image or something?</comment>


My name is […] and I am an Author Relationship Executive at Packt Publishing - <AUTHOR>

Today I received an email from someone claiming to be an Author Relationship Executive at Packt Publishing. They contacted me asking to author a beginners book on a certain piece of 3D modeling and animation software which I happen to be very familiar with.
Intra nos, I am very familiar with the app and the topic specifics, but the email had a somewhat canned scent to it. I replied with some bit of info about myself, some questions and I am still waiting for reply. However in the meantime I googled a bit and judging by the results it appears that PACKT is hiring an army of contractors tasked with contacting semi-random potential "authors".
Try googling for "I am an Author Relationship Executive at Packt Publishing".
See what I mean? Makes me question the quality of any of their titles but most worryingly the credibility of the publisher. I am familiar with the app, but I can guarantee you that there are much more experienced candidates out there.
Is this common practice? Have any of you been contacted by PACKT in a similar fashion? <comment><USER2> Hey tmslnz... Give me a shout, my email is in my profile.

<comment><USER3> Your profile appears to be blank. (I am not the OP).</comment></comment>


The Strange Brands in Your Instagram Feed - <AUTHOR> https://www.theatlantic.com/technology/archive/2018/01/the-strange-brands-in-your-instagram-feed/550136/?utm_source=atlfb&single_page=true <comment><USER2> I'm an Instagram user that genuinely enjoys clicking on a lot of ads - to buy dumb cheap stuff. Pins, clothing, general apparel gets sent to me and it's exceedingly obvious when the quality of the ads start to degrade and soon enough my feed is full of new no-name companies. They front like an established brand having only 4 products all with the same design, all with ridiculous markups.

I would love vetted ads with established companies. I really understood the longing for walking through a mall. No tricks, just here's a cool thing of mine (a serious business) please buy it.</comment>


Ask HN: Is there a mobile version of HN, or an app? - <AUTHOR>

HN renders terribly on smartphones, particularly the comments with the fixed width content + density of text. An alternative mobile version would be great. Read-only is fine - I finding tpying on mobile devices slow and cumbersome anyway. <comment><USER2> If you search for "Hacker News" on the iOS App Store, you'll find 20-something apps for reading Hacker News. I like MiniHack[1], but I've only actually tried two of the apps.

[1] [https://itunes.apple.com/at/app/minihack-for-hacker- news/id6...](https://itunes.apple.com/at/app/minihack-for-hacker- news/id631108846?mt=8)

<comment><USER3> I can second MiniHack. I'm using it right now and it works really well. It's also incredibly well-designed.

</comment></comment><comment><USER4> I am using <http://ihackernews.com/>

</comment><comment><USER5> I use HackerNode on iOS, It's pretty minimal (in a good way) and works well. <https://itunes.apple.com/us/app/hackernode/id473882597?mt=8>

</comment><comment><USER6> iOS: Hackerful - [https://itunes.apple.com/us/app/hackerful-ycombinators- hacke...](https://itunes.apple.com/us/app/hackerful-ycombinators- hacker/id578256868)

Android: [https://play.google.com/store/apps/details?id=com.rickylaish...](https://play.google.com/store/apps/details?id=com.rickylaishram.hackernews&hl=en)

</comment><comment><USER7> I tested many HN clients for Android but this is the best one: [https://play.google.com/store/apps/details?id=com.glebpopov....](https://play.google.com/store/apps/details?id=com.glebpopov.hackernews&hl=pl) (Hacker News Droid)

</comment><comment><USER8> Android: [https://play.google.com/store/apps/details?id=com.hackurls](https://play.google.com/store/apps/details?id=com.hackurls)

</comment><comment><USER9> news:yc is my favorite: <http://newsyc.me/></comment>


Login and Pay with Amazon releases new SDKs, code samples, and docs - <AUTHOR> https://aws.amazon.com/blogs/aws/new-sdks-code-samples-docs-for-login-and-pay-with-amazon/

<comment><USER2> Awesomeness.</comment>


Google Releases Jaiku Source Code - <AUTHOR> http://code.google.com/p/jaikuengine/

<comment><AUTHOR> Seems a good place to start understanding the code is the design fundamentals doc: [http://code.google.com/p/jaikuengine/source/browse/trunk/doc...](http://code.google.com/p/jaikuengine/source/browse/trunk/doc/design_funument.txt)

The images they refer to are all in the /doc/ folder

<comment><USER2> For the curious, it's a reST document (<http://docs.python.org/documenting/rest.html>) so were you to check out the source via SVN (<http://code.google.com/p/jaikuengine/source/checkout>) you could use some tools to convert it to a more readable format (if you have docutils installed it probably came with some variation on rst2html or rst2pdf).

Though, looking at the Makefile it looks like you could also just run 'make api_docs'

</comment></comment><comment><USER3> Looking for XMPP related code on GAE.

svn checkout 15.23 MBytes transferred in 4 minute(s) and 29 second(s)

</comment><comment></comment><comment></comment><comment>update</comment><comment></comment><comment></comment><comment>

here we go:

[http://jaikuengine.googlecode.com/svn/trunk/common/protocol/...](http://jaikuengine.googlecode.com/svn/trunk/common/protocol/xmpp.py)

from common.protocol import xmpp

from common.protocol import sms

Now I am worried about XMPP and SMS abuse.</comment>


Former Googlers announce new Beep audio streamer that connects to any speaker - <AUTHOR> http://www.techspot.com/news/55585-former-googlers-announce-new-beep-audio-streaming-device-that-connects-to-any-speaker.html

<comment><USER2> >We're shipping to the US only for now.

Sigh.</comment>