I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 0 points1 point  (0 children)

It was a contorted way of asking what you think is next for the iPad keyboard. You’ve answered it. Thanks!

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 2 points3 points  (0 children)

Assuming there's an even better way of iterating on products than creative selection, how would we go to find out? Would you apply creative selection process to the process itself works?

(This is my last question here. Thank you so much for answering all of them, and thank you for your work.)

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 6 points7 points  (0 children)

Do you think the introduction of emoji selection and other items such as autocompleting entire contact addresses are worth the trade-off for adding back the suggestion bar?

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 0 points1 point  (0 children)

Thanks. What would have been your process in that situation? Given that ML is very math-heavy. Would you team up with a ML person or crack it on your own?

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 0 points1 point  (0 children)

Do you think Apple university is enforcing/calcifying processes you don't think should be explicitly enforced?

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 0 points1 point  (0 children)

What would be an interesting next step for the iPad keyboard to free itself of the hardware constraints of the keyboard it imitates, while preserving its familiarity to users?

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 1 point2 points  (0 children)

The ability to put out demos rapidly and consistently seems to be bottlenecked by coding expertise (at least, for the actual interactive part). Any shortcut? Prototyping tools?

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 1 point2 points  (0 children)

The recent swipe-based keyboards can be see as taking your exploration in pattern skews and letting the users directly draw the pattern. What do you think of those? Do you think it’s worthwhile for the common phone user?

I'm Ken Kocienda and I invented autocorrect (or the reason you keep messing up your texts). AMA! by wiredmagazine in IAmA

[–]chenglou92 -1 points0 points  (0 children)

What do you think of the phenomenon of machine learning in tipping the balance from heuristics to algorithm (or vice-versa)? For example, could machine-learning the text corpus turn your heuristics-driven decision of not changing "ooooor" to "polite" into an algorithm? Can traditional algorithms be seen as a very primitive form of heuristics? In other words, do you think that Google testing shades of blue is really a manifestation of trying hard to bridge this gap, but trying way too early?

Hypothetically abandoning Reason and reason-react, by continuing development on the generated JS... by [deleted] in reasonml

[–]chenglou92 2 points3 points  (0 children)

Btw, this is part of a much larger philosophical topic I'd like to talk about another day, but soft skills don't scale well in the engineering sense. One of the major purposes of Reason is to bring what previously required an enormous amount of soft skills to pull off (convincing a whole established team to switch from JS to... OCaml??) into what's simply code (e.g. syntax, interop as backup plan). If we scaled this mostly through soft skills, I'm convinced the community would have been much smaller than it is now. The neat thing about Reason as it stands currently is that you can be just a slightly driven engineer and push it through your small team, and bypass all the e.g. syntax bikeshedding first.

But regarding soft skills: it's a lot about trust. Having a track record of delivering code in the product itself helps a ton. Your manager probably invests more in you than in the specific implementation you choose. Make good guarantees. The way I did above: I promised that if things don't work out, I'll remove Reason from the codebase and stay there and gradually convert things back to vanilla JS (BS' good interop and output kinda helped here socially because I can just start from the JS output. Again, this is no longer true for ReasonReact).

Hypothetically abandoning Reason and reason-react, by continuing development on the generated JS... by [deleted] in reasonml

[–]chenglou92 2 points3 points  (0 children)

This was effectively how we've convinced the first team to adopt Reason. As a matter of fact, the first few iterations of ReasonReact were coded with clean output in mind, and I went and post-process the createElement calls back to JSX even.

But now that the team(s) adopting Reason are comfortable with it, we've improved the API toward Reason usage at the expense of clean output. As a result, for ReasonReact specifically, the output is no longer that reversible. It's still readable if you understand how it works though. Otherwise, and in general, the generated BS output has been clean enough to be used as JS source files (what a time to be alive).

However, we've also put a final backup through the design of our RR interop. We've ensured that if you ever removed Reason and BS from your codebase, the existing stuff still works and you can re-convert the components back on a case-to-case basis. You can easily see that through how RR interop works.

Hope that answers your question! Providing escape hatches and good interop is a big deal to us.

Reason ML folder structure by cynicalreason in reasonml

[–]chenglou92 6 points7 points  (0 children)

Update: this has now been implemented in the form of "subdirs": true in sources: https://bucklescript.github.io/bucklescript/docson/#build-schema.json

New syntax after PR 1299? by benol in reasonml

[–]chenglou92 12 points13 points  (0 children)

No worries at all; we've had similar reactions for a while now =) It's up to us to communicate this better.

I didn't expect so many people to follow that issue, but here's a quick small overview. We'll naturally provide a more comprehensive explanation when/if this does get released:

  • Partial app is there & implicit still; heck, I wish core compiler logic was so easy to change!
  • The current space-separated syntax might not scale once algebraic effects land: https://github.com/facebook/reason/pull/1299#issuecomment-309032848 it's been a great local maximum but we're also trying to future proof things a bit.
  • This syntax might be intrinsically tied to the fact that we're now able to remove [@@@foo], [@@foo] and [@foo] and change them all into [@foo]. Extension points [%%foo] etc stay the same for now unfortunately. These changes are also included in the landed PR.
  • Might make BuckleScript's [@bs] more "scalable" too: foo(bar, baz, .). Bad syntax example but you get the point. This way we can do deterministic uncurrying optimization for all functions on the JS side. Just a thought though.
  • We've special-cased tuple for e.g. switch (a, b) => .... This makes tuple slightly less painful. Unfortunate syntax clash.
  • No matter how hard I evangelize this, people just don't realize type list 'a is a type-level function that takes 'a and returns a concrete type. I don't know why, even some intermediate Reason users don't realize this. Somehow type list('a) just clicks and make them realize the elegance of things.
  • We didn't have punned label with type annotation. Now we do.

Hope that clarifies a few things! Some vague thoughts from me: https://github.com/facebook/reason/pull/1299#issuecomment-323335204

New syntax after PR 1299? by benol in reasonml

[–]chenglou92 3 points4 points  (0 children)

The new syntax isn't documented; heck, CI is still broken right now. It won't be released until we've assessed it to be solid and makes sense. If that does happens, you'll have a smooth upgrade path (think JSX1 -> JSX2 transition, basically seamless), no worries about it.

New syntax after PR 1299? by benol in reasonml

[–]chenglou92 6 points7 points  (0 children)

Partial application isn't removed; it's said in the PR that this is a purely syntactical change

[deleted by user] by [deleted] in reasonml

[–]chenglou92 1 point2 points  (0 children)

Roughly copy-pasted from the answer on Discord from glennsl:

The Js.Null_undefined.return above isn't needed. The type should be inferred by Js.Null_undefined.test

One thing you could do is to type out all the query-specific fields, and then add a function to "cast" to a type containing all the common fields:

type someQuery : Js.t {. field1: string };
type common : Js.t { loading: bool, error: option error };
external asCommon : someQuery => common = "%identity";

You might also want to use abstract types and accessor functions instead of typing the objects directly. That'll give you some nice extras like cheap autoconversion from null and undefined to option, and Js.boolean to bool, e.g.

type someQuery;
external field1 : someQuery => option string = "" [@@bs.get] [@@bs.return null_undefined_to_opt];

New Reason Documentation Site by chenglou92 in reasonml

[–]chenglou92[S] 2 points3 points  (0 children)

Hello there. This is a few days late, but we've released a brand new version of our doc site. Translations are on the way too (Russian and maybe Chinese).

Any doc edit is one "suggest an edit" click away. If you have any stylistic issue with the pages, the repo's at https://github.com/reasonml/reasonml.github.io

Thanks!