An Update on my Ask HN - 2223764 - <AUTHOR>

A few weeks ago I posted an Ask HN about what to do as my 3 next steps on a startup concept, and now I wanted to provide you with a quick update.   http://news.ycombinator.com/item?id=2223764
Based on some of the advice and information I received I decided that imperfect action was better than no action at all, so I went to my local San Diego Ruby meetup. I had some lengthy discussions with some of the folks that I met and concluded that as non-programmer attempting to manage full time hires was not practical and that subcontracting vs. full time was an appropriate next steps.
I then asked for recommendations, and along with a trusted and experienced PHP programming friend did some interviewing of the local talent. With the average cost estimates, timelines projections and learning curves - I figured it was time to expand my search rather than risk it with the two person companies that I was finding in San Diego.
I reached out to every provider listed on http://rubyonrails.org/ecosystem plus a list of people that they recommended to simply schedule an initial call.
My result, I was able to speak to 6 of the 17 providers that I called or emailed - the others did not even respond.
A few of them "disqualified me" during the initial calls as not having the budget, they suggested other trusted providers and sent me on my way. They did not get out of bed for less than $150,000 on a rails app and an additional $60,000 for the iPhone component. I certainly do appreciated them not wasting my time.
I had three fantastic conversations over the next two weeks and one of them said they said it was an awesome idea however they were not inspired to work in XYZ industry, but again I asked for the referral and called another set of providers.
After each of the calls and rejections I learned a ton about the vernacular and language of communicating my ideas to development teams and what is expected from the clients perspective in order to work effectively in an Agile environment.
So I refined my Keynote presentations, update my strategy and then something huge happened - I realized that part of the reason that I was not inspiring the providers was that I was not talking to them in the language that they wanted to hear....I was pitching business cases and they wanted 'user stories'.
So with the help of youtube / google I was able to get an immersive indoctrination into the distinctions of user stories, story carding, the differences between agile and waterfall / scrum and about 7 other Evernote notes full of info. After a few hours I was actually able to pick up the concepts and I have been giddy ever since.
Now I am not saying that I have ANY experience with the process, but it most certainly made sense! So I ended up building story cards and calling the providers back and communicating with a common language.  What a difference that has made.
It may seem simple to those of you that do this for a living but because I did not want to use something as complicated as Pivotal Tracker and I needed to build cards really efficiently that I could sort and that the providers could have access to.  I was unable to find any templates for the tools I already had so I build my own version in Keynote.  (the template is located here if it would help anyone - http://bit.ly/i1phXs)
I am talking to my preferred provider tomorrow to see if we can hash out a plan and I have put my investor on hold until we all know what we are in for - both in time, and money.
I recruited the CFO of a company that I used to work for to build a financial model based on some projections and API costs and things have really come together nicely. I have also been following the advice and formatting of the "applying to ycombinator" - not because I intend to apply but it does ask some very important questions and provides great insight into the getting to the "why" of the project.  (who knows, I might just click the submit button on Sunday after all of this effort)
This has been an amazing four week I have learned a lot - but it seems like a lifetime of experience 36 years :-) are really coming together to move mountains.
Thanks to HN for all the great insight and articles. As things progress, I will most certainly let you know. <comment><USER2> As a principal of one of the firms you might have contacted, I do want to applaud your perseverance and attitude. Let's face it, a lot of folks in your position would call in with the assumption that engagement selection is a one sided process (because they are the client, like at McDonalds). They then get offended when people don't want to drop what they're doing to help an unprepared client work through their design and business plan (for free of course, in the name of sales) just in time to turn them down.

It can be very difficult to schedule the right resources even on a team large enough to work on several projects simultaneously. The demand right now is unprecedented. Most studios are getting cold called and emailed 5-8 times a week by people with vague ideas and $25k budgets. Obviously, we'd help if we could but we have a responsibility to the people we work with to be incredibly diligent about working with clients that seem like good bets. After all, in all of the videos you've seen you'll be bombarded with the notion that ideas are cheap, while execution is everything.

One of the strangest things I deal with at Unspace is people who are confused as to why we charge what we charge, or folks that can't imagine why a multi- person, four month engagement might run over $100k.

You know, you can't open a dollar store in a strip mall for $100k, so why would a top team build you a sophisticated infrastructure to run your entire business on for less?

That all said, these are gripes. We love learning new things and working on new client engagements is a great way to get thrown into the deep end in domains we'd otherwise never get to touch. It can be hard to give everyone your time — most folks don't understand that I'm a developer, not a salesman — but I recently hired our first business development manager specifically so that we could give everyone that contacted us the benefit of the doubt. It's a courtesy and respect thing that is all too easily forgotten.

<comment><AUTHOR> Pete - Unspace did not make it onto my radar for whatever reason. So no I did not get turned down by you guys...yet, however I agree during my first call I was surprised by the "way things worked" the philosophy, the pricing, everything but after three shops started talking about the same principles and similar pricing structures you start to get the scope of the universe.

This is basically what I learned - pricing may vary by experience, expertise or balls.

Two person teams - 35 billable hours per week each. Project manager accounting for about 10% of billable time so 7 hours per week for PM.

Card sorting, user stories, prelim UX process typically takes about 3 full days and most development houses are happy to have you on site during that process.

For what I am talking about 12-16 weeks for an MVP with pricing that ranges from $7500 to $12,000 per week per developer.

<comment><USER2> You're in the pocket. At Unspace, we're CAD$200/hour and we do our estimates in sessions, which are six hour days. Given that some days are more, some days are less it makes for a good average. That means that if two people are working full-bore here for a week it'd be CAD$12,000 plus tax, inclusive (our project management fees are embedded in the hourly rate).

Feel free to get in touch with our business development manager if you'd like to talk seriously: Nathan Athay (email@example.com) will be happy to hear you out. Tell him I sent you!

</comment></comment></comment><comment><USER3> Clickable to previous thread:

<http://news.ycombinator.com/item?id=2223764>

</comment><comment><USER4> _"you need a new version of keynote to view this presentation"_ notice. I think what I have is new enough...

how about a pdf?

<comment><AUTHOR> A PDF is tough because the fields are not fillable when exported - but here it is in PDF and Powerpoint. I hope this works for you.

[http://www.bradslavin.com/wp- content/uploads/2011/03/agile-u...](http://www.bradslavin.com/wp- content/uploads/2011/03/agile-user-stories.ppt)

[http://www.bradslavin.com/wp- content/uploads/2011/03/agile-u...](http://www.bradslavin.com/wp- content/uploads/2011/03/agile-user-stories.pdf)

</comment></comment><comment><USER5> Great followup, how about another in 2 weeks?

</comment><comment><USER6> _I reached out to every provider listed on<http://rubyonrails.org/ecosystem> plus a list of people that they recommended to simply schedule an initial call._

Are you dead-set on using Ruby and Rails? If so, why? I ask only by way of suggesting that broadening your view of possible technology platforms might give you an opportunity to interact with a shop that will be able to accommodate your situation.

Maybe call on some Groovy / Python / Scala / Clojure / Erlang / $whatever shops? Just a thought...

<comment><AUTHOR> Call it selection bias - you have to understand that when I started looking I had done some prelim research and that research led me to a conclusion, and that conclusion led me to a direction. Imperfect action.

After a lot more reading I would now be open to other languages - but back to the whole user story analogy, I should have been describing the system and what the user needs vs. the technology to solve it. I don't 'really' have a complete understanding of the this vs. that so I just picked one and started making calls.

I guess when you come to a fork in the road...

<comment><USER6> Sure, that's perfectly reasonable. Just throwing an idea out there. :-)

</comment></comment></comment><comment><USER7> Congrats... and thanks for sharing your experiences with us.</comment>


Show HN: JSON storage bins with schema validation - <AUTHOR> https://www.npoint.io/ <comment><AUTHOR> Hi HN! This is a side project I've been working on for a while now.

It's similar to [https://jsonbin.io](https://jsonbin.io) (which was an inspiration!), but focuses on the second step of prototyping with data - <USER2> you're editing JSON online, how do you make sure you don't break your app? npoint.io lets you enforce a structure using JSON schema ([http://json- schema.org](http://json-schema.org)).

More background info: [http://alexzirbel.com/npoint](http://alexzirbel.com/npoint)

Also, it's open source! [https://www.github.com/azirbel/npoint](https://www.github.com/azirbel/npoint)

All feedback is super welcome. Also happy to answer any questions here.

<comment><USER3> Could you add that to your FAQ? I was like, what the heck is a json bin, what is actually validating this schema, is this something I run on my machine or in the cloud, is this self-hostable, how am I supposed to actually use any of this, what am I suposed to use it for, etc. Cloning jsonbin's about page would be great.

<comment><AUTHOR> Sounds like the homepage copy could use some work. Thanks for the list of questions you had, that's very useful. jsonbin definitely does a good job of explaining it.

</comment></comment></comment><comment><USER4> Looks nice. Having the immediate "Click here" that leads into the edit page with the double paned edit window is particularly cool.

Watch out with providing a hosted version of something like this with totally untrusted user input. JSON schema allows for arbitrary regexes for field validation which means a malicious user could easily bring down the site with a nasty regex[1]. Not a concern for anything privately hosted but sadly there are plenty of jerks in the world.

[1]: [https://www.owasp.org/index.php/Regular_expression_Denial_of...](https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_- _ReDoS)

<comment><AUTHOR> Ouch, that would suck. Thanks for the heads-up.

</comment></comment><comment><USER5> "Once a bin is locked, it cannot be deleted and none of its data can ever be changed."

I can understand why there is good reason for the data to never change, but if your product gets popular, or you are unlucky, then this could turn out to be a bad design choice i.e. Bob copies and pastes data containing customer PII in instead of the data they meant to include.

An option for data to be deleted, even if it's after multiple prompts, or a streamlined support flow.

<comment><AUTHOR> That's a good point. Since I don't have that feature, I'll be happy to remove data manually if it ever comes up.

<comment> ak47-1984 In light of the upcoming GDPR laws in Europe and the right to be forgotten, that's quite short sighted and could stop a number of developers using your system- I know I certainly couldn't use it without this available via API or console

</comment></comment></comment><comment><USER6> interesting - If I understand it right, I ran into a possible use-case for n:point recently...

I was building a pretty simple charting app that used React and Redux, so the structure of a chart was 100% defined via a JSON "state".

I didn't want to bother with a server so I just stored the state in browser localstorage.

BUT when I put the app online via static hosting, I needed to give users a way of deeplinking to and sharing a diagram they created.

Could I use n:point via API to set and get json state and then add your identifiers in an anchor tag like:

[http://my-static-chart-app.com/#4aed7cea56ece156c705](http://my-static-chart- app.com/#4aed7cea56ece156c705)

<comment><AUTHOR> That sounds like a perfect way to use it.

Here's an example of charting data, using npoint.io as the data storage "backend":

[https://beta.observablehq.com/@azirbel/npoint-io-charting- de...](https://beta.observablehq.com/@azirbel/npoint-io-charting-demo)

If you made a charting app that used an anchor tag to load data like you described, and made the resulting chart embeddable, I'd actually be interested in using it to power charts in blog posts. Cool idea.

</comment></comment><comment><USER7> Interesting idea. I read your blog post on the project, and understand your point on user management. I've hit the same stumbling block with projects I've been working on -- too much time spent on user management. There seems to be few off-the-shelf solutions for writing user management for SPAs and everyone recreates the wheel.

</comment><comment><USER8> neat, i like the design. Just wondering how would you monetize such an app. maybe you can add ads here and there.

<comment><AUTHOR> Easy - I'll just inject text-based ads into the saved data!

(Kidding, of course...)

I think it's unlikely that this site can be monetized, so I don't have my hopes up. The clearest direction would be to move up the "backend-as-a- service" spectrum into Headless CMS land (which I have a diagram for here: [http://alexzirbel.com/npoint](http://alexzirbel.com/npoint)). But I think it would be hard to balance that with the quick setup / unstructured data nature of the project.

One feature (maybe a premium feature) I'd love to add is form-based data editing. Theoretically you could generate the right kind of input fields (text, date, number) from the JSON schema and expose that as alternative editing interface. That would make the tool more like a CMS.

<comment><USER9> For my side project, I've been coming at essentially the same problem from the CMS angle. n:point is very neat by the way - great job!

I'm building a service that makes it possible to quickly create reusable content objects using Trello. The flow is: you write your content objects as cards in Trello, then you hit my service to get an array of self-contained JSON objects.

In terms of monetization, I'm building the service on stdlib.com. This means that I can charge a very small fee for each API request. (My service is not intended to be called from front end code.) Each user will also have an allowance of free calls. And I've already open-sourced the core functionality [1]. Definitely open to suggestions on this approach, though.

I keep thinking about adding support for schema validation. Your project has given me more to think about on that front! However, my immediate goal is to get the MVP ready to share.

Right now the MVP is live, but the landing page is not done yet. Feel free to get in touch if you're interested in more details - my email is in my profile.

[1]: [https://github.com/dwilding/trello- kb](https://github.com/dwilding/trello-kb)

</comment></comment></comment><comment><USER10> Random question... where did you get the art you used to make the website? Did you do it yourself?

<comment><AUTHOR> Made it myself in Sketch! It took me forever, I'll probably find a real illustrator next time.

<comment><USER11> The art is actually really nice. Great job on the clear landing page, and thanks for sharing!</comment></comment></comment>


Ask HN: As a .NET Dev, what is worth learning as a new language - <AUTHOR> I've spent my (12 year) career doing .NET and web related stuff. But I'm wanting to learn new things and get my feet wet elsewhere.
I'm kinda tossing up between learning Rust and Go for a personal project at home. But I want to learn something that I could possibly use in my career in the future.
Curious what everyone thinks a lowly little .NET dev should learn. (I've done a lot of PHP, Coldfusion, and used to run an Ultima Online share for 3 years where I used to do a lot of scripting for the game) <comment><USER2> People seem to think go and rust fill the same niche. I am unsure why. Go is easy to use and quick to compile and runs about half the speed of c c++ or rust. It scales up to really large numbers of threads better than any of those languages though, so it is great for services that need lots of connections. Tokio and green thread stuff for c++ will catch up eventually on the threading but go will still be quicker and easier to program in. Ask first do I want to be the person that writes the super fast core of a project, rarer skill set, higher pay, fewer jobs. Or do I want to write mainline service code, lower pay, more jobs, with a quicker pace and less optimization or bit twiddling? Deviating from the web back end field, rust will also have options for driver and kernel updates, or shared libraries that are security sensitive like libresolve for instance.

</comment><comment><USER3> My first suggestion would be Swift, which I think will enjoy an exponential use curve going forward. That will also give you exposure to a highly efficient native language, in fact one that's quite a bit more efficient than Go. It's also very well designed, and doesn't come with the learning curve of Rust. Finally, it will position you to do iOS and macOS development, which you may find enjoyable and profitable. I see you're interested in Linux from an earlier comment - Swift is open source, with a Linux port.

Otherwise I'd probably suggest something on the JVM ecosystem, if you might consider either portable web development or Android development. I personally find Scala, Kotlin and Clojure to be interesting in the JVM space.

</comment><comment><USER4> I'm in the same position as you, personally I'm going with rust + desktop (gtk, don't bother with gtk if you're tied to windows btw) development for something different. I'm pretty sure rust will have a bright future. Prior to that I was brushing up on c + gtk, which is definitely a culture shock but in a good way.

I haven't really been interested in go because it covers the same ground as .net but with a(IMHO) worse language.

<comment><AUTHOR> I mostly use Windows 10 and OSX.

But have experience with Linux, I just don't play games anymore and most of my stuff at home can be done on .NET Core so I can always use a VM for the odd Windows stuff I need.

Good chance to learn Linux properly while learning something else.

</comment></comment><comment><USER5> F# is high on my list of things to dive into when I get time.

I've also got _Seven Languages in Seven Weeks_ in my queue of books to go through.

Do some DirectX or OpenGL graphics work.

Play with mobile development, either native or Xamarin.

<comment><USER3> "Play with mobile development, either native or Xamarin."

Another very interesting development in the mobile space is Exponent, based on React Native...</comment></comment>


Objective-C Tuesdays: local variables and functions parameters - <AUTHOR> http://blog.ablepear.com/2010/04/objective-c-tuesdays-local-variables.html

<comment><USER2> Should have named it "C Tuesdays" since there's basically nothing related to Objective-C in the article...

<comment><AUTHOR> True, but Objective-C is a strict superset of C, and there are a large number of new Objective-C programmers that never learned C, or only used C in a class or two at school, and need a refresher.

</comment></comment><comment><USER3> Not a very good article. It seems to be targetted towards beginners, but it goes into rather obscure stuff that someone learning the language shouldn't have to know right off the bat. It comes off as though the author is trying to impress rather than to teach.

<comment><AUTHOR> I'm trying to provide a concise overview of different language features and to highlight some common gotchas when using them. I'm assuming that most of my readers already know how to program well in at least one language, but are inexperienced with C and Objective-C. I agree that it's not a good tutorial for people just learning to program.</comment></comment>


ngn/k, an AGPL K interpreter - <AUTHOR> https://bitbucket.org/ngn/k/ <comment><USER2> If you find it unbelievable that code like this is written by hand, read this short explanation about "a very unusual style of C" [1].

Fastai has a guide how to write Whitney-style code in Python [2].

Thre is a relevant thread in HN [3].

[1] [https://github.com/kevinlawler/kona/wiki/Coding- Guidelines#t...](https://github.com/kevinlawler/kona/wiki/Coding- Guidelines#this-is-a-very-unusual-style-of-c)

[2] [https://docs.fast.ai/dev/style.html](https://docs.fast.ai/dev/style.html)

[3] [https://news.ycombinator.com/item?id=19481505](https://news.ycombinator.com/item?id=19481505)

<comment><USER3> This isn't even unusual "I want to write K in C" style, it's specifically being annoying: [https://bitbucket.org/ngn/k/src/master/m.c](https://bitbucket.org/ngn/k/src/master/m.c). I mean, for goodness' sake, _it 's pivoting the stack in x86_64 assembly to implement _start_!

<comment><USER4> any ideas for a more compact and efficient way to get argc and argv on both linux and freebsd without bringing in libc?

<comment><USER5> Nope :)

But [http://dbp- consulting.com/tutorials/debugging/linuxProgramSt...](http://dbp- consulting.com/tutorials/debugging/linuxProgramStartup.html)

does suggest zeroing the top-most frame (%ebp) and making sure the stack is 16-byte aligned might also be worth doing. (Possibly it's already 16-byte aligned already because you jmp to main instead of calling it though?)

<comment><USER4> that's a good read, thanks. afaik zeroing %rbp here plays no role other than to assist debuggers. i'm not sure if alignment makes any measurable difference. if it does, it'll be worth doing. i jmp to main() because i wrote it and i know it never returns. it exit()-s.

<comment><USER3> > afaik zeroing %rbp here plays no role other than to assist debuggers.

Yep, it marks function frame boundaries. If you don't particularly care, you may want to consider compiling with -fomit-frame-pointer and the compiler will return this register back to the set of general purpose ones for it to use.

> i'm not sure if alignment makes any measurable difference. if it does, it'll > be worth doing.

It will if you end up emitting any SSE instructions, because they will cause loads and stores that need to be aligned.

</comment></comment></comment></comment></comment></comment><comment><USER6> Yes, you need to understand a bit of APL to grok the style, but I don't know why it bothers people so much. I'm guessing because it involves people actually using the macro system for something interesting. Somehow lisp gets a pass.

Personally I think stuff like the DO macro (F/Fj in this code base [https://bitbucket.org/ngn/k/src/master/k.h](https://bitbucket.org/ngn/k/src/master/k.h)) should be used everywhere to the extent it is part of the C standard. If compilers were aware of it, there are significant optimizations which could be made. It's dirt simple and saves considerable typing and eliminates lots of potential for error.

<comment><USER7> > Somehow lisp gets a pass.

OK, which is more readable:

        (setf (car lst) "value")

Or:

        (rplaca lst "value")

I think the one which allows me to learn "setf's destination is the first parameter" and forget the rest is easier by far. setf is glorious macrology: It allows people to write arbitrarily complicated datatypes and have assignment just work, reliably.

But the problem with this code isn't the macros. It's the fact the author types like they're being charged by the character and taxed for whitespace. The macros are amazing to the extent they allow this sort of thing. Blaming them for it is wrong, but judging by the only standard that matters, readability, this is not a good coding style.

<comment><USER8> Your example neatly demonstrates that your definition of readability is based on familiarity. What does variable assignment have to do with the Contents of Address Register, anyway?

In the absence of familiarity, minimizing the number of moving parts and factoring out repeated patterns still has intrinsic value for aiding understanding.

<comment><USER7> > Your example neatly demonstrates that your definition of readability is > based on familiarity. What does variable assignment have to do with the > Contents of Address Register, anyway?

I explained myself _right_ below my examples.

> In the absence of familiarity, minimizing the number of moving parts and > factoring out repeated patterns still has intrinsic value for aiding > understanding.

And now you're repeating what I said.

</comment></comment></comment></comment><comment><USER9> Author has a page [1] listing a few diff implementations of "K" [2]:

* A proprietary array processing language

* A variant of APL with elements of Scheme

* K serves as the foundation for kdb+, an in-memory, column-based database

* Advocates of the language emphasize its speed, facility in handling arrays, and expressive syntax.

1: [https://ngn.bitbucket.io/k.html](https://ngn.bitbucket.io/k.html)

2: [https://en.wikipedia.org/wiki/K_(programming_language)](https://en.wikipedia.org/wiki/K_\(programming_language\))

Edit: some examples of idiomatic code (I assume...)

* [https://github.com/KxSystems/cookbook](https://github.com/KxSystems/cookbook)

* [https://code.kx.com/phrases/](https://code.kx.com/phrases/)

* [https://github.com/KxSystems/javakdb](https://github.com/KxSystems/javakdb)

<comment><USER10> "64-bit spyware"

Telemetry?

<comment><USER4> i changed it to "telemetry". i'm not really sure what to call it. they are upfront about it in the clickwrap eula but the data is not anonymized (see section 1.5a - in k ".z.u" means username) and you are not allowed to obstruct connectivity. it's not quite spyware either, as it happens with your consent.

<comment><USER11> _it 's not quite spyware either, as it happens with your consent._

All the famous spyware I'm aware of which you had to have initiated the action to install includes an EULA which does mention the data collection. That doesn't make it any less spyware.

</comment></comment></comment></comment><comment><USER12> ngn wrote:

i'm not trying to purposefully copy [Arthur's] style. i've always been trying to write shorter code - there are public traces of how that evolved in ngn/apl and in dyalog's ride. i acknowledge that after seeing some of arthur's code, including b, my mental threshold of what is considered acceptable dropped significantly. once you accept certain principles about the code, for instance that it's more important to be able to hold it at once in your head than to be able to explain it to the uninitiated, this style becomes more efficient and more pleasant

...

if you seek simplicity, this style is to a large extent discovered (as opposed to invented)

complicated things can be arranged in many ways. simple in few. that's why it always looks like entropy is increasing in the physical world :)

[https://chat.stackexchange.com/transcript/message/52953241#5...](https://chat.stackexchange.com/transcript/message/52953241#52953241)

<comment><USER8> A fun and somewhat illuminating exercise in C is to simply try minimizing the number of semicolons in your programs. Pick any comfortable, well-defined task and spend a few hours refining an implementation.

Fewer semicolons means fewer statements. Apart from simplifying the structure of ones code overall, this also drives writing in a somewhat more functional style. You will find yourself taking advantage of the comma and ternary operators more, if you don't already. Macros are another tool for decreasing repetition. So is expressing programs in a "data-oriented" style, using lookup tables instead of explicit conditionals. If something is used only once, inlining it can reduce the number of distinct statements.

</comment></comment><comment><USER13> You could argue that the license of the code, in this case AGPL, is irrelevant. I don't think the source code is any easier to read than disassembled output.

<comment><USER14> You could say a similar thing about Japanese text if you don't read Japanese - "copyright isn't relevant, who would ever want to copy this gibberish?".

As people in this and similar threads mention - it is easier to read; in fact, it is easier to read than even the preprocessed output, if you are familiar with the style and concepts.

</comment></comment><comment><AUTHOR> 'tlack:

It only took ten years for a non-toy one to come about! (Less if you count the one that got sued off the internet from the Morgan Stanley employee.)

[https://news.ycombinator.com/item?id=944961](https://news.ycombinator.com/item?id=944961)

<comment><USER3> Somehow, I don't think they would appreciate this as much as you might have hoped: [https://news.ycombinator.com/item?id=945093](https://news.ycombinator.com/item?id=945093)

<comment><USER15> For the record, I'm more open to this style now so I'd like permission to take a few steps back from that statement in 2009 (and probably most of my others that year!).

Coding in a terse style really does have some benefits. You can understand more program flow at one time and you can easily see larger patterns.

Another recent discussion [https://news.ycombinator.com/item?id=21890259](https://news.ycombinator.com/item?id=21890259)

<comment><AUTHOR> I'm really happy you've changed your mind on this! Thanks for being open- minded!

</comment></comment></comment></comment><comment><USER10> Download links:

[https://bitbucket.org/ngn/k/downloads/k](https://bitbucket.org/ngn/k/downloads/k) (Linux binary 64-bit)

[https://bitbucket.org/ngn/k/get/master.tar.gz](https://bitbucket.org/ngn/k/get/master.tar.gz) (Source code)

No Javascript required

<comment><USER4> i'd encourage people to compile from source. the binary in "downloads" was compiled without the "-march=native" flag, in order to support older cpus, so it's a bit slower. also, i don't intend to update it regularly - i'll probably remove it in a couple of days.

</comment></comment><comment><USER12> Bizarre that this thread contains virtually no discussion of the technical merits of the end product (performance and size) - just the coding style.

<comment><AUTHOR> Right? I found it immensely disappointing.

</comment></comment><comment><USER16> Any doc on how IO and other things work in this lang? The official K doc is pretty bad, so I can't exactly go there lol.

<comment><USER4>
        0:"path"                  /read  lines
        "path"0:("line1";"line2") /write lines
        1:"path"                  /read  bytes
        "path"1:"content"         /write bytes

<comment><USER16> Thanks ngnk, but what if I can't read the entire file into memory (Ex: 20 GB file)? Are there any streaming words?

<comment><USER4> reading is done with mmap. it returns instantly and then loads memory pages from disk only when you use them.

<comment><USER16> So it uses memory mapped files for all operations? So whether the file is 1 MB or 1 TB, it'll read what it can via streaming? Sorry, not knowledgeable here. Sounds neat though.

<comment><USER4> 1:x uses mmap, so it would return instantly no matter how large a file you give it

0:x uses 1:x and then it splits the content into lines. unfortunately splitting requires copying, so you'd be limited by the amount of ram (let's ignore "swap").

i don't use mmap for writing/amendment yet. i'll be working on it.

the way modern hardware works is like this: every process run by the os has its own view of the (typically 48-bit) address space. a process can request from the os that a part of that address space be "backed" by a certain file. this means that every time the process touches (i.e. tries to read or write) a virgin memory page there (usually page=4k, always aligned), the os will be automatically notified and will make sure to fill it in with actual content from the file, before the process even knows. from that point on, the page will occupy physical ram. if the os is low on memory later, it may decide to free up the page and return it to its previous state.

in effect, data from disk (or any disk-like storage) can be "streamed" while your program uses ordinary array indexing. the word "streaming" though implies reading from start to end in order (which is additionally sped up by prefetch, but that's a different story..); memory mapping is more general - it allows random access.

<comment><USER16> I'd love to use this on Windows at some point as your language matures.

Is there any legal reason you'd be worried? It seems like ok and Kona are meant to exist strictly as toys.

<comment><USER4> ianal. to the best of my knowledge the project is clean from a legal perspective. ofc, you don't have to be doing something wrong to become a target of copyright trolling.

<comment><AUTHOR> Yeah, the reason oK was a toy was because John Earnest works for a company that has their own fork of the K3 source, if I remember correctly, which puts him in an area that won't end with one of Kx's harsh lawsuits getting dismissed immediately.

(Not that if he made a high-performance interpreter it'd be a bad thing legally: the reason GNU's programming guidelines are so archaic is partially because everyone implementing GNU early-on had seen the UNIX source code yet they could get around getting sued by writing esoterically.)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> This must be the famous _write once read never_ coding style I've heard so much about, a bit like my FINO list of bookmarks, where project like this one are always welcome

<comment><USER18> This is precisely explained by the quote elsewhere in the thread:

 _once you accept certain principles about the code, for instance that it 's more important to be able to hold it at once in your head than to be able to explain it to the uninitiated, this style becomes more efficient and more pleasant_

</comment></comment><comment><USER19> this is awesome. Congratulations!

</comment><comment><USER3> The code is unreadable, formatted in the style of an IOCCC entry–and this looks intentional. I wonder why.

<comment><USER20> It's just a different style. After using kdb+/q for aoc2019, I quite like the no space one-line style. I find the code easier to read and remember. I think most people who have tried an APL derived language also agree.

It's important that many/most cultural norms are not optimal, they are arbitrary. So don't immediately discount something for looking weird.

<comment><USER3> I refuse to believe that the call to main here is a matter of style: [https://bitbucket.org/ngn/k/src/master/m.c](https://bitbucket.org/ngn/k/src/master/m.c).

<comment><USER20> While I wouldn't write C like that, that's how Arthur Whitney and others write code. The entire kdb+/q codebase is structured like that. And considering the success and insane performance of the system, I believe there is something to it.

The point of this style isn't obfuscation, it's clarity and compactness. The compactness boosts the signal to noise ratio and allows the programmer to retain more information in working memory. I haven't programmed C like that and wouldn't, but I definately understand and respect the theory behind it.

I have on the other hand written q like that, at first skeptical of the style. But after a couple days, I wouldn't have it any other way. Being able to fit your entire program on a single screen has pretty profound productivity benefits. It also makes IDEs unnecessary.

For other code structured like this, check out Kona, J or kdb+/q.

In general, I don't think refusing to believe is a very useful attitude. See: Chesterton's Fence.

</comment></comment></comment></comment><comment><USER21> Is K [0] in some sort of competition with J [1] about who can write worst, most unreadable and unmaintainable C code possible?

[0]: [https://bitbucket.org/ngn/k/src/master/m.c](https://bitbucket.org/ngn/k/src/master/m.c)

[1]: [https://github.com/jsoftware/jsource/blob/master/jsrc/v2.c](https://github.com/jsoftware/jsource/blob/master/jsrc/v2.c)

<comment><AUTHOR> Snide remarks are dull, and HN's guidelines explicitly recommend against cheap humor. Every time K is posted to HN someone makes this exact style of comment in an attempt to be funny, but it's entirely unoriginal.

There's good reason as to why C written by APL programmers looks as it does, and shallowly dismissing it does a disservice to everyone.

<comment><USER7> I still wonder if this is the form the author of the code uses to write the program.</comment></comment></comment>


Japanese Bookshop Stocks Only One Book at a Time - <AUTHOR> http://www.theguardian.com/books/2015/dec/23/japanese-bookshop-stocks-only-one-book-at-a-time <comment><USER2> When playing a board game, like Terra Mystica, where there are choices I can make, and there are random elements that change from game to game, there's two routes I could go - The first is to play out the plan I've thought about so many times previously, to align the choices I make with that plan as faithfully as the random elements allow. The second, is to completely ditch whatever was in my plan, look at the random elements for this game, and play accordingly. I call the second strategy "Play to the board". The first strategy often means I'll do fine in the game, but will lose out to the player who benefited from the random elements of the game this round. The second strategy provide no such guarantees, but is the only strategy that allows great wins.

In life, people can pick one of _three_ strategies. The first is they can fantasise about what kind of car they want, what kind of job they'd like, what kind of girlfriend they'd have, and then try their best to make these "achievements", often falling short because the world is not fantasy. The second, they observe what kind of random elements the world exhibiting, e.g. "Oh these days accountants make lots of money", "These days Software Engineers have high salaries" and directly translate to mean "I am going to learn programming, even if I don't like it", and then they are playing to other people's fantasy rather than accepting their own strengths or weaknesses. Or thirdly, they can "play to the board" and make the best of what life gives them, at each moment in time.

The bookshop-keeper here, is eking out every single edge he can out of books to operate his shop. Where 30 years ago operating a successful physical bookshop might mean having a large selection available at any time, and frequent events to draw crowds, today, in competition with digital books, operating a successful physical bookshop might mean emphasising the advantages of the physical book, the romanticism attached to physical objects. I get the feeling he is the type who sees what the world is like today, and because he's got experience bookshop-keeper, not a software engineer or tech startup founder, he goes with the flow with what he's got.

Where in a board game, the game board is the entirety of the world, and can be considered by itself, in the real world, _our own selves are part of the board_ \- and I can't always do it, but I aspire to do what I can to play with what I've got, like the man depicted in this article.

<comment><USER3> He's only sold 2100 books in 7 months - not much of a success, at least in terms of profitability.

<comment><USER2> We'll see in the next 7. The Guardian article is 1 day old so far. ;)

<comment><USER4> I don't think an English language article on the Guardian will draw many readers to a Japanese bookstore, unfortunately.

<comment><USER5> I wouldn't be so sure. Recently Nat Geo featured a place that is located 10 miles from where I live on their cover ('Places of a life time', Äscher, Switzerland) and it's now over-run by tourists.

</comment></comment></comment></comment></comment><comment><USER6> I've imagined this repeatedly. When you can buy any book you want online, physical bookstores become, in practice, galleries—and their clerks become salesmen.

In such times, there's not much point to having a big store stuffed to the gunnels with anonymous tomes that the clerks don't even know they have, let alone know anything about. Bookstores have none of the things that the book- buyer wants (discoverability, recommendation or "match-making", knowledgeability); and, especially in the case of _used_ book stores, the online copy is probably in better condition, too.

When you treat books, instead, like pieces in a commercial art gallery—curated and exhibited for effect, with well-trained staff who can tell you all about them, or guide you to a book that fits your desires, or call/email you when a book you might like comes in—you get something from the physical store you don't get online. And, therefore, you actually might buy your copy from the store—maybe even at premium—because you aren't just paying for the book, but for the whole experience that led to you buying the book.

<comment><USER7> This seems to be a repeated theme [that I'm noticing] at present which to my mind hints at a particular flaw in capitalist society - that we end up paying for things by proxy.

You want a curated suggestion for what to read but instead of paying for a curator to make those suggestions you pay for a book that poorly hints at the worth that you've received from the curators effort. Or you want a particular piece of software but instead of paying directly [in part] for those who conceive of the software and implement it you pay for a support contract, or [gratis Google software] you pay slightly more for many things the advertising of which in part pays for the software that you use. You want to watch a well written movie, you pay for high-priced drinks and popcorn. Et cetera.

It seems that the value being generated gets removed one or more steps from the point at which the money paid that [poorly] feeds back to the system that you find that thing valuable. To me it seems that we lose a lot of the financial value to third-parties that place themselves at the interstices - the publisher's executives takes a large cut of the book price but did little of value, the 'stars' in the movie take a large cut but any one of hundreds of actors could have done that part, the advertising execs take a large cut but much of the output they direct is antagonistic towards those who are really seeking other things.

Just seems a really weird way to go about improving society.

<comment><USER8> You're basically describing the unbundling problem. People aren't accustomed to (and therefore generally unwilling to) pay for news, travel-related advice, recipes, et al. but they were historically willing to pay for such when they were bundled into a physical publication or where the advice was covered by a commission on some other service (like purchasing airline tickets).

<comment><USER6> People _do_ pay for advice, though. Financial advice in particular has an obvious unbundled market (not just in the form of "your guy at the investment bank", but also in the form of stock analysis, industry reports, etc. Bloomberg terminals are pure "advice", if you want to think of things this way.)

Slightly more murkily, though, we've got things like fashion advice, where you pay a "fashion consultant" who works with you to select clothes that work for you. You've also got "personal trainers" who curate your exercise experience. You've even got these things called "doctors" who don't even have any medicine in their offices(!), instead just writing down their recommendations for medicine you _should_ buy on a piece of paper! ;)

I think the uniting factor in all those cases where we _are_ willing to pay for advice is that the advice is very "interactive": the fashion consultant looks at how clothes fit on you, the personal trainer watches how well your plan is working out and keeps you motivated, and the doctor does a bunch of tests and schedules appointments at intervals for "long-term outpatient treatment" to make sure your medicine is working, adjust dosages, etc.

Meanwhile, it seems weird to imagine paying e.g. Netflix for the output of its recommendation engine, or iTunes for a generated Genius playlist; those are able to be created as batch processes from a bunch of data that already existed, namely your watch/listen history. You might imagine paying for _the service_ that provides that capability (like e.g. Spotify), but not for each piece of advice from it.

<comment><USER8> Doctors are a special case in that, for better or worse, you have to go through them to get a lot of medicines. (And IMO by and large that system makes sense.)

Outside of Bloomberg terminals which are a relative high-end niche, most individual investors get their research and financial advice bundled with transaction and management fees.

I basically agree with your other points. But, relatively speaking, things like fashion advice and personal trainers are very much a niche--and, as you say, based on very interactive service. And pretty much for comparatively high-income individuals like other personal services.

<comment><USER9> "Along with pet therapists, and personal shoppers?" Quote from some movie. Forgot movie. The actress Mila Kunnas.

</comment></comment></comment></comment></comment></comment><comment><USER10> I adopted a similar strategy for Tomotcha: we pick/sell only one tea each month. Most of our competitors send several samples each month, and from a revenue point of view maybe it's better, but I like the ability to give focus to a single tea.

For instance our next shipment is a Genmaicha: it's a combination of green tealeaves and roasted brown rice. The first time I drank Genmaicha I didn't like it much, because it's so different from what I was used to drink. But now I love it. You have to give each tea a try: if you just drink small samples you'll never develop a taste for the more complex ones.

<comment><USER11> If I like a particular tea, do you allow me to buy it again, afterwards? It would be reasonable, I think.

<comment><USER10> It really depends on the tea, if we still have it or if we can still reorder it from the producer. It will be pretty much impossible for a Shincha (new tea), as they are usually limited in quantity, and quite short lived. On the other end of the spectrum roasted green teas (houjicha) live much longer, so we can usually reorder them from the producer if we are out of stock.

</comment></comment></comment><comment><USER12> 2100 books over 6 months = 350 books per month, or 12.5 per day. Assume the books are $30 - $50, so $375 - $675. Assume a 70% cost of goods sold = $112.5 - $187.5 revenue per day. Tough to make a living unless he can push those numbers a bit. Interesting idea. Hope he can do it.

<comment><USER13> His previous bookstore had also a gallery space for rent, so it may be the case that this new store's model is actually closer to a gallery---author or sponsor may pay some fee. Just guess; I couldn't find an official document stating so.

<comment><USER14> That's plausible. Indeed it would be pretty hard to break even without an alternative business model: books usually have a MRSP printed on the jacket and charging more than the MRSP is unusual; plus the rent in Ginza is over 400usd per sq m.

<comment><USER15> The published MSRP is an issue, but generally books are available at wholesale for 40% off. So there is still a decent margin to start from, rent and staffing quickly eat into that cut. It's all about sales volume. Most mainstream hardcovers are around $16-35; after markup would be about $6.40-$14/copy in gross profit.

I used to work at an independent bookstore that had a niche for local and regional(WV/Appalachia) authors and stories. This worked great as we were in a tourist area, so the influx of new customers was readily available.

For local customers we offered custom orders, to address issues with limited supply. Though it would be cheaper to go to Amazon, a large portion of the community are artists and craftsmen so they liked to encourage the local economy.

</comment></comment></comment></comment><comment><USER16> It's more of a gallery than a bookshop. The book is on display. The theme of the book is extended into the presentation of the place. Instead of a gallery gift shop you can buy the book the gallery was themed on. It's a nice idea. Gimmicky perhaps, but nice.

<comment><USER17> It's akin to a musician/artist performing/producing at some minor venue (park, museum, bar, etc just sitting in the side providing ambiance) where just a few minutes experience is enough for some to buy a CD/DVD/book. Give a wandering shopper a reason to drop into the gallery/store and have a remarkable few minutes, and some will buy without planning to.

</comment></comment><comment><USER18> Zeroing in on one book is crazy. However singling out a single author each week might work.

One week it's Hemingway and the next week perhaps it's Elmore Leonard. You decorate the store and the key is the author has many books and you stock them all. In a place like Tokyo, NYC or London this approach might work.

It would almost be like an art gallery highlighting dozens of paintings by a single artist. You could invite people in to discuss the author and those events would draw in even more people.

</comment><comment><USER19> I can't really back this up with a source but I read somewhere that this is similar to how traditional Japanese merchants used to operate. They would show a customer a single item, which he could either accept or refuse. Then another item was brought in and so on. By restricting access to the entire catalogue the merchant was able to get better deals out of the customer.

</comment><comment><USER20> It seems to me almost a given that the authors and publishers are paying or otherwise helping support these endeavors, via some sort of cooperative advertising type model. Some of his comments seem to hint at that.

Either that or he has a trust fund, given Tokyo real estate prices there don't seem to be many other reasonable hypotheses.

</comment><comment><USER21> The room looks like an art gallery as others have commented. I can remember seeing displays of the catalogue for an exhibition in art galleries - a large array of a single book. The arithmetic implies some form of subsidy, and that room looks lovely. There is a street view here...

[http://www.takram.com/projects/a-single-room-with-a- single-b...](http://www.takram.com/projects/a-single-room-with-a-single-book- morioka-shoten/)

...looks to be an exercise in branding/design.

I'm wondering if a community will form around the 50 or so titles stocked in a year. A book per week is a reasonable reading target for most educated people. If so, then a coffee shop model becomes possible: a coffee shop stocking one title per week and _encouraging discussion_ while continuing to sell their coffee and food to pay the rent.

<comment><USER22> It's also open between 1-8pm and, according to that link, events are organised every night, so building such a community seems to be a main part of the concept.

</comment></comment><comment><USER23> Wow this sounds like it could be something straight out of Italo Calvino's "If on a winter's night a traveler".

<comment><USER24> Also from the TV show Portlandia, which had an episode about shops selling a single item.

</comment></comment><comment><USER25> I'd buy it. I mean, if the guy's stocking one book, it's going to be pretty good, right? I mean, what is it going to be like that (redacted) book I was reading written in a dead author's name? [1] I was like, wait a second what is this piece of crap - then I was like, ohhh. Yes, that would explain it.

That's not going to happen if I buy this guy's one book.

[1] like this - [http://www.avclub.com/article/pay-no-attention-to-the-man- be...](http://www.avclub.com/article/pay-no-attention-to-the-man-behind-the- curtain-7-f-101553)

</comment><comment><USER26> So this is essentially a subscription model?

It sounds like he is trying to capture the attention of a group of regulars to the point that they will all buy every book he displays. That, or every time he stocks a new book the updated store will at least turn heads. Standard bookstores never really change in appearance.

I guess there is also a threat. Buy it now because it won't be here next week.

</comment><comment><USER27> This is "sell a lifestyle / experience" model like Starbucks and to some degree Apple.

A model, although very successful, I abhor. It purports that you can "buy" happiness. It targets those so affluent and/or so bored that mere ownership of things is no longer enough to make them feel special.

</comment><comment><USER28> There is more information and photos in this blog post:

[http://www.spoon-tamago.com/2015/09/06/morioka-shoten- ginza-...](http://www.spoon-tamago.com/2015/09/06/morioka-shoten-ginza-a- bookstore-that-only-carries-one-title-per-week/)

</comment><comment><USER29> And then there's the record store that only sells (and buys) the White Album:

[http://hyperallergic.com/65570/we-sell-white- albums/](http://hyperallergic.com/65570/we-sell-white-albums/)

<comment><USER30> Despite the URL, the article text explains that the store actually doesn't sell them. They only buy more.

</comment></comment><comment><USER31> A lot of people are calculating the cost of the book based off of MSRP and discounting it. However am I the only one that thinks he might consider selling the book above MSRP? In a way buying a book from here is an experience.

</comment><comment><USER32> ...because in his former shop, he had to carry a whopping 200 books!

</comment><comment><USER33> Very Zen.

Life is really simple, but we insist on making it complicated. – Confucius

<comment><USER34> I hate to be that guy, but Confucius probably said no such thing.[0]

[0][https://en.wikiquote.org/wiki/Confucius#Misattributed](https://en.wikiquote.org/wiki/Confucius#Misattributed)

<comment><USER33> You seem to be correct. The dangers of googling stuff.</comment></comment></comment>


A/B Testing Significance Calculator - <AUTHOR> http://www.jeffpickhardt.com/abcalc <comment><USER2> I agree with other critiques here that this A/B testing calculator does little to add to the conversation, and someone who uses it would be mislead in how to interpret results.

The procedure my team uses is:

1) hypothesize an expected conversion rate and whether to use a one-sided test (if we're testing that the state of the world remains unchanged) or a two- sided test (if we're testing that that the state of the world has changed as a result of the variation)

2) run those numbers through this power/sample size calculator to determine the number of visitors we need before we can analyze the experiment: [http://www.stat.ubc.ca/~rollin/stats/ssize/b2.html](http://www.stat.ubc.ca/~rollin/stats/ssize/b2.html)

3) wait for traffic

4) after enough visitors have come to the funnel, pass the resulting conversion numbers through ABBA [http://www.thumbtack.com/labs/abba/](http://www.thumbtack.com/labs/abba/) [1] to see confidence intervals on our results

For further reading, I highly recommend:

[http://visualwebsiteoptimizer.com/split-testing-blog/how- to-...](http://visualwebsiteoptimizer.com/split-testing-blog/how-to-calculate- ab-test-sample-size/)

[1] disclaimer: my colleague wrote ABBA

<comment><USER3> I also agree. This is effectively 2 lines of R code:

        binom.test(500,2100)
        binom.test(1000,2000)

With a boxplots/confidence interval plots (which are not many more lines). Whether this is useful or not depends on how much people know about statistics I guess.

<comment><USER4> This calculator makes reasonable assumptions. For example, it doesn't use bootstrapping, and it assumes a normal distribution. I don't see how making these assumptions makes the calculator bad, it just means if you are a stats person who wants to do something different, you'll need to implement your own script. Outside of the HN crowd, there are people who don't code, who nonetheless work with a/b tests, and still need a measure of statistical confidence.

Since a binomial distribution approaches a normal distribution for large N, that's a valid assumption to make.

The arguments in this thread over which is the precise distribution are over analyzing, in my opinion. If I had an experiment that gave one winner with a binomial distribution, and a different winner with the normal approximation, I'd feel little confidence in the results and want to run it again or collect more data. I don't see how that would happen though.

Bootstrapping would be better, sure, but it would be confusing for an a/b test calculator to give you different numbers each time you refresh the page.

You're free to write your own R scripts if you want to do it yourself.

I agree with martian's advice about figuring out a minimum number of visitors you expect to need before analyzing the data, or else you're at risk of biasing the experiment by declaring a winner prematurely.

</comment></comment></comment><comment><USER5> The confidence region appears symmetric around the mean. This indicates they are using the normal approximation.

Exact confidence regions can be found, if you do it using Binomial instead.

The question to be asked, if m out of n is the frequency, is for which values of p do you have P(m>=M) = 0.975 and for which value of p do you have P(m<=M) = 0.975, where M ~ Binimial(n,p).

It can be solved easily too.

<comment><USER6> The normal approximation is notoriously [1][2] bad when the binomial proportion you're trying to estimate is small and you don't have a big n. If one still wants a closed-form out-of-the-box formula (to avoid the exact resolution you suggested), one can use the Wilson approximation for instance.

[1]: [http://en.wikipedia.org/wiki/Binomial_proportion_confidence_...](http://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval)

[2]: [http://projecteuclid.org/download/pdf_1/euclid.ss/1009213286](http://projecteuclid.org/download/pdf_1/euclid.ss/1009213286)

</comment></comment><comment><USER7> Pretty animation, but I have some reservations about the maths:

\- Normal approximation, as already noticed, ain't no good. Use the Wilson score instead.

\- No power calculation? Type II errors are far more important IMHO in typical web applications because switching costs are small.

\- non-overlapping 95% confidence interval do not imply p < 0.05. It's actually much lower than that. 83% CI is more like p of 0.05. (Errors add in quadrature.)

There is a tension between making something simple for the lay person and providing knobs for the expert to twiddle. I can see the case for removing the knobs but the choices should at least be documented.

[It's late here so this post is a bit slim on details. If you're interested sign up to [http://bandits.mynaweb.com/](http://bandits.mynaweb.com/) as the next section covers confidence intervals.]

<comment><USER8> Arguably the "best" confidence interval for this situation is the Blyth-Still- Casella interval (preferred by StatXact), and the "best" hypothesis test is Barnard's test.

Here is code to calculate both: [https://github.com/keithw/biostat](https://github.com/keithw/biostat)

I say "arguably" literally -- there is a huge body of literature on confidence intervals for binary proportions, much of it in disagreement about what is important. The Wilson score interval and Agresti-Caffo and whatever else are fine approximate methods that came of age when ease of calculation was a big concern. But if you have a computer and you're baking one thing into a library, may as well make it the best one you can.

Of course there is also plenty of merit to just picking some prior distribution and integrating over the conditional probability distribution given the data, aka a Bayesian approach.

In practice I don't think this (stats geekery about the merits of different confidence or credible intervals) is the most important part. The numerical results from all these techniques will be pretty similar.

The important part is in the design of the experiment, the interpretation, and playing by the rules. If you want to dynamically tune a Web site to make the most money as more information rolls in, that calls for a different experiment than a standard hypothesis test. (Even if you want to peek early at the results and possibly abort the test as a result, that calls for different tools and different rules.)

<comment><USER7> Hadn't heard of the Blyth-Still-Casella interval or Barnard's test before, so thanks for that.

By "If you want to dynamically tune a Web site to make the most money as more information rolls in, that calls for a different experiment than a standard hypothesis test." you're talking about minimising regret / bandit algorithms?

</comment></comment></comment><comment><USER9> Try out [http://www.evanmiller.org/ab-testing/chi- squared.html](http://www.evanmiller.org/ab-testing/chi-squared.html). That's what we use at SimplePrints all the time. Great library of functions.

</comment><comment><USER10> This methodology is flawed, because in practice the conversion rate changes over time. There are different effects that cause this temporal dependence not including the natural effect on the product of certain techniques (for example testing a very loud and painful to escape from upsell will cause some people to agree into the upsell and never see it again, and others to feel pissed off). Other causes of temporal dependence are different mix of traffic in terms of geography and demographics at different times of day and week.

Even using proper Wilson confidence intervals with good methodology with tens of millions of impressions per group, we would see day to day variations in rate outside confidence intervals of the previous day, way more frequently than one would expect (one would expect a 95% confidence interval to be exceeded once every few weeks instead of every couple of days).

The proper methodology is to estimate by bootstrapping on a good selection of dangerous variables, including time.

</comment><comment><USER11> Sorry to be another typical HN nitpicker, but one problem I see with many of these approaches is that the significance level (95% in this case) is picked out of thin air. The reality is that even with a single data point, you have information. The information may not be reliable, but it's information nonetheless. The only reason that people don't redesign based on unreliable information is that redesigns have costs: costs for the developer and costs for the users. Given that different sites have different cost functions, they should also have different significance thresholds.

One size does not fit all.

<comment><USER12> The recommendation of 95% significance level is quite common across A/B testing resources. The main goal here is to be able to say which variant will consistently perform best (in this case, 95% of the time).

I agree that it would be useful to be able to change the confidence level based on a site's specific needs - this is a feature I am looking to implement in Confidence.js soon.

</comment></comment><comment><USER13> It's great!

Although most real-life cases that I'm familiar with also include an average basket, even repeated purchases. Explaining that the anecdotal big purchase on version A is actually anecdotic, and that you need to consider the distribution, escalation slope, rhythm of purchases… all that is very difficult, especially with simple tools around like this one that make it sound like such tests are actually simple and can work for any level of audience. Having a decent separation of expected LTV on a four-pronged A/B/C/D test, especially when your conversion rate is around 1% and your re-purchase well under 20%… that's a challenge that requires millions of users for months.

</comment><comment><USER14> [http://www.experimentcalculator.com/](http://www.experimentcalculator.com/)

</comment><comment><USER15> This is a better tool with more information provided (in an excel spreadsheet)

[http://visualwebsiteoptimizer.com/split-testing-blog/ab- test...](http://visualwebsiteoptimizer.com/split-testing-blog/ab-testing- significance-calculator-spreadsheet-in-excel/)

</comment><comment><USER16> Ok I give up even pretending to understand statistics anymore

I'm going to pick up a neglected "Think Stats" from OReilly and would appreciate anyone's feedback on Stats Moocs on coursera or similar

(I'm finding long division difficult these days)

<comment><AUTHOR> I'm in the same boat - I've given up and leave these things to the experts :)

<comment><USER16> Well I'm not prepared to leave that much to the experts - I should at least know how to design an experiment that gets me a 95% confidence result, how to not pick if my null hypothesis is right or wrong, and at least be able to remmeber the difference in calculating permutations and combinations

It's like I know there is a castle over there and I know it has a turret, but I have never gone in. Different from not knowing what is out there at all.

</comment></comment></comment><comment><USER17> I wish these things would let you change the confidence interval. 95% is really only used in an academic context. If you think about decisions that you make in a typical business context, you are not using more than 80% or so

<comment><USER12> This is a feature that I would love to add to Confidence.js sometime in the near future.

</comment></comment><comment><USER18> really? now we have to have an entire website dedicated to the t-test? surely this is something you could learn to do in a spreadsheet? no?</comment>


You Can Now Post Full Size Instagram Pics To Facebook (And Timeline) - <AUTHOR> http://techcrunch.com/2012/01/05/you-can-now-post-full-size-instagram-pics-to-facebook-and-timeline/ <comment><USER2> How do you do this (in your own code)?</comment>


Implementing Neural Turing Machines - <AUTHOR> https://arxiv.org/abs/1807.08518 <comment><USER3> The author states in his github repository ([https://github.com/MarkPKCollier/NeuralTuringMachine](https://github.com/MarkPKCollier/NeuralTuringMachine)) that his work is based on ([https://github.com/snowkylin/ntm](https://github.com/snowkylin/ntm)). If that is the case then I find it kind of strange that he has relicensed the work to MIT from LGPL3 and removed any reference to the original author in the LICENSE. LGPL3 requires any derivative work to be licensed the same and retain mentions of the authors, more over it also requires a clear explanation of the modifications that were undertaken.

Also compared to the open source implementation ([https://github.com/snowkylin/ntm](https://github.com/snowkylin/ntm)) it seems like his main novel claim is that he looked at different memory initialisation patterns.

Edit:

compare the original: [https://github.com/snowkylin/ntm/blob/master/ntm/ntm_cell.py](https://github.com/snowkylin/ntm/blob/master/ntm/ntm_cell.py)

to the derivative work: [https://github.com/MarkPKCollier/NeuralTuringMachine/blob/ma...](https://github.com/MarkPKCollier/NeuralTuringMachine/blob/master/ntm.py)

from what I can tell the main innovation is that the derivative work uses a named tuple instead of a dictionary for state keeping and there is new memory initialisation code. The original author apparently initialised the memory randomly. I also feel like the paper should cite the implementation they are basing their work on. The paper [https://arxiv.org/pdf/1807.08518.pdf](https://arxiv.org/pdf/1807.08518.pdf) merely states that other implementations exist on page one and makes no mention of the fact that their implementation is based on one of those. Combine that with the fact that they are asking people in the Readme to cite their paper feels like not a very good idea.

<comment><USER4> I am the author of this work. I was not aware of the difference in the licenses and just used the GitHub default. I have updated it accordingly, thanks for pointing this out.

A note on the difference between our work and Snowkylin's: the code implementing the operations of the NTM are very similar and both are similar to other open source NTM implementations as the operations for a NTM are defined by the equations of the original NTM paper and have a clear mapping into code.

The primary difference is that our implementation works and is stable - <USER2> code changes to achieve this are minimal but this still required substantial experimentation and work to figure out what was causing slow convergence and the gradients becoming NaN (causing training to fail) in other implementations. Thus our primary contribution is not to put a NTM into code but to get that code to reliably and quickly train.

<comment><USER3> Just to be clear, I went through the two implementations ([https://github.com/snowkylin/ntm/blob/master/ntm/ntm_cell.py](https://github.com/snowkylin/ntm/blob/master/ntm/ntm_cell.py)) and ([https://github.com/MarkPKCollier/NeuralTuringMachine/blob/ma...](https://github.com/MarkPKCollier/NeuralTuringMachine/blob/master/ntm.py)) line by line. The code is not just similar, but largely identical. You've used the exact same variable names and ordering in the code. Some comments have been removed. The notable differences I can spot are:

\- line 53-56 (in your code), which correspond to line 41-45 in Snowkylin's code

\- line 70 vs 69, where you've used a build in function instead of the explicit compositional form of softplus

\- finally the major change I can see are various variable initialisation schemes 147-178 in your code, which is handled by line 157-185 in snowlkylin's code

and some miscellaneous places where you've used a NamedTuple instead of a dictionary. And yes the choice of initialisation is a valid improvement. As far as I can tell Snowkylin's implementation is not broken, but just might learn more slowly because of a different state initialisation scheme. It does not suffer the NaN problem for example.

It should be communicated _very_ clearly also in the paper that the code you are releasing is derived from another open-source implementation, with a precise explanation of the changes you have made. Also you can't change the LICENSE and copyright notice of open-source code to yourself without permission. I believe even in the current form your Github repo is in breach of the LGPL3. For more details how to use the LGPL properly, please refer to [https://www.gnu.org/licenses/gpl- howto.en.html](https://www.gnu.org/licenses/gpl-howto.en.html). Notice that the original repository actually does not carry out all those steps properly.

Namely it is missing LICENSE and Copyright notices in every file. It also doesn't have an explicit copyright notice anywhere.

<comment><USER5> Indeed, if these are so similar your repo really ought to be a fork of the prior repo, and you should certainly acknowledge them more in the paper (make clearer what your contributions are).

</comment></comment></comment></comment><comment><USER6> Important and unsurprising sentence from the paper's abstract: " _A number of open source implementations of NTMs exist but are unstable during training and /or fail to replicate the reported performance of NTMs_"

<comment><USER7> Why do you deem it unsurprising? Do you think that the opensource neural network implementations are subpar?

<comment><USER6> Anecdotally: I've tried to replicate some recent AI/ML papers and failed. So have some of my acquaintances.

</comment></comment></comment><comment><USER8> "how the memory contents of a NTM are initialized may be a defining factor in the success of a NTM implementation"

Does it mean that one can expect better explainability in the future from these models?

<comment><USER9> The result was that constant/zero initialization was the best, which is the most natural choice anyway (for me at least), and definitely also the most simple option. I'm a bit surprised that they emphasise so much on that. Also, not really sure what to learn from this.

<comment><USER10> Does this correspond to an intuition that a tabula rasa may be the best way for a learner to start?

</comment></comment></comment><comment><USER11> It'd be interesting to see a Neural TM that can increase its Kolmogorov complexity.

</comment><comment><USER12> The associated github repo is at [https://github.com/MarkPKCollier/NeuralTuringMachine](https://github.com/MarkPKCollier/NeuralTuringMachine)</comment>


Killing Sexy Halloween: The Ethical and Practical Complications - <AUTHOR> http://www.theatlantic.com/national/archive/2012/10/killing-sexy-halloween-the-ethical-and-practical-complications/264212/ <comment><USER2> not HN material</comment>


AWS working on higher level orchestration? - <AUTHOR> https://us-amazon.icims.com/jobs/109825/job

<comment><USER2> Maybe they'll finally implement an Amazon AppEngine service, but this looks suspiciously enterprisey.</comment>


Win32/Napolar – A new bot on the block - <AUTHOR> http://www.welivesecurity.com/2013/09/25/win32napolar-a-new-bot-on-the-block/

<comment><AUTHOR> And apparently, this is the website of its author:

[http://solarbot.net/](http://solarbot.net/)</comment>


The Epic Games Store is now live - <AUTHOR> https://www.epicgames.com/store/en-US/ <comment><USER2> I always instinctively click on the `[dupe]` tag assuming that it will take me to the original, preferred post. Someday, perhaps.</comment>


We must not let the Orlando nightclub terror further strangle our liberties - <AUTHOR> http://www.theguardian.com/commentisfree/2016/jun/13/chelsea-manning-civil-liberties-orlando-terrorism <comment><USER2> It's probably best to censor all Orlando related news.

It's not that I'm unsympathetic but it's too emotive for partisans at the moment.

<comment><USER3> Yes, this is true. Emotion gives us such wonderful discourse on the internet, and in the legislature, laws like the "PATRIOT" act. Though one must wonder, exactly when is the best time to discuss solutions to the problem(s) at hand? It's hard to schedule rational time with the constant news cycle of tragedy after election run up to the next tragedy, ad nauseam. At some point, people need to decide if this is the type of society we want to live in for the rest of our lives.

<comment><USER2> Just to clarify, I meant censoring this news on HN, not the broader internet communities and certainly not those concerned with politics.

> Though one must wonder, exactly when is the best time to discuss solutions > to the problem(s) at hand?

I don't know the answer, only that it's not immediately in the aftermath.

Flamewars occur like flash floods and anything that slows down participation works.

A modest pause of 60 seconds before a comment can be submitted could work. An alternative is a preview function becoming forced (when a flamewar is detected) which requests your acknowledgement that you're not fanning the flames. I'd use a speed sign picture as a visual aid.

"Why," asked Washington, "did you just now pour that coffee into your saucer, before drinking?"

"To cool it," answered Jefferson, "my throat is not made of brass."

"Even so," rejoined Washington, "we pour our legislation into the senatorial saucer to cool it."</comment></comment></comment>


Media is ruining the NSA debate - <AUTHOR> http://tech.fortune.cnn.com/2013/06/27/media-is-ruining-the-nsa-debate/?section=money_technology&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+rss%2Fmoney_technology+%28Technology%29

<comment><USER2> __*I am only commenting on the title of the post and the source (I agree with mpyne 's opinion on the artical itself)

Does anyone else think it's funny that the title is about 'Media' ruining the NSA debate posted on CNN. I think it's funny.

<comment><USER3> I was laughing at the same thing

</comment></comment><comment><USER4> I'm at a loss to explain how such a well-worded article ended up with such an unrelated title. I don't think the author blamed the _media_ once, and I honestly don't think that's what he really means.

The people are part of the "national conversation" too, so to the extent that they refuse to have a serious conversation on Twitter I don't see how you blame that on the media.

<comment><USER5> I'm at a loss to see how an article with this title ended up on CNN.

CNN probably takes the cake for the most unprofessional, irresponsible journalism in their coverage of PRISM.

(Sorkin is a close second, only because of the irony of someone from the _New York Times_ saying that a journalist should be prosecuted for publishing leaked information[0])

[0] [http://en.wikipedia.org/wiki/Pentagon_Papers](http://en.wikipedia.org/wiki/Pentagon_Papers)

</comment></comment><comment><USER6> The same thing happened with Julian Assange. Thanks to the media, the only thing the average person knows about him is not what he helped uncover but instead that he is either a "villian" or "hero." Snowden is the new Assange.

</comment><comment><USER7> The media ruins everything.</comment>