Red Hat releases new OpenShift CLI developer tool - <AUTHOR> https://odo.dev/ <comment><USER2> If you're confused about what OpenShift is, we have coloring books and O'Reilly Books [0][1][2][3][4][5].

:D

[0] [https://raw.githubusercontent.com/fedoradesign/coloringbook-...](https://raw.githubusercontent.com/fedoradesign/coloringbook- containers/master/Print-Ready/Web.pdf)

[1] [https://docs.fedoraproject.org/en-US/fedora- silverblue/_atta...](https://docs.fedoraproject.org/en-US/fedora- silverblue/_attachments/container-commandos.pdf)

[2] [https://www.openshift.com/resources/ebooks/openshift-for- dev...](https://www.openshift.com/resources/ebooks/openshift-for-developers)

[3] [https://www.openshift.com/learn/resources/ebooks](https://www.openshift.com/learn/resources/ebooks)

[4] [https://www.openshift.com/resources/ebooks/deploying-to- open...](https://www.openshift.com/resources/ebooks/deploying-to-openshift)

[5] [https://www.openshift.com/resources/ebooks/devops-with- opens...](https://www.openshift.com/resources/ebooks/devops-with-openshift/)

<comment><USER3> When is the Openshift Administrators book going to be released?

<comment><USER4> After they are done releasing new coloring books :)

</comment></comment></comment><comment><USER5> Also potentially of interest to HN folks, Red Hat announced that their OpenShift Serverless product is generally available[0]. It's a Knative-based offering.

Disclosure: I work for VMware, a direct competitor in this space. Double disclosure: I am working on a Knative book. Triple disclosure: I am overly prone to pre-emptive disclosures.

[0] [https://developers.redhat.com/blog/2020/04/30/serverless- app...](https://developers.redhat.com/blog/2020/04/30/serverless-applications- made-faster-and-simpler-with-openshift-serverless-ga/)

<comment><USER6> _Disclosure: I work for Red Hat, a competitor to VMWare._

Your comment made my day, thank you :-)

Knative is super cool. I'm really glad to see it maturing so well into vendor offerings. Best of luck on your book!

</comment></comment><comment><USER7> How popular is OpenShift? Seems cool but have never heard of anyone actually using it.

<comment><USER8> I had to deal with it past 2 years - it is extremely bloated, not very well thought out and anything that needs decently performing storage is screwed over by GlusterFS and now I guess Ceph. All in all you really want to carefully analyze which apps you want to put on it and how much benefit you are really getting out of it - because it isn't free in any sense of the word - licensing, maintenance, operations - you are adding a crap ton of complexity and giving developers more ways to shoot themselves in the foot.

[Wow, looks like we have OpenShift fans here. Still, I prefer leaving the f out of OpenShift like everyone who has actually worked on it trying to get complex apps running smoothly :)]

<comment><USER9> I want to get into OpenShift/OKD, but the distributed storage systems are quite frightening. There are plenty nightmare stories related to GlusterFS performance.

However, strange as it sounds, I'm looking to deploy a cluster on a single node, primarily for the Kubernetes API & ecosystem (so many tooling options).

What is your opinion on running K8s this way, and having only local RAID storage?

<comment><USER2> As mentioned, CodeReady Containers (CRC) is the easy button for a single node setup [0]. But it is heavy for a single node. Alternatives for labs and demos are learn.openshift.com [1] and the All-in-One VM blog [2]. Storage isn't too important in a single node setup unless you're looking for Metrics, Logging, and Monitoring to be turned on. You could use NFS if you have to. Just don't do that in Production, IMO.

[0] [https://developers.redhat.com/blog/2019/09/05/red-hat- opensh...](https://developers.redhat.com/blog/2019/09/05/red-hat- openshift-4-on-your-laptop-introducing-red-hat-codeready-containers/)

[1] [https://learn.openshift.com/](https://learn.openshift.com/)

[2] [https://www.openshift.com/blog/revamped-openshift-all-in- one...](https://www.openshift.com/blog/revamped-openshift-all-in-one-aio-for- labs-and-fun)

</comment></comment></comment></comment><comment><USER10> _Existing tools such as oc are more operations-focused and require a deep understanding of Kubernetes and OpenShift concepts_

oc and kubectl commands are interchangable for the most part. This will lock you down to openshift.

<comment><USER2> Check the SHAs. They're actually the same binary. :D

On a properly installed system with the `openshift-clients` or `atomic- openshift-utils` rpms installed, `oc` and `kubectl` will have the same SHAs.

<comment><USER11> I think the "this" in his sentence is odo. AFAIK, that does require openshift.

</comment></comment></comment><comment><USER12> Prediction: It's only a matter of time they come up with a monitoring suite named ODOMETER !

<comment><USER2> Hahaha. I don't think so. We have a built-in monitoring stack of sorts based on Prometheus and Grafana. There's lots of other partners that do monitoring well too.

</comment></comment><comment><USER13> I have not tried to install/work with Openshift recently. If Redhat can take the fast moving target that is Kubernetes, add its weight on it, provide excellent user focused documentation, And "stable"ize it for non big scale companies to use, that'll be great.

Although, it is only useful if they are same/

</comment><comment><USER14> I work in retail banking. Openshift is very common for new projects these days on private and hybrid cloud deployments. So common that a client of mine recently described Openshift as 'legacy'. Very silly comment but it does say a lot about how widely used it is in large enterprises.

</comment><comment><USER15> Is it possible to run the open source okd variant reliably yet? Openshift was a weird case where the enterprise version is out there, but the upstream wasn't! At least not useable

</comment><comment><USER16> Is Openshift an extremely wellfunded solution seeking a problem?

<comment><USER5> It's a well-funded solution to a well-funded problem.

Producing platforms for enterprise customers is truly, genuinely difficult. There is enormous variation and complexity between _and within_ customers, which cannot be dismissed easily.

Disclosure: I work for VMware, a direct competitor in this space.

<comment><USER16> Im not knowledgable enough in this area, but I don't understand the value in using Openshift's custom setup over established cloud providers setups like AWS or GCP or Azure or even VMWare(who has been in the vm biz wayyy longer than all of these players.)

<comment><USER2> Disclaimer: I work for Red Hat Consulting where my day job is 100% OpenShift.

The "custom" parts of OpenShift are things you're going to want anyways. They're also optional (to a point) but obviously Supportability will change depending on customer customization. A Container Registry, something to manage your Ingress (we have HAProxy and Ingress Controller), Metrics & Monitoring of containers, pods, and nodes using Prometheus, Grafana, and AlertManager, a logging stack that sucks in your logs from stdout built on Elasticsearch, Fluentd, and Kibana, supported Middleware, Apache Camel, AMQ, Kafk), Java, OpenJDK, JBoss, Tomcat, Spring Boot, node.js, Quarkus, Python, Ruby, PHP stacks, built-in tooling for CI/CD with Jenkins, Tekton. OpenShift can be run almost anywhere that RHEL8 can. We've started down the path of multi-arch supported Kubernetes too, first with IBM Z and others to come. We run OpenShift on Public Clouds, Private Clouds, VMs and Baremetal.

<comment><USER16> Everything you named is common to every cloud provider.....container registry, load balancers, log monitoring, etc

It's actually also doable with K8's and Helm.

I only have a birds eye view but I can tell so far, it seems like yall are providing the much-needed synergy, organic innovation and turnkey platform insights to those vertically and horizontally aligned paradigm holistically reimagined out of the box future forward dynamic enterprises to both meet market demand and to transform industry mindshare with world class artisinal I.P.

I.P.A if you will.

Every technology V.P. will get a visible hard-on when they hear about the Open shift product.

</comment></comment></comment></comment></comment><comment><USER17> Disclosure: I work for Red Hat, working with the Red Hat Developer Group.

For those without a convenient OpenShift cluster, there are at least a few free options.

\- [https://learn.openshift.com/](https://learn.openshift.com/) has 'playgrounds' to allow temporary access

\- CodeReady Containers is a virtualized desktop OpenShift cluster you can run on a laptop

For learners-- OpenShift is Kubernetes. Great stuff!

</comment><comment><USER8> > Completely client based. No server is required within the OpenShift cluster > for deployment.

So I do need a OpenShift cluster then? Confusing.

<comment><USER9> I think it means that any existing OpenShift cluster is equipped with the necessary infrastructure and APIs exposed so that there is no Odo-specific server component required.

I agree the wording is unfortunate. Kinda like "serverless".

<comment><USER8> Yeah, OpenShift cluster is the server for this tool - saying it is fully client based because it doesn't need _additional_ server is - I don't know what :) (Besides the tool it is replacing - oc - doesn't need another server either.)

<comment><USER2> `oc` does need a server for a lot of things, unfortunately. Just do a `oc [...] --loglevel=9` to see what it's doing.

<comment><USER8> And what server would that be - the OpenShift master/API server right? That's the one. But it's the same with odo. None need an additional server is what I was saying.

</comment></comment></comment></comment></comment><comment><USER18> What is the difference between this tool (odo) and something like Bosh ?</comment>


Ask HN: The importance your domain (.com vs .io) - <AUTHOR> When picking a new domain name what value do you put on having a .com domain? Assuming most of the 'good' .com's have been taken I  go straight for something like an .io rather than having some strange .com (or of course paying for a cool .com).<p>Was this a big decision for you? Do you worry having something other than a .com looks a bit amateurish? <comment><USER2> I don't find other domains amateurish, but certain domains I'm unlikely to give information to: such as .ru and .ly and maybe in the future .ng but haven't seen evidence for that yet.

I think the main advantage of .com .net .org is the google boost but that might change in the future and if your product is right it shouldn't matter.

Personally I really don't like when the domain name is part of the name it makes it harder for me as typing a period in between a word seems unnatural: bing.com is easier for me than bi.ng.

<comment><AUTHOR> Totally agree with you on having it as part of the name is an awful idea.

I have a geek crush for .io because of I/O

</comment></comment><comment><USER3> I think at first it doesn't matter. Facebook was originally thefacebook.com, delicious.com was del.ico.us, dropbox was getdropbox.com.

I know those examples are all .com, but the point is that you can change your domain once your product gains traction and you have a proven product. Then you can spend the big bucks on the domain you really want.

<comment><AUTHOR> I hope everyone agrees del.ico.us was the worst URL in history

<comment><USER4> del.icio.us

<comment><USER5> I think you've proven beck5's point.

</comment></comment></comment></comment><comment><USER6> I'm working on a startup with a friend and past colleague and the domain we want is (not surprisingly) already registered. It is not a parked domain, but it is simply a graphic for some technology group with an "All rights reserved" from 2000 and a mailto link.

We emailed the owner of the domain and asked if the person would entertain offers to buy the domain and received the simple response:

"The domain is not for sale"

I'm curious, has anyone ever encountered a stonewall on a domain like this and was anyone successful prying it away from the squatters with a generous offer?

If you are squatting on a domain for over 10 years without putting it to use, isn't there always some amount of money you would sell it for?

<comment><USER7> Only because a domain has no content doesn't mean it's only parked. It may actually be in use for email and maybe other internal things.

</comment></comment><comment><USER8> Always get a dotcom. Anything else is just asking for confusion, especially if you ever plan to market to non-tech customers.

That said, if it's just a webapp or something, I wouldn't worry about it too much.

</comment><comment><USER9> I typically live by the rule of not using a non-com TLD unless you actually own the com-TLD

It can lead to a bad situation, what if a existing site on the com domain closes and someone puts a porn site or worse on the com with your prefix ?

</comment><comment><USER10> I went through something similar recently, and have settled (for the moment at least) on the non-.com. I guess the other question is do you approach the .com owner about a potential sale before or after you have launched? If you are successful, you will pay more for it post launch but at the same time if you are successful without the .com you probably didn't need it in the first place. On the other hand, it's difficult to justify splashing out for a .com when you haven't even shipped. I agree about going with a .something over a strange .com though.

<comment><AUTHOR> The change in price is a good point, what initially made me think about this problem is pinboard.in, one of the first .in addresses I came across and it doesn't seem to have done them/him too much damage. I'm sure pinboard.com would cost a lot more now.

</comment></comment><comment><USER11> Here's what I do, especially for web apps: choose a great name, then get the myGREATNAME.com or getGREATNAME.com

It worked for dropbox, Mint and 37 sigs.

</comment><comment><USER12> Our corporate IT department blocks most foreign domains, such as .ly, .io, .tv, and .ng. A special exception has been made for bit.ly, but this won't help me with your new startup.

<comment><USER11> _LOVE_ corporate IT. They should sell t-shirts that say that. And wear them ironically.</comment></comment>


Siteup.io – platform for static web sites backed by Git [pre registration] - <AUTHOR> http://siteup.io

<comment><USER2> Forgive me if I misunderstand but how is this simpler than using a static site generator like Jeckyll or Cactus?</comment>


Can protein startups and their investors take on Big Cow? - <AUTHOR> https://techcrunch.com/2017/08/12/can-protein-startups-and-their-investors-take-on-big-cow <comment><USER2> Hampton Creek is the makers of "Just Mayo" which is talked about in this article. What isn't said is that they've been on the shelves at Target up until 2 months ago when Target pulled all their products for an unknown reason. Speculation has it that Hellmans was very upset that Just Mayo was disrupting the mayo business and delivered falsified claims to Target trying to get them to pull the products. It's a real slugfest right now.

On another note, Beyond Meat's founder was featured on "How I Built This", a favorite podcast for many HN'ers.

<comment><USER3> Hampton Creek had their own controversies. They early on would send out people to buy their own mayo and create fake demand.

<comment><USER4> How is that any different than handing out free product coupons like most companies do to fake demand?

<comment><USER3> They didn't give free product coupons to customers. They paid contractors to secretly buy. With coupons, atleast customers can try it out and retailers are aware that free products were given out.

edit: a link to a news article from a year ago. [http://www.foxnews.com/food- drink/2016/09/23/report-alleges-...](http://www.foxnews.com/food- drink/2016/09/23/report-alleges-hampton-creek-faked-hundreds-thousands-in- sales-and-environmental-impact-claims.html)

</comment></comment></comment></comment><comment><USER5> I recommend eating tofu as tofu, not as a fake meat. It's delicious if you know how to prepare it.

<comment><USER6> Very true, Pad Thai without any protein aside from tofu is still delicious.

<comment><USER7> Yep. Sugar, oil and salt with a bit of crunchy veg, chilli, soft rice noodles, often egg, a touch of fish sauce and lime. Classic. Will definitely be on offer at [http://8-food.com/](http://8-food.com/) launch :)

</comment></comment></comment><comment><USER8> Several startups are trying to grow real meat in vitro. Memphis Meats (which is in San Francisco, not Tennessee) has succeeded in growing chicken in vitro from stem cells. Mark Post at the University of Maastricht has been able to grow beef in vitro. This stuff tastes like meat from animals. It's the production cost that's the problem.

That's going to be the good stuff. Further downscale are the processed soy products. These are Soy Extender 2.0; textured vegetable protein processed to make it taste more like meat. You can buy soy hamburger patties now, under the Beyond Meat brand. Whole Foods carries them. Anyone tried one?

<comment><USER9> Beyond Meat isn't using soy:

[http://beyondmeat.com/products/view/beyond- burger](http://beyondmeat.com/products/view/beyond-burger)

Apparently the protein is mostly peas.

</comment></comment><comment><USER10> I had a startup that made software for meat processing companies. It is pretty horrifying being in meat plants but most people are not yet at the point where they can accept not eating it. In my experience I feel better eating occasional offal and grass-fed meat than I do regularly eating meat of any other variety or eliminating it entirely. It is one thing to claim moral high ground and simply avoid eating meat, and we can absolutely do away with it on a taste basis based on what is coming out of vegan restaurants these days, but the cultural shift will take a long time and "good enough" is clearly a higher bar than tofu. I suspect it is somewhat like electric cars. A more political issue than we like to admit and something where assuming the products were comparable in price/taste/texture/experience people might opt for the socially concious choice, that threshold simple isn't there for the majority of people yet. A worthy pursuit but one that is not necessarily limited to startups. Big Food and one off restaurants are pursuing these ideas more fundamentally than anyone else is right now and I suspect that they will be the eventual winners of the race to good enough. The meat industry is fundamentally antiquated the way it is setup now and will simply shrink down to as demand wanes, or more likely just switch to exporting.

</comment><comment><USER11> I really do think there is a pretty sise-able market at least in California for people looking to reduce their intake of meat but not wanting to go full vegan. People who like the taste of a good burger but want to be healthier (more fiber, less fat and less antibiotics) and reduce the environmental impacts. I am one of them.

I think one of the simplest solutions would be to have a different line of products under a different brand name which had a mixture of plant based meat alternative (i.e. Boca or Impossible Burger) to actual meat in the burger. That way you get the taste of meat but the substrate is fiber based.

The level of actual meat could be adjusted like they do fat content for ground beef (i.e. I'm feeling sorta vegan today so I'm gonna go 75% plant based today).

The one thing I never understood is American vegetarian restaurants who serve tofu steaks as the entire dish. This looks awful:

[http://www.pbs.org/food/fresh-tastes/asian-baked- tofu/](http://www.pbs.org/food/fresh-tastes/asian-baked-tofu/)

Asian people always eat tofu blended in with a bunch of meat and vegetables for the actual flavor. Here are some examples:

[http://thewoksoflife.com/category/recipes/tofu/](http://thewoksoflife.com/category/recipes/tofu/)

[http://thewoksoflife.com/2014/03/ma-po-tofu-real- deal/](http://thewoksoflife.com/2014/03/ma-po-tofu-real-deal/)

<comment><USER12> > People who like the taste of a good burger but want to be healthier (more > fiber, less fat and less antibiotics)

If the goal is to be healthier, why not just go with the highest quality beef you can find, but eat it less often? A quality steak once a week sure must be healthier than a heavily processed veggie burger every day (tho i have no data to prove it).

</comment></comment><comment><USER13> I don't really understand why this stuff is in the news so much these days. Boca burgers have been around forever and they taste fine - I tried Impossible Foods and it's at best a marginal improvement. And as for mayo, Vegennaise has been around for a while too and it's totally fine, other than getting a bit soupy when the jar is almost empty.

</comment><comment><USER14> I hope so. If we can make meat or something really similar without killing animals, I would consider this a huge win for lessening the misery of the universe.

<comment><USER15> Is the universe at large legitimately impacted by our meat consumption? Off- hand, I can't think of a single thing mankind has done that has more than neglibly impacted anything beyond our own atmosphere.

<comment><USER16> Most of the misery we know about isn't beyond our own atmosphere either.

<comment><USER15> The misery observable and relevant to us, yes, which I'm not discounting with my comment.

</comment></comment></comment></comment><comment><USER17> Okay, am I the only one finding these 'Big Industry' names kind of ridiculous now? Big Pharma, yeah that works. Big Tech? Sure I guess.

But calling these companies Big Cow just sounds utterly ridiculous. It just doesn't work at all.

<comment><USER18> Plus we already have "Big Ag".

<comment><USER19> Big Farma'

<comment><USER20> Add Big Oil there too.</comment></comment></comment></comment>


Connect Email Marketing and Ecommerce to Gmail (Google Apps) with Wishery - <AUTHOR> https://plus.google.com/111091089527727420853/posts/4Mj8aaTAcMS

<comment><AUTHOR> After getting tons of inspiration from the Hacker News community, I'm delighted to finally share what eldavido and I have been working on for the past few months. Let us know what you think!

<comment><USER2> Nice to see Robert Scoble referencing the app but the home page explains Wishery better than Scoble. Though I wonder how it looks with the new GMail UI? <http://wishery.com/>

<comment><AUTHOR> It looks great with the new Gmail UI! Have a look at <https://skitch.com/cmarcus/gj5r1/wishery-in-new-gmail-ui></comment></comment></comment>


Show HN: A resume generator progressive web app which can work offline - <AUTHOR> https://resume-nation.github.io <comment><USER2> Some feedback:

When I was going through the wizard, I didn't know that I needed to click "add" or "save" throughout the process. I just filled out my info and clicked "Next". It wasn't until I got to the download tab that I realized that none of the information I entered was persisted.

<comment><AUTHOR> Sure. I'll look into it. Thanks for the feedback!

</comment></comment><comment><USER3> You should show an example of how the generated resume will turn out. Aside from that I think the color scheme of the site is a little too vibrant--maybe tone down the purple a bit so the green call to actions stand out more.

<comment><AUTHOR> Thanks for the feedback. I'll surely look into it.

And regarding the example, you should see how it will look on the Download page once you fill some of the information.

</comment></comment><comment><AUTHOR> Hey guys! I've been working on this app for quite some time. This comes out of frustration of me not having a good looking and intuitive Resume generator cause why not? Resume building should not be boring stuff. Also, the app works offline perfectly fine. Thanks to the ServiceWorker.

This is still in its early beta stage. I'm planning to add more features into the same in future.

</comment><comment><USER4> What technologies have you used to create the web app?

<comment><AUTHOR> I've used Angular Material for front end stuff, localStorage for storing data locally and Service Worker to make the app usable offline.

<comment><USER4> Did you create the resume templates yourself?

How do you download the resume as html once you have entered the data into the app?

<comment><AUTHOR> Yeah. I've created the resume templates myself and it won't download the resume as HTML, rather it uses browsers in-built capability to print HTML as PDF which we can download.</comment></comment></comment></comment>


How to Write a Lisp Interpreter in Python (2010) - <AUTHOR> http://norvig.com/lispy.html <comment><USER2> There are lengthy discussions every time this is submitted[0] to HN - it's one of the items that makes me think we need some sort of "Hall of Fame" or similar.

There's also the follow-up[1]:

        (How to Write a ((Better) Lisp) Interpreter (in Python))
        (norvig.com)

Unsurprisingly, that also gets a good discussion when submitted[2], but since that discussion is closed, and this discussion has started again, I thought I'd re-submit that one[3] (partly as an experiment).

\</comment><comment>--

[0] [https://hn.algolia.com/?q=lisp+python#!/story/sort_by_date/p...](https://hn.algolia.com/?q=lisp+python#!/story/sort_by_date/prefix/0/write%20lisp%20interpreter%20python)

[1] [http://norvig.com/lispy2.html](http://norvig.com/lispy2.html)

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

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

</comment><comment><USER3> I had once started writing a Lisp interpreter in Python, only to realize that I was leveraging a lot of pythonic power (most notably at least for me at the time - garbage collection) - i.e. more than I had planned to use.

So then I switched to writing the same interpreter in C, and building my own memory manager. (As is usually the case --) turns out it's more complicated (for someone with little experience in writing these sorts of things) than one might expect. :) But it's very rewarding indeed.

Of course I still think that there's much value in writing such an interpreter in Python. I would simply recommend for someone doing that to later on re- write it in some lower level language!

Re: this, Norvig commented/said,

> _[...] we are relying on many features of Python: call stack, data types, > garbage collection, etc. The next step would be to show a compiler to some > sort of assembly language. I think either the Java JVM or the Python byte > code would be good targets. We 'd also need a runtime system with GC. I show > the compiler in my PAIP book._

<comment><USER4> Is your lisp interpreter's C source code available anywhere? I'd love to dig through it.

<comment><USER3> Honestly, the code is a mess. (Really.) I'm trying to determine/recall how far I was able to get by looking at it (at least the initial goal was to have functionality akin to jmc's original paper, with syntax from pg's reinterpretation of it[1].) I'm putting "clean up [, possibly finish] and push to a repo" on my "generic todo list." :) will try to remember to ping you if/when that happens. Until then, honestly not much use of it.

[1]: [http://lib.store.yahoo.net/lib/paulgraham/jmc.ps](http://lib.store.yahoo.net/lib/paulgraham/jmc.ps)

</comment></comment></comment><comment><USER5> A good complement to Norvig's writings (actually inspired by it) is "Lisp as the Maxwell's equations of software" by Michael Nielsen: [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells- equat...](http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of- software/) Worth reading!

</comment><comment><USER6> There is a nice book by Terence Parr on "The Pragmatic Bookshelf" called "Language Implementation Patterns". I found this to be a perfect introduction to compilers with a very practical point of view. Rather than talking about grammars for ages he dives right into some (java) code and shows you what problems come up when parsing code and how compilers solve them in different cases. I followed along in python and managed to write my own c-like compiler with it. I believe it is a perfect introduction for students that shows them that writing compilers is not dry, theoretical and boring, but interesting and fundamentally effectful. Terrence is by the way the author of Antlr (reference just for his street cred)

<comment><USER7> For those who like the idea: [http://www.amazon.co.uk/gp/aw/d/193435645X?pc_redir=14008622...](http://www.amazon.co.uk/gp/aw/d/193435645X?pc_redir=1400862274)

</comment></comment><comment><USER8> Read this before, but always good to be reminded of a classic. I'd consider most of the essays on his front page essential reading, but I particularly enjoy the wit in his essay on writing a spelling corrector in Python [0], and the flattery of our collective egos in 'Teach Yourself Programming in Ten Years' [1].

\</comment><comment>--

[0] [http://norvig.com/spell-correct.html](http://norvig.com/spell- correct.html)

[1] [http://norvig.com/21-days.html](http://norvig.com/21-days.html)

</comment><comment><USER9> I will try this out!

Also there is diy-lisp[0]. I myself did it and it was very rewarding and fun![1]

[0]: [http://kjetilvalle.com/posts/implement-a-programming- languag...](http://kjetilvalle.com/posts/implement-a-programming- language.html)

[1]: [https://github.com/daGrevis/diy-lisp](https://github.com/daGrevis/diy- lisp)

<comment><USER9> The cool thing about diy-lisp is that at the end you implement standard library of your language in, well, your language![0]

[0]: [https://github.com/daGrevis/diy- lisp/blob/master/stdlib.diy](https://github.com/daGrevis/diy- lisp/blob/master/stdlib.diy)

</comment></comment><comment><USER10> If you want to go the other way, there's also a Python implementation in Lisp; unfortunately, without a nice article on how it was written: [http://common- lisp.net/project/clpython/](http://common-lisp.net/project/clpython/)

<comment><USER11> Other projects worth looking at are:

[http://docs.hylang.org/en/latest/](http://docs.hylang.org/en/latest/) a sexpr representation of Python

[https://github.com/halgari/clojure-py](https://github.com/halgari/clojure-py) a clojure implementation in pure Python

</comment></comment><comment><USER12> mr. Norvig is a great man, no doubts. Have you read AIMA, by the way? I did.)

This, of course, is not a "complete" Lisp. Let's say that [one of] the most fundamental feature of a Lisp is ability to define a new "special form" (without modifying the code of the interpreter) as a [reader] macro. This is _the_ way of defining a DSL. the loop constructs, structures, even whole CLOS is nothing but a DSL.

All we need is quote, quasi-quote, unquote, unquote-splicing, the "conses- aware" read function which "expands" these and the if special form that "short-circuits".

 _This_ (everything is made out of conses + general evaluation rule + reader macros) could be called a Lisp.

Want to see a Lisp? Look at arc.arc

<comment><USER13> > _Let 's say that [one of] the most fundamental feature of a Lisp is ability > to define a new "special form" (without modifying the code of the > interpreter) as a [reader] macro_

That's not fundamendal at all. If anything, either seldom used or frowned upon.

<comment><USER12> Sorry? The ability to add looping constructs and other control structures, like with* or defstruct/defmethod etc. to CL isn't fundamental for CL as a language? What is fundamental, then?

And, please, don't tell me about the Lisp 1.5 - it was "fundamental" but has been evolved since then.

btw, if you really do look inside arc.arc you will see "a bunch of nested macros".) This approach, championed by pg (or rather rtm) and described in the classic On Lisp book is, in some sense, the culmination of the few selected ideas behind a Lisp - you evolve the language as your understanding of the project deepens (evolves) by hacking appropriate DSL as you go. It is not just a "book stuff" \- Arc is very real thing and this very site has been built very quickly (and cheap) using this very approach with very few lines of clean, readable code.

Ironically, we are using these pages to discuss "religious nonsense" such OO- is-the-only-way, Java-is-the-proper-everything, Scrum-is-the-way-to-manage- big-projects, or "sectarian stuff" like Javascript.)

<comment><USER13> > _Sorry? The ability to add looping constructs and other control structures, > like with_ or defstruct/defmethod etc. to CL isn't fundamental for CL as a > language? What is fundamental, then?*

Who said anything about CL in specific? The article is about "how to write a Lisp in Python".

Second, no "reader macros" are not "fundamental", even for CL. Well, except if you mean the built-in ones, like #. But surely, adding custom reader macros is neither necessary nor fundamental for CL (nor are non-lispy DSLs). And they sure aren't for a simple Lisp (as in TFA).

From TFA:

" _the beauty of the language is that we only need six special forms_ "

P.S Anybody who downvotes = disagress, does he also have any counter-argument?

<comment><USER14> The "downvote if you disagree" has gotten to a rather stupid point here lately.

In nearly every submission I read the comments of these days, I see numerous perfectly fine and valuable comments in gray text.

Since so much good content ends up in that state, it renders such styling pointless. Gray text no longer means that the content is very likely commercial spam or otherwise without much value.

I even go out of my way to read all of those comments. With so much good content being downvoted these days, they often have some of the more insightful remarks.

<comment><USER15> _The "downvote if you disagree" has gotten to a rather stupid point here lately._

It's even gotten past that to the "flag if you disagree" point. I call that the "douchebag census data." Those users should be shunted to another "tier" of the site that's even subtler than hellbanning.

</comment></comment></comment></comment></comment></comment><comment><USER5> Another recommended reading is the book "Understanding Computation" that has a section dedicated to Lambda Calculus: [http://computationbook.com/](http://computationbook.com/)

</comment><comment><USER16> Anyone who likes this idea but wants to do it in C might enjoy this [http://www.buildyourownlisp.com/](http://www.buildyourownlisp.com/)

</comment><comment><USER17> Very interesting, as you might imagine.

Actually, LaTeX was introduced in 1984, when the author began his thesis, and TeX had been out for years. But they did not yet seem to be widely known. I began my thesis a few years after Norvig, and I started with troff, which was still the standard, but had terrible output. Then someone told me about TeX, and I wrote my whole thesis in plain TeX, using a Mac Plus (that I still have and that still works).

</comment><comment><USER18> Exercise for the reader: how might the representation Norvig uses for environments be changed if we assume all data is immutable? :)

</comment><comment><USER19> Nobody's heard of Hy then?

[https://github.com/hylang/tryhy](https://github.com/hylang/tryhy)

<comment><USER20> The only problem with Hy is that it's not, technically, a Lisp: it's Python with a Lisp syntax so that you can programmatically manipulate Python AST trees with a simple interface: plain-old-data-structures, iterators, and functions.

 _caveat_ I'm a core Hy developer. ;)

<comment><USER11> I don't understand how that wouldn't qualify as a Lisp? Does it matter what the level below is implemented out of?

<comment><USER20> Lisp is more than just parenthesis, just as Python is more than just whitespace-delimited blocks of text.

We can do some neat tricks by transforming a parenthetical syntax to Python AST that may even _seem_ like Lisp some of the time... but the semantics are and will always be Python without stretching truth and logic a little.

</comment></comment></comment></comment><comment><USER21> And here I was thinking that I'd been the first to have the kooky idea of implementing Scheme in Python: [https://github.com/scribu/scheme.py](https://github.com/scribu/scheme.py) :)

It was a really rewarding experience; definitely recommended!

</comment><comment><USER22> I love Norvig's writing. He has a way of writing in concisely and make code appear effortless.

<comment><USER23> And you get to the end and think "hey, I could have done that." One of the signs of a great teacher.

</comment></comment><comment><USER24> [http://www-inst.eecs.berkeley.edu/~cs61a/sp14/proj/scheme/sc...](http://www- inst.eecs.berkeley.edu/~cs61a/sp14/proj/scheme/scheme.html)

<comment><USER25> Just finished this project a month ago! It was surprisingly difficult, learned a heck of a lot. Go bears!</comment></comment>


Gene-edited cattle have a major screwup in their DNA - <AUTHOR> https://www.technologyreview.com/s/614235/recombinetics-gene-edited-hornless-cattle-major-dna-screwup/ <comment><USER2> DNA is only one of the formats to convey the information. there somewhat more to the picture than the sequence of base pairs in a region of DNA. analogy- we have so far decyphered binary code and declared that we may now inject bytes into the data structure. we actually know very little about how the DNA sequence and structural topology interacts with the rest of biology. not only do we have the genome, but we have the transcriptome, the proteome, and the exocyteome.

those are just the information systems that have been recognized and characterized in part. Virus may actually be a selected form of horizontal gene transfer that has escaped the selective factors constraining it and now has a destiny of its own.

In short we need to actually know what we are doing before we tinker with our own information systems. I suppose slaughter bound livestock are a better place to start as they are being raised to be eaten and do not have to be retired to convalescent facility for retired research animals to live as an abberent organism. ethics is a tough nut for sure, but making a major mistake that ends up escaping sequestration is a lot tougher.

<comment><USER3> How is this related to the problem in the article? They insertes successfully some gene, but they also inserted more genes by mistake. The additional genes are the problem, not something unrelated like the "structural topology".

<comment><USER2> structural topology is highly related to gene function, and also is part of what is being manipulated during the process. please tell me about trans- factors or cis- elements. please tell me about how we may choose one recognition sequence region from another when they are identical base pair sequences but are many Kb.p.'s up or downstream of the desired target sequence.

<comment><USER3> They used a plasmid. The plasmid had the gene they wanted and some gene to resist antibiotics. Both got copied. No topological problems.

<comment><USER2> i am acutely aware of what a plasmid is and how it is used. when you employ plasmid transfection there is at least 1000 iterations of the plasmid usually much more. the problem is topological. there is sequence interaction occuring at homologous non target sequences with topological state that allows access to the non target sequence.

If you think there is a basis for the argument that topology has nothing to do with it then you should write a grant proposal and experimental thesis. That thesis, if it passes preliminary peer review would be worth a PhD, as well as being a likely candidate for the nobel prize should it be independently confirmed. Such a discovery would turn Molecular Biology on its head.

BTW the modified gene [as in 1 gene per plasmid] is not copied, it is actually inserted [spliced] into the strand, it is not copied, and this is a VERY topologically dependent process.

</comment></comment></comment></comment></comment><comment><AUTHOR> Question: shouldn't we work towards gene editing ourselves?

Isn't that more logical?</comment>


A journalist discovered and reunited identical twins - <AUTHOR> https://www.latimes.com/world-nation/story/2019-08-07/how-a-journalist-discovered-and-reunited-identical-twins <comment><USER2> While this story isn't traditional "Hacker News" it's a very engrossing, compelling, and well written article.

<comment><USER3> That is precisely what Hacker News is about. Really well written articles. They come and go from time to time here on HN but there have been some really good ones.

</comment></comment><comment><USER4> I was always thinking highly of people, who are adopting orphans. Still do.

But after reading this article, I'm coming to conclusion, that even though adopting parents doing good deed, but by paying all "fees" they are indirectly sponsoring babies trafficking.

</comment><comment><USER5> > But reports were surfacing that government officials were snatching babies > to satisfy a lucrative adoption market. [...] one day when the girls were > almost 2 years old, five men working for family planning stormed the house, > restrained the aunt and took away the screaming toddler.

This is horrifying.

One could argue that managing population is essential for the country and the species, but there are incentive ways to do this without terror and force.

</comment><comment><USER6> the author barbara demick is remarkably prolific especially in that part of the world and an especially gifted writer. if you enjoyed this article, i recommend her book "nothing to envy" likely the most revealing books written about daily life in North Korea.

</comment><comment><USER7> [http://archive.is/ZsrJ9](http://archive.is/ZsrJ9)</comment>


Hazelcast and the Mythical PA/EC System - <AUTHOR> https://dbmsmusings.blogspot.com/2017/10/hazelcast-and-mythical-paec-system.html <comment><USER2> Hazelcast is a PA/EC system in PACELC</comment>


Carnegie Mellon's Never Ending Language Learner - <AUTHOR> http://scitedaily.com/the-never-ending-language-learner/

<comment><USER2> 1\. I'm thinking CYC is an existing database that knows cups are dishes; 2. If the article points to what useful information it has learned, I didn't find it.</comment>


Ask HN: Has anyone here programmed in Kotlin? What do you think about it? - <AUTHOR> I was looking at Kotlin and was curious. It looks very interesting feature wise but I worry about its long term viability given it's low presence on GitHub[1] and < 40 users on #kotlin on Freenode IRC. Is this worth writing a big project in?<p>[1] https://github.com/search?o=desc&q=language%3AKotlin&ref=searchresults&s=stars&type=Repositories&utf8= <comment><USER2> I started an open source Android project in Kotlin ([https://github.com/dodyg](https://github.com/dodyg)) three years ago so I have witnessed the language evolution from early on.

This is what I love about Kotlin:

\- It is IMHO the best language to develop native application in Android by far.

\- I was primarily a C# developer (still now) and I could pick up the language in a day. The language is quite small for people that has already known a programming language.

\- JetBrains is taking their time to get the language right. There is no 'swift syndrome' here.

\- They are really serious about the Java 100% compatibility.

\- The IDE support is world class.

\- It is a really pleasant language to use.

\- JetBrains is actually using the language for their own products.

\- The community is friendly and the language designers are approachable.

\- You can really mix and match Java and Kotlin code in the same project. You don't have to use it only in a green field projects.

<comment><USER3> What is the 'swift syndrome'?

<comment> J0-onas Im guessing making somwhat radical decision that are not backwards compatible.

However, Python 2/3 is a better example for breaking backwards compatibility.

<comment><USER4> I just started learning Swift, and I keep running into stackoverflow answers saying "Here's how it worked in 1.0. In 1.2 you have to do this instead. But in 2.0 you do it this other way."

</comment></comment></comment></comment><comment><USER5> I wrote about Kotlin quite some time ago.[0] I have to say that at the time, I was quite impressed by it all. There were some really good features, it had a much smaller dependency compared to Scala, and so packaging a Kotlin application was a lot easier than say an application in Scala. But to answer your question, there are a few benefits and drawbacks of Kotlin as a language and a platform:

\+ World class IDE support.

\+ Simple Language, that isn't as complicated as Scala (but this really depends on what features you end up using) but is expressive nonetheless.

\+ Really good Java compatibility (if that matters to you that is).

\- Language still does not have a 1.0 (although for a few GUI apps I've done, things are pretty stable)

\- Language has poor documentation compared to the likes of Java and Scala

\- Language has few learning resources (but two people in the Kotlin team are working to change that)

As far as Android development goes, Android Studio is built on top of the IntelliJ platform (which is Jetbrains' product) so I think you'll get really good android development support for Kotlin although I'm a little indifferent to this. I think that at one point go is going to become the defacto language for Android since google likes to keep everything in-house.

[0] [http://nafiulis.me/kotlin-koans-i.html](http://nafiulis.me/kotlin- koans-i.html)

<comment><USER6> "I think that at one point go is going to become the defacto language for Android since google likes to keep everything in-house."

As someone who writes Android/Java code for the day job but who prefers coding in Go whenever I have the chance, I'd love for this happen but I doubt it will anytime in the foreseeable future.

There's just way too much invested in all of the Android Java Platform/UI/etc APIs which would make little to no sense in Go even if you had good bindings for them.

Go will be increasingly supported in Android and it'll get some uptake from people writing games and apps that are primarily OpenGL based, but I just don't see how they could (without investing an absolute giant amount of resources and causing all sorts of developer balkanization), get from where the Android platform is now to an equivalent environment that is properly Go- esque for apps that make heavy use of the higher level platform APIs.

<comment><USER7> I had kinda hoped that the lawsuit over Java APIs would give them motivation to switch to Golang. :(

<comment><USER8> I hope not. There are plenty of people who would rather use even Java 6 than Go, and Kotlin is dramatically better than either of them.

</comment></comment></comment></comment><comment><USER9> At JetBrains we're using Kotlin on a few projects now. Some of them are internal, some are public facing. In addition, some of our existing (and new) products are now using Kotlin. IntelliJ IDEA 15 will be shipping with Kotlin plugin enabled by default.

Kotlin is a tool we created out of need. We're using it and we're relying on it, so I'd say it's got a very good long term viability.

<comment><USER10> What Kotlin still misses is somehow a good testing ability, to test it via Java Test Suites seems strange.

Also I still miss a good build tool. I mean Maven really sucks, Gradle is kind of okai, but there is no support of autoreload project on change (like sbt has via sbt-revolver or playframework internals) however that is mostly helping web development.

Also some other things aren't really written out, like threading or some kind of Akka stuff. Also these days a language needs Dependency Injection, a good Integration with JSR330 would be great.

Also for some functional workflows something like pattern matching would be great and a @tailrec annotation like scala.

And please, for gods sake, remove labels and break/while.

<comment><USER11> > What Kotlin still misses is somehow a good testing ability, to test it via > Java Test Suites seems strange.

Why?

> I mean Maven really sucks

Why?

> Also these days a language needs Dependency Injection

There's plenty of JVM libraries that provide it. Why does a language need to provide it?

<comment><USER10> Currently it sucks to write tests with JUnit while using Kotlin, there is Spek (Jetbrains made it(, but it's early (too early).

XML based Build Tool, I mean seriously? It should at least be somehow human readable.

A language should need a sane integration of it, not the library itself. Okai DI is definitly somewhat that isn't needed, but a good integration is still suitable.

I mean good Multithreading lives in RxKotlin which is based on RxJava, however I still think that Threading or some kind of Library which should handle mutli prozessors / async capabilities should live INSIDE the language (like go, erlang or lots of others).

I mean currently Java9 will get a lot of new things which will definitely help out Scala to compile faster and Java10 will bring these closer. So there is no real reason for a language that still lacks a lot of stuff. As already said, Kotlin is small, on some edges thats good, on some it's just too small and I don't get it why they built while, break and continue into a somewhat functional language. Especially when while, break and continue is really hard to handle / read.

<comment><USER12> For tests : I have had some nice experience writing jUnit tests with pitest (PIT) : there is a gradle plugin to do that in AS/Idea

The only issue I had was to ignore Package class to make pit work

For DI, Dagger2 works fine with kotlin

For multithreading : Quasar supports Kotlin (I'm waiting for quasar to support android though)

<comment><USER13> > For multithreading : Quasar supports Kotlin (I'm waiting for quasar to > support android though)

Have you opened up an issue on Quasar's repo ([https://github.com/puniverse/quasar](https://github.com/puniverse/quasar)) so Parallel Universe can track this for a possible milestone?

<comment><USER12> We don't need to : I read somewhere that it was on their roadmap...

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> I have written Kotlin for an Android app now in production. Having written plenty of Java for Android, Kotlin is really good. It feels like Java in some ways, but helps you more than gets in your way. Nullable/non-null features crush NullPointerException, which are the most common and annoying type of run-time error, this is actually a very pragmatic feature for professional programming. Overall it's less verbose than Java. It's not hardcore on functional programming as Scala is, but adds some FP niceties with its standard library, allowing you to use map/filter/reduce/etc functions on Iterables, which matches very nicely with RxJava if your project is using that already. Also, lambdas make it easier to use RxJava. And IntelliJ IDEA's plugin for Kotlin has a button "Convert Java file to Kotlin", which does a fairly good conversion.

The problems I had with Kotlin are minimal. When converting a Java file to Kotlin, I got ClassNameException (I might not remember the name correctly), but you just need to clean and rebuild the project. Lack of support for multiple constructors of a class made me scratch my head, but they added this support in a recent version. Overall Kotlin is a better Java (in less radical ways than Scala). The reason it's feasible for Android is that its size is comparable to small libraries like Retrofit, while Scala is huge and building Android apps together with sbt has been a nightmare for many who tried.

The adoption issue is a chicken and egg problem: long-term viability depends on people adopting it, and people want to adopt tools reliable in the long- term. So just do it. Java sucks anyway, I would do anything not to write it.

</comment><comment><USER15> Kotlin is what Java would have been if it had been designed today. It follows the same philosophy: emphasis on readability, familiarity and maintainability, with PL research and new paradigms being non-goals. It does not introduce new concepts that will revolutionize your development, opting instead to adopt a few well-proven features (null safety, data classes). It is very easy to learn, feels modern and fun. Kotlin offers only a minimal runtime library, instead focusing on making the Java libraries more fun to use. Compilation is fast, and performance is about identical to that of Java.

While other languages promise a huge productivity boost (though few deliver) at a high switching cost, using Kotlin is practically free. It interoperates with Java so smoothly that you can gradually transition by freely mixing Java and Kotlin files in the same package. Calling and passing objects from Kotlin to Java and vice-versa is nearly seamless.

IDE support is world-class, and Kotlin is the only language other than Java (AFAIK) that lets you use annotation processors, so you can make use of, say, Dagger's compile time verification of dependencies.

My favorite feature is smart casting. Inline functions are a poor-man's macros: powerful enough for many things, yet not too clever to be potentially confusing.

The only concerns are with adoption rates, and whether the evolutionary progress justifies a new language. I think that the extremely low switching costs make it at the very least worth a try. Why not start with a mixed Java/Kotlin project?

<comment><USER16> "Why not start with a mixed Java/Kotlin project?" Think that's a good idea. If you are missing AST transformations you can add Groovy to the game. All three languages in IntelliJ work really fine together. In eclipse you might have to rebuild the entire project when doing mixed language programming. I learned this were a problem with ecliupse, though.

</comment></comment><comment><USER17> I've been using Kotlin for about three months to develop an Android application that is now in production.

To be honest, I love it. Here's a comment I wrote a few days ago about my experience with it for Android development, from the perspective of someone coming from java:

"Seconding Kotlin coming from Java. It takes maybe 2 days to learn everything in the language if you already know Java, and it fixes pretty much all the warts that bother me about Java (the big ones for me are immutable references by default, first-class/higher-order functions, and unnullable-by-default references. Type inference and string interpolations are handy as well). It also has a small enough runtime/stdlib (unlike Scala or Clojure, which I've also tried) to make it practical to use in environments where startup time matters, specifically Android."

Compared to Scala, Kotlin is definitely less powerful. But there are three things that concern me about Scala: (1) really long compile times (2) a big runtime (problematic for Android development, although less of an issue on the server) and (3) a "the good parts" syndrome -- that is there are parts of the Scala standard library/common practices that everyone seems to agree are best to avoid. If Kotlin weren't around I think I would look to Scala as my go-to JVM language despite these issues, but given that Kotlin exists and gives me nearly all of the sugar I'd like from Scala without the pain, I'd rather develop in Kotlin.

I'm not particularly worried about the community size, although it would be wonderful if the language picked up steam. JetBrains has demonstrated a big long-term commitment to continued development, it's open source, and the Java interop is so seamless that the library ecosystem is a non-issue -- you can use code written in Java without even knowing the difference. And as dodyg says in another comment, the language is really small if you're coming from Java or C#, so there's not a lot of room for undefined or confusing behavior -- it's true that there really ought to be more documentation, but given how similar it is to other languages it should be pretty simple to translate code/examples from Java to Kotlin (IntelliJ even comes with an automatic Java -> Kotlin translator that just works).

</comment><comment><USER18> Apparently Google used it for prototyping the new data bindings library in Android.

[https://www.reddit.com/r/androiddev/comments/3egzq5/so_has_g...](https://www.reddit.com/r/androiddev/comments/3egzq5/so_has_google_started_using_kotlin/)

For me the language looks nice as alternative to Java 6 on Android (or 7 when targeting 4.4 onwards), but those break@label, continue@label, .... put me off.

<comment><USER8> I'm surprised how often this comes up. What's the big deal with this syntax? It's not even used all that often, only in some special circumstances.

</comment></comment><comment><USER19> After reading Mike Hearn's article on the subject[1], I'm convinced. The next project where I'd normally reach for Java and where I have some freedom in choice of language, I'd pick Kotlin instead.

[1] [https://medium.com/@octskyward/why-kotlin-is-my-next- program...](https://medium.com/@octskyward/why-kotlin-is-my-next-programming- language-c25c001e26e3)

</comment><comment><USER20> Well, let's look at the JVM landscape. First of all Oracle has (finally) picked up the pace in terms of evolving Java and the JVM.

This is a bit of a double edged sword for alternative JVM languages since on the one hand JVM improvements (like current SAMs and value types in Java 10) are a big win for all involved, but on the other, Java's evolution is very much a threat to Scala, Kotlin, and Ceylon in particular*

Why is Java's evolution a threat? As Java cherry picks functional idioms from, for example, Scala, the motivation for Java teams to pick up Scala is reduced. Arguably Kotlin is in a worse position as its main "problem" is being _too similar_ to Java. Already Java has deprecated the `_` character so shouldn't be any surprise to see `roster.stream().filter(_.getGender() == Person.Sex.MALE)`, land in the language [1]...getting pretty Scala-like o_O

Kotlin's window of opportunity is in the next 2-3 years, basically before Java 10 lands. If an ecosystem develops around it (likely one of the reasons adoption rates are so low at present) and their 1.0 comes on the scene soon, they can steal some limelight from Scala, and maybe put Ceylon in the rear view mirror.

* Clojure and JRuby are probably safe given their non-Java roots, and Groovy, not sure where it would be without Gradle.

[1] [https://docs.oracle.com/javase/tutorial/collections/streams/](https://docs.oracle.com/javase/tutorial/collections/streams/)

<comment><USER8> I doubt it. Java 10 is very, very unlikely to match even a fraction of the features Kotlin has. Oracle is very obviously continuing Sun's strategy of focusing on the JVM rather than the Java language.

Their roadmap is pretty clear for the coming years, and it's all things like value types, better arrays, better APIs, modularity, performance, better ways to do "unsafe" stuff, etc. The only major change to the Java language they seem to be exploring right now is improved generics/class specialisation, and only because that's needed for the value types project.

Kotlin has basic things like real properties, which Java still lacks after two decades. Along with many other features.

The big competitors for Kotlin are Scala and Ceylon.

<comment><USER13> > Oracle is very obviously continuing Sun's strategy of focusing on the JVM > rather than the Java language.

Absolutely. Oracle's strategy is very simple: Java should serve as the assembly language for the server side. The JVM should be the de-facto runtime. Like pron suggests, they are actively encouraging alternative JVM languages and I wouldn't be surprised if they invest in the JRuby/Jython implementations for quicker adoption.

As someone watching from the side, Oracle's strategy is brilliant.

<comment><USER8> Oracle has been investing significant resources in JRuby for some time via the Graal/Truffle research projects. They're quite impressive.

</comment></comment></comment></comment><comment><USER21> We built Roll for Android ( [http://tryroll.com](http://tryroll.com) ) in Kotlin -- we currently have ~17k lines and have been working on it since this Spring.

We wanted to iterate on a lot of the software structure we came up with for our Swift iOS app, and for a bunch of pieces we needed a powerful type system. So rather than just stick with Java -- as others have said, it's way too verbose, we started looking at alternatives. We wanted a strong type system. Scala has too much overhead for Android. Kotlin really stood out for us. This document by Jake Wharton at Square [https://docs.google.com/document/d/1ReS3ep- hjxWA8kZi0YqDbEhC...](https://docs.google.com/document/d/1ReS3ep- hjxWA8kZi0YqDbEhCqTt29hG8P44aA9W0DM8/edit?hl=en&forcehl=1#heading=h.v6i4iyf7kkxh) made the decision easier. So we took the risk.

And we love it!

The best features:

Null type safety!

Lambdas can be inlined! No need to be afraid of anonymous inner class overhead on the map/filter/fold of iterables.

Reified generics!

Extension functions!

Single-method interfaces/classes can be represented as lambdas! aka

      view.setOnClickListener(new View.OnClickListener() {
         @Override public void onClick(View v) { /* do something */ }
      });

becomes

      view.setOnClickListener { /* do something */ }

This is great for things like RxJava.

Speaking of which, the Java interoperability is fantastic. Any Android libraries we've tried work great from Kotlin.

Using these tools, we've built a simple dependency injection framework, a handful of really useful extensions on things like T? (for example monadic bind), a hack for algebraic data types and pattern matching, and of course a fairly complex app.

Android Studio's Kotlin support is fantastic (good job JetBrains!) -- it's a pleasure to use.

I think Kotlin is totally worth using. The biggest issue for us is the build time. Our build takes anywhere from 1.5 to 6 minutes depending on how much you've changed, but I've found that the type system is strong enough that you don't have to do too many build-change a line-rebuild cycles.

We'll be starting a blog soon to talk about some of the stuff we've been doing, but if you can't wait send me a message bkase at highlig.ht if you're interested in hearing more (I love talking about this stuff)

<comment><USER15> Kotlin is great, but I would like to point out a few things:

> Lambdas can be inlined!

Kotlin's inline functions are meant to serve as a poor man's macro system (to implement simple control structures) and/or for argument type specialization -- not to save the "inner class overhead" because, guess what? There isn't one! While HotSpot's JIT will certainly not inline lambdas in every circumstance (though it's getting better), it will inline them in all cases where Kotlin's inline functions can be used (and many others where they can't). It is possible, however, that inner classes do have some overhead on Android.

> Reified generics!

Kotlin does not reify generics, and like in Java, that's a good thing! Java's erased generics are precisely what makes polyglot interop easy.

<comment><USER8> Inlining is also about performance. Classes impose significant memory and code size overhead even if HotSpot does inline the code eventually .... but much code is still interpreted. And Kotlin also targets Android. Finding documentation about what optimisations ART does is difficult, but I imagine it's got a weaker compiler than HotSpot if only because it's newer.

<comment><USER15> Not directly related, but for completeness sake: Java 8 lambdas only generate classes for capturing lambdas, and even then, only at runtime (a class file isn't generated). Kotlin can't quite do that because it relies on method handles and invokedynamic, which are missing from Android.

Also, there are few compilers anywhere with optimizations as powerful as HotSpot :) And HotSpot compilation is only getting better and better. Java 9 will even let us use Graal as the optimizing compiler (i.e. instead of C2), which can do this: [https://twitter.com/ChrisGSeaton/status/619885182104043520](https://twitter.com/ChrisGSeaton/status/619885182104043520)

</comment></comment></comment></comment><comment><USER22> I have used it for a small amount of production code in a mixed Java / Groovy codebase coded using Intellij and Kotlin version 0.11.

Kotlin worked well - clear concise code, no null worries and no cast worries.

It is peculiarly refreshing to know that my code won't even compile if I try to call a method on null and that Intellij will underline the code in red and suggest a fix.

At the time I was using it I would say the quality of some of the code in the Kotlin API was questionable - specifically the jdbc code. I used the parts that seemed sensible and wrote additional code to provide the functionality I needed. I don't think that code is even in the standard API anymore.

<comment><USER23> > I have used it for a small amount of production code in a mixed Java / > Groovy codebase

Hope first priority was to replace the Groovy rather than the Java.

</comment></comment><comment><USER24> Yes, I've used kotlin to replace a large legacy Java application. Pretty critical to the business, sat in the middle interacting with. All upstream and downstream systems.

Kotlin certain ly made life easier in some places, most importantly it was fast and easy and a joy to work with.

<comment><USER13> How can I contact you to hear more about your experiences?

<comment><USER24> pm me :)

</comment></comment></comment><comment><USER25> It seems that Kotlin will be officially presented as next language for Android. IDEA and Android Studio will receive built-in full support for Kotlin in nearest future.

I write some parts of Telegram app in Kotlin. Pretty good after plain java. I can't rely on it in production yet (used in build chain).

My feelings that React Native + Kotlin could be awesome combination.

<comment><USER26> "It seems that Kotlin will be officially presented as next language for Android."

Source?

<comment><USER25> Just rumours. I hear that Kotlin will be preinstalled in nearest versions of Android Studio.

For google Kotlin can be very good language: it designed to compile to javascript, so you can write code for Android and Web in one language.

Also JetBrains developing (not a surprise) Android Studio for Google. JetBrains is most qualified company for building Java-based language.

<comment><USER9> Are you referring to Android Studio or IntelliJ IDEA? We will be shipping Kotlin bundled in IntelliJ IDEA 15. Regarding Android Studio, we don't develop Android Studio for Google. Google does. We develop IntelliJ IDEA Community Edition, which is the base on which Android Studio is built.

</comment></comment></comment></comment><comment><USER27> I've been using Kotlin on-and-off as a Java replacement and I've really enjoyed it.

A couple of months ago I used Kotlin to setup a Dropwizard project and it was a breeze so I put together an example on GitHub to serve as a starting point for others: [https://github.com/doomspork/kotlin- dropwizard](https://github.com/doomspork/kotlin-dropwizard)

<comment><USER13> Need more projects like this! Thank you!

<comment><USER27> You're welcome!

</comment></comment></comment><comment><USER28> Another language you may want to look at is Ceylon from RedHat, which has some interesting features (union and intersection types, notably)

<comment><USER29> [https://plugins.jetbrains.com/search/index?pr=idea&search=ce...](https://plugins.jetbrains.com/search/index?pr=idea&search=ceylon)

Everyone and their cousin can create a language, but without tooling then one is back to authoring in "dumb" editors and I will never ever tolerate that on a team again.

</comment></comment><comment><USER30> I today decided to try it on small project. I had a lot of class name clashes (wsimport from similar but different WSDLs). I had a nightmare in Java and Kotlin saved me, thanks to its smart import. Properties are much more readable than getters-setters. And there are a lot of sugar here and there, which makes programming more fun.

I literally spent may be 5 minutes reading their site. The language is extremely small and intuitive to pick up, if you had some experience with Scala.

IDE worked fine. I had few exceptions, but they didn't ruined anything. Refactorings worked. IDE support is very nice.

</comment><comment><USER31> I had never heard of Kotlin but after looking at the docs I am very impressed. I spend most of my time in the web development world (PHP, Javascript) but I am thinking about starting a small Android project.

I have zero Java knowledge so I wonder if it is feasible to jump straight into using Kotlin or to try and learn some Java first?

<comment><USER13> If you want to leverage the whole 100% interoperability of Java (which is a HUGE selling point for Kotlin), I think knowing _some_ Java will be extremely helpful. If you're starting a project from scratch, it might not be necessary if you're building on projects like dropwizard-kotlin, etc.

</comment></comment><comment><USER32> > I worry about its long term viability given it's low presence on GitHub[1] > and < 40 users on #kotlin on Freenode IRC

It's only on version 0.12.213. Bit premature to judge long term viability imho.

<comment><USER9> The minor version represents a milestone, currently at 12 and each of these is considerable effort, in terms of decisions and implementation of language features (as well as tooling).

<comment><USER13> hhariri - maybe it might be time to get a (rough?) roadmap so that we can plan around it. I know JetBrains is shooting for Q4, but would still be good to track it.

</comment></comment></comment><comment><USER33> I'm currently writing a book about Kotlin for Android Developers:[https://leanpub.com/kotlin-for-android- developers](https://leanpub.com/kotlin-for-android-developers)

Overall I think it is a really interesting language for Android (and I guess Java) developers. It's much cleaner and safer. I recommend at least taking some time to play with it and see how it looks. I also have some simple articles at my blog, antonioleiva.com, very basic and perfect to start with it.

<comment><USER13> Link for clickability: [http://antonioleiva.com](http://antonioleiva.com)

</comment></comment><comment><USER34> I toyed with Kotlin for Android development. It is very promising. It solves many of my annoyances with Java while keeping what is working.

I work in an 8 engineers Android team, switching to Kotlin for our Android app is not on the table at all though. Our huge codebase and complex build script can't be easily retuned to another language, even one compatible with Java and it is an added liability we don't want to deal with. If Google were to adopt it, it could very quickly gain steam for Android development.

</comment><comment><USER35> Always looking for something more simple than (my current) Scala.

\- Argued with the developers, they have not clue about Option/Maybe and what it's good for. They offer non-nullable type which solves just one - minor - problem with Null

\- No deconstruction

\- Their documentation in the beginning mixed features and planned features without discrimination. Spend a lot of time to find out trying to make them work that the features they've described in detail were fantasies.

\- With deconstruction I would give it a try in a project.

<comment><USER35> To clarify:

Option/Maybe solves the problem of things either being there or not (from databases, domain modelling, ...). As a side effect this solves NPEs.

Non-Nullable Types is there to solve (accessing non initialized variables) NPEs.

<comment><USER36> The question is, why should this be part of the language or standard library? This can easily be achieved by a library.

The Kotlin type system does help though/is essential to correctly implement Option types where other languages like C# can not.

The essential part is you can/should define an Option type with a non-null upper bound. Otherwise you would have a Some() that still might contain a null value. So the side affect of solving NPEs you speak of is only there if a language actually supports non-null upper bounds.

<comment><USER35> Without proper Option deconstruction and map()/flatMap() syntacic sugar Option code beside map() is not very pleasent to read or understand to my eyes :-(

</comment></comment></comment></comment><comment><USER37> I used it for a small Android project while AndroidStudio was still in beta. Had some minor hickups but it got better with every small upgrade. I was really happy to use it, it's a nice language, actually it was fun to use. When I didn't want to use the documentation I just wrote the code in Java and let the IDE translate that to Kotlin. Two things I liked the most: Null type safety and you don't need to catch every exception if you don't like.

</comment><comment><USER12> I have been using Kotlin in production for 2 Android apps since october 2013.

It made things simpler to write, develop and maintain.

One big downside, as of 0.12.1218, is that builds on Android are quite slow (I got 5min builds). But the Kotlin team is aware of the issue and working on it.

Once the kotlin builds on Android get fast enough, it will blow everything else out of the water.

If Google were to switch from Java to Kotlin for android, I wonder how Oracle would feel...

</comment><comment><USER16> I started looking into Kotlin already when it was M2. Always liked it a lot, because every feature has a reason to exist. Nothing is added without careful thought whether it is needed at all or could be solved in the library anyway. Scala would have been a much more consistent language if the Scala people had progressed in this way as well and Scala code would also be much easier to read.

Kotlin seems to have a killer feature which is Android development, which is of course good. But what about internal enterprise development? It makes me think whether Kotlin has enough added value to make people change from a safe haven like Java8 to Kotlin. Sure, much better build times and less problems with code readability when using Akka, Play, Spark with Kotlin instead of Scala. Also Kotlin offers much more power in exploiting the features of those tools compared to Java. But how many people use Akka or Spark? Nevertheless, I wish Kotlin all the best. I will always greatly prefer it over Java or Scala.

</comment><comment><USER38> It is officially supported by Jetbrains. I don't really see it as a full- fledged language but rather an extension of Java. I'm planning on trying out on my next Android app.

<comment><USER9> In what sense don't you view it as full-fledged?

<comment><USER38> Java interop is a "first-class" citizen, even more so than say Scala.

<comment><USER39> The same can be said for Clojure, but I haven't met anyone that would claim Clojure is not a "full-fledged" language. Interop has always been one feature, of many, that languages do or don't have (e.g. C++ interop with C, or C with Assembly).

</comment></comment></comment></comment><comment><USER40> How does Kotlin compare to Ceylon? Has anyone written something in both languages and can share their impression?

<comment><USER16> Kotlin is build with interoperability with Java in mind from the beginning. This is not the case in Ceylon. In fact some base types (Int, Long) in Ceylon don't match the corresponding Java type. Kotlin has extension methods which Ceylon has not. Ceylon has reified types, which Kotlin has not. Ceylon went 1.0 in November 2013. So far Ceylon seems not have caught any traction, which is unfortunate as it also is a language well-made in many ways. Kotlin has at least Android development to create some initial traction.

</comment></comment><comment><USER41> I wrote a small implementation of ListView in Kotlin a while back just to try it out [1]. The pros are pretty cool and some of the issues I mentioned in the readme have been fixed now (multiple constructors).

There are still a couple of issues though:

\- Debugger functionality in IDEA (maybe it's been fixed now?). It was pretty unusable last I tried.

\- (Android-specific) When extending Android framework classes you don't gain much benefit, since you'll be using the !! operator (override null-safety) a lot, and you'll be somewhat forced into a design pattern that takes away a lot of the power Kotlin offers.

If I were to use Kotlin, I'd use it for helper classes and extend View classes, etc. in plain old Java.

[1] [https://github.com/T-Spoon/Kotlist](https://github.com/T-Spoon/Kotlist)

</comment><comment><USER42> I've played a bit with Kotlin and have a much better knowledge of Scala, so I could be biased. I like Kotlin, it looks like Java should look like. Kotlin is "just" a better language and not a complete new World like Scala. In Scala it feels often wrong to use a Java lib instead of a Scala lib. So, Kotlin is a smooth upgrade for all Java developers.

But Scala is much, much more powerful than Kotlin. Just look at Scala Traits for example. I think, if you have good developers who are willing to learn and to improve, you can get more out of Scala. If you're not that lucky (and I think that is the usual case), you maybe better off with Kotlin.

<comment><USER8> Traits seem like an odd feature to pick. What are you thinking of, precisely? Kotlin interfaces are basically the same: they can contain method and property impls (same as Java 8). Do Scala traits have some additional feature I am unaware of?

I admit to a little bias: I've tried to get into Scala several times, but the bad documentation and often overly complex approach puts me off. A lot of Scala features seem like workarounds for other features sometimes. For instance value types in Scala have so many restrictions that they are barely value types at all (e.g. they can have only one member!) and so their primary use case appears to be implementing overhead free extension methods. But Kotlin supports extension methods directly. So whilst implicits+value types may appear to be two features that Kotlin lacks, when you boil it down, it turns out that it has simpler and faster approaches to the same thing.

That said, real value classes (with JVM support) will be good when they arrive.

<comment><USER42> Kotlin interfaces are essentially the same as Java interfaces. But Traits in Scala are more like (slightly) restricted multiple inheritance. They can have fields, they can be stacked ([http://www.artima.com/scalazine/articles/stackable_trait_pat...](http://www.artima.com/scalazine/articles/stackable_trait_pattern.html)), you can restrict the types where a trait can be mixed in.

Value types are useful to enforce certain types which helps to avoid million dollar mistakes like the NASA made when mixing inch and meter as simple floating point numbers.

All in all I think, that Kotlin is a good example of the 80:20 rule. You get the most useful concepts and convenience with a low investment. Maybe Kotlin hits a sweet spot in the JVM landscape.

<comment><USER16> "Kotlin interfaces are essentially the same as Java interfaces." Interfaces in Kotlin offer functionality beyond interfaces in Java. In Java interfaces can only have public methods. In Kotlin interfaces can also have (abstract) variables. Both, methods and vars, in Kotlin interfaces can be public and also protected. You need this if you don't want to break the encapsulation of your classes that implement an interface.

</comment></comment></comment></comment><comment><USER43> We're developing out Android app in Kotlin! It is a very promising language and as others have mentioned, the IDE support is superb, first class. Easy learning curve if you already know another language.

And since Kotlin also compiles to JS, we're writing our REST api client in it so that our Android app and web product can somewhat share the same codebase.

I think Kotlin can potentially go mainstream

</comment><comment><USER44> In my team, we are currently developing native Android app with Kotlin. At first, I wasn't sure it was going to be successful but when I looked back it was the best decision ever made to my team. Kotlin is short, concise yet powerful. Lambda, and extension are the best features. You can design your API interface in the most expressive way. It help makes communication between objects much much easier.

For Android development, it is even sweeter, who likes keep using `findViewById()`. Kotlin-Android-Extension does that automagically.

I even write my own HTTP lib for Android entirely in Kotlin. If you like to check it out, here it is ([https://github.com/kittinunf/Fuel](https://github.com/kittinunf/Fuel))

</comment><comment><USER45> I tried Kotlin ~2 years ago and generally liked it. However, one thing that I missed is the possibility to generate Javadoc besides KDoc. This would be useful when writing a library in Kotlin to Java developers who are 'not in the know'. Any idea if this is possible now?

<comment><USER46> Actually this is being worked on right now: [https://github.com/orangy/dokka/pull/32](https://github.com/orangy/dokka/pull/32)

</comment></comment><comment><USER47> After reading this and seeing some Jetbrains blog posts about Kotlin before, I decided to try it out.

I downloaded Intellij IDEA Community Edition, and with Java 7 already installed on my machine (OS X 10.10 - I use Java for RubyMine support), I went through the tutorial here: Getting Started with IntelliJ IDEA - [http://kotlinlang.org/docs/tutorials/getting- started.html](http://kotlinlang.org/docs/tutorials/getting-started.html)

I started at about 12:55 (download time in Firefox d/l mgr says Intellij d/l completed at 12:58). It's currently 2:13. So ~1h 20m later.

Some notes:

\- First thing I did was install IDEA and then install the Kotlin plugin in IDEA.

\- Next was creating my first project.

\- Had to let IDEA know that I have a JDK when creating the project. Took me some time to understand. Once I added this I was able to create a Java project.

\- The tutorial references creating a Java Module but I didn't know what that meant (still don't really, just know that I had to pick Java from the lefthand-side of the New Project window, and nowhere on my screen is Java Module mentioned). I checked off Kotlin in the Additional Libraries and Frameworks box and off I went.

\- Also in creating a project, I get an error message that the library I'm specifying doesn't exist, but this doesn't seem to break anything so I ignore it.

\- Every time I open a project in Intellij I get an error message: "IDE Internal Error occurred. Click to see details and submit a bug report." I click to see the details but the error message just disappears and it seems like there's no actual error at this point, stuff just continues to work.

\- screenshots are out of date or else different for Community Edition. The wizard doesn't have the "Create Kotlin Library" popups, but some balloons pop up on the top righthand-side and allow me to do the same thing, I think, copying some jars into my project's `lib` directory.

\- personally I find it slightly confusing that the tutorial asks for the file to be named `app` (as in `app.kt`), and would have preferred if it was called `hello.kt`, but maybe this is some kind of Kotlin convention, so I went with it.

\- having created the project and the `app` Kotlin source code file, creating the Hello World program was easy and ran as shown in the tutorial.

\- I did one bit of cleanup in here: I accidentally named my module folder "HellowWorld" instead of "HelloWorld" (though I think the tutorial screenshots reference plain-old "kotlin") and I poked around in IDEA for a few minutes trying to rename it. I couldn't see how, without possibly screwing things up or having to change a few path names. Being worried I'd miss some, I closed the project and renamed the directory in Terminal, and was able to open it up successfully again in IDEA.

So now I was finished the Getting Started with IntelliJ IDEA tutorial. I decided to proceed but it was a little bit unclear where I was supposed to go. I would have liked to see a suggested next page link on the bottom of the tutorial, but after clicking around I ended up on the Kotlin Koans page - [http://kotlinlang.org/docs/tutorials/koans.html](http://kotlinlang.org/docs/tutorials/koans.html) .

So I followed the Koan tutorial and it asked me to do a git clone of the Koan repo. I did that and opened the directory as a project in IDEA. `ls -l` shows me that the modified time on the koans dir is `25 Jul 01:21`. I believe that's actually the creation time (which is what I want, anyway, so you can see how my progress is going) since I have been modifying stuff up to the point that I wrote this post. (It's now 2:33, btw.)

The basic concept of the Koan tutorial is that a bunch of pre-written tests fail and you have to make them pass, one by one.

\- I was able to run the tests and I find it a bit confusing where I can accidentally switch between running a single test or a whole test file, but I guess that's my inexperience with IDEA showing.

\- the git repo dir is named `workshop-jb` -- I don't know what this means, but I'd prefer it to be named `koans`

\- I've finished up-to-and-including `_4_String_Templates` so far, i.e. 4 directories worth of tests.

\- I haven't yet referenced the `resolutions` branch of the repo, which the tutorial page tells me contains solutions to making all the tests pass. I figured I'd learn more by solving them on my own first. Maybe at some point I'll go back and take a look at the reference solutions.

\- Running the tests and seeing them fail prints out some help messages about how to make the tests pass. I have found it a little bit confusing navigating back and forth between the reference code they show you at the top of the Koan file that the test executes, the example Java code they sometimes tell you to reference/convert to Kotlin, and the test. In the first, second, and third case, I found the reference code to be confusing -- I couldn't quite tell how it was supposed to help me pass the tests. In all four cases I found making the tests pass to actually end up being quite simple, but I was intimidated by the blob of reference code at the top of the `.kt` file and wasn't always sure what exactly I was to take away from it. I think it is definitely possible to trim these reference bits down and make them very specifically relevant to fixing the tests. I think they are trying to introduce a lot of features of the language at the same time as giving you what you need to pass the tests, and I find it a bit overwhelming.

\- I've made a few attempts to read through the Reference documentation ([http://kotlinlang.org/docs/reference/](http://kotlinlang.org/docs/reference/)) and it looks interesting, but ultimately I don't think it helped me to make the test pass at all. I am not sure when/where I'd use it, but it did help me understand one of the labelled break/return comments that is posted somewhere in this comment thread. (Personally, I think that's a cool feature. I first encountered it in uC++ - [http://plg.uwaterloo.ca/usystem/uC++.html](http://plg.uwaterloo.ca/usystem/uC++.html) .)

\- Last thought: build times are IMO quite slow. I'm changing exactly one short file and it takes several seconds to run the new code, most of the IDEA status seeming to be in the "make" step of the process.

Ok, I guess those are my full thoughts for now, I am sorry if this brain dump was too long but I figured someone might get some benefit out of it. For reference, I've been programming for ~20 years now and I was only able to really get started when I first read one of my all-time favorite programming books, C for Dummies :) I was a DOS-fluent 13-year old at the time, and I'd tried reading some others and found them impenetrable. I think the ease of reading and trying shit out and the humor that I found in that book shaped my tastes for learning considerably, and while I don't think every programming tutorial has to be as gentle an introduction as that book was, I think it has a lot to be learned from in terms of programming writing. It's now 2:46. I am tired and going to bed!

<comment><USER9> Your brain dump is fantastic feedback for us. Can really help us improve the getting started and docs. Thanks for this!

<comment><USER48> I certainly recognize some of these pain points :) the need to register JDKs is not presented in a manner that's easy to understand.

Then there's the warning about unregistered VCS roots. I confess that rather than looking into the meaning of this warning and trying to fix it, I just uninstall the VCS plugin (git in my case) and do revision control outside of IDEA (TortoiseGit).

</comment></comment></comment><comment><USER49> It was awesome 1 year ago and I think I it supports annotations now, so I'd go for it.

</comment><comment><USER50> I've written an Android game in Kotlin:

[https://www.youtube.com/watch?v=rISBeabXhvM](https://www.youtube.com/watch?v=rISBeabXhvM)

</comment><comment><USER51> Evaluated it but decided to go with C# because it didn't fix a few issues i have with java, specifically generics over value types and structs.

<comment><USER13> Sadly, this is true. C# is just a superior language. The CLR though is arguably an inferior runtime when compared to the JVM -- maybe it'll catch up.

</comment></comment><comment><USER52> There are some people on Livecoding.tv programming in Kotlin. Which project are you thinking of building in Kotlin?

</comment><comment><USER53> Where's Kotlin?

<comment><USER54> Kotlin is in the kitchen! (with Bryan)</comment></comment>


Show HN: AI basketball analysis web App and API - <AUTHOR> https://github.com/chonyy/AI-basketball-analysis <comment><USER2> It's quite satisfying to watch. And the trajectory looks really cool! Nice Work.</comment>


Ask HN: Is BUPA's 'opt-out by email' legal? - <AUTHOR> https://www.bupa.co.uk/health/health-assessments/forms/health-assessments-contact
The form at the above url contains the following statement:
"If you don't want to receive marketing about Bupa products and services that we think are relevant to you, please contact us at firstname.lastname@example.com"
Does anyone know if this is actually legal? <comment><USER2> A quick search of "GDPR opt-in" suggests that it isn't.

Some nuances might exist due to Brexit, but I think the differences don't apply in this case (see [https://www.cookiebot.com/en/uk- gdpr/](https://www.cookiebot.com/en/uk-gdpr/) ).</comment>


Show HN: Convos, a OSS persistent IRC web client built using Mojo and Redis - <AUTHOR> http://convos.by

<comment><USER2> I suppose it's only a matter of time before one of these persistent web clients / services converts me, but my current setup works surprisingly well:

\- Irssi + screen on my server.

\- IrssiNotifier [1] for push notifications to my Android phone when I'm hilighted/PM'd.

\- Connect from my phone using Irssi ConnectBot [2], which is just an SSH client that supports gestures for interacting with Irssi (swipe left/right to switch channels, double tap to go to a hilight, swipe up/down to scroll the channel log, etc).

\- Connection via mosh [3] instead of plain SSH. Mosh uses UDP, which allows persistent connections when switching from Wi-Fi to cellular data, or when data connections are spotty, etc. On my phone, I actually use a patched version of Irssi ConnectBot [4] which supports mosh.

That said, as well as this works, I've always kept an envious eye on browser- based implementations like this. I love thinking about all the fun integrations that would be possible to make IRC a much more rich experience: automatically showing YouTube thumbnails/descriptions, expanding shortened links, hover-to-show image links, etc.

[1]: [https://play.google.com/store/apps/details?id=fi.iki.murgo.i...](https://play.google.com/store/apps/details?id=fi.iki.murgo.irssinotifier&hl=en) [2]: [https://play.google.com/store/apps/details?id=org.woltage.ir...](https://play.google.com/store/apps/details?id=org.woltage.irssiconnectbot&hl=en) [3]: [http://mosh.mit.edu/](http://mosh.mit.edu/) [4]: [http://dan.drown.org/android/mosh/](http://dan.drown.org/android/mosh/)

<comment><USER3> I might give that setup a shot. I've been using ZNC + AndChat for awhile, but some of the warts in it are starting to really annoy me; namely it's multiple- server functionality.

I typically dislike having to run things in screen though. It's not that bloody hard to create a daemon in linux.

<comment><USER4> It wouldn't make sense to run irssi as a daemon though as it's got a proper UI to it (not sure if it's written in ncurses or not, but it's that sort of thing). So this is the type of set up that screen is ideal for.

I agree about the annoyances of AndChat though - and specifically the multiple-server implementation thing you mentioned. Personally I still prefer that to running screen+irssi on a touch screen phone (I used to run that set up back when I had the Google G1 / HTC Dream - but personally I don't enjoy using irssi on a touch screen)

</comment></comment></comment><comment><USER5> I had fun a year or so ago messing around with a web based IRC client. I never got around to adding bouncer like functionality or a few other key pieces that would make it my everyday IRC client. A few key pieces lacking in my project are: auto complete nicks, auto reconnect when connection is lost, etc. But it was fun and thats why I did it, cool project and good luck keeping it going!

My project is in node.js: [https://github.com/cjstewart88/nirc](https://github.com/cjstewart88/nirc)

<comment><USER6> Convos has auto complete for commands and nicks, and the auto reconnect _should_ work, though I think it's hard making good tests for it.

</comment></comment><comment><USER7> So... an open-source, self-hosted version of IRCCloud, with the server written in Perl?

I'm a bit too happy with IRCCloud to switch, so I'm not really in the target audience. Still, I don't run across Perl projects too often these days; nice to see some variety. :)

<comment><USER6> Got any killer features that we should add to Convos?

<comment><USER7> 1\. A publically available demo/sandbox, so people who are curious but lazy can take it for a spin.

2\. Native mobile clients.

</comment></comment></comment><comment><USER8> Nice! I had been thinking about making something similar. There are very few quality web IRC clients out there. I had a chromebook for a while, and I was stuck using Mibbit which is pretty terrible.

</comment><comment><USER9> I didn't know that Mojolicious supports hot deployment...thanks for linking to the deployment guide!

</comment><comment><USER10> See also kiwiric. ALthough they have yet to to deliver on persistence.

</comment><comment><USER11> last time i worked with Perl was 2007, but Mojolicious looks awesome!</comment>


Trump orders review of visa program to encourage hiring Americans - <AUTHOR> http://www.reuters.com/article/us-usa-trump-visa-idUSKBN17K02U <comment><USER2> If the U.S. stops doing business with people in other countries, either hiring them or buying their products, then who will hire Americans and buy American products?

<comment><USER3> Who's saying anything about not doing business with people in other countries or anything that you mentioned? What's happening now is a push to try to hire Americans instead of immediately just reaching for a foreign worker in a system that's been ripe for abuse for way too long.

There's plenty of business going on with other countries and their citizens.</comment></comment>